Mon Jul 29 11:12:42 UTC 2024 I: starting to build rocksdb/trixie/armhf on jenkins on '2024-07-29 11:12' Mon Jul 29 11:12:42 UTC 2024 I: The jenkins build log is/was available at https://jenkins.debian.net/userContent/reproducible/debian/build_service/armhf_18/6749/console.log Mon Jul 29 11:12:42 UTC 2024 I: Downloading source for trixie/rocksdb=9.3.1-1 --2024-07-29 11:12:42-- http://deb.debian.org/debian/pool/main/r/rocksdb/rocksdb_9.3.1-1.dsc Connecting to 46.16.76.132:3128... connected. Proxy request sent, awaiting response... 200 OK Length: 2339 (2.3K) [text/prs.lines.tag] Saving to: ‘rocksdb_9.3.1-1.dsc’ 0K .. 100% 280M=0s 2024-07-29 11:12:42 (280 MB/s) - ‘rocksdb_9.3.1-1.dsc’ saved [2339/2339] Mon Jul 29 11:12:42 UTC 2024 I: rocksdb_9.3.1-1.dsc -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Format: 3.0 (quilt) Source: rocksdb Binary: librocksdb-dev, librocksdb9.3, rocksdb-tools Architecture: amd64 arm64 armel armhf loong64 ppc64el mips mipsel mips64el s390x i386 riscv64 Version: 9.3.1-1 Maintainer: Laszlo Boszormenyi (GCS) Homepage: https://rocksdb.org/ Standards-Version: 4.7.0 Vcs-Browser: https://salsa.debian.org/debian/rocksdb Vcs-Git: https://salsa.debian.org/debian/rocksdb.git Build-Depends: debhelper-compat (= 13), cmake, libgflags-dev, libsnappy-dev, libbz2-dev, zlib1g-dev, liblz4-dev, libzstd-dev Package-List: librocksdb-dev deb libdevel optional arch=amd64,arm64,armel,armhf,loong64,ppc64el,mips,mipsel,mips64el,s390x,i386,riscv64 librocksdb9.3 deb libs optional arch=amd64,arm64,armel,armhf,loong64,ppc64el,mips,mipsel,mips64el,s390x,i386,riscv64 rocksdb-tools deb database optional arch=amd64,arm64,armel,armhf,loong64,ppc64el,mips,mipsel,mips64el,s390x,i386,riscv64 Checksums-Sha1: adec06b49e4e87a57eaf642aa07a35d16d19f682 13512627 rocksdb_9.3.1.orig.tar.gz 9f5986428430925cd525c6c8d113a2494776894b 10936 rocksdb_9.3.1-1.debian.tar.xz Checksums-Sha256: e63f1be162998c0f49a538a7fe3fcac0e40cad77ee47d5592a65bca50f7c4620 13512627 rocksdb_9.3.1.orig.tar.gz 9e5077c1c2de0e05e421e2ea058f179cc1276967cb13b4cc409b12b77e4abdb5 10936 rocksdb_9.3.1-1.debian.tar.xz Files: eb1d367aebd8069d8e1ac4d4735f1c9c 13512627 rocksdb_9.3.1.orig.tar.gz d8b6a68756fa6b8367091ddb50565d49 10936 rocksdb_9.3.1-1.debian.tar.xz -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEmbRSsR88dMO0U+RvvthEn87o2ogFAmaZuawACgkQvthEn87o 2oh7oA/9HQMbIEtqOR5mVS7oTDKbFzsBvnU1D0czP0LbC4wfIHSZaMAn0wF1on6m 6y4g2ARx1kPP3grMupPBQ5uVoLtMEbOeCNXF8WgAZENEuAQlsigPVoFFjNucyEQx 9W5XliBLsRywDEddJ9ySTCvcA4/Ffs8yYSsD457kk3i7uznja12oXGWTC339IqR4 1E9z1fDmVwClPU3wM/f9Scrj2K2STjqULTZ3YbPhD5jeKu9EePNO5xQcwFeNygM2 RwOvnqPikDQpB+ji1mIbI26BuUEuQl72Q6fQmLQJUg/MzPYM+Cp2QfZYETbAp4PV M78gfR7g8stNq2461OhcKaTMsn+CMIL4xLEkivOrrU3+ANjulpv1WibJ3kzN4d85 DQfoSuFbupyp3FCUoEC8SoI2dHF7UcLV+mA4SX8TtDE+ugUBZnjOeGLRAO7OKCwH cHY77Pk5y2rqzD2qwPBantgCeD8XTCahgDwlqWp7O87k3hhrr/F0DAxksK+HuuRX RJekuJgnrPwF0P6YGBsy89WKpHIDF928DNmCTPujNFAuDK12cBnoG/+HscSCEamw vOrB0/Xy4aPLZjIHnW8szGYQ6h3lZeaXlgZZJUpF2SIwhuV+4xFmgLTFqQwfySgC l7fNXwlcyoHjD54TJbnT9nVxaK/PCMT+Y82/S4EAjIDtlCOwAQ4= =Ffyx -----END PGP SIGNATURE----- Mon Jul 29 11:12:42 UTC 2024 I: Checking whether the package is not for us Mon Jul 29 11:12:42 UTC 2024 I: Starting 1st build on remote node ff64a-armhf-rb.debian.net. Mon Jul 29 11:12:42 UTC 2024 I: Preparing to do remote build '1' on ff64a-armhf-rb.debian.net. Mon Jul 29 11:54:31 UTC 2024 I: Deleting $TMPDIR on ff64a-armhf-rb.debian.net. I: pbuilder: network access will be disabled during build I: Current time: Sun Jul 28 23:12:54 -12 2024 I: pbuilder-time-stamp: 1722251574 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/trixie-reproducible-base.tgz] I: copying local configuration W: --override-config is not set; not updating apt.conf Read the manpage for details. I: mounting /proc filesystem I: mounting /sys filesystem I: creating /{dev,run}/shm I: mounting /dev/pts filesystem I: redirecting /dev/ptmx to /dev/pts/ptmx I: policy-rc.d already exists I: Copying source file I: copying [rocksdb_9.3.1-1.dsc] I: copying [./rocksdb_9.3.1.orig.tar.gz] I: copying [./rocksdb_9.3.1-1.debian.tar.xz] I: Extracting source gpgv: Signature made Fri Jul 19 00:56:12 2024 gpgv: using RSA key 99B452B11F3C74C3B453E46FBED8449FCEE8DA88 gpgv: Can't check signature: No public key dpkg-source: warning: cannot verify inline signature for ./rocksdb_9.3.1-1.dsc: no acceptable signature found dpkg-source: info: extracting rocksdb in rocksdb-9.3.1 dpkg-source: info: unpacking rocksdb_9.3.1.orig.tar.gz dpkg-source: info: unpacking rocksdb_9.3.1-1.debian.tar.xz dpkg-source: info: using patch list from debian/patches/series dpkg-source: info: applying build_reproducible.patch dpkg-source: info: applying fix_db_test.patch dpkg-source: info: applying no_rpath.patch dpkg-source: info: applying library_version.patch dpkg-source: info: applying ppc64.patch dpkg-source: info: applying armv7_support.patch dpkg-source: info: applying mips.patch dpkg-source: info: applying arm.patch dpkg-source: info: applying 0001-replace-old-sync-with-new-atomic-builtin-equivalents.patch dpkg-source: info: applying rely-on-default-for-optimization-on-Power.patch dpkg-source: info: applying add-support-for-loong64.patch I: Not using root during the build. I: Installing the build-deps I: user script /srv/workspace/pbuilder/26094/tmp/hooks/D02_print_environment starting I: set BUILDDIR='/build/reproducible-path' BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' BUILDUSERNAME='pbuilder1' BUILD_ARCH='armhf' DEBIAN_FRONTEND='noninteractive' DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=5 ' DISTRIBUTION='trixie' HOME='/root' HOST_ARCH='armhf' IFS=' ' INVOCATION_ID='c50a31170d2d44c2991fd76e2dd0e3cd' LANG='C' LANGUAGE='en_US:en' LC_ALL='C' MAIL='/var/mail/root' OPTIND='1' PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' PBCURRENTCOMMANDLINEOPERATION='build' PBUILDER_OPERATION='build' PBUILDER_PKGDATADIR='/usr/share/pbuilder' PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' PBUILDER_SYSCONFDIR='/etc' PPID='26094' PS1='# ' PS2='> ' PS4='+ ' PWD='/' SHELL='/bin/bash' SHLVL='2' SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.WA45e2M5/pbuilderrc_VAQs --distribution trixie --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.WA45e2M5/b1 --logfile b1/build.log rocksdb_9.3.1-1.dsc' SUDO_GID='114' SUDO_UID='109' SUDO_USER='jenkins' TERM='unknown' TZ='/usr/share/zoneinfo/Etc/GMT+12' USER='root' _='/usr/bin/systemd-run' http_proxy='http://10.0.0.15:3142/' I: uname -a Linux ff64a 6.1.0-23-arm64 #1 SMP Debian 6.1.99-1 (2024-07-15) aarch64 GNU/Linux I: ls -l /bin lrwxrwxrwx 1 root root 7 Jun 5 22:35 /bin -> usr/bin I: user script /srv/workspace/pbuilder/26094/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy Version: 0.invalid.0 Architecture: armhf Maintainer: Debian Pbuilder Team Description: Dummy package to satisfy dependencies with aptitude - created by pbuilder This package was created automatically by pbuilder to satisfy the build-dependencies of the package being currently built. Depends: debhelper-compat (= 13), cmake, libgflags-dev, libsnappy-dev, libbz2-dev, zlib1g-dev, liblz4-dev, libzstd-dev dpkg-deb: building package 'pbuilder-satisfydepends-dummy' in '/tmp/satisfydepends-aptitude/pbuilder-satisfydepends-dummy.deb'. Selecting previously unselected package pbuilder-satisfydepends-dummy. (Reading database ... 19503 files and directories currently installed.) Preparing to unpack .../pbuilder-satisfydepends-dummy.deb ... Unpacking pbuilder-satisfydepends-dummy (0.invalid.0) ... dpkg: pbuilder-satisfydepends-dummy: dependency problems, but configuring anyway as you requested: pbuilder-satisfydepends-dummy depends on debhelper-compat (= 13); however: Package debhelper-compat is not installed. pbuilder-satisfydepends-dummy depends on cmake; however: Package cmake is not installed. pbuilder-satisfydepends-dummy depends on libgflags-dev; however: Package libgflags-dev is not installed. pbuilder-satisfydepends-dummy depends on libsnappy-dev; however: Package libsnappy-dev is not installed. pbuilder-satisfydepends-dummy depends on libbz2-dev; however: Package libbz2-dev is not installed. pbuilder-satisfydepends-dummy depends on zlib1g-dev; however: Package zlib1g-dev is not installed. pbuilder-satisfydepends-dummy depends on liblz4-dev; however: Package liblz4-dev is not installed. pbuilder-satisfydepends-dummy depends on libzstd-dev; however: Package libzstd-dev is not installed. Setting up pbuilder-satisfydepends-dummy (0.invalid.0) ... Reading package lists... Building dependency tree... Reading state information... Initializing package states... Writing extended state information... Building tag database... pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) The following NEW packages will be installed: autoconf{a} automake{a} autopoint{a} autotools-dev{a} bsdextrautils{a} cmake{a} cmake-data{a} debhelper{a} dh-autoreconf{a} dh-strip-nondeterminism{a} dwz{a} file{a} gettext{a} gettext-base{a} groff-base{a} intltool-debian{a} libarchive-zip-perl{a} libarchive13t64{a} libbrotli1{a} libbz2-dev{a} libcom-err2{a} libcurl4t64{a} libdebhelper-perl{a} libelf1t64{a} libexpat1{a} libfile-stripnondeterminism-perl{a} libgflags-dev{a} libgflags2.2{a} libgssapi-krb5-2{a} libicu72{a} libjsoncpp25{a} libk5crypto3{a} libkeyutils1{a} libkrb5-3{a} libkrb5support0{a} libldap-2.5-0{a} liblz4-dev{a} libmagic-mgc{a} libmagic1t64{a} libnghttp2-14{a} libpipeline1{a} libproc2-0{a} libpsl5t64{a} librhash0{a} librtmp1{a} libsasl2-2{a} libsasl2-modules-db{a} libsnappy-dev{a} libsnappy1v5{a} libssh2-1t64{a} libtool{a} libuchardet0{a} libuv1t64{a} libxml2{a} libzstd-dev{a} m4{a} man-db{a} po-debconf{a} procps{a} sensible-utils{a} zlib1g-dev{a} The following packages are RECOMMENDED but will NOT be installed: bzip2-doc ca-certificates curl krb5-locales libarchive-cpio-perl libldap-common libltdl-dev libmail-sendmail-perl libsasl2-modules linux-sysctl-defaults lynx psmisc publicsuffix wget 0 packages upgraded, 61 newly installed, 0 to remove and 0 not upgraded. Need to get 31.3 MB of archives. After unpacking 115 MB will be used. Writing extended state information... Get: 1 http://deb.debian.org/debian trixie/main armhf libproc2-0 armhf 2:4.0.4-5 [55.8 kB] Get: 2 http://deb.debian.org/debian trixie/main armhf procps armhf 2:4.0.4-5 [863 kB] Get: 3 http://deb.debian.org/debian trixie/main armhf sensible-utils all 0.0.24 [24.8 kB] Get: 4 http://deb.debian.org/debian trixie/main armhf libmagic-mgc armhf 1:5.45-3 [314 kB] Get: 5 http://deb.debian.org/debian trixie/main armhf libmagic1t64 armhf 1:5.45-3 [98.1 kB] Get: 6 http://deb.debian.org/debian trixie/main armhf file armhf 1:5.45-3 [42.0 kB] Get: 7 http://deb.debian.org/debian trixie/main armhf gettext-base armhf 0.22.5-1 [195 kB] Get: 8 http://deb.debian.org/debian trixie/main armhf libuchardet0 armhf 0.0.8-1+b1 [65.7 kB] Get: 9 http://deb.debian.org/debian trixie/main armhf groff-base armhf 1.23.0-5 [1091 kB] Get: 10 http://deb.debian.org/debian trixie/main armhf bsdextrautils armhf 2.40.2-1 [87.8 kB] Get: 11 http://deb.debian.org/debian trixie/main armhf libpipeline1 armhf 1.5.7-2 [33.3 kB] Get: 12 http://deb.debian.org/debian trixie/main armhf man-db armhf 2.12.1-2 [1376 kB] Get: 13 http://deb.debian.org/debian trixie/main armhf m4 armhf 1.4.19-4 [264 kB] Get: 14 http://deb.debian.org/debian trixie/main armhf autoconf all 2.71-3 [332 kB] Get: 15 http://deb.debian.org/debian trixie/main armhf autotools-dev all 20220109.1 [51.6 kB] Get: 16 http://deb.debian.org/debian trixie/main armhf automake all 1:1.16.5-1.3 [823 kB] Get: 17 http://deb.debian.org/debian trixie/main armhf autopoint all 0.22.5-1 [723 kB] Get: 18 http://deb.debian.org/debian trixie/main armhf libicu72 armhf 72.1-5 [9075 kB] Get: 19 http://deb.debian.org/debian trixie/main armhf libxml2 armhf 2.9.14+dfsg-1.3+b3 [598 kB] Get: 20 http://deb.debian.org/debian trixie/main armhf libarchive13t64 armhf 3.7.2-2.1 [304 kB] Get: 21 http://deb.debian.org/debian trixie/main armhf libbrotli1 armhf 1.1.0-2+b4 [293 kB] Get: 22 http://deb.debian.org/debian trixie/main armhf libkrb5support0 armhf 1.21.3-3 [30.0 kB] Get: 23 http://deb.debian.org/debian trixie/main armhf libcom-err2 armhf 1.47.1-1 [22.1 kB] Get: 24 http://deb.debian.org/debian trixie/main armhf libk5crypto3 armhf 1.21.3-3 [75.8 kB] Get: 25 http://deb.debian.org/debian trixie/main armhf libkeyutils1 armhf 1.6.3-3 [7908 B] Get: 26 http://deb.debian.org/debian trixie/main armhf libkrb5-3 armhf 1.21.3-3 [283 kB] Get: 27 http://deb.debian.org/debian trixie/main armhf libgssapi-krb5-2 armhf 1.21.3-3 [114 kB] Get: 28 http://deb.debian.org/debian trixie/main armhf libsasl2-modules-db armhf 2.1.28+dfsg1-6 [18.0 kB] Get: 29 http://deb.debian.org/debian trixie/main armhf libsasl2-2 armhf 2.1.28+dfsg1-6 [50.1 kB] Get: 30 http://deb.debian.org/debian trixie/main armhf libldap-2.5-0 armhf 2.5.18+dfsg-2 [162 kB] Get: 31 http://deb.debian.org/debian trixie/main armhf libnghttp2-14 armhf 1.62.1-2 [63.7 kB] Get: 32 http://deb.debian.org/debian trixie/main armhf libpsl5t64 armhf 0.21.2-1.1 [55.6 kB] Get: 33 http://deb.debian.org/debian trixie/main armhf librtmp1 armhf 2.4+20151223.gitfa8646d.1-2+b4 [53.2 kB] Get: 34 http://deb.debian.org/debian trixie/main armhf libssh2-1t64 armhf 1.11.0-6 [199 kB] Get: 35 http://deb.debian.org/debian trixie/main armhf libcurl4t64 armhf 8.8.0-4 [399 kB] Get: 36 http://deb.debian.org/debian trixie/main armhf libexpat1 armhf 2.6.2-1 [83.5 kB] Get: 37 http://deb.debian.org/debian trixie/main armhf libjsoncpp25 armhf 1.9.5-6+b2 [69.9 kB] Get: 38 http://deb.debian.org/debian trixie/main armhf librhash0 armhf 1.4.3-3+b1 [143 kB] Get: 39 http://deb.debian.org/debian trixie/main armhf libuv1t64 armhf 1.48.0-5 [134 kB] Get: 40 http://deb.debian.org/debian trixie/main armhf cmake-data all 3.29.6-1 [2168 kB] Get: 41 http://deb.debian.org/debian trixie/main armhf cmake armhf 3.29.6-1 [5216 kB] Get: 42 http://deb.debian.org/debian trixie/main armhf libdebhelper-perl all 13.16 [88.6 kB] Get: 43 http://deb.debian.org/debian trixie/main armhf libtool all 2.4.7-7 [517 kB] Get: 44 http://deb.debian.org/debian trixie/main armhf dh-autoreconf all 20 [17.1 kB] Get: 45 http://deb.debian.org/debian trixie/main armhf libarchive-zip-perl all 1.68-1 [104 kB] Get: 46 http://deb.debian.org/debian trixie/main armhf libfile-stripnondeterminism-perl all 1.14.0-1 [19.5 kB] Get: 47 http://deb.debian.org/debian trixie/main armhf dh-strip-nondeterminism all 1.14.0-1 [8448 B] Get: 48 http://deb.debian.org/debian trixie/main armhf libelf1t64 armhf 0.191-2 [183 kB] Get: 49 http://deb.debian.org/debian trixie/main armhf dwz armhf 0.15-1+b2 [106 kB] Get: 50 http://deb.debian.org/debian trixie/main armhf gettext armhf 0.22.5-1 [1479 kB] Get: 51 http://deb.debian.org/debian trixie/main armhf intltool-debian all 0.35.0+20060710.6 [22.9 kB] Get: 52 http://deb.debian.org/debian trixie/main armhf po-debconf all 1.0.21+nmu1 [248 kB] Get: 53 http://deb.debian.org/debian trixie/main armhf debhelper all 13.16 [891 kB] Get: 54 http://deb.debian.org/debian trixie/main armhf libbz2-dev armhf 1.0.8-5.1 [28.3 kB] Get: 55 http://deb.debian.org/debian trixie/main armhf libgflags2.2 armhf 2.2.2-2 [66.4 kB] Get: 56 http://deb.debian.org/debian trixie/main armhf libgflags-dev armhf 2.2.2-2 [88.6 kB] Get: 57 http://deb.debian.org/debian trixie/main armhf liblz4-dev armhf 1.9.4-3 [71.7 kB] Get: 58 http://deb.debian.org/debian trixie/main armhf libsnappy1v5 armhf 1.2.1-1 [26.8 kB] Get: 59 http://deb.debian.org/debian trixie/main armhf libsnappy-dev armhf 1.2.1-1 [41.9 kB] Get: 60 http://deb.debian.org/debian trixie/main armhf libzstd-dev armhf 1.5.6+dfsg-1 [326 kB] Get: 61 http://deb.debian.org/debian trixie/main armhf zlib1g-dev armhf 1:1.3.dfsg+really1.3.1-1 [904 kB] Fetched 31.3 MB in 1s (21.2 MB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package libproc2-0:armhf. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 19503 files and directories currently installed.) Preparing to unpack .../00-libproc2-0_2%3a4.0.4-5_armhf.deb ... Unpacking libproc2-0:armhf (2:4.0.4-5) ... Selecting previously unselected package procps. Preparing to unpack .../01-procps_2%3a4.0.4-5_armhf.deb ... Unpacking procps (2:4.0.4-5) ... Selecting previously unselected package sensible-utils. Preparing to unpack .../02-sensible-utils_0.0.24_all.deb ... Unpacking sensible-utils (0.0.24) ... Selecting previously unselected package libmagic-mgc. Preparing to unpack .../03-libmagic-mgc_1%3a5.45-3_armhf.deb ... Unpacking libmagic-mgc (1:5.45-3) ... Selecting previously unselected package libmagic1t64:armhf. Preparing to unpack .../04-libmagic1t64_1%3a5.45-3_armhf.deb ... Unpacking libmagic1t64:armhf (1:5.45-3) ... Selecting previously unselected package file. Preparing to unpack .../05-file_1%3a5.45-3_armhf.deb ... Unpacking file (1:5.45-3) ... Selecting previously unselected package gettext-base. Preparing to unpack .../06-gettext-base_0.22.5-1_armhf.deb ... Unpacking gettext-base (0.22.5-1) ... Selecting previously unselected package libuchardet0:armhf. Preparing to unpack .../07-libuchardet0_0.0.8-1+b1_armhf.deb ... Unpacking libuchardet0:armhf (0.0.8-1+b1) ... Selecting previously unselected package groff-base. Preparing to unpack .../08-groff-base_1.23.0-5_armhf.deb ... Unpacking groff-base (1.23.0-5) ... Selecting previously unselected package bsdextrautils. Preparing to unpack .../09-bsdextrautils_2.40.2-1_armhf.deb ... Unpacking bsdextrautils (2.40.2-1) ... Selecting previously unselected package libpipeline1:armhf. Preparing to unpack .../10-libpipeline1_1.5.7-2_armhf.deb ... Unpacking libpipeline1:armhf (1.5.7-2) ... Selecting previously unselected package man-db. Preparing to unpack .../11-man-db_2.12.1-2_armhf.deb ... Unpacking man-db (2.12.1-2) ... Selecting previously unselected package m4. Preparing to unpack .../12-m4_1.4.19-4_armhf.deb ... Unpacking m4 (1.4.19-4) ... Selecting previously unselected package autoconf. Preparing to unpack .../13-autoconf_2.71-3_all.deb ... Unpacking autoconf (2.71-3) ... Selecting previously unselected package autotools-dev. Preparing to unpack .../14-autotools-dev_20220109.1_all.deb ... Unpacking autotools-dev (20220109.1) ... Selecting previously unselected package automake. Preparing to unpack .../15-automake_1%3a1.16.5-1.3_all.deb ... Unpacking automake (1:1.16.5-1.3) ... Selecting previously unselected package autopoint. Preparing to unpack .../16-autopoint_0.22.5-1_all.deb ... Unpacking autopoint (0.22.5-1) ... Selecting previously unselected package libicu72:armhf. Preparing to unpack .../17-libicu72_72.1-5_armhf.deb ... Unpacking libicu72:armhf (72.1-5) ... Selecting previously unselected package libxml2:armhf. Preparing to unpack .../18-libxml2_2.9.14+dfsg-1.3+b3_armhf.deb ... Unpacking libxml2:armhf (2.9.14+dfsg-1.3+b3) ... Selecting previously unselected package libarchive13t64:armhf. Preparing to unpack .../19-libarchive13t64_3.7.2-2.1_armhf.deb ... Unpacking libarchive13t64:armhf (3.7.2-2.1) ... Selecting previously unselected package libbrotli1:armhf. Preparing to unpack .../20-libbrotli1_1.1.0-2+b4_armhf.deb ... Unpacking libbrotli1:armhf (1.1.0-2+b4) ... Selecting previously unselected package libkrb5support0:armhf. Preparing to unpack .../21-libkrb5support0_1.21.3-3_armhf.deb ... Unpacking libkrb5support0:armhf (1.21.3-3) ... Selecting previously unselected package libcom-err2:armhf. Preparing to unpack .../22-libcom-err2_1.47.1-1_armhf.deb ... Unpacking libcom-err2:armhf (1.47.1-1) ... Selecting previously unselected package libk5crypto3:armhf. Preparing to unpack .../23-libk5crypto3_1.21.3-3_armhf.deb ... Unpacking libk5crypto3:armhf (1.21.3-3) ... Selecting previously unselected package libkeyutils1:armhf. Preparing to unpack .../24-libkeyutils1_1.6.3-3_armhf.deb ... Unpacking libkeyutils1:armhf (1.6.3-3) ... Selecting previously unselected package libkrb5-3:armhf. Preparing to unpack .../25-libkrb5-3_1.21.3-3_armhf.deb ... Unpacking libkrb5-3:armhf (1.21.3-3) ... Selecting previously unselected package libgssapi-krb5-2:armhf. Preparing to unpack .../26-libgssapi-krb5-2_1.21.3-3_armhf.deb ... Unpacking libgssapi-krb5-2:armhf (1.21.3-3) ... Selecting previously unselected package libsasl2-modules-db:armhf. Preparing to unpack .../27-libsasl2-modules-db_2.1.28+dfsg1-6_armhf.deb ... Unpacking libsasl2-modules-db:armhf (2.1.28+dfsg1-6) ... Selecting previously unselected package libsasl2-2:armhf. Preparing to unpack .../28-libsasl2-2_2.1.28+dfsg1-6_armhf.deb ... Unpacking libsasl2-2:armhf (2.1.28+dfsg1-6) ... Selecting previously unselected package libldap-2.5-0:armhf. Preparing to unpack .../29-libldap-2.5-0_2.5.18+dfsg-2_armhf.deb ... Unpacking libldap-2.5-0:armhf (2.5.18+dfsg-2) ... Selecting previously unselected package libnghttp2-14:armhf. Preparing to unpack .../30-libnghttp2-14_1.62.1-2_armhf.deb ... Unpacking libnghttp2-14:armhf (1.62.1-2) ... Selecting previously unselected package libpsl5t64:armhf. Preparing to unpack .../31-libpsl5t64_0.21.2-1.1_armhf.deb ... Unpacking libpsl5t64:armhf (0.21.2-1.1) ... Selecting previously unselected package librtmp1:armhf. Preparing to unpack .../32-librtmp1_2.4+20151223.gitfa8646d.1-2+b4_armhf.deb ... Unpacking librtmp1:armhf (2.4+20151223.gitfa8646d.1-2+b4) ... Selecting previously unselected package libssh2-1t64:armhf. Preparing to unpack .../33-libssh2-1t64_1.11.0-6_armhf.deb ... Unpacking libssh2-1t64:armhf (1.11.0-6) ... Selecting previously unselected package libcurl4t64:armhf. Preparing to unpack .../34-libcurl4t64_8.8.0-4_armhf.deb ... Unpacking libcurl4t64:armhf (8.8.0-4) ... Selecting previously unselected package libexpat1:armhf. Preparing to unpack .../35-libexpat1_2.6.2-1_armhf.deb ... Unpacking libexpat1:armhf (2.6.2-1) ... Selecting previously unselected package libjsoncpp25:armhf. Preparing to unpack .../36-libjsoncpp25_1.9.5-6+b2_armhf.deb ... Unpacking libjsoncpp25:armhf (1.9.5-6+b2) ... Selecting previously unselected package librhash0:armhf. Preparing to unpack .../37-librhash0_1.4.3-3+b1_armhf.deb ... Unpacking librhash0:armhf (1.4.3-3+b1) ... Selecting previously unselected package libuv1t64:armhf. Preparing to unpack .../38-libuv1t64_1.48.0-5_armhf.deb ... Unpacking libuv1t64:armhf (1.48.0-5) ... Selecting previously unselected package cmake-data. Preparing to unpack .../39-cmake-data_3.29.6-1_all.deb ... Unpacking cmake-data (3.29.6-1) ... Selecting previously unselected package cmake. Preparing to unpack .../40-cmake_3.29.6-1_armhf.deb ... Unpacking cmake (3.29.6-1) ... Selecting previously unselected package libdebhelper-perl. Preparing to unpack .../41-libdebhelper-perl_13.16_all.deb ... Unpacking libdebhelper-perl (13.16) ... Selecting previously unselected package libtool. Preparing to unpack .../42-libtool_2.4.7-7_all.deb ... Unpacking libtool (2.4.7-7) ... Selecting previously unselected package dh-autoreconf. Preparing to unpack .../43-dh-autoreconf_20_all.deb ... Unpacking dh-autoreconf (20) ... Selecting previously unselected package libarchive-zip-perl. Preparing to unpack .../44-libarchive-zip-perl_1.68-1_all.deb ... Unpacking libarchive-zip-perl (1.68-1) ... Selecting previously unselected package libfile-stripnondeterminism-perl. Preparing to unpack .../45-libfile-stripnondeterminism-perl_1.14.0-1_all.deb ... Unpacking libfile-stripnondeterminism-perl (1.14.0-1) ... Selecting previously unselected package dh-strip-nondeterminism. Preparing to unpack .../46-dh-strip-nondeterminism_1.14.0-1_all.deb ... Unpacking dh-strip-nondeterminism (1.14.0-1) ... Selecting previously unselected package libelf1t64:armhf. Preparing to unpack .../47-libelf1t64_0.191-2_armhf.deb ... Unpacking libelf1t64:armhf (0.191-2) ... Selecting previously unselected package dwz. Preparing to unpack .../48-dwz_0.15-1+b2_armhf.deb ... Unpacking dwz (0.15-1+b2) ... Selecting previously unselected package gettext. Preparing to unpack .../49-gettext_0.22.5-1_armhf.deb ... Unpacking gettext (0.22.5-1) ... Selecting previously unselected package intltool-debian. Preparing to unpack .../50-intltool-debian_0.35.0+20060710.6_all.deb ... Unpacking intltool-debian (0.35.0+20060710.6) ... Selecting previously unselected package po-debconf. Preparing to unpack .../51-po-debconf_1.0.21+nmu1_all.deb ... Unpacking po-debconf (1.0.21+nmu1) ... Selecting previously unselected package debhelper. Preparing to unpack .../52-debhelper_13.16_all.deb ... Unpacking debhelper (13.16) ... Selecting previously unselected package libbz2-dev:armhf. Preparing to unpack .../53-libbz2-dev_1.0.8-5.1_armhf.deb ... Unpacking libbz2-dev:armhf (1.0.8-5.1) ... Selecting previously unselected package libgflags2.2. Preparing to unpack .../54-libgflags2.2_2.2.2-2_armhf.deb ... Unpacking libgflags2.2 (2.2.2-2) ... Selecting previously unselected package libgflags-dev. Preparing to unpack .../55-libgflags-dev_2.2.2-2_armhf.deb ... Unpacking libgflags-dev (2.2.2-2) ... Selecting previously unselected package liblz4-dev:armhf. Preparing to unpack .../56-liblz4-dev_1.9.4-3_armhf.deb ... Unpacking liblz4-dev:armhf (1.9.4-3) ... Selecting previously unselected package libsnappy1v5:armhf. Preparing to unpack .../57-libsnappy1v5_1.2.1-1_armhf.deb ... Unpacking libsnappy1v5:armhf (1.2.1-1) ... Selecting previously unselected package libsnappy-dev:armhf. Preparing to unpack .../58-libsnappy-dev_1.2.1-1_armhf.deb ... Unpacking libsnappy-dev:armhf (1.2.1-1) ... Selecting previously unselected package libzstd-dev:armhf. Preparing to unpack .../59-libzstd-dev_1.5.6+dfsg-1_armhf.deb ... Unpacking libzstd-dev:armhf (1.5.6+dfsg-1) ... Selecting previously unselected package zlib1g-dev:armhf. Preparing to unpack .../60-zlib1g-dev_1%3a1.3.dfsg+really1.3.1-1_armhf.deb ... Unpacking zlib1g-dev:armhf (1:1.3.dfsg+really1.3.1-1) ... Setting up libexpat1:armhf (2.6.2-1) ... Setting up libpipeline1:armhf (1.5.7-2) ... Setting up libkeyutils1:armhf (1.6.3-3) ... Setting up libicu72:armhf (72.1-5) ... Setting up libzstd-dev:armhf (1.5.6+dfsg-1) ... Setting up bsdextrautils (2.40.2-1) ... Setting up libmagic-mgc (1:5.45-3) ... Setting up libarchive-zip-perl (1.68-1) ... Setting up libdebhelper-perl (13.16) ... Setting up libbrotli1:armhf (1.1.0-2+b4) ... Setting up libuv1t64:armhf (1.48.0-5) ... Setting up libmagic1t64:armhf (1:5.45-3) ... Setting up libpsl5t64:armhf (0.21.2-1.1) ... Setting up libnghttp2-14:armhf (1.62.1-2) ... Setting up gettext-base (0.22.5-1) ... Setting up m4 (1.4.19-4) ... Setting up libcom-err2:armhf (1.47.1-1) ... Setting up file (1:5.45-3) ... Setting up libelf1t64:armhf (0.191-2) ... Setting up libsnappy1v5:armhf (1.2.1-1) ... Setting up libkrb5support0:armhf (1.21.3-3) ... Setting up libsasl2-modules-db:armhf (2.1.28+dfsg1-6) ... Setting up autotools-dev (20220109.1) ... Setting up librtmp1:armhf (2.4+20151223.gitfa8646d.1-2+b4) ... Setting up libproc2-0:armhf (2:4.0.4-5) ... Setting up autopoint (0.22.5-1) ... Setting up libjsoncpp25:armhf (1.9.5-6+b2) ... Setting up liblz4-dev:armhf (1.9.4-3) ... Setting up libk5crypto3:armhf (1.21.3-3) ... Setting up libsasl2-2:armhf (2.1.28+dfsg1-6) ... Setting up autoconf (2.71-3) ... Setting up zlib1g-dev:armhf (1:1.3.dfsg+really1.3.1-1) ... Setting up dwz (0.15-1+b2) ... Setting up sensible-utils (0.0.24) ... Setting up librhash0:armhf (1.4.3-3+b1) ... Setting up libuchardet0:armhf (0.0.8-1+b1) ... Setting up procps (2:4.0.4-5) ... Setting up cmake-data (3.29.6-1) ... Setting up libkrb5-3:armhf (1.21.3-3) ... Setting up libssh2-1t64:armhf (1.11.0-6) ... Setting up libxml2:armhf (2.9.14+dfsg-1.3+b3) ... Setting up libgflags2.2 (2.2.2-2) ... Setting up libbz2-dev:armhf (1.0.8-5.1) ... Setting up automake (1:1.16.5-1.3) ... update-alternatives: using /usr/bin/automake-1.16 to provide /usr/bin/automake (automake) in auto mode Setting up libfile-stripnondeterminism-perl (1.14.0-1) ... Setting up gettext (0.22.5-1) ... Setting up libtool (2.4.7-7) ... Setting up libsnappy-dev:armhf (1.2.1-1) ... Setting up libldap-2.5-0:armhf (2.5.18+dfsg-2) ... Setting up intltool-debian (0.35.0+20060710.6) ... Setting up dh-autoreconf (20) ... Setting up libgssapi-krb5-2:armhf (1.21.3-3) ... Setting up libgflags-dev (2.2.2-2) ... Setting up dh-strip-nondeterminism (1.14.0-1) ... Setting up groff-base (1.23.0-5) ... Setting up libarchive13t64:armhf (3.7.2-2.1) ... Setting up libcurl4t64:armhf (8.8.0-4) ... Setting up po-debconf (1.0.21+nmu1) ... Setting up man-db (2.12.1-2) ... Not building database; man-db/auto-update is not 'true'. Setting up cmake (3.29.6-1) ... Setting up debhelper (13.16) ... Processing triggers for libc-bin (2.39-6) ... Reading package lists... Building dependency tree... Reading state information... Reading extended state information... Initializing package states... Writing extended state information... Building tag database... -> Finished parsing the build-deps I: Building the package I: Running cd /build/reproducible-path/rocksdb-9.3.1/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../rocksdb_9.3.1-1_source.changes dpkg-buildpackage: info: source package rocksdb dpkg-buildpackage: info: source version 9.3.1-1 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Otto Kekäläinen dpkg-source --before-build . dpkg-buildpackage: info: host architecture armhf debian/rules clean dh clean --buildsystem=cmake dh_auto_clean -O--buildsystem=cmake dh_autoreconf_clean -O--buildsystem=cmake dh_clean -O--buildsystem=cmake debian/rules binary dh binary --buildsystem=cmake dh_update_autotools_config -O--buildsystem=cmake dh_autoreconf -O--buildsystem=cmake debian/rules override_dh_auto_configure make[1]: Entering directory '/build/reproducible-path/rocksdb-9.3.1' dh_auto_configure -O--buildsystem=cmake \ -- \ -DWITH_BZ2=ON \ -DWITH_LZ4=ON \ -DWITH_ZLIB=ON \ -DWITH_ZSTD=ON \ -DWITH_SNAPPY=ON \ -DROCKSDB_BUILD_SHARED=ON \ -DWITH_BENCHMARK_TOOLS=ON \ -DWITH_CORE_TOOLS=ON \ -DWITH_TOOLS=ON \ -DWITH_TESTS=ON \ -DPORTABLE=1 \ -DFAIL_ON_WARNINGS=OFF cd obj-arm-linux-gnueabihf && DEB_PYTHON_INSTALL_LAYOUT=deb cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_SYSCONFDIR=/etc -DCMAKE_INSTALL_LOCALSTATEDIR=/var -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON -DCMAKE_FIND_USE_PACKAGE_REGISTRY=OFF -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON -DFETCHCONTENT_FULLY_DISCONNECTED=ON -DCMAKE_INSTALL_RUNSTATEDIR=/run -DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON "-GUnix Makefiles" -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_INSTALL_LIBDIR=lib/arm-linux-gnueabihf -DWITH_BZ2=ON -DWITH_LZ4=ON -DWITH_ZLIB=ON -DWITH_ZSTD=ON -DWITH_SNAPPY=ON -DROCKSDB_BUILD_SHARED=ON -DWITH_BENCHMARK_TOOLS=ON -DWITH_CORE_TOOLS=ON -DWITH_TOOLS=ON -DWITH_TESTS=ON -DPORTABLE=1 -DFAIL_ON_WARNINGS=OFF .. -- The CXX compiler identification is GNU 13.3.0 -- The C compiler identification is GNU 13.3.0 -- The ASM compiler identification is GNU -- Found assembler: /usr/bin/cc -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Found ZLIB: /usr/lib/arm-linux-gnueabihf/libz.so (found version "1.3.1") -- Found BZip2: /usr/lib/arm-linux-gnueabihf/libbz2.so (found version "1.0.8") -- Looking for BZ2_bzCompressInit -- Looking for BZ2_bzCompressInit - found -- Found lz4: /usr/lib/arm-linux-gnueabihf/liblz4.so -- Found zstd: /usr/lib/arm-linux-gnueabihf/libzstd.so -- Performing Test HAVE_OMIT_LEAF_FRAME_POINTER -- Performing Test HAVE_OMIT_LEAF_FRAME_POINTER - Failed -- Performing Test HAS_ARMV8_CRC -- Performing Test HAS_ARMV8_CRC - Success -- HAS_ARMV8_CRC yes -- Performing Test BUILTIN_ATOMIC -- Performing Test BUILTIN_ATOMIC - Success -- Could NOT find uring (missing: uring_LIBRARIES uring_INCLUDE_DIR) -- Enabling RTTI in Debug builds only (default) -- Performing Test HAVE_FALLOCATE -- Performing Test HAVE_FALLOCATE - Success -- Performing Test HAVE_SYNC_FILE_RANGE_WRITE -- Performing Test HAVE_SYNC_FILE_RANGE_WRITE - Success -- Performing Test HAVE_PTHREAD_MUTEX_ADAPTIVE_NP -- Performing Test HAVE_PTHREAD_MUTEX_ADAPTIVE_NP - Success -- Looking for malloc_usable_size -- Looking for malloc_usable_size - found -- Looking for sched_getcpu -- Looking for sched_getcpu - found -- Looking for getauxval -- Looking for getauxval - found -- Looking for F_FULLFSYNC -- Looking for F_FULLFSYNC - not found -- Performing Test CMAKE_HAVE_LIBC_PTHREAD -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success -- Found Threads: TRUE -- ROCKSDB_PLUGINS: -- ROCKSDB PLUGINS TO BUILD -- Could NOT find Git (missing: GIT_EXECUTABLE) -- JNI library is disabled -- Configuring done (19.6s) -- Generating done (2.1s) CMake Warning: Manually-specified variables were not used by the project: CMAKE_EXPORT_NO_PACKAGE_REGISTRY CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY FETCHCONTENT_FULLY_DISCONNECTED -- Build files have been written to: /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf make[1]: Leaving directory '/build/reproducible-path/rocksdb-9.3.1' dh_auto_build -O--buildsystem=cmake cd obj-arm-linux-gnueabihf && make -j5 "INSTALL=install --strip-program=true" VERBOSE=1 make[1]: Entering directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' /usr/bin/cmake -S/build/reproducible-path/rocksdb-9.3.1 -B/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf --check-build-system CMakeFiles/Makefile.cmake 0 /usr/bin/cmake -E cmake_progress_start /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf/CMakeFiles /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf//CMakeFiles/progress.marks make -f CMakeFiles/Makefile2 all make[2]: Entering directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' make -f CMakeFiles/rocksdb.dir/build.make CMakeFiles/rocksdb.dir/depend make -f CMakeFiles/rocksdb-shared.dir/build.make CMakeFiles/rocksdb-shared.dir/depend make -f third-party/gtest-1.8.1/fused-src/gtest/CMakeFiles/gtest.dir/build.make third-party/gtest-1.8.1/fused-src/gtest/CMakeFiles/gtest.dir/depend make[3]: Entering directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' cd /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /build/reproducible-path/rocksdb-9.3.1 /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src/gtest /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf/third-party/gtest-1.8.1/fused-src/gtest /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf/third-party/gtest-1.8.1/fused-src/gtest/CMakeFiles/gtest.dir/DependInfo.cmake "--color=" make[3]: Entering directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' cd /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /build/reproducible-path/rocksdb-9.3.1 /build/reproducible-path/rocksdb-9.3.1 /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf/CMakeFiles/rocksdb.dir/DependInfo.cmake "--color=" make[3]: Entering directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' cd /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /build/reproducible-path/rocksdb-9.3.1 /build/reproducible-path/rocksdb-9.3.1 /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf/CMakeFiles/rocksdb-shared.dir/DependInfo.cmake "--color=" make[3]: Leaving directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' make -f third-party/gtest-1.8.1/fused-src/gtest/CMakeFiles/gtest.dir/build.make third-party/gtest-1.8.1/fused-src/gtest/CMakeFiles/gtest.dir/build make[3]: Entering directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' make[3]: Leaving directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' make -f CMakeFiles/rocksdb.dir/build.make CMakeFiles/rocksdb.dir/build [ 0%] Building CXX object third-party/gtest-1.8.1/fused-src/gtest/CMakeFiles/gtest.dir/gtest-all.cc.o cd /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf/third-party/gtest-1.8.1/fused-src/gtest && /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT third-party/gtest-1.8.1/fused-src/gtest/CMakeFiles/gtest.dir/gtest-all.cc.o -MF CMakeFiles/gtest.dir/gtest-all.cc.o.d -o CMakeFiles/gtest.dir/gtest-all.cc.o -c /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src/gtest/gtest-all.cc make[3]: Leaving directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' make -f CMakeFiles/rocksdb-shared.dir/build.make CMakeFiles/rocksdb-shared.dir/build make[3]: Entering directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' [ 0%] Building CXX object CMakeFiles/rocksdb.dir/cache/cache.cc.o make[3]: Entering directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/cache/cache.cc.o -MF CMakeFiles/rocksdb.dir/cache/cache.cc.o.d -o CMakeFiles/rocksdb.dir/cache/cache.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/cache.cc [ 1%] Building CXX object CMakeFiles/rocksdb.dir/cache/cache_key.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/cache/cache_key.cc.o -MF CMakeFiles/rocksdb.dir/cache/cache_key.cc.o.d -o CMakeFiles/rocksdb.dir/cache/cache_key.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/cache_key.cc [ 1%] Building CXX object CMakeFiles/rocksdb.dir/cache/cache_entry_roles.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/cache/cache_entry_roles.cc.o -MF CMakeFiles/rocksdb.dir/cache/cache_entry_roles.cc.o.d -o CMakeFiles/rocksdb.dir/cache/cache_entry_roles.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/cache_entry_roles.cc [ 1%] Building CXX object CMakeFiles/rocksdb-shared.dir/cache/cache.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/cache/cache.cc.o -MF CMakeFiles/rocksdb-shared.dir/cache/cache.cc.o.d -o CMakeFiles/rocksdb-shared.dir/cache/cache.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/cache.cc [ 1%] Building CXX object CMakeFiles/rocksdb.dir/cache/cache_helpers.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/cache/cache_helpers.cc.o -MF CMakeFiles/rocksdb.dir/cache/cache_helpers.cc.o.d -o CMakeFiles/rocksdb.dir/cache/cache_helpers.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/cache_helpers.cc [ 1%] Building CXX object CMakeFiles/rocksdb.dir/cache/cache_reservation_manager.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/cache/cache_reservation_manager.cc.o -MF CMakeFiles/rocksdb.dir/cache/cache_reservation_manager.cc.o.d -o CMakeFiles/rocksdb.dir/cache/cache_reservation_manager.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/cache_reservation_manager.cc [ 1%] Building CXX object CMakeFiles/rocksdb.dir/cache/charged_cache.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/cache/charged_cache.cc.o -MF CMakeFiles/rocksdb.dir/cache/charged_cache.cc.o.d -o CMakeFiles/rocksdb.dir/cache/charged_cache.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/charged_cache.cc [ 2%] Building CXX object CMakeFiles/rocksdb-shared.dir/cache/cache_entry_roles.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/cache/cache_entry_roles.cc.o -MF CMakeFiles/rocksdb-shared.dir/cache/cache_entry_roles.cc.o.d -o CMakeFiles/rocksdb-shared.dir/cache/cache_entry_roles.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/cache_entry_roles.cc [ 2%] Building CXX object CMakeFiles/rocksdb.dir/cache/clock_cache.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/cache/clock_cache.cc.o -MF CMakeFiles/rocksdb.dir/cache/clock_cache.cc.o.d -o CMakeFiles/rocksdb.dir/cache/clock_cache.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/clock_cache.cc [ 2%] Building CXX object CMakeFiles/rocksdb-shared.dir/cache/cache_key.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/cache/cache_key.cc.o -MF CMakeFiles/rocksdb-shared.dir/cache/cache_key.cc.o.d -o CMakeFiles/rocksdb-shared.dir/cache/cache_key.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/cache_key.cc [ 2%] Building CXX object CMakeFiles/rocksdb.dir/cache/compressed_secondary_cache.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/cache/compressed_secondary_cache.cc.o -MF CMakeFiles/rocksdb.dir/cache/compressed_secondary_cache.cc.o.d -o CMakeFiles/rocksdb.dir/cache/compressed_secondary_cache.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/compressed_secondary_cache.cc [ 2%] Building CXX object CMakeFiles/rocksdb.dir/cache/lru_cache.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/cache/lru_cache.cc.o -MF CMakeFiles/rocksdb.dir/cache/lru_cache.cc.o.d -o CMakeFiles/rocksdb.dir/cache/lru_cache.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/lru_cache.cc [ 2%] Building CXX object CMakeFiles/rocksdb-shared.dir/cache/cache_helpers.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/cache/cache_helpers.cc.o -MF CMakeFiles/rocksdb-shared.dir/cache/cache_helpers.cc.o.d -o CMakeFiles/rocksdb-shared.dir/cache/cache_helpers.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/cache_helpers.cc In file included from /usr/include/c++/13/bits/stl_algo.h:61, from /usr/include/c++/13/functional:67, from /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h:11, from /build/reproducible-path/rocksdb-9.3.1/cache/sharded_cache.h:18, from /build/reproducible-path/rocksdb-9.3.1/cache/clock_cache.h:21, from /build/reproducible-path/rocksdb-9.3.1/cache/clock_cache.cc:10: /usr/include/c++/13/bits/stl_heap.h: In function 'void std::__adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Distance = int; _Tp = double; _Compare = __gnu_cxx::__ops::_Iter_less_iter]': /usr/include/c++/13/bits/stl_heap.h:224:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 224 | __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex, | ^~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h: In function 'void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]': /usr/include/c++/13/bits/stl_algo.h:1812:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1812 | __insertion_sort(_RandomAccessIterator __first, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:1812:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 /usr/include/c++/13/bits/stl_algo.h: In function 'void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Size = int; _Compare = __gnu_cxx::__ops::_Iter_less_iter]': /usr/include/c++/13/bits/stl_algo.h:1918:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1918 | __introsort_loop(_RandomAccessIterator __first, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:1918:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 /usr/include/c++/13/bits/stl_algo.h:1932:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1932 | std::__introsort_loop(__cut, __last, __depth_limit, __comp); | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 2%] Building CXX object CMakeFiles/rocksdb-shared.dir/cache/cache_reservation_manager.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/cache/cache_reservation_manager.cc.o -MF CMakeFiles/rocksdb-shared.dir/cache/cache_reservation_manager.cc.o.d -o CMakeFiles/rocksdb-shared.dir/cache/cache_reservation_manager.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/cache_reservation_manager.cc In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h:15, from /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h:11, from /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table_properties.h:13, from /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/unique_id.h:8, from /build/reproducible-path/rocksdb-9.3.1/table/unique_id_impl.h:10, from /build/reproducible-path/rocksdb-9.3.1/cache/cache_key.h:12, from /build/reproducible-path/rocksdb-9.3.1/cache/clock_cache.h:20: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const double&}; _Tp = double; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = double; _Alloc = std::allocator]', inlined from 'void rocksdb::clock_cache::{anonymous}::AddShardEvaluation(const rocksdb::clock_cache::BaseHyperClockCache::Shard&, std::vector&, size_t&)' at /build/reproducible-path/rocksdb-9.3.1/cache/clock_cache.cc:1475:35, inlined from 'rocksdb::clock_cache::FixedHyperClockCache::ReportProblems(const std::shared_ptr&) const::::Shard*)>' at /build/reproducible-path/rocksdb-9.3.1/cache/clock_cache.cc:1570:23, inlined from 'constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = void; _Fn = rocksdb::clock_cache::FixedHyperClockCache::ReportProblems(const std::shared_ptr&) const::::Shard*)>&; _Args = {const rocksdb::clock_cache::ClockCacheShard*}]' at /usr/include/c++/13/bits/invoke.h:61:36, inlined from 'constexpr std::enable_if_t, _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = void; _Callable = rocksdb::clock_cache::FixedHyperClockCache::ReportProblems(const std::shared_ptr&) const::::Shard*)>&; _Args = {const rocksdb::clock_cache::ClockCacheShard*}]' at /usr/include/c++/13/bits/invoke.h:111:28, inlined from 'static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = void; _Functor = rocksdb::clock_cache::FixedHyperClockCache::ReportProblems(const std::shared_ptr&) const::::Shard*)>; _ArgTypes = {const rocksdb::clock_cache::ClockCacheShard*}]' at /usr/include/c++/13/bits/std_function.h:290:30: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ [ 3%] Building CXX object CMakeFiles/rocksdb.dir/cache/secondary_cache.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/cache/secondary_cache.cc.o -MF CMakeFiles/rocksdb.dir/cache/secondary_cache.cc.o.d -o CMakeFiles/rocksdb.dir/cache/secondary_cache.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/secondary_cache.cc In function 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]', inlined from 'void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator >]' at /usr/include/c++/13/bits/stl_algo.h:4861:18, inlined from 'virtual void rocksdb::clock_cache::FixedHyperClockCache::ReportProblems(const std::shared_ptr&) const' at /build/reproducible-path/rocksdb-9.3.1/cache/clock_cache.cc:1577:12: /usr/include/c++/13/bits/stl_algo.h:1947:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1947 | std::__introsort_loop(__first, __last, | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ 1948 | std::__lg(__last - __first) * 2, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1949 | __comp); | ~~~~~~~ In function 'void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]', inlined from 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]' at /usr/include/c++/13/bits/stl_algo.h:1950:31, inlined from 'void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator >]' at /usr/include/c++/13/bits/stl_algo.h:4861:18, inlined from 'virtual void rocksdb::clock_cache::FixedHyperClockCache::ReportProblems(const std::shared_ptr&) const' at /build/reproducible-path/rocksdb-9.3.1/cache/clock_cache.cc:1577:12: /usr/include/c++/13/bits/stl_algo.h:1859:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1859 | std::__insertion_sort(__first, __first + int(_S_threshold), __comp); | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:1864:30: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1864 | std::__insertion_sort(__first, __last, __comp); | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ [ 3%] Building CXX object CMakeFiles/rocksdb.dir/cache/secondary_cache_adapter.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/cache/secondary_cache_adapter.cc.o -MF CMakeFiles/rocksdb.dir/cache/secondary_cache_adapter.cc.o.d -o CMakeFiles/rocksdb.dir/cache/secondary_cache_adapter.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/secondary_cache_adapter.cc [ 3%] Building CXX object CMakeFiles/rocksdb.dir/cache/sharded_cache.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/cache/sharded_cache.cc.o -MF CMakeFiles/rocksdb.dir/cache/sharded_cache.cc.o.d -o CMakeFiles/rocksdb.dir/cache/sharded_cache.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/sharded_cache.cc [ 3%] Building CXX object CMakeFiles/rocksdb.dir/cache/tiered_secondary_cache.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/cache/tiered_secondary_cache.cc.o -MF CMakeFiles/rocksdb.dir/cache/tiered_secondary_cache.cc.o.d -o CMakeFiles/rocksdb.dir/cache/tiered_secondary_cache.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/tiered_secondary_cache.cc [ 3%] Building CXX object CMakeFiles/rocksdb-shared.dir/cache/charged_cache.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/cache/charged_cache.cc.o -MF CMakeFiles/rocksdb-shared.dir/cache/charged_cache.cc.o.d -o CMakeFiles/rocksdb-shared.dir/cache/charged_cache.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/charged_cache.cc [ 3%] Building CXX object CMakeFiles/rocksdb.dir/db/arena_wrapped_db_iter.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/arena_wrapped_db_iter.cc.o -MF CMakeFiles/rocksdb.dir/db/arena_wrapped_db_iter.cc.o.d -o CMakeFiles/rocksdb.dir/db/arena_wrapped_db_iter.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/arena_wrapped_db_iter.cc [ 3%] Building CXX object CMakeFiles/rocksdb-shared.dir/cache/clock_cache.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/cache/clock_cache.cc.o -MF CMakeFiles/rocksdb-shared.dir/cache/clock_cache.cc.o.d -o CMakeFiles/rocksdb-shared.dir/cache/clock_cache.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/clock_cache.cc [ 3%] Building CXX object CMakeFiles/rocksdb.dir/db/attribute_group_iterator_impl.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/attribute_group_iterator_impl.cc.o -MF CMakeFiles/rocksdb.dir/db/attribute_group_iterator_impl.cc.o.d -o CMakeFiles/rocksdb.dir/db/attribute_group_iterator_impl.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/attribute_group_iterator_impl.cc [ 3%] Building CXX object CMakeFiles/rocksdb.dir/db/blob/blob_contents.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/blob/blob_contents.cc.o -MF CMakeFiles/rocksdb.dir/db/blob/blob_contents.cc.o.d -o CMakeFiles/rocksdb.dir/db/blob/blob_contents.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_contents.cc [ 3%] Linking CXX static library libgtest.a cd /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf/third-party/gtest-1.8.1/fused-src/gtest && /usr/bin/cmake -P CMakeFiles/gtest.dir/cmake_clean_target.cmake cd /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf/third-party/gtest-1.8.1/fused-src/gtest && /usr/bin/cmake -E cmake_link_script CMakeFiles/gtest.dir/link.txt --verbose=1 /usr/bin/ar qc libgtest.a "CMakeFiles/gtest.dir/gtest-all.cc.o" /usr/bin/ranlib libgtest.a make[3]: Leaving directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' [ 3%] Built target gtest make -f CMakeFiles/testharness.dir/build.make CMakeFiles/testharness.dir/depend make[3]: Entering directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' cd /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /build/reproducible-path/rocksdb-9.3.1 /build/reproducible-path/rocksdb-9.3.1 /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf /build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf/CMakeFiles/testharness.dir/DependInfo.cmake "--color=" make[3]: Leaving directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' make -f CMakeFiles/testharness.dir/build.make CMakeFiles/testharness.dir/build make[3]: Entering directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' [ 4%] Building CXX object CMakeFiles/testharness.dir/test_util/mock_time_env.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/testharness.dir/test_util/mock_time_env.cc.o -MF CMakeFiles/testharness.dir/test_util/mock_time_env.cc.o.d -o CMakeFiles/testharness.dir/test_util/mock_time_env.cc.o -c /build/reproducible-path/rocksdb-9.3.1/test_util/mock_time_env.cc [ 4%] Building CXX object CMakeFiles/rocksdb.dir/db/blob/blob_fetcher.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/blob/blob_fetcher.cc.o -MF CMakeFiles/rocksdb.dir/db/blob/blob_fetcher.cc.o.d -o CMakeFiles/rocksdb.dir/db/blob/blob_fetcher.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_fetcher.cc In file included from /usr/include/c++/13/bits/stl_algo.h:61, from /usr/include/c++/13/functional:67, from /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h:11, from /build/reproducible-path/rocksdb-9.3.1/cache/sharded_cache.h:18, from /build/reproducible-path/rocksdb-9.3.1/cache/clock_cache.h:21, from /build/reproducible-path/rocksdb-9.3.1/cache/clock_cache.cc:10: /usr/include/c++/13/bits/stl_heap.h: In function 'void std::__adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Distance = int; _Tp = double; _Compare = __gnu_cxx::__ops::_Iter_less_iter]': /usr/include/c++/13/bits/stl_heap.h:224:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 224 | __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex, | ^~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h: In function 'void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]': /usr/include/c++/13/bits/stl_algo.h:1812:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1812 | __insertion_sort(_RandomAccessIterator __first, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:1812:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 /usr/include/c++/13/bits/stl_algo.h: In function 'void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Size = int; _Compare = __gnu_cxx::__ops::_Iter_less_iter]': /usr/include/c++/13/bits/stl_algo.h:1918:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1918 | __introsort_loop(_RandomAccessIterator __first, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:1918:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 /usr/include/c++/13/bits/stl_algo.h:1932:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1932 | std::__introsort_loop(__cut, __last, __depth_limit, __comp); | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 5%] Building CXX object CMakeFiles/rocksdb.dir/db/blob/blob_file_addition.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/blob/blob_file_addition.cc.o -MF CMakeFiles/rocksdb.dir/db/blob/blob_file_addition.cc.o.d -o CMakeFiles/rocksdb.dir/db/blob/blob_file_addition.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.cc [ 5%] Building CXX object CMakeFiles/testharness.dir/test_util/secondary_cache_test_util.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/testharness.dir/test_util/secondary_cache_test_util.cc.o -MF CMakeFiles/testharness.dir/test_util/secondary_cache_test_util.cc.o.d -o CMakeFiles/testharness.dir/test_util/secondary_cache_test_util.cc.o -c /build/reproducible-path/rocksdb-9.3.1/test_util/secondary_cache_test_util.cc In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h:15, from /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h:11, from /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table_properties.h:13, from /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/unique_id.h:8, from /build/reproducible-path/rocksdb-9.3.1/table/unique_id_impl.h:10, from /build/reproducible-path/rocksdb-9.3.1/cache/cache_key.h:12, from /build/reproducible-path/rocksdb-9.3.1/cache/clock_cache.h:20: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const double&}; _Tp = double; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = double; _Alloc = std::allocator]', inlined from 'void rocksdb::clock_cache::{anonymous}::AddShardEvaluation(const rocksdb::clock_cache::BaseHyperClockCache::Shard&, std::vector&, size_t&)' at /build/reproducible-path/rocksdb-9.3.1/cache/clock_cache.cc:1475:35, inlined from 'rocksdb::clock_cache::FixedHyperClockCache::ReportProblems(const std::shared_ptr&) const::::Shard*)>' at /build/reproducible-path/rocksdb-9.3.1/cache/clock_cache.cc:1570:23, inlined from 'constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = void; _Fn = rocksdb::clock_cache::FixedHyperClockCache::ReportProblems(const std::shared_ptr&) const::::Shard*)>&; _Args = {const rocksdb::clock_cache::ClockCacheShard*}]' at /usr/include/c++/13/bits/invoke.h:61:36, inlined from 'constexpr std::enable_if_t, _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = void; _Callable = rocksdb::clock_cache::FixedHyperClockCache::ReportProblems(const std::shared_ptr&) const::::Shard*)>&; _Args = {const rocksdb::clock_cache::ClockCacheShard*}]' at /usr/include/c++/13/bits/invoke.h:111:28, inlined from 'static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = void; _Functor = rocksdb::clock_cache::FixedHyperClockCache::ReportProblems(const std::shared_ptr&) const::::Shard*)>; _ArgTypes = {const rocksdb::clock_cache::ClockCacheShard*}]' at /usr/include/c++/13/bits/std_function.h:290:30: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ [ 5%] Building CXX object CMakeFiles/rocksdb.dir/db/blob/blob_file_builder.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/blob/blob_file_builder.cc.o -MF CMakeFiles/rocksdb.dir/db/blob/blob_file_builder.cc.o.d -o CMakeFiles/rocksdb.dir/db/blob/blob_file_builder.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_builder.cc In function 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]', inlined from 'void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator >]' at /usr/include/c++/13/bits/stl_algo.h:4861:18, inlined from 'virtual void rocksdb::clock_cache::FixedHyperClockCache::ReportProblems(const std::shared_ptr&) const' at /build/reproducible-path/rocksdb-9.3.1/cache/clock_cache.cc:1577:12: /usr/include/c++/13/bits/stl_algo.h:1947:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1947 | std::__introsort_loop(__first, __last, | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ 1948 | std::__lg(__last - __first) * 2, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1949 | __comp); | ~~~~~~~ In function 'void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]', inlined from 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]' at /usr/include/c++/13/bits/stl_algo.h:1950:31, inlined from 'void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator >]' at /usr/include/c++/13/bits/stl_algo.h:4861:18, inlined from 'virtual void rocksdb::clock_cache::FixedHyperClockCache::ReportProblems(const std::shared_ptr&) const' at /build/reproducible-path/rocksdb-9.3.1/cache/clock_cache.cc:1577:12: /usr/include/c++/13/bits/stl_algo.h:1859:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1859 | std::__insertion_sort(__first, __first + int(_S_threshold), __comp); | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:1864:30: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1864 | std::__insertion_sort(__first, __last, __comp); | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ [ 5%] Building CXX object CMakeFiles/rocksdb.dir/db/blob/blob_file_cache.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/blob/blob_file_cache.cc.o -MF CMakeFiles/rocksdb.dir/db/blob/blob_file_cache.cc.o.d -o CMakeFiles/rocksdb.dir/db/blob/blob_file_cache.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_cache.cc [ 5%] Building CXX object CMakeFiles/testharness.dir/test_util/testharness.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/testharness.dir/test_util/testharness.cc.o -MF CMakeFiles/testharness.dir/test_util/testharness.cc.o.d -o CMakeFiles/testharness.dir/test_util/testharness.cc.o -c /build/reproducible-path/rocksdb-9.3.1/test_util/testharness.cc [ 5%] Building CXX object CMakeFiles/rocksdb-shared.dir/cache/compressed_secondary_cache.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/cache/compressed_secondary_cache.cc.o -MF CMakeFiles/rocksdb-shared.dir/cache/compressed_secondary_cache.cc.o.d -o CMakeFiles/rocksdb-shared.dir/cache/compressed_secondary_cache.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/compressed_secondary_cache.cc [ 5%] Building CXX object CMakeFiles/rocksdb.dir/db/blob/blob_file_garbage.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/blob/blob_file_garbage.cc.o -MF CMakeFiles/rocksdb.dir/db/blob/blob_file_garbage.cc.o.d -o CMakeFiles/rocksdb.dir/db/blob/blob_file_garbage.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_garbage.cc [ 5%] Building CXX object CMakeFiles/rocksdb.dir/db/blob/blob_file_meta.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/blob/blob_file_meta.cc.o -MF CMakeFiles/rocksdb.dir/db/blob/blob_file_meta.cc.o.d -o CMakeFiles/rocksdb.dir/db/blob/blob_file_meta.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_meta.cc [ 5%] Building CXX object CMakeFiles/rocksdb.dir/db/blob/blob_file_reader.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/blob/blob_file_reader.cc.o -MF CMakeFiles/rocksdb.dir/db/blob/blob_file_reader.cc.o.d -o CMakeFiles/rocksdb.dir/db/blob/blob_file_reader.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_reader.cc [ 5%] Building CXX object CMakeFiles/rocksdb.dir/db/blob/blob_garbage_meter.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/blob/blob_garbage_meter.cc.o -MF CMakeFiles/rocksdb.dir/db/blob/blob_garbage_meter.cc.o.d -o CMakeFiles/rocksdb.dir/db/blob/blob_garbage_meter.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_garbage_meter.cc [ 5%] Building CXX object CMakeFiles/rocksdb-shared.dir/cache/lru_cache.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/cache/lru_cache.cc.o -MF CMakeFiles/rocksdb-shared.dir/cache/lru_cache.cc.o.d -o CMakeFiles/rocksdb-shared.dir/cache/lru_cache.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/lru_cache.cc In file included from /usr/include/c++/13/vector:72, from /usr/include/c++/13/functional:64, from /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_builder.h:8, from /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_builder.cc:6: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&, long long unsigned int&, long long unsigned int&, std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >}; _Tp = rocksdb::BlobFileAddition; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {const long long unsigned int&, long long unsigned int&, long long unsigned int&, std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >}; _Tp = rocksdb::BlobFileAddition; _Alloc = std::allocator]', inlined from 'rocksdb::Status rocksdb::BlobFileBuilder::CloseBlobFile()' at /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_builder.cc:345:37: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 6%] Building CXX object CMakeFiles/rocksdb.dir/db/blob/blob_log_format.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/blob/blob_log_format.cc.o -MF CMakeFiles/rocksdb.dir/db/blob/blob_log_format.cc.o.d -o CMakeFiles/rocksdb.dir/db/blob/blob_log_format.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_log_format.cc [ 6%] Building CXX object CMakeFiles/rocksdb.dir/db/blob/blob_log_sequential_reader.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/blob/blob_log_sequential_reader.cc.o -MF CMakeFiles/rocksdb.dir/db/blob/blob_log_sequential_reader.cc.o.d -o CMakeFiles/rocksdb.dir/db/blob/blob_log_sequential_reader.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_log_sequential_reader.cc In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:12, from /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_read_request.h:13, from /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_reader.h:11, from /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_reader.cc:6: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::FSReadRequest}; _Tp = rocksdb::FSReadRequest; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 [ 6%] Building CXX object CMakeFiles/rocksdb.dir/db/blob/blob_log_writer.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/blob/blob_log_writer.cc.o -MF CMakeFiles/rocksdb.dir/db/blob/blob_log_writer.cc.o.d -o CMakeFiles/rocksdb.dir/db/blob/blob_log_writer.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_log_writer.cc In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'void rocksdb::BlobFileReader::MultiGetBlob(const rocksdb::ReadOptions&, rocksdb::MemoryAllocator*, rocksdb::autovector > >&, uint64_t*) const' at /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_reader.cc:434:26: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::FSReadRequest}; _Tp = rocksdb::FSReadRequest; _Alloc = std::allocator]', inlined from 'void rocksdb::BlobFileReader::MultiGetBlob(const rocksdb::ReadOptions&, rocksdb::MemoryAllocator*, rocksdb::autovector > >&, uint64_t*) const' at /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_reader.cc:440:27: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 7%] Building CXX object CMakeFiles/rocksdb-shared.dir/cache/secondary_cache.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/cache/secondary_cache.cc.o -MF CMakeFiles/rocksdb-shared.dir/cache/secondary_cache.cc.o.d -o CMakeFiles/rocksdb-shared.dir/cache/secondary_cache.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/secondary_cache.cc [ 7%] Building CXX object CMakeFiles/rocksdb.dir/db/blob/blob_source.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/blob/blob_source.cc.o -MF CMakeFiles/rocksdb.dir/db/blob/blob_source.cc.o.d -o CMakeFiles/rocksdb.dir/db/blob/blob_source.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_source.cc [ 7%] Building CXX object CMakeFiles/rocksdb-shared.dir/cache/secondary_cache_adapter.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/cache/secondary_cache_adapter.cc.o -MF CMakeFiles/rocksdb-shared.dir/cache/secondary_cache_adapter.cc.o.d -o CMakeFiles/rocksdb-shared.dir/cache/secondary_cache_adapter.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/secondary_cache_adapter.cc [ 7%] Building CXX object CMakeFiles/rocksdb.dir/db/blob/prefetch_buffer_collection.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/blob/prefetch_buffer_collection.cc.o -MF CMakeFiles/rocksdb.dir/db/blob/prefetch_buffer_collection.cc.o.d -o CMakeFiles/rocksdb.dir/db/blob/prefetch_buffer_collection.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/prefetch_buffer_collection.cc [ 7%] Linking CXX static library libtestharness.a /usr/bin/cmake -P CMakeFiles/testharness.dir/cmake_clean_target.cmake /usr/bin/cmake -E cmake_link_script CMakeFiles/testharness.dir/link.txt --verbose=1 /usr/bin/ar qc libtestharness.a CMakeFiles/testharness.dir/test_util/mock_time_env.cc.o CMakeFiles/testharness.dir/test_util/secondary_cache_test_util.cc.o CMakeFiles/testharness.dir/test_util/testharness.cc.o /usr/bin/ranlib libtestharness.a make[3]: Leaving directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' [ 7%] Built target testharness [ 7%] Building CXX object CMakeFiles/rocksdb.dir/db/builder.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/builder.cc.o -MF CMakeFiles/rocksdb.dir/db/builder.cc.o.d -o CMakeFiles/rocksdb.dir/db/builder.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/builder.cc [ 7%] Building CXX object CMakeFiles/rocksdb.dir/db/c.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/c.cc.o -MF CMakeFiles/rocksdb.dir/db/c.cc.o.d -o CMakeFiles/rocksdb.dir/db/c.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/c.cc [ 7%] Building CXX object CMakeFiles/rocksdb.dir/db/coalescing_iterator.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/coalescing_iterator.cc.o -MF CMakeFiles/rocksdb.dir/db/coalescing_iterator.cc.o.d -o CMakeFiles/rocksdb.dir/db/coalescing_iterator.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/coalescing_iterator.cc [ 8%] Building CXX object CMakeFiles/rocksdb.dir/db/column_family.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/column_family.cc.o -MF CMakeFiles/rocksdb.dir/db/column_family.cc.o.d -o CMakeFiles/rocksdb.dir/db/column_family.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/column_family.cc [ 8%] Building CXX object CMakeFiles/rocksdb-shared.dir/cache/sharded_cache.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/cache/sharded_cache.cc.o -MF CMakeFiles/rocksdb-shared.dir/cache/sharded_cache.cc.o.d -o CMakeFiles/rocksdb-shared.dir/cache/sharded_cache.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/sharded_cache.cc [ 8%] Building CXX object CMakeFiles/rocksdb.dir/db/compaction/compaction.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/compaction/compaction.cc.o -MF CMakeFiles/rocksdb.dir/db/compaction/compaction.cc.o.d -o CMakeFiles/rocksdb.dir/db/compaction/compaction.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction.cc [ 8%] Building CXX object CMakeFiles/rocksdb-shared.dir/cache/tiered_secondary_cache.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/cache/tiered_secondary_cache.cc.o -MF CMakeFiles/rocksdb-shared.dir/cache/tiered_secondary_cache.cc.o.d -o CMakeFiles/rocksdb-shared.dir/cache/tiered_secondary_cache.cc.o -c /build/reproducible-path/rocksdb-9.3.1/cache/tiered_secondary_cache.cc [ 8%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/arena_wrapped_db_iter.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/arena_wrapped_db_iter.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/arena_wrapped_db_iter.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/arena_wrapped_db_iter.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/arena_wrapped_db_iter.cc [ 8%] Building CXX object CMakeFiles/rocksdb.dir/db/compaction/compaction_iterator.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/compaction/compaction_iterator.cc.o -MF CMakeFiles/rocksdb.dir/db/compaction/compaction_iterator.cc.o.d -o CMakeFiles/rocksdb.dir/db/compaction/compaction_iterator.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_iterator.cc In file included from /usr/include/c++/13/vector:65, from /build/reproducible-path/rocksdb-9.3.1/db/column_family.h:15, from /build/reproducible-path/rocksdb-9.3.1/db/column_family.cc:10: /usr/include/c++/13/bits/stl_uninitialized.h: In function '_ForwardIterator std::__do_uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]': /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 113 | __do_uninit_copy(_InputIterator __first, _InputIterator __last, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; _Tp = rocksdb::DbPath]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:606:31, inlined from 'rocksdb::ColumnFamilyOptions::ColumnFamilyOptions(const rocksdb::ColumnFamilyOptions&)' at /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h:66:8: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; _Tp = rocksdb::DbPath]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::pointer std::vector<_Tp, _Alloc>::_M_allocate_and_copy(size_type, _ForwardIterator, _ForwardIterator) [with _ForwardIterator = __gnu_cxx::__normal_iterator >; _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:1622:35, inlined from 'std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/vector.tcc:238:44, inlined from 'rocksdb::ColumnFamilyOptions rocksdb::SanitizeOptions(const ImmutableDBOptions&, const ColumnFamilyOptions&)' at /build/reproducible-path/rocksdb-9.3.1/db/column_family.cc:356:34: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 8%] Building CXX object CMakeFiles/rocksdb.dir/db/compaction/compaction_picker.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/compaction/compaction_picker.cc.o -MF CMakeFiles/rocksdb.dir/db/compaction/compaction_picker.cc.o.d -o CMakeFiles/rocksdb.dir/db/compaction/compaction_picker.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_picker.cc [ 8%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/attribute_group_iterator_impl.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/attribute_group_iterator_impl.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/attribute_group_iterator_impl.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/attribute_group_iterator_impl.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/attribute_group_iterator_impl.cc In file included from /usr/include/c++/13/vector:65, from /build/reproducible-path/rocksdb-9.3.1/db/c.cc:15: /usr/include/c++/13/bits/stl_uninitialized.h: In function '_ForwardIterator std::__do_uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]': /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 113 | __do_uninit_copy(_InputIterator __first, _InputIterator __last, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; _Tp = rocksdb::DbPath]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::pointer std::vector<_Tp, _Alloc>::_M_allocate_and_copy(size_type, _ForwardIterator, _ForwardIterator) [with _ForwardIterator = __gnu_cxx::__normal_iterator >; _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:1622:35, inlined from 'std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/vector.tcc:238:44: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; _Tp = rocksdb::DbPath]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:606:31, inlined from 'rocksdb::DBOptions::DBOptions(const rocksdb::DBOptions&)' at /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h:489:8: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 8%] Building CXX object CMakeFiles/rocksdb.dir/db/compaction/compaction_job.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/compaction/compaction_job.cc.o -MF CMakeFiles/rocksdb.dir/db/compaction/compaction_job.cc.o.d -o CMakeFiles/rocksdb.dir/db/compaction/compaction_job.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; _Tp = rocksdb::DbPath]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:606:31, inlined from 'rocksdb::ColumnFamilyOptions::ColumnFamilyOptions(const rocksdb::ColumnFamilyOptions&)' at /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h:66:8: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 8%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/blob/blob_contents.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/blob/blob_contents.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/blob/blob_contents.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/blob/blob_contents.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_contents.cc In file included from /usr/include/c++/13/vector:72: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {std::__cxx11::basic_string, std::allocator >, rocksdb::ColumnFamilyOptions}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {std::__cxx11::basic_string, std::allocator >, rocksdb::ColumnFamilyOptions}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 9%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/blob/blob_fetcher.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/blob/blob_fetcher.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/blob/blob_fetcher.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/blob/blob_fetcher.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_fetcher.cc [ 9%] Building CXX object CMakeFiles/rocksdb.dir/db/compaction/compaction_picker_fifo.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/compaction/compaction_picker_fifo.cc.o -MF CMakeFiles/rocksdb.dir/db/compaction/compaction_picker_fifo.cc.o.d -o CMakeFiles/rocksdb.dir/db/compaction/compaction_picker_fifo.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_picker_fifo.cc [ 9%] Building CXX object CMakeFiles/rocksdb.dir/db/compaction/compaction_picker_level.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/compaction/compaction_picker_level.cc.o -MF CMakeFiles/rocksdb.dir/db/compaction/compaction_picker_level.cc.o.d -o CMakeFiles/rocksdb.dir/db/compaction/compaction_picker_level.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_picker_level.cc [ 9%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_addition.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_addition.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_addition.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_addition.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.cc [ 9%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_builder.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_builder.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_builder.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_builder.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_builder.cc [ 10%] Building CXX object CMakeFiles/rocksdb.dir/db/compaction/compaction_picker_universal.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/compaction/compaction_picker_universal.cc.o -MF CMakeFiles/rocksdb.dir/db/compaction/compaction_picker_universal.cc.o.d -o CMakeFiles/rocksdb.dir/db/compaction/compaction_picker_universal.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_picker_universal.cc [ 10%] Building CXX object CMakeFiles/rocksdb.dir/db/compaction/compaction_service_job.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/compaction/compaction_service_job.cc.o -MF CMakeFiles/rocksdb.dir/db/compaction/compaction_service_job.cc.o.d -o CMakeFiles/rocksdb.dir/db/compaction/compaction_service_job.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_service_job.cc In file included from /usr/include/c++/13/vector:72, from /usr/include/c++/13/functional:64, from /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.h:13, from /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:10: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::BlobFileAddition}; _Tp = rocksdb::BlobFileAddition; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {long long unsigned int&, long long unsigned int&, long long unsigned int&}; _Tp = rocksdb::BlobFileGarbage; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 [ 10%] Building CXX object CMakeFiles/rocksdb.dir/db/compaction/compaction_state.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/compaction/compaction_state.cc.o -MF CMakeFiles/rocksdb.dir/db/compaction/compaction_state.cc.o.d -o CMakeFiles/rocksdb.dir/db/compaction/compaction_state.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_state.cc In file included from /usr/include/c++/13/vector:72, from /usr/include/c++/13/functional:64, from /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_builder.h:8, from /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_builder.cc:6: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&, long long unsigned int&, long long unsigned int&, std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >}; _Tp = rocksdb::BlobFileAddition; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {const long long unsigned int&, long long unsigned int&, long long unsigned int&, std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >}; _Tp = rocksdb::BlobFileAddition; _Alloc = std::allocator]', inlined from 'rocksdb::Status rocksdb::BlobFileBuilder::CloseBlobFile()' at /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_builder.cc:345:37: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::Compaction*&, std::optional, std::optional, unsigned int}; _Tp = rocksdb::SubcompactionState; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, const rocksdb::FileMetaData&}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, const rocksdb::FileMetaData&}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, const rocksdb::FileMetaData&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:503:28, inlined from 'void rocksdb::SubcompactionState::AddOutputsEdit(rocksdb::VersionEdit*) const' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/subcompaction_state.h:173:24, inlined from 'rocksdb::Status rocksdb::CompactionJob::InstallCompactionResults(const rocksdb::MutableCFOptions&, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:1756:31: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(T&&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:274:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, const rocksdb::FileMetaData&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:504:35, inlined from 'void rocksdb::SubcompactionState::AddOutputsEdit(rocksdb::VersionEdit*) const' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/subcompaction_state.h:173:24, inlined from 'rocksdb::Status rocksdb::CompactionJob::InstallCompactionResults(const rocksdb::MutableCFOptions&, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:1756:31: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, const rocksdb::FileMetaData&}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, const rocksdb::FileMetaData&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:503:28, inlined from 'void rocksdb::SubcompactionState::AddOutputsEdit(rocksdb::VersionEdit*) const' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/subcompaction_state.h:176:24, inlined from 'rocksdb::Status rocksdb::CompactionJob::InstallCompactionResults(const rocksdb::MutableCFOptions&, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:1756:31: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(T&&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:274:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, const rocksdb::FileMetaData&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:504:35, inlined from 'void rocksdb::SubcompactionState::AddOutputsEdit(rocksdb::VersionEdit*) const' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/subcompaction_state.h:176:24, inlined from 'rocksdb::Status rocksdb::CompactionJob::InstallCompactionResults(const rocksdb::MutableCFOptions&, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:1756:31: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::BlobFileAddition}; _Tp = rocksdb::BlobFileAddition; _Alloc = std::allocator]', inlined from 'void rocksdb::VersionEdit::AddBlobFile(rocksdb::BlobFileAddition)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:545:38, inlined from 'rocksdb::Status rocksdb::CompactionJob::InstallCompactionResults(const rocksdb::MutableCFOptions&, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:1759:24: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(T&&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:274:22, inlined from 'void rocksdb::VersionEdit::AddBlobFile(rocksdb::BlobFileAddition)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:546:35, inlined from 'rocksdb::Status rocksdb::CompactionJob::InstallCompactionResults(const rocksdb::MutableCFOptions&, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:1759:24: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {long long unsigned int&, long long unsigned int&, long long unsigned int&}; _Tp = rocksdb::BlobFileGarbage; _Alloc = std::allocator]', inlined from 'void rocksdb::VersionEdit::AddBlobFileGarbage(uint64_t, uint64_t, uint64_t)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:571:37, inlined from 'rocksdb::Status rocksdb::CompactionJob::InstallCompactionResults(const rocksdb::MutableCFOptions&, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:1782:29: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 10%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_cache.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_cache.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_cache.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_cache.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_cache.cc /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::FileMetaData, const rocksdb::InternalKeyComparator&, bool&, bool&, long long unsigned int&}; _Tp = rocksdb::CompactionOutputs::Output; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::FileMetaData, const rocksdb::InternalKeyComparator&, bool&, bool&, long long unsigned int&}; _Tp = rocksdb::CompactionOutputs::Output; _Alloc = std::allocator]', inlined from 'void rocksdb::CompactionOutputs::AddOutput(rocksdb::FileMetaData&&, const rocksdb::InternalKeyComparator&, bool, bool, uint64_t)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_outputs.h:52:26, inlined from 'rocksdb::Status rocksdb::CompactionJob::OpenCompactionOutputFile(rocksdb::SubcompactionState*, rocksdb::CompactionOutputs&)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:1943:22: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::Compaction*&, std::optional, std::optional, unsigned int}; _Tp = rocksdb::SubcompactionState; _Alloc = std::allocator]', inlined from 'void rocksdb::CompactionJob::Prepare()' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:265:48: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 10%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_garbage.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_garbage.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_garbage.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_garbage.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_garbage.cc [ 10%] Building CXX object CMakeFiles/rocksdb.dir/db/compaction/compaction_outputs.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/compaction/compaction_outputs.cc.o -MF CMakeFiles/rocksdb.dir/db/compaction/compaction_outputs.cc.o.d -o CMakeFiles/rocksdb.dir/db/compaction/compaction_outputs.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_outputs.cc [ 10%] Building CXX object CMakeFiles/rocksdb.dir/db/compaction/sst_partitioner.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/compaction/sst_partitioner.cc.o -MF CMakeFiles/rocksdb.dir/db/compaction/sst_partitioner.cc.o.d -o CMakeFiles/rocksdb.dir/db/compaction/sst_partitioner.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/sst_partitioner.cc In file included from /usr/include/c++/13/vector:72, from /usr/include/c++/13/functional:64, from /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.h:13, from /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_service_job.cc:11: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {std::__cxx11::basic_string, std::allocator >, const long long unsigned int&, const long long unsigned int&, std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >, const long long unsigned int&, const long long unsigned int&, const long long unsigned int&, long long unsigned int, const bool&, const std::array&}; _Tp = rocksdb::CompactionServiceOutputFile; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::Compaction*&, std::optional, std::optional, int}; _Tp = rocksdb::SubcompactionState; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::Compaction*&, std::optional, std::optional, int}; _Tp = rocksdb::SubcompactionState; _Alloc = std::allocator]', inlined from 'rocksdb::Status rocksdb::CompactionServiceCompactionJob::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_service_job.cc:267:44: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {std::__cxx11::basic_string, std::allocator >, const long long unsigned int&, const long long unsigned int&, std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >, const long long unsigned int&, const long long unsigned int&, const long long unsigned int&, long long unsigned int, const bool&, const std::array&}; _Tp = rocksdb::CompactionServiceOutputFile; _Alloc = std::allocator]', inlined from 'rocksdb::Status rocksdb::CompactionServiceCompactionJob::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_service_job.cc:333:50: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ [ 10%] Building CXX object CMakeFiles/rocksdb.dir/db/compaction/subcompaction_state.cc.o [ 10%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_meta.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/compaction/subcompaction_state.cc.o -MF CMakeFiles/rocksdb.dir/db/compaction/subcompaction_state.cc.o.d -o CMakeFiles/rocksdb.dir/db/compaction/subcompaction_state.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/subcompaction_state.cc /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_meta.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_meta.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_meta.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_meta.cc In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'rocksdb::Status rocksdb::ParseVector(const ConfigOptions&, const OptionTypeInfo&, char, const std::string&, const std::string&, std::vector<_RealType>*) [with T = long long unsigned int]' at /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/utilities/options_type.h:1125:29: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::CompactionServiceOutputFile&}; _Tp = rocksdb::CompactionServiceOutputFile; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::CompactionServiceOutputFile&}; _Tp = rocksdb::CompactionServiceOutputFile; _Alloc = std::allocator]', inlined from 'rocksdb::Status rocksdb::ParseVector(const ConfigOptions&, const OptionTypeInfo&, char, const std::string&, const std::string&, std::vector<_RealType>*) [with T = CompactionServiceOutputFile]' at /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/utilities/options_type.h:1125:29: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::FileMetaData, const rocksdb::InternalKeyComparator&, bool&, bool&, long long unsigned int&}; _Tp = rocksdb::CompactionOutputs::Output; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::FileMetaData, const rocksdb::InternalKeyComparator&, bool&, bool&, long long unsigned int&}; _Tp = rocksdb::CompactionOutputs::Output; _Alloc = std::allocator]', inlined from 'void rocksdb::CompactionOutputs::AddOutput(rocksdb::FileMetaData&&, const rocksdb::InternalKeyComparator&, bool, bool, uint64_t)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_outputs.h:52:26, inlined from 'rocksdb::CompactionServiceJobStatus rocksdb::CompactionJob::ProcessKeyValueCompactionWithCompactionService(rocksdb::SubcompactionState*)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_service_job.cc:198:37: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 10%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_reader.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_reader.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_reader.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/blob/blob_file_reader.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_reader.cc [ 10%] Building CXX object CMakeFiles/rocksdb.dir/db/convenience.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/convenience.cc.o -MF CMakeFiles/rocksdb.dir/db/convenience.cc.o.d -o CMakeFiles/rocksdb.dir/db/convenience.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/convenience.cc [ 10%] Building CXX object CMakeFiles/rocksdb.dir/db/db_filesnapshot.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/db_filesnapshot.cc.o -MF CMakeFiles/rocksdb.dir/db/db_filesnapshot.cc.o.d -o CMakeFiles/rocksdb.dir/db/db_filesnapshot.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_filesnapshot.cc [ 11%] Building CXX object CMakeFiles/rocksdb.dir/db/db_impl/compacted_db_impl.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/db_impl/compacted_db_impl.cc.o -MF CMakeFiles/rocksdb.dir/db/db_impl/compacted_db_impl.cc.o.d -o CMakeFiles/rocksdb.dir/db/db_impl/compacted_db_impl.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/compacted_db_impl.cc In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:12, from /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_read_request.h:13, from /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_reader.h:11, from /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_reader.cc:6: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::FSReadRequest}; _Tp = rocksdb::FSReadRequest; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'void rocksdb::BlobFileReader::MultiGetBlob(const rocksdb::ReadOptions&, rocksdb::MemoryAllocator*, rocksdb::autovector > >&, uint64_t*) const' at /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_reader.cc:434:26: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::FSReadRequest}; _Tp = rocksdb::FSReadRequest; _Alloc = std::allocator]', inlined from 'void rocksdb::BlobFileReader::MultiGetBlob(const rocksdb::ReadOptions&, rocksdb::MemoryAllocator*, rocksdb::autovector > >&, uint64_t*) const' at /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_reader.cc:440:27: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 11%] Building CXX object CMakeFiles/rocksdb.dir/db/db_impl/db_impl.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/db_impl/db_impl.cc.o -MF CMakeFiles/rocksdb.dir/db/db_impl/db_impl.cc.o.d -o CMakeFiles/rocksdb.dir/db/db_impl/db_impl.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.cc [ 11%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/blob/blob_garbage_meter.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/blob/blob_garbage_meter.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/blob/blob_garbage_meter.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/blob/blob_garbage_meter.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_garbage_meter.cc [ 11%] Building CXX object CMakeFiles/rocksdb.dir/db/db_impl/db_impl_write.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/db_impl/db_impl_write.cc.o -MF CMakeFiles/rocksdb.dir/db/db_impl/db_impl_write.cc.o.d -o CMakeFiles/rocksdb.dir/db/db_impl/db_impl_write.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_write.cc [ 12%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/blob/blob_log_format.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/blob/blob_log_format.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/blob/blob_log_format.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/blob/blob_log_format.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_log_format.cc In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/db_filesnapshot.cc:12: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'virtual rocksdb::Status rocksdb::DBImpl::GetSortedWalFiles(rocksdb::VectorLogPtr&)' at /build/reproducible-path/rocksdb-9.3.1/db/db_filesnapshot.cc:116:37: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ [ 12%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/blob/blob_log_sequential_reader.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/blob/blob_log_sequential_reader.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/blob/blob_log_sequential_reader.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/blob/blob_log_sequential_reader.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_log_sequential_reader.cc /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {}; _Tp = rocksdb::LiveFileStorageInfo; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {}; _Tp = rocksdb::LiveFileStorageInfo; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:65, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/compacted_db_impl.h:8, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/compacted_db_impl.cc:6: /usr/include/c++/13/bits/stl_uninitialized.h: In function '_ForwardIterator std::__do_uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]': /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 113 | __do_uninit_copy(_InputIterator __first, _InputIterator __last, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; _Tp = rocksdb::DbPath]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:606:31, inlined from 'rocksdb::ColumnFamilyOptions::ColumnFamilyOptions(const rocksdb::ColumnFamilyOptions&)' at /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h:66:8: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 12%] Building CXX object CMakeFiles/rocksdb.dir/db/db_impl/db_impl_compaction_flush.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/db_impl/db_impl_compaction_flush.cc.o -MF CMakeFiles/rocksdb.dir/db/db_impl/db_impl_compaction_flush.cc.o.d -o CMakeFiles/rocksdb.dir/db/db_impl/db_impl_compaction_flush.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc [ 12%] Building CXX object CMakeFiles/rocksdb.dir/db/db_impl/db_impl_files.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/db_impl/db_impl_files.cc.o -MF CMakeFiles/rocksdb.dir/db/db_impl/db_impl_files.cc.o.d -o CMakeFiles/rocksdb.dir/db/db_impl/db_impl_files.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_files.cc [ 12%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/blob/blob_log_writer.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/blob/blob_log_writer.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/blob/blob_log_writer.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/blob/blob_log_writer.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_log_writer.cc [ 12%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/blob/blob_source.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/blob/blob_source.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/blob/blob_source.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/blob/blob_source.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/blob_source.cc [ 12%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/blob/prefetch_buffer_collection.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/blob/prefetch_buffer_collection.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/blob/prefetch_buffer_collection.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/blob/prefetch_buffer_collection.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/blob/prefetch_buffer_collection.cc [ 12%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/builder.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/builder.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/builder.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/builder.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/builder.cc In file included from /usr/include/c++/13/vector:72, from /usr/include/c++/13/functional:64, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.h:13, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_files.cc:13: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 [ 12%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/c.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/c.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/c.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/c.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/c.cc In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::DBImpl::FindObsoleteFiles(rocksdb::JobContext*, bool, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_files.cc:289:48: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In file included from /usr/include/c++/13/deque:65, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.h:12: /usr/include/c++/13/bits/stl_uninitialized.h: In function '_ForwardIterator std::__do_uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator*, vector > >; _ForwardIterator = pair*]': /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 113 | __do_uninit_copy(_InputIterator __first, _InputIterator __last, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator*, std::vector > >; _ForwardIterator = std::pair*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator*, vector > >; _ForwardIterator = pair*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator*, vector > >; _ForwardIterator = pair*; _Tp = pair]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = std::pair; _Alloc = std::allocator >]' at /usr/include/c++/13/bits/stl_vector.h:606:31, inlined from 'rocksdb::VersionEdit::VersionEdit(const rocksdb::VersionEdit&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:390:7: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/builder.h:11, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:12: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::SnapshotList::GetAll(std::vector*, rocksdb::SequenceNumber*, const rocksdb::SequenceNumber&) const' at /build/reproducible-path/rocksdb-9.3.1/db/snapshot_impl.h:139:22, inlined from 'std::vector rocksdb::SnapshotList::GetAll(rocksdb::SequenceNumber*, const rocksdb::SequenceNumber&) const' at /build/reproducible-path/rocksdb-9.3.1/db/snapshot_impl.h:114:11, inlined from 'void rocksdb::DBImpl::GetSnapshotContext(rocksdb::JobContext*, std::vector*, rocksdb::SequenceNumber*, rocksdb::SnapshotChecker**)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:4355:37: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const rocksdb::MutableCFOptions&}; _Tp = rocksdb::MutableCFOptions; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::BlobFileAdditionInfo}; _Tp = rocksdb::BlobFileAdditionInfo; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::BlobFileGarbageInfo}; _Tp = rocksdb::BlobFileGarbageInfo; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::emplace_back(Args&& ...) [with Args = {long long unsigned int&}; T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:303:25, inlined from 'void rocksdb::DBImpl::PurgeObsoleteFiles(rocksdb::JobContext&, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_files.cc:623:35: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:72, from /usr/include/c++/13/functional:64, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.h:13, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.cc:9: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {long long unsigned int&, rocksdb::WalMetadata}; _Tp = rocksdb::WalAddition; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {long long unsigned int}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::ColumnFamilyData* const&, const long long unsigned int&, rocksdb::SuperVersionContext*, rocksdb::FlushReason&}; _Tp = rocksdb::DBImpl::BGFlushArg; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::CompactionFileInfo}; _Tp = rocksdb::CompactionFileInfo; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::CompactionFileInfo}; _Tp = rocksdb::CompactionFileInfo; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::BlobFileAdditionInfo}; _Tp = rocksdb::BlobFileAdditionInfo; _Alloc = std::allocator]', inlined from 'void rocksdb::DBImpl::BuildCompactionJobInfo(const rocksdb::ColumnFamilyData*, rocksdb::Compaction*, const rocksdb::Status&, const rocksdb::CompactionJobStats&, int, rocksdb::CompactionJobInfo*) const' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:4234:63: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::BlobFileGarbageInfo}; _Tp = rocksdb::BlobFileGarbageInfo; _Alloc = std::allocator]', inlined from 'void rocksdb::DBImpl::BuildCompactionJobInfo(const rocksdb::ColumnFamilyData*, rocksdb::Compaction*, const rocksdb::Status&, const rocksdb::CompactionJobStats&, int, rocksdb::CompactionJobInfo*) const' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:4245:62: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {long long unsigned int}; _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::emplace_back(Args&& ...) [with Args = {long long unsigned int}; T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:303:25, inlined from 'rocksdb::Status rocksdb::DBImpl::FlushMemTable(rocksdb::ColumnFamilyData*, const rocksdb::FlushOptions&, rocksdb::FlushReason, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:2361:42: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {long long unsigned int}; _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::emplace_back(Args&& ...) [with Args = {long long unsigned int}; T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:303:25, inlined from 'rocksdb::Status rocksdb::DBImpl::FlushMemTable(rocksdb::ColumnFamilyData*, const rocksdb::FlushOptions&, rocksdb::FlushReason, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:2389:46: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 12%] Building CXX object CMakeFiles/rocksdb.dir/db/db_impl/db_impl_open.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/db_impl/db_impl_open.cc.o -MF CMakeFiles/rocksdb.dir/db/db_impl/db_impl_open.cc.o.d -o CMakeFiles/rocksdb.dir/db/db_impl/db_impl_open.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_open.cc In file included from /usr/include/c++/13/map:62, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.h:16: /usr/include/c++/13/bits/stl_tree.h: In function 'std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_emplace_hint_unique(const_iterator, _Args&& ...) [with _Args = {const std::piecewise_construct_t&, std::tuple, std::allocator >&>, std::tuple<>}; _Key = std::__cxx11::basic_string; _Val = std::pair, long long unsigned int>; _KeyOfValue = std::_Select1st, long long unsigned int> >; _Compare = std::less >; _Alloc = std::allocator, long long unsigned int> >]': /usr/include/c++/13/bits/stl_tree.h:2458:7: note: parameter passing for argument of type 'std::_Rb_tree, std::pair, long long unsigned int>, std::_Select1st, long long unsigned int> >, std::less >, std::allocator, long long unsigned int> > >::const_iterator' changed in GCC 7.1 2458 | _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'rocksdb::Status rocksdb::DBImpl::RetryFlushesForErrorRecovery(rocksdb::FlushReason, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:2618:35: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(T&&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:274:22, inlined from 'rocksdb::Status rocksdb::DBImpl::RetryFlushesForErrorRecovery(rocksdb::FlushReason, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:2622:35: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In file included from /usr/include/c++/13/map:63: /usr/include/c++/13/bits/stl_map.h: In member function 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = std::__cxx11::basic_string; _Tp = long long unsigned int; _Compare = std::less >; _Alloc = std::allocator, long long unsigned int> >]': /usr/include/c++/13/bits/stl_map.h:513:44: note: parameter passing for argument of type 'std::_Rb_tree, std::pair, long long unsigned int>, std::_Select1st, long long unsigned int> >, std::less >, std::allocator, long long unsigned int> > >::const_iterator' changed in GCC 7.1 513 | __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 514 | std::tuple(__k), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 515 | std::tuple<>()); | ~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::ColumnFamilyHandle*&, const rocksdb::Slice&, rocksdb::PinnableSlice*&, rocksdb::PinnableWideColumns*&, std::__cxx11::basic_string, std::allocator >*, rocksdb::Status*}; _Tp = rocksdb::KeyContext; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::ColumnFamilyHandle*&, const rocksdb::Slice&, rocksdb::PinnableSlice*&, rocksdb::PinnableWideColumns*&, std::__cxx11::basic_string, std::allocator >*, rocksdb::Status*}; _Tp = rocksdb::KeyContext; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {const rocksdb::MutableCFOptions&}; _Tp = rocksdb::MutableCFOptions; _Alloc = std::allocator]', inlined from 'rocksdb::Status rocksdb::DBImpl::AtomicFlushMemTablesToOutputFiles(const rocksdb::autovector&, bool*, rocksdb::JobContext*, rocksdb::LogBuffer*, rocksdb::Env::Priority)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:543:40: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::ColumnFamilyData* const&, const long long unsigned int&, rocksdb::SuperVersionContext*, rocksdb::FlushReason&}; _Tp = rocksdb::DBImpl::BGFlushArg; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::emplace_back(Args&& ...) [with Args = {rocksdb::ColumnFamilyData* const&, const long long unsigned int&, rocksdb::SuperVersionContext*, rocksdb::FlushReason&}; T = rocksdb::DBImpl::BGFlushArg; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:303:25, inlined from 'rocksdb::Status rocksdb::DBImpl::BackgroundFlush(bool*, rocksdb::JobContext*, rocksdb::LogBuffer*, rocksdb::FlushReason*, bool*, rocksdb::Env::Priority)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:3269:33: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 13%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/coalescing_iterator.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/coalescing_iterator.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/coalescing_iterator.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/coalescing_iterator.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/coalescing_iterator.cc /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:486:28: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:495:35: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {}; _Tp = rocksdb::ColumnFamilyMetaData; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {}; _Tp = rocksdb::ColumnFamilyMetaData; _Alloc = std::allocator]', inlined from 'virtual void rocksdb::DBImpl::GetAllColumnFamilyMetaData(std::vector*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.cc:4952:29: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::ColumnFamilyOptions}; _Tp = rocksdb::ColumnFamilyOptions; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::ColumnFamilyOptions}; _Tp = rocksdb::ColumnFamilyOptions; _Alloc = std::allocator]', inlined from 'void std::vector<_Tp, _Alloc>::push_back(value_type&&) [with _Tp = rocksdb::ColumnFamilyOptions; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:1299:21, inlined from 'rocksdb::Status rocksdb::DBImpl::WriteOptionsFile(const rocksdb::WriteOptions&, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.cc:5324:22: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 13%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/column_family.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/column_family.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/column_family.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/column_family.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/column_family.cc In file included from /usr/include/c++/13/deque:65, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.h:12: /usr/include/c++/13/bits/stl_uninitialized.h: In function '_ForwardIterator std::__do_uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator*, vector > >; _ForwardIterator = pair*]': /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 113 | __do_uninit_copy(_InputIterator __first, _InputIterator __last, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator*, std::vector > >; _ForwardIterator = std::pair*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator*, vector > >; _ForwardIterator = pair*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator*, vector > >; _ForwardIterator = pair*; _Tp = pair]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = std::pair; _Alloc = std::allocator >]' at /usr/include/c++/13/bits/stl_vector.h:606:31, inlined from 'rocksdb::VersionEdit::VersionEdit(const rocksdb::VersionEdit&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:390:7: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:65, from /build/reproducible-path/rocksdb-9.3.1/db/c.cc:15: /usr/include/c++/13/bits/stl_uninitialized.h: In function '_ForwardIterator std::__do_uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]': /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 113 | __do_uninit_copy(_InputIterator __first, _InputIterator __last, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; _Tp = rocksdb::DbPath]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::pointer std::vector<_Tp, _Alloc>::_M_allocate_and_copy(size_type, _ForwardIterator, _ForwardIterator) [with _ForwardIterator = __gnu_cxx::__normal_iterator >; _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:1622:35, inlined from 'std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/vector.tcc:238:44: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; _Tp = rocksdb::DbPath]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:606:31, inlined from 'rocksdb::DBOptions::DBOptions(const rocksdb::DBOptions&)' at /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h:489:8: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; _Tp = rocksdb::DbPath]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:606:31, inlined from 'rocksdb::ColumnFamilyOptions::ColumnFamilyOptions(const rocksdb::ColumnFamilyOptions&)' at /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h:66:8: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/bits/stl_algo.h:61, from /usr/include/c++/13/algorithm:61, from /build/reproducible-path/rocksdb-9.3.1/util/coding.h:19, from /build/reproducible-path/rocksdb-9.3.1/db/dbformat.h:22, from /build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h:14, from /build/reproducible-path/rocksdb-9.3.1/db/builder.h:13, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_open.cc:11: /usr/include/c++/13/bits/stl_heap.h: In function 'void std::__adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Distance = int; _Tp = long long unsigned int; _Compare = __gnu_cxx::__ops::_Iter_less_iter]': /usr/include/c++/13/bits/stl_heap.h:224:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 224 | __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex, | ^~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:72: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {std::__cxx11::basic_string, std::allocator >, rocksdb::ColumnFamilyOptions}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h: In function 'void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Size = int; _Compare = __gnu_cxx::__ops::_Iter_less_iter]': /usr/include/c++/13/bits/stl_algo.h:1918:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1918 | __introsort_loop(_RandomAccessIterator __first, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:1918:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 /usr/include/c++/13/bits/stl_algo.h:1932:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1932 | std::__introsort_loop(__cut, __last, __depth_limit, __comp); | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h: In function 'void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]': /usr/include/c++/13/bits/stl_algo.h:1812:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1812 | __insertion_sort(_RandomAccessIterator __first, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:1812:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {std::__cxx11::basic_string, std::allocator >, rocksdb::ColumnFamilyOptions}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {long long unsigned int&, rocksdb::WalMetadata}; _Tp = rocksdb::WalAddition; _Alloc = std::allocator]', inlined from 'void rocksdb::VersionEdit::AddWal(rocksdb::WalNumber, rocksdb::WalMetadata)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:594:32, inlined from 'void rocksdb::DBImpl::MarkLogsSynced(uint64_t, bool, rocksdb::VersionEdit*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.cc:1759:28: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_uninitialized.h: In function '_ForwardIterator std::__do_uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator > >; _ForwardIterator = rocksdb::IngestedFileInfo*]': /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator > >' changed in GCC 7.1 113 | __do_uninit_copy(_InputIterator __first, _InputIterator __last, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator > >' changed in GCC 7.1 In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator > >; _ForwardIterator = rocksdb::IngestedFileInfo*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator > >; _ForwardIterator = rocksdb::IngestedFileInfo*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator > >; _ForwardIterator = rocksdb::IngestedFileInfo*; _Tp = rocksdb::IngestedFileInfo]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::pointer std::vector<_Tp, _Alloc>::_M_allocate_and_copy(size_type, _ForwardIterator, _ForwardIterator) [with _ForwardIterator = __gnu_cxx::__normal_iterator > >; _Tp = rocksdb::IngestedFileInfo; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:1622:35, inlined from 'void std::vector<_Tp, _Alloc>::_M_assign_aux(_ForwardIterator, _ForwardIterator, std::forward_iterator_tag) [with _ForwardIterator = __gnu_cxx::__normal_iterator > >; _Tp = rocksdb::IngestedFileInfo; _Alloc = std::allocator]' at /usr/include/c++/13/bits/vector.tcc:324:40, inlined from 'void std::vector<_Tp, _Alloc>::assign(_InputIterator, _InputIterator) [with _InputIterator = __gnu_cxx::__normal_iterator > >; = void; _Tp = rocksdb::IngestedFileInfo; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:829:17, inlined from 'rocksdb::autovector& rocksdb::autovector::assign(const rocksdb::autovector&) [with T = rocksdb::IngestedFileInfo; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:370:15, inlined from 'rocksdb::autovector::autovector(const rocksdb::autovector&) [with T = rocksdb::IngestedFileInfo; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:327:47, inlined from 'rocksdb::ExternalSstFileIngestionJob::ExternalSstFileIngestionJob(const rocksdb::ExternalSstFileIngestionJob&)' at /build/reproducible-path/rocksdb-9.3.1/db/external_sst_file_ingestion_job.h:86:7, inlined from 'void std::_Construct(_Tp*, _Args&& ...) [with _Tp = rocksdb::ExternalSstFileIngestionJob; _Args = {const rocksdb::ExternalSstFileIngestionJob&}]' at /usr/include/c++/13/bits/stl_construct.h:119:7, inlined from '_ForwardIterator std::__do_uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = const rocksdb::ExternalSstFileIngestionJob*; _ForwardIterator = rocksdb::ExternalSstFileIngestionJob*]' at /usr/include/c++/13/bits/stl_uninitialized.h:120:21: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator > >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::VersionSet*, rocksdb::ColumnFamilyData*&, const rocksdb::ImmutableDBOptions&, rocksdb::MutableDBOptions&, const rocksdb::FileOptions&, rocksdb::SnapshotList*, const rocksdb::IngestExternalFileOptions&, rocksdb::Directories*, rocksdb::EventLogger*, std::shared_ptr&}; _Tp = rocksdb::ExternalSstFileIngestionJob; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::VersionSet*, rocksdb::ColumnFamilyData*&, const rocksdb::ImmutableDBOptions&, rocksdb::MutableDBOptions&, const rocksdb::FileOptions&, rocksdb::SnapshotList*, const rocksdb::IngestExternalFileOptions&, rocksdb::Directories*, rocksdb::EventLogger*, std::shared_ptr&}; _Tp = rocksdb::ExternalSstFileIngestionJob; _Alloc = std::allocator]', inlined from 'virtual rocksdb::Status rocksdb::DBImpl::IngestExternalFiles(const std::vector&)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.cc:5762:32: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 13%] Building CXX object CMakeFiles/rocksdb.dir/db/db_impl/db_impl_debug.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/db_impl/db_impl_debug.cc.o -MF CMakeFiles/rocksdb.dir/db/db_impl/db_impl_debug.cc.o.d -o CMakeFiles/rocksdb.dir/db/db_impl/db_impl_debug.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_debug.cc [ 13%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/compaction/compaction.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/compaction/compaction.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/compaction/compaction.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/compaction/compaction.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction.cc In member function 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = std::__cxx11::basic_string; _Tp = long long unsigned int; _Compare = std::less >; _Alloc = std::allocator, long long unsigned int> >]', inlined from 'void rocksdb::DBImpl::PersistStats()' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.cc:1054:74: /usr/include/c++/13/bits/stl_map.h:513:44: note: parameter passing for argument of type 'std::_Rb_tree, std::pair, long long unsigned int>, std::_Select1st, long long unsigned int> >, std::less >, std::allocator, long long unsigned int> > >::const_iterator' changed in GCC 7.1 513 | __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 514 | std::tuple(__k), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 515 | std::tuple<>()); | ~~~~~~~~~~~~~~~ In member function 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = std::__cxx11::basic_string; _Tp = long long unsigned int; _Compare = std::less >; _Alloc = std::allocator, long long unsigned int> >]', inlined from 'void rocksdb::DBImpl::PersistStats()' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.cc:1054:33: /usr/include/c++/13/bits/stl_map.h:513:44: note: parameter passing for argument of type 'std::_Rb_tree, std::pair, long long unsigned int>, std::_Select1st, long long unsigned int> >, std::less >, std::allocator, long long unsigned int> > >::const_iterator' changed in GCC 7.1 513 | __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 514 | std::tuple(__k), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 515 | std::tuple<>()); | ~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/builder.h:11: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::BlobFileAddition}; _Tp = rocksdb::BlobFileAddition; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, long long unsigned int}; _Tp = rocksdb::DbPath; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, long long unsigned int}; _Tp = rocksdb::DbPath; _Alloc = std::allocator]', inlined from 'rocksdb::DBOptions rocksdb::SanitizeOptions(const std::string&, const DBOptions&, bool, Status*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_open.cc:124:33: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:486:28: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:495:35: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, rocksdb::ColumnFamilyOptions&}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, rocksdb::ColumnFamilyOptions&}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::SnapshotList::GetAll(std::vector*, rocksdb::SequenceNumber*, const rocksdb::SequenceNumber&) const' at /build/reproducible-path/rocksdb-9.3.1/db/snapshot_impl.h:139:22, inlined from 'std::vector rocksdb::SnapshotList::GetAll(rocksdb::SequenceNumber*, const rocksdb::SequenceNumber&) const' at /build/reproducible-path/rocksdb-9.3.1/db/snapshot_impl.h:114:11, inlined from 'rocksdb::Status rocksdb::DBImpl::WriteLevel0TableForRecovery(int, rocksdb::ColumnFamilyData*, rocksdb::MemTable*, rocksdb::VersionEdit*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_open.cc:1672:62: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::BlobFileAddition}; _Tp = rocksdb::BlobFileAddition; _Alloc = std::allocator]', inlined from 'void rocksdb::VersionEdit::AddBlobFile(rocksdb::BlobFileAddition)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:545:38, inlined from 'rocksdb::Status rocksdb::DBImpl::WriteLevel0TableForRecovery(int, rocksdb::ColumnFamilyData*, rocksdb::MemTable*, rocksdb::VersionEdit*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_open.cc:1763:24: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(T&&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:274:22, inlined from 'void rocksdb::VersionEdit::AddBlobFile(rocksdb::BlobFileAddition)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:546:35, inlined from 'rocksdb::Status rocksdb::DBImpl::WriteLevel0TableForRecovery(int, rocksdb::ColumnFamilyData*, rocksdb::MemTable*, rocksdb::VersionEdit*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_open.cc:1763:24: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ [ 14%] Building CXX object CMakeFiles/rocksdb.dir/db/db_impl/db_impl_experimental.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/db_impl/db_impl_experimental.cc.o -MF CMakeFiles/rocksdb.dir/db/db_impl/db_impl_experimental.cc.o.d -o CMakeFiles/rocksdb.dir/db/db_impl/db_impl_experimental.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_experimental.cc In file included from /usr/include/c++/13/vector:65, from /build/reproducible-path/rocksdb-9.3.1/db/column_family.h:15, from /build/reproducible-path/rocksdb-9.3.1/db/column_family.cc:10: /usr/include/c++/13/bits/stl_uninitialized.h: In function '_ForwardIterator std::__do_uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]': /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 113 | __do_uninit_copy(_InputIterator __first, _InputIterator __last, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; _Tp = rocksdb::DbPath]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:606:31, inlined from 'rocksdb::ColumnFamilyOptions::ColumnFamilyOptions(const rocksdb::ColumnFamilyOptions&)' at /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h:66:8: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/column_family.h:15, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_debug.cc:12: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const rocksdb::FileMetaData&}; _Tp = rocksdb::FileMetaData; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; _Tp = rocksdb::DbPath]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::pointer std::vector<_Tp, _Alloc>::_M_allocate_and_copy(size_type, _ForwardIterator, _ForwardIterator) [with _ForwardIterator = __gnu_cxx::__normal_iterator >; _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:1622:35, inlined from 'std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/vector.tcc:238:44, inlined from 'rocksdb::ColumnFamilyOptions rocksdb::SanitizeOptions(const ImmutableDBOptions&, const ColumnFamilyOptions&)' at /build/reproducible-path/rocksdb-9.3.1/db/column_family.cc:356:34: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = rocksdb::FileMetaData; _Alloc = std::allocator]', inlined from 'void rocksdb::DBImpl::TEST_GetFilesMetaData(rocksdb::ColumnFamilyHandle*, std::vector >*, std::vector >*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_debug.cc:76:35: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'virtual rocksdb::Status rocksdb::DBImpl::Recover(const std::vector&, bool, bool, bool, bool, uint64_t*, RecoveryContext*, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_open.cc:781:23: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In function 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]', inlined from 'void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator >]' at /usr/include/c++/13/bits/stl_algo.h:4861:18, inlined from 'virtual rocksdb::Status rocksdb::DBImpl::Recover(const std::vector&, bool, bool, bool, bool, uint64_t*, RecoveryContext*, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_open.cc:783:16: /usr/include/c++/13/bits/stl_algo.h:1947:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1947 | std::__introsort_loop(__first, __last, | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ 1948 | std::__lg(__last - __first) * 2, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1949 | __comp); | ~~~~~~~ In function 'void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]', inlined from 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]' at /usr/include/c++/13/bits/stl_algo.h:1950:31, inlined from 'void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator >]' at /usr/include/c++/13/bits/stl_algo.h:4861:18, inlined from 'virtual rocksdb::Status rocksdb::DBImpl::Recover(const std::vector&, bool, bool, bool, bool, uint64_t*, RecoveryContext*, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_open.cc:783:16: /usr/include/c++/13/bits/stl_algo.h:1859:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1859 | std::__insertion_sort(__first, __first + int(_S_threshold), __comp); | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:1864:30: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1864 | std::__insertion_sort(__first, __last, __comp); | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ [ 14%] Building CXX object CMakeFiles/rocksdb.dir/db/db_impl/db_impl_readonly.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/db_impl/db_impl_readonly.cc.o -MF CMakeFiles/rocksdb.dir/db/db_impl/db_impl_readonly.cc.o.d -o CMakeFiles/rocksdb.dir/db/db_impl/db_impl_readonly.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_readonly.cc [ 14%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_iterator.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_iterator.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_iterator.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_iterator.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_iterator.cc [ 14%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_picker.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_picker.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_picker.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_picker.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_picker.cc [ 14%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_job.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_job.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_job.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_job.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_experimental.cc:11: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:486:28: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:495:35: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ [ 14%] Building CXX object CMakeFiles/rocksdb.dir/db/db_impl/db_impl_secondary.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/db_impl/db_impl_secondary.cc.o -MF CMakeFiles/rocksdb.dir/db/db_impl/db_impl_secondary.cc.o.d -o CMakeFiles/rocksdb.dir/db/db_impl/db_impl_secondary.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc [ 14%] Building CXX object CMakeFiles/rocksdb.dir/db/db_info_dumper.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/db_info_dumper.cc.o -MF CMakeFiles/rocksdb.dir/db/db_info_dumper.cc.o.d -o CMakeFiles/rocksdb.dir/db/db_info_dumper.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_info_dumper.cc In file included from /usr/include/c++/13/vector:65, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_readonly.h:10, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_readonly.cc:6: /usr/include/c++/13/bits/stl_uninitialized.h: In function '_ForwardIterator std::__do_uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]': /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 113 | __do_uninit_copy(_InputIterator __first, _InputIterator __last, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; _Tp = rocksdb::DbPath]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:606:31, inlined from 'rocksdb::ColumnFamilyOptions::ColumnFamilyOptions(const rocksdb::ColumnFamilyOptions&)' at /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h:66:8: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:72: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, rocksdb::ColumnFamilyOptions&}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ [ 14%] Building CXX object CMakeFiles/rocksdb.dir/db/db_iter.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/db_iter.cc.o -MF CMakeFiles/rocksdb.dir/db/db_iter.cc.o.d -o CMakeFiles/rocksdb.dir/db/db_iter.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_iter.cc In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, rocksdb::ColumnFamilyOptions&}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]', inlined from 'static rocksdb::Status rocksdb::DB::OpenForReadOnly(const rocksdb::Options&, const std::string&, rocksdb::DB**, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_readonly.cc:296:31: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 14%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_picker_fifo.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_picker_fifo.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_picker_fifo.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_picker_fifo.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_picker_fifo.cc In file included from /usr/include/c++/13/bits/stl_algo.h:61, from /usr/include/c++/13/functional:67, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.h:13, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.h:12, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:6: /usr/include/c++/13/bits/stl_heap.h: In function 'void std::__adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Distance = int; _Tp = long long unsigned int; _Compare = __gnu_cxx::__ops::_Iter_less_iter]': /usr/include/c++/13/bits/stl_heap.h:224:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 224 | __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex, | ^~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h: In function 'void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Size = int; _Compare = __gnu_cxx::__ops::_Iter_less_iter]': /usr/include/c++/13/bits/stl_algo.h:1918:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1918 | __introsort_loop(_RandomAccessIterator __first, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:1918:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 /usr/include/c++/13/bits/stl_algo.h:1932:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1932 | std::__introsort_loop(__cut, __last, __depth_limit, __comp); | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 14%] Building CXX object CMakeFiles/rocksdb.dir/db/dbformat.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/dbformat.cc.o -MF CMakeFiles/rocksdb.dir/db/dbformat.cc.o.d -o CMakeFiles/rocksdb.dir/db/dbformat.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/dbformat.cc /usr/include/c++/13/bits/stl_algo.h: In function 'void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]': /usr/include/c++/13/bits/stl_algo.h:1812:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1812 | __insertion_sort(_RandomAccessIterator __first, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:1812:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.h:10: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'rocksdb::Status rocksdb::DBImplSecondary::FindNewLogNumbers(std::vector*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:127:22: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In function 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]', inlined from 'void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator >]' at /usr/include/c++/13/bits/stl_algo.h:4861:18, inlined from 'rocksdb::Status rocksdb::DBImplSecondary::FindNewLogNumbers(std::vector*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:132:14: /usr/include/c++/13/bits/stl_algo.h:1947:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1947 | std::__introsort_loop(__first, __last, | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ 1948 | std::__lg(__last - __first) * 2, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1949 | __comp); | ~~~~~~~ In function 'void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]', inlined from 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]' at /usr/include/c++/13/bits/stl_algo.h:1950:31, inlined from 'void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator >]' at /usr/include/c++/13/bits/stl_algo.h:4861:18, inlined from 'rocksdb::Status rocksdb::DBImplSecondary::FindNewLogNumbers(std::vector*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:132:14: /usr/include/c++/13/bits/stl_algo.h:1859:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1859 | std::__insertion_sort(__first, __first + int(_S_threshold), __comp); | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:1864:30: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1864 | std::__insertion_sort(__first, __last, __comp); | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/map:62, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.h:16: /usr/include/c++/13/bits/stl_tree.h: In member function 'void std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_erase_aux(const_iterator) [with _Key = long long unsigned int; _Val = std::pair >; _KeyOfValue = std::_Select1st > >; _Compare = std::less; _Alloc = std::allocator > >]': /usr/include/c++/13/bits/stl_tree.h:2489:5: note: parameter passing for argument of type 'std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::const_iterator' changed in GCC 7.1 2489 | _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_tree.h: In member function 'std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_emplace_hint_unique(const_iterator, _Args&& ...) [with _Args = {std::pair > >}; _Key = long long unsigned int; _Val = std::pair >; _KeyOfValue = std::_Select1st > >; _Compare = std::less; _Alloc = std::allocator > >]': /usr/include/c++/13/bits/stl_tree.h:2458:7: note: parameter passing for argument of type 'std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::const_iterator' changed in GCC 7.1 2458 | _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::erase(iterator) [with _Key = long long unsigned int; _Val = std::pair >; _KeyOfValue = std::_Select1st > >; _Compare = std::less; _Alloc = std::allocator > >]', inlined from 'std::map<_Key, _Tp, _Compare, _Alloc>::iterator std::map<_Key, _Tp, _Compare, _Alloc>::erase(iterator) [with _Key = long long unsigned int; _Tp = std::unique_ptr; _Compare = std::less; _Alloc = std::allocator > >]' at /usr/include/c++/13/bits/stl_map.h:1088:26, inlined from 'rocksdb::Status rocksdb::DBImplSecondary::MaybeInitLogReader(uint64_t, rocksdb::log::FragmentBufferedReader**)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:145:25: /usr/include/c++/13/bits/stl_tree.h:1210:21: note: parameter passing for argument of type 'std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::const_iterator' changed in GCC 7.1 1210 | _M_erase_aux(__position); | ~~~~~~~~~~~~^~~~~~~~~~~~ In file included from /usr/include/c++/13/map:63: In member function 'std::map<_Key, _Tp, _Compare, _Alloc>::iterator std::map<_Key, _Tp, _Compare, _Alloc>::emplace_hint(const_iterator, _Args&& ...) [with _Args = {std::pair > >}; _Key = long long unsigned int; _Tp = std::unique_ptr; _Compare = std::less; _Alloc = std::allocator > >]', inlined from 'std::__enable_if_t, _Pair>::value, std::pair, std::_Select1st >, _Compare, typename __gnu_cxx::__alloc_traits<_Allocator>::rebind >::other>::iterator, bool> > std::map<_Key, _Tp, _Compare, _Alloc>::insert(_Pair&&) [with _Pair = std::pair >; _Key = long long unsigned int; _Tp = std::unique_ptr; _Compare = std::less; _Alloc = std::allocator > >]' at /usr/include/c++/13/bits/stl_map.h:860:27, inlined from 'rocksdb::Status rocksdb::DBImplSecondary::MaybeInitLogReader(uint64_t, rocksdb::log::FragmentBufferedReader**)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:174:24: /usr/include/c++/13/bits/stl_map.h:640:45: note: parameter passing for argument of type 'std::map >::const_iterator' {aka 'std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::const_iterator'} changed in GCC 7.1 640 | return _M_t._M_emplace_hint_unique(__pos, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~ 641 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_tree.h: In member function 'void std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_erase_aux(const_iterator, const_iterator) [with _Key = long long unsigned int; _Val = std::pair >; _KeyOfValue = std::_Select1st > >; _Compare = std::less; _Alloc = std::allocator > >]': /usr/include/c++/13/bits/stl_tree.h:2503:5: note: parameter passing for argument of type 'std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::const_iterator' changed in GCC 7.1 2503 | _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_tree.h:2503:5: note: parameter passing for argument of type 'std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::const_iterator' changed in GCC 7.1 [ 14%] Building CXX object CMakeFiles/rocksdb.dir/db/error_handler.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/error_handler.cc.o -MF CMakeFiles/rocksdb.dir/db/error_handler.cc.o.d -o CMakeFiles/rocksdb.dir/db/error_handler.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/error_handler.cc /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, rocksdb::ColumnFamilyOptions&}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, rocksdb::ColumnFamilyOptions&}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]', inlined from 'static rocksdb::Status rocksdb::DB::OpenAsSecondary(const rocksdb::Options&, const std::string&, const std::string&, rocksdb::DB**)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:746:31: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const rocksdb::ColumnFamilyDescriptor&}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::erase(const_iterator, const_iterator) [with _Key = long long unsigned int; _Val = std::pair >; _KeyOfValue = std::_Select1st > >; _Compare = std::less; _Alloc = std::allocator > >]', inlined from 'std::map<_Key, _Tp, _Compare, _Alloc>::iterator std::map<_Key, _Tp, _Compare, _Alloc>::erase(const_iterator, const_iterator) [with _Key = long long unsigned int; _Tp = std::unique_ptr; _Compare = std::less; _Alloc = std::allocator > >]' at /usr/include/c++/13/bits/stl_map.h:1139:26, inlined from 'rocksdb::Status rocksdb::DBImplSecondary::RecoverLogFiles(const std::vector&, rocksdb::SequenceNumber*, std::unordered_set*, rocksdb::JobContext*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:338:23: /usr/include/c++/13/bits/stl_tree.h:1239:21: note: parameter passing for argument of type 'std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::const_iterator' changed in GCC 7.1 1239 | _M_erase_aux(__first, __last); | ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:72, from /usr/include/c++/13/functional:64, from /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.h:13, from /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:10: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::BlobFileAddition}; _Tp = rocksdb::BlobFileAddition; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]', inlined from 'static rocksdb::Status rocksdb::DB::OpenAndCompact(const rocksdb::OpenAndCompactOptions&, const std::string&, const std::string&, const std::string&, std::string*, const rocksdb::CompactionServiceOptionsOverride&)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:978:28: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, rocksdb::ColumnFamilyOptions&}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]', inlined from 'static rocksdb::Status rocksdb::DB::OpenAndCompact(const rocksdb::OpenAndCompactOptions&, const std::string&, const std::string&, const std::string&, std::string*, const rocksdb::CompactionServiceOptionsOverride&)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:983:33: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {long long unsigned int&, long long unsigned int&, long long unsigned int&}; _Tp = rocksdb::BlobFileGarbage; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::Compaction*&, std::optional, std::optional, unsigned int}; _Tp = rocksdb::SubcompactionState; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, const rocksdb::FileMetaData&}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, const rocksdb::FileMetaData&}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, const rocksdb::FileMetaData&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:503:28, inlined from 'void rocksdb::SubcompactionState::AddOutputsEdit(rocksdb::VersionEdit*) const' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/subcompaction_state.h:173:24, inlined from 'rocksdb::Status rocksdb::CompactionJob::InstallCompactionResults(const rocksdb::MutableCFOptions&, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:1756:31: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(T&&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:274:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, const rocksdb::FileMetaData&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:504:35, inlined from 'void rocksdb::SubcompactionState::AddOutputsEdit(rocksdb::VersionEdit*) const' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/subcompaction_state.h:173:24, inlined from 'rocksdb::Status rocksdb::CompactionJob::InstallCompactionResults(const rocksdb::MutableCFOptions&, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:1756:31: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, const rocksdb::FileMetaData&}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, const rocksdb::FileMetaData&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:503:28, inlined from 'void rocksdb::SubcompactionState::AddOutputsEdit(rocksdb::VersionEdit*) const' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/subcompaction_state.h:176:24, inlined from 'rocksdb::Status rocksdb::CompactionJob::InstallCompactionResults(const rocksdb::MutableCFOptions&, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:1756:31: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(T&&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:274:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, const rocksdb::FileMetaData&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:504:35, inlined from 'void rocksdb::SubcompactionState::AddOutputsEdit(rocksdb::VersionEdit*) const' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/subcompaction_state.h:176:24, inlined from 'rocksdb::Status rocksdb::CompactionJob::InstallCompactionResults(const rocksdb::MutableCFOptions&, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:1756:31: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::BlobFileAddition}; _Tp = rocksdb::BlobFileAddition; _Alloc = std::allocator]', inlined from 'void rocksdb::VersionEdit::AddBlobFile(rocksdb::BlobFileAddition)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:545:38, inlined from 'rocksdb::Status rocksdb::CompactionJob::InstallCompactionResults(const rocksdb::MutableCFOptions&, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:1759:24: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(T&&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:274:22, inlined from 'void rocksdb::VersionEdit::AddBlobFile(rocksdb::BlobFileAddition)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:546:35, inlined from 'rocksdb::Status rocksdb::CompactionJob::InstallCompactionResults(const rocksdb::MutableCFOptions&, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:1759:24: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {long long unsigned int&, long long unsigned int&, long long unsigned int&}; _Tp = rocksdb::BlobFileGarbage; _Alloc = std::allocator]', inlined from 'void rocksdb::VersionEdit::AddBlobFileGarbage(uint64_t, uint64_t, uint64_t)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:571:37, inlined from 'rocksdb::Status rocksdb::CompactionJob::InstallCompactionResults(const rocksdb::MutableCFOptions&, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:1782:29: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 15%] Building CXX object CMakeFiles/rocksdb.dir/db/event_helpers.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/event_helpers.cc.o -MF CMakeFiles/rocksdb.dir/db/event_helpers.cc.o.d -o CMakeFiles/rocksdb.dir/db/event_helpers.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/event_helpers.cc [ 16%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_picker_level.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_picker_level.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_picker_level.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_picker_level.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_picker_level.cc /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::FileMetaData, const rocksdb::InternalKeyComparator&, bool&, bool&, long long unsigned int&}; _Tp = rocksdb::CompactionOutputs::Output; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::FileMetaData, const rocksdb::InternalKeyComparator&, bool&, bool&, long long unsigned int&}; _Tp = rocksdb::CompactionOutputs::Output; _Alloc = std::allocator]', inlined from 'void rocksdb::CompactionOutputs::AddOutput(rocksdb::FileMetaData&&, const rocksdb::InternalKeyComparator&, bool, bool, uint64_t)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_outputs.h:52:26, inlined from 'rocksdb::Status rocksdb::CompactionJob::OpenCompactionOutputFile(rocksdb::SubcompactionState*, rocksdb::CompactionOutputs&)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:1943:22: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::Compaction*&, std::optional, std::optional, unsigned int}; _Tp = rocksdb::SubcompactionState; _Alloc = std::allocator]', inlined from 'void rocksdb::CompactionJob::Prepare()' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.cc:265:48: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 16%] Building CXX object CMakeFiles/rocksdb.dir/db/experimental.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/experimental.cc.o -MF CMakeFiles/rocksdb.dir/db/experimental.cc.o.d -o CMakeFiles/rocksdb.dir/db/experimental.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/experimental.cc [ 16%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_picker_universal.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_picker_universal.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_picker_universal.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_picker_universal.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_picker_universal.cc In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/monitoring/statistics_impl.h:10, from /build/reproducible-path/rocksdb-9.3.1/monitoring/instrumented_mutex.h:8, from /build/reproducible-path/rocksdb-9.3.1/db/error_handler.h:9, from /build/reproducible-path/rocksdb-9.3.1/db/error_handler.cc:6: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'void rocksdb::ErrorHandler::AddFilesToQuarantine(rocksdb::autovector*>)' at /build/reproducible-path/rocksdb-9.3.1/db/error_handler.cc:486:37: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ [ 16%] Building CXX object CMakeFiles/rocksdb.dir/db/external_sst_file_ingestion_job.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/external_sst_file_ingestion_job.cc.o -MF CMakeFiles/rocksdb.dir/db/external_sst_file_ingestion_job.cc.o.d -o CMakeFiles/rocksdb.dir/db/external_sst_file_ingestion_job.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/external_sst_file_ingestion_job.cc [ 16%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_service_job.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_service_job.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_service_job.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_service_job.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_service_job.cc [ 16%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_state.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_state.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_state.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_state.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_state.cc In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h:12, from /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/experimental.h:12, from /build/reproducible-path/rocksdb-9.3.1/db/experimental.cc:6: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, int}; _Tp = rocksdb::DbPath; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, int}; _Tp = rocksdb::DbPath; _Alloc = std::allocator]', inlined from 'static rocksdb::ImmutableDBOptions rocksdb::OfflineManifestWriter::WithDbPath(const rocksdb::DBOptions&, const std::string&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_util.h:71:31, inlined from 'rocksdb::OfflineManifestWriter::OfflineManifestWriter(const rocksdb::DBOptions&, const std::string&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_util.h:23:9: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 16%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_outputs.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_outputs.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_outputs.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/compaction/compaction_outputs.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_outputs.cc /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ [ 16%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/compaction/sst_partitioner.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/compaction/sst_partitioner.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/compaction/sst_partitioner.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/compaction/sst_partitioner.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/sst_partitioner.cc In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:486:28, inlined from 'rocksdb::Status rocksdb::experimental::UpdateManifestForFilesState(const rocksdb::DBOptions&, const std::string&, const std::vector&, const UpdateManifestForFilesStateOptions&)' at /build/reproducible-path/rocksdb-9.3.1/db/experimental.cc:105:27: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:495:35, inlined from 'rocksdb::Status rocksdb::experimental::UpdateManifestForFilesState(const rocksdb::DBOptions&, const std::string&, const std::vector&, const UpdateManifestForFilesStateOptions&)' at /build/reproducible-path/rocksdb-9.3.1/db/experimental.cc:105:27: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/external_sst_file_ingestion_job.h:9, from /build/reproducible-path/rocksdb-9.3.1/db/external_sst_file_ingestion_job.cc:6: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ [ 16%] Building CXX object CMakeFiles/rocksdb.dir/db/file_indexer.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/file_indexer.cc.o -MF CMakeFiles/rocksdb.dir/db/file_indexer.cc.o.d -o CMakeFiles/rocksdb.dir/db/file_indexer.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/file_indexer.cc In file included from /usr/include/c++/13/vector:72, from /usr/include/c++/13/functional:64, from /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_job.h:13, from /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_service_job.cc:11: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {std::__cxx11::basic_string, std::allocator >, const long long unsigned int&, const long long unsigned int&, std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >, const long long unsigned int&, const long long unsigned int&, const long long unsigned int&, long long unsigned int, const bool&, const std::array&}; _Tp = rocksdb::CompactionServiceOutputFile; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::Compaction*&, std::optional, std::optional, int}; _Tp = rocksdb::SubcompactionState; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::Compaction*&, std::optional, std::optional, int}; _Tp = rocksdb::SubcompactionState; _Alloc = std::allocator]', inlined from 'rocksdb::Status rocksdb::CompactionServiceCompactionJob::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_service_job.cc:267:44: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {std::__cxx11::basic_string, std::allocator >, const long long unsigned int&, const long long unsigned int&, std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >, const long long unsigned int&, const long long unsigned int&, const long long unsigned int&, long long unsigned int, const bool&, const std::array&}; _Tp = rocksdb::CompactionServiceOutputFile; _Alloc = std::allocator]', inlined from 'rocksdb::Status rocksdb::CompactionServiceCompactionJob::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_service_job.cc:333:50: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'rocksdb::Status rocksdb::ParseVector(const ConfigOptions&, const OptionTypeInfo&, char, const std::string&, const std::string&, std::vector<_RealType>*) [with T = long long unsigned int]' at /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/utilities/options_type.h:1125:29: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::CompactionServiceOutputFile&}; _Tp = rocksdb::CompactionServiceOutputFile; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::CompactionServiceOutputFile&}; _Tp = rocksdb::CompactionServiceOutputFile; _Alloc = std::allocator]', inlined from 'rocksdb::Status rocksdb::ParseVector(const ConfigOptions&, const OptionTypeInfo&, char, const std::string&, const std::string&, std::vector<_RealType>*) [with T = CompactionServiceOutputFile]' at /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/utilities/options_type.h:1125:29: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 16%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/compaction/subcompaction_state.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/compaction/subcompaction_state.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/compaction/subcompaction_state.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/compaction/subcompaction_state.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/compaction/subcompaction_state.cc /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, const rocksdb::FileMetaData&}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::FileMetaData, const rocksdb::InternalKeyComparator&, bool&, bool&, long long unsigned int&}; _Tp = rocksdb::CompactionOutputs::Output; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::IngestedFileInfo}; _Tp = rocksdb::IngestedFileInfo; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::IngestedFileInfo}; _Tp = rocksdb::IngestedFileInfo; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::emplace_back(Args&& ...) [with Args = {rocksdb::IngestedFileInfo}; T = rocksdb::IngestedFileInfo; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:303:25, inlined from 'rocksdb::Status rocksdb::ExternalSstFileIngestionJob::Prepare(const std::vector >&, const std::vector >&, const std::vector >&, const rocksdb::Temperature&, uint64_t, rocksdb::SuperVersion*)' at /build/reproducible-path/rocksdb-9.3.1/db/external_sst_file_ingestion_job.cc:64:34: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::FileMetaData, const rocksdb::InternalKeyComparator&, bool&, bool&, long long unsigned int&}; _Tp = rocksdb::CompactionOutputs::Output; _Alloc = std::allocator]', inlined from 'void rocksdb::CompactionOutputs::AddOutput(rocksdb::FileMetaData&&, const rocksdb::InternalKeyComparator&, bool, bool, uint64_t)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_outputs.h:52:26, inlined from 'rocksdb::CompactionServiceJobStatus rocksdb::CompactionJob::ProcessKeyValueCompactionWithCompactionService(rocksdb::SubcompactionState*)' at /build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_service_job.cc:198:37: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, const rocksdb::FileMetaData&}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, const rocksdb::FileMetaData&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:503:28, inlined from 'rocksdb::Status rocksdb::ExternalSstFileIngestionJob::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/external_sst_file_ingestion_job.cc:480:18: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(T&&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:274:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, const rocksdb::FileMetaData&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:504:35, inlined from 'rocksdb::Status rocksdb::ExternalSstFileIngestionJob::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/external_sst_file_ingestion_job.cc:480:18: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ [ 16%] Building CXX object CMakeFiles/rocksdb.dir/db/flush_job.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/flush_job.cc.o -MF CMakeFiles/rocksdb.dir/db/flush_job.cc.o.d -o CMakeFiles/rocksdb.dir/db/flush_job.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/flush_job.cc [ 16%] Building CXX object CMakeFiles/rocksdb.dir/db/flush_scheduler.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/flush_scheduler.cc.o -MF CMakeFiles/rocksdb.dir/db/flush_scheduler.cc.o.d -o CMakeFiles/rocksdb.dir/db/flush_scheduler.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/flush_scheduler.cc [ 16%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/convenience.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/convenience.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/convenience.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/convenience.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/convenience.cc [ 17%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/db_filesnapshot.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/db_filesnapshot.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/db_filesnapshot.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/db_filesnapshot.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_filesnapshot.cc [ 17%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/db_impl/compacted_db_impl.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/db_impl/compacted_db_impl.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/db_impl/compacted_db_impl.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/db_impl/compacted_db_impl.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/compacted_db_impl.cc [ 17%] Building CXX object CMakeFiles/rocksdb.dir/db/forward_iterator.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/forward_iterator.cc.o -MF CMakeFiles/rocksdb.dir/db/forward_iterator.cc.o.d -o CMakeFiles/rocksdb.dir/db/forward_iterator.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/forward_iterator.cc In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/flush_job.h:18, from /build/reproducible-path/rocksdb-9.3.1/db/flush_job.cc:10: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::BlobFileAdditionInfo}; _Tp = rocksdb::BlobFileAdditionInfo; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::BlobFileAdditionInfo}; _Tp = rocksdb::BlobFileAdditionInfo; _Alloc = std::allocator]', inlined from 'std::unique_ptr rocksdb::FlushJob::GetFlushJobInfo() const' at /build/reproducible-path/rocksdb-9.3.1/db/flush_job.cc:1128:48: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:486:28: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:495:35: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ [ 17%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.cc In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/db_filesnapshot.cc:12: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'virtual rocksdb::Status rocksdb::DBImpl::GetSortedWalFiles(rocksdb::VectorLogPtr&)' at /build/reproducible-path/rocksdb-9.3.1/db/db_filesnapshot.cc:116:37: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(T&&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:274:22, inlined from 'rocksdb::VersionEdit::SetBlobFileAdditions(BlobFileAdditions)::' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:562:41, inlined from '_Funct std::for_each(_IIter, _IIter, _Funct) [with _IIter = __gnu_cxx::__normal_iterator >; _Funct = rocksdb::VersionEdit::SetBlobFileAdditions(BlobFileAdditions)::]' at /usr/include/c++/13/bits/stl_algo.h:3833:5, inlined from 'void rocksdb::VersionEdit::SetBlobFileAdditions(BlobFileAdditions)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:559:18, inlined from 'rocksdb::Status rocksdb::FlushJob::WriteLevel0Table()' at /build/reproducible-path/rocksdb-9.3.1/db/flush_job.cc:1049:32: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {}; _Tp = rocksdb::LiveFileStorageInfo; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {}; _Tp = rocksdb::LiveFileStorageInfo; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 17%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_write.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_write.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_write.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_write.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_write.cc [ 17%] Building CXX object CMakeFiles/rocksdb.dir/db/import_column_family_job.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/import_column_family_job.cc.o -MF CMakeFiles/rocksdb.dir/db/import_column_family_job.cc.o.d -o CMakeFiles/rocksdb.dir/db/import_column_family_job.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/import_column_family_job.cc In file included from /usr/include/c++/13/vector:65, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/compacted_db_impl.h:8, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/compacted_db_impl.cc:6: /usr/include/c++/13/bits/stl_uninitialized.h: In function '_ForwardIterator std::__do_uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]': /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 113 | __do_uninit_copy(_InputIterator __first, _InputIterator __last, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; _Tp = rocksdb::DbPath]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:606:31, inlined from 'rocksdb::ColumnFamilyOptions::ColumnFamilyOptions(const rocksdb::ColumnFamilyOptions&)' at /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h:66:8: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 18%] Building CXX object CMakeFiles/rocksdb.dir/db/internal_stats.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/internal_stats.cc.o -MF CMakeFiles/rocksdb.dir/db/internal_stats.cc.o.d -o CMakeFiles/rocksdb.dir/db/internal_stats.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/internal_stats.cc [ 18%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_compaction_flush.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_compaction_flush.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_compaction_flush.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_compaction_flush.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:16, from /build/reproducible-path/rocksdb-9.3.1/db/version_builder.h:14, from /build/reproducible-path/rocksdb-9.3.1/db/import_column_family_job.cc:7: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, const rocksdb::FileMetaData&}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:486:28, inlined from 'rocksdb::Status rocksdb::ImportColumnFamilyJob::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/import_column_family_job.cc:216:33: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:495:35, inlined from 'rocksdb::Status rocksdb::ImportColumnFamilyJob::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/import_column_family_job.cc:216:33: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, const rocksdb::FileMetaData&}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, const rocksdb::FileMetaData&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:503:28, inlined from 'rocksdb::Status rocksdb::ImportColumnFamilyJob::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/import_column_family_job.cc:239:24: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(T&&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:274:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, const rocksdb::FileMetaData&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:504:35, inlined from 'rocksdb::Status rocksdb::ImportColumnFamilyJob::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/import_column_family_job.cc:239:24: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const rocksdb::IngestedFileInfo&}; _Tp = rocksdb::IngestedFileInfo; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = rocksdb::IngestedFileInfo; _Alloc = std::allocator]', inlined from 'rocksdb::Status rocksdb::ImportColumnFamilyJob::Prepare(uint64_t, rocksdb::SuperVersion*)' at /build/reproducible-path/rocksdb-9.3.1/db/import_column_family_job.cc:59:39: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator > >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ [ 18%] Building CXX object CMakeFiles/rocksdb.dir/db/logs_with_prep_tracker.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/logs_with_prep_tracker.cc.o -MF CMakeFiles/rocksdb.dir/db/logs_with_prep_tracker.cc.o.d -o CMakeFiles/rocksdb.dir/db/logs_with_prep_tracker.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/logs_with_prep_tracker.cc In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/logs_with_prep_tracker.h:13, from /build/reproducible-path/rocksdb-9.3.1/db/logs_with_prep_tracker.cc:6: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::LogsWithPrepTracker::LogCnt}; _Tp = rocksdb::LogsWithPrepTracker::LogCnt; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::_M_insert_rval(const_iterator, value_type&&) [with _Tp = rocksdb::LogsWithPrepTracker::LogCnt; _Alloc = std::allocator]', inlined from 'std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::insert(const_iterator, value_type&&) [with _Tp = rocksdb::LogsWithPrepTracker::LogCnt; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:1394:30, inlined from 'void rocksdb::LogsWithPrepTracker::MarkLogAsContainingPrepSection(uint64_t)' at /build/reproducible-path/rocksdb-9.3.1/db/logs_with_prep_tracker.cc:39:27: /usr/include/c++/13/bits/vector.tcc:372:26: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 372 | _M_realloc_insert(begin() + __n, std::move(__v)); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 18%] Building CXX object CMakeFiles/rocksdb.dir/db/log_reader.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/log_reader.cc.o -MF CMakeFiles/rocksdb.dir/db/log_reader.cc.o.d -o CMakeFiles/rocksdb.dir/db/log_reader.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/log_reader.cc [ 18%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_files.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_files.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_files.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_files.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_files.cc In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/builder.h:11, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:12: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::SnapshotList::GetAll(std::vector*, rocksdb::SequenceNumber*, const rocksdb::SequenceNumber&) const' at /build/reproducible-path/rocksdb-9.3.1/db/snapshot_impl.h:139:22, inlined from 'std::vector rocksdb::SnapshotList::GetAll(rocksdb::SequenceNumber*, const rocksdb::SequenceNumber&) const' at /build/reproducible-path/rocksdb-9.3.1/db/snapshot_impl.h:114:11, inlined from 'void rocksdb::DBImpl::GetSnapshotContext(rocksdb::JobContext*, std::vector*, rocksdb::SequenceNumber*, rocksdb::SnapshotChecker**)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:4355:37: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const rocksdb::MutableCFOptions&}; _Tp = rocksdb::MutableCFOptions; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::BlobFileAdditionInfo}; _Tp = rocksdb::BlobFileAdditionInfo; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::BlobFileGarbageInfo}; _Tp = rocksdb::BlobFileGarbageInfo; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 [ 18%] Building CXX object CMakeFiles/rocksdb.dir/db/log_writer.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/log_writer.cc.o -MF CMakeFiles/rocksdb.dir/db/log_writer.cc.o.d -o CMakeFiles/rocksdb.dir/db/log_writer.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/log_writer.cc /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {long long unsigned int}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::ColumnFamilyData* const&, const long long unsigned int&, rocksdb::SuperVersionContext*, rocksdb::FlushReason&}; _Tp = rocksdb::DBImpl::BGFlushArg; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::CompactionFileInfo}; _Tp = rocksdb::CompactionFileInfo; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::CompactionFileInfo}; _Tp = rocksdb::CompactionFileInfo; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::BlobFileAdditionInfo}; _Tp = rocksdb::BlobFileAdditionInfo; _Alloc = std::allocator]', inlined from 'void rocksdb::DBImpl::BuildCompactionJobInfo(const rocksdb::ColumnFamilyData*, rocksdb::Compaction*, const rocksdb::Status&, const rocksdb::CompactionJobStats&, int, rocksdb::CompactionJobInfo*) const' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:4234:63: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::BlobFileGarbageInfo}; _Tp = rocksdb::BlobFileGarbageInfo; _Alloc = std::allocator]', inlined from 'void rocksdb::DBImpl::BuildCompactionJobInfo(const rocksdb::ColumnFamilyData*, rocksdb::Compaction*, const rocksdb::Status&, const rocksdb::CompactionJobStats&, int, rocksdb::CompactionJobInfo*) const' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:4245:62: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 18%] Building CXX object CMakeFiles/rocksdb.dir/db/malloc_stats.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/malloc_stats.cc.o -MF CMakeFiles/rocksdb.dir/db/malloc_stats.cc.o.d -o CMakeFiles/rocksdb.dir/db/malloc_stats.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/malloc_stats.cc In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {long long unsigned int}; _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::emplace_back(Args&& ...) [with Args = {long long unsigned int}; T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:303:25, inlined from 'rocksdb::Status rocksdb::DBImpl::FlushMemTable(rocksdb::ColumnFamilyData*, const rocksdb::FlushOptions&, rocksdb::FlushReason, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:2361:42: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {long long unsigned int}; _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::emplace_back(Args&& ...) [with Args = {long long unsigned int}; T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:303:25, inlined from 'rocksdb::Status rocksdb::DBImpl::FlushMemTable(rocksdb::ColumnFamilyData*, const rocksdb::FlushOptions&, rocksdb::FlushReason, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:2389:46: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 18%] Building CXX object CMakeFiles/rocksdb.dir/db/memtable.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -MD -MT CMakeFiles/rocksdb.dir/db/memtable.cc.o -MF CMakeFiles/rocksdb.dir/db/memtable.cc.o.d -o CMakeFiles/rocksdb.dir/db/memtable.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/memtable.cc In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'rocksdb::Status rocksdb::DBImpl::RetryFlushesForErrorRecovery(rocksdb::FlushReason, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:2618:35: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(T&&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:274:22, inlined from 'rocksdb::Status rocksdb::DBImpl::RetryFlushesForErrorRecovery(rocksdb::FlushReason, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:2622:35: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {const rocksdb::MutableCFOptions&}; _Tp = rocksdb::MutableCFOptions; _Alloc = std::allocator]', inlined from 'rocksdb::Status rocksdb::DBImpl::AtomicFlushMemTablesToOutputFiles(const rocksdb::autovector&, bool*, rocksdb::JobContext*, rocksdb::LogBuffer*, rocksdb::Env::Priority)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:543:40: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 18%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_open.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_open.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_open.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_open.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_open.cc In file included from /usr/include/c++/13/vector:72, from /usr/include/c++/13/functional:64, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.h:13, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.cc:9: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {long long unsigned int&, rocksdb::WalMetadata}; _Tp = rocksdb::WalAddition; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::ColumnFamilyData* const&, const long long unsigned int&, rocksdb::SuperVersionContext*, rocksdb::FlushReason&}; _Tp = rocksdb::DBImpl::BGFlushArg; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::emplace_back(Args&& ...) [with Args = {rocksdb::ColumnFamilyData* const&, const long long unsigned int&, rocksdb::SuperVersionContext*, rocksdb::FlushReason&}; T = rocksdb::DBImpl::BGFlushArg; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:303:25, inlined from 'rocksdb::Status rocksdb::DBImpl::BackgroundFlush(bool*, rocksdb::JobContext*, rocksdb::LogBuffer*, rocksdb::FlushReason*, bool*, rocksdb::Env::Priority)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_compaction_flush.cc:3269:33: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:486:28: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:495:35: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In file included from /usr/include/c++/13/map:62, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.h:16: /usr/include/c++/13/bits/stl_tree.h: In function 'std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_emplace_hint_unique(const_iterator, _Args&& ...) [with _Args = {const std::piecewise_construct_t&, std::tuple, std::allocator >&>, std::tuple<>}; _Key = std::__cxx11::basic_string; _Val = std::pair, long long unsigned int>; _KeyOfValue = std::_Select1st, long long unsigned int> >; _Compare = std::less >; _Alloc = std::allocator, long long unsigned int> >]': /usr/include/c++/13/bits/stl_tree.h:2458:7: note: parameter passing for argument of type 'std::_Rb_tree, std::pair, long long unsigned int>, std::_Select1st, long long unsigned int> >, std::less >, std::allocator, long long unsigned int> > >::const_iterator' changed in GCC 7.1 2458 | _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/map:63: /usr/include/c++/13/bits/stl_map.h: In member function 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = std::__cxx11::basic_string; _Tp = long long unsigned int; _Compare = std::less >; _Alloc = std::allocator, long long unsigned int> >]': /usr/include/c++/13/bits/stl_map.h:513:44: note: parameter passing for argument of type 'std::_Rb_tree, std::pair, long long unsigned int>, std::_Select1st, long long unsigned int> >, std::less >, std::allocator, long long unsigned int> > >::const_iterator' changed in GCC 7.1 513 | __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 514 | std::tuple(__k), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 515 | std::tuple<>()); | ~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::ColumnFamilyHandle*&, const rocksdb::Slice&, rocksdb::PinnableSlice*&, rocksdb::PinnableWideColumns*&, std::__cxx11::basic_string, std::allocator >*, rocksdb::Status*}; _Tp = rocksdb::KeyContext; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::ColumnFamilyHandle*&, const rocksdb::Slice&, rocksdb::PinnableSlice*&, rocksdb::PinnableWideColumns*&, std::__cxx11::basic_string, std::allocator >*, rocksdb::Status*}; _Tp = rocksdb::KeyContext; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:72, from /usr/include/c++/13/functional:64, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.h:13, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_files.cc:13: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /build/reproducible-path/rocksdb-9.3.1/db/memtable.cc: In member function 'void rocksdb::MemTable::UpdateOldestKeyTime()': /build/reproducible-path/rocksdb-9.3.1/db/memtable.cc:273:1: error: insn does not satisfy its constraints: 273 | } | ^ (insn 275 274 276 13 (set (reg:CC_DNE 100 cc) (compare:CC_DNE (ior:SI (ne:SI (reg:SI 0 r0 [164]) (const_int -1 [0xffffffffffffffff])) (ne:SI (reg:SI 1 r1 [+4 ]) (const_int -1 [0xffffffffffffffff]))) (const_int 0 [0]))) "/usr/include/c++/13/bits/atomic_base.h":577:36 343 {*cmp_ior} (expr_list:REG_DEAD (reg:SI 1 r1 [+4 ]) (expr_list:REG_DEAD (reg:SI 0 r0 [164]) (nil)))) during RTL pass: cprop_hardreg /build/reproducible-path/rocksdb-9.3.1/db/memtable.cc:273:1: internal compiler error: in extract_constrain_insn, at recog.cc:2692 0x5cb837 internal_error(char const*, ...) ???:0 0x5cb8ed fancy_abort(char const*, int, char const*) ???:0 0x3699f9 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*) ???:0 0x369a2b _fatal_insn_not_found(rtx_def const*, char const*, int, char const*) ???:0 0x7ef881 extract_constrain_insn(rtx_insn*) ???:0 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See for instructions. /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::DBImpl::FindObsoleteFiles(rocksdb::JobContext*, bool, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_files.cc:289:48: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In file included from /usr/include/c++/13/deque:65, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.h:12: /usr/include/c++/13/bits/stl_uninitialized.h: In function '_ForwardIterator std::__do_uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator*, vector > >; _ForwardIterator = pair*]': /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 113 | __do_uninit_copy(_InputIterator __first, _InputIterator __last, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator*, std::vector > >; _ForwardIterator = std::pair*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator*, vector > >; _ForwardIterator = pair*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator*, vector > >; _ForwardIterator = pair*; _Tp = pair]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = std::pair; _Alloc = std::allocator >]' at /usr/include/c++/13/bits/stl_vector.h:606:31, inlined from 'rocksdb::VersionEdit::VersionEdit(const rocksdb::VersionEdit&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:390:7: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {}; _Tp = rocksdb::ColumnFamilyMetaData; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {}; _Tp = rocksdb::ColumnFamilyMetaData; _Alloc = std::allocator]', inlined from 'virtual void rocksdb::DBImpl::GetAllColumnFamilyMetaData(std::vector*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.cc:4952:29: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::ColumnFamilyOptions}; _Tp = rocksdb::ColumnFamilyOptions; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::ColumnFamilyOptions}; _Tp = rocksdb::ColumnFamilyOptions; _Alloc = std::allocator]', inlined from 'void std::vector<_Tp, _Alloc>::push_back(value_type&&) [with _Tp = rocksdb::ColumnFamilyOptions; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:1299:21, inlined from 'rocksdb::Status rocksdb::DBImpl::WriteOptionsFile(const rocksdb::WriteOptions&, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.cc:5324:22: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::emplace_back(Args&& ...) [with Args = {long long unsigned int&}; T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:303:25, inlined from 'void rocksdb::DBImpl::PurgeObsoleteFiles(rocksdb::JobContext&, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_files.cc:623:35: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 19%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_debug.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_debug.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_debug.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_debug.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_debug.cc In file included from /usr/include/c++/13/bits/stl_algo.h:61, from /usr/include/c++/13/algorithm:61, from /build/reproducible-path/rocksdb-9.3.1/util/coding.h:19, from /build/reproducible-path/rocksdb-9.3.1/db/dbformat.h:22, from /build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h:14, from /build/reproducible-path/rocksdb-9.3.1/db/builder.h:13, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_open.cc:11: /usr/include/c++/13/bits/stl_heap.h: In function 'void std::__adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Distance = int; _Tp = long long unsigned int; _Compare = __gnu_cxx::__ops::_Iter_less_iter]': /usr/include/c++/13/bits/stl_heap.h:224:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 224 | __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex, | ^~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h: In function 'void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Size = int; _Compare = __gnu_cxx::__ops::_Iter_less_iter]': /usr/include/c++/13/bits/stl_algo.h:1918:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1918 | __introsort_loop(_RandomAccessIterator __first, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:1918:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 /usr/include/c++/13/bits/stl_algo.h:1932:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1932 | std::__introsort_loop(__cut, __last, __depth_limit, __comp); | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h: In function 'void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]': /usr/include/c++/13/bits/stl_algo.h:1812:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1812 | __insertion_sort(_RandomAccessIterator __first, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:1812:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 [ 19%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_experimental.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_experimental.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_experimental.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_experimental.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_experimental.cc In file included from /usr/include/c++/13/deque:65, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.h:12: /usr/include/c++/13/bits/stl_uninitialized.h: In function '_ForwardIterator std::__do_uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator*, vector > >; _ForwardIterator = pair*]': /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 113 | __do_uninit_copy(_InputIterator __first, _InputIterator __last, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator*, std::vector > >; _ForwardIterator = std::pair*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator*, vector > >; _ForwardIterator = pair*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator*, vector > >; _ForwardIterator = pair*; _Tp = pair]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = std::pair; _Alloc = std::allocator >]' at /usr/include/c++/13/bits/stl_vector.h:606:31, inlined from 'rocksdb::VersionEdit::VersionEdit(const rocksdb::VersionEdit&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:390:7: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/builder.h:11: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::BlobFileAddition}; _Tp = rocksdb::BlobFileAddition; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, long long unsigned int}; _Tp = rocksdb::DbPath; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, long long unsigned int}; _Tp = rocksdb::DbPath; _Alloc = std::allocator]', inlined from 'rocksdb::DBOptions rocksdb::SanitizeOptions(const std::string&, const DBOptions&, bool, Status*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_open.cc:124:33: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:486:28: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:495:35: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, rocksdb::ColumnFamilyOptions&}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, rocksdb::ColumnFamilyOptions&}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {long long unsigned int&, rocksdb::WalMetadata}; _Tp = rocksdb::WalAddition; _Alloc = std::allocator]', inlined from 'void rocksdb::VersionEdit::AddWal(rocksdb::WalNumber, rocksdb::WalMetadata)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:594:32, inlined from 'void rocksdb::DBImpl::MarkLogsSynced(uint64_t, bool, rocksdb::VersionEdit*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.cc:1759:28: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/column_family.h:15, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_debug.cc:12: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const rocksdb::FileMetaData&}; _Tp = rocksdb::FileMetaData; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = rocksdb::FileMetaData; _Alloc = std::allocator]', inlined from 'void rocksdb::DBImpl::TEST_GetFilesMetaData(rocksdb::ColumnFamilyHandle*, std::vector >*, std::vector >*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_debug.cc:76:35: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ /usr/include/c++/13/bits/stl_uninitialized.h: In function '_ForwardIterator std::__do_uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator > >; _ForwardIterator = rocksdb::IngestedFileInfo*]': /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator > >' changed in GCC 7.1 113 | __do_uninit_copy(_InputIterator __first, _InputIterator __last, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator > >' changed in GCC 7.1 In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator > >; _ForwardIterator = rocksdb::IngestedFileInfo*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator > >; _ForwardIterator = rocksdb::IngestedFileInfo*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator > >; _ForwardIterator = rocksdb::IngestedFileInfo*; _Tp = rocksdb::IngestedFileInfo]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::pointer std::vector<_Tp, _Alloc>::_M_allocate_and_copy(size_type, _ForwardIterator, _ForwardIterator) [with _ForwardIterator = __gnu_cxx::__normal_iterator > >; _Tp = rocksdb::IngestedFileInfo; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:1622:35, inlined from 'void std::vector<_Tp, _Alloc>::_M_assign_aux(_ForwardIterator, _ForwardIterator, std::forward_iterator_tag) [with _ForwardIterator = __gnu_cxx::__normal_iterator > >; _Tp = rocksdb::IngestedFileInfo; _Alloc = std::allocator]' at /usr/include/c++/13/bits/vector.tcc:324:40, inlined from 'void std::vector<_Tp, _Alloc>::assign(_InputIterator, _InputIterator) [with _InputIterator = __gnu_cxx::__normal_iterator > >; = void; _Tp = rocksdb::IngestedFileInfo; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:829:17, inlined from 'rocksdb::autovector& rocksdb::autovector::assign(const rocksdb::autovector&) [with T = rocksdb::IngestedFileInfo; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:370:15, inlined from 'rocksdb::autovector::autovector(const rocksdb::autovector&) [with T = rocksdb::IngestedFileInfo; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:327:47, inlined from 'rocksdb::ExternalSstFileIngestionJob::ExternalSstFileIngestionJob(const rocksdb::ExternalSstFileIngestionJob&)' at /build/reproducible-path/rocksdb-9.3.1/db/external_sst_file_ingestion_job.h:86:7, inlined from 'void std::_Construct(_Tp*, _Args&& ...) [with _Tp = rocksdb::ExternalSstFileIngestionJob; _Args = {const rocksdb::ExternalSstFileIngestionJob&}]' at /usr/include/c++/13/bits/stl_construct.h:119:7, inlined from '_ForwardIterator std::__do_uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = const rocksdb::ExternalSstFileIngestionJob*; _ForwardIterator = rocksdb::ExternalSstFileIngestionJob*]' at /usr/include/c++/13/bits/stl_uninitialized.h:120:21: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator > >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::VersionSet*, rocksdb::ColumnFamilyData*&, const rocksdb::ImmutableDBOptions&, rocksdb::MutableDBOptions&, const rocksdb::FileOptions&, rocksdb::SnapshotList*, const rocksdb::IngestExternalFileOptions&, rocksdb::Directories*, rocksdb::EventLogger*, std::shared_ptr&}; _Tp = rocksdb::ExternalSstFileIngestionJob; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::VersionSet*, rocksdb::ColumnFamilyData*&, const rocksdb::ImmutableDBOptions&, rocksdb::MutableDBOptions&, const rocksdb::FileOptions&, rocksdb::SnapshotList*, const rocksdb::IngestExternalFileOptions&, rocksdb::Directories*, rocksdb::EventLogger*, std::shared_ptr&}; _Tp = rocksdb::ExternalSstFileIngestionJob; _Alloc = std::allocator]', inlined from 'virtual rocksdb::Status rocksdb::DBImpl::IngestExternalFiles(const std::vector&)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.cc:5762:32: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 19%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_readonly.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_readonly.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_readonly.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_readonly.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_readonly.cc In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::SnapshotList::GetAll(std::vector*, rocksdb::SequenceNumber*, const rocksdb::SequenceNumber&) const' at /build/reproducible-path/rocksdb-9.3.1/db/snapshot_impl.h:139:22, inlined from 'std::vector rocksdb::SnapshotList::GetAll(rocksdb::SequenceNumber*, const rocksdb::SequenceNumber&) const' at /build/reproducible-path/rocksdb-9.3.1/db/snapshot_impl.h:114:11, inlined from 'rocksdb::Status rocksdb::DBImpl::WriteLevel0TableForRecovery(int, rocksdb::ColumnFamilyData*, rocksdb::MemTable*, rocksdb::VersionEdit*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_open.cc:1672:62: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::BlobFileAddition}; _Tp = rocksdb::BlobFileAddition; _Alloc = std::allocator]', inlined from 'void rocksdb::VersionEdit::AddBlobFile(rocksdb::BlobFileAddition)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:545:38, inlined from 'rocksdb::Status rocksdb::DBImpl::WriteLevel0TableForRecovery(int, rocksdb::ColumnFamilyData*, rocksdb::MemTable*, rocksdb::VersionEdit*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_open.cc:1763:24: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(T&&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:274:22, inlined from 'void rocksdb::VersionEdit::AddBlobFile(rocksdb::BlobFileAddition)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:546:35, inlined from 'rocksdb::Status rocksdb::DBImpl::WriteLevel0TableForRecovery(int, rocksdb::ColumnFamilyData*, rocksdb::MemTable*, rocksdb::VersionEdit*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_open.cc:1763:24: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = std::__cxx11::basic_string; _Tp = long long unsigned int; _Compare = std::less >; _Alloc = std::allocator, long long unsigned int> >]', inlined from 'void rocksdb::DBImpl::PersistStats()' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.cc:1054:74: /usr/include/c++/13/bits/stl_map.h:513:44: note: parameter passing for argument of type 'std::_Rb_tree, std::pair, long long unsigned int>, std::_Select1st, long long unsigned int> >, std::less >, std::allocator, long long unsigned int> > >::const_iterator' changed in GCC 7.1 513 | __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 514 | std::tuple(__k), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 515 | std::tuple<>()); | ~~~~~~~~~~~~~~~ In member function 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = std::__cxx11::basic_string; _Tp = long long unsigned int; _Compare = std::less >; _Alloc = std::allocator, long long unsigned int> >]', inlined from 'void rocksdb::DBImpl::PersistStats()' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.cc:1054:33: /usr/include/c++/13/bits/stl_map.h:513:44: note: parameter passing for argument of type 'std::_Rb_tree, std::pair, long long unsigned int>, std::_Select1st, long long unsigned int> >, std::less >, std::allocator, long long unsigned int> > >::const_iterator' changed in GCC 7.1 513 | __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 514 | std::tuple(__k), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 515 | std::tuple<>()); | ~~~~~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'virtual rocksdb::Status rocksdb::DBImpl::Recover(const std::vector&, bool, bool, bool, bool, uint64_t*, RecoveryContext*, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_open.cc:781:23: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In function 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]', inlined from 'void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator >]' at /usr/include/c++/13/bits/stl_algo.h:4861:18, inlined from 'virtual rocksdb::Status rocksdb::DBImpl::Recover(const std::vector&, bool, bool, bool, bool, uint64_t*, RecoveryContext*, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_open.cc:783:16: /usr/include/c++/13/bits/stl_algo.h:1947:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1947 | std::__introsort_loop(__first, __last, | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ 1948 | std::__lg(__last - __first) * 2, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1949 | __comp); | ~~~~~~~ In function 'void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]', inlined from 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]' at /usr/include/c++/13/bits/stl_algo.h:1950:31, inlined from 'void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator >]' at /usr/include/c++/13/bits/stl_algo.h:4861:18, inlined from 'virtual rocksdb::Status rocksdb::DBImpl::Recover(const std::vector&, bool, bool, bool, bool, uint64_t*, RecoveryContext*, bool*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_open.cc:783:16: /usr/include/c++/13/bits/stl_algo.h:1859:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1859 | std::__insertion_sort(__first, __first + int(_S_threshold), __comp); | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:1864:30: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1864 | std::__insertion_sort(__first, __last, __comp); | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_experimental.cc:11: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:486:28: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:495:35: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ [ 19%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_secondary.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_secondary.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_secondary.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/db_impl/db_impl_secondary.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc [ 19%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/db_info_dumper.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/db_info_dumper.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/db_info_dumper.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/db_info_dumper.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_info_dumper.cc [ 19%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/db_iter.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/db_iter.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/db_iter.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/db_iter.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/db_iter.cc Preprocessed source stored into /tmp/cc9luuVA.out file, please attach this to your bugreport. === BEGIN GCC DUMP === 9642: // Target: arm-linux-gnueabihf 9642: // Configured with: ../src/configure -v --with-pkgversion='Debian 13.3.0-3' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=arm-linux-gnueabihf- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-sjlj-exceptions --with-arch=armv7-a+fp --with-float=hard --with-mode=thumb --disable-werror --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf 9642: // Thread model: posix 9642: // Supported LTO compression algorithms: zlib zstd 9642: // gcc version 13.3.0 (Debian 13.3.0-3) 9642: // 9642: // /build/reproducible-path/rocksdb-9.3.1/db/memtable.cc: In member function 'void rocksdb::MemTable::UpdateOldestKeyTime()': 9642: // /build/reproducible-path/rocksdb-9.3.1/db/memtable.cc:273:1: error: insn does not satisfy its constraints: 9642: // 273 | } 9642: // | ^ 9642: // (insn 275 274 276 13 (set (reg:CC_DNE 100 cc) 9642: // (compare:CC_DNE (ior:SI (ne:SI (reg:SI 0 r0 [164]) 9642: // (const_int -1 [0xffffffffffffffff])) 9642: // (ne:SI (reg:SI 1 r1 [+4 ]) 9642: // (const_int -1 [0xffffffffffffffff]))) 9642: // (const_int 0 [0]))) "/usr/include/c++/13/bits/atomic_base.h":577:36 343 {*cmp_ior} 9642: // (expr_list:REG_DEAD (reg:SI 1 r1 [+4 ]) 9642: // (expr_list:REG_DEAD (reg:SI 0 r0 [164]) 9642: // (nil)))) 9642: // during RTL pass: cprop_hardreg 9642: // /build/reproducible-path/rocksdb-9.3.1/db/memtable.cc:273:1: internal compiler error: in extract_constrain_insn, at recog.cc:2692 9642: // 0x5cb837 internal_error(char const*, ...) 9642: // ???:0 9642: // 0x5cb8ed fancy_abort(char const*, int, char const*) 9642: // ???:0 9642: // 0x3699f9 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*) 9642: // ???:0 9642: // 0x369a2b _fatal_insn_not_found(rtx_def const*, char const*, int, char const*) 9642: // ???:0 9642: // 0x7ef881 extract_constrain_insn(rtx_insn*) 9642: // ???:0 9642: // Please submit a full bug report, with preprocessed source (by using -freport-bug). 9642: // Please include the complete backtrace with any bug report. 9642: // See for instructions. 9642: 9642: // /usr/libexec/gcc/arm-linux-gnueabihf/13/cc1plus -quiet -I /build/reproducible-path/rocksdb-9.3.1 -I /build/reproducible-path/rocksdb-9.3.1/include -imultilib . -imultiarch arm-linux-gnueabihf -MD CMakeFiles/rocksdb.dir/db/memtable.cc.d -MF CMakeFiles/rocksdb.dir/db/memtable.cc.o.d -MT CMakeFiles/rocksdb.dir/db/memtable.cc.o -D_GNU_SOURCE -D_REENTRANT -D BZIP2 -D GFLAGS=1 -D GFLAGS_IS_A_DLL=0 -D LZ4 -D OS_LINUX -D ROCKSDB_AUXV_GETAUXVAL_PRESENT -D ROCKSDB_FALLOCATE_PRESENT -D ROCKSDB_LIB_IO_POSIX -D ROCKSDB_MALLOC_USABLE_SIZE -D ROCKSDB_NO_DYNAMIC_EXTENSION -D ROCKSDB_PLATFORM_POSIX -D ROCKSDB_PTHREAD_ADAPTIVE_MUTEX -D ROCKSDB_RANGESYNC_PRESENT -D ROCKSDB_SCHED_GETCPU_PRESENT -D SNAPPY -D ZLIB -D ZSTD -D _LARGEFILE_SOURCE -D _FILE_OFFSET_BITS=64 -D _TIME_BITS=64 -D _FORTIFY_SOURCE=2 -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src /build/reproducible-path/rocksdb-9.3.1/db/memtable.cc -quiet -dumpdir CMakeFiles/rocksdb.dir/db/ -dumpbase memtable.cc.cc -dumpbase-ext .cc -mfloat-abi=hard -mtls-dialect=gnu -mthumb -mlibarch=armv8-a+crc+crypto -march=armv8-a+crc+crypto -g -O2 -Wformat=1 -Werror=format-security -Wdate-time -Wextra -Wall -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual=2 -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -Wno-unused-function -std=gnu++17 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -fno-omit-frame-pointer -fno-builtin-memcmp -o - -frandom-seed=0 -fdump-noaddr 9642: 9642: # 0 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf//" 9642: # 0 "" 9642: # 0 "" 9642: # 1 "/usr/include/stdc-predef.h" 1 3 4 9642: # 0 "" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 9642: 9642: # 1 "/usr/include/c++/13/atomic" 1 3 9642: # 35 "/usr/include/c++/13/atomic" 3 9642: 9642: # 36 "/usr/include/c++/13/atomic" 3 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/atomic_base.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/atomic_base.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/atomic_base.h" 3 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 1 3 9642: # 306 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 3 9642: 9642: # 306 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 3 9642: namespace std 9642: { 9642: typedef unsigned int size_t; 9642: typedef int ptrdiff_t; 9642: 9642: 9642: typedef decltype(nullptr) nullptr_t; 9642: 9642: 9642: #pragma GCC visibility push(default) 9642: 9642: 9642: extern "C++" __attribute__ ((__noreturn__, __always_inline__)) 9642: inline void __terminate() noexcept 9642: { 9642: void terminate() noexcept __attribute__ ((__noreturn__)); 9642: terminate(); 9642: } 9642: #pragma GCC visibility pop 9642: } 9642: # 339 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 3 9642: namespace std 9642: { 9642: inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } 9642: } 9642: namespace __gnu_cxx 9642: { 9642: inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } 9642: } 9642: # 532 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 3 9642: namespace std 9642: { 9642: #pragma GCC visibility push(default) 9642: 9642: 9642: 9642: 9642: constexpr inline bool 9642: __is_constant_evaluated() noexcept 9642: { 9642: 9642: 9642: 9642: 9642: 9642: return __builtin_is_constant_evaluated(); 9642: 9642: 9642: 9642: } 9642: #pragma GCC visibility pop 9642: } 9642: # 679 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 3 9642: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/os_defines.h" 1 3 9642: # 39 "/usr/include/arm-linux-gnueabihf/c++/13/bits/os_defines.h" 3 9642: # 1 "/usr/include/features.h" 1 3 4 9642: # 394 "/usr/include/features.h" 3 4 9642: # 1 "/usr/include/features-time64.h" 1 3 4 9642: # 20 "/usr/include/features-time64.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 9642: # 21 "/usr/include/features-time64.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/timesize.h" 1 3 4 9642: # 22 "/usr/include/features-time64.h" 2 3 4 9642: # 395 "/usr/include/features.h" 2 3 4 9642: # 502 "/usr/include/features.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/sys/cdefs.h" 1 3 4 9642: # 576 "/usr/include/arm-linux-gnueabihf/sys/cdefs.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 9642: # 577 "/usr/include/arm-linux-gnueabihf/sys/cdefs.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/long-double.h" 1 3 4 9642: # 578 "/usr/include/arm-linux-gnueabihf/sys/cdefs.h" 2 3 4 9642: # 503 "/usr/include/features.h" 2 3 4 9642: # 526 "/usr/include/features.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/gnu/stubs.h" 1 3 4 9642: # 10 "/usr/include/arm-linux-gnueabihf/gnu/stubs.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/gnu/stubs-hard.h" 1 3 4 9642: # 11 "/usr/include/arm-linux-gnueabihf/gnu/stubs.h" 2 3 4 9642: # 527 "/usr/include/features.h" 2 3 4 9642: # 40 "/usr/include/arm-linux-gnueabihf/c++/13/bits/os_defines.h" 2 3 9642: # 680 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 2 3 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/cpu_defines.h" 1 3 9642: # 683 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 2 3 9642: # 882 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 3 9642: # 1 "/usr/include/c++/13/pstl/pstl_config.h" 1 3 9642: # 883 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 2 3 9642: # 36 "/usr/include/c++/13/bits/atomic_base.h" 2 3 9642: # 1 "/usr/include/c++/13/new" 1 3 9642: # 38 "/usr/include/c++/13/new" 3 9642: 9642: # 39 "/usr/include/c++/13/new" 3 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/exception.h" 1 3 9642: # 34 "/usr/include/c++/13/bits/exception.h" 3 9642: 9642: # 35 "/usr/include/c++/13/bits/exception.h" 3 9642: 9642: 9642: 9642: extern "C++" { 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: # 59 "/usr/include/c++/13/bits/exception.h" 3 9642: class exception 9642: { 9642: public: 9642: exception() noexcept { } 9642: virtual ~exception() noexcept; 9642: 9642: exception(const exception&) = default; 9642: exception& operator=(const exception&) = default; 9642: exception(exception&&) = default; 9642: exception& operator=(exception&&) = default; 9642: 9642: 9642: 9642: 9642: virtual const char* 9642: what() const noexcept; 9642: }; 9642: 9642: 9642: 9642: } 9642: 9642: } 9642: # 42 "/usr/include/c++/13/new" 2 3 9642: 9642: #pragma GCC visibility push(default) 9642: 9642: extern "C++" { 9642: 9642: namespace std 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: class bad_alloc : public exception 9642: { 9642: public: 9642: bad_alloc() throw() { } 9642: 9642: 9642: bad_alloc(const bad_alloc&) = default; 9642: bad_alloc& operator=(const bad_alloc&) = default; 9642: 9642: 9642: 9642: 9642: virtual ~bad_alloc() throw(); 9642: 9642: 9642: virtual const char* what() const throw(); 9642: }; 9642: 9642: 9642: class bad_array_new_length : public bad_alloc 9642: { 9642: public: 9642: bad_array_new_length() throw() { } 9642: 9642: 9642: 9642: virtual ~bad_array_new_length() throw(); 9642: 9642: 9642: virtual const char* what() const throw(); 9642: }; 9642: 9642: 9642: 9642: enum class align_val_t: size_t {}; 9642: 9642: 9642: struct nothrow_t 9642: { 9642: 9642: explicit nothrow_t() = default; 9642: 9642: }; 9642: 9642: extern const nothrow_t nothrow; 9642: 9642: 9642: 9642: typedef void (*new_handler)(); 9642: 9642: 9642: 9642: new_handler set_new_handler(new_handler) throw(); 9642: 9642: 9642: 9642: new_handler get_new_handler() noexcept; 9642: 9642: } 9642: # 126 "/usr/include/c++/13/new" 3 9642: [[__nodiscard__]] void* operator new(std::size_t) 9642: __attribute__((__externally_visible__)); 9642: [[__nodiscard__]] void* operator new[](std::size_t) 9642: __attribute__((__externally_visible__)); 9642: void operator delete(void*) noexcept 9642: __attribute__((__externally_visible__)); 9642: void operator delete[](void*) noexcept 9642: __attribute__((__externally_visible__)); 9642: 9642: void operator delete(void*, std::size_t) noexcept 9642: __attribute__((__externally_visible__)); 9642: void operator delete[](void*, std::size_t) noexcept 9642: __attribute__((__externally_visible__)); 9642: 9642: [[__nodiscard__]] void* operator new(std::size_t, const std::nothrow_t&) noexcept 9642: __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); 9642: [[__nodiscard__]] void* operator new[](std::size_t, const std::nothrow_t&) noexcept 9642: __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); 9642: void operator delete(void*, const std::nothrow_t&) noexcept 9642: __attribute__((__externally_visible__)); 9642: void operator delete[](void*, const std::nothrow_t&) noexcept 9642: __attribute__((__externally_visible__)); 9642: 9642: [[__nodiscard__]] void* operator new(std::size_t, std::align_val_t) 9642: __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); 9642: [[__nodiscard__]] void* operator new(std::size_t, std::align_val_t, const std::nothrow_t&) 9642: noexcept __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); 9642: void operator delete(void*, std::align_val_t) 9642: noexcept __attribute__((__externally_visible__)); 9642: void operator delete(void*, std::align_val_t, const std::nothrow_t&) 9642: noexcept __attribute__((__externally_visible__)); 9642: [[__nodiscard__]] void* operator new[](std::size_t, std::align_val_t) 9642: __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); 9642: [[__nodiscard__]] void* operator new[](std::size_t, std::align_val_t, const std::nothrow_t&) 9642: noexcept __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); 9642: void operator delete[](void*, std::align_val_t) 9642: noexcept __attribute__((__externally_visible__)); 9642: void operator delete[](void*, std::align_val_t, const std::nothrow_t&) 9642: noexcept __attribute__((__externally_visible__)); 9642: 9642: void operator delete(void*, std::size_t, std::align_val_t) 9642: noexcept __attribute__((__externally_visible__)); 9642: void operator delete[](void*, std::size_t, std::align_val_t) 9642: noexcept __attribute__((__externally_visible__)); 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] inline void* operator new(std::size_t, void* __p) noexcept 9642: { return __p; } 9642: [[__nodiscard__]] inline void* operator new[](std::size_t, void* __p) noexcept 9642: { return __p; } 9642: 9642: 9642: inline void operator delete (void*, void*) noexcept { } 9642: inline void operator delete[](void*, void*) noexcept { } 9642: 9642: } 9642: 9642: 9642: namespace std 9642: { 9642: 9642: 9642: 9642: template 9642: [[nodiscard]] constexpr _Tp* 9642: launder(_Tp* __p) noexcept 9642: { return __builtin_launder(__p); } 9642: 9642: 9642: 9642: 9642: template 9642: void launder(_Ret (*)(_Args...) noexcept (_NE)) = delete; 9642: template 9642: void launder(_Ret (*)(_Args......) noexcept (_NE)) = delete; 9642: 9642: void launder(void*) = delete; 9642: void launder(const void*) = delete; 9642: void launder(volatile void*) = delete; 9642: void launder(const volatile void*) = delete; 9642: 9642: 9642: 9642: 9642: inline constexpr size_t hardware_destructive_interference_size = 64; 9642: inline constexpr size_t hardware_constructive_interference_size = 64; 9642: 9642: } 9642: # 236 "/usr/include/c++/13/new" 3 9642: #pragma GCC visibility pop 9642: # 37 "/usr/include/c++/13/bits/atomic_base.h" 2 3 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stdint.h" 1 3 4 9642: # 9 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stdint.h" 3 4 9642: # 1 "/usr/include/stdint.h" 1 3 4 9642: # 26 "/usr/include/stdint.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 9642: # 27 "/usr/include/stdint.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types.h" 1 3 4 9642: # 27 "/usr/include/arm-linux-gnueabihf/bits/types.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 9642: # 28 "/usr/include/arm-linux-gnueabihf/bits/types.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/timesize.h" 1 3 4 9642: # 29 "/usr/include/arm-linux-gnueabihf/bits/types.h" 2 3 4 9642: 9642: 9642: typedef unsigned char __u_char; 9642: typedef unsigned short int __u_short; 9642: typedef unsigned int __u_int; 9642: typedef unsigned long int __u_long; 9642: 9642: 9642: typedef signed char __int8_t; 9642: typedef unsigned char __uint8_t; 9642: typedef signed short int __int16_t; 9642: typedef unsigned short int __uint16_t; 9642: typedef signed int __int32_t; 9642: typedef unsigned int __uint32_t; 9642: 9642: 9642: 9642: 9642: __extension__ typedef signed long long int __int64_t; 9642: __extension__ typedef unsigned long long int __uint64_t; 9642: 9642: 9642: 9642: typedef __int8_t __int_least8_t; 9642: typedef __uint8_t __uint_least8_t; 9642: typedef __int16_t __int_least16_t; 9642: typedef __uint16_t __uint_least16_t; 9642: typedef __int32_t __int_least32_t; 9642: typedef __uint32_t __uint_least32_t; 9642: typedef __int64_t __int_least64_t; 9642: typedef __uint64_t __uint_least64_t; 9642: 9642: 9642: 9642: 9642: 9642: 9642: __extension__ typedef long long int __quad_t; 9642: __extension__ typedef unsigned long long int __u_quad_t; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: __extension__ typedef long long int __intmax_t; 9642: __extension__ typedef unsigned long long int __uintmax_t; 9642: # 141 "/usr/include/arm-linux-gnueabihf/bits/types.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/typesizes.h" 1 3 4 9642: # 142 "/usr/include/arm-linux-gnueabihf/bits/types.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/time64.h" 1 3 4 9642: # 143 "/usr/include/arm-linux-gnueabihf/bits/types.h" 2 3 4 9642: 9642: 9642: __extension__ typedef __uint64_t __dev_t; 9642: __extension__ typedef unsigned int __uid_t; 9642: __extension__ typedef unsigned int __gid_t; 9642: __extension__ typedef unsigned long int __ino_t; 9642: __extension__ typedef __uint64_t __ino64_t; 9642: __extension__ typedef unsigned int __mode_t; 9642: __extension__ typedef unsigned int __nlink_t; 9642: __extension__ typedef long int __off_t; 9642: __extension__ typedef __int64_t __off64_t; 9642: __extension__ typedef int __pid_t; 9642: __extension__ typedef struct { int __val[2]; } __fsid_t; 9642: __extension__ typedef long int __clock_t; 9642: __extension__ typedef unsigned long int __rlim_t; 9642: __extension__ typedef __uint64_t __rlim64_t; 9642: __extension__ typedef unsigned int __id_t; 9642: __extension__ typedef long int __time_t; 9642: __extension__ typedef unsigned int __useconds_t; 9642: __extension__ typedef long int __suseconds_t; 9642: __extension__ typedef __int64_t __suseconds64_t; 9642: 9642: __extension__ typedef int __daddr_t; 9642: __extension__ typedef int __key_t; 9642: 9642: 9642: __extension__ typedef int __clockid_t; 9642: 9642: 9642: __extension__ typedef void * __timer_t; 9642: 9642: 9642: __extension__ typedef long int __blksize_t; 9642: 9642: 9642: 9642: 9642: __extension__ typedef long int __blkcnt_t; 9642: __extension__ typedef __int64_t __blkcnt64_t; 9642: 9642: 9642: __extension__ typedef unsigned long int __fsblkcnt_t; 9642: __extension__ typedef __uint64_t __fsblkcnt64_t; 9642: 9642: 9642: __extension__ typedef unsigned long int __fsfilcnt_t; 9642: __extension__ typedef __uint64_t __fsfilcnt64_t; 9642: 9642: 9642: __extension__ typedef int __fsword_t; 9642: 9642: __extension__ typedef int __ssize_t; 9642: 9642: 9642: __extension__ typedef long int __syscall_slong_t; 9642: 9642: __extension__ typedef unsigned long int __syscall_ulong_t; 9642: 9642: 9642: 9642: typedef __off64_t __loff_t; 9642: typedef char *__caddr_t; 9642: 9642: 9642: __extension__ typedef int __intptr_t; 9642: 9642: 9642: __extension__ typedef unsigned int __socklen_t; 9642: 9642: 9642: 9642: 9642: typedef int __sig_atomic_t; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: __extension__ typedef __int64_t __time64_t; 9642: # 28 "/usr/include/stdint.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/wchar.h" 1 3 4 9642: # 29 "/usr/include/stdint.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 9642: # 30 "/usr/include/stdint.h" 2 3 4 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdint-intn.h" 1 3 4 9642: # 24 "/usr/include/arm-linux-gnueabihf/bits/stdint-intn.h" 3 4 9642: typedef __int8_t int8_t; 9642: typedef __int16_t int16_t; 9642: typedef __int32_t int32_t; 9642: typedef __int64_t int64_t; 9642: # 35 "/usr/include/stdint.h" 2 3 4 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdint-uintn.h" 1 3 4 9642: # 24 "/usr/include/arm-linux-gnueabihf/bits/stdint-uintn.h" 3 4 9642: typedef __uint8_t uint8_t; 9642: typedef __uint16_t uint16_t; 9642: typedef __uint32_t uint32_t; 9642: typedef __uint64_t uint64_t; 9642: # 38 "/usr/include/stdint.h" 2 3 4 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdint-least.h" 1 3 4 9642: # 25 "/usr/include/arm-linux-gnueabihf/bits/stdint-least.h" 3 4 9642: typedef __int_least8_t int_least8_t; 9642: typedef __int_least16_t int_least16_t; 9642: typedef __int_least32_t int_least32_t; 9642: typedef __int_least64_t int_least64_t; 9642: 9642: 9642: typedef __uint_least8_t uint_least8_t; 9642: typedef __uint_least16_t uint_least16_t; 9642: typedef __uint_least32_t uint_least32_t; 9642: typedef __uint_least64_t uint_least64_t; 9642: # 42 "/usr/include/stdint.h" 2 3 4 9642: 9642: 9642: 9642: 9642: 9642: typedef signed char int_fast8_t; 9642: 9642: 9642: 9642: 9642: 9642: typedef int int_fast16_t; 9642: typedef int int_fast32_t; 9642: __extension__ 9642: typedef long long int int_fast64_t; 9642: 9642: 9642: 9642: typedef unsigned char uint_fast8_t; 9642: 9642: 9642: 9642: 9642: 9642: typedef unsigned int uint_fast16_t; 9642: typedef unsigned int uint_fast32_t; 9642: __extension__ 9642: typedef unsigned long long int uint_fast64_t; 9642: # 82 "/usr/include/stdint.h" 3 4 9642: typedef int intptr_t; 9642: 9642: 9642: typedef unsigned int uintptr_t; 9642: 9642: 9642: 9642: 9642: typedef __intmax_t intmax_t; 9642: typedef __uintmax_t uintmax_t; 9642: # 10 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stdint.h" 2 3 4 9642: # 38 "/usr/include/c++/13/bits/atomic_base.h" 2 3 9642: # 1 "/usr/include/c++/13/bits/atomic_lockfree_defines.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/atomic_lockfree_defines.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/atomic_lockfree_defines.h" 3 9642: # 39 "/usr/include/c++/13/bits/atomic_base.h" 2 3 9642: # 1 "/usr/include/c++/13/bits/move.h" 1 3 9642: # 37 "/usr/include/c++/13/bits/move.h" 3 9642: # 1 "/usr/include/c++/13/type_traits" 1 3 9642: # 32 "/usr/include/c++/13/type_traits" 3 9642: 9642: # 33 "/usr/include/c++/13/type_traits" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: template 9642: class reference_wrapper; 9642: # 61 "/usr/include/c++/13/type_traits" 3 9642: template 9642: struct integral_constant 9642: { 9642: static constexpr _Tp value = __v; 9642: typedef _Tp value_type; 9642: typedef integral_constant<_Tp, __v> type; 9642: constexpr operator value_type() const noexcept { return value; } 9642: 9642: 9642: 9642: 9642: constexpr value_type operator()() const noexcept { return value; } 9642: 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: using true_type = integral_constant; 9642: 9642: 9642: using false_type = integral_constant; 9642: 9642: 9642: 9642: template 9642: using __bool_constant = integral_constant; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: using bool_constant = integral_constant; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct enable_if 9642: { }; 9642: 9642: 9642: template 9642: struct enable_if 9642: { typedef _Tp type; }; 9642: 9642: 9642: template 9642: using __enable_if_t = typename enable_if<_Cond, _Tp>::type; 9642: 9642: template 9642: struct __conditional 9642: { 9642: template 9642: using type = _Tp; 9642: }; 9642: 9642: template<> 9642: struct __conditional 9642: { 9642: template 9642: using type = _Up; 9642: }; 9642: 9642: 9642: template 9642: using __conditional_t 9642: = typename __conditional<_Cond>::template type<_If, _Else>; 9642: 9642: 9642: template 9642: struct __type_identity 9642: { using type = _Type; }; 9642: 9642: template 9642: using __type_identity_t = typename __type_identity<_Tp>::type; 9642: 9642: namespace __detail 9642: { 9642: 9642: template 9642: using __first_t = _Tp; 9642: 9642: 9642: template 9642: auto __or_fn(int) -> __first_t...>; 9642: 9642: template 9642: auto __or_fn(...) -> true_type; 9642: 9642: template 9642: auto __and_fn(int) -> __first_t...>; 9642: 9642: template 9642: auto __and_fn(...) -> false_type; 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: struct __or_ 9642: : decltype(__detail::__or_fn<_Bn...>(0)) 9642: { }; 9642: 9642: template 9642: struct __and_ 9642: : decltype(__detail::__and_fn<_Bn...>(0)) 9642: { }; 9642: 9642: template 9642: struct __not_ 9642: : __bool_constant 9642: { }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline constexpr bool __or_v = __or_<_Bn...>::value; 9642: template 9642: inline constexpr bool __and_v = __and_<_Bn...>::value; 9642: 9642: namespace __detail 9642: { 9642: template 9642: struct __disjunction_impl 9642: { using type = _B1; }; 9642: 9642: template 9642: struct __disjunction_impl<__enable_if_t, _B1, _B2, _Bn...> 9642: { using type = typename __disjunction_impl::type; }; 9642: 9642: template 9642: struct __conjunction_impl 9642: { using type = _B1; }; 9642: 9642: template 9642: struct __conjunction_impl<__enable_if_t, _B1, _B2, _Bn...> 9642: { using type = typename __conjunction_impl::type; }; 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: struct conjunction 9642: : __detail::__conjunction_impl::type 9642: { }; 9642: 9642: template<> 9642: struct conjunction<> 9642: : true_type 9642: { }; 9642: 9642: template 9642: struct disjunction 9642: : __detail::__disjunction_impl::type 9642: { }; 9642: 9642: template<> 9642: struct disjunction<> 9642: : false_type 9642: { }; 9642: 9642: template 9642: struct negation 9642: : __not_<_Pp>::type 9642: { }; 9642: 9642: 9642: 9642: 9642: template 9642: inline constexpr bool conjunction_v = conjunction<_Bn...>::value; 9642: 9642: template 9642: inline constexpr bool disjunction_v = disjunction<_Bn...>::value; 9642: 9642: template 9642: inline constexpr bool negation_v = negation<_Pp>::value; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct is_reference; 9642: template 9642: struct is_function; 9642: template 9642: struct is_void; 9642: template 9642: struct remove_cv; 9642: template 9642: struct is_const; 9642: 9642: 9642: template 9642: struct __is_array_unknown_bounds; 9642: 9642: 9642: 9642: 9642: template 9642: constexpr true_type __is_complete_or_unbounded(__type_identity<_Tp>) 9642: { return {}; } 9642: 9642: template 9642: constexpr typename __or_< 9642: is_reference<_NestedType>, 9642: is_function<_NestedType>, 9642: is_void<_NestedType>, 9642: __is_array_unknown_bounds<_NestedType> 9642: >::type __is_complete_or_unbounded(_TypeIdentity) 9642: { return {}; } 9642: 9642: 9642: template 9642: using __remove_cv_t = typename remove_cv<_Tp>::type; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct is_void 9642: : public false_type { }; 9642: 9642: template<> 9642: struct is_void 9642: : public true_type { }; 9642: 9642: template<> 9642: struct is_void 9642: : public true_type { }; 9642: 9642: template<> 9642: struct is_void 9642: : public true_type { }; 9642: 9642: template<> 9642: struct is_void 9642: : public true_type { }; 9642: 9642: 9642: template 9642: struct __is_integral_helper 9642: : public false_type { }; 9642: 9642: template<> 9642: struct __is_integral_helper 9642: : public true_type { }; 9642: 9642: template<> 9642: struct __is_integral_helper 9642: : public true_type { }; 9642: 9642: template<> 9642: struct __is_integral_helper 9642: : public true_type { }; 9642: 9642: template<> 9642: struct __is_integral_helper 9642: : public true_type { }; 9642: 9642: 9642: 9642: 9642: template<> 9642: struct __is_integral_helper 9642: : public true_type { }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template<> 9642: struct __is_integral_helper 9642: : public true_type { }; 9642: 9642: template<> 9642: struct __is_integral_helper 9642: : public true_type { }; 9642: 9642: template<> 9642: struct __is_integral_helper 9642: : public true_type { }; 9642: 9642: template<> 9642: struct __is_integral_helper 9642: : public true_type { }; 9642: 9642: template<> 9642: struct __is_integral_helper 9642: : public true_type { }; 9642: 9642: template<> 9642: struct __is_integral_helper 9642: : public true_type { }; 9642: 9642: template<> 9642: struct __is_integral_helper 9642: : public true_type { }; 9642: 9642: template<> 9642: struct __is_integral_helper 9642: : public true_type { }; 9642: 9642: template<> 9642: struct __is_integral_helper 9642: : public true_type { }; 9642: 9642: template<> 9642: struct __is_integral_helper 9642: : public true_type { }; 9642: # 440 "/usr/include/c++/13/type_traits" 3 9642: template 9642: struct is_integral 9642: : public __is_integral_helper<__remove_cv_t<_Tp>>::type 9642: { }; 9642: 9642: 9642: template 9642: struct __is_floating_point_helper 9642: : public false_type { }; 9642: 9642: template<> 9642: struct __is_floating_point_helper 9642: : public true_type { }; 9642: 9642: template<> 9642: struct __is_floating_point_helper 9642: : public true_type { }; 9642: 9642: template<> 9642: struct __is_floating_point_helper 9642: : public true_type { }; 9642: # 500 "/usr/include/c++/13/type_traits" 3 9642: template 9642: struct is_floating_point 9642: : public __is_floating_point_helper<__remove_cv_t<_Tp>>::type 9642: { }; 9642: 9642: 9642: template 9642: struct is_array 9642: : public false_type { }; 9642: 9642: template 9642: struct is_array<_Tp[_Size]> 9642: : public true_type { }; 9642: 9642: template 9642: struct is_array<_Tp[]> 9642: : public true_type { }; 9642: 9642: template 9642: struct __is_pointer_helper 9642: : public false_type { }; 9642: 9642: template 9642: struct __is_pointer_helper<_Tp*> 9642: : public true_type { }; 9642: 9642: 9642: template 9642: struct is_pointer 9642: : public __is_pointer_helper<__remove_cv_t<_Tp>>::type 9642: { }; 9642: 9642: 9642: template 9642: struct is_lvalue_reference 9642: : public false_type { }; 9642: 9642: template 9642: struct is_lvalue_reference<_Tp&> 9642: : public true_type { }; 9642: 9642: 9642: template 9642: struct is_rvalue_reference 9642: : public false_type { }; 9642: 9642: template 9642: struct is_rvalue_reference<_Tp&&> 9642: : public true_type { }; 9642: 9642: template 9642: struct __is_member_object_pointer_helper 9642: : public false_type { }; 9642: 9642: template 9642: struct __is_member_object_pointer_helper<_Tp _Cp::*> 9642: : public __not_>::type { }; 9642: 9642: 9642: template 9642: struct is_member_object_pointer 9642: : public __is_member_object_pointer_helper<__remove_cv_t<_Tp>>::type 9642: { }; 9642: 9642: template 9642: struct __is_member_function_pointer_helper 9642: : public false_type { }; 9642: 9642: template 9642: struct __is_member_function_pointer_helper<_Tp _Cp::*> 9642: : public is_function<_Tp>::type { }; 9642: 9642: 9642: template 9642: struct is_member_function_pointer 9642: : public __is_member_function_pointer_helper<__remove_cv_t<_Tp>>::type 9642: { }; 9642: 9642: 9642: template 9642: struct is_enum 9642: : public integral_constant 9642: { }; 9642: 9642: 9642: template 9642: struct is_union 9642: : public integral_constant 9642: { }; 9642: 9642: 9642: template 9642: struct is_class 9642: : public integral_constant 9642: { }; 9642: 9642: 9642: template 9642: struct is_function 9642: : public __bool_constant::value> { }; 9642: 9642: template 9642: struct is_function<_Tp&> 9642: : public false_type { }; 9642: 9642: template 9642: struct is_function<_Tp&&> 9642: : public false_type { }; 9642: 9642: 9642: 9642: 9642: template 9642: struct is_null_pointer 9642: : public false_type { }; 9642: 9642: template<> 9642: struct is_null_pointer 9642: : public true_type { }; 9642: 9642: template<> 9642: struct is_null_pointer 9642: : public true_type { }; 9642: 9642: template<> 9642: struct is_null_pointer 9642: : public true_type { }; 9642: 9642: template<> 9642: struct is_null_pointer 9642: : public true_type { }; 9642: 9642: 9642: 9642: template 9642: struct __is_nullptr_t 9642: : public is_null_pointer<_Tp> 9642: { } __attribute__ ((__deprecated__ ("use '" "std::is_null_pointer" "' instead"))); 9642: 9642: 9642: 9642: 9642: template 9642: struct is_reference 9642: : public false_type 9642: { }; 9642: 9642: template 9642: struct is_reference<_Tp&> 9642: : public true_type 9642: { }; 9642: 9642: template 9642: struct is_reference<_Tp&&> 9642: : public true_type 9642: { }; 9642: 9642: 9642: template 9642: struct is_arithmetic 9642: : public __or_, is_floating_point<_Tp>>::type 9642: { }; 9642: 9642: 9642: template 9642: struct is_fundamental 9642: : public __or_, is_void<_Tp>, 9642: is_null_pointer<_Tp>>::type 9642: { }; 9642: 9642: 9642: template 9642: struct is_object 9642: : public __not_<__or_, is_reference<_Tp>, 9642: is_void<_Tp>>>::type 9642: { }; 9642: 9642: template 9642: struct is_member_pointer; 9642: 9642: 9642: template 9642: struct is_scalar 9642: : public __or_, is_enum<_Tp>, is_pointer<_Tp>, 9642: is_member_pointer<_Tp>, is_null_pointer<_Tp>>::type 9642: { }; 9642: 9642: 9642: template 9642: struct is_compound 9642: : public __not_>::type { }; 9642: 9642: 9642: template 9642: struct __is_member_pointer_helper 9642: : public false_type { }; 9642: 9642: template 9642: struct __is_member_pointer_helper<_Tp _Cp::*> 9642: : public true_type { }; 9642: 9642: 9642: 9642: template 9642: struct is_member_pointer 9642: : public __is_member_pointer_helper<__remove_cv_t<_Tp>>::type 9642: { }; 9642: 9642: template 9642: struct is_same; 9642: 9642: 9642: template 9642: using __is_one_of = __or_...>; 9642: 9642: 9642: __extension__ 9642: template 9642: using __is_signed_integer = __is_one_of<__remove_cv_t<_Tp>, 9642: signed char, signed short, signed int, signed long, 9642: signed long long 9642: # 733 "/usr/include/c++/13/type_traits" 3 9642: >; 9642: 9642: 9642: __extension__ 9642: template 9642: using __is_unsigned_integer = __is_one_of<__remove_cv_t<_Tp>, 9642: unsigned char, unsigned short, unsigned int, unsigned long, 9642: unsigned long long 9642: # 753 "/usr/include/c++/13/type_traits" 3 9642: >; 9642: 9642: 9642: template 9642: using __is_standard_integer 9642: = __or_<__is_signed_integer<_Tp>, __is_unsigned_integer<_Tp>>; 9642: 9642: 9642: template using __void_t = void; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct is_const 9642: : public false_type { }; 9642: 9642: template 9642: struct is_const<_Tp const> 9642: : public true_type { }; 9642: 9642: 9642: template 9642: struct is_volatile 9642: : public false_type { }; 9642: 9642: template 9642: struct is_volatile<_Tp volatile> 9642: : public true_type { }; 9642: 9642: 9642: template 9642: struct is_trivial 9642: : public integral_constant 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_trivially_copyable 9642: : public integral_constant 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_standard_layout 9642: : public integral_constant 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct 9642: 9642: is_pod 9642: : public integral_constant 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct 9642: [[__deprecated__]] 9642: is_literal_type 9642: : public integral_constant 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_empty 9642: : public integral_constant 9642: { }; 9642: 9642: 9642: template 9642: struct is_polymorphic 9642: : public integral_constant 9642: { }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct is_final 9642: : public integral_constant 9642: { }; 9642: 9642: 9642: 9642: template 9642: struct is_abstract 9642: : public integral_constant 9642: { }; 9642: 9642: 9642: template::value> 9642: struct __is_signed_helper 9642: : public false_type { }; 9642: 9642: template 9642: struct __is_signed_helper<_Tp, true> 9642: : public integral_constant 9642: { }; 9642: 9642: 9642: 9642: template 9642: struct is_signed 9642: : public __is_signed_helper<_Tp>::type 9642: { }; 9642: 9642: 9642: template 9642: struct is_unsigned 9642: : public __and_, __not_>>::type 9642: { }; 9642: 9642: 9642: template 9642: _Up 9642: __declval(int); 9642: 9642: template 9642: _Tp 9642: __declval(long); 9642: 9642: 9642: template 9642: auto declval() noexcept -> decltype(__declval<_Tp>(0)); 9642: 9642: template 9642: struct remove_all_extents; 9642: 9642: 9642: template 9642: struct __is_array_known_bounds 9642: : public false_type 9642: { }; 9642: 9642: template 9642: struct __is_array_known_bounds<_Tp[_Size]> 9642: : public true_type 9642: { }; 9642: 9642: template 9642: struct __is_array_unknown_bounds 9642: : public false_type 9642: { }; 9642: 9642: template 9642: struct __is_array_unknown_bounds<_Tp[]> 9642: : public true_type 9642: { }; 9642: # 936 "/usr/include/c++/13/type_traits" 3 9642: struct __do_is_destructible_impl 9642: { 9642: template().~_Tp())> 9642: static true_type __test(int); 9642: 9642: template 9642: static false_type __test(...); 9642: }; 9642: 9642: template 9642: struct __is_destructible_impl 9642: : public __do_is_destructible_impl 9642: { 9642: typedef decltype(__test<_Tp>(0)) type; 9642: }; 9642: 9642: template, 9642: __is_array_unknown_bounds<_Tp>, 9642: is_function<_Tp>>::value, 9642: bool = __or_, is_scalar<_Tp>>::value> 9642: struct __is_destructible_safe; 9642: 9642: template 9642: struct __is_destructible_safe<_Tp, false, false> 9642: : public __is_destructible_impl::type>::type 9642: { }; 9642: 9642: template 9642: struct __is_destructible_safe<_Tp, true, false> 9642: : public false_type { }; 9642: 9642: template 9642: struct __is_destructible_safe<_Tp, false, true> 9642: : public true_type { }; 9642: 9642: 9642: 9642: template 9642: struct is_destructible 9642: : public __is_destructible_safe<_Tp>::type 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct __do_is_nt_destructible_impl 9642: { 9642: template 9642: static __bool_constant().~_Tp())> 9642: __test(int); 9642: 9642: template 9642: static false_type __test(...); 9642: }; 9642: 9642: template 9642: struct __is_nt_destructible_impl 9642: : public __do_is_nt_destructible_impl 9642: { 9642: typedef decltype(__test<_Tp>(0)) type; 9642: }; 9642: 9642: template, 9642: __is_array_unknown_bounds<_Tp>, 9642: is_function<_Tp>>::value, 9642: bool = __or_, is_scalar<_Tp>>::value> 9642: struct __is_nt_destructible_safe; 9642: 9642: template 9642: struct __is_nt_destructible_safe<_Tp, false, false> 9642: : public __is_nt_destructible_impl::type>::type 9642: { }; 9642: 9642: template 9642: struct __is_nt_destructible_safe<_Tp, true, false> 9642: : public false_type { }; 9642: 9642: template 9642: struct __is_nt_destructible_safe<_Tp, false, true> 9642: : public true_type { }; 9642: 9642: 9642: 9642: template 9642: struct is_nothrow_destructible 9642: : public __is_nt_destructible_safe<_Tp>::type 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: using __is_constructible_impl 9642: = __bool_constant<__is_constructible(_Tp, _Args...)>; 9642: 9642: 9642: 9642: template 9642: struct is_constructible 9642: : public __is_constructible_impl<_Tp, _Args...> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_default_constructible 9642: : public __is_constructible_impl<_Tp> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct __add_lvalue_reference_helper 9642: { using type = _Tp; }; 9642: 9642: template 9642: struct __add_lvalue_reference_helper<_Tp, __void_t<_Tp&>> 9642: { using type = _Tp&; }; 9642: 9642: template 9642: using __add_lval_ref_t = typename __add_lvalue_reference_helper<_Tp>::type; 9642: 9642: 9642: 9642: template 9642: struct is_copy_constructible 9642: : public __is_constructible_impl<_Tp, __add_lval_ref_t> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct __add_rvalue_reference_helper 9642: { using type = _Tp; }; 9642: 9642: template 9642: struct __add_rvalue_reference_helper<_Tp, __void_t<_Tp&&>> 9642: { using type = _Tp&&; }; 9642: 9642: template 9642: using __add_rval_ref_t = typename __add_rvalue_reference_helper<_Tp>::type; 9642: 9642: 9642: 9642: template 9642: struct is_move_constructible 9642: : public __is_constructible_impl<_Tp, __add_rval_ref_t<_Tp>> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: using __is_nothrow_constructible_impl 9642: = __bool_constant<__is_nothrow_constructible(_Tp, _Args...)>; 9642: 9642: 9642: 9642: template 9642: struct is_nothrow_constructible 9642: : public __is_nothrow_constructible_impl<_Tp, _Args...> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_nothrow_default_constructible 9642: : public __is_nothrow_constructible_impl<_Tp> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_nothrow_copy_constructible 9642: : public __is_nothrow_constructible_impl<_Tp, __add_lval_ref_t> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_nothrow_move_constructible 9642: : public __is_nothrow_constructible_impl<_Tp, __add_rval_ref_t<_Tp>> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: using __is_assignable_impl = __bool_constant<__is_assignable(_Tp, _Up)>; 9642: 9642: 9642: 9642: template 9642: struct is_assignable 9642: : public __is_assignable_impl<_Tp, _Up> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_copy_assignable 9642: : public __is_assignable_impl<__add_lval_ref_t<_Tp>, 9642: __add_lval_ref_t> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_move_assignable 9642: : public __is_assignable_impl<__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: using __is_nothrow_assignable_impl 9642: = __bool_constant<__is_nothrow_assignable(_Tp, _Up)>; 9642: 9642: 9642: 9642: template 9642: struct is_nothrow_assignable 9642: : public __is_nothrow_assignable_impl<_Tp, _Up> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_nothrow_copy_assignable 9642: : public __is_nothrow_assignable_impl<__add_lval_ref_t<_Tp>, 9642: __add_lval_ref_t> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_nothrow_move_assignable 9642: : public __is_nothrow_assignable_impl<__add_lval_ref_t<_Tp>, 9642: __add_rval_ref_t<_Tp>> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: using __is_trivially_constructible_impl 9642: = __bool_constant<__is_trivially_constructible(_Tp, _Args...)>; 9642: 9642: 9642: 9642: template 9642: struct is_trivially_constructible 9642: : public __is_trivially_constructible_impl<_Tp, _Args...> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_trivially_default_constructible 9642: : public __is_trivially_constructible_impl<_Tp> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: struct __do_is_implicitly_default_constructible_impl 9642: { 9642: template 9642: static void __helper(const _Tp&); 9642: 9642: template 9642: static true_type __test(const _Tp&, 9642: decltype(__helper({}))* = 0); 9642: 9642: static false_type __test(...); 9642: }; 9642: 9642: template 9642: struct __is_implicitly_default_constructible_impl 9642: : public __do_is_implicitly_default_constructible_impl 9642: { 9642: typedef decltype(__test(declval<_Tp>())) type; 9642: }; 9642: 9642: template 9642: struct __is_implicitly_default_constructible_safe 9642: : public __is_implicitly_default_constructible_impl<_Tp>::type 9642: { }; 9642: 9642: template 9642: struct __is_implicitly_default_constructible 9642: : public __and_<__is_constructible_impl<_Tp>, 9642: __is_implicitly_default_constructible_safe<_Tp>>::type 9642: { }; 9642: 9642: 9642: template 9642: struct is_trivially_copy_constructible 9642: : public __is_trivially_constructible_impl<_Tp, __add_lval_ref_t> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_trivially_move_constructible 9642: : public __is_trivially_constructible_impl<_Tp, __add_rval_ref_t<_Tp>> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: using __is_trivially_assignable_impl 9642: = __bool_constant<__is_trivially_assignable(_Tp, _Up)>; 9642: 9642: 9642: 9642: template 9642: struct is_trivially_assignable 9642: : public __is_trivially_assignable_impl<_Tp, _Up> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_trivially_copy_assignable 9642: : public __is_trivially_assignable_impl<__add_lval_ref_t<_Tp>, 9642: __add_lval_ref_t> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_trivially_move_assignable 9642: : public __is_trivially_assignable_impl<__add_lval_ref_t<_Tp>, 9642: __add_rval_ref_t<_Tp>> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_trivially_destructible 9642: : public __and_<__is_destructible_safe<_Tp>, 9642: __bool_constant<__has_trivial_destructor(_Tp)>>::type 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: 9642: template 9642: struct has_virtual_destructor 9642: : public integral_constant 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct alignment_of 9642: : public integral_constant 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct rank 9642: : public integral_constant { }; 9642: 9642: template 9642: struct rank<_Tp[_Size]> 9642: : public integral_constant::value> { }; 9642: 9642: template 9642: struct rank<_Tp[]> 9642: : public integral_constant::value> { }; 9642: 9642: 9642: template 9642: struct extent 9642: : public integral_constant { }; 9642: 9642: template 9642: struct extent<_Tp[_Size], 0> 9642: : public integral_constant { }; 9642: 9642: template 9642: struct extent<_Tp[_Size], _Uint> 9642: : public extent<_Tp, _Uint - 1>::type { }; 9642: 9642: template 9642: struct extent<_Tp[], 0> 9642: : public integral_constant { }; 9642: 9642: template 9642: struct extent<_Tp[], _Uint> 9642: : public extent<_Tp, _Uint - 1>::type { }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct is_same 9642: 9642: : public integral_constant 9642: 9642: 9642: 9642: { }; 9642: # 1409 "/usr/include/c++/13/type_traits" 3 9642: template 9642: struct is_base_of 9642: : public integral_constant 9642: { }; 9642: 9642: 9642: template 9642: struct is_convertible 9642: : public __bool_constant<__is_convertible(_From, _To)> 9642: { }; 9642: # 1458 "/usr/include/c++/13/type_traits" 3 9642: template 9642: using __is_array_convertible 9642: = is_convertible<_FromElementType(*)[], _ToElementType(*)[]>; 9642: # 1522 "/usr/include/c++/13/type_traits" 3 9642: template 9642: struct remove_const 9642: { typedef _Tp type; }; 9642: 9642: template 9642: struct remove_const<_Tp const> 9642: { typedef _Tp type; }; 9642: 9642: 9642: template 9642: struct remove_volatile 9642: { typedef _Tp type; }; 9642: 9642: template 9642: struct remove_volatile<_Tp volatile> 9642: { typedef _Tp type; }; 9642: 9642: 9642: 9642: template 9642: struct remove_cv 9642: { using type = __remove_cv(_Tp); }; 9642: # 1563 "/usr/include/c++/13/type_traits" 3 9642: template 9642: struct add_const 9642: { using type = _Tp const; }; 9642: 9642: 9642: template 9642: struct add_volatile 9642: { using type = _Tp volatile; }; 9642: 9642: 9642: template 9642: struct add_cv 9642: { using type = _Tp const volatile; }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: using remove_const_t = typename remove_const<_Tp>::type; 9642: 9642: 9642: template 9642: using remove_volatile_t = typename remove_volatile<_Tp>::type; 9642: 9642: 9642: template 9642: using remove_cv_t = typename remove_cv<_Tp>::type; 9642: 9642: 9642: template 9642: using add_const_t = typename add_const<_Tp>::type; 9642: 9642: 9642: template 9642: using add_volatile_t = typename add_volatile<_Tp>::type; 9642: 9642: 9642: template 9642: using add_cv_t = typename add_cv<_Tp>::type; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct remove_reference 9642: { using type = __remove_reference(_Tp); }; 9642: # 1628 "/usr/include/c++/13/type_traits" 3 9642: template 9642: struct add_lvalue_reference 9642: { using type = __add_lval_ref_t<_Tp>; }; 9642: 9642: 9642: template 9642: struct add_rvalue_reference 9642: { using type = __add_rval_ref_t<_Tp>; }; 9642: 9642: 9642: 9642: template 9642: using remove_reference_t = typename remove_reference<_Tp>::type; 9642: 9642: 9642: template 9642: using add_lvalue_reference_t = typename add_lvalue_reference<_Tp>::type; 9642: 9642: 9642: template 9642: using add_rvalue_reference_t = typename add_rvalue_reference<_Tp>::type; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct __cv_selector; 9642: 9642: template 9642: struct __cv_selector<_Unqualified, false, false> 9642: { typedef _Unqualified __type; }; 9642: 9642: template 9642: struct __cv_selector<_Unqualified, false, true> 9642: { typedef volatile _Unqualified __type; }; 9642: 9642: template 9642: struct __cv_selector<_Unqualified, true, false> 9642: { typedef const _Unqualified __type; }; 9642: 9642: template 9642: struct __cv_selector<_Unqualified, true, true> 9642: { typedef const volatile _Unqualified __type; }; 9642: 9642: template::value, 9642: bool _IsVol = is_volatile<_Qualified>::value> 9642: class __match_cv_qualifiers 9642: { 9642: typedef __cv_selector<_Unqualified, _IsConst, _IsVol> __match; 9642: 9642: public: 9642: typedef typename __match::__type __type; 9642: }; 9642: 9642: 9642: template 9642: struct __make_unsigned 9642: { typedef _Tp __type; }; 9642: 9642: template<> 9642: struct __make_unsigned 9642: { typedef unsigned char __type; }; 9642: 9642: template<> 9642: struct __make_unsigned 9642: { typedef unsigned char __type; }; 9642: 9642: template<> 9642: struct __make_unsigned 9642: { typedef unsigned short __type; }; 9642: 9642: template<> 9642: struct __make_unsigned 9642: { typedef unsigned int __type; }; 9642: 9642: template<> 9642: struct __make_unsigned 9642: { typedef unsigned long __type; }; 9642: 9642: template<> 9642: struct __make_unsigned 9642: { typedef unsigned long long __type; }; 9642: # 1741 "/usr/include/c++/13/type_traits" 3 9642: template::value, 9642: bool _IsEnum = is_enum<_Tp>::value> 9642: class __make_unsigned_selector; 9642: 9642: template 9642: class __make_unsigned_selector<_Tp, true, false> 9642: { 9642: using __unsigned_type 9642: = typename __make_unsigned<__remove_cv_t<_Tp>>::__type; 9642: 9642: public: 9642: using __type 9642: = typename __match_cv_qualifiers<_Tp, __unsigned_type>::__type; 9642: }; 9642: 9642: class __make_unsigned_selector_base 9642: { 9642: protected: 9642: template struct _List { }; 9642: 9642: template 9642: struct _List<_Tp, _Up...> : _List<_Up...> 9642: { static constexpr size_t __size = sizeof(_Tp); }; 9642: 9642: template 9642: struct __select; 9642: 9642: template 9642: struct __select<_Sz, _List<_Uint, _UInts...>, true> 9642: { using __type = _Uint; }; 9642: 9642: template 9642: struct __select<_Sz, _List<_Uint, _UInts...>, false> 9642: : __select<_Sz, _List<_UInts...>> 9642: { }; 9642: }; 9642: 9642: 9642: template 9642: class __make_unsigned_selector<_Tp, false, true> 9642: : __make_unsigned_selector_base 9642: { 9642: 9642: using _UInts = _List; 9642: 9642: using __unsigned_type = typename __select::__type; 9642: 9642: public: 9642: using __type 9642: = typename __match_cv_qualifiers<_Tp, __unsigned_type>::__type; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template<> 9642: struct __make_unsigned 9642: { 9642: using __type 9642: = typename __make_unsigned_selector::__type; 9642: }; 9642: # 1815 "/usr/include/c++/13/type_traits" 3 9642: template<> 9642: struct __make_unsigned 9642: { 9642: using __type 9642: = typename __make_unsigned_selector::__type; 9642: }; 9642: 9642: template<> 9642: struct __make_unsigned 9642: { 9642: using __type 9642: = typename __make_unsigned_selector::__type; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct make_unsigned 9642: { typedef typename __make_unsigned_selector<_Tp>::__type type; }; 9642: 9642: 9642: template<> struct make_unsigned; 9642: template<> struct make_unsigned; 9642: template<> struct make_unsigned; 9642: template<> struct make_unsigned; 9642: 9642: 9642: 9642: 9642: template 9642: struct __make_signed 9642: { typedef _Tp __type; }; 9642: 9642: template<> 9642: struct __make_signed 9642: { typedef signed char __type; }; 9642: 9642: template<> 9642: struct __make_signed 9642: { typedef signed char __type; }; 9642: 9642: template<> 9642: struct __make_signed 9642: { typedef signed short __type; }; 9642: 9642: template<> 9642: struct __make_signed 9642: { typedef signed int __type; }; 9642: 9642: template<> 9642: struct __make_signed 9642: { typedef signed long __type; }; 9642: 9642: template<> 9642: struct __make_signed 9642: { typedef signed long long __type; }; 9642: # 1901 "/usr/include/c++/13/type_traits" 3 9642: template::value, 9642: bool _IsEnum = is_enum<_Tp>::value> 9642: class __make_signed_selector; 9642: 9642: template 9642: class __make_signed_selector<_Tp, true, false> 9642: { 9642: using __signed_type 9642: = typename __make_signed<__remove_cv_t<_Tp>>::__type; 9642: 9642: public: 9642: using __type 9642: = typename __match_cv_qualifiers<_Tp, __signed_type>::__type; 9642: }; 9642: 9642: 9642: template 9642: class __make_signed_selector<_Tp, false, true> 9642: { 9642: typedef typename __make_unsigned_selector<_Tp>::__type __unsigned_type; 9642: 9642: public: 9642: typedef typename __make_signed_selector<__unsigned_type>::__type __type; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template<> 9642: struct __make_signed 9642: { 9642: using __type 9642: = typename __make_signed_selector::__type; 9642: }; 9642: # 1947 "/usr/include/c++/13/type_traits" 3 9642: template<> 9642: struct __make_signed 9642: { 9642: using __type 9642: = typename __make_signed_selector::__type; 9642: }; 9642: 9642: template<> 9642: struct __make_signed 9642: { 9642: using __type 9642: = typename __make_signed_selector::__type; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct make_signed 9642: { typedef typename __make_signed_selector<_Tp>::__type type; }; 9642: 9642: 9642: template<> struct make_signed; 9642: template<> struct make_signed; 9642: template<> struct make_signed; 9642: template<> struct make_signed; 9642: 9642: 9642: 9642: template 9642: using make_signed_t = typename make_signed<_Tp>::type; 9642: 9642: 9642: template 9642: using make_unsigned_t = typename make_unsigned<_Tp>::type; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct remove_extent 9642: { typedef _Tp type; }; 9642: 9642: template 9642: struct remove_extent<_Tp[_Size]> 9642: { typedef _Tp type; }; 9642: 9642: template 9642: struct remove_extent<_Tp[]> 9642: { typedef _Tp type; }; 9642: 9642: 9642: template 9642: struct remove_all_extents 9642: { typedef _Tp type; }; 9642: 9642: template 9642: struct remove_all_extents<_Tp[_Size]> 9642: { typedef typename remove_all_extents<_Tp>::type type; }; 9642: 9642: template 9642: struct remove_all_extents<_Tp[]> 9642: { typedef typename remove_all_extents<_Tp>::type type; }; 9642: 9642: 9642: 9642: template 9642: using remove_extent_t = typename remove_extent<_Tp>::type; 9642: 9642: 9642: template 9642: using remove_all_extents_t = typename remove_all_extents<_Tp>::type; 9642: 9642: 9642: 9642: 9642: template 9642: struct __remove_pointer_helper 9642: { typedef _Tp type; }; 9642: 9642: template 9642: struct __remove_pointer_helper<_Tp, _Up*> 9642: { typedef _Up type; }; 9642: 9642: 9642: template 9642: struct remove_pointer 9642: : public __remove_pointer_helper<_Tp, __remove_cv_t<_Tp>> 9642: { }; 9642: 9642: template 9642: struct __add_pointer_helper 9642: { using type = _Tp; }; 9642: 9642: template 9642: struct __add_pointer_helper<_Tp, __void_t<_Tp*>> 9642: { using type = _Tp*; }; 9642: 9642: 9642: template 9642: struct add_pointer 9642: : public __add_pointer_helper<_Tp> 9642: { }; 9642: 9642: template 9642: struct add_pointer<_Tp&> 9642: { using type = _Tp*; }; 9642: 9642: template 9642: struct add_pointer<_Tp&&> 9642: { using type = _Tp*; }; 9642: 9642: 9642: 9642: template 9642: using remove_pointer_t = typename remove_pointer<_Tp>::type; 9642: 9642: 9642: template 9642: using add_pointer_t = typename add_pointer<_Tp>::type; 9642: 9642: 9642: template 9642: struct __aligned_storage_msa 9642: { 9642: union __type 9642: { 9642: unsigned char __data[_Len]; 9642: struct __attribute__((__aligned__)) { } __align; 9642: }; 9642: }; 9642: # 2095 "/usr/include/c++/13/type_traits" 3 9642: template::__type)> 9642: struct 9642: 9642: aligned_storage 9642: { 9642: union type 9642: { 9642: unsigned char __data[_Len]; 9642: struct __attribute__((__aligned__((_Align)))) { } __align; 9642: }; 9642: }; 9642: 9642: template 9642: struct __strictest_alignment 9642: { 9642: static const size_t _S_alignment = 0; 9642: static const size_t _S_size = 0; 9642: }; 9642: 9642: template 9642: struct __strictest_alignment<_Tp, _Types...> 9642: { 9642: static const size_t _S_alignment = 9642: alignof(_Tp) > __strictest_alignment<_Types...>::_S_alignment 9642: ? alignof(_Tp) : __strictest_alignment<_Types...>::_S_alignment; 9642: static const size_t _S_size = 9642: sizeof(_Tp) > __strictest_alignment<_Types...>::_S_size 9642: ? sizeof(_Tp) : __strictest_alignment<_Types...>::_S_size; 9642: }; 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: # 2141 "/usr/include/c++/13/type_traits" 3 9642: template 9642: struct 9642: 9642: aligned_union 9642: { 9642: private: 9642: static_assert(sizeof...(_Types) != 0, "At least one type is required"); 9642: 9642: using __strictest = __strictest_alignment<_Types...>; 9642: static const size_t _S_len = _Len > __strictest::_S_size 9642: ? _Len : __strictest::_S_size; 9642: public: 9642: 9642: static const size_t alignment_value = __strictest::_S_alignment; 9642: 9642: typedef typename aligned_storage<_S_len, alignment_value>::type type; 9642: }; 9642: 9642: template 9642: const size_t aligned_union<_Len, _Types...>::alignment_value; 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct __decay_selector 9642: : __conditional_t::value, 9642: remove_cv<_Up>, 9642: add_pointer<_Up>> 9642: { }; 9642: 9642: template 9642: struct __decay_selector<_Up[_Nm]> 9642: { using type = _Up*; }; 9642: 9642: template 9642: struct __decay_selector<_Up[]> 9642: { using type = _Up*; }; 9642: 9642: 9642: 9642: 9642: template 9642: struct decay 9642: { using type = typename __decay_selector<_Tp>::type; }; 9642: 9642: template 9642: struct decay<_Tp&> 9642: { using type = typename __decay_selector<_Tp>::type; }; 9642: 9642: template 9642: struct decay<_Tp&&> 9642: { using type = typename __decay_selector<_Tp>::type; }; 9642: 9642: 9642: 9642: 9642: template 9642: struct __strip_reference_wrapper 9642: { 9642: typedef _Tp __type; 9642: }; 9642: 9642: template 9642: struct __strip_reference_wrapper > 9642: { 9642: typedef _Tp& __type; 9642: }; 9642: 9642: 9642: template 9642: using __decay_t = typename decay<_Tp>::type; 9642: 9642: template 9642: using __decay_and_strip = __strip_reference_wrapper<__decay_t<_Tp>>; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: using _Require = __enable_if_t<__and_<_Cond...>::value>; 9642: 9642: 9642: template 9642: using __remove_cvref_t 9642: = typename remove_cv::type>::type; 9642: 9642: 9642: 9642: 9642: template 9642: struct conditional 9642: { typedef _Iftrue type; }; 9642: 9642: 9642: template 9642: struct conditional 9642: { typedef _Iffalse type; }; 9642: 9642: 9642: template 9642: struct common_type; 9642: # 2256 "/usr/include/c++/13/type_traits" 3 9642: template 9642: struct __success_type 9642: { typedef _Tp type; }; 9642: 9642: struct __failure_type 9642: { }; 9642: 9642: struct __do_common_type_impl 9642: { 9642: template 9642: using __cond_t 9642: = decltype(true ? std::declval<_Tp>() : std::declval<_Up>()); 9642: 9642: 9642: 9642: template 9642: static __success_type<__decay_t<__cond_t<_Tp, _Up>>> 9642: _S_test(int); 9642: # 2283 "/usr/include/c++/13/type_traits" 3 9642: template 9642: static __failure_type 9642: _S_test_2(...); 9642: 9642: template 9642: static decltype(_S_test_2<_Tp, _Up>(0)) 9642: _S_test(...); 9642: }; 9642: 9642: 9642: template<> 9642: struct common_type<> 9642: { }; 9642: 9642: 9642: template 9642: struct common_type<_Tp0> 9642: : public common_type<_Tp0, _Tp0> 9642: { }; 9642: 9642: 9642: template, typename _Dp2 = __decay_t<_Tp2>> 9642: struct __common_type_impl 9642: { 9642: 9642: 9642: using type = common_type<_Dp1, _Dp2>; 9642: }; 9642: 9642: template 9642: struct __common_type_impl<_Tp1, _Tp2, _Tp1, _Tp2> 9642: : private __do_common_type_impl 9642: { 9642: 9642: 9642: using type = decltype(_S_test<_Tp1, _Tp2>(0)); 9642: }; 9642: 9642: 9642: template 9642: struct common_type<_Tp1, _Tp2> 9642: : public __common_type_impl<_Tp1, _Tp2>::type 9642: { }; 9642: 9642: template 9642: struct __common_type_pack 9642: { }; 9642: 9642: template 9642: struct __common_type_fold; 9642: 9642: 9642: template 9642: struct common_type<_Tp1, _Tp2, _Rp...> 9642: : public __common_type_fold, 9642: __common_type_pack<_Rp...>> 9642: { }; 9642: 9642: 9642: 9642: 9642: template 9642: struct __common_type_fold<_CTp, __common_type_pack<_Rp...>, 9642: __void_t> 9642: : public common_type 9642: { }; 9642: 9642: 9642: template 9642: struct __common_type_fold<_CTp, _Rp, void> 9642: { }; 9642: 9642: template::value> 9642: struct __underlying_type_impl 9642: { 9642: using type = __underlying_type(_Tp); 9642: }; 9642: 9642: template 9642: struct __underlying_type_impl<_Tp, false> 9642: { }; 9642: 9642: 9642: 9642: template 9642: struct underlying_type 9642: : public __underlying_type_impl<_Tp> 9642: { }; 9642: 9642: 9642: template 9642: struct __declval_protector 9642: { 9642: static const bool __stop = false; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: auto declval() noexcept -> decltype(__declval<_Tp>(0)) 9642: { 9642: static_assert(__declval_protector<_Tp>::__stop, 9642: "declval() must not be used!"); 9642: return __declval<_Tp>(0); 9642: } 9642: 9642: 9642: template 9642: struct result_of; 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct __invoke_memfun_ref { }; 9642: struct __invoke_memfun_deref { }; 9642: struct __invoke_memobj_ref { }; 9642: struct __invoke_memobj_deref { }; 9642: struct __invoke_other { }; 9642: 9642: 9642: template 9642: struct __result_of_success : __success_type<_Tp> 9642: { using __invoke_type = _Tag; }; 9642: 9642: 9642: struct __result_of_memfun_ref_impl 9642: { 9642: template 9642: static __result_of_success().*std::declval<_Fp>())(std::declval<_Args>()...) 9642: ), __invoke_memfun_ref> _S_test(int); 9642: 9642: template 9642: static __failure_type _S_test(...); 9642: }; 9642: 9642: template 9642: struct __result_of_memfun_ref 9642: : private __result_of_memfun_ref_impl 9642: { 9642: typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type; 9642: }; 9642: 9642: 9642: struct __result_of_memfun_deref_impl 9642: { 9642: template 9642: static __result_of_success()).*std::declval<_Fp>())(std::declval<_Args>()...) 9642: ), __invoke_memfun_deref> _S_test(int); 9642: 9642: template 9642: static __failure_type _S_test(...); 9642: }; 9642: 9642: template 9642: struct __result_of_memfun_deref 9642: : private __result_of_memfun_deref_impl 9642: { 9642: typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type; 9642: }; 9642: 9642: 9642: struct __result_of_memobj_ref_impl 9642: { 9642: template 9642: static __result_of_success().*std::declval<_Fp>() 9642: ), __invoke_memobj_ref> _S_test(int); 9642: 9642: template 9642: static __failure_type _S_test(...); 9642: }; 9642: 9642: template 9642: struct __result_of_memobj_ref 9642: : private __result_of_memobj_ref_impl 9642: { 9642: typedef decltype(_S_test<_MemPtr, _Arg>(0)) type; 9642: }; 9642: 9642: 9642: struct __result_of_memobj_deref_impl 9642: { 9642: template 9642: static __result_of_success()).*std::declval<_Fp>() 9642: ), __invoke_memobj_deref> _S_test(int); 9642: 9642: template 9642: static __failure_type _S_test(...); 9642: }; 9642: 9642: template 9642: struct __result_of_memobj_deref 9642: : private __result_of_memobj_deref_impl 9642: { 9642: typedef decltype(_S_test<_MemPtr, _Arg>(0)) type; 9642: }; 9642: 9642: template 9642: struct __result_of_memobj; 9642: 9642: template 9642: struct __result_of_memobj<_Res _Class::*, _Arg> 9642: { 9642: typedef __remove_cvref_t<_Arg> _Argval; 9642: typedef _Res _Class::* _MemPtr; 9642: typedef typename __conditional_t<__or_, 9642: is_base_of<_Class, _Argval>>::value, 9642: __result_of_memobj_ref<_MemPtr, _Arg>, 9642: __result_of_memobj_deref<_MemPtr, _Arg> 9642: >::type type; 9642: }; 9642: 9642: template 9642: struct __result_of_memfun; 9642: 9642: template 9642: struct __result_of_memfun<_Res _Class::*, _Arg, _Args...> 9642: { 9642: typedef typename remove_reference<_Arg>::type _Argval; 9642: typedef _Res _Class::* _MemPtr; 9642: typedef typename __conditional_t::value, 9642: __result_of_memfun_ref<_MemPtr, _Arg, _Args...>, 9642: __result_of_memfun_deref<_MemPtr, _Arg, _Args...> 9642: >::type type; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template> 9642: struct __inv_unwrap 9642: { 9642: using type = _Tp; 9642: }; 9642: 9642: template 9642: struct __inv_unwrap<_Tp, reference_wrapper<_Up>> 9642: { 9642: using type = _Up&; 9642: }; 9642: 9642: template 9642: struct __result_of_impl 9642: { 9642: typedef __failure_type type; 9642: }; 9642: 9642: template 9642: struct __result_of_impl 9642: : public __result_of_memobj<__decay_t<_MemPtr>, 9642: typename __inv_unwrap<_Arg>::type> 9642: { }; 9642: 9642: template 9642: struct __result_of_impl 9642: : public __result_of_memfun<__decay_t<_MemPtr>, 9642: typename __inv_unwrap<_Arg>::type, _Args...> 9642: { }; 9642: 9642: 9642: struct __result_of_other_impl 9642: { 9642: template 9642: static __result_of_success()(std::declval<_Args>()...) 9642: ), __invoke_other> _S_test(int); 9642: 9642: template 9642: static __failure_type _S_test(...); 9642: }; 9642: 9642: template 9642: struct __result_of_impl 9642: : private __result_of_other_impl 9642: { 9642: typedef decltype(_S_test<_Functor, _ArgTypes...>(0)) type; 9642: }; 9642: 9642: 9642: template 9642: struct __invoke_result 9642: : public __result_of_impl< 9642: is_member_object_pointer< 9642: typename remove_reference<_Functor>::type 9642: >::value, 9642: is_member_function_pointer< 9642: typename remove_reference<_Functor>::type 9642: >::value, 9642: _Functor, _ArgTypes... 9642: >::type 9642: { }; 9642: 9642: 9642: template 9642: struct result_of<_Functor(_ArgTypes...)> 9642: : public __invoke_result<_Functor, _ArgTypes...> 9642: { } __attribute__ ((__deprecated__ ("use '" "std::invoke_result" "' instead"))); 9642: 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: 9642: template::__type)> 9642: using aligned_storage_t = typename aligned_storage<_Len, _Align>::type; 9642: 9642: template 9642: using aligned_union_t = typename aligned_union<_Len, _Types...>::type; 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: template 9642: using decay_t = typename decay<_Tp>::type; 9642: 9642: 9642: template 9642: using enable_if_t = typename enable_if<_Cond, _Tp>::type; 9642: 9642: 9642: template 9642: using conditional_t = typename conditional<_Cond, _Iftrue, _Iffalse>::type; 9642: 9642: 9642: template 9642: using common_type_t = typename common_type<_Tp...>::type; 9642: 9642: 9642: template 9642: using underlying_type_t = typename underlying_type<_Tp>::type; 9642: 9642: 9642: template 9642: using result_of_t = typename result_of<_Tp>::type; 9642: 9642: 9642: 9642: 9642: 9642: template using void_t = void; 9642: # 2659 "/usr/include/c++/13/type_traits" 3 9642: template class _Op, typename... _Args> 9642: struct __detector 9642: { 9642: using type = _Default; 9642: using __is_detected = false_type; 9642: }; 9642: 9642: 9642: template class _Op, 9642: typename... _Args> 9642: struct __detector<_Default, __void_t<_Op<_Args...>>, _Op, _Args...> 9642: { 9642: using type = _Op<_Args...>; 9642: using __is_detected = true_type; 9642: }; 9642: 9642: template class _Op, 9642: typename... _Args> 9642: using __detected_or = __detector<_Default, void, _Op, _Args...>; 9642: 9642: 9642: 9642: template class _Op, 9642: typename... _Args> 9642: using __detected_or_t 9642: = typename __detected_or<_Default, _Op, _Args...>::type; 9642: # 2701 "/usr/include/c++/13/type_traits" 3 9642: template 9642: struct __is_swappable; 9642: 9642: template 9642: struct __is_nothrow_swappable; 9642: 9642: template 9642: struct __is_tuple_like_impl : false_type 9642: { }; 9642: 9642: 9642: template 9642: struct __is_tuple_like 9642: : public __is_tuple_like_impl<__remove_cvref_t<_Tp>>::type 9642: { }; 9642: 9642: 9642: template 9642: 9642: inline 9642: _Require<__not_<__is_tuple_like<_Tp>>, 9642: is_move_constructible<_Tp>, 9642: is_move_assignable<_Tp>> 9642: swap(_Tp&, _Tp&) 9642: noexcept(__and_, 9642: is_nothrow_move_assignable<_Tp>>::value); 9642: 9642: template 9642: 9642: inline 9642: __enable_if_t<__is_swappable<_Tp>::value> 9642: swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) 9642: noexcept(__is_nothrow_swappable<_Tp>::value); 9642: 9642: 9642: namespace __swappable_details { 9642: using std::swap; 9642: 9642: struct __do_is_swappable_impl 9642: { 9642: template(), std::declval<_Tp&>()))> 9642: static true_type __test(int); 9642: 9642: template 9642: static false_type __test(...); 9642: }; 9642: 9642: struct __do_is_nothrow_swappable_impl 9642: { 9642: template 9642: static __bool_constant< 9642: noexcept(swap(std::declval<_Tp&>(), std::declval<_Tp&>())) 9642: > __test(int); 9642: 9642: template 9642: static false_type __test(...); 9642: }; 9642: 9642: } 9642: 9642: template 9642: struct __is_swappable_impl 9642: : public __swappable_details::__do_is_swappable_impl 9642: { 9642: typedef decltype(__test<_Tp>(0)) type; 9642: }; 9642: 9642: template 9642: struct __is_nothrow_swappable_impl 9642: : public __swappable_details::__do_is_nothrow_swappable_impl 9642: { 9642: typedef decltype(__test<_Tp>(0)) type; 9642: }; 9642: 9642: template 9642: struct __is_swappable 9642: : public __is_swappable_impl<_Tp>::type 9642: { }; 9642: 9642: template 9642: struct __is_nothrow_swappable 9642: : public __is_nothrow_swappable_impl<_Tp>::type 9642: { }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct is_swappable 9642: : public __is_swappable_impl<_Tp>::type 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_nothrow_swappable 9642: : public __is_nothrow_swappable_impl<_Tp>::type 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: 9642: template 9642: inline constexpr bool is_swappable_v = 9642: is_swappable<_Tp>::value; 9642: 9642: 9642: template 9642: inline constexpr bool is_nothrow_swappable_v = 9642: is_nothrow_swappable<_Tp>::value; 9642: 9642: 9642: 9642: namespace __swappable_with_details { 9642: using std::swap; 9642: 9642: struct __do_is_swappable_with_impl 9642: { 9642: template(), std::declval<_Up>())), 9642: typename 9642: = decltype(swap(std::declval<_Up>(), std::declval<_Tp>()))> 9642: static true_type __test(int); 9642: 9642: template 9642: static false_type __test(...); 9642: }; 9642: 9642: struct __do_is_nothrow_swappable_with_impl 9642: { 9642: template 9642: static __bool_constant< 9642: noexcept(swap(std::declval<_Tp>(), std::declval<_Up>())) 9642: && 9642: noexcept(swap(std::declval<_Up>(), std::declval<_Tp>())) 9642: > __test(int); 9642: 9642: template 9642: static false_type __test(...); 9642: }; 9642: 9642: } 9642: 9642: template 9642: struct __is_swappable_with_impl 9642: : public __swappable_with_details::__do_is_swappable_with_impl 9642: { 9642: typedef decltype(__test<_Tp, _Up>(0)) type; 9642: }; 9642: 9642: 9642: template 9642: struct __is_swappable_with_impl<_Tp&, _Tp&> 9642: : public __swappable_details::__do_is_swappable_impl 9642: { 9642: typedef decltype(__test<_Tp&>(0)) type; 9642: }; 9642: 9642: template 9642: struct __is_nothrow_swappable_with_impl 9642: : public __swappable_with_details::__do_is_nothrow_swappable_with_impl 9642: { 9642: typedef decltype(__test<_Tp, _Up>(0)) type; 9642: }; 9642: 9642: 9642: template 9642: struct __is_nothrow_swappable_with_impl<_Tp&, _Tp&> 9642: : public __swappable_details::__do_is_nothrow_swappable_impl 9642: { 9642: typedef decltype(__test<_Tp&>(0)) type; 9642: }; 9642: 9642: 9642: 9642: template 9642: struct is_swappable_with 9642: : public __is_swappable_with_impl<_Tp, _Up>::type 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "first template argument must be a complete class or an unbounded array"); 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Up>{}), 9642: "second template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_nothrow_swappable_with 9642: : public __is_nothrow_swappable_with_impl<_Tp, _Up>::type 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "first template argument must be a complete class or an unbounded array"); 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Up>{}), 9642: "second template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: 9642: template 9642: inline constexpr bool is_swappable_with_v = 9642: is_swappable_with<_Tp, _Up>::value; 9642: 9642: 9642: template 9642: inline constexpr bool is_nothrow_swappable_with_v = 9642: is_nothrow_swappable_with<_Tp, _Up>::value; 9642: # 2924 "/usr/include/c++/13/type_traits" 3 9642: template::value, typename = void> 9642: struct __is_invocable_impl 9642: : false_type 9642: { 9642: using __nothrow_conv = false_type; 9642: }; 9642: 9642: 9642: template 9642: struct __is_invocable_impl<_Result, _Ret, 9642: true, 9642: __void_t> 9642: : true_type 9642: { 9642: using __nothrow_conv = true_type; 9642: }; 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wctor-dtor-privacy" 9642: 9642: template 9642: struct __is_invocable_impl<_Result, _Ret, 9642: false, 9642: __void_t> 9642: { 9642: private: 9642: 9642: using _Res_t = typename _Result::type; 9642: 9642: 9642: 9642: static _Res_t _S_get() noexcept; 9642: 9642: 9642: template 9642: static void _S_conv(__type_identity_t<_Tp>) noexcept; 9642: 9642: 9642: template(_S_get())), 9642: typename = decltype(_S_conv<_Tp>(_S_get())), 9642: 9642: bool _Dangle = __reference_converts_from_temporary(_Tp, _Res_t) 9642: 9642: 9642: 9642: > 9642: static __bool_constant<_Nothrow && !_Dangle> 9642: _S_test(int); 9642: 9642: template 9642: static false_type 9642: _S_test(...); 9642: 9642: public: 9642: 9642: using type = decltype(_S_test<_Ret, true>(1)); 9642: 9642: 9642: using __nothrow_conv = decltype(_S_test<_Ret>(1)); 9642: }; 9642: #pragma GCC diagnostic pop 9642: 9642: template 9642: struct __is_invocable 9642: : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type 9642: { }; 9642: 9642: template 9642: constexpr bool __call_is_nt(__invoke_memfun_ref) 9642: { 9642: using _Up = typename __inv_unwrap<_Tp>::type; 9642: return noexcept((std::declval<_Up>().*std::declval<_Fn>())( 9642: std::declval<_Args>()...)); 9642: } 9642: 9642: template 9642: constexpr bool __call_is_nt(__invoke_memfun_deref) 9642: { 9642: return noexcept(((*std::declval<_Tp>()).*std::declval<_Fn>())( 9642: std::declval<_Args>()...)); 9642: } 9642: 9642: template 9642: constexpr bool __call_is_nt(__invoke_memobj_ref) 9642: { 9642: using _Up = typename __inv_unwrap<_Tp>::type; 9642: return noexcept(std::declval<_Up>().*std::declval<_Fn>()); 9642: } 9642: 9642: template 9642: constexpr bool __call_is_nt(__invoke_memobj_deref) 9642: { 9642: return noexcept((*std::declval<_Tp>()).*std::declval<_Fn>()); 9642: } 9642: 9642: template 9642: constexpr bool __call_is_nt(__invoke_other) 9642: { 9642: return noexcept(std::declval<_Fn>()(std::declval<_Args>()...)); 9642: } 9642: 9642: template 9642: struct __call_is_nothrow 9642: : __bool_constant< 9642: std::__call_is_nt<_Fn, _Args...>(typename _Result::__invoke_type{}) 9642: > 9642: { }; 9642: 9642: template 9642: using __call_is_nothrow_ 9642: = __call_is_nothrow<__invoke_result<_Fn, _Args...>, _Fn, _Args...>; 9642: 9642: 9642: template 9642: struct __is_nothrow_invocable 9642: : __and_<__is_invocable<_Fn, _Args...>, 9642: __call_is_nothrow_<_Fn, _Args...>>::type 9642: { }; 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wctor-dtor-privacy" 9642: struct __nonesuchbase {}; 9642: struct __nonesuch : private __nonesuchbase { 9642: ~__nonesuch() = delete; 9642: __nonesuch(__nonesuch const&) = delete; 9642: void operator=(__nonesuch const&) = delete; 9642: }; 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct invoke_result 9642: : public __invoke_result<_Functor, _ArgTypes...> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Functor>{}), 9642: "_Functor must be a complete class or an unbounded array"); 9642: static_assert((std::__is_complete_or_unbounded( 9642: __type_identity<_ArgTypes>{}) && ...), 9642: "each argument type must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: using invoke_result_t = typename invoke_result<_Fn, _Args...>::type; 9642: 9642: 9642: template 9642: struct is_invocable 9642: : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}), 9642: "_Fn must be a complete class or an unbounded array"); 9642: static_assert((std::__is_complete_or_unbounded( 9642: __type_identity<_ArgTypes>{}) && ...), 9642: "each argument type must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_invocable_r 9642: : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, _Ret>::type 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}), 9642: "_Fn must be a complete class or an unbounded array"); 9642: static_assert((std::__is_complete_or_unbounded( 9642: __type_identity<_ArgTypes>{}) && ...), 9642: "each argument type must be a complete class or an unbounded array"); 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Ret>{}), 9642: "_Ret must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: struct is_nothrow_invocable 9642: : __and_<__is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>, 9642: __call_is_nothrow_<_Fn, _ArgTypes...>>::type 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}), 9642: "_Fn must be a complete class or an unbounded array"); 9642: static_assert((std::__is_complete_or_unbounded( 9642: __type_identity<_ArgTypes>{}) && ...), 9642: "each argument type must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: using __is_nt_invocable_impl 9642: = typename __is_invocable_impl<_Result, _Ret>::__nothrow_conv; 9642: 9642: 9642: 9642: template 9642: struct is_nothrow_invocable_r 9642: : __and_<__is_nt_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, _Ret>, 9642: __call_is_nothrow_<_Fn, _ArgTypes...>>::type 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}), 9642: "_Fn must be a complete class or an unbounded array"); 9642: static_assert((std::__is_complete_or_unbounded( 9642: __type_identity<_ArgTypes>{}) && ...), 9642: "each argument type must be a complete class or an unbounded array"); 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Ret>{}), 9642: "_Ret must be a complete class or an unbounded array"); 9642: }; 9642: # 3155 "/usr/include/c++/13/type_traits" 3 9642: template 9642: inline constexpr bool is_void_v = is_void<_Tp>::value; 9642: template 9642: inline constexpr bool is_null_pointer_v = is_null_pointer<_Tp>::value; 9642: template 9642: inline constexpr bool is_integral_v = is_integral<_Tp>::value; 9642: template 9642: inline constexpr bool is_floating_point_v = is_floating_point<_Tp>::value; 9642: 9642: template 9642: inline constexpr bool is_array_v = false; 9642: template 9642: inline constexpr bool is_array_v<_Tp[]> = true; 9642: template 9642: inline constexpr bool is_array_v<_Tp[_Num]> = true; 9642: 9642: template 9642: inline constexpr bool is_pointer_v = is_pointer<_Tp>::value; 9642: template 9642: inline constexpr bool is_lvalue_reference_v = false; 9642: template 9642: inline constexpr bool is_lvalue_reference_v<_Tp&> = true; 9642: template 9642: inline constexpr bool is_rvalue_reference_v = false; 9642: template 9642: inline constexpr bool is_rvalue_reference_v<_Tp&&> = true; 9642: template 9642: inline constexpr bool is_member_object_pointer_v = 9642: is_member_object_pointer<_Tp>::value; 9642: template 9642: inline constexpr bool is_member_function_pointer_v = 9642: is_member_function_pointer<_Tp>::value; 9642: template 9642: inline constexpr bool is_enum_v = __is_enum(_Tp); 9642: template 9642: inline constexpr bool is_union_v = __is_union(_Tp); 9642: template 9642: inline constexpr bool is_class_v = __is_class(_Tp); 9642: template 9642: inline constexpr bool is_function_v = is_function<_Tp>::value; 9642: template 9642: inline constexpr bool is_reference_v = false; 9642: template 9642: inline constexpr bool is_reference_v<_Tp&> = true; 9642: template 9642: inline constexpr bool is_reference_v<_Tp&&> = true; 9642: template 9642: inline constexpr bool is_arithmetic_v = is_arithmetic<_Tp>::value; 9642: template 9642: inline constexpr bool is_fundamental_v = is_fundamental<_Tp>::value; 9642: template 9642: inline constexpr bool is_object_v = is_object<_Tp>::value; 9642: template 9642: inline constexpr bool is_scalar_v = is_scalar<_Tp>::value; 9642: template 9642: inline constexpr bool is_compound_v = is_compound<_Tp>::value; 9642: template 9642: inline constexpr bool is_member_pointer_v = is_member_pointer<_Tp>::value; 9642: template 9642: inline constexpr bool is_const_v = false; 9642: template 9642: inline constexpr bool is_const_v = true; 9642: template 9642: inline constexpr bool is_volatile_v = false; 9642: template 9642: inline constexpr bool is_volatile_v = true; 9642: 9642: template 9642: inline constexpr bool is_trivial_v = __is_trivial(_Tp); 9642: template 9642: inline constexpr bool is_trivially_copyable_v = __is_trivially_copyable(_Tp); 9642: template 9642: inline constexpr bool is_standard_layout_v = __is_standard_layout(_Tp); 9642: template 9642: 9642: inline constexpr bool is_pod_v = __is_pod(_Tp); 9642: template 9642: [[__deprecated__]] 9642: inline constexpr bool is_literal_type_v = __is_literal_type(_Tp); 9642: template 9642: inline constexpr bool is_empty_v = __is_empty(_Tp); 9642: template 9642: inline constexpr bool is_polymorphic_v = __is_polymorphic(_Tp); 9642: template 9642: inline constexpr bool is_abstract_v = __is_abstract(_Tp); 9642: template 9642: inline constexpr bool is_final_v = __is_final(_Tp); 9642: 9642: template 9642: inline constexpr bool is_signed_v = is_signed<_Tp>::value; 9642: template 9642: inline constexpr bool is_unsigned_v = is_unsigned<_Tp>::value; 9642: 9642: template 9642: inline constexpr bool is_constructible_v = __is_constructible(_Tp, _Args...); 9642: template 9642: inline constexpr bool is_default_constructible_v = __is_constructible(_Tp); 9642: template 9642: inline constexpr bool is_copy_constructible_v 9642: = __is_constructible(_Tp, __add_lval_ref_t); 9642: template 9642: inline constexpr bool is_move_constructible_v 9642: = __is_constructible(_Tp, __add_rval_ref_t<_Tp>); 9642: 9642: template 9642: inline constexpr bool is_assignable_v = __is_assignable(_Tp, _Up); 9642: template 9642: inline constexpr bool is_copy_assignable_v 9642: = __is_assignable(__add_lval_ref_t<_Tp>, __add_lval_ref_t); 9642: template 9642: inline constexpr bool is_move_assignable_v 9642: = __is_assignable(__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>); 9642: 9642: template 9642: inline constexpr bool is_destructible_v = is_destructible<_Tp>::value; 9642: 9642: template 9642: inline constexpr bool is_trivially_constructible_v 9642: = __is_trivially_constructible(_Tp, _Args...); 9642: template 9642: inline constexpr bool is_trivially_default_constructible_v 9642: = __is_trivially_constructible(_Tp); 9642: template 9642: inline constexpr bool is_trivially_copy_constructible_v 9642: = __is_trivially_constructible(_Tp, __add_lval_ref_t); 9642: template 9642: inline constexpr bool is_trivially_move_constructible_v 9642: = __is_trivially_constructible(_Tp, __add_rval_ref_t<_Tp>); 9642: 9642: template 9642: inline constexpr bool is_trivially_assignable_v 9642: = __is_trivially_assignable(_Tp, _Up); 9642: template 9642: inline constexpr bool is_trivially_copy_assignable_v 9642: = __is_trivially_assignable(__add_lval_ref_t<_Tp>, 9642: __add_lval_ref_t); 9642: template 9642: inline constexpr bool is_trivially_move_assignable_v 9642: = __is_trivially_assignable(__add_lval_ref_t<_Tp>, 9642: __add_rval_ref_t<_Tp>); 9642: template 9642: inline constexpr bool is_trivially_destructible_v = 9642: is_trivially_destructible<_Tp>::value; 9642: template 9642: inline constexpr bool is_nothrow_constructible_v 9642: = __is_nothrow_constructible(_Tp, _Args...); 9642: template 9642: inline constexpr bool is_nothrow_default_constructible_v 9642: = __is_nothrow_constructible(_Tp); 9642: template 9642: inline constexpr bool is_nothrow_copy_constructible_v 9642: = __is_nothrow_constructible(_Tp, __add_lval_ref_t); 9642: template 9642: inline constexpr bool is_nothrow_move_constructible_v 9642: = __is_nothrow_constructible(_Tp, __add_rval_ref_t<_Tp>); 9642: 9642: template 9642: inline constexpr bool is_nothrow_assignable_v 9642: = __is_nothrow_assignable(_Tp, _Up); 9642: template 9642: inline constexpr bool is_nothrow_copy_assignable_v 9642: = __is_nothrow_assignable(__add_lval_ref_t<_Tp>, 9642: __add_lval_ref_t); 9642: template 9642: inline constexpr bool is_nothrow_move_assignable_v 9642: = __is_nothrow_assignable(__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>); 9642: 9642: template 9642: inline constexpr bool is_nothrow_destructible_v = 9642: is_nothrow_destructible<_Tp>::value; 9642: 9642: template 9642: inline constexpr bool has_virtual_destructor_v 9642: = __has_virtual_destructor(_Tp); 9642: 9642: template 9642: inline constexpr size_t alignment_of_v = alignment_of<_Tp>::value; 9642: 9642: template 9642: inline constexpr size_t rank_v = 0; 9642: template 9642: inline constexpr size_t rank_v<_Tp[_Size]> = 1 + rank_v<_Tp>; 9642: template 9642: inline constexpr size_t rank_v<_Tp[]> = 1 + rank_v<_Tp>; 9642: 9642: template 9642: inline constexpr size_t extent_v = 0; 9642: template 9642: inline constexpr size_t extent_v<_Tp[_Size], 0> = _Size; 9642: template 9642: inline constexpr size_t extent_v<_Tp[_Size], _Idx> = extent_v<_Tp, _Idx - 1>; 9642: template 9642: inline constexpr size_t extent_v<_Tp[], 0> = 0; 9642: template 9642: inline constexpr size_t extent_v<_Tp[], _Idx> = extent_v<_Tp, _Idx - 1>; 9642: 9642: 9642: template 9642: inline constexpr bool is_same_v = __is_same(_Tp, _Up); 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline constexpr bool is_base_of_v = __is_base_of(_Base, _Derived); 9642: 9642: template 9642: inline constexpr bool is_convertible_v = __is_convertible(_From, _To); 9642: 9642: 9642: 9642: 9642: template 9642: inline constexpr bool is_invocable_v = is_invocable<_Fn, _Args...>::value; 9642: template 9642: inline constexpr bool is_nothrow_invocable_v 9642: = is_nothrow_invocable<_Fn, _Args...>::value; 9642: template 9642: inline constexpr bool is_invocable_r_v 9642: = is_invocable_r<_Ret, _Fn, _Args...>::value; 9642: template 9642: inline constexpr bool is_nothrow_invocable_r_v 9642: = is_nothrow_invocable_r<_Ret, _Fn, _Args...>::value; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct has_unique_object_representations 9642: : bool_constant<__has_unique_object_representations( 9642: remove_cv_t> 9642: )> 9642: { 9642: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 9642: "template argument must be a complete class or an unbounded array"); 9642: }; 9642: 9642: 9642: template 9642: inline constexpr bool has_unique_object_representations_v 9642: = has_unique_object_representations<_Tp>::value; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct is_aggregate 9642: : bool_constant<__is_aggregate(remove_cv_t<_Tp>)> 9642: { }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline constexpr bool is_aggregate_v = __is_aggregate(remove_cv_t<_Tp>); 9642: # 3833 "/usr/include/c++/13/type_traits" 3 9642: 9642: } 9642: # 38 "/usr/include/c++/13/bits/move.h" 2 3 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline constexpr _Tp* 9642: __addressof(_Tp& __r) noexcept 9642: { return __builtin_addressof(__r); } 9642: # 67 "/usr/include/c++/13/bits/move.h" 3 9642: template 9642: [[__nodiscard__]] 9642: constexpr _Tp&& 9642: forward(typename std::remove_reference<_Tp>::type& __t) noexcept 9642: { return static_cast<_Tp&&>(__t); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: constexpr _Tp&& 9642: forward(typename std::remove_reference<_Tp>::type&& __t) noexcept 9642: { 9642: static_assert(!std::is_lvalue_reference<_Tp>::value, 9642: "std::forward must not be used to convert an rvalue to an lvalue"); 9642: return static_cast<_Tp&&>(__t); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: constexpr typename std::remove_reference<_Tp>::type&& 9642: move(_Tp&& __t) noexcept 9642: { return static_cast::type&&>(__t); } 9642: 9642: 9642: template 9642: struct __move_if_noexcept_cond 9642: : public __and_<__not_>, 9642: is_copy_constructible<_Tp>>::type { }; 9642: # 114 "/usr/include/c++/13/bits/move.h" 3 9642: template 9642: [[__nodiscard__]] 9642: constexpr 9642: __conditional_t<__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&> 9642: move_if_noexcept(_Tp& __x) noexcept 9642: { return std::move(__x); } 9642: # 135 "/usr/include/c++/13/bits/move.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr _Tp* 9642: addressof(_Tp& __r) noexcept 9642: { return std::__addressof(__r); } 9642: 9642: 9642: 9642: template 9642: const _Tp* addressof(const _Tp&&) = delete; 9642: 9642: 9642: template 9642: 9642: inline _Tp 9642: __exchange(_Tp& __obj, _Up&& __new_val) 9642: { 9642: _Tp __old_val = std::move(__obj); 9642: __obj = std::forward<_Up>(__new_val); 9642: return __old_val; 9642: } 9642: # 179 "/usr/include/c++/13/bits/move.h" 3 9642: template 9642: 9642: inline 9642: 9642: typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>, 9642: is_move_constructible<_Tp>, 9642: is_move_assignable<_Tp>>::value>::type 9642: 9642: 9642: 9642: swap(_Tp& __a, _Tp& __b) 9642: noexcept(__and_, is_nothrow_move_assignable<_Tp>>::value) 9642: 9642: { 9642: 9642: 9642: 9642: 9642: _Tp __tmp = std::move(__a); 9642: __a = std::move(__b); 9642: __b = std::move(__tmp); 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: 9642: inline 9642: 9642: typename enable_if<__is_swappable<_Tp>::value>::type 9642: 9642: 9642: 9642: swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) 9642: noexcept(__is_nothrow_swappable<_Tp>::value) 9642: { 9642: for (size_t __n = 0; __n < _Nm; ++__n) 9642: swap(__a[__n], __b[__n]); 9642: } 9642: 9642: 9642: 9642: } 9642: # 40 "/usr/include/c++/13/bits/atomic_base.h" 2 3 9642: # 49 "/usr/include/c++/13/bits/atomic_base.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 79 "/usr/include/c++/13/bits/atomic_base.h" 3 9642: typedef enum memory_order 9642: { 9642: memory_order_relaxed, 9642: memory_order_consume, 9642: memory_order_acquire, 9642: memory_order_release, 9642: memory_order_acq_rel, 9642: memory_order_seq_cst 9642: } memory_order; 9642: 9642: 9642: 9642: enum __memory_order_modifier 9642: { 9642: __memory_order_mask = 0x0ffff, 9642: __memory_order_modifier_mask = 0xffff0000, 9642: __memory_order_hle_acquire = 0x10000, 9642: __memory_order_hle_release = 0x20000 9642: }; 9642: 9642: 9642: constexpr memory_order 9642: operator|(memory_order __m, __memory_order_modifier __mod) 9642: { 9642: return memory_order(int(__m) | int(__mod)); 9642: } 9642: 9642: constexpr memory_order 9642: operator&(memory_order __m, __memory_order_modifier __mod) 9642: { 9642: return memory_order(int(__m) & int(__mod)); 9642: } 9642: 9642: 9642: 9642: 9642: constexpr memory_order 9642: __cmpexch_failure_order2(memory_order __m) noexcept 9642: { 9642: return __m == memory_order_acq_rel ? memory_order_acquire 9642: : __m == memory_order_release ? memory_order_relaxed : __m; 9642: } 9642: 9642: constexpr memory_order 9642: __cmpexch_failure_order(memory_order __m) noexcept 9642: { 9642: return memory_order(__cmpexch_failure_order2(__m & __memory_order_mask) 9642: | __memory_order_modifier(__m & __memory_order_modifier_mask)); 9642: } 9642: 9642: constexpr bool 9642: __is_valid_cmpexch_failure_order(memory_order __m) noexcept 9642: { 9642: return (__m & __memory_order_mask) != memory_order_release 9642: && (__m & __memory_order_mask) != memory_order_acq_rel; 9642: } 9642: 9642: 9642: template 9642: struct __atomic_base; 9642: 9642: 9642: 9642: inline __attribute__((__always_inline__)) void 9642: atomic_thread_fence(memory_order __m) noexcept 9642: { __atomic_thread_fence(int(__m)); } 9642: 9642: inline __attribute__((__always_inline__)) void 9642: atomic_signal_fence(memory_order __m) noexcept 9642: { __atomic_signal_fence(int(__m)); } 9642: 9642: 9642: template 9642: inline _Tp 9642: kill_dependency(_Tp __y) noexcept 9642: { 9642: _Tp __ret(__y); 9642: return __ret; 9642: } 9642: # 173 "/usr/include/c++/13/bits/atomic_base.h" 3 9642: template 9642: struct atomic; 9642: 9642: template 9642: struct atomic<_Tp*>; 9642: 9642: 9642: 9642: typedef bool __atomic_flag_data_type; 9642: # 198 "/usr/include/c++/13/bits/atomic_base.h" 3 9642: extern "C" { 9642: 9642: struct __atomic_flag_base 9642: { 9642: __atomic_flag_data_type _M_i ; 9642: }; 9642: 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct atomic_flag : public __atomic_flag_base 9642: { 9642: atomic_flag() noexcept = default; 9642: ~atomic_flag() noexcept = default; 9642: atomic_flag(const atomic_flag&) = delete; 9642: atomic_flag& operator=(const atomic_flag&) = delete; 9642: atomic_flag& operator=(const atomic_flag&) volatile = delete; 9642: 9642: 9642: constexpr atomic_flag(bool __i) noexcept 9642: : __atomic_flag_base{ _S_init(__i) } 9642: { } 9642: 9642: inline __attribute__((__always_inline__)) bool 9642: test_and_set(memory_order __m = memory_order_seq_cst) noexcept 9642: { 9642: return __atomic_test_and_set (&_M_i, int(__m)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) bool 9642: test_and_set(memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { 9642: return __atomic_test_and_set (&_M_i, int(__m)); 9642: } 9642: # 284 "/usr/include/c++/13/bits/atomic_base.h" 3 9642: inline __attribute__((__always_inline__)) void 9642: clear(memory_order __m = memory_order_seq_cst) noexcept 9642: { 9642: memory_order __b __attribute__ ((__unused__)) 9642: = __m & __memory_order_mask; 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_consume)) __builtin_unreachable(); } while (false); 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acquire)) __builtin_unreachable(); } while (false); 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 9642: 9642: __atomic_clear (&_M_i, int(__m)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) void 9642: clear(memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { 9642: memory_order __b __attribute__ ((__unused__)) 9642: = __m & __memory_order_mask; 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_consume)) __builtin_unreachable(); } while (false); 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acquire)) __builtin_unreachable(); } while (false); 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 9642: 9642: __atomic_clear (&_M_i, int(__m)); 9642: } 9642: 9642: private: 9642: static constexpr __atomic_flag_data_type 9642: _S_init(bool __i) 9642: { return __i ? 1 : 0; } 9642: }; 9642: # 340 "/usr/include/c++/13/bits/atomic_base.h" 3 9642: template 9642: struct __atomic_base 9642: { 9642: using value_type = _ITp; 9642: using difference_type = value_type; 9642: 9642: private: 9642: typedef _ITp __int_type; 9642: 9642: static constexpr int _S_alignment = 9642: sizeof(_ITp) > alignof(_ITp) ? sizeof(_ITp) : alignof(_ITp); 9642: 9642: alignas(_S_alignment) __int_type _M_i ; 9642: 9642: public: 9642: __atomic_base() noexcept = default; 9642: ~__atomic_base() noexcept = default; 9642: __atomic_base(const __atomic_base&) = delete; 9642: __atomic_base& operator=(const __atomic_base&) = delete; 9642: __atomic_base& operator=(const __atomic_base&) volatile = delete; 9642: 9642: 9642: constexpr __atomic_base(__int_type __i) noexcept : _M_i (__i) { } 9642: 9642: operator __int_type() const noexcept 9642: { return load(); } 9642: 9642: operator __int_type() const volatile noexcept 9642: { return load(); } 9642: 9642: __int_type 9642: operator=(__int_type __i) noexcept 9642: { 9642: store(__i); 9642: return __i; 9642: } 9642: 9642: __int_type 9642: operator=(__int_type __i) volatile noexcept 9642: { 9642: store(__i); 9642: return __i; 9642: } 9642: 9642: __int_type 9642: operator++(int) noexcept 9642: { return fetch_add(1); } 9642: 9642: __int_type 9642: operator++(int) volatile noexcept 9642: { return fetch_add(1); } 9642: 9642: __int_type 9642: operator--(int) noexcept 9642: { return fetch_sub(1); } 9642: 9642: __int_type 9642: operator--(int) volatile noexcept 9642: { return fetch_sub(1); } 9642: 9642: __int_type 9642: operator++() noexcept 9642: { return __atomic_add_fetch(&_M_i, 1, int(memory_order_seq_cst)); } 9642: 9642: __int_type 9642: operator++() volatile noexcept 9642: { return __atomic_add_fetch(&_M_i, 1, int(memory_order_seq_cst)); } 9642: 9642: __int_type 9642: operator--() noexcept 9642: { return __atomic_sub_fetch(&_M_i, 1, int(memory_order_seq_cst)); } 9642: 9642: __int_type 9642: operator--() volatile noexcept 9642: { return __atomic_sub_fetch(&_M_i, 1, int(memory_order_seq_cst)); } 9642: 9642: __int_type 9642: operator+=(__int_type __i) noexcept 9642: { return __atomic_add_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 9642: 9642: __int_type 9642: operator+=(__int_type __i) volatile noexcept 9642: { return __atomic_add_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 9642: 9642: __int_type 9642: operator-=(__int_type __i) noexcept 9642: { return __atomic_sub_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 9642: 9642: __int_type 9642: operator-=(__int_type __i) volatile noexcept 9642: { return __atomic_sub_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 9642: 9642: __int_type 9642: operator&=(__int_type __i) noexcept 9642: { return __atomic_and_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 9642: 9642: __int_type 9642: operator&=(__int_type __i) volatile noexcept 9642: { return __atomic_and_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 9642: 9642: __int_type 9642: operator|=(__int_type __i) noexcept 9642: { return __atomic_or_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 9642: 9642: __int_type 9642: operator|=(__int_type __i) volatile noexcept 9642: { return __atomic_or_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 9642: 9642: __int_type 9642: operator^=(__int_type __i) noexcept 9642: { return __atomic_xor_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 9642: 9642: __int_type 9642: operator^=(__int_type __i) volatile noexcept 9642: { return __atomic_xor_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 9642: 9642: bool 9642: is_lock_free() const noexcept 9642: { 9642: 9642: return __atomic_is_lock_free(sizeof(_M_i), 9642: reinterpret_cast(-_S_alignment)); 9642: } 9642: 9642: bool 9642: is_lock_free() const volatile noexcept 9642: { 9642: 9642: return __atomic_is_lock_free(sizeof(_M_i), 9642: reinterpret_cast(-_S_alignment)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) void 9642: store(__int_type __i, memory_order __m = memory_order_seq_cst) noexcept 9642: { 9642: memory_order __b __attribute__ ((__unused__)) 9642: = __m & __memory_order_mask; 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acquire)) __builtin_unreachable(); } while (false); 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_consume)) __builtin_unreachable(); } while (false); 9642: 9642: __atomic_store_n(&_M_i, __i, int(__m)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) void 9642: store(__int_type __i, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { 9642: memory_order __b __attribute__ ((__unused__)) 9642: = __m & __memory_order_mask; 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acquire)) __builtin_unreachable(); } while (false); 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_consume)) __builtin_unreachable(); } while (false); 9642: 9642: __atomic_store_n(&_M_i, __i, int(__m)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) __int_type 9642: load(memory_order __m = memory_order_seq_cst) const noexcept 9642: { 9642: memory_order __b __attribute__ ((__unused__)) 9642: = __m & __memory_order_mask; 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_release)) __builtin_unreachable(); } while (false); 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 9642: 9642: return __atomic_load_n(&_M_i, int(__m)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) __int_type 9642: load(memory_order __m = memory_order_seq_cst) const volatile noexcept 9642: { 9642: memory_order __b __attribute__ ((__unused__)) 9642: = __m & __memory_order_mask; 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_release)) __builtin_unreachable(); } while (false); 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 9642: 9642: return __atomic_load_n(&_M_i, int(__m)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) __int_type 9642: exchange(__int_type __i, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { 9642: return __atomic_exchange_n(&_M_i, __i, int(__m)); 9642: } 9642: 9642: 9642: inline __attribute__((__always_inline__)) __int_type 9642: exchange(__int_type __i, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { 9642: return __atomic_exchange_n(&_M_i, __i, int(__m)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) bool 9642: compare_exchange_weak(__int_type& __i1, __int_type __i2, 9642: memory_order __m1, memory_order __m2) noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false); 9642: 9642: return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, 9642: int(__m1), int(__m2)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) bool 9642: compare_exchange_weak(__int_type& __i1, __int_type __i2, 9642: memory_order __m1, 9642: memory_order __m2) volatile noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false); 9642: 9642: return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, 9642: int(__m1), int(__m2)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) bool 9642: compare_exchange_weak(__int_type& __i1, __int_type __i2, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { 9642: return compare_exchange_weak(__i1, __i2, __m, 9642: __cmpexch_failure_order(__m)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) bool 9642: compare_exchange_weak(__int_type& __i1, __int_type __i2, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { 9642: return compare_exchange_weak(__i1, __i2, __m, 9642: __cmpexch_failure_order(__m)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) bool 9642: compare_exchange_strong(__int_type& __i1, __int_type __i2, 9642: memory_order __m1, memory_order __m2) noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false); 9642: 9642: return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, 9642: int(__m1), int(__m2)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) bool 9642: compare_exchange_strong(__int_type& __i1, __int_type __i2, 9642: memory_order __m1, 9642: memory_order __m2) volatile noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false); 9642: 9642: return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, 9642: int(__m1), int(__m2)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) bool 9642: compare_exchange_strong(__int_type& __i1, __int_type __i2, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { 9642: return compare_exchange_strong(__i1, __i2, __m, 9642: __cmpexch_failure_order(__m)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) bool 9642: compare_exchange_strong(__int_type& __i1, __int_type __i2, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { 9642: return compare_exchange_strong(__i1, __i2, __m, 9642: __cmpexch_failure_order(__m)); 9642: } 9642: # 632 "/usr/include/c++/13/bits/atomic_base.h" 3 9642: inline __attribute__((__always_inline__)) __int_type 9642: fetch_add(__int_type __i, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { return __atomic_fetch_add(&_M_i, __i, int(__m)); } 9642: 9642: inline __attribute__((__always_inline__)) __int_type 9642: fetch_add(__int_type __i, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { return __atomic_fetch_add(&_M_i, __i, int(__m)); } 9642: 9642: inline __attribute__((__always_inline__)) __int_type 9642: fetch_sub(__int_type __i, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { return __atomic_fetch_sub(&_M_i, __i, int(__m)); } 9642: 9642: inline __attribute__((__always_inline__)) __int_type 9642: fetch_sub(__int_type __i, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { return __atomic_fetch_sub(&_M_i, __i, int(__m)); } 9642: 9642: inline __attribute__((__always_inline__)) __int_type 9642: fetch_and(__int_type __i, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { return __atomic_fetch_and(&_M_i, __i, int(__m)); } 9642: 9642: inline __attribute__((__always_inline__)) __int_type 9642: fetch_and(__int_type __i, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { return __atomic_fetch_and(&_M_i, __i, int(__m)); } 9642: 9642: inline __attribute__((__always_inline__)) __int_type 9642: fetch_or(__int_type __i, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { return __atomic_fetch_or(&_M_i, __i, int(__m)); } 9642: 9642: inline __attribute__((__always_inline__)) __int_type 9642: fetch_or(__int_type __i, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { return __atomic_fetch_or(&_M_i, __i, int(__m)); } 9642: 9642: inline __attribute__((__always_inline__)) __int_type 9642: fetch_xor(__int_type __i, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { return __atomic_fetch_xor(&_M_i, __i, int(__m)); } 9642: 9642: inline __attribute__((__always_inline__)) __int_type 9642: fetch_xor(__int_type __i, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { return __atomic_fetch_xor(&_M_i, __i, int(__m)); } 9642: }; 9642: 9642: 9642: 9642: template 9642: struct __atomic_base<_PTp*> 9642: { 9642: private: 9642: typedef _PTp* __pointer_type; 9642: 9642: __pointer_type _M_p ; 9642: 9642: 9642: constexpr ptrdiff_t 9642: _M_type_size(ptrdiff_t __d) const { return __d * sizeof(_PTp); } 9642: 9642: constexpr ptrdiff_t 9642: _M_type_size(ptrdiff_t __d) const volatile { return __d * sizeof(_PTp); } 9642: 9642: public: 9642: __atomic_base() noexcept = default; 9642: ~__atomic_base() noexcept = default; 9642: __atomic_base(const __atomic_base&) = delete; 9642: __atomic_base& operator=(const __atomic_base&) = delete; 9642: __atomic_base& operator=(const __atomic_base&) volatile = delete; 9642: 9642: 9642: constexpr __atomic_base(__pointer_type __p) noexcept : _M_p (__p) { } 9642: 9642: operator __pointer_type() const noexcept 9642: { return load(); } 9642: 9642: operator __pointer_type() const volatile noexcept 9642: { return load(); } 9642: 9642: __pointer_type 9642: operator=(__pointer_type __p) noexcept 9642: { 9642: store(__p); 9642: return __p; 9642: } 9642: 9642: __pointer_type 9642: operator=(__pointer_type __p) volatile noexcept 9642: { 9642: store(__p); 9642: return __p; 9642: } 9642: 9642: __pointer_type 9642: operator++(int) noexcept 9642: { return fetch_add(1); } 9642: 9642: __pointer_type 9642: operator++(int) volatile noexcept 9642: { return fetch_add(1); } 9642: 9642: __pointer_type 9642: operator--(int) noexcept 9642: { return fetch_sub(1); } 9642: 9642: __pointer_type 9642: operator--(int) volatile noexcept 9642: { return fetch_sub(1); } 9642: 9642: __pointer_type 9642: operator++() noexcept 9642: { return __atomic_add_fetch(&_M_p, _M_type_size(1), 9642: int(memory_order_seq_cst)); } 9642: 9642: __pointer_type 9642: operator++() volatile noexcept 9642: { return __atomic_add_fetch(&_M_p, _M_type_size(1), 9642: int(memory_order_seq_cst)); } 9642: 9642: __pointer_type 9642: operator--() noexcept 9642: { return __atomic_sub_fetch(&_M_p, _M_type_size(1), 9642: int(memory_order_seq_cst)); } 9642: 9642: __pointer_type 9642: operator--() volatile noexcept 9642: { return __atomic_sub_fetch(&_M_p, _M_type_size(1), 9642: int(memory_order_seq_cst)); } 9642: 9642: __pointer_type 9642: operator+=(ptrdiff_t __d) noexcept 9642: { return __atomic_add_fetch(&_M_p, _M_type_size(__d), 9642: int(memory_order_seq_cst)); } 9642: 9642: __pointer_type 9642: operator+=(ptrdiff_t __d) volatile noexcept 9642: { return __atomic_add_fetch(&_M_p, _M_type_size(__d), 9642: int(memory_order_seq_cst)); } 9642: 9642: __pointer_type 9642: operator-=(ptrdiff_t __d) noexcept 9642: { return __atomic_sub_fetch(&_M_p, _M_type_size(__d), 9642: int(memory_order_seq_cst)); } 9642: 9642: __pointer_type 9642: operator-=(ptrdiff_t __d) volatile noexcept 9642: { return __atomic_sub_fetch(&_M_p, _M_type_size(__d), 9642: int(memory_order_seq_cst)); } 9642: 9642: bool 9642: is_lock_free() const noexcept 9642: { 9642: 9642: return __atomic_is_lock_free(sizeof(_M_p), 9642: reinterpret_cast(-__alignof(_M_p))); 9642: } 9642: 9642: bool 9642: is_lock_free() const volatile noexcept 9642: { 9642: 9642: return __atomic_is_lock_free(sizeof(_M_p), 9642: reinterpret_cast(-__alignof(_M_p))); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) void 9642: store(__pointer_type __p, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { 9642: memory_order __b __attribute__ ((__unused__)) 9642: = __m & __memory_order_mask; 9642: 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acquire)) __builtin_unreachable(); } while (false); 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_consume)) __builtin_unreachable(); } while (false); 9642: 9642: __atomic_store_n(&_M_p, __p, int(__m)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) void 9642: store(__pointer_type __p, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { 9642: memory_order __b __attribute__ ((__unused__)) 9642: = __m & __memory_order_mask; 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acquire)) __builtin_unreachable(); } while (false); 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_consume)) __builtin_unreachable(); } while (false); 9642: 9642: __atomic_store_n(&_M_p, __p, int(__m)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) __pointer_type 9642: load(memory_order __m = memory_order_seq_cst) const noexcept 9642: { 9642: memory_order __b __attribute__ ((__unused__)) 9642: = __m & __memory_order_mask; 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_release)) __builtin_unreachable(); } while (false); 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 9642: 9642: return __atomic_load_n(&_M_p, int(__m)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) __pointer_type 9642: load(memory_order __m = memory_order_seq_cst) const volatile noexcept 9642: { 9642: memory_order __b __attribute__ ((__unused__)) 9642: = __m & __memory_order_mask; 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_release)) __builtin_unreachable(); } while (false); 9642: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 9642: 9642: return __atomic_load_n(&_M_p, int(__m)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) __pointer_type 9642: exchange(__pointer_type __p, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { 9642: return __atomic_exchange_n(&_M_p, __p, int(__m)); 9642: } 9642: 9642: 9642: inline __attribute__((__always_inline__)) __pointer_type 9642: exchange(__pointer_type __p, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { 9642: return __atomic_exchange_n(&_M_p, __p, int(__m)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) bool 9642: compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2, 9642: memory_order __m1, 9642: memory_order __m2) noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false); 9642: 9642: return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 1, 9642: int(__m1), int(__m2)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) bool 9642: compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2, 9642: memory_order __m1, 9642: memory_order __m2) volatile noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false); 9642: 9642: return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 1, 9642: int(__m1), int(__m2)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) bool 9642: compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, 9642: memory_order __m1, 9642: memory_order __m2) noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false); 9642: 9642: return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, 9642: int(__m1), int(__m2)); 9642: } 9642: 9642: inline __attribute__((__always_inline__)) bool 9642: compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, 9642: memory_order __m1, 9642: memory_order __m2) volatile noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false); 9642: 9642: return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, 9642: int(__m1), int(__m2)); 9642: } 9642: # 935 "/usr/include/c++/13/bits/atomic_base.h" 3 9642: inline __attribute__((__always_inline__)) __pointer_type 9642: fetch_add(ptrdiff_t __d, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { return __atomic_fetch_add(&_M_p, _M_type_size(__d), int(__m)); } 9642: 9642: inline __attribute__((__always_inline__)) __pointer_type 9642: fetch_add(ptrdiff_t __d, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { return __atomic_fetch_add(&_M_p, _M_type_size(__d), int(__m)); } 9642: 9642: inline __attribute__((__always_inline__)) __pointer_type 9642: fetch_sub(ptrdiff_t __d, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), int(__m)); } 9642: 9642: inline __attribute__((__always_inline__)) __pointer_type 9642: fetch_sub(ptrdiff_t __d, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), int(__m)); } 9642: }; 9642: 9642: namespace __atomic_impl 9642: { 9642: 9642: 9642: template 9642: constexpr bool 9642: __maybe_has_padding() 9642: { 9642: 9642: 9642: 9642: return !__has_unique_object_representations(_Tp) 9642: && !is_same<_Tp, float>::value && !is_same<_Tp, double>::value; 9642: 9642: 9642: 9642: } 9642: 9642: template 9642: inline __attribute__((__always_inline__)) _Tp* 9642: __clear_padding(_Tp& __val) noexcept 9642: { 9642: auto* __ptr = std::__addressof(__val); 9642: 9642: if constexpr (__atomic_impl::__maybe_has_padding<_Tp>()) 9642: __builtin_clear_padding(__ptr); 9642: 9642: return __ptr; 9642: } 9642: 9642: 9642: template 9642: using _Val = typename remove_volatile<_Tp>::type; 9642: 9642: template 9642: inline __attribute__((__always_inline__)) bool 9642: __compare_exchange(_Tp& __val, _Val<_Tp>& __e, _Val<_Tp>& __i, 9642: bool __is_weak, 9642: memory_order __s, memory_order __f) noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__f))) __builtin_unreachable(); } while (false); 9642: 9642: using _Vp = _Val<_Tp>; 9642: 9642: if constexpr (__atomic_impl::__maybe_has_padding<_Vp>()) 9642: { 9642: 9642: 9642: alignas(_Vp) unsigned char __buf[sizeof(_Vp)]; 9642: _Vp* __exp = ::new((void*)__buf) _Vp(__e); 9642: __atomic_impl::__clear_padding(*__exp); 9642: if (__atomic_compare_exchange(std::__addressof(__val), __exp, 9642: __atomic_impl::__clear_padding(__i), 9642: __is_weak, int(__s), int(__f))) 9642: return true; 9642: __builtin_memcpy(std::__addressof(__e), __exp, sizeof(_Vp)); 9642: return false; 9642: } 9642: else 9642: return __atomic_compare_exchange(std::__addressof(__val), 9642: std::__addressof(__e), 9642: std::__addressof(__i), 9642: __is_weak, int(__s), int(__f)); 9642: } 9642: } 9642: # 2020 "/usr/include/c++/13/bits/atomic_base.h" 3 9642: 9642: } 9642: # 42 "/usr/include/c++/13/atomic" 2 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 56 "/usr/include/c++/13/atomic" 3 9642: template 9642: struct atomic; 9642: 9642: 9642: 9642: template<> 9642: struct atomic 9642: { 9642: using value_type = bool; 9642: 9642: private: 9642: __atomic_base _M_base; 9642: 9642: public: 9642: atomic() noexcept = default; 9642: ~atomic() noexcept = default; 9642: atomic(const atomic&) = delete; 9642: atomic& operator=(const atomic&) = delete; 9642: atomic& operator=(const atomic&) volatile = delete; 9642: 9642: constexpr atomic(bool __i) noexcept : _M_base(__i) { } 9642: 9642: bool 9642: operator=(bool __i) noexcept 9642: { return _M_base.operator=(__i); } 9642: 9642: bool 9642: operator=(bool __i) volatile noexcept 9642: { return _M_base.operator=(__i); } 9642: 9642: operator bool() const noexcept 9642: { return _M_base.load(); } 9642: 9642: operator bool() const volatile noexcept 9642: { return _M_base.load(); } 9642: 9642: bool 9642: is_lock_free() const noexcept { return _M_base.is_lock_free(); } 9642: 9642: bool 9642: is_lock_free() const volatile noexcept { return _M_base.is_lock_free(); } 9642: 9642: 9642: static constexpr bool is_always_lock_free = 2 == 2; 9642: 9642: 9642: void 9642: store(bool __i, memory_order __m = memory_order_seq_cst) noexcept 9642: { _M_base.store(__i, __m); } 9642: 9642: void 9642: store(bool __i, memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { _M_base.store(__i, __m); } 9642: 9642: bool 9642: load(memory_order __m = memory_order_seq_cst) const noexcept 9642: { return _M_base.load(__m); } 9642: 9642: bool 9642: load(memory_order __m = memory_order_seq_cst) const volatile noexcept 9642: { return _M_base.load(__m); } 9642: 9642: bool 9642: exchange(bool __i, memory_order __m = memory_order_seq_cst) noexcept 9642: { return _M_base.exchange(__i, __m); } 9642: 9642: bool 9642: exchange(bool __i, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { return _M_base.exchange(__i, __m); } 9642: 9642: bool 9642: compare_exchange_weak(bool& __i1, bool __i2, memory_order __m1, 9642: memory_order __m2) noexcept 9642: { return _M_base.compare_exchange_weak(__i1, __i2, __m1, __m2); } 9642: 9642: bool 9642: compare_exchange_weak(bool& __i1, bool __i2, memory_order __m1, 9642: memory_order __m2) volatile noexcept 9642: { return _M_base.compare_exchange_weak(__i1, __i2, __m1, __m2); } 9642: 9642: bool 9642: compare_exchange_weak(bool& __i1, bool __i2, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { return _M_base.compare_exchange_weak(__i1, __i2, __m); } 9642: 9642: bool 9642: compare_exchange_weak(bool& __i1, bool __i2, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { return _M_base.compare_exchange_weak(__i1, __i2, __m); } 9642: 9642: bool 9642: compare_exchange_strong(bool& __i1, bool __i2, memory_order __m1, 9642: memory_order __m2) noexcept 9642: { return _M_base.compare_exchange_strong(__i1, __i2, __m1, __m2); } 9642: 9642: bool 9642: compare_exchange_strong(bool& __i1, bool __i2, memory_order __m1, 9642: memory_order __m2) volatile noexcept 9642: { return _M_base.compare_exchange_strong(__i1, __i2, __m1, __m2); } 9642: 9642: bool 9642: compare_exchange_strong(bool& __i1, bool __i2, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { return _M_base.compare_exchange_strong(__i1, __i2, __m); } 9642: 9642: bool 9642: compare_exchange_strong(bool& __i1, bool __i2, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { return _M_base.compare_exchange_strong(__i1, __i2, __m); } 9642: # 182 "/usr/include/c++/13/atomic" 3 9642: }; 9642: # 197 "/usr/include/c++/13/atomic" 3 9642: template 9642: struct atomic 9642: { 9642: using value_type = _Tp; 9642: 9642: private: 9642: 9642: static constexpr int _S_min_alignment 9642: = (sizeof(_Tp) & (sizeof(_Tp) - 1)) || sizeof(_Tp) > 16 9642: ? 0 : sizeof(_Tp); 9642: 9642: static constexpr int _S_alignment 9642: = _S_min_alignment > alignof(_Tp) ? _S_min_alignment : alignof(_Tp); 9642: 9642: alignas(_S_alignment) _Tp _M_i ; 9642: 9642: static_assert(__is_trivially_copyable(_Tp), 9642: "std::atomic requires a trivially copyable type"); 9642: 9642: static_assert(sizeof(_Tp) > 0, 9642: "Incomplete or zero-sized types are not supported"); 9642: # 226 "/usr/include/c++/13/atomic" 3 9642: public: 9642: atomic() = default; 9642: ~atomic() noexcept = default; 9642: atomic(const atomic&) = delete; 9642: atomic& operator=(const atomic&) = delete; 9642: atomic& operator=(const atomic&) volatile = delete; 9642: 9642: constexpr atomic(_Tp __i) noexcept : _M_i(__i) 9642: { 9642: 9642: if constexpr (__atomic_impl::__maybe_has_padding<_Tp>()) 9642: __builtin_clear_padding(std::__addressof(_M_i)); 9642: 9642: } 9642: 9642: operator _Tp() const noexcept 9642: { return load(); } 9642: 9642: operator _Tp() const volatile noexcept 9642: { return load(); } 9642: 9642: _Tp 9642: operator=(_Tp __i) noexcept 9642: { store(__i); return __i; } 9642: 9642: _Tp 9642: operator=(_Tp __i) volatile noexcept 9642: { store(__i); return __i; } 9642: 9642: bool 9642: is_lock_free() const noexcept 9642: { 9642: 9642: return __atomic_is_lock_free(sizeof(_M_i), 9642: reinterpret_cast(-_S_alignment)); 9642: } 9642: 9642: bool 9642: is_lock_free() const volatile noexcept 9642: { 9642: 9642: return __atomic_is_lock_free(sizeof(_M_i), 9642: reinterpret_cast(-_S_alignment)); 9642: } 9642: 9642: 9642: static constexpr bool is_always_lock_free 9642: = __atomic_always_lock_free(sizeof(_M_i), 0); 9642: 9642: 9642: void 9642: store(_Tp __i, memory_order __m = memory_order_seq_cst) noexcept 9642: { 9642: __atomic_store(std::__addressof(_M_i), 9642: __atomic_impl::__clear_padding(__i), 9642: int(__m)); 9642: } 9642: 9642: void 9642: store(_Tp __i, memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { 9642: __atomic_store(std::__addressof(_M_i), 9642: __atomic_impl::__clear_padding(__i), 9642: int(__m)); 9642: } 9642: 9642: _Tp 9642: load(memory_order __m = memory_order_seq_cst) const noexcept 9642: { 9642: alignas(_Tp) unsigned char __buf[sizeof(_Tp)]; 9642: _Tp* __ptr = reinterpret_cast<_Tp*>(__buf); 9642: __atomic_load(std::__addressof(_M_i), __ptr, int(__m)); 9642: return *__ptr; 9642: } 9642: 9642: _Tp 9642: load(memory_order __m = memory_order_seq_cst) const volatile noexcept 9642: { 9642: alignas(_Tp) unsigned char __buf[sizeof(_Tp)]; 9642: _Tp* __ptr = reinterpret_cast<_Tp*>(__buf); 9642: __atomic_load(std::__addressof(_M_i), __ptr, int(__m)); 9642: return *__ptr; 9642: } 9642: 9642: _Tp 9642: exchange(_Tp __i, memory_order __m = memory_order_seq_cst) noexcept 9642: { 9642: alignas(_Tp) unsigned char __buf[sizeof(_Tp)]; 9642: _Tp* __ptr = reinterpret_cast<_Tp*>(__buf); 9642: __atomic_exchange(std::__addressof(_M_i), 9642: __atomic_impl::__clear_padding(__i), 9642: __ptr, int(__m)); 9642: return *__ptr; 9642: } 9642: 9642: _Tp 9642: exchange(_Tp __i, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { 9642: alignas(_Tp) unsigned char __buf[sizeof(_Tp)]; 9642: _Tp* __ptr = reinterpret_cast<_Tp*>(__buf); 9642: __atomic_exchange(std::__addressof(_M_i), 9642: __atomic_impl::__clear_padding(__i), 9642: __ptr, int(__m)); 9642: return *__ptr; 9642: } 9642: 9642: bool 9642: compare_exchange_weak(_Tp& __e, _Tp __i, memory_order __s, 9642: memory_order __f) noexcept 9642: { 9642: return __atomic_impl::__compare_exchange(_M_i, __e, __i, true, 9642: __s, __f); 9642: } 9642: 9642: bool 9642: compare_exchange_weak(_Tp& __e, _Tp __i, memory_order __s, 9642: memory_order __f) volatile noexcept 9642: { 9642: return __atomic_impl::__compare_exchange(_M_i, __e, __i, true, 9642: __s, __f); 9642: } 9642: 9642: bool 9642: compare_exchange_weak(_Tp& __e, _Tp __i, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { return compare_exchange_weak(__e, __i, __m, 9642: __cmpexch_failure_order(__m)); } 9642: 9642: bool 9642: compare_exchange_weak(_Tp& __e, _Tp __i, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { return compare_exchange_weak(__e, __i, __m, 9642: __cmpexch_failure_order(__m)); } 9642: 9642: bool 9642: compare_exchange_strong(_Tp& __e, _Tp __i, memory_order __s, 9642: memory_order __f) noexcept 9642: { 9642: return __atomic_impl::__compare_exchange(_M_i, __e, __i, false, 9642: __s, __f); 9642: } 9642: 9642: bool 9642: compare_exchange_strong(_Tp& __e, _Tp __i, memory_order __s, 9642: memory_order __f) volatile noexcept 9642: { 9642: return __atomic_impl::__compare_exchange(_M_i, __e, __i, false, 9642: __s, __f); 9642: } 9642: 9642: bool 9642: compare_exchange_strong(_Tp& __e, _Tp __i, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { return compare_exchange_strong(__e, __i, __m, 9642: __cmpexch_failure_order(__m)); } 9642: 9642: bool 9642: compare_exchange_strong(_Tp& __e, _Tp __i, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { return compare_exchange_strong(__e, __i, __m, 9642: __cmpexch_failure_order(__m)); } 9642: # 408 "/usr/include/c++/13/atomic" 3 9642: }; 9642: 9642: 9642: 9642: template 9642: struct atomic<_Tp*> 9642: { 9642: using value_type = _Tp*; 9642: using difference_type = ptrdiff_t; 9642: 9642: typedef _Tp* __pointer_type; 9642: typedef __atomic_base<_Tp*> __base_type; 9642: __base_type _M_b; 9642: 9642: atomic() noexcept = default; 9642: ~atomic() noexcept = default; 9642: atomic(const atomic&) = delete; 9642: atomic& operator=(const atomic&) = delete; 9642: atomic& operator=(const atomic&) volatile = delete; 9642: 9642: constexpr atomic(__pointer_type __p) noexcept : _M_b(__p) { } 9642: 9642: operator __pointer_type() const noexcept 9642: { return __pointer_type(_M_b); } 9642: 9642: operator __pointer_type() const volatile noexcept 9642: { return __pointer_type(_M_b); } 9642: 9642: __pointer_type 9642: operator=(__pointer_type __p) noexcept 9642: { return _M_b.operator=(__p); } 9642: 9642: __pointer_type 9642: operator=(__pointer_type __p) volatile noexcept 9642: { return _M_b.operator=(__p); } 9642: 9642: __pointer_type 9642: operator++(int) noexcept 9642: { 9642: 9642: static_assert( is_object<_Tp>::value, "pointer to object type" ); 9642: 9642: return _M_b++; 9642: } 9642: 9642: __pointer_type 9642: operator++(int) volatile noexcept 9642: { 9642: 9642: static_assert( is_object<_Tp>::value, "pointer to object type" ); 9642: 9642: return _M_b++; 9642: } 9642: 9642: __pointer_type 9642: operator--(int) noexcept 9642: { 9642: 9642: static_assert( is_object<_Tp>::value, "pointer to object type" ); 9642: 9642: return _M_b--; 9642: } 9642: 9642: __pointer_type 9642: operator--(int) volatile noexcept 9642: { 9642: 9642: static_assert( is_object<_Tp>::value, "pointer to object type" ); 9642: 9642: return _M_b--; 9642: } 9642: 9642: __pointer_type 9642: operator++() noexcept 9642: { 9642: 9642: static_assert( is_object<_Tp>::value, "pointer to object type" ); 9642: 9642: return ++_M_b; 9642: } 9642: 9642: __pointer_type 9642: operator++() volatile noexcept 9642: { 9642: 9642: static_assert( is_object<_Tp>::value, "pointer to object type" ); 9642: 9642: return ++_M_b; 9642: } 9642: 9642: __pointer_type 9642: operator--() noexcept 9642: { 9642: 9642: static_assert( is_object<_Tp>::value, "pointer to object type" ); 9642: 9642: return --_M_b; 9642: } 9642: 9642: __pointer_type 9642: operator--() volatile noexcept 9642: { 9642: 9642: static_assert( is_object<_Tp>::value, "pointer to object type" ); 9642: 9642: return --_M_b; 9642: } 9642: 9642: __pointer_type 9642: operator+=(ptrdiff_t __d) noexcept 9642: { 9642: 9642: static_assert( is_object<_Tp>::value, "pointer to object type" ); 9642: 9642: return _M_b.operator+=(__d); 9642: } 9642: 9642: __pointer_type 9642: operator+=(ptrdiff_t __d) volatile noexcept 9642: { 9642: 9642: static_assert( is_object<_Tp>::value, "pointer to object type" ); 9642: 9642: return _M_b.operator+=(__d); 9642: } 9642: 9642: __pointer_type 9642: operator-=(ptrdiff_t __d) noexcept 9642: { 9642: 9642: static_assert( is_object<_Tp>::value, "pointer to object type" ); 9642: 9642: return _M_b.operator-=(__d); 9642: } 9642: 9642: __pointer_type 9642: operator-=(ptrdiff_t __d) volatile noexcept 9642: { 9642: 9642: static_assert( is_object<_Tp>::value, "pointer to object type" ); 9642: 9642: return _M_b.operator-=(__d); 9642: } 9642: 9642: bool 9642: is_lock_free() const noexcept 9642: { return _M_b.is_lock_free(); } 9642: 9642: bool 9642: is_lock_free() const volatile noexcept 9642: { return _M_b.is_lock_free(); } 9642: 9642: 9642: static constexpr bool is_always_lock_free 9642: = 2 == 2; 9642: 9642: 9642: void 9642: store(__pointer_type __p, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { return _M_b.store(__p, __m); } 9642: 9642: void 9642: store(__pointer_type __p, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { return _M_b.store(__p, __m); } 9642: 9642: __pointer_type 9642: load(memory_order __m = memory_order_seq_cst) const noexcept 9642: { return _M_b.load(__m); } 9642: 9642: __pointer_type 9642: load(memory_order __m = memory_order_seq_cst) const volatile noexcept 9642: { return _M_b.load(__m); } 9642: 9642: __pointer_type 9642: exchange(__pointer_type __p, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { return _M_b.exchange(__p, __m); } 9642: 9642: __pointer_type 9642: exchange(__pointer_type __p, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { return _M_b.exchange(__p, __m); } 9642: 9642: bool 9642: compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2, 9642: memory_order __m1, memory_order __m2) noexcept 9642: { return _M_b.compare_exchange_weak(__p1, __p2, __m1, __m2); } 9642: 9642: bool 9642: compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2, 9642: memory_order __m1, 9642: memory_order __m2) volatile noexcept 9642: { return _M_b.compare_exchange_weak(__p1, __p2, __m1, __m2); } 9642: 9642: bool 9642: compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { 9642: return compare_exchange_weak(__p1, __p2, __m, 9642: __cmpexch_failure_order(__m)); 9642: } 9642: 9642: bool 9642: compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { 9642: return compare_exchange_weak(__p1, __p2, __m, 9642: __cmpexch_failure_order(__m)); 9642: } 9642: 9642: bool 9642: compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, 9642: memory_order __m1, memory_order __m2) noexcept 9642: { return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); } 9642: 9642: bool 9642: compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, 9642: memory_order __m1, 9642: memory_order __m2) volatile noexcept 9642: { return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); } 9642: 9642: bool 9642: compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { 9642: return _M_b.compare_exchange_strong(__p1, __p2, __m, 9642: __cmpexch_failure_order(__m)); 9642: } 9642: 9642: bool 9642: compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { 9642: return _M_b.compare_exchange_strong(__p1, __p2, __m, 9642: __cmpexch_failure_order(__m)); 9642: } 9642: # 663 "/usr/include/c++/13/atomic" 3 9642: __pointer_type 9642: fetch_add(ptrdiff_t __d, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { 9642: 9642: static_assert( is_object<_Tp>::value, "pointer to object type" ); 9642: 9642: return _M_b.fetch_add(__d, __m); 9642: } 9642: 9642: __pointer_type 9642: fetch_add(ptrdiff_t __d, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { 9642: 9642: static_assert( is_object<_Tp>::value, "pointer to object type" ); 9642: 9642: return _M_b.fetch_add(__d, __m); 9642: } 9642: 9642: __pointer_type 9642: fetch_sub(ptrdiff_t __d, 9642: memory_order __m = memory_order_seq_cst) noexcept 9642: { 9642: 9642: static_assert( is_object<_Tp>::value, "pointer to object type" ); 9642: 9642: return _M_b.fetch_sub(__d, __m); 9642: } 9642: 9642: __pointer_type 9642: fetch_sub(ptrdiff_t __d, 9642: memory_order __m = memory_order_seq_cst) volatile noexcept 9642: { 9642: 9642: static_assert( is_object<_Tp>::value, "pointer to object type" ); 9642: 9642: return _M_b.fetch_sub(__d, __m); 9642: } 9642: }; 9642: 9642: 9642: 9642: template<> 9642: struct atomic : __atomic_base 9642: { 9642: typedef char __integral_type; 9642: typedef __atomic_base __base_type; 9642: 9642: atomic() noexcept = default; 9642: ~atomic() noexcept = default; 9642: atomic(const atomic&) = delete; 9642: atomic& operator=(const atomic&) = delete; 9642: atomic& operator=(const atomic&) volatile = delete; 9642: 9642: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 9642: 9642: using __base_type::operator __integral_type; 9642: using __base_type::operator=; 9642: 9642: 9642: static constexpr bool is_always_lock_free = 2 == 2; 9642: 9642: }; 9642: 9642: 9642: template<> 9642: struct atomic : __atomic_base 9642: { 9642: typedef signed char __integral_type; 9642: typedef __atomic_base __base_type; 9642: 9642: atomic() noexcept= default; 9642: ~atomic() noexcept = default; 9642: atomic(const atomic&) = delete; 9642: atomic& operator=(const atomic&) = delete; 9642: atomic& operator=(const atomic&) volatile = delete; 9642: 9642: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 9642: 9642: using __base_type::operator __integral_type; 9642: using __base_type::operator=; 9642: 9642: 9642: static constexpr bool is_always_lock_free = 2 == 2; 9642: 9642: }; 9642: 9642: 9642: template<> 9642: struct atomic : __atomic_base 9642: { 9642: typedef unsigned char __integral_type; 9642: typedef __atomic_base __base_type; 9642: 9642: atomic() noexcept= default; 9642: ~atomic() noexcept = default; 9642: atomic(const atomic&) = delete; 9642: atomic& operator=(const atomic&) = delete; 9642: atomic& operator=(const atomic&) volatile = delete; 9642: 9642: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 9642: 9642: using __base_type::operator __integral_type; 9642: using __base_type::operator=; 9642: 9642: 9642: static constexpr bool is_always_lock_free = 2 == 2; 9642: 9642: }; 9642: 9642: 9642: template<> 9642: struct atomic : __atomic_base 9642: { 9642: typedef short __integral_type; 9642: typedef __atomic_base __base_type; 9642: 9642: atomic() noexcept = default; 9642: ~atomic() noexcept = default; 9642: atomic(const atomic&) = delete; 9642: atomic& operator=(const atomic&) = delete; 9642: atomic& operator=(const atomic&) volatile = delete; 9642: 9642: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 9642: 9642: using __base_type::operator __integral_type; 9642: using __base_type::operator=; 9642: 9642: 9642: static constexpr bool is_always_lock_free = 2 == 2; 9642: 9642: }; 9642: 9642: 9642: template<> 9642: struct atomic : __atomic_base 9642: { 9642: typedef unsigned short __integral_type; 9642: typedef __atomic_base __base_type; 9642: 9642: atomic() noexcept = default; 9642: ~atomic() noexcept = default; 9642: atomic(const atomic&) = delete; 9642: atomic& operator=(const atomic&) = delete; 9642: atomic& operator=(const atomic&) volatile = delete; 9642: 9642: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 9642: 9642: using __base_type::operator __integral_type; 9642: using __base_type::operator=; 9642: 9642: 9642: static constexpr bool is_always_lock_free = 2 == 2; 9642: 9642: }; 9642: 9642: 9642: template<> 9642: struct atomic : __atomic_base 9642: { 9642: typedef int __integral_type; 9642: typedef __atomic_base __base_type; 9642: 9642: atomic() noexcept = default; 9642: ~atomic() noexcept = default; 9642: atomic(const atomic&) = delete; 9642: atomic& operator=(const atomic&) = delete; 9642: atomic& operator=(const atomic&) volatile = delete; 9642: 9642: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 9642: 9642: using __base_type::operator __integral_type; 9642: using __base_type::operator=; 9642: 9642: 9642: static constexpr bool is_always_lock_free = 2 == 2; 9642: 9642: }; 9642: 9642: 9642: template<> 9642: struct atomic : __atomic_base 9642: { 9642: typedef unsigned int __integral_type; 9642: typedef __atomic_base __base_type; 9642: 9642: atomic() noexcept = default; 9642: ~atomic() noexcept = default; 9642: atomic(const atomic&) = delete; 9642: atomic& operator=(const atomic&) = delete; 9642: atomic& operator=(const atomic&) volatile = delete; 9642: 9642: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 9642: 9642: using __base_type::operator __integral_type; 9642: using __base_type::operator=; 9642: 9642: 9642: static constexpr bool is_always_lock_free = 2 == 2; 9642: 9642: }; 9642: 9642: 9642: template<> 9642: struct atomic : __atomic_base 9642: { 9642: typedef long __integral_type; 9642: typedef __atomic_base __base_type; 9642: 9642: atomic() noexcept = default; 9642: ~atomic() noexcept = default; 9642: atomic(const atomic&) = delete; 9642: atomic& operator=(const atomic&) = delete; 9642: atomic& operator=(const atomic&) volatile = delete; 9642: 9642: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 9642: 9642: using __base_type::operator __integral_type; 9642: using __base_type::operator=; 9642: 9642: 9642: static constexpr bool is_always_lock_free = 2 == 2; 9642: 9642: }; 9642: 9642: 9642: template<> 9642: struct atomic : __atomic_base 9642: { 9642: typedef unsigned long __integral_type; 9642: typedef __atomic_base __base_type; 9642: 9642: atomic() noexcept = default; 9642: ~atomic() noexcept = default; 9642: atomic(const atomic&) = delete; 9642: atomic& operator=(const atomic&) = delete; 9642: atomic& operator=(const atomic&) volatile = delete; 9642: 9642: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 9642: 9642: using __base_type::operator __integral_type; 9642: using __base_type::operator=; 9642: 9642: 9642: static constexpr bool is_always_lock_free = 2 == 2; 9642: 9642: }; 9642: 9642: 9642: template<> 9642: struct atomic : __atomic_base 9642: { 9642: typedef long long __integral_type; 9642: typedef __atomic_base __base_type; 9642: 9642: atomic() noexcept = default; 9642: ~atomic() noexcept = default; 9642: atomic(const atomic&) = delete; 9642: atomic& operator=(const atomic&) = delete; 9642: atomic& operator=(const atomic&) volatile = delete; 9642: 9642: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 9642: 9642: using __base_type::operator __integral_type; 9642: using __base_type::operator=; 9642: 9642: 9642: static constexpr bool is_always_lock_free = 2 == 2; 9642: 9642: }; 9642: 9642: 9642: template<> 9642: struct atomic : __atomic_base 9642: { 9642: typedef unsigned long long __integral_type; 9642: typedef __atomic_base __base_type; 9642: 9642: atomic() noexcept = default; 9642: ~atomic() noexcept = default; 9642: atomic(const atomic&) = delete; 9642: atomic& operator=(const atomic&) = delete; 9642: atomic& operator=(const atomic&) volatile = delete; 9642: 9642: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 9642: 9642: using __base_type::operator __integral_type; 9642: using __base_type::operator=; 9642: 9642: 9642: static constexpr bool is_always_lock_free = 2 == 2; 9642: 9642: }; 9642: 9642: 9642: template<> 9642: struct atomic : __atomic_base 9642: { 9642: typedef wchar_t __integral_type; 9642: typedef __atomic_base __base_type; 9642: 9642: atomic() noexcept = default; 9642: ~atomic() noexcept = default; 9642: atomic(const atomic&) = delete; 9642: atomic& operator=(const atomic&) = delete; 9642: atomic& operator=(const atomic&) volatile = delete; 9642: 9642: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 9642: 9642: using __base_type::operator __integral_type; 9642: using __base_type::operator=; 9642: 9642: 9642: static constexpr bool is_always_lock_free = 2 == 2; 9642: 9642: }; 9642: # 1008 "/usr/include/c++/13/atomic" 3 9642: template<> 9642: struct atomic : __atomic_base 9642: { 9642: typedef char16_t __integral_type; 9642: typedef __atomic_base __base_type; 9642: 9642: atomic() noexcept = default; 9642: ~atomic() noexcept = default; 9642: atomic(const atomic&) = delete; 9642: atomic& operator=(const atomic&) = delete; 9642: atomic& operator=(const atomic&) volatile = delete; 9642: 9642: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 9642: 9642: using __base_type::operator __integral_type; 9642: using __base_type::operator=; 9642: 9642: 9642: static constexpr bool is_always_lock_free 9642: = 2 == 2; 9642: 9642: }; 9642: 9642: 9642: template<> 9642: struct atomic : __atomic_base 9642: { 9642: typedef char32_t __integral_type; 9642: typedef __atomic_base __base_type; 9642: 9642: atomic() noexcept = default; 9642: ~atomic() noexcept = default; 9642: atomic(const atomic&) = delete; 9642: atomic& operator=(const atomic&) = delete; 9642: atomic& operator=(const atomic&) volatile = delete; 9642: 9642: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 9642: 9642: using __base_type::operator __integral_type; 9642: using __base_type::operator=; 9642: 9642: 9642: static constexpr bool is_always_lock_free 9642: = 2 == 2; 9642: 9642: }; 9642: 9642: 9642: 9642: typedef atomic atomic_bool; 9642: 9642: 9642: typedef atomic atomic_char; 9642: 9642: 9642: typedef atomic atomic_schar; 9642: 9642: 9642: typedef atomic atomic_uchar; 9642: 9642: 9642: typedef atomic atomic_short; 9642: 9642: 9642: typedef atomic atomic_ushort; 9642: 9642: 9642: typedef atomic atomic_int; 9642: 9642: 9642: typedef atomic atomic_uint; 9642: 9642: 9642: typedef atomic atomic_long; 9642: 9642: 9642: typedef atomic atomic_ulong; 9642: 9642: 9642: typedef atomic atomic_llong; 9642: 9642: 9642: typedef atomic atomic_ullong; 9642: 9642: 9642: typedef atomic atomic_wchar_t; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef atomic atomic_char16_t; 9642: 9642: 9642: typedef atomic atomic_char32_t; 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef atomic atomic_int8_t; 9642: 9642: 9642: typedef atomic atomic_uint8_t; 9642: 9642: 9642: typedef atomic atomic_int16_t; 9642: 9642: 9642: typedef atomic atomic_uint16_t; 9642: 9642: 9642: typedef atomic atomic_int32_t; 9642: 9642: 9642: typedef atomic atomic_uint32_t; 9642: 9642: 9642: typedef atomic atomic_int64_t; 9642: 9642: 9642: typedef atomic atomic_uint64_t; 9642: 9642: 9642: 9642: typedef atomic atomic_int_least8_t; 9642: 9642: 9642: typedef atomic atomic_uint_least8_t; 9642: 9642: 9642: typedef atomic atomic_int_least16_t; 9642: 9642: 9642: typedef atomic atomic_uint_least16_t; 9642: 9642: 9642: typedef atomic atomic_int_least32_t; 9642: 9642: 9642: typedef atomic atomic_uint_least32_t; 9642: 9642: 9642: typedef atomic atomic_int_least64_t; 9642: 9642: 9642: typedef atomic atomic_uint_least64_t; 9642: 9642: 9642: 9642: typedef atomic atomic_int_fast8_t; 9642: 9642: 9642: typedef atomic atomic_uint_fast8_t; 9642: 9642: 9642: typedef atomic atomic_int_fast16_t; 9642: 9642: 9642: typedef atomic atomic_uint_fast16_t; 9642: 9642: 9642: typedef atomic atomic_int_fast32_t; 9642: 9642: 9642: typedef atomic atomic_uint_fast32_t; 9642: 9642: 9642: typedef atomic atomic_int_fast64_t; 9642: 9642: 9642: typedef atomic atomic_uint_fast64_t; 9642: 9642: 9642: 9642: 9642: typedef atomic atomic_intptr_t; 9642: 9642: 9642: typedef atomic atomic_uintptr_t; 9642: 9642: 9642: typedef atomic atomic_size_t; 9642: 9642: 9642: typedef atomic atomic_ptrdiff_t; 9642: 9642: 9642: 9642: typedef atomic atomic_intmax_t; 9642: 9642: 9642: typedef atomic atomic_uintmax_t; 9642: 9642: 9642: 9642: inline bool 9642: atomic_flag_test_and_set_explicit(atomic_flag* __a, 9642: memory_order __m) noexcept 9642: { return __a->test_and_set(__m); } 9642: 9642: inline bool 9642: atomic_flag_test_and_set_explicit(volatile atomic_flag* __a, 9642: memory_order __m) noexcept 9642: { return __a->test_and_set(__m); } 9642: # 1237 "/usr/include/c++/13/atomic" 3 9642: inline void 9642: atomic_flag_clear_explicit(atomic_flag* __a, memory_order __m) noexcept 9642: { __a->clear(__m); } 9642: 9642: inline void 9642: atomic_flag_clear_explicit(volatile atomic_flag* __a, 9642: memory_order __m) noexcept 9642: { __a->clear(__m); } 9642: 9642: inline bool 9642: atomic_flag_test_and_set(atomic_flag* __a) noexcept 9642: { return atomic_flag_test_and_set_explicit(__a, memory_order_seq_cst); } 9642: 9642: inline bool 9642: atomic_flag_test_and_set(volatile atomic_flag* __a) noexcept 9642: { return atomic_flag_test_and_set_explicit(__a, memory_order_seq_cst); } 9642: 9642: inline void 9642: atomic_flag_clear(atomic_flag* __a) noexcept 9642: { atomic_flag_clear_explicit(__a, memory_order_seq_cst); } 9642: 9642: inline void 9642: atomic_flag_clear(volatile atomic_flag* __a) noexcept 9642: { atomic_flag_clear_explicit(__a, memory_order_seq_cst); } 9642: # 1284 "/usr/include/c++/13/atomic" 3 9642: template 9642: using __atomic_val_t = __type_identity_t<_Tp>; 9642: template 9642: using __atomic_diff_t = typename atomic<_Tp>::difference_type; 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: atomic_is_lock_free(const atomic<_ITp>* __a) noexcept 9642: { return __a->is_lock_free(); } 9642: 9642: template 9642: inline bool 9642: atomic_is_lock_free(const volatile atomic<_ITp>* __a) noexcept 9642: { return __a->is_lock_free(); } 9642: 9642: template 9642: inline void 9642: atomic_init(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept 9642: { __a->store(__i, memory_order_relaxed); } 9642: 9642: template 9642: inline void 9642: atomic_init(volatile atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept 9642: { __a->store(__i, memory_order_relaxed); } 9642: 9642: template 9642: inline void 9642: atomic_store_explicit(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i, 9642: memory_order __m) noexcept 9642: { __a->store(__i, __m); } 9642: 9642: template 9642: inline void 9642: atomic_store_explicit(volatile atomic<_ITp>* __a, __atomic_val_t<_ITp> __i, 9642: memory_order __m) noexcept 9642: { __a->store(__i, __m); } 9642: 9642: template 9642: inline _ITp 9642: atomic_load_explicit(const atomic<_ITp>* __a, memory_order __m) noexcept 9642: { return __a->load(__m); } 9642: 9642: template 9642: inline _ITp 9642: atomic_load_explicit(const volatile atomic<_ITp>* __a, 9642: memory_order __m) noexcept 9642: { return __a->load(__m); } 9642: 9642: template 9642: inline _ITp 9642: atomic_exchange_explicit(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i, 9642: memory_order __m) noexcept 9642: { return __a->exchange(__i, __m); } 9642: 9642: template 9642: inline _ITp 9642: atomic_exchange_explicit(volatile atomic<_ITp>* __a, 9642: __atomic_val_t<_ITp> __i, 9642: memory_order __m) noexcept 9642: { return __a->exchange(__i, __m); } 9642: 9642: template 9642: inline bool 9642: atomic_compare_exchange_weak_explicit(atomic<_ITp>* __a, 9642: __atomic_val_t<_ITp>* __i1, 9642: __atomic_val_t<_ITp> __i2, 9642: memory_order __m1, 9642: memory_order __m2) noexcept 9642: { return __a->compare_exchange_weak(*__i1, __i2, __m1, __m2); } 9642: 9642: template 9642: inline bool 9642: atomic_compare_exchange_weak_explicit(volatile atomic<_ITp>* __a, 9642: __atomic_val_t<_ITp>* __i1, 9642: __atomic_val_t<_ITp> __i2, 9642: memory_order __m1, 9642: memory_order __m2) noexcept 9642: { return __a->compare_exchange_weak(*__i1, __i2, __m1, __m2); } 9642: 9642: template 9642: inline bool 9642: atomic_compare_exchange_strong_explicit(atomic<_ITp>* __a, 9642: __atomic_val_t<_ITp>* __i1, 9642: __atomic_val_t<_ITp> __i2, 9642: memory_order __m1, 9642: memory_order __m2) noexcept 9642: { return __a->compare_exchange_strong(*__i1, __i2, __m1, __m2); } 9642: 9642: template 9642: inline bool 9642: atomic_compare_exchange_strong_explicit(volatile atomic<_ITp>* __a, 9642: __atomic_val_t<_ITp>* __i1, 9642: __atomic_val_t<_ITp> __i2, 9642: memory_order __m1, 9642: memory_order __m2) noexcept 9642: { return __a->compare_exchange_strong(*__i1, __i2, __m1, __m2); } 9642: 9642: 9642: template 9642: inline void 9642: atomic_store(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept 9642: { atomic_store_explicit(__a, __i, memory_order_seq_cst); } 9642: 9642: template 9642: inline void 9642: atomic_store(volatile atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept 9642: { atomic_store_explicit(__a, __i, memory_order_seq_cst); } 9642: 9642: template 9642: inline _ITp 9642: atomic_load(const atomic<_ITp>* __a) noexcept 9642: { return atomic_load_explicit(__a, memory_order_seq_cst); } 9642: 9642: template 9642: inline _ITp 9642: atomic_load(const volatile atomic<_ITp>* __a) noexcept 9642: { return atomic_load_explicit(__a, memory_order_seq_cst); } 9642: 9642: template 9642: inline _ITp 9642: atomic_exchange(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept 9642: { return atomic_exchange_explicit(__a, __i, memory_order_seq_cst); } 9642: 9642: template 9642: inline _ITp 9642: atomic_exchange(volatile atomic<_ITp>* __a, 9642: __atomic_val_t<_ITp> __i) noexcept 9642: { return atomic_exchange_explicit(__a, __i, memory_order_seq_cst); } 9642: 9642: template 9642: inline bool 9642: atomic_compare_exchange_weak(atomic<_ITp>* __a, 9642: __atomic_val_t<_ITp>* __i1, 9642: __atomic_val_t<_ITp> __i2) noexcept 9642: { 9642: return atomic_compare_exchange_weak_explicit(__a, __i1, __i2, 9642: memory_order_seq_cst, 9642: memory_order_seq_cst); 9642: } 9642: 9642: template 9642: inline bool 9642: atomic_compare_exchange_weak(volatile atomic<_ITp>* __a, 9642: __atomic_val_t<_ITp>* __i1, 9642: __atomic_val_t<_ITp> __i2) noexcept 9642: { 9642: return atomic_compare_exchange_weak_explicit(__a, __i1, __i2, 9642: memory_order_seq_cst, 9642: memory_order_seq_cst); 9642: } 9642: 9642: template 9642: inline bool 9642: atomic_compare_exchange_strong(atomic<_ITp>* __a, 9642: __atomic_val_t<_ITp>* __i1, 9642: __atomic_val_t<_ITp> __i2) noexcept 9642: { 9642: return atomic_compare_exchange_strong_explicit(__a, __i1, __i2, 9642: memory_order_seq_cst, 9642: memory_order_seq_cst); 9642: } 9642: 9642: template 9642: inline bool 9642: atomic_compare_exchange_strong(volatile atomic<_ITp>* __a, 9642: __atomic_val_t<_ITp>* __i1, 9642: __atomic_val_t<_ITp> __i2) noexcept 9642: { 9642: return atomic_compare_exchange_strong_explicit(__a, __i1, __i2, 9642: memory_order_seq_cst, 9642: memory_order_seq_cst); 9642: } 9642: # 1490 "/usr/include/c++/13/atomic" 3 9642: template 9642: inline _ITp 9642: atomic_fetch_add_explicit(atomic<_ITp>* __a, 9642: __atomic_diff_t<_ITp> __i, 9642: memory_order __m) noexcept 9642: { return __a->fetch_add(__i, __m); } 9642: 9642: template 9642: inline _ITp 9642: atomic_fetch_add_explicit(volatile atomic<_ITp>* __a, 9642: __atomic_diff_t<_ITp> __i, 9642: memory_order __m) noexcept 9642: { return __a->fetch_add(__i, __m); } 9642: 9642: template 9642: inline _ITp 9642: atomic_fetch_sub_explicit(atomic<_ITp>* __a, 9642: __atomic_diff_t<_ITp> __i, 9642: memory_order __m) noexcept 9642: { return __a->fetch_sub(__i, __m); } 9642: 9642: template 9642: inline _ITp 9642: atomic_fetch_sub_explicit(volatile atomic<_ITp>* __a, 9642: __atomic_diff_t<_ITp> __i, 9642: memory_order __m) noexcept 9642: { return __a->fetch_sub(__i, __m); } 9642: 9642: template 9642: inline _ITp 9642: atomic_fetch_and_explicit(__atomic_base<_ITp>* __a, 9642: __atomic_val_t<_ITp> __i, 9642: memory_order __m) noexcept 9642: { return __a->fetch_and(__i, __m); } 9642: 9642: template 9642: inline _ITp 9642: atomic_fetch_and_explicit(volatile __atomic_base<_ITp>* __a, 9642: __atomic_val_t<_ITp> __i, 9642: memory_order __m) noexcept 9642: { return __a->fetch_and(__i, __m); } 9642: 9642: template 9642: inline _ITp 9642: atomic_fetch_or_explicit(__atomic_base<_ITp>* __a, 9642: __atomic_val_t<_ITp> __i, 9642: memory_order __m) noexcept 9642: { return __a->fetch_or(__i, __m); } 9642: 9642: template 9642: inline _ITp 9642: atomic_fetch_or_explicit(volatile __atomic_base<_ITp>* __a, 9642: __atomic_val_t<_ITp> __i, 9642: memory_order __m) noexcept 9642: { return __a->fetch_or(__i, __m); } 9642: 9642: template 9642: inline _ITp 9642: atomic_fetch_xor_explicit(__atomic_base<_ITp>* __a, 9642: __atomic_val_t<_ITp> __i, 9642: memory_order __m) noexcept 9642: { return __a->fetch_xor(__i, __m); } 9642: 9642: template 9642: inline _ITp 9642: atomic_fetch_xor_explicit(volatile __atomic_base<_ITp>* __a, 9642: __atomic_val_t<_ITp> __i, 9642: memory_order __m) noexcept 9642: { return __a->fetch_xor(__i, __m); } 9642: 9642: template 9642: inline _ITp 9642: atomic_fetch_add(atomic<_ITp>* __a, 9642: __atomic_diff_t<_ITp> __i) noexcept 9642: { return atomic_fetch_add_explicit(__a, __i, memory_order_seq_cst); } 9642: 9642: template 9642: inline _ITp 9642: atomic_fetch_add(volatile atomic<_ITp>* __a, 9642: __atomic_diff_t<_ITp> __i) noexcept 9642: { return atomic_fetch_add_explicit(__a, __i, memory_order_seq_cst); } 9642: 9642: template 9642: inline _ITp 9642: atomic_fetch_sub(atomic<_ITp>* __a, 9642: __atomic_diff_t<_ITp> __i) noexcept 9642: { return atomic_fetch_sub_explicit(__a, __i, memory_order_seq_cst); } 9642: 9642: template 9642: inline _ITp 9642: atomic_fetch_sub(volatile atomic<_ITp>* __a, 9642: __atomic_diff_t<_ITp> __i) noexcept 9642: { return atomic_fetch_sub_explicit(__a, __i, memory_order_seq_cst); } 9642: 9642: template 9642: inline _ITp 9642: atomic_fetch_and(__atomic_base<_ITp>* __a, 9642: __atomic_val_t<_ITp> __i) noexcept 9642: { return atomic_fetch_and_explicit(__a, __i, memory_order_seq_cst); } 9642: 9642: template 9642: inline _ITp 9642: atomic_fetch_and(volatile __atomic_base<_ITp>* __a, 9642: __atomic_val_t<_ITp> __i) noexcept 9642: { return atomic_fetch_and_explicit(__a, __i, memory_order_seq_cst); } 9642: 9642: template 9642: inline _ITp 9642: atomic_fetch_or(__atomic_base<_ITp>* __a, 9642: __atomic_val_t<_ITp> __i) noexcept 9642: { return atomic_fetch_or_explicit(__a, __i, memory_order_seq_cst); } 9642: 9642: template 9642: inline _ITp 9642: atomic_fetch_or(volatile __atomic_base<_ITp>* __a, 9642: __atomic_val_t<_ITp> __i) noexcept 9642: { return atomic_fetch_or_explicit(__a, __i, memory_order_seq_cst); } 9642: 9642: template 9642: inline _ITp 9642: atomic_fetch_xor(__atomic_base<_ITp>* __a, 9642: __atomic_val_t<_ITp> __i) noexcept 9642: { return atomic_fetch_xor_explicit(__a, __i, memory_order_seq_cst); } 9642: 9642: template 9642: inline _ITp 9642: atomic_fetch_xor(volatile __atomic_base<_ITp>* __a, 9642: __atomic_val_t<_ITp> __i) noexcept 9642: { return atomic_fetch_xor_explicit(__a, __i, memory_order_seq_cst); } 9642: # 1790 "/usr/include/c++/13/atomic" 3 9642: 9642: } 9642: # 12 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 9642: # 1 "/usr/include/c++/13/deque" 1 3 9642: # 58 "/usr/include/c++/13/deque" 3 9642: 9642: # 59 "/usr/include/c++/13/deque" 3 9642: 9642: # 1 "/usr/include/c++/13/bits/requires_hosted.h" 1 3 9642: # 61 "/usr/include/c++/13/deque" 2 3 9642: 9642: # 1 "/usr/include/c++/13/bits/stl_algobase.h" 1 3 9642: # 60 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: # 1 "/usr/include/c++/13/bits/functexcept.h" 1 3 9642: # 40 "/usr/include/c++/13/bits/functexcept.h" 3 9642: # 1 "/usr/include/c++/13/bits/exception_defines.h" 1 3 9642: # 41 "/usr/include/c++/13/bits/functexcept.h" 2 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: void 9642: __throw_bad_exception(void) __attribute__((__noreturn__)); 9642: 9642: 9642: void 9642: __throw_bad_alloc(void) __attribute__((__noreturn__)); 9642: 9642: void 9642: __throw_bad_array_new_length(void) __attribute__((__noreturn__)); 9642: 9642: 9642: void 9642: __throw_bad_cast(void) __attribute__((__noreturn__)); 9642: 9642: void 9642: __throw_bad_typeid(void) __attribute__((__noreturn__)); 9642: 9642: 9642: void 9642: __throw_logic_error(const char*) __attribute__((__noreturn__)); 9642: 9642: void 9642: __throw_domain_error(const char*) __attribute__((__noreturn__)); 9642: 9642: void 9642: __throw_invalid_argument(const char*) __attribute__((__noreturn__)); 9642: 9642: void 9642: __throw_length_error(const char*) __attribute__((__noreturn__)); 9642: 9642: void 9642: __throw_out_of_range(const char*) __attribute__((__noreturn__)); 9642: 9642: void 9642: __throw_out_of_range_fmt(const char*, ...) __attribute__((__noreturn__)) 9642: __attribute__((__format__(__gnu_printf__, 1, 2))); 9642: 9642: void 9642: __throw_runtime_error(const char*) __attribute__((__noreturn__)); 9642: 9642: void 9642: __throw_range_error(const char*) __attribute__((__noreturn__)); 9642: 9642: void 9642: __throw_overflow_error(const char*) __attribute__((__noreturn__)); 9642: 9642: void 9642: __throw_underflow_error(const char*) __attribute__((__noreturn__)); 9642: 9642: 9642: void 9642: __throw_ios_failure(const char*) __attribute__((__noreturn__)); 9642: 9642: void 9642: __throw_ios_failure(const char*, int) __attribute__((__noreturn__)); 9642: 9642: 9642: void 9642: __throw_system_error(int) __attribute__((__noreturn__)); 9642: 9642: 9642: void 9642: __throw_future_error(int) __attribute__((__noreturn__)); 9642: 9642: 9642: void 9642: __throw_bad_function_call() __attribute__((__noreturn__)); 9642: # 140 "/usr/include/c++/13/bits/functexcept.h" 3 9642: 9642: } 9642: # 61 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 9642: # 1 "/usr/include/c++/13/bits/cpp_type_traits.h" 1 3 9642: # 35 "/usr/include/c++/13/bits/cpp_type_traits.h" 3 9642: 9642: # 36 "/usr/include/c++/13/bits/cpp_type_traits.h" 3 9642: # 67 "/usr/include/c++/13/bits/cpp_type_traits.h" 3 9642: extern "C++" { 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: struct __true_type { }; 9642: struct __false_type { }; 9642: 9642: template 9642: struct __truth_type 9642: { typedef __false_type __type; }; 9642: 9642: template<> 9642: struct __truth_type 9642: { typedef __true_type __type; }; 9642: 9642: 9642: 9642: template 9642: struct __traitor 9642: { 9642: enum { __value = bool(_Sp::__value) || bool(_Tp::__value) }; 9642: typedef typename __truth_type<__value>::__type __type; 9642: }; 9642: 9642: 9642: template 9642: struct __are_same 9642: { 9642: enum { __value = 0 }; 9642: typedef __false_type __type; 9642: }; 9642: 9642: template 9642: struct __are_same<_Tp, _Tp> 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: 9642: template 9642: struct __is_void 9642: { 9642: enum { __value = 0 }; 9642: typedef __false_type __type; 9642: }; 9642: 9642: template<> 9642: struct __is_void 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: 9642: 9642: 9642: template 9642: struct __is_integer 9642: { 9642: enum { __value = 0 }; 9642: typedef __false_type __type; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template<> 9642: struct __is_integer 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: template<> 9642: struct __is_integer 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: template<> 9642: struct __is_integer 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: template<> 9642: struct __is_integer 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: 9642: template<> 9642: struct __is_integer 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: # 184 "/usr/include/c++/13/bits/cpp_type_traits.h" 3 9642: template<> 9642: struct __is_integer 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: template<> 9642: struct __is_integer 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: 9642: template<> 9642: struct __is_integer 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: template<> 9642: struct __is_integer 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: template<> 9642: struct __is_integer 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: template<> 9642: struct __is_integer 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: template<> 9642: struct __is_integer 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: template<> 9642: struct __is_integer 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: template<> 9642: struct __is_integer 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: template<> 9642: struct __is_integer 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: # 289 "/usr/include/c++/13/bits/cpp_type_traits.h" 3 9642: template 9642: struct __is_floating 9642: { 9642: enum { __value = 0 }; 9642: typedef __false_type __type; 9642: }; 9642: 9642: 9642: template<> 9642: struct __is_floating 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: template<> 9642: struct __is_floating 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: template<> 9642: struct __is_floating 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: # 366 "/usr/include/c++/13/bits/cpp_type_traits.h" 3 9642: template 9642: struct __is_pointer 9642: { 9642: enum { __value = 0 }; 9642: typedef __false_type __type; 9642: }; 9642: 9642: template 9642: struct __is_pointer<_Tp*> 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: 9642: 9642: 9642: template 9642: struct __is_arithmetic 9642: : public __traitor<__is_integer<_Tp>, __is_floating<_Tp> > 9642: { }; 9642: 9642: 9642: 9642: 9642: template 9642: struct __is_scalar 9642: : public __traitor<__is_arithmetic<_Tp>, __is_pointer<_Tp> > 9642: { }; 9642: 9642: 9642: 9642: 9642: template 9642: struct __is_char 9642: { 9642: enum { __value = 0 }; 9642: typedef __false_type __type; 9642: }; 9642: 9642: template<> 9642: struct __is_char 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: 9642: template<> 9642: struct __is_char 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: 9642: template 9642: struct __is_byte 9642: { 9642: enum { __value = 0 }; 9642: typedef __false_type __type; 9642: }; 9642: 9642: template<> 9642: struct __is_byte 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: template<> 9642: struct __is_byte 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: template<> 9642: struct __is_byte 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: 9642: enum class byte : unsigned char; 9642: 9642: template<> 9642: struct __is_byte 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: # 470 "/usr/include/c++/13/bits/cpp_type_traits.h" 3 9642: template struct iterator_traits; 9642: 9642: 9642: template 9642: struct __is_nonvolatile_trivially_copyable 9642: { 9642: enum { __value = __is_trivially_copyable(_Tp) }; 9642: }; 9642: 9642: 9642: 9642: 9642: template 9642: struct __is_nonvolatile_trivially_copyable 9642: { 9642: enum { __value = 0 }; 9642: }; 9642: 9642: 9642: template 9642: struct __memcpyable 9642: { 9642: enum { __value = 0 }; 9642: }; 9642: 9642: template 9642: struct __memcpyable<_Tp*, _Tp*> 9642: : __is_nonvolatile_trivially_copyable<_Tp> 9642: { }; 9642: 9642: template 9642: struct __memcpyable<_Tp*, const _Tp*> 9642: : __is_nonvolatile_trivially_copyable<_Tp> 9642: { }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct __memcmpable 9642: { 9642: enum { __value = 0 }; 9642: }; 9642: 9642: 9642: template 9642: struct __memcmpable<_Tp*, _Tp*> 9642: : __is_nonvolatile_trivially_copyable<_Tp> 9642: { }; 9642: 9642: template 9642: struct __memcmpable 9642: : __is_nonvolatile_trivially_copyable<_Tp> 9642: { }; 9642: 9642: template 9642: struct __memcmpable<_Tp*, const _Tp*> 9642: : __is_nonvolatile_trivially_copyable<_Tp> 9642: { }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template::__value 9642: 9642: > 9642: struct __is_memcmp_ordered 9642: { 9642: static const bool __value = _Tp(-1) > _Tp(1); 9642: }; 9642: 9642: template 9642: struct __is_memcmp_ordered<_Tp, false> 9642: { 9642: static const bool __value = false; 9642: }; 9642: 9642: 9642: template 9642: struct __is_memcmp_ordered_with 9642: { 9642: static const bool __value = __is_memcmp_ordered<_Tp>::__value 9642: && __is_memcmp_ordered<_Up>::__value; 9642: }; 9642: 9642: template 9642: struct __is_memcmp_ordered_with<_Tp, _Up, false> 9642: { 9642: static const bool __value = false; 9642: }; 9642: # 579 "/usr/include/c++/13/bits/cpp_type_traits.h" 3 9642: template<> 9642: struct __is_memcmp_ordered_with 9642: { static constexpr bool __value = true; }; 9642: 9642: template 9642: struct __is_memcmp_ordered_with<_Tp, std::byte, _SameSize> 9642: { static constexpr bool __value = false; }; 9642: 9642: template 9642: struct __is_memcmp_ordered_with 9642: { static constexpr bool __value = false; }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct __is_move_iterator 9642: { 9642: enum { __value = 0 }; 9642: typedef __false_type __type; 9642: }; 9642: 9642: 9642: 9642: template 9642: 9642: inline _Iterator 9642: __miter_base(_Iterator __it) 9642: { return __it; } 9642: 9642: 9642: } 9642: } 9642: # 62 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 9642: # 1 "/usr/include/c++/13/ext/type_traits.h" 1 3 9642: # 32 "/usr/include/c++/13/ext/type_traits.h" 3 9642: 9642: # 33 "/usr/include/c++/13/ext/type_traits.h" 3 9642: 9642: 9642: 9642: 9642: extern "C++" { 9642: 9642: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: template 9642: struct __enable_if 9642: { }; 9642: 9642: template 9642: struct __enable_if 9642: { typedef _Tp __type; }; 9642: 9642: 9642: 9642: template 9642: struct __conditional_type 9642: { typedef _Iftrue __type; }; 9642: 9642: template 9642: struct __conditional_type 9642: { typedef _Iffalse __type; }; 9642: 9642: 9642: 9642: template 9642: struct __add_unsigned 9642: { 9642: private: 9642: typedef __enable_if::__value, _Tp> __if_type; 9642: 9642: public: 9642: typedef typename __if_type::__type __type; 9642: }; 9642: 9642: template<> 9642: struct __add_unsigned 9642: { typedef unsigned char __type; }; 9642: 9642: template<> 9642: struct __add_unsigned 9642: { typedef unsigned char __type; }; 9642: 9642: template<> 9642: struct __add_unsigned 9642: { typedef unsigned short __type; }; 9642: 9642: template<> 9642: struct __add_unsigned 9642: { typedef unsigned int __type; }; 9642: 9642: template<> 9642: struct __add_unsigned 9642: { typedef unsigned long __type; }; 9642: 9642: template<> 9642: struct __add_unsigned 9642: { typedef unsigned long long __type; }; 9642: 9642: 9642: template<> 9642: struct __add_unsigned; 9642: 9642: template<> 9642: struct __add_unsigned; 9642: 9642: 9642: 9642: template 9642: struct __remove_unsigned 9642: { 9642: private: 9642: typedef __enable_if::__value, _Tp> __if_type; 9642: 9642: public: 9642: typedef typename __if_type::__type __type; 9642: }; 9642: 9642: template<> 9642: struct __remove_unsigned 9642: { typedef signed char __type; }; 9642: 9642: template<> 9642: struct __remove_unsigned 9642: { typedef signed char __type; }; 9642: 9642: template<> 9642: struct __remove_unsigned 9642: { typedef short __type; }; 9642: 9642: template<> 9642: struct __remove_unsigned 9642: { typedef int __type; }; 9642: 9642: template<> 9642: struct __remove_unsigned 9642: { typedef long __type; }; 9642: 9642: template<> 9642: struct __remove_unsigned 9642: { typedef long long __type; }; 9642: 9642: 9642: template<> 9642: struct __remove_unsigned; 9642: 9642: template<> 9642: struct __remove_unsigned; 9642: 9642: 9642: 9642: template 9642: constexpr 9642: inline bool 9642: __is_null_pointer(_Type* __ptr) 9642: { return __ptr == 0; } 9642: 9642: template 9642: constexpr 9642: inline bool 9642: __is_null_pointer(_Type) 9642: { return false; } 9642: 9642: 9642: constexpr bool 9642: __is_null_pointer(std::nullptr_t) 9642: { return true; } 9642: 9642: 9642: 9642: 9642: template::__value> 9642: struct __promote 9642: { typedef double __type; }; 9642: 9642: 9642: 9642: 9642: template 9642: struct __promote<_Tp, false> 9642: { }; 9642: 9642: template<> 9642: struct __promote 9642: { typedef long double __type; }; 9642: 9642: template<> 9642: struct __promote 9642: { typedef double __type; }; 9642: 9642: template<> 9642: struct __promote 9642: { typedef float __type; }; 9642: # 225 "/usr/include/c++/13/ext/type_traits.h" 3 9642: template 9642: using __promoted_t = decltype((typename __promote<_Tp>::__type(0) + ...)); 9642: 9642: 9642: 9642: template 9642: using __promote_2 = __promote<__promoted_t<_Tp, _Up>>; 9642: 9642: template 9642: using __promote_3 = __promote<__promoted_t<_Tp, _Up, _Vp>>; 9642: 9642: template 9642: using __promote_4 = __promote<__promoted_t<_Tp, _Up, _Vp, _Wp>>; 9642: # 269 "/usr/include/c++/13/ext/type_traits.h" 3 9642: 9642: } 9642: } 9642: # 63 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 9642: # 1 "/usr/include/c++/13/ext/numeric_traits.h" 1 3 9642: # 32 "/usr/include/c++/13/ext/numeric_traits.h" 3 9642: 9642: # 33 "/usr/include/c++/13/ext/numeric_traits.h" 3 9642: 9642: 9642: 9642: 9642: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 50 "/usr/include/c++/13/ext/numeric_traits.h" 3 9642: template 9642: struct __is_integer_nonstrict 9642: : public std::__is_integer<_Tp> 9642: { 9642: using std::__is_integer<_Tp>::__value; 9642: 9642: 9642: enum { __width = __value ? sizeof(_Tp) * 8 : 0 }; 9642: }; 9642: 9642: template 9642: struct __numeric_traits_integer 9642: { 9642: 9642: static_assert(__is_integer_nonstrict<_Value>::__value, 9642: "invalid specialization"); 9642: 9642: 9642: 9642: 9642: static const bool __is_signed = (_Value)(-1) < 0; 9642: static const int __digits 9642: = __is_integer_nonstrict<_Value>::__width - __is_signed; 9642: 9642: 9642: static const _Value __max = __is_signed 9642: ? (((((_Value)1 << (__digits - 1)) - 1) << 1) + 1) 9642: : ~(_Value)0; 9642: static const _Value __min = __is_signed ? -__max - 1 : (_Value)0; 9642: }; 9642: 9642: template 9642: const _Value __numeric_traits_integer<_Value>::__min; 9642: 9642: template 9642: const _Value __numeric_traits_integer<_Value>::__max; 9642: 9642: template 9642: const bool __numeric_traits_integer<_Value>::__is_signed; 9642: 9642: template 9642: const int __numeric_traits_integer<_Value>::__digits; 9642: # 137 "/usr/include/c++/13/ext/numeric_traits.h" 3 9642: template 9642: using __int_traits = __numeric_traits_integer<_Tp>; 9642: # 157 "/usr/include/c++/13/ext/numeric_traits.h" 3 9642: template 9642: struct __numeric_traits_floating 9642: { 9642: 9642: static const int __max_digits10 = (2 + (std::__are_same<_Value, float>::__value ? 24 : std::__are_same<_Value, double>::__value ? 53 : 53) * 643L / 2136); 9642: 9642: 9642: static const bool __is_signed = true; 9642: static const int __digits10 = (std::__are_same<_Value, float>::__value ? 6 : std::__are_same<_Value, double>::__value ? 15 : 15); 9642: static const int __max_exponent10 = (std::__are_same<_Value, float>::__value ? 38 : std::__are_same<_Value, double>::__value ? 308 : 308); 9642: }; 9642: 9642: template 9642: const int __numeric_traits_floating<_Value>::__max_digits10; 9642: 9642: template 9642: const bool __numeric_traits_floating<_Value>::__is_signed; 9642: 9642: template 9642: const int __numeric_traits_floating<_Value>::__digits10; 9642: 9642: template 9642: const int __numeric_traits_floating<_Value>::__max_exponent10; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct __numeric_traits 9642: : public __numeric_traits_integer<_Value> 9642: { }; 9642: 9642: template<> 9642: struct __numeric_traits 9642: : public __numeric_traits_floating 9642: { }; 9642: 9642: template<> 9642: struct __numeric_traits 9642: : public __numeric_traits_floating 9642: { }; 9642: 9642: template<> 9642: struct __numeric_traits 9642: : public __numeric_traits_floating 9642: { }; 9642: # 238 "/usr/include/c++/13/ext/numeric_traits.h" 3 9642: 9642: } 9642: # 64 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 9642: # 1 "/usr/include/c++/13/bits/stl_pair.h" 1 3 9642: # 62 "/usr/include/c++/13/bits/stl_pair.h" 3 9642: # 1 "/usr/include/c++/13/bits/utility.h" 1 3 9642: # 36 "/usr/include/c++/13/bits/utility.h" 3 9642: 9642: # 37 "/usr/include/c++/13/bits/utility.h" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: template 9642: struct tuple_size; 9642: 9642: 9642: 9642: 9642: 9642: template::type, 9642: typename = typename enable_if::value>::type, 9642: size_t = tuple_size<_Tp>::value> 9642: using __enable_if_has_tuple_size = _Tp; 9642: 9642: template 9642: struct tuple_size> 9642: : public tuple_size<_Tp> { }; 9642: 9642: template 9642: struct tuple_size> 9642: : public tuple_size<_Tp> { }; 9642: 9642: template 9642: struct tuple_size> 9642: : public tuple_size<_Tp> { }; 9642: 9642: 9642: template 9642: inline constexpr size_t tuple_size_v = tuple_size<_Tp>::value; 9642: 9642: 9642: 9642: template 9642: struct tuple_element; 9642: 9642: 9642: template 9642: using __tuple_element_t = typename tuple_element<__i, _Tp>::type; 9642: 9642: template 9642: struct tuple_element<__i, const _Tp> 9642: { 9642: using type = const __tuple_element_t<__i, _Tp>; 9642: }; 9642: 9642: template 9642: struct tuple_element<__i, volatile _Tp> 9642: { 9642: using type = volatile __tuple_element_t<__i, _Tp>; 9642: }; 9642: 9642: template 9642: struct tuple_element<__i, const volatile _Tp> 9642: { 9642: using type = const volatile __tuple_element_t<__i, _Tp>; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: constexpr size_t 9642: __find_uniq_type_in_pack() 9642: { 9642: constexpr size_t __sz = sizeof...(_Types); 9642: constexpr bool __found[__sz] = { __is_same(_Tp, _Types) ... }; 9642: size_t __n = __sz; 9642: for (size_t __i = 0; __i < __sz; ++__i) 9642: { 9642: if (__found[__i]) 9642: { 9642: if (__n < __sz) 9642: return __sz; 9642: __n = __i; 9642: } 9642: } 9642: return __n; 9642: } 9642: # 134 "/usr/include/c++/13/bits/utility.h" 3 9642: template 9642: using tuple_element_t = typename tuple_element<__i, _Tp>::type; 9642: 9642: 9642: 9642: 9642: template struct _Index_tuple { }; 9642: 9642: 9642: template 9642: struct _Build_index_tuple 9642: { 9642: # 154 "/usr/include/c++/13/bits/utility.h" 3 9642: using __type = _Index_tuple<__integer_pack(_Num)...>; 9642: 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct integer_sequence 9642: { 9642: 9642: 9642: 9642: typedef _Tp value_type; 9642: static constexpr size_t size() noexcept { return sizeof...(_Idx); } 9642: }; 9642: 9642: 9642: template 9642: using make_integer_sequence 9642: 9642: 9642: 9642: = integer_sequence<_Tp, __integer_pack(_Tp(_Num))...>; 9642: 9642: 9642: 9642: template 9642: using index_sequence = integer_sequence; 9642: 9642: 9642: template 9642: using make_index_sequence = make_integer_sequence; 9642: 9642: 9642: template 9642: using index_sequence_for = make_index_sequence; 9642: 9642: 9642: 9642: struct in_place_t { 9642: explicit in_place_t() = default; 9642: }; 9642: 9642: inline constexpr in_place_t in_place{}; 9642: 9642: template struct in_place_type_t 9642: { 9642: explicit in_place_type_t() = default; 9642: }; 9642: 9642: template 9642: inline constexpr in_place_type_t<_Tp> in_place_type{}; 9642: 9642: template struct in_place_index_t 9642: { 9642: explicit in_place_index_t() = default; 9642: }; 9642: 9642: template 9642: inline constexpr in_place_index_t<_Idx> in_place_index{}; 9642: 9642: template 9642: inline constexpr bool __is_in_place_type_v = false; 9642: 9642: template 9642: inline constexpr bool __is_in_place_type_v> = true; 9642: 9642: template 9642: using __is_in_place_type = bool_constant<__is_in_place_type_v<_Tp>>; 9642: 9642: 9642: 9642: 9642: template 9642: struct _Nth_type 9642: { }; 9642: 9642: template 9642: struct _Nth_type<0, _Tp0, _Rest...> 9642: { using type = _Tp0; }; 9642: 9642: template 9642: struct _Nth_type<1, _Tp0, _Tp1, _Rest...> 9642: { using type = _Tp1; }; 9642: 9642: template 9642: struct _Nth_type<2, _Tp0, _Tp1, _Tp2, _Rest...> 9642: { using type = _Tp2; }; 9642: 9642: template 9642: 9642: 9642: 9642: struct _Nth_type<_Np, _Tp0, _Tp1, _Tp2, _Rest...> 9642: : _Nth_type<_Np - 3, _Rest...> 9642: { }; 9642: 9642: 9642: template 9642: struct _Nth_type<0, _Tp0, _Tp1, _Tp2, _Rest...> 9642: { using type = _Tp0; }; 9642: 9642: template 9642: struct _Nth_type<1, _Tp0, _Tp1, _Tp2, _Rest...> 9642: { using type = _Tp1; }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 63 "/usr/include/c++/13/bits/stl_pair.h" 2 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 80 "/usr/include/c++/13/bits/stl_pair.h" 3 9642: struct piecewise_construct_t { explicit piecewise_construct_t() = default; }; 9642: 9642: 9642: inline constexpr piecewise_construct_t piecewise_construct = 9642: piecewise_construct_t(); 9642: 9642: 9642: 9642: 9642: template 9642: class tuple; 9642: 9642: template 9642: struct _Index_tuple; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _PCC 9642: { 9642: template 9642: static constexpr bool _ConstructiblePair() 9642: { 9642: return __and_, 9642: is_constructible<_T2, const _U2&>>::value; 9642: } 9642: 9642: template 9642: static constexpr bool _ImplicitlyConvertiblePair() 9642: { 9642: return __and_, 9642: is_convertible>::value; 9642: } 9642: 9642: template 9642: static constexpr bool _MoveConstructiblePair() 9642: { 9642: return __and_, 9642: is_constructible<_T2, _U2&&>>::value; 9642: } 9642: 9642: template 9642: static constexpr bool _ImplicitlyMoveConvertiblePair() 9642: { 9642: return __and_, 9642: is_convertible<_U2&&, _T2>>::value; 9642: } 9642: }; 9642: 9642: template 9642: struct _PCC 9642: { 9642: template 9642: static constexpr bool _ConstructiblePair() 9642: { 9642: return false; 9642: } 9642: 9642: template 9642: static constexpr bool _ImplicitlyConvertiblePair() 9642: { 9642: return false; 9642: } 9642: 9642: template 9642: static constexpr bool _MoveConstructiblePair() 9642: { 9642: return false; 9642: } 9642: 9642: template 9642: static constexpr bool _ImplicitlyMoveConvertiblePair() 9642: { 9642: return false; 9642: } 9642: }; 9642: 9642: 9642: 9642: template class __pair_base 9642: { 9642: 9642: template friend struct pair; 9642: __pair_base() = default; 9642: ~__pair_base() = default; 9642: __pair_base(const __pair_base&) = default; 9642: __pair_base& operator=(const __pair_base&) = delete; 9642: 9642: }; 9642: # 186 "/usr/include/c++/13/bits/stl_pair.h" 3 9642: template 9642: struct pair 9642: : public __pair_base<_T1, _T2> 9642: { 9642: typedef _T1 first_type; 9642: typedef _T2 second_type; 9642: 9642: _T1 first; 9642: _T2 second; 9642: 9642: 9642: constexpr pair(const pair&) = default; 9642: constexpr pair(pair&&) = default; 9642: 9642: template 9642: 9642: pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>); 9642: 9642: 9642: void 9642: swap(pair& __p) 9642: noexcept(__and_<__is_nothrow_swappable<_T1>, 9642: __is_nothrow_swappable<_T2>>::value) 9642: { 9642: using std::swap; 9642: swap(first, __p.first); 9642: swap(second, __p.second); 9642: } 9642: # 234 "/usr/include/c++/13/bits/stl_pair.h" 3 9642: private: 9642: template 9642: 9642: pair(tuple<_Args1...>&, tuple<_Args2...>&, 9642: _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>); 9642: public: 9642: # 525 "/usr/include/c++/13/bits/stl_pair.h" 3 9642: template , 9642: __is_implicitly_default_constructible<_U2>> 9642: ::value, bool>::type = true> 9642: constexpr pair() 9642: : first(), second() { } 9642: 9642: template , 9642: is_default_constructible<_U2>, 9642: __not_< 9642: __and_<__is_implicitly_default_constructible<_U1>, 9642: __is_implicitly_default_constructible<_U2>>>> 9642: ::value, bool>::type = false> 9642: explicit constexpr pair() 9642: : first(), second() { } 9642: 9642: 9642: 9642: using _PCCP = _PCC; 9642: 9642: 9642: 9642: template() 9642: && _PCCP::template 9642: _ImplicitlyConvertiblePair<_U1, _U2>(), 9642: bool>::type=true> 9642: constexpr pair(const _T1& __a, const _T2& __b) 9642: : first(__a), second(__b) { } 9642: 9642: 9642: template() 9642: && !_PCCP::template 9642: _ImplicitlyConvertiblePair<_U1, _U2>(), 9642: bool>::type=false> 9642: explicit constexpr pair(const _T1& __a, const _T2& __b) 9642: : first(__a), second(__b) { } 9642: 9642: 9642: 9642: template 9642: using _PCCFP = _PCC::value 9642: || !is_same<_T2, _U2>::value, 9642: _T1, _T2>; 9642: 9642: 9642: template::template 9642: _ConstructiblePair<_U1, _U2>() 9642: && _PCCFP<_U1, _U2>::template 9642: _ImplicitlyConvertiblePair<_U1, _U2>(), 9642: bool>::type=true> 9642: constexpr pair(const pair<_U1, _U2>& __p) 9642: : first(__p.first), second(__p.second) 9642: { ; } 9642: 9642: template::template 9642: _ConstructiblePair<_U1, _U2>() 9642: && !_PCCFP<_U1, _U2>::template 9642: _ImplicitlyConvertiblePair<_U1, _U2>(), 9642: bool>::type=false> 9642: explicit constexpr pair(const pair<_U1, _U2>& __p) 9642: : first(__p.first), second(__p.second) 9642: { ; } 9642: # 609 "/usr/include/c++/13/bits/stl_pair.h" 3 9642: private: 9642: 9642: 9642: 9642: struct __zero_as_null_pointer_constant 9642: { 9642: __zero_as_null_pointer_constant(int __zero_as_null_pointer_constant::*) 9642: { } 9642: template::value>> 9642: __zero_as_null_pointer_constant(_Tp) = delete; 9642: }; 9642: 9642: public: 9642: 9642: 9642: 9642: 9642: template>, 9642: is_pointer<_T2>, 9642: is_constructible<_T1, _U1>, 9642: __not_>, 9642: is_convertible<_U1, _T1>>::value, 9642: bool> = true> 9642: __attribute__ ((__deprecated__ ("use 'nullptr' instead of '0' to " "initialize std::pair of move-only " "type and pointer"))) 9642: constexpr 9642: pair(_U1&& __x, __zero_as_null_pointer_constant, ...) 9642: : first(std::forward<_U1>(__x)), second(nullptr) 9642: { ; } 9642: 9642: template>, 9642: is_pointer<_T2>, 9642: is_constructible<_T1, _U1>, 9642: __not_>, 9642: __not_>>::value, 9642: bool> = false> 9642: __attribute__ ((__deprecated__ ("use 'nullptr' instead of '0' to " "initialize std::pair of move-only " "type and pointer"))) 9642: explicit constexpr 9642: pair(_U1&& __x, __zero_as_null_pointer_constant, ...) 9642: : first(std::forward<_U1>(__x)), second(nullptr) 9642: { ; } 9642: 9642: template, 9642: __not_>, 9642: is_constructible<_T2, _U2>, 9642: __not_>, 9642: is_convertible<_U2, _T2>>::value, 9642: bool> = true> 9642: __attribute__ ((__deprecated__ ("use 'nullptr' instead of '0' to " "initialize std::pair of move-only " "type and pointer"))) 9642: constexpr 9642: pair(__zero_as_null_pointer_constant, _U2&& __y, ...) 9642: : first(nullptr), second(std::forward<_U2>(__y)) 9642: { ; } 9642: 9642: template, 9642: __not_>, 9642: is_constructible<_T2, _U2>, 9642: __not_>, 9642: __not_>>::value, 9642: bool> = false> 9642: __attribute__ ((__deprecated__ ("use 'nullptr' instead of '0' to " "initialize std::pair of move-only " "type and pointer"))) 9642: explicit constexpr 9642: pair(__zero_as_null_pointer_constant, _U2&& __y, ...) 9642: : first(nullptr), second(std::forward<_U2>(__y)) 9642: { ; } 9642: 9642: 9642: 9642: template() 9642: && _PCCP::template 9642: _ImplicitlyMoveConvertiblePair<_U1, _U2>(), 9642: bool>::type=true> 9642: constexpr pair(_U1&& __x, _U2&& __y) 9642: : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) 9642: { ; } 9642: 9642: template() 9642: && !_PCCP::template 9642: _ImplicitlyMoveConvertiblePair<_U1, _U2>(), 9642: bool>::type=false> 9642: explicit constexpr pair(_U1&& __x, _U2&& __y) 9642: : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) 9642: { ; } 9642: 9642: 9642: template::template 9642: _MoveConstructiblePair<_U1, _U2>() 9642: && _PCCFP<_U1, _U2>::template 9642: _ImplicitlyMoveConvertiblePair<_U1, _U2>(), 9642: bool>::type=true> 9642: constexpr pair(pair<_U1, _U2>&& __p) 9642: : first(std::forward<_U1>(__p.first)), 9642: second(std::forward<_U2>(__p.second)) 9642: { ; } 9642: 9642: template::template 9642: _MoveConstructiblePair<_U1, _U2>() 9642: && !_PCCFP<_U1, _U2>::template 9642: _ImplicitlyMoveConvertiblePair<_U1, _U2>(), 9642: bool>::type=false> 9642: explicit constexpr pair(pair<_U1, _U2>&& __p) 9642: : first(std::forward<_U1>(__p.first)), 9642: second(std::forward<_U2>(__p.second)) 9642: { ; } 9642: 9642: 9642: 9642: pair& 9642: operator=(__conditional_t<__and_, 9642: is_copy_assignable<_T2>>::value, 9642: const pair&, const __nonesuch&> __p) 9642: { 9642: first = __p.first; 9642: second = __p.second; 9642: return *this; 9642: } 9642: 9642: pair& 9642: operator=(__conditional_t<__and_, 9642: is_move_assignable<_T2>>::value, 9642: pair&&, __nonesuch&&> __p) 9642: noexcept(__and_, 9642: is_nothrow_move_assignable<_T2>>::value) 9642: { 9642: first = std::forward(__p.first); 9642: second = std::forward(__p.second); 9642: return *this; 9642: } 9642: 9642: template 9642: typename enable_if<__and_, 9642: is_assignable<_T2&, const _U2&>>::value, 9642: pair&>::type 9642: operator=(const pair<_U1, _U2>& __p) 9642: { 9642: first = __p.first; 9642: second = __p.second; 9642: return *this; 9642: } 9642: 9642: template 9642: typename enable_if<__and_, 9642: is_assignable<_T2&, _U2&&>>::value, 9642: pair&>::type 9642: operator=(pair<_U1, _U2>&& __p) 9642: { 9642: first = std::forward<_U1>(__p.first); 9642: second = std::forward<_U2>(__p.second); 9642: return *this; 9642: } 9642: # 801 "/usr/include/c++/13/bits/stl_pair.h" 3 9642: }; 9642: 9642: 9642: 9642: 9642: template pair(_T1, _T2) -> pair<_T1, _T2>; 9642: 9642: 9642: 9642: template 9642: inline constexpr bool 9642: operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) 9642: { return __x.first == __y.first && __x.second == __y.second; } 9642: # 833 "/usr/include/c++/13/bits/stl_pair.h" 3 9642: template 9642: inline constexpr bool 9642: operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) 9642: { return __x.first < __y.first 9642: || (!(__y.first < __x.first) && __x.second < __y.second); } 9642: 9642: 9642: template 9642: inline constexpr bool 9642: operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) 9642: { return !(__x == __y); } 9642: 9642: 9642: template 9642: inline constexpr bool 9642: operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) 9642: { return __y < __x; } 9642: 9642: 9642: template 9642: inline constexpr bool 9642: operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) 9642: { return !(__y < __x); } 9642: 9642: 9642: template 9642: inline constexpr bool 9642: operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) 9642: { return !(__x < __y); } 9642: # 870 "/usr/include/c++/13/bits/stl_pair.h" 3 9642: template 9642: inline 9642: 9642: 9642: typename enable_if<__and_<__is_swappable<_T1>, 9642: __is_swappable<_T2>>::value>::type 9642: 9642: 9642: 9642: swap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y) 9642: noexcept(noexcept(__x.swap(__y))) 9642: { __x.swap(__y); } 9642: # 893 "/usr/include/c++/13/bits/stl_pair.h" 3 9642: template 9642: typename enable_if, 9642: __is_swappable<_T2>>::value>::type 9642: swap(pair<_T1, _T2>&, pair<_T1, _T2>&) = delete; 9642: # 919 "/usr/include/c++/13/bits/stl_pair.h" 3 9642: template 9642: constexpr pair::__type, 9642: typename __decay_and_strip<_T2>::__type> 9642: make_pair(_T1&& __x, _T2&& __y) 9642: { 9642: typedef typename __decay_and_strip<_T1>::__type __ds_type1; 9642: typedef typename __decay_and_strip<_T2>::__type __ds_type2; 9642: typedef pair<__ds_type1, __ds_type2> __pair_type; 9642: return __pair_type(std::forward<_T1>(__x), std::forward<_T2>(__y)); 9642: } 9642: # 942 "/usr/include/c++/13/bits/stl_pair.h" 3 9642: template 9642: struct __is_tuple_like_impl> : true_type 9642: { }; 9642: 9642: 9642: 9642: template 9642: struct tuple_size> 9642: : public integral_constant { }; 9642: 9642: 9642: template 9642: struct tuple_element<0, pair<_Tp1, _Tp2>> 9642: { typedef _Tp1 type; }; 9642: 9642: 9642: template 9642: struct tuple_element<1, pair<_Tp1, _Tp2>> 9642: { typedef _Tp2 type; }; 9642: 9642: 9642: template 9642: inline constexpr size_t tuple_size_v> = 2; 9642: 9642: template 9642: inline constexpr size_t tuple_size_v> = 2; 9642: 9642: template 9642: inline constexpr bool __is_pair = false; 9642: 9642: template 9642: inline constexpr bool __is_pair> = true; 9642: 9642: 9642: 9642: template 9642: struct __pair_get; 9642: 9642: template<> 9642: struct __pair_get<0> 9642: { 9642: template 9642: static constexpr _Tp1& 9642: __get(pair<_Tp1, _Tp2>& __pair) noexcept 9642: { return __pair.first; } 9642: 9642: template 9642: static constexpr _Tp1&& 9642: __move_get(pair<_Tp1, _Tp2>&& __pair) noexcept 9642: { return std::forward<_Tp1>(__pair.first); } 9642: 9642: template 9642: static constexpr const _Tp1& 9642: __const_get(const pair<_Tp1, _Tp2>& __pair) noexcept 9642: { return __pair.first; } 9642: 9642: template 9642: static constexpr const _Tp1&& 9642: __const_move_get(const pair<_Tp1, _Tp2>&& __pair) noexcept 9642: { return std::forward(__pair.first); } 9642: }; 9642: 9642: template<> 9642: struct __pair_get<1> 9642: { 9642: template 9642: static constexpr _Tp2& 9642: __get(pair<_Tp1, _Tp2>& __pair) noexcept 9642: { return __pair.second; } 9642: 9642: template 9642: static constexpr _Tp2&& 9642: __move_get(pair<_Tp1, _Tp2>&& __pair) noexcept 9642: { return std::forward<_Tp2>(__pair.second); } 9642: 9642: template 9642: static constexpr const _Tp2& 9642: __const_get(const pair<_Tp1, _Tp2>& __pair) noexcept 9642: { return __pair.second; } 9642: 9642: template 9642: static constexpr const _Tp2&& 9642: __const_move_get(const pair<_Tp1, _Tp2>&& __pair) noexcept 9642: { return std::forward(__pair.second); } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type& 9642: get(pair<_Tp1, _Tp2>& __in) noexcept 9642: { return __pair_get<_Int>::__get(__in); } 9642: 9642: template 9642: constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&& 9642: get(pair<_Tp1, _Tp2>&& __in) noexcept 9642: { return __pair_get<_Int>::__move_get(std::move(__in)); } 9642: 9642: template 9642: constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type& 9642: get(const pair<_Tp1, _Tp2>& __in) noexcept 9642: { return __pair_get<_Int>::__const_get(__in); } 9642: 9642: template 9642: constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&& 9642: get(const pair<_Tp1, _Tp2>&& __in) noexcept 9642: { return __pair_get<_Int>::__const_move_get(std::move(__in)); } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: constexpr _Tp& 9642: get(pair<_Tp, _Up>& __p) noexcept 9642: { return __p.first; } 9642: 9642: template 9642: constexpr const _Tp& 9642: get(const pair<_Tp, _Up>& __p) noexcept 9642: { return __p.first; } 9642: 9642: template 9642: constexpr _Tp&& 9642: get(pair<_Tp, _Up>&& __p) noexcept 9642: { return std::move(__p.first); } 9642: 9642: template 9642: constexpr const _Tp&& 9642: get(const pair<_Tp, _Up>&& __p) noexcept 9642: { return std::move(__p.first); } 9642: 9642: template 9642: constexpr _Tp& 9642: get(pair<_Up, _Tp>& __p) noexcept 9642: { return __p.second; } 9642: 9642: template 9642: constexpr const _Tp& 9642: get(const pair<_Up, _Tp>& __p) noexcept 9642: { return __p.second; } 9642: 9642: template 9642: constexpr _Tp&& 9642: get(pair<_Up, _Tp>&& __p) noexcept 9642: { return std::move(__p.second); } 9642: 9642: template 9642: constexpr const _Tp&& 9642: get(const pair<_Up, _Tp>&& __p) noexcept 9642: { return std::move(__p.second); } 9642: # 1118 "/usr/include/c++/13/bits/stl_pair.h" 3 9642: 9642: } 9642: # 65 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 9642: # 1 "/usr/include/c++/13/bits/stl_iterator_base_types.h" 1 3 9642: # 62 "/usr/include/c++/13/bits/stl_iterator_base_types.h" 3 9642: 9642: # 63 "/usr/include/c++/13/bits/stl_iterator_base_types.h" 3 9642: # 74 "/usr/include/c++/13/bits/stl_iterator_base_types.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 93 "/usr/include/c++/13/bits/stl_iterator_base_types.h" 3 9642: struct input_iterator_tag { }; 9642: 9642: 9642: struct output_iterator_tag { }; 9642: 9642: 9642: struct forward_iterator_tag : public input_iterator_tag { }; 9642: 9642: 9642: 9642: struct bidirectional_iterator_tag : public forward_iterator_tag { }; 9642: 9642: 9642: 9642: struct random_access_iterator_tag : public bidirectional_iterator_tag { }; 9642: # 125 "/usr/include/c++/13/bits/stl_iterator_base_types.h" 3 9642: template 9642: struct [[__deprecated__]] iterator 9642: { 9642: 9642: typedef _Category iterator_category; 9642: 9642: typedef _Tp value_type; 9642: 9642: typedef _Distance difference_type; 9642: 9642: typedef _Pointer pointer; 9642: 9642: typedef _Reference reference; 9642: }; 9642: # 149 "/usr/include/c++/13/bits/stl_iterator_base_types.h" 3 9642: template 9642: struct iterator_traits; 9642: 9642: 9642: 9642: 9642: template> 9642: struct __iterator_traits { }; 9642: 9642: 9642: 9642: template 9642: struct __iterator_traits<_Iterator, 9642: __void_t> 9642: { 9642: typedef typename _Iterator::iterator_category iterator_category; 9642: typedef typename _Iterator::value_type value_type; 9642: typedef typename _Iterator::difference_type difference_type; 9642: typedef typename _Iterator::pointer pointer; 9642: typedef typename _Iterator::reference reference; 9642: }; 9642: 9642: 9642: template 9642: struct iterator_traits 9642: : public __iterator_traits<_Iterator> { }; 9642: # 209 "/usr/include/c++/13/bits/stl_iterator_base_types.h" 3 9642: template 9642: struct iterator_traits<_Tp*> 9642: { 9642: typedef random_access_iterator_tag iterator_category; 9642: typedef _Tp value_type; 9642: typedef ptrdiff_t difference_type; 9642: typedef _Tp* pointer; 9642: typedef _Tp& reference; 9642: }; 9642: 9642: 9642: template 9642: struct iterator_traits 9642: { 9642: typedef random_access_iterator_tag iterator_category; 9642: typedef _Tp value_type; 9642: typedef ptrdiff_t difference_type; 9642: typedef const _Tp* pointer; 9642: typedef const _Tp& reference; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: __attribute__((__always_inline__)) 9642: inline constexpr 9642: typename iterator_traits<_Iter>::iterator_category 9642: __iterator_category(const _Iter&) 9642: { return typename iterator_traits<_Iter>::iterator_category(); } 9642: 9642: 9642: 9642: 9642: template 9642: using __iter_category_t 9642: = typename iterator_traits<_Iter>::iterator_category; 9642: 9642: template 9642: using _RequireInputIter = 9642: __enable_if_t, 9642: input_iterator_tag>::value>; 9642: 9642: template> 9642: struct __is_random_access_iter 9642: : is_base_of 9642: { 9642: typedef is_base_of _Base; 9642: enum { __value = _Base::value }; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 66 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 9642: # 1 "/usr/include/c++/13/bits/stl_iterator_base_funcs.h" 1 3 9642: # 62 "/usr/include/c++/13/bits/stl_iterator_base_funcs.h" 3 9642: 9642: # 63 "/usr/include/c++/13/bits/stl_iterator_base_funcs.h" 3 9642: 9642: # 1 "/usr/include/c++/13/bits/concept_check.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/concept_check.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/concept_check.h" 3 9642: # 65 "/usr/include/c++/13/bits/stl_iterator_base_funcs.h" 2 3 9642: # 1 "/usr/include/c++/13/debug/assertions.h" 1 3 9642: # 66 "/usr/include/c++/13/bits/stl_iterator_base_funcs.h" 2 3 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: template struct _List_iterator; 9642: template struct _List_const_iterator; 9642: 9642: 9642: template 9642: inline constexpr 9642: typename iterator_traits<_InputIterator>::difference_type 9642: __distance(_InputIterator __first, _InputIterator __last, 9642: input_iterator_tag) 9642: { 9642: 9642: 9642: 9642: typename iterator_traits<_InputIterator>::difference_type __n = 0; 9642: while (__first != __last) 9642: { 9642: ++__first; 9642: ++__n; 9642: } 9642: return __n; 9642: } 9642: 9642: template 9642: __attribute__((__always_inline__)) 9642: inline constexpr 9642: typename iterator_traits<_RandomAccessIterator>::difference_type 9642: __distance(_RandomAccessIterator __first, _RandomAccessIterator __last, 9642: random_access_iterator_tag) 9642: { 9642: 9642: 9642: 9642: return __last - __first; 9642: } 9642: 9642: 9642: 9642: template 9642: ptrdiff_t 9642: __distance(std::_List_iterator<_Tp>, 9642: std::_List_iterator<_Tp>, 9642: input_iterator_tag); 9642: 9642: template 9642: ptrdiff_t 9642: __distance(std::_List_const_iterator<_Tp>, 9642: std::_List_const_iterator<_Tp>, 9642: input_iterator_tag); 9642: 9642: 9642: 9642: 9642: template 9642: void 9642: __distance(_OutputIterator, _OutputIterator, output_iterator_tag) = delete; 9642: # 144 "/usr/include/c++/13/bits/stl_iterator_base_funcs.h" 3 9642: template 9642: [[__nodiscard__]] __attribute__((__always_inline__)) 9642: inline constexpr 9642: typename iterator_traits<_InputIterator>::difference_type 9642: distance(_InputIterator __first, _InputIterator __last) 9642: { 9642: 9642: return std::__distance(__first, __last, 9642: std::__iterator_category(__first)); 9642: } 9642: 9642: template 9642: inline constexpr void 9642: __advance(_InputIterator& __i, _Distance __n, input_iterator_tag) 9642: { 9642: 9642: 9642: do { if (std::__is_constant_evaluated() && !bool(__n >= 0)) __builtin_unreachable(); } while (false); 9642: while (__n--) 9642: ++__i; 9642: } 9642: 9642: template 9642: inline constexpr void 9642: __advance(_BidirectionalIterator& __i, _Distance __n, 9642: bidirectional_iterator_tag) 9642: { 9642: 9642: 9642: 9642: if (__n > 0) 9642: while (__n--) 9642: ++__i; 9642: else 9642: while (__n++) 9642: --__i; 9642: } 9642: 9642: template 9642: inline constexpr void 9642: __advance(_RandomAccessIterator& __i, _Distance __n, 9642: random_access_iterator_tag) 9642: { 9642: 9642: 9642: 9642: if (__builtin_constant_p(__n) && __n == 1) 9642: ++__i; 9642: else if (__builtin_constant_p(__n) && __n == -1) 9642: --__i; 9642: else 9642: __i += __n; 9642: } 9642: 9642: 9642: 9642: template 9642: void 9642: __advance(_OutputIterator&, _Distance, output_iterator_tag) = delete; 9642: # 217 "/usr/include/c++/13/bits/stl_iterator_base_funcs.h" 3 9642: template 9642: __attribute__((__always_inline__)) 9642: inline constexpr void 9642: advance(_InputIterator& __i, _Distance __n) 9642: { 9642: 9642: typename iterator_traits<_InputIterator>::difference_type __d = __n; 9642: std::__advance(__i, __d, std::__iterator_category(__i)); 9642: } 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] [[__gnu__::__always_inline__]] 9642: inline constexpr _InputIterator 9642: next(_InputIterator __x, typename 9642: iterator_traits<_InputIterator>::difference_type __n = 1) 9642: { 9642: 9642: 9642: std::advance(__x, __n); 9642: return __x; 9642: } 9642: 9642: template 9642: [[__nodiscard__]] [[__gnu__::__always_inline__]] 9642: inline constexpr _BidirectionalIterator 9642: prev(_BidirectionalIterator __x, typename 9642: iterator_traits<_BidirectionalIterator>::difference_type __n = 1) 9642: { 9642: 9642: 9642: 9642: std::advance(__x, -__n); 9642: return __x; 9642: } 9642: 9642: 9642: 9642: 9642: } 9642: # 67 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 9642: # 1 "/usr/include/c++/13/bits/stl_iterator.h" 1 3 9642: # 67 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: # 1 "/usr/include/c++/13/bits/ptr_traits.h" 1 3 9642: # 49 "/usr/include/c++/13/bits/ptr_traits.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: class __undefined; 9642: 9642: 9642: 9642: template 9642: struct __get_first_arg 9642: { using type = __undefined; }; 9642: 9642: template class _SomeTemplate, typename _Tp, 9642: typename... _Types> 9642: struct __get_first_arg<_SomeTemplate<_Tp, _Types...>> 9642: { using type = _Tp; }; 9642: 9642: 9642: 9642: template 9642: struct __replace_first_arg 9642: { }; 9642: 9642: template class _SomeTemplate, typename _Up, 9642: typename _Tp, typename... _Types> 9642: struct __replace_first_arg<_SomeTemplate<_Tp, _Types...>, _Up> 9642: { using type = _SomeTemplate<_Up, _Types...>; }; 9642: 9642: 9642: template 9642: struct __ptr_traits_elem : __get_first_arg<_Ptr> 9642: { }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct __ptr_traits_elem<_Ptr, __void_t> 9642: { using type = typename _Ptr::element_type; }; 9642: 9642: 9642: template 9642: using __ptr_traits_elem_t = typename __ptr_traits_elem<_Ptr>::type; 9642: 9642: 9642: 9642: 9642: template::value> 9642: struct __ptr_traits_ptr_to 9642: { 9642: using pointer = _Ptr; 9642: using element_type = _Elt; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: static pointer 9642: pointer_to(element_type& __r) 9642: 9642: 9642: 9642: 9642: 9642: { return pointer::pointer_to(__r); } 9642: }; 9642: 9642: 9642: template 9642: struct __ptr_traits_ptr_to<_Ptr, _Elt, true> 9642: { }; 9642: 9642: 9642: template 9642: struct __ptr_traits_ptr_to<_Tp*, _Tp, false> 9642: { 9642: using pointer = _Tp*; 9642: using element_type = _Tp; 9642: 9642: 9642: 9642: 9642: 9642: 9642: static pointer 9642: pointer_to(element_type& __r) noexcept 9642: { return std::addressof(__r); } 9642: }; 9642: 9642: template 9642: struct __ptr_traits_impl : __ptr_traits_ptr_to<_Ptr, _Elt> 9642: { 9642: private: 9642: template 9642: using __diff_t = typename _Tp::difference_type; 9642: 9642: template 9642: using __rebind = __type_identity>; 9642: 9642: public: 9642: 9642: using pointer = _Ptr; 9642: 9642: 9642: using element_type = _Elt; 9642: 9642: 9642: using difference_type = __detected_or_t; 9642: 9642: 9642: template 9642: using rebind = typename __detected_or_t<__replace_first_arg<_Ptr, _Up>, 9642: __rebind, _Ptr, _Up>::type; 9642: }; 9642: 9642: 9642: 9642: template 9642: struct __ptr_traits_impl<_Ptr, __undefined> 9642: { }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct pointer_traits : __ptr_traits_impl<_Ptr, __ptr_traits_elem_t<_Ptr>> 9642: { }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct pointer_traits<_Tp*> : __ptr_traits_ptr_to<_Tp*, _Tp> 9642: { 9642: 9642: typedef _Tp* pointer; 9642: 9642: typedef _Tp element_type; 9642: 9642: typedef ptrdiff_t difference_type; 9642: 9642: template using rebind = _Up*; 9642: }; 9642: 9642: 9642: template 9642: using __ptr_rebind = typename pointer_traits<_Ptr>::template rebind<_Tp>; 9642: 9642: template 9642: constexpr _Tp* 9642: __to_address(_Tp* __ptr) noexcept 9642: { 9642: static_assert(!std::is_function<_Tp>::value, "not a function pointer"); 9642: return __ptr; 9642: } 9642: 9642: 9642: template 9642: constexpr typename std::pointer_traits<_Ptr>::element_type* 9642: __to_address(const _Ptr& __ptr) 9642: { return std::__to_address(__ptr.operator->()); } 9642: # 266 "/usr/include/c++/13/bits/ptr_traits.h" 3 9642: 9642: } 9642: # 68 "/usr/include/c++/13/bits/stl_iterator.h" 2 3 9642: # 88 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 113 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: 9642: # 113 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: # 135 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: template 9642: class reverse_iterator 9642: : public iterator::iterator_category, 9642: typename iterator_traits<_Iterator>::value_type, 9642: typename iterator_traits<_Iterator>::difference_type, 9642: typename iterator_traits<_Iterator>::pointer, 9642: typename iterator_traits<_Iterator>::reference> 9642: { 9642: template 9642: friend class reverse_iterator; 9642: # 154 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: protected: 9642: _Iterator current; 9642: 9642: typedef iterator_traits<_Iterator> __traits_type; 9642: 9642: public: 9642: typedef _Iterator iterator_type; 9642: typedef typename __traits_type::pointer pointer; 9642: 9642: typedef typename __traits_type::difference_type difference_type; 9642: typedef typename __traits_type::reference reference; 9642: # 185 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: constexpr 9642: reverse_iterator() 9642: noexcept(noexcept(_Iterator())) 9642: : current() 9642: { } 9642: 9642: 9642: 9642: 9642: explicit constexpr 9642: reverse_iterator(iterator_type __x) 9642: noexcept(noexcept(_Iterator(__x))) 9642: : current(__x) 9642: { } 9642: 9642: 9642: 9642: 9642: constexpr 9642: reverse_iterator(const reverse_iterator& __x) 9642: noexcept(noexcept(_Iterator(__x.current))) 9642: : current(__x.current) 9642: { } 9642: 9642: 9642: reverse_iterator& operator=(const reverse_iterator&) = default; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: 9642: 9642: constexpr 9642: reverse_iterator(const reverse_iterator<_Iter>& __x) 9642: noexcept(noexcept(_Iterator(__x.current))) 9642: : current(__x.current) 9642: { } 9642: 9642: 9642: template 9642: 9642: 9642: 9642: 9642: constexpr 9642: reverse_iterator& 9642: operator=(const reverse_iterator<_Iter>& __x) 9642: noexcept(noexcept(current = __x.current)) 9642: { 9642: current = __x.current; 9642: return *this; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: constexpr iterator_type 9642: base() const 9642: noexcept(noexcept(_Iterator(current))) 9642: { return current; } 9642: # 262 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: [[__nodiscard__]] 9642: constexpr reference 9642: operator*() const 9642: { 9642: _Iterator __tmp = current; 9642: return *--__tmp; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: constexpr pointer 9642: operator->() const 9642: 9642: 9642: 9642: 9642: { 9642: 9642: 9642: _Iterator __tmp = current; 9642: --__tmp; 9642: return _S_to_pointer(__tmp); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: constexpr reverse_iterator& 9642: operator++() 9642: { 9642: --current; 9642: return *this; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: constexpr reverse_iterator 9642: operator++(int) 9642: { 9642: reverse_iterator __tmp = *this; 9642: --current; 9642: return __tmp; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: constexpr reverse_iterator& 9642: operator--() 9642: { 9642: ++current; 9642: return *this; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: constexpr reverse_iterator 9642: operator--(int) 9642: { 9642: reverse_iterator __tmp = *this; 9642: ++current; 9642: return __tmp; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: constexpr reverse_iterator 9642: operator+(difference_type __n) const 9642: { return reverse_iterator(current - __n); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: constexpr reverse_iterator& 9642: operator+=(difference_type __n) 9642: { 9642: current -= __n; 9642: return *this; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: constexpr reverse_iterator 9642: operator-(difference_type __n) const 9642: { return reverse_iterator(current + __n); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: constexpr reverse_iterator& 9642: operator-=(difference_type __n) 9642: { 9642: current += __n; 9642: return *this; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: constexpr reference 9642: operator[](difference_type __n) const 9642: { return *(*this + __n); } 9642: # 422 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: private: 9642: template 9642: static constexpr _Tp* 9642: _S_to_pointer(_Tp* __p) 9642: { return __p; } 9642: 9642: template 9642: static constexpr pointer 9642: _S_to_pointer(_Tp __t) 9642: { return __t.operator->(); } 9642: }; 9642: # 445 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator==(const reverse_iterator<_Iterator>& __x, 9642: const reverse_iterator<_Iterator>& __y) 9642: { return __x.base() == __y.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator<(const reverse_iterator<_Iterator>& __x, 9642: const reverse_iterator<_Iterator>& __y) 9642: { return __y.base() < __x.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator!=(const reverse_iterator<_Iterator>& __x, 9642: const reverse_iterator<_Iterator>& __y) 9642: { return !(__x == __y); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator>(const reverse_iterator<_Iterator>& __x, 9642: const reverse_iterator<_Iterator>& __y) 9642: { return __y < __x; } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator<=(const reverse_iterator<_Iterator>& __x, 9642: const reverse_iterator<_Iterator>& __y) 9642: { return !(__y < __x); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator>=(const reverse_iterator<_Iterator>& __x, 9642: const reverse_iterator<_Iterator>& __y) 9642: { return !(__x < __y); } 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator==(const reverse_iterator<_IteratorL>& __x, 9642: const reverse_iterator<_IteratorR>& __y) 9642: { return __x.base() == __y.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator<(const reverse_iterator<_IteratorL>& __x, 9642: const reverse_iterator<_IteratorR>& __y) 9642: { return __x.base() > __y.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator!=(const reverse_iterator<_IteratorL>& __x, 9642: const reverse_iterator<_IteratorR>& __y) 9642: { return __x.base() != __y.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator>(const reverse_iterator<_IteratorL>& __x, 9642: const reverse_iterator<_IteratorR>& __y) 9642: { return __x.base() < __y.base(); } 9642: 9642: template 9642: inline constexpr bool 9642: operator<=(const reverse_iterator<_IteratorL>& __x, 9642: const reverse_iterator<_IteratorR>& __y) 9642: { return __x.base() >= __y.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator>=(const reverse_iterator<_IteratorL>& __x, 9642: const reverse_iterator<_IteratorR>& __y) 9642: { return __x.base() <= __y.base(); } 9642: # 622 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr auto 9642: operator-(const reverse_iterator<_IteratorL>& __x, 9642: const reverse_iterator<_IteratorR>& __y) 9642: -> decltype(__y.base() - __x.base()) 9642: { return __y.base() - __x.base(); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr reverse_iterator<_Iterator> 9642: operator+(typename reverse_iterator<_Iterator>::difference_type __n, 9642: const reverse_iterator<_Iterator>& __x) 9642: { return reverse_iterator<_Iterator>(__x.base() - __n); } 9642: 9642: 9642: 9642: template 9642: inline constexpr reverse_iterator<_Iterator> 9642: __make_reverse_iterator(_Iterator __i) 9642: { return reverse_iterator<_Iterator>(__i); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr reverse_iterator<_Iterator> 9642: make_reverse_iterator(_Iterator __i) 9642: { return reverse_iterator<_Iterator>(__i); } 9642: # 666 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: template 9642: 9642: auto 9642: __niter_base(reverse_iterator<_Iterator> __it) 9642: -> decltype(__make_reverse_iterator(__niter_base(__it.base()))) 9642: { return __make_reverse_iterator(__niter_base(__it.base())); } 9642: 9642: template 9642: struct __is_move_iterator > 9642: : __is_move_iterator<_Iterator> 9642: { }; 9642: 9642: template 9642: 9642: auto 9642: __miter_base(reverse_iterator<_Iterator> __it) 9642: -> decltype(__make_reverse_iterator(__miter_base(__it.base()))) 9642: { return __make_reverse_iterator(__miter_base(__it.base())); } 9642: # 697 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: template 9642: class back_insert_iterator 9642: : public iterator 9642: { 9642: protected: 9642: _Container* container; 9642: 9642: public: 9642: 9642: typedef _Container container_type; 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: back_insert_iterator(_Container& __x) 9642: : container(std::__addressof(__x)) { } 9642: # 735 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: 9642: back_insert_iterator& 9642: operator=(const typename _Container::value_type& __value) 9642: { 9642: container->push_back(__value); 9642: return *this; 9642: } 9642: 9642: 9642: back_insert_iterator& 9642: operator=(typename _Container::value_type&& __value) 9642: { 9642: container->push_back(std::move(__value)); 9642: return *this; 9642: } 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: back_insert_iterator& 9642: operator*() 9642: { return *this; } 9642: 9642: 9642: 9642: back_insert_iterator& 9642: operator++() 9642: { return *this; } 9642: 9642: 9642: 9642: back_insert_iterator 9642: operator++(int) 9642: { return *this; } 9642: }; 9642: # 782 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline back_insert_iterator<_Container> 9642: back_inserter(_Container& __x) 9642: { return back_insert_iterator<_Container>(__x); } 9642: # 798 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: template 9642: class front_insert_iterator 9642: : public iterator 9642: { 9642: protected: 9642: _Container* container; 9642: 9642: public: 9642: 9642: typedef _Container container_type; 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: front_insert_iterator(_Container& __x) 9642: : container(std::__addressof(__x)) { } 9642: # 836 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: 9642: front_insert_iterator& 9642: operator=(const typename _Container::value_type& __value) 9642: { 9642: container->push_front(__value); 9642: return *this; 9642: } 9642: 9642: 9642: front_insert_iterator& 9642: operator=(typename _Container::value_type&& __value) 9642: { 9642: container->push_front(std::move(__value)); 9642: return *this; 9642: } 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: front_insert_iterator& 9642: operator*() 9642: { return *this; } 9642: 9642: 9642: 9642: front_insert_iterator& 9642: operator++() 9642: { return *this; } 9642: 9642: 9642: 9642: front_insert_iterator 9642: operator++(int) 9642: { return *this; } 9642: }; 9642: # 883 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline front_insert_iterator<_Container> 9642: front_inserter(_Container& __x) 9642: { return front_insert_iterator<_Container>(__x); } 9642: # 903 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: template 9642: class insert_iterator 9642: : public iterator 9642: { 9642: 9642: 9642: 9642: typedef typename _Container::iterator _Iter; 9642: 9642: protected: 9642: _Container* container; 9642: _Iter iter; 9642: 9642: public: 9642: 9642: typedef _Container container_type; 9642: # 928 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: 9642: insert_iterator(_Container& __x, _Iter __i) 9642: : container(std::__addressof(__x)), iter(__i) {} 9642: # 964 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: 9642: insert_iterator& 9642: operator=(const typename _Container::value_type& __value) 9642: { 9642: iter = container->insert(iter, __value); 9642: ++iter; 9642: return *this; 9642: } 9642: 9642: 9642: insert_iterator& 9642: operator=(typename _Container::value_type&& __value) 9642: { 9642: iter = container->insert(iter, std::move(__value)); 9642: ++iter; 9642: return *this; 9642: } 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: insert_iterator& 9642: operator*() 9642: { return *this; } 9642: 9642: 9642: 9642: insert_iterator& 9642: operator++() 9642: { return *this; } 9642: 9642: 9642: 9642: insert_iterator& 9642: operator++(int) 9642: { return *this; } 9642: }; 9642: 9642: #pragma GCC diagnostic pop 9642: # 1023 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline insert_iterator<_Container> 9642: inserter(_Container& __x, typename _Container::iterator __i) 9642: { return insert_iterator<_Container>(__x, __i); } 9642: 9642: 9642: 9642: 9642: 9642: } 9642: 9642: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 1046 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: template 9642: class __normal_iterator 9642: { 9642: protected: 9642: _Iterator _M_current; 9642: 9642: typedef std::iterator_traits<_Iterator> __traits_type; 9642: 9642: 9642: template 9642: using __convertible_from 9642: = std::__enable_if_t::value>; 9642: 9642: 9642: public: 9642: typedef _Iterator iterator_type; 9642: typedef typename __traits_type::iterator_category iterator_category; 9642: typedef typename __traits_type::value_type value_type; 9642: typedef typename __traits_type::difference_type difference_type; 9642: typedef typename __traits_type::reference reference; 9642: typedef typename __traits_type::pointer pointer; 9642: 9642: 9642: 9642: 9642: 9642: constexpr __normal_iterator() noexcept 9642: : _M_current(_Iterator()) { } 9642: 9642: explicit 9642: __normal_iterator(const _Iterator& __i) noexcept 9642: : _M_current(__i) { } 9642: 9642: 9642: 9642: template> 9642: 9642: __normal_iterator(const __normal_iterator<_Iter, _Container>& __i) 9642: noexcept 9642: # 1094 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: : _M_current(__i.base()) { } 9642: 9642: 9642: 9642: reference 9642: operator*() const noexcept 9642: { return *_M_current; } 9642: 9642: 9642: pointer 9642: operator->() const noexcept 9642: { return _M_current; } 9642: 9642: 9642: __normal_iterator& 9642: operator++() noexcept 9642: { 9642: ++_M_current; 9642: return *this; 9642: } 9642: 9642: 9642: __normal_iterator 9642: operator++(int) noexcept 9642: { return __normal_iterator(_M_current++); } 9642: 9642: 9642: 9642: __normal_iterator& 9642: operator--() noexcept 9642: { 9642: --_M_current; 9642: return *this; 9642: } 9642: 9642: 9642: __normal_iterator 9642: operator--(int) noexcept 9642: { return __normal_iterator(_M_current--); } 9642: 9642: 9642: 9642: reference 9642: operator[](difference_type __n) const noexcept 9642: { return _M_current[__n]; } 9642: 9642: 9642: __normal_iterator& 9642: operator+=(difference_type __n) noexcept 9642: { _M_current += __n; return *this; } 9642: 9642: 9642: __normal_iterator 9642: operator+(difference_type __n) const noexcept 9642: { return __normal_iterator(_M_current + __n); } 9642: 9642: 9642: __normal_iterator& 9642: operator-=(difference_type __n) noexcept 9642: { _M_current -= __n; return *this; } 9642: 9642: 9642: __normal_iterator 9642: operator-(difference_type __n) const noexcept 9642: { return __normal_iterator(_M_current - __n); } 9642: 9642: 9642: const _Iterator& 9642: base() const noexcept 9642: { return _M_current; } 9642: }; 9642: # 1214 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator==(const __normal_iterator<_IteratorL, _Container>& __lhs, 9642: const __normal_iterator<_IteratorR, _Container>& __rhs) 9642: noexcept 9642: { return __lhs.base() == __rhs.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator==(const __normal_iterator<_Iterator, _Container>& __lhs, 9642: const __normal_iterator<_Iterator, _Container>& __rhs) 9642: noexcept 9642: { return __lhs.base() == __rhs.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs, 9642: const __normal_iterator<_IteratorR, _Container>& __rhs) 9642: noexcept 9642: { return __lhs.base() != __rhs.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator!=(const __normal_iterator<_Iterator, _Container>& __lhs, 9642: const __normal_iterator<_Iterator, _Container>& __rhs) 9642: noexcept 9642: { return __lhs.base() != __rhs.base(); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<(const __normal_iterator<_IteratorL, _Container>& __lhs, 9642: const __normal_iterator<_IteratorR, _Container>& __rhs) 9642: noexcept 9642: { return __lhs.base() < __rhs.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<(const __normal_iterator<_Iterator, _Container>& __lhs, 9642: const __normal_iterator<_Iterator, _Container>& __rhs) 9642: noexcept 9642: { return __lhs.base() < __rhs.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator>(const __normal_iterator<_IteratorL, _Container>& __lhs, 9642: const __normal_iterator<_IteratorR, _Container>& __rhs) 9642: noexcept 9642: { return __lhs.base() > __rhs.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator>(const __normal_iterator<_Iterator, _Container>& __lhs, 9642: const __normal_iterator<_Iterator, _Container>& __rhs) 9642: noexcept 9642: { return __lhs.base() > __rhs.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs, 9642: const __normal_iterator<_IteratorR, _Container>& __rhs) 9642: noexcept 9642: { return __lhs.base() <= __rhs.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<=(const __normal_iterator<_Iterator, _Container>& __lhs, 9642: const __normal_iterator<_Iterator, _Container>& __rhs) 9642: noexcept 9642: { return __lhs.base() <= __rhs.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs, 9642: const __normal_iterator<_IteratorR, _Container>& __rhs) 9642: noexcept 9642: { return __lhs.base() >= __rhs.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator>=(const __normal_iterator<_Iterator, _Container>& __lhs, 9642: const __normal_iterator<_Iterator, _Container>& __rhs) 9642: noexcept 9642: { return __lhs.base() >= __rhs.base(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: 9642: [[__nodiscard__]] 9642: inline auto 9642: operator-(const __normal_iterator<_IteratorL, _Container>& __lhs, 9642: const __normal_iterator<_IteratorR, _Container>& __rhs) noexcept 9642: -> decltype(__lhs.base() - __rhs.base()) 9642: 9642: 9642: 9642: 9642: 9642: { return __lhs.base() - __rhs.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline typename __normal_iterator<_Iterator, _Container>::difference_type 9642: operator-(const __normal_iterator<_Iterator, _Container>& __lhs, 9642: const __normal_iterator<_Iterator, _Container>& __rhs) 9642: noexcept 9642: { return __lhs.base() - __rhs.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline __normal_iterator<_Iterator, _Container> 9642: operator+(typename __normal_iterator<_Iterator, _Container>::difference_type 9642: __n, const __normal_iterator<_Iterator, _Container>& __i) 9642: noexcept 9642: { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); } 9642: 9642: 9642: } 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: template 9642: 9642: _Iterator 9642: __niter_base(__gnu_cxx::__normal_iterator<_Iterator, _Container> __it) 9642: noexcept(std::is_nothrow_copy_constructible<_Iterator>::value) 9642: { return __it.base(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: constexpr auto 9642: __to_address(const __gnu_cxx::__normal_iterator<_Iterator, 9642: _Container>& __it) noexcept 9642: -> decltype(std::__to_address(__it.base())) 9642: { return std::__to_address(__it.base()); } 9642: # 1421 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: namespace __detail 9642: { 9642: # 1437 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: } 9642: # 1448 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: template 9642: class move_iterator 9642: 9642: 9642: 9642: { 9642: _Iterator _M_current; 9642: 9642: using __traits_type = iterator_traits<_Iterator>; 9642: 9642: using __base_ref = typename __traits_type::reference; 9642: 9642: 9642: template 9642: friend class move_iterator; 9642: # 1487 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: public: 9642: using iterator_type = _Iterator; 9642: # 1501 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: typedef typename __traits_type::iterator_category iterator_category; 9642: typedef typename __traits_type::value_type value_type; 9642: typedef typename __traits_type::difference_type difference_type; 9642: 9642: typedef _Iterator pointer; 9642: 9642: 9642: using reference 9642: = __conditional_t::value, 9642: typename remove_reference<__base_ref>::type&&, 9642: __base_ref>; 9642: 9642: 9642: constexpr 9642: move_iterator() 9642: : _M_current() { } 9642: 9642: explicit constexpr 9642: move_iterator(iterator_type __i) 9642: : _M_current(std::move(__i)) { } 9642: 9642: template 9642: 9642: 9642: 9642: constexpr 9642: move_iterator(const move_iterator<_Iter>& __i) 9642: : _M_current(__i._M_current) { } 9642: 9642: template 9642: 9642: 9642: 9642: 9642: constexpr 9642: move_iterator& operator=(const move_iterator<_Iter>& __i) 9642: { 9642: _M_current = __i._M_current; 9642: return *this; 9642: } 9642: 9642: 9642: [[__nodiscard__]] 9642: constexpr iterator_type 9642: base() const 9642: { return _M_current; } 9642: # 1559 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: [[__nodiscard__]] 9642: constexpr reference 9642: operator*() const 9642: 9642: 9642: 9642: { return static_cast(*_M_current); } 9642: 9642: 9642: [[__nodiscard__]] 9642: constexpr pointer 9642: operator->() const 9642: { return _M_current; } 9642: 9642: constexpr move_iterator& 9642: operator++() 9642: { 9642: ++_M_current; 9642: return *this; 9642: } 9642: 9642: constexpr move_iterator 9642: operator++(int) 9642: { 9642: move_iterator __tmp = *this; 9642: ++_M_current; 9642: return __tmp; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: constexpr move_iterator& 9642: operator--() 9642: { 9642: --_M_current; 9642: return *this; 9642: } 9642: 9642: constexpr move_iterator 9642: operator--(int) 9642: { 9642: move_iterator __tmp = *this; 9642: --_M_current; 9642: return __tmp; 9642: } 9642: 9642: [[__nodiscard__]] 9642: constexpr move_iterator 9642: operator+(difference_type __n) const 9642: { return move_iterator(_M_current + __n); } 9642: 9642: constexpr move_iterator& 9642: operator+=(difference_type __n) 9642: { 9642: _M_current += __n; 9642: return *this; 9642: } 9642: 9642: [[__nodiscard__]] 9642: constexpr move_iterator 9642: operator-(difference_type __n) const 9642: { return move_iterator(_M_current - __n); } 9642: 9642: constexpr move_iterator& 9642: operator-=(difference_type __n) 9642: { 9642: _M_current -= __n; 9642: return *this; 9642: } 9642: 9642: [[__nodiscard__]] 9642: constexpr reference 9642: operator[](difference_type __n) const 9642: 9642: 9642: 9642: { return std::move(_M_current[__n]); } 9642: # 1673 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: }; 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator==(const move_iterator<_IteratorL>& __x, 9642: const move_iterator<_IteratorR>& __y) 9642: 9642: 9642: 9642: { return __x.base() == __y.base(); } 9642: # 1694 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator!=(const move_iterator<_IteratorL>& __x, 9642: const move_iterator<_IteratorR>& __y) 9642: { return !(__x == __y); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator<(const move_iterator<_IteratorL>& __x, 9642: const move_iterator<_IteratorR>& __y) 9642: 9642: 9642: 9642: { return __x.base() < __y.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator<=(const move_iterator<_IteratorL>& __x, 9642: const move_iterator<_IteratorR>& __y) 9642: 9642: 9642: 9642: { return !(__y < __x); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator>(const move_iterator<_IteratorL>& __x, 9642: const move_iterator<_IteratorR>& __y) 9642: 9642: 9642: 9642: { return __y < __x; } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator>=(const move_iterator<_IteratorL>& __x, 9642: const move_iterator<_IteratorR>& __y) 9642: 9642: 9642: 9642: { return !(__x < __y); } 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator==(const move_iterator<_Iterator>& __x, 9642: const move_iterator<_Iterator>& __y) 9642: { return __x.base() == __y.base(); } 9642: # 1760 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator!=(const move_iterator<_Iterator>& __x, 9642: const move_iterator<_Iterator>& __y) 9642: { return !(__x == __y); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator<(const move_iterator<_Iterator>& __x, 9642: const move_iterator<_Iterator>& __y) 9642: { return __x.base() < __y.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator<=(const move_iterator<_Iterator>& __x, 9642: const move_iterator<_Iterator>& __y) 9642: { return !(__y < __x); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator>(const move_iterator<_Iterator>& __x, 9642: const move_iterator<_Iterator>& __y) 9642: { return __y < __x; } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr bool 9642: operator>=(const move_iterator<_Iterator>& __x, 9642: const move_iterator<_Iterator>& __y) 9642: { return !(__x < __y); } 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr auto 9642: operator-(const move_iterator<_IteratorL>& __x, 9642: const move_iterator<_IteratorR>& __y) 9642: -> decltype(__x.base() - __y.base()) 9642: { return __x.base() - __y.base(); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr move_iterator<_Iterator> 9642: operator+(typename move_iterator<_Iterator>::difference_type __n, 9642: const move_iterator<_Iterator>& __x) 9642: { return __x + __n; } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr move_iterator<_Iterator> 9642: make_move_iterator(_Iterator __i) 9642: { return move_iterator<_Iterator>(std::move(__i)); } 9642: 9642: template::value_type>::value, 9642: _Iterator, move_iterator<_Iterator>>> 9642: inline constexpr _ReturnType 9642: __make_move_if_noexcept_iterator(_Iterator __i) 9642: { return _ReturnType(__i); } 9642: 9642: 9642: 9642: template::value, 9642: const _Tp*, move_iterator<_Tp*>>> 9642: inline constexpr _ReturnType 9642: __make_move_if_noexcept_iterator(_Tp* __i) 9642: { return _ReturnType(__i); } 9642: # 2951 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: template 9642: 9642: auto 9642: __niter_base(move_iterator<_Iterator> __it) 9642: -> decltype(make_move_iterator(__niter_base(__it.base()))) 9642: { return make_move_iterator(__niter_base(__it.base())); } 9642: 9642: template 9642: struct __is_move_iterator > 9642: { 9642: enum { __value = 1 }; 9642: typedef __true_type __type; 9642: }; 9642: 9642: template 9642: 9642: auto 9642: __miter_base(move_iterator<_Iterator> __it) 9642: -> decltype(__miter_base(__it.base())) 9642: { return __miter_base(__it.base()); } 9642: # 2983 "/usr/include/c++/13/bits/stl_iterator.h" 3 9642: template 9642: using __iter_key_t = remove_const_t< 9642: typename iterator_traits<_InputIterator>::value_type::first_type>; 9642: 9642: template 9642: using __iter_val_t 9642: = typename iterator_traits<_InputIterator>::value_type::second_type; 9642: 9642: template 9642: struct pair; 9642: 9642: template 9642: using __iter_to_alloc_t 9642: = pair, __iter_val_t<_InputIterator>>; 9642: 9642: 9642: 9642: } 9642: # 68 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 9642: 9642: # 1 "/usr/include/c++/13/debug/debug.h" 1 3 9642: # 48 "/usr/include/c++/13/debug/debug.h" 3 9642: namespace std 9642: { 9642: namespace __debug { } 9642: } 9642: 9642: 9642: 9642: 9642: namespace __gnu_debug 9642: { 9642: using namespace std::__debug; 9642: 9642: template 9642: struct _Safe_iterator; 9642: } 9642: # 70 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 9642: 9642: # 1 "/usr/include/c++/13/bits/predefined_ops.h" 1 3 9642: # 35 "/usr/include/c++/13/bits/predefined_ops.h" 3 9642: namespace __gnu_cxx 9642: { 9642: namespace __ops 9642: { 9642: struct _Iter_less_iter 9642: { 9642: template 9642: constexpr 9642: bool 9642: operator()(_Iterator1 __it1, _Iterator2 __it2) const 9642: { return *__it1 < *__it2; } 9642: }; 9642: 9642: constexpr 9642: inline _Iter_less_iter 9642: __iter_less_iter() 9642: { return _Iter_less_iter(); } 9642: 9642: struct _Iter_less_val 9642: { 9642: 9642: constexpr _Iter_less_val() = default; 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: _Iter_less_val(_Iter_less_iter) { } 9642: 9642: template 9642: 9642: bool 9642: operator()(_Iterator __it, _Value& __val) const 9642: { return *__it < __val; } 9642: }; 9642: 9642: 9642: inline _Iter_less_val 9642: __iter_less_val() 9642: { return _Iter_less_val(); } 9642: 9642: 9642: inline _Iter_less_val 9642: __iter_comp_val(_Iter_less_iter) 9642: { return _Iter_less_val(); } 9642: 9642: struct _Val_less_iter 9642: { 9642: 9642: constexpr _Val_less_iter() = default; 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: _Val_less_iter(_Iter_less_iter) { } 9642: 9642: template 9642: 9642: bool 9642: operator()(_Value& __val, _Iterator __it) const 9642: { return __val < *__it; } 9642: }; 9642: 9642: 9642: inline _Val_less_iter 9642: __val_less_iter() 9642: { return _Val_less_iter(); } 9642: 9642: 9642: inline _Val_less_iter 9642: __val_comp_iter(_Iter_less_iter) 9642: { return _Val_less_iter(); } 9642: 9642: struct _Iter_equal_to_iter 9642: { 9642: template 9642: 9642: bool 9642: operator()(_Iterator1 __it1, _Iterator2 __it2) const 9642: { return *__it1 == *__it2; } 9642: }; 9642: 9642: 9642: inline _Iter_equal_to_iter 9642: __iter_equal_to_iter() 9642: { return _Iter_equal_to_iter(); } 9642: 9642: struct _Iter_equal_to_val 9642: { 9642: template 9642: 9642: bool 9642: operator()(_Iterator __it, _Value& __val) const 9642: { return *__it == __val; } 9642: }; 9642: 9642: 9642: inline _Iter_equal_to_val 9642: __iter_equal_to_val() 9642: { return _Iter_equal_to_val(); } 9642: 9642: 9642: inline _Iter_equal_to_val 9642: __iter_comp_val(_Iter_equal_to_iter) 9642: { return _Iter_equal_to_val(); } 9642: 9642: template 9642: struct _Iter_comp_iter 9642: { 9642: _Compare _M_comp; 9642: 9642: explicit constexpr 9642: _Iter_comp_iter(_Compare __comp) 9642: : _M_comp(std::move(__comp)) 9642: { } 9642: 9642: template 9642: constexpr 9642: bool 9642: operator()(_Iterator1 __it1, _Iterator2 __it2) 9642: { return bool(_M_comp(*__it1, *__it2)); } 9642: }; 9642: 9642: template 9642: constexpr 9642: inline _Iter_comp_iter<_Compare> 9642: __iter_comp_iter(_Compare __comp) 9642: { return _Iter_comp_iter<_Compare>(std::move(__comp)); } 9642: 9642: template 9642: struct _Iter_comp_val 9642: { 9642: _Compare _M_comp; 9642: 9642: 9642: explicit 9642: _Iter_comp_val(_Compare __comp) 9642: : _M_comp(std::move(__comp)) 9642: { } 9642: 9642: 9642: explicit 9642: _Iter_comp_val(const _Iter_comp_iter<_Compare>& __comp) 9642: : _M_comp(__comp._M_comp) 9642: { } 9642: 9642: 9642: 9642: explicit 9642: _Iter_comp_val(_Iter_comp_iter<_Compare>&& __comp) 9642: : _M_comp(std::move(__comp._M_comp)) 9642: { } 9642: 9642: 9642: template 9642: 9642: bool 9642: operator()(_Iterator __it, _Value& __val) 9642: { return bool(_M_comp(*__it, __val)); } 9642: }; 9642: 9642: template 9642: 9642: inline _Iter_comp_val<_Compare> 9642: __iter_comp_val(_Compare __comp) 9642: { return _Iter_comp_val<_Compare>(std::move(__comp)); } 9642: 9642: template 9642: 9642: inline _Iter_comp_val<_Compare> 9642: __iter_comp_val(_Iter_comp_iter<_Compare> __comp) 9642: { return _Iter_comp_val<_Compare>(std::move(__comp)); } 9642: 9642: template 9642: struct _Val_comp_iter 9642: { 9642: _Compare _M_comp; 9642: 9642: 9642: explicit 9642: _Val_comp_iter(_Compare __comp) 9642: : _M_comp(std::move(__comp)) 9642: { } 9642: 9642: 9642: explicit 9642: _Val_comp_iter(const _Iter_comp_iter<_Compare>& __comp) 9642: : _M_comp(__comp._M_comp) 9642: { } 9642: 9642: 9642: 9642: explicit 9642: _Val_comp_iter(_Iter_comp_iter<_Compare>&& __comp) 9642: : _M_comp(std::move(__comp._M_comp)) 9642: { } 9642: 9642: 9642: template 9642: 9642: bool 9642: operator()(_Value& __val, _Iterator __it) 9642: { return bool(_M_comp(__val, *__it)); } 9642: }; 9642: 9642: template 9642: 9642: inline _Val_comp_iter<_Compare> 9642: __val_comp_iter(_Compare __comp) 9642: { return _Val_comp_iter<_Compare>(std::move(__comp)); } 9642: 9642: template 9642: 9642: inline _Val_comp_iter<_Compare> 9642: __val_comp_iter(_Iter_comp_iter<_Compare> __comp) 9642: { return _Val_comp_iter<_Compare>(std::move(__comp)); } 9642: 9642: template 9642: struct _Iter_equals_val 9642: { 9642: _Value& _M_value; 9642: 9642: 9642: explicit 9642: _Iter_equals_val(_Value& __value) 9642: : _M_value(__value) 9642: { } 9642: 9642: template 9642: 9642: bool 9642: operator()(_Iterator __it) 9642: { return *__it == _M_value; } 9642: }; 9642: 9642: template 9642: 9642: inline _Iter_equals_val<_Value> 9642: __iter_equals_val(_Value& __val) 9642: { return _Iter_equals_val<_Value>(__val); } 9642: 9642: template 9642: struct _Iter_equals_iter 9642: { 9642: _Iterator1 _M_it1; 9642: 9642: 9642: explicit 9642: _Iter_equals_iter(_Iterator1 __it1) 9642: : _M_it1(__it1) 9642: { } 9642: 9642: template 9642: 9642: bool 9642: operator()(_Iterator2 __it2) 9642: { return *__it2 == *_M_it1; } 9642: }; 9642: 9642: template 9642: 9642: inline _Iter_equals_iter<_Iterator> 9642: __iter_comp_iter(_Iter_equal_to_iter, _Iterator __it) 9642: { return _Iter_equals_iter<_Iterator>(__it); } 9642: 9642: template 9642: struct _Iter_pred 9642: { 9642: _Predicate _M_pred; 9642: 9642: 9642: explicit 9642: _Iter_pred(_Predicate __pred) 9642: : _M_pred(std::move(__pred)) 9642: { } 9642: 9642: template 9642: 9642: bool 9642: operator()(_Iterator __it) 9642: { return bool(_M_pred(*__it)); } 9642: }; 9642: 9642: template 9642: 9642: inline _Iter_pred<_Predicate> 9642: __pred_iter(_Predicate __pred) 9642: { return _Iter_pred<_Predicate>(std::move(__pred)); } 9642: 9642: template 9642: struct _Iter_comp_to_val 9642: { 9642: _Compare _M_comp; 9642: _Value& _M_value; 9642: 9642: 9642: _Iter_comp_to_val(_Compare __comp, _Value& __value) 9642: : _M_comp(std::move(__comp)), _M_value(__value) 9642: { } 9642: 9642: template 9642: 9642: bool 9642: operator()(_Iterator __it) 9642: { return bool(_M_comp(*__it, _M_value)); } 9642: }; 9642: 9642: template 9642: _Iter_comp_to_val<_Compare, _Value> 9642: 9642: __iter_comp_val(_Compare __comp, _Value &__val) 9642: { 9642: return _Iter_comp_to_val<_Compare, _Value>(std::move(__comp), __val); 9642: } 9642: 9642: template 9642: struct _Iter_comp_to_iter 9642: { 9642: _Compare _M_comp; 9642: _Iterator1 _M_it1; 9642: 9642: 9642: _Iter_comp_to_iter(_Compare __comp, _Iterator1 __it1) 9642: : _M_comp(std::move(__comp)), _M_it1(__it1) 9642: { } 9642: 9642: template 9642: 9642: bool 9642: operator()(_Iterator2 __it2) 9642: { return bool(_M_comp(*__it2, *_M_it1)); } 9642: }; 9642: 9642: template 9642: 9642: inline _Iter_comp_to_iter<_Compare, _Iterator> 9642: __iter_comp_iter(_Iter_comp_iter<_Compare> __comp, _Iterator __it) 9642: { 9642: return _Iter_comp_to_iter<_Compare, _Iterator>( 9642: std::move(__comp._M_comp), __it); 9642: } 9642: 9642: template 9642: struct _Iter_negate 9642: { 9642: _Predicate _M_pred; 9642: 9642: 9642: explicit 9642: _Iter_negate(_Predicate __pred) 9642: : _M_pred(std::move(__pred)) 9642: { } 9642: 9642: template 9642: 9642: bool 9642: operator()(_Iterator __it) 9642: { return !bool(_M_pred(*__it)); } 9642: }; 9642: 9642: template 9642: 9642: inline _Iter_negate<_Predicate> 9642: __negate(_Iter_pred<_Predicate> __pred) 9642: { return _Iter_negate<_Predicate>(std::move(__pred._M_pred)); } 9642: 9642: } 9642: } 9642: # 72 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bit" 1 3 9642: # 32 "/usr/include/c++/13/bit" 3 9642: 9642: # 33 "/usr/include/c++/13/bit" 3 9642: # 55 "/usr/include/c++/13/bit" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 149 "/usr/include/c++/13/bit" 3 9642: template 9642: constexpr _Tp 9642: __rotl(_Tp __x, int __s) noexcept 9642: { 9642: constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits; 9642: if constexpr ((_Nd & (_Nd - 1)) == 0) 9642: { 9642: 9642: 9642: constexpr unsigned __uNd = _Nd; 9642: const unsigned __r = __s; 9642: return (__x << (__r % __uNd)) | (__x >> ((-__r) % __uNd)); 9642: } 9642: const int __r = __s % _Nd; 9642: if (__r == 0) 9642: return __x; 9642: else if (__r > 0) 9642: return (__x << __r) | (__x >> ((_Nd - __r) % _Nd)); 9642: else 9642: return (__x >> -__r) | (__x << ((_Nd + __r) % _Nd)); 9642: } 9642: 9642: template 9642: constexpr _Tp 9642: __rotr(_Tp __x, int __s) noexcept 9642: { 9642: constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits; 9642: if constexpr ((_Nd & (_Nd - 1)) == 0) 9642: { 9642: 9642: 9642: constexpr unsigned __uNd = _Nd; 9642: const unsigned __r = __s; 9642: return (__x >> (__r % __uNd)) | (__x << ((-__r) % __uNd)); 9642: } 9642: const int __r = __s % _Nd; 9642: if (__r == 0) 9642: return __x; 9642: else if (__r > 0) 9642: return (__x >> __r) | (__x << ((_Nd - __r) % _Nd)); 9642: else 9642: return (__x << -__r) | (__x >> ((_Nd + __r) % _Nd)); 9642: } 9642: 9642: template 9642: constexpr int 9642: __countl_zero(_Tp __x) noexcept 9642: { 9642: using __gnu_cxx::__int_traits; 9642: constexpr auto _Nd = __int_traits<_Tp>::__digits; 9642: 9642: if (__x == 0) 9642: return _Nd; 9642: 9642: constexpr auto _Nd_ull = __int_traits::__digits; 9642: constexpr auto _Nd_ul = __int_traits::__digits; 9642: constexpr auto _Nd_u = __int_traits::__digits; 9642: 9642: if constexpr (_Nd <= _Nd_u) 9642: { 9642: constexpr int __diff = _Nd_u - _Nd; 9642: return __builtin_clz(__x) - __diff; 9642: } 9642: else if constexpr (_Nd <= _Nd_ul) 9642: { 9642: constexpr int __diff = _Nd_ul - _Nd; 9642: return __builtin_clzl(__x) - __diff; 9642: } 9642: else if constexpr (_Nd <= _Nd_ull) 9642: { 9642: constexpr int __diff = _Nd_ull - _Nd; 9642: return __builtin_clzll(__x) - __diff; 9642: } 9642: else 9642: { 9642: static_assert(_Nd <= (2 * _Nd_ull), 9642: "Maximum supported integer size is 128-bit"); 9642: 9642: unsigned long long __high = __x >> _Nd_ull; 9642: if (__high != 0) 9642: { 9642: constexpr int __diff = (2 * _Nd_ull) - _Nd; 9642: return __builtin_clzll(__high) - __diff; 9642: } 9642: constexpr auto __max_ull = __int_traits::__max; 9642: unsigned long long __low = __x & __max_ull; 9642: return (_Nd - _Nd_ull) + __builtin_clzll(__low); 9642: } 9642: } 9642: 9642: template 9642: constexpr int 9642: __countl_one(_Tp __x) noexcept 9642: { 9642: return std::__countl_zero<_Tp>((_Tp)~__x); 9642: } 9642: 9642: template 9642: constexpr int 9642: __countr_zero(_Tp __x) noexcept 9642: { 9642: using __gnu_cxx::__int_traits; 9642: constexpr auto _Nd = __int_traits<_Tp>::__digits; 9642: 9642: if (__x == 0) 9642: return _Nd; 9642: 9642: constexpr auto _Nd_ull = __int_traits::__digits; 9642: constexpr auto _Nd_ul = __int_traits::__digits; 9642: constexpr auto _Nd_u = __int_traits::__digits; 9642: 9642: if constexpr (_Nd <= _Nd_u) 9642: return __builtin_ctz(__x); 9642: else if constexpr (_Nd <= _Nd_ul) 9642: return __builtin_ctzl(__x); 9642: else if constexpr (_Nd <= _Nd_ull) 9642: return __builtin_ctzll(__x); 9642: else 9642: { 9642: static_assert(_Nd <= (2 * _Nd_ull), 9642: "Maximum supported integer size is 128-bit"); 9642: 9642: constexpr auto __max_ull = __int_traits::__max; 9642: unsigned long long __low = __x & __max_ull; 9642: if (__low != 0) 9642: return __builtin_ctzll(__low); 9642: unsigned long long __high = __x >> _Nd_ull; 9642: return __builtin_ctzll(__high) + _Nd_ull; 9642: } 9642: } 9642: 9642: template 9642: constexpr int 9642: __countr_one(_Tp __x) noexcept 9642: { 9642: return std::__countr_zero((_Tp)~__x); 9642: } 9642: 9642: template 9642: constexpr int 9642: __popcount(_Tp __x) noexcept 9642: { 9642: using __gnu_cxx::__int_traits; 9642: constexpr auto _Nd = __int_traits<_Tp>::__digits; 9642: 9642: constexpr auto _Nd_ull = __int_traits::__digits; 9642: constexpr auto _Nd_ul = __int_traits::__digits; 9642: constexpr auto _Nd_u = __int_traits::__digits; 9642: 9642: if constexpr (_Nd <= _Nd_u) 9642: return __builtin_popcount(__x); 9642: else if constexpr (_Nd <= _Nd_ul) 9642: return __builtin_popcountl(__x); 9642: else if constexpr (_Nd <= _Nd_ull) 9642: return __builtin_popcountll(__x); 9642: else 9642: { 9642: static_assert(_Nd <= (2 * _Nd_ull), 9642: "Maximum supported integer size is 128-bit"); 9642: 9642: constexpr auto __max_ull = __int_traits::__max; 9642: unsigned long long __low = __x & __max_ull; 9642: unsigned long long __high = __x >> _Nd_ull; 9642: return __builtin_popcountll(__low) + __builtin_popcountll(__high); 9642: } 9642: } 9642: 9642: template 9642: constexpr bool 9642: __has_single_bit(_Tp __x) noexcept 9642: { return std::__popcount(__x) == 1; } 9642: 9642: template 9642: constexpr _Tp 9642: __bit_ceil(_Tp __x) noexcept 9642: { 9642: using __gnu_cxx::__int_traits; 9642: constexpr auto _Nd = __int_traits<_Tp>::__digits; 9642: if (__x == 0 || __x == 1) 9642: return 1; 9642: auto __shift_exponent = _Nd - std::__countl_zero((_Tp)(__x - 1u)); 9642: 9642: 9642: 9642: 9642: if (!std::__is_constant_evaluated()) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__shift_exponent != __int_traits<_Tp>::__digits)) __builtin_unreachable(); } while (false); 9642: } 9642: 9642: using __promoted_type = decltype(__x << 1); 9642: if constexpr (!is_same<__promoted_type, _Tp>::value) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: const int __extra_exp = sizeof(__promoted_type) / sizeof(_Tp) / 2; 9642: __shift_exponent |= (__shift_exponent & _Nd) << __extra_exp; 9642: } 9642: return (_Tp)1u << __shift_exponent; 9642: } 9642: 9642: template 9642: constexpr _Tp 9642: __bit_floor(_Tp __x) noexcept 9642: { 9642: constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits; 9642: if (__x == 0) 9642: return 0; 9642: return (_Tp)1u << (_Nd - std::__countl_zero((_Tp)(__x >> 1))); 9642: } 9642: 9642: template 9642: constexpr int 9642: __bit_width(_Tp __x) noexcept 9642: { 9642: constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits; 9642: return _Nd - std::__countl_zero(__x); 9642: } 9642: # 478 "/usr/include/c++/13/bit" 3 9642: 9642: } 9642: # 77 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 9642: 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: constexpr 9642: inline int 9642: __memcmp(const _Tp* __first1, const _Up* __first2, size_t __num) 9642: { 9642: 9642: static_assert(sizeof(_Tp) == sizeof(_Up), "can be compared with memcmp"); 9642: # 108 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: return __builtin_memcmp(__first1, __first2, sizeof(_Tp) * __num); 9642: } 9642: # 152 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: inline void 9642: iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) 9642: { 9642: 9642: 9642: 9642: 9642: # 185 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: swap(*__a, *__b); 9642: 9642: } 9642: # 201 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: _ForwardIterator2 9642: swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: for (; __first1 != __last1; ++__first1, (void)++__first2) 9642: std::iter_swap(__first1, __first2); 9642: return __first2; 9642: } 9642: # 230 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: constexpr 9642: inline const _Tp& 9642: min(const _Tp& __a, const _Tp& __b) 9642: { 9642: 9642: 9642: 9642: if (__b < __a) 9642: return __b; 9642: return __a; 9642: } 9642: # 254 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: constexpr 9642: inline const _Tp& 9642: max(const _Tp& __a, const _Tp& __b) 9642: { 9642: 9642: 9642: 9642: if (__a < __b) 9642: return __b; 9642: return __a; 9642: } 9642: # 278 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: constexpr 9642: inline const _Tp& 9642: min(const _Tp& __a, const _Tp& __b, _Compare __comp) 9642: { 9642: 9642: if (__comp(__b, __a)) 9642: return __b; 9642: return __a; 9642: } 9642: # 300 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: constexpr 9642: inline const _Tp& 9642: max(const _Tp& __a, const _Tp& __b, _Compare __comp) 9642: { 9642: 9642: if (__comp(__a, __b)) 9642: return __b; 9642: return __a; 9642: } 9642: 9642: 9642: 9642: template 9642: 9642: inline _Iterator 9642: __niter_base(_Iterator __it) 9642: noexcept(std::is_nothrow_copy_constructible<_Iterator>::value) 9642: { return __it; } 9642: 9642: template 9642: _Ite 9642: __niter_base(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, 9642: std::random_access_iterator_tag>&); 9642: 9642: 9642: 9642: 9642: template 9642: 9642: inline _From 9642: __niter_wrap(_From __from, _To __res) 9642: { return __from + (__res - std::__niter_base(__from)); } 9642: 9642: 9642: template 9642: 9642: inline _Iterator 9642: __niter_wrap(const _Iterator&, _Iterator __res) 9642: { return __res; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct __copy_move 9642: { 9642: template 9642: 9642: static _OI 9642: __copy_m(_II __first, _II __last, _OI __result) 9642: { 9642: for (; __first != __last; ++__result, (void)++__first) 9642: *__result = *__first; 9642: return __result; 9642: } 9642: }; 9642: 9642: 9642: template 9642: struct __copy_move 9642: { 9642: template 9642: 9642: static _OI 9642: __copy_m(_II __first, _II __last, _OI __result) 9642: { 9642: for (; __first != __last; ++__result, (void)++__first) 9642: *__result = std::move(*__first); 9642: return __result; 9642: } 9642: }; 9642: 9642: 9642: template<> 9642: struct __copy_move 9642: { 9642: template 9642: 9642: static _OI 9642: __copy_m(_II __first, _II __last, _OI __result) 9642: { 9642: typedef typename iterator_traits<_II>::difference_type _Distance; 9642: for(_Distance __n = __last - __first; __n > 0; --__n) 9642: { 9642: *__result = *__first; 9642: ++__first; 9642: ++__result; 9642: } 9642: return __result; 9642: } 9642: 9642: template 9642: static void 9642: __assign_one(_Tp* __to, _Up* __from) 9642: { *__to = *__from; } 9642: }; 9642: 9642: 9642: template<> 9642: struct __copy_move 9642: { 9642: template 9642: 9642: static _OI 9642: __copy_m(_II __first, _II __last, _OI __result) 9642: { 9642: typedef typename iterator_traits<_II>::difference_type _Distance; 9642: for(_Distance __n = __last - __first; __n > 0; --__n) 9642: { 9642: *__result = std::move(*__first); 9642: ++__first; 9642: ++__result; 9642: } 9642: return __result; 9642: } 9642: 9642: template 9642: static void 9642: __assign_one(_Tp* __to, _Up* __from) 9642: { *__to = std::move(*__from); } 9642: }; 9642: 9642: 9642: template 9642: struct __copy_move<_IsMove, true, random_access_iterator_tag> 9642: { 9642: template 9642: 9642: static _Up* 9642: __copy_m(_Tp* __first, _Tp* __last, _Up* __result) 9642: { 9642: const ptrdiff_t _Num = __last - __first; 9642: if (__builtin_expect(_Num > 1, true)) 9642: __builtin_memmove(__result, __first, sizeof(_Tp) * _Num); 9642: else if (_Num == 1) 9642: std::__copy_move<_IsMove, false, random_access_iterator_tag>:: 9642: __assign_one(__result, __first); 9642: return __result + _Num; 9642: } 9642: }; 9642: 9642: 9642: 9642: template 9642: struct _Deque_iterator; 9642: 9642: struct _Bit_iterator; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct char_traits; 9642: 9642: template 9642: class istreambuf_iterator; 9642: 9642: template 9642: class ostreambuf_iterator; 9642: 9642: template 9642: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 9642: ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type 9642: __copy_move_a2(_CharT*, _CharT*, 9642: ostreambuf_iterator<_CharT, char_traits<_CharT> >); 9642: 9642: template 9642: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 9642: ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type 9642: __copy_move_a2(const _CharT*, const _CharT*, 9642: ostreambuf_iterator<_CharT, char_traits<_CharT> >); 9642: 9642: template 9642: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 9642: _CharT*>::__type 9642: __copy_move_a2(istreambuf_iterator<_CharT, char_traits<_CharT> >, 9642: istreambuf_iterator<_CharT, char_traits<_CharT> >, _CharT*); 9642: 9642: template 9642: typename __gnu_cxx::__enable_if< 9642: __is_char<_CharT>::__value, 9642: std::_Deque_iterator<_CharT, _CharT&, _CharT*> >::__type 9642: __copy_move_a2( 9642: istreambuf_iterator<_CharT, char_traits<_CharT> >, 9642: istreambuf_iterator<_CharT, char_traits<_CharT> >, 9642: std::_Deque_iterator<_CharT, _CharT&, _CharT*>); 9642: 9642: 9642: template 9642: 9642: inline _OI 9642: __copy_move_a2(_II __first, _II __last, _OI __result) 9642: { 9642: typedef typename iterator_traits<_II>::iterator_category _Category; 9642: 9642: 9642: 9642: 9642: 9642: return std::__copy_move<_IsMove, __memcpyable<_OI, _II>::__value, 9642: _Category>::__copy_m(__first, __last, __result); 9642: } 9642: 9642: template 9642: _OI 9642: __copy_move_a1(std::_Deque_iterator<_Tp, _Ref, _Ptr>, 9642: std::_Deque_iterator<_Tp, _Ref, _Ptr>, 9642: _OI); 9642: 9642: template 9642: std::_Deque_iterator<_OTp, _OTp&, _OTp*> 9642: __copy_move_a1(std::_Deque_iterator<_ITp, _IRef, _IPtr>, 9642: std::_Deque_iterator<_ITp, _IRef, _IPtr>, 9642: std::_Deque_iterator<_OTp, _OTp&, _OTp*>); 9642: 9642: template 9642: typename __gnu_cxx::__enable_if< 9642: __is_random_access_iter<_II>::__value, 9642: std::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type 9642: __copy_move_a1(_II, _II, std::_Deque_iterator<_Tp, _Tp&, _Tp*>); 9642: 9642: template 9642: 9642: inline _OI 9642: __copy_move_a1(_II __first, _II __last, _OI __result) 9642: { return std::__copy_move_a2<_IsMove>(__first, __last, __result); } 9642: 9642: template 9642: 9642: inline _OI 9642: __copy_move_a(_II __first, _II __last, _OI __result) 9642: { 9642: return std::__niter_wrap(__result, 9642: std::__copy_move_a1<_IsMove>(std::__niter_base(__first), 9642: std::__niter_base(__last), 9642: std::__niter_base(__result))); 9642: } 9642: 9642: template 9642: _OI 9642: __copy_move_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, 9642: const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, 9642: _OI); 9642: 9642: template 9642: __gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat> 9642: __copy_move_a(_II, _II, 9642: const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&); 9642: 9642: template 9642: ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat> 9642: __copy_move_a(const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, 9642: const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, 9642: const ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat>&); 9642: 9642: template 9642: 9642: _OutputIterator 9642: __copy_n_a(_InputIterator __first, _Size __n, _OutputIterator __result, 9642: bool) 9642: { 9642: if (__n > 0) 9642: { 9642: while (true) 9642: { 9642: *__result = *__first; 9642: ++__result; 9642: if (--__n > 0) 9642: ++__first; 9642: else 9642: break; 9642: } 9642: } 9642: return __result; 9642: } 9642: 9642: 9642: template 9642: typename __gnu_cxx::__enable_if< 9642: __is_char<_CharT>::__value, _CharT*>::__type 9642: __copy_n_a(istreambuf_iterator<_CharT, char_traits<_CharT> >, 9642: _Size, _CharT*, bool); 9642: 9642: template 9642: typename __gnu_cxx::__enable_if< 9642: __is_char<_CharT>::__value, 9642: std::_Deque_iterator<_CharT, _CharT&, _CharT*> >::__type 9642: __copy_n_a(istreambuf_iterator<_CharT, char_traits<_CharT> >, _Size, 9642: std::_Deque_iterator<_CharT, _CharT&, _CharT*>, 9642: bool); 9642: # 621 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: inline _OI 9642: copy(_II __first, _II __last, _OI __result) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__copy_move_a<__is_move_iterator<_II>::__value> 9642: (std::__miter_base(__first), std::__miter_base(__last), __result); 9642: } 9642: # 654 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: inline _OI 9642: move(_II __first, _II __last, _OI __result) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__copy_move_a(std::__miter_base(__first), 9642: std::__miter_base(__last), __result); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct __copy_move_backward 9642: { 9642: template 9642: 9642: static _BI2 9642: __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) 9642: { 9642: while (__first != __last) 9642: *--__result = *--__last; 9642: return __result; 9642: } 9642: }; 9642: 9642: 9642: template 9642: struct __copy_move_backward 9642: { 9642: template 9642: 9642: static _BI2 9642: __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) 9642: { 9642: while (__first != __last) 9642: *--__result = std::move(*--__last); 9642: return __result; 9642: } 9642: }; 9642: 9642: 9642: template<> 9642: struct __copy_move_backward 9642: { 9642: template 9642: 9642: static _BI2 9642: __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) 9642: { 9642: typename iterator_traits<_BI1>::difference_type 9642: __n = __last - __first; 9642: for (; __n > 0; --__n) 9642: *--__result = *--__last; 9642: return __result; 9642: } 9642: }; 9642: 9642: 9642: template<> 9642: struct __copy_move_backward 9642: { 9642: template 9642: 9642: static _BI2 9642: __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) 9642: { 9642: typename iterator_traits<_BI1>::difference_type 9642: __n = __last - __first; 9642: for (; __n > 0; --__n) 9642: *--__result = std::move(*--__last); 9642: return __result; 9642: } 9642: }; 9642: 9642: 9642: template 9642: struct __copy_move_backward<_IsMove, true, random_access_iterator_tag> 9642: { 9642: template 9642: 9642: static _Up* 9642: __copy_move_b(_Tp* __first, _Tp* __last, _Up* __result) 9642: { 9642: const ptrdiff_t _Num = __last - __first; 9642: if (__builtin_expect(_Num > 1, true)) 9642: __builtin_memmove(__result - _Num, __first, sizeof(_Tp) * _Num); 9642: else if (_Num == 1) 9642: std::__copy_move<_IsMove, false, random_access_iterator_tag>:: 9642: __assign_one(__result - 1, __first); 9642: return __result - _Num; 9642: } 9642: }; 9642: 9642: template 9642: 9642: inline _BI2 9642: __copy_move_backward_a2(_BI1 __first, _BI1 __last, _BI2 __result) 9642: { 9642: typedef typename iterator_traits<_BI1>::iterator_category _Category; 9642: 9642: 9642: 9642: 9642: 9642: return std::__copy_move_backward<_IsMove, 9642: __memcpyable<_BI2, _BI1>::__value, 9642: _Category>::__copy_move_b(__first, 9642: __last, 9642: __result); 9642: } 9642: 9642: template 9642: 9642: inline _BI2 9642: __copy_move_backward_a1(_BI1 __first, _BI1 __last, _BI2 __result) 9642: { return std::__copy_move_backward_a2<_IsMove>(__first, __last, __result); } 9642: 9642: template 9642: _OI 9642: __copy_move_backward_a1(std::_Deque_iterator<_Tp, _Ref, _Ptr>, 9642: std::_Deque_iterator<_Tp, _Ref, _Ptr>, 9642: _OI); 9642: 9642: template 9642: std::_Deque_iterator<_OTp, _OTp&, _OTp*> 9642: __copy_move_backward_a1( 9642: std::_Deque_iterator<_ITp, _IRef, _IPtr>, 9642: std::_Deque_iterator<_ITp, _IRef, _IPtr>, 9642: std::_Deque_iterator<_OTp, _OTp&, _OTp*>); 9642: 9642: template 9642: typename __gnu_cxx::__enable_if< 9642: __is_random_access_iter<_II>::__value, 9642: std::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type 9642: __copy_move_backward_a1(_II, _II, 9642: std::_Deque_iterator<_Tp, _Tp&, _Tp*>); 9642: 9642: template 9642: 9642: inline _OI 9642: __copy_move_backward_a(_II __first, _II __last, _OI __result) 9642: { 9642: return std::__niter_wrap(__result, 9642: std::__copy_move_backward_a1<_IsMove> 9642: (std::__niter_base(__first), std::__niter_base(__last), 9642: std::__niter_base(__result))); 9642: } 9642: 9642: template 9642: _OI 9642: __copy_move_backward_a( 9642: const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, 9642: const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, 9642: _OI); 9642: 9642: template 9642: __gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat> 9642: __copy_move_backward_a(_II, _II, 9642: const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&); 9642: 9642: template 9642: ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat> 9642: __copy_move_backward_a( 9642: const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, 9642: const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, 9642: const ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat>&); 9642: # 854 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: inline _BI2 9642: copy_backward(_BI1 __first, _BI1 __last, _BI2 __result) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__copy_move_backward_a<__is_move_iterator<_BI1>::__value> 9642: (std::__miter_base(__first), std::__miter_base(__last), __result); 9642: } 9642: # 889 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: inline _BI2 9642: move_backward(_BI1 __first, _BI1 __last, _BI2 __result) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__copy_move_backward_a(std::__miter_base(__first), 9642: std::__miter_base(__last), 9642: __result); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: inline typename 9642: __gnu_cxx::__enable_if::__value, void>::__type 9642: __fill_a1(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __value) 9642: { 9642: for (; __first != __last; ++__first) 9642: *__first = __value; 9642: } 9642: 9642: template 9642: 9642: inline typename 9642: __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, void>::__type 9642: __fill_a1(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __value) 9642: { 9642: const _Tp __tmp = __value; 9642: for (; __first != __last; ++__first) 9642: *__first = __tmp; 9642: } 9642: 9642: 9642: template 9642: 9642: inline typename 9642: __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, void>::__type 9642: __fill_a1(_Tp* __first, _Tp* __last, const _Tp& __c) 9642: { 9642: const _Tp __tmp = __c; 9642: # 950 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: if (const size_t __len = __last - __first) 9642: __builtin_memset(__first, static_cast(__tmp), __len); 9642: } 9642: 9642: template 9642: 9642: inline void 9642: __fill_a1(::__gnu_cxx::__normal_iterator<_Ite, _Cont> __first, 9642: ::__gnu_cxx::__normal_iterator<_Ite, _Cont> __last, 9642: const _Tp& __value) 9642: { std::__fill_a1(__first.base(), __last.base(), __value); } 9642: 9642: template 9642: void 9642: __fill_a1(const std::_Deque_iterator<_Tp, _Tp&, _Tp*>&, 9642: const std::_Deque_iterator<_Tp, _Tp&, _Tp*>&, 9642: const _VTp&); 9642: 9642: 9642: void 9642: __fill_a1(std::_Bit_iterator, std::_Bit_iterator, 9642: const bool&); 9642: 9642: template 9642: 9642: inline void 9642: __fill_a(_FIte __first, _FIte __last, const _Tp& __value) 9642: { std::__fill_a1(__first, __last, __value); } 9642: 9642: template 9642: void 9642: __fill_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, 9642: const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, 9642: const _Tp&); 9642: # 997 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: inline void 9642: fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) 9642: { 9642: 9642: 9642: 9642: ; 9642: 9642: std::__fill_a(__first, __last, __value); 9642: } 9642: 9642: 9642: inline constexpr int 9642: __size_to_integer(int __n) { return __n; } 9642: inline constexpr unsigned 9642: __size_to_integer(unsigned __n) { return __n; } 9642: inline constexpr long 9642: __size_to_integer(long __n) { return __n; } 9642: inline constexpr unsigned long 9642: __size_to_integer(unsigned long __n) { return __n; } 9642: inline constexpr long long 9642: __size_to_integer(long long __n) { return __n; } 9642: inline constexpr unsigned long long 9642: __size_to_integer(unsigned long long __n) { return __n; } 9642: # 1049 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: inline constexpr long long 9642: __size_to_integer(float __n) { return (long long)__n; } 9642: inline constexpr long long 9642: __size_to_integer(double __n) { return (long long)__n; } 9642: inline constexpr long long 9642: __size_to_integer(long double __n) { return (long long)__n; } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: inline typename 9642: __gnu_cxx::__enable_if::__value, _OutputIterator>::__type 9642: __fill_n_a1(_OutputIterator __first, _Size __n, const _Tp& __value) 9642: { 9642: for (; __n > 0; --__n, (void) ++__first) 9642: *__first = __value; 9642: return __first; 9642: } 9642: 9642: template 9642: 9642: inline typename 9642: __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, _OutputIterator>::__type 9642: __fill_n_a1(_OutputIterator __first, _Size __n, const _Tp& __value) 9642: { 9642: const _Tp __tmp = __value; 9642: for (; __n > 0; --__n, (void) ++__first) 9642: *__first = __tmp; 9642: return __first; 9642: } 9642: 9642: template 9642: ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat> 9642: __fill_n_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>& __first, 9642: _Size __n, const _Tp& __value, 9642: std::input_iterator_tag); 9642: 9642: template 9642: 9642: inline _OutputIterator 9642: __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value, 9642: std::output_iterator_tag) 9642: { 9642: 9642: static_assert(is_integral<_Size>{}, "fill_n must pass integral size"); 9642: 9642: return __fill_n_a1(__first, __n, __value); 9642: } 9642: 9642: template 9642: 9642: inline _OutputIterator 9642: __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value, 9642: std::input_iterator_tag) 9642: { 9642: 9642: static_assert(is_integral<_Size>{}, "fill_n must pass integral size"); 9642: 9642: return __fill_n_a1(__first, __n, __value); 9642: } 9642: 9642: template 9642: 9642: inline _OutputIterator 9642: __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value, 9642: std::random_access_iterator_tag) 9642: { 9642: 9642: static_assert(is_integral<_Size>{}, "fill_n must pass integral size"); 9642: 9642: if (__n <= 0) 9642: return __first; 9642: 9642: ; 9642: 9642: std::__fill_a(__first, __first + __n, __value); 9642: return __first + __n; 9642: } 9642: # 1149 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: inline _OI 9642: fill_n(_OI __first, _Size __n, const _Tp& __value) 9642: { 9642: 9642: 9642: 9642: return std::__fill_n_a(__first, std::__size_to_integer(__n), __value, 9642: std::__iterator_category(__first)); 9642: } 9642: 9642: template 9642: struct __equal 9642: { 9642: template 9642: 9642: static bool 9642: equal(_II1 __first1, _II1 __last1, _II2 __first2) 9642: { 9642: for (; __first1 != __last1; ++__first1, (void) ++__first2) 9642: if (!(*__first1 == *__first2)) 9642: return false; 9642: return true; 9642: } 9642: }; 9642: 9642: template<> 9642: struct __equal 9642: { 9642: template 9642: 9642: static bool 9642: equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2) 9642: { 9642: if (const size_t __len = (__last1 - __first1)) 9642: return !std::__memcmp(__first1, __first2, __len); 9642: return true; 9642: } 9642: }; 9642: 9642: template 9642: typename __gnu_cxx::__enable_if< 9642: __is_random_access_iter<_II>::__value, bool>::__type 9642: __equal_aux1(std::_Deque_iterator<_Tp, _Ref, _Ptr>, 9642: std::_Deque_iterator<_Tp, _Ref, _Ptr>, 9642: _II); 9642: 9642: template 9642: bool 9642: __equal_aux1(std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, 9642: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, 9642: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>); 9642: 9642: template 9642: typename __gnu_cxx::__enable_if< 9642: __is_random_access_iter<_II>::__value, bool>::__type 9642: __equal_aux1(_II, _II, 9642: std::_Deque_iterator<_Tp, _Ref, _Ptr>); 9642: 9642: template 9642: 9642: inline bool 9642: __equal_aux1(_II1 __first1, _II1 __last1, _II2 __first2) 9642: { 9642: typedef typename iterator_traits<_II1>::value_type _ValueType1; 9642: const bool __simple = ((__is_integer<_ValueType1>::__value 9642: || __is_pointer<_ValueType1>::__value) 9642: && __memcmpable<_II1, _II2>::__value); 9642: return std::__equal<__simple>::equal(__first1, __last1, __first2); 9642: } 9642: 9642: template 9642: 9642: inline bool 9642: __equal_aux(_II1 __first1, _II1 __last1, _II2 __first2) 9642: { 9642: return std::__equal_aux1(std::__niter_base(__first1), 9642: std::__niter_base(__last1), 9642: std::__niter_base(__first2)); 9642: } 9642: 9642: template 9642: bool 9642: __equal_aux(const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, 9642: const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, 9642: _II2); 9642: 9642: template 9642: bool 9642: __equal_aux(_II1, _II1, 9642: const ::__gnu_debug::_Safe_iterator<_II2, _Seq2, _Cat2>&); 9642: 9642: template 9642: bool 9642: __equal_aux(const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, 9642: const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, 9642: const ::__gnu_debug::_Safe_iterator<_II2, _Seq2, _Cat2>&); 9642: 9642: template 9642: struct __lc_rai 9642: { 9642: template 9642: 9642: static _II1 9642: __newlast1(_II1, _II1 __last1, _II2, _II2) 9642: { return __last1; } 9642: 9642: template 9642: 9642: static bool 9642: __cnd2(_II __first, _II __last) 9642: { return __first != __last; } 9642: }; 9642: 9642: template<> 9642: struct __lc_rai 9642: { 9642: template 9642: 9642: static _RAI1 9642: __newlast1(_RAI1 __first1, _RAI1 __last1, 9642: _RAI2 __first2, _RAI2 __last2) 9642: { 9642: const typename iterator_traits<_RAI1>::difference_type 9642: __diff1 = __last1 - __first1; 9642: const typename iterator_traits<_RAI2>::difference_type 9642: __diff2 = __last2 - __first2; 9642: return __diff2 < __diff1 ? __first1 + __diff2 : __last1; 9642: } 9642: 9642: template 9642: static bool 9642: __cnd2(_RAI, _RAI) 9642: { return true; } 9642: }; 9642: 9642: template 9642: 9642: bool 9642: __lexicographical_compare_impl(_II1 __first1, _II1 __last1, 9642: _II2 __first2, _II2 __last2, 9642: _Compare __comp) 9642: { 9642: typedef typename iterator_traits<_II1>::iterator_category _Category1; 9642: typedef typename iterator_traits<_II2>::iterator_category _Category2; 9642: typedef std::__lc_rai<_Category1, _Category2> __rai_type; 9642: 9642: __last1 = __rai_type::__newlast1(__first1, __last1, __first2, __last2); 9642: for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2); 9642: ++__first1, (void)++__first2) 9642: { 9642: if (__comp(__first1, __first2)) 9642: return true; 9642: if (__comp(__first2, __first1)) 9642: return false; 9642: } 9642: return __first1 == __last1 && __first2 != __last2; 9642: } 9642: 9642: template 9642: struct __lexicographical_compare 9642: { 9642: template 9642: 9642: static bool 9642: __lc(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) 9642: { 9642: using __gnu_cxx::__ops::__iter_less_iter; 9642: return std::__lexicographical_compare_impl(__first1, __last1, 9642: __first2, __last2, 9642: __iter_less_iter()); 9642: } 9642: 9642: template 9642: 9642: static int 9642: __3way(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) 9642: { 9642: while (__first1 != __last1) 9642: { 9642: if (__first2 == __last2) 9642: return +1; 9642: if (*__first1 < *__first2) 9642: return -1; 9642: if (*__first2 < *__first1) 9642: return +1; 9642: ++__first1; 9642: ++__first2; 9642: } 9642: return int(__first2 == __last2) - 1; 9642: } 9642: }; 9642: 9642: template<> 9642: struct __lexicographical_compare 9642: { 9642: template 9642: 9642: static bool 9642: __lc(const _Tp* __first1, const _Tp* __last1, 9642: const _Up* __first2, const _Up* __last2) 9642: { return __3way(__first1, __last1, __first2, __last2) < 0; } 9642: 9642: template 9642: 9642: static ptrdiff_t 9642: __3way(const _Tp* __first1, const _Tp* __last1, 9642: const _Up* __first2, const _Up* __last2) 9642: { 9642: const size_t __len1 = __last1 - __first1; 9642: const size_t __len2 = __last2 - __first2; 9642: if (const size_t __len = std::min(__len1, __len2)) 9642: if (int __result = std::__memcmp(__first1, __first2, __len)) 9642: return __result; 9642: return ptrdiff_t(__len1 - __len2); 9642: } 9642: }; 9642: 9642: template 9642: 9642: inline bool 9642: __lexicographical_compare_aux1(_II1 __first1, _II1 __last1, 9642: _II2 __first2, _II2 __last2) 9642: { 9642: typedef typename iterator_traits<_II1>::value_type _ValueType1; 9642: typedef typename iterator_traits<_II2>::value_type _ValueType2; 9642: const bool __simple = 9642: (__is_memcmp_ordered_with<_ValueType1, _ValueType2>::__value 9642: && __is_pointer<_II1>::__value 9642: && __is_pointer<_II2>::__value 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ); 9642: 9642: return std::__lexicographical_compare<__simple>::__lc(__first1, __last1, 9642: __first2, __last2); 9642: } 9642: 9642: template 9642: bool 9642: __lexicographical_compare_aux1( 9642: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, 9642: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, 9642: _Tp2*, _Tp2*); 9642: 9642: template 9642: bool 9642: __lexicographical_compare_aux1(_Tp1*, _Tp1*, 9642: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>, 9642: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>); 9642: 9642: template 9642: bool 9642: __lexicographical_compare_aux1( 9642: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, 9642: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, 9642: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>, 9642: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>); 9642: 9642: template 9642: 9642: inline bool 9642: __lexicographical_compare_aux(_II1 __first1, _II1 __last1, 9642: _II2 __first2, _II2 __last2) 9642: { 9642: return std::__lexicographical_compare_aux1(std::__niter_base(__first1), 9642: std::__niter_base(__last1), 9642: std::__niter_base(__first2), 9642: std::__niter_base(__last2)); 9642: } 9642: 9642: template 9642: bool 9642: __lexicographical_compare_aux( 9642: const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&, 9642: const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&, 9642: _II2, _II2); 9642: 9642: template 9642: bool 9642: __lexicographical_compare_aux( 9642: _II1, _II1, 9642: const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&, 9642: const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&); 9642: 9642: template 9642: bool 9642: __lexicographical_compare_aux( 9642: const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&, 9642: const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&, 9642: const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&, 9642: const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&); 9642: 9642: template 9642: 9642: _ForwardIterator 9642: __lower_bound(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __val, _Compare __comp) 9642: { 9642: typedef typename iterator_traits<_ForwardIterator>::difference_type 9642: _DistanceType; 9642: 9642: _DistanceType __len = std::distance(__first, __last); 9642: 9642: while (__len > 0) 9642: { 9642: _DistanceType __half = __len >> 1; 9642: _ForwardIterator __middle = __first; 9642: std::advance(__middle, __half); 9642: if (__comp(__middle, __val)) 9642: { 9642: __first = __middle; 9642: ++__first; 9642: __len = __len - __half - 1; 9642: } 9642: else 9642: __len = __half; 9642: } 9642: return __first; 9642: } 9642: # 1495 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: inline _ForwardIterator 9642: lower_bound(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __val) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__lower_bound(__first, __last, __val, 9642: __gnu_cxx::__ops::__iter_less_val()); 9642: } 9642: 9642: 9642: 9642: template 9642: inline constexpr _Tp 9642: __lg(_Tp __n) 9642: { 9642: 9642: return std::__bit_width(make_unsigned_t<_Tp>(__n)) - 1; 9642: # 1528 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: } 9642: 9642: 9642: # 1544 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: inline bool 9642: equal(_II1 __first1, _II1 __last1, _II2 __first2) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__equal_aux(__first1, __last1, __first2); 9642: } 9642: # 1575 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: inline bool 9642: equal(_IIter1 __first1, _IIter1 __last1, 9642: _IIter2 __first2, _BinaryPredicate __binary_pred) 9642: { 9642: 9642: 9642: 9642: ; 9642: 9642: for (; __first1 != __last1; ++__first1, (void)++__first2) 9642: if (!bool(__binary_pred(*__first1, *__first2))) 9642: return false; 9642: return true; 9642: } 9642: 9642: 9642: 9642: template 9642: 9642: inline bool 9642: __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) 9642: { 9642: using _RATag = random_access_iterator_tag; 9642: using _Cat1 = typename iterator_traits<_II1>::iterator_category; 9642: using _Cat2 = typename iterator_traits<_II2>::iterator_category; 9642: using _RAIters = __and_, is_same<_Cat2, _RATag>>; 9642: if (_RAIters()) 9642: { 9642: auto __d1 = std::distance(__first1, __last1); 9642: auto __d2 = std::distance(__first2, __last2); 9642: if (__d1 != __d2) 9642: return false; 9642: return std::equal(__first1, __last1, __first2); 9642: } 9642: 9642: for (; __first1 != __last1 && __first2 != __last2; 9642: ++__first1, (void)++__first2) 9642: if (!(*__first1 == *__first2)) 9642: return false; 9642: return __first1 == __last1 && __first2 == __last2; 9642: } 9642: 9642: 9642: template 9642: 9642: inline bool 9642: __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2, 9642: _BinaryPredicate __binary_pred) 9642: { 9642: using _RATag = random_access_iterator_tag; 9642: using _Cat1 = typename iterator_traits<_II1>::iterator_category; 9642: using _Cat2 = typename iterator_traits<_II2>::iterator_category; 9642: using _RAIters = __and_, is_same<_Cat2, _RATag>>; 9642: if (_RAIters()) 9642: { 9642: auto __d1 = std::distance(__first1, __last1); 9642: auto __d2 = std::distance(__first2, __last2); 9642: if (__d1 != __d2) 9642: return false; 9642: return std::equal(__first1, __last1, __first2, 9642: __binary_pred); 9642: } 9642: 9642: for (; __first1 != __last1 && __first2 != __last2; 9642: ++__first1, (void)++__first2) 9642: if (!bool(__binary_pred(*__first1, *__first2))) 9642: return false; 9642: return __first1 == __last1 && __first2 == __last2; 9642: } 9642: # 1665 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: inline bool 9642: equal(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__equal4(__first1, __last1, __first2, __last2); 9642: } 9642: # 1698 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: inline bool 9642: equal(_IIter1 __first1, _IIter1 __last1, 9642: _IIter2 __first2, _IIter2 __last2, _BinaryPredicate __binary_pred) 9642: { 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__equal4(__first1, __last1, __first2, __last2, 9642: __binary_pred); 9642: } 9642: # 1730 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: inline bool 9642: lexicographical_compare(_II1 __first1, _II1 __last1, 9642: _II2 __first2, _II2 __last2) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__lexicographical_compare_aux(__first1, __last1, 9642: __first2, __last2); 9642: } 9642: # 1765 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: inline bool 9642: lexicographical_compare(_II1 __first1, _II1 __last1, 9642: _II2 __first2, _II2 __last2, _Compare __comp) 9642: { 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__lexicographical_compare_impl 9642: (__first1, __last1, __first2, __last2, 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: # 1880 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: pair<_InputIterator1, _InputIterator2> 9642: __mismatch(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _BinaryPredicate __binary_pred) 9642: { 9642: while (__first1 != __last1 && __binary_pred(__first1, __first2)) 9642: { 9642: ++__first1; 9642: ++__first2; 9642: } 9642: return pair<_InputIterator1, _InputIterator2>(__first1, __first2); 9642: } 9642: # 1908 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: inline pair<_InputIterator1, _InputIterator2> 9642: mismatch(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__mismatch(__first1, __last1, __first2, 9642: __gnu_cxx::__ops::__iter_equal_to_iter()); 9642: } 9642: # 1942 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: inline pair<_InputIterator1, _InputIterator2> 9642: mismatch(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _BinaryPredicate __binary_pred) 9642: { 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__mismatch(__first1, __last1, __first2, 9642: __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); 9642: } 9642: 9642: 9642: 9642: template 9642: 9642: pair<_InputIterator1, _InputIterator2> 9642: __mismatch(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2, 9642: _BinaryPredicate __binary_pred) 9642: { 9642: while (__first1 != __last1 && __first2 != __last2 9642: && __binary_pred(__first1, __first2)) 9642: { 9642: ++__first1; 9642: ++__first2; 9642: } 9642: return pair<_InputIterator1, _InputIterator2>(__first1, __first2); 9642: } 9642: # 1991 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: inline pair<_InputIterator1, _InputIterator2> 9642: mismatch(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__mismatch(__first1, __last1, __first2, __last2, 9642: __gnu_cxx::__ops::__iter_equal_to_iter()); 9642: } 9642: # 2027 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: inline pair<_InputIterator1, _InputIterator2> 9642: mismatch(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2, 9642: _BinaryPredicate __binary_pred) 9642: { 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__mismatch(__first1, __last1, __first2, __last2, 9642: __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: inline _InputIterator 9642: __find_if(_InputIterator __first, _InputIterator __last, 9642: _Predicate __pred, input_iterator_tag) 9642: { 9642: while (__first != __last && !__pred(__first)) 9642: ++__first; 9642: return __first; 9642: } 9642: 9642: 9642: template 9642: 9642: _RandomAccessIterator 9642: __find_if(_RandomAccessIterator __first, _RandomAccessIterator __last, 9642: _Predicate __pred, random_access_iterator_tag) 9642: { 9642: typename iterator_traits<_RandomAccessIterator>::difference_type 9642: __trip_count = (__last - __first) >> 2; 9642: 9642: for (; __trip_count > 0; --__trip_count) 9642: { 9642: if (__pred(__first)) 9642: return __first; 9642: ++__first; 9642: 9642: if (__pred(__first)) 9642: return __first; 9642: ++__first; 9642: 9642: if (__pred(__first)) 9642: return __first; 9642: ++__first; 9642: 9642: if (__pred(__first)) 9642: return __first; 9642: ++__first; 9642: } 9642: 9642: switch (__last - __first) 9642: { 9642: case 3: 9642: if (__pred(__first)) 9642: return __first; 9642: ++__first; 9642: 9642: case 2: 9642: if (__pred(__first)) 9642: return __first; 9642: ++__first; 9642: 9642: case 1: 9642: if (__pred(__first)) 9642: return __first; 9642: ++__first; 9642: 9642: case 0: 9642: default: 9642: return __last; 9642: } 9642: } 9642: 9642: template 9642: 9642: inline _Iterator 9642: __find_if(_Iterator __first, _Iterator __last, _Predicate __pred) 9642: { 9642: return __find_if(__first, __last, __pred, 9642: std::__iterator_category(__first)); 9642: } 9642: 9642: template 9642: 9642: typename iterator_traits<_InputIterator>::difference_type 9642: __count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred) 9642: { 9642: typename iterator_traits<_InputIterator>::difference_type __n = 0; 9642: for (; __first != __last; ++__first) 9642: if (__pred(__first)) 9642: ++__n; 9642: return __n; 9642: } 9642: 9642: template 9642: 9642: _ForwardIterator 9642: __remove_if(_ForwardIterator __first, _ForwardIterator __last, 9642: _Predicate __pred) 9642: { 9642: __first = std::__find_if(__first, __last, __pred); 9642: if (__first == __last) 9642: return __first; 9642: _ForwardIterator __result = __first; 9642: ++__first; 9642: for (; __first != __last; ++__first) 9642: if (!__pred(__first)) 9642: { 9642: *__result = std::move(*__first); 9642: ++__result; 9642: } 9642: return __result; 9642: } 9642: 9642: 9642: template 9642: 9642: bool 9642: __is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _BinaryPredicate __pred) 9642: { 9642: 9642: 9642: for (; __first1 != __last1; ++__first1, (void)++__first2) 9642: if (!__pred(__first1, __first2)) 9642: break; 9642: 9642: if (__first1 == __last1) 9642: return true; 9642: 9642: 9642: 9642: _ForwardIterator2 __last2 = __first2; 9642: std::advance(__last2, std::distance(__first1, __last1)); 9642: for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan) 9642: { 9642: if (__scan != std::__find_if(__first1, __scan, 9642: __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))) 9642: continue; 9642: 9642: auto __matches 9642: = std::__count_if(__first2, __last2, 9642: __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)); 9642: if (0 == __matches || 9642: std::__count_if(__scan, __last1, 9642: __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)) 9642: != __matches) 9642: return false; 9642: } 9642: return true; 9642: } 9642: # 2204 "/usr/include/c++/13/bits/stl_algobase.h" 3 9642: template 9642: 9642: inline bool 9642: is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__is_permutation(__first1, __last1, __first2, 9642: __gnu_cxx::__ops::__iter_equal_to_iter()); 9642: } 9642: 9642: 9642: 9642: } 9642: # 63 "/usr/include/c++/13/deque" 2 3 9642: # 1 "/usr/include/c++/13/bits/allocator.h" 1 3 9642: # 46 "/usr/include/c++/13/bits/allocator.h" 3 9642: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++allocator.h" 1 3 9642: # 33 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++allocator.h" 3 9642: # 1 "/usr/include/c++/13/bits/new_allocator.h" 1 3 9642: # 41 "/usr/include/c++/13/bits/new_allocator.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 62 "/usr/include/c++/13/bits/new_allocator.h" 3 9642: template 9642: class __new_allocator 9642: { 9642: public: 9642: typedef _Tp value_type; 9642: typedef std::size_t size_type; 9642: typedef std::ptrdiff_t difference_type; 9642: 9642: typedef _Tp* pointer; 9642: typedef const _Tp* const_pointer; 9642: typedef _Tp& reference; 9642: typedef const _Tp& const_reference; 9642: 9642: template 9642: struct rebind 9642: { typedef __new_allocator<_Tp1> other; }; 9642: 9642: 9642: 9642: 9642: 9642: typedef std::true_type propagate_on_container_move_assignment; 9642: 9642: 9642: __attribute__((__always_inline__)) 9642: 9642: __new_allocator() noexcept { } 9642: 9642: __attribute__((__always_inline__)) 9642: 9642: __new_allocator(const __new_allocator&) noexcept { } 9642: 9642: template 9642: __attribute__((__always_inline__)) 9642: 9642: __new_allocator(const __new_allocator<_Tp1>&) noexcept { } 9642: 9642: 9642: __new_allocator& operator=(const __new_allocator&) = default; 9642: 9642: 9642: 9642: ~__new_allocator() noexcept { } 9642: 9642: pointer 9642: address(reference __x) const noexcept 9642: { return std::__addressof(__x); } 9642: 9642: const_pointer 9642: address(const_reference __x) const noexcept 9642: { return std::__addressof(__x); } 9642: # 125 "/usr/include/c++/13/bits/new_allocator.h" 3 9642: [[__nodiscard__]] _Tp* 9642: allocate(size_type __n, const void* = static_cast(0)) 9642: { 9642: 9642: 9642: 9642: static_assert(sizeof(_Tp) != 0, "cannot allocate incomplete types"); 9642: 9642: 9642: if (__builtin_expect(__n > this->_M_max_size(), false)) 9642: { 9642: 9642: 9642: if (__n > (std::size_t(-1) / sizeof(_Tp))) 9642: std::__throw_bad_array_new_length(); 9642: std::__throw_bad_alloc(); 9642: } 9642: 9642: 9642: if (alignof(_Tp) > 8) 9642: { 9642: std::align_val_t __al = std::align_val_t(alignof(_Tp)); 9642: return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp), 9642: __al)); 9642: } 9642: 9642: return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp))); 9642: } 9642: 9642: 9642: void 9642: deallocate(_Tp* __p, size_type __n __attribute__ ((__unused__))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: if (alignof(_Tp) > 8) 9642: { 9642: ::operator delete((__p), (__n) * sizeof(_Tp), 9642: std::align_val_t(alignof(_Tp))); 9642: return; 9642: } 9642: 9642: ::operator delete((__p), (__n) * sizeof(_Tp)); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: __attribute__((__always_inline__)) 9642: size_type 9642: max_size() const noexcept 9642: { return _M_max_size(); } 9642: 9642: 9642: template 9642: __attribute__((__always_inline__)) 9642: void 9642: construct(_Up* __p, _Args&&... __args) 9642: noexcept(std::is_nothrow_constructible<_Up, _Args...>::value) 9642: { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); } 9642: 9642: template 9642: __attribute__((__always_inline__)) 9642: void 9642: destroy(_Up* __p) 9642: noexcept(std::is_nothrow_destructible<_Up>::value) 9642: { __p->~_Up(); } 9642: # 213 "/usr/include/c++/13/bits/new_allocator.h" 3 9642: template 9642: friend __attribute__((__always_inline__)) bool 9642: operator==(const __new_allocator&, const __new_allocator<_Up>&) 9642: noexcept 9642: { return true; } 9642: 9642: 9642: template 9642: friend __attribute__((__always_inline__)) bool 9642: operator!=(const __new_allocator&, const __new_allocator<_Up>&) 9642: noexcept 9642: { return false; } 9642: 9642: 9642: private: 9642: __attribute__((__always_inline__)) 9642: constexpr size_type 9642: _M_max_size() const noexcept 9642: { 9642: 9642: return std::size_t(0x7fffffff) / sizeof(_Tp); 9642: 9642: 9642: 9642: } 9642: }; 9642: 9642: 9642: } 9642: # 34 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++allocator.h" 2 3 9642: 9642: 9642: namespace std 9642: { 9642: # 46 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++allocator.h" 3 9642: template 9642: using __allocator_base = __new_allocator<_Tp>; 9642: } 9642: # 47 "/usr/include/c++/13/bits/allocator.h" 2 3 9642: # 1 "/usr/include/c++/13/bits/memoryfwd.h" 1 3 9642: # 46 "/usr/include/c++/13/bits/memoryfwd.h" 3 9642: 9642: # 47 "/usr/include/c++/13/bits/memoryfwd.h" 3 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 64 "/usr/include/c++/13/bits/memoryfwd.h" 3 9642: template 9642: class allocator; 9642: 9642: template<> 9642: class allocator; 9642: 9642: 9642: 9642: 9642: template 9642: struct uses_allocator; 9642: 9642: template 9642: struct allocator_traits; 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 48 "/usr/include/c++/13/bits/allocator.h" 2 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 74 "/usr/include/c++/13/bits/allocator.h" 3 9642: template<> 9642: class allocator 9642: { 9642: public: 9642: typedef void value_type; 9642: typedef size_t size_type; 9642: typedef ptrdiff_t difference_type; 9642: 9642: 9642: 9642: typedef void* pointer; 9642: typedef const void* const_pointer; 9642: 9642: template 9642: struct rebind 9642: { typedef allocator<_Tp1> other; }; 9642: 9642: 9642: 9642: 9642: 9642: using propagate_on_container_move_assignment = true_type; 9642: 9642: using is_always_equal 9642: 9642: = true_type; 9642: # 117 "/usr/include/c++/13/bits/allocator.h" 3 9642: }; 9642: # 129 "/usr/include/c++/13/bits/allocator.h" 3 9642: template 9642: class allocator : public __allocator_base<_Tp> 9642: { 9642: public: 9642: typedef _Tp value_type; 9642: typedef size_t size_type; 9642: typedef ptrdiff_t difference_type; 9642: 9642: 9642: 9642: typedef _Tp* pointer; 9642: typedef const _Tp* const_pointer; 9642: typedef _Tp& reference; 9642: typedef const _Tp& const_reference; 9642: 9642: template 9642: struct rebind 9642: { typedef allocator<_Tp1> other; }; 9642: 9642: 9642: 9642: 9642: 9642: using propagate_on_container_move_assignment = true_type; 9642: 9642: using is_always_equal 9642: 9642: = true_type; 9642: 9642: 9642: 9642: 9642: __attribute__((__always_inline__)) 9642: 9642: allocator() noexcept { } 9642: 9642: __attribute__((__always_inline__)) 9642: 9642: allocator(const allocator& __a) noexcept 9642: : __allocator_base<_Tp>(__a) { } 9642: 9642: 9642: 9642: allocator& operator=(const allocator&) = default; 9642: 9642: 9642: template 9642: __attribute__((__always_inline__)) 9642: 9642: allocator(const allocator<_Tp1>&) noexcept { } 9642: 9642: __attribute__((__always_inline__)) 9642: 9642: 9642: 9642: ~allocator() noexcept { } 9642: # 214 "/usr/include/c++/13/bits/allocator.h" 3 9642: friend __attribute__((__always_inline__)) 9642: bool 9642: operator==(const allocator&, const allocator&) noexcept 9642: { return true; } 9642: 9642: 9642: friend __attribute__((__always_inline__)) 9642: bool 9642: operator!=(const allocator&, const allocator&) noexcept 9642: { return false; } 9642: 9642: 9642: 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: __attribute__((__always_inline__)) 9642: inline bool 9642: operator==(const allocator<_T1>&, const allocator<_T2>&) 9642: noexcept 9642: { return true; } 9642: 9642: 9642: template 9642: __attribute__((__always_inline__)) 9642: inline bool 9642: operator!=(const allocator<_T1>&, const allocator<_T2>&) 9642: noexcept 9642: { return false; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: class allocator 9642: { 9642: public: 9642: typedef _Tp value_type; 9642: allocator() { } 9642: template allocator(const allocator<_Up>&) { } 9642: }; 9642: 9642: template 9642: class allocator 9642: { 9642: public: 9642: typedef _Tp value_type; 9642: allocator() { } 9642: template allocator(const allocator<_Up>&) { } 9642: }; 9642: 9642: template 9642: class allocator 9642: { 9642: public: 9642: typedef _Tp value_type; 9642: allocator() { } 9642: template allocator(const allocator<_Up>&) { } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern template class allocator; 9642: extern template class allocator; 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 64 "/usr/include/c++/13/deque" 2 3 9642: # 1 "/usr/include/c++/13/bits/stl_construct.h" 1 3 9642: # 73 "/usr/include/c++/13/bits/stl_construct.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: template 9642: inline void 9642: destroy_at(_Tp* __location) 9642: { 9642: if constexpr (201703L > 201703L && is_array_v<_Tp>) 9642: { 9642: for (auto& __x : *__location) 9642: std::destroy_at(std::__addressof(__x)); 9642: } 9642: else 9642: __location->~_Tp(); 9642: } 9642: # 106 "/usr/include/c++/13/bits/stl_construct.h" 3 9642: template 9642: 9642: inline void 9642: _Construct(_Tp* __p, _Args&&... __args) 9642: { 9642: # 119 "/usr/include/c++/13/bits/stl_construct.h" 3 9642: ::new((void*)__p) _Tp(std::forward<_Args>(__args)...); 9642: } 9642: # 132 "/usr/include/c++/13/bits/stl_construct.h" 3 9642: template 9642: inline void 9642: _Construct_novalue(_T1* __p) 9642: { ::new((void*)__p) _T1; } 9642: 9642: template 9642: void 9642: _Destroy(_ForwardIterator __first, _ForwardIterator __last); 9642: 9642: 9642: 9642: 9642: template 9642: constexpr inline void 9642: _Destroy(_Tp* __pointer) 9642: { 9642: 9642: 9642: 9642: __pointer->~_Tp(); 9642: 9642: } 9642: 9642: template 9642: struct _Destroy_aux 9642: { 9642: template 9642: static void 9642: __destroy(_ForwardIterator __first, _ForwardIterator __last) 9642: { 9642: for (; __first != __last; ++__first) 9642: std::_Destroy(std::__addressof(*__first)); 9642: } 9642: }; 9642: 9642: template<> 9642: struct _Destroy_aux 9642: { 9642: template 9642: static void 9642: __destroy(_ForwardIterator, _ForwardIterator) { } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline void 9642: _Destroy(_ForwardIterator __first, _ForwardIterator __last) 9642: { 9642: typedef typename iterator_traits<_ForwardIterator>::value_type 9642: _Value_type; 9642: 9642: 9642: static_assert(is_destructible<_Value_type>::value, 9642: "value type is destructible"); 9642: 9642: 9642: 9642: 9642: 9642: std::_Destroy_aux<__has_trivial_destructor(_Value_type)>:: 9642: __destroy(__first, __last); 9642: } 9642: 9642: template 9642: struct _Destroy_n_aux 9642: { 9642: template 9642: static _ForwardIterator 9642: __destroy_n(_ForwardIterator __first, _Size __count) 9642: { 9642: for (; __count > 0; (void)++__first, --__count) 9642: std::_Destroy(std::__addressof(*__first)); 9642: return __first; 9642: } 9642: }; 9642: 9642: template<> 9642: struct _Destroy_n_aux 9642: { 9642: template 9642: static _ForwardIterator 9642: __destroy_n(_ForwardIterator __first, _Size __count) 9642: { 9642: std::advance(__first, __count); 9642: return __first; 9642: } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline _ForwardIterator 9642: _Destroy_n(_ForwardIterator __first, _Size __count) 9642: { 9642: typedef typename iterator_traits<_ForwardIterator>::value_type 9642: _Value_type; 9642: 9642: 9642: static_assert(is_destructible<_Value_type>::value, 9642: "value type is destructible"); 9642: 9642: 9642: 9642: 9642: 9642: return std::_Destroy_n_aux<__has_trivial_destructor(_Value_type)>:: 9642: __destroy_n(__first, __count); 9642: } 9642: 9642: 9642: template 9642: inline void 9642: destroy(_ForwardIterator __first, _ForwardIterator __last) 9642: { 9642: std::_Destroy(__first, __last); 9642: } 9642: 9642: template 9642: inline _ForwardIterator 9642: destroy_n(_ForwardIterator __first, _Size __count) 9642: { 9642: return std::_Destroy_n(__first, __count); 9642: } 9642: 9642: 9642: 9642: } 9642: # 65 "/usr/include/c++/13/deque" 2 3 9642: # 1 "/usr/include/c++/13/bits/stl_uninitialized.h" 1 3 9642: # 64 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 9642: # 1 "/usr/include/c++/13/ext/alloc_traits.h" 1 3 9642: # 32 "/usr/include/c++/13/ext/alloc_traits.h" 3 9642: 9642: # 33 "/usr/include/c++/13/ext/alloc_traits.h" 3 9642: 9642: # 1 "/usr/include/c++/13/bits/alloc_traits.h" 1 3 9642: # 43 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct __allocator_traits_base 9642: { 9642: template 9642: struct __rebind : __replace_first_arg<_Tp, _Up> 9642: { 9642: static_assert(is_same< 9642: typename __replace_first_arg<_Tp, typename _Tp::value_type>::type, 9642: _Tp>::value, 9642: "allocator_traits::rebind_alloc must be A"); 9642: }; 9642: 9642: template 9642: struct __rebind<_Tp, _Up, 9642: __void_t::other>> 9642: { 9642: using type = typename _Tp::template rebind<_Up>::other; 9642: 9642: static_assert(is_same< 9642: typename _Tp::template rebind::other, 9642: _Tp>::value, 9642: "allocator_traits::rebind_alloc must be A"); 9642: }; 9642: 9642: protected: 9642: template 9642: using __pointer = typename _Tp::pointer; 9642: template 9642: using __c_pointer = typename _Tp::const_pointer; 9642: template 9642: using __v_pointer = typename _Tp::void_pointer; 9642: template 9642: using __cv_pointer = typename _Tp::const_void_pointer; 9642: template 9642: using __pocca = typename _Tp::propagate_on_container_copy_assignment; 9642: template 9642: using __pocma = typename _Tp::propagate_on_container_move_assignment; 9642: template 9642: using __pocs = typename _Tp::propagate_on_container_swap; 9642: template 9642: using __equal = __type_identity; 9642: }; 9642: 9642: template 9642: using __alloc_rebind 9642: = typename __allocator_traits_base::template __rebind<_Alloc, _Up>::type; 9642: # 104 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: template 9642: struct allocator_traits : __allocator_traits_base 9642: { 9642: 9642: typedef _Alloc allocator_type; 9642: 9642: typedef typename _Alloc::value_type value_type; 9642: 9642: 9642: 9642: 9642: 9642: 9642: using pointer = __detected_or_t; 9642: 9642: private: 9642: 9642: template class _Func, typename _Tp, typename = void> 9642: struct _Ptr 9642: { 9642: using type = typename pointer_traits::template rebind<_Tp>; 9642: }; 9642: 9642: template class _Func, typename _Tp> 9642: struct _Ptr<_Func, _Tp, __void_t<_Func<_Alloc>>> 9642: { 9642: using type = _Func<_Alloc>; 9642: }; 9642: 9642: 9642: template 9642: struct _Diff 9642: { using type = typename pointer_traits<_PtrT>::difference_type; }; 9642: 9642: template 9642: struct _Diff<_A2, _PtrT, __void_t> 9642: { using type = typename _A2::difference_type; }; 9642: 9642: 9642: template 9642: struct _Size : make_unsigned<_DiffT> { }; 9642: 9642: template 9642: struct _Size<_A2, _DiffT, __void_t> 9642: { using type = typename _A2::size_type; }; 9642: 9642: public: 9642: 9642: 9642: 9642: 9642: 9642: 9642: using const_pointer = typename _Ptr<__c_pointer, const value_type>::type; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: using void_pointer = typename _Ptr<__v_pointer, void>::type; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: using const_void_pointer = typename _Ptr<__cv_pointer, const void>::type; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: using difference_type = typename _Diff<_Alloc, pointer>::type; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: using size_type = typename _Size<_Alloc, difference_type>::type; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: using propagate_on_container_copy_assignment 9642: = __detected_or_t; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: using propagate_on_container_move_assignment 9642: = __detected_or_t; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: using propagate_on_container_swap 9642: = __detected_or_t; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: using is_always_equal 9642: = typename __detected_or_t, __equal, _Alloc>::type; 9642: 9642: template 9642: using rebind_alloc = __alloc_rebind<_Alloc, _Tp>; 9642: template 9642: using rebind_traits = allocator_traits>; 9642: 9642: private: 9642: template 9642: static constexpr auto 9642: _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer __hint, int) 9642: -> decltype(__a.allocate(__n, __hint)) 9642: { return __a.allocate(__n, __hint); } 9642: 9642: template 9642: static constexpr pointer 9642: _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer, ...) 9642: { return __a.allocate(__n); } 9642: 9642: template 9642: struct __construct_helper 9642: { 9642: template()->construct( 9642: std::declval<_Tp*>(), std::declval<_Args>()...))> 9642: static true_type __test(int); 9642: 9642: template 9642: static false_type __test(...); 9642: 9642: using type = decltype(__test<_Alloc>(0)); 9642: }; 9642: 9642: template 9642: using __has_construct 9642: = typename __construct_helper<_Tp, _Args...>::type; 9642: 9642: template 9642: static constexpr _Require<__has_construct<_Tp, _Args...>> 9642: _S_construct(_Alloc& __a, _Tp* __p, _Args&&... __args) 9642: noexcept(noexcept(__a.construct(__p, std::forward<_Args>(__args)...))) 9642: { __a.construct(__p, std::forward<_Args>(__args)...); } 9642: 9642: template 9642: static constexpr 9642: _Require<__and_<__not_<__has_construct<_Tp, _Args...>>, 9642: is_constructible<_Tp, _Args...>>> 9642: _S_construct(_Alloc&, _Tp* __p, _Args&&... __args) 9642: noexcept(std::is_nothrow_constructible<_Tp, _Args...>::value) 9642: { 9642: 9642: ::new((void*)__p) _Tp(std::forward<_Args>(__args)...); 9642: 9642: 9642: 9642: } 9642: 9642: template 9642: static constexpr auto 9642: _S_destroy(_Alloc2& __a, _Tp* __p, int) 9642: noexcept(noexcept(__a.destroy(__p))) 9642: -> decltype(__a.destroy(__p)) 9642: { __a.destroy(__p); } 9642: 9642: template 9642: static constexpr void 9642: _S_destroy(_Alloc2&, _Tp* __p, ...) 9642: noexcept(std::is_nothrow_destructible<_Tp>::value) 9642: { std::_Destroy(__p); } 9642: 9642: template 9642: static constexpr auto 9642: _S_max_size(_Alloc2& __a, int) 9642: -> decltype(__a.max_size()) 9642: { return __a.max_size(); } 9642: 9642: template 9642: static constexpr size_type 9642: _S_max_size(_Alloc2&, ...) 9642: { 9642: 9642: 9642: return __gnu_cxx::__numeric_traits::__max 9642: / sizeof(value_type); 9642: } 9642: 9642: template 9642: static constexpr auto 9642: _S_select(_Alloc2& __a, int) 9642: -> decltype(__a.select_on_container_copy_construction()) 9642: { return __a.select_on_container_copy_construction(); } 9642: 9642: template 9642: static constexpr _Alloc2 9642: _S_select(_Alloc2& __a, ...) 9642: { return __a; } 9642: 9642: public: 9642: # 331 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: [[__nodiscard__]] static pointer 9642: allocate(_Alloc& __a, size_type __n) 9642: { return __a.allocate(__n); } 9642: # 346 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: [[__nodiscard__]] static pointer 9642: allocate(_Alloc& __a, size_type __n, const_void_pointer __hint) 9642: { return _S_allocate(__a, __n, __hint, 0); } 9642: # 358 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: static void 9642: deallocate(_Alloc& __a, pointer __p, size_type __n) 9642: { __a.deallocate(__p, __n); } 9642: # 373 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: template 9642: static auto 9642: construct(_Alloc& __a, _Tp* __p, _Args&&... __args) 9642: noexcept(noexcept(_S_construct(__a, __p, 9642: std::forward<_Args>(__args)...))) 9642: -> decltype(_S_construct(__a, __p, std::forward<_Args>(__args)...)) 9642: { _S_construct(__a, __p, std::forward<_Args>(__args)...); } 9642: # 389 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: template 9642: static void 9642: destroy(_Alloc& __a, _Tp* __p) 9642: noexcept(noexcept(_S_destroy(__a, __p, 0))) 9642: { _S_destroy(__a, __p, 0); } 9642: # 403 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: static size_type 9642: max_size(const _Alloc& __a) noexcept 9642: { return _S_max_size(__a, 0); } 9642: # 415 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: static _Alloc 9642: select_on_container_copy_construction(const _Alloc& __rhs) 9642: { return _S_select(__rhs, 0); } 9642: }; 9642: # 427 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: template 9642: struct allocator_traits> 9642: { 9642: 9642: using allocator_type = allocator<_Tp>; 9642: 9642: 9642: using value_type = _Tp; 9642: 9642: 9642: using pointer = _Tp*; 9642: 9642: 9642: using const_pointer = const _Tp*; 9642: 9642: 9642: using void_pointer = void*; 9642: 9642: 9642: using const_void_pointer = const void*; 9642: 9642: 9642: using difference_type = std::ptrdiff_t; 9642: 9642: 9642: using size_type = std::size_t; 9642: 9642: 9642: using propagate_on_container_copy_assignment = false_type; 9642: 9642: 9642: using propagate_on_container_move_assignment = true_type; 9642: 9642: 9642: using propagate_on_container_swap = false_type; 9642: 9642: 9642: using is_always_equal = true_type; 9642: 9642: template 9642: using rebind_alloc = allocator<_Up>; 9642: 9642: template 9642: using rebind_traits = allocator_traits>; 9642: # 479 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: [[__nodiscard__,__gnu__::__always_inline__]] 9642: static pointer 9642: allocate(allocator_type& __a, size_type __n) 9642: { return __a.allocate(__n); } 9642: # 494 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: [[__nodiscard__,__gnu__::__always_inline__]] 9642: static pointer 9642: allocate(allocator_type& __a, size_type __n, 9642: [[maybe_unused]] const_void_pointer __hint) 9642: { 9642: 9642: return __a.allocate(__n, __hint); 9642: 9642: 9642: 9642: } 9642: # 514 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: [[__gnu__::__always_inline__]] 9642: static void 9642: deallocate(allocator_type& __a, pointer __p, size_type __n) 9642: { __a.deallocate(__p, __n); } 9642: # 530 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: template 9642: [[__gnu__::__always_inline__]] 9642: static void 9642: construct(allocator_type& __a __attribute__((__unused__)), _Up* __p, 9642: _Args&&... __args) 9642: noexcept(std::is_nothrow_constructible<_Up, _Args...>::value) 9642: { 9642: 9642: __a.construct(__p, std::forward<_Args>(__args)...); 9642: 9642: 9642: 9642: } 9642: # 551 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: template 9642: [[__gnu__::__always_inline__]] 9642: static void 9642: destroy(allocator_type& __a __attribute__((__unused__)), _Up* __p) 9642: noexcept(is_nothrow_destructible<_Up>::value) 9642: { 9642: 9642: __a.destroy(__p); 9642: 9642: 9642: 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__gnu__::__always_inline__]] 9642: static size_type 9642: max_size(const allocator_type& __a __attribute__((__unused__))) noexcept 9642: { 9642: 9642: return __a.max_size(); 9642: 9642: 9642: 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__gnu__::__always_inline__]] 9642: static allocator_type 9642: select_on_container_copy_construction(const allocator_type& __rhs) 9642: { return __rhs; } 9642: }; 9642: 9642: 9642: template<> 9642: struct allocator_traits> 9642: { 9642: 9642: using allocator_type = allocator; 9642: 9642: 9642: using value_type = void; 9642: 9642: 9642: using pointer = void*; 9642: 9642: 9642: using const_pointer = const void*; 9642: 9642: 9642: using void_pointer = void*; 9642: 9642: 9642: using const_void_pointer = const void*; 9642: 9642: 9642: using difference_type = std::ptrdiff_t; 9642: 9642: 9642: using size_type = std::size_t; 9642: 9642: 9642: using propagate_on_container_copy_assignment = false_type; 9642: 9642: 9642: using propagate_on_container_move_assignment = true_type; 9642: 9642: 9642: using propagate_on_container_swap = false_type; 9642: 9642: 9642: using is_always_equal = true_type; 9642: 9642: template 9642: using rebind_alloc = allocator<_Up>; 9642: 9642: template 9642: using rebind_traits = allocator_traits>; 9642: 9642: 9642: static void* 9642: allocate(allocator_type&, size_type, const void* = nullptr) = delete; 9642: 9642: 9642: static void 9642: deallocate(allocator_type&, void*, size_type) = delete; 9642: # 656 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: template 9642: [[__gnu__::__always_inline__]] 9642: static void 9642: construct(allocator_type&, _Up* __p, _Args&&... __args) 9642: noexcept(std::is_nothrow_constructible<_Up, _Args...>::value) 9642: { std::_Construct(__p, std::forward<_Args>(__args)...); } 9642: # 670 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: template 9642: [[__gnu__::__always_inline__]] 9642: static void 9642: destroy(allocator_type&, _Up* __p) 9642: noexcept(is_nothrow_destructible<_Up>::value) 9642: { std::_Destroy(__p); } 9642: 9642: 9642: static size_type 9642: max_size(const allocator_type&) = delete; 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__gnu__::__always_inline__]] 9642: static allocator_type 9642: select_on_container_copy_construction(const allocator_type& __rhs) 9642: { return __rhs; } 9642: }; 9642: # 708 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: template 9642: [[__gnu__::__always_inline__]] 9642: constexpr inline void 9642: __alloc_on_copy(_Alloc& __one, const _Alloc& __two) 9642: { 9642: using __traits = allocator_traits<_Alloc>; 9642: using __pocca = 9642: typename __traits::propagate_on_container_copy_assignment::type; 9642: 9642: if constexpr (__pocca::value) 9642: __one = __two; 9642: 9642: 9642: 9642: } 9642: 9642: template 9642: [[__gnu__::__always_inline__]] 9642: constexpr _Alloc 9642: __alloc_on_copy(const _Alloc& __a) 9642: { 9642: typedef allocator_traits<_Alloc> __traits; 9642: return __traits::select_on_container_copy_construction(__a); 9642: } 9642: # 745 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: template 9642: [[__gnu__::__always_inline__]] 9642: constexpr inline void 9642: __alloc_on_move(_Alloc& __one, _Alloc& __two) 9642: { 9642: using __traits = allocator_traits<_Alloc>; 9642: using __pocma 9642: = typename __traits::propagate_on_container_move_assignment::type; 9642: 9642: if constexpr (__pocma::value) 9642: __one = std::move(__two); 9642: 9642: 9642: 9642: } 9642: # 776 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: template 9642: [[__gnu__::__always_inline__]] 9642: constexpr inline void 9642: __alloc_on_swap(_Alloc& __one, _Alloc& __two) 9642: { 9642: using __traits = allocator_traits<_Alloc>; 9642: using __pocs = typename __traits::propagate_on_container_swap::type; 9642: 9642: if constexpr (__pocs::value) 9642: { 9642: using std::swap; 9642: swap(__one, __two); 9642: } 9642: 9642: 9642: 9642: } 9642: 9642: template, 9642: typename = void> 9642: struct __is_alloc_insertable_impl 9642: : false_type 9642: { }; 9642: 9642: template 9642: struct __is_alloc_insertable_impl<_Alloc, _Tp, _ValueT, 9642: __void_t::construct( 9642: std::declval<_Alloc&>(), std::declval<_ValueT*>(), 9642: std::declval<_Tp>()))>> 9642: : true_type 9642: { }; 9642: 9642: 9642: 9642: 9642: template 9642: struct __is_copy_insertable 9642: : __is_alloc_insertable_impl<_Alloc, 9642: typename _Alloc::value_type const&>::type 9642: { }; 9642: 9642: 9642: 9642: template 9642: struct __is_copy_insertable> 9642: : is_copy_constructible<_Tp> 9642: { }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct __is_move_insertable 9642: : __is_alloc_insertable_impl<_Alloc, typename _Alloc::value_type>::type 9642: { }; 9642: 9642: 9642: 9642: template 9642: struct __is_move_insertable> 9642: : is_move_constructible<_Tp> 9642: { }; 9642: 9642: 9642: 9642: template 9642: struct __is_allocator : false_type { }; 9642: 9642: template 9642: struct __is_allocator<_Alloc, 9642: __void_t().allocate(size_t{}))>> 9642: : true_type { }; 9642: 9642: template 9642: using _RequireAllocator 9642: = typename enable_if<__is_allocator<_Alloc>::value, _Alloc>::type; 9642: 9642: template 9642: using _RequireNotAllocator 9642: = typename enable_if::value, _Alloc>::type; 9642: # 873 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: template 9642: struct __alloc_swap 9642: { static void _S_do_it(_Alloc&, _Alloc&) noexcept { } }; 9642: 9642: template 9642: struct __alloc_swap<_Alloc, false> 9642: { 9642: static void 9642: _S_do_it(_Alloc& __one, _Alloc& __two) noexcept 9642: { 9642: 9642: if (__one != __two) 9642: swap(__one, __two); 9642: } 9642: }; 9642: 9642: 9642: template, 9642: is_nothrow_move_constructible>::value> 9642: struct __shrink_to_fit_aux 9642: { static bool _S_do_it(_Tp&) noexcept { return false; } }; 9642: 9642: template 9642: struct __shrink_to_fit_aux<_Tp, true> 9642: { 9642: 9642: static bool 9642: _S_do_it(_Tp& __c) noexcept 9642: { 9642: 9642: try 9642: { 9642: _Tp(__make_move_if_noexcept_iterator(__c.begin()), 9642: __make_move_if_noexcept_iterator(__c.end()), 9642: __c.get_allocator()).swap(__c); 9642: return true; 9642: } 9642: catch(...) 9642: { return false; } 9642: 9642: 9642: 9642: } 9642: }; 9642: # 926 "/usr/include/c++/13/bits/alloc_traits.h" 3 9642: template 9642: 9642: void 9642: _Destroy(_ForwardIterator __first, _ForwardIterator __last, 9642: _Allocator& __alloc) 9642: { 9642: for (; __first != __last; ++__first) 9642: 9642: 9642: 9642: allocator_traits<_Allocator>::destroy(__alloc, 9642: std::__addressof(*__first)); 9642: 9642: } 9642: 9642: 9642: template 9642: __attribute__((__always_inline__)) 9642: inline void 9642: _Destroy(_ForwardIterator __first, _ForwardIterator __last, 9642: allocator<_Tp>&) 9642: { 9642: std::_Destroy(__first, __last); 9642: } 9642: 9642: 9642: 9642: 9642: } 9642: # 35 "/usr/include/c++/13/ext/alloc_traits.h" 2 3 9642: 9642: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct __alloc_traits 9642: 9642: : std::allocator_traits<_Alloc> 9642: 9642: { 9642: typedef _Alloc allocator_type; 9642: 9642: typedef std::allocator_traits<_Alloc> _Base_type; 9642: typedef typename _Base_type::value_type value_type; 9642: typedef typename _Base_type::pointer pointer; 9642: typedef typename _Base_type::const_pointer const_pointer; 9642: typedef typename _Base_type::size_type size_type; 9642: typedef typename _Base_type::difference_type difference_type; 9642: 9642: typedef value_type& reference; 9642: typedef const value_type& const_reference; 9642: using _Base_type::allocate; 9642: using _Base_type::deallocate; 9642: using _Base_type::construct; 9642: using _Base_type::destroy; 9642: using _Base_type::max_size; 9642: 9642: private: 9642: template 9642: using __is_custom_pointer 9642: = std::__and_, 9642: std::__not_>>; 9642: 9642: public: 9642: 9642: template 9642: [[__gnu__::__always_inline__]] 9642: static constexpr 9642: std::__enable_if_t<__is_custom_pointer<_Ptr>::value> 9642: construct(_Alloc& __a, _Ptr __p, _Args&&... __args) 9642: noexcept(noexcept(_Base_type::construct(__a, std::__to_address(__p), 9642: std::forward<_Args>(__args)...))) 9642: { 9642: _Base_type::construct(__a, std::__to_address(__p), 9642: std::forward<_Args>(__args)...); 9642: } 9642: 9642: 9642: template 9642: [[__gnu__::__always_inline__]] 9642: static constexpr 9642: std::__enable_if_t<__is_custom_pointer<_Ptr>::value> 9642: destroy(_Alloc& __a, _Ptr __p) 9642: noexcept(noexcept(_Base_type::destroy(__a, std::__to_address(__p)))) 9642: { _Base_type::destroy(__a, std::__to_address(__p)); } 9642: 9642: [[__gnu__::__always_inline__]] 9642: static constexpr _Alloc _S_select_on_copy(const _Alloc& __a) 9642: { return _Base_type::select_on_container_copy_construction(__a); } 9642: 9642: [[__gnu__::__always_inline__]] 9642: static constexpr void _S_on_swap(_Alloc& __a, _Alloc& __b) 9642: { std::__alloc_on_swap(__a, __b); } 9642: 9642: [[__gnu__::__always_inline__]] 9642: static constexpr bool _S_propagate_on_copy_assign() 9642: { return _Base_type::propagate_on_container_copy_assignment::value; } 9642: 9642: [[__gnu__::__always_inline__]] 9642: static constexpr bool _S_propagate_on_move_assign() 9642: { return _Base_type::propagate_on_container_move_assignment::value; } 9642: 9642: [[__gnu__::__always_inline__]] 9642: static constexpr bool _S_propagate_on_swap() 9642: { return _Base_type::propagate_on_container_swap::value; } 9642: 9642: [[__gnu__::__always_inline__]] 9642: static constexpr bool _S_always_equal() 9642: { return _Base_type::is_always_equal::value; } 9642: 9642: __attribute__((__always_inline__)) 9642: static constexpr bool _S_nothrow_move() 9642: { return _S_propagate_on_move_assign() || _S_always_equal(); } 9642: 9642: template 9642: struct rebind 9642: { typedef typename _Base_type::template rebind_alloc<_Tp> other; }; 9642: # 180 "/usr/include/c++/13/ext/alloc_traits.h" 3 9642: }; 9642: 9642: 9642: } 9642: # 65 "/usr/include/c++/13/bits/stl_uninitialized.h" 2 3 9642: 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 81 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 9642: template 9642: constexpr bool 9642: __check_constructible() 9642: { 9642: 9642: 9642: 9642: 9642: 9642: static_assert(is_constructible<_ValueType, _Tp>::value, 9642: "result type must be constructible from input type"); 9642: 9642: return true; 9642: } 9642: # 110 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 9642: template 9642: 9642: _ForwardIterator 9642: __do_uninit_copy(_InputIterator __first, _InputIterator __last, 9642: _ForwardIterator __result) 9642: { 9642: _ForwardIterator __cur = __result; 9642: try 9642: { 9642: for (; __first != __last; ++__first, (void)++__cur) 9642: std::_Construct(std::__addressof(*__cur), *__first); 9642: return __cur; 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__result, __cur); 9642: throw; 9642: } 9642: } 9642: 9642: template 9642: struct __uninitialized_copy 9642: { 9642: template 9642: static _ForwardIterator 9642: __uninit_copy(_InputIterator __first, _InputIterator __last, 9642: _ForwardIterator __result) 9642: { return std::__do_uninit_copy(__first, __last, __result); } 9642: }; 9642: 9642: template<> 9642: struct __uninitialized_copy 9642: { 9642: template 9642: static _ForwardIterator 9642: __uninit_copy(_InputIterator __first, _InputIterator __last, 9642: _ForwardIterator __result) 9642: { return std::copy(__first, __last, __result); } 9642: }; 9642: # 161 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 9642: template 9642: inline _ForwardIterator 9642: uninitialized_copy(_InputIterator __first, _InputIterator __last, 9642: _ForwardIterator __result) 9642: { 9642: typedef typename iterator_traits<_InputIterator>::value_type 9642: _ValueType1; 9642: typedef typename iterator_traits<_ForwardIterator>::value_type 9642: _ValueType2; 9642: 9642: 9642: 9642: 9642: const bool __can_memmove = __is_trivial(_ValueType1); 9642: 9642: 9642: 9642: 9642: using _From = decltype(*__first); 9642: 9642: const bool __assignable 9642: = __is_trivial(_ValueType2) && __is_assignable(_ValueType2&, _From) && std::__check_constructible<_ValueType2, _From>(); 9642: 9642: return std::__uninitialized_copy<__can_memmove && __assignable>:: 9642: __uninit_copy(__first, __last, __result); 9642: } 9642: 9642: 9642: 9642: template 9642: void 9642: __do_uninit_fill(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __x) 9642: { 9642: _ForwardIterator __cur = __first; 9642: try 9642: { 9642: for (; __cur != __last; ++__cur) 9642: std::_Construct(std::__addressof(*__cur), __x); 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__first, __cur); 9642: throw; 9642: } 9642: } 9642: 9642: template 9642: struct __uninitialized_fill 9642: { 9642: template 9642: static void 9642: __uninit_fill(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __x) 9642: { std::__do_uninit_fill(__first, __last, __x); } 9642: }; 9642: 9642: template<> 9642: struct __uninitialized_fill 9642: { 9642: template 9642: static void 9642: __uninit_fill(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __x) 9642: { std::fill(__first, __last, __x); } 9642: }; 9642: # 239 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 9642: template 9642: inline void 9642: uninitialized_fill(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __x) 9642: { 9642: typedef typename iterator_traits<_ForwardIterator>::value_type 9642: _ValueType; 9642: 9642: 9642: 9642: const bool __can_fill 9642: = __is_trivial(_ValueType) && __is_assignable(_ValueType&, const _Tp&) && std::__check_constructible<_ValueType, const _Tp&>(); 9642: 9642: std::__uninitialized_fill<__can_fill>:: 9642: __uninit_fill(__first, __last, __x); 9642: } 9642: 9642: 9642: 9642: template 9642: 9642: _ForwardIterator 9642: __do_uninit_fill_n(_ForwardIterator __first, _Size __n, const _Tp& __x) 9642: { 9642: _ForwardIterator __cur = __first; 9642: try 9642: { 9642: for (; __n > 0; --__n, (void) ++__cur) 9642: std::_Construct(std::__addressof(*__cur), __x); 9642: return __cur; 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__first, __cur); 9642: throw; 9642: } 9642: } 9642: 9642: template 9642: struct __uninitialized_fill_n 9642: { 9642: template 9642: static _ForwardIterator 9642: __uninit_fill_n(_ForwardIterator __first, _Size __n, 9642: const _Tp& __x) 9642: { return std::__do_uninit_fill_n(__first, __n, __x); } 9642: }; 9642: 9642: template<> 9642: struct __uninitialized_fill_n 9642: { 9642: template 9642: static _ForwardIterator 9642: __uninit_fill_n(_ForwardIterator __first, _Size __n, 9642: const _Tp& __x) 9642: { return std::fill_n(__first, __n, __x); } 9642: }; 9642: # 310 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 9642: template 9642: inline _ForwardIterator 9642: uninitialized_fill_n(_ForwardIterator __first, _Size __n, const _Tp& __x) 9642: { 9642: typedef typename iterator_traits<_ForwardIterator>::value_type 9642: _ValueType; 9642: 9642: 9642: 9642: const bool __can_fill 9642: = __is_trivial(_ValueType) && __is_assignable(_ValueType&, const _Tp&) && std::__check_constructible<_ValueType, const _Tp&>() 9642: 9642: 9642: 9642: && __is_integer<_Size>::__value; 9642: 9642: return __uninitialized_fill_n<__can_fill>:: 9642: __uninit_fill_n(__first, __n, __x); 9642: } 9642: # 340 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 9642: template 9642: 9642: _ForwardIterator 9642: __uninitialized_copy_a(_InputIterator __first, _InputIterator __last, 9642: _ForwardIterator __result, _Allocator& __alloc) 9642: { 9642: _ForwardIterator __cur = __result; 9642: try 9642: { 9642: typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; 9642: for (; __first != __last; ++__first, (void)++__cur) 9642: __traits::construct(__alloc, std::__addressof(*__cur), *__first); 9642: return __cur; 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__result, __cur, __alloc); 9642: throw; 9642: } 9642: } 9642: 9642: 9642: template 9642: 9642: inline _ForwardIterator 9642: __uninitialized_copy_a(_InputIterator __first, _InputIterator __last, 9642: _ForwardIterator __result, allocator<_Tp>&) 9642: { 9642: 9642: 9642: 9642: 9642: return std::uninitialized_copy(__first, __last, __result); 9642: } 9642: 9642: 9642: template 9642: 9642: inline _ForwardIterator 9642: __uninitialized_move_a(_InputIterator __first, _InputIterator __last, 9642: _ForwardIterator __result, _Allocator& __alloc) 9642: { 9642: return std::__uninitialized_copy_a(std::make_move_iterator(__first), 9642: std::make_move_iterator(__last), 9642: __result, __alloc); 9642: } 9642: 9642: template 9642: 9642: inline _ForwardIterator 9642: __uninitialized_move_if_noexcept_a(_InputIterator __first, 9642: _InputIterator __last, 9642: _ForwardIterator __result, 9642: _Allocator& __alloc) 9642: { 9642: return std::__uninitialized_copy_a 9642: (std::__make_move_if_noexcept_iterator(__first), 9642: std::__make_move_if_noexcept_iterator(__last), __result, __alloc); 9642: } 9642: 9642: template 9642: 9642: void 9642: __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __x, _Allocator& __alloc) 9642: { 9642: _ForwardIterator __cur = __first; 9642: try 9642: { 9642: typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; 9642: for (; __cur != __last; ++__cur) 9642: __traits::construct(__alloc, std::__addressof(*__cur), __x); 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__first, __cur, __alloc); 9642: throw; 9642: } 9642: } 9642: 9642: 9642: template 9642: 9642: inline void 9642: __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __x, allocator<_Tp2>&) 9642: { 9642: 9642: 9642: 9642: 9642: std::uninitialized_fill(__first, __last, __x); 9642: } 9642: 9642: 9642: template 9642: 9642: _ForwardIterator 9642: __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n, 9642: const _Tp& __x, _Allocator& __alloc) 9642: { 9642: _ForwardIterator __cur = __first; 9642: try 9642: { 9642: typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; 9642: for (; __n > 0; --__n, (void) ++__cur) 9642: __traits::construct(__alloc, std::__addressof(*__cur), __x); 9642: return __cur; 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__first, __cur, __alloc); 9642: throw; 9642: } 9642: } 9642: 9642: 9642: template 9642: 9642: inline _ForwardIterator 9642: __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n, 9642: const _Tp& __x, allocator<_Tp2>&) 9642: { 9642: 9642: 9642: 9642: 9642: return std::uninitialized_fill_n(__first, __n, __x); 9642: } 9642: # 485 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 9642: template 9642: inline _ForwardIterator 9642: __uninitialized_copy_move(_InputIterator1 __first1, 9642: _InputIterator1 __last1, 9642: _InputIterator2 __first2, 9642: _InputIterator2 __last2, 9642: _ForwardIterator __result, 9642: _Allocator& __alloc) 9642: { 9642: _ForwardIterator __mid = std::__uninitialized_copy_a(__first1, __last1, 9642: __result, 9642: __alloc); 9642: try 9642: { 9642: return std::__uninitialized_move_a(__first2, __last2, __mid, __alloc); 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__result, __mid, __alloc); 9642: throw; 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline _ForwardIterator 9642: __uninitialized_move_copy(_InputIterator1 __first1, 9642: _InputIterator1 __last1, 9642: _InputIterator2 __first2, 9642: _InputIterator2 __last2, 9642: _ForwardIterator __result, 9642: _Allocator& __alloc) 9642: { 9642: _ForwardIterator __mid = std::__uninitialized_move_a(__first1, __last1, 9642: __result, 9642: __alloc); 9642: try 9642: { 9642: return std::__uninitialized_copy_a(__first2, __last2, __mid, __alloc); 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__result, __mid, __alloc); 9642: throw; 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: inline _ForwardIterator 9642: __uninitialized_fill_move(_ForwardIterator __result, _ForwardIterator __mid, 9642: const _Tp& __x, _InputIterator __first, 9642: _InputIterator __last, _Allocator& __alloc) 9642: { 9642: std::__uninitialized_fill_a(__result, __mid, __x, __alloc); 9642: try 9642: { 9642: return std::__uninitialized_move_a(__first, __last, __mid, __alloc); 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__result, __mid, __alloc); 9642: throw; 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: inline void 9642: __uninitialized_move_fill(_InputIterator __first1, _InputIterator __last1, 9642: _ForwardIterator __first2, 9642: _ForwardIterator __last2, const _Tp& __x, 9642: _Allocator& __alloc) 9642: { 9642: _ForwardIterator __mid2 = std::__uninitialized_move_a(__first1, __last1, 9642: __first2, 9642: __alloc); 9642: try 9642: { 9642: std::__uninitialized_fill_a(__mid2, __last2, __x, __alloc); 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__first2, __mid2, __alloc); 9642: throw; 9642: } 9642: } 9642: # 592 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 9642: template 9642: struct __uninitialized_default_1 9642: { 9642: template 9642: static void 9642: __uninit_default(_ForwardIterator __first, _ForwardIterator __last) 9642: { 9642: _ForwardIterator __cur = __first; 9642: try 9642: { 9642: for (; __cur != __last; ++__cur) 9642: std::_Construct(std::__addressof(*__cur)); 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__first, __cur); 9642: throw; 9642: } 9642: } 9642: }; 9642: 9642: template<> 9642: struct __uninitialized_default_1 9642: { 9642: template 9642: static void 9642: __uninit_default(_ForwardIterator __first, _ForwardIterator __last) 9642: { 9642: if (__first == __last) 9642: return; 9642: 9642: typename iterator_traits<_ForwardIterator>::value_type* __val 9642: = std::__addressof(*__first); 9642: std::_Construct(__val); 9642: if (++__first != __last) 9642: std::fill(__first, __last, *__val); 9642: } 9642: }; 9642: 9642: template 9642: struct __uninitialized_default_n_1 9642: { 9642: template 9642: 9642: static _ForwardIterator 9642: __uninit_default_n(_ForwardIterator __first, _Size __n) 9642: { 9642: _ForwardIterator __cur = __first; 9642: try 9642: { 9642: for (; __n > 0; --__n, (void) ++__cur) 9642: std::_Construct(std::__addressof(*__cur)); 9642: return __cur; 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__first, __cur); 9642: throw; 9642: } 9642: } 9642: }; 9642: 9642: template<> 9642: struct __uninitialized_default_n_1 9642: { 9642: template 9642: 9642: static _ForwardIterator 9642: __uninit_default_n(_ForwardIterator __first, _Size __n) 9642: { 9642: if (__n > 0) 9642: { 9642: typename iterator_traits<_ForwardIterator>::value_type* __val 9642: = std::__addressof(*__first); 9642: std::_Construct(__val); 9642: ++__first; 9642: __first = std::fill_n(__first, __n - 1, *__val); 9642: } 9642: return __first; 9642: } 9642: }; 9642: 9642: 9642: 9642: template 9642: inline void 9642: __uninitialized_default(_ForwardIterator __first, 9642: _ForwardIterator __last) 9642: { 9642: typedef typename iterator_traits<_ForwardIterator>::value_type 9642: _ValueType; 9642: 9642: const bool __assignable = is_copy_assignable<_ValueType>::value; 9642: 9642: std::__uninitialized_default_1<__is_trivial(_ValueType) 9642: && __assignable>:: 9642: __uninit_default(__first, __last); 9642: } 9642: 9642: 9642: 9642: template 9642: 9642: inline _ForwardIterator 9642: __uninitialized_default_n(_ForwardIterator __first, _Size __n) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef typename iterator_traits<_ForwardIterator>::value_type 9642: _ValueType; 9642: 9642: constexpr bool __can_fill 9642: = __and_, is_copy_assignable<_ValueType>>::value; 9642: 9642: return __uninitialized_default_n_1<__is_trivial(_ValueType) 9642: && __can_fill>:: 9642: __uninit_default_n(__first, __n); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: void 9642: __uninitialized_default_a(_ForwardIterator __first, 9642: _ForwardIterator __last, 9642: _Allocator& __alloc) 9642: { 9642: _ForwardIterator __cur = __first; 9642: try 9642: { 9642: typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; 9642: for (; __cur != __last; ++__cur) 9642: __traits::construct(__alloc, std::__addressof(*__cur)); 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__first, __cur, __alloc); 9642: throw; 9642: } 9642: } 9642: 9642: 9642: template 9642: inline void 9642: __uninitialized_default_a(_ForwardIterator __first, 9642: _ForwardIterator __last, 9642: allocator<_Tp>&) 9642: { std::__uninitialized_default(__first, __last); } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: _ForwardIterator 9642: __uninitialized_default_n_a(_ForwardIterator __first, _Size __n, 9642: _Allocator& __alloc) 9642: { 9642: _ForwardIterator __cur = __first; 9642: try 9642: { 9642: typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; 9642: for (; __n > 0; --__n, (void) ++__cur) 9642: __traits::construct(__alloc, std::__addressof(*__cur)); 9642: return __cur; 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__first, __cur, __alloc); 9642: throw; 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: 9642: inline _ForwardIterator 9642: __uninitialized_default_n_a(_ForwardIterator __first, _Size __n, 9642: allocator<_Tp>&) 9642: { return std::__uninitialized_default_n(__first, __n); } 9642: 9642: 9642: template 9642: struct __uninitialized_default_novalue_1 9642: { 9642: template 9642: static void 9642: __uninit_default_novalue(_ForwardIterator __first, 9642: _ForwardIterator __last) 9642: { 9642: _ForwardIterator __cur = __first; 9642: try 9642: { 9642: for (; __cur != __last; ++__cur) 9642: std::_Construct_novalue(std::__addressof(*__cur)); 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__first, __cur); 9642: throw; 9642: } 9642: } 9642: }; 9642: 9642: template<> 9642: struct __uninitialized_default_novalue_1 9642: { 9642: template 9642: static void 9642: __uninit_default_novalue(_ForwardIterator, _ForwardIterator) 9642: { 9642: } 9642: }; 9642: 9642: template 9642: struct __uninitialized_default_novalue_n_1 9642: { 9642: template 9642: static _ForwardIterator 9642: __uninit_default_novalue_n(_ForwardIterator __first, _Size __n) 9642: { 9642: _ForwardIterator __cur = __first; 9642: try 9642: { 9642: for (; __n > 0; --__n, (void) ++__cur) 9642: std::_Construct_novalue(std::__addressof(*__cur)); 9642: return __cur; 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__first, __cur); 9642: throw; 9642: } 9642: } 9642: }; 9642: 9642: template<> 9642: struct __uninitialized_default_novalue_n_1 9642: { 9642: template 9642: static _ForwardIterator 9642: __uninit_default_novalue_n(_ForwardIterator __first, _Size __n) 9642: { return std::next(__first, __n); } 9642: }; 9642: 9642: 9642: 9642: template 9642: inline void 9642: __uninitialized_default_novalue(_ForwardIterator __first, 9642: _ForwardIterator __last) 9642: { 9642: typedef typename iterator_traits<_ForwardIterator>::value_type 9642: _ValueType; 9642: 9642: std::__uninitialized_default_novalue_1< 9642: is_trivially_default_constructible<_ValueType>::value>:: 9642: __uninit_default_novalue(__first, __last); 9642: } 9642: 9642: 9642: 9642: template 9642: inline _ForwardIterator 9642: __uninitialized_default_novalue_n(_ForwardIterator __first, _Size __n) 9642: { 9642: typedef typename iterator_traits<_ForwardIterator>::value_type 9642: _ValueType; 9642: 9642: return __uninitialized_default_novalue_n_1< 9642: is_trivially_default_constructible<_ValueType>::value>:: 9642: __uninit_default_novalue_n(__first, __n); 9642: } 9642: 9642: template 9642: _ForwardIterator 9642: __uninitialized_copy_n(_InputIterator __first, _Size __n, 9642: _ForwardIterator __result, input_iterator_tag) 9642: { 9642: _ForwardIterator __cur = __result; 9642: try 9642: { 9642: for (; __n > 0; --__n, (void) ++__first, ++__cur) 9642: std::_Construct(std::__addressof(*__cur), *__first); 9642: return __cur; 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__result, __cur); 9642: throw; 9642: } 9642: } 9642: 9642: template 9642: inline _ForwardIterator 9642: __uninitialized_copy_n(_RandomAccessIterator __first, _Size __n, 9642: _ForwardIterator __result, 9642: random_access_iterator_tag) 9642: { return std::uninitialized_copy(__first, __first + __n, __result); } 9642: 9642: template 9642: pair<_InputIterator, _ForwardIterator> 9642: __uninitialized_copy_n_pair(_InputIterator __first, _Size __n, 9642: _ForwardIterator __result, input_iterator_tag) 9642: { 9642: _ForwardIterator __cur = __result; 9642: try 9642: { 9642: for (; __n > 0; --__n, (void) ++__first, ++__cur) 9642: std::_Construct(std::__addressof(*__cur), *__first); 9642: return {__first, __cur}; 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__result, __cur); 9642: throw; 9642: } 9642: } 9642: 9642: template 9642: inline pair<_RandomAccessIterator, _ForwardIterator> 9642: __uninitialized_copy_n_pair(_RandomAccessIterator __first, _Size __n, 9642: _ForwardIterator __result, 9642: random_access_iterator_tag) 9642: { 9642: auto __second_res = uninitialized_copy(__first, __first + __n, __result); 9642: auto __first_res = std::next(__first, __n); 9642: return {__first_res, __second_res}; 9642: } 9642: # 946 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 9642: template 9642: inline _ForwardIterator 9642: uninitialized_copy_n(_InputIterator __first, _Size __n, 9642: _ForwardIterator __result) 9642: { return std::__uninitialized_copy_n(__first, __n, __result, 9642: std::__iterator_category(__first)); } 9642: 9642: 9642: template 9642: inline pair<_InputIterator, _ForwardIterator> 9642: __uninitialized_copy_n_pair(_InputIterator __first, _Size __n, 9642: _ForwardIterator __result) 9642: { 9642: return 9642: std::__uninitialized_copy_n_pair(__first, __n, __result, 9642: std::__iterator_category(__first)); 9642: } 9642: # 975 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 9642: template 9642: inline void 9642: uninitialized_default_construct(_ForwardIterator __first, 9642: _ForwardIterator __last) 9642: { 9642: __uninitialized_default_novalue(__first, __last); 9642: } 9642: # 990 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 9642: template 9642: inline _ForwardIterator 9642: uninitialized_default_construct_n(_ForwardIterator __first, _Size __count) 9642: { 9642: return __uninitialized_default_novalue_n(__first, __count); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline void 9642: uninitialized_value_construct(_ForwardIterator __first, 9642: _ForwardIterator __last) 9642: { 9642: return __uninitialized_default(__first, __last); 9642: } 9642: # 1018 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 9642: template 9642: inline _ForwardIterator 9642: uninitialized_value_construct_n(_ForwardIterator __first, _Size __count) 9642: { 9642: return __uninitialized_default_n(__first, __count); 9642: } 9642: # 1033 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 9642: template 9642: inline _ForwardIterator 9642: uninitialized_move(_InputIterator __first, _InputIterator __last, 9642: _ForwardIterator __result) 9642: { 9642: return std::uninitialized_copy 9642: (std::make_move_iterator(__first), 9642: std::make_move_iterator(__last), __result); 9642: } 9642: # 1051 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 9642: template 9642: inline pair<_InputIterator, _ForwardIterator> 9642: uninitialized_move_n(_InputIterator __first, _Size __count, 9642: _ForwardIterator __result) 9642: { 9642: auto __res = std::__uninitialized_copy_n_pair 9642: (std::make_move_iterator(__first), 9642: __count, __result); 9642: return {__res.first.base(), __res.second}; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: inline void 9642: __relocate_object_a(_Tp* __restrict __dest, _Up* __restrict __orig, 9642: _Allocator& __alloc) 9642: noexcept(noexcept(std::allocator_traits<_Allocator>::construct(__alloc, 9642: __dest, std::move(*__orig))) 9642: && noexcept(std::allocator_traits<_Allocator>::destroy( 9642: __alloc, std::__addressof(*__orig)))) 9642: { 9642: typedef std::allocator_traits<_Allocator> __traits; 9642: __traits::construct(__alloc, __dest, std::move(*__orig)); 9642: __traits::destroy(__alloc, std::__addressof(*__orig)); 9642: } 9642: 9642: 9642: 9642: template 9642: struct __is_bitwise_relocatable 9642: : is_trivial<_Tp> { }; 9642: 9642: template 9642: 9642: inline _ForwardIterator 9642: __relocate_a_1(_InputIterator __first, _InputIterator __last, 9642: _ForwardIterator __result, _Allocator& __alloc) 9642: noexcept(noexcept(std::__relocate_object_a(std::addressof(*__result), 9642: std::addressof(*__first), 9642: __alloc))) 9642: { 9642: typedef typename iterator_traits<_InputIterator>::value_type 9642: _ValueType; 9642: typedef typename iterator_traits<_ForwardIterator>::value_type 9642: _ValueType2; 9642: static_assert(std::is_same<_ValueType, _ValueType2>::value, 9642: "relocation is only possible for values of the same type"); 9642: _ForwardIterator __cur = __result; 9642: for (; __first != __last; ++__first, (void)++__cur) 9642: std::__relocate_object_a(std::__addressof(*__cur), 9642: std::__addressof(*__first), __alloc); 9642: return __cur; 9642: } 9642: 9642: 9642: template 9642: 9642: inline __enable_if_t::value, _Tp*> 9642: __relocate_a_1(_Tp* __first, _Tp* __last, 9642: _Tp* __result, 9642: [[__maybe_unused__]] allocator<_Up>& __alloc) noexcept 9642: { 9642: ptrdiff_t __count = __last - __first; 9642: if (__count > 0) 9642: { 9642: # 1131 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 9642: __builtin_memmove(__result, __first, __count * sizeof(_Tp)); 9642: } 9642: return __result + __count; 9642: } 9642: 9642: 9642: template 9642: 9642: inline _ForwardIterator 9642: __relocate_a(_InputIterator __first, _InputIterator __last, 9642: _ForwardIterator __result, _Allocator& __alloc) 9642: noexcept(noexcept(__relocate_a_1(std::__niter_base(__first), 9642: std::__niter_base(__last), 9642: std::__niter_base(__result), __alloc))) 9642: { 9642: return std::__relocate_a_1(std::__niter_base(__first), 9642: std::__niter_base(__last), 9642: std::__niter_base(__result), __alloc); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 66 "/usr/include/c++/13/deque" 2 3 9642: # 1 "/usr/include/c++/13/bits/stl_deque.h" 1 3 9642: # 63 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: # 1 "/usr/include/c++/13/initializer_list" 1 3 9642: # 33 "/usr/include/c++/13/initializer_list" 3 9642: 9642: # 34 "/usr/include/c++/13/initializer_list" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: template 9642: class initializer_list 9642: { 9642: public: 9642: typedef _E value_type; 9642: typedef const _E& reference; 9642: typedef const _E& const_reference; 9642: typedef size_t size_type; 9642: typedef const _E* iterator; 9642: typedef const _E* const_iterator; 9642: 9642: private: 9642: iterator _M_array; 9642: size_type _M_len; 9642: 9642: 9642: constexpr initializer_list(const_iterator __a, size_type __l) 9642: : _M_array(__a), _M_len(__l) { } 9642: 9642: public: 9642: constexpr initializer_list() noexcept 9642: : _M_array(0), _M_len(0) { } 9642: 9642: 9642: constexpr size_type 9642: size() const noexcept { return _M_len; } 9642: 9642: 9642: constexpr const_iterator 9642: begin() const noexcept { return _M_array; } 9642: 9642: 9642: constexpr const_iterator 9642: end() const noexcept { return begin() + size(); } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: constexpr const _Tp* 9642: begin(initializer_list<_Tp> __ils) noexcept 9642: { return __ils.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: constexpr const _Tp* 9642: end(initializer_list<_Tp> __ils) noexcept 9642: { return __ils.end(); } 9642: } 9642: # 64 "/usr/include/c++/13/bits/stl_deque.h" 2 3 9642: # 72 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: # 95 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: constexpr inline size_t 9642: __deque_buf_size(size_t __size) 9642: { return (__size < 512 9642: ? size_t(512 / __size) : size_t(1)); } 9642: # 112 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: template 9642: struct _Deque_iterator 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: private: 9642: template 9642: using __iter = _Deque_iterator<_Tp, _CvTp&, __ptr_rebind<_Ptr, _CvTp>>; 9642: public: 9642: typedef __iter<_Tp> iterator; 9642: typedef __iter const_iterator; 9642: typedef __ptr_rebind<_Ptr, _Tp> _Elt_pointer; 9642: typedef __ptr_rebind<_Ptr, _Elt_pointer> _Map_pointer; 9642: 9642: 9642: static size_t _S_buffer_size() noexcept 9642: { return __deque_buf_size(sizeof(_Tp)); } 9642: 9642: typedef std::random_access_iterator_tag iterator_category; 9642: typedef _Tp value_type; 9642: typedef _Ptr pointer; 9642: typedef _Ref reference; 9642: typedef size_t size_type; 9642: typedef ptrdiff_t difference_type; 9642: typedef _Deque_iterator _Self; 9642: 9642: _Elt_pointer _M_cur; 9642: _Elt_pointer _M_first; 9642: _Elt_pointer _M_last; 9642: _Map_pointer _M_node; 9642: 9642: _Deque_iterator(_Elt_pointer __x, _Map_pointer __y) noexcept 9642: : _M_cur(__x), _M_first(*__y), 9642: _M_last(*__y + _S_buffer_size()), _M_node(__y) { } 9642: 9642: _Deque_iterator() noexcept 9642: : _M_cur(), _M_first(), _M_last(), _M_node() { } 9642: # 161 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: template, 9642: is_same<_Iter, iterator>>> 9642: _Deque_iterator(const _Iter& __x) noexcept 9642: : _M_cur(__x._M_cur), _M_first(__x._M_first), 9642: _M_last(__x._M_last), _M_node(__x._M_node) { } 9642: 9642: _Deque_iterator(const _Deque_iterator& __x) noexcept 9642: : _M_cur(__x._M_cur), _M_first(__x._M_first), 9642: _M_last(__x._M_last), _M_node(__x._M_node) { } 9642: 9642: _Deque_iterator& operator=(const _Deque_iterator&) = default; 9642: 9642: 9642: iterator 9642: _M_const_cast() const noexcept 9642: { return iterator(_M_cur, _M_node); } 9642: 9642: [[__nodiscard__]] 9642: reference 9642: operator*() const noexcept 9642: { return *_M_cur; } 9642: 9642: [[__nodiscard__]] 9642: pointer 9642: operator->() const noexcept 9642: { return _M_cur; } 9642: 9642: _Self& 9642: operator++() noexcept 9642: { 9642: ++_M_cur; 9642: if (_M_cur == _M_last) 9642: { 9642: _M_set_node(_M_node + 1); 9642: _M_cur = _M_first; 9642: } 9642: return *this; 9642: } 9642: 9642: _Self 9642: operator++(int) noexcept 9642: { 9642: _Self __tmp = *this; 9642: ++*this; 9642: return __tmp; 9642: } 9642: 9642: _Self& 9642: operator--() noexcept 9642: { 9642: if (_M_cur == _M_first) 9642: { 9642: _M_set_node(_M_node - 1); 9642: _M_cur = _M_last; 9642: } 9642: --_M_cur; 9642: return *this; 9642: } 9642: 9642: _Self 9642: operator--(int) noexcept 9642: { 9642: _Self __tmp = *this; 9642: --*this; 9642: return __tmp; 9642: } 9642: 9642: _Self& 9642: operator+=(difference_type __n) noexcept 9642: { 9642: const difference_type __offset = __n + (_M_cur - _M_first); 9642: if (__offset >= 0 && __offset < difference_type(_S_buffer_size())) 9642: _M_cur += __n; 9642: else 9642: { 9642: const difference_type __node_offset = 9642: __offset > 0 ? __offset / difference_type(_S_buffer_size()) 9642: : -difference_type((-__offset - 1) 9642: / _S_buffer_size()) - 1; 9642: _M_set_node(_M_node + __node_offset); 9642: _M_cur = _M_first + (__offset - __node_offset 9642: * difference_type(_S_buffer_size())); 9642: } 9642: return *this; 9642: } 9642: 9642: _Self& 9642: operator-=(difference_type __n) noexcept 9642: { return *this += -__n; } 9642: 9642: [[__nodiscard__]] 9642: reference 9642: operator[](difference_type __n) const noexcept 9642: { return *(*this + __n); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: _M_set_node(_Map_pointer __new_node) noexcept 9642: { 9642: _M_node = __new_node; 9642: _M_first = *__new_node; 9642: _M_last = _M_first + difference_type(_S_buffer_size()); 9642: } 9642: 9642: [[__nodiscard__]] 9642: friend bool 9642: operator==(const _Self& __x, const _Self& __y) noexcept 9642: { return __x._M_cur == __y._M_cur; } 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: friend bool 9642: operator==(const _Self& __x, 9642: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) 9642: noexcept 9642: { return __x._M_cur == __y._M_cur; } 9642: # 296 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: [[__nodiscard__]] 9642: friend bool 9642: operator!=(const _Self& __x, const _Self& __y) noexcept 9642: { return !(__x == __y); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: friend bool 9642: operator!=(const _Self& __x, 9642: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) 9642: noexcept 9642: { return !(__x == __y); } 9642: 9642: [[__nodiscard__]] 9642: friend bool 9642: operator<(const _Self& __x, const _Self& __y) noexcept 9642: { 9642: return (__x._M_node == __y._M_node) 9642: ? (__x._M_cur < __y._M_cur) : (__x._M_node < __y._M_node); 9642: } 9642: 9642: template 9642: [[__nodiscard__]] 9642: friend bool 9642: operator<(const _Self& __x, 9642: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) 9642: noexcept 9642: { 9642: return (__x._M_node == __y._M_node) 9642: ? (__x._M_cur < __y._M_cur) : (__x._M_node < __y._M_node); 9642: } 9642: 9642: [[__nodiscard__]] 9642: friend bool 9642: operator>(const _Self& __x, const _Self& __y) noexcept 9642: { return __y < __x; } 9642: 9642: template 9642: [[__nodiscard__]] 9642: friend bool 9642: operator>(const _Self& __x, 9642: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) 9642: noexcept 9642: { return __y < __x; } 9642: 9642: [[__nodiscard__]] 9642: friend bool 9642: operator<=(const _Self& __x, const _Self& __y) noexcept 9642: { return !(__y < __x); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: friend bool 9642: operator<=(const _Self& __x, 9642: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) 9642: noexcept 9642: { return !(__y < __x); } 9642: 9642: [[__nodiscard__]] 9642: friend bool 9642: operator>=(const _Self& __x, const _Self& __y) noexcept 9642: { return !(__x < __y); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: friend bool 9642: operator>=(const _Self& __x, 9642: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) 9642: noexcept 9642: { return !(__x < __y); } 9642: 9642: 9642: [[__nodiscard__]] 9642: friend difference_type 9642: operator-(const _Self& __x, const _Self& __y) noexcept 9642: { 9642: return difference_type(_S_buffer_size()) 9642: * (__x._M_node - __y._M_node - bool(__x._M_node)) 9642: + (__x._M_cur - __x._M_first) 9642: + (__y._M_last - __y._M_cur); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: friend difference_type 9642: operator-(const _Self& __x, 9642: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) 9642: noexcept 9642: { 9642: return difference_type(_S_buffer_size()) 9642: * (__x._M_node - __y._M_node - bool(__x._M_node)) 9642: + (__x._M_cur - __x._M_first) 9642: + (__y._M_last - __y._M_cur); 9642: } 9642: 9642: [[__nodiscard__]] 9642: friend _Self 9642: operator+(const _Self& __x, difference_type __n) noexcept 9642: { 9642: _Self __tmp = __x; 9642: __tmp += __n; 9642: return __tmp; 9642: } 9642: 9642: [[__nodiscard__]] 9642: friend _Self 9642: operator-(const _Self& __x, difference_type __n) noexcept 9642: { 9642: _Self __tmp = __x; 9642: __tmp -= __n; 9642: return __tmp; 9642: } 9642: 9642: [[__nodiscard__]] 9642: friend _Self 9642: operator+(difference_type __n, const _Self& __x) noexcept 9642: { return __x + __n; } 9642: }; 9642: # 429 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: template 9642: class _Deque_base 9642: { 9642: protected: 9642: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 9642: rebind<_Tp>::other _Tp_alloc_type; 9642: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Alloc_traits; 9642: 9642: 9642: 9642: 9642: 9642: typedef typename _Alloc_traits::pointer _Ptr; 9642: typedef typename _Alloc_traits::const_pointer _Ptr_const; 9642: 9642: 9642: typedef typename _Alloc_traits::template rebind<_Ptr>::other 9642: _Map_alloc_type; 9642: typedef __gnu_cxx::__alloc_traits<_Map_alloc_type> _Map_alloc_traits; 9642: 9642: typedef _Alloc allocator_type; 9642: 9642: allocator_type 9642: get_allocator() const noexcept 9642: { return allocator_type(_M_get_Tp_allocator()); } 9642: 9642: typedef _Deque_iterator<_Tp, _Tp&, _Ptr> iterator; 9642: typedef _Deque_iterator<_Tp, const _Tp&, _Ptr_const> const_iterator; 9642: 9642: _Deque_base() 9642: : _M_impl() 9642: { _M_initialize_map(0); } 9642: 9642: _Deque_base(size_t __num_elements) 9642: : _M_impl() 9642: { _M_initialize_map(__num_elements); } 9642: 9642: _Deque_base(const allocator_type& __a, size_t __num_elements) 9642: : _M_impl(__a) 9642: { _M_initialize_map(__num_elements); } 9642: 9642: _Deque_base(const allocator_type& __a) 9642: : _M_impl(__a) 9642: { } 9642: 9642: 9642: _Deque_base(_Deque_base&& __x) 9642: : _M_impl(std::move(__x._M_get_Tp_allocator())) 9642: { 9642: _M_initialize_map(0); 9642: if (__x._M_impl._M_map) 9642: this->_M_impl._M_swap_data(__x._M_impl); 9642: } 9642: 9642: _Deque_base(_Deque_base&& __x, const allocator_type& __a) 9642: : _M_impl(std::move(__x._M_impl), _Tp_alloc_type(__a)) 9642: { __x._M_initialize_map(0); } 9642: 9642: _Deque_base(_Deque_base&& __x, const allocator_type& __a, size_t __n) 9642: : _M_impl(__a) 9642: { 9642: if (__x.get_allocator() == __a) 9642: { 9642: if (__x._M_impl._M_map) 9642: { 9642: _M_initialize_map(0); 9642: this->_M_impl._M_swap_data(__x._M_impl); 9642: } 9642: } 9642: else 9642: { 9642: _M_initialize_map(__n); 9642: } 9642: } 9642: 9642: 9642: ~_Deque_base() noexcept; 9642: 9642: typedef typename iterator::_Map_pointer _Map_pointer; 9642: 9642: struct _Deque_impl_data 9642: { 9642: _Map_pointer _M_map; 9642: size_t _M_map_size; 9642: iterator _M_start; 9642: iterator _M_finish; 9642: 9642: _Deque_impl_data() noexcept 9642: : _M_map(), _M_map_size(), _M_start(), _M_finish() 9642: { } 9642: 9642: 9642: _Deque_impl_data(const _Deque_impl_data&) = default; 9642: _Deque_impl_data& 9642: operator=(const _Deque_impl_data&) = default; 9642: 9642: _Deque_impl_data(_Deque_impl_data&& __x) noexcept 9642: : _Deque_impl_data(__x) 9642: { __x = _Deque_impl_data(); } 9642: 9642: 9642: void 9642: _M_swap_data(_Deque_impl_data& __x) noexcept 9642: { 9642: 9642: 9642: std::swap(*this, __x); 9642: } 9642: }; 9642: 9642: 9642: 9642: 9642: struct _Deque_impl 9642: : public _Tp_alloc_type, public _Deque_impl_data 9642: { 9642: _Deque_impl() noexcept(is_nothrow_default_constructible<_Tp_alloc_type>::value) 9642: 9642: : _Tp_alloc_type() 9642: { } 9642: 9642: _Deque_impl(const _Tp_alloc_type& __a) noexcept 9642: : _Tp_alloc_type(__a) 9642: { } 9642: 9642: 9642: _Deque_impl(_Deque_impl&&) = default; 9642: 9642: _Deque_impl(_Tp_alloc_type&& __a) noexcept 9642: : _Tp_alloc_type(std::move(__a)) 9642: { } 9642: 9642: _Deque_impl(_Deque_impl&& __d, _Tp_alloc_type&& __a) 9642: : _Tp_alloc_type(std::move(__a)), _Deque_impl_data(std::move(__d)) 9642: { } 9642: 9642: }; 9642: 9642: _Tp_alloc_type& 9642: _M_get_Tp_allocator() noexcept 9642: { return this->_M_impl; } 9642: 9642: const _Tp_alloc_type& 9642: _M_get_Tp_allocator() const noexcept 9642: { return this->_M_impl; } 9642: 9642: _Map_alloc_type 9642: _M_get_map_allocator() const noexcept 9642: { return _Map_alloc_type(_M_get_Tp_allocator()); } 9642: 9642: _Ptr 9642: _M_allocate_node() 9642: { 9642: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Traits; 9642: return _Traits::allocate(_M_impl, __deque_buf_size(sizeof(_Tp))); 9642: } 9642: 9642: void 9642: _M_deallocate_node(_Ptr __p) noexcept 9642: { 9642: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Traits; 9642: _Traits::deallocate(_M_impl, __p, __deque_buf_size(sizeof(_Tp))); 9642: } 9642: 9642: _Map_pointer 9642: _M_allocate_map(size_t __n) 9642: { 9642: _Map_alloc_type __map_alloc = _M_get_map_allocator(); 9642: return _Map_alloc_traits::allocate(__map_alloc, __n); 9642: } 9642: 9642: void 9642: _M_deallocate_map(_Map_pointer __p, size_t __n) noexcept 9642: { 9642: _Map_alloc_type __map_alloc = _M_get_map_allocator(); 9642: _Map_alloc_traits::deallocate(__map_alloc, __p, __n); 9642: } 9642: 9642: void _M_initialize_map(size_t); 9642: void _M_create_nodes(_Map_pointer __nstart, _Map_pointer __nfinish); 9642: void _M_destroy_nodes(_Map_pointer __nstart, 9642: _Map_pointer __nfinish) noexcept; 9642: enum { _S_initial_map_size = 8 }; 9642: 9642: _Deque_impl _M_impl; 9642: }; 9642: 9642: template 9642: _Deque_base<_Tp, _Alloc>:: 9642: ~_Deque_base() noexcept 9642: { 9642: if (this->_M_impl._M_map) 9642: { 9642: _M_destroy_nodes(this->_M_impl._M_start._M_node, 9642: this->_M_impl._M_finish._M_node + 1); 9642: _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size); 9642: } 9642: } 9642: # 636 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: template 9642: void 9642: _Deque_base<_Tp, _Alloc>:: 9642: _M_initialize_map(size_t __num_elements) 9642: { 9642: const size_t __num_nodes = (__num_elements / __deque_buf_size(sizeof(_Tp)) 9642: + 1); 9642: 9642: this->_M_impl._M_map_size = std::max((size_t) _S_initial_map_size, 9642: size_t(__num_nodes + 2)); 9642: this->_M_impl._M_map = _M_allocate_map(this->_M_impl._M_map_size); 9642: 9642: 9642: 9642: 9642: 9642: 9642: _Map_pointer __nstart = (this->_M_impl._M_map 9642: + (this->_M_impl._M_map_size - __num_nodes) / 2); 9642: _Map_pointer __nfinish = __nstart + __num_nodes; 9642: 9642: try 9642: { _M_create_nodes(__nstart, __nfinish); } 9642: catch(...) 9642: { 9642: _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size); 9642: this->_M_impl._M_map = _Map_pointer(); 9642: this->_M_impl._M_map_size = 0; 9642: throw; 9642: } 9642: 9642: this->_M_impl._M_start._M_set_node(__nstart); 9642: this->_M_impl._M_finish._M_set_node(__nfinish - 1); 9642: this->_M_impl._M_start._M_cur = _M_impl._M_start._M_first; 9642: this->_M_impl._M_finish._M_cur = (this->_M_impl._M_finish._M_first 9642: + __num_elements 9642: % __deque_buf_size(sizeof(_Tp))); 9642: } 9642: 9642: template 9642: void 9642: _Deque_base<_Tp, _Alloc>:: 9642: _M_create_nodes(_Map_pointer __nstart, _Map_pointer __nfinish) 9642: { 9642: _Map_pointer __cur; 9642: try 9642: { 9642: for (__cur = __nstart; __cur < __nfinish; ++__cur) 9642: *__cur = this->_M_allocate_node(); 9642: } 9642: catch(...) 9642: { 9642: _M_destroy_nodes(__nstart, __cur); 9642: throw; 9642: } 9642: } 9642: 9642: template 9642: void 9642: _Deque_base<_Tp, _Alloc>:: 9642: _M_destroy_nodes(_Map_pointer __nstart, 9642: _Map_pointer __nfinish) noexcept 9642: { 9642: for (_Map_pointer __n = __nstart; __n < __nfinish; ++__n) 9642: _M_deallocate_node(*__n); 9642: } 9642: # 787 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: template > 9642: class deque : protected _Deque_base<_Tp, _Alloc> 9642: { 9642: # 800 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: static_assert(is_same::type, _Tp>::value, 9642: "std::deque must have a non-const, non-volatile value_type"); 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef _Deque_base<_Tp, _Alloc> _Base; 9642: typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; 9642: typedef typename _Base::_Alloc_traits _Alloc_traits; 9642: typedef typename _Base::_Map_pointer _Map_pointer; 9642: 9642: public: 9642: typedef _Tp value_type; 9642: typedef typename _Alloc_traits::pointer pointer; 9642: typedef typename _Alloc_traits::const_pointer const_pointer; 9642: typedef typename _Alloc_traits::reference reference; 9642: typedef typename _Alloc_traits::const_reference const_reference; 9642: typedef typename _Base::iterator iterator; 9642: typedef typename _Base::const_iterator const_iterator; 9642: typedef std::reverse_iterator const_reverse_iterator; 9642: typedef std::reverse_iterator reverse_iterator; 9642: typedef size_t size_type; 9642: typedef ptrdiff_t difference_type; 9642: typedef _Alloc allocator_type; 9642: 9642: private: 9642: static size_t _S_buffer_size() noexcept 9642: { return __deque_buf_size(sizeof(_Tp)); } 9642: 9642: 9642: using _Base::_M_initialize_map; 9642: using _Base::_M_create_nodes; 9642: using _Base::_M_destroy_nodes; 9642: using _Base::_M_allocate_node; 9642: using _Base::_M_deallocate_node; 9642: using _Base::_M_allocate_map; 9642: using _Base::_M_deallocate_map; 9642: using _Base::_M_get_Tp_allocator; 9642: 9642: 9642: 9642: 9642: 9642: using _Base::_M_impl; 9642: 9642: public: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: deque() = default; 9642: # 864 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: explicit 9642: deque(const allocator_type& __a) 9642: : _Base(__a, 0) { } 9642: # 877 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: explicit 9642: deque(size_type __n, const allocator_type& __a = allocator_type()) 9642: : _Base(__a, _S_check_init_len(__n, __a)) 9642: { _M_default_initialize(); } 9642: # 890 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: deque(size_type __n, const value_type& __value, 9642: const allocator_type& __a = allocator_type()) 9642: : _Base(__a, _S_check_init_len(__n, __a)) 9642: { _M_fill_initialize(__value); } 9642: # 917 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: deque(const deque& __x) 9642: : _Base(_Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator()), 9642: __x.size()) 9642: { std::__uninitialized_copy_a(__x.begin(), __x.end(), 9642: this->_M_impl._M_start, 9642: _M_get_Tp_allocator()); } 9642: # 933 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: deque(deque&&) = default; 9642: 9642: 9642: deque(const deque& __x, const __type_identity_t& __a) 9642: : _Base(__a, __x.size()) 9642: { std::__uninitialized_copy_a(__x.begin(), __x.end(), 9642: this->_M_impl._M_start, 9642: _M_get_Tp_allocator()); } 9642: 9642: 9642: deque(deque&& __x, const __type_identity_t& __a) 9642: : deque(std::move(__x), __a, typename _Alloc_traits::is_always_equal{}) 9642: { } 9642: 9642: private: 9642: deque(deque&& __x, const allocator_type& __a, true_type) 9642: : _Base(std::move(__x), __a) 9642: { } 9642: 9642: deque(deque&& __x, const allocator_type& __a, false_type) 9642: : _Base(std::move(__x), __a, __x.size()) 9642: { 9642: if (__x.get_allocator() != __a && !__x.empty()) 9642: { 9642: std::__uninitialized_move_a(__x.begin(), __x.end(), 9642: this->_M_impl._M_start, 9642: _M_get_Tp_allocator()); 9642: __x.clear(); 9642: } 9642: } 9642: 9642: public: 9642: # 976 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: deque(initializer_list __l, 9642: const allocator_type& __a = allocator_type()) 9642: : _Base(__a) 9642: { 9642: _M_range_initialize(__l.begin(), __l.end(), 9642: random_access_iterator_tag()); 9642: } 9642: # 1001 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: template> 9642: deque(_InputIterator __first, _InputIterator __last, 9642: const allocator_type& __a = allocator_type()) 9642: : _Base(__a) 9642: { 9642: _M_range_initialize(__first, __last, 9642: std::__iterator_category(__first)); 9642: } 9642: # 1027 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: ~deque() 9642: { _M_destroy_data(begin(), end(), _M_get_Tp_allocator()); } 9642: # 1039 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: deque& 9642: operator=(const deque& __x); 9642: # 1051 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: deque& 9642: operator=(deque&& __x) noexcept(_Alloc_traits::_S_always_equal()) 9642: { 9642: using __always_equal = typename _Alloc_traits::is_always_equal; 9642: _M_move_assign1(std::move(__x), __always_equal{}); 9642: return *this; 9642: } 9642: # 1070 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: deque& 9642: operator=(initializer_list __l) 9642: { 9642: _M_assign_aux(__l.begin(), __l.end(), 9642: random_access_iterator_tag()); 9642: return *this; 9642: } 9642: # 1089 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: void 9642: assign(size_type __n, const value_type& __val) 9642: { _M_fill_assign(__n, __val); } 9642: # 1106 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: template> 9642: void 9642: assign(_InputIterator __first, _InputIterator __last) 9642: { _M_assign_aux(__first, __last, std::__iterator_category(__first)); } 9642: # 1133 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: void 9642: assign(initializer_list __l) 9642: { _M_assign_aux(__l.begin(), __l.end(), random_access_iterator_tag()); } 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: allocator_type 9642: get_allocator() const noexcept 9642: { return _Base::get_allocator(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: iterator 9642: begin() noexcept 9642: { return this->_M_impl._M_start; } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: begin() const noexcept 9642: { return this->_M_impl._M_start; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: iterator 9642: end() noexcept 9642: { return this->_M_impl._M_finish; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: end() const noexcept 9642: { return this->_M_impl._M_finish; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: reverse_iterator 9642: rbegin() noexcept 9642: { return reverse_iterator(this->_M_impl._M_finish); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: rbegin() const noexcept 9642: { return const_reverse_iterator(this->_M_impl._M_finish); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: reverse_iterator 9642: rend() noexcept 9642: { return reverse_iterator(this->_M_impl._M_start); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: rend() const noexcept 9642: { return const_reverse_iterator(this->_M_impl._M_start); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: cbegin() const noexcept 9642: { return this->_M_impl._M_start; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: cend() const noexcept 9642: { return this->_M_impl._M_finish; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: crbegin() const noexcept 9642: { return const_reverse_iterator(this->_M_impl._M_finish); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: crend() const noexcept 9642: { return const_reverse_iterator(this->_M_impl._M_start); } 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: size_type 9642: size() const noexcept 9642: { return this->_M_impl._M_finish - this->_M_impl._M_start; } 9642: 9642: 9642: [[__nodiscard__]] 9642: size_type 9642: max_size() const noexcept 9642: { return _S_max_size(_M_get_Tp_allocator()); } 9642: # 1287 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: void 9642: resize(size_type __new_size) 9642: { 9642: const size_type __len = size(); 9642: if (__new_size > __len) 9642: _M_default_append(__new_size - __len); 9642: else if (__new_size < __len) 9642: _M_erase_at_end(this->_M_impl._M_start 9642: + difference_type(__new_size)); 9642: } 9642: # 1309 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: void 9642: resize(size_type __new_size, const value_type& __x) 9642: # 1326 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: { 9642: const size_type __len = size(); 9642: if (__new_size > __len) 9642: _M_fill_insert(this->_M_impl._M_finish, __new_size - __len, __x); 9642: else if (__new_size < __len) 9642: _M_erase_at_end(this->_M_impl._M_start 9642: + difference_type(__new_size)); 9642: } 9642: 9642: 9642: 9642: void 9642: shrink_to_fit() noexcept 9642: { _M_shrink_to_fit(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] bool 9642: empty() const noexcept 9642: { return this->_M_impl._M_finish == this->_M_impl._M_start; } 9642: # 1362 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: [[__nodiscard__]] 9642: reference 9642: operator[](size_type __n) noexcept 9642: { 9642: ; 9642: return this->_M_impl._M_start[difference_type(__n)]; 9642: } 9642: # 1381 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: [[__nodiscard__]] 9642: const_reference 9642: operator[](size_type __n) const noexcept 9642: { 9642: ; 9642: return this->_M_impl._M_start[difference_type(__n)]; 9642: } 9642: 9642: protected: 9642: 9642: void 9642: _M_range_check(size_type __n) const 9642: { 9642: if (__n >= this->size()) 9642: __throw_out_of_range_fmt(("deque::_M_range_check: __n " "(which is %zu)>= this->size() " "(which is %zu)") 9642: 9642: , 9642: __n, this->size()); 9642: } 9642: 9642: public: 9642: # 1413 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: reference 9642: at(size_type __n) 9642: { 9642: _M_range_check(__n); 9642: return (*this)[__n]; 9642: } 9642: # 1431 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: const_reference 9642: at(size_type __n) const 9642: { 9642: _M_range_check(__n); 9642: return (*this)[__n]; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: reference 9642: front() noexcept 9642: { 9642: ; 9642: return *begin(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reference 9642: front() const noexcept 9642: { 9642: ; 9642: return *begin(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: reference 9642: back() noexcept 9642: { 9642: ; 9642: iterator __tmp = end(); 9642: --__tmp; 9642: return *__tmp; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reference 9642: back() const noexcept 9642: { 9642: ; 9642: const_iterator __tmp = end(); 9642: --__tmp; 9642: return *__tmp; 9642: } 9642: # 1500 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: void 9642: push_front(const value_type& __x) 9642: { 9642: if (this->_M_impl._M_start._M_cur != this->_M_impl._M_start._M_first) 9642: { 9642: _Alloc_traits::construct(this->_M_impl, 9642: this->_M_impl._M_start._M_cur - 1, 9642: __x); 9642: --this->_M_impl._M_start._M_cur; 9642: } 9642: else 9642: _M_push_front_aux(__x); 9642: } 9642: 9642: 9642: void 9642: push_front(value_type&& __x) 9642: { emplace_front(std::move(__x)); } 9642: 9642: template 9642: 9642: reference 9642: 9642: 9642: 9642: emplace_front(_Args&&... __args); 9642: # 1537 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: void 9642: push_back(const value_type& __x) 9642: { 9642: if (this->_M_impl._M_finish._M_cur 9642: != this->_M_impl._M_finish._M_last - 1) 9642: { 9642: _Alloc_traits::construct(this->_M_impl, 9642: this->_M_impl._M_finish._M_cur, __x); 9642: ++this->_M_impl._M_finish._M_cur; 9642: } 9642: else 9642: _M_push_back_aux(__x); 9642: } 9642: 9642: 9642: void 9642: push_back(value_type&& __x) 9642: { emplace_back(std::move(__x)); } 9642: 9642: template 9642: 9642: reference 9642: 9642: 9642: 9642: emplace_back(_Args&&... __args); 9642: # 1573 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: void 9642: pop_front() noexcept 9642: { 9642: ; 9642: if (this->_M_impl._M_start._M_cur 9642: != this->_M_impl._M_start._M_last - 1) 9642: { 9642: _Alloc_traits::destroy(_M_get_Tp_allocator(), 9642: this->_M_impl._M_start._M_cur); 9642: ++this->_M_impl._M_start._M_cur; 9642: } 9642: else 9642: _M_pop_front_aux(); 9642: } 9642: # 1596 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: void 9642: pop_back() noexcept 9642: { 9642: ; 9642: if (this->_M_impl._M_finish._M_cur 9642: != this->_M_impl._M_finish._M_first) 9642: { 9642: --this->_M_impl._M_finish._M_cur; 9642: _Alloc_traits::destroy(_M_get_Tp_allocator(), 9642: this->_M_impl._M_finish._M_cur); 9642: } 9642: else 9642: _M_pop_back_aux(); 9642: } 9642: # 1621 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: template 9642: iterator 9642: emplace(const_iterator __position, _Args&&... __args); 9642: # 1634 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: iterator 9642: insert(const_iterator __position, const value_type& __x); 9642: # 1660 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: iterator 9642: insert(const_iterator __position, value_type&& __x) 9642: { return emplace(__position, std::move(__x)); } 9642: # 1674 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: iterator 9642: insert(const_iterator __p, initializer_list __l) 9642: { 9642: auto __offset = __p - cbegin(); 9642: _M_range_insert_aux(__p._M_const_cast(), __l.begin(), __l.end(), 9642: std::random_access_iterator_tag()); 9642: return begin() + __offset; 9642: } 9642: # 1693 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: iterator 9642: insert(const_iterator __position, size_type __n, const value_type& __x) 9642: { 9642: difference_type __offset = __position - cbegin(); 9642: _M_fill_insert(__position._M_const_cast(), __n, __x); 9642: return begin() + __offset; 9642: } 9642: # 1727 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: template> 9642: iterator 9642: insert(const_iterator __position, _InputIterator __first, 9642: _InputIterator __last) 9642: { 9642: difference_type __offset = __position - cbegin(); 9642: _M_range_insert_aux(__position._M_const_cast(), __first, __last, 9642: std::__iterator_category(__first)); 9642: return begin() + __offset; 9642: } 9642: # 1773 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: iterator 9642: 9642: erase(const_iterator __position) 9642: 9642: 9642: 9642: { return _M_erase(__position._M_const_cast()); } 9642: # 1797 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: iterator 9642: 9642: erase(const_iterator __first, const_iterator __last) 9642: 9642: 9642: 9642: { return _M_erase(__first._M_const_cast(), __last._M_const_cast()); } 9642: # 1816 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: void 9642: swap(deque& __x) noexcept 9642: { 9642: 9642: do { if (std::__is_constant_evaluated() && !bool(_Alloc_traits::propagate_on_container_swap::value || _M_get_Tp_allocator() == __x._M_get_Tp_allocator())) __builtin_unreachable(); } while (false) 9642: ; 9642: 9642: _M_impl._M_swap_data(__x._M_impl); 9642: _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(), 9642: __x._M_get_Tp_allocator()); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: clear() noexcept 9642: { _M_erase_at_end(begin()); } 9642: 9642: protected: 9642: # 1866 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: static size_t 9642: _S_check_init_len(size_t __n, const allocator_type& __a) 9642: { 9642: if (__n > _S_max_size(__a)) 9642: __throw_length_error( 9642: ("cannot create std::deque larger than max_size()")); 9642: return __n; 9642: } 9642: 9642: static size_type 9642: _S_max_size(const _Tp_alloc_type& __a) noexcept 9642: { 9642: const size_t __diffmax = __gnu_cxx::__numeric_traits::__max; 9642: const size_t __allocmax = _Alloc_traits::max_size(__a); 9642: return (std::min)(__diffmax, __allocmax); 9642: } 9642: # 1895 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: template 9642: void 9642: _M_range_initialize(_InputIterator __first, _InputIterator __last, 9642: std::input_iterator_tag); 9642: 9642: 9642: template 9642: void 9642: _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last, 9642: std::forward_iterator_tag); 9642: # 1917 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: void 9642: _M_fill_initialize(const value_type& __value); 9642: 9642: 9642: 9642: void 9642: _M_default_initialize(); 9642: # 1948 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: template 9642: void 9642: _M_assign_aux(_InputIterator __first, _InputIterator __last, 9642: std::input_iterator_tag); 9642: 9642: 9642: template 9642: void 9642: _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, 9642: std::forward_iterator_tag) 9642: { 9642: const size_type __len = std::distance(__first, __last); 9642: if (__len > size()) 9642: { 9642: _ForwardIterator __mid = __first; 9642: std::advance(__mid, size()); 9642: std::copy(__first, __mid, begin()); 9642: _M_range_insert_aux(end(), __mid, __last, 9642: std::__iterator_category(__first)); 9642: } 9642: else 9642: _M_erase_at_end(std::copy(__first, __last, begin())); 9642: } 9642: 9642: 9642: 9642: void 9642: _M_fill_assign(size_type __n, const value_type& __val) 9642: { 9642: if (__n > size()) 9642: { 9642: std::fill(begin(), end(), __val); 9642: _M_fill_insert(end(), __n - size(), __val); 9642: } 9642: else 9642: { 9642: _M_erase_at_end(begin() + difference_type(__n)); 9642: std::fill(begin(), end(), __val); 9642: } 9642: } 9642: # 1996 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: template 9642: void _M_push_back_aux(_Args&&... __args); 9642: 9642: template 9642: void _M_push_front_aux(_Args&&... __args); 9642: 9642: 9642: void _M_pop_back_aux(); 9642: 9642: void _M_pop_front_aux(); 9642: # 2035 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: template 9642: void 9642: _M_range_insert_aux(iterator __pos, _InputIterator __first, 9642: _InputIterator __last, std::input_iterator_tag); 9642: 9642: 9642: template 9642: void 9642: _M_range_insert_aux(iterator __pos, _ForwardIterator __first, 9642: _ForwardIterator __last, std::forward_iterator_tag); 9642: 9642: 9642: 9642: 9642: void 9642: _M_fill_insert(iterator __pos, size_type __n, const value_type& __x); 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: iterator 9642: _M_insert_aux(iterator __pos, _Args&&... __args); 9642: 9642: 9642: 9642: void 9642: _M_insert_aux(iterator __pos, size_type __n, const value_type& __x); 9642: 9642: 9642: template 9642: void 9642: _M_insert_aux(iterator __pos, 9642: _ForwardIterator __first, _ForwardIterator __last, 9642: size_type __n); 9642: 9642: 9642: 9642: 9642: void 9642: _M_destroy_data_aux(iterator __first, iterator __last); 9642: 9642: 9642: 9642: template 9642: void 9642: _M_destroy_data(iterator __first, iterator __last, const _Alloc1&) 9642: { _M_destroy_data_aux(__first, __last); } 9642: 9642: void 9642: _M_destroy_data(iterator __first, iterator __last, 9642: const std::allocator<_Tp>&) 9642: { 9642: if (!__has_trivial_destructor(value_type)) 9642: _M_destroy_data_aux(__first, __last); 9642: } 9642: 9642: 9642: void 9642: _M_erase_at_begin(iterator __pos) 9642: { 9642: _M_destroy_data(begin(), __pos, _M_get_Tp_allocator()); 9642: _M_destroy_nodes(this->_M_impl._M_start._M_node, __pos._M_node); 9642: this->_M_impl._M_start = __pos; 9642: } 9642: 9642: 9642: 9642: void 9642: _M_erase_at_end(iterator __pos) 9642: { 9642: _M_destroy_data(__pos, end(), _M_get_Tp_allocator()); 9642: _M_destroy_nodes(__pos._M_node + 1, 9642: this->_M_impl._M_finish._M_node + 1); 9642: this->_M_impl._M_finish = __pos; 9642: } 9642: 9642: iterator 9642: _M_erase(iterator __pos); 9642: 9642: iterator 9642: _M_erase(iterator __first, iterator __last); 9642: 9642: 9642: 9642: void 9642: _M_default_append(size_type __n); 9642: 9642: bool 9642: _M_shrink_to_fit(); 9642: 9642: 9642: 9642: 9642: iterator 9642: _M_reserve_elements_at_front(size_type __n) 9642: { 9642: const size_type __vacancies = this->_M_impl._M_start._M_cur 9642: - this->_M_impl._M_start._M_first; 9642: if (__n > __vacancies) 9642: _M_new_elements_at_front(__n - __vacancies); 9642: return this->_M_impl._M_start - difference_type(__n); 9642: } 9642: 9642: iterator 9642: _M_reserve_elements_at_back(size_type __n) 9642: { 9642: const size_type __vacancies = (this->_M_impl._M_finish._M_last 9642: - this->_M_impl._M_finish._M_cur) - 1; 9642: if (__n > __vacancies) 9642: _M_new_elements_at_back(__n - __vacancies); 9642: return this->_M_impl._M_finish + difference_type(__n); 9642: } 9642: 9642: void 9642: _M_new_elements_at_front(size_type __new_elements); 9642: 9642: void 9642: _M_new_elements_at_back(size_type __new_elements); 9642: # 2167 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: void 9642: _M_reserve_map_at_back(size_type __nodes_to_add = 1) 9642: { 9642: if (__nodes_to_add + 1 > this->_M_impl._M_map_size 9642: - (this->_M_impl._M_finish._M_node - this->_M_impl._M_map)) 9642: _M_reallocate_map(__nodes_to_add, false); 9642: } 9642: 9642: void 9642: _M_reserve_map_at_front(size_type __nodes_to_add = 1) 9642: { 9642: if (__nodes_to_add > size_type(this->_M_impl._M_start._M_node 9642: - this->_M_impl._M_map)) 9642: _M_reallocate_map(__nodes_to_add, true); 9642: } 9642: 9642: void 9642: _M_reallocate_map(size_type __nodes_to_add, bool __add_at_front); 9642: 9642: 9642: 9642: 9642: 9642: void 9642: _M_move_assign1(deque&& __x, true_type) noexcept 9642: { 9642: this->_M_impl._M_swap_data(__x._M_impl); 9642: __x.clear(); 9642: std::__alloc_on_move(_M_get_Tp_allocator(), __x._M_get_Tp_allocator()); 9642: } 9642: 9642: 9642: 9642: 9642: void 9642: _M_move_assign1(deque&& __x, false_type) 9642: { 9642: if (_M_get_Tp_allocator() == __x._M_get_Tp_allocator()) 9642: return _M_move_assign1(std::move(__x), true_type()); 9642: 9642: constexpr bool __move_storage = 9642: _Alloc_traits::_S_propagate_on_move_assign(); 9642: _M_move_assign2(std::move(__x), __bool_constant<__move_storage>()); 9642: } 9642: 9642: 9642: 9642: template 9642: void 9642: _M_replace_map(_Args&&... __args) 9642: { 9642: 9642: deque __newobj(std::forward<_Args>(__args)...); 9642: 9642: clear(); 9642: _M_deallocate_node(*begin()._M_node); 9642: _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size); 9642: this->_M_impl._M_map = nullptr; 9642: this->_M_impl._M_map_size = 0; 9642: 9642: this->_M_impl._M_swap_data(__newobj._M_impl); 9642: } 9642: 9642: 9642: void 9642: _M_move_assign2(deque&& __x, true_type) 9642: { 9642: 9642: auto __alloc = __x._M_get_Tp_allocator(); 9642: 9642: 9642: _M_replace_map(std::move(__x)); 9642: 9642: _M_get_Tp_allocator() = std::move(__alloc); 9642: } 9642: 9642: 9642: 9642: void 9642: _M_move_assign2(deque&& __x, false_type) 9642: { 9642: if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator()) 9642: { 9642: 9642: 9642: _M_replace_map(std::move(__x), __x.get_allocator()); 9642: } 9642: else 9642: { 9642: 9642: 9642: _M_assign_aux(std::make_move_iterator(__x.begin()), 9642: std::make_move_iterator(__x.end()), 9642: std::random_access_iterator_tag()); 9642: __x.clear(); 9642: } 9642: } 9642: 9642: }; 9642: 9642: 9642: template::value_type, 9642: typename _Allocator = allocator<_ValT>, 9642: typename = _RequireInputIter<_InputIterator>, 9642: typename = _RequireAllocator<_Allocator>> 9642: deque(_InputIterator, _InputIterator, _Allocator = _Allocator()) 9642: -> deque<_ValT, _Allocator>; 9642: # 2287 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator==(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y) 9642: { return __x.size() == __y.size() 9642: && std::equal(__x.begin(), __x.end(), __y.begin()); } 9642: # 2327 "/usr/include/c++/13/bits/stl_deque.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y) 9642: { return std::lexicographical_compare(__x.begin(), __x.end(), 9642: __y.begin(), __y.end()); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator!=(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y) 9642: { return !(__x == __y); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator>(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y) 9642: { return __y < __x; } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<=(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y) 9642: { return !(__y < __x); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator>=(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y) 9642: { return !(__x < __y); } 9642: 9642: 9642: 9642: template 9642: inline void 9642: swap(deque<_Tp,_Alloc>& __x, deque<_Tp,_Alloc>& __y) 9642: noexcept(noexcept(__x.swap(__y))) 9642: { __x.swap(__y); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct __is_bitwise_relocatable> 9642: : true_type { }; 9642: 9642: 9642: 9642: } 9642: # 67 "/usr/include/c++/13/deque" 2 3 9642: # 1 "/usr/include/c++/13/bits/refwrap.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/refwrap.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/refwrap.h" 3 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/invoke.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/invoke.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/invoke.h" 3 9642: # 42 "/usr/include/c++/13/bits/invoke.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 53 "/usr/include/c++/13/bits/invoke.h" 3 9642: template::type> 9642: constexpr _Up&& 9642: __invfwd(typename remove_reference<_Tp>::type& __t) noexcept 9642: { return static_cast<_Up&&>(__t); } 9642: 9642: template 9642: constexpr _Res 9642: __invoke_impl(__invoke_other, _Fn&& __f, _Args&&... __args) 9642: { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } 9642: 9642: template 9642: constexpr _Res 9642: __invoke_impl(__invoke_memfun_ref, _MemFun&& __f, _Tp&& __t, 9642: _Args&&... __args) 9642: { return (__invfwd<_Tp>(__t).*__f)(std::forward<_Args>(__args)...); } 9642: 9642: template 9642: constexpr _Res 9642: __invoke_impl(__invoke_memfun_deref, _MemFun&& __f, _Tp&& __t, 9642: _Args&&... __args) 9642: { 9642: return ((*std::forward<_Tp>(__t)).*__f)(std::forward<_Args>(__args)...); 9642: } 9642: 9642: template 9642: constexpr _Res 9642: __invoke_impl(__invoke_memobj_ref, _MemPtr&& __f, _Tp&& __t) 9642: { return __invfwd<_Tp>(__t).*__f; } 9642: 9642: template 9642: constexpr _Res 9642: __invoke_impl(__invoke_memobj_deref, _MemPtr&& __f, _Tp&& __t) 9642: { return (*std::forward<_Tp>(__t)).*__f; } 9642: 9642: 9642: template 9642: constexpr typename __invoke_result<_Callable, _Args...>::type 9642: __invoke(_Callable&& __fn, _Args&&... __args) 9642: noexcept(__is_nothrow_invocable<_Callable, _Args...>::value) 9642: { 9642: using __result = __invoke_result<_Callable, _Args...>; 9642: using __type = typename __result::type; 9642: using __tag = typename __result::__invoke_type; 9642: return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn), 9642: std::forward<_Args>(__args)...); 9642: } 9642: 9642: 9642: 9642: template 9642: constexpr enable_if_t, _Res> 9642: __invoke_r(_Callable&& __fn, _Args&&... __args) 9642: noexcept(is_nothrow_invocable_r_v<_Res, _Callable, _Args...>) 9642: { 9642: using __result = __invoke_result<_Callable, _Args...>; 9642: using __type = typename __result::type; 9642: using __tag = typename __result::__invoke_type; 9642: if constexpr (is_void_v<_Res>) 9642: std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn), 9642: std::forward<_Args>(__args)...); 9642: else 9642: return std::__invoke_impl<__type>(__tag{}, 9642: std::forward<_Callable>(__fn), 9642: std::forward<_Args>(__args)...); 9642: } 9642: # 155 "/usr/include/c++/13/bits/invoke.h" 3 9642: 9642: } 9642: # 39 "/usr/include/c++/13/bits/refwrap.h" 2 3 9642: # 1 "/usr/include/c++/13/bits/stl_function.h" 1 3 9642: # 63 "/usr/include/c++/13/bits/stl_function.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 116 "/usr/include/c++/13/bits/stl_function.h" 3 9642: template 9642: struct unary_function 9642: { 9642: 9642: typedef _Arg argument_type; 9642: 9642: 9642: typedef _Result result_type; 9642: } __attribute__ ((__deprecated__)); 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct binary_function 9642: { 9642: 9642: typedef _Arg1 first_argument_type; 9642: 9642: 9642: typedef _Arg2 second_argument_type; 9642: 9642: 9642: typedef _Result result_type; 9642: } __attribute__ ((__deprecated__)); 9642: # 157 "/usr/include/c++/13/bits/stl_function.h" 3 9642: struct __is_transparent; 9642: 9642: template 9642: struct plus; 9642: 9642: template 9642: struct minus; 9642: 9642: template 9642: struct multiplies; 9642: 9642: template 9642: struct divides; 9642: 9642: template 9642: struct modulus; 9642: 9642: template 9642: struct negate; 9642: 9642: 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: 9642: 9642: template 9642: struct plus : public binary_function<_Tp, _Tp, _Tp> 9642: { 9642: 9642: constexpr 9642: _Tp 9642: operator()(const _Tp& __x, const _Tp& __y) const 9642: { return __x + __y; } 9642: }; 9642: 9642: 9642: template 9642: struct minus : public binary_function<_Tp, _Tp, _Tp> 9642: { 9642: constexpr 9642: _Tp 9642: operator()(const _Tp& __x, const _Tp& __y) const 9642: { return __x - __y; } 9642: }; 9642: 9642: 9642: template 9642: struct multiplies : public binary_function<_Tp, _Tp, _Tp> 9642: { 9642: constexpr 9642: _Tp 9642: operator()(const _Tp& __x, const _Tp& __y) const 9642: { return __x * __y; } 9642: }; 9642: 9642: 9642: template 9642: struct divides : public binary_function<_Tp, _Tp, _Tp> 9642: { 9642: constexpr 9642: _Tp 9642: operator()(const _Tp& __x, const _Tp& __y) const 9642: { return __x / __y; } 9642: }; 9642: 9642: 9642: template 9642: struct modulus : public binary_function<_Tp, _Tp, _Tp> 9642: { 9642: constexpr 9642: _Tp 9642: operator()(const _Tp& __x, const _Tp& __y) const 9642: { return __x % __y; } 9642: }; 9642: 9642: 9642: template 9642: struct negate : public unary_function<_Tp, _Tp> 9642: { 9642: constexpr 9642: _Tp 9642: operator()(const _Tp& __x) const 9642: { return -__x; } 9642: }; 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: 9642: 9642: 9642: template<> 9642: struct plus 9642: { 9642: template 9642: constexpr 9642: auto 9642: operator()(_Tp&& __t, _Up&& __u) const 9642: noexcept(noexcept(std::forward<_Tp>(__t) + std::forward<_Up>(__u))) 9642: -> decltype(std::forward<_Tp>(__t) + std::forward<_Up>(__u)) 9642: { return std::forward<_Tp>(__t) + std::forward<_Up>(__u); } 9642: 9642: typedef __is_transparent is_transparent; 9642: }; 9642: 9642: 9642: template<> 9642: struct minus 9642: { 9642: template 9642: constexpr 9642: auto 9642: operator()(_Tp&& __t, _Up&& __u) const 9642: noexcept(noexcept(std::forward<_Tp>(__t) - std::forward<_Up>(__u))) 9642: -> decltype(std::forward<_Tp>(__t) - std::forward<_Up>(__u)) 9642: { return std::forward<_Tp>(__t) - std::forward<_Up>(__u); } 9642: 9642: typedef __is_transparent is_transparent; 9642: }; 9642: 9642: 9642: template<> 9642: struct multiplies 9642: { 9642: template 9642: constexpr 9642: auto 9642: operator()(_Tp&& __t, _Up&& __u) const 9642: noexcept(noexcept(std::forward<_Tp>(__t) * std::forward<_Up>(__u))) 9642: -> decltype(std::forward<_Tp>(__t) * std::forward<_Up>(__u)) 9642: { return std::forward<_Tp>(__t) * std::forward<_Up>(__u); } 9642: 9642: typedef __is_transparent is_transparent; 9642: }; 9642: 9642: 9642: template<> 9642: struct divides 9642: { 9642: template 9642: constexpr 9642: auto 9642: operator()(_Tp&& __t, _Up&& __u) const 9642: noexcept(noexcept(std::forward<_Tp>(__t) / std::forward<_Up>(__u))) 9642: -> decltype(std::forward<_Tp>(__t) / std::forward<_Up>(__u)) 9642: { return std::forward<_Tp>(__t) / std::forward<_Up>(__u); } 9642: 9642: typedef __is_transparent is_transparent; 9642: }; 9642: 9642: 9642: template<> 9642: struct modulus 9642: { 9642: template 9642: constexpr 9642: auto 9642: operator()(_Tp&& __t, _Up&& __u) const 9642: noexcept(noexcept(std::forward<_Tp>(__t) % std::forward<_Up>(__u))) 9642: -> decltype(std::forward<_Tp>(__t) % std::forward<_Up>(__u)) 9642: { return std::forward<_Tp>(__t) % std::forward<_Up>(__u); } 9642: 9642: typedef __is_transparent is_transparent; 9642: }; 9642: 9642: 9642: template<> 9642: struct negate 9642: { 9642: template 9642: constexpr 9642: auto 9642: operator()(_Tp&& __t) const 9642: noexcept(noexcept(-std::forward<_Tp>(__t))) 9642: -> decltype(-std::forward<_Tp>(__t)) 9642: { return -std::forward<_Tp>(__t); } 9642: 9642: typedef __is_transparent is_transparent; 9642: }; 9642: # 349 "/usr/include/c++/13/bits/stl_function.h" 3 9642: template 9642: struct equal_to; 9642: 9642: template 9642: struct not_equal_to; 9642: 9642: template 9642: struct greater; 9642: 9642: template 9642: struct less; 9642: 9642: template 9642: struct greater_equal; 9642: 9642: template 9642: struct less_equal; 9642: 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: 9642: 9642: template 9642: struct equal_to : public binary_function<_Tp, _Tp, bool> 9642: { 9642: constexpr 9642: bool 9642: operator()(const _Tp& __x, const _Tp& __y) const 9642: { return __x == __y; } 9642: }; 9642: 9642: 9642: template 9642: struct not_equal_to : public binary_function<_Tp, _Tp, bool> 9642: { 9642: constexpr 9642: bool 9642: operator()(const _Tp& __x, const _Tp& __y) const 9642: { return __x != __y; } 9642: }; 9642: 9642: 9642: template 9642: struct greater : public binary_function<_Tp, _Tp, bool> 9642: { 9642: constexpr 9642: bool 9642: operator()(const _Tp& __x, const _Tp& __y) const 9642: { return __x > __y; } 9642: }; 9642: 9642: 9642: template 9642: struct less : public binary_function<_Tp, _Tp, bool> 9642: { 9642: constexpr 9642: bool 9642: operator()(const _Tp& __x, const _Tp& __y) const 9642: { return __x < __y; } 9642: }; 9642: 9642: 9642: template 9642: struct greater_equal : public binary_function<_Tp, _Tp, bool> 9642: { 9642: constexpr 9642: bool 9642: operator()(const _Tp& __x, const _Tp& __y) const 9642: { return __x >= __y; } 9642: }; 9642: 9642: 9642: template 9642: struct less_equal : public binary_function<_Tp, _Tp, bool> 9642: { 9642: constexpr 9642: bool 9642: operator()(const _Tp& __x, const _Tp& __y) const 9642: { return __x <= __y; } 9642: }; 9642: 9642: 9642: template 9642: struct greater<_Tp*> : public binary_function<_Tp*, _Tp*, bool> 9642: { 9642: constexpr bool 9642: operator()(_Tp* __x, _Tp* __y) const noexcept 9642: { 9642: 9642: if (std::__is_constant_evaluated()) 9642: return __x > __y; 9642: 9642: return (unsigned int)__x > (unsigned int)__y; 9642: } 9642: }; 9642: 9642: 9642: template 9642: struct less<_Tp*> : public binary_function<_Tp*, _Tp*, bool> 9642: { 9642: constexpr bool 9642: operator()(_Tp* __x, _Tp* __y) const noexcept 9642: { 9642: 9642: if (std::__is_constant_evaluated()) 9642: return __x < __y; 9642: 9642: return (unsigned int)__x < (unsigned int)__y; 9642: } 9642: }; 9642: 9642: 9642: template 9642: struct greater_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool> 9642: { 9642: constexpr bool 9642: operator()(_Tp* __x, _Tp* __y) const noexcept 9642: { 9642: 9642: if (std::__is_constant_evaluated()) 9642: return __x >= __y; 9642: 9642: return (unsigned int)__x >= (unsigned int)__y; 9642: } 9642: }; 9642: 9642: 9642: template 9642: struct less_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool> 9642: { 9642: constexpr bool 9642: operator()(_Tp* __x, _Tp* __y) const noexcept 9642: { 9642: 9642: if (std::__is_constant_evaluated()) 9642: return __x <= __y; 9642: 9642: return (unsigned int)__x <= (unsigned int)__y; 9642: } 9642: }; 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: 9642: template<> 9642: struct equal_to 9642: { 9642: template 9642: constexpr auto 9642: operator()(_Tp&& __t, _Up&& __u) const 9642: noexcept(noexcept(std::forward<_Tp>(__t) == std::forward<_Up>(__u))) 9642: -> decltype(std::forward<_Tp>(__t) == std::forward<_Up>(__u)) 9642: { return std::forward<_Tp>(__t) == std::forward<_Up>(__u); } 9642: 9642: typedef __is_transparent is_transparent; 9642: }; 9642: 9642: 9642: template<> 9642: struct not_equal_to 9642: { 9642: template 9642: constexpr auto 9642: operator()(_Tp&& __t, _Up&& __u) const 9642: noexcept(noexcept(std::forward<_Tp>(__t) != std::forward<_Up>(__u))) 9642: -> decltype(std::forward<_Tp>(__t) != std::forward<_Up>(__u)) 9642: { return std::forward<_Tp>(__t) != std::forward<_Up>(__u); } 9642: 9642: typedef __is_transparent is_transparent; 9642: }; 9642: 9642: 9642: template<> 9642: struct greater 9642: { 9642: template 9642: constexpr auto 9642: operator()(_Tp&& __t, _Up&& __u) const 9642: noexcept(noexcept(std::forward<_Tp>(__t) > std::forward<_Up>(__u))) 9642: -> decltype(std::forward<_Tp>(__t) > std::forward<_Up>(__u)) 9642: { 9642: return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), 9642: __ptr_cmp<_Tp, _Up>{}); 9642: } 9642: 9642: template 9642: constexpr bool 9642: operator()(_Tp* __t, _Up* __u) const noexcept 9642: { return greater>{}(__t, __u); } 9642: 9642: typedef __is_transparent is_transparent; 9642: 9642: private: 9642: template 9642: static constexpr decltype(auto) 9642: _S_cmp(_Tp&& __t, _Up&& __u, false_type) 9642: { return std::forward<_Tp>(__t) > std::forward<_Up>(__u); } 9642: 9642: template 9642: static constexpr bool 9642: _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept 9642: { 9642: return greater{}( 9642: static_cast(std::forward<_Tp>(__t)), 9642: static_cast(std::forward<_Up>(__u))); 9642: } 9642: 9642: 9642: template 9642: struct __not_overloaded2 : true_type { }; 9642: 9642: 9642: template 9642: struct __not_overloaded2<_Tp, _Up, __void_t< 9642: decltype(std::declval<_Tp>().operator>(std::declval<_Up>()))>> 9642: : false_type { }; 9642: 9642: 9642: template 9642: struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; 9642: 9642: 9642: template 9642: struct __not_overloaded<_Tp, _Up, __void_t< 9642: decltype(operator>(std::declval<_Tp>(), std::declval<_Up>()))>> 9642: : false_type { }; 9642: 9642: template 9642: using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, 9642: is_convertible<_Tp, const volatile void*>, 9642: is_convertible<_Up, const volatile void*>>; 9642: }; 9642: 9642: 9642: template<> 9642: struct less 9642: { 9642: template 9642: constexpr auto 9642: operator()(_Tp&& __t, _Up&& __u) const 9642: noexcept(noexcept(std::forward<_Tp>(__t) < std::forward<_Up>(__u))) 9642: -> decltype(std::forward<_Tp>(__t) < std::forward<_Up>(__u)) 9642: { 9642: return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), 9642: __ptr_cmp<_Tp, _Up>{}); 9642: } 9642: 9642: template 9642: constexpr bool 9642: operator()(_Tp* __t, _Up* __u) const noexcept 9642: { return less>{}(__t, __u); } 9642: 9642: typedef __is_transparent is_transparent; 9642: 9642: private: 9642: template 9642: static constexpr decltype(auto) 9642: _S_cmp(_Tp&& __t, _Up&& __u, false_type) 9642: { return std::forward<_Tp>(__t) < std::forward<_Up>(__u); } 9642: 9642: template 9642: static constexpr bool 9642: _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept 9642: { 9642: return less{}( 9642: static_cast(std::forward<_Tp>(__t)), 9642: static_cast(std::forward<_Up>(__u))); 9642: } 9642: 9642: 9642: template 9642: struct __not_overloaded2 : true_type { }; 9642: 9642: 9642: template 9642: struct __not_overloaded2<_Tp, _Up, __void_t< 9642: decltype(std::declval<_Tp>().operator<(std::declval<_Up>()))>> 9642: : false_type { }; 9642: 9642: 9642: template 9642: struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; 9642: 9642: 9642: template 9642: struct __not_overloaded<_Tp, _Up, __void_t< 9642: decltype(operator<(std::declval<_Tp>(), std::declval<_Up>()))>> 9642: : false_type { }; 9642: 9642: template 9642: using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, 9642: is_convertible<_Tp, const volatile void*>, 9642: is_convertible<_Up, const volatile void*>>; 9642: }; 9642: 9642: 9642: template<> 9642: struct greater_equal 9642: { 9642: template 9642: constexpr auto 9642: operator()(_Tp&& __t, _Up&& __u) const 9642: noexcept(noexcept(std::forward<_Tp>(__t) >= std::forward<_Up>(__u))) 9642: -> decltype(std::forward<_Tp>(__t) >= std::forward<_Up>(__u)) 9642: { 9642: return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), 9642: __ptr_cmp<_Tp, _Up>{}); 9642: } 9642: 9642: template 9642: constexpr bool 9642: operator()(_Tp* __t, _Up* __u) const noexcept 9642: { return greater_equal>{}(__t, __u); } 9642: 9642: typedef __is_transparent is_transparent; 9642: 9642: private: 9642: template 9642: static constexpr decltype(auto) 9642: _S_cmp(_Tp&& __t, _Up&& __u, false_type) 9642: { return std::forward<_Tp>(__t) >= std::forward<_Up>(__u); } 9642: 9642: template 9642: static constexpr bool 9642: _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept 9642: { 9642: return greater_equal{}( 9642: static_cast(std::forward<_Tp>(__t)), 9642: static_cast(std::forward<_Up>(__u))); 9642: } 9642: 9642: 9642: template 9642: struct __not_overloaded2 : true_type { }; 9642: 9642: 9642: template 9642: struct __not_overloaded2<_Tp, _Up, __void_t< 9642: decltype(std::declval<_Tp>().operator>=(std::declval<_Up>()))>> 9642: : false_type { }; 9642: 9642: 9642: template 9642: struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; 9642: 9642: 9642: template 9642: struct __not_overloaded<_Tp, _Up, __void_t< 9642: decltype(operator>=(std::declval<_Tp>(), std::declval<_Up>()))>> 9642: : false_type { }; 9642: 9642: template 9642: using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, 9642: is_convertible<_Tp, const volatile void*>, 9642: is_convertible<_Up, const volatile void*>>; 9642: }; 9642: 9642: 9642: template<> 9642: struct less_equal 9642: { 9642: template 9642: constexpr auto 9642: operator()(_Tp&& __t, _Up&& __u) const 9642: noexcept(noexcept(std::forward<_Tp>(__t) <= std::forward<_Up>(__u))) 9642: -> decltype(std::forward<_Tp>(__t) <= std::forward<_Up>(__u)) 9642: { 9642: return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), 9642: __ptr_cmp<_Tp, _Up>{}); 9642: } 9642: 9642: template 9642: constexpr bool 9642: operator()(_Tp* __t, _Up* __u) const noexcept 9642: { return less_equal>{}(__t, __u); } 9642: 9642: typedef __is_transparent is_transparent; 9642: 9642: private: 9642: template 9642: static constexpr decltype(auto) 9642: _S_cmp(_Tp&& __t, _Up&& __u, false_type) 9642: { return std::forward<_Tp>(__t) <= std::forward<_Up>(__u); } 9642: 9642: template 9642: static constexpr bool 9642: _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept 9642: { 9642: return less_equal{}( 9642: static_cast(std::forward<_Tp>(__t)), 9642: static_cast(std::forward<_Up>(__u))); 9642: } 9642: 9642: 9642: template 9642: struct __not_overloaded2 : true_type { }; 9642: 9642: 9642: template 9642: struct __not_overloaded2<_Tp, _Up, __void_t< 9642: decltype(std::declval<_Tp>().operator<=(std::declval<_Up>()))>> 9642: : false_type { }; 9642: 9642: 9642: template 9642: struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; 9642: 9642: 9642: template 9642: struct __not_overloaded<_Tp, _Up, __void_t< 9642: decltype(operator<=(std::declval<_Tp>(), std::declval<_Up>()))>> 9642: : false_type { }; 9642: 9642: template 9642: using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, 9642: is_convertible<_Tp, const volatile void*>, 9642: is_convertible<_Up, const volatile void*>>; 9642: }; 9642: # 781 "/usr/include/c++/13/bits/stl_function.h" 3 9642: template 9642: struct logical_and; 9642: 9642: template 9642: struct logical_or; 9642: 9642: template 9642: struct logical_not; 9642: 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: 9642: 9642: template 9642: struct logical_and : public binary_function<_Tp, _Tp, bool> 9642: { 9642: constexpr 9642: bool 9642: operator()(const _Tp& __x, const _Tp& __y) const 9642: { return __x && __y; } 9642: }; 9642: 9642: 9642: template 9642: struct logical_or : public binary_function<_Tp, _Tp, bool> 9642: { 9642: constexpr 9642: bool 9642: operator()(const _Tp& __x, const _Tp& __y) const 9642: { return __x || __y; } 9642: }; 9642: 9642: 9642: template 9642: struct logical_not : public unary_function<_Tp, bool> 9642: { 9642: constexpr 9642: bool 9642: operator()(const _Tp& __x) const 9642: { return !__x; } 9642: }; 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: 9642: template<> 9642: struct logical_and 9642: { 9642: template 9642: constexpr 9642: auto 9642: operator()(_Tp&& __t, _Up&& __u) const 9642: noexcept(noexcept(std::forward<_Tp>(__t) && std::forward<_Up>(__u))) 9642: -> decltype(std::forward<_Tp>(__t) && std::forward<_Up>(__u)) 9642: { return std::forward<_Tp>(__t) && std::forward<_Up>(__u); } 9642: 9642: typedef __is_transparent is_transparent; 9642: }; 9642: 9642: 9642: template<> 9642: struct logical_or 9642: { 9642: template 9642: constexpr 9642: auto 9642: operator()(_Tp&& __t, _Up&& __u) const 9642: noexcept(noexcept(std::forward<_Tp>(__t) || std::forward<_Up>(__u))) 9642: -> decltype(std::forward<_Tp>(__t) || std::forward<_Up>(__u)) 9642: { return std::forward<_Tp>(__t) || std::forward<_Up>(__u); } 9642: 9642: typedef __is_transparent is_transparent; 9642: }; 9642: 9642: 9642: template<> 9642: struct logical_not 9642: { 9642: template 9642: constexpr 9642: auto 9642: operator()(_Tp&& __t) const 9642: noexcept(noexcept(!std::forward<_Tp>(__t))) 9642: -> decltype(!std::forward<_Tp>(__t)) 9642: { return !std::forward<_Tp>(__t); } 9642: 9642: typedef __is_transparent is_transparent; 9642: }; 9642: 9642: 9642: 9642: 9642: template 9642: struct bit_and; 9642: 9642: template 9642: struct bit_or; 9642: 9642: template 9642: struct bit_xor; 9642: 9642: template 9642: struct bit_not; 9642: 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: 9642: 9642: 9642: template 9642: struct bit_and : public binary_function<_Tp, _Tp, _Tp> 9642: { 9642: constexpr 9642: _Tp 9642: operator()(const _Tp& __x, const _Tp& __y) const 9642: { return __x & __y; } 9642: }; 9642: 9642: template 9642: struct bit_or : public binary_function<_Tp, _Tp, _Tp> 9642: { 9642: constexpr 9642: _Tp 9642: operator()(const _Tp& __x, const _Tp& __y) const 9642: { return __x | __y; } 9642: }; 9642: 9642: template 9642: struct bit_xor : public binary_function<_Tp, _Tp, _Tp> 9642: { 9642: constexpr 9642: _Tp 9642: operator()(const _Tp& __x, const _Tp& __y) const 9642: { return __x ^ __y; } 9642: }; 9642: 9642: template 9642: struct bit_not : public unary_function<_Tp, _Tp> 9642: { 9642: constexpr 9642: _Tp 9642: operator()(const _Tp& __x) const 9642: { return ~__x; } 9642: }; 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: template <> 9642: struct bit_and 9642: { 9642: template 9642: constexpr 9642: auto 9642: operator()(_Tp&& __t, _Up&& __u) const 9642: noexcept(noexcept(std::forward<_Tp>(__t) & std::forward<_Up>(__u))) 9642: -> decltype(std::forward<_Tp>(__t) & std::forward<_Up>(__u)) 9642: { return std::forward<_Tp>(__t) & std::forward<_Up>(__u); } 9642: 9642: typedef __is_transparent is_transparent; 9642: }; 9642: 9642: template <> 9642: struct bit_or 9642: { 9642: template 9642: constexpr 9642: auto 9642: operator()(_Tp&& __t, _Up&& __u) const 9642: noexcept(noexcept(std::forward<_Tp>(__t) | std::forward<_Up>(__u))) 9642: -> decltype(std::forward<_Tp>(__t) | std::forward<_Up>(__u)) 9642: { return std::forward<_Tp>(__t) | std::forward<_Up>(__u); } 9642: 9642: typedef __is_transparent is_transparent; 9642: }; 9642: 9642: template <> 9642: struct bit_xor 9642: { 9642: template 9642: constexpr 9642: auto 9642: operator()(_Tp&& __t, _Up&& __u) const 9642: noexcept(noexcept(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u))) 9642: -> decltype(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u)) 9642: { return std::forward<_Tp>(__t) ^ std::forward<_Up>(__u); } 9642: 9642: typedef __is_transparent is_transparent; 9642: }; 9642: 9642: template <> 9642: struct bit_not 9642: { 9642: template 9642: constexpr 9642: auto 9642: operator()(_Tp&& __t) const 9642: noexcept(noexcept(~std::forward<_Tp>(__t))) 9642: -> decltype(~std::forward<_Tp>(__t)) 9642: { return ~std::forward<_Tp>(__t); } 9642: 9642: typedef __is_transparent is_transparent; 9642: }; 9642: 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: # 1023 "/usr/include/c++/13/bits/stl_function.h" 3 9642: template 9642: class [[__deprecated__]] unary_negate 9642: : public unary_function 9642: { 9642: protected: 9642: _Predicate _M_pred; 9642: 9642: public: 9642: constexpr 9642: explicit 9642: unary_negate(const _Predicate& __x) : _M_pred(__x) { } 9642: 9642: constexpr 9642: bool 9642: operator()(const typename _Predicate::argument_type& __x) const 9642: { return !_M_pred(__x); } 9642: }; 9642: 9642: 9642: template 9642: __attribute__ ((__deprecated__ ("use '" "std::not_fn" "' instead"))) 9642: constexpr 9642: inline unary_negate<_Predicate> 9642: not1(const _Predicate& __pred) 9642: { return unary_negate<_Predicate>(__pred); } 9642: 9642: 9642: template 9642: class [[__deprecated__]] binary_negate 9642: : public binary_function 9642: { 9642: protected: 9642: _Predicate _M_pred; 9642: 9642: public: 9642: constexpr 9642: explicit 9642: binary_negate(const _Predicate& __x) : _M_pred(__x) { } 9642: 9642: constexpr 9642: bool 9642: operator()(const typename _Predicate::first_argument_type& __x, 9642: const typename _Predicate::second_argument_type& __y) const 9642: { return !_M_pred(__x, __y); } 9642: }; 9642: 9642: 9642: template 9642: __attribute__ ((__deprecated__ ("use '" "std::not_fn" "' instead"))) 9642: constexpr 9642: inline binary_negate<_Predicate> 9642: not2(const _Predicate& __pred) 9642: { return binary_negate<_Predicate>(__pred); } 9642: # 1104 "/usr/include/c++/13/bits/stl_function.h" 3 9642: template 9642: class pointer_to_unary_function : public unary_function<_Arg, _Result> 9642: { 9642: protected: 9642: _Result (*_M_ptr)(_Arg); 9642: 9642: public: 9642: pointer_to_unary_function() { } 9642: 9642: explicit 9642: pointer_to_unary_function(_Result (*__x)(_Arg)) 9642: : _M_ptr(__x) { } 9642: 9642: _Result 9642: operator()(_Arg __x) const 9642: { return _M_ptr(__x); } 9642: } __attribute__ ((__deprecated__)); 9642: 9642: 9642: template 9642: __attribute__ ((__deprecated__ ("use '" "std::function" "' instead"))) 9642: inline pointer_to_unary_function<_Arg, _Result> 9642: ptr_fun(_Result (*__x)(_Arg)) 9642: { return pointer_to_unary_function<_Arg, _Result>(__x); } 9642: 9642: 9642: template 9642: class pointer_to_binary_function 9642: : public binary_function<_Arg1, _Arg2, _Result> 9642: { 9642: protected: 9642: _Result (*_M_ptr)(_Arg1, _Arg2); 9642: 9642: public: 9642: pointer_to_binary_function() { } 9642: 9642: explicit 9642: pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2)) 9642: : _M_ptr(__x) { } 9642: 9642: _Result 9642: operator()(_Arg1 __x, _Arg2 __y) const 9642: { return _M_ptr(__x, __y); } 9642: } __attribute__ ((__deprecated__)); 9642: 9642: 9642: template 9642: __attribute__ ((__deprecated__ ("use '" "std::function" "' instead"))) 9642: inline pointer_to_binary_function<_Arg1, _Arg2, _Result> 9642: ptr_fun(_Result (*__x)(_Arg1, _Arg2)) 9642: { return pointer_to_binary_function<_Arg1, _Arg2, _Result>(__x); } 9642: 9642: 9642: template 9642: struct _Identity 9642: : public unary_function<_Tp, _Tp> 9642: { 9642: _Tp& 9642: operator()(_Tp& __x) const 9642: { return __x; } 9642: 9642: const _Tp& 9642: operator()(const _Tp& __x) const 9642: { return __x; } 9642: }; 9642: 9642: 9642: template struct _Identity : _Identity<_Tp> { }; 9642: 9642: template 9642: struct _Select1st 9642: : public unary_function<_Pair, typename _Pair::first_type> 9642: { 9642: typename _Pair::first_type& 9642: operator()(_Pair& __x) const 9642: { return __x.first; } 9642: 9642: const typename _Pair::first_type& 9642: operator()(const _Pair& __x) const 9642: { return __x.first; } 9642: 9642: 9642: template 9642: typename _Pair2::first_type& 9642: operator()(_Pair2& __x) const 9642: { return __x.first; } 9642: 9642: template 9642: const typename _Pair2::first_type& 9642: operator()(const _Pair2& __x) const 9642: { return __x.first; } 9642: 9642: }; 9642: 9642: template 9642: struct _Select2nd 9642: : public unary_function<_Pair, typename _Pair::second_type> 9642: { 9642: typename _Pair::second_type& 9642: operator()(_Pair& __x) const 9642: { return __x.second; } 9642: 9642: const typename _Pair::second_type& 9642: operator()(const _Pair& __x) const 9642: { return __x.second; } 9642: }; 9642: # 1231 "/usr/include/c++/13/bits/stl_function.h" 3 9642: template 9642: class mem_fun_t : public unary_function<_Tp*, _Ret> 9642: { 9642: public: 9642: explicit 9642: mem_fun_t(_Ret (_Tp::*__pf)()) 9642: : _M_f(__pf) { } 9642: 9642: _Ret 9642: operator()(_Tp* __p) const 9642: { return (__p->*_M_f)(); } 9642: 9642: private: 9642: _Ret (_Tp::*_M_f)(); 9642: } __attribute__ ((__deprecated__)); 9642: 9642: 9642: template 9642: class const_mem_fun_t : public unary_function 9642: { 9642: public: 9642: explicit 9642: const_mem_fun_t(_Ret (_Tp::*__pf)() const) 9642: : _M_f(__pf) { } 9642: 9642: _Ret 9642: operator()(const _Tp* __p) const 9642: { return (__p->*_M_f)(); } 9642: 9642: private: 9642: _Ret (_Tp::*_M_f)() const; 9642: } __attribute__ ((__deprecated__)); 9642: 9642: 9642: template 9642: class mem_fun_ref_t : public unary_function<_Tp, _Ret> 9642: { 9642: public: 9642: explicit 9642: mem_fun_ref_t(_Ret (_Tp::*__pf)()) 9642: : _M_f(__pf) { } 9642: 9642: _Ret 9642: operator()(_Tp& __r) const 9642: { return (__r.*_M_f)(); } 9642: 9642: private: 9642: _Ret (_Tp::*_M_f)(); 9642: } __attribute__ ((__deprecated__)); 9642: 9642: 9642: template 9642: class const_mem_fun_ref_t : public unary_function<_Tp, _Ret> 9642: { 9642: public: 9642: explicit 9642: const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const) 9642: : _M_f(__pf) { } 9642: 9642: _Ret 9642: operator()(const _Tp& __r) const 9642: { return (__r.*_M_f)(); } 9642: 9642: private: 9642: _Ret (_Tp::*_M_f)() const; 9642: } __attribute__ ((__deprecated__)); 9642: 9642: 9642: template 9642: class mem_fun1_t : public binary_function<_Tp*, _Arg, _Ret> 9642: { 9642: public: 9642: explicit 9642: mem_fun1_t(_Ret (_Tp::*__pf)(_Arg)) 9642: : _M_f(__pf) { } 9642: 9642: _Ret 9642: operator()(_Tp* __p, _Arg __x) const 9642: { return (__p->*_M_f)(__x); } 9642: 9642: private: 9642: _Ret (_Tp::*_M_f)(_Arg); 9642: } __attribute__ ((__deprecated__)); 9642: 9642: 9642: template 9642: class const_mem_fun1_t : public binary_function 9642: { 9642: public: 9642: explicit 9642: const_mem_fun1_t(_Ret (_Tp::*__pf)(_Arg) const) 9642: : _M_f(__pf) { } 9642: 9642: _Ret 9642: operator()(const _Tp* __p, _Arg __x) const 9642: { return (__p->*_M_f)(__x); } 9642: 9642: private: 9642: _Ret (_Tp::*_M_f)(_Arg) const; 9642: } __attribute__ ((__deprecated__)); 9642: 9642: 9642: template 9642: class mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret> 9642: { 9642: public: 9642: explicit 9642: mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg)) 9642: : _M_f(__pf) { } 9642: 9642: _Ret 9642: operator()(_Tp& __r, _Arg __x) const 9642: { return (__r.*_M_f)(__x); } 9642: 9642: private: 9642: _Ret (_Tp::*_M_f)(_Arg); 9642: } __attribute__ ((__deprecated__)); 9642: 9642: 9642: template 9642: class const_mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret> 9642: { 9642: public: 9642: explicit 9642: const_mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg) const) 9642: : _M_f(__pf) { } 9642: 9642: _Ret 9642: operator()(const _Tp& __r, _Arg __x) const 9642: { return (__r.*_M_f)(__x); } 9642: 9642: private: 9642: _Ret (_Tp::*_M_f)(_Arg) const; 9642: } __attribute__ ((__deprecated__)); 9642: 9642: 9642: 9642: template 9642: __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) 9642: inline mem_fun_t<_Ret, _Tp> 9642: mem_fun(_Ret (_Tp::*__f)()) 9642: { return mem_fun_t<_Ret, _Tp>(__f); } 9642: 9642: template 9642: __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) 9642: inline const_mem_fun_t<_Ret, _Tp> 9642: mem_fun(_Ret (_Tp::*__f)() const) 9642: { return const_mem_fun_t<_Ret, _Tp>(__f); } 9642: 9642: template 9642: __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) 9642: inline mem_fun_ref_t<_Ret, _Tp> 9642: mem_fun_ref(_Ret (_Tp::*__f)()) 9642: { return mem_fun_ref_t<_Ret, _Tp>(__f); } 9642: 9642: template 9642: __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) 9642: inline const_mem_fun_ref_t<_Ret, _Tp> 9642: mem_fun_ref(_Ret (_Tp::*__f)() const) 9642: { return const_mem_fun_ref_t<_Ret, _Tp>(__f); } 9642: 9642: template 9642: __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) 9642: inline mem_fun1_t<_Ret, _Tp, _Arg> 9642: mem_fun(_Ret (_Tp::*__f)(_Arg)) 9642: { return mem_fun1_t<_Ret, _Tp, _Arg>(__f); } 9642: 9642: template 9642: __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) 9642: inline const_mem_fun1_t<_Ret, _Tp, _Arg> 9642: mem_fun(_Ret (_Tp::*__f)(_Arg) const) 9642: { return const_mem_fun1_t<_Ret, _Tp, _Arg>(__f); } 9642: 9642: template 9642: __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) 9642: inline mem_fun1_ref_t<_Ret, _Tp, _Arg> 9642: mem_fun_ref(_Ret (_Tp::*__f)(_Arg)) 9642: { return mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); } 9642: 9642: template 9642: __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) 9642: inline const_mem_fun1_ref_t<_Ret, _Tp, _Arg> 9642: mem_fun_ref(_Ret (_Tp::*__f)(_Arg) const) 9642: { return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); } 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: 9642: 9642: template> 9642: struct __has_is_transparent 9642: { }; 9642: 9642: template 9642: struct __has_is_transparent<_Func, _SfinaeType, 9642: __void_t> 9642: { typedef void type; }; 9642: 9642: template 9642: using __has_is_transparent_t 9642: = typename __has_is_transparent<_Func, _SfinaeType>::type; 9642: 9642: 9642: 9642: } 9642: 9642: 9642: # 1 "/usr/include/c++/13/backward/binders.h" 1 3 9642: # 60 "/usr/include/c++/13/backward/binders.h" 3 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 107 "/usr/include/c++/13/backward/binders.h" 3 9642: template 9642: class binder1st 9642: : public unary_function 9642: { 9642: protected: 9642: _Operation op; 9642: typename _Operation::first_argument_type value; 9642: 9642: public: 9642: binder1st(const _Operation& __x, 9642: const typename _Operation::first_argument_type& __y) 9642: : op(__x), value(__y) { } 9642: 9642: typename _Operation::result_type 9642: operator()(const typename _Operation::second_argument_type& __x) const 9642: { return op(value, __x); } 9642: 9642: 9642: 9642: typename _Operation::result_type 9642: operator()(typename _Operation::second_argument_type& __x) const 9642: { return op(value, __x); } 9642: } __attribute__ ((__deprecated__ ("use '" "std::bind" "' instead"))); 9642: 9642: 9642: template 9642: __attribute__ ((__deprecated__ ("use '" "std::bind" "' instead"))) 9642: inline binder1st<_Operation> 9642: bind1st(const _Operation& __fn, const _Tp& __x) 9642: { 9642: typedef typename _Operation::first_argument_type _Arg1_type; 9642: return binder1st<_Operation>(__fn, _Arg1_type(__x)); 9642: } 9642: 9642: 9642: template 9642: class binder2nd 9642: : public unary_function 9642: { 9642: protected: 9642: _Operation op; 9642: typename _Operation::second_argument_type value; 9642: 9642: public: 9642: binder2nd(const _Operation& __x, 9642: const typename _Operation::second_argument_type& __y) 9642: : op(__x), value(__y) { } 9642: 9642: typename _Operation::result_type 9642: operator()(const typename _Operation::first_argument_type& __x) const 9642: { return op(__x, value); } 9642: 9642: 9642: 9642: typename _Operation::result_type 9642: operator()(typename _Operation::first_argument_type& __x) const 9642: { return op(__x, value); } 9642: } __attribute__ ((__deprecated__ ("use '" "std::bind" "' instead"))); 9642: 9642: 9642: template 9642: __attribute__ ((__deprecated__ ("use '" "std::bind" "' instead"))) 9642: inline binder2nd<_Operation> 9642: bind2nd(const _Operation& __fn, const _Tp& __x) 9642: { 9642: typedef typename _Operation::second_argument_type _Arg2_type; 9642: return binder2nd<_Operation>(__fn, _Arg2_type(__x)); 9642: } 9642: 9642: 9642: 9642: } 9642: 9642: #pragma GCC diagnostic pop 9642: # 1439 "/usr/include/c++/13/bits/stl_function.h" 2 3 9642: # 40 "/usr/include/c++/13/bits/refwrap.h" 2 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 52 "/usr/include/c++/13/bits/refwrap.h" 3 9642: template 9642: struct _Maybe_unary_or_binary_function { }; 9642: 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: 9642: 9642: template 9642: struct _Maybe_unary_or_binary_function<_Res, _T1> 9642: : std::unary_function<_T1, _Res> { }; 9642: 9642: 9642: template 9642: struct _Maybe_unary_or_binary_function<_Res, _T1, _T2> 9642: : std::binary_function<_T1, _T2, _Res> { }; 9642: 9642: #pragma GCC diagnostic pop 9642: 9642: template 9642: struct _Mem_fn_traits; 9642: 9642: template 9642: struct _Mem_fn_traits_base 9642: { 9642: using __result_type = _Res; 9642: using __maybe_type 9642: = _Maybe_unary_or_binary_function<_Res, _Class*, _ArgTypes...>; 9642: using __arity = integral_constant; 9642: }; 9642: # 103 "/usr/include/c++/13/bits/refwrap.h" 3 9642: template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) > : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) > : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const > : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const > : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile > : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile > : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile > : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile > : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; }; 9642: template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) &> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) &> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const &> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const &> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile &> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile &> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile &> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile &> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; }; 9642: template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) &&> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) &&> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const &&> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const &&> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile &&> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile &&> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile &&> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile &&> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; }; 9642: 9642: 9642: template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) noexcept> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) noexcept> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const noexcept> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const noexcept> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile noexcept> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile noexcept> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile noexcept> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile noexcept> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; }; 9642: template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) & noexcept> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) & noexcept> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const & noexcept> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const & noexcept> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile & noexcept> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile & noexcept> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile & noexcept> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile & noexcept> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; }; 9642: template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) && noexcept> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) && noexcept> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const && noexcept> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const && noexcept> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile && noexcept> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile && noexcept> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile && noexcept> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile && noexcept> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template> 9642: struct _Maybe_get_result_type 9642: { }; 9642: 9642: template 9642: struct _Maybe_get_result_type<_Functor, 9642: __void_t> 9642: { typedef typename _Functor::result_type result_type; }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Weak_result_type_impl 9642: : _Maybe_get_result_type<_Functor> 9642: { }; 9642: 9642: 9642: template 9642: struct _Weak_result_type_impl<_Res(_ArgTypes...) noexcept (_NE)> 9642: { typedef _Res result_type; }; 9642: 9642: 9642: template 9642: struct _Weak_result_type_impl<_Res(_ArgTypes......) noexcept (_NE)> 9642: { typedef _Res result_type; }; 9642: 9642: 9642: template 9642: struct _Weak_result_type_impl<_Res(*)(_ArgTypes...) noexcept (_NE)> 9642: { typedef _Res result_type; }; 9642: 9642: 9642: template 9642: struct 9642: _Weak_result_type_impl<_Res(*)(_ArgTypes......) noexcept (_NE)> 9642: { typedef _Res result_type; }; 9642: 9642: 9642: template::value> 9642: struct _Weak_result_type_memfun 9642: : _Weak_result_type_impl<_Functor> 9642: { }; 9642: 9642: 9642: template 9642: struct _Weak_result_type_memfun<_MemFunPtr, true> 9642: { 9642: using result_type = typename _Mem_fn_traits<_MemFunPtr>::__result_type; 9642: }; 9642: 9642: 9642: template 9642: struct _Weak_result_type_memfun<_Func _Class::*, false> 9642: { }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Weak_result_type 9642: : _Weak_result_type_memfun::type> 9642: { }; 9642: 9642: 9642: 9642: template> 9642: struct _Refwrap_base_arg1 9642: { }; 9642: 9642: 9642: template 9642: struct _Refwrap_base_arg1<_Tp, 9642: __void_t> 9642: { 9642: typedef typename _Tp::argument_type argument_type; 9642: }; 9642: 9642: 9642: template> 9642: struct _Refwrap_base_arg2 9642: { }; 9642: 9642: 9642: template 9642: struct _Refwrap_base_arg2<_Tp, 9642: __void_t> 9642: { 9642: typedef typename _Tp::first_argument_type first_argument_type; 9642: typedef typename _Tp::second_argument_type second_argument_type; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Reference_wrapper_base 9642: : _Weak_result_type<_Tp>, _Refwrap_base_arg1<_Tp>, _Refwrap_base_arg2<_Tp> 9642: { }; 9642: 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: 9642: 9642: template 9642: struct _Reference_wrapper_base<_Res(_T1) noexcept (_NE)> 9642: : unary_function<_T1, _Res> 9642: { }; 9642: 9642: template 9642: struct _Reference_wrapper_base<_Res(_T1) const> 9642: : unary_function<_T1, _Res> 9642: { }; 9642: 9642: template 9642: struct _Reference_wrapper_base<_Res(_T1) volatile> 9642: : unary_function<_T1, _Res> 9642: { }; 9642: 9642: template 9642: struct _Reference_wrapper_base<_Res(_T1) const volatile> 9642: : unary_function<_T1, _Res> 9642: { }; 9642: 9642: 9642: template 9642: struct _Reference_wrapper_base<_Res(_T1, _T2) noexcept (_NE)> 9642: : binary_function<_T1, _T2, _Res> 9642: { }; 9642: 9642: template 9642: struct _Reference_wrapper_base<_Res(_T1, _T2) const> 9642: : binary_function<_T1, _T2, _Res> 9642: { }; 9642: 9642: template 9642: struct _Reference_wrapper_base<_Res(_T1, _T2) volatile> 9642: : binary_function<_T1, _T2, _Res> 9642: { }; 9642: 9642: template 9642: struct _Reference_wrapper_base<_Res(_T1, _T2) const volatile> 9642: : binary_function<_T1, _T2, _Res> 9642: { }; 9642: 9642: 9642: template 9642: struct _Reference_wrapper_base<_Res(*)(_T1) noexcept (_NE)> 9642: : unary_function<_T1, _Res> 9642: { }; 9642: 9642: 9642: template 9642: struct _Reference_wrapper_base<_Res(*)(_T1, _T2) noexcept (_NE)> 9642: : binary_function<_T1, _T2, _Res> 9642: { }; 9642: 9642: template::value> 9642: struct _Reference_wrapper_base_memfun 9642: : _Reference_wrapper_base<_Tp> 9642: { }; 9642: 9642: template 9642: struct _Reference_wrapper_base_memfun<_MemFunPtr, true> 9642: : _Mem_fn_traits<_MemFunPtr>::__maybe_type 9642: { 9642: using result_type = typename _Mem_fn_traits<_MemFunPtr>::__result_type; 9642: }; 9642: #pragma GCC diagnostic pop 9642: # 302 "/usr/include/c++/13/bits/refwrap.h" 3 9642: template 9642: class reference_wrapper 9642: 9642: 9642: 9642: : public _Reference_wrapper_base_memfun::type> 9642: 9642: { 9642: _Tp* _M_data; 9642: 9642: 9642: static _Tp* _S_fun(_Tp& __r) noexcept { return std::__addressof(__r); } 9642: 9642: static void _S_fun(_Tp&&) = delete; 9642: 9642: template> 9642: using __not_same 9642: = typename enable_if::value>::type; 9642: 9642: public: 9642: typedef _Tp type; 9642: 9642: 9642: 9642: 9642: template, typename 9642: = decltype(reference_wrapper::_S_fun(std::declval<_Up>()))> 9642: 9642: reference_wrapper(_Up&& __uref) 9642: noexcept(noexcept(reference_wrapper::_S_fun(std::declval<_Up>()))) 9642: : _M_data(reference_wrapper::_S_fun(std::forward<_Up>(__uref))) 9642: { } 9642: 9642: reference_wrapper(const reference_wrapper&) = default; 9642: 9642: reference_wrapper& 9642: operator=(const reference_wrapper&) = default; 9642: 9642: 9642: operator _Tp&() const noexcept 9642: { return this->get(); } 9642: 9642: 9642: _Tp& 9642: get() const noexcept 9642: { return *_M_data; } 9642: 9642: template 9642: 9642: typename __invoke_result<_Tp&, _Args...>::type 9642: operator()(_Args&&... __args) const 9642: noexcept(__is_nothrow_invocable<_Tp&, _Args...>::value) 9642: { 9642: 9642: 9642: 9642: 9642: return std::__invoke(get(), std::forward<_Args>(__args)...); 9642: } 9642: }; 9642: 9642: 9642: template 9642: reference_wrapper(_Tp&) -> reference_wrapper<_Tp>; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: inline reference_wrapper<_Tp> 9642: ref(_Tp& __t) noexcept 9642: { return reference_wrapper<_Tp>(__t); } 9642: 9642: 9642: template 9642: 9642: inline reference_wrapper 9642: cref(const _Tp& __t) noexcept 9642: { return reference_wrapper(__t); } 9642: 9642: template 9642: void ref(const _Tp&&) = delete; 9642: 9642: template 9642: void cref(const _Tp&&) = delete; 9642: 9642: 9642: template 9642: 9642: inline reference_wrapper<_Tp> 9642: ref(reference_wrapper<_Tp> __t) noexcept 9642: { return __t; } 9642: 9642: 9642: template 9642: 9642: inline reference_wrapper 9642: cref(reference_wrapper<_Tp> __t) noexcept 9642: { return { __t.get() }; } 9642: 9642: 9642: 9642: 9642: } 9642: # 68 "/usr/include/c++/13/deque" 2 3 9642: # 1 "/usr/include/c++/13/bits/range_access.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/range_access.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/range_access.h" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__, __gnu__::__always_inline__]] 9642: inline constexpr auto 9642: begin(_Container& __cont) -> decltype(__cont.begin()) 9642: { return __cont.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__, __gnu__::__always_inline__]] 9642: inline constexpr auto 9642: begin(const _Container& __cont) -> decltype(__cont.begin()) 9642: { return __cont.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__, __gnu__::__always_inline__]] 9642: inline constexpr auto 9642: end(_Container& __cont) -> decltype(__cont.end()) 9642: { return __cont.end(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__, __gnu__::__always_inline__]] 9642: inline constexpr auto 9642: end(const _Container& __cont) -> decltype(__cont.end()) 9642: { return __cont.end(); } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__, __gnu__::__always_inline__]] 9642: inline constexpr _Tp* 9642: begin(_Tp (&__arr)[_Nm]) noexcept 9642: { return __arr; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__, __gnu__::__always_inline__]] 9642: inline constexpr _Tp* 9642: end(_Tp (&__arr)[_Nm]) noexcept 9642: { return __arr + _Nm; } 9642: 9642: 9642: 9642: template class valarray; 9642: 9642: template _Tp* begin(valarray<_Tp>&) noexcept; 9642: template const _Tp* begin(const valarray<_Tp>&) noexcept; 9642: template _Tp* end(valarray<_Tp>&) noexcept; 9642: template const _Tp* end(const valarray<_Tp>&) noexcept; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__, __gnu__::__always_inline__]] 9642: constexpr auto 9642: cbegin(const _Container& __cont) noexcept(noexcept(std::begin(__cont))) 9642: -> decltype(std::begin(__cont)) 9642: { return std::begin(__cont); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__, __gnu__::__always_inline__]] 9642: constexpr auto 9642: cend(const _Container& __cont) noexcept(noexcept(std::end(__cont))) 9642: -> decltype(std::end(__cont)) 9642: { return std::end(__cont); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__, __gnu__::__always_inline__]] 9642: inline constexpr auto 9642: rbegin(_Container& __cont) -> decltype(__cont.rbegin()) 9642: { return __cont.rbegin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__, __gnu__::__always_inline__]] 9642: inline constexpr auto 9642: rbegin(const _Container& __cont) -> decltype(__cont.rbegin()) 9642: { return __cont.rbegin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__, __gnu__::__always_inline__]] 9642: inline constexpr auto 9642: rend(_Container& __cont) -> decltype(__cont.rend()) 9642: { return __cont.rend(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__, __gnu__::__always_inline__]] 9642: inline constexpr auto 9642: rend(const _Container& __cont) -> decltype(__cont.rend()) 9642: { return __cont.rend(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr reverse_iterator<_Tp*> 9642: rbegin(_Tp (&__arr)[_Nm]) noexcept 9642: { return reverse_iterator<_Tp*>(__arr + _Nm); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr reverse_iterator<_Tp*> 9642: rend(_Tp (&__arr)[_Nm]) noexcept 9642: { return reverse_iterator<_Tp*>(__arr); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr reverse_iterator 9642: rbegin(initializer_list<_Tp> __il) noexcept 9642: { return reverse_iterator(__il.end()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline constexpr reverse_iterator 9642: rend(initializer_list<_Tp> __il) noexcept 9642: { return reverse_iterator(__il.begin()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__, __gnu__::__always_inline__]] 9642: inline constexpr auto 9642: crbegin(const _Container& __cont) -> decltype(std::rbegin(__cont)) 9642: { return std::rbegin(__cont); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__, __gnu__::__always_inline__]] 9642: inline constexpr auto 9642: crend(const _Container& __cont) -> decltype(std::rend(__cont)) 9642: { return std::rend(__cont); } 9642: # 261 "/usr/include/c++/13/bits/range_access.h" 3 9642: template 9642: [[nodiscard, __gnu__::__always_inline__]] 9642: constexpr auto 9642: size(const _Container& __cont) noexcept(noexcept(__cont.size())) 9642: -> decltype(__cont.size()) 9642: { return __cont.size(); } 9642: 9642: 9642: 9642: 9642: template 9642: [[nodiscard, __gnu__::__always_inline__]] 9642: constexpr size_t 9642: size(const _Tp (&)[_Nm]) noexcept 9642: { return _Nm; } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[nodiscard, __gnu__::__always_inline__]] 9642: constexpr auto 9642: empty(const _Container& __cont) noexcept(noexcept(__cont.empty())) 9642: -> decltype(__cont.empty()) 9642: { return __cont.empty(); } 9642: 9642: 9642: 9642: 9642: template 9642: [[nodiscard, __gnu__::__always_inline__]] 9642: constexpr bool 9642: empty(const _Tp (&)[_Nm]) noexcept 9642: { return false; } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[nodiscard, __gnu__::__always_inline__]] 9642: constexpr bool 9642: empty(initializer_list<_Tp> __il) noexcept 9642: { return __il.size() == 0;} 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[nodiscard, __gnu__::__always_inline__]] 9642: constexpr auto 9642: data(_Container& __cont) noexcept(noexcept(__cont.data())) 9642: -> decltype(__cont.data()) 9642: { return __cont.data(); } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[nodiscard, __gnu__::__always_inline__]] 9642: constexpr auto 9642: data(const _Container& __cont) noexcept(noexcept(__cont.data())) 9642: -> decltype(__cont.data()) 9642: { return __cont.data(); } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[nodiscard, __gnu__::__always_inline__]] 9642: constexpr _Tp* 9642: data(_Tp (&__array)[_Nm]) noexcept 9642: { return __array; } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[nodiscard, __gnu__::__always_inline__]] 9642: constexpr const _Tp* 9642: data(initializer_list<_Tp> __il) noexcept 9642: { return __il.begin(); } 9642: # 370 "/usr/include/c++/13/bits/range_access.h" 3 9642: 9642: } 9642: # 69 "/usr/include/c++/13/deque" 2 3 9642: # 1 "/usr/include/c++/13/bits/deque.tcc" 1 3 9642: # 61 "/usr/include/c++/13/bits/deque.tcc" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: template 9642: void 9642: deque<_Tp, _Alloc>:: 9642: _M_default_initialize() 9642: { 9642: _Map_pointer __cur; 9642: try 9642: { 9642: for (__cur = this->_M_impl._M_start._M_node; 9642: __cur < this->_M_impl._M_finish._M_node; 9642: ++__cur) 9642: std::__uninitialized_default_a(*__cur, *__cur + _S_buffer_size(), 9642: _M_get_Tp_allocator()); 9642: std::__uninitialized_default_a(this->_M_impl._M_finish._M_first, 9642: this->_M_impl._M_finish._M_cur, 9642: _M_get_Tp_allocator()); 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(this->_M_impl._M_start, iterator(*__cur, __cur), 9642: _M_get_Tp_allocator()); 9642: throw; 9642: } 9642: } 9642: 9642: 9642: template 9642: deque<_Tp, _Alloc>& 9642: deque<_Tp, _Alloc>:: 9642: operator=(const deque& __x) 9642: { 9642: if (std::__addressof(__x) != this) 9642: { 9642: 9642: if (_Alloc_traits::_S_propagate_on_copy_assign()) 9642: { 9642: if (!_Alloc_traits::_S_always_equal() 9642: && _M_get_Tp_allocator() != __x._M_get_Tp_allocator()) 9642: { 9642: 9642: 9642: _M_replace_map(__x, __x.get_allocator()); 9642: std::__alloc_on_copy(_M_get_Tp_allocator(), 9642: __x._M_get_Tp_allocator()); 9642: return *this; 9642: } 9642: std::__alloc_on_copy(_M_get_Tp_allocator(), 9642: __x._M_get_Tp_allocator()); 9642: } 9642: 9642: const size_type __len = size(); 9642: if (__len >= __x.size()) 9642: _M_erase_at_end(std::copy(__x.begin(), __x.end(), 9642: this->_M_impl._M_start)); 9642: else 9642: { 9642: const_iterator __mid = __x.begin() + difference_type(__len); 9642: std::copy(__x.begin(), __mid, this->_M_impl._M_start); 9642: _M_range_insert_aux(this->_M_impl._M_finish, __mid, __x.end(), 9642: std::random_access_iterator_tag()); 9642: } 9642: } 9642: return *this; 9642: } 9642: 9642: 9642: template 9642: template 9642: 9642: typename deque<_Tp, _Alloc>::reference 9642: 9642: 9642: 9642: deque<_Tp, _Alloc>:: 9642: emplace_front(_Args&&... __args) 9642: { 9642: if (this->_M_impl._M_start._M_cur != this->_M_impl._M_start._M_first) 9642: { 9642: _Alloc_traits::construct(this->_M_impl, 9642: this->_M_impl._M_start._M_cur - 1, 9642: std::forward<_Args>(__args)...); 9642: --this->_M_impl._M_start._M_cur; 9642: } 9642: else 9642: _M_push_front_aux(std::forward<_Args>(__args)...); 9642: 9642: return front(); 9642: 9642: } 9642: 9642: template 9642: template 9642: 9642: typename deque<_Tp, _Alloc>::reference 9642: 9642: 9642: 9642: deque<_Tp, _Alloc>:: 9642: emplace_back(_Args&&... __args) 9642: { 9642: if (this->_M_impl._M_finish._M_cur 9642: != this->_M_impl._M_finish._M_last - 1) 9642: { 9642: _Alloc_traits::construct(this->_M_impl, 9642: this->_M_impl._M_finish._M_cur, 9642: std::forward<_Args>(__args)...); 9642: ++this->_M_impl._M_finish._M_cur; 9642: } 9642: else 9642: _M_push_back_aux(std::forward<_Args>(__args)...); 9642: 9642: return back(); 9642: 9642: } 9642: 9642: 9642: 9642: template 9642: template 9642: typename deque<_Tp, _Alloc>::iterator 9642: deque<_Tp, _Alloc>:: 9642: emplace(const_iterator __position, _Args&&... __args) 9642: { 9642: if (__position._M_cur == this->_M_impl._M_start._M_cur) 9642: { 9642: emplace_front(std::forward<_Args>(__args)...); 9642: return this->_M_impl._M_start; 9642: } 9642: else if (__position._M_cur == this->_M_impl._M_finish._M_cur) 9642: { 9642: emplace_back(std::forward<_Args>(__args)...); 9642: iterator __tmp = this->_M_impl._M_finish; 9642: --__tmp; 9642: return __tmp; 9642: } 9642: else 9642: return _M_insert_aux(__position._M_const_cast(), 9642: std::forward<_Args>(__args)...); 9642: } 9642: 9642: 9642: template 9642: typename deque<_Tp, _Alloc>::iterator 9642: deque<_Tp, _Alloc>:: 9642: 9642: insert(const_iterator __position, const value_type& __x) 9642: 9642: 9642: 9642: { 9642: if (__position._M_cur == this->_M_impl._M_start._M_cur) 9642: { 9642: push_front(__x); 9642: return this->_M_impl._M_start; 9642: } 9642: else if (__position._M_cur == this->_M_impl._M_finish._M_cur) 9642: { 9642: push_back(__x); 9642: iterator __tmp = this->_M_impl._M_finish; 9642: --__tmp; 9642: return __tmp; 9642: } 9642: else 9642: return _M_insert_aux(__position._M_const_cast(), __x); 9642: } 9642: 9642: template 9642: typename deque<_Tp, _Alloc>::iterator 9642: deque<_Tp, _Alloc>:: 9642: _M_erase(iterator __position) 9642: { 9642: iterator __next = __position; 9642: ++__next; 9642: const difference_type __index = __position - begin(); 9642: if (static_cast(__index) < (size() >> 1)) 9642: { 9642: if (__position != begin()) 9642: std::move_backward(begin(), __position, __next); 9642: pop_front(); 9642: } 9642: else 9642: { 9642: if (__next != end()) 9642: std::move(__next, end(), __position); 9642: pop_back(); 9642: } 9642: return begin() + __index; 9642: } 9642: 9642: template 9642: typename deque<_Tp, _Alloc>::iterator 9642: deque<_Tp, _Alloc>:: 9642: _M_erase(iterator __first, iterator __last) 9642: { 9642: if (__first == __last) 9642: return __first; 9642: else if (__first == begin() && __last == end()) 9642: { 9642: clear(); 9642: return end(); 9642: } 9642: else 9642: { 9642: const difference_type __n = __last - __first; 9642: const difference_type __elems_before = __first - begin(); 9642: if (static_cast(__elems_before) <= (size() - __n) / 2) 9642: { 9642: if (__first != begin()) 9642: std::move_backward(begin(), __first, __last); 9642: _M_erase_at_begin(begin() + __n); 9642: } 9642: else 9642: { 9642: if (__last != end()) 9642: std::move(__last, end(), __first); 9642: _M_erase_at_end(end() - __n); 9642: } 9642: return begin() + __elems_before; 9642: } 9642: } 9642: 9642: template 9642: template 9642: void 9642: deque<_Tp, _Alloc>:: 9642: _M_assign_aux(_InputIterator __first, _InputIterator __last, 9642: std::input_iterator_tag) 9642: { 9642: iterator __cur = begin(); 9642: for (; __first != __last && __cur != end(); ++__cur, (void)++__first) 9642: *__cur = *__first; 9642: if (__first == __last) 9642: _M_erase_at_end(__cur); 9642: else 9642: _M_range_insert_aux(end(), __first, __last, 9642: std::__iterator_category(__first)); 9642: } 9642: 9642: template 9642: void 9642: deque<_Tp, _Alloc>:: 9642: _M_fill_insert(iterator __pos, size_type __n, const value_type& __x) 9642: { 9642: if (__pos._M_cur == this->_M_impl._M_start._M_cur) 9642: { 9642: iterator __new_start = _M_reserve_elements_at_front(__n); 9642: try 9642: { 9642: std::__uninitialized_fill_a(__new_start, this->_M_impl._M_start, 9642: __x, _M_get_Tp_allocator()); 9642: this->_M_impl._M_start = __new_start; 9642: } 9642: catch(...) 9642: { 9642: _M_destroy_nodes(__new_start._M_node, 9642: this->_M_impl._M_start._M_node); 9642: throw; 9642: } 9642: } 9642: else if (__pos._M_cur == this->_M_impl._M_finish._M_cur) 9642: { 9642: iterator __new_finish = _M_reserve_elements_at_back(__n); 9642: try 9642: { 9642: std::__uninitialized_fill_a(this->_M_impl._M_finish, 9642: __new_finish, __x, 9642: _M_get_Tp_allocator()); 9642: this->_M_impl._M_finish = __new_finish; 9642: } 9642: catch(...) 9642: { 9642: _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1, 9642: __new_finish._M_node + 1); 9642: throw; 9642: } 9642: } 9642: else 9642: _M_insert_aux(__pos, __n, __x); 9642: } 9642: 9642: 9642: template 9642: void 9642: deque<_Tp, _Alloc>:: 9642: _M_default_append(size_type __n) 9642: { 9642: if (__n) 9642: { 9642: iterator __new_finish = _M_reserve_elements_at_back(__n); 9642: try 9642: { 9642: std::__uninitialized_default_a(this->_M_impl._M_finish, 9642: __new_finish, 9642: _M_get_Tp_allocator()); 9642: this->_M_impl._M_finish = __new_finish; 9642: } 9642: catch(...) 9642: { 9642: _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1, 9642: __new_finish._M_node + 1); 9642: throw; 9642: } 9642: } 9642: } 9642: 9642: template 9642: bool 9642: deque<_Tp, _Alloc>:: 9642: _M_shrink_to_fit() 9642: { 9642: const difference_type __front_capacity 9642: = (this->_M_impl._M_start._M_cur - this->_M_impl._M_start._M_first); 9642: if (__front_capacity == 0) 9642: return false; 9642: 9642: const difference_type __back_capacity 9642: = (this->_M_impl._M_finish._M_last - this->_M_impl._M_finish._M_cur); 9642: if (__front_capacity + __back_capacity < _S_buffer_size()) 9642: return false; 9642: 9642: return std::__shrink_to_fit_aux::_S_do_it(*this); 9642: } 9642: 9642: 9642: template 9642: void 9642: deque<_Tp, _Alloc>:: 9642: _M_fill_initialize(const value_type& __value) 9642: { 9642: _Map_pointer __cur; 9642: try 9642: { 9642: for (__cur = this->_M_impl._M_start._M_node; 9642: __cur < this->_M_impl._M_finish._M_node; 9642: ++__cur) 9642: std::__uninitialized_fill_a(*__cur, *__cur + _S_buffer_size(), 9642: __value, _M_get_Tp_allocator()); 9642: std::__uninitialized_fill_a(this->_M_impl._M_finish._M_first, 9642: this->_M_impl._M_finish._M_cur, 9642: __value, _M_get_Tp_allocator()); 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(this->_M_impl._M_start, iterator(*__cur, __cur), 9642: _M_get_Tp_allocator()); 9642: throw; 9642: } 9642: } 9642: 9642: template 9642: template 9642: void 9642: deque<_Tp, _Alloc>:: 9642: _M_range_initialize(_InputIterator __first, _InputIterator __last, 9642: std::input_iterator_tag) 9642: { 9642: this->_M_initialize_map(0); 9642: try 9642: { 9642: for (; __first != __last; ++__first) 9642: 9642: emplace_back(*__first); 9642: 9642: 9642: 9642: } 9642: catch(...) 9642: { 9642: clear(); 9642: throw; 9642: } 9642: } 9642: 9642: template 9642: template 9642: void 9642: deque<_Tp, _Alloc>:: 9642: _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last, 9642: std::forward_iterator_tag) 9642: { 9642: const size_type __n = std::distance(__first, __last); 9642: this->_M_initialize_map(_S_check_init_len(__n, _M_get_Tp_allocator())); 9642: 9642: _Map_pointer __cur_node; 9642: try 9642: { 9642: for (__cur_node = this->_M_impl._M_start._M_node; 9642: __cur_node < this->_M_impl._M_finish._M_node; 9642: ++__cur_node) 9642: { 9642: if (__n < _S_buffer_size()) 9642: __builtin_unreachable(); 9642: 9642: _ForwardIterator __mid = __first; 9642: std::advance(__mid, _S_buffer_size()); 9642: std::__uninitialized_copy_a(__first, __mid, *__cur_node, 9642: _M_get_Tp_allocator()); 9642: __first = __mid; 9642: } 9642: std::__uninitialized_copy_a(__first, __last, 9642: this->_M_impl._M_finish._M_first, 9642: _M_get_Tp_allocator()); 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(this->_M_impl._M_start, 9642: iterator(*__cur_node, __cur_node), 9642: _M_get_Tp_allocator()); 9642: throw; 9642: } 9642: } 9642: 9642: 9642: template 9642: 9642: template 9642: void 9642: deque<_Tp, _Alloc>:: 9642: _M_push_back_aux(_Args&&... __args) 9642: 9642: 9642: 9642: 9642: 9642: { 9642: if (size() == max_size()) 9642: __throw_length_error( 9642: ("cannot create std::deque larger than max_size()")); 9642: 9642: _M_reserve_map_at_back(); 9642: *(this->_M_impl._M_finish._M_node + 1) = this->_M_allocate_node(); 9642: try 9642: { 9642: 9642: _Alloc_traits::construct(this->_M_impl, 9642: this->_M_impl._M_finish._M_cur, 9642: std::forward<_Args>(__args)...); 9642: 9642: 9642: 9642: this->_M_impl._M_finish._M_set_node(this->_M_impl._M_finish._M_node 9642: + 1); 9642: this->_M_impl._M_finish._M_cur = this->_M_impl._M_finish._M_first; 9642: } 9642: catch(...) 9642: { 9642: _M_deallocate_node(*(this->_M_impl._M_finish._M_node + 1)); 9642: throw; 9642: } 9642: } 9642: 9642: 9642: template 9642: 9642: template 9642: void 9642: deque<_Tp, _Alloc>:: 9642: _M_push_front_aux(_Args&&... __args) 9642: 9642: 9642: 9642: 9642: 9642: { 9642: if (size() == max_size()) 9642: __throw_length_error( 9642: ("cannot create std::deque larger than max_size()")); 9642: 9642: _M_reserve_map_at_front(); 9642: *(this->_M_impl._M_start._M_node - 1) = this->_M_allocate_node(); 9642: try 9642: { 9642: this->_M_impl._M_start._M_set_node(this->_M_impl._M_start._M_node 9642: - 1); 9642: this->_M_impl._M_start._M_cur = this->_M_impl._M_start._M_last - 1; 9642: 9642: _Alloc_traits::construct(this->_M_impl, 9642: this->_M_impl._M_start._M_cur, 9642: std::forward<_Args>(__args)...); 9642: 9642: 9642: 9642: } 9642: catch(...) 9642: { 9642: ++this->_M_impl._M_start; 9642: _M_deallocate_node(*(this->_M_impl._M_start._M_node - 1)); 9642: throw; 9642: } 9642: } 9642: 9642: 9642: template 9642: void deque<_Tp, _Alloc>:: 9642: _M_pop_back_aux() 9642: { 9642: _M_deallocate_node(this->_M_impl._M_finish._M_first); 9642: this->_M_impl._M_finish._M_set_node(this->_M_impl._M_finish._M_node - 1); 9642: this->_M_impl._M_finish._M_cur = this->_M_impl._M_finish._M_last - 1; 9642: _Alloc_traits::destroy(_M_get_Tp_allocator(), 9642: this->_M_impl._M_finish._M_cur); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: void deque<_Tp, _Alloc>:: 9642: _M_pop_front_aux() 9642: { 9642: _Alloc_traits::destroy(_M_get_Tp_allocator(), 9642: this->_M_impl._M_start._M_cur); 9642: _M_deallocate_node(this->_M_impl._M_start._M_first); 9642: this->_M_impl._M_start._M_set_node(this->_M_impl._M_start._M_node + 1); 9642: this->_M_impl._M_start._M_cur = this->_M_impl._M_start._M_first; 9642: } 9642: 9642: template 9642: template 9642: void 9642: deque<_Tp, _Alloc>:: 9642: _M_range_insert_aux(iterator __pos, 9642: _InputIterator __first, _InputIterator __last, 9642: std::input_iterator_tag) 9642: { std::copy(__first, __last, std::inserter(*this, __pos)); } 9642: 9642: template 9642: template 9642: void 9642: deque<_Tp, _Alloc>:: 9642: _M_range_insert_aux(iterator __pos, 9642: _ForwardIterator __first, _ForwardIterator __last, 9642: std::forward_iterator_tag) 9642: { 9642: const size_type __n = std::distance(__first, __last); 9642: if (__pos._M_cur == this->_M_impl._M_start._M_cur) 9642: { 9642: iterator __new_start = _M_reserve_elements_at_front(__n); 9642: try 9642: { 9642: std::__uninitialized_copy_a(__first, __last, __new_start, 9642: _M_get_Tp_allocator()); 9642: this->_M_impl._M_start = __new_start; 9642: } 9642: catch(...) 9642: { 9642: _M_destroy_nodes(__new_start._M_node, 9642: this->_M_impl._M_start._M_node); 9642: throw; 9642: } 9642: } 9642: else if (__pos._M_cur == this->_M_impl._M_finish._M_cur) 9642: { 9642: iterator __new_finish = _M_reserve_elements_at_back(__n); 9642: try 9642: { 9642: std::__uninitialized_copy_a(__first, __last, 9642: this->_M_impl._M_finish, 9642: _M_get_Tp_allocator()); 9642: this->_M_impl._M_finish = __new_finish; 9642: } 9642: catch(...) 9642: { 9642: _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1, 9642: __new_finish._M_node + 1); 9642: throw; 9642: } 9642: } 9642: else 9642: _M_insert_aux(__pos, __first, __last, __n); 9642: } 9642: 9642: template 9642: 9642: template 9642: typename deque<_Tp, _Alloc>::iterator 9642: deque<_Tp, _Alloc>:: 9642: _M_insert_aux(iterator __pos, _Args&&... __args) 9642: { 9642: value_type __x_copy(std::forward<_Args>(__args)...); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: difference_type __index = __pos - this->_M_impl._M_start; 9642: if (static_cast(__index) < size() / 2) 9642: { 9642: push_front(std::move(front())); 9642: iterator __front1 = this->_M_impl._M_start; 9642: ++__front1; 9642: iterator __front2 = __front1; 9642: ++__front2; 9642: __pos = this->_M_impl._M_start + __index; 9642: iterator __pos1 = __pos; 9642: ++__pos1; 9642: std::move(__front2, __pos1, __front1); 9642: } 9642: else 9642: { 9642: push_back(std::move(back())); 9642: iterator __back1 = this->_M_impl._M_finish; 9642: --__back1; 9642: iterator __back2 = __back1; 9642: --__back2; 9642: __pos = this->_M_impl._M_start + __index; 9642: std::move_backward(__pos, __back2, __back1); 9642: } 9642: *__pos = std::move(__x_copy); 9642: return __pos; 9642: } 9642: 9642: template 9642: void 9642: deque<_Tp, _Alloc>:: 9642: _M_insert_aux(iterator __pos, size_type __n, const value_type& __x) 9642: { 9642: const difference_type __elems_before = __pos - this->_M_impl._M_start; 9642: const size_type __length = this->size(); 9642: value_type __x_copy = __x; 9642: if (__elems_before < difference_type(__length / 2)) 9642: { 9642: iterator __new_start = _M_reserve_elements_at_front(__n); 9642: iterator __old_start = this->_M_impl._M_start; 9642: __pos = this->_M_impl._M_start + __elems_before; 9642: try 9642: { 9642: if (__elems_before >= difference_type(__n)) 9642: { 9642: iterator __start_n = (this->_M_impl._M_start 9642: + difference_type(__n)); 9642: std::__uninitialized_move_a(this->_M_impl._M_start, 9642: __start_n, __new_start, 9642: _M_get_Tp_allocator()); 9642: this->_M_impl._M_start = __new_start; 9642: std::move(__start_n, __pos, __old_start); 9642: std::fill(__pos - difference_type(__n), __pos, __x_copy); 9642: } 9642: else 9642: { 9642: std::__uninitialized_move_fill(this->_M_impl._M_start, 9642: __pos, __new_start, 9642: this->_M_impl._M_start, 9642: __x_copy, 9642: _M_get_Tp_allocator()); 9642: this->_M_impl._M_start = __new_start; 9642: std::fill(__old_start, __pos, __x_copy); 9642: } 9642: } 9642: catch(...) 9642: { 9642: _M_destroy_nodes(__new_start._M_node, 9642: this->_M_impl._M_start._M_node); 9642: throw; 9642: } 9642: } 9642: else 9642: { 9642: iterator __new_finish = _M_reserve_elements_at_back(__n); 9642: iterator __old_finish = this->_M_impl._M_finish; 9642: const difference_type __elems_after = 9642: difference_type(__length) - __elems_before; 9642: __pos = this->_M_impl._M_finish - __elems_after; 9642: try 9642: { 9642: if (__elems_after > difference_type(__n)) 9642: { 9642: iterator __finish_n = (this->_M_impl._M_finish 9642: - difference_type(__n)); 9642: std::__uninitialized_move_a(__finish_n, 9642: this->_M_impl._M_finish, 9642: this->_M_impl._M_finish, 9642: _M_get_Tp_allocator()); 9642: this->_M_impl._M_finish = __new_finish; 9642: std::move_backward(__pos, __finish_n, __old_finish); 9642: std::fill(__pos, __pos + difference_type(__n), __x_copy); 9642: } 9642: else 9642: { 9642: std::__uninitialized_fill_move(this->_M_impl._M_finish, 9642: __pos + difference_type(__n), 9642: __x_copy, __pos, 9642: this->_M_impl._M_finish, 9642: _M_get_Tp_allocator()); 9642: this->_M_impl._M_finish = __new_finish; 9642: std::fill(__pos, __old_finish, __x_copy); 9642: } 9642: } 9642: catch(...) 9642: { 9642: _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1, 9642: __new_finish._M_node + 1); 9642: throw; 9642: } 9642: } 9642: } 9642: 9642: template 9642: template 9642: void 9642: deque<_Tp, _Alloc>:: 9642: _M_insert_aux(iterator __pos, 9642: _ForwardIterator __first, _ForwardIterator __last, 9642: size_type __n) 9642: { 9642: const difference_type __elemsbefore = __pos - this->_M_impl._M_start; 9642: const size_type __length = size(); 9642: if (static_cast(__elemsbefore) < __length / 2) 9642: { 9642: iterator __new_start = _M_reserve_elements_at_front(__n); 9642: iterator __old_start = this->_M_impl._M_start; 9642: __pos = this->_M_impl._M_start + __elemsbefore; 9642: try 9642: { 9642: if (__elemsbefore >= difference_type(__n)) 9642: { 9642: iterator __start_n = (this->_M_impl._M_start 9642: + difference_type(__n)); 9642: std::__uninitialized_move_a(this->_M_impl._M_start, 9642: __start_n, __new_start, 9642: _M_get_Tp_allocator()); 9642: this->_M_impl._M_start = __new_start; 9642: std::move(__start_n, __pos, __old_start); 9642: std::copy(__first, __last, __pos - difference_type(__n)); 9642: } 9642: else 9642: { 9642: _ForwardIterator __mid = __first; 9642: std::advance(__mid, difference_type(__n) - __elemsbefore); 9642: std::__uninitialized_move_copy(this->_M_impl._M_start, 9642: __pos, __first, __mid, 9642: __new_start, 9642: _M_get_Tp_allocator()); 9642: this->_M_impl._M_start = __new_start; 9642: std::copy(__mid, __last, __old_start); 9642: } 9642: } 9642: catch(...) 9642: { 9642: _M_destroy_nodes(__new_start._M_node, 9642: this->_M_impl._M_start._M_node); 9642: throw; 9642: } 9642: } 9642: else 9642: { 9642: iterator __new_finish = _M_reserve_elements_at_back(__n); 9642: iterator __old_finish = this->_M_impl._M_finish; 9642: const difference_type __elemsafter = 9642: difference_type(__length) - __elemsbefore; 9642: __pos = this->_M_impl._M_finish - __elemsafter; 9642: try 9642: { 9642: if (__elemsafter > difference_type(__n)) 9642: { 9642: iterator __finish_n = (this->_M_impl._M_finish 9642: - difference_type(__n)); 9642: std::__uninitialized_move_a(__finish_n, 9642: this->_M_impl._M_finish, 9642: this->_M_impl._M_finish, 9642: _M_get_Tp_allocator()); 9642: this->_M_impl._M_finish = __new_finish; 9642: std::move_backward(__pos, __finish_n, __old_finish); 9642: std::copy(__first, __last, __pos); 9642: } 9642: else 9642: { 9642: _ForwardIterator __mid = __first; 9642: std::advance(__mid, __elemsafter); 9642: std::__uninitialized_copy_move(__mid, __last, __pos, 9642: this->_M_impl._M_finish, 9642: this->_M_impl._M_finish, 9642: _M_get_Tp_allocator()); 9642: this->_M_impl._M_finish = __new_finish; 9642: std::copy(__first, __mid, __pos); 9642: } 9642: } 9642: catch(...) 9642: { 9642: _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1, 9642: __new_finish._M_node + 1); 9642: throw; 9642: } 9642: } 9642: } 9642: 9642: template 9642: void 9642: deque<_Tp, _Alloc>:: 9642: _M_destroy_data_aux(iterator __first, iterator __last) 9642: { 9642: for (_Map_pointer __node = __first._M_node + 1; 9642: __node < __last._M_node; ++__node) 9642: std::_Destroy(*__node, *__node + _S_buffer_size(), 9642: _M_get_Tp_allocator()); 9642: 9642: if (__first._M_node != __last._M_node) 9642: { 9642: std::_Destroy(__first._M_cur, __first._M_last, 9642: _M_get_Tp_allocator()); 9642: std::_Destroy(__last._M_first, __last._M_cur, 9642: _M_get_Tp_allocator()); 9642: } 9642: else 9642: std::_Destroy(__first._M_cur, __last._M_cur, 9642: _M_get_Tp_allocator()); 9642: } 9642: 9642: template 9642: void 9642: deque<_Tp, _Alloc>:: 9642: _M_new_elements_at_front(size_type __new_elems) 9642: { 9642: if (this->max_size() - this->size() < __new_elems) 9642: __throw_length_error(("deque::_M_new_elements_at_front")); 9642: 9642: const size_type __new_nodes = ((__new_elems + _S_buffer_size() - 1) 9642: / _S_buffer_size()); 9642: _M_reserve_map_at_front(__new_nodes); 9642: size_type __i; 9642: try 9642: { 9642: for (__i = 1; __i <= __new_nodes; ++__i) 9642: *(this->_M_impl._M_start._M_node - __i) = this->_M_allocate_node(); 9642: } 9642: catch(...) 9642: { 9642: for (size_type __j = 1; __j < __i; ++__j) 9642: _M_deallocate_node(*(this->_M_impl._M_start._M_node - __j)); 9642: throw; 9642: } 9642: } 9642: 9642: template 9642: void 9642: deque<_Tp, _Alloc>:: 9642: _M_new_elements_at_back(size_type __new_elems) 9642: { 9642: if (this->max_size() - this->size() < __new_elems) 9642: __throw_length_error(("deque::_M_new_elements_at_back")); 9642: 9642: const size_type __new_nodes = ((__new_elems + _S_buffer_size() - 1) 9642: / _S_buffer_size()); 9642: _M_reserve_map_at_back(__new_nodes); 9642: size_type __i; 9642: try 9642: { 9642: for (__i = 1; __i <= __new_nodes; ++__i) 9642: *(this->_M_impl._M_finish._M_node + __i) = this->_M_allocate_node(); 9642: } 9642: catch(...) 9642: { 9642: for (size_type __j = 1; __j < __i; ++__j) 9642: _M_deallocate_node(*(this->_M_impl._M_finish._M_node + __j)); 9642: throw; 9642: } 9642: } 9642: 9642: template 9642: void 9642: deque<_Tp, _Alloc>:: 9642: _M_reallocate_map(size_type __nodes_to_add, bool __add_at_front) 9642: { 9642: const size_type __old_num_nodes 9642: = this->_M_impl._M_finish._M_node - this->_M_impl._M_start._M_node + 1; 9642: const size_type __new_num_nodes = __old_num_nodes + __nodes_to_add; 9642: 9642: _Map_pointer __new_nstart; 9642: if (this->_M_impl._M_map_size > 2 * __new_num_nodes) 9642: { 9642: __new_nstart = this->_M_impl._M_map + (this->_M_impl._M_map_size 9642: - __new_num_nodes) / 2 9642: + (__add_at_front ? __nodes_to_add : 0); 9642: if (__new_nstart < this->_M_impl._M_start._M_node) 9642: std::copy(this->_M_impl._M_start._M_node, 9642: this->_M_impl._M_finish._M_node + 1, 9642: __new_nstart); 9642: else 9642: std::copy_backward(this->_M_impl._M_start._M_node, 9642: this->_M_impl._M_finish._M_node + 1, 9642: __new_nstart + __old_num_nodes); 9642: } 9642: else 9642: { 9642: size_type __new_map_size = this->_M_impl._M_map_size 9642: + std::max(this->_M_impl._M_map_size, 9642: __nodes_to_add) + 2; 9642: 9642: _Map_pointer __new_map = this->_M_allocate_map(__new_map_size); 9642: __new_nstart = __new_map + (__new_map_size - __new_num_nodes) / 2 9642: + (__add_at_front ? __nodes_to_add : 0); 9642: std::copy(this->_M_impl._M_start._M_node, 9642: this->_M_impl._M_finish._M_node + 1, 9642: __new_nstart); 9642: _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size); 9642: 9642: this->_M_impl._M_map = __new_map; 9642: this->_M_impl._M_map_size = __new_map_size; 9642: } 9642: 9642: this->_M_impl._M_start._M_set_node(__new_nstart); 9642: this->_M_impl._M_finish._M_set_node(__new_nstart + __old_num_nodes - 1); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: void 9642: __fill_a1(const std::_Deque_iterator<_Tp, _Tp&, _Tp*>& __first, 9642: const std::_Deque_iterator<_Tp, _Tp&, _Tp*>& __last, 9642: const _VTp& __value) 9642: { 9642: typedef std::_Deque_iterator<_Tp, _Tp&, _Tp*> _Iter; 9642: if (__first._M_node != __last._M_node) 9642: { 9642: std::__fill_a1(__first._M_cur, __first._M_last, __value); 9642: 9642: for (typename _Iter::_Map_pointer __node = __first._M_node + 1; 9642: __node < __last._M_node; ++__node) 9642: std::__fill_a1(*__node, *__node + _Iter::_S_buffer_size(), __value); 9642: 9642: std::__fill_a1(__last._M_first, __last._M_cur, __value); 9642: } 9642: else 9642: std::__fill_a1(__first._M_cur, __last._M_cur, __value); 9642: } 9642: 9642: template 9642: _OI 9642: __copy_move_dit(std::_Deque_iterator<_Tp, _Ref, _Ptr> __first, 9642: std::_Deque_iterator<_Tp, _Ref, _Ptr> __last, 9642: _OI __result) 9642: { 9642: typedef std::_Deque_iterator<_Tp, _Ref, _Ptr> _Iter; 9642: if (__first._M_node != __last._M_node) 9642: { 9642: __result 9642: = std::__copy_move_a1<_IsMove>(__first._M_cur, __first._M_last, 9642: __result); 9642: 9642: for (typename _Iter::_Map_pointer __node = __first._M_node + 1; 9642: __node != __last._M_node; ++__node) 9642: __result 9642: = std::__copy_move_a1<_IsMove>(*__node, 9642: *__node + _Iter::_S_buffer_size(), 9642: __result); 9642: 9642: return std::__copy_move_a1<_IsMove>(__last._M_first, __last._M_cur, 9642: __result); 9642: } 9642: 9642: return std::__copy_move_a1<_IsMove>(__first._M_cur, __last._M_cur, 9642: __result); 9642: } 9642: 9642: template 9642: _OI 9642: __copy_move_a1(std::_Deque_iterator<_Tp, _Ref, _Ptr> __first, 9642: std::_Deque_iterator<_Tp, _Ref, _Ptr> __last, 9642: _OI __result) 9642: { return __copy_move_dit<_IsMove>(__first, __last, __result); } 9642: 9642: template 9642: std::_Deque_iterator<_OTp, _OTp&, _OTp*> 9642: __copy_move_a1(std::_Deque_iterator<_ITp, _IRef, _IPtr> __first, 9642: std::_Deque_iterator<_ITp, _IRef, _IPtr> __last, 9642: std::_Deque_iterator<_OTp, _OTp&, _OTp*> __result) 9642: { return __copy_move_dit<_IsMove>(__first, __last, __result); } 9642: 9642: template 9642: typename __gnu_cxx::__enable_if< 9642: __is_random_access_iter<_II>::__value, 9642: std::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type 9642: __copy_move_a1(_II __first, _II __last, 9642: std::_Deque_iterator<_Tp, _Tp&, _Tp*> __result) 9642: { 9642: typedef std::_Deque_iterator<_Tp, _Tp&, _Tp*> _Iter; 9642: typedef typename _Iter::difference_type difference_type; 9642: 9642: difference_type __len = __last - __first; 9642: while (__len > 0) 9642: { 9642: const difference_type __clen 9642: = std::min(__len, __result._M_last - __result._M_cur); 9642: std::__copy_move_a1<_IsMove>(__first, __first + __clen, 9642: __result._M_cur); 9642: 9642: __first += __clen; 9642: __result += __clen; 9642: __len -= __clen; 9642: } 9642: 9642: return __result; 9642: } 9642: 9642: template 9642: typename __gnu_cxx::__enable_if< 9642: __is_char<_CharT>::__value, 9642: std::_Deque_iterator<_CharT, _CharT&, _CharT*> >::__type 9642: __copy_move_a2( 9642: istreambuf_iterator<_CharT, char_traits<_CharT> > __first, 9642: istreambuf_iterator<_CharT, char_traits<_CharT> > __last, 9642: std::_Deque_iterator<_CharT, _CharT&, _CharT*> __result) 9642: { 9642: if (__first == __last) 9642: return __result; 9642: 9642: for (;;) 9642: { 9642: const std::ptrdiff_t __len = __result._M_last - __result._M_cur; 9642: const std::ptrdiff_t __nb 9642: = std::__copy_n_a(__first, __len, __result._M_cur, false) 9642: - __result._M_cur; 9642: __result += __nb; 9642: 9642: if (__nb != __len) 9642: break; 9642: } 9642: 9642: return __result; 9642: } 9642: 9642: template 9642: typename __gnu_cxx::__enable_if< 9642: __is_char<_CharT>::__value, 9642: std::_Deque_iterator<_CharT, _CharT&, _CharT*> >::__type 9642: __copy_n_a( 9642: istreambuf_iterator<_CharT, char_traits<_CharT> > __it, _Size __size, 9642: std::_Deque_iterator<_CharT, _CharT&, _CharT*> __result, 9642: bool __strict) 9642: { 9642: if (__size == 0) 9642: return __result; 9642: 9642: do 9642: { 9642: const _Size __len 9642: = std::min<_Size>(__result._M_last - __result._M_cur, __size); 9642: std::__copy_n_a(__it, __len, __result._M_cur, __strict); 9642: __result += __len; 9642: __size -= __len; 9642: } 9642: while (__size != 0); 9642: return __result; 9642: } 9642: 9642: template 9642: _OI 9642: __copy_move_backward_dit( 9642: std::_Deque_iterator<_Tp, _Ref, _Ptr> __first, 9642: std::_Deque_iterator<_Tp, _Ref, _Ptr> __last, 9642: _OI __result) 9642: { 9642: typedef std::_Deque_iterator<_Tp, _Ref, _Ptr> _Iter; 9642: if (__first._M_node != __last._M_node) 9642: { 9642: __result = std::__copy_move_backward_a1<_IsMove>( 9642: __last._M_first, __last._M_cur, __result); 9642: 9642: for (typename _Iter::_Map_pointer __node = __last._M_node - 1; 9642: __node != __first._M_node; --__node) 9642: __result = std::__copy_move_backward_a1<_IsMove>( 9642: *__node, *__node + _Iter::_S_buffer_size(), __result); 9642: 9642: return std::__copy_move_backward_a1<_IsMove>( 9642: __first._M_cur, __first._M_last, __result); 9642: } 9642: 9642: return std::__copy_move_backward_a1<_IsMove>( 9642: __first._M_cur, __last._M_cur, __result); 9642: } 9642: 9642: template 9642: _OI 9642: __copy_move_backward_a1( 9642: std::_Deque_iterator<_Tp, _Ref, _Ptr> __first, 9642: std::_Deque_iterator<_Tp, _Ref, _Ptr> __last, 9642: _OI __result) 9642: { return __copy_move_backward_dit<_IsMove>(__first, __last, __result); } 9642: 9642: template 9642: std::_Deque_iterator<_OTp, _OTp&, _OTp*> 9642: __copy_move_backward_a1( 9642: std::_Deque_iterator<_ITp, _IRef, _IPtr> __first, 9642: std::_Deque_iterator<_ITp, _IRef, _IPtr> __last, 9642: std::_Deque_iterator<_OTp, _OTp&, _OTp*> __result) 9642: { return __copy_move_backward_dit<_IsMove>(__first, __last, __result); } 9642: 9642: template 9642: typename __gnu_cxx::__enable_if< 9642: __is_random_access_iter<_II>::__value, 9642: std::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type 9642: __copy_move_backward_a1(_II __first, _II __last, 9642: std::_Deque_iterator<_Tp, _Tp&, _Tp*> __result) 9642: { 9642: typedef std::_Deque_iterator<_Tp, _Tp&, _Tp*> _Iter; 9642: typedef typename _Iter::difference_type difference_type; 9642: 9642: difference_type __len = __last - __first; 9642: while (__len > 0) 9642: { 9642: difference_type __rlen = __result._M_cur - __result._M_first; 9642: _Tp* __rend = __result._M_cur; 9642: if (!__rlen) 9642: { 9642: __rlen = _Iter::_S_buffer_size(); 9642: __rend = *(__result._M_node - 1) + __rlen; 9642: } 9642: 9642: const difference_type __clen = std::min(__len, __rlen); 9642: std::__copy_move_backward_a1<_IsMove>(__last - __clen, __last, __rend); 9642: 9642: __last -= __clen; 9642: __result -= __clen; 9642: __len -= __clen; 9642: } 9642: 9642: return __result; 9642: } 9642: 9642: template 9642: bool 9642: __equal_dit( 9642: const std::_Deque_iterator<_Tp, _Ref, _Ptr>& __first1, 9642: const std::_Deque_iterator<_Tp, _Ref, _Ptr>& __last1, 9642: _II __first2) 9642: { 9642: typedef std::_Deque_iterator<_Tp, _Ref, _Ptr> _Iter; 9642: if (__first1._M_node != __last1._M_node) 9642: { 9642: if (!std::__equal_aux1(__first1._M_cur, __first1._M_last, __first2)) 9642: return false; 9642: 9642: __first2 += __first1._M_last - __first1._M_cur; 9642: for (typename _Iter::_Map_pointer __node = __first1._M_node + 1; 9642: __node != __last1._M_node; 9642: __first2 += _Iter::_S_buffer_size(), ++__node) 9642: if (!std::__equal_aux1(*__node, *__node + _Iter::_S_buffer_size(), 9642: __first2)) 9642: return false; 9642: 9642: return std::__equal_aux1(__last1._M_first, __last1._M_cur, __first2); 9642: } 9642: 9642: return std::__equal_aux1(__first1._M_cur, __last1._M_cur, __first2); 9642: } 9642: 9642: template 9642: typename __gnu_cxx::__enable_if< 9642: __is_random_access_iter<_II>::__value, bool>::__type 9642: __equal_aux1(std::_Deque_iterator<_Tp, _Ref, _Ptr> __first1, 9642: std::_Deque_iterator<_Tp, _Ref, _Ptr> __last1, 9642: _II __first2) 9642: { return std::__equal_dit(__first1, __last1, __first2); } 9642: 9642: template 9642: bool 9642: __equal_aux1(std::_Deque_iterator<_Tp1, _Ref1, _Ptr1> __first1, 9642: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1> __last1, 9642: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2> __first2) 9642: { return std::__equal_dit(__first1, __last1, __first2); } 9642: 9642: template 9642: typename __gnu_cxx::__enable_if< 9642: __is_random_access_iter<_II>::__value, bool>::__type 9642: __equal_aux1(_II __first1, _II __last1, 9642: std::_Deque_iterator<_Tp, _Ref, _Ptr> __first2) 9642: { 9642: typedef std::_Deque_iterator<_Tp, _Ref, _Ptr> _Iter; 9642: typedef typename _Iter::difference_type difference_type; 9642: 9642: difference_type __len = __last1 - __first1; 9642: while (__len > 0) 9642: { 9642: const difference_type __clen 9642: = std::min(__len, __first2._M_last - __first2._M_cur); 9642: if (!std::__equal_aux1(__first1, __first1 + __clen, __first2._M_cur)) 9642: return false; 9642: 9642: __first1 += __clen; 9642: __len -= __clen; 9642: __first2 += __clen; 9642: } 9642: 9642: return true; 9642: } 9642: 9642: template 9642: int 9642: __lex_cmp_dit( 9642: std::_Deque_iterator<_Tp1, _Ref, _Ptr> __first1, 9642: std::_Deque_iterator<_Tp1, _Ref, _Ptr> __last1, 9642: const _Tp2* __first2, const _Tp2* __last2) 9642: { 9642: const bool __simple = 9642: (__is_memcmp_ordered_with<_Tp1, _Tp2>::__value 9642: && __is_pointer<_Ptr>::__value 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ); 9642: typedef std::__lexicographical_compare<__simple> _Lc; 9642: 9642: while (__first1._M_node != __last1._M_node) 9642: { 9642: const ptrdiff_t __len1 = __first1._M_last - __first1._M_cur; 9642: const ptrdiff_t __len2 = __last2 - __first2; 9642: const ptrdiff_t __len = std::min(__len1, __len2); 9642: 9642: if (int __ret = _Lc::__3way(__first1._M_cur, __first1._M_last, 9642: __first2, __first2 + __len)) 9642: return __ret; 9642: 9642: __first1 += __len; 9642: __first2 += __len; 9642: } 9642: return _Lc::__3way(__first1._M_cur, __last1._M_cur, 9642: __first2, __last2); 9642: } 9642: 9642: template 9642: inline bool 9642: __lexicographical_compare_aux1( 9642: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1> __first1, 9642: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1> __last1, 9642: _Tp2* __first2, _Tp2* __last2) 9642: { return std::__lex_cmp_dit(__first1, __last1, __first2, __last2) < 0; } 9642: 9642: template 9642: inline bool 9642: __lexicographical_compare_aux1(_Tp1* __first1, _Tp1* __last1, 9642: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2> __first2, 9642: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2> __last2) 9642: { return std::__lex_cmp_dit(__first2, __last2, __first1, __last1) > 0; } 9642: 9642: template 9642: inline bool 9642: __lexicographical_compare_aux1( 9642: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1> __first1, 9642: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1> __last1, 9642: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2> __first2, 9642: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2> __last2) 9642: { 9642: const bool __simple = 9642: (__is_memcmp_ordered_with<_Tp1, _Tp2>::__value 9642: && __is_pointer<_Ptr1>::__value 9642: && __is_pointer<_Ptr2>::__value 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ); 9642: typedef std::__lexicographical_compare<__simple> _Lc; 9642: 9642: while (__first1 != __last1) 9642: { 9642: const ptrdiff_t __len2 = __first2._M_node == __last2._M_node 9642: ? __last2._M_cur - __first2._M_cur 9642: : __first2._M_last - __first2._M_cur; 9642: if (__len2 == 0) 9642: return false; 9642: const ptrdiff_t __len1 = __first1._M_node == __last1._M_node 9642: ? __last1._M_cur - __first1._M_cur 9642: : __first1._M_last - __first1._M_cur; 9642: const ptrdiff_t __len = std::min(__len1, __len2); 9642: if (int __ret = _Lc::__3way(__first1._M_cur, __first1._M_cur + __len, 9642: __first2._M_cur, __first2._M_cur + __len)) 9642: return __ret < 0; 9642: 9642: __first1 += __len; 9642: __first2 += __len; 9642: } 9642: 9642: return __last2 != __first2; 9642: } 9642: 9642: 9642: } 9642: # 70 "/usr/include/c++/13/deque" 2 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/memory_resource.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/memory_resource.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/memory_resource.h" 3 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/cstddef" 1 3 9642: # 42 "/usr/include/c++/13/cstddef" 3 9642: 9642: # 43 "/usr/include/c++/13/cstddef" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 145 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 3 4 9642: typedef int ptrdiff_t; 9642: # 214 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 3 4 9642: typedef unsigned int size_t; 9642: # 425 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 3 4 9642: typedef struct { 9642: long long __max_align_ll __attribute__((__aligned__(__alignof__(long long)))); 9642: long double __max_align_ld __attribute__((__aligned__(__alignof__(long double)))); 9642: # 436 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 3 4 9642: } max_align_t; 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef decltype(nullptr) nullptr_t; 9642: # 51 "/usr/include/c++/13/cstddef" 2 3 9642: 9642: extern "C++" 9642: { 9642: 9642: namespace std 9642: { 9642: 9642: using ::max_align_t; 9642: } 9642: 9642: 9642: 9642: namespace std 9642: { 9642: 9642: 9642: 9642: 9642: enum class byte : unsigned char {}; 9642: 9642: template struct __byte_operand { }; 9642: template<> struct __byte_operand { using __type = byte; }; 9642: template<> struct __byte_operand { using __type = byte; }; 9642: template<> struct __byte_operand { using __type = byte; }; 9642: template<> struct __byte_operand { using __type = byte; }; 9642: template<> struct __byte_operand { using __type = byte; }; 9642: 9642: 9642: 9642: template<> struct __byte_operand { using __type = byte; }; 9642: template<> struct __byte_operand { using __type = byte; }; 9642: template<> struct __byte_operand { using __type = byte; }; 9642: template<> struct __byte_operand { using __type = byte; }; 9642: template<> struct __byte_operand { using __type = byte; }; 9642: template<> struct __byte_operand { using __type = byte; }; 9642: template<> struct __byte_operand { using __type = byte; }; 9642: template<> struct __byte_operand { using __type = byte; }; 9642: template<> struct __byte_operand { using __type = byte; }; 9642: template<> struct __byte_operand { using __type = byte; }; 9642: # 108 "/usr/include/c++/13/cstddef" 3 9642: template 9642: struct __byte_operand 9642: : __byte_operand<_IntegerType> { }; 9642: template 9642: struct __byte_operand 9642: : __byte_operand<_IntegerType> { }; 9642: template 9642: struct __byte_operand 9642: : __byte_operand<_IntegerType> { }; 9642: 9642: template 9642: using __byte_op_t = typename __byte_operand<_IntegerType>::__type; 9642: 9642: template 9642: [[__gnu__::__always_inline__]] 9642: constexpr __byte_op_t<_IntegerType> 9642: operator<<(byte __b, _IntegerType __shift) noexcept 9642: { return (byte)(unsigned char)((unsigned)__b << __shift); } 9642: 9642: template 9642: [[__gnu__::__always_inline__]] 9642: constexpr __byte_op_t<_IntegerType> 9642: operator>>(byte __b, _IntegerType __shift) noexcept 9642: { return (byte)(unsigned char)((unsigned)__b >> __shift); } 9642: 9642: [[__gnu__::__always_inline__]] 9642: constexpr byte 9642: operator|(byte __l, byte __r) noexcept 9642: { return (byte)(unsigned char)((unsigned)__l | (unsigned)__r); } 9642: 9642: [[__gnu__::__always_inline__]] 9642: constexpr byte 9642: operator&(byte __l, byte __r) noexcept 9642: { return (byte)(unsigned char)((unsigned)__l & (unsigned)__r); } 9642: 9642: [[__gnu__::__always_inline__]] 9642: constexpr byte 9642: operator^(byte __l, byte __r) noexcept 9642: { return (byte)(unsigned char)((unsigned)__l ^ (unsigned)__r); } 9642: 9642: [[__gnu__::__always_inline__]] 9642: constexpr byte 9642: operator~(byte __b) noexcept 9642: { return (byte)(unsigned char)~(unsigned)__b; } 9642: 9642: template 9642: [[__gnu__::__always_inline__]] 9642: constexpr __byte_op_t<_IntegerType>& 9642: operator<<=(byte& __b, _IntegerType __shift) noexcept 9642: { return __b = __b << __shift; } 9642: 9642: template 9642: [[__gnu__::__always_inline__]] 9642: constexpr __byte_op_t<_IntegerType>& 9642: operator>>=(byte& __b, _IntegerType __shift) noexcept 9642: { return __b = __b >> __shift; } 9642: 9642: [[__gnu__::__always_inline__]] 9642: constexpr byte& 9642: operator|=(byte& __l, byte __r) noexcept 9642: { return __l = __l | __r; } 9642: 9642: [[__gnu__::__always_inline__]] 9642: constexpr byte& 9642: operator&=(byte& __l, byte __r) noexcept 9642: { return __l = __l & __r; } 9642: 9642: [[__gnu__::__always_inline__]] 9642: constexpr byte& 9642: operator^=(byte& __l, byte __r) noexcept 9642: { return __l = __l ^ __r; } 9642: 9642: template 9642: [[nodiscard,__gnu__::__always_inline__]] 9642: constexpr _IntegerType 9642: to_integer(__byte_op_t<_IntegerType> __b) noexcept 9642: { return _IntegerType(__b); } 9642: 9642: 9642: } 9642: 9642: } 9642: # 39 "/usr/include/c++/13/bits/memory_resource.h" 2 3 9642: 9642: # 1 "/usr/include/c++/13/bits/uses_allocator.h" 1 3 9642: # 40 "/usr/include/c++/13/bits/uses_allocator.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: struct __erased_type { }; 9642: 9642: 9642: 9642: 9642: template 9642: using __is_erased_or_convertible 9642: = __or_, is_same<_Tp, __erased_type>>; 9642: 9642: 9642: struct allocator_arg_t { explicit allocator_arg_t() = default; }; 9642: 9642: inline constexpr allocator_arg_t allocator_arg = 9642: allocator_arg_t(); 9642: 9642: template> 9642: struct __uses_allocator_helper 9642: : false_type { }; 9642: 9642: template 9642: struct __uses_allocator_helper<_Tp, _Alloc, 9642: __void_t> 9642: : __is_erased_or_convertible<_Alloc, typename _Tp::allocator_type>::type 9642: { }; 9642: 9642: 9642: template 9642: struct uses_allocator 9642: : __uses_allocator_helper<_Tp, _Alloc>::type 9642: { }; 9642: 9642: struct __uses_alloc_base { }; 9642: 9642: struct __uses_alloc0 : __uses_alloc_base 9642: { 9642: struct _Sink { void operator=(const void*) { } } _M_a; 9642: }; 9642: 9642: template 9642: struct __uses_alloc1 : __uses_alloc_base { const _Alloc* _M_a; }; 9642: 9642: template 9642: struct __uses_alloc2 : __uses_alloc_base { const _Alloc* _M_a; }; 9642: 9642: template 9642: struct __uses_alloc; 9642: 9642: template 9642: struct __uses_alloc 9642: : __conditional_t< 9642: is_constructible<_Tp, allocator_arg_t, const _Alloc&, _Args...>::value, 9642: __uses_alloc1<_Alloc>, 9642: __uses_alloc2<_Alloc>> 9642: { 9642: 9642: 9642: static_assert(__or_< 9642: is_constructible<_Tp, allocator_arg_t, const _Alloc&, _Args...>, 9642: is_constructible<_Tp, _Args..., const _Alloc&>>::value, 9642: "construction with an allocator must be possible" 9642: " if uses_allocator is true"); 9642: }; 9642: 9642: template 9642: struct __uses_alloc 9642: : __uses_alloc0 { }; 9642: 9642: template 9642: using __uses_alloc_t = 9642: __uses_alloc::value, _Tp, _Alloc, _Args...>; 9642: 9642: template 9642: 9642: inline __uses_alloc_t<_Tp, _Alloc, _Args...> 9642: __use_alloc(const _Alloc& __a) 9642: { 9642: __uses_alloc_t<_Tp, _Alloc, _Args...> __ret; 9642: __ret._M_a = std::__addressof(__a); 9642: return __ret; 9642: } 9642: 9642: template 9642: void 9642: __use_alloc(const _Alloc&&) = delete; 9642: 9642: 9642: template 9642: inline constexpr bool uses_allocator_v = 9642: uses_allocator<_Tp, _Alloc>::value; 9642: 9642: 9642: template class _Predicate, 9642: typename _Tp, typename _Alloc, typename... _Args> 9642: struct __is_uses_allocator_predicate 9642: : __conditional_t::value, 9642: __or_<_Predicate<_Tp, allocator_arg_t, _Alloc, _Args...>, 9642: _Predicate<_Tp, _Args..., _Alloc>>, 9642: _Predicate<_Tp, _Args...>> { }; 9642: 9642: template 9642: struct __is_uses_allocator_constructible 9642: : __is_uses_allocator_predicate 9642: { }; 9642: 9642: 9642: template 9642: inline constexpr bool __is_uses_allocator_constructible_v = 9642: __is_uses_allocator_constructible<_Tp, _Alloc, _Args...>::value; 9642: 9642: 9642: template 9642: struct __is_nothrow_uses_allocator_constructible 9642: : __is_uses_allocator_predicate 9642: { }; 9642: 9642: 9642: 9642: template 9642: inline constexpr bool 9642: __is_nothrow_uses_allocator_constructible_v = 9642: __is_nothrow_uses_allocator_constructible<_Tp, _Alloc, _Args...>::value; 9642: 9642: 9642: template 9642: void __uses_allocator_construct_impl(__uses_alloc0, _Tp* __ptr, 9642: _Args&&... __args) 9642: { ::new ((void*)__ptr) _Tp(std::forward<_Args>(__args)...); } 9642: 9642: template 9642: void __uses_allocator_construct_impl(__uses_alloc1<_Alloc> __a, _Tp* __ptr, 9642: _Args&&... __args) 9642: { 9642: ::new ((void*)__ptr) _Tp(allocator_arg, *__a._M_a, 9642: std::forward<_Args>(__args)...); 9642: } 9642: 9642: template 9642: void __uses_allocator_construct_impl(__uses_alloc2<_Alloc> __a, _Tp* __ptr, 9642: _Args&&... __args) 9642: { ::new ((void*)__ptr) _Tp(std::forward<_Args>(__args)..., *__a._M_a); } 9642: 9642: template 9642: void __uses_allocator_construct(const _Alloc& __a, _Tp* __ptr, 9642: _Args&&... __args) 9642: { 9642: std::__uses_allocator_construct_impl( 9642: std::__use_alloc<_Tp, _Alloc, _Args...>(__a), __ptr, 9642: std::forward<_Args>(__args)...); 9642: } 9642: 9642: 9642: 9642: } 9642: # 41 "/usr/include/c++/13/bits/memory_resource.h" 2 3 9642: # 1 "/usr/include/c++/13/bits/uses_allocator_args.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/uses_allocator_args.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/uses_allocator_args.h" 3 9642: # 42 "/usr/include/c++/13/bits/memory_resource.h" 2 3 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/tuple" 1 3 9642: # 32 "/usr/include/c++/13/tuple" 3 9642: 9642: # 33 "/usr/include/c++/13/tuple" 3 9642: # 48 "/usr/include/c++/13/tuple" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: class tuple; 9642: 9642: template 9642: struct __is_empty_non_tuple : is_empty<_Tp> { }; 9642: 9642: 9642: template 9642: struct __is_empty_non_tuple> : false_type { }; 9642: 9642: 9642: template 9642: using __empty_not_final 9642: = __conditional_t<__is_final(_Tp), false_type, 9642: __is_empty_non_tuple<_Tp>>; 9642: 9642: template::value> 9642: struct _Head_base; 9642: 9642: 9642: template 9642: struct _Head_base<_Idx, _Head, true> 9642: { 9642: constexpr _Head_base() 9642: : _M_head_impl() { } 9642: 9642: constexpr _Head_base(const _Head& __h) 9642: : _M_head_impl(__h) { } 9642: 9642: constexpr _Head_base(const _Head_base&) = default; 9642: constexpr _Head_base(_Head_base&&) = default; 9642: 9642: template 9642: constexpr _Head_base(_UHead&& __h) 9642: : _M_head_impl(std::forward<_UHead>(__h)) { } 9642: 9642: 9642: _Head_base(allocator_arg_t, __uses_alloc0) 9642: : _M_head_impl() { } 9642: 9642: template 9642: 9642: _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a) 9642: : _M_head_impl(allocator_arg, *__a._M_a) { } 9642: 9642: template 9642: 9642: _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a) 9642: : _M_head_impl(*__a._M_a) { } 9642: 9642: template 9642: 9642: _Head_base(__uses_alloc0, _UHead&& __uhead) 9642: : _M_head_impl(std::forward<_UHead>(__uhead)) { } 9642: 9642: template 9642: 9642: _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead) 9642: : _M_head_impl(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead)) 9642: { } 9642: 9642: template 9642: 9642: _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead) 9642: : _M_head_impl(std::forward<_UHead>(__uhead), *__a._M_a) { } 9642: 9642: static constexpr _Head& 9642: _M_head(_Head_base& __b) noexcept { return __b._M_head_impl; } 9642: 9642: static constexpr const _Head& 9642: _M_head(const _Head_base& __b) noexcept { return __b._M_head_impl; } 9642: 9642: [[__no_unique_address__]] _Head _M_head_impl; 9642: }; 9642: # 187 "/usr/include/c++/13/tuple" 3 9642: template 9642: struct _Head_base<_Idx, _Head, false> 9642: { 9642: constexpr _Head_base() 9642: : _M_head_impl() { } 9642: 9642: constexpr _Head_base(const _Head& __h) 9642: : _M_head_impl(__h) { } 9642: 9642: constexpr _Head_base(const _Head_base&) = default; 9642: constexpr _Head_base(_Head_base&&) = default; 9642: 9642: template 9642: constexpr _Head_base(_UHead&& __h) 9642: : _M_head_impl(std::forward<_UHead>(__h)) { } 9642: 9642: 9642: _Head_base(allocator_arg_t, __uses_alloc0) 9642: : _M_head_impl() { } 9642: 9642: template 9642: 9642: _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a) 9642: : _M_head_impl(allocator_arg, *__a._M_a) { } 9642: 9642: template 9642: 9642: _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a) 9642: : _M_head_impl(*__a._M_a) { } 9642: 9642: template 9642: 9642: _Head_base(__uses_alloc0, _UHead&& __uhead) 9642: : _M_head_impl(std::forward<_UHead>(__uhead)) { } 9642: 9642: template 9642: 9642: _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead) 9642: : _M_head_impl(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead)) 9642: { } 9642: 9642: template 9642: 9642: _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead) 9642: : _M_head_impl(std::forward<_UHead>(__uhead), *__a._M_a) { } 9642: 9642: static constexpr _Head& 9642: _M_head(_Head_base& __b) noexcept { return __b._M_head_impl; } 9642: 9642: static constexpr const _Head& 9642: _M_head(const _Head_base& __b) noexcept { return __b._M_head_impl; } 9642: 9642: _Head _M_head_impl; 9642: }; 9642: # 250 "/usr/include/c++/13/tuple" 3 9642: template 9642: struct _Tuple_impl; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Tuple_impl<_Idx, _Head, _Tail...> 9642: : public _Tuple_impl<_Idx + 1, _Tail...>, 9642: private _Head_base<_Idx, _Head> 9642: { 9642: template friend struct _Tuple_impl; 9642: 9642: typedef _Tuple_impl<_Idx + 1, _Tail...> _Inherited; 9642: typedef _Head_base<_Idx, _Head> _Base; 9642: 9642: static constexpr _Head& 9642: _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } 9642: 9642: static constexpr const _Head& 9642: _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } 9642: 9642: static constexpr _Inherited& 9642: _M_tail(_Tuple_impl& __t) noexcept { return __t; } 9642: 9642: static constexpr const _Inherited& 9642: _M_tail(const _Tuple_impl& __t) noexcept { return __t; } 9642: 9642: constexpr _Tuple_impl() 9642: : _Inherited(), _Base() { } 9642: 9642: explicit constexpr 9642: _Tuple_impl(const _Head& __head, const _Tail&... __tail) 9642: : _Inherited(__tail...), _Base(__head) 9642: { } 9642: 9642: template> 9642: explicit constexpr 9642: _Tuple_impl(_UHead&& __head, _UTail&&... __tail) 9642: : _Inherited(std::forward<_UTail>(__tail)...), 9642: _Base(std::forward<_UHead>(__head)) 9642: { } 9642: 9642: constexpr _Tuple_impl(const _Tuple_impl&) = default; 9642: 9642: 9642: 9642: _Tuple_impl& operator=(const _Tuple_impl&) = delete; 9642: 9642: _Tuple_impl(_Tuple_impl&&) = default; 9642: 9642: template 9642: constexpr 9642: _Tuple_impl(const _Tuple_impl<_Idx, _UElements...>& __in) 9642: : _Inherited(_Tuple_impl<_Idx, _UElements...>::_M_tail(__in)), 9642: _Base(_Tuple_impl<_Idx, _UElements...>::_M_head(__in)) 9642: { } 9642: 9642: template 9642: constexpr 9642: _Tuple_impl(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in) 9642: : _Inherited(std::move 9642: (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))), 9642: _Base(std::forward<_UHead> 9642: (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) 9642: { } 9642: # 338 "/usr/include/c++/13/tuple" 3 9642: template 9642: 9642: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a) 9642: : _Inherited(__tag, __a), 9642: _Base(__tag, __use_alloc<_Head>(__a)) 9642: { } 9642: 9642: template 9642: 9642: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, 9642: const _Head& __head, const _Tail&... __tail) 9642: : _Inherited(__tag, __a, __tail...), 9642: _Base(__use_alloc<_Head, _Alloc, _Head>(__a), __head) 9642: { } 9642: 9642: template> 9642: 9642: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, 9642: _UHead&& __head, _UTail&&... __tail) 9642: : _Inherited(__tag, __a, std::forward<_UTail>(__tail)...), 9642: _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), 9642: std::forward<_UHead>(__head)) 9642: { } 9642: 9642: template 9642: 9642: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, 9642: const _Tuple_impl& __in) 9642: : _Inherited(__tag, __a, _M_tail(__in)), 9642: _Base(__use_alloc<_Head, _Alloc, _Head>(__a), _M_head(__in)) 9642: { } 9642: 9642: template 9642: 9642: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, 9642: _Tuple_impl&& __in) 9642: : _Inherited(__tag, __a, std::move(_M_tail(__in))), 9642: _Base(__use_alloc<_Head, _Alloc, _Head>(__a), 9642: std::forward<_Head>(_M_head(__in))) 9642: { } 9642: 9642: template 9642: 9642: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, 9642: const _Tuple_impl<_Idx, _UHead, _UTails...>& __in) 9642: : _Inherited(__tag, __a, 9642: _Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in)), 9642: _Base(__use_alloc<_Head, _Alloc, const _UHead&>(__a), 9642: _Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)) 9642: { } 9642: 9642: template 9642: 9642: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, 9642: _Tuple_impl<_Idx, _UHead, _UTails...>&& __in) 9642: : _Inherited(__tag, __a, std::move 9642: (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))), 9642: _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), 9642: std::forward<_UHead> 9642: (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) 9642: { } 9642: # 424 "/usr/include/c++/13/tuple" 3 9642: template 9642: 9642: void 9642: _M_assign(const _Tuple_impl<_Idx, _UElements...>& __in) 9642: { 9642: _M_head(*this) = _Tuple_impl<_Idx, _UElements...>::_M_head(__in); 9642: _M_tail(*this)._M_assign( 9642: _Tuple_impl<_Idx, _UElements...>::_M_tail(__in)); 9642: } 9642: 9642: template 9642: 9642: void 9642: _M_assign(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in) 9642: { 9642: _M_head(*this) = std::forward<_UHead> 9642: (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)); 9642: _M_tail(*this)._M_assign( 9642: std::move(_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))); 9642: } 9642: # 466 "/usr/include/c++/13/tuple" 3 9642: protected: 9642: 9642: void 9642: _M_swap(_Tuple_impl& __in) 9642: { 9642: using std::swap; 9642: swap(_M_head(*this), _M_head(__in)); 9642: _Inherited::_M_swap(_M_tail(__in)); 9642: } 9642: # 485 "/usr/include/c++/13/tuple" 3 9642: }; 9642: 9642: 9642: template 9642: struct _Tuple_impl<_Idx, _Head> 9642: : private _Head_base<_Idx, _Head> 9642: { 9642: template friend struct _Tuple_impl; 9642: 9642: typedef _Head_base<_Idx, _Head> _Base; 9642: 9642: static constexpr _Head& 9642: _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } 9642: 9642: static constexpr const _Head& 9642: _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } 9642: 9642: constexpr 9642: _Tuple_impl() 9642: : _Base() { } 9642: 9642: explicit constexpr 9642: _Tuple_impl(const _Head& __head) 9642: : _Base(__head) 9642: { } 9642: 9642: template 9642: explicit constexpr 9642: _Tuple_impl(_UHead&& __head) 9642: : _Base(std::forward<_UHead>(__head)) 9642: { } 9642: 9642: constexpr _Tuple_impl(const _Tuple_impl&) = default; 9642: 9642: 9642: 9642: _Tuple_impl& operator=(const _Tuple_impl&) = delete; 9642: 9642: 9642: 9642: 9642: constexpr 9642: _Tuple_impl(_Tuple_impl&& __in) 9642: noexcept(is_nothrow_move_constructible<_Head>::value) 9642: : _Base(static_cast<_Base&&>(__in)) 9642: { } 9642: 9642: 9642: template 9642: constexpr 9642: _Tuple_impl(const _Tuple_impl<_Idx, _UHead>& __in) 9642: : _Base(_Tuple_impl<_Idx, _UHead>::_M_head(__in)) 9642: { } 9642: 9642: template 9642: constexpr 9642: _Tuple_impl(_Tuple_impl<_Idx, _UHead>&& __in) 9642: : _Base(std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in))) 9642: { } 9642: # 559 "/usr/include/c++/13/tuple" 3 9642: template 9642: 9642: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a) 9642: : _Base(__tag, __use_alloc<_Head>(__a)) 9642: { } 9642: 9642: template 9642: 9642: _Tuple_impl(allocator_arg_t, const _Alloc& __a, 9642: const _Head& __head) 9642: : _Base(__use_alloc<_Head, _Alloc, const _Head&>(__a), __head) 9642: { } 9642: 9642: template 9642: 9642: _Tuple_impl(allocator_arg_t, const _Alloc& __a, 9642: _UHead&& __head) 9642: : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), 9642: std::forward<_UHead>(__head)) 9642: { } 9642: 9642: template 9642: 9642: _Tuple_impl(allocator_arg_t, const _Alloc& __a, 9642: const _Tuple_impl& __in) 9642: : _Base(__use_alloc<_Head, _Alloc, const _Head&>(__a), _M_head(__in)) 9642: { } 9642: 9642: template 9642: 9642: _Tuple_impl(allocator_arg_t, const _Alloc& __a, 9642: _Tuple_impl&& __in) 9642: : _Base(__use_alloc<_Head, _Alloc, _Head>(__a), 9642: std::forward<_Head>(_M_head(__in))) 9642: { } 9642: 9642: template 9642: 9642: _Tuple_impl(allocator_arg_t, const _Alloc& __a, 9642: const _Tuple_impl<_Idx, _UHead>& __in) 9642: : _Base(__use_alloc<_Head, _Alloc, const _UHead&>(__a), 9642: _Tuple_impl<_Idx, _UHead>::_M_head(__in)) 9642: { } 9642: 9642: template 9642: 9642: _Tuple_impl(allocator_arg_t, const _Alloc& __a, 9642: _Tuple_impl<_Idx, _UHead>&& __in) 9642: : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), 9642: std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in))) 9642: { } 9642: # 629 "/usr/include/c++/13/tuple" 3 9642: template 9642: 9642: void 9642: _M_assign(const _Tuple_impl<_Idx, _UHead>& __in) 9642: { 9642: _M_head(*this) = _Tuple_impl<_Idx, _UHead>::_M_head(__in); 9642: } 9642: 9642: template 9642: 9642: void 9642: _M_assign(_Tuple_impl<_Idx, _UHead>&& __in) 9642: { 9642: _M_head(*this) 9642: = std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in)); 9642: } 9642: # 663 "/usr/include/c++/13/tuple" 3 9642: protected: 9642: 9642: void 9642: _M_swap(_Tuple_impl& __in) 9642: { 9642: using std::swap; 9642: swap(_M_head(*this), _M_head(__in)); 9642: } 9642: # 680 "/usr/include/c++/13/tuple" 3 9642: }; 9642: 9642: 9642: 9642: template 9642: struct _TupleConstraints 9642: { 9642: template 9642: using __constructible = __and_...>; 9642: 9642: template 9642: using __convertible = __and_...>; 9642: 9642: 9642: 9642: 9642: template 9642: static constexpr bool __is_implicitly_constructible() 9642: { 9642: return __and_<__constructible<_UTypes...>, 9642: __convertible<_UTypes...> 9642: >::value; 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: static constexpr bool __is_explicitly_constructible() 9642: { 9642: return __and_<__constructible<_UTypes...>, 9642: __not_<__convertible<_UTypes...>> 9642: >::value; 9642: } 9642: 9642: static constexpr bool __is_implicitly_default_constructible() 9642: { 9642: return __and_... 9642: >::value; 9642: } 9642: 9642: static constexpr bool __is_explicitly_default_constructible() 9642: { 9642: return __and_..., 9642: __not_<__and_< 9642: std::__is_implicitly_default_constructible<_Types>...> 9642: >>::value; 9642: } 9642: }; 9642: 9642: 9642: 9642: template 9642: struct _TupleConstraints 9642: { 9642: template 9642: static constexpr bool __is_implicitly_constructible() 9642: { return false; } 9642: 9642: template 9642: static constexpr bool __is_explicitly_constructible() 9642: { return false; } 9642: }; 9642: 9642: 9642: template 9642: class tuple : public _Tuple_impl<0, _Elements...> 9642: { 9642: typedef _Tuple_impl<0, _Elements...> _Inherited; 9642: 9642: template 9642: using _TCC = _TupleConstraints<_Cond, _Elements...>; 9642: 9642: 9642: template 9642: using _ImplicitDefaultCtor = __enable_if_t< 9642: _TCC<_Dummy>::__is_implicitly_default_constructible(), 9642: bool>; 9642: 9642: 9642: template 9642: using _ExplicitDefaultCtor = __enable_if_t< 9642: _TCC<_Dummy>::__is_explicitly_default_constructible(), 9642: bool>; 9642: 9642: 9642: template 9642: using _ImplicitCtor = __enable_if_t< 9642: _TCC<_Cond>::template __is_implicitly_constructible<_Args...>(), 9642: bool>; 9642: 9642: 9642: template 9642: using _ExplicitCtor = __enable_if_t< 9642: _TCC<_Cond>::template __is_explicitly_constructible<_Args...>(), 9642: bool>; 9642: 9642: template 9642: static constexpr 9642: __enable_if_t 9642: __assignable() 9642: { return __and_...>::value; } 9642: 9642: 9642: template 9642: static constexpr bool __nothrow_assignable() 9642: { 9642: return 9642: __and_...>::value; 9642: } 9642: 9642: 9642: template 9642: static constexpr bool __nothrow_constructible() 9642: { 9642: return 9642: __and_...>::value; 9642: } 9642: 9642: 9642: template 9642: static constexpr bool __valid_args() 9642: { 9642: return sizeof...(_Elements) == 1 9642: && !is_same>::value; 9642: } 9642: 9642: 9642: template 9642: static constexpr bool __valid_args() 9642: { return (sizeof...(_Tail) + 2) == sizeof...(_Elements); } 9642: # 821 "/usr/include/c++/13/tuple" 3 9642: template> 9642: struct _UseOtherCtor 9642: : false_type 9642: { }; 9642: 9642: 9642: template 9642: struct _UseOtherCtor<_Tuple, tuple<_Tp>, tuple<_Up>> 9642: : __or_, is_constructible<_Tp, _Tuple>>::type 9642: { }; 9642: 9642: 9642: template 9642: struct _UseOtherCtor<_Tuple, tuple<_Tp>, tuple<_Tp>> 9642: : true_type 9642: { }; 9642: 9642: 9642: 9642: 9642: template 9642: static constexpr bool __use_other_ctor() 9642: { return _UseOtherCtor<_Tuple>::value; } 9642: # 856 "/usr/include/c++/13/tuple" 3 9642: public: 9642: template::value> = true> 9642: constexpr 9642: tuple() 9642: noexcept(__and_...>::value) 9642: : _Inherited() { } 9642: 9642: template::value> = false> 9642: explicit constexpr 9642: tuple() 9642: noexcept(__and_...>::value) 9642: : _Inherited() { } 9642: 9642: template= 1), 9642: _ImplicitCtor<_NotEmpty, const _Elements&...> = true> 9642: constexpr 9642: tuple(const _Elements&... __elements) 9642: noexcept(__nothrow_constructible()) 9642: : _Inherited(__elements...) { } 9642: 9642: template= 1), 9642: _ExplicitCtor<_NotEmpty, const _Elements&...> = false> 9642: explicit constexpr 9642: tuple(const _Elements&... __elements) 9642: noexcept(__nothrow_constructible()) 9642: : _Inherited(__elements...) { } 9642: 9642: template(), 9642: _ImplicitCtor<_Valid, _UElements...> = true> 9642: constexpr 9642: tuple(_UElements&&... __elements) 9642: noexcept(__nothrow_constructible<_UElements...>()) 9642: : _Inherited(std::forward<_UElements>(__elements)...) { } 9642: 9642: template(), 9642: _ExplicitCtor<_Valid, _UElements...> = false> 9642: explicit constexpr 9642: tuple(_UElements&&... __elements) 9642: noexcept(__nothrow_constructible<_UElements...>()) 9642: : _Inherited(std::forward<_UElements>(__elements)...) { } 9642: 9642: constexpr tuple(const tuple&) = default; 9642: 9642: constexpr tuple(tuple&&) = default; 9642: 9642: template&>(), 9642: _ImplicitCtor<_Valid, const _UElements&...> = true> 9642: constexpr 9642: tuple(const tuple<_UElements...>& __in) 9642: noexcept(__nothrow_constructible()) 9642: : _Inherited(static_cast&>(__in)) 9642: { } 9642: 9642: template&>(), 9642: _ExplicitCtor<_Valid, const _UElements&...> = false> 9642: explicit constexpr 9642: tuple(const tuple<_UElements...>& __in) 9642: noexcept(__nothrow_constructible()) 9642: : _Inherited(static_cast&>(__in)) 9642: { } 9642: 9642: template&&>(), 9642: _ImplicitCtor<_Valid, _UElements...> = true> 9642: constexpr 9642: tuple(tuple<_UElements...>&& __in) 9642: noexcept(__nothrow_constructible<_UElements...>()) 9642: : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { } 9642: 9642: template&&>(), 9642: _ExplicitCtor<_Valid, _UElements...> = false> 9642: explicit constexpr 9642: tuple(tuple<_UElements...>&& __in) 9642: noexcept(__nothrow_constructible<_UElements...>()) 9642: : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { } 9642: # 968 "/usr/include/c++/13/tuple" 3 9642: template::value> = true> 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a) 9642: : _Inherited(__tag, __a) { } 9642: 9642: template::value> = false> 9642: 9642: explicit 9642: tuple(allocator_arg_t __tag, const _Alloc& __a) 9642: : _Inherited(__tag, __a) { } 9642: 9642: template= 1), 9642: _ImplicitCtor<_NotEmpty, const _Elements&...> = true> 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, 9642: const _Elements&... __elements) 9642: : _Inherited(__tag, __a, __elements...) { } 9642: 9642: template= 1), 9642: _ExplicitCtor<_NotEmpty, const _Elements&...> = false> 9642: 9642: explicit 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, 9642: const _Elements&... __elements) 9642: : _Inherited(__tag, __a, __elements...) { } 9642: 9642: template(), 9642: _ImplicitCtor<_Valid, _UElements...> = true> 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, 9642: _UElements&&... __elements) 9642: : _Inherited(__tag, __a, std::forward<_UElements>(__elements)...) 9642: { } 9642: 9642: template(), 9642: _ExplicitCtor<_Valid, _UElements...> = false> 9642: 9642: explicit 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, 9642: _UElements&&... __elements) 9642: : _Inherited(__tag, __a, std::forward<_UElements>(__elements)...) 9642: { } 9642: 9642: template 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in) 9642: : _Inherited(__tag, __a, static_cast(__in)) { } 9642: 9642: template 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in) 9642: : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { } 9642: 9642: template&>(), 9642: _ImplicitCtor<_Valid, const _UElements&...> = true> 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, 9642: const tuple<_UElements...>& __in) 9642: : _Inherited(__tag, __a, 9642: static_cast&>(__in)) 9642: { } 9642: 9642: template&>(), 9642: _ExplicitCtor<_Valid, const _UElements&...> = false> 9642: 9642: explicit 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, 9642: const tuple<_UElements...>& __in) 9642: : _Inherited(__tag, __a, 9642: static_cast&>(__in)) 9642: { } 9642: 9642: template&&>(), 9642: _ImplicitCtor<_Valid, _UElements...> = true> 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, 9642: tuple<_UElements...>&& __in) 9642: : _Inherited(__tag, __a, 9642: static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) 9642: { } 9642: 9642: template&&>(), 9642: _ExplicitCtor<_Valid, _UElements...> = false> 9642: 9642: explicit 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, 9642: tuple<_UElements...>&& __in) 9642: : _Inherited(__tag, __a, 9642: static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) 9642: { } 9642: # 1099 "/usr/include/c++/13/tuple" 3 9642: 9642: tuple& 9642: operator=(__conditional_t<__assignable(), 9642: const tuple&, 9642: const __nonesuch&> __in) 9642: noexcept(__nothrow_assignable()) 9642: { 9642: this->_M_assign(__in); 9642: return *this; 9642: } 9642: 9642: 9642: tuple& 9642: operator=(__conditional_t<__assignable<_Elements...>(), 9642: tuple&&, 9642: __nonesuch&&> __in) 9642: noexcept(__nothrow_assignable<_Elements...>()) 9642: { 9642: this->_M_assign(std::move(__in)); 9642: return *this; 9642: } 9642: 9642: template 9642: 9642: __enable_if_t<__assignable(), tuple&> 9642: operator=(const tuple<_UElements...>& __in) 9642: noexcept(__nothrow_assignable()) 9642: { 9642: this->_M_assign(__in); 9642: return *this; 9642: } 9642: 9642: template 9642: 9642: __enable_if_t<__assignable<_UElements...>(), tuple&> 9642: operator=(tuple<_UElements...>&& __in) 9642: noexcept(__nothrow_assignable<_UElements...>()) 9642: { 9642: this->_M_assign(std::move(__in)); 9642: return *this; 9642: } 9642: # 1180 "/usr/include/c++/13/tuple" 3 9642: 9642: void 9642: swap(tuple& __in) 9642: noexcept(__and_<__is_nothrow_swappable<_Elements>...>::value) 9642: { _Inherited::_M_swap(__in); } 9642: # 1199 "/usr/include/c++/13/tuple" 3 9642: }; 9642: 9642: 9642: template 9642: tuple(_UTypes...) -> tuple<_UTypes...>; 9642: template 9642: tuple(pair<_T1, _T2>) -> tuple<_T1, _T2>; 9642: template 9642: tuple(allocator_arg_t, _Alloc, _UTypes...) -> tuple<_UTypes...>; 9642: template 9642: tuple(allocator_arg_t, _Alloc, pair<_T1, _T2>) -> tuple<_T1, _T2>; 9642: template 9642: tuple(allocator_arg_t, _Alloc, tuple<_UTypes...>) -> tuple<_UTypes...>; 9642: 9642: 9642: 9642: template<> 9642: class tuple<> 9642: { 9642: public: 9642: 9642: void swap(tuple&) noexcept { } 9642: 9642: 9642: 9642: 9642: 9642: tuple() = default; 9642: 9642: template 9642: 9642: tuple(allocator_arg_t, const _Alloc&) noexcept { } 9642: template 9642: 9642: tuple(allocator_arg_t, const _Alloc&, const tuple&) noexcept { } 9642: }; 9642: 9642: 9642: 9642: template 9642: class tuple<_T1, _T2> : public _Tuple_impl<0, _T1, _T2> 9642: { 9642: typedef _Tuple_impl<0, _T1, _T2> _Inherited; 9642: 9642: 9642: template 9642: using _ImplicitDefaultCtor = __enable_if_t< 9642: _TupleConstraints<_Dummy, _U1, _U2>:: 9642: __is_implicitly_default_constructible(), 9642: bool>; 9642: 9642: 9642: template 9642: using _ExplicitDefaultCtor = __enable_if_t< 9642: _TupleConstraints<_Dummy, _U1, _U2>:: 9642: __is_explicitly_default_constructible(), 9642: bool>; 9642: 9642: template 9642: using _TCC = _TupleConstraints<_Dummy, _T1, _T2>; 9642: 9642: 9642: template 9642: using _ImplicitCtor = __enable_if_t< 9642: _TCC<_Cond>::template __is_implicitly_constructible<_U1, _U2>(), 9642: bool>; 9642: 9642: 9642: template 9642: using _ExplicitCtor = __enable_if_t< 9642: _TCC<_Cond>::template __is_explicitly_constructible<_U1, _U2>(), 9642: bool>; 9642: 9642: template 9642: static constexpr bool __assignable() 9642: { 9642: return __and_, 9642: is_assignable<_T2&, _U2>>::value; 9642: } 9642: 9642: template 9642: static constexpr bool __nothrow_assignable() 9642: { 9642: return __and_, 9642: is_nothrow_assignable<_T2&, _U2>>::value; 9642: } 9642: 9642: template 9642: static constexpr bool __nothrow_constructible() 9642: { 9642: return __and_, 9642: is_nothrow_constructible<_T2, _U2>>::value; 9642: } 9642: 9642: static constexpr bool __nothrow_default_constructible() 9642: { 9642: return __and_, 9642: is_nothrow_default_constructible<_T2>>::value; 9642: } 9642: 9642: template 9642: static constexpr bool __is_alloc_arg() 9642: { return is_same<__remove_cvref_t<_U1>, allocator_arg_t>::value; } 9642: # 1313 "/usr/include/c++/13/tuple" 3 9642: public: 9642: template = true> 9642: constexpr 9642: tuple() 9642: noexcept(__nothrow_default_constructible()) 9642: : _Inherited() { } 9642: 9642: template = false> 9642: explicit constexpr 9642: tuple() 9642: noexcept(__nothrow_default_constructible()) 9642: : _Inherited() { } 9642: 9642: template = true> 9642: constexpr 9642: tuple(const _T1& __a1, const _T2& __a2) 9642: noexcept(__nothrow_constructible()) 9642: : _Inherited(__a1, __a2) { } 9642: 9642: template = false> 9642: explicit constexpr 9642: tuple(const _T1& __a1, const _T2& __a2) 9642: noexcept(__nothrow_constructible()) 9642: : _Inherited(__a1, __a2) { } 9642: 9642: template(), _U1, _U2> = true> 9642: constexpr 9642: tuple(_U1&& __a1, _U2&& __a2) 9642: noexcept(__nothrow_constructible<_U1, _U2>()) 9642: : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { } 9642: 9642: template(), _U1, _U2> = false> 9642: explicit constexpr 9642: tuple(_U1&& __a1, _U2&& __a2) 9642: noexcept(__nothrow_constructible<_U1, _U2>()) 9642: : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { } 9642: 9642: constexpr tuple(const tuple&) = default; 9642: 9642: constexpr tuple(tuple&&) = default; 9642: 9642: template = true> 9642: constexpr 9642: tuple(const tuple<_U1, _U2>& __in) 9642: noexcept(__nothrow_constructible()) 9642: : _Inherited(static_cast&>(__in)) { } 9642: 9642: template = false> 9642: explicit constexpr 9642: tuple(const tuple<_U1, _U2>& __in) 9642: noexcept(__nothrow_constructible()) 9642: : _Inherited(static_cast&>(__in)) { } 9642: 9642: template = true> 9642: constexpr 9642: tuple(tuple<_U1, _U2>&& __in) 9642: noexcept(__nothrow_constructible<_U1, _U2>()) 9642: : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { } 9642: 9642: template = false> 9642: explicit constexpr 9642: tuple(tuple<_U1, _U2>&& __in) 9642: noexcept(__nothrow_constructible<_U1, _U2>()) 9642: : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { } 9642: # 1406 "/usr/include/c++/13/tuple" 3 9642: template = true> 9642: constexpr 9642: tuple(const pair<_U1, _U2>& __in) 9642: noexcept(__nothrow_constructible()) 9642: : _Inherited(__in.first, __in.second) { } 9642: 9642: template = false> 9642: explicit constexpr 9642: tuple(const pair<_U1, _U2>& __in) 9642: noexcept(__nothrow_constructible()) 9642: : _Inherited(__in.first, __in.second) { } 9642: 9642: template = true> 9642: constexpr 9642: tuple(pair<_U1, _U2>&& __in) 9642: noexcept(__nothrow_constructible<_U1, _U2>()) 9642: : _Inherited(std::forward<_U1>(__in.first), 9642: std::forward<_U2>(__in.second)) { } 9642: 9642: template = false> 9642: explicit constexpr 9642: tuple(pair<_U1, _U2>&& __in) 9642: noexcept(__nothrow_constructible<_U1, _U2>()) 9642: : _Inherited(std::forward<_U1>(__in.first), 9642: std::forward<_U2>(__in.second)) { } 9642: # 1457 "/usr/include/c++/13/tuple" 3 9642: template::value, _T1, _T2> = true> 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a) 9642: : _Inherited(__tag, __a) { } 9642: 9642: template::value, _T1, _T2> = false> 9642: 9642: explicit 9642: tuple(allocator_arg_t __tag, const _Alloc& __a) 9642: : _Inherited(__tag, __a) { } 9642: 9642: template = true> 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, 9642: const _T1& __a1, const _T2& __a2) 9642: : _Inherited(__tag, __a, __a1, __a2) { } 9642: 9642: template = false> 9642: explicit 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, 9642: const _T1& __a1, const _T2& __a2) 9642: : _Inherited(__tag, __a, __a1, __a2) { } 9642: 9642: template = true> 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, _U1&& __a1, _U2&& __a2) 9642: : _Inherited(__tag, __a, std::forward<_U1>(__a1), 9642: std::forward<_U2>(__a2)) { } 9642: 9642: template = false> 9642: explicit 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, 9642: _U1&& __a1, _U2&& __a2) 9642: : _Inherited(__tag, __a, std::forward<_U1>(__a1), 9642: std::forward<_U2>(__a2)) { } 9642: 9642: template 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in) 9642: : _Inherited(__tag, __a, static_cast(__in)) { } 9642: 9642: template 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in) 9642: : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { } 9642: 9642: template = true> 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, 9642: const tuple<_U1, _U2>& __in) 9642: : _Inherited(__tag, __a, 9642: static_cast&>(__in)) 9642: { } 9642: 9642: template = false> 9642: explicit 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, 9642: const tuple<_U1, _U2>& __in) 9642: : _Inherited(__tag, __a, 9642: static_cast&>(__in)) 9642: { } 9642: 9642: template = true> 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_U1, _U2>&& __in) 9642: : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) 9642: { } 9642: 9642: template = false> 9642: explicit 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_U1, _U2>&& __in) 9642: : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) 9642: { } 9642: # 1567 "/usr/include/c++/13/tuple" 3 9642: template = true> 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, 9642: const pair<_U1, _U2>& __in) 9642: : _Inherited(__tag, __a, __in.first, __in.second) { } 9642: 9642: template = false> 9642: explicit 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, 9642: const pair<_U1, _U2>& __in) 9642: : _Inherited(__tag, __a, __in.first, __in.second) { } 9642: 9642: template = true> 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>&& __in) 9642: : _Inherited(__tag, __a, std::forward<_U1>(__in.first), 9642: std::forward<_U2>(__in.second)) { } 9642: 9642: template = false> 9642: explicit 9642: 9642: tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>&& __in) 9642: : _Inherited(__tag, __a, std::forward<_U1>(__in.first), 9642: std::forward<_U2>(__in.second)) { } 9642: # 1617 "/usr/include/c++/13/tuple" 3 9642: 9642: tuple& 9642: operator=(__conditional_t<__assignable(), 9642: const tuple&, 9642: const __nonesuch&> __in) 9642: noexcept(__nothrow_assignable()) 9642: { 9642: this->_M_assign(__in); 9642: return *this; 9642: } 9642: 9642: 9642: tuple& 9642: operator=(__conditional_t<__assignable<_T1, _T2>(), 9642: tuple&&, 9642: __nonesuch&&> __in) 9642: noexcept(__nothrow_assignable<_T1, _T2>()) 9642: { 9642: this->_M_assign(std::move(__in)); 9642: return *this; 9642: } 9642: 9642: template 9642: 9642: __enable_if_t<__assignable(), tuple&> 9642: operator=(const tuple<_U1, _U2>& __in) 9642: noexcept(__nothrow_assignable()) 9642: { 9642: this->_M_assign(__in); 9642: return *this; 9642: } 9642: 9642: template 9642: 9642: __enable_if_t<__assignable<_U1, _U2>(), tuple&> 9642: operator=(tuple<_U1, _U2>&& __in) 9642: noexcept(__nothrow_assignable<_U1, _U2>()) 9642: { 9642: this->_M_assign(std::move(__in)); 9642: return *this; 9642: } 9642: # 1697 "/usr/include/c++/13/tuple" 3 9642: template 9642: 9642: __enable_if_t<__assignable(), tuple&> 9642: operator=(const pair<_U1, _U2>& __in) 9642: noexcept(__nothrow_assignable()) 9642: { 9642: this->_M_head(*this) = __in.first; 9642: this->_M_tail(*this)._M_head(*this) = __in.second; 9642: return *this; 9642: } 9642: 9642: template 9642: 9642: __enable_if_t<__assignable<_U1, _U2>(), tuple&> 9642: operator=(pair<_U1, _U2>&& __in) 9642: noexcept(__nothrow_assignable<_U1, _U2>()) 9642: { 9642: this->_M_head(*this) = std::forward<_U1>(__in.first); 9642: this->_M_tail(*this)._M_head(*this) = std::forward<_U2>(__in.second); 9642: return *this; 9642: } 9642: # 1743 "/usr/include/c++/13/tuple" 3 9642: 9642: void 9642: swap(tuple& __in) 9642: noexcept(__and_<__is_nothrow_swappable<_T1>, 9642: __is_nothrow_swappable<_T2>>::value) 9642: { _Inherited::_M_swap(__in); } 9642: # 1758 "/usr/include/c++/13/tuple" 3 9642: }; 9642: 9642: 9642: 9642: template 9642: struct tuple_size> 9642: : public integral_constant { }; 9642: 9642: 9642: template 9642: inline constexpr size_t tuple_size_v> 9642: = sizeof...(_Types); 9642: 9642: template 9642: inline constexpr size_t tuple_size_v> 9642: = sizeof...(_Types); 9642: 9642: 9642: 9642: template 9642: struct tuple_element<__i, tuple<_Types...>> 9642: { 9642: static_assert(__i < sizeof...(_Types), "tuple index must be in range"); 9642: 9642: using type = typename _Nth_type<__i, _Types...>::type; 9642: }; 9642: 9642: template 9642: constexpr _Head& 9642: __get_helper(_Tuple_impl<__i, _Head, _Tail...>& __t) noexcept 9642: { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); } 9642: 9642: template 9642: constexpr const _Head& 9642: __get_helper(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept 9642: { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); } 9642: 9642: 9642: template 9642: __enable_if_t<(__i >= sizeof...(_Types))> 9642: __get_helper(const tuple<_Types...>&) = delete; 9642: 9642: 9642: template 9642: constexpr __tuple_element_t<__i, tuple<_Elements...>>& 9642: get(tuple<_Elements...>& __t) noexcept 9642: { return std::__get_helper<__i>(__t); } 9642: 9642: 9642: template 9642: constexpr const __tuple_element_t<__i, tuple<_Elements...>>& 9642: get(const tuple<_Elements...>& __t) noexcept 9642: { return std::__get_helper<__i>(__t); } 9642: 9642: 9642: template 9642: constexpr __tuple_element_t<__i, tuple<_Elements...>>&& 9642: get(tuple<_Elements...>&& __t) noexcept 9642: { 9642: typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type; 9642: return std::forward<__element_type>(std::__get_helper<__i>(__t)); 9642: } 9642: 9642: 9642: template 9642: constexpr const __tuple_element_t<__i, tuple<_Elements...>>&& 9642: get(const tuple<_Elements...>&& __t) noexcept 9642: { 9642: typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type; 9642: return std::forward(std::__get_helper<__i>(__t)); 9642: } 9642: 9642: 9642: 9642: template 9642: constexpr __enable_if_t<(__i >= sizeof...(_Elements))> 9642: get(const tuple<_Elements...>&) = delete; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: constexpr _Tp& 9642: get(tuple<_Types...>& __t) noexcept 9642: { 9642: constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>(); 9642: static_assert(__idx < sizeof...(_Types), 9642: "the type T in std::get must occur exactly once in the tuple"); 9642: return std::__get_helper<__idx>(__t); 9642: } 9642: 9642: 9642: template 9642: constexpr _Tp&& 9642: get(tuple<_Types...>&& __t) noexcept 9642: { 9642: constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>(); 9642: static_assert(__idx < sizeof...(_Types), 9642: "the type T in std::get must occur exactly once in the tuple"); 9642: return std::forward<_Tp>(std::__get_helper<__idx>(__t)); 9642: } 9642: 9642: 9642: template 9642: constexpr const _Tp& 9642: get(const tuple<_Types...>& __t) noexcept 9642: { 9642: constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>(); 9642: static_assert(__idx < sizeof...(_Types), 9642: "the type T in std::get must occur exactly once in the tuple"); 9642: return std::__get_helper<__idx>(__t); 9642: } 9642: 9642: 9642: 9642: template 9642: constexpr const _Tp&& 9642: get(const tuple<_Types...>&& __t) noexcept 9642: { 9642: constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>(); 9642: static_assert(__idx < sizeof...(_Types), 9642: "the type T in std::get must occur exactly once in the tuple"); 9642: return std::forward(std::__get_helper<__idx>(__t)); 9642: } 9642: 9642: 9642: 9642: template 9642: struct __tuple_compare 9642: { 9642: static constexpr bool 9642: __eq(const _Tp& __t, const _Up& __u) 9642: { 9642: return bool(std::get<__i>(__t) == std::get<__i>(__u)) 9642: && __tuple_compare<_Tp, _Up, __i + 1, __size>::__eq(__t, __u); 9642: } 9642: 9642: static constexpr bool 9642: __less(const _Tp& __t, const _Up& __u) 9642: { 9642: return bool(std::get<__i>(__t) < std::get<__i>(__u)) 9642: || (!bool(std::get<__i>(__u) < std::get<__i>(__t)) 9642: && __tuple_compare<_Tp, _Up, __i + 1, __size>::__less(__t, __u)); 9642: } 9642: }; 9642: 9642: template 9642: struct __tuple_compare<_Tp, _Up, __size, __size> 9642: { 9642: static constexpr bool 9642: __eq(const _Tp&, const _Up&) { return true; } 9642: 9642: static constexpr bool 9642: __less(const _Tp&, const _Up&) { return false; } 9642: }; 9642: 9642: template 9642: constexpr bool 9642: operator==(const tuple<_TElements...>& __t, 9642: const tuple<_UElements...>& __u) 9642: { 9642: static_assert(sizeof...(_TElements) == sizeof...(_UElements), 9642: "tuple objects can only be compared if they have equal sizes."); 9642: using __compare = __tuple_compare, 9642: tuple<_UElements...>, 9642: 0, sizeof...(_TElements)>; 9642: return __compare::__eq(__t, __u); 9642: } 9642: # 1959 "/usr/include/c++/13/tuple" 3 9642: template 9642: constexpr bool 9642: operator<(const tuple<_TElements...>& __t, 9642: const tuple<_UElements...>& __u) 9642: { 9642: static_assert(sizeof...(_TElements) == sizeof...(_UElements), 9642: "tuple objects can only be compared if they have equal sizes."); 9642: using __compare = __tuple_compare, 9642: tuple<_UElements...>, 9642: 0, sizeof...(_TElements)>; 9642: return __compare::__less(__t, __u); 9642: } 9642: 9642: template 9642: constexpr bool 9642: operator!=(const tuple<_TElements...>& __t, 9642: const tuple<_UElements...>& __u) 9642: { return !(__t == __u); } 9642: 9642: template 9642: constexpr bool 9642: operator>(const tuple<_TElements...>& __t, 9642: const tuple<_UElements...>& __u) 9642: { return __u < __t; } 9642: 9642: template 9642: constexpr bool 9642: operator<=(const tuple<_TElements...>& __t, 9642: const tuple<_UElements...>& __u) 9642: { return !(__u < __t); } 9642: 9642: template 9642: constexpr bool 9642: operator>=(const tuple<_TElements...>& __t, 9642: const tuple<_UElements...>& __u) 9642: { return !(__t < __u); } 9642: 9642: 9642: 9642: 9642: template 9642: constexpr tuple::__type...> 9642: make_tuple(_Elements&&... __args) 9642: { 9642: typedef tuple::__type...> 9642: __result_type; 9642: return __result_type(std::forward<_Elements>(__args)...); 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: constexpr tuple<_Elements&&...> 9642: forward_as_tuple(_Elements&&... __args) noexcept 9642: { return tuple<_Elements&&...>(std::forward<_Elements>(__args)...); } 9642: 9642: 9642: 9642: 9642: template struct array; 9642: 9642: template 9642: constexpr _Tp& 9642: get(array<_Tp, _Nm>&) noexcept; 9642: 9642: template 9642: constexpr _Tp&& 9642: get(array<_Tp, _Nm>&&) noexcept; 9642: 9642: template 9642: constexpr const _Tp& 9642: get(const array<_Tp, _Nm>&) noexcept; 9642: 9642: template 9642: constexpr const _Tp&& 9642: get(const array<_Tp, _Nm>&&) noexcept; 9642: 9642: 9642: template 9642: struct __make_tuple_impl; 9642: 9642: template 9642: struct __make_tuple_impl<_Idx, tuple<_Tp...>, _Tuple, _Nm> 9642: : __make_tuple_impl<_Idx + 1, 9642: tuple<_Tp..., __tuple_element_t<_Idx, _Tuple>>, 9642: _Tuple, _Nm> 9642: { }; 9642: 9642: template 9642: struct __make_tuple_impl<_Nm, tuple<_Tp...>, _Tuple, _Nm> 9642: { 9642: typedef tuple<_Tp...> __type; 9642: }; 9642: 9642: template 9642: struct __do_make_tuple 9642: : __make_tuple_impl<0, tuple<>, _Tuple, tuple_size<_Tuple>::value> 9642: { }; 9642: 9642: 9642: template 9642: struct __make_tuple 9642: : public __do_make_tuple<__remove_cvref_t<_Tuple>> 9642: { }; 9642: 9642: 9642: template 9642: struct __combine_tuples; 9642: 9642: template<> 9642: struct __combine_tuples<> 9642: { 9642: typedef tuple<> __type; 9642: }; 9642: 9642: template 9642: struct __combine_tuples> 9642: { 9642: typedef tuple<_Ts...> __type; 9642: }; 9642: 9642: template 9642: struct __combine_tuples, tuple<_T2s...>, _Rem...> 9642: { 9642: typedef typename __combine_tuples, 9642: _Rem...>::__type __type; 9642: }; 9642: 9642: 9642: template 9642: struct __tuple_cat_result 9642: { 9642: typedef typename __combine_tuples 9642: ::__type...>::__type __type; 9642: }; 9642: 9642: 9642: 9642: template 9642: struct __make_1st_indices; 9642: 9642: template<> 9642: struct __make_1st_indices<> 9642: { 9642: typedef _Index_tuple<> __type; 9642: }; 9642: 9642: template 9642: struct __make_1st_indices<_Tp, _Tpls...> 9642: { 9642: typedef typename _Build_index_tuple::type>::value>::__type __type; 9642: }; 9642: 9642: 9642: 9642: 9642: template 9642: struct __tuple_concater; 9642: 9642: template 9642: struct __tuple_concater<_Ret, _Index_tuple<_Is...>, _Tp, _Tpls...> 9642: { 9642: template 9642: static constexpr _Ret 9642: _S_do(_Tp&& __tp, _Tpls&&... __tps, _Us&&... __us) 9642: { 9642: typedef typename __make_1st_indices<_Tpls...>::__type __idx; 9642: typedef __tuple_concater<_Ret, __idx, _Tpls...> __next; 9642: return __next::_S_do(std::forward<_Tpls>(__tps)..., 9642: std::forward<_Us>(__us)..., 9642: std::get<_Is>(std::forward<_Tp>(__tp))...); 9642: } 9642: }; 9642: 9642: template 9642: struct __tuple_concater<_Ret, _Index_tuple<>> 9642: { 9642: template 9642: static constexpr _Ret 9642: _S_do(_Us&&... __us) 9642: { 9642: return _Ret(std::forward<_Us>(__us)...); 9642: } 9642: }; 9642: 9642: template 9642: struct __is_tuple_like_impl> : true_type 9642: { }; 9642: 9642: 9642: 9642: template...>::value>::type> 9642: constexpr auto 9642: tuple_cat(_Tpls&&... __tpls) 9642: -> typename __tuple_cat_result<_Tpls...>::__type 9642: { 9642: typedef typename __tuple_cat_result<_Tpls...>::__type __ret; 9642: typedef typename __make_1st_indices<_Tpls...>::__type __idx; 9642: typedef __tuple_concater<__ret, __idx, _Tpls...> __concater; 9642: return __concater::_S_do(std::forward<_Tpls>(__tpls)...); 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: constexpr tuple<_Elements&...> 9642: tie(_Elements&... __args) noexcept 9642: { return tuple<_Elements&...>(__args...); } 9642: 9642: 9642: template 9642: 9642: inline 9642: 9642: 9642: typename enable_if<__and_<__is_swappable<_Elements>...>::value 9642: >::type 9642: 9642: 9642: 9642: swap(tuple<_Elements...>& __x, tuple<_Elements...>& __y) 9642: noexcept(noexcept(__x.swap(__y))) 9642: { __x.swap(__y); } 9642: # 2198 "/usr/include/c++/13/tuple" 3 9642: template 9642: 9642: typename enable_if...>::value>::type 9642: swap(tuple<_Elements...>&, tuple<_Elements...>&) = delete; 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct _Swallow_assign 9642: { 9642: template 9642: constexpr const _Swallow_assign& 9642: operator=(const _Tp&) const 9642: { return *this; } 9642: }; 9642: # 2233 "/usr/include/c++/13/tuple" 3 9642: inline constexpr _Swallow_assign ignore{}; 9642: 9642: 9642: template 9642: struct uses_allocator, _Alloc> : true_type { }; 9642: # 2248 "/usr/include/c++/13/tuple" 3 9642: template 9642: template 9642: 9642: inline 9642: pair<_T1, _T2>:: 9642: pair(piecewise_construct_t, 9642: tuple<_Args1...> __first, tuple<_Args2...> __second) 9642: : pair(__first, __second, 9642: typename _Build_index_tuple::__type(), 9642: typename _Build_index_tuple::__type()) 9642: { } 9642: 9642: template 9642: template 9642: inline 9642: pair<_T1, _T2>:: 9642: pair(tuple<_Args1...>& __tuple1, tuple<_Args2...>& __tuple2, 9642: _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>) 9642: : first(std::forward<_Args1>(std::get<_Indexes1>(__tuple1))...), 9642: second(std::forward<_Args2>(std::get<_Indexes2>(__tuple2))...) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template class _Trait, typename _Tp, typename _Tuple> 9642: inline constexpr bool __unpack_std_tuple = false; 9642: 9642: template class _Trait, typename _Tp, typename... _Up> 9642: inline constexpr bool __unpack_std_tuple<_Trait, _Tp, tuple<_Up...>> 9642: = _Trait<_Tp, _Up...>::value; 9642: 9642: template class _Trait, typename _Tp, typename... _Up> 9642: inline constexpr bool __unpack_std_tuple<_Trait, _Tp, tuple<_Up...>&> 9642: = _Trait<_Tp, _Up&...>::value; 9642: 9642: template class _Trait, typename _Tp, typename... _Up> 9642: inline constexpr bool __unpack_std_tuple<_Trait, _Tp, const tuple<_Up...>> 9642: = _Trait<_Tp, const _Up...>::value; 9642: 9642: template class _Trait, typename _Tp, typename... _Up> 9642: inline constexpr bool __unpack_std_tuple<_Trait, _Tp, const tuple<_Up...>&> 9642: = _Trait<_Tp, const _Up&...>::value; 9642: 9642: 9642: 9642: template 9642: constexpr decltype(auto) 9642: __apply_impl(_Fn&& __f, _Tuple&& __t, index_sequence<_Idx...>) 9642: { 9642: return std::__invoke(std::forward<_Fn>(__f), 9642: std::get<_Idx>(std::forward<_Tuple>(__t))...); 9642: } 9642: 9642: template 9642: constexpr decltype(auto) 9642: apply(_Fn&& __f, _Tuple&& __t) 9642: noexcept(__unpack_std_tuple) 9642: { 9642: using _Indices 9642: = make_index_sequence>>; 9642: return std::__apply_impl(std::forward<_Fn>(__f), 9642: std::forward<_Tuple>(__t), 9642: _Indices{}); 9642: } 9642: 9642: 9642: 9642: template 9642: constexpr _Tp 9642: __make_from_tuple_impl(_Tuple&& __t, index_sequence<_Idx...>) 9642: { return _Tp(std::get<_Idx>(std::forward<_Tuple>(__t))...); } 9642: 9642: template 9642: constexpr _Tp 9642: make_from_tuple(_Tuple&& __t) 9642: noexcept(__unpack_std_tuple) 9642: { 9642: constexpr size_t __n = tuple_size_v>; 9642: 9642: if constexpr (__n == 1) 9642: { 9642: using _Elt = decltype(std::get<0>(std::declval<_Tuple>())); 9642: static_assert(!__reference_constructs_from_temporary(_Tp, _Elt)); 9642: } 9642: 9642: return __make_from_tuple_impl<_Tp>(std::forward<_Tuple>(__t), 9642: make_index_sequence<__n>{}); 9642: } 9642: # 2358 "/usr/include/c++/13/tuple" 3 9642: 9642: } 9642: # 48 "/usr/include/c++/13/bits/memory_resource.h" 2 3 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: namespace pmr 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: class memory_resource 9642: { 9642: static constexpr size_t _S_max_align = alignof(max_align_t); 9642: 9642: public: 9642: memory_resource() = default; 9642: memory_resource(const memory_resource&) = default; 9642: virtual ~memory_resource(); 9642: 9642: memory_resource& operator=(const memory_resource&) = default; 9642: 9642: [[nodiscard]] 9642: void* 9642: allocate(size_t __bytes, size_t __alignment = _S_max_align) 9642: __attribute__((__returns_nonnull__,__alloc_size__(2),__alloc_align__(3))) 9642: { return ::operator new(__bytes, do_allocate(__bytes, __alignment)); } 9642: 9642: void 9642: deallocate(void* __p, size_t __bytes, size_t __alignment = _S_max_align) 9642: __attribute__((__nonnull__)) 9642: { return do_deallocate(__p, __bytes, __alignment); } 9642: 9642: [[nodiscard]] 9642: bool 9642: is_equal(const memory_resource& __other) const noexcept 9642: { return do_is_equal(__other); } 9642: 9642: private: 9642: virtual void* 9642: do_allocate(size_t __bytes, size_t __alignment) = 0; 9642: 9642: virtual void 9642: do_deallocate(void* __p, size_t __bytes, size_t __alignment) = 0; 9642: 9642: virtual bool 9642: do_is_equal(const memory_resource& __other) const noexcept = 0; 9642: }; 9642: 9642: [[nodiscard]] 9642: inline bool 9642: operator==(const memory_resource& __a, const memory_resource& __b) noexcept 9642: { return &__a == &__b || __a.is_equal(__b); } 9642: 9642: 9642: [[nodiscard]] 9642: inline bool 9642: operator!=(const memory_resource& __a, const memory_resource& __b) noexcept 9642: { return !(__a == __b); } 9642: # 119 "/usr/include/c++/13/bits/memory_resource.h" 3 9642: template 9642: class polymorphic_allocator 9642: { 9642: 9642: 9642: template 9642: struct __not_pair { using type = void; }; 9642: 9642: template 9642: struct __not_pair> { }; 9642: 9642: public: 9642: using value_type = _Tp; 9642: 9642: polymorphic_allocator() noexcept 9642: { 9642: extern memory_resource* get_default_resource() noexcept 9642: __attribute__((__returns_nonnull__)); 9642: _M_resource = get_default_resource(); 9642: } 9642: 9642: polymorphic_allocator(memory_resource* __r) noexcept 9642: __attribute__((__nonnull__)) 9642: : _M_resource(__r) 9642: { ; } 9642: 9642: polymorphic_allocator(const polymorphic_allocator& __other) = default; 9642: 9642: template 9642: polymorphic_allocator(const polymorphic_allocator<_Up>& __x) noexcept 9642: : _M_resource(__x.resource()) 9642: { } 9642: 9642: polymorphic_allocator& 9642: operator=(const polymorphic_allocator&) = delete; 9642: 9642: [[nodiscard]] 9642: _Tp* 9642: allocate(size_t __n) 9642: __attribute__((__returns_nonnull__)) 9642: { 9642: if ((__gnu_cxx::__int_traits::__max / sizeof(_Tp)) < __n) 9642: std::__throw_bad_array_new_length(); 9642: return static_cast<_Tp*>(_M_resource->allocate(__n * sizeof(_Tp), 9642: alignof(_Tp))); 9642: } 9642: 9642: void 9642: deallocate(_Tp* __p, size_t __n) noexcept 9642: __attribute__((__nonnull__)) 9642: { _M_resource->deallocate(__p, __n * sizeof(_Tp), alignof(_Tp)); } 9642: # 224 "/usr/include/c++/13/bits/memory_resource.h" 3 9642: template 9642: __attribute__((__nonnull__)) 9642: typename __not_pair<_Tp1>::type 9642: construct(_Tp1* __p, _Args&&... __args) 9642: { 9642: 9642: 9642: using __use_tag 9642: = std::__uses_alloc_t<_Tp1, polymorphic_allocator, _Args...>; 9642: if constexpr (is_base_of_v<__uses_alloc0, __use_tag>) 9642: ::new(__p) _Tp1(std::forward<_Args>(__args)...); 9642: else if constexpr (is_base_of_v<__uses_alloc1_, __use_tag>) 9642: ::new(__p) _Tp1(allocator_arg, *this, 9642: std::forward<_Args>(__args)...); 9642: else 9642: ::new(__p) _Tp1(std::forward<_Args>(__args)..., *this); 9642: } 9642: 9642: template 9642: __attribute__((__nonnull__)) 9642: void 9642: construct(pair<_Tp1, _Tp2>* __p, piecewise_construct_t, 9642: tuple<_Args1...> __x, tuple<_Args2...> __y) 9642: { 9642: auto __x_tag = 9642: __use_alloc<_Tp1, polymorphic_allocator, _Args1...>(*this); 9642: auto __y_tag = 9642: __use_alloc<_Tp2, polymorphic_allocator, _Args2...>(*this); 9642: index_sequence_for<_Args1...> __x_i; 9642: index_sequence_for<_Args2...> __y_i; 9642: 9642: ::new(__p) pair<_Tp1, _Tp2>(piecewise_construct, 9642: _S_construct_p(__x_tag, __x_i, __x), 9642: _S_construct_p(__y_tag, __y_i, __y)); 9642: } 9642: 9642: template 9642: __attribute__((__nonnull__)) 9642: void 9642: construct(pair<_Tp1, _Tp2>* __p) 9642: { this->construct(__p, piecewise_construct, tuple<>(), tuple<>()); } 9642: 9642: template 9642: __attribute__((__nonnull__)) 9642: void 9642: construct(pair<_Tp1, _Tp2>* __p, _Up&& __x, _Vp&& __y) 9642: { 9642: this->construct(__p, piecewise_construct, 9642: std::forward_as_tuple(std::forward<_Up>(__x)), 9642: std::forward_as_tuple(std::forward<_Vp>(__y))); 9642: } 9642: 9642: template 9642: __attribute__((__nonnull__)) 9642: void 9642: construct(pair<_Tp1, _Tp2>* __p, const std::pair<_Up, _Vp>& __pr) 9642: { 9642: this->construct(__p, piecewise_construct, 9642: std::forward_as_tuple(__pr.first), 9642: std::forward_as_tuple(__pr.second)); 9642: } 9642: 9642: template 9642: __attribute__((__nonnull__)) 9642: void 9642: construct(pair<_Tp1, _Tp2>* __p, pair<_Up, _Vp>&& __pr) 9642: { 9642: this->construct(__p, piecewise_construct, 9642: std::forward_as_tuple(std::forward<_Up>(__pr.first)), 9642: std::forward_as_tuple(std::forward<_Vp>(__pr.second))); 9642: } 9642: # 307 "/usr/include/c++/13/bits/memory_resource.h" 3 9642: template 9642: 9642: __attribute__((__nonnull__)) 9642: void 9642: destroy(_Up* __p) 9642: { __p->~_Up(); } 9642: 9642: polymorphic_allocator 9642: select_on_container_copy_construction() const noexcept 9642: { return polymorphic_allocator(); } 9642: 9642: memory_resource* 9642: resource() const noexcept 9642: __attribute__((__returns_nonnull__)) 9642: { return _M_resource; } 9642: 9642: 9642: 9642: [[nodiscard]] 9642: friend bool 9642: operator==(const polymorphic_allocator& __a, 9642: const polymorphic_allocator& __b) noexcept 9642: { return *__a.resource() == *__b.resource(); } 9642: 9642: 9642: [[nodiscard]] 9642: friend bool 9642: operator!=(const polymorphic_allocator& __a, 9642: const polymorphic_allocator& __b) noexcept 9642: { return !(__a == __b); } 9642: 9642: 9642: private: 9642: 9642: using __uses_alloc1_ = __uses_alloc1; 9642: using __uses_alloc2_ = __uses_alloc2; 9642: 9642: template 9642: static tuple<_Args&&...> 9642: _S_construct_p(__uses_alloc0, _Ind, tuple<_Args...>& __t) 9642: { return std::move(__t); } 9642: 9642: template 9642: static tuple 9642: _S_construct_p(__uses_alloc1_ __ua, index_sequence<_Ind...>, 9642: tuple<_Args...>& __t) 9642: { 9642: return { 9642: allocator_arg, *__ua._M_a, std::get<_Ind>(std::move(__t))... 9642: }; 9642: } 9642: 9642: template 9642: static tuple<_Args&&..., polymorphic_allocator> 9642: _S_construct_p(__uses_alloc2_ __ua, index_sequence<_Ind...>, 9642: tuple<_Args...>& __t) 9642: { return { std::get<_Ind>(std::move(__t))..., *__ua._M_a }; } 9642: 9642: 9642: memory_resource* _M_resource; 9642: }; 9642: 9642: template 9642: [[nodiscard]] 9642: inline bool 9642: operator==(const polymorphic_allocator<_Tp1>& __a, 9642: const polymorphic_allocator<_Tp2>& __b) noexcept 9642: { return *__a.resource() == *__b.resource(); } 9642: 9642: 9642: template 9642: [[nodiscard]] 9642: inline bool 9642: operator!=(const polymorphic_allocator<_Tp1>& __a, 9642: const polymorphic_allocator<_Tp2>& __b) noexcept 9642: { return !(__a == __b); } 9642: 9642: 9642: } 9642: 9642: template struct allocator_traits; 9642: 9642: 9642: template 9642: struct allocator_traits> 9642: { 9642: 9642: using allocator_type = pmr::polymorphic_allocator<_Tp>; 9642: 9642: 9642: using value_type = _Tp; 9642: 9642: 9642: using pointer = _Tp*; 9642: 9642: 9642: using const_pointer = const _Tp*; 9642: 9642: 9642: using void_pointer = void*; 9642: 9642: 9642: using const_void_pointer = const void*; 9642: 9642: 9642: using difference_type = std::ptrdiff_t; 9642: 9642: 9642: using size_type = std::size_t; 9642: 9642: 9642: 9642: 9642: 9642: using propagate_on_container_copy_assignment = false_type; 9642: using propagate_on_container_move_assignment = false_type; 9642: using propagate_on_container_swap = false_type; 9642: 9642: static allocator_type 9642: select_on_container_copy_construction(const allocator_type&) noexcept 9642: { return allocator_type(); } 9642: 9642: 9642: 9642: using is_always_equal = false_type; 9642: 9642: template 9642: using rebind_alloc = pmr::polymorphic_allocator<_Up>; 9642: 9642: template 9642: using rebind_traits = allocator_traits>; 9642: # 446 "/usr/include/c++/13/bits/memory_resource.h" 3 9642: [[nodiscard]] static pointer 9642: allocate(allocator_type& __a, size_type __n) 9642: { return __a.allocate(__n); } 9642: # 461 "/usr/include/c++/13/bits/memory_resource.h" 3 9642: [[nodiscard]] static pointer 9642: allocate(allocator_type& __a, size_type __n, const_void_pointer) 9642: { return __a.allocate(__n); } 9642: # 473 "/usr/include/c++/13/bits/memory_resource.h" 3 9642: static void 9642: deallocate(allocator_type& __a, pointer __p, size_type __n) 9642: { __a.deallocate(__p, __n); } 9642: # 488 "/usr/include/c++/13/bits/memory_resource.h" 3 9642: template 9642: static void 9642: construct(allocator_type& __a, _Up* __p, _Args&&... __args) 9642: { __a.construct(__p, std::forward<_Args>(__args)...); } 9642: # 500 "/usr/include/c++/13/bits/memory_resource.h" 3 9642: template 9642: static void 9642: destroy(allocator_type&, _Up* __p) 9642: noexcept(is_nothrow_destructible<_Up>::value) 9642: { __p->~_Up(); } 9642: 9642: 9642: 9642: 9642: 9642: static size_type 9642: max_size(const allocator_type&) noexcept 9642: { return size_t(-1) / sizeof(value_type); } 9642: }; 9642: 9642: 9642: } 9642: # 77 "/usr/include/c++/13/deque" 2 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: namespace pmr 9642: { 9642: template 9642: using deque = std::deque<_Tp, polymorphic_allocator<_Tp>>; 9642: } 9642: 9642: } 9642: # 13 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 9642: # 1 "/usr/include/c++/13/functional" 1 3 9642: # 46 "/usr/include/c++/13/functional" 3 9642: 9642: # 47 "/usr/include/c++/13/functional" 3 9642: # 55 "/usr/include/c++/13/functional" 3 9642: # 1 "/usr/include/c++/13/bits/functional_hash.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/functional_hash.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/functional_hash.h" 3 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/hash_bytes.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/hash_bytes.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/hash_bytes.h" 3 9642: 9642: 9642: 9642: namespace std 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_t 9642: _Hash_bytes(const void* __ptr, size_t __len, size_t __seed); 9642: 9642: 9642: 9642: 9642: 9642: size_t 9642: _Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed); 9642: 9642: 9642: } 9642: # 37 "/usr/include/c++/13/bits/functional_hash.h" 2 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 50 "/usr/include/c++/13/bits/functional_hash.h" 3 9642: template 9642: struct __hash_base 9642: { 9642: typedef _Result result_type [[__deprecated__]]; 9642: typedef _Arg argument_type [[__deprecated__]]; 9642: }; 9642: 9642: 9642: template 9642: struct hash; 9642: 9642: template 9642: struct __poison_hash 9642: { 9642: static constexpr bool __enable_hash_call = false; 9642: private: 9642: 9642: __poison_hash(__poison_hash&&); 9642: ~__poison_hash(); 9642: }; 9642: 9642: template 9642: struct __poison_hash<_Tp, __void_t()(declval<_Tp>()))>> 9642: { 9642: static constexpr bool __enable_hash_call = true; 9642: }; 9642: 9642: 9642: template::value> 9642: struct __hash_enum 9642: { 9642: private: 9642: 9642: __hash_enum(__hash_enum&&); 9642: ~__hash_enum(); 9642: }; 9642: 9642: 9642: template 9642: struct __hash_enum<_Tp, true> : public __hash_base 9642: { 9642: size_t 9642: operator()(_Tp __val) const noexcept 9642: { 9642: using __type = typename underlying_type<_Tp>::type; 9642: return hash<__type>{}(static_cast<__type>(__val)); 9642: } 9642: }; 9642: 9642: 9642: 9642: template 9642: struct hash : __hash_enum<_Tp> 9642: { }; 9642: 9642: 9642: template 9642: struct hash<_Tp*> : public __hash_base 9642: { 9642: size_t 9642: operator()(_Tp* __p) const noexcept 9642: { return reinterpret_cast(__p); } 9642: }; 9642: # 125 "/usr/include/c++/13/bits/functional_hash.h" 3 9642: template<> struct hash : public __hash_base { size_t operator()(bool __val) const noexcept { return static_cast(__val); } }; 9642: 9642: 9642: template<> struct hash : public __hash_base { size_t operator()(char __val) const noexcept { return static_cast(__val); } }; 9642: 9642: 9642: template<> struct hash : public __hash_base { size_t operator()(signed char __val) const noexcept { return static_cast(__val); } }; 9642: 9642: 9642: template<> struct hash : public __hash_base { size_t operator()(unsigned char __val) const noexcept { return static_cast(__val); } }; 9642: 9642: 9642: template<> struct hash : public __hash_base { size_t operator()(wchar_t __val) const noexcept { return static_cast(__val); } }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template<> struct hash : public __hash_base { size_t operator()(char16_t __val) const noexcept { return static_cast(__val); } }; 9642: 9642: 9642: template<> struct hash : public __hash_base { size_t operator()(char32_t __val) const noexcept { return static_cast(__val); } }; 9642: 9642: 9642: template<> struct hash : public __hash_base { size_t operator()(short __val) const noexcept { return static_cast(__val); } }; 9642: 9642: 9642: template<> struct hash : public __hash_base { size_t operator()(int __val) const noexcept { return static_cast(__val); } }; 9642: 9642: 9642: template<> struct hash : public __hash_base { size_t operator()(long __val) const noexcept { return static_cast(__val); } }; 9642: 9642: 9642: template<> struct hash : public __hash_base { size_t operator()(long long __val) const noexcept { return static_cast(__val); } }; 9642: 9642: 9642: template<> struct hash : public __hash_base { size_t operator()(unsigned short __val) const noexcept { return static_cast(__val); } }; 9642: 9642: 9642: template<> struct hash : public __hash_base { size_t operator()(unsigned int __val) const noexcept { return static_cast(__val); } }; 9642: 9642: 9642: template<> struct hash : public __hash_base { size_t operator()(unsigned long __val) const noexcept { return static_cast(__val); } }; 9642: 9642: 9642: template<> struct hash : public __hash_base { size_t operator()(unsigned long long __val) const noexcept { return static_cast(__val); } }; 9642: # 201 "/usr/include/c++/13/bits/functional_hash.h" 3 9642: struct _Hash_impl 9642: { 9642: static size_t 9642: hash(const void* __ptr, size_t __clength, 9642: size_t __seed = static_cast(0xc70f6907UL)) 9642: { return _Hash_bytes(__ptr, __clength, __seed); } 9642: 9642: template 9642: static size_t 9642: hash(const _Tp& __val) 9642: { return hash(&__val, sizeof(__val)); } 9642: 9642: template 9642: static size_t 9642: __hash_combine(const _Tp& __val, size_t __hash) 9642: { return hash(&__val, sizeof(__val), __hash); } 9642: }; 9642: 9642: 9642: struct _Fnv_hash_impl 9642: { 9642: static size_t 9642: hash(const void* __ptr, size_t __clength, 9642: size_t __seed = static_cast(2166136261UL)) 9642: { return _Fnv_hash_bytes(__ptr, __clength, __seed); } 9642: 9642: template 9642: static size_t 9642: hash(const _Tp& __val) 9642: { return hash(&__val, sizeof(__val)); } 9642: 9642: template 9642: static size_t 9642: __hash_combine(const _Tp& __val, size_t __hash) 9642: { return hash(&__val, sizeof(__val), __hash); } 9642: }; 9642: 9642: 9642: template<> 9642: struct hash : public __hash_base 9642: { 9642: size_t 9642: operator()(float __val) const noexcept 9642: { 9642: 9642: return __val != 0.0f ? std::_Hash_impl::hash(__val) : 0; 9642: } 9642: }; 9642: 9642: 9642: template<> 9642: struct hash : public __hash_base 9642: { 9642: size_t 9642: operator()(double __val) const noexcept 9642: { 9642: 9642: return __val != 0.0 ? std::_Hash_impl::hash(__val) : 0; 9642: } 9642: }; 9642: 9642: 9642: template<> 9642: struct hash 9642: : public __hash_base 9642: { 9642: __attribute__ ((__pure__)) size_t 9642: operator()(long double __val) const noexcept; 9642: }; 9642: 9642: 9642: template<> 9642: struct hash : public __hash_base 9642: { 9642: size_t 9642: operator()(nullptr_t) const noexcept 9642: { return 0; } 9642: }; 9642: # 294 "/usr/include/c++/13/bits/functional_hash.h" 3 9642: template 9642: struct __is_fast_hash : public std::true_type 9642: { }; 9642: 9642: template<> 9642: struct __is_fast_hash> : public std::false_type 9642: { }; 9642: 9642: 9642: } 9642: # 56 "/usr/include/c++/13/functional" 2 3 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/std_function.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/std_function.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/std_function.h" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/typeinfo" 1 3 9642: # 32 "/usr/include/c++/13/typeinfo" 3 9642: 9642: # 33 "/usr/include/c++/13/typeinfo" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: #pragma GCC visibility push(default) 9642: 9642: 9642: 9642: 9642: 9642: extern "C++" { 9642: 9642: namespace __cxxabiv1 9642: { 9642: class __class_type_info; 9642: } 9642: # 84 "/usr/include/c++/13/typeinfo" 3 9642: namespace std 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: class type_info 9642: { 9642: public: 9642: 9642: 9642: 9642: 9642: virtual ~type_info(); 9642: 9642: 9642: 9642: const char* name() const noexcept 9642: { return __name[0] == '*' ? __name + 1 : __name; } 9642: 9642: 9642: 9642: bool before(const type_info& __arg) const noexcept; 9642: 9642: 9642: bool operator==(const type_info& __arg) const noexcept; 9642: 9642: 9642: bool operator!=(const type_info& __arg) const noexcept 9642: { return !operator==(__arg); } 9642: 9642: 9642: 9642: size_t hash_code() const noexcept 9642: { 9642: 9642: return _Hash_bytes(name(), __builtin_strlen(name()), 9642: static_cast(0xc70f6907UL)); 9642: 9642: 9642: 9642: } 9642: 9642: 9642: 9642: virtual bool __is_pointer_p() const; 9642: 9642: 9642: virtual bool __is_function_p() const; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual bool __do_catch(const type_info *__thr_type, void **__thr_obj, 9642: unsigned __outer) const; 9642: 9642: 9642: virtual bool __do_upcast(const __cxxabiv1::__class_type_info *__target, 9642: void **__obj_ptr) const; 9642: 9642: protected: 9642: const char *__name; 9642: 9642: explicit type_info(const char *__n): __name(__n) { } 9642: 9642: private: 9642: 9642: 9642: type_info& operator=(const type_info&) = delete; 9642: type_info(const type_info&) = delete; 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool __equal(const type_info&) const noexcept; 9642: 9642: }; 9642: # 220 "/usr/include/c++/13/typeinfo" 3 9642: class bad_cast : public exception 9642: { 9642: public: 9642: bad_cast() noexcept { } 9642: 9642: 9642: 9642: virtual ~bad_cast() noexcept; 9642: 9642: 9642: virtual const char* what() const noexcept; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: class bad_typeid : public exception 9642: { 9642: public: 9642: bad_typeid () noexcept { } 9642: 9642: 9642: 9642: virtual ~bad_typeid() noexcept; 9642: 9642: 9642: virtual const char* what() const noexcept; 9642: }; 9642: } 9642: 9642: } 9642: 9642: #pragma GCC visibility pop 9642: # 41 "/usr/include/c++/13/bits/std_function.h" 2 3 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: class bad_function_call : public std::exception 9642: { 9642: public: 9642: virtual ~bad_function_call() noexcept; 9642: 9642: const char* what() const noexcept; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct __is_location_invariant 9642: : is_trivially_copyable<_Tp>::type 9642: { }; 9642: 9642: class _Undefined_class; 9642: 9642: union _Nocopy_types 9642: { 9642: void* _M_object; 9642: const void* _M_const_object; 9642: void (*_M_function_pointer)(); 9642: void (_Undefined_class::*_M_member_pointer)(); 9642: }; 9642: 9642: union [[gnu::may_alias]] _Any_data 9642: { 9642: void* _M_access() noexcept { return &_M_pod_data[0]; } 9642: const void* _M_access() const noexcept { return &_M_pod_data[0]; } 9642: 9642: template 9642: _Tp& 9642: _M_access() noexcept 9642: { return *static_cast<_Tp*>(_M_access()); } 9642: 9642: template 9642: const _Tp& 9642: _M_access() const noexcept 9642: { return *static_cast(_M_access()); } 9642: 9642: _Nocopy_types _M_unused; 9642: char _M_pod_data[sizeof(_Nocopy_types)]; 9642: }; 9642: 9642: enum _Manager_operation 9642: { 9642: __get_type_info, 9642: __get_functor_ptr, 9642: __clone_functor, 9642: __destroy_functor 9642: }; 9642: 9642: template 9642: class function; 9642: 9642: 9642: class _Function_base 9642: { 9642: public: 9642: static const size_t _M_max_size = sizeof(_Nocopy_types); 9642: static const size_t _M_max_align = __alignof__(_Nocopy_types); 9642: 9642: template 9642: class _Base_manager 9642: { 9642: protected: 9642: static const bool __stored_locally = 9642: (__is_location_invariant<_Functor>::value 9642: && sizeof(_Functor) <= _M_max_size 9642: && __alignof__(_Functor) <= _M_max_align 9642: && (_M_max_align % __alignof__(_Functor) == 0)); 9642: 9642: using _Local_storage = integral_constant; 9642: 9642: 9642: static _Functor* 9642: _M_get_pointer(const _Any_data& __source) noexcept 9642: { 9642: if constexpr (__stored_locally) 9642: { 9642: const _Functor& __f = __source._M_access<_Functor>(); 9642: return const_cast<_Functor*>(std::__addressof(__f)); 9642: } 9642: else 9642: return __source._M_access<_Functor*>(); 9642: } 9642: 9642: private: 9642: 9642: 9642: template 9642: static void 9642: _M_create(_Any_data& __dest, _Fn&& __f, true_type) 9642: { 9642: ::new (__dest._M_access()) _Functor(std::forward<_Fn>(__f)); 9642: } 9642: 9642: 9642: template 9642: static void 9642: _M_create(_Any_data& __dest, _Fn&& __f, false_type) 9642: { 9642: __dest._M_access<_Functor*>() 9642: = new _Functor(std::forward<_Fn>(__f)); 9642: } 9642: 9642: 9642: static void 9642: _M_destroy(_Any_data& __victim, true_type) 9642: { 9642: __victim._M_access<_Functor>().~_Functor(); 9642: } 9642: 9642: 9642: static void 9642: _M_destroy(_Any_data& __victim, false_type) 9642: { 9642: delete __victim._M_access<_Functor*>(); 9642: } 9642: 9642: public: 9642: static bool 9642: _M_manager(_Any_data& __dest, const _Any_data& __source, 9642: _Manager_operation __op) 9642: { 9642: switch (__op) 9642: { 9642: case __get_type_info: 9642: 9642: __dest._M_access() = &typeid(_Functor); 9642: 9642: 9642: 9642: break; 9642: 9642: case __get_functor_ptr: 9642: __dest._M_access<_Functor*>() = _M_get_pointer(__source); 9642: break; 9642: 9642: case __clone_functor: 9642: _M_init_functor(__dest, 9642: *const_cast(_M_get_pointer(__source))); 9642: break; 9642: 9642: case __destroy_functor: 9642: _M_destroy(__dest, _Local_storage()); 9642: break; 9642: } 9642: return false; 9642: } 9642: 9642: template 9642: static void 9642: _M_init_functor(_Any_data& __functor, _Fn&& __f) 9642: noexcept(__and_<_Local_storage, 9642: is_nothrow_constructible<_Functor, _Fn>>::value) 9642: { 9642: _M_create(__functor, std::forward<_Fn>(__f), _Local_storage()); 9642: } 9642: 9642: template 9642: static bool 9642: _M_not_empty_function(const function<_Signature>& __f) noexcept 9642: { return static_cast(__f); } 9642: 9642: template 9642: static bool 9642: _M_not_empty_function(_Tp* __fp) noexcept 9642: { return __fp != nullptr; } 9642: 9642: template 9642: static bool 9642: _M_not_empty_function(_Tp _Class::* __mp) noexcept 9642: { return __mp != nullptr; } 9642: 9642: template 9642: static bool 9642: _M_not_empty_function(const _Tp&) noexcept 9642: { return true; } 9642: }; 9642: 9642: _Function_base() = default; 9642: 9642: ~_Function_base() 9642: { 9642: if (_M_manager) 9642: _M_manager(_M_functor, _M_functor, __destroy_functor); 9642: } 9642: 9642: bool _M_empty() const { return !_M_manager; } 9642: 9642: using _Manager_type 9642: = bool (*)(_Any_data&, const _Any_data&, _Manager_operation); 9642: 9642: _Any_data _M_functor{}; 9642: _Manager_type _M_manager{}; 9642: }; 9642: 9642: template 9642: class _Function_handler; 9642: 9642: template 9642: class _Function_handler<_Res(_ArgTypes...), _Functor> 9642: : public _Function_base::_Base_manager<_Functor> 9642: { 9642: using _Base = _Function_base::_Base_manager<_Functor>; 9642: 9642: public: 9642: static bool 9642: _M_manager(_Any_data& __dest, const _Any_data& __source, 9642: _Manager_operation __op) 9642: { 9642: switch (__op) 9642: { 9642: 9642: case __get_type_info: 9642: __dest._M_access() = &typeid(_Functor); 9642: break; 9642: 9642: case __get_functor_ptr: 9642: __dest._M_access<_Functor*>() = _Base::_M_get_pointer(__source); 9642: break; 9642: 9642: default: 9642: _Base::_M_manager(__dest, __source, __op); 9642: } 9642: return false; 9642: } 9642: 9642: static _Res 9642: _M_invoke(const _Any_data& __functor, _ArgTypes&&... __args) 9642: { 9642: return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), 9642: std::forward<_ArgTypes>(__args)...); 9642: } 9642: 9642: template 9642: static constexpr bool 9642: _S_nothrow_init() noexcept 9642: { 9642: return __and_>::value; 9642: } 9642: }; 9642: 9642: 9642: template<> 9642: class _Function_handler 9642: { 9642: public: 9642: static bool 9642: _M_manager(_Any_data&, const _Any_data&, _Manager_operation) 9642: { return false; } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template::value> 9642: struct _Target_handler 9642: : _Function_handler<_Signature, typename remove_cv<_Functor>::type> 9642: { }; 9642: 9642: template 9642: struct _Target_handler<_Signature, _Functor, false> 9642: : _Function_handler 9642: { }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: class function<_Res(_ArgTypes...)> 9642: : public _Maybe_unary_or_binary_function<_Res, _ArgTypes...>, 9642: private _Function_base 9642: { 9642: 9642: 9642: template, function>::value> 9642: using _Decay_t 9642: = typename __enable_if_t>::type; 9642: 9642: template, 9642: typename _Res2 = __invoke_result<_DFunc&, _ArgTypes...>> 9642: struct _Callable 9642: : __is_invocable_impl<_Res2, _Res>::type 9642: { }; 9642: 9642: template 9642: using _Requires = __enable_if_t<_Cond::value, _Tp>; 9642: 9642: template 9642: using _Handler 9642: = _Function_handler<_Res(_ArgTypes...), __decay_t<_Functor>>; 9642: 9642: public: 9642: typedef _Res result_type; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: function() noexcept 9642: : _Function_base() { } 9642: 9642: 9642: 9642: 9642: 9642: function(nullptr_t) noexcept 9642: : _Function_base() { } 9642: # 386 "/usr/include/c++/13/bits/std_function.h" 3 9642: function(const function& __x) 9642: : _Function_base() 9642: { 9642: if (static_cast(__x)) 9642: { 9642: __x._M_manager(_M_functor, __x._M_functor, __clone_functor); 9642: _M_invoker = __x._M_invoker; 9642: _M_manager = __x._M_manager; 9642: } 9642: } 9642: # 404 "/usr/include/c++/13/bits/std_function.h" 3 9642: function(function&& __x) noexcept 9642: : _Function_base(), _M_invoker(__x._M_invoker) 9642: { 9642: if (static_cast(__x)) 9642: { 9642: _M_functor = __x._M_functor; 9642: _M_manager = __x._M_manager; 9642: __x._M_manager = nullptr; 9642: __x._M_invoker = nullptr; 9642: } 9642: } 9642: # 433 "/usr/include/c++/13/bits/std_function.h" 3 9642: template>> 9642: function(_Functor&& __f) 9642: noexcept(_Handler<_Functor>::template _S_nothrow_init<_Functor>()) 9642: : _Function_base() 9642: { 9642: static_assert(is_copy_constructible<__decay_t<_Functor>>::value, 9642: "std::function target must be copy-constructible"); 9642: static_assert(is_constructible<__decay_t<_Functor>, _Functor>::value, 9642: "std::function target must be constructible from the " 9642: "constructor argument"); 9642: 9642: using _My_handler = _Handler<_Functor>; 9642: 9642: if (_My_handler::_M_not_empty_function(__f)) 9642: { 9642: _My_handler::_M_init_functor(_M_functor, 9642: std::forward<_Functor>(__f)); 9642: _M_invoker = &_My_handler::_M_invoke; 9642: _M_manager = &_My_handler::_M_manager; 9642: } 9642: } 9642: # 468 "/usr/include/c++/13/bits/std_function.h" 3 9642: function& 9642: operator=(const function& __x) 9642: { 9642: function(__x).swap(*this); 9642: return *this; 9642: } 9642: # 486 "/usr/include/c++/13/bits/std_function.h" 3 9642: function& 9642: operator=(function&& __x) noexcept 9642: { 9642: function(std::move(__x)).swap(*this); 9642: return *this; 9642: } 9642: # 500 "/usr/include/c++/13/bits/std_function.h" 3 9642: function& 9642: operator=(nullptr_t) noexcept 9642: { 9642: if (_M_manager) 9642: { 9642: _M_manager(_M_functor, _M_functor, __destroy_functor); 9642: _M_manager = nullptr; 9642: _M_invoker = nullptr; 9642: } 9642: return *this; 9642: } 9642: # 529 "/usr/include/c++/13/bits/std_function.h" 3 9642: template 9642: _Requires<_Callable<_Functor>, function&> 9642: operator=(_Functor&& __f) 9642: noexcept(_Handler<_Functor>::template _S_nothrow_init<_Functor>()) 9642: { 9642: function(std::forward<_Functor>(__f)).swap(*this); 9642: return *this; 9642: } 9642: 9642: 9642: template 9642: function& 9642: operator=(reference_wrapper<_Functor> __f) noexcept 9642: { 9642: function(__f).swap(*this); 9642: return *this; 9642: } 9642: # 556 "/usr/include/c++/13/bits/std_function.h" 3 9642: void swap(function& __x) noexcept 9642: { 9642: std::swap(_M_functor, __x._M_functor); 9642: std::swap(_M_manager, __x._M_manager); 9642: std::swap(_M_invoker, __x._M_invoker); 9642: } 9642: # 573 "/usr/include/c++/13/bits/std_function.h" 3 9642: explicit operator bool() const noexcept 9642: { return !_M_empty(); } 9642: # 586 "/usr/include/c++/13/bits/std_function.h" 3 9642: _Res 9642: operator()(_ArgTypes... __args) const 9642: { 9642: if (_M_empty()) 9642: __throw_bad_function_call(); 9642: return _M_invoker(_M_functor, std::forward<_ArgTypes>(__args)...); 9642: } 9642: # 605 "/usr/include/c++/13/bits/std_function.h" 3 9642: const type_info& 9642: target_type() const noexcept 9642: { 9642: if (_M_manager) 9642: { 9642: _Any_data __typeinfo_result; 9642: _M_manager(__typeinfo_result, _M_functor, __get_type_info); 9642: if (auto __ti = __typeinfo_result._M_access()) 9642: return *__ti; 9642: } 9642: return typeid(void); 9642: } 9642: # 630 "/usr/include/c++/13/bits/std_function.h" 3 9642: template 9642: _Functor* 9642: target() noexcept 9642: { 9642: const function* __const_this = this; 9642: const _Functor* __func = __const_this->template target<_Functor>(); 9642: 9642: 9642: return *const_cast<_Functor**>(&__func); 9642: } 9642: 9642: template 9642: const _Functor* 9642: target() const noexcept 9642: { 9642: if constexpr (is_object<_Functor>::value) 9642: { 9642: 9642: 9642: using _Handler = _Target_handler<_Res(_ArgTypes...), _Functor>; 9642: 9642: if (_M_manager == &_Handler::_M_manager 9642: 9642: || (_M_manager && typeid(_Functor) == target_type()) 9642: 9642: ) 9642: { 9642: _Any_data __ptr; 9642: _M_manager(__ptr, _M_functor, __get_functor_ptr); 9642: return __ptr._M_access(); 9642: } 9642: } 9642: return nullptr; 9642: } 9642: 9642: 9642: private: 9642: using _Invoker_type = _Res (*)(const _Any_data&, _ArgTypes&&...); 9642: _Invoker_type _M_invoker = nullptr; 9642: }; 9642: 9642: 9642: template 9642: struct __function_guide_helper 9642: { }; 9642: 9642: template 9642: struct __function_guide_helper< 9642: _Res (_Tp::*) (_Args...) noexcept(_Nx) 9642: > 9642: { using type = _Res(_Args...); }; 9642: 9642: template 9642: struct __function_guide_helper< 9642: _Res (_Tp::*) (_Args...) & noexcept(_Nx) 9642: > 9642: { using type = _Res(_Args...); }; 9642: 9642: template 9642: struct __function_guide_helper< 9642: _Res (_Tp::*) (_Args...) const noexcept(_Nx) 9642: > 9642: { using type = _Res(_Args...); }; 9642: 9642: template 9642: struct __function_guide_helper< 9642: _Res (_Tp::*) (_Args...) const & noexcept(_Nx) 9642: > 9642: { using type = _Res(_Args...); }; 9642: # 715 "/usr/include/c++/13/bits/std_function.h" 3 9642: template 9642: using __function_guide_t = typename __function_guide_helper<_Op>::type; 9642: 9642: 9642: template 9642: function(_Res(*)(_ArgTypes...)) -> function<_Res(_ArgTypes...)>; 9642: 9642: template> 9642: function(_Fn) -> function<_Signature>; 9642: # 735 "/usr/include/c++/13/bits/std_function.h" 3 9642: template 9642: inline bool 9642: operator==(const function<_Res(_Args...)>& __f, nullptr_t) noexcept 9642: { return !static_cast(__f); } 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator==(nullptr_t, const function<_Res(_Args...)>& __f) noexcept 9642: { return !static_cast(__f); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const function<_Res(_Args...)>& __f, nullptr_t) noexcept 9642: { return static_cast(__f); } 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(nullptr_t, const function<_Res(_Args...)>& __f) noexcept 9642: { return static_cast(__f); } 9642: # 774 "/usr/include/c++/13/bits/std_function.h" 3 9642: template 9642: inline void 9642: swap(function<_Res(_Args...)>& __x, function<_Res(_Args...)>& __y) noexcept 9642: { __x.swap(__y); } 9642: 9642: 9642: namespace __detail::__variant 9642: { 9642: template struct _Never_valueless_alt; 9642: 9642: 9642: 9642: template 9642: struct _Never_valueless_alt> 9642: : std::true_type 9642: { }; 9642: } 9642: 9642: 9642: 9642: } 9642: # 60 "/usr/include/c++/13/functional" 2 3 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/unordered_map" 1 3 9642: # 32 "/usr/include/c++/13/unordered_map" 3 9642: 9642: # 33 "/usr/include/c++/13/unordered_map" 3 9642: # 41 "/usr/include/c++/13/unordered_map" 3 9642: # 1 "/usr/include/c++/13/bits/unordered_map.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: # 1 "/usr/include/c++/13/bits/hashtable.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/hashtable.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/hashtable.h" 3 9642: 9642: # 1 "/usr/include/c++/13/bits/hashtable_policy.h" 1 3 9642: # 38 "/usr/include/c++/13/bits/hashtable_policy.h" 3 9642: # 1 "/usr/include/c++/13/ext/aligned_buffer.h" 1 3 9642: # 32 "/usr/include/c++/13/ext/aligned_buffer.h" 3 9642: 9642: # 33 "/usr/include/c++/13/ext/aligned_buffer.h" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace __gnu_cxx 9642: { 9642: 9642: 9642: 9642: 9642: template 9642: struct __aligned_membuf 9642: { 9642: 9642: 9642: 9642: 9642: 9642: struct _Tp2 { _Tp _M_t; }; 9642: 9642: alignas(__alignof__(_Tp2::_M_t)) unsigned char _M_storage[sizeof(_Tp)]; 9642: 9642: __aligned_membuf() = default; 9642: 9642: 9642: __aligned_membuf(std::nullptr_t) { } 9642: 9642: void* 9642: _M_addr() noexcept 9642: { return static_cast(&_M_storage); } 9642: 9642: const void* 9642: _M_addr() const noexcept 9642: { return static_cast(&_M_storage); } 9642: 9642: _Tp* 9642: _M_ptr() noexcept 9642: { return static_cast<_Tp*>(_M_addr()); } 9642: 9642: const _Tp* 9642: _M_ptr() const noexcept 9642: { return static_cast(_M_addr()); } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct __aligned_buffer 9642: : std::aligned_storage 9642: { 9642: typename 9642: std::aligned_storage::type _M_storage; 9642: 9642: __aligned_buffer() = default; 9642: 9642: 9642: __aligned_buffer(std::nullptr_t) { } 9642: 9642: void* 9642: _M_addr() noexcept 9642: { 9642: return static_cast(&_M_storage); 9642: } 9642: 9642: const void* 9642: _M_addr() const noexcept 9642: { 9642: return static_cast(&_M_storage); 9642: } 9642: 9642: _Tp* 9642: _M_ptr() noexcept 9642: { return static_cast<_Tp*>(_M_addr()); } 9642: 9642: const _Tp* 9642: _M_ptr() const noexcept 9642: { return static_cast(_M_addr()); } 9642: }; 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: } 9642: # 39 "/usr/include/c++/13/bits/hashtable_policy.h" 2 3 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: template 9642: class _Hashtable; 9642: 9642: namespace __detail 9642: { 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Hashtable_base; 9642: 9642: 9642: 9642: template 9642: inline typename std::iterator_traits<_Iterator>::difference_type 9642: __distance_fw(_Iterator __first, _Iterator __last, 9642: std::input_iterator_tag) 9642: { return __first != __last ? 1 : 0; } 9642: 9642: template 9642: inline typename std::iterator_traits<_Iterator>::difference_type 9642: __distance_fw(_Iterator __first, _Iterator __last, 9642: std::forward_iterator_tag) 9642: { return std::distance(__first, __last); } 9642: 9642: template 9642: inline typename std::iterator_traits<_Iterator>::difference_type 9642: __distance_fw(_Iterator __first, _Iterator __last) 9642: { return __distance_fw(__first, __last, 9642: std::__iterator_category(__first)); } 9642: 9642: struct _Identity 9642: { 9642: template 9642: _Tp&& 9642: operator()(_Tp&& __x) const noexcept 9642: { return std::forward<_Tp>(__x); } 9642: }; 9642: 9642: struct _Select1st 9642: { 9642: template 9642: struct __1st_type; 9642: 9642: template 9642: struct __1st_type> 9642: { using type = _Tp; }; 9642: 9642: template 9642: struct __1st_type> 9642: { using type = const _Tp; }; 9642: 9642: template 9642: struct __1st_type<_Pair&> 9642: { using type = typename __1st_type<_Pair>::type&; }; 9642: 9642: template 9642: typename __1st_type<_Tp>::type&& 9642: operator()(_Tp&& __x) const noexcept 9642: { return std::forward<_Tp>(__x).first; } 9642: }; 9642: 9642: template 9642: struct _ConvertToValueType; 9642: 9642: template 9642: struct _ConvertToValueType<_Identity, _Value> 9642: { 9642: template 9642: constexpr _Kt&& 9642: operator()(_Kt&& __k) const noexcept 9642: { return std::forward<_Kt>(__k); } 9642: }; 9642: 9642: template 9642: struct _ConvertToValueType<_Select1st, _Value> 9642: { 9642: constexpr _Value&& 9642: operator()(_Value&& __x) const noexcept 9642: { return std::move(__x); } 9642: 9642: constexpr const _Value& 9642: operator()(const _Value& __x) const noexcept 9642: { return __x; } 9642: 9642: template 9642: constexpr std::pair<_Kt, _Val>&& 9642: operator()(std::pair<_Kt, _Val>&& __x) const noexcept 9642: { return std::move(__x); } 9642: 9642: template 9642: constexpr const std::pair<_Kt, _Val>& 9642: operator()(const std::pair<_Kt, _Val>& __x) const noexcept 9642: { return __x; } 9642: }; 9642: 9642: template 9642: struct _NodeBuilder; 9642: 9642: template<> 9642: struct _NodeBuilder<_Select1st> 9642: { 9642: template 9642: static auto 9642: _S_build(_Kt&& __k, _Arg&& __arg, const _NodeGenerator& __node_gen) 9642: -> typename _NodeGenerator::__node_type* 9642: { 9642: return __node_gen(std::forward<_Kt>(__k), 9642: std::forward<_Arg>(__arg).second); 9642: } 9642: }; 9642: 9642: template<> 9642: struct _NodeBuilder<_Identity> 9642: { 9642: template 9642: static auto 9642: _S_build(_Kt&& __k, _Arg&&, const _NodeGenerator& __node_gen) 9642: -> typename _NodeGenerator::__node_type* 9642: { return __node_gen(std::forward<_Kt>(__k)); } 9642: }; 9642: 9642: template 9642: struct _Hashtable_alloc; 9642: 9642: 9642: 9642: template 9642: struct _ReuseOrAllocNode 9642: { 9642: private: 9642: using __node_alloc_type = _NodeAlloc; 9642: using __hashtable_alloc = _Hashtable_alloc<__node_alloc_type>; 9642: using __node_alloc_traits = 9642: typename __hashtable_alloc::__node_alloc_traits; 9642: 9642: public: 9642: using __node_type = typename __hashtable_alloc::__node_type; 9642: 9642: _ReuseOrAllocNode(__node_type* __nodes, __hashtable_alloc& __h) 9642: : _M_nodes(__nodes), _M_h(__h) { } 9642: _ReuseOrAllocNode(const _ReuseOrAllocNode&) = delete; 9642: 9642: ~_ReuseOrAllocNode() 9642: { _M_h._M_deallocate_nodes(_M_nodes); } 9642: 9642: template 9642: __node_type* 9642: operator()(_Args&&... __args) const 9642: { 9642: if (_M_nodes) 9642: { 9642: __node_type* __node = _M_nodes; 9642: _M_nodes = _M_nodes->_M_next(); 9642: __node->_M_nxt = nullptr; 9642: auto& __a = _M_h._M_node_allocator(); 9642: __node_alloc_traits::destroy(__a, __node->_M_valptr()); 9642: try 9642: { 9642: __node_alloc_traits::construct(__a, __node->_M_valptr(), 9642: std::forward<_Args>(__args)...); 9642: } 9642: catch(...) 9642: { 9642: _M_h._M_deallocate_node_ptr(__node); 9642: throw; 9642: } 9642: return __node; 9642: } 9642: return _M_h._M_allocate_node(std::forward<_Args>(__args)...); 9642: } 9642: 9642: private: 9642: mutable __node_type* _M_nodes; 9642: __hashtable_alloc& _M_h; 9642: }; 9642: 9642: 9642: 9642: template 9642: struct _AllocNode 9642: { 9642: private: 9642: using __hashtable_alloc = _Hashtable_alloc<_NodeAlloc>; 9642: 9642: public: 9642: using __node_type = typename __hashtable_alloc::__node_type; 9642: 9642: _AllocNode(__hashtable_alloc& __h) 9642: : _M_h(__h) { } 9642: 9642: template 9642: __node_type* 9642: operator()(_Args&&... __args) const 9642: { return _M_h._M_allocate_node(std::forward<_Args>(__args)...); } 9642: 9642: private: 9642: __hashtable_alloc& _M_h; 9642: }; 9642: # 279 "/usr/include/c++/13/bits/hashtable_policy.h" 3 9642: template 9642: struct _Hashtable_traits 9642: { 9642: using __hash_cached = __bool_constant<_Cache_hash_code>; 9642: using __constant_iterators = __bool_constant<_Constant_iterators>; 9642: using __unique_keys = __bool_constant<_Unique_keys>; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Hashtable_hash_traits 9642: { 9642: static constexpr std::size_t 9642: __small_size_threshold() noexcept 9642: { return std::__is_fast_hash<_Hash>::value ? 0 : 20; } 9642: }; 9642: # 309 "/usr/include/c++/13/bits/hashtable_policy.h" 3 9642: struct _Hash_node_base 9642: { 9642: _Hash_node_base* _M_nxt; 9642: 9642: _Hash_node_base() noexcept : _M_nxt() { } 9642: 9642: _Hash_node_base(_Hash_node_base* __next) noexcept : _M_nxt(__next) { } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Hash_node_value_base 9642: { 9642: typedef _Value value_type; 9642: 9642: __gnu_cxx::__aligned_buffer<_Value> _M_storage; 9642: 9642: [[__gnu__::__always_inline__]] 9642: _Value* 9642: _M_valptr() noexcept 9642: { return _M_storage._M_ptr(); } 9642: 9642: [[__gnu__::__always_inline__]] 9642: const _Value* 9642: _M_valptr() const noexcept 9642: { return _M_storage._M_ptr(); } 9642: 9642: [[__gnu__::__always_inline__]] 9642: _Value& 9642: _M_v() noexcept 9642: { return *_M_valptr(); } 9642: 9642: [[__gnu__::__always_inline__]] 9642: const _Value& 9642: _M_v() const noexcept 9642: { return *_M_valptr(); } 9642: }; 9642: 9642: 9642: 9642: 9642: template 9642: struct _Hash_node_code_cache 9642: { }; 9642: 9642: 9642: 9642: 9642: template<> 9642: struct _Hash_node_code_cache 9642: { std::size_t _M_hash_code; }; 9642: 9642: template 9642: struct _Hash_node_value 9642: : _Hash_node_value_base<_Value> 9642: , _Hash_node_code_cache<_Cache_hash_code> 9642: { }; 9642: 9642: 9642: 9642: 9642: template 9642: struct _Hash_node 9642: : _Hash_node_base 9642: , _Hash_node_value<_Value, _Cache_hash_code> 9642: { 9642: _Hash_node* 9642: _M_next() const noexcept 9642: { return static_cast<_Hash_node*>(this->_M_nxt); } 9642: }; 9642: 9642: 9642: template 9642: struct _Node_iterator_base 9642: { 9642: using __node_type = _Hash_node<_Value, _Cache_hash_code>; 9642: 9642: __node_type* _M_cur; 9642: 9642: _Node_iterator_base() : _M_cur(nullptr) { } 9642: _Node_iterator_base(__node_type* __p) noexcept 9642: : _M_cur(__p) { } 9642: 9642: void 9642: _M_incr() noexcept 9642: { _M_cur = _M_cur->_M_next(); } 9642: 9642: friend bool 9642: operator==(const _Node_iterator_base& __x, const _Node_iterator_base& __y) 9642: noexcept 9642: { return __x._M_cur == __y._M_cur; } 9642: 9642: 9642: friend bool 9642: operator!=(const _Node_iterator_base& __x, const _Node_iterator_base& __y) 9642: noexcept 9642: { return __x._M_cur != __y._M_cur; } 9642: 9642: }; 9642: 9642: 9642: template 9642: struct _Node_iterator 9642: : public _Node_iterator_base<_Value, __cache> 9642: { 9642: private: 9642: using __base_type = _Node_iterator_base<_Value, __cache>; 9642: using __node_type = typename __base_type::__node_type; 9642: 9642: public: 9642: using value_type = _Value; 9642: using difference_type = std::ptrdiff_t; 9642: using iterator_category = std::forward_iterator_tag; 9642: 9642: using pointer = __conditional_t<__constant_iterators, 9642: const value_type*, value_type*>; 9642: 9642: using reference = __conditional_t<__constant_iterators, 9642: const value_type&, value_type&>; 9642: 9642: _Node_iterator() = default; 9642: 9642: explicit 9642: _Node_iterator(__node_type* __p) noexcept 9642: : __base_type(__p) { } 9642: 9642: reference 9642: operator*() const noexcept 9642: { return this->_M_cur->_M_v(); } 9642: 9642: pointer 9642: operator->() const noexcept 9642: { return this->_M_cur->_M_valptr(); } 9642: 9642: _Node_iterator& 9642: operator++() noexcept 9642: { 9642: this->_M_incr(); 9642: return *this; 9642: } 9642: 9642: _Node_iterator 9642: operator++(int) noexcept 9642: { 9642: _Node_iterator __tmp(*this); 9642: this->_M_incr(); 9642: return __tmp; 9642: } 9642: }; 9642: 9642: 9642: template 9642: struct _Node_const_iterator 9642: : public _Node_iterator_base<_Value, __cache> 9642: { 9642: private: 9642: using __base_type = _Node_iterator_base<_Value, __cache>; 9642: using __node_type = typename __base_type::__node_type; 9642: 9642: public: 9642: typedef _Value value_type; 9642: typedef std::ptrdiff_t difference_type; 9642: typedef std::forward_iterator_tag iterator_category; 9642: 9642: typedef const value_type* pointer; 9642: typedef const value_type& reference; 9642: 9642: _Node_const_iterator() = default; 9642: 9642: explicit 9642: _Node_const_iterator(__node_type* __p) noexcept 9642: : __base_type(__p) { } 9642: 9642: _Node_const_iterator(const _Node_iterator<_Value, __constant_iterators, 9642: __cache>& __x) noexcept 9642: : __base_type(__x._M_cur) { } 9642: 9642: reference 9642: operator*() const noexcept 9642: { return this->_M_cur->_M_v(); } 9642: 9642: pointer 9642: operator->() const noexcept 9642: { return this->_M_cur->_M_valptr(); } 9642: 9642: _Node_const_iterator& 9642: operator++() noexcept 9642: { 9642: this->_M_incr(); 9642: return *this; 9642: } 9642: 9642: _Node_const_iterator 9642: operator++(int) noexcept 9642: { 9642: _Node_const_iterator __tmp(*this); 9642: this->_M_incr(); 9642: return __tmp; 9642: } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct _Mod_range_hashing 9642: { 9642: typedef std::size_t first_argument_type; 9642: typedef std::size_t second_argument_type; 9642: typedef std::size_t result_type; 9642: 9642: result_type 9642: operator()(first_argument_type __num, 9642: second_argument_type __den) const noexcept 9642: { return __num % __den; } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct _Default_ranged_hash { }; 9642: 9642: 9642: 9642: struct _Prime_rehash_policy 9642: { 9642: using __has_load_factor = true_type; 9642: 9642: _Prime_rehash_policy(float __z = 1.0) noexcept 9642: : _M_max_load_factor(__z), _M_next_resize(0) { } 9642: 9642: float 9642: max_load_factor() const noexcept 9642: { return _M_max_load_factor; } 9642: 9642: 9642: std::size_t 9642: _M_next_bkt(std::size_t __n) const; 9642: 9642: 9642: std::size_t 9642: _M_bkt_for_elements(std::size_t __n) const 9642: { return __builtin_ceil(__n / (double)_M_max_load_factor); } 9642: 9642: 9642: 9642: 9642: 9642: std::pair 9642: _M_need_rehash(std::size_t __n_bkt, std::size_t __n_elt, 9642: std::size_t __n_ins) const; 9642: 9642: typedef std::size_t _State; 9642: 9642: _State 9642: _M_state() const 9642: { return _M_next_resize; } 9642: 9642: void 9642: _M_reset() noexcept 9642: { _M_next_resize = 0; } 9642: 9642: void 9642: _M_reset(_State __state) 9642: { _M_next_resize = __state; } 9642: 9642: static const std::size_t _S_growth_factor = 2; 9642: 9642: float _M_max_load_factor; 9642: mutable std::size_t _M_next_resize; 9642: }; 9642: 9642: 9642: struct _Mask_range_hashing 9642: { 9642: typedef std::size_t first_argument_type; 9642: typedef std::size_t second_argument_type; 9642: typedef std::size_t result_type; 9642: 9642: result_type 9642: operator()(first_argument_type __num, 9642: second_argument_type __den) const noexcept 9642: { return __num & (__den - 1); } 9642: }; 9642: 9642: 9642: inline std::size_t 9642: __clp2(std::size_t __n) noexcept 9642: { 9642: using __gnu_cxx::__int_traits; 9642: 9642: if (__n < 2) 9642: return __n; 9642: const unsigned __lz = sizeof(size_t) > sizeof(long) 9642: ? __builtin_clzll(__n - 1ull) 9642: : __builtin_clzl(__n - 1ul); 9642: 9642: return (size_t(1) << (__int_traits::__digits - __lz - 1)) << 1; 9642: } 9642: 9642: 9642: 9642: struct _Power2_rehash_policy 9642: { 9642: using __has_load_factor = true_type; 9642: 9642: _Power2_rehash_policy(float __z = 1.0) noexcept 9642: : _M_max_load_factor(__z), _M_next_resize(0) { } 9642: 9642: float 9642: max_load_factor() const noexcept 9642: { return _M_max_load_factor; } 9642: 9642: 9642: 9642: std::size_t 9642: _M_next_bkt(std::size_t __n) noexcept 9642: { 9642: if (__n == 0) 9642: 9642: 9642: 9642: return 1; 9642: 9642: const auto __max_width = std::min(sizeof(size_t), 8); 9642: const auto __max_bkt = size_t(1) << (__max_width * 8 - 1); 9642: std::size_t __res = __clp2(__n); 9642: 9642: if (__res == 0) 9642: __res = __max_bkt; 9642: else if (__res == 1) 9642: 9642: 9642: 9642: __res = 2; 9642: 9642: if (__res == __max_bkt) 9642: 9642: 9642: 9642: _M_next_resize = size_t(-1); 9642: else 9642: _M_next_resize 9642: = __builtin_floor(__res * (double)_M_max_load_factor); 9642: 9642: return __res; 9642: } 9642: 9642: 9642: std::size_t 9642: _M_bkt_for_elements(std::size_t __n) const noexcept 9642: { return __builtin_ceil(__n / (double)_M_max_load_factor); } 9642: 9642: 9642: 9642: 9642: 9642: std::pair 9642: _M_need_rehash(std::size_t __n_bkt, std::size_t __n_elt, 9642: std::size_t __n_ins) noexcept 9642: { 9642: if (__n_elt + __n_ins > _M_next_resize) 9642: { 9642: 9642: 9642: 9642: double __min_bkts 9642: = std::max(__n_elt + __n_ins, _M_next_resize ? 0 : 11) 9642: / (double)_M_max_load_factor; 9642: if (__min_bkts >= __n_bkt) 9642: return { true, 9642: _M_next_bkt(std::max(__builtin_floor(__min_bkts) + 1, 9642: __n_bkt * _S_growth_factor)) }; 9642: 9642: _M_next_resize 9642: = __builtin_floor(__n_bkt * (double)_M_max_load_factor); 9642: return { false, 0 }; 9642: } 9642: else 9642: return { false, 0 }; 9642: } 9642: 9642: typedef std::size_t _State; 9642: 9642: _State 9642: _M_state() const noexcept 9642: { return _M_next_resize; } 9642: 9642: void 9642: _M_reset() noexcept 9642: { _M_next_resize = 0; } 9642: 9642: void 9642: _M_reset(_State __state) noexcept 9642: { _M_next_resize = __state; } 9642: 9642: static const std::size_t _S_growth_factor = 2; 9642: 9642: float _M_max_load_factor; 9642: std::size_t _M_next_resize; 9642: }; 9642: # 736 "/usr/include/c++/13/bits/hashtable_policy.h" 3 9642: template 9642: struct _Map_base { }; 9642: 9642: 9642: template 9642: struct _Map_base<_Key, pair, _Alloc, _Select1st, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, false> 9642: { 9642: using mapped_type = _Val; 9642: }; 9642: 9642: 9642: template 9642: struct _Map_base<_Key, pair, _Alloc, _Select1st, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true> 9642: { 9642: private: 9642: using __hashtable_base = _Hashtable_base<_Key, pair, 9642: _Select1st, _Equal, _Hash, 9642: _RangeHash, _Unused, 9642: _Traits>; 9642: 9642: using __hashtable = _Hashtable<_Key, pair, _Alloc, 9642: _Select1st, _Equal, _Hash, _RangeHash, 9642: _Unused, _RehashPolicy, _Traits>; 9642: 9642: using __hash_code = typename __hashtable_base::__hash_code; 9642: 9642: public: 9642: using key_type = typename __hashtable_base::key_type; 9642: using mapped_type = _Val; 9642: 9642: mapped_type& 9642: operator[](const key_type& __k); 9642: 9642: mapped_type& 9642: operator[](key_type&& __k); 9642: 9642: 9642: 9642: mapped_type& 9642: at(const key_type& __k) 9642: { 9642: auto __ite = static_cast<__hashtable*>(this)->find(__k); 9642: if (!__ite._M_cur) 9642: __throw_out_of_range(("unordered_map::at")); 9642: return __ite->second; 9642: } 9642: 9642: const mapped_type& 9642: at(const key_type& __k) const 9642: { 9642: auto __ite = static_cast(this)->find(__k); 9642: if (!__ite._M_cur) 9642: __throw_out_of_range(("unordered_map::at")); 9642: return __ite->second; 9642: } 9642: }; 9642: 9642: template 9642: auto 9642: _Map_base<_Key, pair, _Alloc, _Select1st, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true>:: 9642: operator[](const key_type& __k) 9642: -> mapped_type& 9642: { 9642: __hashtable* __h = static_cast<__hashtable*>(this); 9642: __hash_code __code = __h->_M_hash_code(__k); 9642: std::size_t __bkt = __h->_M_bucket_index(__code); 9642: if (auto __node = __h->_M_find_node(__bkt, __k, __code)) 9642: return __node->_M_v().second; 9642: 9642: typename __hashtable::_Scoped_node __node { 9642: __h, 9642: std::piecewise_construct, 9642: std::tuple(__k), 9642: std::tuple<>() 9642: }; 9642: auto __pos 9642: = __h->_M_insert_unique_node(__bkt, __code, __node._M_node); 9642: __node._M_node = nullptr; 9642: return __pos->second; 9642: } 9642: 9642: template 9642: auto 9642: _Map_base<_Key, pair, _Alloc, _Select1st, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true>:: 9642: operator[](key_type&& __k) 9642: -> mapped_type& 9642: { 9642: __hashtable* __h = static_cast<__hashtable*>(this); 9642: __hash_code __code = __h->_M_hash_code(__k); 9642: std::size_t __bkt = __h->_M_bucket_index(__code); 9642: if (auto __node = __h->_M_find_node(__bkt, __k, __code)) 9642: return __node->_M_v().second; 9642: 9642: typename __hashtable::_Scoped_node __node { 9642: __h, 9642: std::piecewise_construct, 9642: std::forward_as_tuple(std::move(__k)), 9642: std::tuple<>() 9642: }; 9642: auto __pos 9642: = __h->_M_insert_unique_node(__bkt, __code, __node._M_node); 9642: __node._M_node = nullptr; 9642: return __pos->second; 9642: } 9642: 9642: 9642: template 9642: struct _Map_base, 9642: _Alloc, _Select1st, _Equal, _Hash, 9642: _RangeHash, _Unused, _RehashPolicy, _Traits, __uniq> 9642: : _Map_base<_Key, pair, _Alloc, _Select1st, _Equal, _Hash, 9642: _RangeHash, _Unused, _RehashPolicy, _Traits, __uniq> 9642: { }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Insert_base 9642: { 9642: protected: 9642: using __hashtable_base = _Hashtable_base<_Key, _Value, _ExtractKey, 9642: _Equal, _Hash, _RangeHash, 9642: _Unused, _Traits>; 9642: 9642: using __hashtable = _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, 9642: _Unused, _RehashPolicy, _Traits>; 9642: 9642: using __hash_cached = typename _Traits::__hash_cached; 9642: using __constant_iterators = typename _Traits::__constant_iterators; 9642: 9642: using __hashtable_alloc = _Hashtable_alloc< 9642: __alloc_rebind<_Alloc, _Hash_node<_Value, 9642: __hash_cached::value>>>; 9642: 9642: using value_type = typename __hashtable_base::value_type; 9642: using size_type = typename __hashtable_base::size_type; 9642: 9642: using __unique_keys = typename _Traits::__unique_keys; 9642: using __node_alloc_type = typename __hashtable_alloc::__node_alloc_type; 9642: using __node_gen_type = _AllocNode<__node_alloc_type>; 9642: 9642: __hashtable& 9642: _M_conjure_hashtable() 9642: { return *(static_cast<__hashtable*>(this)); } 9642: 9642: template 9642: void 9642: _M_insert_range(_InputIterator __first, _InputIterator __last, 9642: const _NodeGetter&, true_type __uks); 9642: 9642: template 9642: void 9642: _M_insert_range(_InputIterator __first, _InputIterator __last, 9642: const _NodeGetter&, false_type __uks); 9642: 9642: public: 9642: using iterator = _Node_iterator<_Value, __constant_iterators::value, 9642: __hash_cached::value>; 9642: 9642: using const_iterator = _Node_const_iterator<_Value, 9642: __constant_iterators::value, 9642: __hash_cached::value>; 9642: 9642: using __ireturn_type = __conditional_t<__unique_keys::value, 9642: std::pair, 9642: iterator>; 9642: 9642: __ireturn_type 9642: insert(const value_type& __v) 9642: { 9642: __hashtable& __h = _M_conjure_hashtable(); 9642: __node_gen_type __node_gen(__h); 9642: return __h._M_insert(__v, __node_gen, __unique_keys{}); 9642: } 9642: 9642: iterator 9642: insert(const_iterator __hint, const value_type& __v) 9642: { 9642: __hashtable& __h = _M_conjure_hashtable(); 9642: __node_gen_type __node_gen(__h); 9642: return __h._M_insert(__hint, __v, __node_gen, __unique_keys{}); 9642: } 9642: 9642: template 9642: std::pair 9642: try_emplace(const_iterator, _KType&& __k, _Args&&... __args) 9642: { 9642: __hashtable& __h = _M_conjure_hashtable(); 9642: auto __code = __h._M_hash_code(__k); 9642: std::size_t __bkt = __h._M_bucket_index(__code); 9642: if (auto __node = __h._M_find_node(__bkt, __k, __code)) 9642: return { iterator(__node), false }; 9642: 9642: typename __hashtable::_Scoped_node __node { 9642: &__h, 9642: std::piecewise_construct, 9642: std::forward_as_tuple(std::forward<_KType>(__k)), 9642: std::forward_as_tuple(std::forward<_Args>(__args)...) 9642: }; 9642: auto __it 9642: = __h._M_insert_unique_node(__bkt, __code, __node._M_node); 9642: __node._M_node = nullptr; 9642: return { __it, true }; 9642: } 9642: 9642: void 9642: insert(initializer_list __l) 9642: { this->insert(__l.begin(), __l.end()); } 9642: 9642: template 9642: void 9642: insert(_InputIterator __first, _InputIterator __last) 9642: { 9642: __hashtable& __h = _M_conjure_hashtable(); 9642: __node_gen_type __node_gen(__h); 9642: return _M_insert_range(__first, __last, __node_gen, __unique_keys{}); 9642: } 9642: }; 9642: 9642: template 9642: template 9642: void 9642: _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, 9642: _RehashPolicy, _Traits>:: 9642: _M_insert_range(_InputIterator __first, _InputIterator __last, 9642: const _NodeGetter& __node_gen, true_type __uks) 9642: { 9642: __hashtable& __h = _M_conjure_hashtable(); 9642: for (; __first != __last; ++__first) 9642: __h._M_insert(*__first, __node_gen, __uks); 9642: } 9642: 9642: template 9642: template 9642: void 9642: _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, 9642: _RehashPolicy, _Traits>:: 9642: _M_insert_range(_InputIterator __first, _InputIterator __last, 9642: const _NodeGetter& __node_gen, false_type __uks) 9642: { 9642: using __rehash_type = typename __hashtable::__rehash_type; 9642: using __rehash_state = typename __hashtable::__rehash_state; 9642: using pair_type = std::pair; 9642: 9642: size_type __n_elt = __detail::__distance_fw(__first, __last); 9642: if (__n_elt == 0) 9642: return; 9642: 9642: __hashtable& __h = _M_conjure_hashtable(); 9642: __rehash_type& __rehash = __h._M_rehash_policy; 9642: const __rehash_state& __saved_state = __rehash._M_state(); 9642: pair_type __do_rehash = __rehash._M_need_rehash(__h._M_bucket_count, 9642: __h._M_element_count, 9642: __n_elt); 9642: 9642: if (__do_rehash.first) 9642: __h._M_rehash(__do_rehash.second, __saved_state); 9642: 9642: for (; __first != __last; ++__first) 9642: __h._M_insert(*__first, __node_gen, __uks); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Insert; 9642: 9642: 9642: template 9642: struct _Insert<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, 9642: _RehashPolicy, _Traits, true> 9642: : public _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits> 9642: { 9642: using __base_type = _Insert_base<_Key, _Value, _Alloc, _ExtractKey, 9642: _Equal, _Hash, _RangeHash, _Unused, 9642: _RehashPolicy, _Traits>; 9642: 9642: using value_type = typename __base_type::value_type; 9642: using iterator = typename __base_type::iterator; 9642: using const_iterator = typename __base_type::const_iterator; 9642: using __ireturn_type = typename __base_type::__ireturn_type; 9642: 9642: using __unique_keys = typename __base_type::__unique_keys; 9642: using __hashtable = typename __base_type::__hashtable; 9642: using __node_gen_type = typename __base_type::__node_gen_type; 9642: 9642: using __base_type::insert; 9642: 9642: __ireturn_type 9642: insert(value_type&& __v) 9642: { 9642: __hashtable& __h = this->_M_conjure_hashtable(); 9642: __node_gen_type __node_gen(__h); 9642: return __h._M_insert(std::move(__v), __node_gen, __unique_keys{}); 9642: } 9642: 9642: iterator 9642: insert(const_iterator __hint, value_type&& __v) 9642: { 9642: __hashtable& __h = this->_M_conjure_hashtable(); 9642: __node_gen_type __node_gen(__h); 9642: return __h._M_insert(__hint, std::move(__v), __node_gen, 9642: __unique_keys{}); 9642: } 9642: }; 9642: 9642: 9642: template 9642: struct _Insert<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, false> 9642: : public _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits> 9642: { 9642: using __base_type = _Insert_base<_Key, _Value, _Alloc, _ExtractKey, 9642: _Equal, _Hash, _RangeHash, _Unused, 9642: _RehashPolicy, _Traits>; 9642: using value_type = typename __base_type::value_type; 9642: using iterator = typename __base_type::iterator; 9642: using const_iterator = typename __base_type::const_iterator; 9642: 9642: using __unique_keys = typename __base_type::__unique_keys; 9642: using __hashtable = typename __base_type::__hashtable; 9642: using __ireturn_type = typename __base_type::__ireturn_type; 9642: 9642: using __base_type::insert; 9642: 9642: template 9642: using __is_cons = std::is_constructible; 9642: 9642: template 9642: using _IFcons = std::enable_if<__is_cons<_Pair>::value>; 9642: 9642: template 9642: using _IFconsp = typename _IFcons<_Pair>::type; 9642: 9642: template> 9642: __ireturn_type 9642: insert(_Pair&& __v) 9642: { 9642: __hashtable& __h = this->_M_conjure_hashtable(); 9642: return __h._M_emplace(__unique_keys{}, std::forward<_Pair>(__v)); 9642: } 9642: 9642: template> 9642: iterator 9642: insert(const_iterator __hint, _Pair&& __v) 9642: { 9642: __hashtable& __h = this->_M_conjure_hashtable(); 9642: return __h._M_emplace(__hint, __unique_keys{}, 9642: std::forward<_Pair>(__v)); 9642: } 9642: }; 9642: 9642: template 9642: using __has_load_factor = typename _Policy::__has_load_factor; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template> 9642: struct _Rehash_base; 9642: 9642: 9642: template 9642: struct _Rehash_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, 9642: false_type > 9642: { 9642: }; 9642: 9642: 9642: template 9642: struct _Rehash_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, 9642: true_type > 9642: { 9642: private: 9642: using __hashtable = _Hashtable<_Key, _Value, _Alloc, _ExtractKey, 9642: _Equal, _Hash, _RangeHash, _Unused, 9642: _RehashPolicy, _Traits>; 9642: 9642: public: 9642: float 9642: max_load_factor() const noexcept 9642: { 9642: const __hashtable* __this = static_cast(this); 9642: return __this->__rehash_policy().max_load_factor(); 9642: } 9642: 9642: void 9642: max_load_factor(float __z) 9642: { 9642: __hashtable* __this = static_cast<__hashtable*>(this); 9642: __this->__rehash_policy(_RehashPolicy(__z)); 9642: } 9642: 9642: void 9642: reserve(std::size_t __n) 9642: { 9642: __hashtable* __this = static_cast<__hashtable*>(this); 9642: __this->rehash(__this->__rehash_policy()._M_bkt_for_elements(__n)); 9642: } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Hashtable_ebo_helper; 9642: 9642: 9642: template 9642: struct _Hashtable_ebo_helper<_Nm, _Tp, true> 9642: : private _Tp 9642: { 9642: _Hashtable_ebo_helper() noexcept(noexcept(_Tp())) : _Tp() { } 9642: 9642: template 9642: _Hashtable_ebo_helper(_OtherTp&& __tp) 9642: : _Tp(std::forward<_OtherTp>(__tp)) 9642: { } 9642: 9642: const _Tp& _M_cget() const { return static_cast(*this); } 9642: _Tp& _M_get() { return static_cast<_Tp&>(*this); } 9642: }; 9642: 9642: 9642: template 9642: struct _Hashtable_ebo_helper<_Nm, _Tp, false> 9642: { 9642: _Hashtable_ebo_helper() = default; 9642: 9642: template 9642: _Hashtable_ebo_helper(_OtherTp&& __tp) 9642: : _M_tp(std::forward<_OtherTp>(__tp)) 9642: { } 9642: 9642: const _Tp& _M_cget() const { return _M_tp; } 9642: _Tp& _M_get() { return _M_tp; } 9642: 9642: private: 9642: _Tp _M_tp{}; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Local_iterator_base; 9642: # 1276 "/usr/include/c++/13/bits/hashtable_policy.h" 3 9642: template 9642: struct _Hash_code_base 9642: : private _Hashtable_ebo_helper<1, _Hash> 9642: { 9642: private: 9642: using __ebo_hash = _Hashtable_ebo_helper<1, _Hash>; 9642: 9642: 9642: friend struct _Local_iterator_base<_Key, _Value, _ExtractKey, 9642: _Hash, _RangeHash, _Unused, false>; 9642: 9642: public: 9642: typedef _Hash hasher; 9642: 9642: hasher 9642: hash_function() const 9642: { return _M_hash(); } 9642: 9642: protected: 9642: typedef std::size_t __hash_code; 9642: 9642: 9642: 9642: _Hash_code_base() = default; 9642: 9642: _Hash_code_base(const _Hash& __hash) : __ebo_hash(__hash) { } 9642: 9642: __hash_code 9642: _M_hash_code(const _Key& __k) const 9642: { 9642: static_assert(__is_invocable{}, 9642: "hash function must be invocable with an argument of key type"); 9642: return _M_hash()(__k); 9642: } 9642: 9642: template 9642: __hash_code 9642: _M_hash_code_tr(const _Kt& __k) const 9642: { 9642: static_assert(__is_invocable{}, 9642: "hash function must be invocable with an argument of key type"); 9642: return _M_hash()(__k); 9642: } 9642: 9642: __hash_code 9642: _M_hash_code(const _Hash_node_value<_Value, false>& __n) const 9642: { return _M_hash_code(_ExtractKey{}(__n._M_v())); } 9642: 9642: __hash_code 9642: _M_hash_code(const _Hash_node_value<_Value, true>& __n) const 9642: { return __n._M_hash_code; } 9642: 9642: std::size_t 9642: _M_bucket_index(__hash_code __c, std::size_t __bkt_count) const 9642: { return _RangeHash{}(__c, __bkt_count); } 9642: 9642: std::size_t 9642: _M_bucket_index(const _Hash_node_value<_Value, false>& __n, 9642: std::size_t __bkt_count) const 9642: noexcept( noexcept(declval()(declval())) 9642: && noexcept(declval()((__hash_code)0, 9642: (std::size_t)0)) ) 9642: { 9642: return _RangeHash{}(_M_hash_code(_ExtractKey{}(__n._M_v())), 9642: __bkt_count); 9642: } 9642: 9642: std::size_t 9642: _M_bucket_index(const _Hash_node_value<_Value, true>& __n, 9642: std::size_t __bkt_count) const 9642: noexcept( noexcept(declval()((__hash_code)0, 9642: (std::size_t)0)) ) 9642: { return _RangeHash{}(__n._M_hash_code, __bkt_count); } 9642: 9642: void 9642: _M_store_code(_Hash_node_code_cache&, __hash_code) const 9642: { } 9642: 9642: void 9642: _M_copy_code(_Hash_node_code_cache&, 9642: const _Hash_node_code_cache&) const 9642: { } 9642: 9642: void 9642: _M_store_code(_Hash_node_code_cache& __n, __hash_code __c) const 9642: { __n._M_hash_code = __c; } 9642: 9642: void 9642: _M_copy_code(_Hash_node_code_cache& __to, 9642: const _Hash_node_code_cache& __from) const 9642: { __to._M_hash_code = __from._M_hash_code; } 9642: 9642: void 9642: _M_swap(_Hash_code_base& __x) 9642: { std::swap(__ebo_hash::_M_get(), __x.__ebo_hash::_M_get()); } 9642: 9642: const _Hash& 9642: _M_hash() const { return __ebo_hash::_M_cget(); } 9642: }; 9642: 9642: 9642: template 9642: struct _Local_iterator_base<_Key, _Value, _ExtractKey, 9642: _Hash, _RangeHash, _Unused, true> 9642: : public _Node_iterator_base<_Value, true> 9642: { 9642: protected: 9642: using __base_node_iter = _Node_iterator_base<_Value, true>; 9642: using __hash_code_base = _Hash_code_base<_Key, _Value, _ExtractKey, 9642: _Hash, _RangeHash, _Unused, true>; 9642: 9642: _Local_iterator_base() = default; 9642: _Local_iterator_base(const __hash_code_base&, 9642: _Hash_node<_Value, true>* __p, 9642: std::size_t __bkt, std::size_t __bkt_count) 9642: : __base_node_iter(__p), _M_bucket(__bkt), _M_bucket_count(__bkt_count) 9642: { } 9642: 9642: void 9642: _M_incr() 9642: { 9642: __base_node_iter::_M_incr(); 9642: if (this->_M_cur) 9642: { 9642: std::size_t __bkt 9642: = _RangeHash{}(this->_M_cur->_M_hash_code, _M_bucket_count); 9642: if (__bkt != _M_bucket) 9642: this->_M_cur = nullptr; 9642: } 9642: } 9642: 9642: std::size_t _M_bucket; 9642: std::size_t _M_bucket_count; 9642: 9642: public: 9642: std::size_t 9642: _M_get_bucket() const { return _M_bucket; } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template::value> 9642: struct _Hash_code_storage 9642: { 9642: __gnu_cxx::__aligned_buffer<_Tp> _M_storage; 9642: 9642: _Tp* 9642: _M_h() { return _M_storage._M_ptr(); } 9642: 9642: const _Tp* 9642: _M_h() const { return _M_storage._M_ptr(); } 9642: }; 9642: 9642: 9642: template 9642: struct _Hash_code_storage<_Tp, true> 9642: { 9642: static_assert( std::is_empty<_Tp>::value, "Type must be empty" ); 9642: 9642: 9642: 9642: _Tp* 9642: _M_h() { return reinterpret_cast<_Tp*>(this); } 9642: 9642: const _Tp* 9642: _M_h() const { return reinterpret_cast(this); } 9642: }; 9642: 9642: template 9642: using __hash_code_for_local_iter 9642: = _Hash_code_storage<_Hash_code_base<_Key, _Value, _ExtractKey, 9642: _Hash, _RangeHash, _Unused, false>>; 9642: 9642: 9642: template 9642: struct _Local_iterator_base<_Key, _Value, _ExtractKey, 9642: _Hash, _RangeHash, _Unused, false> 9642: : __hash_code_for_local_iter<_Key, _Value, _ExtractKey, _Hash, _RangeHash, 9642: _Unused> 9642: , _Node_iterator_base<_Value, false> 9642: { 9642: protected: 9642: using __hash_code_base = _Hash_code_base<_Key, _Value, _ExtractKey, 9642: _Hash, _RangeHash, _Unused, false>; 9642: using __node_iter_base = _Node_iterator_base<_Value, false>; 9642: 9642: _Local_iterator_base() : _M_bucket_count(-1) { } 9642: 9642: _Local_iterator_base(const __hash_code_base& __base, 9642: _Hash_node<_Value, false>* __p, 9642: std::size_t __bkt, std::size_t __bkt_count) 9642: : __node_iter_base(__p), _M_bucket(__bkt), _M_bucket_count(__bkt_count) 9642: { _M_init(__base); } 9642: 9642: ~_Local_iterator_base() 9642: { 9642: if (_M_bucket_count != size_t(-1)) 9642: _M_destroy(); 9642: } 9642: 9642: _Local_iterator_base(const _Local_iterator_base& __iter) 9642: : __node_iter_base(__iter._M_cur), _M_bucket(__iter._M_bucket) 9642: , _M_bucket_count(__iter._M_bucket_count) 9642: { 9642: if (_M_bucket_count != size_t(-1)) 9642: _M_init(*__iter._M_h()); 9642: } 9642: 9642: _Local_iterator_base& 9642: operator=(const _Local_iterator_base& __iter) 9642: { 9642: if (_M_bucket_count != -1) 9642: _M_destroy(); 9642: this->_M_cur = __iter._M_cur; 9642: _M_bucket = __iter._M_bucket; 9642: _M_bucket_count = __iter._M_bucket_count; 9642: if (_M_bucket_count != -1) 9642: _M_init(*__iter._M_h()); 9642: return *this; 9642: } 9642: 9642: void 9642: _M_incr() 9642: { 9642: __node_iter_base::_M_incr(); 9642: if (this->_M_cur) 9642: { 9642: std::size_t __bkt = this->_M_h()->_M_bucket_index(*this->_M_cur, 9642: _M_bucket_count); 9642: if (__bkt != _M_bucket) 9642: this->_M_cur = nullptr; 9642: } 9642: } 9642: 9642: std::size_t _M_bucket; 9642: std::size_t _M_bucket_count; 9642: 9642: void 9642: _M_init(const __hash_code_base& __base) 9642: { ::new(this->_M_h()) __hash_code_base(__base); } 9642: 9642: void 9642: _M_destroy() { this->_M_h()->~__hash_code_base(); } 9642: 9642: public: 9642: std::size_t 9642: _M_get_bucket() const { return _M_bucket; } 9642: }; 9642: 9642: 9642: template 9642: struct _Local_iterator 9642: : public _Local_iterator_base<_Key, _Value, _ExtractKey, 9642: _Hash, _RangeHash, _Unused, __cache> 9642: { 9642: private: 9642: using __base_type = _Local_iterator_base<_Key, _Value, _ExtractKey, 9642: _Hash, _RangeHash, _Unused, __cache>; 9642: using __hash_code_base = typename __base_type::__hash_code_base; 9642: 9642: public: 9642: using value_type = _Value; 9642: using pointer = __conditional_t<__constant_iterators, 9642: const value_type*, value_type*>; 9642: using reference = __conditional_t<__constant_iterators, 9642: const value_type&, value_type&>; 9642: using difference_type = ptrdiff_t; 9642: using iterator_category = forward_iterator_tag; 9642: 9642: _Local_iterator() = default; 9642: 9642: _Local_iterator(const __hash_code_base& __base, 9642: _Hash_node<_Value, __cache>* __n, 9642: std::size_t __bkt, std::size_t __bkt_count) 9642: : __base_type(__base, __n, __bkt, __bkt_count) 9642: { } 9642: 9642: reference 9642: operator*() const 9642: { return this->_M_cur->_M_v(); } 9642: 9642: pointer 9642: operator->() const 9642: { return this->_M_cur->_M_valptr(); } 9642: 9642: _Local_iterator& 9642: operator++() 9642: { 9642: this->_M_incr(); 9642: return *this; 9642: } 9642: 9642: _Local_iterator 9642: operator++(int) 9642: { 9642: _Local_iterator __tmp(*this); 9642: this->_M_incr(); 9642: return __tmp; 9642: } 9642: }; 9642: 9642: 9642: template 9642: struct _Local_const_iterator 9642: : public _Local_iterator_base<_Key, _Value, _ExtractKey, 9642: _Hash, _RangeHash, _Unused, __cache> 9642: { 9642: private: 9642: using __base_type = _Local_iterator_base<_Key, _Value, _ExtractKey, 9642: _Hash, _RangeHash, _Unused, __cache>; 9642: using __hash_code_base = typename __base_type::__hash_code_base; 9642: 9642: public: 9642: typedef _Value value_type; 9642: typedef const value_type* pointer; 9642: typedef const value_type& reference; 9642: typedef std::ptrdiff_t difference_type; 9642: typedef std::forward_iterator_tag iterator_category; 9642: 9642: _Local_const_iterator() = default; 9642: 9642: _Local_const_iterator(const __hash_code_base& __base, 9642: _Hash_node<_Value, __cache>* __n, 9642: std::size_t __bkt, std::size_t __bkt_count) 9642: : __base_type(__base, __n, __bkt, __bkt_count) 9642: { } 9642: 9642: _Local_const_iterator(const _Local_iterator<_Key, _Value, _ExtractKey, 9642: _Hash, _RangeHash, _Unused, 9642: __constant_iterators, 9642: __cache>& __x) 9642: : __base_type(__x) 9642: { } 9642: 9642: reference 9642: operator*() const 9642: { return this->_M_cur->_M_v(); } 9642: 9642: pointer 9642: operator->() const 9642: { return this->_M_cur->_M_valptr(); } 9642: 9642: _Local_const_iterator& 9642: operator++() 9642: { 9642: this->_M_incr(); 9642: return *this; 9642: } 9642: 9642: _Local_const_iterator 9642: operator++(int) 9642: { 9642: _Local_const_iterator __tmp(*this); 9642: this->_M_incr(); 9642: return __tmp; 9642: } 9642: }; 9642: # 1655 "/usr/include/c++/13/bits/hashtable_policy.h" 3 9642: template 9642: struct _Hashtable_base 9642: : public _Hash_code_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash, 9642: _Unused, _Traits::__hash_cached::value>, 9642: private _Hashtable_ebo_helper<0, _Equal> 9642: { 9642: public: 9642: typedef _Key key_type; 9642: typedef _Value value_type; 9642: typedef _Equal key_equal; 9642: typedef std::size_t size_type; 9642: typedef std::ptrdiff_t difference_type; 9642: 9642: using __traits_type = _Traits; 9642: using __hash_cached = typename __traits_type::__hash_cached; 9642: 9642: using __hash_code_base = _Hash_code_base<_Key, _Value, _ExtractKey, 9642: _Hash, _RangeHash, _Unused, 9642: __hash_cached::value>; 9642: 9642: using __hash_code = typename __hash_code_base::__hash_code; 9642: 9642: private: 9642: using _EqualEBO = _Hashtable_ebo_helper<0, _Equal>; 9642: 9642: static bool 9642: _S_equals(__hash_code, const _Hash_node_code_cache&) 9642: { return true; } 9642: 9642: static bool 9642: _S_node_equals(const _Hash_node_code_cache&, 9642: const _Hash_node_code_cache&) 9642: { return true; } 9642: 9642: static bool 9642: _S_equals(__hash_code __c, const _Hash_node_code_cache& __n) 9642: { return __c == __n._M_hash_code; } 9642: 9642: static bool 9642: _S_node_equals(const _Hash_node_code_cache& __lhn, 9642: const _Hash_node_code_cache& __rhn) 9642: { return __lhn._M_hash_code == __rhn._M_hash_code; } 9642: 9642: protected: 9642: _Hashtable_base() = default; 9642: 9642: _Hashtable_base(const _Hash& __hash, const _Equal& __eq) 9642: : __hash_code_base(__hash), _EqualEBO(__eq) 9642: { } 9642: 9642: bool 9642: _M_key_equals(const _Key& __k, 9642: const _Hash_node_value<_Value, 9642: __hash_cached::value>& __n) const 9642: { 9642: static_assert(__is_invocable{}, 9642: "key equality predicate must be invocable with two arguments of " 9642: "key type"); 9642: return _M_eq()(__k, _ExtractKey{}(__n._M_v())); 9642: } 9642: 9642: template 9642: bool 9642: _M_key_equals_tr(const _Kt& __k, 9642: const _Hash_node_value<_Value, 9642: __hash_cached::value>& __n) const 9642: { 9642: static_assert( 9642: __is_invocable{}, 9642: "key equality predicate must be invocable with two arguments of " 9642: "key type"); 9642: return _M_eq()(__k, _ExtractKey{}(__n._M_v())); 9642: } 9642: 9642: bool 9642: _M_equals(const _Key& __k, __hash_code __c, 9642: const _Hash_node_value<_Value, __hash_cached::value>& __n) const 9642: { return _S_equals(__c, __n) && _M_key_equals(__k, __n); } 9642: 9642: template 9642: bool 9642: _M_equals_tr(const _Kt& __k, __hash_code __c, 9642: const _Hash_node_value<_Value, 9642: __hash_cached::value>& __n) const 9642: { return _S_equals(__c, __n) && _M_key_equals_tr(__k, __n); } 9642: 9642: bool 9642: _M_node_equals( 9642: const _Hash_node_value<_Value, __hash_cached::value>& __lhn, 9642: const _Hash_node_value<_Value, __hash_cached::value>& __rhn) const 9642: { 9642: return _S_node_equals(__lhn, __rhn) 9642: && _M_key_equals(_ExtractKey{}(__lhn._M_v()), __rhn); 9642: } 9642: 9642: void 9642: _M_swap(_Hashtable_base& __x) 9642: { 9642: __hash_code_base::_M_swap(__x); 9642: std::swap(_EqualEBO::_M_get(), __x._EqualEBO::_M_get()); 9642: } 9642: 9642: const _Equal& 9642: _M_eq() const { return _EqualEBO::_M_cget(); } 9642: }; 9642: # 1771 "/usr/include/c++/13/bits/hashtable_policy.h" 3 9642: template 9642: struct _Equality; 9642: 9642: 9642: template 9642: struct _Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true> 9642: { 9642: using __hashtable = _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, 9642: _RehashPolicy, _Traits>; 9642: 9642: bool 9642: _M_equal(const __hashtable&) const; 9642: }; 9642: 9642: template 9642: bool 9642: _Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true>:: 9642: _M_equal(const __hashtable& __other) const 9642: { 9642: using __node_type = typename __hashtable::__node_type; 9642: const __hashtable* __this = static_cast(this); 9642: if (__this->size() != __other.size()) 9642: return false; 9642: 9642: for (auto __itx = __this->begin(); __itx != __this->end(); ++__itx) 9642: { 9642: std::size_t __ybkt = __other._M_bucket_index(*__itx._M_cur); 9642: auto __prev_n = __other._M_buckets[__ybkt]; 9642: if (!__prev_n) 9642: return false; 9642: 9642: for (__node_type* __n = static_cast<__node_type*>(__prev_n->_M_nxt);; 9642: __n = __n->_M_next()) 9642: { 9642: if (__n->_M_v() == *__itx) 9642: break; 9642: 9642: if (!__n->_M_nxt 9642: || __other._M_bucket_index(*__n->_M_next()) != __ybkt) 9642: return false; 9642: } 9642: } 9642: 9642: return true; 9642: } 9642: 9642: 9642: template 9642: struct _Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, false> 9642: { 9642: using __hashtable = _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, 9642: _RehashPolicy, _Traits>; 9642: 9642: bool 9642: _M_equal(const __hashtable&) const; 9642: }; 9642: 9642: template 9642: bool 9642: _Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, false>:: 9642: _M_equal(const __hashtable& __other) const 9642: { 9642: using __node_type = typename __hashtable::__node_type; 9642: const __hashtable* __this = static_cast(this); 9642: if (__this->size() != __other.size()) 9642: return false; 9642: 9642: for (auto __itx = __this->begin(); __itx != __this->end();) 9642: { 9642: std::size_t __x_count = 1; 9642: auto __itx_end = __itx; 9642: for (++__itx_end; __itx_end != __this->end() 9642: && __this->key_eq()(_ExtractKey{}(*__itx), 9642: _ExtractKey{}(*__itx_end)); 9642: ++__itx_end) 9642: ++__x_count; 9642: 9642: std::size_t __ybkt = __other._M_bucket_index(*__itx._M_cur); 9642: auto __y_prev_n = __other._M_buckets[__ybkt]; 9642: if (!__y_prev_n) 9642: return false; 9642: 9642: __node_type* __y_n = static_cast<__node_type*>(__y_prev_n->_M_nxt); 9642: for (;;) 9642: { 9642: if (__this->key_eq()(_ExtractKey{}(__y_n->_M_v()), 9642: _ExtractKey{}(*__itx))) 9642: break; 9642: 9642: auto __y_ref_n = __y_n; 9642: for (__y_n = __y_n->_M_next(); __y_n; __y_n = __y_n->_M_next()) 9642: if (!__other._M_node_equals(*__y_ref_n, *__y_n)) 9642: break; 9642: 9642: if (!__y_n || __other._M_bucket_index(*__y_n) != __ybkt) 9642: return false; 9642: } 9642: 9642: typename __hashtable::const_iterator __ity(__y_n); 9642: for (auto __ity_end = __ity; __ity_end != __other.end(); ++__ity_end) 9642: if (--__x_count == 0) 9642: break; 9642: 9642: if (__x_count != 0) 9642: return false; 9642: 9642: if (!std::is_permutation(__itx, __itx_end, __ity)) 9642: return false; 9642: 9642: __itx = __itx_end; 9642: } 9642: return true; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Hashtable_alloc : private _Hashtable_ebo_helper<0, _NodeAlloc> 9642: { 9642: private: 9642: using __ebo_node_alloc = _Hashtable_ebo_helper<0, _NodeAlloc>; 9642: 9642: template 9642: struct __get_value_type; 9642: template 9642: struct __get_value_type<_Hash_node<_Val, _Cache_hash_code>> 9642: { using type = _Val; }; 9642: 9642: public: 9642: using __node_type = typename _NodeAlloc::value_type; 9642: using __node_alloc_type = _NodeAlloc; 9642: 9642: using __node_alloc_traits = __gnu_cxx::__alloc_traits<__node_alloc_type>; 9642: 9642: using __value_alloc_traits = typename __node_alloc_traits::template 9642: rebind_traits::type>; 9642: 9642: using __node_ptr = __node_type*; 9642: using __node_base = _Hash_node_base; 9642: using __node_base_ptr = __node_base*; 9642: using __buckets_alloc_type = 9642: __alloc_rebind<__node_alloc_type, __node_base_ptr>; 9642: using __buckets_alloc_traits = std::allocator_traits<__buckets_alloc_type>; 9642: using __buckets_ptr = __node_base_ptr*; 9642: 9642: _Hashtable_alloc() = default; 9642: _Hashtable_alloc(const _Hashtable_alloc&) = default; 9642: _Hashtable_alloc(_Hashtable_alloc&&) = default; 9642: 9642: template 9642: _Hashtable_alloc(_Alloc&& __a) 9642: : __ebo_node_alloc(std::forward<_Alloc>(__a)) 9642: { } 9642: 9642: __node_alloc_type& 9642: _M_node_allocator() 9642: { return __ebo_node_alloc::_M_get(); } 9642: 9642: const __node_alloc_type& 9642: _M_node_allocator() const 9642: { return __ebo_node_alloc::_M_cget(); } 9642: 9642: 9642: template 9642: __node_ptr 9642: _M_allocate_node(_Args&&... __args); 9642: 9642: 9642: void 9642: _M_deallocate_node(__node_ptr __n); 9642: 9642: 9642: void 9642: _M_deallocate_node_ptr(__node_ptr __n); 9642: 9642: 9642: 9642: void 9642: _M_deallocate_nodes(__node_ptr __n); 9642: 9642: __buckets_ptr 9642: _M_allocate_buckets(std::size_t __bkt_count); 9642: 9642: void 9642: _M_deallocate_buckets(__buckets_ptr, std::size_t __bkt_count); 9642: }; 9642: 9642: 9642: 9642: template 9642: template 9642: auto 9642: _Hashtable_alloc<_NodeAlloc>::_M_allocate_node(_Args&&... __args) 9642: -> __node_ptr 9642: { 9642: auto __nptr = __node_alloc_traits::allocate(_M_node_allocator(), 1); 9642: __node_ptr __n = std::__to_address(__nptr); 9642: try 9642: { 9642: ::new ((void*)__n) __node_type; 9642: __node_alloc_traits::construct(_M_node_allocator(), 9642: __n->_M_valptr(), 9642: std::forward<_Args>(__args)...); 9642: return __n; 9642: } 9642: catch(...) 9642: { 9642: __node_alloc_traits::deallocate(_M_node_allocator(), __nptr, 1); 9642: throw; 9642: } 9642: } 9642: 9642: template 9642: void 9642: _Hashtable_alloc<_NodeAlloc>::_M_deallocate_node(__node_ptr __n) 9642: { 9642: __node_alloc_traits::destroy(_M_node_allocator(), __n->_M_valptr()); 9642: _M_deallocate_node_ptr(__n); 9642: } 9642: 9642: template 9642: void 9642: _Hashtable_alloc<_NodeAlloc>::_M_deallocate_node_ptr(__node_ptr __n) 9642: { 9642: typedef typename __node_alloc_traits::pointer _Ptr; 9642: auto __ptr = std::pointer_traits<_Ptr>::pointer_to(*__n); 9642: __n->~__node_type(); 9642: __node_alloc_traits::deallocate(_M_node_allocator(), __ptr, 1); 9642: } 9642: 9642: template 9642: void 9642: _Hashtable_alloc<_NodeAlloc>::_M_deallocate_nodes(__node_ptr __n) 9642: { 9642: while (__n) 9642: { 9642: __node_ptr __tmp = __n; 9642: __n = __n->_M_next(); 9642: _M_deallocate_node(__tmp); 9642: } 9642: } 9642: 9642: template 9642: auto 9642: _Hashtable_alloc<_NodeAlloc>::_M_allocate_buckets(std::size_t __bkt_count) 9642: -> __buckets_ptr 9642: { 9642: __buckets_alloc_type __alloc(_M_node_allocator()); 9642: 9642: auto __ptr = __buckets_alloc_traits::allocate(__alloc, __bkt_count); 9642: __buckets_ptr __p = std::__to_address(__ptr); 9642: __builtin_memset(__p, 0, __bkt_count * sizeof(__node_base_ptr)); 9642: return __p; 9642: } 9642: 9642: template 9642: void 9642: _Hashtable_alloc<_NodeAlloc>:: 9642: _M_deallocate_buckets(__buckets_ptr __bkts, 9642: std::size_t __bkt_count) 9642: { 9642: typedef typename __buckets_alloc_traits::pointer _Ptr; 9642: auto __ptr = std::pointer_traits<_Ptr>::pointer_to(*__bkts); 9642: __buckets_alloc_type __alloc(_M_node_allocator()); 9642: __buckets_alloc_traits::deallocate(__alloc, __ptr, __bkt_count); 9642: } 9642: 9642: 9642: } 9642: 9642: 9642: } 9642: # 36 "/usr/include/c++/13/bits/hashtable.h" 2 3 9642: # 1 "/usr/include/c++/13/bits/enable_special_members.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/enable_special_members.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/enable_special_members.h" 3 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: struct _Enable_default_constructor_tag 9642: { 9642: explicit constexpr _Enable_default_constructor_tag() = default; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Enable_default_constructor 9642: { 9642: constexpr _Enable_default_constructor() noexcept = default; 9642: constexpr _Enable_default_constructor(_Enable_default_constructor const&) 9642: noexcept = default; 9642: constexpr _Enable_default_constructor(_Enable_default_constructor&&) 9642: noexcept = default; 9642: _Enable_default_constructor& 9642: operator=(_Enable_default_constructor const&) noexcept = default; 9642: _Enable_default_constructor& 9642: operator=(_Enable_default_constructor&&) noexcept = default; 9642: 9642: 9642: constexpr explicit 9642: _Enable_default_constructor(_Enable_default_constructor_tag) { } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Enable_destructor { }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Enable_copy_move { }; 9642: # 96 "/usr/include/c++/13/bits/enable_special_members.h" 3 9642: template 9642: struct _Enable_special_members 9642: : private _Enable_default_constructor<_Default, _Tag>, 9642: private _Enable_destructor<_Destructor, _Tag>, 9642: private _Enable_copy_move<_Copy, _CopyAssignment, 9642: _Move, _MoveAssignment, 9642: _Tag> 9642: { }; 9642: 9642: 9642: 9642: template 9642: struct _Enable_default_constructor 9642: { 9642: constexpr _Enable_default_constructor() noexcept = delete; 9642: constexpr _Enable_default_constructor(_Enable_default_constructor const&) 9642: noexcept = default; 9642: constexpr _Enable_default_constructor(_Enable_default_constructor&&) 9642: noexcept = default; 9642: _Enable_default_constructor& 9642: operator=(_Enable_default_constructor const&) noexcept = default; 9642: _Enable_default_constructor& 9642: operator=(_Enable_default_constructor&&) noexcept = default; 9642: 9642: 9642: constexpr explicit 9642: _Enable_default_constructor(_Enable_default_constructor_tag) { } 9642: }; 9642: 9642: template 9642: struct _Enable_destructor 9642: { ~_Enable_destructor() noexcept = delete; }; 9642: 9642: template 9642: struct _Enable_copy_move 9642: { 9642: constexpr _Enable_copy_move() noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; 9642: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move const&) noexcept = default; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move&&) noexcept = default; 9642: }; 9642: 9642: template 9642: struct _Enable_copy_move 9642: { 9642: constexpr _Enable_copy_move() noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move const&) noexcept = delete; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move&&) noexcept = default; 9642: }; 9642: 9642: template 9642: struct _Enable_copy_move 9642: { 9642: constexpr _Enable_copy_move() noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; 9642: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move const&) noexcept = delete; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move&&) noexcept = default; 9642: }; 9642: 9642: template 9642: struct _Enable_copy_move 9642: { 9642: constexpr _Enable_copy_move() noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move const&) noexcept = default; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move&&) noexcept = default; 9642: }; 9642: 9642: template 9642: struct _Enable_copy_move 9642: { 9642: constexpr _Enable_copy_move() noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; 9642: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move const&) noexcept = default; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move&&) noexcept = default; 9642: }; 9642: 9642: template 9642: struct _Enable_copy_move 9642: { 9642: constexpr _Enable_copy_move() noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move const&) noexcept = delete; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move&&) noexcept = default; 9642: }; 9642: 9642: template 9642: struct _Enable_copy_move 9642: { 9642: constexpr _Enable_copy_move() noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; 9642: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move const&) noexcept = delete; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move&&) noexcept = default; 9642: }; 9642: 9642: template 9642: struct _Enable_copy_move 9642: { 9642: constexpr _Enable_copy_move() noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move const&) noexcept = default; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move&&) noexcept = delete; 9642: }; 9642: 9642: template 9642: struct _Enable_copy_move 9642: { 9642: constexpr _Enable_copy_move() noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; 9642: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move const&) noexcept = default; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move&&) noexcept = delete; 9642: }; 9642: 9642: template 9642: struct _Enable_copy_move 9642: { 9642: constexpr _Enable_copy_move() noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move const&) noexcept = delete; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move&&) noexcept = delete; 9642: }; 9642: 9642: template 9642: struct _Enable_copy_move 9642: { 9642: constexpr _Enable_copy_move() noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; 9642: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move const&) noexcept = delete; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move&&) noexcept = delete; 9642: }; 9642: 9642: template 9642: struct _Enable_copy_move 9642: { 9642: constexpr _Enable_copy_move() noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move const&) noexcept = default; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move&&) noexcept = delete; 9642: }; 9642: 9642: template 9642: struct _Enable_copy_move 9642: { 9642: constexpr _Enable_copy_move() noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; 9642: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move const&) noexcept = default; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move&&) noexcept = delete; 9642: }; 9642: 9642: template 9642: struct _Enable_copy_move 9642: { 9642: constexpr _Enable_copy_move() noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move const&) noexcept = delete; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move&&) noexcept = delete; 9642: }; 9642: 9642: template 9642: struct _Enable_copy_move 9642: { 9642: constexpr _Enable_copy_move() noexcept = default; 9642: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; 9642: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move const&) noexcept = delete; 9642: _Enable_copy_move& 9642: operator=(_Enable_copy_move&&) noexcept = delete; 9642: }; 9642: 9642: 9642: 9642: } 9642: # 37 "/usr/include/c++/13/bits/hashtable.h" 2 3 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/node_handle.h" 1 3 9642: # 34 "/usr/include/c++/13/bits/node_handle.h" 3 9642: 9642: # 35 "/usr/include/c++/13/bits/node_handle.h" 3 9642: # 43 "/usr/include/c++/13/bits/node_handle.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 63 "/usr/include/c++/13/bits/node_handle.h" 3 9642: template 9642: class _Node_handle_common 9642: { 9642: using _AllocTraits = allocator_traits<_NodeAlloc>; 9642: 9642: public: 9642: using allocator_type = __alloc_rebind<_NodeAlloc, _Val>; 9642: 9642: allocator_type 9642: get_allocator() const noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(!this->empty())) __builtin_unreachable(); } while (false); 9642: return allocator_type(_M_alloc._M_alloc); 9642: } 9642: 9642: explicit operator bool() const noexcept { return _M_ptr != nullptr; } 9642: 9642: [[nodiscard]] bool empty() const noexcept { return _M_ptr == nullptr; } 9642: 9642: 9642: protected: 9642: constexpr _Node_handle_common() noexcept : _M_ptr() { } 9642: 9642: ~_Node_handle_common() 9642: { 9642: if (!empty()) 9642: _M_reset(); 9642: } 9642: 9642: _Node_handle_common(_Node_handle_common&& __nh) noexcept 9642: : _M_ptr(__nh._M_ptr) 9642: { 9642: if (_M_ptr) 9642: _M_move(std::move(__nh)); 9642: } 9642: 9642: _Node_handle_common& 9642: operator=(_Node_handle_common&& __nh) noexcept 9642: { 9642: if (empty()) 9642: { 9642: if (!__nh.empty()) 9642: _M_move(std::move(__nh)); 9642: } 9642: else if (__nh.empty()) 9642: _M_reset(); 9642: else 9642: { 9642: 9642: _AllocTraits::destroy(*_M_alloc, _M_ptr->_M_valptr()); 9642: _AllocTraits::deallocate(*_M_alloc, _M_ptr, 1); 9642: 9642: _M_alloc = __nh._M_alloc.release(); 9642: _M_ptr = __nh._M_ptr; 9642: __nh._M_ptr = nullptr; 9642: } 9642: return *this; 9642: } 9642: 9642: _Node_handle_common(typename _AllocTraits::pointer __ptr, 9642: const _NodeAlloc& __alloc) 9642: : _M_ptr(__ptr), _M_alloc(__alloc) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__ptr != nullptr)) __builtin_unreachable(); } while (false); 9642: } 9642: 9642: void 9642: _M_swap(_Node_handle_common& __nh) noexcept 9642: { 9642: if (empty()) 9642: { 9642: if (!__nh.empty()) 9642: _M_move(std::move(__nh)); 9642: } 9642: else if (__nh.empty()) 9642: __nh._M_move(std::move(*this)); 9642: else 9642: { 9642: using std::swap; 9642: swap(_M_ptr, __nh._M_ptr); 9642: _M_alloc.swap(__nh._M_alloc); 9642: } 9642: } 9642: 9642: private: 9642: 9642: 9642: 9642: void 9642: _M_move(_Node_handle_common&& __nh) noexcept 9642: { 9642: ::new (std::__addressof(_M_alloc)) _NodeAlloc(__nh._M_alloc.release()); 9642: _M_ptr = __nh._M_ptr; 9642: __nh._M_ptr = nullptr; 9642: } 9642: 9642: 9642: 9642: 9642: void 9642: _M_reset() noexcept 9642: { 9642: _NodeAlloc __alloc = _M_alloc.release(); 9642: _AllocTraits::destroy(__alloc, _M_ptr->_M_valptr()); 9642: _AllocTraits::deallocate(__alloc, _M_ptr, 1); 9642: _M_ptr = nullptr; 9642: } 9642: 9642: 9642: 9642: 9642: void 9642: release() noexcept 9642: { 9642: _M_alloc.release(); 9642: _M_ptr = nullptr; 9642: } 9642: 9642: protected: 9642: typename _AllocTraits::pointer _M_ptr; 9642: 9642: private: 9642: 9642: 9642: union _Optional_alloc 9642: { 9642: _Optional_alloc() { } 9642: ~_Optional_alloc() { } 9642: 9642: _Optional_alloc(_Optional_alloc&&) = delete; 9642: _Optional_alloc& operator=(_Optional_alloc&&) = delete; 9642: 9642: _Optional_alloc(const _NodeAlloc& __alloc) noexcept 9642: : _M_alloc(__alloc) 9642: { } 9642: 9642: 9642: void 9642: operator=(_NodeAlloc&& __alloc) noexcept 9642: { 9642: using _ATr = _AllocTraits; 9642: if constexpr (_ATr::propagate_on_container_move_assignment::value) 9642: _M_alloc = std::move(__alloc); 9642: else if constexpr (!_AllocTraits::is_always_equal::value) 9642: do { if (std::__is_constant_evaluated() && !bool(_M_alloc == __alloc)) __builtin_unreachable(); } while (false); 9642: } 9642: 9642: 9642: void 9642: swap(_Optional_alloc& __other) noexcept 9642: { 9642: using std::swap; 9642: if constexpr (_AllocTraits::propagate_on_container_swap::value) 9642: swap(_M_alloc, __other._M_alloc); 9642: else if constexpr (!_AllocTraits::is_always_equal::value) 9642: do { if (std::__is_constant_evaluated() && !bool(_M_alloc == __other._M_alloc)) __builtin_unreachable(); } while (false); 9642: } 9642: 9642: 9642: _NodeAlloc& operator*() noexcept { return _M_alloc; } 9642: 9642: 9642: _NodeAlloc release() noexcept 9642: { 9642: _NodeAlloc __tmp = std::move(_M_alloc); 9642: _M_alloc.~_NodeAlloc(); 9642: return __tmp; 9642: } 9642: 9642: [[__no_unique_address__]] _NodeAlloc _M_alloc; 9642: }; 9642: 9642: [[__no_unique_address__]] _Optional_alloc _M_alloc; 9642: 9642: template 9642: friend class _Rb_tree; 9642: 9642: template 9642: friend class _Hashtable; 9642: 9642: 9642: }; 9642: 9642: 9642: template 9642: class _Node_handle : public _Node_handle_common<_Value, _NodeAlloc> 9642: { 9642: public: 9642: constexpr _Node_handle() noexcept = default; 9642: ~_Node_handle() = default; 9642: _Node_handle(_Node_handle&&) noexcept = default; 9642: 9642: _Node_handle& 9642: operator=(_Node_handle&&) noexcept = default; 9642: 9642: using key_type = _Key; 9642: using mapped_type = typename _Value::second_type; 9642: 9642: key_type& 9642: key() const noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(!this->empty())) __builtin_unreachable(); } while (false); 9642: return *_M_pkey; 9642: } 9642: 9642: mapped_type& 9642: mapped() const noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(!this->empty())) __builtin_unreachable(); } while (false); 9642: return *_M_pmapped; 9642: } 9642: 9642: void 9642: swap(_Node_handle& __nh) noexcept 9642: { 9642: this->_M_swap(__nh); 9642: using std::swap; 9642: swap(_M_pkey, __nh._M_pkey); 9642: swap(_M_pmapped, __nh._M_pmapped); 9642: } 9642: 9642: friend void 9642: swap(_Node_handle& __x, _Node_handle& __y) 9642: noexcept(noexcept(__x.swap(__y))) 9642: { __x.swap(__y); } 9642: 9642: private: 9642: using _AllocTraits = allocator_traits<_NodeAlloc>; 9642: 9642: _Node_handle(typename _AllocTraits::pointer __ptr, 9642: const _NodeAlloc& __alloc) 9642: : _Node_handle_common<_Value, _NodeAlloc>(__ptr, __alloc) 9642: { 9642: if (__ptr) 9642: { 9642: auto& __key = const_cast<_Key&>(__ptr->_M_valptr()->first); 9642: _M_pkey = _S_pointer_to(__key); 9642: _M_pmapped = _S_pointer_to(__ptr->_M_valptr()->second); 9642: } 9642: else 9642: { 9642: _M_pkey = nullptr; 9642: _M_pmapped = nullptr; 9642: } 9642: } 9642: 9642: template 9642: using __pointer 9642: = __ptr_rebind>; 9642: 9642: __pointer<_Key> _M_pkey = nullptr; 9642: __pointer _M_pmapped = nullptr; 9642: 9642: template 9642: __pointer<_Tp> 9642: _S_pointer_to(_Tp& __obj) 9642: { return pointer_traits<__pointer<_Tp>>::pointer_to(__obj); } 9642: 9642: const key_type& 9642: _M_key() const noexcept { return key(); } 9642: 9642: template 9642: friend class _Rb_tree; 9642: 9642: template 9642: friend class _Hashtable; 9642: }; 9642: 9642: 9642: template 9642: class _Node_handle<_Value, _Value, _NodeAlloc> 9642: : public _Node_handle_common<_Value, _NodeAlloc> 9642: { 9642: public: 9642: constexpr _Node_handle() noexcept = default; 9642: ~_Node_handle() = default; 9642: _Node_handle(_Node_handle&&) noexcept = default; 9642: 9642: _Node_handle& 9642: operator=(_Node_handle&&) noexcept = default; 9642: 9642: using value_type = _Value; 9642: 9642: value_type& 9642: value() const noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(!this->empty())) __builtin_unreachable(); } while (false); 9642: return *this->_M_ptr->_M_valptr(); 9642: } 9642: 9642: void 9642: swap(_Node_handle& __nh) noexcept 9642: { this->_M_swap(__nh); } 9642: 9642: friend void 9642: swap(_Node_handle& __x, _Node_handle& __y) 9642: noexcept(noexcept(__x.swap(__y))) 9642: { __x.swap(__y); } 9642: 9642: private: 9642: using _AllocTraits = allocator_traits<_NodeAlloc>; 9642: 9642: _Node_handle(typename _AllocTraits::pointer __ptr, 9642: const _NodeAlloc& __alloc) 9642: : _Node_handle_common<_Value, _NodeAlloc>(__ptr, __alloc) { } 9642: 9642: const value_type& 9642: _M_key() const noexcept { return value(); } 9642: 9642: template 9642: friend class _Rb_tree; 9642: 9642: template 9642: friend class _Hashtable; 9642: }; 9642: 9642: 9642: template 9642: struct _Node_insert_return 9642: { 9642: _Iterator position = _Iterator(); 9642: bool inserted = false; 9642: _NodeHandle node; 9642: }; 9642: 9642: 9642: 9642: 9642: } 9642: # 40 "/usr/include/c++/13/bits/hashtable.h" 2 3 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: template 9642: using __cache_default 9642: = __not_<__and_< 9642: __is_fast_hash<_Hash>, 9642: 9642: __is_nothrow_invocable>>; 9642: 9642: 9642: 9642: 9642: template 9642: using _Hashtable_enable_default_ctor 9642: = _Enable_default_constructor<__and_, 9642: is_default_constructible<_Hash>, 9642: is_default_constructible<_Allocator>>{}, 9642: __detail::_Hash_node_base>; 9642: # 177 "/usr/include/c++/13/bits/hashtable.h" 3 9642: template 9642: class _Hashtable 9642: : public __detail::_Hashtable_base<_Key, _Value, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _Traits>, 9642: public __detail::_Map_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, 9642: _RehashPolicy, _Traits>, 9642: public __detail::_Insert<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, 9642: _RehashPolicy, _Traits>, 9642: public __detail::_Rehash_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, 9642: _RehashPolicy, _Traits>, 9642: public __detail::_Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, 9642: _RehashPolicy, _Traits>, 9642: private __detail::_Hashtable_alloc< 9642: __alloc_rebind<_Alloc, 9642: __detail::_Hash_node<_Value, 9642: _Traits::__hash_cached::value>>>, 9642: private _Hashtable_enable_default_ctor<_Equal, _Hash, _Alloc> 9642: { 9642: static_assert(is_same::type, _Value>::value, 9642: "unordered container must have a non-const, non-volatile value_type"); 9642: 9642: 9642: 9642: 9642: 9642: using __traits_type = _Traits; 9642: using __hash_cached = typename __traits_type::__hash_cached; 9642: using __constant_iterators = typename __traits_type::__constant_iterators; 9642: using __node_type = __detail::_Hash_node<_Value, __hash_cached::value>; 9642: using __node_alloc_type = __alloc_rebind<_Alloc, __node_type>; 9642: 9642: using __hashtable_alloc = __detail::_Hashtable_alloc<__node_alloc_type>; 9642: 9642: using __node_value_type = 9642: __detail::_Hash_node_value<_Value, __hash_cached::value>; 9642: using __node_ptr = typename __hashtable_alloc::__node_ptr; 9642: using __value_alloc_traits = 9642: typename __hashtable_alloc::__value_alloc_traits; 9642: using __node_alloc_traits = 9642: typename __hashtable_alloc::__node_alloc_traits; 9642: using __node_base = typename __hashtable_alloc::__node_base; 9642: using __node_base_ptr = typename __hashtable_alloc::__node_base_ptr; 9642: using __buckets_ptr = typename __hashtable_alloc::__buckets_ptr; 9642: 9642: using __insert_base = __detail::_Insert<_Key, _Value, _Alloc, _ExtractKey, 9642: _Equal, _Hash, 9642: _RangeHash, _Unused, 9642: _RehashPolicy, _Traits>; 9642: using __enable_default_ctor 9642: = _Hashtable_enable_default_ctor<_Equal, _Hash, _Alloc>; 9642: 9642: public: 9642: typedef _Key key_type; 9642: typedef _Value value_type; 9642: typedef _Alloc allocator_type; 9642: typedef _Equal key_equal; 9642: 9642: 9642: 9642: typedef typename __value_alloc_traits::pointer pointer; 9642: typedef typename __value_alloc_traits::const_pointer const_pointer; 9642: typedef value_type& reference; 9642: typedef const value_type& const_reference; 9642: 9642: using iterator = typename __insert_base::iterator; 9642: 9642: using const_iterator = typename __insert_base::const_iterator; 9642: 9642: using local_iterator = __detail::_Local_iterator; 9642: 9642: using const_local_iterator = __detail::_Local_const_iterator< 9642: key_type, _Value, 9642: _ExtractKey, _Hash, _RangeHash, _Unused, 9642: __constant_iterators::value, __hash_cached::value>; 9642: 9642: private: 9642: using __rehash_type = _RehashPolicy; 9642: using __rehash_state = typename __rehash_type::_State; 9642: 9642: using __unique_keys = typename __traits_type::__unique_keys; 9642: 9642: using __hashtable_base = __detail:: 9642: _Hashtable_base<_Key, _Value, _ExtractKey, 9642: _Equal, _Hash, _RangeHash, _Unused, _Traits>; 9642: 9642: using __hash_code_base = typename __hashtable_base::__hash_code_base; 9642: using __hash_code = typename __hashtable_base::__hash_code; 9642: using __ireturn_type = typename __insert_base::__ireturn_type; 9642: 9642: using __map_base = __detail::_Map_base<_Key, _Value, _Alloc, _ExtractKey, 9642: _Equal, _Hash, _RangeHash, _Unused, 9642: _RehashPolicy, _Traits>; 9642: 9642: using __rehash_base = __detail::_Rehash_base<_Key, _Value, _Alloc, 9642: _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, 9642: _RehashPolicy, _Traits>; 9642: 9642: using __eq_base = __detail::_Equality<_Key, _Value, _Alloc, _ExtractKey, 9642: _Equal, _Hash, _RangeHash, _Unused, 9642: _RehashPolicy, _Traits>; 9642: 9642: using __reuse_or_alloc_node_gen_t = 9642: __detail::_ReuseOrAllocNode<__node_alloc_type>; 9642: using __alloc_node_gen_t = 9642: __detail::_AllocNode<__node_alloc_type>; 9642: using __node_builder_t = 9642: __detail::_NodeBuilder<_ExtractKey>; 9642: 9642: 9642: struct _Scoped_node 9642: { 9642: 9642: _Scoped_node(__node_ptr __n, __hashtable_alloc* __h) 9642: : _M_h(__h), _M_node(__n) { } 9642: 9642: 9642: template 9642: _Scoped_node(__hashtable_alloc* __h, _Args&&... __args) 9642: : _M_h(__h), 9642: _M_node(__h->_M_allocate_node(std::forward<_Args>(__args)...)) 9642: { } 9642: 9642: 9642: ~_Scoped_node() { if (_M_node) _M_h->_M_deallocate_node(_M_node); }; 9642: 9642: _Scoped_node(const _Scoped_node&) = delete; 9642: _Scoped_node& operator=(const _Scoped_node&) = delete; 9642: 9642: __hashtable_alloc* _M_h; 9642: __node_ptr _M_node; 9642: }; 9642: 9642: template 9642: static constexpr 9642: __conditional_t::value, 9642: const value_type&, value_type&&> 9642: __fwd_value_for(value_type& __val) noexcept 9642: { return std::move(__val); } 9642: 9642: 9642: 9642: 9642: 9642: struct __hash_code_base_access : __hash_code_base 9642: { using __hash_code_base::_M_bucket_index; }; 9642: 9642: 9642: static_assert(is_nothrow_default_constructible<_RangeHash>::value, 9642: "Functor used to map hash code to bucket index" 9642: " must be nothrow default constructible"); 9642: static_assert(noexcept( 9642: std::declval()((std::size_t)0, (std::size_t)0)), 9642: "Functor used to map hash code to bucket index must be" 9642: " noexcept"); 9642: 9642: 9642: static_assert(is_nothrow_default_constructible<_ExtractKey>::value, 9642: "_ExtractKey must be nothrow default constructible"); 9642: static_assert(noexcept( 9642: std::declval()(std::declval<_Value>())), 9642: "_ExtractKey functor must be noexcept invocable"); 9642: 9642: template 9642: friend struct __detail::_Map_base; 9642: 9642: template 9642: friend struct __detail::_Insert_base; 9642: 9642: template 9642: friend struct __detail::_Insert; 9642: 9642: template 9642: friend struct __detail::_Equality; 9642: 9642: public: 9642: using size_type = typename __hashtable_base::size_type; 9642: using difference_type = typename __hashtable_base::difference_type; 9642: 9642: 9642: using node_type = _Node_handle<_Key, _Value, __node_alloc_type>; 9642: using insert_return_type = _Node_insert_return; 9642: 9642: 9642: private: 9642: __buckets_ptr _M_buckets = &_M_single_bucket; 9642: size_type _M_bucket_count = 1; 9642: __node_base _M_before_begin; 9642: size_type _M_element_count = 0; 9642: _RehashPolicy _M_rehash_policy; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: __node_base_ptr _M_single_bucket = nullptr; 9642: 9642: void 9642: _M_update_bbegin() 9642: { 9642: if (_M_begin()) 9642: _M_buckets[_M_bucket_index(*_M_begin())] = &_M_before_begin; 9642: } 9642: 9642: void 9642: _M_update_bbegin(__node_ptr __n) 9642: { 9642: _M_before_begin._M_nxt = __n; 9642: _M_update_bbegin(); 9642: } 9642: 9642: bool 9642: _M_uses_single_bucket(__buckets_ptr __bkts) const 9642: { return __builtin_expect(__bkts == &_M_single_bucket, false); } 9642: 9642: bool 9642: _M_uses_single_bucket() const 9642: { return _M_uses_single_bucket(_M_buckets); } 9642: 9642: static constexpr size_t 9642: __small_size_threshold() noexcept 9642: { 9642: return 9642: __detail::_Hashtable_hash_traits<_Hash>::__small_size_threshold(); 9642: } 9642: 9642: __hashtable_alloc& 9642: _M_base_alloc() { return *this; } 9642: 9642: __buckets_ptr 9642: _M_allocate_buckets(size_type __bkt_count) 9642: { 9642: if (__builtin_expect(__bkt_count == 1, false)) 9642: { 9642: _M_single_bucket = nullptr; 9642: return &_M_single_bucket; 9642: } 9642: 9642: return __hashtable_alloc::_M_allocate_buckets(__bkt_count); 9642: } 9642: 9642: void 9642: _M_deallocate_buckets(__buckets_ptr __bkts, size_type __bkt_count) 9642: { 9642: if (_M_uses_single_bucket(__bkts)) 9642: return; 9642: 9642: __hashtable_alloc::_M_deallocate_buckets(__bkts, __bkt_count); 9642: } 9642: 9642: void 9642: _M_deallocate_buckets() 9642: { _M_deallocate_buckets(_M_buckets, _M_bucket_count); } 9642: 9642: 9642: 9642: __node_ptr 9642: _M_bucket_begin(size_type __bkt) const; 9642: 9642: __node_ptr 9642: _M_begin() const 9642: { return static_cast<__node_ptr>(_M_before_begin._M_nxt); } 9642: 9642: 9642: 9642: template 9642: void 9642: _M_assign_elements(_Ht&&); 9642: 9642: template 9642: void 9642: _M_assign(_Ht&&, const _NodeGenerator&); 9642: 9642: void 9642: _M_move_assign(_Hashtable&&, true_type); 9642: 9642: void 9642: _M_move_assign(_Hashtable&&, false_type); 9642: 9642: void 9642: _M_reset() noexcept; 9642: 9642: _Hashtable(const _Hash& __h, const _Equal& __eq, 9642: const allocator_type& __a) 9642: : __hashtable_base(__h, __eq), 9642: __hashtable_alloc(__node_alloc_type(__a)), 9642: __enable_default_ctor(_Enable_default_constructor_tag{}) 9642: { } 9642: 9642: template 9642: static constexpr bool 9642: _S_nothrow_move() 9642: { 9642: 9642: 9642: 9642: 9642: 9642: if constexpr (_No_realloc) 9642: if constexpr (is_nothrow_copy_constructible<_Hash>()) 9642: return is_nothrow_copy_constructible<_Equal>(); 9642: return false; 9642: 9642: } 9642: 9642: _Hashtable(_Hashtable&& __ht, __node_alloc_type&& __a, 9642: true_type ) 9642: noexcept(_S_nothrow_move()); 9642: 9642: _Hashtable(_Hashtable&&, __node_alloc_type&&, 9642: false_type ); 9642: 9642: template 9642: _Hashtable(_InputIterator __first, _InputIterator __last, 9642: size_type __bkt_count_hint, 9642: const _Hash&, const _Equal&, const allocator_type&, 9642: true_type __uks); 9642: 9642: template 9642: _Hashtable(_InputIterator __first, _InputIterator __last, 9642: size_type __bkt_count_hint, 9642: const _Hash&, const _Equal&, const allocator_type&, 9642: false_type __uks); 9642: 9642: public: 9642: 9642: _Hashtable() = default; 9642: 9642: _Hashtable(const _Hashtable&); 9642: 9642: _Hashtable(const _Hashtable&, const allocator_type&); 9642: 9642: explicit 9642: _Hashtable(size_type __bkt_count_hint, 9642: const _Hash& __hf = _Hash(), 9642: const key_equal& __eql = key_equal(), 9642: const allocator_type& __a = allocator_type()); 9642: 9642: 9642: _Hashtable(_Hashtable&& __ht) 9642: noexcept(_S_nothrow_move()) 9642: : _Hashtable(std::move(__ht), std::move(__ht._M_node_allocator()), 9642: true_type{}) 9642: { } 9642: 9642: _Hashtable(_Hashtable&& __ht, const allocator_type& __a) 9642: noexcept(_S_nothrow_move<__node_alloc_traits::_S_always_equal()>()) 9642: : _Hashtable(std::move(__ht), __node_alloc_type(__a), 9642: typename __node_alloc_traits::is_always_equal{}) 9642: { } 9642: 9642: explicit 9642: _Hashtable(const allocator_type& __a) 9642: : __hashtable_alloc(__node_alloc_type(__a)), 9642: __enable_default_ctor(_Enable_default_constructor_tag{}) 9642: { } 9642: 9642: template 9642: _Hashtable(_InputIterator __f, _InputIterator __l, 9642: size_type __bkt_count_hint = 0, 9642: const _Hash& __hf = _Hash(), 9642: const key_equal& __eql = key_equal(), 9642: const allocator_type& __a = allocator_type()) 9642: : _Hashtable(__f, __l, __bkt_count_hint, __hf, __eql, __a, 9642: __unique_keys{}) 9642: { } 9642: 9642: _Hashtable(initializer_list __l, 9642: size_type __bkt_count_hint = 0, 9642: const _Hash& __hf = _Hash(), 9642: const key_equal& __eql = key_equal(), 9642: const allocator_type& __a = allocator_type()) 9642: : _Hashtable(__l.begin(), __l.end(), __bkt_count_hint, 9642: __hf, __eql, __a, __unique_keys{}) 9642: { } 9642: 9642: _Hashtable& 9642: operator=(const _Hashtable& __ht); 9642: 9642: _Hashtable& 9642: operator=(_Hashtable&& __ht) 9642: noexcept(__node_alloc_traits::_S_nothrow_move() 9642: && is_nothrow_move_assignable<_Hash>::value 9642: && is_nothrow_move_assignable<_Equal>::value) 9642: { 9642: constexpr bool __move_storage = 9642: __node_alloc_traits::_S_propagate_on_move_assign() 9642: || __node_alloc_traits::_S_always_equal(); 9642: _M_move_assign(std::move(__ht), __bool_constant<__move_storage>()); 9642: return *this; 9642: } 9642: 9642: _Hashtable& 9642: operator=(initializer_list __l) 9642: { 9642: __reuse_or_alloc_node_gen_t __roan(_M_begin(), *this); 9642: _M_before_begin._M_nxt = nullptr; 9642: clear(); 9642: 9642: 9642: auto __l_bkt_count = _M_rehash_policy._M_bkt_for_elements(__l.size()); 9642: 9642: 9642: if (_M_bucket_count < __l_bkt_count) 9642: rehash(__l_bkt_count); 9642: 9642: this->_M_insert_range(__l.begin(), __l.end(), __roan, __unique_keys{}); 9642: return *this; 9642: } 9642: 9642: ~_Hashtable() noexcept; 9642: 9642: void 9642: swap(_Hashtable&) 9642: noexcept(__and_<__is_nothrow_swappable<_Hash>, 9642: __is_nothrow_swappable<_Equal>>::value); 9642: 9642: 9642: iterator 9642: begin() noexcept 9642: { return iterator(_M_begin()); } 9642: 9642: const_iterator 9642: begin() const noexcept 9642: { return const_iterator(_M_begin()); } 9642: 9642: iterator 9642: end() noexcept 9642: { return iterator(nullptr); } 9642: 9642: const_iterator 9642: end() const noexcept 9642: { return const_iterator(nullptr); } 9642: 9642: const_iterator 9642: cbegin() const noexcept 9642: { return const_iterator(_M_begin()); } 9642: 9642: const_iterator 9642: cend() const noexcept 9642: { return const_iterator(nullptr); } 9642: 9642: size_type 9642: size() const noexcept 9642: { return _M_element_count; } 9642: 9642: [[__nodiscard__]] bool 9642: empty() const noexcept 9642: { return size() == 0; } 9642: 9642: allocator_type 9642: get_allocator() const noexcept 9642: { return allocator_type(this->_M_node_allocator()); } 9642: 9642: size_type 9642: max_size() const noexcept 9642: { return __node_alloc_traits::max_size(this->_M_node_allocator()); } 9642: 9642: 9642: key_equal 9642: key_eq() const 9642: { return this->_M_eq(); } 9642: 9642: 9642: 9642: 9642: size_type 9642: bucket_count() const noexcept 9642: { return _M_bucket_count; } 9642: 9642: size_type 9642: max_bucket_count() const noexcept 9642: { return max_size(); } 9642: 9642: size_type 9642: bucket_size(size_type __bkt) const 9642: { return std::distance(begin(__bkt), end(__bkt)); } 9642: 9642: size_type 9642: bucket(const key_type& __k) const 9642: { return _M_bucket_index(this->_M_hash_code(__k)); } 9642: 9642: local_iterator 9642: begin(size_type __bkt) 9642: { 9642: return local_iterator(*this, _M_bucket_begin(__bkt), 9642: __bkt, _M_bucket_count); 9642: } 9642: 9642: local_iterator 9642: end(size_type __bkt) 9642: { return local_iterator(*this, nullptr, __bkt, _M_bucket_count); } 9642: 9642: const_local_iterator 9642: begin(size_type __bkt) const 9642: { 9642: return const_local_iterator(*this, _M_bucket_begin(__bkt), 9642: __bkt, _M_bucket_count); 9642: } 9642: 9642: const_local_iterator 9642: end(size_type __bkt) const 9642: { return const_local_iterator(*this, nullptr, __bkt, _M_bucket_count); } 9642: 9642: 9642: const_local_iterator 9642: cbegin(size_type __bkt) const 9642: { 9642: return const_local_iterator(*this, _M_bucket_begin(__bkt), 9642: __bkt, _M_bucket_count); 9642: } 9642: 9642: const_local_iterator 9642: cend(size_type __bkt) const 9642: { return const_local_iterator(*this, nullptr, __bkt, _M_bucket_count); } 9642: 9642: float 9642: load_factor() const noexcept 9642: { 9642: return static_cast(size()) / static_cast(bucket_count()); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const _RehashPolicy& 9642: __rehash_policy() const 9642: { return _M_rehash_policy; } 9642: 9642: void 9642: __rehash_policy(const _RehashPolicy& __pol) 9642: { _M_rehash_policy = __pol; } 9642: 9642: 9642: iterator 9642: find(const key_type& __k); 9642: 9642: const_iterator 9642: find(const key_type& __k) const; 9642: 9642: size_type 9642: count(const key_type& __k) const; 9642: 9642: std::pair 9642: equal_range(const key_type& __k); 9642: 9642: std::pair 9642: equal_range(const key_type& __k) const; 9642: # 789 "/usr/include/c++/13/bits/hashtable.h" 3 9642: private: 9642: 9642: size_type 9642: _M_bucket_index(const __node_value_type& __n) const noexcept 9642: { return __hash_code_base::_M_bucket_index(__n, _M_bucket_count); } 9642: 9642: size_type 9642: _M_bucket_index(__hash_code __c) const 9642: { return __hash_code_base::_M_bucket_index(__c, _M_bucket_count); } 9642: 9642: __node_base_ptr 9642: _M_find_before_node(const key_type&); 9642: 9642: 9642: 9642: __node_base_ptr 9642: _M_find_before_node(size_type, const key_type&, __hash_code) const; 9642: 9642: template 9642: __node_base_ptr 9642: _M_find_before_node_tr(size_type, const _Kt&, __hash_code) const; 9642: 9642: __node_ptr 9642: _M_find_node(size_type __bkt, const key_type& __key, 9642: __hash_code __c) const 9642: { 9642: __node_base_ptr __before_n = _M_find_before_node(__bkt, __key, __c); 9642: if (__before_n) 9642: return static_cast<__node_ptr>(__before_n->_M_nxt); 9642: return nullptr; 9642: } 9642: 9642: template 9642: __node_ptr 9642: _M_find_node_tr(size_type __bkt, const _Kt& __key, 9642: __hash_code __c) const 9642: { 9642: auto __before_n = _M_find_before_node_tr(__bkt, __key, __c); 9642: if (__before_n) 9642: return static_cast<__node_ptr>(__before_n->_M_nxt); 9642: return nullptr; 9642: } 9642: 9642: 9642: void 9642: _M_insert_bucket_begin(size_type, __node_ptr); 9642: 9642: 9642: void 9642: _M_remove_bucket_begin(size_type __bkt, __node_ptr __next_n, 9642: size_type __next_bkt); 9642: 9642: 9642: __node_base_ptr 9642: _M_get_previous_node(size_type __bkt, __node_ptr __n); 9642: 9642: pair 9642: _M_compute_hash_code(const_iterator __hint, const key_type& __k) const; 9642: 9642: 9642: 9642: 9642: iterator 9642: _M_insert_unique_node(size_type __bkt, __hash_code, 9642: __node_ptr __n, size_type __n_elt = 1); 9642: 9642: 9642: 9642: iterator 9642: _M_insert_multi_node(__node_ptr __hint, 9642: __hash_code __code, __node_ptr __n); 9642: 9642: template 9642: std::pair 9642: _M_emplace(true_type __uks, _Args&&... __args); 9642: 9642: template 9642: iterator 9642: _M_emplace(false_type __uks, _Args&&... __args) 9642: { return _M_emplace(cend(), __uks, std::forward<_Args>(__args)...); } 9642: 9642: 9642: template 9642: iterator 9642: _M_emplace(const_iterator, true_type __uks, _Args&&... __args) 9642: { return _M_emplace(__uks, std::forward<_Args>(__args)...).first; } 9642: 9642: template 9642: iterator 9642: _M_emplace(const_iterator, false_type __uks, _Args&&... __args); 9642: 9642: template 9642: std::pair 9642: _M_insert_unique(_Kt&&, _Arg&&, const _NodeGenerator&); 9642: 9642: template 9642: static __conditional_t< 9642: __and_<__is_nothrow_invocable<_Hash&, const key_type&>, 9642: __not_<__is_nothrow_invocable<_Hash&, _Kt>>>::value, 9642: key_type, _Kt&&> 9642: _S_forward_key(_Kt&& __k) 9642: { return std::forward<_Kt>(__k); } 9642: 9642: static const key_type& 9642: _S_forward_key(const key_type& __k) 9642: { return __k; } 9642: 9642: static key_type&& 9642: _S_forward_key(key_type&& __k) 9642: { return std::move(__k); } 9642: 9642: template 9642: std::pair 9642: _M_insert_unique_aux(_Arg&& __arg, const _NodeGenerator& __node_gen) 9642: { 9642: return _M_insert_unique( 9642: _S_forward_key(_ExtractKey{}(std::forward<_Arg>(__arg))), 9642: std::forward<_Arg>(__arg), __node_gen); 9642: } 9642: 9642: template 9642: std::pair 9642: _M_insert(_Arg&& __arg, const _NodeGenerator& __node_gen, 9642: true_type ) 9642: { 9642: using __to_value 9642: = __detail::_ConvertToValueType<_ExtractKey, value_type>; 9642: return _M_insert_unique_aux( 9642: __to_value{}(std::forward<_Arg>(__arg)), __node_gen); 9642: } 9642: 9642: template 9642: iterator 9642: _M_insert(_Arg&& __arg, const _NodeGenerator& __node_gen, 9642: false_type __uks) 9642: { 9642: using __to_value 9642: = __detail::_ConvertToValueType<_ExtractKey, value_type>; 9642: return _M_insert(cend(), 9642: __to_value{}(std::forward<_Arg>(__arg)), __node_gen, __uks); 9642: } 9642: 9642: 9642: template 9642: iterator 9642: _M_insert(const_iterator, _Arg&& __arg, 9642: const _NodeGenerator& __node_gen, true_type __uks) 9642: { 9642: return 9642: _M_insert(std::forward<_Arg>(__arg), __node_gen, __uks).first; 9642: } 9642: 9642: 9642: template 9642: iterator 9642: _M_insert(const_iterator, _Arg&&, 9642: const _NodeGenerator&, false_type __uks); 9642: 9642: size_type 9642: _M_erase(true_type __uks, const key_type&); 9642: 9642: size_type 9642: _M_erase(false_type __uks, const key_type&); 9642: 9642: iterator 9642: _M_erase(size_type __bkt, __node_base_ptr __prev_n, __node_ptr __n); 9642: 9642: public: 9642: 9642: template 9642: __ireturn_type 9642: emplace(_Args&&... __args) 9642: { return _M_emplace(__unique_keys{}, std::forward<_Args>(__args)...); } 9642: 9642: template 9642: iterator 9642: emplace_hint(const_iterator __hint, _Args&&... __args) 9642: { 9642: return _M_emplace(__hint, __unique_keys{}, 9642: std::forward<_Args>(__args)...); 9642: } 9642: 9642: 9642: 9642: 9642: iterator 9642: erase(const_iterator); 9642: 9642: 9642: iterator 9642: erase(iterator __it) 9642: { return erase(const_iterator(__it)); } 9642: 9642: size_type 9642: erase(const key_type& __k) 9642: { return _M_erase(__unique_keys{}, __k); } 9642: 9642: iterator 9642: erase(const_iterator, const_iterator); 9642: 9642: void 9642: clear() noexcept; 9642: 9642: 9642: 9642: void rehash(size_type __bkt_count); 9642: 9642: 9642: 9642: 9642: 9642: 9642: insert_return_type 9642: _M_reinsert_node(node_type&& __nh) 9642: { 9642: insert_return_type __ret; 9642: if (__nh.empty()) 9642: __ret.position = end(); 9642: else 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(get_allocator() == __nh.get_allocator())) __builtin_unreachable(); } while (false); 9642: 9642: const key_type& __k = __nh._M_key(); 9642: __hash_code __code = this->_M_hash_code(__k); 9642: size_type __bkt = _M_bucket_index(__code); 9642: if (__node_ptr __n = _M_find_node(__bkt, __k, __code)) 9642: { 9642: __ret.node = std::move(__nh); 9642: __ret.position = iterator(__n); 9642: __ret.inserted = false; 9642: } 9642: else 9642: { 9642: __ret.position 9642: = _M_insert_unique_node(__bkt, __code, __nh._M_ptr); 9642: __nh.release(); 9642: __ret.inserted = true; 9642: } 9642: } 9642: return __ret; 9642: } 9642: 9642: 9642: iterator 9642: _M_reinsert_node_multi(const_iterator __hint, node_type&& __nh) 9642: { 9642: if (__nh.empty()) 9642: return end(); 9642: 9642: do { if (std::__is_constant_evaluated() && !bool(get_allocator() == __nh.get_allocator())) __builtin_unreachable(); } while (false); 9642: 9642: const key_type& __k = __nh._M_key(); 9642: auto __code = this->_M_hash_code(__k); 9642: auto __ret 9642: = _M_insert_multi_node(__hint._M_cur, __code, __nh._M_ptr); 9642: __nh.release(); 9642: return __ret; 9642: } 9642: 9642: private: 9642: node_type 9642: _M_extract_node(size_t __bkt, __node_base_ptr __prev_n) 9642: { 9642: __node_ptr __n = static_cast<__node_ptr>(__prev_n->_M_nxt); 9642: if (__prev_n == _M_buckets[__bkt]) 9642: _M_remove_bucket_begin(__bkt, __n->_M_next(), 9642: __n->_M_nxt ? _M_bucket_index(*__n->_M_next()) : 0); 9642: else if (__n->_M_nxt) 9642: { 9642: size_type __next_bkt = _M_bucket_index(*__n->_M_next()); 9642: if (__next_bkt != __bkt) 9642: _M_buckets[__next_bkt] = __prev_n; 9642: } 9642: 9642: __prev_n->_M_nxt = __n->_M_nxt; 9642: __n->_M_nxt = nullptr; 9642: --_M_element_count; 9642: return { __n, this->_M_node_allocator() }; 9642: } 9642: 9642: 9642: 9642: template 9642: __hash_code 9642: _M_src_hash_code(const _H2&, const key_type& __k, 9642: const __node_value_type& __src_n) const 9642: { 9642: if constexpr (std::is_same_v<_H2, _Hash>) 9642: if constexpr (std::is_empty_v<_Hash>) 9642: return this->_M_hash_code(__src_n); 9642: 9642: return this->_M_hash_code(__k); 9642: } 9642: 9642: public: 9642: 9642: node_type 9642: extract(const_iterator __pos) 9642: { 9642: size_t __bkt = _M_bucket_index(*__pos._M_cur); 9642: return _M_extract_node(__bkt, 9642: _M_get_previous_node(__bkt, __pos._M_cur)); 9642: } 9642: 9642: 9642: node_type 9642: extract(const _Key& __k) 9642: { 9642: node_type __nh; 9642: __hash_code __code = this->_M_hash_code(__k); 9642: std::size_t __bkt = _M_bucket_index(__code); 9642: if (__node_base_ptr __prev_node = _M_find_before_node(__bkt, __k, __code)) 9642: __nh = _M_extract_node(__bkt, __prev_node); 9642: return __nh; 9642: } 9642: 9642: 9642: template 9642: void 9642: _M_merge_unique(_Compatible_Hashtable& __src) 9642: { 9642: static_assert(is_same_v, "Node types are compatible"); 9642: do { if (std::__is_constant_evaluated() && !bool(get_allocator() == __src.get_allocator())) __builtin_unreachable(); } while (false); 9642: 9642: auto __n_elt = __src.size(); 9642: for (auto __i = __src.cbegin(), __end = __src.cend(); __i != __end;) 9642: { 9642: auto __pos = __i++; 9642: const key_type& __k = _ExtractKey{}(*__pos); 9642: __hash_code __code 9642: = _M_src_hash_code(__src.hash_function(), __k, *__pos._M_cur); 9642: size_type __bkt = _M_bucket_index(__code); 9642: if (_M_find_node(__bkt, __k, __code) == nullptr) 9642: { 9642: auto __nh = __src.extract(__pos); 9642: _M_insert_unique_node(__bkt, __code, __nh._M_ptr, __n_elt); 9642: __nh.release(); 9642: __n_elt = 1; 9642: } 9642: else if (__n_elt != 1) 9642: --__n_elt; 9642: } 9642: } 9642: 9642: 9642: template 9642: void 9642: _M_merge_multi(_Compatible_Hashtable& __src) 9642: { 9642: static_assert(is_same_v, "Node types are compatible"); 9642: do { if (std::__is_constant_evaluated() && !bool(get_allocator() == __src.get_allocator())) __builtin_unreachable(); } while (false); 9642: 9642: __node_ptr __hint = nullptr; 9642: this->reserve(size() + __src.size()); 9642: for (auto __i = __src.cbegin(), __end = __src.cend(); __i != __end;) 9642: { 9642: auto __pos = __i++; 9642: const key_type& __k = _ExtractKey{}(*__pos); 9642: __hash_code __code 9642: = _M_src_hash_code(__src.hash_function(), __k, *__pos._M_cur); 9642: auto __nh = __src.extract(__pos); 9642: __hint = _M_insert_multi_node(__hint, __code, __nh._M_ptr)._M_cur; 9642: __nh.release(); 9642: } 9642: } 9642: 9642: 9642: private: 9642: 9642: void _M_rehash_aux(size_type __bkt_count, true_type __uks); 9642: 9642: 9642: void _M_rehash_aux(size_type __bkt_count, false_type __uks); 9642: 9642: 9642: 9642: void _M_rehash(size_type __bkt_count, const __rehash_state& __state); 9642: }; 9642: 9642: 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_bucket_begin(size_type __bkt) const 9642: -> __node_ptr 9642: { 9642: __node_base_ptr __n = _M_buckets[__bkt]; 9642: return __n ? static_cast<__node_ptr>(__n->_M_nxt) : nullptr; 9642: } 9642: 9642: template 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _Hashtable(size_type __bkt_count_hint, 9642: const _Hash& __h, const _Equal& __eq, const allocator_type& __a) 9642: : _Hashtable(__h, __eq, __a) 9642: { 9642: auto __bkt_count = _M_rehash_policy._M_next_bkt(__bkt_count_hint); 9642: if (__bkt_count > _M_bucket_count) 9642: { 9642: _M_buckets = _M_allocate_buckets(__bkt_count); 9642: _M_bucket_count = __bkt_count; 9642: } 9642: } 9642: 9642: template 9642: template 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _Hashtable(_InputIterator __f, _InputIterator __l, 9642: size_type __bkt_count_hint, 9642: const _Hash& __h, const _Equal& __eq, 9642: const allocator_type& __a, true_type ) 9642: : _Hashtable(__bkt_count_hint, __h, __eq, __a) 9642: { this->insert(__f, __l); } 9642: 9642: template 9642: template 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _Hashtable(_InputIterator __f, _InputIterator __l, 9642: size_type __bkt_count_hint, 9642: const _Hash& __h, const _Equal& __eq, 9642: const allocator_type& __a, false_type __uks) 9642: : _Hashtable(__h, __eq, __a) 9642: { 9642: auto __nb_elems = __detail::__distance_fw(__f, __l); 9642: auto __bkt_count = 9642: _M_rehash_policy._M_next_bkt( 9642: std::max(_M_rehash_policy._M_bkt_for_elements(__nb_elems), 9642: __bkt_count_hint)); 9642: 9642: if (__bkt_count > _M_bucket_count) 9642: { 9642: _M_buckets = _M_allocate_buckets(__bkt_count); 9642: _M_bucket_count = __bkt_count; 9642: } 9642: 9642: __alloc_node_gen_t __node_gen(*this); 9642: for (; __f != __l; ++__f) 9642: _M_insert(*__f, __node_gen, __uks); 9642: } 9642: 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: operator=(const _Hashtable& __ht) 9642: -> _Hashtable& 9642: { 9642: if (&__ht == this) 9642: return *this; 9642: 9642: if (__node_alloc_traits::_S_propagate_on_copy_assign()) 9642: { 9642: auto& __this_alloc = this->_M_node_allocator(); 9642: auto& __that_alloc = __ht._M_node_allocator(); 9642: if (!__node_alloc_traits::_S_always_equal() 9642: && __this_alloc != __that_alloc) 9642: { 9642: 9642: this->_M_deallocate_nodes(_M_begin()); 9642: _M_before_begin._M_nxt = nullptr; 9642: _M_deallocate_buckets(); 9642: _M_buckets = nullptr; 9642: std::__alloc_on_copy(__this_alloc, __that_alloc); 9642: __hashtable_base::operator=(__ht); 9642: _M_bucket_count = __ht._M_bucket_count; 9642: _M_element_count = __ht._M_element_count; 9642: _M_rehash_policy = __ht._M_rehash_policy; 9642: __alloc_node_gen_t __alloc_node_gen(*this); 9642: try 9642: { 9642: _M_assign(__ht, __alloc_node_gen); 9642: } 9642: catch(...) 9642: { 9642: 9642: 9642: _M_reset(); 9642: throw; 9642: } 9642: return *this; 9642: } 9642: std::__alloc_on_copy(__this_alloc, __that_alloc); 9642: } 9642: 9642: 9642: _M_assign_elements(__ht); 9642: return *this; 9642: } 9642: 9642: template 9642: template 9642: void 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_assign_elements(_Ht&& __ht) 9642: { 9642: __buckets_ptr __former_buckets = nullptr; 9642: std::size_t __former_bucket_count = _M_bucket_count; 9642: const __rehash_state& __former_state = _M_rehash_policy._M_state(); 9642: 9642: if (_M_bucket_count != __ht._M_bucket_count) 9642: { 9642: __former_buckets = _M_buckets; 9642: _M_buckets = _M_allocate_buckets(__ht._M_bucket_count); 9642: _M_bucket_count = __ht._M_bucket_count; 9642: } 9642: else 9642: __builtin_memset(_M_buckets, 0, 9642: _M_bucket_count * sizeof(__node_base_ptr)); 9642: 9642: try 9642: { 9642: __hashtable_base::operator=(std::forward<_Ht>(__ht)); 9642: _M_element_count = __ht._M_element_count; 9642: _M_rehash_policy = __ht._M_rehash_policy; 9642: __reuse_or_alloc_node_gen_t __roan(_M_begin(), *this); 9642: _M_before_begin._M_nxt = nullptr; 9642: _M_assign(std::forward<_Ht>(__ht), __roan); 9642: if (__former_buckets) 9642: _M_deallocate_buckets(__former_buckets, __former_bucket_count); 9642: } 9642: catch(...) 9642: { 9642: if (__former_buckets) 9642: { 9642: 9642: _M_deallocate_buckets(); 9642: _M_rehash_policy._M_reset(__former_state); 9642: _M_buckets = __former_buckets; 9642: _M_bucket_count = __former_bucket_count; 9642: } 9642: __builtin_memset(_M_buckets, 0, 9642: _M_bucket_count * sizeof(__node_base_ptr)); 9642: throw; 9642: } 9642: } 9642: 9642: template 9642: template 9642: void 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_assign(_Ht&& __ht, const _NodeGenerator& __node_gen) 9642: { 9642: __buckets_ptr __buckets = nullptr; 9642: if (!_M_buckets) 9642: _M_buckets = __buckets = _M_allocate_buckets(_M_bucket_count); 9642: 9642: try 9642: { 9642: if (!__ht._M_before_begin._M_nxt) 9642: return; 9642: 9642: 9642: 9642: __node_ptr __ht_n = __ht._M_begin(); 9642: __node_ptr __this_n 9642: = __node_gen(__fwd_value_for<_Ht>(__ht_n->_M_v())); 9642: this->_M_copy_code(*__this_n, *__ht_n); 9642: _M_update_bbegin(__this_n); 9642: 9642: 9642: __node_ptr __prev_n = __this_n; 9642: for (__ht_n = __ht_n->_M_next(); __ht_n; __ht_n = __ht_n->_M_next()) 9642: { 9642: __this_n = __node_gen(__fwd_value_for<_Ht>(__ht_n->_M_v())); 9642: __prev_n->_M_nxt = __this_n; 9642: this->_M_copy_code(*__this_n, *__ht_n); 9642: size_type __bkt = _M_bucket_index(*__this_n); 9642: if (!_M_buckets[__bkt]) 9642: _M_buckets[__bkt] = __prev_n; 9642: __prev_n = __this_n; 9642: } 9642: } 9642: catch(...) 9642: { 9642: clear(); 9642: if (__buckets) 9642: _M_deallocate_buckets(); 9642: throw; 9642: } 9642: } 9642: 9642: template 9642: void 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_reset() noexcept 9642: { 9642: _M_rehash_policy._M_reset(); 9642: _M_bucket_count = 1; 9642: _M_single_bucket = nullptr; 9642: _M_buckets = &_M_single_bucket; 9642: _M_before_begin._M_nxt = nullptr; 9642: _M_element_count = 0; 9642: } 9642: 9642: template 9642: void 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_move_assign(_Hashtable&& __ht, true_type) 9642: { 9642: if (__builtin_expect(std::__addressof(__ht) == this, false)) 9642: return; 9642: 9642: this->_M_deallocate_nodes(_M_begin()); 9642: _M_deallocate_buckets(); 9642: __hashtable_base::operator=(std::move(__ht)); 9642: _M_rehash_policy = __ht._M_rehash_policy; 9642: if (!__ht._M_uses_single_bucket()) 9642: _M_buckets = __ht._M_buckets; 9642: else 9642: { 9642: _M_buckets = &_M_single_bucket; 9642: _M_single_bucket = __ht._M_single_bucket; 9642: } 9642: 9642: _M_bucket_count = __ht._M_bucket_count; 9642: _M_before_begin._M_nxt = __ht._M_before_begin._M_nxt; 9642: _M_element_count = __ht._M_element_count; 9642: std::__alloc_on_move(this->_M_node_allocator(), __ht._M_node_allocator()); 9642: 9642: 9642: _M_update_bbegin(); 9642: __ht._M_reset(); 9642: } 9642: 9642: template 9642: void 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_move_assign(_Hashtable&& __ht, false_type) 9642: { 9642: if (__ht._M_node_allocator() == this->_M_node_allocator()) 9642: _M_move_assign(std::move(__ht), true_type{}); 9642: else 9642: { 9642: 9642: _M_assign_elements(std::move(__ht)); 9642: __ht.clear(); 9642: } 9642: } 9642: 9642: template 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _Hashtable(const _Hashtable& __ht) 9642: : __hashtable_base(__ht), 9642: __map_base(__ht), 9642: __rehash_base(__ht), 9642: __hashtable_alloc( 9642: __node_alloc_traits::_S_select_on_copy(__ht._M_node_allocator())), 9642: __enable_default_ctor(__ht), 9642: _M_buckets(nullptr), 9642: _M_bucket_count(__ht._M_bucket_count), 9642: _M_element_count(__ht._M_element_count), 9642: _M_rehash_policy(__ht._M_rehash_policy) 9642: { 9642: __alloc_node_gen_t __alloc_node_gen(*this); 9642: _M_assign(__ht, __alloc_node_gen); 9642: } 9642: 9642: template 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _Hashtable(_Hashtable&& __ht, __node_alloc_type&& __a, 9642: true_type ) 9642: noexcept(_S_nothrow_move()) 9642: : __hashtable_base(__ht), 9642: __map_base(__ht), 9642: __rehash_base(__ht), 9642: __hashtable_alloc(std::move(__a)), 9642: __enable_default_ctor(__ht), 9642: _M_buckets(__ht._M_buckets), 9642: _M_bucket_count(__ht._M_bucket_count), 9642: _M_before_begin(__ht._M_before_begin._M_nxt), 9642: _M_element_count(__ht._M_element_count), 9642: _M_rehash_policy(__ht._M_rehash_policy) 9642: { 9642: 9642: if (__ht._M_uses_single_bucket()) 9642: { 9642: _M_buckets = &_M_single_bucket; 9642: _M_single_bucket = __ht._M_single_bucket; 9642: } 9642: 9642: 9642: _M_update_bbegin(); 9642: 9642: __ht._M_reset(); 9642: } 9642: 9642: template 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _Hashtable(const _Hashtable& __ht, const allocator_type& __a) 9642: : __hashtable_base(__ht), 9642: __map_base(__ht), 9642: __rehash_base(__ht), 9642: __hashtable_alloc(__node_alloc_type(__a)), 9642: __enable_default_ctor(__ht), 9642: _M_buckets(), 9642: _M_bucket_count(__ht._M_bucket_count), 9642: _M_element_count(__ht._M_element_count), 9642: _M_rehash_policy(__ht._M_rehash_policy) 9642: { 9642: __alloc_node_gen_t __alloc_node_gen(*this); 9642: _M_assign(__ht, __alloc_node_gen); 9642: } 9642: 9642: template 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _Hashtable(_Hashtable&& __ht, __node_alloc_type&& __a, 9642: false_type ) 9642: : __hashtable_base(__ht), 9642: __map_base(__ht), 9642: __rehash_base(__ht), 9642: __hashtable_alloc(std::move(__a)), 9642: __enable_default_ctor(__ht), 9642: _M_buckets(nullptr), 9642: _M_bucket_count(__ht._M_bucket_count), 9642: _M_element_count(__ht._M_element_count), 9642: _M_rehash_policy(__ht._M_rehash_policy) 9642: { 9642: if (__ht._M_node_allocator() == this->_M_node_allocator()) 9642: { 9642: if (__ht._M_uses_single_bucket()) 9642: { 9642: _M_buckets = &_M_single_bucket; 9642: _M_single_bucket = __ht._M_single_bucket; 9642: } 9642: else 9642: _M_buckets = __ht._M_buckets; 9642: 9642: 9642: 9642: _M_update_bbegin(__ht._M_begin()); 9642: 9642: __ht._M_reset(); 9642: } 9642: else 9642: { 9642: __alloc_node_gen_t __alloc_gen(*this); 9642: 9642: using _Fwd_Ht = __conditional_t< 9642: __move_if_noexcept_cond::value, 9642: const _Hashtable&, _Hashtable&&>; 9642: _M_assign(std::forward<_Fwd_Ht>(__ht), __alloc_gen); 9642: __ht.clear(); 9642: } 9642: } 9642: 9642: template 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: ~_Hashtable() noexcept 9642: { 9642: 9642: 9642: 9642: static_assert(noexcept(declval() 9642: ._M_bucket_index(declval(), 9642: (std::size_t)0)), 9642: "Cache the hash code or qualify your functors involved" 9642: " in hash code and bucket index computation with noexcept"); 9642: 9642: clear(); 9642: _M_deallocate_buckets(); 9642: } 9642: 9642: template 9642: void 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: swap(_Hashtable& __x) 9642: noexcept(__and_<__is_nothrow_swappable<_Hash>, 9642: __is_nothrow_swappable<_Equal>>::value) 9642: { 9642: 9642: 9642: 9642: this->_M_swap(__x); 9642: 9642: std::__alloc_on_swap(this->_M_node_allocator(), __x._M_node_allocator()); 9642: std::swap(_M_rehash_policy, __x._M_rehash_policy); 9642: 9642: 9642: if (this->_M_uses_single_bucket()) 9642: { 9642: if (!__x._M_uses_single_bucket()) 9642: { 9642: _M_buckets = __x._M_buckets; 9642: __x._M_buckets = &__x._M_single_bucket; 9642: } 9642: } 9642: else if (__x._M_uses_single_bucket()) 9642: { 9642: __x._M_buckets = _M_buckets; 9642: _M_buckets = &_M_single_bucket; 9642: } 9642: else 9642: std::swap(_M_buckets, __x._M_buckets); 9642: 9642: std::swap(_M_bucket_count, __x._M_bucket_count); 9642: std::swap(_M_before_begin._M_nxt, __x._M_before_begin._M_nxt); 9642: std::swap(_M_element_count, __x._M_element_count); 9642: std::swap(_M_single_bucket, __x._M_single_bucket); 9642: 9642: 9642: 9642: _M_update_bbegin(); 9642: __x._M_update_bbegin(); 9642: } 9642: 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: find(const key_type& __k) 9642: -> iterator 9642: { 9642: if (size() <= __small_size_threshold()) 9642: { 9642: for (auto __it = begin(); __it != end(); ++__it) 9642: if (this->_M_key_equals(__k, *__it._M_cur)) 9642: return __it; 9642: return end(); 9642: } 9642: 9642: __hash_code __code = this->_M_hash_code(__k); 9642: std::size_t __bkt = _M_bucket_index(__code); 9642: return iterator(_M_find_node(__bkt, __k, __code)); 9642: } 9642: 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: find(const key_type& __k) const 9642: -> const_iterator 9642: { 9642: if (size() <= __small_size_threshold()) 9642: { 9642: for (auto __it = begin(); __it != end(); ++__it) 9642: if (this->_M_key_equals(__k, *__it._M_cur)) 9642: return __it; 9642: return end(); 9642: } 9642: 9642: __hash_code __code = this->_M_hash_code(__k); 9642: std::size_t __bkt = _M_bucket_index(__code); 9642: return const_iterator(_M_find_node(__bkt, __k, __code)); 9642: } 9642: # 1739 "/usr/include/c++/13/bits/hashtable.h" 3 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: count(const key_type& __k) const 9642: -> size_type 9642: { 9642: auto __it = find(__k); 9642: if (!__it._M_cur) 9642: return 0; 9642: 9642: if (__unique_keys::value) 9642: return 1; 9642: 9642: 9642: 9642: 9642: size_type __result = 1; 9642: for (auto __ref = __it++; 9642: __it._M_cur && this->_M_node_equals(*__ref._M_cur, *__it._M_cur); 9642: ++__it) 9642: ++__result; 9642: 9642: return __result; 9642: } 9642: # 1800 "/usr/include/c++/13/bits/hashtable.h" 3 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: equal_range(const key_type& __k) 9642: -> pair 9642: { 9642: auto __ite = find(__k); 9642: if (!__ite._M_cur) 9642: return { __ite, __ite }; 9642: 9642: auto __beg = __ite++; 9642: if (__unique_keys::value) 9642: return { __beg, __ite }; 9642: 9642: 9642: 9642: 9642: while (__ite._M_cur && this->_M_node_equals(*__beg._M_cur, *__ite._M_cur)) 9642: ++__ite; 9642: 9642: return { __beg, __ite }; 9642: } 9642: 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: equal_range(const key_type& __k) const 9642: -> pair 9642: { 9642: auto __ite = find(__k); 9642: if (!__ite._M_cur) 9642: return { __ite, __ite }; 9642: 9642: auto __beg = __ite++; 9642: if (__unique_keys::value) 9642: return { __beg, __ite }; 9642: 9642: 9642: 9642: 9642: while (__ite._M_cur && this->_M_node_equals(*__beg._M_cur, *__ite._M_cur)) 9642: ++__ite; 9642: 9642: return { __beg, __ite }; 9642: } 9642: # 1914 "/usr/include/c++/13/bits/hashtable.h" 3 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_find_before_node(const key_type& __k) 9642: -> __node_base_ptr 9642: { 9642: __node_base_ptr __prev_p = &_M_before_begin; 9642: if (!__prev_p->_M_nxt) 9642: return nullptr; 9642: 9642: for (__node_ptr __p = static_cast<__node_ptr>(__prev_p->_M_nxt); 9642: __p != nullptr; 9642: __p = __p->_M_next()) 9642: { 9642: if (this->_M_key_equals(__k, *__p)) 9642: return __prev_p; 9642: 9642: __prev_p = __p; 9642: } 9642: 9642: return nullptr; 9642: } 9642: 9642: 9642: 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_find_before_node(size_type __bkt, const key_type& __k, 9642: __hash_code __code) const 9642: -> __node_base_ptr 9642: { 9642: __node_base_ptr __prev_p = _M_buckets[__bkt]; 9642: if (!__prev_p) 9642: return nullptr; 9642: 9642: for (__node_ptr __p = static_cast<__node_ptr>(__prev_p->_M_nxt);; 9642: __p = __p->_M_next()) 9642: { 9642: if (this->_M_equals(__k, __code, *__p)) 9642: return __prev_p; 9642: 9642: if (!__p->_M_nxt || _M_bucket_index(*__p->_M_next()) != __bkt) 9642: break; 9642: __prev_p = __p; 9642: } 9642: 9642: return nullptr; 9642: } 9642: 9642: template 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_find_before_node_tr(size_type __bkt, const _Kt& __k, 9642: __hash_code __code) const 9642: -> __node_base_ptr 9642: { 9642: __node_base_ptr __prev_p = _M_buckets[__bkt]; 9642: if (!__prev_p) 9642: return nullptr; 9642: 9642: for (__node_ptr __p = static_cast<__node_ptr>(__prev_p->_M_nxt);; 9642: __p = __p->_M_next()) 9642: { 9642: if (this->_M_equals_tr(__k, __code, *__p)) 9642: return __prev_p; 9642: 9642: if (!__p->_M_nxt || _M_bucket_index(*__p->_M_next()) != __bkt) 9642: break; 9642: __prev_p = __p; 9642: } 9642: 9642: return nullptr; 9642: } 9642: 9642: template 9642: void 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_insert_bucket_begin(size_type __bkt, __node_ptr __node) 9642: { 9642: if (_M_buckets[__bkt]) 9642: { 9642: 9642: 9642: __node->_M_nxt = _M_buckets[__bkt]->_M_nxt; 9642: _M_buckets[__bkt]->_M_nxt = __node; 9642: } 9642: else 9642: { 9642: 9642: 9642: 9642: __node->_M_nxt = _M_before_begin._M_nxt; 9642: _M_before_begin._M_nxt = __node; 9642: 9642: if (__node->_M_nxt) 9642: 9642: 9642: _M_buckets[_M_bucket_index(*__node->_M_next())] = __node; 9642: 9642: _M_buckets[__bkt] = &_M_before_begin; 9642: } 9642: } 9642: 9642: template 9642: void 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_remove_bucket_begin(size_type __bkt, __node_ptr __next, 9642: size_type __next_bkt) 9642: { 9642: if (!__next || __next_bkt != __bkt) 9642: { 9642: 9642: 9642: if (__next) 9642: _M_buckets[__next_bkt] = _M_buckets[__bkt]; 9642: 9642: 9642: if (&_M_before_begin == _M_buckets[__bkt]) 9642: _M_before_begin._M_nxt = __next; 9642: _M_buckets[__bkt] = nullptr; 9642: } 9642: } 9642: 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_get_previous_node(size_type __bkt, __node_ptr __n) 9642: -> __node_base_ptr 9642: { 9642: __node_base_ptr __prev_n = _M_buckets[__bkt]; 9642: while (__prev_n->_M_nxt != __n) 9642: __prev_n = __prev_n->_M_nxt; 9642: return __prev_n; 9642: } 9642: 9642: template 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_emplace(true_type , _Args&&... __args) 9642: -> pair 9642: { 9642: 9642: _Scoped_node __node { this, std::forward<_Args>(__args)... }; 9642: const key_type& __k = _ExtractKey{}(__node._M_node->_M_v()); 9642: if (size() <= __small_size_threshold()) 9642: { 9642: for (auto __it = begin(); __it != end(); ++__it) 9642: if (this->_M_key_equals(__k, *__it._M_cur)) 9642: 9642: return { __it, false }; 9642: } 9642: 9642: __hash_code __code = this->_M_hash_code(__k); 9642: size_type __bkt = _M_bucket_index(__code); 9642: if (size() > __small_size_threshold()) 9642: if (__node_ptr __p = _M_find_node(__bkt, __k, __code)) 9642: 9642: return { iterator(__p), false }; 9642: 9642: 9642: auto __pos = _M_insert_unique_node(__bkt, __code, __node._M_node); 9642: __node._M_node = nullptr; 9642: return { __pos, true }; 9642: } 9642: 9642: template 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_emplace(const_iterator __hint, false_type , 9642: _Args&&... __args) 9642: -> iterator 9642: { 9642: 9642: _Scoped_node __node { this, std::forward<_Args>(__args)... }; 9642: const key_type& __k = _ExtractKey{}(__node._M_node->_M_v()); 9642: 9642: auto __res = this->_M_compute_hash_code(__hint, __k); 9642: auto __pos 9642: = _M_insert_multi_node(__res.first._M_cur, __res.second, 9642: __node._M_node); 9642: __node._M_node = nullptr; 9642: return __pos; 9642: } 9642: 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_compute_hash_code(const_iterator __hint, const key_type& __k) const 9642: -> pair 9642: { 9642: if (size() <= __small_size_threshold()) 9642: { 9642: if (__hint != cend()) 9642: { 9642: for (auto __it = __hint; __it != cend(); ++__it) 9642: if (this->_M_key_equals(__k, *__it._M_cur)) 9642: return { __it, this->_M_hash_code(*__it._M_cur) }; 9642: } 9642: 9642: for (auto __it = cbegin(); __it != __hint; ++__it) 9642: if (this->_M_key_equals(__k, *__it._M_cur)) 9642: return { __it, this->_M_hash_code(*__it._M_cur) }; 9642: } 9642: 9642: return { __hint, this->_M_hash_code(__k) }; 9642: } 9642: 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_insert_unique_node(size_type __bkt, __hash_code __code, 9642: __node_ptr __node, size_type __n_elt) 9642: -> iterator 9642: { 9642: const __rehash_state& __saved_state = _M_rehash_policy._M_state(); 9642: std::pair __do_rehash 9642: = _M_rehash_policy._M_need_rehash(_M_bucket_count, _M_element_count, 9642: __n_elt); 9642: 9642: if (__do_rehash.first) 9642: { 9642: _M_rehash(__do_rehash.second, __saved_state); 9642: __bkt = _M_bucket_index(__code); 9642: } 9642: 9642: this->_M_store_code(*__node, __code); 9642: 9642: 9642: _M_insert_bucket_begin(__bkt, __node); 9642: ++_M_element_count; 9642: return iterator(__node); 9642: } 9642: 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_insert_multi_node(__node_ptr __hint, 9642: __hash_code __code, __node_ptr __node) 9642: -> iterator 9642: { 9642: const __rehash_state& __saved_state = _M_rehash_policy._M_state(); 9642: std::pair __do_rehash 9642: = _M_rehash_policy._M_need_rehash(_M_bucket_count, _M_element_count, 1); 9642: 9642: if (__do_rehash.first) 9642: _M_rehash(__do_rehash.second, __saved_state); 9642: 9642: this->_M_store_code(*__node, __code); 9642: const key_type& __k = _ExtractKey{}(__node->_M_v()); 9642: size_type __bkt = _M_bucket_index(__code); 9642: 9642: 9642: 9642: __node_base_ptr __prev 9642: = __builtin_expect(__hint != nullptr, false) 9642: && this->_M_equals(__k, __code, *__hint) 9642: ? __hint 9642: : _M_find_before_node(__bkt, __k, __code); 9642: 9642: if (__prev) 9642: { 9642: 9642: __node->_M_nxt = __prev->_M_nxt; 9642: __prev->_M_nxt = __node; 9642: if (__builtin_expect(__prev == __hint, false)) 9642: 9642: 9642: if (__node->_M_nxt 9642: && !this->_M_equals(__k, __code, *__node->_M_next())) 9642: { 9642: size_type __next_bkt = _M_bucket_index(*__node->_M_next()); 9642: if (__next_bkt != __bkt) 9642: _M_buckets[__next_bkt] = __node; 9642: } 9642: } 9642: else 9642: 9642: 9642: 9642: _M_insert_bucket_begin(__bkt, __node); 9642: ++_M_element_count; 9642: return iterator(__node); 9642: } 9642: 9642: 9642: template 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_insert_unique(_Kt&& __k, _Arg&& __v, 9642: const _NodeGenerator& __node_gen) 9642: -> pair 9642: { 9642: if (size() <= __small_size_threshold()) 9642: for (auto __it = begin(); __it != end(); ++__it) 9642: if (this->_M_key_equals_tr(__k, *__it._M_cur)) 9642: return { __it, false }; 9642: 9642: __hash_code __code = this->_M_hash_code_tr(__k); 9642: size_type __bkt = _M_bucket_index(__code); 9642: 9642: if (size() > __small_size_threshold()) 9642: if (__node_ptr __node = _M_find_node_tr(__bkt, __k, __code)) 9642: return { iterator(__node), false }; 9642: 9642: _Scoped_node __node { 9642: __node_builder_t::_S_build(std::forward<_Kt>(__k), 9642: std::forward<_Arg>(__v), 9642: __node_gen), 9642: this 9642: }; 9642: auto __pos 9642: = _M_insert_unique_node(__bkt, __code, __node._M_node); 9642: __node._M_node = nullptr; 9642: return { __pos, true }; 9642: } 9642: 9642: 9642: template 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_insert(const_iterator __hint, _Arg&& __v, 9642: const _NodeGenerator& __node_gen, 9642: false_type ) 9642: -> iterator 9642: { 9642: 9642: _Scoped_node __node{ __node_gen(std::forward<_Arg>(__v)), this }; 9642: 9642: 9642: auto __res = this->_M_compute_hash_code( 9642: __hint, _ExtractKey{}(__node._M_node->_M_v())); 9642: 9642: auto __pos 9642: = _M_insert_multi_node(__res.first._M_cur, __res.second, 9642: __node._M_node); 9642: __node._M_node = nullptr; 9642: return __pos; 9642: } 9642: 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: erase(const_iterator __it) 9642: -> iterator 9642: { 9642: __node_ptr __n = __it._M_cur; 9642: std::size_t __bkt = _M_bucket_index(*__n); 9642: 9642: 9642: 9642: 9642: __node_base_ptr __prev_n = _M_get_previous_node(__bkt, __n); 9642: return _M_erase(__bkt, __prev_n, __n); 9642: } 9642: 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_erase(size_type __bkt, __node_base_ptr __prev_n, __node_ptr __n) 9642: -> iterator 9642: { 9642: if (__prev_n == _M_buckets[__bkt]) 9642: _M_remove_bucket_begin(__bkt, __n->_M_next(), 9642: __n->_M_nxt ? _M_bucket_index(*__n->_M_next()) : 0); 9642: else if (__n->_M_nxt) 9642: { 9642: size_type __next_bkt = _M_bucket_index(*__n->_M_next()); 9642: if (__next_bkt != __bkt) 9642: _M_buckets[__next_bkt] = __prev_n; 9642: } 9642: 9642: __prev_n->_M_nxt = __n->_M_nxt; 9642: iterator __result(__n->_M_next()); 9642: this->_M_deallocate_node(__n); 9642: --_M_element_count; 9642: 9642: return __result; 9642: } 9642: 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_erase(true_type , const key_type& __k) 9642: -> size_type 9642: { 9642: __node_base_ptr __prev_n; 9642: __node_ptr __n; 9642: std::size_t __bkt; 9642: if (size() <= __small_size_threshold()) 9642: { 9642: __prev_n = _M_find_before_node(__k); 9642: if (!__prev_n) 9642: return 0; 9642: 9642: 9642: __n = static_cast<__node_ptr>(__prev_n->_M_nxt); 9642: __bkt = _M_bucket_index(*__n); 9642: } 9642: else 9642: { 9642: __hash_code __code = this->_M_hash_code(__k); 9642: __bkt = _M_bucket_index(__code); 9642: 9642: 9642: __prev_n = _M_find_before_node(__bkt, __k, __code); 9642: if (!__prev_n) 9642: return 0; 9642: 9642: 9642: __n = static_cast<__node_ptr>(__prev_n->_M_nxt); 9642: } 9642: 9642: _M_erase(__bkt, __prev_n, __n); 9642: return 1; 9642: } 9642: 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_erase(false_type , const key_type& __k) 9642: -> size_type 9642: { 9642: std::size_t __bkt; 9642: __node_base_ptr __prev_n; 9642: __node_ptr __n; 9642: if (size() <= __small_size_threshold()) 9642: { 9642: __prev_n = _M_find_before_node(__k); 9642: if (!__prev_n) 9642: return 0; 9642: 9642: 9642: __n = static_cast<__node_ptr>(__prev_n->_M_nxt); 9642: __bkt = _M_bucket_index(*__n); 9642: } 9642: else 9642: { 9642: __hash_code __code = this->_M_hash_code(__k); 9642: __bkt = _M_bucket_index(__code); 9642: 9642: 9642: __prev_n = _M_find_before_node(__bkt, __k, __code); 9642: if (!__prev_n) 9642: return 0; 9642: 9642: __n = static_cast<__node_ptr>(__prev_n->_M_nxt); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: __node_ptr __n_last = __n->_M_next(); 9642: while (__n_last && this->_M_node_equals(*__n, *__n_last)) 9642: __n_last = __n_last->_M_next(); 9642: 9642: std::size_t __n_last_bkt = __n_last ? _M_bucket_index(*__n_last) : __bkt; 9642: 9642: 9642: size_type __result = 0; 9642: do 9642: { 9642: __node_ptr __p = __n->_M_next(); 9642: this->_M_deallocate_node(__n); 9642: __n = __p; 9642: ++__result; 9642: } 9642: while (__n != __n_last); 9642: 9642: _M_element_count -= __result; 9642: if (__prev_n == _M_buckets[__bkt]) 9642: _M_remove_bucket_begin(__bkt, __n_last, __n_last_bkt); 9642: else if (__n_last_bkt != __bkt) 9642: _M_buckets[__n_last_bkt] = __prev_n; 9642: __prev_n->_M_nxt = __n_last; 9642: return __result; 9642: } 9642: 9642: template 9642: auto 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: erase(const_iterator __first, const_iterator __last) 9642: -> iterator 9642: { 9642: __node_ptr __n = __first._M_cur; 9642: __node_ptr __last_n = __last._M_cur; 9642: if (__n == __last_n) 9642: return iterator(__n); 9642: 9642: std::size_t __bkt = _M_bucket_index(*__n); 9642: 9642: __node_base_ptr __prev_n = _M_get_previous_node(__bkt, __n); 9642: bool __is_bucket_begin = __n == _M_bucket_begin(__bkt); 9642: std::size_t __n_bkt = __bkt; 9642: for (;;) 9642: { 9642: do 9642: { 9642: __node_ptr __tmp = __n; 9642: __n = __n->_M_next(); 9642: this->_M_deallocate_node(__tmp); 9642: --_M_element_count; 9642: if (!__n) 9642: break; 9642: __n_bkt = _M_bucket_index(*__n); 9642: } 9642: while (__n != __last_n && __n_bkt == __bkt); 9642: if (__is_bucket_begin) 9642: _M_remove_bucket_begin(__bkt, __n, __n_bkt); 9642: if (__n == __last_n) 9642: break; 9642: __is_bucket_begin = true; 9642: __bkt = __n_bkt; 9642: } 9642: 9642: if (__n && (__n_bkt != __bkt || __is_bucket_begin)) 9642: _M_buckets[__n_bkt] = __prev_n; 9642: __prev_n->_M_nxt = __n; 9642: return iterator(__n); 9642: } 9642: 9642: template 9642: void 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: clear() noexcept 9642: { 9642: this->_M_deallocate_nodes(_M_begin()); 9642: __builtin_memset(_M_buckets, 0, 9642: _M_bucket_count * sizeof(__node_base_ptr)); 9642: _M_element_count = 0; 9642: _M_before_begin._M_nxt = nullptr; 9642: } 9642: 9642: template 9642: void 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: rehash(size_type __bkt_count) 9642: { 9642: const __rehash_state& __saved_state = _M_rehash_policy._M_state(); 9642: __bkt_count 9642: = std::max(_M_rehash_policy._M_bkt_for_elements(_M_element_count + 1), 9642: __bkt_count); 9642: __bkt_count = _M_rehash_policy._M_next_bkt(__bkt_count); 9642: 9642: if (__bkt_count != _M_bucket_count) 9642: _M_rehash(__bkt_count, __saved_state); 9642: else 9642: 9642: 9642: _M_rehash_policy._M_reset(__saved_state); 9642: } 9642: 9642: template 9642: void 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_rehash(size_type __bkt_count, const __rehash_state& __state) 9642: { 9642: try 9642: { 9642: _M_rehash_aux(__bkt_count, __unique_keys{}); 9642: } 9642: catch(...) 9642: { 9642: 9642: 9642: _M_rehash_policy._M_reset(__state); 9642: throw; 9642: } 9642: } 9642: 9642: 9642: template 9642: void 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_rehash_aux(size_type __bkt_count, true_type ) 9642: { 9642: __buckets_ptr __new_buckets = _M_allocate_buckets(__bkt_count); 9642: __node_ptr __p = _M_begin(); 9642: _M_before_begin._M_nxt = nullptr; 9642: std::size_t __bbegin_bkt = 0; 9642: while (__p) 9642: { 9642: __node_ptr __next = __p->_M_next(); 9642: std::size_t __bkt 9642: = __hash_code_base::_M_bucket_index(*__p, __bkt_count); 9642: if (!__new_buckets[__bkt]) 9642: { 9642: __p->_M_nxt = _M_before_begin._M_nxt; 9642: _M_before_begin._M_nxt = __p; 9642: __new_buckets[__bkt] = &_M_before_begin; 9642: if (__p->_M_nxt) 9642: __new_buckets[__bbegin_bkt] = __p; 9642: __bbegin_bkt = __bkt; 9642: } 9642: else 9642: { 9642: __p->_M_nxt = __new_buckets[__bkt]->_M_nxt; 9642: __new_buckets[__bkt]->_M_nxt = __p; 9642: } 9642: 9642: __p = __next; 9642: } 9642: 9642: _M_deallocate_buckets(); 9642: _M_bucket_count = __bkt_count; 9642: _M_buckets = __new_buckets; 9642: } 9642: 9642: 9642: 9642: template 9642: void 9642: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 9642: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 9642: _M_rehash_aux(size_type __bkt_count, false_type ) 9642: { 9642: __buckets_ptr __new_buckets = _M_allocate_buckets(__bkt_count); 9642: __node_ptr __p = _M_begin(); 9642: _M_before_begin._M_nxt = nullptr; 9642: std::size_t __bbegin_bkt = 0; 9642: std::size_t __prev_bkt = 0; 9642: __node_ptr __prev_p = nullptr; 9642: bool __check_bucket = false; 9642: 9642: while (__p) 9642: { 9642: __node_ptr __next = __p->_M_next(); 9642: std::size_t __bkt 9642: = __hash_code_base::_M_bucket_index(*__p, __bkt_count); 9642: 9642: if (__prev_p && __prev_bkt == __bkt) 9642: { 9642: 9642: 9642: 9642: __p->_M_nxt = __prev_p->_M_nxt; 9642: __prev_p->_M_nxt = __p; 9642: 9642: 9642: 9642: 9642: 9642: 9642: __check_bucket = true; 9642: } 9642: else 9642: { 9642: if (__check_bucket) 9642: { 9642: 9642: 9642: if (__prev_p->_M_nxt) 9642: { 9642: std::size_t __next_bkt 9642: = __hash_code_base::_M_bucket_index( 9642: *__prev_p->_M_next(), __bkt_count); 9642: if (__next_bkt != __prev_bkt) 9642: __new_buckets[__next_bkt] = __prev_p; 9642: } 9642: __check_bucket = false; 9642: } 9642: 9642: if (!__new_buckets[__bkt]) 9642: { 9642: __p->_M_nxt = _M_before_begin._M_nxt; 9642: _M_before_begin._M_nxt = __p; 9642: __new_buckets[__bkt] = &_M_before_begin; 9642: if (__p->_M_nxt) 9642: __new_buckets[__bbegin_bkt] = __p; 9642: __bbegin_bkt = __bkt; 9642: } 9642: else 9642: { 9642: __p->_M_nxt = __new_buckets[__bkt]->_M_nxt; 9642: __new_buckets[__bkt]->_M_nxt = __p; 9642: } 9642: } 9642: __prev_p = __p; 9642: __prev_bkt = __bkt; 9642: __p = __next; 9642: } 9642: 9642: if (__check_bucket && __prev_p->_M_nxt) 9642: { 9642: std::size_t __next_bkt 9642: = __hash_code_base::_M_bucket_index(*__prev_p->_M_next(), 9642: __bkt_count); 9642: if (__next_bkt != __prev_bkt) 9642: __new_buckets[__next_bkt] = __prev_p; 9642: } 9642: 9642: _M_deallocate_buckets(); 9642: _M_bucket_count = __bkt_count; 9642: _M_buckets = __new_buckets; 9642: } 9642: 9642: 9642: template class _Hash_merge_helper { }; 9642: 9642: 9642: 9642: 9642: template 9642: using _RequireNotAllocatorOrIntegral 9642: = __enable_if_t, __is_allocator<_Hash>>::value>; 9642: 9642: 9642: 9642: 9642: } 9642: # 34 "/usr/include/c++/13/bits/unordered_map.h" 2 3 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: template 9642: using __umap_traits = __detail::_Hashtable_traits<_Cache, false, true>; 9642: 9642: template, 9642: typename _Pred = std::equal_to<_Key>, 9642: typename _Alloc = std::allocator >, 9642: typename _Tr = __umap_traits<__cache_default<_Key, _Hash>::value>> 9642: using __umap_hashtable = _Hashtable<_Key, std::pair, 9642: _Alloc, __detail::_Select1st, 9642: _Pred, _Hash, 9642: __detail::_Mod_range_hashing, 9642: __detail::_Default_ranged_hash, 9642: __detail::_Prime_rehash_policy, _Tr>; 9642: 9642: 9642: template 9642: using __ummap_traits = __detail::_Hashtable_traits<_Cache, false, false>; 9642: 9642: template, 9642: typename _Pred = std::equal_to<_Key>, 9642: typename _Alloc = std::allocator >, 9642: typename _Tr = __ummap_traits<__cache_default<_Key, _Hash>::value>> 9642: using __ummap_hashtable = _Hashtable<_Key, std::pair, 9642: _Alloc, __detail::_Select1st, 9642: _Pred, _Hash, 9642: __detail::_Mod_range_hashing, 9642: __detail::_Default_ranged_hash, 9642: __detail::_Prime_rehash_policy, _Tr>; 9642: 9642: template 9642: class unordered_multimap; 9642: # 105 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: template, 9642: typename _Pred = equal_to<_Key>, 9642: typename _Alloc = allocator>> 9642: class unordered_map 9642: { 9642: typedef __umap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable; 9642: _Hashtable _M_h; 9642: 9642: public: 9642: 9642: 9642: 9642: typedef typename _Hashtable::key_type key_type; 9642: typedef typename _Hashtable::value_type value_type; 9642: typedef typename _Hashtable::mapped_type mapped_type; 9642: typedef typename _Hashtable::hasher hasher; 9642: typedef typename _Hashtable::key_equal key_equal; 9642: typedef typename _Hashtable::allocator_type allocator_type; 9642: 9642: 9642: 9642: 9642: typedef typename _Hashtable::pointer pointer; 9642: typedef typename _Hashtable::const_pointer const_pointer; 9642: typedef typename _Hashtable::reference reference; 9642: typedef typename _Hashtable::const_reference const_reference; 9642: typedef typename _Hashtable::iterator iterator; 9642: typedef typename _Hashtable::const_iterator const_iterator; 9642: typedef typename _Hashtable::local_iterator local_iterator; 9642: typedef typename _Hashtable::const_local_iterator const_local_iterator; 9642: typedef typename _Hashtable::size_type size_type; 9642: typedef typename _Hashtable::difference_type difference_type; 9642: 9642: 9642: 9642: using node_type = typename _Hashtable::node_type; 9642: using insert_return_type = typename _Hashtable::insert_return_type; 9642: 9642: 9642: 9642: 9642: 9642: unordered_map() = default; 9642: # 157 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: explicit 9642: unordered_map(size_type __n, 9642: const hasher& __hf = hasher(), 9642: const key_equal& __eql = key_equal(), 9642: const allocator_type& __a = allocator_type()) 9642: : _M_h(__n, __hf, __eql, __a) 9642: { } 9642: # 178 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: template 9642: unordered_map(_InputIterator __first, _InputIterator __last, 9642: size_type __n = 0, 9642: const hasher& __hf = hasher(), 9642: const key_equal& __eql = key_equal(), 9642: const allocator_type& __a = allocator_type()) 9642: : _M_h(__first, __last, __n, __hf, __eql, __a) 9642: { } 9642: 9642: 9642: unordered_map(const unordered_map&) = default; 9642: 9642: 9642: unordered_map(unordered_map&&) = default; 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: unordered_map(const allocator_type& __a) 9642: : _M_h(__a) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: unordered_map(const unordered_map& __umap, 9642: const allocator_type& __a) 9642: : _M_h(__umap._M_h, __a) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: unordered_map(unordered_map&& __umap, 9642: const allocator_type& __a) 9642: noexcept( noexcept(_Hashtable(std::move(__umap._M_h), __a)) ) 9642: : _M_h(std::move(__umap._M_h), __a) 9642: { } 9642: # 234 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: unordered_map(initializer_list __l, 9642: size_type __n = 0, 9642: const hasher& __hf = hasher(), 9642: const key_equal& __eql = key_equal(), 9642: const allocator_type& __a = allocator_type()) 9642: : _M_h(__l, __n, __hf, __eql, __a) 9642: { } 9642: 9642: unordered_map(size_type __n, const allocator_type& __a) 9642: : unordered_map(__n, hasher(), key_equal(), __a) 9642: { } 9642: 9642: unordered_map(size_type __n, const hasher& __hf, 9642: const allocator_type& __a) 9642: : unordered_map(__n, __hf, key_equal(), __a) 9642: { } 9642: 9642: template 9642: unordered_map(_InputIterator __first, _InputIterator __last, 9642: size_type __n, 9642: const allocator_type& __a) 9642: : unordered_map(__first, __last, __n, hasher(), key_equal(), __a) 9642: { } 9642: 9642: template 9642: unordered_map(_InputIterator __first, _InputIterator __last, 9642: size_type __n, const hasher& __hf, 9642: const allocator_type& __a) 9642: : unordered_map(__first, __last, __n, __hf, key_equal(), __a) 9642: { } 9642: 9642: unordered_map(initializer_list __l, 9642: size_type __n, 9642: const allocator_type& __a) 9642: : unordered_map(__l, __n, hasher(), key_equal(), __a) 9642: { } 9642: 9642: unordered_map(initializer_list __l, 9642: size_type __n, const hasher& __hf, 9642: const allocator_type& __a) 9642: : unordered_map(__l, __n, __hf, key_equal(), __a) 9642: { } 9642: 9642: 9642: unordered_map& 9642: operator=(const unordered_map&) = default; 9642: 9642: 9642: unordered_map& 9642: operator=(unordered_map&&) = default; 9642: # 296 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: unordered_map& 9642: operator=(initializer_list __l) 9642: { 9642: _M_h = __l; 9642: return *this; 9642: } 9642: 9642: 9642: allocator_type 9642: get_allocator() const noexcept 9642: { return _M_h.get_allocator(); } 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] bool 9642: empty() const noexcept 9642: { return _M_h.empty(); } 9642: 9642: 9642: size_type 9642: size() const noexcept 9642: { return _M_h.size(); } 9642: 9642: 9642: size_type 9642: max_size() const noexcept 9642: { return _M_h.max_size(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: iterator 9642: begin() noexcept 9642: { return _M_h.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_iterator 9642: begin() const noexcept 9642: { return _M_h.begin(); } 9642: 9642: const_iterator 9642: cbegin() const noexcept 9642: { return _M_h.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: iterator 9642: end() noexcept 9642: { return _M_h.end(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_iterator 9642: end() const noexcept 9642: { return _M_h.end(); } 9642: 9642: const_iterator 9642: cend() const noexcept 9642: { return _M_h.end(); } 9642: # 393 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: template 9642: std::pair 9642: emplace(_Args&&... __args) 9642: { return _M_h.emplace(std::forward<_Args>(__args)...); } 9642: # 424 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: template 9642: iterator 9642: emplace_hint(const_iterator __pos, _Args&&... __args) 9642: { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); } 9642: 9642: 9642: 9642: node_type 9642: extract(const_iterator __pos) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__pos != end())) __builtin_unreachable(); } while (false); 9642: return _M_h.extract(__pos); 9642: } 9642: 9642: 9642: node_type 9642: extract(const key_type& __key) 9642: { return _M_h.extract(__key); } 9642: 9642: 9642: insert_return_type 9642: insert(node_type&& __nh) 9642: { return _M_h._M_reinsert_node(std::move(__nh)); } 9642: 9642: 9642: iterator 9642: insert(const_iterator, node_type&& __nh) 9642: { return _M_h._M_reinsert_node(std::move(__nh)).position; } 9642: # 476 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: template 9642: pair 9642: try_emplace(const key_type& __k, _Args&&... __args) 9642: { 9642: return _M_h.try_emplace(cend(), __k, std::forward<_Args>(__args)...); 9642: } 9642: 9642: 9642: template 9642: pair 9642: try_emplace(key_type&& __k, _Args&&... __args) 9642: { 9642: return _M_h.try_emplace(cend(), std::move(__k), 9642: std::forward<_Args>(__args)...); 9642: } 9642: # 520 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: template 9642: iterator 9642: try_emplace(const_iterator __hint, const key_type& __k, 9642: _Args&&... __args) 9642: { 9642: return _M_h.try_emplace(__hint, __k, 9642: std::forward<_Args>(__args)...).first; 9642: } 9642: 9642: 9642: template 9642: iterator 9642: try_emplace(const_iterator __hint, key_type&& __k, _Args&&... __args) 9642: { 9642: return _M_h.try_emplace(__hint, std::move(__k), 9642: std::forward<_Args>(__args)...).first; 9642: } 9642: # 557 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: std::pair 9642: insert(const value_type& __x) 9642: { return _M_h.insert(__x); } 9642: 9642: 9642: 9642: std::pair 9642: insert(value_type&& __x) 9642: { return _M_h.insert(std::move(__x)); } 9642: 9642: template 9642: __enable_if_t::value, 9642: pair> 9642: insert(_Pair&& __x) 9642: { return _M_h.emplace(std::forward<_Pair>(__x)); } 9642: # 596 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: iterator 9642: insert(const_iterator __hint, const value_type& __x) 9642: { return _M_h.insert(__hint, __x); } 9642: 9642: 9642: 9642: iterator 9642: insert(const_iterator __hint, value_type&& __x) 9642: { return _M_h.insert(__hint, std::move(__x)); } 9642: 9642: template 9642: __enable_if_t::value, iterator> 9642: insert(const_iterator __hint, _Pair&& __x) 9642: { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); } 9642: # 621 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: template 9642: void 9642: insert(_InputIterator __first, _InputIterator __last) 9642: { _M_h.insert(__first, __last); } 9642: # 633 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: void 9642: insert(initializer_list __l) 9642: { _M_h.insert(__l); } 9642: # 659 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: template 9642: pair 9642: insert_or_assign(const key_type& __k, _Obj&& __obj) 9642: { 9642: auto __ret = _M_h.try_emplace(cend(), __k, 9642: std::forward<_Obj>(__obj)); 9642: if (!__ret.second) 9642: __ret.first->second = std::forward<_Obj>(__obj); 9642: return __ret; 9642: } 9642: 9642: 9642: template 9642: pair 9642: insert_or_assign(key_type&& __k, _Obj&& __obj) 9642: { 9642: auto __ret = _M_h.try_emplace(cend(), std::move(__k), 9642: std::forward<_Obj>(__obj)); 9642: if (!__ret.second) 9642: __ret.first->second = std::forward<_Obj>(__obj); 9642: return __ret; 9642: } 9642: # 708 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: template 9642: iterator 9642: insert_or_assign(const_iterator __hint, const key_type& __k, 9642: _Obj&& __obj) 9642: { 9642: auto __ret = _M_h.try_emplace(__hint, __k, std::forward<_Obj>(__obj)); 9642: if (!__ret.second) 9642: __ret.first->second = std::forward<_Obj>(__obj); 9642: return __ret.first; 9642: } 9642: 9642: 9642: template 9642: iterator 9642: insert_or_assign(const_iterator __hint, key_type&& __k, _Obj&& __obj) 9642: { 9642: auto __ret = _M_h.try_emplace(__hint, std::move(__k), 9642: std::forward<_Obj>(__obj)); 9642: if (!__ret.second) 9642: __ret.first->second = std::forward<_Obj>(__obj); 9642: return __ret.first; 9642: } 9642: # 746 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: iterator 9642: erase(const_iterator __position) 9642: { return _M_h.erase(__position); } 9642: 9642: 9642: iterator 9642: erase(iterator __position) 9642: { return _M_h.erase(__position); } 9642: # 768 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: size_type 9642: erase(const key_type& __x) 9642: { return _M_h.erase(__x); } 9642: # 786 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: iterator 9642: erase(const_iterator __first, const_iterator __last) 9642: { return _M_h.erase(__first, __last); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: clear() noexcept 9642: { _M_h.clear(); } 9642: # 810 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: void 9642: swap(unordered_map& __x) 9642: noexcept( noexcept(_M_h.swap(__x._M_h)) ) 9642: { _M_h.swap(__x._M_h); } 9642: 9642: 9642: template 9642: friend class std::_Hash_merge_helper; 9642: 9642: template 9642: void 9642: merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source) 9642: { 9642: using _Merge_helper = _Hash_merge_helper; 9642: _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); 9642: } 9642: 9642: template 9642: void 9642: merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source) 9642: { merge(__source); } 9642: 9642: template 9642: void 9642: merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source) 9642: { 9642: using _Merge_helper = _Hash_merge_helper; 9642: _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); 9642: } 9642: 9642: template 9642: void 9642: merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source) 9642: { merge(__source); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: hasher 9642: hash_function() const 9642: { return _M_h.hash_function(); } 9642: 9642: 9642: 9642: key_equal 9642: key_eq() const 9642: { return _M_h.key_eq(); } 9642: # 874 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: iterator 9642: find(const key_type& __x) 9642: { return _M_h.find(__x); } 9642: # 885 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: const_iterator 9642: find(const key_type& __x) const 9642: { return _M_h.find(__x); } 9642: # 907 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: size_type 9642: count(const key_type& __x) const 9642: { return _M_h.count(__x); } 9642: # 947 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: std::pair 9642: equal_range(const key_type& __x) 9642: { return _M_h.equal_range(__x); } 9642: # 959 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: std::pair 9642: equal_range(const key_type& __x) const 9642: { return _M_h.equal_range(__x); } 9642: # 985 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: mapped_type& 9642: operator[](const key_type& __k) 9642: { return _M_h[__k]; } 9642: 9642: mapped_type& 9642: operator[](key_type&& __k) 9642: { return _M_h[std::move(__k)]; } 9642: # 1002 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: mapped_type& 9642: at(const key_type& __k) 9642: { return _M_h.at(__k); } 9642: 9642: const mapped_type& 9642: at(const key_type& __k) const 9642: { return _M_h.at(__k); } 9642: 9642: 9642: 9642: 9642: 9642: size_type 9642: bucket_count() const noexcept 9642: { return _M_h.bucket_count(); } 9642: 9642: 9642: size_type 9642: max_bucket_count() const noexcept 9642: { return _M_h.max_bucket_count(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_type 9642: bucket_size(size_type __n) const 9642: { return _M_h.bucket_size(__n); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_type 9642: bucket(const key_type& __key) const 9642: { return _M_h.bucket(__key); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: local_iterator 9642: begin(size_type __n) 9642: { return _M_h.begin(__n); } 9642: # 1058 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: const_local_iterator 9642: begin(size_type __n) const 9642: { return _M_h.begin(__n); } 9642: 9642: const_local_iterator 9642: cbegin(size_type __n) const 9642: { return _M_h.cbegin(__n); } 9642: # 1073 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: local_iterator 9642: end(size_type __n) 9642: { return _M_h.end(__n); } 9642: # 1084 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: const_local_iterator 9642: end(size_type __n) const 9642: { return _M_h.end(__n); } 9642: 9642: const_local_iterator 9642: cend(size_type __n) const 9642: { return _M_h.cend(__n); } 9642: 9642: 9642: 9642: 9642: 9642: float 9642: load_factor() const noexcept 9642: { return _M_h.load_factor(); } 9642: 9642: 9642: 9642: float 9642: max_load_factor() const noexcept 9642: { return _M_h.max_load_factor(); } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: max_load_factor(float __z) 9642: { _M_h.max_load_factor(__z); } 9642: # 1121 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: void 9642: rehash(size_type __n) 9642: { _M_h.rehash(__n); } 9642: # 1132 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: void 9642: reserve(size_type __n) 9642: { _M_h.reserve(__n); } 9642: 9642: template 9642: friend bool 9642: operator==(const unordered_map<_Key1, _Tp1, _Hash1, _Pred1, _Alloc1>&, 9642: const unordered_map<_Key1, _Tp1, _Hash1, _Pred1, _Alloc1>&); 9642: }; 9642: 9642: 9642: 9642: template>, 9642: typename _Pred = equal_to<__iter_key_t<_InputIterator>>, 9642: typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, 9642: typename = _RequireInputIter<_InputIterator>, 9642: typename = _RequireNotAllocatorOrIntegral<_Hash>, 9642: typename = _RequireNotAllocator<_Pred>, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_map(_InputIterator, _InputIterator, 9642: typename unordered_map::size_type = {}, 9642: _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) 9642: -> unordered_map<__iter_key_t<_InputIterator>, 9642: __iter_val_t<_InputIterator>, 9642: _Hash, _Pred, _Allocator>; 9642: 9642: template, 9642: typename _Pred = equal_to<_Key>, 9642: typename _Allocator = allocator>, 9642: typename = _RequireNotAllocatorOrIntegral<_Hash>, 9642: typename = _RequireNotAllocator<_Pred>, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_map(initializer_list>, 9642: typename unordered_map::size_type = {}, 9642: _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) 9642: -> unordered_map<_Key, _Tp, _Hash, _Pred, _Allocator>; 9642: 9642: template, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_map(_InputIterator, _InputIterator, 9642: typename unordered_map::size_type, _Allocator) 9642: -> unordered_map<__iter_key_t<_InputIterator>, 9642: __iter_val_t<_InputIterator>, 9642: hash<__iter_key_t<_InputIterator>>, 9642: equal_to<__iter_key_t<_InputIterator>>, 9642: _Allocator>; 9642: 9642: template, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_map(_InputIterator, _InputIterator, _Allocator) 9642: -> unordered_map<__iter_key_t<_InputIterator>, 9642: __iter_val_t<_InputIterator>, 9642: hash<__iter_key_t<_InputIterator>>, 9642: equal_to<__iter_key_t<_InputIterator>>, 9642: _Allocator>; 9642: 9642: template, 9642: typename = _RequireNotAllocatorOrIntegral<_Hash>, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_map(_InputIterator, _InputIterator, 9642: typename unordered_map::size_type, 9642: _Hash, _Allocator) 9642: -> unordered_map<__iter_key_t<_InputIterator>, 9642: __iter_val_t<_InputIterator>, _Hash, 9642: equal_to<__iter_key_t<_InputIterator>>, _Allocator>; 9642: 9642: template> 9642: unordered_map(initializer_list>, 9642: typename unordered_map::size_type, 9642: _Allocator) 9642: -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; 9642: 9642: template> 9642: unordered_map(initializer_list>, _Allocator) 9642: -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; 9642: 9642: template, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_map(initializer_list>, 9642: typename unordered_map::size_type, 9642: _Hash, _Allocator) 9642: -> unordered_map<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>; 9642: # 1250 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: template, 9642: typename _Pred = equal_to<_Key>, 9642: typename _Alloc = allocator>> 9642: class unordered_multimap 9642: { 9642: typedef __ummap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable; 9642: _Hashtable _M_h; 9642: 9642: public: 9642: 9642: 9642: 9642: typedef typename _Hashtable::key_type key_type; 9642: typedef typename _Hashtable::value_type value_type; 9642: typedef typename _Hashtable::mapped_type mapped_type; 9642: typedef typename _Hashtable::hasher hasher; 9642: typedef typename _Hashtable::key_equal key_equal; 9642: typedef typename _Hashtable::allocator_type allocator_type; 9642: 9642: 9642: 9642: 9642: typedef typename _Hashtable::pointer pointer; 9642: typedef typename _Hashtable::const_pointer const_pointer; 9642: typedef typename _Hashtable::reference reference; 9642: typedef typename _Hashtable::const_reference const_reference; 9642: typedef typename _Hashtable::iterator iterator; 9642: typedef typename _Hashtable::const_iterator const_iterator; 9642: typedef typename _Hashtable::local_iterator local_iterator; 9642: typedef typename _Hashtable::const_local_iterator const_local_iterator; 9642: typedef typename _Hashtable::size_type size_type; 9642: typedef typename _Hashtable::difference_type difference_type; 9642: 9642: 9642: 9642: using node_type = typename _Hashtable::node_type; 9642: 9642: 9642: 9642: 9642: 9642: unordered_multimap() = default; 9642: # 1301 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: explicit 9642: unordered_multimap(size_type __n, 9642: const hasher& __hf = hasher(), 9642: const key_equal& __eql = key_equal(), 9642: const allocator_type& __a = allocator_type()) 9642: : _M_h(__n, __hf, __eql, __a) 9642: { } 9642: # 1322 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: template 9642: unordered_multimap(_InputIterator __first, _InputIterator __last, 9642: size_type __n = 0, 9642: const hasher& __hf = hasher(), 9642: const key_equal& __eql = key_equal(), 9642: const allocator_type& __a = allocator_type()) 9642: : _M_h(__first, __last, __n, __hf, __eql, __a) 9642: { } 9642: 9642: 9642: unordered_multimap(const unordered_multimap&) = default; 9642: 9642: 9642: unordered_multimap(unordered_multimap&&) = default; 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: unordered_multimap(const allocator_type& __a) 9642: : _M_h(__a) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: unordered_multimap(const unordered_multimap& __ummap, 9642: const allocator_type& __a) 9642: : _M_h(__ummap._M_h, __a) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: unordered_multimap(unordered_multimap&& __ummap, 9642: const allocator_type& __a) 9642: noexcept( noexcept(_Hashtable(std::move(__ummap._M_h), __a)) ) 9642: : _M_h(std::move(__ummap._M_h), __a) 9642: { } 9642: # 1378 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: unordered_multimap(initializer_list __l, 9642: size_type __n = 0, 9642: const hasher& __hf = hasher(), 9642: const key_equal& __eql = key_equal(), 9642: const allocator_type& __a = allocator_type()) 9642: : _M_h(__l, __n, __hf, __eql, __a) 9642: { } 9642: 9642: unordered_multimap(size_type __n, const allocator_type& __a) 9642: : unordered_multimap(__n, hasher(), key_equal(), __a) 9642: { } 9642: 9642: unordered_multimap(size_type __n, const hasher& __hf, 9642: const allocator_type& __a) 9642: : unordered_multimap(__n, __hf, key_equal(), __a) 9642: { } 9642: 9642: template 9642: unordered_multimap(_InputIterator __first, _InputIterator __last, 9642: size_type __n, 9642: const allocator_type& __a) 9642: : unordered_multimap(__first, __last, __n, hasher(), key_equal(), __a) 9642: { } 9642: 9642: template 9642: unordered_multimap(_InputIterator __first, _InputIterator __last, 9642: size_type __n, const hasher& __hf, 9642: const allocator_type& __a) 9642: : unordered_multimap(__first, __last, __n, __hf, key_equal(), __a) 9642: { } 9642: 9642: unordered_multimap(initializer_list __l, 9642: size_type __n, 9642: const allocator_type& __a) 9642: : unordered_multimap(__l, __n, hasher(), key_equal(), __a) 9642: { } 9642: 9642: unordered_multimap(initializer_list __l, 9642: size_type __n, const hasher& __hf, 9642: const allocator_type& __a) 9642: : unordered_multimap(__l, __n, __hf, key_equal(), __a) 9642: { } 9642: 9642: 9642: unordered_multimap& 9642: operator=(const unordered_multimap&) = default; 9642: 9642: 9642: unordered_multimap& 9642: operator=(unordered_multimap&&) = default; 9642: # 1440 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: unordered_multimap& 9642: operator=(initializer_list __l) 9642: { 9642: _M_h = __l; 9642: return *this; 9642: } 9642: 9642: 9642: allocator_type 9642: get_allocator() const noexcept 9642: { return _M_h.get_allocator(); } 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] bool 9642: empty() const noexcept 9642: { return _M_h.empty(); } 9642: 9642: 9642: size_type 9642: size() const noexcept 9642: { return _M_h.size(); } 9642: 9642: 9642: size_type 9642: max_size() const noexcept 9642: { return _M_h.max_size(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: iterator 9642: begin() noexcept 9642: { return _M_h.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_iterator 9642: begin() const noexcept 9642: { return _M_h.begin(); } 9642: 9642: const_iterator 9642: cbegin() const noexcept 9642: { return _M_h.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: iterator 9642: end() noexcept 9642: { return _M_h.end(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_iterator 9642: end() const noexcept 9642: { return _M_h.end(); } 9642: 9642: const_iterator 9642: cend() const noexcept 9642: { return _M_h.end(); } 9642: # 1532 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: template 9642: iterator 9642: emplace(_Args&&... __args) 9642: { return _M_h.emplace(std::forward<_Args>(__args)...); } 9642: # 1559 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: template 9642: iterator 9642: emplace_hint(const_iterator __pos, _Args&&... __args) 9642: { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); } 9642: # 1574 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: iterator 9642: insert(const value_type& __x) 9642: { return _M_h.insert(__x); } 9642: 9642: iterator 9642: insert(value_type&& __x) 9642: { return _M_h.insert(std::move(__x)); } 9642: 9642: template 9642: __enable_if_t::value, iterator> 9642: insert(_Pair&& __x) 9642: { return _M_h.emplace(std::forward<_Pair>(__x)); } 9642: # 1608 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: iterator 9642: insert(const_iterator __hint, const value_type& __x) 9642: { return _M_h.insert(__hint, __x); } 9642: 9642: 9642: 9642: iterator 9642: insert(const_iterator __hint, value_type&& __x) 9642: { return _M_h.insert(__hint, std::move(__x)); } 9642: 9642: template 9642: __enable_if_t::value, iterator> 9642: insert(const_iterator __hint, _Pair&& __x) 9642: { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); } 9642: # 1633 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: template 9642: void 9642: insert(_InputIterator __first, _InputIterator __last) 9642: { _M_h.insert(__first, __last); } 9642: # 1646 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: void 9642: insert(initializer_list __l) 9642: { _M_h.insert(__l); } 9642: 9642: 9642: 9642: node_type 9642: extract(const_iterator __pos) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__pos != end())) __builtin_unreachable(); } while (false); 9642: return _M_h.extract(__pos); 9642: } 9642: 9642: 9642: node_type 9642: extract(const key_type& __key) 9642: { return _M_h.extract(__key); } 9642: 9642: 9642: iterator 9642: insert(node_type&& __nh) 9642: { return _M_h._M_reinsert_node_multi(cend(), std::move(__nh)); } 9642: 9642: 9642: iterator 9642: insert(const_iterator __hint, node_type&& __nh) 9642: { return _M_h._M_reinsert_node_multi(__hint, std::move(__nh)); } 9642: # 1689 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: iterator 9642: erase(const_iterator __position) 9642: { return _M_h.erase(__position); } 9642: 9642: 9642: iterator 9642: erase(iterator __position) 9642: { return _M_h.erase(__position); } 9642: # 1710 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: size_type 9642: erase(const key_type& __x) 9642: { return _M_h.erase(__x); } 9642: # 1729 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: iterator 9642: erase(const_iterator __first, const_iterator __last) 9642: { return _M_h.erase(__first, __last); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: clear() noexcept 9642: { _M_h.clear(); } 9642: # 1753 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: void 9642: swap(unordered_multimap& __x) 9642: noexcept( noexcept(_M_h.swap(__x._M_h)) ) 9642: { _M_h.swap(__x._M_h); } 9642: 9642: 9642: template 9642: friend class std::_Hash_merge_helper; 9642: 9642: template 9642: void 9642: merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source) 9642: { 9642: using _Merge_helper 9642: = _Hash_merge_helper; 9642: _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); 9642: } 9642: 9642: template 9642: void 9642: merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source) 9642: { merge(__source); } 9642: 9642: template 9642: void 9642: merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source) 9642: { 9642: using _Merge_helper 9642: = _Hash_merge_helper; 9642: _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); 9642: } 9642: 9642: template 9642: void 9642: merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source) 9642: { merge(__source); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: hasher 9642: hash_function() const 9642: { return _M_h.hash_function(); } 9642: 9642: 9642: 9642: key_equal 9642: key_eq() const 9642: { return _M_h.key_eq(); } 9642: # 1819 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: iterator 9642: find(const key_type& __x) 9642: { return _M_h.find(__x); } 9642: # 1830 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: const_iterator 9642: find(const key_type& __x) const 9642: { return _M_h.find(__x); } 9642: # 1848 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: size_type 9642: count(const key_type& __x) const 9642: { return _M_h.count(__x); } 9642: # 1886 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: std::pair 9642: equal_range(const key_type& __x) 9642: { return _M_h.equal_range(__x); } 9642: # 1898 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: std::pair 9642: equal_range(const key_type& __x) const 9642: { return _M_h.equal_range(__x); } 9642: # 1914 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: size_type 9642: bucket_count() const noexcept 9642: { return _M_h.bucket_count(); } 9642: 9642: 9642: size_type 9642: max_bucket_count() const noexcept 9642: { return _M_h.max_bucket_count(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_type 9642: bucket_size(size_type __n) const 9642: { return _M_h.bucket_size(__n); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_type 9642: bucket(const key_type& __key) const 9642: { return _M_h.bucket(__key); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: local_iterator 9642: begin(size_type __n) 9642: { return _M_h.begin(__n); } 9642: # 1958 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: const_local_iterator 9642: begin(size_type __n) const 9642: { return _M_h.begin(__n); } 9642: 9642: const_local_iterator 9642: cbegin(size_type __n) const 9642: { return _M_h.cbegin(__n); } 9642: # 1973 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: local_iterator 9642: end(size_type __n) 9642: { return _M_h.end(__n); } 9642: # 1984 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: const_local_iterator 9642: end(size_type __n) const 9642: { return _M_h.end(__n); } 9642: 9642: const_local_iterator 9642: cend(size_type __n) const 9642: { return _M_h.cend(__n); } 9642: 9642: 9642: 9642: 9642: 9642: float 9642: load_factor() const noexcept 9642: { return _M_h.load_factor(); } 9642: 9642: 9642: 9642: float 9642: max_load_factor() const noexcept 9642: { return _M_h.max_load_factor(); } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: max_load_factor(float __z) 9642: { _M_h.max_load_factor(__z); } 9642: # 2021 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: void 9642: rehash(size_type __n) 9642: { _M_h.rehash(__n); } 9642: # 2032 "/usr/include/c++/13/bits/unordered_map.h" 3 9642: void 9642: reserve(size_type __n) 9642: { _M_h.reserve(__n); } 9642: 9642: template 9642: friend bool 9642: operator==(const unordered_multimap<_Key1, _Tp1, 9642: _Hash1, _Pred1, _Alloc1>&, 9642: const unordered_multimap<_Key1, _Tp1, 9642: _Hash1, _Pred1, _Alloc1>&); 9642: }; 9642: 9642: 9642: 9642: template>, 9642: typename _Pred = equal_to<__iter_key_t<_InputIterator>>, 9642: typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, 9642: typename = _RequireInputIter<_InputIterator>, 9642: typename = _RequireNotAllocatorOrIntegral<_Hash>, 9642: typename = _RequireNotAllocator<_Pred>, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_multimap(_InputIterator, _InputIterator, 9642: unordered_multimap::size_type = {}, 9642: _Hash = _Hash(), _Pred = _Pred(), 9642: _Allocator = _Allocator()) 9642: -> unordered_multimap<__iter_key_t<_InputIterator>, 9642: __iter_val_t<_InputIterator>, _Hash, _Pred, 9642: _Allocator>; 9642: 9642: template, 9642: typename _Pred = equal_to<_Key>, 9642: typename _Allocator = allocator>, 9642: typename = _RequireNotAllocatorOrIntegral<_Hash>, 9642: typename = _RequireNotAllocator<_Pred>, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_multimap(initializer_list>, 9642: unordered_multimap::size_type = {}, 9642: _Hash = _Hash(), _Pred = _Pred(), 9642: _Allocator = _Allocator()) 9642: -> unordered_multimap<_Key, _Tp, _Hash, _Pred, _Allocator>; 9642: 9642: template, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_multimap(_InputIterator, _InputIterator, 9642: unordered_multimap::size_type, _Allocator) 9642: -> unordered_multimap<__iter_key_t<_InputIterator>, 9642: __iter_val_t<_InputIterator>, 9642: hash<__iter_key_t<_InputIterator>>, 9642: equal_to<__iter_key_t<_InputIterator>>, _Allocator>; 9642: 9642: template, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_multimap(_InputIterator, _InputIterator, _Allocator) 9642: -> unordered_multimap<__iter_key_t<_InputIterator>, 9642: __iter_val_t<_InputIterator>, 9642: hash<__iter_key_t<_InputIterator>>, 9642: equal_to<__iter_key_t<_InputIterator>>, _Allocator>; 9642: 9642: template, 9642: typename = _RequireNotAllocatorOrIntegral<_Hash>, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_multimap(_InputIterator, _InputIterator, 9642: unordered_multimap::size_type, _Hash, 9642: _Allocator) 9642: -> unordered_multimap<__iter_key_t<_InputIterator>, 9642: __iter_val_t<_InputIterator>, _Hash, 9642: equal_to<__iter_key_t<_InputIterator>>, _Allocator>; 9642: 9642: template> 9642: unordered_multimap(initializer_list>, 9642: unordered_multimap::size_type, 9642: _Allocator) 9642: -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; 9642: 9642: template> 9642: unordered_multimap(initializer_list>, _Allocator) 9642: -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; 9642: 9642: template, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_multimap(initializer_list>, 9642: unordered_multimap::size_type, 9642: _Hash, _Allocator) 9642: -> unordered_multimap<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>; 9642: 9642: 9642: 9642: template 9642: inline void 9642: swap(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, 9642: unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) 9642: noexcept(noexcept(__x.swap(__y))) 9642: { __x.swap(__y); } 9642: 9642: template 9642: inline void 9642: swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, 9642: unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) 9642: noexcept(noexcept(__x.swap(__y))) 9642: { __x.swap(__y); } 9642: 9642: template 9642: inline bool 9642: operator==(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, 9642: const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) 9642: { return __x._M_h._M_equal(__y._M_h); } 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, 9642: const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) 9642: { return !(__x == __y); } 9642: 9642: 9642: template 9642: inline bool 9642: operator==(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, 9642: const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) 9642: { return __x._M_h._M_equal(__y._M_h); } 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, 9642: const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) 9642: { return !(__x == __y); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Hash_merge_helper< 9642: std::unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>, 9642: _Hash2, _Eq2> 9642: { 9642: private: 9642: template 9642: using unordered_map = std::unordered_map<_Tp...>; 9642: template 9642: using unordered_multimap = std::unordered_multimap<_Tp...>; 9642: 9642: friend unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>; 9642: 9642: static auto& 9642: _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) 9642: { return __map._M_h; } 9642: 9642: static auto& 9642: _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) 9642: { return __map._M_h; } 9642: }; 9642: 9642: 9642: template 9642: struct _Hash_merge_helper< 9642: std::unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>, 9642: _Hash2, _Eq2> 9642: { 9642: private: 9642: template 9642: using unordered_map = std::unordered_map<_Tp...>; 9642: template 9642: using unordered_multimap = std::unordered_multimap<_Tp...>; 9642: 9642: friend unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>; 9642: 9642: static auto& 9642: _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) 9642: { return __map._M_h; } 9642: 9642: static auto& 9642: _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) 9642: { return __map._M_h; } 9642: }; 9642: 9642: 9642: 9642: } 9642: # 42 "/usr/include/c++/13/unordered_map" 2 3 9642: 9642: # 1 "/usr/include/c++/13/bits/erase_if.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/erase_if.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/erase_if.h" 3 9642: 9642: 9642: 9642: 9642: 9642: namespace std 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace __detail 9642: { 9642: template 9642: typename _Container::size_type 9642: __erase_nodes_if(_Container& __cont, _UnsafeContainer& __ucont, 9642: _Predicate __pred) 9642: { 9642: typename _Container::size_type __num = 0; 9642: for (auto __iter = __ucont.begin(), __last = __ucont.end(); 9642: __iter != __last;) 9642: { 9642: if (__pred(*__iter)) 9642: { 9642: __iter = __cont.erase(__iter); 9642: ++__num; 9642: } 9642: else 9642: ++__iter; 9642: } 9642: return __num; 9642: } 9642: } 9642: 9642: 9642: } 9642: # 44 "/usr/include/c++/13/unordered_map" 2 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: namespace pmr 9642: { 9642: template, 9642: typename _Pred = std::equal_to<_Key>> 9642: using unordered_map 9642: = std::unordered_map<_Key, _Tp, _Hash, _Pred, 9642: polymorphic_allocator>>; 9642: template, 9642: typename _Pred = std::equal_to<_Key>> 9642: using unordered_multimap 9642: = std::unordered_multimap<_Key, _Tp, _Hash, _Pred, 9642: polymorphic_allocator>>; 9642: } 9642: 9642: } 9642: # 64 "/usr/include/c++/13/functional" 2 3 9642: # 1 "/usr/include/c++/13/vector" 1 3 9642: # 58 "/usr/include/c++/13/vector" 3 9642: 9642: # 59 "/usr/include/c++/13/vector" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/stl_vector.h" 1 3 9642: # 78 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: template 9642: struct _Vector_base 9642: { 9642: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 9642: rebind<_Tp>::other _Tp_alloc_type; 9642: typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>::pointer 9642: pointer; 9642: 9642: struct _Vector_impl_data 9642: { 9642: pointer _M_start; 9642: pointer _M_finish; 9642: pointer _M_end_of_storage; 9642: 9642: 9642: _Vector_impl_data() noexcept 9642: : _M_start(), _M_finish(), _M_end_of_storage() 9642: { } 9642: 9642: 9642: 9642: _Vector_impl_data(_Vector_impl_data&& __x) noexcept 9642: : _M_start(__x._M_start), _M_finish(__x._M_finish), 9642: _M_end_of_storage(__x._M_end_of_storage) 9642: { __x._M_start = __x._M_finish = __x._M_end_of_storage = pointer(); } 9642: 9642: 9642: 9642: void 9642: _M_copy_data(_Vector_impl_data const& __x) noexcept 9642: { 9642: _M_start = __x._M_start; 9642: _M_finish = __x._M_finish; 9642: _M_end_of_storage = __x._M_end_of_storage; 9642: } 9642: 9642: 9642: void 9642: _M_swap_data(_Vector_impl_data& __x) noexcept 9642: { 9642: 9642: 9642: _Vector_impl_data __tmp; 9642: __tmp._M_copy_data(*this); 9642: _M_copy_data(__x); 9642: __x._M_copy_data(__tmp); 9642: } 9642: }; 9642: 9642: struct _Vector_impl 9642: : public _Tp_alloc_type, public _Vector_impl_data 9642: { 9642: 9642: _Vector_impl() noexcept(is_nothrow_default_constructible<_Tp_alloc_type>::value) 9642: 9642: 9642: 9642: 9642: : _Tp_alloc_type() 9642: { } 9642: 9642: 9642: _Vector_impl(_Tp_alloc_type const& __a) noexcept 9642: : _Tp_alloc_type(__a) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: _Vector_impl(_Vector_impl&& __x) noexcept 9642: : _Tp_alloc_type(std::move(__x)), _Vector_impl_data(std::move(__x)) 9642: { } 9642: 9642: 9642: _Vector_impl(_Tp_alloc_type&& __a) noexcept 9642: : _Tp_alloc_type(std::move(__a)) 9642: { } 9642: 9642: 9642: _Vector_impl(_Tp_alloc_type&& __a, _Vector_impl&& __rv) noexcept 9642: : _Tp_alloc_type(std::move(__a)), _Vector_impl_data(std::move(__rv)) 9642: { } 9642: # 294 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: }; 9642: 9642: public: 9642: typedef _Alloc allocator_type; 9642: 9642: 9642: _Tp_alloc_type& 9642: _M_get_Tp_allocator() noexcept 9642: { return this->_M_impl; } 9642: 9642: 9642: const _Tp_alloc_type& 9642: _M_get_Tp_allocator() const noexcept 9642: { return this->_M_impl; } 9642: 9642: 9642: allocator_type 9642: get_allocator() const noexcept 9642: { return allocator_type(_M_get_Tp_allocator()); } 9642: 9642: 9642: _Vector_base() = default; 9642: 9642: 9642: 9642: 9642: 9642: _Vector_base(const allocator_type& __a) noexcept 9642: : _M_impl(__a) { } 9642: 9642: 9642: 9642: 9642: _Vector_base(size_t __n) 9642: : _M_impl() 9642: { _M_create_storage(__n); } 9642: 9642: 9642: 9642: _Vector_base(size_t __n, const allocator_type& __a) 9642: : _M_impl(__a) 9642: { _M_create_storage(__n); } 9642: 9642: 9642: _Vector_base(_Vector_base&&) = default; 9642: 9642: 9642: 9642: 9642: _Vector_base(_Tp_alloc_type&& __a) noexcept 9642: : _M_impl(std::move(__a)) { } 9642: 9642: 9642: _Vector_base(_Vector_base&& __x, const allocator_type& __a) 9642: : _M_impl(__a) 9642: { 9642: if (__x.get_allocator() == __a) 9642: this->_M_impl._M_swap_data(__x._M_impl); 9642: else 9642: { 9642: size_t __n = __x._M_impl._M_finish - __x._M_impl._M_start; 9642: _M_create_storage(__n); 9642: } 9642: } 9642: 9642: 9642: 9642: _Vector_base(const allocator_type& __a, _Vector_base&& __x) 9642: : _M_impl(_Tp_alloc_type(__a), std::move(__x._M_impl)) 9642: { } 9642: 9642: 9642: 9642: ~_Vector_base() noexcept 9642: { 9642: _M_deallocate(_M_impl._M_start, 9642: _M_impl._M_end_of_storage - _M_impl._M_start); 9642: } 9642: 9642: public: 9642: _Vector_impl _M_impl; 9642: 9642: 9642: pointer 9642: _M_allocate(size_t __n) 9642: { 9642: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tr; 9642: return __n != 0 ? _Tr::allocate(_M_impl, __n) : pointer(); 9642: } 9642: 9642: 9642: void 9642: _M_deallocate(pointer __p, size_t __n) 9642: { 9642: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tr; 9642: if (__p) 9642: _Tr::deallocate(_M_impl, __p, __n); 9642: } 9642: 9642: protected: 9642: 9642: void 9642: _M_create_storage(size_t __n) 9642: { 9642: this->_M_impl._M_start = this->_M_allocate(__n); 9642: this->_M_impl._M_finish = this->_M_impl._M_start; 9642: this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; 9642: } 9642: }; 9642: # 427 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: template > 9642: class vector : protected _Vector_base<_Tp, _Alloc> 9642: { 9642: # 440 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: static_assert(is_same::type, _Tp>::value, 9642: "std::vector must have a non-const, non-volatile value_type"); 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef _Vector_base<_Tp, _Alloc> _Base; 9642: typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; 9642: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Alloc_traits; 9642: 9642: public: 9642: typedef _Tp value_type; 9642: typedef typename _Base::pointer pointer; 9642: typedef typename _Alloc_traits::const_pointer const_pointer; 9642: typedef typename _Alloc_traits::reference reference; 9642: typedef typename _Alloc_traits::const_reference const_reference; 9642: typedef __gnu_cxx::__normal_iterator iterator; 9642: typedef __gnu_cxx::__normal_iterator 9642: const_iterator; 9642: typedef std::reverse_iterator const_reverse_iterator; 9642: typedef std::reverse_iterator reverse_iterator; 9642: typedef size_t size_type; 9642: typedef ptrdiff_t difference_type; 9642: typedef _Alloc allocator_type; 9642: 9642: private: 9642: 9642: static constexpr bool 9642: _S_nothrow_relocate(true_type) 9642: { 9642: return noexcept(std::__relocate_a(std::declval(), 9642: std::declval(), 9642: std::declval(), 9642: std::declval<_Tp_alloc_type&>())); 9642: } 9642: 9642: static constexpr bool 9642: _S_nothrow_relocate(false_type) 9642: { return false; } 9642: 9642: static constexpr bool 9642: _S_use_relocate() 9642: { 9642: 9642: 9642: 9642: return _S_nothrow_relocate(__is_move_insertable<_Tp_alloc_type>{}); 9642: } 9642: 9642: static pointer 9642: _S_do_relocate(pointer __first, pointer __last, pointer __result, 9642: _Tp_alloc_type& __alloc, true_type) noexcept 9642: { 9642: return std::__relocate_a(__first, __last, __result, __alloc); 9642: } 9642: 9642: static pointer 9642: _S_do_relocate(pointer, pointer, pointer __result, 9642: _Tp_alloc_type&, false_type) noexcept 9642: { return __result; } 9642: 9642: static pointer 9642: _S_relocate(pointer __first, pointer __last, pointer __result, 9642: _Tp_alloc_type& __alloc) noexcept 9642: { 9642: 9642: 9642: return std::__relocate_a(__first, __last, __result, __alloc); 9642: 9642: 9642: 9642: 9642: } 9642: 9642: 9642: protected: 9642: using _Base::_M_allocate; 9642: using _Base::_M_deallocate; 9642: using _Base::_M_impl; 9642: using _Base::_M_get_Tp_allocator; 9642: 9642: public: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: vector() = default; 9642: # 540 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: explicit 9642: 9642: vector(const allocator_type& __a) noexcept 9642: : _Base(__a) { } 9642: # 554 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: explicit 9642: 9642: vector(size_type __n, const allocator_type& __a = allocator_type()) 9642: : _Base(_S_check_init_len(__n, __a), __a) 9642: { _M_default_initialize(__n); } 9642: # 568 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: vector(size_type __n, const value_type& __value, 9642: const allocator_type& __a = allocator_type()) 9642: : _Base(_S_check_init_len(__n, __a), __a) 9642: { _M_fill_initialize(__n, __value); } 9642: # 600 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: vector(const vector& __x) 9642: : _Base(__x.size(), 9642: _Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator())) 9642: { 9642: this->_M_impl._M_finish = 9642: std::__uninitialized_copy_a(__x.begin(), __x.end(), 9642: this->_M_impl._M_start, 9642: _M_get_Tp_allocator()); 9642: } 9642: # 620 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: vector(vector&&) noexcept = default; 9642: 9642: 9642: 9642: vector(const vector& __x, const __type_identity_t& __a) 9642: : _Base(__x.size(), __a) 9642: { 9642: this->_M_impl._M_finish = 9642: std::__uninitialized_copy_a(__x.begin(), __x.end(), 9642: this->_M_impl._M_start, 9642: _M_get_Tp_allocator()); 9642: } 9642: 9642: private: 9642: 9642: vector(vector&& __rv, const allocator_type& __m, true_type) noexcept 9642: : _Base(__m, std::move(__rv)) 9642: { } 9642: 9642: 9642: vector(vector&& __rv, const allocator_type& __m, false_type) 9642: : _Base(__m) 9642: { 9642: if (__rv.get_allocator() == __m) 9642: this->_M_impl._M_swap_data(__rv._M_impl); 9642: else if (!__rv.empty()) 9642: { 9642: this->_M_create_storage(__rv.size()); 9642: this->_M_impl._M_finish = 9642: std::__uninitialized_move_a(__rv.begin(), __rv.end(), 9642: this->_M_impl._M_start, 9642: _M_get_Tp_allocator()); 9642: __rv.clear(); 9642: } 9642: } 9642: 9642: public: 9642: 9642: 9642: vector(vector&& __rv, const __type_identity_t& __m) 9642: noexcept( noexcept( 9642: vector(std::declval(), std::declval(), 9642: std::declval())) ) 9642: : vector(std::move(__rv), __m, typename _Alloc_traits::is_always_equal{}) 9642: { } 9642: # 677 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: vector(initializer_list __l, 9642: const allocator_type& __a = allocator_type()) 9642: : _Base(__a) 9642: { 9642: _M_range_initialize(__l.begin(), __l.end(), 9642: random_access_iterator_tag()); 9642: } 9642: # 704 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: template> 9642: 9642: vector(_InputIterator __first, _InputIterator __last, 9642: const allocator_type& __a = allocator_type()) 9642: : _Base(__a) 9642: { 9642: _M_range_initialize(__first, __last, 9642: std::__iterator_category(__first)); 9642: } 9642: # 732 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: ~vector() noexcept 9642: { 9642: std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, 9642: _M_get_Tp_allocator()); 9642: ; 9642: } 9642: # 749 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: vector& 9642: operator=(const vector& __x); 9642: # 764 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: vector& 9642: operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move()) 9642: { 9642: constexpr bool __move_storage = 9642: _Alloc_traits::_S_propagate_on_move_assign() 9642: || _Alloc_traits::_S_always_equal(); 9642: _M_move_assign(std::move(__x), __bool_constant<__move_storage>()); 9642: return *this; 9642: } 9642: # 786 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: vector& 9642: operator=(initializer_list __l) 9642: { 9642: this->_M_assign_aux(__l.begin(), __l.end(), 9642: random_access_iterator_tag()); 9642: return *this; 9642: } 9642: # 806 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: void 9642: assign(size_type __n, const value_type& __val) 9642: { _M_fill_assign(__n, __val); } 9642: # 824 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: template> 9642: 9642: void 9642: assign(_InputIterator __first, _InputIterator __last) 9642: { _M_assign_aux(__first, __last, std::__iterator_category(__first)); } 9642: # 853 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: void 9642: assign(initializer_list __l) 9642: { 9642: this->_M_assign_aux(__l.begin(), __l.end(), 9642: random_access_iterator_tag()); 9642: } 9642: 9642: 9642: 9642: using _Base::get_allocator; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: iterator 9642: begin() noexcept 9642: { return iterator(this->_M_impl._M_start); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: begin() const noexcept 9642: { return const_iterator(this->_M_impl._M_start); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: iterator 9642: end() noexcept 9642: { return iterator(this->_M_impl._M_finish); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: end() const noexcept 9642: { return const_iterator(this->_M_impl._M_finish); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: reverse_iterator 9642: rbegin() noexcept 9642: { return reverse_iterator(end()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: rbegin() const noexcept 9642: { return const_reverse_iterator(end()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: reverse_iterator 9642: rend() noexcept 9642: { return reverse_iterator(begin()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: rend() const noexcept 9642: { return const_reverse_iterator(begin()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: cbegin() const noexcept 9642: { return const_iterator(this->_M_impl._M_start); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: cend() const noexcept 9642: { return const_iterator(this->_M_impl._M_finish); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: crbegin() const noexcept 9642: { return const_reverse_iterator(end()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: crend() const noexcept 9642: { return const_reverse_iterator(begin()); } 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: size_type 9642: size() const noexcept 9642: { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); } 9642: 9642: 9642: [[__nodiscard__]] 9642: size_type 9642: max_size() const noexcept 9642: { return _S_max_size(_M_get_Tp_allocator()); } 9642: # 1011 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: void 9642: resize(size_type __new_size) 9642: { 9642: if (__new_size > size()) 9642: _M_default_append(__new_size - size()); 9642: else if (__new_size < size()) 9642: _M_erase_at_end(this->_M_impl._M_start + __new_size); 9642: } 9642: # 1032 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: void 9642: resize(size_type __new_size, const value_type& __x) 9642: { 9642: if (__new_size > size()) 9642: _M_fill_insert(end(), __new_size - size(), __x); 9642: else if (__new_size < size()) 9642: _M_erase_at_end(this->_M_impl._M_start + __new_size); 9642: } 9642: # 1066 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: void 9642: shrink_to_fit() 9642: { _M_shrink_to_fit(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: size_type 9642: capacity() const noexcept 9642: { return size_type(this->_M_impl._M_end_of_storage 9642: - this->_M_impl._M_start); } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: bool 9642: empty() const noexcept 9642: { return begin() == end(); } 9642: # 1108 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: void 9642: reserve(size_type __n); 9642: # 1124 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: [[__nodiscard__]] 9642: reference 9642: operator[](size_type __n) noexcept 9642: { 9642: ; 9642: return *(this->_M_impl._M_start + __n); 9642: } 9642: # 1143 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: [[__nodiscard__]] 9642: const_reference 9642: operator[](size_type __n) const noexcept 9642: { 9642: ; 9642: return *(this->_M_impl._M_start + __n); 9642: } 9642: 9642: protected: 9642: 9642: 9642: void 9642: _M_range_check(size_type __n) const 9642: { 9642: if (__n >= this->size()) 9642: __throw_out_of_range_fmt(("vector::_M_range_check: __n " "(which is %zu) >= this->size() " "(which is %zu)") 9642: 9642: , 9642: __n, this->size()); 9642: } 9642: 9642: public: 9642: # 1176 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: reference 9642: at(size_type __n) 9642: { 9642: _M_range_check(__n); 9642: return (*this)[__n]; 9642: } 9642: # 1195 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: const_reference 9642: at(size_type __n) const 9642: { 9642: _M_range_check(__n); 9642: return (*this)[__n]; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: reference 9642: front() noexcept 9642: { 9642: ; 9642: return *begin(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reference 9642: front() const noexcept 9642: { 9642: ; 9642: return *begin(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: reference 9642: back() noexcept 9642: { 9642: ; 9642: return *(end() - 1); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reference 9642: back() const noexcept 9642: { 9642: ; 9642: return *(end() - 1); 9642: } 9642: # 1258 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: [[__nodiscard__]] 9642: _Tp* 9642: data() noexcept 9642: { return _M_data_ptr(this->_M_impl._M_start); } 9642: 9642: [[__nodiscard__]] 9642: const _Tp* 9642: data() const noexcept 9642: { return _M_data_ptr(this->_M_impl._M_start); } 9642: # 1279 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: void 9642: push_back(const value_type& __x) 9642: { 9642: if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) 9642: { 9642: ; 9642: _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, 9642: __x); 9642: ++this->_M_impl._M_finish; 9642: ; 9642: } 9642: else 9642: _M_realloc_insert(end(), __x); 9642: } 9642: 9642: 9642: 9642: void 9642: push_back(value_type&& __x) 9642: { emplace_back(std::move(__x)); } 9642: 9642: template 9642: 9642: 9642: reference 9642: 9642: 9642: 9642: emplace_back(_Args&&... __args); 9642: # 1320 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: void 9642: pop_back() noexcept 9642: { 9642: ; 9642: --this->_M_impl._M_finish; 9642: _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish); 9642: ; 9642: } 9642: # 1343 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: template 9642: 9642: iterator 9642: emplace(const_iterator __position, _Args&&... __args) 9642: { return _M_emplace_aux(__position, std::forward<_Args>(__args)...); } 9642: # 1360 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: iterator 9642: insert(const_iterator __position, const value_type& __x); 9642: # 1391 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: iterator 9642: insert(const_iterator __position, value_type&& __x) 9642: { return _M_insert_rval(__position, std::move(__x)); } 9642: # 1409 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: iterator 9642: insert(const_iterator __position, initializer_list __l) 9642: { 9642: auto __offset = __position - cbegin(); 9642: _M_range_insert(begin() + __offset, __l.begin(), __l.end(), 9642: std::random_access_iterator_tag()); 9642: return begin() + __offset; 9642: } 9642: # 1435 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: iterator 9642: insert(const_iterator __position, size_type __n, const value_type& __x) 9642: { 9642: difference_type __offset = __position - cbegin(); 9642: _M_fill_insert(begin() + __offset, __n, __x); 9642: return begin() + __offset; 9642: } 9642: # 1478 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: template> 9642: 9642: iterator 9642: insert(const_iterator __position, _InputIterator __first, 9642: _InputIterator __last) 9642: { 9642: difference_type __offset = __position - cbegin(); 9642: _M_range_insert(begin() + __offset, __first, __last, 9642: std::__iterator_category(__first)); 9642: return begin() + __offset; 9642: } 9642: # 1531 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: iterator 9642: 9642: erase(const_iterator __position) 9642: { return _M_erase(begin() + (__position - cbegin())); } 9642: # 1559 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: iterator 9642: 9642: erase(const_iterator __first, const_iterator __last) 9642: { 9642: const auto __beg = begin(); 9642: const auto __cbeg = cbegin(); 9642: return _M_erase(__beg + (__first - __cbeg), __beg + (__last - __cbeg)); 9642: } 9642: # 1584 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: 9642: void 9642: swap(vector& __x) noexcept 9642: { 9642: 9642: do { if (std::__is_constant_evaluated() && !bool(_Alloc_traits::propagate_on_container_swap::value || _M_get_Tp_allocator() == __x._M_get_Tp_allocator())) __builtin_unreachable(); } while (false) 9642: ; 9642: 9642: this->_M_impl._M_swap_data(__x._M_impl); 9642: _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(), 9642: __x._M_get_Tp_allocator()); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: clear() noexcept 9642: { _M_erase_at_end(this->_M_impl._M_start); } 9642: 9642: protected: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: pointer 9642: _M_allocate_and_copy(size_type __n, 9642: _ForwardIterator __first, _ForwardIterator __last) 9642: { 9642: pointer __result = this->_M_allocate(__n); 9642: try 9642: { 9642: std::__uninitialized_copy_a(__first, __last, __result, 9642: _M_get_Tp_allocator()); 9642: return __result; 9642: } 9642: catch(...) 9642: { 9642: _M_deallocate(__result, __n); 9642: throw; 9642: } 9642: } 9642: # 1664 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: template 9642: 9642: void 9642: _M_range_initialize(_InputIterator __first, _InputIterator __last, 9642: std::input_iterator_tag) 9642: { 9642: try { 9642: for (; __first != __last; ++__first) 9642: 9642: emplace_back(*__first); 9642: 9642: 9642: 9642: } catch(...) { 9642: clear(); 9642: throw; 9642: } 9642: } 9642: 9642: 9642: template 9642: 9642: void 9642: _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last, 9642: std::forward_iterator_tag) 9642: { 9642: const size_type __n = std::distance(__first, __last); 9642: this->_M_impl._M_start 9642: = this->_M_allocate(_S_check_init_len(__n, _M_get_Tp_allocator())); 9642: this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; 9642: this->_M_impl._M_finish = 9642: std::__uninitialized_copy_a(__first, __last, 9642: this->_M_impl._M_start, 9642: _M_get_Tp_allocator()); 9642: } 9642: 9642: 9642: 9642: 9642: void 9642: _M_fill_initialize(size_type __n, const value_type& __value) 9642: { 9642: this->_M_impl._M_finish = 9642: std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value, 9642: _M_get_Tp_allocator()); 9642: } 9642: 9642: 9642: 9642: 9642: void 9642: _M_default_initialize(size_type __n) 9642: { 9642: this->_M_impl._M_finish = 9642: std::__uninitialized_default_n_a(this->_M_impl._M_start, __n, 9642: _M_get_Tp_allocator()); 9642: } 9642: # 1730 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: template 9642: 9642: void 9642: _M_assign_dispatch(_Integer __n, _Integer __val, __true_type) 9642: { _M_fill_assign(__n, __val); } 9642: 9642: 9642: template 9642: 9642: void 9642: _M_assign_dispatch(_InputIterator __first, _InputIterator __last, 9642: __false_type) 9642: { _M_assign_aux(__first, __last, std::__iterator_category(__first)); } 9642: 9642: 9642: template 9642: 9642: void 9642: _M_assign_aux(_InputIterator __first, _InputIterator __last, 9642: std::input_iterator_tag); 9642: 9642: 9642: template 9642: 9642: void 9642: _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, 9642: std::forward_iterator_tag); 9642: 9642: 9642: 9642: 9642: void 9642: _M_fill_assign(size_type __n, const value_type& __val); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: void 9642: _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __val, 9642: __true_type) 9642: { _M_fill_insert(__pos, __n, __val); } 9642: 9642: 9642: template 9642: 9642: void 9642: _M_insert_dispatch(iterator __pos, _InputIterator __first, 9642: _InputIterator __last, __false_type) 9642: { 9642: _M_range_insert(__pos, __first, __last, 9642: std::__iterator_category(__first)); 9642: } 9642: 9642: 9642: template 9642: 9642: void 9642: _M_range_insert(iterator __pos, _InputIterator __first, 9642: _InputIterator __last, std::input_iterator_tag); 9642: 9642: 9642: template 9642: 9642: void 9642: _M_range_insert(iterator __pos, _ForwardIterator __first, 9642: _ForwardIterator __last, std::forward_iterator_tag); 9642: 9642: 9642: 9642: 9642: void 9642: _M_fill_insert(iterator __pos, size_type __n, const value_type& __x); 9642: 9642: 9642: 9642: 9642: void 9642: _M_default_append(size_type __n); 9642: 9642: 9642: bool 9642: _M_shrink_to_fit(); 9642: # 1829 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: struct _Temporary_value 9642: { 9642: template 9642: explicit 9642: _Temporary_value(vector* __vec, _Args&&... __args) : _M_this(__vec) 9642: { 9642: _Alloc_traits::construct(_M_this->_M_impl, _M_ptr(), 9642: std::forward<_Args>(__args)...); 9642: } 9642: 9642: 9642: ~_Temporary_value() 9642: { _Alloc_traits::destroy(_M_this->_M_impl, _M_ptr()); } 9642: 9642: value_type& 9642: _M_val() noexcept { return _M_storage._M_val; } 9642: 9642: private: 9642: _Tp* 9642: _M_ptr() noexcept { return std::__addressof(_M_storage._M_val); } 9642: 9642: union _Storage 9642: { 9642: constexpr _Storage() : _M_byte() { } 9642: ~_Storage() { } 9642: _Storage& operator=(const _Storage&) = delete; 9642: unsigned char _M_byte; 9642: _Tp _M_val; 9642: }; 9642: 9642: vector* _M_this; 9642: _Storage _M_storage; 9642: }; 9642: 9642: 9642: 9642: template 9642: 9642: void 9642: _M_insert_aux(iterator __position, _Arg&& __arg); 9642: 9642: template 9642: 9642: void 9642: _M_realloc_insert(iterator __position, _Args&&... __args); 9642: 9642: 9642: 9642: iterator 9642: _M_insert_rval(const_iterator __position, value_type&& __v); 9642: 9642: 9642: template 9642: 9642: iterator 9642: _M_emplace_aux(const_iterator __position, _Args&&... __args); 9642: 9642: 9642: 9642: iterator 9642: _M_emplace_aux(const_iterator __position, value_type&& __v) 9642: { return _M_insert_rval(__position, std::move(__v)); } 9642: 9642: 9642: 9642: 9642: size_type 9642: _M_check_len(size_type __n, const char* __s) const 9642: { 9642: if (max_size() - size() < __n) 9642: __throw_length_error((__s)); 9642: 9642: const size_type __len = size() + (std::max)(size(), __n); 9642: return (__len < size() || __len > max_size()) ? max_size() : __len; 9642: } 9642: 9642: 9642: static size_type 9642: _S_check_init_len(size_type __n, const allocator_type& __a) 9642: { 9642: if (__n > _S_max_size(_Tp_alloc_type(__a))) 9642: __throw_length_error( 9642: ("cannot create std::vector larger than max_size()")); 9642: return __n; 9642: } 9642: 9642: static size_type 9642: _S_max_size(const _Tp_alloc_type& __a) noexcept 9642: { 9642: 9642: 9642: 9642: const size_t __diffmax 9642: = __gnu_cxx::__numeric_traits::__max / sizeof(_Tp); 9642: const size_t __allocmax = _Alloc_traits::max_size(__a); 9642: return (std::min)(__diffmax, __allocmax); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: _M_erase_at_end(pointer __pos) noexcept 9642: { 9642: if (size_type __n = this->_M_impl._M_finish - __pos) 9642: { 9642: std::_Destroy(__pos, this->_M_impl._M_finish, 9642: _M_get_Tp_allocator()); 9642: this->_M_impl._M_finish = __pos; 9642: ; 9642: } 9642: } 9642: 9642: 9642: iterator 9642: _M_erase(iterator __position); 9642: 9642: 9642: iterator 9642: _M_erase(iterator __first, iterator __last); 9642: 9642: 9642: private: 9642: 9642: 9642: 9642: 9642: void 9642: _M_move_assign(vector&& __x, true_type) noexcept 9642: { 9642: vector __tmp(get_allocator()); 9642: this->_M_impl._M_swap_data(__x._M_impl); 9642: __tmp._M_impl._M_swap_data(__x._M_impl); 9642: std::__alloc_on_move(_M_get_Tp_allocator(), __x._M_get_Tp_allocator()); 9642: } 9642: 9642: 9642: 9642: 9642: void 9642: _M_move_assign(vector&& __x, false_type) 9642: { 9642: if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator()) 9642: _M_move_assign(std::move(__x), true_type()); 9642: else 9642: { 9642: 9642: 9642: this->_M_assign_aux(std::make_move_iterator(__x.begin()), 9642: std::make_move_iterator(__x.end()), 9642: std::random_access_iterator_tag()); 9642: __x.clear(); 9642: } 9642: } 9642: 9642: 9642: template 9642: 9642: _Up* 9642: _M_data_ptr(_Up* __ptr) const noexcept 9642: { return __ptr; } 9642: 9642: 9642: template 9642: 9642: typename std::pointer_traits<_Ptr>::element_type* 9642: _M_data_ptr(_Ptr __ptr) const 9642: { return empty() ? nullptr : std::__to_address(__ptr); } 9642: # 2015 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: }; 9642: 9642: 9642: template::value_type, 9642: typename _Allocator = allocator<_ValT>, 9642: typename = _RequireInputIter<_InputIterator>, 9642: typename = _RequireAllocator<_Allocator>> 9642: vector(_InputIterator, _InputIterator, _Allocator = _Allocator()) 9642: -> vector<_ValT, _Allocator>; 9642: # 2037 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: template 9642: 9642: inline bool 9642: operator==(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) 9642: { return (__x.size() == __y.size() 9642: && std::equal(__x.begin(), __x.end(), __y.begin())); } 9642: # 2077 "/usr/include/c++/13/bits/stl_vector.h" 3 9642: template 9642: inline bool 9642: operator<(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) 9642: { return std::lexicographical_compare(__x.begin(), __x.end(), 9642: __y.begin(), __y.end()); } 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) 9642: { return !(__x == __y); } 9642: 9642: 9642: template 9642: inline bool 9642: operator>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) 9642: { return __y < __x; } 9642: 9642: 9642: template 9642: inline bool 9642: operator<=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) 9642: { return !(__y < __x); } 9642: 9642: 9642: template 9642: inline bool 9642: operator>=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) 9642: { return !(__x < __y); } 9642: 9642: 9642: 9642: template 9642: 9642: inline void 9642: swap(vector<_Tp, _Alloc>& __x, vector<_Tp, _Alloc>& __y) 9642: noexcept(noexcept(__x.swap(__y))) 9642: { __x.swap(__y); } 9642: 9642: 9642: 9642: 9642: namespace __detail::__variant 9642: { 9642: template struct _Never_valueless_alt; 9642: 9642: 9642: 9642: template 9642: struct _Never_valueless_alt> 9642: : std::is_nothrow_move_assignable> 9642: { }; 9642: } 9642: 9642: 9642: 9642: } 9642: # 67 "/usr/include/c++/13/vector" 2 3 9642: # 1 "/usr/include/c++/13/bits/stl_bvector.h" 1 3 9642: # 68 "/usr/include/c++/13/bits/stl_bvector.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: typedef unsigned long _Bit_type; 9642: enum { _S_word_bit = int(8 * sizeof(_Bit_type)) }; 9642: 9642: __attribute__((__nonnull__)) 9642: 9642: void 9642: __fill_bvector_n(_Bit_type*, size_t, bool) noexcept; 9642: 9642: 9642: 9642: struct _Bit_reference 9642: { 9642: _Bit_type * _M_p; 9642: _Bit_type _M_mask; 9642: 9642: 9642: _Bit_reference(_Bit_type * __x, _Bit_type __y) 9642: : _M_p(__x), _M_mask(__y) { } 9642: 9642: 9642: _Bit_reference() noexcept : _M_p(0), _M_mask(0) { } 9642: 9642: 9642: _Bit_reference(const _Bit_reference&) = default; 9642: 9642: 9642: [[__nodiscard__]] 9642: operator bool() const noexcept 9642: { return !!(*_M_p & _M_mask); } 9642: 9642: 9642: _Bit_reference& 9642: operator=(bool __x) noexcept 9642: { 9642: if (__x) 9642: *_M_p |= _M_mask; 9642: else 9642: *_M_p &= ~_M_mask; 9642: return *this; 9642: } 9642: # 125 "/usr/include/c++/13/bits/stl_bvector.h" 3 9642: 9642: _Bit_reference& 9642: operator=(const _Bit_reference& __x) noexcept 9642: { return *this = bool(__x); } 9642: 9642: [[__nodiscard__]] 9642: bool 9642: operator==(const _Bit_reference& __x) const 9642: { return bool(*this) == bool(__x); } 9642: 9642: [[__nodiscard__]] 9642: bool 9642: operator<(const _Bit_reference& __x) const 9642: { return !bool(*this) && bool(__x); } 9642: 9642: 9642: void 9642: flip() noexcept 9642: { *_M_p ^= _M_mask; } 9642: 9642: 9642: 9642: friend void 9642: swap(_Bit_reference __x, _Bit_reference __y) noexcept 9642: { 9642: bool __tmp = __x; 9642: __x = __y; 9642: __y = __tmp; 9642: } 9642: 9642: 9642: friend void 9642: swap(_Bit_reference __x, bool& __y) noexcept 9642: { 9642: bool __tmp = __x; 9642: __x = __y; 9642: __y = __tmp; 9642: } 9642: 9642: 9642: friend void 9642: swap(bool& __x, _Bit_reference __y) noexcept 9642: { 9642: bool __tmp = __x; 9642: __x = __y; 9642: __y = __tmp; 9642: } 9642: 9642: }; 9642: 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: struct _Bit_iterator_base 9642: : public std::iterator 9642: { 9642: _Bit_type * _M_p; 9642: unsigned int _M_offset; 9642: 9642: inline __attribute__((__always_inline__)) 9642: void 9642: _M_assume_normalized() const 9642: { 9642: 9642: unsigned int __ofst = _M_offset; 9642: __attribute__ ((__assume__ (__ofst < unsigned(_S_word_bit)))); 9642: 9642: } 9642: 9642: 9642: _Bit_iterator_base(_Bit_type * __x, unsigned int __y) 9642: : _M_p(__x), _M_offset(__y) { } 9642: 9642: 9642: void 9642: _M_bump_up() 9642: { 9642: _M_assume_normalized(); 9642: if (_M_offset++ == int(_S_word_bit) - 1) 9642: { 9642: _M_offset = 0; 9642: ++_M_p; 9642: } 9642: } 9642: 9642: 9642: void 9642: _M_bump_down() 9642: { 9642: _M_assume_normalized(); 9642: if (_M_offset-- == 0) 9642: { 9642: _M_offset = int(_S_word_bit) - 1; 9642: --_M_p; 9642: } 9642: } 9642: 9642: 9642: void 9642: _M_incr(ptrdiff_t __i) 9642: { 9642: _M_assume_normalized(); 9642: difference_type __n = __i + _M_offset; 9642: _M_p += __n / int(_S_word_bit); 9642: __n = __n % int(_S_word_bit); 9642: if (__n < 0) 9642: { 9642: __n += int(_S_word_bit); 9642: --_M_p; 9642: } 9642: _M_offset = static_cast(__n); 9642: } 9642: 9642: [[__nodiscard__]] 9642: friend bool 9642: operator==(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) 9642: { 9642: __x._M_assume_normalized(); 9642: __y._M_assume_normalized(); 9642: return __x._M_p == __y._M_p && __x._M_offset == __y._M_offset; 9642: } 9642: # 260 "/usr/include/c++/13/bits/stl_bvector.h" 3 9642: [[__nodiscard__]] 9642: friend bool 9642: operator<(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) 9642: { 9642: __x._M_assume_normalized(); 9642: __y._M_assume_normalized(); 9642: return __x._M_p < __y._M_p 9642: || (__x._M_p == __y._M_p && __x._M_offset < __y._M_offset); 9642: } 9642: 9642: [[__nodiscard__]] 9642: friend bool 9642: operator!=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) 9642: { return !(__x == __y); } 9642: 9642: [[__nodiscard__]] 9642: friend bool 9642: operator>(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) 9642: { return __y < __x; } 9642: 9642: [[__nodiscard__]] 9642: friend bool 9642: operator<=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) 9642: { return !(__y < __x); } 9642: 9642: [[__nodiscard__]] 9642: friend bool 9642: operator>=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) 9642: { return !(__x < __y); } 9642: 9642: 9642: friend ptrdiff_t 9642: operator-(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) 9642: { 9642: __x._M_assume_normalized(); 9642: __y._M_assume_normalized(); 9642: return (int(_S_word_bit) * (__x._M_p - __y._M_p) 9642: + __x._M_offset - __y._M_offset); 9642: } 9642: }; 9642: #pragma GCC diagnostic pop 9642: 9642: struct _Bit_iterator : public _Bit_iterator_base 9642: { 9642: typedef _Bit_reference reference; 9642: 9642: 9642: 9642: typedef _Bit_reference* pointer; 9642: 9642: typedef _Bit_iterator iterator; 9642: 9642: 9642: _Bit_iterator() : _Bit_iterator_base(0, 0) { } 9642: 9642: 9642: _Bit_iterator(_Bit_type * __x, unsigned int __y) 9642: : _Bit_iterator_base(__x, __y) { } 9642: 9642: 9642: iterator 9642: _M_const_cast() const 9642: { return *this; } 9642: 9642: [[__nodiscard__]] 9642: reference 9642: operator*() const 9642: { 9642: _M_assume_normalized(); 9642: return reference(_M_p, 1UL << _M_offset); 9642: } 9642: 9642: 9642: iterator& 9642: operator++() 9642: { 9642: _M_bump_up(); 9642: return *this; 9642: } 9642: 9642: 9642: iterator 9642: operator++(int) 9642: { 9642: iterator __tmp = *this; 9642: _M_bump_up(); 9642: return __tmp; 9642: } 9642: 9642: 9642: iterator& 9642: operator--() 9642: { 9642: _M_bump_down(); 9642: return *this; 9642: } 9642: 9642: 9642: iterator 9642: operator--(int) 9642: { 9642: iterator __tmp = *this; 9642: _M_bump_down(); 9642: return __tmp; 9642: } 9642: 9642: 9642: iterator& 9642: operator+=(difference_type __i) 9642: { 9642: _M_incr(__i); 9642: return *this; 9642: } 9642: 9642: 9642: iterator& 9642: operator-=(difference_type __i) 9642: { 9642: *this += -__i; 9642: return *this; 9642: } 9642: 9642: [[__nodiscard__]] 9642: reference 9642: operator[](difference_type __i) const 9642: { return *(*this + __i); } 9642: 9642: [[__nodiscard__]] 9642: friend iterator 9642: operator+(const iterator& __x, difference_type __n) 9642: { 9642: iterator __tmp = __x; 9642: __tmp += __n; 9642: return __tmp; 9642: } 9642: 9642: [[__nodiscard__]] 9642: friend iterator 9642: operator+(difference_type __n, const iterator& __x) 9642: { return __x + __n; } 9642: 9642: [[__nodiscard__]] 9642: friend iterator 9642: operator-(const iterator& __x, difference_type __n) 9642: { 9642: iterator __tmp = __x; 9642: __tmp -= __n; 9642: return __tmp; 9642: } 9642: }; 9642: 9642: struct _Bit_const_iterator : public _Bit_iterator_base 9642: { 9642: typedef bool reference; 9642: typedef bool const_reference; 9642: 9642: 9642: 9642: typedef const bool* pointer; 9642: 9642: typedef _Bit_const_iterator const_iterator; 9642: 9642: 9642: _Bit_const_iterator() : _Bit_iterator_base(0, 0) { } 9642: 9642: 9642: _Bit_const_iterator(_Bit_type * __x, unsigned int __y) 9642: : _Bit_iterator_base(__x, __y) { } 9642: 9642: 9642: _Bit_const_iterator(const _Bit_iterator& __x) 9642: : _Bit_iterator_base(__x._M_p, __x._M_offset) { } 9642: 9642: 9642: _Bit_iterator 9642: _M_const_cast() const 9642: { return _Bit_iterator(_M_p, _M_offset); } 9642: 9642: [[__nodiscard__]] 9642: const_reference 9642: operator*() const 9642: { 9642: _M_assume_normalized(); 9642: return _Bit_reference(_M_p, 1UL << _M_offset); 9642: } 9642: 9642: 9642: const_iterator& 9642: operator++() 9642: { 9642: _M_bump_up(); 9642: return *this; 9642: } 9642: 9642: 9642: const_iterator 9642: operator++(int) 9642: { 9642: const_iterator __tmp = *this; 9642: _M_bump_up(); 9642: return __tmp; 9642: } 9642: 9642: 9642: const_iterator& 9642: operator--() 9642: { 9642: _M_bump_down(); 9642: return *this; 9642: } 9642: 9642: 9642: const_iterator 9642: operator--(int) 9642: { 9642: const_iterator __tmp = *this; 9642: _M_bump_down(); 9642: return __tmp; 9642: } 9642: 9642: 9642: const_iterator& 9642: operator+=(difference_type __i) 9642: { 9642: _M_incr(__i); 9642: return *this; 9642: } 9642: 9642: 9642: const_iterator& 9642: operator-=(difference_type __i) 9642: { 9642: *this += -__i; 9642: return *this; 9642: } 9642: 9642: [[__nodiscard__]] 9642: const_reference 9642: operator[](difference_type __i) const 9642: { return *(*this + __i); } 9642: 9642: [[__nodiscard__]] 9642: friend const_iterator 9642: operator+(const const_iterator& __x, difference_type __n) 9642: { 9642: const_iterator __tmp = __x; 9642: __tmp += __n; 9642: return __tmp; 9642: } 9642: 9642: [[__nodiscard__]] 9642: friend const_iterator 9642: operator-(const const_iterator& __x, difference_type __n) 9642: { 9642: const_iterator __tmp = __x; 9642: __tmp -= __n; 9642: return __tmp; 9642: } 9642: 9642: [[__nodiscard__]] 9642: friend const_iterator 9642: operator+(difference_type __n, const const_iterator& __x) 9642: { return __x + __n; } 9642: }; 9642: 9642: template 9642: struct _Bvector_base 9642: { 9642: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 9642: rebind<_Bit_type>::other _Bit_alloc_type; 9642: typedef typename __gnu_cxx::__alloc_traits<_Bit_alloc_type> 9642: _Bit_alloc_traits; 9642: typedef typename _Bit_alloc_traits::pointer _Bit_pointer; 9642: 9642: struct _Bvector_impl_data 9642: { 9642: 9642: _Bit_iterator _M_start; 9642: # 547 "/usr/include/c++/13/bits/stl_bvector.h" 3 9642: _Bit_iterator _M_finish; 9642: _Bit_pointer _M_end_of_storage; 9642: 9642: 9642: _Bvector_impl_data() noexcept 9642: : _M_start(), _M_finish(), _M_end_of_storage() 9642: { } 9642: 9642: 9642: _Bvector_impl_data(const _Bvector_impl_data&) = default; 9642: 9642: _Bvector_impl_data& 9642: operator=(const _Bvector_impl_data&) = default; 9642: 9642: 9642: _Bvector_impl_data(_Bvector_impl_data&& __x) noexcept 9642: : _Bvector_impl_data(__x) 9642: { __x._M_reset(); } 9642: 9642: 9642: void 9642: _M_move_data(_Bvector_impl_data&& __x) noexcept 9642: { 9642: *this = __x; 9642: __x._M_reset(); 9642: } 9642: 9642: 9642: 9642: void 9642: _M_reset() noexcept 9642: { *this = _Bvector_impl_data(); } 9642: 9642: 9642: void 9642: _M_swap_data(_Bvector_impl_data& __x) noexcept 9642: { 9642: 9642: 9642: std::swap(*this, __x); 9642: } 9642: }; 9642: 9642: struct _Bvector_impl 9642: : public _Bit_alloc_type, public _Bvector_impl_data 9642: { 9642: 9642: _Bvector_impl() noexcept(is_nothrow_default_constructible<_Bit_alloc_type>::value) 9642: 9642: 9642: 9642: 9642: : _Bit_alloc_type() 9642: { } 9642: 9642: 9642: _Bvector_impl(const _Bit_alloc_type& __a) noexcept 9642: : _Bit_alloc_type(__a) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: _Bvector_impl(_Bvector_impl&& __x) noexcept 9642: : _Bit_alloc_type(std::move(__x)), _Bvector_impl_data(std::move(__x)) 9642: { } 9642: 9642: 9642: _Bvector_impl(_Bit_alloc_type&& __a, _Bvector_impl&& __x) noexcept 9642: : _Bit_alloc_type(std::move(__a)), _Bvector_impl_data(std::move(__x)) 9642: { } 9642: 9642: 9642: 9642: _Bit_type* 9642: _M_end_addr() const noexcept 9642: { 9642: if (this->_M_end_of_storage) 9642: return std::__addressof(this->_M_end_of_storage[-1]) + 1; 9642: return 0; 9642: } 9642: }; 9642: 9642: public: 9642: typedef _Alloc allocator_type; 9642: 9642: 9642: _Bit_alloc_type& 9642: _M_get_Bit_allocator() noexcept 9642: { return this->_M_impl; } 9642: 9642: 9642: const _Bit_alloc_type& 9642: _M_get_Bit_allocator() const noexcept 9642: { return this->_M_impl; } 9642: 9642: 9642: allocator_type 9642: get_allocator() const noexcept 9642: { return allocator_type(_M_get_Bit_allocator()); } 9642: 9642: 9642: _Bvector_base() = default; 9642: 9642: 9642: 9642: 9642: 9642: _Bvector_base(const allocator_type& __a) 9642: : _M_impl(__a) { } 9642: 9642: 9642: _Bvector_base(_Bvector_base&&) = default; 9642: 9642: 9642: _Bvector_base(_Bvector_base&& __x, const allocator_type& __a) noexcept 9642: : _M_impl(_Bit_alloc_type(__a), std::move(__x._M_impl)) 9642: { } 9642: 9642: 9642: 9642: ~_Bvector_base() 9642: { this->_M_deallocate(); } 9642: 9642: protected: 9642: _Bvector_impl _M_impl; 9642: 9642: 9642: _Bit_pointer 9642: _M_allocate(size_t __n) 9642: { 9642: _Bit_pointer __p = _Bit_alloc_traits::allocate(_M_impl, _S_nword(__n)); 9642: # 688 "/usr/include/c++/13/bits/stl_bvector.h" 3 9642: return __p; 9642: } 9642: 9642: 9642: void 9642: _M_deallocate() 9642: { 9642: if (_M_impl._M_start._M_p) 9642: { 9642: const size_t __n = _M_impl._M_end_addr() - _M_impl._M_start._M_p; 9642: _Bit_alloc_traits::deallocate(_M_impl, 9642: _M_impl._M_end_of_storage - __n, 9642: __n); 9642: _M_impl._M_reset(); 9642: } 9642: } 9642: 9642: 9642: 9642: void 9642: _M_move_data(_Bvector_base&& __x) noexcept 9642: { _M_impl._M_move_data(std::move(__x._M_impl)); } 9642: 9642: 9642: constexpr 9642: static size_t 9642: _S_nword(size_t __n) 9642: { return (__n + int(_S_word_bit) - 1) / int(_S_word_bit); } 9642: }; 9642: # 739 "/usr/include/c++/13/bits/stl_bvector.h" 3 9642: template 9642: class vector : protected _Bvector_base<_Alloc> 9642: { 9642: typedef _Bvector_base<_Alloc> _Base; 9642: typedef typename _Base::_Bit_pointer _Bit_pointer; 9642: typedef typename _Base::_Bit_alloc_traits _Bit_alloc_traits; 9642: 9642: 9642: friend struct std::hash; 9642: 9642: 9642: public: 9642: typedef bool value_type; 9642: typedef size_t size_type; 9642: typedef ptrdiff_t difference_type; 9642: typedef _Bit_reference reference; 9642: typedef bool const_reference; 9642: typedef _Bit_reference* pointer; 9642: typedef const bool* const_pointer; 9642: typedef _Bit_iterator iterator; 9642: typedef _Bit_const_iterator const_iterator; 9642: typedef std::reverse_iterator const_reverse_iterator; 9642: typedef std::reverse_iterator reverse_iterator; 9642: typedef _Alloc allocator_type; 9642: 9642: 9642: allocator_type 9642: get_allocator() const 9642: { return _Base::get_allocator(); } 9642: 9642: protected: 9642: using _Base::_M_allocate; 9642: using _Base::_M_deallocate; 9642: using _Base::_S_nword; 9642: using _Base::_M_get_Bit_allocator; 9642: 9642: public: 9642: 9642: vector() = default; 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: vector(const allocator_type& __a) 9642: : _Base(__a) { } 9642: 9642: 9642: 9642: explicit 9642: vector(size_type __n, const allocator_type& __a = allocator_type()) 9642: : vector(__n, false, __a) 9642: { } 9642: 9642: 9642: vector(size_type __n, const bool& __value, 9642: const allocator_type& __a = allocator_type()) 9642: 9642: 9642: 9642: 9642: 9642: : _Base(__a) 9642: { 9642: _M_initialize(__n); 9642: _M_initialize_value(__value); 9642: } 9642: 9642: 9642: vector(const vector& __x) 9642: : _Base(_Bit_alloc_traits::_S_select_on_copy(__x._M_get_Bit_allocator())) 9642: { 9642: const_iterator __xbegin = __x.begin(), __xend = __x.end(); 9642: _M_initialize(__x.size()); 9642: _M_copy_aligned(__xbegin, __xend, begin()); 9642: } 9642: 9642: 9642: vector(vector&&) = default; 9642: 9642: private: 9642: 9642: vector(vector&& __x, const allocator_type& __a, true_type) noexcept 9642: : _Base(std::move(__x), __a) 9642: { } 9642: 9642: 9642: vector(vector&& __x, const allocator_type& __a, false_type) 9642: : _Base(__a) 9642: { 9642: if (__x.get_allocator() == __a) 9642: this->_M_move_data(std::move(__x)); 9642: else 9642: { 9642: _M_initialize(__x.size()); 9642: _M_copy_aligned(__x.begin(), __x.end(), begin()); 9642: __x.clear(); 9642: } 9642: } 9642: 9642: public: 9642: 9642: vector(vector&& __x, const __type_identity_t& __a) 9642: noexcept(_Bit_alloc_traits::_S_always_equal()) 9642: : vector(std::move(__x), __a, 9642: typename _Bit_alloc_traits::is_always_equal{}) 9642: { } 9642: 9642: 9642: vector(const vector& __x, const __type_identity_t& __a) 9642: : _Base(__a) 9642: { 9642: _M_initialize(__x.size()); 9642: _M_copy_aligned(__x.begin(), __x.end(), begin()); 9642: } 9642: 9642: 9642: vector(initializer_list __l, 9642: const allocator_type& __a = allocator_type()) 9642: : _Base(__a) 9642: { 9642: _M_initialize_range(__l.begin(), __l.end(), 9642: random_access_iterator_tag()); 9642: } 9642: 9642: 9642: 9642: template> 9642: 9642: vector(_InputIterator __first, _InputIterator __last, 9642: const allocator_type& __a = allocator_type()) 9642: : _Base(__a) 9642: { 9642: _M_initialize_range(__first, __last, 9642: std::__iterator_category(__first)); 9642: } 9642: # 889 "/usr/include/c++/13/bits/stl_bvector.h" 3 9642: 9642: ~vector() noexcept { } 9642: 9642: 9642: vector& 9642: operator=(const vector& __x) 9642: { 9642: if (&__x == this) 9642: return *this; 9642: 9642: if (_Bit_alloc_traits::_S_propagate_on_copy_assign()) 9642: { 9642: if (this->_M_get_Bit_allocator() != __x._M_get_Bit_allocator()) 9642: { 9642: this->_M_deallocate(); 9642: std::__alloc_on_copy(_M_get_Bit_allocator(), 9642: __x._M_get_Bit_allocator()); 9642: _M_initialize(__x.size()); 9642: } 9642: else 9642: std::__alloc_on_copy(_M_get_Bit_allocator(), 9642: __x._M_get_Bit_allocator()); 9642: } 9642: 9642: if (__x.size() > capacity()) 9642: { 9642: this->_M_deallocate(); 9642: _M_initialize(__x.size()); 9642: } 9642: this->_M_impl._M_finish = _M_copy_aligned(__x.begin(), __x.end(), 9642: begin()); 9642: return *this; 9642: } 9642: 9642: 9642: 9642: vector& 9642: operator=(vector&& __x) noexcept(_Bit_alloc_traits::_S_nothrow_move()) 9642: { 9642: if (_Bit_alloc_traits::_S_propagate_on_move_assign() 9642: || this->_M_get_Bit_allocator() == __x._M_get_Bit_allocator()) 9642: { 9642: this->_M_deallocate(); 9642: this->_M_move_data(std::move(__x)); 9642: std::__alloc_on_move(_M_get_Bit_allocator(), 9642: __x._M_get_Bit_allocator()); 9642: } 9642: else 9642: { 9642: if (__x.size() > capacity()) 9642: { 9642: this->_M_deallocate(); 9642: _M_initialize(__x.size()); 9642: } 9642: this->_M_impl._M_finish = _M_copy_aligned(__x.begin(), __x.end(), 9642: begin()); 9642: __x.clear(); 9642: } 9642: return *this; 9642: } 9642: 9642: 9642: vector& 9642: operator=(initializer_list __l) 9642: { 9642: this->assign(__l.begin(), __l.end()); 9642: return *this; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: assign(size_type __n, const bool& __x) 9642: { _M_fill_assign(__n, __x); } 9642: 9642: 9642: template> 9642: 9642: void 9642: assign(_InputIterator __first, _InputIterator __last) 9642: { _M_assign_aux(__first, __last, std::__iterator_category(__first)); } 9642: # 987 "/usr/include/c++/13/bits/stl_bvector.h" 3 9642: 9642: void 9642: assign(initializer_list __l) 9642: { _M_assign_aux(__l.begin(), __l.end(), random_access_iterator_tag()); } 9642: 9642: 9642: [[__nodiscard__]] 9642: iterator 9642: begin() noexcept 9642: { return iterator(this->_M_impl._M_start._M_p, 0); } 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: begin() const noexcept 9642: { return const_iterator(this->_M_impl._M_start._M_p, 0); } 9642: 9642: [[__nodiscard__]] 9642: iterator 9642: end() noexcept 9642: { return this->_M_impl._M_finish; } 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: end() const noexcept 9642: { return this->_M_impl._M_finish; } 9642: 9642: [[__nodiscard__]] 9642: reverse_iterator 9642: rbegin() noexcept 9642: { return reverse_iterator(end()); } 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: rbegin() const noexcept 9642: { return const_reverse_iterator(end()); } 9642: 9642: [[__nodiscard__]] 9642: reverse_iterator 9642: rend() noexcept 9642: { return reverse_iterator(begin()); } 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: rend() const noexcept 9642: { return const_reverse_iterator(begin()); } 9642: 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: cbegin() const noexcept 9642: { return const_iterator(this->_M_impl._M_start._M_p, 0); } 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: cend() const noexcept 9642: { return this->_M_impl._M_finish; } 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: crbegin() const noexcept 9642: { return const_reverse_iterator(end()); } 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: crend() const noexcept 9642: { return const_reverse_iterator(begin()); } 9642: 9642: 9642: [[__nodiscard__]] 9642: size_type 9642: size() const noexcept 9642: { return size_type(end() - begin()); } 9642: 9642: [[__nodiscard__]] 9642: size_type 9642: max_size() const noexcept 9642: { 9642: const size_type __isize = 9642: __gnu_cxx::__numeric_traits::__max 9642: - int(_S_word_bit) + 1; 9642: const size_type __asize 9642: = _Bit_alloc_traits::max_size(_M_get_Bit_allocator()); 9642: return (__asize <= __isize / int(_S_word_bit) 9642: ? __asize * int(_S_word_bit) : __isize); 9642: } 9642: 9642: [[__nodiscard__]] 9642: size_type 9642: capacity() const noexcept 9642: { return size_type(const_iterator(this->_M_impl._M_end_addr(), 0) 9642: - begin()); } 9642: 9642: [[__nodiscard__]] 9642: bool 9642: empty() const noexcept 9642: { return begin() == end(); } 9642: 9642: [[__nodiscard__]] 9642: reference 9642: operator[](size_type __n) 9642: { return begin()[__n]; } 9642: 9642: [[__nodiscard__]] 9642: const_reference 9642: operator[](size_type __n) const 9642: { return begin()[__n]; } 9642: 9642: protected: 9642: 9642: void 9642: _M_range_check(size_type __n) const 9642: { 9642: if (__n >= this->size()) 9642: __throw_out_of_range_fmt(("vector::_M_range_check: __n " "(which is %zu) >= this->size() " "(which is %zu)") 9642: 9642: , 9642: __n, this->size()); 9642: } 9642: 9642: public: 9642: 9642: reference 9642: at(size_type __n) 9642: { 9642: _M_range_check(__n); 9642: return (*this)[__n]; 9642: } 9642: 9642: 9642: const_reference 9642: at(size_type __n) const 9642: { 9642: _M_range_check(__n); 9642: return (*this)[__n]; 9642: } 9642: 9642: 9642: void 9642: reserve(size_type __n) 9642: { 9642: if (__n > max_size()) 9642: __throw_length_error(("vector::reserve")); 9642: if (capacity() < __n) 9642: _M_reallocate(__n); 9642: } 9642: 9642: [[__nodiscard__]] 9642: reference 9642: front() 9642: { return *begin(); } 9642: 9642: [[__nodiscard__]] 9642: const_reference 9642: front() const 9642: { return *begin(); } 9642: 9642: [[__nodiscard__]] 9642: reference 9642: back() 9642: { return *(end() - 1); } 9642: 9642: [[__nodiscard__]] 9642: const_reference 9642: back() const 9642: { return *(end() - 1); } 9642: 9642: 9642: void 9642: push_back(bool __x) 9642: { 9642: if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr()) 9642: *this->_M_impl._M_finish++ = __x; 9642: else 9642: _M_insert_aux(end(), __x); 9642: } 9642: 9642: 9642: void 9642: swap(vector& __x) noexcept 9642: { 9642: 9642: do { if (std::__is_constant_evaluated() && !bool(_Bit_alloc_traits::propagate_on_container_swap::value || _M_get_Bit_allocator() == __x._M_get_Bit_allocator())) __builtin_unreachable(); } while (false) 9642: ; 9642: 9642: this->_M_impl._M_swap_data(__x._M_impl); 9642: _Bit_alloc_traits::_S_on_swap(_M_get_Bit_allocator(), 9642: __x._M_get_Bit_allocator()); 9642: } 9642: 9642: 9642: 9642: static void 9642: swap(reference __x, reference __y) noexcept 9642: { 9642: bool __tmp = __x; 9642: __x = __y; 9642: __y = __tmp; 9642: } 9642: 9642: 9642: iterator 9642: 9642: insert(const_iterator __position, const bool& __x) 9642: 9642: 9642: 9642: { 9642: const difference_type __n = __position - begin(); 9642: if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr() 9642: && __position == end()) 9642: *this->_M_impl._M_finish++ = __x; 9642: else 9642: _M_insert_aux(__position._M_const_cast(), __x); 9642: return begin() + __n; 9642: } 9642: 9642: 9642: __attribute__ ((__deprecated__ ("use '" "insert(position, false)" "' instead"))) 9642: iterator 9642: insert(const_iterator __position) 9642: { return this->insert(__position._M_const_cast(), false); } 9642: 9642: 9642: 9642: template> 9642: 9642: iterator 9642: insert(const_iterator __position, 9642: _InputIterator __first, _InputIterator __last) 9642: { 9642: difference_type __offset = __position - cbegin(); 9642: _M_insert_range(__position._M_const_cast(), 9642: __first, __last, 9642: std::__iterator_category(__first)); 9642: return begin() + __offset; 9642: } 9642: # 1237 "/usr/include/c++/13/bits/stl_bvector.h" 3 9642: 9642: iterator 9642: insert(const_iterator __position, size_type __n, const bool& __x) 9642: { 9642: difference_type __offset = __position - cbegin(); 9642: _M_fill_insert(__position._M_const_cast(), __n, __x); 9642: return begin() + __offset; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: iterator 9642: insert(const_iterator __p, initializer_list __l) 9642: { return this->insert(__p, __l.begin(), __l.end()); } 9642: 9642: 9642: 9642: void 9642: pop_back() 9642: { --this->_M_impl._M_finish; } 9642: 9642: 9642: iterator 9642: 9642: erase(const_iterator __position) 9642: 9642: 9642: 9642: { return _M_erase(__position._M_const_cast()); } 9642: 9642: 9642: iterator 9642: 9642: erase(const_iterator __first, const_iterator __last) 9642: 9642: 9642: 9642: { return _M_erase(__first._M_const_cast(), __last._M_const_cast()); } 9642: 9642: 9642: void 9642: resize(size_type __new_size, bool __x = bool()) 9642: { 9642: if (__new_size < size()) 9642: _M_erase_at_end(begin() + difference_type(__new_size)); 9642: else 9642: insert(end(), __new_size - size(), __x); 9642: } 9642: 9642: 9642: 9642: void 9642: shrink_to_fit() 9642: { _M_shrink_to_fit(); } 9642: 9642: 9642: 9642: void 9642: flip() noexcept 9642: { 9642: _Bit_type * const __end = this->_M_impl._M_end_addr(); 9642: for (_Bit_type * __p = this->_M_impl._M_start._M_p; __p != __end; ++__p) 9642: *__p = ~*__p; 9642: } 9642: 9642: 9642: void 9642: clear() noexcept 9642: { _M_erase_at_end(begin()); } 9642: 9642: 9642: template 9642: 9642: 9642: reference 9642: 9642: 9642: 9642: emplace_back(_Args&&... __args) 9642: { 9642: push_back(bool(__args...)); 9642: 9642: return back(); 9642: 9642: } 9642: 9642: template 9642: 9642: iterator 9642: emplace(const_iterator __pos, _Args&&... __args) 9642: { return insert(__pos, bool(__args...)); } 9642: 9642: 9642: protected: 9642: 9642: 9642: iterator 9642: _M_copy_aligned(const_iterator __first, const_iterator __last, 9642: iterator __result) 9642: { 9642: _Bit_type* __q = std::copy(__first._M_p, __last._M_p, __result._M_p); 9642: return std::copy(const_iterator(__last._M_p, 0), __last, 9642: iterator(__q, 0)); 9642: } 9642: 9642: 9642: void 9642: _M_initialize(size_type __n) 9642: { 9642: if (__n) 9642: { 9642: _Bit_pointer __q = this->_M_allocate(__n); 9642: this->_M_impl._M_end_of_storage = __q + _S_nword(__n); 9642: iterator __start = iterator(std::__addressof(*__q), 0); 9642: this->_M_impl._M_start = __start; 9642: this->_M_impl._M_finish = __start + difference_type(__n); 9642: } 9642: } 9642: 9642: 9642: void 9642: _M_initialize_value(bool __x) noexcept 9642: { 9642: if (_Bit_type* __p = this->_M_impl._M_start._M_p) 9642: __fill_bvector_n(__p, this->_M_impl._M_end_addr() - __p, __x); 9642: } 9642: 9642: 9642: void 9642: _M_reallocate(size_type __n); 9642: 9642: 9642: 9642: bool 9642: _M_shrink_to_fit(); 9642: # 1398 "/usr/include/c++/13/bits/stl_bvector.h" 3 9642: template 9642: 9642: void 9642: _M_initialize_range(_InputIterator __first, _InputIterator __last, 9642: std::input_iterator_tag) 9642: { 9642: for (; __first != __last; ++__first) 9642: push_back(*__first); 9642: } 9642: 9642: template 9642: 9642: void 9642: _M_initialize_range(_ForwardIterator __first, _ForwardIterator __last, 9642: std::forward_iterator_tag) 9642: { 9642: const size_type __n = std::distance(__first, __last); 9642: _M_initialize(__n); 9642: std::copy(__first, __last, begin()); 9642: } 9642: # 1434 "/usr/include/c++/13/bits/stl_bvector.h" 3 9642: 9642: void 9642: _M_fill_assign(size_t __n, bool __x) 9642: { 9642: if (__n > size()) 9642: { 9642: _M_initialize_value(__x); 9642: insert(end(), __n - size(), __x); 9642: } 9642: else 9642: { 9642: _M_erase_at_end(begin() + __n); 9642: _M_initialize_value(__x); 9642: } 9642: } 9642: 9642: template 9642: 9642: void 9642: _M_assign_aux(_InputIterator __first, _InputIterator __last, 9642: std::input_iterator_tag) 9642: { 9642: iterator __cur = begin(); 9642: for (; __first != __last && __cur != end(); ++__cur, (void)++__first) 9642: *__cur = *__first; 9642: if (__first == __last) 9642: _M_erase_at_end(__cur); 9642: else 9642: insert(end(), __first, __last); 9642: } 9642: 9642: template 9642: 9642: void 9642: _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, 9642: std::forward_iterator_tag) 9642: { 9642: const size_type __len = std::distance(__first, __last); 9642: if (__len < size()) 9642: _M_erase_at_end(std::copy(__first, __last, begin())); 9642: else 9642: { 9642: _ForwardIterator __mid = __first; 9642: std::advance(__mid, size()); 9642: std::copy(__first, __mid, begin()); 9642: insert(end(), __mid, __last); 9642: } 9642: } 9642: # 1501 "/usr/include/c++/13/bits/stl_bvector.h" 3 9642: 9642: void 9642: _M_fill_insert(iterator __position, size_type __n, bool __x); 9642: 9642: template 9642: 9642: void 9642: _M_insert_range(iterator __pos, _InputIterator __first, 9642: _InputIterator __last, std::input_iterator_tag) 9642: { 9642: for (; __first != __last; ++__first) 9642: { 9642: __pos = insert(__pos, *__first); 9642: ++__pos; 9642: } 9642: } 9642: 9642: template 9642: 9642: void 9642: _M_insert_range(iterator __position, _ForwardIterator __first, 9642: _ForwardIterator __last, std::forward_iterator_tag); 9642: 9642: 9642: void 9642: _M_insert_aux(iterator __position, bool __x); 9642: 9642: 9642: size_type 9642: _M_check_len(size_type __n, const char* __s) const 9642: { 9642: if (max_size() - size() < __n) 9642: __throw_length_error((__s)); 9642: 9642: const size_type __len = size() + std::max(size(), __n); 9642: return (__len < size() || __len > max_size()) ? max_size() : __len; 9642: } 9642: 9642: 9642: void 9642: _M_erase_at_end(iterator __pos) 9642: { this->_M_impl._M_finish = __pos; } 9642: 9642: 9642: iterator 9642: _M_erase(iterator __pos); 9642: 9642: 9642: iterator 9642: _M_erase(iterator __first, iterator __last); 9642: 9642: protected: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void data() = delete; 9642: 9642: 9642: 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: inline void 9642: __fill_bvector(_Bit_type* __v, unsigned int __first, unsigned int __last, 9642: bool __x) noexcept 9642: { 9642: const _Bit_type __fmask = ~0ul << __first; 9642: const _Bit_type __lmask = ~0ul >> (_S_word_bit - __last); 9642: const _Bit_type __mask = __fmask & __lmask; 9642: 9642: if (__x) 9642: *__v |= __mask; 9642: else 9642: *__v &= ~__mask; 9642: } 9642: 9642: 9642: __attribute__((__nonnull__)) 9642: 9642: inline void 9642: __fill_bvector_n(_Bit_type* __p, size_t __n, bool __x) noexcept 9642: { 9642: # 1597 "/usr/include/c++/13/bits/stl_bvector.h" 3 9642: __builtin_memset(__p, __x ? ~0 : 0, __n * sizeof(_Bit_type)); 9642: } 9642: 9642: 9642: 9642: inline void 9642: __fill_a1(std::_Bit_iterator __first, 9642: std::_Bit_iterator __last, const bool& __x) 9642: { 9642: if (__first._M_p != __last._M_p) 9642: { 9642: _Bit_type* __first_p = __first._M_p; 9642: if (__first._M_offset != 0) 9642: __fill_bvector(__first_p++, __first._M_offset, _S_word_bit, __x); 9642: 9642: __fill_bvector_n(__first_p, __last._M_p - __first_p, __x); 9642: 9642: if (__last._M_offset != 0) 9642: __fill_bvector(__last._M_p, 0, __last._M_offset, __x); 9642: } 9642: else if (__first._M_offset != __last._M_offset) 9642: __fill_bvector(__first._M_p, __first._M_offset, __last._M_offset, __x); 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: struct hash> 9642: : public __hash_base> 9642: { 9642: size_t 9642: operator()(const std::vector&) const noexcept; 9642: }; 9642: 9642: 9642: 9642: } 9642: # 68 "/usr/include/c++/13/vector" 2 3 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/vector.tcc" 1 3 9642: # 59 "/usr/include/c++/13/bits/vector.tcc" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: template 9642: 9642: void 9642: vector<_Tp, _Alloc>:: 9642: reserve(size_type __n) 9642: { 9642: if (__n > this->max_size()) 9642: __throw_length_error(("vector::reserve")); 9642: if (this->capacity() < __n) 9642: { 9642: const size_type __old_size = size(); 9642: pointer __tmp; 9642: 9642: if constexpr (_S_use_relocate()) 9642: { 9642: __tmp = this->_M_allocate(__n); 9642: _S_relocate(this->_M_impl._M_start, this->_M_impl._M_finish, 9642: __tmp, _M_get_Tp_allocator()); 9642: } 9642: else 9642: 9642: { 9642: __tmp = _M_allocate_and_copy(__n, 9642: std::__make_move_if_noexcept_iterator(this->_M_impl._M_start), 9642: std::__make_move_if_noexcept_iterator(this->_M_impl._M_finish)); 9642: std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, 9642: _M_get_Tp_allocator()); 9642: } 9642: ; 9642: _M_deallocate(this->_M_impl._M_start, 9642: this->_M_impl._M_end_of_storage 9642: - this->_M_impl._M_start); 9642: this->_M_impl._M_start = __tmp; 9642: this->_M_impl._M_finish = __tmp + __old_size; 9642: this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; 9642: } 9642: } 9642: 9642: 9642: template 9642: template 9642: 9642: 9642: typename vector<_Tp, _Alloc>::reference 9642: 9642: 9642: 9642: vector<_Tp, _Alloc>:: 9642: emplace_back(_Args&&... __args) 9642: { 9642: if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) 9642: { 9642: ; 9642: _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, 9642: std::forward<_Args>(__args)...); 9642: ++this->_M_impl._M_finish; 9642: ; 9642: } 9642: else 9642: _M_realloc_insert(end(), std::forward<_Args>(__args)...); 9642: 9642: return back(); 9642: 9642: } 9642: 9642: 9642: template 9642: 9642: typename vector<_Tp, _Alloc>::iterator 9642: vector<_Tp, _Alloc>:: 9642: 9642: insert(const_iterator __position, const value_type& __x) 9642: 9642: 9642: 9642: { 9642: const size_type __n = __position - begin(); 9642: if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__position != const_iterator())) __builtin_unreachable(); } while (false); 9642: if (!(__position != const_iterator())) 9642: __builtin_unreachable(); 9642: 9642: if (__position == end()) 9642: { 9642: ; 9642: _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, 9642: __x); 9642: ++this->_M_impl._M_finish; 9642: ; 9642: } 9642: else 9642: { 9642: 9642: const auto __pos = begin() + (__position - cbegin()); 9642: 9642: 9642: _Temporary_value __x_copy(this, __x); 9642: _M_insert_aux(__pos, std::move(__x_copy._M_val())); 9642: 9642: 9642: 9642: } 9642: } 9642: else 9642: 9642: _M_realloc_insert(begin() + (__position - cbegin()), __x); 9642: 9642: 9642: 9642: 9642: return iterator(this->_M_impl._M_start + __n); 9642: } 9642: 9642: template 9642: 9642: typename vector<_Tp, _Alloc>::iterator 9642: vector<_Tp, _Alloc>:: 9642: _M_erase(iterator __position) 9642: { 9642: if (__position + 1 != end()) 9642: std::move(__position + 1, end(), __position); 9642: --this->_M_impl._M_finish; 9642: _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish); 9642: ; 9642: return __position; 9642: } 9642: 9642: template 9642: 9642: typename vector<_Tp, _Alloc>::iterator 9642: vector<_Tp, _Alloc>:: 9642: _M_erase(iterator __first, iterator __last) 9642: { 9642: if (__first != __last) 9642: { 9642: if (__last != end()) 9642: std::move(__last, end(), __first); 9642: _M_erase_at_end(__first.base() + (end() - __last)); 9642: } 9642: return __first; 9642: } 9642: 9642: template 9642: 9642: vector<_Tp, _Alloc>& 9642: vector<_Tp, _Alloc>:: 9642: operator=(const vector<_Tp, _Alloc>& __x) 9642: { 9642: if (std::__addressof(__x) != this) 9642: { 9642: ; 9642: 9642: if (_Alloc_traits::_S_propagate_on_copy_assign()) 9642: { 9642: if (!_Alloc_traits::_S_always_equal() 9642: && _M_get_Tp_allocator() != __x._M_get_Tp_allocator()) 9642: { 9642: 9642: this->clear(); 9642: _M_deallocate(this->_M_impl._M_start, 9642: this->_M_impl._M_end_of_storage 9642: - this->_M_impl._M_start); 9642: this->_M_impl._M_start = nullptr; 9642: this->_M_impl._M_finish = nullptr; 9642: this->_M_impl._M_end_of_storage = nullptr; 9642: } 9642: std::__alloc_on_copy(_M_get_Tp_allocator(), 9642: __x._M_get_Tp_allocator()); 9642: } 9642: 9642: const size_type __xlen = __x.size(); 9642: if (__xlen > capacity()) 9642: { 9642: pointer __tmp = _M_allocate_and_copy(__xlen, __x.begin(), 9642: __x.end()); 9642: std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, 9642: _M_get_Tp_allocator()); 9642: _M_deallocate(this->_M_impl._M_start, 9642: this->_M_impl._M_end_of_storage 9642: - this->_M_impl._M_start); 9642: this->_M_impl._M_start = __tmp; 9642: this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __xlen; 9642: } 9642: else if (size() >= __xlen) 9642: { 9642: std::_Destroy(std::copy(__x.begin(), __x.end(), begin()), 9642: end(), _M_get_Tp_allocator()); 9642: } 9642: else 9642: { 9642: std::copy(__x._M_impl._M_start, __x._M_impl._M_start + size(), 9642: this->_M_impl._M_start); 9642: std::__uninitialized_copy_a(__x._M_impl._M_start + size(), 9642: __x._M_impl._M_finish, 9642: this->_M_impl._M_finish, 9642: _M_get_Tp_allocator()); 9642: } 9642: this->_M_impl._M_finish = this->_M_impl._M_start + __xlen; 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: 9642: void 9642: vector<_Tp, _Alloc>:: 9642: _M_fill_assign(size_t __n, const value_type& __val) 9642: { 9642: if (__n > capacity()) 9642: { 9642: vector __tmp(__n, __val, _M_get_Tp_allocator()); 9642: __tmp._M_impl._M_swap_data(this->_M_impl); 9642: } 9642: else if (__n > size()) 9642: { 9642: std::fill(begin(), end(), __val); 9642: const size_type __add = __n - size(); 9642: ; 9642: this->_M_impl._M_finish = 9642: std::__uninitialized_fill_n_a(this->_M_impl._M_finish, 9642: __add, __val, _M_get_Tp_allocator()); 9642: ; 9642: } 9642: else 9642: _M_erase_at_end(std::fill_n(this->_M_impl._M_start, __n, __val)); 9642: } 9642: 9642: template 9642: template 9642: 9642: void 9642: vector<_Tp, _Alloc>:: 9642: _M_assign_aux(_InputIterator __first, _InputIterator __last, 9642: std::input_iterator_tag) 9642: { 9642: pointer __cur(this->_M_impl._M_start); 9642: for (; __first != __last && __cur != this->_M_impl._M_finish; 9642: ++__cur, (void)++__first) 9642: *__cur = *__first; 9642: if (__first == __last) 9642: _M_erase_at_end(__cur); 9642: else 9642: _M_range_insert(end(), __first, __last, 9642: std::__iterator_category(__first)); 9642: } 9642: 9642: template 9642: template 9642: 9642: void 9642: vector<_Tp, _Alloc>:: 9642: _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, 9642: std::forward_iterator_tag) 9642: { 9642: const size_type __len = std::distance(__first, __last); 9642: 9642: if (__len > capacity()) 9642: { 9642: _S_check_init_len(__len, _M_get_Tp_allocator()); 9642: pointer __tmp(_M_allocate_and_copy(__len, __first, __last)); 9642: std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, 9642: _M_get_Tp_allocator()); 9642: ; 9642: _M_deallocate(this->_M_impl._M_start, 9642: this->_M_impl._M_end_of_storage 9642: - this->_M_impl._M_start); 9642: this->_M_impl._M_start = __tmp; 9642: this->_M_impl._M_finish = this->_M_impl._M_start + __len; 9642: this->_M_impl._M_end_of_storage = this->_M_impl._M_finish; 9642: } 9642: else if (size() >= __len) 9642: _M_erase_at_end(std::copy(__first, __last, this->_M_impl._M_start)); 9642: else 9642: { 9642: _ForwardIterator __mid = __first; 9642: std::advance(__mid, size()); 9642: std::copy(__first, __mid, this->_M_impl._M_start); 9642: const size_type __attribute__((__unused__)) __n = __len - size(); 9642: ; 9642: this->_M_impl._M_finish = 9642: std::__uninitialized_copy_a(__mid, __last, 9642: this->_M_impl._M_finish, 9642: _M_get_Tp_allocator()); 9642: ; 9642: } 9642: } 9642: 9642: 9642: template 9642: 9642: auto 9642: vector<_Tp, _Alloc>:: 9642: _M_insert_rval(const_iterator __position, value_type&& __v) -> iterator 9642: { 9642: const auto __n = __position - cbegin(); 9642: if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) 9642: if (__position == cend()) 9642: { 9642: ; 9642: _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, 9642: std::move(__v)); 9642: ++this->_M_impl._M_finish; 9642: ; 9642: } 9642: else 9642: _M_insert_aux(begin() + __n, std::move(__v)); 9642: else 9642: _M_realloc_insert(begin() + __n, std::move(__v)); 9642: 9642: return iterator(this->_M_impl._M_start + __n); 9642: } 9642: 9642: template 9642: template 9642: 9642: auto 9642: vector<_Tp, _Alloc>:: 9642: _M_emplace_aux(const_iterator __position, _Args&&... __args) 9642: -> iterator 9642: { 9642: const auto __n = __position - cbegin(); 9642: if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) 9642: if (__position == cend()) 9642: { 9642: ; 9642: _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, 9642: std::forward<_Args>(__args)...); 9642: ++this->_M_impl._M_finish; 9642: ; 9642: } 9642: else 9642: { 9642: 9642: 9642: 9642: _Temporary_value __tmp(this, std::forward<_Args>(__args)...); 9642: _M_insert_aux(begin() + __n, std::move(__tmp._M_val())); 9642: } 9642: else 9642: _M_realloc_insert(begin() + __n, std::forward<_Args>(__args)...); 9642: 9642: return iterator(this->_M_impl._M_start + __n); 9642: } 9642: 9642: template 9642: template 9642: 9642: void 9642: vector<_Tp, _Alloc>:: 9642: _M_insert_aux(iterator __position, _Arg&& __arg) 9642: 9642: 9642: 9642: 9642: 9642: 9642: { 9642: ; 9642: _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, 9642: std::move(*(this->_M_impl._M_finish - 1))); 9642: ++this->_M_impl._M_finish; 9642: ; 9642: 9642: 9642: 9642: std::move_backward(__position.base(), this->_M_impl._M_finish - 2, this->_M_impl._M_finish - 1) 9642: 9642: ; 9642: 9642: 9642: 9642: *__position = std::forward<_Arg>(__arg); 9642: 9642: } 9642: 9642: 9642: template 9642: template 9642: 9642: void 9642: vector<_Tp, _Alloc>:: 9642: _M_realloc_insert(iterator __position, _Args&&... __args) 9642: 9642: 9642: 9642: 9642: 9642: 9642: { 9642: const size_type __len = 9642: _M_check_len(size_type(1), "vector::_M_realloc_insert"); 9642: pointer __old_start = this->_M_impl._M_start; 9642: pointer __old_finish = this->_M_impl._M_finish; 9642: const size_type __elems_before = __position - begin(); 9642: pointer __new_start(this->_M_allocate(__len)); 9642: pointer __new_finish(__new_start); 9642: try 9642: { 9642: 9642: 9642: 9642: 9642: 9642: _Alloc_traits::construct(this->_M_impl, 9642: __new_start + __elems_before, 9642: 9642: std::forward<_Args>(__args)...); 9642: 9642: 9642: 9642: __new_finish = pointer(); 9642: 9642: 9642: if constexpr (_S_use_relocate()) 9642: { 9642: __new_finish = _S_relocate(__old_start, __position.base(), 9642: __new_start, _M_get_Tp_allocator()); 9642: 9642: ++__new_finish; 9642: 9642: __new_finish = _S_relocate(__position.base(), __old_finish, 9642: __new_finish, _M_get_Tp_allocator()); 9642: } 9642: else 9642: 9642: { 9642: __new_finish 9642: = std::__uninitialized_move_if_noexcept_a 9642: (__old_start, __position.base(), 9642: __new_start, _M_get_Tp_allocator()); 9642: 9642: ++__new_finish; 9642: 9642: __new_finish 9642: = std::__uninitialized_move_if_noexcept_a 9642: (__position.base(), __old_finish, 9642: __new_finish, _M_get_Tp_allocator()); 9642: } 9642: } 9642: catch(...) 9642: { 9642: if (!__new_finish) 9642: _Alloc_traits::destroy(this->_M_impl, 9642: __new_start + __elems_before); 9642: else 9642: std::_Destroy(__new_start, __new_finish, _M_get_Tp_allocator()); 9642: _M_deallocate(__new_start, __len); 9642: throw; 9642: } 9642: 9642: if constexpr (!_S_use_relocate()) 9642: 9642: std::_Destroy(__old_start, __old_finish, _M_get_Tp_allocator()); 9642: ; 9642: _M_deallocate(__old_start, 9642: this->_M_impl._M_end_of_storage - __old_start); 9642: this->_M_impl._M_start = __new_start; 9642: this->_M_impl._M_finish = __new_finish; 9642: this->_M_impl._M_end_of_storage = __new_start + __len; 9642: } 9642: 9642: template 9642: 9642: void 9642: vector<_Tp, _Alloc>:: 9642: _M_fill_insert(iterator __position, size_type __n, const value_type& __x) 9642: { 9642: if (__n != 0) 9642: { 9642: if (size_type(this->_M_impl._M_end_of_storage 9642: - this->_M_impl._M_finish) >= __n) 9642: { 9642: 9642: 9642: 9642: _Temporary_value __tmp(this, __x); 9642: value_type& __x_copy = __tmp._M_val(); 9642: 9642: const size_type __elems_after = end() - __position; 9642: pointer __old_finish(this->_M_impl._M_finish); 9642: if (__elems_after > __n) 9642: { 9642: ; 9642: std::__uninitialized_move_a(__old_finish - __n, 9642: __old_finish, 9642: __old_finish, 9642: _M_get_Tp_allocator()); 9642: this->_M_impl._M_finish += __n; 9642: ; 9642: std::move_backward(__position.base(), __old_finish - __n, __old_finish) 9642: ; 9642: std::fill(__position.base(), __position.base() + __n, 9642: __x_copy); 9642: } 9642: else 9642: { 9642: ; 9642: this->_M_impl._M_finish = 9642: std::__uninitialized_fill_n_a(__old_finish, 9642: __n - __elems_after, 9642: __x_copy, 9642: _M_get_Tp_allocator()); 9642: ; 9642: std::__uninitialized_move_a(__position.base(), __old_finish, 9642: this->_M_impl._M_finish, 9642: _M_get_Tp_allocator()); 9642: this->_M_impl._M_finish += __elems_after; 9642: ; 9642: std::fill(__position.base(), __old_finish, __x_copy); 9642: } 9642: } 9642: else 9642: { 9642: 9642: 9642: pointer __old_start = this->_M_impl._M_start; 9642: pointer __old_finish = this->_M_impl._M_finish; 9642: const pointer __pos = __position.base(); 9642: 9642: const size_type __len = 9642: _M_check_len(__n, "vector::_M_fill_insert"); 9642: const size_type __elems_before = __pos - __old_start; 9642: pointer __new_start(this->_M_allocate(__len)); 9642: pointer __new_finish(__new_start); 9642: try 9642: { 9642: 9642: std::__uninitialized_fill_n_a(__new_start + __elems_before, 9642: __n, __x, 9642: _M_get_Tp_allocator()); 9642: __new_finish = pointer(); 9642: 9642: __new_finish 9642: = std::__uninitialized_move_if_noexcept_a 9642: (__old_start, __pos, __new_start, _M_get_Tp_allocator()); 9642: 9642: __new_finish += __n; 9642: 9642: __new_finish 9642: = std::__uninitialized_move_if_noexcept_a 9642: (__pos, __old_finish, __new_finish, _M_get_Tp_allocator()); 9642: } 9642: catch(...) 9642: { 9642: if (!__new_finish) 9642: std::_Destroy(__new_start + __elems_before, 9642: __new_start + __elems_before + __n, 9642: _M_get_Tp_allocator()); 9642: else 9642: std::_Destroy(__new_start, __new_finish, 9642: _M_get_Tp_allocator()); 9642: _M_deallocate(__new_start, __len); 9642: throw; 9642: } 9642: std::_Destroy(__old_start, __old_finish, _M_get_Tp_allocator()); 9642: ; 9642: _M_deallocate(__old_start, 9642: this->_M_impl._M_end_of_storage - __old_start); 9642: this->_M_impl._M_start = __new_start; 9642: this->_M_impl._M_finish = __new_finish; 9642: this->_M_impl._M_end_of_storage = __new_start + __len; 9642: } 9642: } 9642: } 9642: 9642: 9642: template 9642: 9642: void 9642: vector<_Tp, _Alloc>:: 9642: _M_default_append(size_type __n) 9642: { 9642: if (__n != 0) 9642: { 9642: const size_type __size = size(); 9642: size_type __navail = size_type(this->_M_impl._M_end_of_storage 9642: - this->_M_impl._M_finish); 9642: 9642: if (__size > max_size() || __navail > max_size() - __size) 9642: __builtin_unreachable(); 9642: 9642: if (__navail >= __n) 9642: { 9642: ; 9642: this->_M_impl._M_finish = 9642: std::__uninitialized_default_n_a(this->_M_impl._M_finish, 9642: __n, _M_get_Tp_allocator()); 9642: ; 9642: } 9642: else 9642: { 9642: 9642: 9642: pointer __old_start = this->_M_impl._M_start; 9642: pointer __old_finish = this->_M_impl._M_finish; 9642: 9642: const size_type __len = 9642: _M_check_len(__n, "vector::_M_default_append"); 9642: pointer __new_start(this->_M_allocate(__len)); 9642: if constexpr (_S_use_relocate()) 9642: { 9642: try 9642: { 9642: std::__uninitialized_default_n_a(__new_start + __size, 9642: __n, _M_get_Tp_allocator()); 9642: } 9642: catch(...) 9642: { 9642: _M_deallocate(__new_start, __len); 9642: throw; 9642: } 9642: _S_relocate(__old_start, __old_finish, 9642: __new_start, _M_get_Tp_allocator()); 9642: } 9642: else 9642: { 9642: pointer __destroy_from = pointer(); 9642: try 9642: { 9642: std::__uninitialized_default_n_a(__new_start + __size, 9642: __n, _M_get_Tp_allocator()); 9642: __destroy_from = __new_start + __size; 9642: std::__uninitialized_move_if_noexcept_a( 9642: __old_start, __old_finish, 9642: __new_start, _M_get_Tp_allocator()); 9642: } 9642: catch(...) 9642: { 9642: if (__destroy_from) 9642: std::_Destroy(__destroy_from, __destroy_from + __n, 9642: _M_get_Tp_allocator()); 9642: _M_deallocate(__new_start, __len); 9642: throw; 9642: } 9642: std::_Destroy(__old_start, __old_finish, 9642: _M_get_Tp_allocator()); 9642: } 9642: ; 9642: _M_deallocate(__old_start, 9642: this->_M_impl._M_end_of_storage - __old_start); 9642: this->_M_impl._M_start = __new_start; 9642: this->_M_impl._M_finish = __new_start + __size + __n; 9642: this->_M_impl._M_end_of_storage = __new_start + __len; 9642: } 9642: } 9642: } 9642: 9642: template 9642: 9642: bool 9642: vector<_Tp, _Alloc>:: 9642: _M_shrink_to_fit() 9642: { 9642: if (capacity() == size()) 9642: return false; 9642: ; 9642: return std::__shrink_to_fit_aux::_S_do_it(*this); 9642: } 9642: 9642: 9642: template 9642: template 9642: 9642: void 9642: vector<_Tp, _Alloc>:: 9642: _M_range_insert(iterator __pos, _InputIterator __first, 9642: _InputIterator __last, std::input_iterator_tag) 9642: { 9642: if (__pos == end()) 9642: { 9642: for (; __first != __last; ++__first) 9642: insert(end(), *__first); 9642: } 9642: else if (__first != __last) 9642: { 9642: vector __tmp(__first, __last, _M_get_Tp_allocator()); 9642: insert(__pos, 9642: std::make_move_iterator(__tmp.begin()), 9642: std::make_move_iterator(__tmp.end())); 9642: } 9642: } 9642: 9642: template 9642: template 9642: 9642: void 9642: vector<_Tp, _Alloc>:: 9642: _M_range_insert(iterator __position, _ForwardIterator __first, 9642: _ForwardIterator __last, std::forward_iterator_tag) 9642: { 9642: if (__first != __last) 9642: { 9642: const size_type __n = std::distance(__first, __last); 9642: if (size_type(this->_M_impl._M_end_of_storage 9642: - this->_M_impl._M_finish) >= __n) 9642: { 9642: const size_type __elems_after = end() - __position; 9642: pointer __old_finish(this->_M_impl._M_finish); 9642: if (__elems_after > __n) 9642: { 9642: ; 9642: std::__uninitialized_move_a(this->_M_impl._M_finish - __n, 9642: this->_M_impl._M_finish, 9642: this->_M_impl._M_finish, 9642: _M_get_Tp_allocator()); 9642: this->_M_impl._M_finish += __n; 9642: ; 9642: std::move_backward(__position.base(), __old_finish - __n, __old_finish) 9642: ; 9642: std::copy(__first, __last, __position); 9642: } 9642: else 9642: { 9642: _ForwardIterator __mid = __first; 9642: std::advance(__mid, __elems_after); 9642: ; 9642: std::__uninitialized_copy_a(__mid, __last, 9642: this->_M_impl._M_finish, 9642: _M_get_Tp_allocator()); 9642: this->_M_impl._M_finish += __n - __elems_after; 9642: ; 9642: std::__uninitialized_move_a(__position.base(), 9642: __old_finish, 9642: this->_M_impl._M_finish, 9642: _M_get_Tp_allocator()); 9642: this->_M_impl._M_finish += __elems_after; 9642: ; 9642: std::copy(__first, __mid, __position); 9642: } 9642: } 9642: else 9642: { 9642: 9642: 9642: 9642: pointer __old_start = this->_M_impl._M_start; 9642: pointer __old_finish = this->_M_impl._M_finish; 9642: 9642: const size_type __len = 9642: _M_check_len(__n, "vector::_M_range_insert"); 9642: pointer __new_start(this->_M_allocate(__len)); 9642: pointer __new_finish(__new_start); 9642: try 9642: { 9642: __new_finish 9642: = std::__uninitialized_move_if_noexcept_a 9642: (__old_start, __position.base(), 9642: __new_start, _M_get_Tp_allocator()); 9642: __new_finish 9642: = std::__uninitialized_copy_a(__first, __last, 9642: __new_finish, 9642: _M_get_Tp_allocator()); 9642: __new_finish 9642: = std::__uninitialized_move_if_noexcept_a 9642: (__position.base(), __old_finish, 9642: __new_finish, _M_get_Tp_allocator()); 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__new_start, __new_finish, 9642: _M_get_Tp_allocator()); 9642: _M_deallocate(__new_start, __len); 9642: throw; 9642: } 9642: std::_Destroy(__old_start, __old_finish, 9642: _M_get_Tp_allocator()); 9642: ; 9642: _M_deallocate(__old_start, 9642: this->_M_impl._M_end_of_storage - __old_start); 9642: this->_M_impl._M_start = __new_start; 9642: this->_M_impl._M_finish = __new_finish; 9642: this->_M_impl._M_end_of_storage = __new_start + __len; 9642: } 9642: } 9642: } 9642: 9642: 9642: 9642: template 9642: 9642: void 9642: vector:: 9642: _M_reallocate(size_type __n) 9642: { 9642: _Bit_pointer __q = this->_M_allocate(__n); 9642: iterator __start(std::__addressof(*__q), 0); 9642: iterator __finish(_M_copy_aligned(begin(), end(), __start)); 9642: this->_M_deallocate(); 9642: this->_M_impl._M_start = __start; 9642: this->_M_impl._M_finish = __finish; 9642: this->_M_impl._M_end_of_storage = __q + _S_nword(__n); 9642: } 9642: 9642: template 9642: 9642: void 9642: vector:: 9642: _M_fill_insert(iterator __position, size_type __n, bool __x) 9642: { 9642: if (__n == 0) 9642: return; 9642: if (capacity() - size() >= __n) 9642: { 9642: std::copy_backward(__position, end(), 9642: this->_M_impl._M_finish + difference_type(__n)); 9642: std::fill(__position, __position + difference_type(__n), __x); 9642: this->_M_impl._M_finish += difference_type(__n); 9642: } 9642: else 9642: { 9642: const size_type __len = 9642: _M_check_len(__n, "vector::_M_fill_insert"); 9642: _Bit_pointer __q = this->_M_allocate(__len); 9642: iterator __start(std::__addressof(*__q), 0); 9642: iterator __i = _M_copy_aligned(begin(), __position, __start); 9642: std::fill(__i, __i + difference_type(__n), __x); 9642: iterator __finish = std::copy(__position, end(), 9642: __i + difference_type(__n)); 9642: this->_M_deallocate(); 9642: this->_M_impl._M_end_of_storage = __q + _S_nword(__len); 9642: this->_M_impl._M_start = __start; 9642: this->_M_impl._M_finish = __finish; 9642: } 9642: } 9642: 9642: template 9642: template 9642: 9642: void 9642: vector:: 9642: _M_insert_range(iterator __position, _ForwardIterator __first, 9642: _ForwardIterator __last, std::forward_iterator_tag) 9642: { 9642: if (__first != __last) 9642: { 9642: size_type __n = std::distance(__first, __last); 9642: if (capacity() - size() >= __n) 9642: { 9642: std::copy_backward(__position, end(), 9642: this->_M_impl._M_finish 9642: + difference_type(__n)); 9642: std::copy(__first, __last, __position); 9642: this->_M_impl._M_finish += difference_type(__n); 9642: } 9642: else 9642: { 9642: const size_type __len = 9642: _M_check_len(__n, "vector::_M_insert_range"); 9642: const iterator __begin = begin(), __end = end(); 9642: _Bit_pointer __q = this->_M_allocate(__len); 9642: iterator __start(std::__addressof(*__q), 0); 9642: iterator __i = _M_copy_aligned(__begin, __position, __start); 9642: __i = std::copy(__first, __last, __i); 9642: iterator __finish = std::copy(__position, __end, __i); 9642: this->_M_deallocate(); 9642: this->_M_impl._M_end_of_storage = __q + _S_nword(__len); 9642: this->_M_impl._M_start = __start; 9642: this->_M_impl._M_finish = __finish; 9642: } 9642: } 9642: } 9642: 9642: template 9642: 9642: void 9642: vector:: 9642: _M_insert_aux(iterator __position, bool __x) 9642: { 9642: if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr()) 9642: { 9642: std::copy_backward(__position, this->_M_impl._M_finish, 9642: this->_M_impl._M_finish + 1); 9642: *__position = __x; 9642: ++this->_M_impl._M_finish; 9642: } 9642: else 9642: { 9642: const size_type __len = 9642: _M_check_len(size_type(1), "vector::_M_insert_aux"); 9642: _Bit_pointer __q = this->_M_allocate(__len); 9642: iterator __start(std::__addressof(*__q), 0); 9642: iterator __i = _M_copy_aligned(begin(), __position, __start); 9642: *__i++ = __x; 9642: iterator __finish = std::copy(__position, end(), __i); 9642: this->_M_deallocate(); 9642: this->_M_impl._M_end_of_storage = __q + _S_nword(__len); 9642: this->_M_impl._M_start = __start; 9642: this->_M_impl._M_finish = __finish; 9642: } 9642: } 9642: 9642: template 9642: 9642: typename vector::iterator 9642: vector:: 9642: _M_erase(iterator __position) 9642: { 9642: if (__position + 1 != end()) 9642: std::copy(__position + 1, end(), __position); 9642: --this->_M_impl._M_finish; 9642: return __position; 9642: } 9642: 9642: template 9642: 9642: typename vector::iterator 9642: vector:: 9642: _M_erase(iterator __first, iterator __last) 9642: { 9642: if (__first != __last) 9642: _M_erase_at_end(std::copy(__last, end(), __first)); 9642: return __first; 9642: } 9642: 9642: 9642: template 9642: 9642: bool 9642: vector:: 9642: _M_shrink_to_fit() 9642: { 9642: if (capacity() - size() < int(_S_word_bit)) 9642: return false; 9642: try 9642: { 9642: if (size_type __n = size()) 9642: _M_reallocate(__n); 9642: else 9642: { 9642: this->_M_deallocate(); 9642: this->_M_impl._M_reset(); 9642: } 9642: return true; 9642: } 9642: catch(...) 9642: { return false; } 9642: } 9642: 9642: 9642: 9642: 9642: } 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: template 9642: size_t 9642: hash>:: 9642: operator()(const std::vector& __b) const noexcept 9642: { 9642: size_t __hash = 0; 9642: const size_t __words = __b.size() / _S_word_bit; 9642: if (__words) 9642: { 9642: const size_t __clength = __words * sizeof(_Bit_type); 9642: __hash = std::_Hash_impl::hash(__b._M_impl._M_start._M_p, __clength); 9642: } 9642: 9642: const size_t __extrabits = __b.size() % _S_word_bit; 9642: if (__extrabits) 9642: { 9642: _Bit_type __hiword = *__b._M_impl._M_finish._M_p; 9642: __hiword &= ~((~static_cast<_Bit_type>(0)) << __extrabits); 9642: 9642: const size_t __clength 9642: = (__extrabits + 8 - 1) / 8; 9642: if (__words) 9642: __hash = std::_Hash_impl::hash(&__hiword, __clength, __hash); 9642: else 9642: __hash = std::_Hash_impl::hash(&__hiword, __clength); 9642: } 9642: 9642: return __hash; 9642: } 9642: 9642: 9642: } 9642: # 73 "/usr/include/c++/13/vector" 2 3 9642: # 81 "/usr/include/c++/13/vector" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: namespace pmr { 9642: template 9642: using vector = std::vector<_Tp, polymorphic_allocator<_Tp>>; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 65 "/usr/include/c++/13/functional" 2 3 9642: # 1 "/usr/include/c++/13/array" 1 3 9642: # 32 "/usr/include/c++/13/array" 3 9642: 9642: # 33 "/usr/include/c++/13/array" 3 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/compare" 1 3 9642: # 33 "/usr/include/c++/13/compare" 3 9642: 9642: # 34 "/usr/include/c++/13/compare" 3 9642: # 39 "/usr/include/c++/13/array" 2 3 9642: # 48 "/usr/include/c++/13/array" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: template 9642: struct __array_traits 9642: { 9642: using _Type = _Tp[_Nm]; 9642: using _Is_swappable = __is_swappable<_Tp>; 9642: using _Is_nothrow_swappable = __is_nothrow_swappable<_Tp>; 9642: }; 9642: 9642: template 9642: struct __array_traits<_Tp, 0> 9642: { 9642: 9642: struct _Type 9642: { 9642: 9642: __attribute__((__always_inline__,__noreturn__)) 9642: _Tp& operator[](size_t) const noexcept { __builtin_trap(); } 9642: 9642: 9642: __attribute__((__always_inline__)) 9642: constexpr explicit operator _Tp*() const noexcept { return nullptr; } 9642: }; 9642: 9642: using _Is_swappable = true_type; 9642: using _Is_nothrow_swappable = true_type; 9642: }; 9642: # 93 "/usr/include/c++/13/array" 3 9642: template 9642: struct array 9642: { 9642: typedef _Tp value_type; 9642: typedef value_type* pointer; 9642: typedef const value_type* const_pointer; 9642: typedef value_type& reference; 9642: typedef const value_type& const_reference; 9642: typedef value_type* iterator; 9642: typedef const value_type* const_iterator; 9642: typedef std::size_t size_type; 9642: typedef std::ptrdiff_t difference_type; 9642: typedef std::reverse_iterator reverse_iterator; 9642: typedef std::reverse_iterator const_reverse_iterator; 9642: 9642: 9642: typename __array_traits<_Tp, _Nm>::_Type _M_elems; 9642: 9642: 9642: 9642: 9642: void 9642: fill(const value_type& __u) 9642: { std::fill_n(begin(), size(), __u); } 9642: 9642: void 9642: swap(array& __other) 9642: noexcept(__array_traits<_Tp, _Nm>::_Is_nothrow_swappable::value) 9642: { std::swap_ranges(begin(), end(), __other.begin()); } 9642: 9642: 9642: [[__gnu__::__const__, __nodiscard__]] 9642: constexpr iterator 9642: begin() noexcept 9642: { return iterator(data()); } 9642: 9642: [[__nodiscard__]] 9642: constexpr const_iterator 9642: begin() const noexcept 9642: { return const_iterator(data()); } 9642: 9642: [[__gnu__::__const__, __nodiscard__]] 9642: constexpr iterator 9642: end() noexcept 9642: { return iterator(data() + _Nm); } 9642: 9642: [[__nodiscard__]] 9642: constexpr const_iterator 9642: end() const noexcept 9642: { return const_iterator(data() + _Nm); } 9642: 9642: [[__gnu__::__const__, __nodiscard__]] 9642: constexpr reverse_iterator 9642: rbegin() noexcept 9642: { return reverse_iterator(end()); } 9642: 9642: [[__nodiscard__]] 9642: constexpr const_reverse_iterator 9642: rbegin() const noexcept 9642: { return const_reverse_iterator(end()); } 9642: 9642: [[__gnu__::__const__, __nodiscard__]] 9642: constexpr reverse_iterator 9642: rend() noexcept 9642: { return reverse_iterator(begin()); } 9642: 9642: [[__nodiscard__]] 9642: constexpr const_reverse_iterator 9642: rend() const noexcept 9642: { return const_reverse_iterator(begin()); } 9642: 9642: [[__nodiscard__]] 9642: constexpr const_iterator 9642: cbegin() const noexcept 9642: { return const_iterator(data()); } 9642: 9642: [[__nodiscard__]] 9642: constexpr const_iterator 9642: cend() const noexcept 9642: { return const_iterator(data() + _Nm); } 9642: 9642: [[__nodiscard__]] 9642: constexpr const_reverse_iterator 9642: crbegin() const noexcept 9642: { return const_reverse_iterator(end()); } 9642: 9642: [[__nodiscard__]] 9642: constexpr const_reverse_iterator 9642: crend() const noexcept 9642: { return const_reverse_iterator(begin()); } 9642: 9642: 9642: [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]] 9642: constexpr size_type 9642: size() const noexcept { return _Nm; } 9642: 9642: [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]] 9642: constexpr size_type 9642: max_size() const noexcept { return _Nm; } 9642: 9642: [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]] 9642: constexpr bool 9642: empty() const noexcept { return size() == 0; } 9642: 9642: 9642: [[__nodiscard__]] 9642: constexpr reference 9642: operator[](size_type __n) noexcept 9642: { 9642: ; 9642: return _M_elems[__n]; 9642: } 9642: 9642: [[__nodiscard__]] 9642: constexpr const_reference 9642: operator[](size_type __n) const noexcept 9642: { 9642: 9642: ; 9642: 9642: return _M_elems[__n]; 9642: } 9642: 9642: constexpr reference 9642: at(size_type __n) 9642: { 9642: if (__n >= _Nm) 9642: std::__throw_out_of_range_fmt(("array::at: __n (which is %zu) " ">= _Nm (which is %zu)") 9642: , 9642: __n, _Nm); 9642: return _M_elems[__n]; 9642: } 9642: 9642: constexpr const_reference 9642: at(size_type __n) const 9642: { 9642: 9642: 9642: return __n < _Nm ? _M_elems[__n] 9642: : (std::__throw_out_of_range_fmt(("array::at: __n (which is %zu) " ">= _Nm (which is %zu)") 9642: , 9642: __n, _Nm), 9642: _M_elems[__n]); 9642: } 9642: 9642: [[__nodiscard__]] 9642: constexpr reference 9642: front() noexcept 9642: { 9642: ; 9642: return _M_elems[(size_type)0]; 9642: } 9642: 9642: [[__nodiscard__]] 9642: constexpr const_reference 9642: front() const noexcept 9642: { 9642: 9642: ; 9642: 9642: return _M_elems[(size_type)0]; 9642: } 9642: 9642: [[__nodiscard__]] 9642: constexpr reference 9642: back() noexcept 9642: { 9642: ; 9642: return _M_elems[_Nm - 1]; 9642: } 9642: 9642: [[__nodiscard__]] 9642: constexpr const_reference 9642: back() const noexcept 9642: { 9642: 9642: ; 9642: 9642: return _M_elems[_Nm - 1]; 9642: } 9642: 9642: [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]] 9642: constexpr pointer 9642: data() noexcept 9642: { return static_cast(_M_elems); } 9642: 9642: [[__nodiscard__]] 9642: constexpr const_pointer 9642: data() const noexcept 9642: { return static_cast(_M_elems); } 9642: }; 9642: 9642: 9642: template 9642: array(_Tp, _Up...) 9642: -> array && ...), _Tp>, 9642: 1 + sizeof...(_Up)>; 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: 9642: inline bool 9642: operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) 9642: { return std::equal(__one.begin(), __one.end(), __two.begin()); } 9642: # 322 "/usr/include/c++/13/array" 3 9642: template 9642: [[__nodiscard__]] 9642: 9642: inline bool 9642: operator!=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) 9642: { return !(__one == __two); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: 9642: inline bool 9642: operator<(const array<_Tp, _Nm>& __a, const array<_Tp, _Nm>& __b) 9642: { 9642: return std::lexicographical_compare(__a.begin(), __a.end(), 9642: __b.begin(), __b.end()); 9642: } 9642: 9642: template 9642: [[__nodiscard__]] 9642: 9642: inline bool 9642: operator>(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) 9642: { return __two < __one; } 9642: 9642: template 9642: [[__nodiscard__]] 9642: 9642: inline bool 9642: operator<=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) 9642: { return !(__one > __two); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: 9642: inline bool 9642: operator>=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) 9642: { return !(__one < __two); } 9642: 9642: 9642: 9642: template 9642: 9642: inline 9642: 9642: 9642: __enable_if_t<__array_traits<_Tp, _Nm>::_Is_swappable::value> 9642: 9642: 9642: 9642: swap(array<_Tp, _Nm>& __one, array<_Tp, _Nm>& __two) 9642: noexcept(noexcept(__one.swap(__two))) 9642: { __one.swap(__two); } 9642: 9642: 9642: template 9642: __enable_if_t::_Is_swappable::value> 9642: swap(array<_Tp, _Nm>&, array<_Tp, _Nm>&) = delete; 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: constexpr _Tp& 9642: get(array<_Tp, _Nm>& __arr) noexcept 9642: { 9642: static_assert(_Int < _Nm, "array index is within bounds"); 9642: return __arr._M_elems[_Int]; 9642: } 9642: 9642: template 9642: [[__nodiscard__]] 9642: constexpr _Tp&& 9642: get(array<_Tp, _Nm>&& __arr) noexcept 9642: { 9642: static_assert(_Int < _Nm, "array index is within bounds"); 9642: return std::move(std::get<_Int>(__arr)); 9642: } 9642: 9642: template 9642: [[__nodiscard__]] 9642: constexpr const _Tp& 9642: get(const array<_Tp, _Nm>& __arr) noexcept 9642: { 9642: static_assert(_Int < _Nm, "array index is within bounds"); 9642: return __arr._M_elems[_Int]; 9642: } 9642: 9642: template 9642: [[__nodiscard__]] 9642: constexpr const _Tp&& 9642: get(const array<_Tp, _Nm>&& __arr) noexcept 9642: { 9642: static_assert(_Int < _Nm, "array index is within bounds"); 9642: return std::move(std::get<_Int>(__arr)); 9642: } 9642: # 481 "/usr/include/c++/13/array" 3 9642: template 9642: struct tuple_size> 9642: : public integral_constant { }; 9642: 9642: 9642: template 9642: struct tuple_element<_Ind, array<_Tp, _Nm>> 9642: { 9642: static_assert(_Ind < _Nm, "array index is in range"); 9642: using type = _Tp; 9642: }; 9642: 9642: 9642: template 9642: inline constexpr size_t tuple_size_v> = _Nm; 9642: 9642: template 9642: inline constexpr size_t tuple_size_v> = _Nm; 9642: 9642: 9642: template 9642: struct __is_tuple_like_impl> : true_type 9642: { }; 9642: 9642: 9642: } 9642: # 66 "/usr/include/c++/13/functional" 2 3 9642: 9642: # 1 "/usr/include/c++/13/bits/stl_algo.h" 1 3 9642: # 59 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: # 1 "/usr/include/c++/13/bits/algorithmfwd.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/algorithmfwd.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/algorithmfwd.h" 3 9642: # 42 "/usr/include/c++/13/bits/algorithmfwd.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 199 "/usr/include/c++/13/bits/algorithmfwd.h" 3 9642: template 9642: 9642: bool 9642: all_of(_IIter, _IIter, _Predicate); 9642: 9642: template 9642: 9642: bool 9642: any_of(_IIter, _IIter, _Predicate); 9642: 9642: 9642: template 9642: 9642: bool 9642: binary_search(_FIter, _FIter, const _Tp&); 9642: 9642: template 9642: 9642: bool 9642: binary_search(_FIter, _FIter, const _Tp&, _Compare); 9642: 9642: 9642: template 9642: constexpr 9642: const _Tp& 9642: clamp(const _Tp&, const _Tp&, const _Tp&); 9642: 9642: template 9642: constexpr 9642: const _Tp& 9642: clamp(const _Tp&, const _Tp&, const _Tp&, _Compare); 9642: 9642: 9642: template 9642: 9642: _OIter 9642: copy(_IIter, _IIter, _OIter); 9642: 9642: template 9642: 9642: _BIter2 9642: copy_backward(_BIter1, _BIter1, _BIter2); 9642: 9642: 9642: template 9642: 9642: _OIter 9642: copy_if(_IIter, _IIter, _OIter, _Predicate); 9642: 9642: template 9642: 9642: _OIter 9642: copy_n(_IIter, _Size, _OIter); 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: pair<_FIter, _FIter> 9642: equal_range(_FIter, _FIter, const _Tp&); 9642: 9642: template 9642: 9642: pair<_FIter, _FIter> 9642: equal_range(_FIter, _FIter, const _Tp&, _Compare); 9642: 9642: template 9642: 9642: void 9642: fill(_FIter, _FIter, const _Tp&); 9642: 9642: template 9642: 9642: _OIter 9642: fill_n(_OIter, _Size, const _Tp&); 9642: 9642: 9642: 9642: template 9642: 9642: _FIter1 9642: find_end(_FIter1, _FIter1, _FIter2, _FIter2); 9642: 9642: template 9642: 9642: _FIter1 9642: find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate); 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: _IIter 9642: find_if_not(_IIter, _IIter, _Predicate); 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: bool 9642: includes(_IIter1, _IIter1, _IIter2, _IIter2); 9642: 9642: template 9642: 9642: bool 9642: includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare); 9642: 9642: template 9642: void 9642: inplace_merge(_BIter, _BIter, _BIter); 9642: 9642: template 9642: void 9642: inplace_merge(_BIter, _BIter, _BIter, _Compare); 9642: 9642: 9642: template 9642: 9642: bool 9642: is_heap(_RAIter, _RAIter); 9642: 9642: template 9642: 9642: bool 9642: is_heap(_RAIter, _RAIter, _Compare); 9642: 9642: template 9642: 9642: _RAIter 9642: is_heap_until(_RAIter, _RAIter); 9642: 9642: template 9642: 9642: _RAIter 9642: is_heap_until(_RAIter, _RAIter, _Compare); 9642: 9642: template 9642: 9642: bool 9642: is_partitioned(_IIter, _IIter, _Predicate); 9642: 9642: template 9642: 9642: bool 9642: is_permutation(_FIter1, _FIter1, _FIter2); 9642: 9642: template 9642: 9642: bool 9642: is_permutation(_FIter1, _FIter1, _FIter2, _BinaryPredicate); 9642: 9642: template 9642: 9642: bool 9642: is_sorted(_FIter, _FIter); 9642: 9642: template 9642: 9642: bool 9642: is_sorted(_FIter, _FIter, _Compare); 9642: 9642: template 9642: 9642: _FIter 9642: is_sorted_until(_FIter, _FIter); 9642: 9642: template 9642: 9642: _FIter 9642: is_sorted_until(_FIter, _FIter, _Compare); 9642: 9642: 9642: template 9642: 9642: void 9642: iter_swap(_FIter1, _FIter2); 9642: 9642: template 9642: 9642: _FIter 9642: lower_bound(_FIter, _FIter, const _Tp&); 9642: 9642: template 9642: 9642: _FIter 9642: lower_bound(_FIter, _FIter, const _Tp&, _Compare); 9642: 9642: template 9642: 9642: void 9642: make_heap(_RAIter, _RAIter); 9642: 9642: template 9642: 9642: void 9642: make_heap(_RAIter, _RAIter, _Compare); 9642: 9642: template 9642: constexpr 9642: const _Tp& 9642: max(const _Tp&, const _Tp&); 9642: 9642: template 9642: constexpr 9642: const _Tp& 9642: max(const _Tp&, const _Tp&, _Compare); 9642: 9642: 9642: 9642: 9642: template 9642: constexpr 9642: const _Tp& 9642: min(const _Tp&, const _Tp&); 9642: 9642: template 9642: constexpr 9642: const _Tp& 9642: min(const _Tp&, const _Tp&, _Compare); 9642: 9642: 9642: 9642: 9642: template 9642: constexpr 9642: pair 9642: minmax(const _Tp&, const _Tp&); 9642: 9642: template 9642: constexpr 9642: pair 9642: minmax(const _Tp&, const _Tp&, _Compare); 9642: 9642: template 9642: constexpr 9642: pair<_FIter, _FIter> 9642: minmax_element(_FIter, _FIter); 9642: 9642: template 9642: constexpr 9642: pair<_FIter, _FIter> 9642: minmax_element(_FIter, _FIter, _Compare); 9642: 9642: template 9642: constexpr 9642: _Tp 9642: min(initializer_list<_Tp>); 9642: 9642: template 9642: constexpr 9642: _Tp 9642: min(initializer_list<_Tp>, _Compare); 9642: 9642: template 9642: constexpr 9642: _Tp 9642: max(initializer_list<_Tp>); 9642: 9642: template 9642: constexpr 9642: _Tp 9642: max(initializer_list<_Tp>, _Compare); 9642: 9642: template 9642: constexpr 9642: pair<_Tp, _Tp> 9642: minmax(initializer_list<_Tp>); 9642: 9642: template 9642: constexpr 9642: pair<_Tp, _Tp> 9642: minmax(initializer_list<_Tp>, _Compare); 9642: 9642: 9642: 9642: 9642: template 9642: 9642: bool 9642: next_permutation(_BIter, _BIter); 9642: 9642: template 9642: 9642: bool 9642: next_permutation(_BIter, _BIter, _Compare); 9642: 9642: 9642: template 9642: 9642: bool 9642: none_of(_IIter, _IIter, _Predicate); 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: _RAIter 9642: partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter); 9642: 9642: template 9642: 9642: _RAIter 9642: partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare); 9642: 9642: 9642: 9642: 9642: template 9642: 9642: pair<_OIter1, _OIter2> 9642: partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate); 9642: 9642: template 9642: 9642: _FIter 9642: partition_point(_FIter, _FIter, _Predicate); 9642: 9642: 9642: template 9642: 9642: void 9642: pop_heap(_RAIter, _RAIter); 9642: 9642: template 9642: 9642: void 9642: pop_heap(_RAIter, _RAIter, _Compare); 9642: 9642: template 9642: 9642: bool 9642: prev_permutation(_BIter, _BIter); 9642: 9642: template 9642: 9642: bool 9642: prev_permutation(_BIter, _BIter, _Compare); 9642: 9642: template 9642: 9642: void 9642: push_heap(_RAIter, _RAIter); 9642: 9642: template 9642: 9642: void 9642: push_heap(_RAIter, _RAIter, _Compare); 9642: 9642: 9642: 9642: template 9642: 9642: _FIter 9642: remove(_FIter, _FIter, const _Tp&); 9642: 9642: template 9642: 9642: _FIter 9642: remove_if(_FIter, _FIter, _Predicate); 9642: 9642: template 9642: 9642: _OIter 9642: remove_copy(_IIter, _IIter, _OIter, const _Tp&); 9642: 9642: template 9642: 9642: _OIter 9642: remove_copy_if(_IIter, _IIter, _OIter, _Predicate); 9642: 9642: 9642: 9642: template 9642: 9642: _OIter 9642: replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&); 9642: 9642: template 9642: 9642: _OIter 9642: replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&); 9642: 9642: 9642: 9642: template 9642: 9642: void 9642: reverse(_BIter, _BIter); 9642: 9642: template 9642: 9642: _OIter 9642: reverse_copy(_BIter, _BIter, _OIter); 9642: 9642: inline namespace _V2 { 9642: 9642: template 9642: 9642: _FIter 9642: rotate(_FIter, _FIter, _FIter); 9642: 9642: } 9642: 9642: template 9642: 9642: _OIter 9642: rotate_copy(_FIter, _FIter, _FIter, _OIter); 9642: # 626 "/usr/include/c++/13/bits/algorithmfwd.h" 3 9642: template 9642: void 9642: shuffle(_RAIter, _RAIter, _UGenerator&&); 9642: 9642: 9642: template 9642: 9642: void 9642: sort_heap(_RAIter, _RAIter); 9642: 9642: template 9642: 9642: void 9642: sort_heap(_RAIter, _RAIter, _Compare); 9642: 9642: 9642: template 9642: _BIter 9642: stable_partition(_BIter, _BIter, _Predicate); 9642: # 661 "/usr/include/c++/13/bits/algorithmfwd.h" 3 9642: template 9642: 9642: _FIter2 9642: swap_ranges(_FIter1, _FIter1, _FIter2); 9642: 9642: 9642: 9642: template 9642: 9642: _FIter 9642: unique(_FIter, _FIter); 9642: 9642: template 9642: 9642: _FIter 9642: unique(_FIter, _FIter, _BinaryPredicate); 9642: 9642: 9642: 9642: template 9642: 9642: _FIter 9642: upper_bound(_FIter, _FIter, const _Tp&); 9642: 9642: template 9642: 9642: _FIter 9642: upper_bound(_FIter, _FIter, const _Tp&, _Compare); 9642: 9642: 9642: 9642: template 9642: 9642: _FIter 9642: adjacent_find(_FIter, _FIter); 9642: 9642: template 9642: 9642: _FIter 9642: adjacent_find(_FIter, _FIter, _BinaryPredicate); 9642: 9642: template 9642: 9642: typename iterator_traits<_IIter>::difference_type 9642: count(_IIter, _IIter, const _Tp&); 9642: 9642: template 9642: 9642: typename iterator_traits<_IIter>::difference_type 9642: count_if(_IIter, _IIter, _Predicate); 9642: 9642: template 9642: 9642: bool 9642: equal(_IIter1, _IIter1, _IIter2); 9642: 9642: template 9642: 9642: bool 9642: equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate); 9642: 9642: template 9642: 9642: _IIter 9642: find(_IIter, _IIter, const _Tp&); 9642: 9642: template 9642: 9642: _FIter1 9642: find_first_of(_FIter1, _FIter1, _FIter2, _FIter2); 9642: 9642: template 9642: 9642: _FIter1 9642: find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate); 9642: 9642: template 9642: 9642: _IIter 9642: find_if(_IIter, _IIter, _Predicate); 9642: 9642: template 9642: 9642: _Funct 9642: for_each(_IIter, _IIter, _Funct); 9642: 9642: template 9642: 9642: void 9642: generate(_FIter, _FIter, _Generator); 9642: 9642: template 9642: 9642: _OIter 9642: generate_n(_OIter, _Size, _Generator); 9642: 9642: template 9642: 9642: bool 9642: lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2); 9642: 9642: template 9642: 9642: bool 9642: lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare); 9642: 9642: template 9642: constexpr 9642: _FIter 9642: max_element(_FIter, _FIter); 9642: 9642: template 9642: constexpr 9642: _FIter 9642: max_element(_FIter, _FIter, _Compare); 9642: 9642: template 9642: 9642: _OIter 9642: merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 9642: 9642: template 9642: 9642: _OIter 9642: merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); 9642: 9642: template 9642: constexpr 9642: _FIter 9642: min_element(_FIter, _FIter); 9642: 9642: template 9642: constexpr 9642: _FIter 9642: min_element(_FIter, _FIter, _Compare); 9642: 9642: template 9642: 9642: pair<_IIter1, _IIter2> 9642: mismatch(_IIter1, _IIter1, _IIter2); 9642: 9642: template 9642: 9642: pair<_IIter1, _IIter2> 9642: mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate); 9642: 9642: template 9642: 9642: void 9642: nth_element(_RAIter, _RAIter, _RAIter); 9642: 9642: template 9642: 9642: void 9642: nth_element(_RAIter, _RAIter, _RAIter, _Compare); 9642: 9642: template 9642: 9642: void 9642: partial_sort(_RAIter, _RAIter, _RAIter); 9642: 9642: template 9642: 9642: void 9642: partial_sort(_RAIter, _RAIter, _RAIter, _Compare); 9642: 9642: template 9642: 9642: _BIter 9642: partition(_BIter, _BIter, _Predicate); 9642: 9642: 9642: template 9642: __attribute__ ((__deprecated__ ("use '" "std::shuffle" "' instead"))) 9642: void 9642: random_shuffle(_RAIter, _RAIter); 9642: 9642: template 9642: __attribute__ ((__deprecated__ ("use '" "std::shuffle" "' instead"))) 9642: void 9642: random_shuffle(_RAIter, _RAIter, 9642: 9642: _Generator&&); 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: void 9642: replace(_FIter, _FIter, const _Tp&, const _Tp&); 9642: 9642: template 9642: 9642: void 9642: replace_if(_FIter, _FIter, _Predicate, const _Tp&); 9642: 9642: template 9642: 9642: _FIter1 9642: search(_FIter1, _FIter1, _FIter2, _FIter2); 9642: 9642: template 9642: 9642: _FIter1 9642: search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate); 9642: 9642: template 9642: 9642: _FIter 9642: search_n(_FIter, _FIter, _Size, const _Tp&); 9642: 9642: template 9642: 9642: _FIter 9642: search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate); 9642: 9642: template 9642: 9642: _OIter 9642: set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 9642: 9642: template 9642: 9642: _OIter 9642: set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); 9642: 9642: template 9642: 9642: _OIter 9642: set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 9642: 9642: template 9642: 9642: _OIter 9642: set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); 9642: 9642: template 9642: 9642: _OIter 9642: set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 9642: 9642: template 9642: 9642: _OIter 9642: set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, 9642: _OIter, _Compare); 9642: 9642: template 9642: 9642: _OIter 9642: set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 9642: 9642: template 9642: 9642: _OIter 9642: set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); 9642: 9642: template 9642: 9642: void 9642: sort(_RAIter, _RAIter); 9642: 9642: template 9642: 9642: void 9642: sort(_RAIter, _RAIter, _Compare); 9642: 9642: template 9642: void 9642: stable_sort(_RAIter, _RAIter); 9642: 9642: template 9642: void 9642: stable_sort(_RAIter, _RAIter, _Compare); 9642: 9642: template 9642: 9642: _OIter 9642: transform(_IIter, _IIter, _OIter, _UnaryOperation); 9642: 9642: template 9642: 9642: _OIter 9642: transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation); 9642: 9642: template 9642: 9642: _OIter 9642: unique_copy(_IIter, _IIter, _OIter); 9642: 9642: template 9642: 9642: _OIter 9642: unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate); 9642: 9642: 9642: 9642: } 9642: # 60 "/usr/include/c++/13/bits/stl_algo.h" 2 3 9642: 9642: # 1 "/usr/include/c++/13/bits/stl_heap.h" 1 3 9642: # 63 "/usr/include/c++/13/bits/stl_heap.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: _Distance 9642: __is_heap_until(_RandomAccessIterator __first, _Distance __n, 9642: _Compare& __comp) 9642: { 9642: _Distance __parent = 0; 9642: for (_Distance __child = 1; __child < __n; ++__child) 9642: { 9642: if (__comp(__first + __parent, __first + __child)) 9642: return __child; 9642: if ((__child & 1) == 0) 9642: ++__parent; 9642: } 9642: return __n; 9642: } 9642: 9642: 9642: 9642: template 9642: 9642: inline bool 9642: __is_heap(_RandomAccessIterator __first, _Distance __n) 9642: { 9642: __gnu_cxx::__ops::_Iter_less_iter __comp; 9642: return std::__is_heap_until(__first, __n, __comp) == __n; 9642: } 9642: 9642: template 9642: 9642: inline bool 9642: __is_heap(_RandomAccessIterator __first, _Compare __comp, _Distance __n) 9642: { 9642: typedef __decltype(__comp) _Cmp; 9642: __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp)); 9642: return std::__is_heap_until(__first, __n, __cmp) == __n; 9642: } 9642: 9642: template 9642: 9642: inline bool 9642: __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) 9642: { return std::__is_heap(__first, std::distance(__first, __last)); } 9642: 9642: template 9642: 9642: inline bool 9642: __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, 9642: _Compare __comp) 9642: { 9642: return std::__is_heap(__first, std::move(__comp), 9642: std::distance(__first, __last)); 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: 9642: void 9642: __push_heap(_RandomAccessIterator __first, 9642: _Distance __holeIndex, _Distance __topIndex, _Tp __value, 9642: _Compare& __comp) 9642: { 9642: _Distance __parent = (__holeIndex - 1) / 2; 9642: while (__holeIndex > __topIndex && __comp(__first + __parent, __value)) 9642: { 9642: *(__first + __holeIndex) = std::move(*(__first + __parent)); 9642: __holeIndex = __parent; 9642: __parent = (__holeIndex - 1) / 2; 9642: } 9642: *(__first + __holeIndex) = std::move(__value); 9642: } 9642: # 159 "/usr/include/c++/13/bits/stl_heap.h" 3 9642: template 9642: 9642: inline void 9642: push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) 9642: { 9642: typedef typename iterator_traits<_RandomAccessIterator>::value_type 9642: _ValueType; 9642: typedef typename iterator_traits<_RandomAccessIterator>::difference_type 9642: _DistanceType; 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: 9642: __gnu_cxx::__ops::_Iter_less_val __comp; 9642: _ValueType __value = std::move(*(__last - 1)); 9642: std::__push_heap(__first, _DistanceType((__last - __first) - 1), 9642: _DistanceType(0), std::move(__value), __comp); 9642: } 9642: # 195 "/usr/include/c++/13/bits/stl_heap.h" 3 9642: template 9642: 9642: inline void 9642: push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, 9642: _Compare __comp) 9642: { 9642: typedef typename iterator_traits<_RandomAccessIterator>::value_type 9642: _ValueType; 9642: typedef typename iterator_traits<_RandomAccessIterator>::difference_type 9642: _DistanceType; 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: 9642: __decltype(__gnu_cxx::__ops::__iter_comp_val(std::move(__comp))) 9642: __cmp(std::move(__comp)); 9642: _ValueType __value = std::move(*(__last - 1)); 9642: std::__push_heap(__first, _DistanceType((__last - __first) - 1), 9642: _DistanceType(0), std::move(__value), __cmp); 9642: } 9642: 9642: template 9642: 9642: void 9642: __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex, 9642: _Distance __len, _Tp __value, _Compare __comp) 9642: { 9642: const _Distance __topIndex = __holeIndex; 9642: _Distance __secondChild = __holeIndex; 9642: while (__secondChild < (__len - 1) / 2) 9642: { 9642: __secondChild = 2 * (__secondChild + 1); 9642: if (__comp(__first + __secondChild, 9642: __first + (__secondChild - 1))) 9642: __secondChild--; 9642: *(__first + __holeIndex) = std::move(*(__first + __secondChild)); 9642: __holeIndex = __secondChild; 9642: } 9642: if ((__len & 1) == 0 && __secondChild == (__len - 2) / 2) 9642: { 9642: __secondChild = 2 * (__secondChild + 1); 9642: *(__first + __holeIndex) = std::move(*(__first + (__secondChild - 1))) 9642: ; 9642: __holeIndex = __secondChild - 1; 9642: } 9642: __decltype(__gnu_cxx::__ops::__iter_comp_val(std::move(__comp))) 9642: __cmp(std::move(__comp)); 9642: std::__push_heap(__first, __holeIndex, __topIndex, 9642: std::move(__value), __cmp); 9642: } 9642: 9642: template 9642: 9642: inline void 9642: __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, 9642: _RandomAccessIterator __result, _Compare& __comp) 9642: { 9642: typedef typename iterator_traits<_RandomAccessIterator>::value_type 9642: _ValueType; 9642: typedef typename iterator_traits<_RandomAccessIterator>::difference_type 9642: _DistanceType; 9642: 9642: _ValueType __value = std::move(*__result); 9642: *__result = std::move(*__first); 9642: std::__adjust_heap(__first, _DistanceType(0), 9642: _DistanceType(__last - __first), 9642: std::move(__value), __comp); 9642: } 9642: # 280 "/usr/include/c++/13/bits/stl_heap.h" 3 9642: template 9642: 9642: inline void 9642: pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: ; 9642: 9642: if (__last - __first > 1) 9642: { 9642: --__last; 9642: __gnu_cxx::__ops::_Iter_less_iter __comp; 9642: std::__pop_heap(__first, __last, __last, __comp); 9642: } 9642: } 9642: # 314 "/usr/include/c++/13/bits/stl_heap.h" 3 9642: template 9642: 9642: inline void 9642: pop_heap(_RandomAccessIterator __first, 9642: _RandomAccessIterator __last, _Compare __comp) 9642: { 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: ; 9642: 9642: if (__last - __first > 1) 9642: { 9642: typedef __decltype(__comp) _Cmp; 9642: __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp)); 9642: --__last; 9642: std::__pop_heap(__first, __last, __last, __cmp); 9642: } 9642: } 9642: 9642: template 9642: 9642: void 9642: __make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, 9642: _Compare& __comp) 9642: { 9642: typedef typename iterator_traits<_RandomAccessIterator>::value_type 9642: _ValueType; 9642: typedef typename iterator_traits<_RandomAccessIterator>::difference_type 9642: _DistanceType; 9642: 9642: if (__last - __first < 2) 9642: return; 9642: 9642: const _DistanceType __len = __last - __first; 9642: _DistanceType __parent = (__len - 2) / 2; 9642: while (true) 9642: { 9642: _ValueType __value = std::move(*(__first + __parent)); 9642: std::__adjust_heap(__first, __parent, __len, std::move(__value), 9642: __comp); 9642: if (__parent == 0) 9642: return; 9642: __parent--; 9642: } 9642: } 9642: # 372 "/usr/include/c++/13/bits/stl_heap.h" 3 9642: template 9642: 9642: inline void 9642: make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: __gnu_cxx::__ops::_Iter_less_iter __comp; 9642: std::__make_heap(__first, __last, __comp); 9642: } 9642: # 399 "/usr/include/c++/13/bits/stl_heap.h" 3 9642: template 9642: 9642: inline void 9642: make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, 9642: _Compare __comp) 9642: { 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: typedef __decltype(__comp) _Cmp; 9642: __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp)); 9642: std::__make_heap(__first, __last, __cmp); 9642: } 9642: 9642: template 9642: 9642: void 9642: __sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, 9642: _Compare& __comp) 9642: { 9642: while (__last - __first > 1) 9642: { 9642: --__last; 9642: std::__pop_heap(__first, __last, __last, __comp); 9642: } 9642: } 9642: # 437 "/usr/include/c++/13/bits/stl_heap.h" 3 9642: template 9642: 9642: inline void 9642: sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: 9642: __gnu_cxx::__ops::_Iter_less_iter __comp; 9642: std::__sort_heap(__first, __last, __comp); 9642: } 9642: # 465 "/usr/include/c++/13/bits/stl_heap.h" 3 9642: template 9642: 9642: inline void 9642: sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, 9642: _Compare __comp) 9642: { 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: 9642: typedef __decltype(__comp) _Cmp; 9642: __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp)); 9642: std::__sort_heap(__first, __last, __cmp); 9642: } 9642: # 494 "/usr/include/c++/13/bits/stl_heap.h" 3 9642: template 9642: 9642: inline _RandomAccessIterator 9642: is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: __gnu_cxx::__ops::_Iter_less_iter __comp; 9642: return __first + 9642: std::__is_heap_until(__first, std::distance(__first, __last), __comp); 9642: } 9642: # 523 "/usr/include/c++/13/bits/stl_heap.h" 3 9642: template 9642: 9642: inline _RandomAccessIterator 9642: is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last, 9642: _Compare __comp) 9642: { 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: typedef __decltype(__comp) _Cmp; 9642: __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp)); 9642: return __first 9642: + std::__is_heap_until(__first, std::distance(__first, __last), __cmp); 9642: } 9642: # 548 "/usr/include/c++/13/bits/stl_heap.h" 3 9642: template 9642: 9642: inline bool 9642: is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) 9642: { return std::is_heap_until(__first, __last) == __last; } 9642: # 562 "/usr/include/c++/13/bits/stl_heap.h" 3 9642: template 9642: 9642: inline bool 9642: is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, 9642: _Compare __comp) 9642: { 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: const auto __dist = std::distance(__first, __last); 9642: typedef __decltype(__comp) _Cmp; 9642: __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp)); 9642: return std::__is_heap_until(__first, __dist, __cmp) == __dist; 9642: } 9642: 9642: 9642: 9642: } 9642: # 62 "/usr/include/c++/13/bits/stl_algo.h" 2 3 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/uniform_int_dist.h" 1 3 9642: # 41 "/usr/include/c++/13/bits/uniform_int_dist.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 64 "/usr/include/c++/13/bits/uniform_int_dist.h" 3 9642: namespace __detail 9642: { 9642: 9642: 9642: 9642: template 9642: constexpr bool 9642: _Power_of_2(_Tp __x) 9642: { 9642: return ((__x - 1) & __x) == 0; 9642: } 9642: } 9642: # 87 "/usr/include/c++/13/bits/uniform_int_dist.h" 3 9642: template 9642: class uniform_int_distribution 9642: { 9642: static_assert(std::is_integral<_IntType>::value, 9642: "template argument must be an integral type"); 9642: 9642: public: 9642: 9642: typedef _IntType result_type; 9642: 9642: struct param_type 9642: { 9642: typedef uniform_int_distribution<_IntType> distribution_type; 9642: 9642: param_type() : param_type(0) { } 9642: 9642: explicit 9642: param_type(_IntType __a, 9642: _IntType __b = __gnu_cxx::__int_traits<_IntType>::__max) 9642: : _M_a(__a), _M_b(__b) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(_M_a <= _M_b)) __builtin_unreachable(); } while (false); 9642: } 9642: 9642: result_type 9642: a() const 9642: { return _M_a; } 9642: 9642: result_type 9642: b() const 9642: { return _M_b; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; } 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: private: 9642: _IntType _M_a; 9642: _IntType _M_b; 9642: }; 9642: 9642: public: 9642: 9642: 9642: 9642: uniform_int_distribution() : uniform_int_distribution(0) { } 9642: 9642: 9642: 9642: 9642: explicit 9642: uniform_int_distribution(_IntType __a, 9642: _IntType __b 9642: = __gnu_cxx::__int_traits<_IntType>::__max) 9642: : _M_param(__a, __b) 9642: { } 9642: 9642: explicit 9642: uniform_int_distribution(const param_type& __p) 9642: : _M_param(__p) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: reset() { } 9642: 9642: result_type 9642: a() const 9642: { return _M_param.a(); } 9642: 9642: result_type 9642: b() const 9642: { return _M_param.b(); } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { _M_param = __param; } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { return this->a(); } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { return this->b(); } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomBitGenerator& __urng) 9642: { return this->operator()(__urng, _M_param); } 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomBitGenerator& __urng, 9642: const param_type& __p); 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomBitGenerator& __urng) 9642: { this->__generate(__f, __t, __urng, _M_param); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomBitGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomBitGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const uniform_int_distribution& __d1, 9642: const uniform_int_distribution& __d2) 9642: { return __d1._M_param == __d2._M_param; } 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomBitGenerator& __urng, 9642: const param_type& __p); 9642: 9642: param_type _M_param; 9642: 9642: 9642: 9642: 9642: template 9642: static _Up 9642: _S_nd(_Urbg& __g, _Up __range) 9642: { 9642: using _Up_traits = __gnu_cxx::__int_traits<_Up>; 9642: using _Wp_traits = __gnu_cxx::__int_traits<_Wp>; 9642: static_assert(!_Up_traits::__is_signed, "U must be unsigned"); 9642: static_assert(!_Wp_traits::__is_signed, "W must be unsigned"); 9642: static_assert(_Wp_traits::__digits == (2 * _Up_traits::__digits), 9642: "W must be twice as wide as U"); 9642: 9642: 9642: 9642: 9642: _Wp __product = _Wp(__g()) * _Wp(__range); 9642: _Up __low = _Up(__product); 9642: if (__low < __range) 9642: { 9642: _Up __threshold = -__range % __range; 9642: while (__low < __threshold) 9642: { 9642: __product = _Wp(__g()) * _Wp(__range); 9642: __low = _Up(__product); 9642: } 9642: } 9642: return __product >> _Up_traits::__digits; 9642: } 9642: }; 9642: 9642: template 9642: template 9642: typename uniform_int_distribution<_IntType>::result_type 9642: uniform_int_distribution<_IntType>:: 9642: operator()(_UniformRandomBitGenerator& __urng, 9642: const param_type& __param) 9642: { 9642: typedef typename _UniformRandomBitGenerator::result_type _Gresult_type; 9642: typedef typename make_unsigned::type __utype; 9642: typedef typename common_type<_Gresult_type, __utype>::type __uctype; 9642: 9642: constexpr __uctype __urngmin = _UniformRandomBitGenerator::min(); 9642: constexpr __uctype __urngmax = _UniformRandomBitGenerator::max(); 9642: static_assert( __urngmin < __urngmax, 9642: "Uniform random bit generator must define min() < max()"); 9642: constexpr __uctype __urngrange = __urngmax - __urngmin; 9642: 9642: const __uctype __urange 9642: = __uctype(__param.b()) - __uctype(__param.a()); 9642: 9642: __uctype __ret; 9642: if (__urngrange > __urange) 9642: { 9642: 9642: 9642: const __uctype __uerange = __urange + 1; 9642: # 323 "/usr/include/c++/13/bits/uniform_int_dist.h" 3 9642: if constexpr (__urngrange == 0xffffffffU) 9642: { 9642: 9642: 9642: unsigned int __u32erange = __uerange; 9642: __ret = _S_nd(__urng, __u32erange); 9642: } 9642: else 9642: 9642: { 9642: 9642: const __uctype __scaling = __urngrange / __uerange; 9642: const __uctype __past = __uerange * __scaling; 9642: do 9642: __ret = __uctype(__urng()) - __urngmin; 9642: while (__ret >= __past); 9642: __ret /= __scaling; 9642: } 9642: } 9642: else if (__urngrange < __urange) 9642: { 9642: # 359 "/usr/include/c++/13/bits/uniform_int_dist.h" 3 9642: __uctype __tmp; 9642: do 9642: { 9642: const __uctype __uerngrange = __urngrange + 1; 9642: __tmp = (__uerngrange * operator() 9642: (__urng, param_type(0, __urange / __uerngrange))); 9642: __ret = __tmp + (__uctype(__urng()) - __urngmin); 9642: } 9642: while (__ret > __urange || __ret < __tmp); 9642: } 9642: else 9642: __ret = __uctype(__urng()) - __urngmin; 9642: 9642: return __ret + __param.a(); 9642: } 9642: 9642: 9642: template 9642: template 9642: void 9642: uniform_int_distribution<_IntType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomBitGenerator& __urng, 9642: const param_type& __param) 9642: { 9642: 9642: typedef typename _UniformRandomBitGenerator::result_type _Gresult_type; 9642: typedef typename make_unsigned::type __utype; 9642: typedef typename common_type<_Gresult_type, __utype>::type __uctype; 9642: 9642: static_assert( __urng.min() < __urng.max(), 9642: "Uniform random bit generator must define min() < max()"); 9642: 9642: constexpr __uctype __urngmin = __urng.min(); 9642: constexpr __uctype __urngmax = __urng.max(); 9642: constexpr __uctype __urngrange = __urngmax - __urngmin; 9642: const __uctype __urange 9642: = __uctype(__param.b()) - __uctype(__param.a()); 9642: 9642: __uctype __ret; 9642: 9642: if (__urngrange > __urange) 9642: { 9642: if (__detail::_Power_of_2(__urngrange + 1) 9642: && __detail::_Power_of_2(__urange + 1)) 9642: { 9642: while (__f != __t) 9642: { 9642: __ret = __uctype(__urng()) - __urngmin; 9642: *__f++ = (__ret & __urange) + __param.a(); 9642: } 9642: } 9642: else 9642: { 9642: 9642: const __uctype __uerange = __urange + 1; 9642: const __uctype __scaling = __urngrange / __uerange; 9642: const __uctype __past = __uerange * __scaling; 9642: while (__f != __t) 9642: { 9642: do 9642: __ret = __uctype(__urng()) - __urngmin; 9642: while (__ret >= __past); 9642: *__f++ = __ret / __scaling + __param.a(); 9642: } 9642: } 9642: } 9642: else if (__urngrange < __urange) 9642: { 9642: # 444 "/usr/include/c++/13/bits/uniform_int_dist.h" 3 9642: __uctype __tmp; 9642: while (__f != __t) 9642: { 9642: do 9642: { 9642: constexpr __uctype __uerngrange = __urngrange + 1; 9642: __tmp = (__uerngrange * operator() 9642: (__urng, param_type(0, __urange / __uerngrange))); 9642: __ret = __tmp + (__uctype(__urng()) - __urngmin); 9642: } 9642: while (__ret > __urange || __ret < __tmp); 9642: *__f++ = __ret; 9642: } 9642: } 9642: else 9642: while (__f != __t) 9642: *__f++ = __uctype(__urng()) - __urngmin + __param.a(); 9642: } 9642: 9642: 9642: 9642: 9642: } 9642: # 66 "/usr/include/c++/13/bits/stl_algo.h" 2 3 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/stl_tempbuf.h" 1 3 9642: # 65 "/usr/include/c++/13/bits/stl_tempbuf.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: namespace __detail 9642: { 9642: template 9642: inline void 9642: __return_temporary_buffer(_Tp* __p, 9642: size_t __len __attribute__((__unused__))) 9642: { 9642: 9642: ::operator delete(__p, __len * sizeof(_Tp)); 9642: 9642: 9642: 9642: } 9642: } 9642: # 101 "/usr/include/c++/13/bits/stl_tempbuf.h" 3 9642: template 9642: [[__deprecated__]] 9642: pair<_Tp*, ptrdiff_t> 9642: get_temporary_buffer(ptrdiff_t __len) noexcept 9642: { 9642: const ptrdiff_t __max = 9642: __gnu_cxx::__numeric_traits::__max / sizeof(_Tp); 9642: if (__len > __max) 9642: __len = __max; 9642: 9642: while (__len > 0) 9642: { 9642: _Tp* __tmp = static_cast<_Tp*>(::operator new(__len * sizeof(_Tp), 9642: std::nothrow)); 9642: if (__tmp != 0) 9642: return std::pair<_Tp*, ptrdiff_t>(__tmp, __len); 9642: __len = __len == 1 ? 0 : ((__len + 1) / 2); 9642: } 9642: return std::pair<_Tp*, ptrdiff_t>(static_cast<_Tp*>(0), 0); 9642: } 9642: # 129 "/usr/include/c++/13/bits/stl_tempbuf.h" 3 9642: template 9642: inline void 9642: return_temporary_buffer(_Tp* __p) 9642: { ::operator delete(__p); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: class _Temporary_buffer 9642: { 9642: 9642: 9642: 9642: public: 9642: typedef _Tp value_type; 9642: typedef value_type* pointer; 9642: typedef pointer iterator; 9642: typedef ptrdiff_t size_type; 9642: 9642: protected: 9642: size_type _M_original_len; 9642: size_type _M_len; 9642: pointer _M_buffer; 9642: 9642: public: 9642: 9642: size_type 9642: size() const 9642: { return _M_len; } 9642: 9642: 9642: size_type 9642: requested_size() const 9642: { return _M_original_len; } 9642: 9642: 9642: iterator 9642: begin() 9642: { return _M_buffer; } 9642: 9642: 9642: iterator 9642: end() 9642: { return _M_buffer + _M_len; } 9642: 9642: 9642: 9642: 9642: 9642: _Temporary_buffer(_ForwardIterator __seed, size_type __original_len); 9642: 9642: ~_Temporary_buffer() 9642: { 9642: std::_Destroy(_M_buffer, _M_buffer + _M_len); 9642: std::__detail::__return_temporary_buffer(_M_buffer, _M_len); 9642: } 9642: 9642: private: 9642: 9642: _Temporary_buffer(const _Temporary_buffer&); 9642: 9642: void 9642: operator=(const _Temporary_buffer&); 9642: }; 9642: 9642: 9642: template 9642: struct __uninitialized_construct_buf_dispatch 9642: { 9642: template 9642: static void 9642: __ucr(_Pointer __first, _Pointer __last, 9642: _ForwardIterator __seed) 9642: { 9642: if (__first == __last) 9642: return; 9642: 9642: _Pointer __cur = __first; 9642: try 9642: { 9642: std::_Construct(std::__addressof(*__first), 9642: std::move(*__seed)); 9642: _Pointer __prev = __cur; 9642: ++__cur; 9642: for(; __cur != __last; ++__cur, ++__prev) 9642: std::_Construct(std::__addressof(*__cur), 9642: std::move(*__prev)); 9642: *__seed = std::move(*__prev); 9642: } 9642: catch(...) 9642: { 9642: std::_Destroy(__first, __cur); 9642: throw; 9642: } 9642: } 9642: }; 9642: 9642: template<> 9642: struct __uninitialized_construct_buf_dispatch 9642: { 9642: template 9642: static void 9642: __ucr(_Pointer, _Pointer, _ForwardIterator) { } 9642: }; 9642: # 247 "/usr/include/c++/13/bits/stl_tempbuf.h" 3 9642: template 9642: inline void 9642: __uninitialized_construct_buf(_Pointer __first, _Pointer __last, 9642: _ForwardIterator __seed) 9642: { 9642: typedef typename std::iterator_traits<_Pointer>::value_type 9642: _ValueType; 9642: 9642: std::__uninitialized_construct_buf_dispatch< 9642: __has_trivial_constructor(_ValueType)>:: 9642: __ucr(__first, __last, __seed); 9642: } 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: template 9642: _Temporary_buffer<_ForwardIterator, _Tp>:: 9642: _Temporary_buffer(_ForwardIterator __seed, size_type __original_len) 9642: : _M_original_len(__original_len), _M_len(0), _M_buffer(0) 9642: { 9642: std::pair __p( 9642: std::get_temporary_buffer(_M_original_len)); 9642: 9642: if (__p.first) 9642: { 9642: try 9642: { 9642: std::__uninitialized_construct_buf(__p.first, __p.first + __p.second, 9642: __seed); 9642: _M_buffer = __p.first; 9642: _M_len = __p.second; 9642: } 9642: catch(...) 9642: { 9642: std::__detail::__return_temporary_buffer(__p.first, __p.second); 9642: throw; 9642: } 9642: } 9642: } 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: } 9642: # 70 "/usr/include/c++/13/bits/stl_algo.h" 2 3 9642: 9642: # 1 "/usr/include/c++/13/cstdlib" 1 3 9642: # 39 "/usr/include/c++/13/cstdlib" 3 9642: 9642: # 40 "/usr/include/c++/13/cstdlib" 3 9642: # 79 "/usr/include/c++/13/cstdlib" 3 9642: # 1 "/usr/include/stdlib.h" 1 3 4 9642: # 26 "/usr/include/stdlib.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 9642: # 27 "/usr/include/stdlib.h" 2 3 4 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 33 "/usr/include/stdlib.h" 2 3 4 9642: 9642: extern "C" { 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/waitflags.h" 1 3 4 9642: # 41 "/usr/include/stdlib.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/waitstatus.h" 1 3 4 9642: # 42 "/usr/include/stdlib.h" 2 3 4 9642: # 56 "/usr/include/stdlib.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/floatn.h" 1 3 4 9642: # 52 "/usr/include/arm-linux-gnueabihf/bits/floatn.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/floatn-common.h" 1 3 4 9642: # 24 "/usr/include/arm-linux-gnueabihf/bits/floatn-common.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/long-double.h" 1 3 4 9642: # 25 "/usr/include/arm-linux-gnueabihf/bits/floatn-common.h" 2 3 4 9642: # 53 "/usr/include/arm-linux-gnueabihf/bits/floatn.h" 2 3 4 9642: # 57 "/usr/include/stdlib.h" 2 3 4 9642: 9642: 9642: typedef struct 9642: { 9642: int quot; 9642: int rem; 9642: } div_t; 9642: 9642: 9642: 9642: typedef struct 9642: { 9642: long int quot; 9642: long int rem; 9642: } ldiv_t; 9642: 9642: 9642: 9642: 9642: 9642: __extension__ typedef struct 9642: { 9642: long long int quot; 9642: long long int rem; 9642: } lldiv_t; 9642: # 98 "/usr/include/stdlib.h" 3 4 9642: extern size_t __ctype_get_mb_cur_max (void) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: extern double atof (const char *__nptr) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: extern int atoi (const char *__nptr) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: extern long int atol (const char *__nptr) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: __extension__ extern long long int atoll (const char *__nptr) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: extern double strtod (const char *__restrict __nptr, 9642: char **__restrict __endptr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern float strtof (const char *__restrict __nptr, 9642: char **__restrict __endptr) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: extern long double strtold (const char *__restrict __nptr, 9642: char **__restrict __endptr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: # 141 "/usr/include/stdlib.h" 3 4 9642: extern _Float32 strtof32 (const char *__restrict __nptr, 9642: char **__restrict __endptr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern _Float64 strtof64 (const char *__restrict __nptr, 9642: char **__restrict __endptr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: # 159 "/usr/include/stdlib.h" 3 4 9642: extern _Float32x strtof32x (const char *__restrict __nptr, 9642: char **__restrict __endptr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: # 177 "/usr/include/stdlib.h" 3 4 9642: extern long int strtol (const char *__restrict __nptr, 9642: char **__restrict __endptr, int __base) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: extern unsigned long int strtoul (const char *__restrict __nptr, 9642: char **__restrict __endptr, int __base) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: __extension__ 9642: extern long long int strtoq (const char *__restrict __nptr, 9642: char **__restrict __endptr, int __base) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: __extension__ 9642: extern unsigned long long int strtouq (const char *__restrict __nptr, 9642: char **__restrict __endptr, int __base) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: __extension__ 9642: extern long long int strtoll (const char *__restrict __nptr, 9642: char **__restrict __endptr, int __base) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: __extension__ 9642: extern unsigned long long int strtoull (const char *__restrict __nptr, 9642: char **__restrict __endptr, int __base) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern long int strtol (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtol") 9642: 9642: 9642: __attribute__ ((__nonnull__ (1))); 9642: extern unsigned long int strtoul (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoul") 9642: 9642: 9642: 9642: __attribute__ ((__nonnull__ (1))); 9642: 9642: __extension__ 9642: extern long long int strtoq (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoll") 9642: 9642: 9642: __attribute__ ((__nonnull__ (1))); 9642: __extension__ 9642: extern unsigned long long int strtouq (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoull") 9642: 9642: 9642: 9642: __attribute__ ((__nonnull__ (1))); 9642: 9642: __extension__ 9642: extern long long int strtoll (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoll") 9642: 9642: 9642: __attribute__ ((__nonnull__ (1))); 9642: __extension__ 9642: extern unsigned long long int strtoull (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoull") 9642: 9642: 9642: 9642: __attribute__ ((__nonnull__ (1))); 9642: # 278 "/usr/include/stdlib.h" 3 4 9642: extern int strfromd (char *__dest, size_t __size, const char *__format, 9642: double __f) 9642: noexcept (true) __attribute__ ((__nonnull__ (3))); 9642: 9642: extern int strfromf (char *__dest, size_t __size, const char *__format, 9642: float __f) 9642: noexcept (true) __attribute__ ((__nonnull__ (3))); 9642: 9642: extern int strfroml (char *__dest, size_t __size, const char *__format, 9642: long double __f) 9642: noexcept (true) __attribute__ ((__nonnull__ (3))); 9642: # 298 "/usr/include/stdlib.h" 3 4 9642: extern int strfromf32 (char *__dest, size_t __size, const char * __format, 9642: _Float32 __f) 9642: noexcept (true) __attribute__ ((__nonnull__ (3))); 9642: 9642: 9642: 9642: extern int strfromf64 (char *__dest, size_t __size, const char * __format, 9642: _Float64 __f) 9642: noexcept (true) __attribute__ ((__nonnull__ (3))); 9642: # 316 "/usr/include/stdlib.h" 3 4 9642: extern int strfromf32x (char *__dest, size_t __size, const char * __format, 9642: _Float32x __f) 9642: noexcept (true) __attribute__ ((__nonnull__ (3))); 9642: # 338 "/usr/include/stdlib.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/locale_t.h" 1 3 4 9642: # 22 "/usr/include/arm-linux-gnueabihf/bits/types/locale_t.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/__locale_t.h" 1 3 4 9642: # 27 "/usr/include/arm-linux-gnueabihf/bits/types/__locale_t.h" 3 4 9642: struct __locale_struct 9642: { 9642: 9642: struct __locale_data *__locales[13]; 9642: 9642: 9642: const unsigned short int *__ctype_b; 9642: const int *__ctype_tolower; 9642: const int *__ctype_toupper; 9642: 9642: 9642: const char *__names[13]; 9642: }; 9642: 9642: typedef struct __locale_struct *__locale_t; 9642: # 23 "/usr/include/arm-linux-gnueabihf/bits/types/locale_t.h" 2 3 4 9642: 9642: typedef __locale_t locale_t; 9642: # 339 "/usr/include/stdlib.h" 2 3 4 9642: 9642: extern long int strtol_l (const char *__restrict __nptr, 9642: char **__restrict __endptr, int __base, 9642: locale_t __loc) noexcept (true) __attribute__ ((__nonnull__ (1, 4))); 9642: 9642: extern unsigned long int strtoul_l (const char *__restrict __nptr, 9642: char **__restrict __endptr, 9642: int __base, locale_t __loc) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 4))); 9642: 9642: __extension__ 9642: extern long long int strtoll_l (const char *__restrict __nptr, 9642: char **__restrict __endptr, int __base, 9642: locale_t __loc) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 4))); 9642: 9642: __extension__ 9642: extern unsigned long long int strtoull_l (const char *__restrict __nptr, 9642: char **__restrict __endptr, 9642: int __base, locale_t __loc) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 4))); 9642: 9642: 9642: 9642: 9642: 9642: extern long int strtol_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_strtol_l") 9642: 9642: 9642: 9642: __attribute__ ((__nonnull__ (1, 4))); 9642: extern unsigned long int strtoul_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_strtoul_l") 9642: 9642: 9642: 9642: 9642: __attribute__ ((__nonnull__ (1, 4))); 9642: __extension__ 9642: extern long long int strtoll_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_strtoll_l") 9642: 9642: 9642: 9642: 9642: __attribute__ ((__nonnull__ (1, 4))); 9642: __extension__ 9642: extern unsigned long long int strtoull_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_strtoull_l") 9642: 9642: 9642: 9642: 9642: __attribute__ ((__nonnull__ (1, 4))); 9642: # 415 "/usr/include/stdlib.h" 3 4 9642: extern double strtod_l (const char *__restrict __nptr, 9642: char **__restrict __endptr, locale_t __loc) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 9642: 9642: extern float strtof_l (const char *__restrict __nptr, 9642: char **__restrict __endptr, locale_t __loc) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 9642: 9642: extern long double strtold_l (const char *__restrict __nptr, 9642: char **__restrict __endptr, 9642: locale_t __loc) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 9642: # 436 "/usr/include/stdlib.h" 3 4 9642: extern _Float32 strtof32_l (const char *__restrict __nptr, 9642: char **__restrict __endptr, 9642: locale_t __loc) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 9642: 9642: 9642: 9642: extern _Float64 strtof64_l (const char *__restrict __nptr, 9642: char **__restrict __endptr, 9642: locale_t __loc) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 9642: # 457 "/usr/include/stdlib.h" 3 4 9642: extern _Float32x strtof32x_l (const char *__restrict __nptr, 9642: char **__restrict __endptr, 9642: locale_t __loc) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 9642: # 480 "/usr/include/stdlib.h" 3 4 9642: extern __inline __attribute__ ((__gnu_inline__)) int 9642: __attribute__ ((__leaf__)) atoi (const char *__nptr) noexcept (true) 9642: { 9642: return (int) strtol (__nptr, (char **) __null, 10); 9642: } 9642: extern __inline __attribute__ ((__gnu_inline__)) long int 9642: __attribute__ ((__leaf__)) atol (const char *__nptr) noexcept (true) 9642: { 9642: return strtol (__nptr, (char **) __null, 10); 9642: } 9642: 9642: 9642: __extension__ extern __inline __attribute__ ((__gnu_inline__)) long long int 9642: __attribute__ ((__leaf__)) atoll (const char *__nptr) noexcept (true) 9642: { 9642: return strtoll (__nptr, (char **) __null, 10); 9642: } 9642: # 505 "/usr/include/stdlib.h" 3 4 9642: extern char *l64a (long int __n) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: extern long int a64l (const char *__s) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/sys/types.h" 1 3 4 9642: # 27 "/usr/include/arm-linux-gnueabihf/sys/types.h" 3 4 9642: extern "C" { 9642: 9642: 9642: 9642: 9642: 9642: typedef __u_char u_char; 9642: typedef __u_short u_short; 9642: typedef __u_int u_int; 9642: typedef __u_long u_long; 9642: typedef __quad_t quad_t; 9642: typedef __u_quad_t u_quad_t; 9642: typedef __fsid_t fsid_t; 9642: 9642: 9642: typedef __loff_t loff_t; 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef __ino64_t ino_t; 9642: 9642: 9642: 9642: 9642: typedef __ino64_t ino64_t; 9642: 9642: 9642: 9642: 9642: typedef __dev_t dev_t; 9642: 9642: 9642: 9642: 9642: typedef __gid_t gid_t; 9642: 9642: 9642: 9642: 9642: typedef __mode_t mode_t; 9642: 9642: 9642: 9642: 9642: typedef __nlink_t nlink_t; 9642: 9642: 9642: 9642: 9642: typedef __uid_t uid_t; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef __off64_t off_t; 9642: 9642: 9642: 9642: 9642: typedef __off64_t off64_t; 9642: 9642: 9642: 9642: 9642: typedef __pid_t pid_t; 9642: 9642: 9642: 9642: 9642: 9642: typedef __id_t id_t; 9642: 9642: 9642: 9642: 9642: typedef __ssize_t ssize_t; 9642: 9642: 9642: 9642: 9642: 9642: typedef __daddr_t daddr_t; 9642: typedef __caddr_t caddr_t; 9642: 9642: 9642: 9642: 9642: 9642: typedef __key_t key_t; 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/clock_t.h" 1 3 4 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef __clock_t clock_t; 9642: # 127 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/clockid_t.h" 1 3 4 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef __clockid_t clockid_t; 9642: # 129 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/time_t.h" 1 3 4 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef __time64_t time_t; 9642: # 130 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/timer_t.h" 1 3 4 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef __timer_t timer_t; 9642: # 131 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 9642: 9642: 9642: 9642: typedef __useconds_t useconds_t; 9642: 9642: 9642: 9642: typedef __suseconds_t suseconds_t; 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 145 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 9642: 9642: 9642: 9642: typedef unsigned long int ulong; 9642: typedef unsigned short int ushort; 9642: typedef unsigned int uint; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef __uint8_t u_int8_t; 9642: typedef __uint16_t u_int16_t; 9642: typedef __uint32_t u_int32_t; 9642: typedef __uint64_t u_int64_t; 9642: 9642: 9642: typedef int register_t __attribute__ ((__mode__ (__word__))); 9642: # 176 "/usr/include/arm-linux-gnueabihf/sys/types.h" 3 4 9642: # 1 "/usr/include/endian.h" 1 3 4 9642: # 24 "/usr/include/endian.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/endian.h" 1 3 4 9642: # 35 "/usr/include/arm-linux-gnueabihf/bits/endian.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/endianness.h" 1 3 4 9642: # 36 "/usr/include/arm-linux-gnueabihf/bits/endian.h" 2 3 4 9642: # 25 "/usr/include/endian.h" 2 3 4 9642: # 35 "/usr/include/endian.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/byteswap.h" 1 3 4 9642: # 33 "/usr/include/arm-linux-gnueabihf/bits/byteswap.h" 3 4 9642: static __inline __uint16_t 9642: __bswap_16 (__uint16_t __bsx) 9642: { 9642: 9642: return __builtin_bswap16 (__bsx); 9642: 9642: 9642: 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: static __inline __uint32_t 9642: __bswap_32 (__uint32_t __bsx) 9642: { 9642: 9642: return __builtin_bswap32 (__bsx); 9642: 9642: 9642: 9642: } 9642: # 69 "/usr/include/arm-linux-gnueabihf/bits/byteswap.h" 3 4 9642: __extension__ static __inline __uint64_t 9642: __bswap_64 (__uint64_t __bsx) 9642: { 9642: 9642: return __builtin_bswap64 (__bsx); 9642: 9642: 9642: 9642: } 9642: # 36 "/usr/include/endian.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/uintn-identity.h" 1 3 4 9642: # 32 "/usr/include/arm-linux-gnueabihf/bits/uintn-identity.h" 3 4 9642: static __inline __uint16_t 9642: __uint16_identity (__uint16_t __x) 9642: { 9642: return __x; 9642: } 9642: 9642: static __inline __uint32_t 9642: __uint32_identity (__uint32_t __x) 9642: { 9642: return __x; 9642: } 9642: 9642: static __inline __uint64_t 9642: __uint64_identity (__uint64_t __x) 9642: { 9642: return __x; 9642: } 9642: # 37 "/usr/include/endian.h" 2 3 4 9642: # 177 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/sys/select.h" 1 3 4 9642: # 30 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/select.h" 1 3 4 9642: # 31 "/usr/include/arm-linux-gnueabihf/sys/select.h" 2 3 4 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/sigset_t.h" 1 3 4 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/__sigset_t.h" 1 3 4 9642: 9642: 9642: 9642: 9642: typedef struct 9642: { 9642: unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))]; 9642: } __sigset_t; 9642: # 5 "/usr/include/arm-linux-gnueabihf/bits/types/sigset_t.h" 2 3 4 9642: 9642: 9642: typedef __sigset_t sigset_t; 9642: # 34 "/usr/include/arm-linux-gnueabihf/sys/select.h" 2 3 4 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_timeval.h" 1 3 4 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct timeval 9642: { 9642: 9642: __time64_t tv_sec; 9642: __suseconds64_t tv_usec; 9642: 9642: 9642: 9642: 9642: }; 9642: # 38 "/usr/include/arm-linux-gnueabihf/sys/select.h" 2 3 4 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_timespec.h" 1 3 4 9642: # 11 "/usr/include/arm-linux-gnueabihf/bits/types/struct_timespec.h" 3 4 9642: struct timespec 9642: { 9642: 9642: __time64_t tv_sec; 9642: # 27 "/usr/include/arm-linux-gnueabihf/bits/types/struct_timespec.h" 3 4 9642: long int tv_nsec; 9642: int: 32; 9642: 9642: 9642: }; 9642: # 40 "/usr/include/arm-linux-gnueabihf/sys/select.h" 2 3 4 9642: # 49 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 9642: typedef long int __fd_mask; 9642: # 59 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 9642: typedef struct 9642: { 9642: 9642: 9642: 9642: __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))]; 9642: 9642: 9642: 9642: 9642: 9642: } fd_set; 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef __fd_mask fd_mask; 9642: # 91 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 9642: extern "C" { 9642: # 108 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 9642: extern int select (int __nfds, fd_set *__restrict __readfds, fd_set *__restrict __writefds, fd_set *__restrict __exceptfds, struct timeval *__restrict __timeout) __asm__ ("" "__select64") 9642: 9642: 9642: 9642: 9642: ; 9642: # 134 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 9642: extern int pselect (int __nfds, fd_set *__restrict __readfds, fd_set *__restrict __writefds, fd_set *__restrict __exceptfds, const struct timespec *__restrict __timeout, const __sigset_t *__restrict __sigmask) __asm__ ("" "__pselect64") 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: # 150 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/select2.h" 1 3 4 9642: # 23 "/usr/include/arm-linux-gnueabihf/bits/select2.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/select-decl.h" 1 3 4 9642: # 27 "/usr/include/arm-linux-gnueabihf/bits/select-decl.h" 3 4 9642: extern long int __fdelt_chk (long int __d); 9642: extern long int __fdelt_warn (long int __d) 9642: __attribute__((__warning__ ("bit outside of fd_set selected"))); 9642: # 24 "/usr/include/arm-linux-gnueabihf/bits/select2.h" 2 3 4 9642: # 151 "/usr/include/arm-linux-gnueabihf/sys/select.h" 2 3 4 9642: 9642: 9642: } 9642: # 180 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 9642: 9642: 9642: 9642: 9642: 9642: typedef __blksize_t blksize_t; 9642: # 205 "/usr/include/arm-linux-gnueabihf/sys/types.h" 3 4 9642: typedef __blkcnt64_t blkcnt_t; 9642: 9642: 9642: 9642: typedef __fsblkcnt64_t fsblkcnt_t; 9642: 9642: 9642: 9642: typedef __fsfilcnt64_t fsfilcnt_t; 9642: 9642: 9642: 9642: 9642: 9642: typedef __blkcnt64_t blkcnt64_t; 9642: typedef __fsblkcnt64_t fsblkcnt64_t; 9642: typedef __fsfilcnt64_t fsfilcnt64_t; 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/pthreadtypes.h" 1 3 4 9642: # 23 "/usr/include/arm-linux-gnueabihf/bits/pthreadtypes.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 1 3 4 9642: # 44 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/pthreadtypes-arch.h" 1 3 4 9642: # 23 "/usr/include/arm-linux-gnueabihf/bits/pthreadtypes-arch.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 9642: # 24 "/usr/include/arm-linux-gnueabihf/bits/pthreadtypes-arch.h" 2 3 4 9642: # 45 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 2 3 4 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/atomic_wide_counter.h" 1 3 4 9642: # 25 "/usr/include/arm-linux-gnueabihf/bits/atomic_wide_counter.h" 3 4 9642: typedef union 9642: { 9642: __extension__ unsigned long long int __value64; 9642: struct 9642: { 9642: unsigned int __low; 9642: unsigned int __high; 9642: } __value32; 9642: } __atomic_wide_counter; 9642: # 47 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 2 3 4 9642: 9642: 9642: 9642: 9642: typedef struct __pthread_internal_list 9642: { 9642: struct __pthread_internal_list *__prev; 9642: struct __pthread_internal_list *__next; 9642: } __pthread_list_t; 9642: 9642: typedef struct __pthread_internal_slist 9642: { 9642: struct __pthread_internal_slist *__next; 9642: } __pthread_slist_t; 9642: # 76 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/struct_mutex.h" 1 3 4 9642: # 27 "/usr/include/arm-linux-gnueabihf/bits/struct_mutex.h" 3 4 9642: struct __pthread_mutex_s 9642: { 9642: int __lock ; 9642: unsigned int __count; 9642: int __owner; 9642: # 58 "/usr/include/arm-linux-gnueabihf/bits/struct_mutex.h" 3 4 9642: int __kind; 9642: 9642: unsigned int __nusers; 9642: 9642: 9642: 9642: 9642: 9642: 9642: __extension__ union 9642: { 9642: int __spins; 9642: __pthread_slist_t __list; 9642: }; 9642: 9642: 9642: }; 9642: # 77 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 2 3 4 9642: # 89 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/struct_rwlock.h" 1 3 4 9642: # 29 "/usr/include/arm-linux-gnueabihf/bits/struct_rwlock.h" 3 4 9642: struct __pthread_rwlock_arch_t 9642: { 9642: unsigned int __readers; 9642: unsigned int __writers; 9642: unsigned int __wrphase_futex; 9642: unsigned int __writers_futex; 9642: unsigned int __pad3; 9642: unsigned int __pad4; 9642: # 45 "/usr/include/arm-linux-gnueabihf/bits/struct_rwlock.h" 3 4 9642: unsigned char __flags; 9642: unsigned char __shared; 9642: unsigned char __pad1; 9642: unsigned char __pad2; 9642: 9642: int __cur_writer; 9642: }; 9642: # 90 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 2 3 4 9642: 9642: 9642: 9642: 9642: struct __pthread_cond_s 9642: { 9642: __atomic_wide_counter __wseq; 9642: __atomic_wide_counter __g1_start; 9642: unsigned int __g_refs[2] ; 9642: unsigned int __g_size[2]; 9642: unsigned int __g1_orig_size; 9642: unsigned int __wrefs; 9642: unsigned int __g_signals[2]; 9642: }; 9642: 9642: typedef unsigned int __tss_t; 9642: typedef unsigned long int __thrd_t; 9642: 9642: typedef struct 9642: { 9642: int __data ; 9642: } __once_flag; 9642: # 24 "/usr/include/arm-linux-gnueabihf/bits/pthreadtypes.h" 2 3 4 9642: 9642: 9642: 9642: typedef unsigned long int pthread_t; 9642: 9642: 9642: 9642: 9642: typedef union 9642: { 9642: char __size[4]; 9642: int __align; 9642: } pthread_mutexattr_t; 9642: 9642: 9642: 9642: 9642: typedef union 9642: { 9642: char __size[4]; 9642: int __align; 9642: } pthread_condattr_t; 9642: 9642: 9642: 9642: typedef unsigned int pthread_key_t; 9642: 9642: 9642: 9642: typedef int pthread_once_t; 9642: 9642: 9642: union pthread_attr_t 9642: { 9642: char __size[36]; 9642: long int __align; 9642: }; 9642: 9642: typedef union pthread_attr_t pthread_attr_t; 9642: 9642: 9642: 9642: 9642: typedef union 9642: { 9642: struct __pthread_mutex_s __data; 9642: char __size[24]; 9642: long int __align; 9642: } pthread_mutex_t; 9642: 9642: 9642: typedef union 9642: { 9642: struct __pthread_cond_s __data; 9642: char __size[48]; 9642: __extension__ long long int __align; 9642: } pthread_cond_t; 9642: 9642: 9642: 9642: 9642: 9642: typedef union 9642: { 9642: struct __pthread_rwlock_arch_t __data; 9642: char __size[32]; 9642: long int __align; 9642: } pthread_rwlock_t; 9642: 9642: typedef union 9642: { 9642: char __size[8]; 9642: long int __align; 9642: } pthread_rwlockattr_t; 9642: 9642: 9642: 9642: 9642: 9642: typedef volatile int pthread_spinlock_t; 9642: 9642: 9642: 9642: 9642: typedef union 9642: { 9642: char __size[20]; 9642: long int __align; 9642: } pthread_barrier_t; 9642: 9642: typedef union 9642: { 9642: char __size[4]; 9642: int __align; 9642: } pthread_barrierattr_t; 9642: # 228 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 9642: 9642: 9642: } 9642: # 515 "/usr/include/stdlib.h" 2 3 4 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern long int random (void) noexcept (true); 9642: 9642: 9642: extern void srandom (unsigned int __seed) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern char *initstate (unsigned int __seed, char *__statebuf, 9642: size_t __statelen) noexcept (true) __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: 9642: extern char *setstate (char *__statebuf) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct random_data 9642: { 9642: int32_t *fptr; 9642: int32_t *rptr; 9642: int32_t *state; 9642: int rand_type; 9642: int rand_deg; 9642: int rand_sep; 9642: int32_t *end_ptr; 9642: }; 9642: 9642: extern int random_r (struct random_data *__restrict __buf, 9642: int32_t *__restrict __result) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: extern int srandom_r (unsigned int __seed, struct random_data *__buf) 9642: noexcept (true) __attribute__ ((__nonnull__ (2))); 9642: 9642: extern int initstate_r (unsigned int __seed, char *__restrict __statebuf, 9642: size_t __statelen, 9642: struct random_data *__restrict __buf) 9642: noexcept (true) __attribute__ ((__nonnull__ (2, 4))); 9642: 9642: extern int setstate_r (char *__restrict __statebuf, 9642: struct random_data *__restrict __buf) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: 9642: 9642: extern int rand (void) noexcept (true); 9642: 9642: extern void srand (unsigned int __seed) noexcept (true); 9642: 9642: 9642: 9642: extern int rand_r (unsigned int *__seed) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern double drand48 (void) noexcept (true); 9642: extern double erand48 (unsigned short int __xsubi[3]) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern long int lrand48 (void) noexcept (true); 9642: extern long int nrand48 (unsigned short int __xsubi[3]) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern long int mrand48 (void) noexcept (true); 9642: extern long int jrand48 (unsigned short int __xsubi[3]) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern void srand48 (long int __seedval) noexcept (true); 9642: extern unsigned short int *seed48 (unsigned short int __seed16v[3]) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: extern void lcong48 (unsigned short int __param[7]) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: struct drand48_data 9642: { 9642: unsigned short int __x[3]; 9642: unsigned short int __old_x[3]; 9642: unsigned short int __c; 9642: unsigned short int __init; 9642: __extension__ unsigned long long int __a; 9642: 9642: }; 9642: 9642: 9642: extern int drand48_r (struct drand48_data *__restrict __buffer, 9642: double *__restrict __result) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: extern int erand48_r (unsigned short int __xsubi[3], 9642: struct drand48_data *__restrict __buffer, 9642: double *__restrict __result) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int lrand48_r (struct drand48_data *__restrict __buffer, 9642: long int *__restrict __result) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: extern int nrand48_r (unsigned short int __xsubi[3], 9642: struct drand48_data *__restrict __buffer, 9642: long int *__restrict __result) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int mrand48_r (struct drand48_data *__restrict __buffer, 9642: long int *__restrict __result) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: extern int jrand48_r (unsigned short int __xsubi[3], 9642: struct drand48_data *__restrict __buffer, 9642: long int *__restrict __result) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int srand48_r (long int __seedval, struct drand48_data *__buffer) 9642: noexcept (true) __attribute__ ((__nonnull__ (2))); 9642: 9642: extern int seed48_r (unsigned short int __seed16v[3], 9642: struct drand48_data *__buffer) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: extern int lcong48_r (unsigned short int __param[7], 9642: struct drand48_data *__buffer) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern __uint32_t arc4random (void) 9642: noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: extern void arc4random_buf (void *__buf, size_t __size) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern __uint32_t arc4random_uniform (__uint32_t __upper_bound) 9642: noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern void *malloc (size_t __size) noexcept (true) __attribute__ ((__malloc__)) 9642: __attribute__ ((__alloc_size__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: extern void *calloc (size_t __nmemb, size_t __size) 9642: noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (1, 2))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern void *realloc (void *__ptr, size_t __size) 9642: noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__alloc_size__ (2))); 9642: 9642: 9642: extern void free (void *__ptr) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size) 9642: noexcept (true) __attribute__ ((__warn_unused_result__)) 9642: __attribute__ ((__alloc_size__ (2, 3))) 9642: __attribute__ ((__malloc__ (__builtin_free, 1))); 9642: 9642: 9642: extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size) 9642: noexcept (true) __attribute__ ((__malloc__ (reallocarray, 1))); 9642: 9642: 9642: 9642: # 1 "/usr/include/alloca.h" 1 3 4 9642: # 24 "/usr/include/alloca.h" 3 4 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 25 "/usr/include/alloca.h" 2 3 4 9642: 9642: extern "C" { 9642: 9642: 9642: 9642: 9642: 9642: extern void *alloca (size_t __size) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 707 "/usr/include/stdlib.h" 2 3 4 9642: 9642: 9642: 9642: 9642: 9642: extern void *valloc (size_t __size) noexcept (true) __attribute__ ((__malloc__)) 9642: __attribute__ ((__alloc_size__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern void *aligned_alloc (size_t __alignment, size_t __size) 9642: noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__alloc_align__ (1))) 9642: __attribute__ ((__alloc_size__ (2))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: extern void abort (void) noexcept (true) __attribute__ ((__noreturn__)); 9642: 9642: 9642: 9642: extern int atexit (void (*__func) (void)) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: extern "C++" int at_quick_exit (void (*__func) (void)) 9642: noexcept (true) __asm ("at_quick_exit") __attribute__ ((__nonnull__ (1))); 9642: # 749 "/usr/include/stdlib.h" 3 4 9642: extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: extern void exit (int __status) noexcept (true) __attribute__ ((__noreturn__)); 9642: 9642: 9642: 9642: 9642: 9642: extern void quick_exit (int __status) noexcept (true) __attribute__ ((__noreturn__)); 9642: 9642: 9642: 9642: 9642: 9642: extern void _Exit (int __status) noexcept (true) __attribute__ ((__noreturn__)); 9642: 9642: 9642: 9642: 9642: extern char *getenv (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern char *secure_getenv (const char *__name) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int putenv (char *__string) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: extern int setenv (const char *__name, const char *__value, int __replace) 9642: noexcept (true) __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: extern int unsetenv (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int clearenv (void) noexcept (true); 9642: # 814 "/usr/include/stdlib.h" 3 4 9642: extern char *mktemp (char *__template) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: # 830 "/usr/include/stdlib.h" 3 4 9642: extern int mkstemp (char *__template) __asm__ ("" "mkstemp64") 9642: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: # 852 "/usr/include/stdlib.h" 3 4 9642: extern int mkstemps (char *__template, int __suffixlen) __asm__ ("" "mkstemps64") 9642: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: extern int mkstemps64 (char *__template, int __suffixlen) 9642: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: # 870 "/usr/include/stdlib.h" 3 4 9642: extern char *mkdtemp (char *__template) noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: # 884 "/usr/include/stdlib.h" 3 4 9642: extern int mkostemp (char *__template, int __flags) __asm__ ("" "mkostemp64") 9642: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: # 905 "/usr/include/stdlib.h" 3 4 9642: extern int mkostemps (char *__template, int __suffixlen, int __flags) __asm__ ("" "mkostemps64") 9642: 9642: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: extern int mkostemps64 (char *__template, int __suffixlen, int __flags) 9642: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: # 923 "/usr/include/stdlib.h" 3 4 9642: extern int system (const char *__command) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: extern char *canonicalize_file_name (const char *__name) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__malloc__)) 9642: __attribute__ ((__malloc__ (__builtin_free, 1))) __attribute__ ((__warn_unused_result__)); 9642: # 940 "/usr/include/stdlib.h" 3 4 9642: extern char *realpath (const char *__restrict __name, 9642: char *__restrict __resolved) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef int (*__compar_fn_t) (const void *, const void *); 9642: 9642: 9642: typedef __compar_fn_t comparison_fn_t; 9642: 9642: 9642: 9642: typedef int (*__compar_d_fn_t) (const void *, const void *, void *); 9642: 9642: 9642: 9642: 9642: extern void *bsearch (const void *__key, const void *__base, 9642: size_t __nmemb, size_t __size, __compar_fn_t __compar) 9642: __attribute__ ((__nonnull__ (1, 2, 5))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdlib-bsearch.h" 1 3 4 9642: # 19 "/usr/include/arm-linux-gnueabihf/bits/stdlib-bsearch.h" 3 4 9642: extern __inline __attribute__ ((__gnu_inline__)) void * 9642: bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size, 9642: __compar_fn_t __compar) 9642: { 9642: size_t __l, __u, __idx; 9642: const void *__p; 9642: int __comparison; 9642: 9642: __l = 0; 9642: __u = __nmemb; 9642: while (__l < __u) 9642: { 9642: __idx = (__l + __u) / 2; 9642: __p = (const void *) (((const char *) __base) + (__idx * __size)); 9642: __comparison = (*__compar) (__key, __p); 9642: if (__comparison < 0) 9642: __u = __idx; 9642: else if (__comparison > 0) 9642: __l = __idx + 1; 9642: else 9642: { 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wcast-qual" 9642: 9642: return (void *) __p; 9642: 9642: #pragma GCC diagnostic pop 9642: 9642: } 9642: } 9642: 9642: return __null; 9642: } 9642: # 966 "/usr/include/stdlib.h" 2 3 4 9642: 9642: 9642: 9642: 9642: extern void qsort (void *__base, size_t __nmemb, size_t __size, 9642: __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4))); 9642: 9642: extern void qsort_r (void *__base, size_t __nmemb, size_t __size, 9642: __compar_d_fn_t __compar, void *__arg) 9642: __attribute__ ((__nonnull__ (1, 4))); 9642: 9642: 9642: 9642: 9642: extern int abs (int __x) noexcept (true) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__)); 9642: extern long int labs (long int __x) noexcept (true) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: __extension__ extern long long int llabs (long long int __x) 9642: noexcept (true) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern div_t div (int __numer, int __denom) 9642: noexcept (true) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__)); 9642: extern ldiv_t ldiv (long int __numer, long int __denom) 9642: noexcept (true) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: __extension__ extern lldiv_t lldiv (long long int __numer, 9642: long long int __denom) 9642: noexcept (true) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__)); 9642: # 1012 "/usr/include/stdlib.h" 3 4 9642: extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt, 9642: int *__restrict __sign) noexcept (true) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt, 9642: int *__restrict __sign) noexcept (true) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern char *gcvt (double __value, int __ndigit, char *__buf) 9642: noexcept (true) __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern char *qecvt (long double __value, int __ndigit, 9642: int *__restrict __decpt, int *__restrict __sign) 9642: noexcept (true) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__)); 9642: extern char *qfcvt (long double __value, int __ndigit, 9642: int *__restrict __decpt, int *__restrict __sign) 9642: noexcept (true) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__)); 9642: extern char *qgcvt (long double __value, int __ndigit, char *__buf) 9642: noexcept (true) __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt, 9642: int *__restrict __sign, char *__restrict __buf, 9642: size_t __len) noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5))); 9642: extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt, 9642: int *__restrict __sign, char *__restrict __buf, 9642: size_t __len) noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5))); 9642: 9642: extern int qecvt_r (long double __value, int __ndigit, 9642: int *__restrict __decpt, int *__restrict __sign, 9642: char *__restrict __buf, size_t __len) 9642: noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5))); 9642: extern int qfcvt_r (long double __value, int __ndigit, 9642: int *__restrict __decpt, int *__restrict __sign, 9642: char *__restrict __buf, size_t __len) 9642: noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5))); 9642: 9642: 9642: 9642: 9642: 9642: extern int mblen (const char *__s, size_t __n) noexcept (true); 9642: 9642: 9642: extern int mbtowc (wchar_t *__restrict __pwc, 9642: const char *__restrict __s, size_t __n) noexcept (true); 9642: 9642: 9642: extern int wctomb (char *__s, wchar_t __wchar) noexcept (true); 9642: 9642: 9642: 9642: extern size_t mbstowcs (wchar_t *__restrict __pwcs, 9642: const char *__restrict __s, size_t __n) noexcept (true) 9642: __attribute__ ((__access__ (__read_only__, 2))); 9642: 9642: extern size_t wcstombs (char *__restrict __s, 9642: const wchar_t *__restrict __pwcs, size_t __n) 9642: noexcept (true) 9642: __attribute__ ((__access__ (__write_only__, 1, 3))) 9642: __attribute__ ((__access__ (__read_only__, 2))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int rpmatch (const char *__response) noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: # 1099 "/usr/include/stdlib.h" 3 4 9642: extern int getsubopt (char **__restrict __optionp, 9642: char *const *__restrict __tokens, 9642: char **__restrict __valuep) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2, 3))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int posix_openpt (int __oflag) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int grantpt (int __fd) noexcept (true); 9642: 9642: 9642: 9642: extern int unlockpt (int __fd) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern char *ptsname (int __fd) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int ptsname_r (int __fd, char *__buf, size_t __buflen) 9642: noexcept (true) __attribute__ ((__nonnull__ (2))) __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: 9642: 9642: extern int getpt (void); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int getloadavg (double __loadavg[], int __nelem) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: # 1155 "/usr/include/stdlib.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdlib-float.h" 1 3 4 9642: # 24 "/usr/include/arm-linux-gnueabihf/bits/stdlib-float.h" 3 4 9642: extern __inline __attribute__ ((__gnu_inline__)) double 9642: __attribute__ ((__leaf__)) atof (const char *__nptr) noexcept (true) 9642: { 9642: return strtod (__nptr, (char **) __null); 9642: } 9642: # 1156 "/usr/include/stdlib.h" 2 3 4 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdlib.h" 1 3 4 9642: # 23 "/usr/include/arm-linux-gnueabihf/bits/stdlib.h" 3 4 9642: extern char *__realpath_chk (const char *__restrict __name, 9642: char *__restrict __resolved, 9642: size_t __resolvedlen) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: extern char *__realpath_alias (const char *__restrict __name, char *__restrict __resolved) noexcept (true) __asm__ ("" "realpath") 9642: 9642: __attribute__ ((__warn_unused_result__)); 9642: extern char *__realpath_chk_warn (const char *__restrict __name, char *__restrict __resolved, size_t __resolvedlen) noexcept (true) __asm__ ("" "__realpath_chk") 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) 9642: __attribute__((__warning__ ("second argument of realpath must be either NULL or at " "least PATH_MAX bytes long buffer"))) 9642: ; 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char * 9642: __attribute__ ((__leaf__)) realpath (const char *__restrict __name, char *__restrict __resolved) noexcept (true) 9642: { 9642: size_t sz = __builtin_object_size (__resolved, 2 > 1); 9642: 9642: if (sz == (size_t) -1) 9642: return __realpath_alias (__name, __resolved); 9642: 9642: 9642: 9642: 9642: 9642: return __realpath_chk (__name, __resolved, sz); 9642: } 9642: 9642: 9642: extern int __ptsname_r_chk (int __fd, char *__buf, size_t __buflen, 9642: size_t __nreal) noexcept (true) __attribute__ ((__nonnull__ (2))) 9642: __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: extern int __ptsname_r_alias (int __fd, char *__buf, size_t __buflen) noexcept (true) __asm__ ("" "ptsname_r") 9642: 9642: __attribute__ ((__nonnull__ (2))) __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: extern int __ptsname_r_chk_warn (int __fd, char *__buf, size_t __buflen, size_t __nreal) noexcept (true) __asm__ ("" "__ptsname_r_chk") 9642: 9642: 9642: __attribute__ ((__nonnull__ (2))) __attribute__((__warning__ ("ptsname_r called with buflen bigger than " "size of buf"))) 9642: ; 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: __attribute__ ((__leaf__)) ptsname_r (int __fd, char *__buf, size_t __buflen) noexcept (true) 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__buf, 2 > 1)) && (__builtin_object_size (__buf, 2 > 1)) == (unsigned int) -1) || (((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char)))))) ? __ptsname_r_alias (__fd, __buf, __buflen) : ((((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) ? __ptsname_r_chk_warn (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1)) : __ptsname_r_chk (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1)))) 9642: 9642: ; 9642: } 9642: 9642: 9642: extern int __wctomb_chk (char *__s, wchar_t __wchar, size_t __buflen) 9642: noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: extern int __wctomb_alias (char *__s, wchar_t __wchar) noexcept (true) __asm__ ("" "wctomb") 9642: __attribute__ ((__warn_unused_result__)); 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) int 9642: __attribute__ ((__leaf__)) wctomb (char *__s, wchar_t __wchar) noexcept (true) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: if (__builtin_object_size (__s, 2 > 1) != (size_t) -1 9642: && 16 > __builtin_object_size (__s, 2 > 1)) 9642: return __wctomb_chk (__s, __wchar, __builtin_object_size (__s, 2 > 1)); 9642: return __wctomb_alias (__s, __wchar); 9642: } 9642: 9642: 9642: extern size_t __mbstowcs_chk (wchar_t *__restrict __dst, 9642: const char *__restrict __src, 9642: size_t __len, size_t __dstlen) noexcept (true) 9642: __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__access__ (__read_only__, 2))); 9642: extern size_t __mbstowcs_nulldst (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len) noexcept (true) __asm__ ("" "mbstowcs") 9642: 9642: 9642: 9642: __attribute__ ((__access__ (__read_only__, 2))); 9642: extern size_t __mbstowcs_alias (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len) noexcept (true) __asm__ ("" "mbstowcs") 9642: 9642: 9642: 9642: __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__access__ (__read_only__, 2))); 9642: extern size_t __mbstowcs_chk_warn (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len, size_t __dstlen) noexcept (true) __asm__ ("" "__mbstowcs_chk") 9642: 9642: 9642: 9642: __attribute__((__warning__ ("mbstowcs called with dst buffer smaller than len " "* sizeof (wchar_t)"))) 9642: ; 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 9642: __attribute__ ((__leaf__)) mbstowcs (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len) noexcept (true) 9642: 9642: { 9642: if (__builtin_constant_p (__dst == __null) && __dst == __null) 9642: return __mbstowcs_nulldst (__dst, __src, __len); 9642: else 9642: return (((__builtin_constant_p (__builtin_object_size (__dst, 2 > 1)) && (__builtin_object_size (__dst, 2 > 1)) == (unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (wchar_t))))) && (((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (wchar_t)))))) ? __mbstowcs_alias (__dst, __src, __len) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))) && !(((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))) ? __mbstowcs_chk_warn (__dst, __src, __len, (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t))) : __mbstowcs_chk (__dst, __src, __len, (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t))))) 9642: ; 9642: } 9642: 9642: extern size_t __wcstombs_chk (char *__restrict __dst, 9642: const wchar_t *__restrict __src, 9642: size_t __len, size_t __dstlen) noexcept (true) 9642: __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__access__ (__read_only__, 2))); 9642: extern size_t __wcstombs_alias (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len) noexcept (true) __asm__ ("" "wcstombs") 9642: 9642: 9642: 9642: __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__access__ (__read_only__, 2))); 9642: extern size_t __wcstombs_chk_warn (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len, size_t __dstlen) noexcept (true) __asm__ ("" "__wcstombs_chk") 9642: 9642: 9642: 9642: __attribute__((__warning__ ("wcstombs called with dst buffer smaller than len"))); 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 9642: __attribute__ ((__leaf__)) wcstombs (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len) noexcept (true) 9642: 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__dst, 2 > 1)) && (__builtin_object_size (__dst, 2 > 1)) == (unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (char)))))) ? __wcstombs_alias (__dst, __src, __len) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (char)))) ? __wcstombs_chk_warn (__dst, __src, __len, __builtin_object_size (__dst, 2 > 1)) : __wcstombs_chk (__dst, __src, __len, __builtin_object_size (__dst, 2 > 1)))) 9642: 9642: ; 9642: } 9642: # 1160 "/usr/include/stdlib.h" 2 3 4 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/floatn.h" 1 3 4 9642: # 1163 "/usr/include/stdlib.h" 2 3 4 9642: 9642: 9642: 9642: 9642: } 9642: # 80 "/usr/include/c++/13/cstdlib" 2 3 9642: 9642: # 1 "/usr/include/c++/13/bits/std_abs.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/std_abs.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/std_abs.h" 3 9642: # 46 "/usr/include/c++/13/bits/std_abs.h" 3 9642: extern "C++" 9642: { 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: using ::abs; 9642: 9642: 9642: inline long 9642: abs(long __i) { return __builtin_labs(__i); } 9642: 9642: 9642: 9642: inline long long 9642: abs(long long __x) { return __builtin_llabs (__x); } 9642: # 70 "/usr/include/c++/13/bits/std_abs.h" 3 9642: inline constexpr double 9642: abs(double __x) 9642: { return __builtin_fabs(__x); } 9642: 9642: inline constexpr float 9642: abs(float __x) 9642: { return __builtin_fabsf(__x); } 9642: 9642: inline constexpr long double 9642: abs(long double __x) 9642: { return __builtin_fabsl(__x); } 9642: # 150 "/usr/include/c++/13/bits/std_abs.h" 3 9642: 9642: } 9642: } 9642: # 82 "/usr/include/c++/13/cstdlib" 2 3 9642: # 125 "/usr/include/c++/13/cstdlib" 3 9642: extern "C++" 9642: { 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: using ::div_t; 9642: using ::ldiv_t; 9642: 9642: using ::abort; 9642: 9642: using ::aligned_alloc; 9642: 9642: using ::atexit; 9642: 9642: 9642: using ::at_quick_exit; 9642: 9642: 9642: using ::atof; 9642: using ::atoi; 9642: using ::atol; 9642: using ::bsearch; 9642: using ::calloc; 9642: using ::div; 9642: using ::exit; 9642: using ::free; 9642: using ::getenv; 9642: using ::labs; 9642: using ::ldiv; 9642: using ::malloc; 9642: 9642: using ::mblen; 9642: using ::mbstowcs; 9642: using ::mbtowc; 9642: 9642: using ::qsort; 9642: 9642: 9642: using ::quick_exit; 9642: 9642: 9642: using ::rand; 9642: using ::realloc; 9642: using ::srand; 9642: using ::strtod; 9642: using ::strtol; 9642: using ::strtoul; 9642: using ::system; 9642: 9642: using ::wcstombs; 9642: using ::wctomb; 9642: 9642: 9642: 9642: inline ldiv_t 9642: div(long __i, long __j) noexcept { return ldiv(__i, __j); } 9642: 9642: 9642: 9642: 9642: } 9642: # 199 "/usr/include/c++/13/cstdlib" 3 9642: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: using ::lldiv_t; 9642: 9642: 9642: 9642: 9642: 9642: using ::_Exit; 9642: 9642: 9642: 9642: using ::llabs; 9642: 9642: inline lldiv_t 9642: div(long long __n, long long __d) 9642: { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; } 9642: 9642: using ::lldiv; 9642: # 231 "/usr/include/c++/13/cstdlib" 3 9642: using ::atoll; 9642: using ::strtoll; 9642: using ::strtoull; 9642: 9642: using ::strtof; 9642: using ::strtold; 9642: 9642: 9642: } 9642: 9642: namespace std 9642: { 9642: 9642: using ::__gnu_cxx::lldiv_t; 9642: 9642: using ::__gnu_cxx::_Exit; 9642: 9642: using ::__gnu_cxx::llabs; 9642: using ::__gnu_cxx::div; 9642: using ::__gnu_cxx::lldiv; 9642: 9642: using ::__gnu_cxx::atoll; 9642: using ::__gnu_cxx::strtof; 9642: using ::__gnu_cxx::strtoll; 9642: using ::__gnu_cxx::strtoull; 9642: using ::__gnu_cxx::strtold; 9642: } 9642: 9642: 9642: 9642: } 9642: # 72 "/usr/include/c++/13/bits/stl_algo.h" 2 3 9642: 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: template 9642: 9642: void 9642: __move_median_to_first(_Iterator __result,_Iterator __a, _Iterator __b, 9642: _Iterator __c, _Compare __comp) 9642: { 9642: if (__comp(__a, __b)) 9642: { 9642: if (__comp(__b, __c)) 9642: std::iter_swap(__result, __b); 9642: else if (__comp(__a, __c)) 9642: std::iter_swap(__result, __c); 9642: else 9642: std::iter_swap(__result, __a); 9642: } 9642: else if (__comp(__a, __c)) 9642: std::iter_swap(__result, __a); 9642: else if (__comp(__b, __c)) 9642: std::iter_swap(__result, __c); 9642: else 9642: std::iter_swap(__result, __b); 9642: } 9642: 9642: 9642: template 9642: 9642: inline _InputIterator 9642: __find_if_not(_InputIterator __first, _InputIterator __last, 9642: _Predicate __pred) 9642: { 9642: return std::__find_if(__first, __last, 9642: __gnu_cxx::__ops::__negate(__pred), 9642: std::__iterator_category(__first)); 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: 9642: _InputIterator 9642: __find_if_not_n(_InputIterator __first, _Distance& __len, _Predicate __pred) 9642: { 9642: for (; __len; --__len, (void) ++__first) 9642: if (!__pred(__first)) 9642: break; 9642: return __first; 9642: } 9642: # 144 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: _ForwardIterator1 9642: __search(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _ForwardIterator2 __last2, 9642: _BinaryPredicate __predicate) 9642: { 9642: 9642: if (__first1 == __last1 || __first2 == __last2) 9642: return __first1; 9642: 9642: 9642: _ForwardIterator2 __p1(__first2); 9642: if (++__p1 == __last2) 9642: return std::__find_if(__first1, __last1, 9642: __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2)); 9642: 9642: 9642: _ForwardIterator1 __current = __first1; 9642: 9642: for (;;) 9642: { 9642: __first1 = 9642: std::__find_if(__first1, __last1, 9642: __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2)); 9642: 9642: if (__first1 == __last1) 9642: return __last1; 9642: 9642: _ForwardIterator2 __p = __p1; 9642: __current = __first1; 9642: if (++__current == __last1) 9642: return __last1; 9642: 9642: while (__predicate(__current, __p)) 9642: { 9642: if (++__p == __last2) 9642: return __first1; 9642: if (++__current == __last1) 9642: return __last1; 9642: } 9642: ++__first1; 9642: } 9642: return __first1; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: _ForwardIterator 9642: __search_n_aux(_ForwardIterator __first, _ForwardIterator __last, 9642: _Integer __count, _UnaryPredicate __unary_pred, 9642: std::forward_iterator_tag) 9642: { 9642: __first = std::__find_if(__first, __last, __unary_pred); 9642: while (__first != __last) 9642: { 9642: typename iterator_traits<_ForwardIterator>::difference_type 9642: __n = __count; 9642: _ForwardIterator __i = __first; 9642: ++__i; 9642: while (__i != __last && __n != 1 && __unary_pred(__i)) 9642: { 9642: ++__i; 9642: --__n; 9642: } 9642: if (__n == 1) 9642: return __first; 9642: if (__i == __last) 9642: return __last; 9642: __first = std::__find_if(++__i, __last, __unary_pred); 9642: } 9642: return __last; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: _RandomAccessIter 9642: __search_n_aux(_RandomAccessIter __first, _RandomAccessIter __last, 9642: _Integer __count, _UnaryPredicate __unary_pred, 9642: std::random_access_iterator_tag) 9642: { 9642: typedef typename std::iterator_traits<_RandomAccessIter>::difference_type 9642: _DistanceType; 9642: 9642: _DistanceType __tailSize = __last - __first; 9642: _DistanceType __remainder = __count; 9642: 9642: while (__remainder <= __tailSize) 9642: { 9642: __first += __remainder; 9642: __tailSize -= __remainder; 9642: 9642: 9642: _RandomAccessIter __backTrack = __first; 9642: while (__unary_pred(--__backTrack)) 9642: { 9642: if (--__remainder == 0) 9642: return (__first - __count); 9642: } 9642: __remainder = __count + 1 - (__first - __backTrack); 9642: } 9642: return __last; 9642: } 9642: 9642: template 9642: 9642: _ForwardIterator 9642: __search_n(_ForwardIterator __first, _ForwardIterator __last, 9642: _Integer __count, 9642: _UnaryPredicate __unary_pred) 9642: { 9642: if (__count <= 0) 9642: return __first; 9642: 9642: if (__count == 1) 9642: return std::__find_if(__first, __last, __unary_pred); 9642: 9642: return std::__search_n_aux(__first, __last, __count, __unary_pred, 9642: std::__iterator_category(__first)); 9642: } 9642: 9642: 9642: template 9642: 9642: _ForwardIterator1 9642: __find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _ForwardIterator2 __last2, 9642: forward_iterator_tag, forward_iterator_tag, 9642: _BinaryPredicate __comp) 9642: { 9642: if (__first2 == __last2) 9642: return __last1; 9642: 9642: _ForwardIterator1 __result = __last1; 9642: while (1) 9642: { 9642: _ForwardIterator1 __new_result 9642: = std::__search(__first1, __last1, __first2, __last2, __comp); 9642: if (__new_result == __last1) 9642: return __result; 9642: else 9642: { 9642: __result = __new_result; 9642: __first1 = __new_result; 9642: ++__first1; 9642: } 9642: } 9642: } 9642: 9642: 9642: template 9642: 9642: _BidirectionalIterator1 9642: __find_end(_BidirectionalIterator1 __first1, 9642: _BidirectionalIterator1 __last1, 9642: _BidirectionalIterator2 __first2, 9642: _BidirectionalIterator2 __last2, 9642: bidirectional_iterator_tag, bidirectional_iterator_tag, 9642: _BinaryPredicate __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef reverse_iterator<_BidirectionalIterator1> _RevIterator1; 9642: typedef reverse_iterator<_BidirectionalIterator2> _RevIterator2; 9642: 9642: _RevIterator1 __rlast1(__first1); 9642: _RevIterator2 __rlast2(__first2); 9642: _RevIterator1 __rresult = std::__search(_RevIterator1(__last1), __rlast1, 9642: _RevIterator2(__last2), __rlast2, 9642: __comp); 9642: 9642: if (__rresult == __rlast1) 9642: return __last1; 9642: else 9642: { 9642: _BidirectionalIterator1 __result = __rresult.base(); 9642: std::advance(__result, -std::distance(__first2, __last2)); 9642: return __result; 9642: } 9642: } 9642: # 370 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator1 9642: find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _ForwardIterator2 __last2) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__find_end(__first1, __last1, __first2, __last2, 9642: std::__iterator_category(__first1), 9642: std::__iterator_category(__first2), 9642: __gnu_cxx::__ops::__iter_equal_to_iter()); 9642: } 9642: # 419 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator1 9642: find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _ForwardIterator2 __last2, 9642: _BinaryPredicate __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__find_end(__first1, __last1, __first2, __last2, 9642: std::__iterator_category(__first1), 9642: std::__iterator_category(__first2), 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: # 455 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline bool 9642: all_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) 9642: { return __last == std::find_if_not(__first, __last, __pred); } 9642: # 473 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline bool 9642: none_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) 9642: { return __last == std::find_if(__first, __last, __pred); } 9642: # 492 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline bool 9642: any_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) 9642: { return !std::none_of(__first, __last, __pred); } 9642: # 508 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _InputIterator 9642: find_if_not(_InputIterator __first, _InputIterator __last, 9642: _Predicate __pred) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: return std::__find_if_not(__first, __last, 9642: __gnu_cxx::__ops::__pred_iter(__pred)); 9642: } 9642: # 533 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline bool 9642: is_partitioned(_InputIterator __first, _InputIterator __last, 9642: _Predicate __pred) 9642: { 9642: __first = std::find_if_not(__first, __last, __pred); 9642: if (__first == __last) 9642: return true; 9642: ++__first; 9642: return std::none_of(__first, __last, __pred); 9642: } 9642: # 555 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: _ForwardIterator 9642: partition_point(_ForwardIterator __first, _ForwardIterator __last, 9642: _Predicate __pred) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: typedef typename iterator_traits<_ForwardIterator>::difference_type 9642: _DistanceType; 9642: 9642: _DistanceType __len = std::distance(__first, __last); 9642: 9642: while (__len > 0) 9642: { 9642: _DistanceType __half = __len >> 1; 9642: _ForwardIterator __middle = __first; 9642: std::advance(__middle, __half); 9642: if (__pred(*__middle)) 9642: { 9642: __first = __middle; 9642: ++__first; 9642: __len = __len - __half - 1; 9642: } 9642: else 9642: __len = __half; 9642: } 9642: return __first; 9642: } 9642: 9642: 9642: template 9642: 9642: _OutputIterator 9642: __remove_copy_if(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, _Predicate __pred) 9642: { 9642: for (; __first != __last; ++__first) 9642: if (!__pred(__first)) 9642: { 9642: *__result = *__first; 9642: ++__result; 9642: } 9642: return __result; 9642: } 9642: # 622 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _OutputIterator 9642: remove_copy(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, const _Tp& __value) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__remove_copy_if(__first, __last, __result, 9642: __gnu_cxx::__ops::__iter_equals_val(__value)); 9642: } 9642: # 655 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _OutputIterator 9642: remove_copy_if(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, _Predicate __pred) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__remove_copy_if(__first, __last, __result, 9642: __gnu_cxx::__ops::__pred_iter(__pred)); 9642: } 9642: # 690 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: _OutputIterator 9642: copy_if(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, _Predicate __pred) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: for (; __first != __last; ++__first) 9642: if (__pred(*__first)) 9642: { 9642: *__result = *__first; 9642: ++__result; 9642: } 9642: return __result; 9642: } 9642: 9642: template 9642: 9642: _OutputIterator 9642: __copy_n(_InputIterator __first, _Size __n, 9642: _OutputIterator __result, input_iterator_tag) 9642: { 9642: return std::__niter_wrap(__result, 9642: __copy_n_a(__first, __n, 9642: std::__niter_base(__result), true)); 9642: } 9642: 9642: template 9642: 9642: inline _OutputIterator 9642: __copy_n(_RandomAccessIterator __first, _Size __n, 9642: _OutputIterator __result, random_access_iterator_tag) 9642: { return std::copy(__first, __first + __n, __result); } 9642: # 746 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _OutputIterator 9642: copy_n(_InputIterator __first, _Size __n, _OutputIterator __result) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: const auto __n2 = std::__size_to_integer(__n); 9642: if (__n2 <= 0) 9642: return __result; 9642: 9642: ; 9642: ; 9642: 9642: return std::__copy_n(__first, __n2, __result, 9642: std::__iterator_category(__first)); 9642: } 9642: # 782 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: pair<_OutputIterator1, _OutputIterator2> 9642: partition_copy(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator1 __out_true, _OutputIterator2 __out_false, 9642: _Predicate __pred) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: for (; __first != __last; ++__first) 9642: if (__pred(*__first)) 9642: { 9642: *__out_true = *__first; 9642: ++__out_true; 9642: } 9642: else 9642: { 9642: *__out_false = *__first; 9642: ++__out_false; 9642: } 9642: 9642: return pair<_OutputIterator1, _OutputIterator2>(__out_true, __out_false); 9642: } 9642: # 833 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator 9642: remove(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __value) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__remove_if(__first, __last, 9642: __gnu_cxx::__ops::__iter_equals_val(__value)); 9642: } 9642: # 867 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator 9642: remove_if(_ForwardIterator __first, _ForwardIterator __last, 9642: _Predicate __pred) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__remove_if(__first, __last, 9642: __gnu_cxx::__ops::__pred_iter(__pred)); 9642: } 9642: 9642: template 9642: 9642: _ForwardIterator 9642: __adjacent_find(_ForwardIterator __first, _ForwardIterator __last, 9642: _BinaryPredicate __binary_pred) 9642: { 9642: if (__first == __last) 9642: return __last; 9642: _ForwardIterator __next = __first; 9642: while (++__next != __last) 9642: { 9642: if (__binary_pred(__first, __next)) 9642: return __first; 9642: __first = __next; 9642: } 9642: return __last; 9642: } 9642: 9642: template 9642: 9642: _ForwardIterator 9642: __unique(_ForwardIterator __first, _ForwardIterator __last, 9642: _BinaryPredicate __binary_pred) 9642: { 9642: 9642: __first = std::__adjacent_find(__first, __last, __binary_pred); 9642: if (__first == __last) 9642: return __last; 9642: 9642: 9642: _ForwardIterator __dest = __first; 9642: ++__first; 9642: while (++__first != __last) 9642: if (!__binary_pred(__dest, __first)) 9642: *++__dest = std::move(*__first); 9642: return ++__dest; 9642: } 9642: # 936 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator 9642: unique(_ForwardIterator __first, _ForwardIterator __last) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__unique(__first, __last, 9642: __gnu_cxx::__ops::__iter_equal_to_iter()); 9642: } 9642: # 967 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator 9642: unique(_ForwardIterator __first, _ForwardIterator __last, 9642: _BinaryPredicate __binary_pred) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__unique(__first, __last, 9642: __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: _OutputIterator 9642: __unique_copy(_ForwardIterator __first, _ForwardIterator __last, 9642: _OutputIterator __result, _BinaryPredicate __binary_pred, 9642: forward_iterator_tag, output_iterator_tag) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: _ForwardIterator __next = __first; 9642: *__result = *__first; 9642: while (++__next != __last) 9642: if (!__binary_pred(__first, __next)) 9642: { 9642: __first = __next; 9642: *++__result = *__first; 9642: } 9642: return ++__result; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: _OutputIterator 9642: __unique_copy(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, _BinaryPredicate __binary_pred, 9642: input_iterator_tag, output_iterator_tag) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: typename iterator_traits<_InputIterator>::value_type __value = *__first; 9642: __decltype(__gnu_cxx::__ops::__iter_comp_val(__binary_pred)) 9642: __rebound_pred 9642: = __gnu_cxx::__ops::__iter_comp_val(__binary_pred); 9642: *__result = __value; 9642: while (++__first != __last) 9642: if (!__rebound_pred(__first, __value)) 9642: { 9642: __value = *__first; 9642: *++__result = __value; 9642: } 9642: return ++__result; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: _ForwardIterator 9642: __unique_copy(_InputIterator __first, _InputIterator __last, 9642: _ForwardIterator __result, _BinaryPredicate __binary_pred, 9642: input_iterator_tag, forward_iterator_tag) 9642: { 9642: 9642: 9642: 9642: 9642: *__result = *__first; 9642: while (++__first != __last) 9642: if (!__binary_pred(__result, __first)) 9642: *++__result = *__first; 9642: return ++__result; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: void 9642: __reverse(_BidirectionalIterator __first, _BidirectionalIterator __last, 9642: bidirectional_iterator_tag) 9642: { 9642: while (true) 9642: if (__first == __last || __first == --__last) 9642: return; 9642: else 9642: { 9642: std::iter_swap(__first, __last); 9642: ++__first; 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: void 9642: __reverse(_RandomAccessIterator __first, _RandomAccessIterator __last, 9642: random_access_iterator_tag) 9642: { 9642: if (__first == __last) 9642: return; 9642: --__last; 9642: while (__first < __last) 9642: { 9642: std::iter_swap(__first, __last); 9642: ++__first; 9642: --__last; 9642: } 9642: } 9642: # 1128 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline void 9642: reverse(_BidirectionalIterator __first, _BidirectionalIterator __last) 9642: { 9642: 9642: 9642: 9642: ; 9642: std::__reverse(__first, __last, std::__iterator_category(__first)); 9642: } 9642: # 1156 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: _OutputIterator 9642: reverse_copy(_BidirectionalIterator __first, _BidirectionalIterator __last, 9642: _OutputIterator __result) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: while (__first != __last) 9642: { 9642: --__last; 9642: *__result = *__last; 9642: ++__result; 9642: } 9642: return __result; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: _EuclideanRingElement 9642: __gcd(_EuclideanRingElement __m, _EuclideanRingElement __n) 9642: { 9642: while (__n != 0) 9642: { 9642: _EuclideanRingElement __t = __m % __n; 9642: __m = __n; 9642: __n = __t; 9642: } 9642: return __m; 9642: } 9642: 9642: inline namespace _V2 { 9642: 9642: 9642: template 9642: 9642: _ForwardIterator 9642: __rotate(_ForwardIterator __first, 9642: _ForwardIterator __middle, 9642: _ForwardIterator __last, 9642: forward_iterator_tag) 9642: { 9642: if (__first == __middle) 9642: return __last; 9642: else if (__last == __middle) 9642: return __first; 9642: 9642: _ForwardIterator __first2 = __middle; 9642: do 9642: { 9642: std::iter_swap(__first, __first2); 9642: ++__first; 9642: ++__first2; 9642: if (__first == __middle) 9642: __middle = __first2; 9642: } 9642: while (__first2 != __last); 9642: 9642: _ForwardIterator __ret = __first; 9642: 9642: __first2 = __middle; 9642: 9642: while (__first2 != __last) 9642: { 9642: std::iter_swap(__first, __first2); 9642: ++__first; 9642: ++__first2; 9642: if (__first == __middle) 9642: __middle = __first2; 9642: else if (__first2 == __last) 9642: __first2 = __middle; 9642: } 9642: return __ret; 9642: } 9642: 9642: 9642: template 9642: 9642: _BidirectionalIterator 9642: __rotate(_BidirectionalIterator __first, 9642: _BidirectionalIterator __middle, 9642: _BidirectionalIterator __last, 9642: bidirectional_iterator_tag) 9642: { 9642: 9642: 9642: 9642: 9642: if (__first == __middle) 9642: return __last; 9642: else if (__last == __middle) 9642: return __first; 9642: 9642: std::__reverse(__first, __middle, bidirectional_iterator_tag()); 9642: std::__reverse(__middle, __last, bidirectional_iterator_tag()); 9642: 9642: while (__first != __middle && __middle != __last) 9642: { 9642: std::iter_swap(__first, --__last); 9642: ++__first; 9642: } 9642: 9642: if (__first == __middle) 9642: { 9642: std::__reverse(__middle, __last, bidirectional_iterator_tag()); 9642: return __last; 9642: } 9642: else 9642: { 9642: std::__reverse(__first, __middle, bidirectional_iterator_tag()); 9642: return __first; 9642: } 9642: } 9642: 9642: 9642: template 9642: 9642: _RandomAccessIterator 9642: __rotate(_RandomAccessIterator __first, 9642: _RandomAccessIterator __middle, 9642: _RandomAccessIterator __last, 9642: random_access_iterator_tag) 9642: { 9642: 9642: 9642: 9642: 9642: if (__first == __middle) 9642: return __last; 9642: else if (__last == __middle) 9642: return __first; 9642: 9642: typedef typename iterator_traits<_RandomAccessIterator>::difference_type 9642: _Distance; 9642: typedef typename iterator_traits<_RandomAccessIterator>::value_type 9642: _ValueType; 9642: 9642: _Distance __n = __last - __first; 9642: _Distance __k = __middle - __first; 9642: 9642: if (__k == __n - __k) 9642: { 9642: std::swap_ranges(__first, __middle, __middle); 9642: return __middle; 9642: } 9642: 9642: _RandomAccessIterator __p = __first; 9642: _RandomAccessIterator __ret = __first + (__last - __middle); 9642: 9642: for (;;) 9642: { 9642: if (__k < __n - __k) 9642: { 9642: if (__is_pod(_ValueType) && __k == 1) 9642: { 9642: _ValueType __t = std::move(*__p); 9642: std::move(__p + 1, __p + __n, __p); 9642: *(__p + __n - 1) = std::move(__t); 9642: return __ret; 9642: } 9642: _RandomAccessIterator __q = __p + __k; 9642: for (_Distance __i = 0; __i < __n - __k; ++ __i) 9642: { 9642: std::iter_swap(__p, __q); 9642: ++__p; 9642: ++__q; 9642: } 9642: __n %= __k; 9642: if (__n == 0) 9642: return __ret; 9642: std::swap(__n, __k); 9642: __k = __n - __k; 9642: } 9642: else 9642: { 9642: __k = __n - __k; 9642: if (__is_pod(_ValueType) && __k == 1) 9642: { 9642: _ValueType __t = std::move(*(__p + __n - 1)); 9642: std::move_backward(__p, __p + __n - 1, __p + __n); 9642: *__p = std::move(__t); 9642: return __ret; 9642: } 9642: _RandomAccessIterator __q = __p + __n; 9642: __p = __q - __k; 9642: for (_Distance __i = 0; __i < __n - __k; ++ __i) 9642: { 9642: --__p; 9642: --__q; 9642: std::iter_swap(__p, __q); 9642: } 9642: __n %= __k; 9642: if (__n == 0) 9642: return __ret; 9642: std::swap(__n, __k); 9642: } 9642: } 9642: } 9642: # 1387 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator 9642: rotate(_ForwardIterator __first, _ForwardIterator __middle, 9642: _ForwardIterator __last) 9642: { 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__rotate(__first, __middle, __last, 9642: std::__iterator_category(__first)); 9642: } 9642: 9642: } 9642: # 1425 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _OutputIterator 9642: rotate_copy(_ForwardIterator __first, _ForwardIterator __middle, 9642: _ForwardIterator __last, _OutputIterator __result) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::copy(__first, __middle, 9642: std::copy(__middle, __last, __result)); 9642: } 9642: 9642: 9642: template 9642: 9642: _ForwardIterator 9642: __partition(_ForwardIterator __first, _ForwardIterator __last, 9642: _Predicate __pred, forward_iterator_tag) 9642: { 9642: if (__first == __last) 9642: return __first; 9642: 9642: while (__pred(*__first)) 9642: if (++__first == __last) 9642: return __first; 9642: 9642: _ForwardIterator __next = __first; 9642: 9642: while (++__next != __last) 9642: if (__pred(*__next)) 9642: { 9642: std::iter_swap(__first, __next); 9642: ++__first; 9642: } 9642: 9642: return __first; 9642: } 9642: 9642: 9642: template 9642: 9642: _BidirectionalIterator 9642: __partition(_BidirectionalIterator __first, _BidirectionalIterator __last, 9642: _Predicate __pred, bidirectional_iterator_tag) 9642: { 9642: while (true) 9642: { 9642: while (true) 9642: if (__first == __last) 9642: return __first; 9642: else if (__pred(*__first)) 9642: ++__first; 9642: else 9642: break; 9642: --__last; 9642: while (true) 9642: if (__first == __last) 9642: return __first; 9642: else if (!bool(__pred(*__last))) 9642: --__last; 9642: else 9642: break; 9642: std::iter_swap(__first, __last); 9642: ++__first; 9642: } 9642: } 9642: # 1506 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: _ForwardIterator 9642: __stable_partition_adaptive(_ForwardIterator __first, 9642: _ForwardIterator __last, 9642: _Predicate __pred, _Distance __len, 9642: _Pointer __buffer, 9642: _Distance __buffer_size) 9642: { 9642: if (__len == 1) 9642: return __first; 9642: 9642: if (__len <= __buffer_size) 9642: { 9642: _ForwardIterator __result1 = __first; 9642: _Pointer __result2 = __buffer; 9642: 9642: 9642: 9642: 9642: *__result2 = std::move(*__first); 9642: ++__result2; 9642: ++__first; 9642: for (; __first != __last; ++__first) 9642: if (__pred(__first)) 9642: { 9642: *__result1 = std::move(*__first); 9642: ++__result1; 9642: } 9642: else 9642: { 9642: *__result2 = std::move(*__first); 9642: ++__result2; 9642: } 9642: 9642: std::move(__buffer, __result2, __result1); 9642: return __result1; 9642: } 9642: 9642: _ForwardIterator __middle = __first; 9642: std::advance(__middle, __len / 2); 9642: _ForwardIterator __left_split = 9642: std::__stable_partition_adaptive(__first, __middle, __pred, 9642: __len / 2, __buffer, 9642: __buffer_size); 9642: 9642: 9642: 9642: _Distance __right_len = __len - __len / 2; 9642: _ForwardIterator __right_split = 9642: std::__find_if_not_n(__middle, __right_len, __pred); 9642: 9642: if (__right_len) 9642: __right_split = 9642: std::__stable_partition_adaptive(__right_split, __last, __pred, 9642: __right_len, 9642: __buffer, __buffer_size); 9642: 9642: return std::rotate(__left_split, __middle, __right_split); 9642: } 9642: 9642: template 9642: _ForwardIterator 9642: __stable_partition(_ForwardIterator __first, _ForwardIterator __last, 9642: _Predicate __pred) 9642: { 9642: __first = std::__find_if_not(__first, __last, __pred); 9642: 9642: if (__first == __last) 9642: return __first; 9642: 9642: typedef typename iterator_traits<_ForwardIterator>::value_type 9642: _ValueType; 9642: typedef typename iterator_traits<_ForwardIterator>::difference_type 9642: _DistanceType; 9642: 9642: _Temporary_buffer<_ForwardIterator, _ValueType> 9642: __buf(__first, std::distance(__first, __last)); 9642: return 9642: std::__stable_partition_adaptive(__first, __last, __pred, 9642: _DistanceType(__buf.requested_size()), 9642: __buf.begin(), 9642: _DistanceType(__buf.size())); 9642: } 9642: # 1608 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: inline _ForwardIterator 9642: stable_partition(_ForwardIterator __first, _ForwardIterator __last, 9642: _Predicate __pred) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__stable_partition(__first, __last, 9642: __gnu_cxx::__ops::__pred_iter(__pred)); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: void 9642: __heap_select(_RandomAccessIterator __first, 9642: _RandomAccessIterator __middle, 9642: _RandomAccessIterator __last, _Compare __comp) 9642: { 9642: std::__make_heap(__first, __middle, __comp); 9642: for (_RandomAccessIterator __i = __middle; __i < __last; ++__i) 9642: if (__comp(__i, __first)) 9642: std::__pop_heap(__first, __middle, __i, __comp); 9642: } 9642: 9642: 9642: 9642: template 9642: 9642: _RandomAccessIterator 9642: __partial_sort_copy(_InputIterator __first, _InputIterator __last, 9642: _RandomAccessIterator __result_first, 9642: _RandomAccessIterator __result_last, 9642: _Compare __comp) 9642: { 9642: typedef typename iterator_traits<_InputIterator>::value_type 9642: _InputValueType; 9642: typedef iterator_traits<_RandomAccessIterator> _RItTraits; 9642: typedef typename _RItTraits::difference_type _DistanceType; 9642: 9642: if (__result_first == __result_last) 9642: return __result_last; 9642: _RandomAccessIterator __result_real_last = __result_first; 9642: while (__first != __last && __result_real_last != __result_last) 9642: { 9642: *__result_real_last = *__first; 9642: ++__result_real_last; 9642: ++__first; 9642: } 9642: 9642: std::__make_heap(__result_first, __result_real_last, __comp); 9642: while (__first != __last) 9642: { 9642: if (__comp(__first, __result_first)) 9642: std::__adjust_heap(__result_first, _DistanceType(0), 9642: _DistanceType(__result_real_last 9642: - __result_first), 9642: _InputValueType(*__first), __comp); 9642: ++__first; 9642: } 9642: std::__sort_heap(__result_first, __result_real_last, __comp); 9642: return __result_real_last; 9642: } 9642: # 1701 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _RandomAccessIterator 9642: partial_sort_copy(_InputIterator __first, _InputIterator __last, 9642: _RandomAccessIterator __result_first, 9642: _RandomAccessIterator __result_last) 9642: { 9642: # 1716 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: 9642: return std::__partial_sort_copy(__first, __last, 9642: __result_first, __result_last, 9642: __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: # 1751 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _RandomAccessIterator 9642: partial_sort_copy(_InputIterator __first, _InputIterator __last, 9642: _RandomAccessIterator __result_first, 9642: _RandomAccessIterator __result_last, 9642: _Compare __comp) 9642: { 9642: # 1768 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: 9642: return std::__partial_sort_copy(__first, __last, 9642: __result_first, __result_last, 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: 9642: void 9642: __unguarded_linear_insert(_RandomAccessIterator __last, 9642: _Compare __comp) 9642: { 9642: typename iterator_traits<_RandomAccessIterator>::value_type 9642: __val = std::move(*__last); 9642: _RandomAccessIterator __next = __last; 9642: --__next; 9642: while (__comp(__val, __next)) 9642: { 9642: *__last = std::move(*__next); 9642: __last = __next; 9642: --__next; 9642: } 9642: *__last = std::move(__val); 9642: } 9642: 9642: 9642: template 9642: 9642: void 9642: __insertion_sort(_RandomAccessIterator __first, 9642: _RandomAccessIterator __last, _Compare __comp) 9642: { 9642: if (__first == __last) return; 9642: 9642: for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) 9642: { 9642: if (__comp(__i, __first)) 9642: { 9642: typename iterator_traits<_RandomAccessIterator>::value_type 9642: __val = std::move(*__i); 9642: std::move_backward(__first, __i, __i + 1); 9642: *__first = std::move(__val); 9642: } 9642: else 9642: std::__unguarded_linear_insert(__i, 9642: __gnu_cxx::__ops::__val_comp_iter(__comp)); 9642: } 9642: } 9642: 9642: 9642: template 9642: 9642: inline void 9642: __unguarded_insertion_sort(_RandomAccessIterator __first, 9642: _RandomAccessIterator __last, _Compare __comp) 9642: { 9642: for (_RandomAccessIterator __i = __first; __i != __last; ++__i) 9642: std::__unguarded_linear_insert(__i, 9642: __gnu_cxx::__ops::__val_comp_iter(__comp)); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: enum { _S_threshold = 16 }; 9642: 9642: 9642: template 9642: 9642: void 9642: __final_insertion_sort(_RandomAccessIterator __first, 9642: _RandomAccessIterator __last, _Compare __comp) 9642: { 9642: if (__last - __first > int(_S_threshold)) 9642: { 9642: std::__insertion_sort(__first, __first + int(_S_threshold), __comp); 9642: std::__unguarded_insertion_sort(__first + int(_S_threshold), __last, 9642: __comp); 9642: } 9642: else 9642: std::__insertion_sort(__first, __last, __comp); 9642: } 9642: 9642: 9642: template 9642: 9642: _RandomAccessIterator 9642: __unguarded_partition(_RandomAccessIterator __first, 9642: _RandomAccessIterator __last, 9642: _RandomAccessIterator __pivot, _Compare __comp) 9642: { 9642: while (true) 9642: { 9642: while (__comp(__first, __pivot)) 9642: ++__first; 9642: --__last; 9642: while (__comp(__pivot, __last)) 9642: --__last; 9642: if (!(__first < __last)) 9642: return __first; 9642: std::iter_swap(__first, __last); 9642: ++__first; 9642: } 9642: } 9642: 9642: 9642: template 9642: 9642: inline _RandomAccessIterator 9642: __unguarded_partition_pivot(_RandomAccessIterator __first, 9642: _RandomAccessIterator __last, _Compare __comp) 9642: { 9642: _RandomAccessIterator __mid = __first + (__last - __first) / 2; 9642: std::__move_median_to_first(__first, __first + 1, __mid, __last - 1, 9642: __comp); 9642: return std::__unguarded_partition(__first + 1, __last, __first, __comp); 9642: } 9642: 9642: template 9642: 9642: inline void 9642: __partial_sort(_RandomAccessIterator __first, 9642: _RandomAccessIterator __middle, 9642: _RandomAccessIterator __last, 9642: _Compare __comp) 9642: { 9642: std::__heap_select(__first, __middle, __last, __comp); 9642: std::__sort_heap(__first, __middle, __comp); 9642: } 9642: 9642: 9642: template 9642: 9642: void 9642: __introsort_loop(_RandomAccessIterator __first, 9642: _RandomAccessIterator __last, 9642: _Size __depth_limit, _Compare __comp) 9642: { 9642: while (__last - __first > int(_S_threshold)) 9642: { 9642: if (__depth_limit == 0) 9642: { 9642: std::__partial_sort(__first, __last, __last, __comp); 9642: return; 9642: } 9642: --__depth_limit; 9642: _RandomAccessIterator __cut = 9642: std::__unguarded_partition_pivot(__first, __last, __comp); 9642: std::__introsort_loop(__cut, __last, __depth_limit, __comp); 9642: __last = __cut; 9642: } 9642: } 9642: 9642: 9642: 9642: template 9642: 9642: inline void 9642: __sort(_RandomAccessIterator __first, _RandomAccessIterator __last, 9642: _Compare __comp) 9642: { 9642: if (__first != __last) 9642: { 9642: std::__introsort_loop(__first, __last, 9642: std::__lg(__last - __first) * 2, 9642: __comp); 9642: std::__final_insertion_sort(__first, __last, __comp); 9642: } 9642: } 9642: 9642: template 9642: 9642: void 9642: __introselect(_RandomAccessIterator __first, _RandomAccessIterator __nth, 9642: _RandomAccessIterator __last, _Size __depth_limit, 9642: _Compare __comp) 9642: { 9642: while (__last - __first > 3) 9642: { 9642: if (__depth_limit == 0) 9642: { 9642: std::__heap_select(__first, __nth + 1, __last, __comp); 9642: 9642: std::iter_swap(__first, __nth); 9642: return; 9642: } 9642: --__depth_limit; 9642: _RandomAccessIterator __cut = 9642: std::__unguarded_partition_pivot(__first, __last, __comp); 9642: if (__cut <= __nth) 9642: __first = __cut; 9642: else 9642: __last = __cut; 9642: } 9642: std::__insertion_sort(__first, __last, __comp); 9642: } 9642: # 2002 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator 9642: lower_bound(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __val, _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__lower_bound(__first, __last, __val, 9642: __gnu_cxx::__ops::__iter_comp_val(__comp)); 9642: } 9642: 9642: template 9642: 9642: _ForwardIterator 9642: __upper_bound(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __val, _Compare __comp) 9642: { 9642: typedef typename iterator_traits<_ForwardIterator>::difference_type 9642: _DistanceType; 9642: 9642: _DistanceType __len = std::distance(__first, __last); 9642: 9642: while (__len > 0) 9642: { 9642: _DistanceType __half = __len >> 1; 9642: _ForwardIterator __middle = __first; 9642: std::advance(__middle, __half); 9642: if (__comp(__val, __middle)) 9642: __len = __half; 9642: else 9642: { 9642: __first = __middle; 9642: ++__first; 9642: __len = __len - __half - 1; 9642: } 9642: } 9642: return __first; 9642: } 9642: # 2058 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator 9642: upper_bound(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __val) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__upper_bound(__first, __last, __val, 9642: __gnu_cxx::__ops::__val_less_iter()); 9642: } 9642: # 2089 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator 9642: upper_bound(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __val, _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__upper_bound(__first, __last, __val, 9642: __gnu_cxx::__ops::__val_comp_iter(__comp)); 9642: } 9642: 9642: template 9642: 9642: pair<_ForwardIterator, _ForwardIterator> 9642: __equal_range(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __val, 9642: _CompareItTp __comp_it_val, _CompareTpIt __comp_val_it) 9642: { 9642: typedef typename iterator_traits<_ForwardIterator>::difference_type 9642: _DistanceType; 9642: 9642: _DistanceType __len = std::distance(__first, __last); 9642: 9642: while (__len > 0) 9642: { 9642: _DistanceType __half = __len >> 1; 9642: _ForwardIterator __middle = __first; 9642: std::advance(__middle, __half); 9642: if (__comp_it_val(__middle, __val)) 9642: { 9642: __first = __middle; 9642: ++__first; 9642: __len = __len - __half - 1; 9642: } 9642: else if (__comp_val_it(__val, __middle)) 9642: __len = __half; 9642: else 9642: { 9642: _ForwardIterator __left 9642: = std::__lower_bound(__first, __middle, __val, __comp_it_val); 9642: std::advance(__first, __len); 9642: _ForwardIterator __right 9642: = std::__upper_bound(++__middle, __first, __val, __comp_val_it); 9642: return pair<_ForwardIterator, _ForwardIterator>(__left, __right); 9642: } 9642: } 9642: return pair<_ForwardIterator, _ForwardIterator>(__first, __first); 9642: } 9642: # 2162 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline pair<_ForwardIterator, _ForwardIterator> 9642: equal_range(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __val) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__equal_range(__first, __last, __val, 9642: __gnu_cxx::__ops::__iter_less_val(), 9642: __gnu_cxx::__ops::__val_less_iter()); 9642: } 9642: # 2199 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline pair<_ForwardIterator, _ForwardIterator> 9642: equal_range(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __val, _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: ; 9642: 9642: return std::__equal_range(__first, __last, __val, 9642: __gnu_cxx::__ops::__iter_comp_val(__comp), 9642: __gnu_cxx::__ops::__val_comp_iter(__comp)); 9642: } 9642: # 2233 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: bool 9642: binary_search(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __val) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: _ForwardIterator __i 9642: = std::__lower_bound(__first, __last, __val, 9642: __gnu_cxx::__ops::__iter_less_val()); 9642: return __i != __last && !(__val < *__i); 9642: } 9642: # 2267 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: bool 9642: binary_search(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __val, _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: ; 9642: 9642: _ForwardIterator __i 9642: = std::__lower_bound(__first, __last, __val, 9642: __gnu_cxx::__ops::__iter_comp_val(__comp)); 9642: return __i != __last && !bool(__comp(__val, *__i)); 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: void 9642: __move_merge_adaptive(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2, 9642: _OutputIterator __result, _Compare __comp) 9642: { 9642: while (__first1 != __last1 && __first2 != __last2) 9642: { 9642: if (__comp(__first2, __first1)) 9642: { 9642: *__result = std::move(*__first2); 9642: ++__first2; 9642: } 9642: else 9642: { 9642: *__result = std::move(*__first1); 9642: ++__first1; 9642: } 9642: ++__result; 9642: } 9642: if (__first1 != __last1) 9642: std::move(__first1, __last1, __result); 9642: } 9642: 9642: 9642: template 9642: void 9642: __move_merge_adaptive_backward(_BidirectionalIterator1 __first1, 9642: _BidirectionalIterator1 __last1, 9642: _BidirectionalIterator2 __first2, 9642: _BidirectionalIterator2 __last2, 9642: _BidirectionalIterator3 __result, 9642: _Compare __comp) 9642: { 9642: if (__first1 == __last1) 9642: { 9642: std::move_backward(__first2, __last2, __result); 9642: return; 9642: } 9642: else if (__first2 == __last2) 9642: return; 9642: 9642: --__last1; 9642: --__last2; 9642: while (true) 9642: { 9642: if (__comp(__last2, __last1)) 9642: { 9642: *--__result = std::move(*__last1); 9642: if (__first1 == __last1) 9642: { 9642: std::move_backward(__first2, ++__last2, __result); 9642: return; 9642: } 9642: --__last1; 9642: } 9642: else 9642: { 9642: *--__result = std::move(*__last2); 9642: if (__first2 == __last2) 9642: return; 9642: --__last2; 9642: } 9642: } 9642: } 9642: 9642: 9642: template 9642: _BidirectionalIterator1 9642: __rotate_adaptive(_BidirectionalIterator1 __first, 9642: _BidirectionalIterator1 __middle, 9642: _BidirectionalIterator1 __last, 9642: _Distance __len1, _Distance __len2, 9642: _BidirectionalIterator2 __buffer, 9642: _Distance __buffer_size) 9642: { 9642: _BidirectionalIterator2 __buffer_end; 9642: if (__len1 > __len2 && __len2 <= __buffer_size) 9642: { 9642: if (__len2) 9642: { 9642: __buffer_end = std::move(__middle, __last, __buffer); 9642: std::move_backward(__first, __middle, __last); 9642: return std::move(__buffer, __buffer_end, __first); 9642: } 9642: else 9642: return __first; 9642: } 9642: else if (__len1 <= __buffer_size) 9642: { 9642: if (__len1) 9642: { 9642: __buffer_end = std::move(__first, __middle, __buffer); 9642: std::move(__middle, __last, __first); 9642: return std::move_backward(__buffer, __buffer_end, __last); 9642: } 9642: else 9642: return __last; 9642: } 9642: else 9642: return std::rotate(__first, __middle, __last); 9642: } 9642: 9642: 9642: template 9642: void 9642: __merge_adaptive(_BidirectionalIterator __first, 9642: _BidirectionalIterator __middle, 9642: _BidirectionalIterator __last, 9642: _Distance __len1, _Distance __len2, 9642: _Pointer __buffer, _Compare __comp) 9642: { 9642: if (__len1 <= __len2) 9642: { 9642: _Pointer __buffer_end = std::move(__first, __middle, __buffer); 9642: std::__move_merge_adaptive(__buffer, __buffer_end, __middle, __last, 9642: __first, __comp); 9642: } 9642: else 9642: { 9642: _Pointer __buffer_end = std::move(__middle, __last, __buffer); 9642: std::__move_merge_adaptive_backward(__first, __middle, __buffer, 9642: __buffer_end, __last, __comp); 9642: } 9642: } 9642: 9642: template 9642: void 9642: __merge_adaptive_resize(_BidirectionalIterator __first, 9642: _BidirectionalIterator __middle, 9642: _BidirectionalIterator __last, 9642: _Distance __len1, _Distance __len2, 9642: _Pointer __buffer, _Distance __buffer_size, 9642: _Compare __comp) 9642: { 9642: if (__len1 <= __buffer_size || __len2 <= __buffer_size) 9642: std::__merge_adaptive(__first, __middle, __last, 9642: __len1, __len2, __buffer, __comp); 9642: else 9642: { 9642: _BidirectionalIterator __first_cut = __first; 9642: _BidirectionalIterator __second_cut = __middle; 9642: _Distance __len11 = 0; 9642: _Distance __len22 = 0; 9642: if (__len1 > __len2) 9642: { 9642: __len11 = __len1 / 2; 9642: std::advance(__first_cut, __len11); 9642: __second_cut 9642: = std::__lower_bound(__middle, __last, *__first_cut, 9642: __gnu_cxx::__ops::__iter_comp_val(__comp)); 9642: __len22 = std::distance(__middle, __second_cut); 9642: } 9642: else 9642: { 9642: __len22 = __len2 / 2; 9642: std::advance(__second_cut, __len22); 9642: __first_cut 9642: = std::__upper_bound(__first, __middle, *__second_cut, 9642: __gnu_cxx::__ops::__val_comp_iter(__comp)); 9642: __len11 = std::distance(__first, __first_cut); 9642: } 9642: 9642: _BidirectionalIterator __new_middle 9642: = std::__rotate_adaptive(__first_cut, __middle, __second_cut, 9642: _Distance(__len1 - __len11), __len22, 9642: __buffer, __buffer_size); 9642: std::__merge_adaptive_resize(__first, __first_cut, __new_middle, 9642: __len11, __len22, 9642: __buffer, __buffer_size, __comp); 9642: std::__merge_adaptive_resize(__new_middle, __second_cut, __last, 9642: _Distance(__len1 - __len11), 9642: _Distance(__len2 - __len22), 9642: __buffer, __buffer_size, __comp); 9642: } 9642: } 9642: 9642: 9642: template 9642: void 9642: __merge_without_buffer(_BidirectionalIterator __first, 9642: _BidirectionalIterator __middle, 9642: _BidirectionalIterator __last, 9642: _Distance __len1, _Distance __len2, 9642: _Compare __comp) 9642: { 9642: if (__len1 == 0 || __len2 == 0) 9642: return; 9642: 9642: if (__len1 + __len2 == 2) 9642: { 9642: if (__comp(__middle, __first)) 9642: std::iter_swap(__first, __middle); 9642: return; 9642: } 9642: 9642: _BidirectionalIterator __first_cut = __first; 9642: _BidirectionalIterator __second_cut = __middle; 9642: _Distance __len11 = 0; 9642: _Distance __len22 = 0; 9642: if (__len1 > __len2) 9642: { 9642: __len11 = __len1 / 2; 9642: std::advance(__first_cut, __len11); 9642: __second_cut 9642: = std::__lower_bound(__middle, __last, *__first_cut, 9642: __gnu_cxx::__ops::__iter_comp_val(__comp)); 9642: __len22 = std::distance(__middle, __second_cut); 9642: } 9642: else 9642: { 9642: __len22 = __len2 / 2; 9642: std::advance(__second_cut, __len22); 9642: __first_cut 9642: = std::__upper_bound(__first, __middle, *__second_cut, 9642: __gnu_cxx::__ops::__val_comp_iter(__comp)); 9642: __len11 = std::distance(__first, __first_cut); 9642: } 9642: 9642: _BidirectionalIterator __new_middle 9642: = std::rotate(__first_cut, __middle, __second_cut); 9642: std::__merge_without_buffer(__first, __first_cut, __new_middle, 9642: __len11, __len22, __comp); 9642: std::__merge_without_buffer(__new_middle, __second_cut, __last, 9642: __len1 - __len11, __len2 - __len22, __comp); 9642: } 9642: 9642: template 9642: void 9642: __inplace_merge(_BidirectionalIterator __first, 9642: _BidirectionalIterator __middle, 9642: _BidirectionalIterator __last, 9642: _Compare __comp) 9642: { 9642: typedef typename iterator_traits<_BidirectionalIterator>::value_type 9642: _ValueType; 9642: typedef typename iterator_traits<_BidirectionalIterator>::difference_type 9642: _DistanceType; 9642: 9642: if (__first == __middle || __middle == __last) 9642: return; 9642: 9642: const _DistanceType __len1 = std::distance(__first, __middle); 9642: const _DistanceType __len2 = std::distance(__middle, __last); 9642: 9642: 9642: typedef _Temporary_buffer<_BidirectionalIterator, _ValueType> _TmpBuf; 9642: 9642: 9642: _TmpBuf __buf(__first, std::min(__len1, __len2)); 9642: 9642: if (__builtin_expect(__buf.size() == __buf.requested_size(), true)) 9642: std::__merge_adaptive 9642: (__first, __middle, __last, __len1, __len2, __buf.begin(), __comp); 9642: else if (__builtin_expect(__buf.begin() == 0, false)) 9642: std::__merge_without_buffer 9642: (__first, __middle, __last, __len1, __len2, __comp); 9642: else 9642: std::__merge_adaptive_resize 9642: (__first, __middle, __last, __len1, __len2, __buf.begin(), 9642: _DistanceType(__buf.size()), __comp); 9642: 9642: 9642: 9642: 9642: } 9642: # 2582 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: inline void 9642: inplace_merge(_BidirectionalIterator __first, 9642: _BidirectionalIterator __middle, 9642: _BidirectionalIterator __last) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: 9642: std::__inplace_merge(__first, __middle, __last, 9642: __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: # 2623 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: inline void 9642: inplace_merge(_BidirectionalIterator __first, 9642: _BidirectionalIterator __middle, 9642: _BidirectionalIterator __last, 9642: _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: 9642: std::__inplace_merge(__first, __middle, __last, 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: 9642: 9642: 9642: template 9642: _OutputIterator 9642: __move_merge(_InputIterator __first1, _InputIterator __last1, 9642: _InputIterator __first2, _InputIterator __last2, 9642: _OutputIterator __result, _Compare __comp) 9642: { 9642: while (__first1 != __last1 && __first2 != __last2) 9642: { 9642: if (__comp(__first2, __first1)) 9642: { 9642: *__result = std::move(*__first2); 9642: ++__first2; 9642: } 9642: else 9642: { 9642: *__result = std::move(*__first1); 9642: ++__first1; 9642: } 9642: ++__result; 9642: } 9642: return std::move(__first2, __last2, std::move(__first1, __last1, __result)) 9642: 9642: ; 9642: } 9642: 9642: template 9642: void 9642: __merge_sort_loop(_RandomAccessIterator1 __first, 9642: _RandomAccessIterator1 __last, 9642: _RandomAccessIterator2 __result, _Distance __step_size, 9642: _Compare __comp) 9642: { 9642: const _Distance __two_step = 2 * __step_size; 9642: 9642: while (__last - __first >= __two_step) 9642: { 9642: __result = std::__move_merge(__first, __first + __step_size, 9642: __first + __step_size, 9642: __first + __two_step, 9642: __result, __comp); 9642: __first += __two_step; 9642: } 9642: __step_size = std::min(_Distance(__last - __first), __step_size); 9642: 9642: std::__move_merge(__first, __first + __step_size, 9642: __first + __step_size, __last, __result, __comp); 9642: } 9642: 9642: template 9642: 9642: void 9642: __chunk_insertion_sort(_RandomAccessIterator __first, 9642: _RandomAccessIterator __last, 9642: _Distance __chunk_size, _Compare __comp) 9642: { 9642: while (__last - __first >= __chunk_size) 9642: { 9642: std::__insertion_sort(__first, __first + __chunk_size, __comp); 9642: __first += __chunk_size; 9642: } 9642: std::__insertion_sort(__first, __last, __comp); 9642: } 9642: 9642: enum { _S_chunk_size = 7 }; 9642: 9642: template 9642: void 9642: __merge_sort_with_buffer(_RandomAccessIterator __first, 9642: _RandomAccessIterator __last, 9642: _Pointer __buffer, _Compare __comp) 9642: { 9642: typedef typename iterator_traits<_RandomAccessIterator>::difference_type 9642: _Distance; 9642: 9642: const _Distance __len = __last - __first; 9642: const _Pointer __buffer_last = __buffer + __len; 9642: 9642: _Distance __step_size = _S_chunk_size; 9642: std::__chunk_insertion_sort(__first, __last, __step_size, __comp); 9642: 9642: while (__step_size < __len) 9642: { 9642: std::__merge_sort_loop(__first, __last, __buffer, 9642: __step_size, __comp); 9642: __step_size *= 2; 9642: std::__merge_sort_loop(__buffer, __buffer_last, __first, 9642: __step_size, __comp); 9642: __step_size *= 2; 9642: } 9642: } 9642: 9642: template 9642: void 9642: __stable_sort_adaptive(_RandomAccessIterator __first, 9642: _RandomAccessIterator __middle, 9642: _RandomAccessIterator __last, 9642: _Pointer __buffer, _Compare __comp) 9642: { 9642: std::__merge_sort_with_buffer(__first, __middle, __buffer, __comp); 9642: std::__merge_sort_with_buffer(__middle, __last, __buffer, __comp); 9642: 9642: std::__merge_adaptive(__first, __middle, __last, 9642: __middle - __first, __last - __middle, 9642: __buffer, __comp); 9642: } 9642: 9642: template 9642: void 9642: __stable_sort_adaptive_resize(_RandomAccessIterator __first, 9642: _RandomAccessIterator __last, 9642: _Pointer __buffer, _Distance __buffer_size, 9642: _Compare __comp) 9642: { 9642: const _Distance __len = (__last - __first + 1) / 2; 9642: const _RandomAccessIterator __middle = __first + __len; 9642: if (__len > __buffer_size) 9642: { 9642: std::__stable_sort_adaptive_resize(__first, __middle, __buffer, 9642: __buffer_size, __comp); 9642: std::__stable_sort_adaptive_resize(__middle, __last, __buffer, 9642: __buffer_size, __comp); 9642: std::__merge_adaptive_resize(__first, __middle, __last, 9642: _Distance(__middle - __first), 9642: _Distance(__last - __middle), 9642: __buffer, __buffer_size, 9642: __comp); 9642: } 9642: else 9642: std::__stable_sort_adaptive(__first, __middle, __last, 9642: __buffer, __comp); 9642: } 9642: 9642: 9642: template 9642: void 9642: __inplace_stable_sort(_RandomAccessIterator __first, 9642: _RandomAccessIterator __last, _Compare __comp) 9642: { 9642: if (__last - __first < 15) 9642: { 9642: std::__insertion_sort(__first, __last, __comp); 9642: return; 9642: } 9642: _RandomAccessIterator __middle = __first + (__last - __first) / 2; 9642: std::__inplace_stable_sort(__first, __middle, __comp); 9642: std::__inplace_stable_sort(__middle, __last, __comp); 9642: std::__merge_without_buffer(__first, __middle, __last, 9642: __middle - __first, 9642: __last - __middle, 9642: __comp); 9642: } 9642: # 2809 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: bool 9642: __includes(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2, 9642: _Compare __comp) 9642: { 9642: while (__first1 != __last1 && __first2 != __last2) 9642: { 9642: if (__comp(__first2, __first1)) 9642: return false; 9642: if (!__comp(__first1, __first2)) 9642: ++__first2; 9642: ++__first1; 9642: } 9642: 9642: return __first2 == __last2; 9642: } 9642: # 2847 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline bool 9642: includes(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: ; 9642: 9642: return std::__includes(__first1, __last1, __first2, __last2, 9642: __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: # 2892 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline bool 9642: includes(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2, 9642: _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: ; 9642: 9642: return std::__includes(__first1, __last1, __first2, __last2, 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: # 2928 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: bool 9642: __next_permutation(_BidirectionalIterator __first, 9642: _BidirectionalIterator __last, _Compare __comp) 9642: { 9642: if (__first == __last) 9642: return false; 9642: _BidirectionalIterator __i = __first; 9642: ++__i; 9642: if (__i == __last) 9642: return false; 9642: __i = __last; 9642: --__i; 9642: 9642: for(;;) 9642: { 9642: _BidirectionalIterator __ii = __i; 9642: --__i; 9642: if (__comp(__i, __ii)) 9642: { 9642: _BidirectionalIterator __j = __last; 9642: while (!__comp(__i, --__j)) 9642: {} 9642: std::iter_swap(__i, __j); 9642: std::__reverse(__ii, __last, 9642: std::__iterator_category(__first)); 9642: return true; 9642: } 9642: if (__i == __first) 9642: { 9642: std::__reverse(__first, __last, 9642: std::__iterator_category(__first)); 9642: return false; 9642: } 9642: } 9642: } 9642: # 2978 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline bool 9642: next_permutation(_BidirectionalIterator __first, 9642: _BidirectionalIterator __last) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__next_permutation 9642: (__first, __last, __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: # 3011 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline bool 9642: next_permutation(_BidirectionalIterator __first, 9642: _BidirectionalIterator __last, _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__next_permutation 9642: (__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: 9642: template 9642: 9642: bool 9642: __prev_permutation(_BidirectionalIterator __first, 9642: _BidirectionalIterator __last, _Compare __comp) 9642: { 9642: if (__first == __last) 9642: return false; 9642: _BidirectionalIterator __i = __first; 9642: ++__i; 9642: if (__i == __last) 9642: return false; 9642: __i = __last; 9642: --__i; 9642: 9642: for(;;) 9642: { 9642: _BidirectionalIterator __ii = __i; 9642: --__i; 9642: if (__comp(__ii, __i)) 9642: { 9642: _BidirectionalIterator __j = __last; 9642: while (!__comp(--__j, __i)) 9642: {} 9642: std::iter_swap(__i, __j); 9642: std::__reverse(__ii, __last, 9642: std::__iterator_category(__first)); 9642: return true; 9642: } 9642: if (__i == __first) 9642: { 9642: std::__reverse(__first, __last, 9642: std::__iterator_category(__first)); 9642: return false; 9642: } 9642: } 9642: } 9642: # 3081 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline bool 9642: prev_permutation(_BidirectionalIterator __first, 9642: _BidirectionalIterator __last) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__prev_permutation(__first, __last, 9642: __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: # 3114 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline bool 9642: prev_permutation(_BidirectionalIterator __first, 9642: _BidirectionalIterator __last, _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__prev_permutation(__first, __last, 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: 9642: _OutputIterator 9642: __replace_copy_if(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, 9642: _Predicate __pred, const _Tp& __new_value) 9642: { 9642: for (; __first != __last; ++__first, (void)++__result) 9642: if (__pred(__first)) 9642: *__result = __new_value; 9642: else 9642: *__result = *__first; 9642: return __result; 9642: } 9642: # 3166 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _OutputIterator 9642: replace_copy(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, 9642: const _Tp& __old_value, const _Tp& __new_value) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__replace_copy_if(__first, __last, __result, 9642: __gnu_cxx::__ops::__iter_equals_val(__old_value), 9642: __new_value); 9642: } 9642: # 3201 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _OutputIterator 9642: replace_copy_if(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, 9642: _Predicate __pred, const _Tp& __new_value) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__replace_copy_if(__first, __last, __result, 9642: __gnu_cxx::__ops::__pred_iter(__pred), 9642: __new_value); 9642: } 9642: # 3230 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline bool 9642: is_sorted(_ForwardIterator __first, _ForwardIterator __last) 9642: { return std::is_sorted_until(__first, __last) == __last; } 9642: # 3245 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline bool 9642: is_sorted(_ForwardIterator __first, _ForwardIterator __last, 9642: _Compare __comp) 9642: { return std::is_sorted_until(__first, __last, __comp) == __last; } 9642: 9642: template 9642: 9642: _ForwardIterator 9642: __is_sorted_until(_ForwardIterator __first, _ForwardIterator __last, 9642: _Compare __comp) 9642: { 9642: if (__first == __last) 9642: return __last; 9642: 9642: _ForwardIterator __next = __first; 9642: for (++__next; __next != __last; __first = __next, (void)++__next) 9642: if (__comp(__next, __first)) 9642: return __next; 9642: return __next; 9642: } 9642: # 3276 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator 9642: is_sorted_until(_ForwardIterator __first, _ForwardIterator __last) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__is_sorted_until(__first, __last, 9642: __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: # 3301 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator 9642: is_sorted_until(_ForwardIterator __first, _ForwardIterator __last, 9642: _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__is_sorted_until(__first, __last, 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: # 3327 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: constexpr 9642: inline pair 9642: minmax(const _Tp& __a, const _Tp& __b) 9642: { 9642: 9642: 9642: 9642: return __b < __a ? pair(__b, __a) 9642: : pair(__a, __b); 9642: } 9642: # 3348 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: constexpr 9642: inline pair 9642: minmax(const _Tp& __a, const _Tp& __b, _Compare __comp) 9642: { 9642: return __comp(__b, __a) ? pair(__b, __a) 9642: : pair(__a, __b); 9642: } 9642: 9642: template 9642: constexpr 9642: pair<_ForwardIterator, _ForwardIterator> 9642: __minmax_element(_ForwardIterator __first, _ForwardIterator __last, 9642: _Compare __comp) 9642: { 9642: _ForwardIterator __next = __first; 9642: if (__first == __last 9642: || ++__next == __last) 9642: return std::make_pair(__first, __first); 9642: 9642: _ForwardIterator __min{}, __max{}; 9642: if (__comp(__next, __first)) 9642: { 9642: __min = __next; 9642: __max = __first; 9642: } 9642: else 9642: { 9642: __min = __first; 9642: __max = __next; 9642: } 9642: 9642: __first = __next; 9642: ++__first; 9642: 9642: while (__first != __last) 9642: { 9642: __next = __first; 9642: if (++__next == __last) 9642: { 9642: if (__comp(__first, __min)) 9642: __min = __first; 9642: else if (!__comp(__first, __max)) 9642: __max = __first; 9642: break; 9642: } 9642: 9642: if (__comp(__next, __first)) 9642: { 9642: if (__comp(__next, __min)) 9642: __min = __next; 9642: if (!__comp(__first, __max)) 9642: __max = __first; 9642: } 9642: else 9642: { 9642: if (__comp(__first, __min)) 9642: __min = __first; 9642: if (!__comp(__next, __max)) 9642: __max = __next; 9642: } 9642: 9642: __first = __next; 9642: ++__first; 9642: } 9642: 9642: return std::make_pair(__min, __max); 9642: } 9642: # 3428 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: constexpr 9642: inline pair<_ForwardIterator, _ForwardIterator> 9642: minmax_element(_ForwardIterator __first, _ForwardIterator __last) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__minmax_element(__first, __last, 9642: __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: # 3456 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: constexpr 9642: inline pair<_ForwardIterator, _ForwardIterator> 9642: minmax_element(_ForwardIterator __first, _ForwardIterator __last, 9642: _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__minmax_element(__first, __last, 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: 9642: template 9642: constexpr 9642: inline pair<_Tp, _Tp> 9642: minmax(initializer_list<_Tp> __l) 9642: { 9642: ; 9642: pair __p = 9642: std::__minmax_element(__l.begin(), __l.end(), 9642: __gnu_cxx::__ops::__iter_less_iter()); 9642: return std::make_pair(*__p.first, *__p.second); 9642: } 9642: 9642: template 9642: constexpr 9642: inline pair<_Tp, _Tp> 9642: minmax(initializer_list<_Tp> __l, _Compare __comp) 9642: { 9642: ; 9642: pair __p = 9642: std::__minmax_element(__l.begin(), __l.end(), 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: return std::make_pair(*__p.first, *__p.second); 9642: } 9642: # 3512 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline bool 9642: is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _BinaryPredicate __pred) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__is_permutation(__first1, __last1, __first2, 9642: __gnu_cxx::__ops::__iter_comp_iter(__pred)); 9642: } 9642: 9642: 9642: template 9642: 9642: bool 9642: __is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _ForwardIterator2 __last2, 9642: _BinaryPredicate __pred) 9642: { 9642: using _Cat1 9642: = typename iterator_traits<_ForwardIterator1>::iterator_category; 9642: using _Cat2 9642: = typename iterator_traits<_ForwardIterator2>::iterator_category; 9642: using _It1_is_RA = is_same<_Cat1, random_access_iterator_tag>; 9642: using _It2_is_RA = is_same<_Cat2, random_access_iterator_tag>; 9642: constexpr bool __ra_iters = _It1_is_RA() && _It2_is_RA(); 9642: if (__ra_iters) 9642: { 9642: auto __d1 = std::distance(__first1, __last1); 9642: auto __d2 = std::distance(__first2, __last2); 9642: if (__d1 != __d2) 9642: return false; 9642: } 9642: 9642: 9642: 9642: for (; __first1 != __last1 && __first2 != __last2; 9642: ++__first1, (void)++__first2) 9642: if (!__pred(__first1, __first2)) 9642: break; 9642: 9642: if (__ra_iters) 9642: { 9642: if (__first1 == __last1) 9642: return true; 9642: } 9642: else 9642: { 9642: auto __d1 = std::distance(__first1, __last1); 9642: auto __d2 = std::distance(__first2, __last2); 9642: if (__d1 == 0 && __d2 == 0) 9642: return true; 9642: if (__d1 != __d2) 9642: return false; 9642: } 9642: 9642: for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan) 9642: { 9642: if (__scan != std::__find_if(__first1, __scan, 9642: __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))) 9642: continue; 9642: 9642: auto __matches = std::__count_if(__first2, __last2, 9642: __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)); 9642: if (0 == __matches 9642: || std::__count_if(__scan, __last1, 9642: __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)) 9642: != __matches) 9642: return false; 9642: } 9642: return true; 9642: } 9642: # 3607 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline bool 9642: is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _ForwardIterator2 __last2) 9642: { 9642: ; 9642: ; 9642: 9642: return 9642: std::__is_permutation(__first1, __last1, __first2, __last2, 9642: __gnu_cxx::__ops::__iter_equal_to_iter()); 9642: } 9642: # 3635 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline bool 9642: is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _ForwardIterator2 __last2, 9642: _BinaryPredicate __pred) 9642: { 9642: ; 9642: ; 9642: 9642: return std::__is_permutation(__first1, __last1, __first2, __last2, 9642: __gnu_cxx::__ops::__iter_comp_iter(__pred)); 9642: } 9642: # 3665 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: constexpr const _Tp& 9642: clamp(const _Tp& __val, const _Tp& __lo, const _Tp& __hi) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(!(__hi < __lo))) __builtin_unreachable(); } while (false); 9642: return std::min(std::max(__val, __lo), __hi); 9642: } 9642: # 3685 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: constexpr const _Tp& 9642: clamp(const _Tp& __val, const _Tp& __lo, const _Tp& __hi, _Compare __comp) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(!__comp(__hi, __lo))) __builtin_unreachable(); } while (false); 9642: return std::min(std::max(__val, __lo, __comp), __hi, __comp); 9642: } 9642: # 3717 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: pair<_IntType, _IntType> 9642: __gen_two_uniform_ints(_IntType __b0, _IntType __b1, 9642: _UniformRandomBitGenerator&& __g) 9642: { 9642: _IntType __x 9642: = uniform_int_distribution<_IntType>{0, (__b0 * __b1) - 1}(__g); 9642: return std::make_pair(__x / __b1, __x % __b1); 9642: } 9642: # 3739 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: void 9642: shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last, 9642: _UniformRandomNumberGenerator&& __g) 9642: { 9642: 9642: 9642: 9642: ; 9642: 9642: if (__first == __last) 9642: return; 9642: 9642: typedef typename iterator_traits<_RandomAccessIterator>::difference_type 9642: _DistanceType; 9642: 9642: typedef typename std::make_unsigned<_DistanceType>::type __ud_type; 9642: typedef typename std::uniform_int_distribution<__ud_type> __distr_type; 9642: typedef typename __distr_type::param_type __p_type; 9642: 9642: typedef typename remove_reference<_UniformRandomNumberGenerator>::type 9642: _Gen; 9642: typedef typename common_type::type 9642: __uc_type; 9642: 9642: const __uc_type __urngrange = __g.max() - __g.min(); 9642: const __uc_type __urange = __uc_type(__last - __first); 9642: 9642: if (__urngrange / __urange >= __urange) 9642: 9642: { 9642: _RandomAccessIterator __i = __first + 1; 9642: 9642: 9642: 9642: 9642: 9642: if ((__urange % 2) == 0) 9642: { 9642: __distr_type __d{0, 1}; 9642: std::iter_swap(__i++, __first + __d(__g)); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: while (__i != __last) 9642: { 9642: const __uc_type __swap_range = __uc_type(__i - __first) + 1; 9642: 9642: const pair<__uc_type, __uc_type> __pospos = 9642: __gen_two_uniform_ints(__swap_range, __swap_range + 1, __g); 9642: 9642: std::iter_swap(__i++, __first + __pospos.first); 9642: std::iter_swap(__i++, __first + __pospos.second); 9642: } 9642: 9642: return; 9642: } 9642: 9642: __distr_type __d; 9642: 9642: for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) 9642: std::iter_swap(__i, __first + __d(__g, __p_type(0, __i - __first))); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: # 3824 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: _Function 9642: for_each(_InputIterator __first, _InputIterator __last, _Function __f) 9642: { 9642: 9642: 9642: ; 9642: for (; __first != __last; ++__first) 9642: __f(*__first); 9642: return __f; 9642: } 9642: # 3850 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: _InputIterator 9642: for_each_n(_InputIterator __first, _Size __n, _Function __f) 9642: { 9642: auto __n2 = std::__size_to_integer(__n); 9642: using _Cat = typename iterator_traits<_InputIterator>::iterator_category; 9642: if constexpr (is_base_of_v) 9642: { 9642: if (__n2 <= 0) 9642: return __first; 9642: auto __last = __first + __n2; 9642: std::for_each(__first, __last, std::move(__f)); 9642: return __last; 9642: } 9642: else 9642: { 9642: while (__n2-->0) 9642: { 9642: __f(*__first); 9642: ++__first; 9642: } 9642: return __first; 9642: } 9642: } 9642: # 3886 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _InputIterator 9642: find(_InputIterator __first, _InputIterator __last, 9642: const _Tp& __val) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: return std::__find_if(__first, __last, 9642: __gnu_cxx::__ops::__iter_equals_val(__val)); 9642: } 9642: # 3911 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _InputIterator 9642: find_if(_InputIterator __first, _InputIterator __last, 9642: _Predicate __pred) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__find_if(__first, __last, 9642: __gnu_cxx::__ops::__pred_iter(__pred)); 9642: } 9642: # 3943 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: _InputIterator 9642: find_first_of(_InputIterator __first1, _InputIterator __last1, 9642: _ForwardIterator __first2, _ForwardIterator __last2) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: for (; __first1 != __last1; ++__first1) 9642: for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter) 9642: if (*__first1 == *__iter) 9642: return __first1; 9642: return __last1; 9642: } 9642: # 3984 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: _InputIterator 9642: find_first_of(_InputIterator __first1, _InputIterator __last1, 9642: _ForwardIterator __first2, _ForwardIterator __last2, 9642: _BinaryPredicate __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: for (; __first1 != __last1; ++__first1) 9642: for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter) 9642: if (__comp(*__first1, *__iter)) 9642: return __first1; 9642: return __last1; 9642: } 9642: # 4017 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator 9642: adjacent_find(_ForwardIterator __first, _ForwardIterator __last) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__adjacent_find(__first, __last, 9642: __gnu_cxx::__ops::__iter_equal_to_iter()); 9642: } 9642: # 4043 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator 9642: adjacent_find(_ForwardIterator __first, _ForwardIterator __last, 9642: _BinaryPredicate __binary_pred) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__adjacent_find(__first, __last, 9642: __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); 9642: } 9642: # 4069 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline typename iterator_traits<_InputIterator>::difference_type 9642: count(_InputIterator __first, _InputIterator __last, const _Tp& __value) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__count_if(__first, __last, 9642: __gnu_cxx::__ops::__iter_equals_val(__value)); 9642: } 9642: # 4093 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline typename iterator_traits<_InputIterator>::difference_type 9642: count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__count_if(__first, __last, 9642: __gnu_cxx::__ops::__pred_iter(__pred)); 9642: } 9642: # 4134 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator1 9642: search(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _ForwardIterator2 __last2) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__search(__first1, __last1, __first2, __last2, 9642: __gnu_cxx::__ops::__iter_equal_to_iter()); 9642: } 9642: # 4174 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator1 9642: search(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _ForwardIterator2 __last2, 9642: _BinaryPredicate __predicate) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__search(__first1, __last1, __first2, __last2, 9642: __gnu_cxx::__ops::__iter_comp_iter(__predicate)); 9642: } 9642: # 4210 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator 9642: search_n(_ForwardIterator __first, _ForwardIterator __last, 9642: _Integer __count, const _Tp& __val) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__search_n(__first, __last, __count, 9642: __gnu_cxx::__ops::__iter_equals_val(__val)); 9642: } 9642: # 4244 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator 9642: search_n(_ForwardIterator __first, _ForwardIterator __last, 9642: _Integer __count, const _Tp& __val, 9642: _BinaryPredicate __binary_pred) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__search_n(__first, __last, __count, 9642: __gnu_cxx::__ops::__iter_comp_val(__binary_pred, __val)); 9642: } 9642: # 4270 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator 9642: search(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Searcher& __searcher) 9642: { return __searcher(__first, __last).first; } 9642: # 4294 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: _OutputIterator 9642: transform(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, _UnaryOperation __unary_op) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: for (; __first != __last; ++__first, (void)++__result) 9642: *__result = __unary_op(*__first); 9642: return __result; 9642: } 9642: # 4332 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: _OutputIterator 9642: transform(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _OutputIterator __result, 9642: _BinaryOperation __binary_op) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: for (; __first1 != __last1; ++__first1, (void)++__first2, ++__result) 9642: *__result = __binary_op(*__first1, *__first2); 9642: return __result; 9642: } 9642: # 4366 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: void 9642: replace(_ForwardIterator __first, _ForwardIterator __last, 9642: const _Tp& __old_value, const _Tp& __new_value) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: for (; __first != __last; ++__first) 9642: if (*__first == __old_value) 9642: *__first = __new_value; 9642: } 9642: # 4399 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: void 9642: replace_if(_ForwardIterator __first, _ForwardIterator __last, 9642: _Predicate __pred, const _Tp& __new_value) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: for (; __first != __last; ++__first) 9642: if (__pred(*__first)) 9642: *__first = __new_value; 9642: } 9642: # 4431 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: void 9642: generate(_ForwardIterator __first, _ForwardIterator __last, 9642: _Generator __gen) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: for (; __first != __last; ++__first) 9642: *__first = __gen(); 9642: } 9642: # 4464 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: _OutputIterator 9642: generate_n(_OutputIterator __first, _Size __n, _Generator __gen) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: typedef __decltype(std::__size_to_integer(__n)) _IntSize; 9642: for (_IntSize __niter = std::__size_to_integer(__n); 9642: __niter > 0; --__niter, (void) ++__first) 9642: *__first = __gen(); 9642: return __first; 9642: } 9642: # 4499 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _OutputIterator 9642: unique_copy(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: if (__first == __last) 9642: return __result; 9642: return std::__unique_copy(__first, __last, __result, 9642: __gnu_cxx::__ops::__iter_equal_to_iter(), 9642: std::__iterator_category(__first), 9642: std::__iterator_category(__result)); 9642: } 9642: # 4539 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _OutputIterator 9642: unique_copy(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, 9642: _BinaryPredicate __binary_pred) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: if (__first == __last) 9642: return __result; 9642: return std::__unique_copy(__first, __last, __result, 9642: __gnu_cxx::__ops::__iter_comp_iter(__binary_pred), 9642: std::__iterator_category(__first), 9642: std::__iterator_category(__result)); 9642: } 9642: # 4578 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: __attribute__ ((__deprecated__ ("use '" "std::shuffle" "' instead"))) 9642: inline void 9642: random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last) 9642: { 9642: 9642: 9642: 9642: ; 9642: 9642: if (__first != __last) 9642: for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) 9642: { 9642: 9642: _RandomAccessIterator __j = __first 9642: + std::rand() % ((__i - __first) + 1); 9642: if (__i != __j) 9642: std::iter_swap(__i, __j); 9642: } 9642: } 9642: # 4617 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: __attribute__ ((__deprecated__ ("use '" "std::shuffle" "' instead"))) 9642: void 9642: random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last, 9642: 9642: _RandomNumberGenerator&& __rand) 9642: 9642: 9642: 9642: { 9642: 9642: 9642: 9642: ; 9642: 9642: if (__first == __last) 9642: return; 9642: for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) 9642: { 9642: _RandomAccessIterator __j = __first + __rand((__i - __first) + 1); 9642: if (__i != __j) 9642: std::iter_swap(__i, __j); 9642: } 9642: } 9642: # 4659 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _ForwardIterator 9642: partition(_ForwardIterator __first, _ForwardIterator __last, 9642: _Predicate __pred) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: return std::__partition(__first, __last, __pred, 9642: std::__iterator_category(__first)); 9642: } 9642: # 4694 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline void 9642: partial_sort(_RandomAccessIterator __first, 9642: _RandomAccessIterator __middle, 9642: _RandomAccessIterator __last) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: 9642: std::__partial_sort(__first, __middle, __last, 9642: __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: # 4733 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline void 9642: partial_sort(_RandomAccessIterator __first, 9642: _RandomAccessIterator __middle, 9642: _RandomAccessIterator __last, 9642: _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: 9642: std::__partial_sort(__first, __middle, __last, 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: # 4770 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline void 9642: nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth, 9642: _RandomAccessIterator __last) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: 9642: if (__first == __last || __nth == __last) 9642: return; 9642: 9642: std::__introselect(__first, __nth, __last, 9642: std::__lg(__last - __first) * 2, 9642: __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: # 4810 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline void 9642: nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth, 9642: _RandomAccessIterator __last, _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: 9642: if (__first == __last || __nth == __last) 9642: return; 9642: 9642: std::__introselect(__first, __nth, __last, 9642: std::__lg(__last - __first) * 2, 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: # 4848 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline void 9642: sort(_RandomAccessIterator __first, _RandomAccessIterator __last) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: # 4879 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline void 9642: sort(_RandomAccessIterator __first, _RandomAccessIterator __last, 9642: _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: std::__sort(__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: 9642: template 9642: 9642: _OutputIterator 9642: __merge(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2, 9642: _OutputIterator __result, _Compare __comp) 9642: { 9642: while (__first1 != __last1 && __first2 != __last2) 9642: { 9642: if (__comp(__first2, __first1)) 9642: { 9642: *__result = *__first2; 9642: ++__first2; 9642: } 9642: else 9642: { 9642: *__result = *__first1; 9642: ++__first1; 9642: } 9642: ++__result; 9642: } 9642: return std::copy(__first2, __last2, 9642: std::copy(__first1, __last1, __result)); 9642: } 9642: # 4942 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _OutputIterator 9642: merge(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2, 9642: _OutputIterator __result) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: ; 9642: 9642: return std::__merge(__first1, __last1, 9642: __first2, __last2, __result, 9642: __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: # 4993 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _OutputIterator 9642: merge(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2, 9642: _OutputIterator __result, _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: ; 9642: 9642: return std::__merge(__first1, __last1, 9642: __first2, __last2, __result, 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: 9642: template 9642: inline void 9642: __stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, 9642: _Compare __comp) 9642: { 9642: typedef typename iterator_traits<_RandomAccessIterator>::value_type 9642: _ValueType; 9642: typedef typename iterator_traits<_RandomAccessIterator>::difference_type 9642: _DistanceType; 9642: 9642: if (__first == __last) 9642: return; 9642: 9642: 9642: typedef _Temporary_buffer<_RandomAccessIterator, _ValueType> _TmpBuf; 9642: 9642: 9642: _TmpBuf __buf(__first, (__last - __first + 1) / 2); 9642: 9642: if (__builtin_expect(__buf.requested_size() == __buf.size(), true)) 9642: std::__stable_sort_adaptive(__first, 9642: __first + _DistanceType(__buf.size()), 9642: __last, __buf.begin(), __comp); 9642: else if (__builtin_expect(__buf.begin() == 0, false)) 9642: std::__inplace_stable_sort(__first, __last, __comp); 9642: else 9642: std::__stable_sort_adaptive_resize(__first, __last, __buf.begin(), 9642: _DistanceType(__buf.size()), __comp); 9642: 9642: 9642: 9642: } 9642: # 5071 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: inline void 9642: stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: std::__stable_sort(__first, __last, 9642: __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: # 5105 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: inline void 9642: stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, 9642: _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: std::__stable_sort(__first, __last, 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: 9642: template 9642: 9642: _OutputIterator 9642: __set_union(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2, 9642: _OutputIterator __result, _Compare __comp) 9642: { 9642: while (__first1 != __last1 && __first2 != __last2) 9642: { 9642: if (__comp(__first1, __first2)) 9642: { 9642: *__result = *__first1; 9642: ++__first1; 9642: } 9642: else if (__comp(__first2, __first1)) 9642: { 9642: *__result = *__first2; 9642: ++__first2; 9642: } 9642: else 9642: { 9642: *__result = *__first1; 9642: ++__first1; 9642: ++__first2; 9642: } 9642: ++__result; 9642: } 9642: return std::copy(__first2, __last2, 9642: std::copy(__first1, __last1, __result)); 9642: } 9642: # 5175 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _OutputIterator 9642: set_union(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2, 9642: _OutputIterator __result) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: ; 9642: 9642: return std::__set_union(__first1, __last1, 9642: __first2, __last2, __result, 9642: __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: # 5226 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _OutputIterator 9642: set_union(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2, 9642: _OutputIterator __result, _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: ; 9642: 9642: return std::__set_union(__first1, __last1, 9642: __first2, __last2, __result, 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: 9642: template 9642: 9642: _OutputIterator 9642: __set_intersection(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2, 9642: _OutputIterator __result, _Compare __comp) 9642: { 9642: while (__first1 != __last1 && __first2 != __last2) 9642: if (__comp(__first1, __first2)) 9642: ++__first1; 9642: else if (__comp(__first2, __first1)) 9642: ++__first2; 9642: else 9642: { 9642: *__result = *__first1; 9642: ++__first1; 9642: ++__first2; 9642: ++__result; 9642: } 9642: return __result; 9642: } 9642: # 5299 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _OutputIterator 9642: set_intersection(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2, 9642: _OutputIterator __result) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: ; 9642: 9642: return std::__set_intersection(__first1, __last1, 9642: __first2, __last2, __result, 9642: __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: # 5349 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _OutputIterator 9642: set_intersection(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2, 9642: _OutputIterator __result, _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: ; 9642: 9642: return std::__set_intersection(__first1, __last1, 9642: __first2, __last2, __result, 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: 9642: template 9642: 9642: _OutputIterator 9642: __set_difference(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2, 9642: _OutputIterator __result, _Compare __comp) 9642: { 9642: while (__first1 != __last1 && __first2 != __last2) 9642: if (__comp(__first1, __first2)) 9642: { 9642: *__result = *__first1; 9642: ++__first1; 9642: ++__result; 9642: } 9642: else if (__comp(__first2, __first1)) 9642: ++__first2; 9642: else 9642: { 9642: ++__first1; 9642: ++__first2; 9642: } 9642: return std::copy(__first1, __last1, __result); 9642: } 9642: # 5424 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _OutputIterator 9642: set_difference(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2, 9642: _OutputIterator __result) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: ; 9642: 9642: return std::__set_difference(__first1, __last1, 9642: __first2, __last2, __result, 9642: __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: # 5476 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _OutputIterator 9642: set_difference(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2, 9642: _OutputIterator __result, _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: ; 9642: 9642: return std::__set_difference(__first1, __last1, 9642: __first2, __last2, __result, 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: 9642: template 9642: 9642: _OutputIterator 9642: __set_symmetric_difference(_InputIterator1 __first1, 9642: _InputIterator1 __last1, 9642: _InputIterator2 __first2, 9642: _InputIterator2 __last2, 9642: _OutputIterator __result, 9642: _Compare __comp) 9642: { 9642: while (__first1 != __last1 && __first2 != __last2) 9642: if (__comp(__first1, __first2)) 9642: { 9642: *__result = *__first1; 9642: ++__first1; 9642: ++__result; 9642: } 9642: else if (__comp(__first2, __first1)) 9642: { 9642: *__result = *__first2; 9642: ++__first2; 9642: ++__result; 9642: } 9642: else 9642: { 9642: ++__first1; 9642: ++__first2; 9642: } 9642: return std::copy(__first2, __last2, 9642: std::copy(__first1, __last1, __result)); 9642: } 9642: # 5557 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _OutputIterator 9642: set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2, 9642: _OutputIterator __result) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: ; 9642: 9642: return std::__set_symmetric_difference(__first1, __last1, 9642: __first2, __last2, __result, 9642: __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: # 5609 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: 9642: inline _OutputIterator 9642: set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _InputIterator2 __last2, 9642: _OutputIterator __result, 9642: _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: ; 9642: ; 9642: 9642: return std::__set_symmetric_difference(__first1, __last1, 9642: __first2, __last2, __result, 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: 9642: template 9642: constexpr 9642: _ForwardIterator 9642: __min_element(_ForwardIterator __first, _ForwardIterator __last, 9642: _Compare __comp) 9642: { 9642: if (__first == __last) 9642: return __first; 9642: _ForwardIterator __result = __first; 9642: while (++__first != __last) 9642: if (__comp(__first, __result)) 9642: __result = __first; 9642: return __result; 9642: } 9642: # 5663 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: constexpr 9642: _ForwardIterator 9642: inline min_element(_ForwardIterator __first, _ForwardIterator __last) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__min_element(__first, __last, 9642: __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: # 5688 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: constexpr 9642: inline _ForwardIterator 9642: min_element(_ForwardIterator __first, _ForwardIterator __last, 9642: _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__min_element(__first, __last, 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: 9642: template 9642: constexpr 9642: _ForwardIterator 9642: __max_element(_ForwardIterator __first, _ForwardIterator __last, 9642: _Compare __comp) 9642: { 9642: if (__first == __last) return __first; 9642: _ForwardIterator __result = __first; 9642: while (++__first != __last) 9642: if (__comp(__result, __first)) 9642: __result = __first; 9642: return __result; 9642: } 9642: # 5727 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: constexpr 9642: inline _ForwardIterator 9642: max_element(_ForwardIterator __first, _ForwardIterator __last) 9642: { 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__max_element(__first, __last, 9642: __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: # 5752 "/usr/include/c++/13/bits/stl_algo.h" 3 9642: template 9642: constexpr 9642: inline _ForwardIterator 9642: max_element(_ForwardIterator __first, _ForwardIterator __last, 9642: _Compare __comp) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: ; 9642: 9642: return std::__max_element(__first, __last, 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: 9642: 9642: 9642: template 9642: constexpr 9642: inline _Tp 9642: min(initializer_list<_Tp> __l) 9642: { 9642: ; 9642: return *std::__min_element(__l.begin(), __l.end(), 9642: __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: 9642: template 9642: constexpr 9642: inline _Tp 9642: min(initializer_list<_Tp> __l, _Compare __comp) 9642: { 9642: ; 9642: return *std::__min_element(__l.begin(), __l.end(), 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: 9642: template 9642: constexpr 9642: inline _Tp 9642: max(initializer_list<_Tp> __l) 9642: { 9642: ; 9642: return *std::__max_element(__l.begin(), __l.end(), 9642: __gnu_cxx::__ops::__iter_less_iter()); 9642: } 9642: 9642: template 9642: constexpr 9642: inline _Tp 9642: max(initializer_list<_Tp> __l, _Compare __comp) 9642: { 9642: ; 9642: return *std::__max_element(__l.begin(), __l.end(), 9642: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: _RandomAccessIterator 9642: __sample(_InputIterator __first, _InputIterator __last, input_iterator_tag, 9642: _RandomAccessIterator __out, random_access_iterator_tag, 9642: _Size __n, _UniformRandomBitGenerator&& __g) 9642: { 9642: using __distrib_type = uniform_int_distribution<_Size>; 9642: using __param_type = typename __distrib_type::param_type; 9642: __distrib_type __d{}; 9642: _Size __sample_sz = 0; 9642: while (__first != __last && __sample_sz != __n) 9642: { 9642: __out[__sample_sz++] = *__first; 9642: ++__first; 9642: } 9642: for (auto __pop_sz = __sample_sz; __first != __last; 9642: ++__first, (void) ++__pop_sz) 9642: { 9642: const auto __k = __d(__g, __param_type{0, __pop_sz}); 9642: if (__k < __n) 9642: __out[__k] = *__first; 9642: } 9642: return __out + __sample_sz; 9642: } 9642: 9642: 9642: template 9642: _OutputIterator 9642: __sample(_ForwardIterator __first, _ForwardIterator __last, 9642: forward_iterator_tag, 9642: _OutputIterator __out, _Cat, 9642: _Size __n, _UniformRandomBitGenerator&& __g) 9642: { 9642: using __distrib_type = uniform_int_distribution<_Size>; 9642: using __param_type = typename __distrib_type::param_type; 9642: using _USize = make_unsigned_t<_Size>; 9642: using _Gen = remove_reference_t<_UniformRandomBitGenerator>; 9642: using __uc_type = common_type_t; 9642: 9642: if (__first == __last) 9642: return __out; 9642: 9642: __distrib_type __d{}; 9642: _Size __unsampled_sz = std::distance(__first, __last); 9642: __n = std::min(__n, __unsampled_sz); 9642: 9642: 9642: 9642: 9642: const __uc_type __urngrange = __g.max() - __g.min(); 9642: if (__urngrange / __uc_type(__unsampled_sz) >= __uc_type(__unsampled_sz)) 9642: 9642: 9642: { 9642: while (__n != 0 && __unsampled_sz >= 2) 9642: { 9642: const pair<_Size, _Size> __p = 9642: __gen_two_uniform_ints(__unsampled_sz, __unsampled_sz - 1, __g); 9642: 9642: --__unsampled_sz; 9642: if (__p.first < __n) 9642: { 9642: *__out++ = *__first; 9642: --__n; 9642: } 9642: 9642: ++__first; 9642: 9642: if (__n == 0) break; 9642: 9642: --__unsampled_sz; 9642: if (__p.second < __n) 9642: { 9642: *__out++ = *__first; 9642: --__n; 9642: } 9642: 9642: ++__first; 9642: } 9642: } 9642: 9642: 9642: 9642: for (; __n != 0; ++__first) 9642: if (__d(__g, __param_type{0, --__unsampled_sz}) < __n) 9642: { 9642: *__out++ = *__first; 9642: --__n; 9642: } 9642: return __out; 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: _SampleIterator 9642: sample(_PopulationIterator __first, _PopulationIterator __last, 9642: _SampleIterator __out, _Distance __n, 9642: _UniformRandomBitGenerator&& __g) 9642: { 9642: using __pop_cat = typename 9642: std::iterator_traits<_PopulationIterator>::iterator_category; 9642: using __samp_cat = typename 9642: std::iterator_traits<_SampleIterator>::iterator_category; 9642: 9642: static_assert( 9642: __or_, 9642: is_convertible<__samp_cat, random_access_iterator_tag>>::value, 9642: "output range must use a RandomAccessIterator when input range" 9642: " does not meet the ForwardIterator requirements"); 9642: 9642: static_assert(is_integral<_Distance>::value, 9642: "sample size must be an integer type"); 9642: 9642: typename iterator_traits<_PopulationIterator>::difference_type __d = __n; 9642: return std:: 9642: __sample(__first, __last, __pop_cat{}, __out, __samp_cat{}, __d, 9642: std::forward<_UniformRandomBitGenerator>(__g)); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 68 "/usr/include/c++/13/functional" 2 3 9642: # 79 "/usr/include/c++/13/functional" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: template struct _Placeholder { }; 9642: # 108 "/usr/include/c++/13/functional" 3 9642: template 9642: inline invoke_result_t<_Callable, _Args...> 9642: invoke(_Callable&& __fn, _Args&&... __args) 9642: noexcept(is_nothrow_invocable_v<_Callable, _Args...>) 9642: { 9642: return std::__invoke(std::forward<_Callable>(__fn), 9642: std::forward<_Args>(__args)...); 9642: } 9642: # 141 "/usr/include/c++/13/functional" 3 9642: template::value> 9642: class _Mem_fn_base 9642: : public _Mem_fn_traits<_MemFunPtr>::__maybe_type 9642: { 9642: using _Traits = _Mem_fn_traits<_MemFunPtr>; 9642: 9642: using _Arity = typename _Traits::__arity; 9642: using _Varargs = typename _Traits::__vararg; 9642: 9642: template 9642: friend struct _Bind_check_arity; 9642: 9642: _MemFunPtr _M_pmf; 9642: 9642: public: 9642: 9642: using result_type = typename _Traits::__result_type; 9642: 9642: explicit constexpr 9642: _Mem_fn_base(_MemFunPtr __pmf) noexcept : _M_pmf(__pmf) { } 9642: 9642: template 9642: 9642: auto 9642: operator()(_Args&&... __args) const 9642: noexcept(noexcept( 9642: std::__invoke(_M_pmf, std::forward<_Args>(__args)...))) 9642: -> decltype(std::__invoke(_M_pmf, std::forward<_Args>(__args)...)) 9642: { return std::__invoke(_M_pmf, std::forward<_Args>(__args)...); } 9642: }; 9642: 9642: 9642: template 9642: class _Mem_fn_base<_MemObjPtr, false> 9642: { 9642: using _Arity = integral_constant; 9642: using _Varargs = false_type; 9642: 9642: template 9642: friend struct _Bind_check_arity; 9642: 9642: _MemObjPtr _M_pm; 9642: 9642: public: 9642: explicit constexpr 9642: _Mem_fn_base(_MemObjPtr __pm) noexcept : _M_pm(__pm) { } 9642: 9642: template 9642: 9642: auto 9642: operator()(_Tp&& __obj) const 9642: noexcept(noexcept(std::__invoke(_M_pm, std::forward<_Tp>(__obj)))) 9642: -> decltype(std::__invoke(_M_pm, std::forward<_Tp>(__obj))) 9642: { return std::__invoke(_M_pm, std::forward<_Tp>(__obj)); } 9642: }; 9642: 9642: template 9642: struct _Mem_fn; 9642: 9642: template 9642: struct _Mem_fn<_Res _Class::*> 9642: : _Mem_fn_base<_Res _Class::*> 9642: { 9642: using _Mem_fn_base<_Res _Class::*>::_Mem_fn_base; 9642: }; 9642: # 234 "/usr/include/c++/13/functional" 3 9642: template 9642: 9642: inline _Mem_fn<_Tp _Class::*> 9642: mem_fn(_Tp _Class::* __pm) noexcept 9642: { 9642: return _Mem_fn<_Tp _Class::*>(__pm); 9642: } 9642: # 253 "/usr/include/c++/13/functional" 3 9642: template 9642: struct is_bind_expression 9642: : public false_type { }; 9642: # 265 "/usr/include/c++/13/functional" 3 9642: template 9642: struct is_placeholder 9642: : public integral_constant 9642: { }; 9642: 9642: 9642: template inline constexpr bool is_bind_expression_v 9642: = is_bind_expression<_Tp>::value; 9642: template inline constexpr int is_placeholder_v 9642: = is_placeholder<_Tp>::value; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace placeholders 9642: { 9642: # 294 "/usr/include/c++/13/functional" 3 9642: inline const _Placeholder<1> _1; 9642: inline const _Placeholder<2> _2; 9642: inline const _Placeholder<3> _3; 9642: inline const _Placeholder<4> _4; 9642: inline const _Placeholder<5> _5; 9642: inline const _Placeholder<6> _6; 9642: inline const _Placeholder<7> _7; 9642: inline const _Placeholder<8> _8; 9642: inline const _Placeholder<9> _9; 9642: inline const _Placeholder<10> _10; 9642: inline const _Placeholder<11> _11; 9642: inline const _Placeholder<12> _12; 9642: inline const _Placeholder<13> _13; 9642: inline const _Placeholder<14> _14; 9642: inline const _Placeholder<15> _15; 9642: inline const _Placeholder<16> _16; 9642: inline const _Placeholder<17> _17; 9642: inline const _Placeholder<18> _18; 9642: inline const _Placeholder<19> _19; 9642: inline const _Placeholder<20> _20; 9642: inline const _Placeholder<21> _21; 9642: inline const _Placeholder<22> _22; 9642: inline const _Placeholder<23> _23; 9642: inline const _Placeholder<24> _24; 9642: inline const _Placeholder<25> _25; 9642: inline const _Placeholder<26> _26; 9642: inline const _Placeholder<27> _27; 9642: inline const _Placeholder<28> _28; 9642: inline const _Placeholder<29> _29; 9642: 9642: 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct is_placeholder<_Placeholder<_Num> > 9642: : public integral_constant 9642: { }; 9642: 9642: template 9642: struct is_placeholder > 9642: : public integral_constant 9642: { }; 9642: 9642: 9642: 9642: 9642: template 9642: using _Safe_tuple_element_t 9642: = typename enable_if<(__i < tuple_size<_Tuple>::value), 9642: tuple_element<__i, _Tuple>>::type::type; 9642: # 362 "/usr/include/c++/13/functional" 3 9642: template::value, 9642: bool _IsPlaceholder = (is_placeholder<_Arg>::value > 0)> 9642: class _Mu; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: class _Mu, false, false> 9642: { 9642: public: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: _Tp& 9642: operator()(_CVRef& __arg, _Tuple&) const volatile 9642: { return __arg.get(); } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: class _Mu<_Arg, true, false> 9642: { 9642: public: 9642: template 9642: 9642: auto 9642: operator()(_CVArg& __arg, 9642: tuple<_Args...>& __tuple) const volatile 9642: -> decltype(__arg(declval<_Args>()...)) 9642: { 9642: 9642: typedef typename _Build_index_tuple::__type 9642: _Indexes; 9642: return this->__call(__arg, __tuple, _Indexes()); 9642: } 9642: 9642: private: 9642: 9642: 9642: template 9642: 9642: auto 9642: __call(_CVArg& __arg, tuple<_Args...>& __tuple, 9642: const _Index_tuple<_Indexes...>&) const volatile 9642: -> decltype(__arg(declval<_Args>()...)) 9642: { 9642: return __arg(std::get<_Indexes>(std::move(__tuple))...); 9642: } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: class _Mu<_Arg, false, true> 9642: { 9642: public: 9642: template 9642: 9642: _Safe_tuple_element_t<(is_placeholder<_Arg>::value - 1), _Tuple>&& 9642: operator()(const volatile _Arg&, _Tuple& __tuple) const volatile 9642: { 9642: return 9642: ::std::get<(is_placeholder<_Arg>::value - 1)>(std::move(__tuple)); 9642: } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: class _Mu<_Arg, false, false> 9642: { 9642: public: 9642: template 9642: 9642: _CVArg&& 9642: operator()(_CVArg&& __arg, _Tuple&) const volatile 9642: { return std::forward<_CVArg>(__arg); } 9642: }; 9642: 9642: 9642: template 9642: inline auto 9642: __volget(volatile tuple<_Tp...>& __tuple) 9642: -> __tuple_element_t<_Ind, tuple<_Tp...>> volatile& 9642: { return std::get<_Ind>(const_cast&>(__tuple)); } 9642: 9642: 9642: template 9642: inline auto 9642: __volget(const volatile tuple<_Tp...>& __tuple) 9642: -> __tuple_element_t<_Ind, tuple<_Tp...>> const volatile& 9642: { return std::get<_Ind>(const_cast&>(__tuple)); } 9642: # 487 "/usr/include/c++/13/functional" 3 9642: template 9642: class _Bind; 9642: 9642: template 9642: class _Bind<_Functor(_Bound_args...)> 9642: : public _Weak_result_type<_Functor> 9642: { 9642: typedef typename _Build_index_tuple::__type 9642: _Bound_indexes; 9642: 9642: _Functor _M_f; 9642: tuple<_Bound_args...> _M_bound_args; 9642: 9642: 9642: template 9642: 9642: _Result 9642: __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) 9642: { 9642: return std::__invoke(_M_f, 9642: _Mu<_Bound_args>()(std::get<_Indexes>(_M_bound_args), __args)... 9642: ); 9642: } 9642: 9642: 9642: template 9642: 9642: _Result 9642: __call_c(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) const 9642: { 9642: return std::__invoke(_M_f, 9642: _Mu<_Bound_args>()(std::get<_Indexes>(_M_bound_args), __args)... 9642: ); 9642: } 9642: 9642: 9642: 9642: template 9642: _Result 9642: __call_v(tuple<_Args...>&& __args, 9642: _Index_tuple<_Indexes...>) volatile 9642: { 9642: return std::__invoke(_M_f, 9642: _Mu<_Bound_args>()(__volget<_Indexes>(_M_bound_args), __args)... 9642: ); 9642: } 9642: 9642: 9642: template 9642: _Result 9642: __call_c_v(tuple<_Args...>&& __args, 9642: _Index_tuple<_Indexes...>) const volatile 9642: { 9642: return std::__invoke(_M_f, 9642: _Mu<_Bound_args>()(__volget<_Indexes>(_M_bound_args), __args)... 9642: ); 9642: } 9642: 9642: 9642: template 9642: using _Mu_type = decltype( 9642: _Mu::type>()( 9642: std::declval<_BoundArg&>(), std::declval<_CallArgs&>()) ); 9642: 9642: template 9642: using _Res_type_impl 9642: = typename result_of< _Fn&(_Mu_type<_BArgs, _CallArgs>&&...) >::type; 9642: 9642: template 9642: using _Res_type = _Res_type_impl<_Functor, _CallArgs, _Bound_args...>; 9642: 9642: template 9642: using __dependent = typename 9642: enable_if::value+1), _Functor>::type; 9642: 9642: template class __cv_quals> 9642: using _Res_type_cv = _Res_type_impl< 9642: typename __cv_quals<__dependent<_CallArgs>>::type, 9642: _CallArgs, 9642: typename __cv_quals<_Bound_args>::type...>; 9642: 9642: public: 9642: template 9642: explicit 9642: _Bind(const _Functor& __f, _Args&&... __args) 9642: : _M_f(__f), _M_bound_args(std::forward<_Args>(__args)...) 9642: { } 9642: 9642: template 9642: explicit 9642: _Bind(_Functor&& __f, _Args&&... __args) 9642: : _M_f(std::move(__f)), _M_bound_args(std::forward<_Args>(__args)...) 9642: { } 9642: 9642: _Bind(const _Bind&) = default; 9642: _Bind(_Bind&&) = default; 9642: 9642: 9642: template>> 9642: 9642: _Result 9642: operator()(_Args&&... __args) 9642: { 9642: return this->__call<_Result>( 9642: std::forward_as_tuple(std::forward<_Args>(__args)...), 9642: _Bound_indexes()); 9642: } 9642: 9642: 9642: template, add_const>> 9642: 9642: _Result 9642: operator()(_Args&&... __args) const 9642: { 9642: return this->__call_c<_Result>( 9642: std::forward_as_tuple(std::forward<_Args>(__args)...), 9642: _Bound_indexes()); 9642: } 9642: 9642: 9642: 9642: template, add_volatile>> 9642: [[deprecated("std::bind does not support volatile in C++17")]] 9642: _Result 9642: operator()(_Args&&... __args) volatile 9642: { 9642: return this->__call_v<_Result>( 9642: std::forward_as_tuple(std::forward<_Args>(__args)...), 9642: _Bound_indexes()); 9642: } 9642: 9642: 9642: template, add_cv>> 9642: [[deprecated("std::bind does not support volatile in C++17")]] 9642: _Result 9642: operator()(_Args&&... __args) const volatile 9642: { 9642: return this->__call_c_v<_Result>( 9642: std::forward_as_tuple(std::forward<_Args>(__args)...), 9642: _Bound_indexes()); 9642: } 9642: 9642: }; 9642: 9642: 9642: template 9642: class _Bind_result; 9642: 9642: template 9642: class _Bind_result<_Result, _Functor(_Bound_args...)> 9642: { 9642: typedef typename _Build_index_tuple::__type 9642: _Bound_indexes; 9642: 9642: _Functor _M_f; 9642: tuple<_Bound_args...> _M_bound_args; 9642: 9642: 9642: template 9642: 9642: _Res 9642: __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) 9642: { 9642: return std::__invoke_r<_Res>(_M_f, _Mu<_Bound_args>() 9642: (std::get<_Indexes>(_M_bound_args), __args)...); 9642: } 9642: 9642: 9642: template 9642: 9642: _Res 9642: __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) const 9642: { 9642: return std::__invoke_r<_Res>(_M_f, _Mu<_Bound_args>() 9642: (std::get<_Indexes>(_M_bound_args), __args)...); 9642: } 9642: 9642: 9642: 9642: template 9642: _Res 9642: __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) volatile 9642: { 9642: return std::__invoke_r<_Res>(_M_f, _Mu<_Bound_args>() 9642: (__volget<_Indexes>(_M_bound_args), __args)...); 9642: } 9642: 9642: 9642: template 9642: _Res 9642: __call(tuple<_Args...>&& __args, 9642: _Index_tuple<_Indexes...>) const volatile 9642: { 9642: return std::__invoke_r<_Res>(_M_f, _Mu<_Bound_args>() 9642: (__volget<_Indexes>(_M_bound_args), __args)...); 9642: } 9642: 9642: 9642: public: 9642: typedef _Result result_type; 9642: 9642: template 9642: explicit 9642: _Bind_result(const _Functor& __f, _Args&&... __args) 9642: : _M_f(__f), _M_bound_args(std::forward<_Args>(__args)...) 9642: { } 9642: 9642: template 9642: explicit 9642: _Bind_result(_Functor&& __f, _Args&&... __args) 9642: : _M_f(std::move(__f)), _M_bound_args(std::forward<_Args>(__args)...) 9642: { } 9642: 9642: _Bind_result(const _Bind_result&) = default; 9642: _Bind_result(_Bind_result&&) = default; 9642: 9642: 9642: template 9642: 9642: result_type 9642: operator()(_Args&&... __args) 9642: { 9642: return this->__call<_Result>( 9642: std::forward_as_tuple(std::forward<_Args>(__args)...), 9642: _Bound_indexes()); 9642: } 9642: 9642: 9642: template 9642: 9642: result_type 9642: operator()(_Args&&... __args) const 9642: { 9642: return this->__call<_Result>( 9642: std::forward_as_tuple(std::forward<_Args>(__args)...), 9642: _Bound_indexes()); 9642: } 9642: 9642: 9642: 9642: template 9642: [[deprecated("std::bind does not support volatile in C++17")]] 9642: result_type 9642: operator()(_Args&&... __args) volatile 9642: { 9642: return this->__call<_Result>( 9642: std::forward_as_tuple(std::forward<_Args>(__args)...), 9642: _Bound_indexes()); 9642: } 9642: 9642: 9642: template 9642: [[deprecated("std::bind does not support volatile in C++17")]] 9642: result_type 9642: operator()(_Args&&... __args) const volatile 9642: { 9642: return this->__call<_Result>( 9642: std::forward_as_tuple(std::forward<_Args>(__args)...), 9642: _Bound_indexes()); 9642: } 9642: 9642: 9642: 9642: 9642: }; 9642: # 764 "/usr/include/c++/13/functional" 3 9642: template 9642: struct is_bind_expression<_Bind<_Signature> > 9642: : public true_type { }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct is_bind_expression > 9642: : public true_type { }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct is_bind_expression > 9642: : public true_type { }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct is_bind_expression> 9642: : public true_type { }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct is_bind_expression<_Bind_result<_Result, _Signature>> 9642: : public true_type { }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct is_bind_expression> 9642: : public true_type { }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct is_bind_expression> 9642: : public true_type { }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct is_bind_expression> 9642: : public true_type { }; 9642: 9642: template 9642: struct _Bind_check_arity { }; 9642: 9642: template 9642: struct _Bind_check_arity<_Ret (*)(_Args...), _BoundArgs...> 9642: { 9642: static_assert(sizeof...(_BoundArgs) == sizeof...(_Args), 9642: "Wrong number of arguments for function"); 9642: }; 9642: 9642: template 9642: struct _Bind_check_arity<_Ret (*)(_Args......), _BoundArgs...> 9642: { 9642: static_assert(sizeof...(_BoundArgs) >= sizeof...(_Args), 9642: "Wrong number of arguments for function"); 9642: }; 9642: 9642: template 9642: struct _Bind_check_arity<_Tp _Class::*, _BoundArgs...> 9642: { 9642: using _Arity = typename _Mem_fn<_Tp _Class::*>::_Arity; 9642: using _Varargs = typename _Mem_fn<_Tp _Class::*>::_Varargs; 9642: static_assert(_Varargs::value 9642: ? sizeof...(_BoundArgs) >= _Arity::value + 1 9642: : sizeof...(_BoundArgs) == _Arity::value + 1, 9642: "Wrong number of arguments for pointer-to-member"); 9642: }; 9642: 9642: 9642: 9642: 9642: template::type> 9642: using __is_socketlike = __or_, is_enum<_Tp2>>; 9642: 9642: template 9642: struct _Bind_helper 9642: : _Bind_check_arity::type, _BoundArgs...> 9642: { 9642: typedef typename decay<_Func>::type __func_type; 9642: typedef _Bind<__func_type(typename decay<_BoundArgs>::type...)> type; 9642: }; 9642: 9642: 9642: 9642: 9642: template 9642: struct _Bind_helper 9642: { }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline typename 9642: _Bind_helper<__is_socketlike<_Func>::value, _Func, _BoundArgs...>::type 9642: bind(_Func&& __f, _BoundArgs&&... __args) 9642: { 9642: typedef _Bind_helper __helper_type; 9642: return typename __helper_type::type(std::forward<_Func>(__f), 9642: std::forward<_BoundArgs>(__args)...); 9642: } 9642: 9642: template 9642: struct _Bindres_helper 9642: : _Bind_check_arity::type, _BoundArgs...> 9642: { 9642: typedef typename decay<_Func>::type __functor_type; 9642: typedef _Bind_result<_Result, 9642: __functor_type(typename decay<_BoundArgs>::type...)> 9642: type; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline 9642: typename _Bindres_helper<_Result, _Func, _BoundArgs...>::type 9642: bind(_Func&& __f, _BoundArgs&&... __args) 9642: { 9642: typedef _Bindres_helper<_Result, _Func, _BoundArgs...> __helper_type; 9642: return typename __helper_type::type(std::forward<_Func>(__f), 9642: std::forward<_BoundArgs>(__args)...); 9642: } 9642: # 1084 "/usr/include/c++/13/functional" 3 9642: template 9642: class _Not_fn 9642: { 9642: template 9642: using __inv_res_t = typename __invoke_result<_Fn2, _Args...>::type; 9642: 9642: template 9642: static decltype(!std::declval<_Tp>()) 9642: _S_not() noexcept(noexcept(!std::declval<_Tp>())); 9642: 9642: public: 9642: template 9642: constexpr 9642: _Not_fn(_Fn2&& __fn, int) 9642: : _M_fn(std::forward<_Fn2>(__fn)) { } 9642: 9642: _Not_fn(const _Not_fn& __fn) = default; 9642: _Not_fn(_Not_fn&& __fn) = default; 9642: ~_Not_fn() = default; 9642: # 1118 "/usr/include/c++/13/functional" 3 9642: template decltype(_S_not<__inv_res_t<_Fn &, _Args...>>()) operator()(_Args&&... __args) & noexcept(__is_nothrow_invocable<_Fn &, _Args...>::value && noexcept(_S_not<__inv_res_t<_Fn &, _Args...>>())) { return !std::__invoke(std::forward< _Fn & >(_M_fn), std::forward<_Args>(__args)...); } 9642: template decltype(_S_not<__inv_res_t<_Fn const &, _Args...>>()) operator()(_Args&&... __args) const & noexcept(__is_nothrow_invocable<_Fn const &, _Args...>::value && noexcept(_S_not<__inv_res_t<_Fn const &, _Args...>>())) { return !std::__invoke(std::forward< _Fn const & >(_M_fn), std::forward<_Args>(__args)...); } 9642: template decltype(_S_not<__inv_res_t<_Fn &&, _Args...>>()) operator()(_Args&&... __args) && noexcept(__is_nothrow_invocable<_Fn &&, _Args...>::value && noexcept(_S_not<__inv_res_t<_Fn &&, _Args...>>())) { return !std::__invoke(std::forward< _Fn && >(_M_fn), std::forward<_Args>(__args)...); } 9642: template decltype(_S_not<__inv_res_t<_Fn const &&, _Args...>>()) operator()(_Args&&... __args) const && noexcept(__is_nothrow_invocable<_Fn const &&, _Args...>::value && noexcept(_S_not<__inv_res_t<_Fn const &&, _Args...>>())) { return !std::__invoke(std::forward< _Fn const && >(_M_fn), std::forward<_Args>(__args)...); } 9642: 9642: 9642: private: 9642: _Fn _M_fn; 9642: }; 9642: 9642: template 9642: struct __is_byte_like : false_type { }; 9642: 9642: template 9642: struct __is_byte_like<_Tp, equal_to<_Tp>> 9642: : __bool_constant::value> { }; 9642: 9642: template 9642: struct __is_byte_like<_Tp, equal_to> 9642: : __bool_constant::value> { }; 9642: 9642: 9642: 9642: enum class byte : unsigned char; 9642: 9642: template<> 9642: struct __is_byte_like> 9642: : true_type { }; 9642: 9642: template<> 9642: struct __is_byte_like> 9642: : true_type { }; 9642: # 1165 "/usr/include/c++/13/functional" 3 9642: template 9642: 9642: inline auto 9642: not_fn(_Fn&& __fn) 9642: noexcept(std::is_nothrow_constructible, _Fn&&>::value) 9642: { 9642: return _Not_fn>{std::forward<_Fn>(__fn), 0}; 9642: } 9642: 9642: 9642: 9642: template> 9642: class default_searcher 9642: { 9642: public: 9642: 9642: default_searcher(_ForwardIterator1 __pat_first, 9642: _ForwardIterator1 __pat_last, 9642: _BinaryPredicate __pred = _BinaryPredicate()) 9642: : _M_m(__pat_first, __pat_last, std::move(__pred)) 9642: { } 9642: 9642: template 9642: 9642: pair<_ForwardIterator2, _ForwardIterator2> 9642: operator()(_ForwardIterator2 __first, _ForwardIterator2 __last) const 9642: { 9642: _ForwardIterator2 __first_ret = 9642: std::search(__first, __last, std::get<0>(_M_m), std::get<1>(_M_m), 9642: std::get<2>(_M_m)); 9642: auto __ret = std::make_pair(__first_ret, __first_ret); 9642: if (__ret.first != __last) 9642: std::advance(__ret.second, std::distance(std::get<0>(_M_m), 9642: std::get<1>(_M_m))); 9642: return __ret; 9642: } 9642: 9642: private: 9642: tuple<_ForwardIterator1, _ForwardIterator1, _BinaryPredicate> _M_m; 9642: }; 9642: 9642: 9642: 9642: 9642: template 9642: struct __boyer_moore_map_base 9642: { 9642: template 9642: __boyer_moore_map_base(_RAIter __pat, size_t __patlen, 9642: _Hash&& __hf, _Pred&& __pred) 9642: : _M_bad_char{ __patlen, std::move(__hf), std::move(__pred) } 9642: { 9642: if (__patlen > 0) 9642: for (__diff_type __i = 0; __i < __patlen - 1; ++__i) 9642: _M_bad_char[__pat[__i]] = __patlen - 1 - __i; 9642: } 9642: 9642: using __diff_type = _Tp; 9642: 9642: __diff_type 9642: _M_lookup(_Key __key, __diff_type __not_found) const 9642: { 9642: auto __iter = _M_bad_char.find(__key); 9642: if (__iter == _M_bad_char.end()) 9642: return __not_found; 9642: return __iter->second; 9642: } 9642: 9642: _Pred 9642: _M_pred() const { return _M_bad_char.key_eq(); } 9642: 9642: std::unordered_map<_Key, _Tp, _Hash, _Pred> _M_bad_char; 9642: }; 9642: 9642: template 9642: struct __boyer_moore_array_base 9642: { 9642: template 9642: __boyer_moore_array_base(_RAIter __pat, size_t __patlen, 9642: _Unused&&, _Pred&& __pred) 9642: : _M_bad_char{ array<_Tp, _Len>{}, std::move(__pred) } 9642: { 9642: std::get<0>(_M_bad_char).fill(__patlen); 9642: if (__patlen > 0) 9642: for (__diff_type __i = 0; __i < __patlen - 1; ++__i) 9642: { 9642: auto __ch = __pat[__i]; 9642: using _UCh = make_unsigned_t; 9642: auto __uch = static_cast<_UCh>(__ch); 9642: std::get<0>(_M_bad_char)[__uch] = __patlen - 1 - __i; 9642: } 9642: } 9642: 9642: using __diff_type = _Tp; 9642: 9642: template 9642: __diff_type 9642: _M_lookup(_Key __key, __diff_type __not_found) const 9642: { 9642: auto __ukey = static_cast>(__key); 9642: if (__ukey >= _Len) 9642: return __not_found; 9642: return std::get<0>(_M_bad_char)[__ukey]; 9642: } 9642: 9642: const _Pred& 9642: _M_pred() const { return std::get<1>(_M_bad_char); } 9642: 9642: tuple, _Pred> _M_bad_char; 9642: }; 9642: 9642: 9642: 9642: template::value_type, 9642: typename _Diff = typename iterator_traits<_RAIter>::difference_type> 9642: using __boyer_moore_base_t 9642: = __conditional_t<__is_byte_like<_Val, _Pred>::value, 9642: __boyer_moore_array_base<_Diff, 256, _Pred>, 9642: __boyer_moore_map_base<_Val, _Diff, _Hash, _Pred>>; 9642: 9642: template::value_type>, 9642: typename _BinaryPredicate = equal_to<>> 9642: class boyer_moore_searcher 9642: : __boyer_moore_base_t<_RAIter, _Hash, _BinaryPredicate> 9642: { 9642: using _Base = __boyer_moore_base_t<_RAIter, _Hash, _BinaryPredicate>; 9642: using typename _Base::__diff_type; 9642: 9642: public: 9642: boyer_moore_searcher(_RAIter __pat_first, _RAIter __pat_last, 9642: _Hash __hf = _Hash(), 9642: _BinaryPredicate __pred = _BinaryPredicate()); 9642: 9642: template 9642: pair<_RandomAccessIterator2, _RandomAccessIterator2> 9642: operator()(_RandomAccessIterator2 __first, 9642: _RandomAccessIterator2 __last) const; 9642: 9642: private: 9642: bool 9642: _M_is_prefix(_RAIter __word, __diff_type __len, 9642: __diff_type __pos) 9642: { 9642: const auto& __pred = this->_M_pred(); 9642: __diff_type __suffixlen = __len - __pos; 9642: for (__diff_type __i = 0; __i < __suffixlen; ++__i) 9642: if (!__pred(__word[__i], __word[__pos + __i])) 9642: return false; 9642: return true; 9642: } 9642: 9642: __diff_type 9642: _M_suffix_length(_RAIter __word, __diff_type __len, 9642: __diff_type __pos) 9642: { 9642: const auto& __pred = this->_M_pred(); 9642: __diff_type __i = 0; 9642: while (__pred(__word[__pos - __i], __word[__len - 1 - __i]) 9642: && __i < __pos) 9642: { 9642: ++__i; 9642: } 9642: return __i; 9642: } 9642: 9642: template 9642: __diff_type 9642: _M_bad_char_shift(_Tp __c) const 9642: { return this->_M_lookup(__c, _M_pat_end - _M_pat); } 9642: 9642: _RAIter _M_pat; 9642: _RAIter _M_pat_end; 9642: std::vector<__diff_type> _M_good_suffix; 9642: }; 9642: 9642: template::value_type>, 9642: typename _BinaryPredicate = equal_to<>> 9642: class boyer_moore_horspool_searcher 9642: : __boyer_moore_base_t<_RAIter, _Hash, _BinaryPredicate> 9642: { 9642: using _Base = __boyer_moore_base_t<_RAIter, _Hash, _BinaryPredicate>; 9642: using typename _Base::__diff_type; 9642: 9642: public: 9642: boyer_moore_horspool_searcher(_RAIter __pat, 9642: _RAIter __pat_end, 9642: _Hash __hf = _Hash(), 9642: _BinaryPredicate __pred 9642: = _BinaryPredicate()) 9642: : _Base(__pat, __pat_end - __pat, std::move(__hf), std::move(__pred)), 9642: _M_pat(__pat), _M_pat_end(__pat_end) 9642: { } 9642: 9642: template 9642: pair<_RandomAccessIterator2, _RandomAccessIterator2> 9642: operator()(_RandomAccessIterator2 __first, 9642: _RandomAccessIterator2 __last) const 9642: { 9642: const auto& __pred = this->_M_pred(); 9642: auto __patlen = _M_pat_end - _M_pat; 9642: if (__patlen == 0) 9642: return std::make_pair(__first, __first); 9642: auto __len = __last - __first; 9642: while (__len >= __patlen) 9642: { 9642: for (auto __scan = __patlen - 1; 9642: __pred(__first[__scan], _M_pat[__scan]); --__scan) 9642: if (__scan == 0) 9642: return std::make_pair(__first, __first + __patlen); 9642: auto __shift = _M_bad_char_shift(__first[__patlen - 1]); 9642: __len -= __shift; 9642: __first += __shift; 9642: } 9642: return std::make_pair(__last, __last); 9642: } 9642: 9642: private: 9642: template 9642: __diff_type 9642: _M_bad_char_shift(_Tp __c) const 9642: { return this->_M_lookup(__c, _M_pat_end - _M_pat); } 9642: 9642: _RAIter _M_pat; 9642: _RAIter _M_pat_end; 9642: }; 9642: 9642: template 9642: boyer_moore_searcher<_RAIter, _Hash, _BinaryPredicate>:: 9642: boyer_moore_searcher(_RAIter __pat, _RAIter __pat_end, 9642: _Hash __hf, _BinaryPredicate __pred) 9642: : _Base(__pat, __pat_end - __pat, std::move(__hf), std::move(__pred)), 9642: _M_pat(__pat), _M_pat_end(__pat_end), _M_good_suffix(__pat_end - __pat) 9642: { 9642: auto __patlen = __pat_end - __pat; 9642: if (__patlen == 0) 9642: return; 9642: __diff_type __last_prefix = __patlen - 1; 9642: for (__diff_type __p = __patlen - 1; __p >= 0; --__p) 9642: { 9642: if (_M_is_prefix(__pat, __patlen, __p + 1)) 9642: __last_prefix = __p + 1; 9642: _M_good_suffix[__p] = __last_prefix + (__patlen - 1 - __p); 9642: } 9642: for (__diff_type __p = 0; __p < __patlen - 1; ++__p) 9642: { 9642: auto __slen = _M_suffix_length(__pat, __patlen, __p); 9642: auto __pos = __patlen - 1 - __slen; 9642: if (!__pred(__pat[__p - __slen], __pat[__pos])) 9642: _M_good_suffix[__pos] = __patlen - 1 - __p + __slen; 9642: } 9642: } 9642: 9642: template 9642: template 9642: pair<_RandomAccessIterator2, _RandomAccessIterator2> 9642: boyer_moore_searcher<_RAIter, _Hash, _BinaryPredicate>:: 9642: operator()(_RandomAccessIterator2 __first, 9642: _RandomAccessIterator2 __last) const 9642: { 9642: auto __patlen = _M_pat_end - _M_pat; 9642: if (__patlen == 0) 9642: return std::make_pair(__first, __first); 9642: const auto& __pred = this->_M_pred(); 9642: __diff_type __i = __patlen - 1; 9642: auto __stringlen = __last - __first; 9642: while (__i < __stringlen) 9642: { 9642: __diff_type __j = __patlen - 1; 9642: while (__j >= 0 && __pred(__first[__i], _M_pat[__j])) 9642: { 9642: --__i; 9642: --__j; 9642: } 9642: if (__j < 0) 9642: { 9642: const auto __match = __first + __i + 1; 9642: return std::make_pair(__match, __match + __patlen); 9642: } 9642: __i += std::max(_M_bad_char_shift(__first[__i]), 9642: _M_good_suffix[__j]); 9642: } 9642: return std::make_pair(__last, __last); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 14 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 9642: # 1 "/usr/include/c++/13/memory" 1 3 9642: # 47 "/usr/include/c++/13/memory" 3 9642: 9642: # 48 "/usr/include/c++/13/memory" 3 9642: # 70 "/usr/include/c++/13/memory" 3 9642: # 1 "/usr/include/c++/13/bits/stl_raw_storage_iter.h" 1 3 9642: # 59 "/usr/include/c++/13/bits/stl_raw_storage_iter.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: # 64 "/usr/include/c++/13/bits/stl_raw_storage_iter.h" 3 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: 9642: 9642: 9642: 9642: 9642: template 9642: class [[__deprecated__]] raw_storage_iterator 9642: : public iterator 9642: { 9642: protected: 9642: _OutputIterator _M_iter; 9642: 9642: public: 9642: explicit 9642: raw_storage_iterator(_OutputIterator __x) 9642: : _M_iter(__x) {} 9642: 9642: raw_storage_iterator& 9642: operator*() { return *this; } 9642: 9642: raw_storage_iterator& 9642: operator=(const _Tp& __element) 9642: { 9642: std::_Construct(std::__addressof(*_M_iter), __element); 9642: return *this; 9642: } 9642: 9642: 9642: 9642: 9642: raw_storage_iterator& 9642: operator=(_Tp&& __element) 9642: { 9642: std::_Construct(std::__addressof(*_M_iter), std::move(__element)); 9642: return *this; 9642: } 9642: 9642: 9642: raw_storage_iterator& 9642: operator++() 9642: { 9642: ++_M_iter; 9642: return *this; 9642: } 9642: 9642: raw_storage_iterator 9642: operator++(int) 9642: { 9642: raw_storage_iterator __tmp = *this; 9642: ++_M_iter; 9642: return __tmp; 9642: } 9642: 9642: 9642: 9642: _OutputIterator base() const { return _M_iter; } 9642: }; 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: } 9642: # 71 "/usr/include/c++/13/memory" 2 3 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/align.h" 1 3 9642: # 39 "/usr/include/c++/13/bits/align.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 61 "/usr/include/c++/13/bits/align.h" 3 9642: inline void* 9642: align(size_t __align, size_t __size, void*& __ptr, size_t& __space) noexcept 9642: { 9642: if (__space < __size) 9642: return nullptr; 9642: const auto __intptr = reinterpret_cast(__ptr); 9642: const auto __aligned = (__intptr - 1u + __align) & -__align; 9642: const auto __diff = __aligned - __intptr; 9642: if (__diff > (__space - __size)) 9642: return nullptr; 9642: else 9642: { 9642: __space -= __diff; 9642: return __ptr = reinterpret_cast(__aligned); 9642: } 9642: } 9642: # 108 "/usr/include/c++/13/bits/align.h" 3 9642: 9642: } 9642: # 75 "/usr/include/c++/13/memory" 2 3 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/unique_ptr.h" 1 3 9642: # 53 "/usr/include/c++/13/bits/unique_ptr.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 63 "/usr/include/c++/13/bits/unique_ptr.h" 3 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: template class auto_ptr; 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct default_delete 9642: { 9642: 9642: constexpr default_delete() noexcept = default; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template>> 9642: 9642: default_delete(const default_delete<_Up>&) noexcept { } 9642: 9642: 9642: 9642: void 9642: operator()(_Tp* __ptr) const 9642: { 9642: static_assert(!is_void<_Tp>::value, 9642: "can't delete pointer to incomplete type"); 9642: static_assert(sizeof(_Tp)>0, 9642: "can't delete pointer to incomplete type"); 9642: delete __ptr; 9642: } 9642: }; 9642: # 111 "/usr/include/c++/13/bits/unique_ptr.h" 3 9642: template 9642: struct default_delete<_Tp[]> 9642: { 9642: public: 9642: 9642: constexpr default_delete() noexcept = default; 9642: # 127 "/usr/include/c++/13/bits/unique_ptr.h" 3 9642: template>> 9642: 9642: default_delete(const default_delete<_Up[]>&) noexcept { } 9642: 9642: 9642: template 9642: 9642: typename enable_if::value>::type 9642: operator()(_Up* __ptr) const 9642: { 9642: static_assert(sizeof(_Tp)>0, 9642: "can't delete pointer to incomplete type"); 9642: delete [] __ptr; 9642: } 9642: }; 9642: 9642: 9642: 9642: 9642: template 9642: class __uniq_ptr_impl 9642: { 9642: template 9642: struct _Ptr 9642: { 9642: using type = _Up*; 9642: }; 9642: 9642: template 9642: struct 9642: _Ptr<_Up, _Ep, __void_t::type::pointer>> 9642: { 9642: using type = typename remove_reference<_Ep>::type::pointer; 9642: }; 9642: 9642: public: 9642: using _DeleterConstraint = enable_if< 9642: __and_<__not_>, 9642: is_default_constructible<_Dp>>::value>; 9642: 9642: using pointer = typename _Ptr<_Tp, _Dp>::type; 9642: 9642: static_assert( !is_rvalue_reference<_Dp>::value, 9642: "unique_ptr's deleter type must be a function object type" 9642: " or an lvalue reference type" ); 9642: 9642: __uniq_ptr_impl() = default; 9642: 9642: __uniq_ptr_impl(pointer __p) : _M_t() { _M_ptr() = __p; } 9642: 9642: template 9642: 9642: __uniq_ptr_impl(pointer __p, _Del&& __d) 9642: : _M_t(__p, std::forward<_Del>(__d)) { } 9642: 9642: 9642: __uniq_ptr_impl(__uniq_ptr_impl&& __u) noexcept 9642: : _M_t(std::move(__u._M_t)) 9642: { __u._M_ptr() = nullptr; } 9642: 9642: 9642: __uniq_ptr_impl& operator=(__uniq_ptr_impl&& __u) noexcept 9642: { 9642: reset(__u.release()); 9642: _M_deleter() = std::forward<_Dp>(__u._M_deleter()); 9642: return *this; 9642: } 9642: 9642: 9642: pointer& _M_ptr() noexcept { return std::get<0>(_M_t); } 9642: 9642: pointer _M_ptr() const noexcept { return std::get<0>(_M_t); } 9642: 9642: _Dp& _M_deleter() noexcept { return std::get<1>(_M_t); } 9642: 9642: const _Dp& _M_deleter() const noexcept { return std::get<1>(_M_t); } 9642: 9642: 9642: void reset(pointer __p) noexcept 9642: { 9642: const pointer __old_p = _M_ptr(); 9642: _M_ptr() = __p; 9642: if (__old_p) 9642: _M_deleter()(__old_p); 9642: } 9642: 9642: 9642: pointer release() noexcept 9642: { 9642: pointer __p = _M_ptr(); 9642: _M_ptr() = nullptr; 9642: return __p; 9642: } 9642: 9642: 9642: void 9642: swap(__uniq_ptr_impl& __rhs) noexcept 9642: { 9642: using std::swap; 9642: swap(this->_M_ptr(), __rhs._M_ptr()); 9642: swap(this->_M_deleter(), __rhs._M_deleter()); 9642: } 9642: 9642: private: 9642: tuple _M_t; 9642: }; 9642: 9642: 9642: template ::value, 9642: bool = is_move_assignable<_Dp>::value> 9642: struct __uniq_ptr_data : __uniq_ptr_impl<_Tp, _Dp> 9642: { 9642: using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl; 9642: __uniq_ptr_data(__uniq_ptr_data&&) = default; 9642: __uniq_ptr_data& operator=(__uniq_ptr_data&&) = default; 9642: }; 9642: 9642: template 9642: struct __uniq_ptr_data<_Tp, _Dp, true, false> : __uniq_ptr_impl<_Tp, _Dp> 9642: { 9642: using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl; 9642: __uniq_ptr_data(__uniq_ptr_data&&) = default; 9642: __uniq_ptr_data& operator=(__uniq_ptr_data&&) = delete; 9642: }; 9642: 9642: template 9642: struct __uniq_ptr_data<_Tp, _Dp, false, true> : __uniq_ptr_impl<_Tp, _Dp> 9642: { 9642: using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl; 9642: __uniq_ptr_data(__uniq_ptr_data&&) = delete; 9642: __uniq_ptr_data& operator=(__uniq_ptr_data&&) = default; 9642: }; 9642: 9642: template 9642: struct __uniq_ptr_data<_Tp, _Dp, false, false> : __uniq_ptr_impl<_Tp, _Dp> 9642: { 9642: using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl; 9642: __uniq_ptr_data(__uniq_ptr_data&&) = delete; 9642: __uniq_ptr_data& operator=(__uniq_ptr_data&&) = delete; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template > 9642: class unique_ptr 9642: { 9642: template 9642: using _DeleterConstraint = 9642: typename __uniq_ptr_impl<_Tp, _Up>::_DeleterConstraint::type; 9642: 9642: __uniq_ptr_data<_Tp, _Dp> _M_t; 9642: 9642: public: 9642: using pointer = typename __uniq_ptr_impl<_Tp, _Dp>::pointer; 9642: using element_type = _Tp; 9642: using deleter_type = _Dp; 9642: 9642: private: 9642: 9642: 9642: template 9642: using __safe_conversion_up = __and_< 9642: is_convertible::pointer, pointer>, 9642: __not_> 9642: >; 9642: 9642: public: 9642: 9642: 9642: 9642: template> 9642: constexpr unique_ptr() noexcept 9642: : _M_t() 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template> 9642: 9642: explicit 9642: unique_ptr(pointer __p) noexcept 9642: : _M_t(__p) 9642: { } 9642: # 328 "/usr/include/c++/13/bits/unique_ptr.h" 3 9642: template>> 9642: 9642: unique_ptr(pointer __p, const deleter_type& __d) noexcept 9642: : _M_t(__p, __d) { } 9642: # 341 "/usr/include/c++/13/bits/unique_ptr.h" 3 9642: template>> 9642: 9642: unique_ptr(pointer __p, 9642: __enable_if_t::value, 9642: _Del&&> __d) noexcept 9642: : _M_t(__p, std::move(__d)) 9642: { } 9642: 9642: template::type> 9642: 9642: unique_ptr(pointer, 9642: __enable_if_t::value, 9642: _DelUnref&&>) = delete; 9642: 9642: 9642: template> 9642: constexpr unique_ptr(nullptr_t) noexcept 9642: : _M_t() 9642: { } 9642: 9642: 9642: 9642: 9642: unique_ptr(unique_ptr&&) = default; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template, 9642: __conditional_t::value, 9642: is_same<_Ep, _Dp>, 9642: is_convertible<_Ep, _Dp>>>> 9642: 9642: unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept 9642: : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter())) 9642: { } 9642: 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: 9642: template, is_same<_Dp, default_delete<_Tp>>>> 9642: unique_ptr(auto_ptr<_Up>&& __u) noexcept; 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: 9642: 9642: 9642: 9642: ~unique_ptr() noexcept 9642: { 9642: static_assert(__is_invocable::value, 9642: "unique_ptr's deleter must be invocable with a pointer"); 9642: auto& __ptr = _M_t._M_ptr(); 9642: if (__ptr != nullptr) 9642: get_deleter()(std::move(__ptr)); 9642: __ptr = pointer(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: unique_ptr& operator=(unique_ptr&&) = default; 9642: # 423 "/usr/include/c++/13/bits/unique_ptr.h" 3 9642: template 9642: 9642: typename enable_if< __and_< 9642: __safe_conversion_up<_Up, _Ep>, 9642: is_assignable 9642: >::value, 9642: unique_ptr&>::type 9642: operator=(unique_ptr<_Up, _Ep>&& __u) noexcept 9642: { 9642: reset(__u.release()); 9642: get_deleter() = std::forward<_Ep>(__u.get_deleter()); 9642: return *this; 9642: } 9642: 9642: 9642: 9642: unique_ptr& 9642: operator=(nullptr_t) noexcept 9642: { 9642: reset(); 9642: return *this; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: typename add_lvalue_reference::type 9642: operator*() const noexcept(noexcept(*std::declval())) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(get() != pointer())) __builtin_unreachable(); } while (false); 9642: return *get(); 9642: } 9642: 9642: 9642: 9642: pointer 9642: operator->() const noexcept 9642: { 9642: ; 9642: return get(); 9642: } 9642: 9642: 9642: 9642: pointer 9642: get() const noexcept 9642: { return _M_t._M_ptr(); } 9642: 9642: 9642: 9642: deleter_type& 9642: get_deleter() noexcept 9642: { return _M_t._M_deleter(); } 9642: 9642: 9642: 9642: const deleter_type& 9642: get_deleter() const noexcept 9642: { return _M_t._M_deleter(); } 9642: 9642: 9642: 9642: explicit operator bool() const noexcept 9642: { return get() == pointer() ? false : true; } 9642: 9642: 9642: 9642: 9642: 9642: pointer 9642: release() noexcept 9642: { return _M_t.release(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: reset(pointer __p = pointer()) noexcept 9642: { 9642: static_assert(__is_invocable::value, 9642: "unique_ptr's deleter must be invocable with a pointer"); 9642: _M_t.reset(std::move(__p)); 9642: } 9642: 9642: 9642: 9642: void 9642: swap(unique_ptr& __u) noexcept 9642: { 9642: static_assert(__is_swappable<_Dp>::value, "deleter must be swappable"); 9642: _M_t.swap(__u._M_t); 9642: } 9642: 9642: 9642: unique_ptr(const unique_ptr&) = delete; 9642: unique_ptr& operator=(const unique_ptr&) = delete; 9642: }; 9642: # 534 "/usr/include/c++/13/bits/unique_ptr.h" 3 9642: template 9642: class unique_ptr<_Tp[], _Dp> 9642: { 9642: template 9642: using _DeleterConstraint = 9642: typename __uniq_ptr_impl<_Tp, _Up>::_DeleterConstraint::type; 9642: 9642: __uniq_ptr_data<_Tp, _Dp> _M_t; 9642: 9642: 9642: template 9642: using __is_derived_Tp 9642: = __and_< is_base_of<_Tp, _Up>, 9642: __not_, __remove_cv_t<_Up>>> >; 9642: 9642: public: 9642: using pointer = typename __uniq_ptr_impl<_Tp, _Dp>::pointer; 9642: using element_type = _Tp; 9642: using deleter_type = _Dp; 9642: 9642: 9642: 9642: template, 9642: typename _UP_pointer = typename _UPtr::pointer, 9642: typename _UP_element_type = typename _UPtr::element_type> 9642: using __safe_conversion_up = __and_< 9642: is_array<_Up>, 9642: is_same, 9642: is_same<_UP_pointer, _UP_element_type*>, 9642: is_convertible<_UP_element_type(*)[], element_type(*)[]> 9642: >; 9642: 9642: 9642: template 9642: using __safe_conversion_raw = __and_< 9642: __or_<__or_, 9642: is_same<_Up, nullptr_t>>, 9642: __and_, 9642: is_same, 9642: is_convertible< 9642: typename remove_pointer<_Up>::type(*)[], 9642: element_type(*)[]> 9642: > 9642: > 9642: >; 9642: 9642: 9642: 9642: 9642: template> 9642: constexpr unique_ptr() noexcept 9642: : _M_t() 9642: { } 9642: # 596 "/usr/include/c++/13/bits/unique_ptr.h" 3 9642: template, 9642: typename = typename enable_if< 9642: __safe_conversion_raw<_Up>::value, bool>::type> 9642: 9642: explicit 9642: unique_ptr(_Up __p) noexcept 9642: : _M_t(__p) 9642: { } 9642: # 615 "/usr/include/c++/13/bits/unique_ptr.h" 3 9642: template, 9642: is_copy_constructible<_Del>>> 9642: 9642: unique_ptr(_Up __p, const deleter_type& __d) noexcept 9642: : _M_t(__p, __d) { } 9642: # 630 "/usr/include/c++/13/bits/unique_ptr.h" 3 9642: template, 9642: is_move_constructible<_Del>>> 9642: 9642: unique_ptr(_Up __p, 9642: __enable_if_t::value, 9642: _Del&&> __d) noexcept 9642: : _M_t(std::move(__p), std::move(__d)) 9642: { } 9642: 9642: template::type, 9642: typename = _Require<__safe_conversion_raw<_Up>>> 9642: unique_ptr(_Up, 9642: __enable_if_t::value, 9642: _DelUnref&&>) = delete; 9642: 9642: 9642: unique_ptr(unique_ptr&&) = default; 9642: 9642: 9642: template> 9642: constexpr unique_ptr(nullptr_t) noexcept 9642: : _M_t() 9642: { } 9642: 9642: template, 9642: __conditional_t::value, 9642: is_same<_Ep, _Dp>, 9642: is_convertible<_Ep, _Dp>>>> 9642: 9642: unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept 9642: : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter())) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: ~unique_ptr() 9642: { 9642: auto& __ptr = _M_t._M_ptr(); 9642: if (__ptr != nullptr) 9642: get_deleter()(__ptr); 9642: __ptr = pointer(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: unique_ptr& 9642: operator=(unique_ptr&&) = default; 9642: # 694 "/usr/include/c++/13/bits/unique_ptr.h" 3 9642: template 9642: 9642: typename 9642: enable_if<__and_<__safe_conversion_up<_Up, _Ep>, 9642: is_assignable 9642: >::value, 9642: unique_ptr&>::type 9642: operator=(unique_ptr<_Up, _Ep>&& __u) noexcept 9642: { 9642: reset(__u.release()); 9642: get_deleter() = std::forward<_Ep>(__u.get_deleter()); 9642: return *this; 9642: } 9642: 9642: 9642: 9642: unique_ptr& 9642: operator=(nullptr_t) noexcept 9642: { 9642: reset(); 9642: return *this; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: typename std::add_lvalue_reference::type 9642: operator[](size_t __i) const 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(get() != pointer())) __builtin_unreachable(); } while (false); 9642: return get()[__i]; 9642: } 9642: 9642: 9642: 9642: pointer 9642: get() const noexcept 9642: { return _M_t._M_ptr(); } 9642: 9642: 9642: 9642: deleter_type& 9642: get_deleter() noexcept 9642: { return _M_t._M_deleter(); } 9642: 9642: 9642: 9642: const deleter_type& 9642: get_deleter() const noexcept 9642: { return _M_t._M_deleter(); } 9642: 9642: 9642: 9642: explicit operator bool() const noexcept 9642: { return get() == pointer() ? false : true; } 9642: 9642: 9642: 9642: 9642: 9642: pointer 9642: release() noexcept 9642: { return _M_t.release(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template , 9642: __and_, 9642: is_pointer<_Up>, 9642: is_convertible< 9642: typename remove_pointer<_Up>::type(*)[], 9642: element_type(*)[] 9642: > 9642: > 9642: > 9642: >> 9642: 9642: void 9642: reset(_Up __p) noexcept 9642: { _M_t.reset(std::move(__p)); } 9642: 9642: 9642: void reset(nullptr_t = nullptr) noexcept 9642: { reset(pointer()); } 9642: 9642: 9642: 9642: void 9642: swap(unique_ptr& __u) noexcept 9642: { 9642: static_assert(__is_swappable<_Dp>::value, "deleter must be swappable"); 9642: _M_t.swap(__u._M_t); 9642: } 9642: 9642: 9642: unique_ptr(const unique_ptr&) = delete; 9642: unique_ptr& operator=(const unique_ptr&) = delete; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline 9642: 9642: 9642: 9642: typename enable_if<__is_swappable<_Dp>::value>::type 9642: 9642: 9642: 9642: swap(unique_ptr<_Tp, _Dp>& __x, 9642: unique_ptr<_Tp, _Dp>& __y) noexcept 9642: { __x.swap(__y); } 9642: 9642: 9642: template 9642: typename enable_if::value>::type 9642: swap(unique_ptr<_Tp, _Dp>&, 9642: unique_ptr<_Tp, _Dp>&) = delete; 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator==(const unique_ptr<_Tp, _Dp>& __x, 9642: const unique_ptr<_Up, _Ep>& __y) 9642: { return __x.get() == __y.get(); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator==(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept 9642: { return !__x; } 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator==(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept 9642: { return !__x; } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator!=(const unique_ptr<_Tp, _Dp>& __x, 9642: const unique_ptr<_Up, _Ep>& __y) 9642: { return __x.get() != __y.get(); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator!=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept 9642: { return (bool)__x; } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator!=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept 9642: { return (bool)__x; } 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<(const unique_ptr<_Tp, _Dp>& __x, 9642: const unique_ptr<_Up, _Ep>& __y) 9642: { 9642: typedef typename 9642: std::common_type::pointer, 9642: typename unique_ptr<_Up, _Ep>::pointer>::type _CT; 9642: return std::less<_CT>()(__x.get(), __y.get()); 9642: } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) 9642: { 9642: return std::less::pointer>()(__x.get(), 9642: nullptr); 9642: } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) 9642: { 9642: return std::less::pointer>()(nullptr, 9642: __x.get()); 9642: } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<=(const unique_ptr<_Tp, _Dp>& __x, 9642: const unique_ptr<_Up, _Ep>& __y) 9642: { return !(__y < __x); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) 9642: { return !(nullptr < __x); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) 9642: { return !(__x < nullptr); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator>(const unique_ptr<_Tp, _Dp>& __x, 9642: const unique_ptr<_Up, _Ep>& __y) 9642: { return (__y < __x); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator>(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) 9642: { 9642: return std::less::pointer>()(nullptr, 9642: __x.get()); 9642: } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator>(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) 9642: { 9642: return std::less::pointer>()(__x.get(), 9642: nullptr); 9642: } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator>=(const unique_ptr<_Tp, _Dp>& __x, 9642: const unique_ptr<_Up, _Ep>& __y) 9642: { return !(__x < __y); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator>=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) 9642: { return !(__x < nullptr); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] inline bool 9642: operator>=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) 9642: { return !(nullptr < __x); } 9642: # 1006 "/usr/include/c++/13/bits/unique_ptr.h" 3 9642: template::__enable_hash_call> 9642: struct __uniq_ptr_hash 9642: 9642: : private __poison_hash<_Ptr> 9642: 9642: { 9642: size_t 9642: operator()(const _Up& __u) const 9642: noexcept(noexcept(std::declval>()(std::declval<_Ptr>()))) 9642: { return hash<_Ptr>()(__u.get()); } 9642: }; 9642: 9642: template 9642: struct __uniq_ptr_hash<_Up, _Ptr, false> 9642: : private __poison_hash<_Ptr> 9642: { }; 9642: 9642: 9642: 9642: template 9642: struct hash> 9642: : public __hash_base>, 9642: public __uniq_ptr_hash> 9642: { }; 9642: 9642: 9642: 9642: 9642: 9642: namespace __detail 9642: { 9642: template 9642: struct _MakeUniq 9642: { typedef unique_ptr<_Tp> __single_object; }; 9642: 9642: template 9642: struct _MakeUniq<_Tp[]> 9642: { typedef unique_ptr<_Tp[]> __array; }; 9642: 9642: template 9642: struct _MakeUniq<_Tp[_Bound]> 9642: { struct __invalid_type { }; }; 9642: 9642: template 9642: using __unique_ptr_t = typename _MakeUniq<_Tp>::__single_object; 9642: template 9642: using __unique_ptr_array_t = typename _MakeUniq<_Tp>::__array; 9642: template 9642: using __invalid_make_unique_t = typename _MakeUniq<_Tp>::__invalid_type; 9642: } 9642: # 1066 "/usr/include/c++/13/bits/unique_ptr.h" 3 9642: template 9642: 9642: inline __detail::__unique_ptr_t<_Tp> 9642: make_unique(_Args&&... __args) 9642: { return unique_ptr<_Tp>(new _Tp(std::forward<_Args>(__args)...)); } 9642: # 1081 "/usr/include/c++/13/bits/unique_ptr.h" 3 9642: template 9642: 9642: inline __detail::__unique_ptr_array_t<_Tp> 9642: make_unique(size_t __num) 9642: { return unique_ptr<_Tp>(new remove_extent_t<_Tp>[__num]()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: __detail::__invalid_make_unique_t<_Tp> 9642: make_unique(_Args&&...) = delete; 9642: # 1154 "/usr/include/c++/13/bits/unique_ptr.h" 3 9642: namespace __detail::__variant 9642: { 9642: template struct _Never_valueless_alt; 9642: 9642: 9642: 9642: template 9642: struct _Never_valueless_alt> 9642: : std::true_type 9642: { }; 9642: } 9642: 9642: 9642: 9642: } 9642: # 79 "/usr/include/c++/13/memory" 2 3 9642: 9642: # 1 "/usr/include/c++/13/bits/shared_ptr.h" 1 3 9642: # 52 "/usr/include/c++/13/bits/shared_ptr.h" 3 9642: # 1 "/usr/include/c++/13/iosfwd" 1 3 9642: # 36 "/usr/include/c++/13/iosfwd" 3 9642: 9642: # 37 "/usr/include/c++/13/iosfwd" 3 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/stringfwd.h" 1 3 9642: # 37 "/usr/include/c++/13/bits/stringfwd.h" 3 9642: 9642: # 38 "/usr/include/c++/13/bits/stringfwd.h" 3 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct char_traits; 9642: 9642: template<> struct char_traits; 9642: 9642: template<> struct char_traits; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template<> struct char_traits; 9642: template<> struct char_traits; 9642: 9642: 9642: namespace __cxx11 { 9642: 9642: template, 9642: typename _Alloc = allocator<_CharT> > 9642: class basic_string; 9642: 9642: } 9642: 9642: 9642: typedef basic_string string; 9642: 9642: 9642: typedef basic_string wstring; 9642: # 89 "/usr/include/c++/13/bits/stringfwd.h" 3 9642: typedef basic_string u16string; 9642: 9642: 9642: typedef basic_string u32string; 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 42 "/usr/include/c++/13/iosfwd" 2 3 9642: # 1 "/usr/include/c++/13/bits/postypes.h" 1 3 9642: # 38 "/usr/include/c++/13/bits/postypes.h" 3 9642: 9642: # 39 "/usr/include/c++/13/bits/postypes.h" 3 9642: 9642: # 1 "/usr/include/c++/13/cwchar" 1 3 9642: # 39 "/usr/include/c++/13/cwchar" 3 9642: 9642: # 40 "/usr/include/c++/13/cwchar" 3 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/wchar.h" 1 3 4 9642: # 27 "/usr/include/wchar.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 9642: # 28 "/usr/include/wchar.h" 2 3 4 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/floatn.h" 1 3 4 9642: # 31 "/usr/include/wchar.h" 2 3 4 9642: 9642: 9642: 9642: 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 36 "/usr/include/wchar.h" 2 3 4 9642: 9642: 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stdarg.h" 1 3 4 9642: # 40 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stdarg.h" 3 4 9642: typedef __builtin_va_list __gnuc_va_list; 9642: # 39 "/usr/include/wchar.h" 2 3 4 9642: 9642: 9642: 9642: 9642: typedef __gnuc_va_list va_list; 9642: # 52 "/usr/include/wchar.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/wint_t.h" 1 3 4 9642: # 20 "/usr/include/arm-linux-gnueabihf/bits/types/wint_t.h" 3 4 9642: typedef unsigned int wint_t; 9642: # 53 "/usr/include/wchar.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/mbstate_t.h" 1 3 4 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/__mbstate_t.h" 1 3 4 9642: # 13 "/usr/include/arm-linux-gnueabihf/bits/types/__mbstate_t.h" 3 4 9642: typedef struct 9642: { 9642: int __count; 9642: union 9642: { 9642: unsigned int __wch; 9642: char __wchb[4]; 9642: } __value; 9642: } __mbstate_t; 9642: # 5 "/usr/include/arm-linux-gnueabihf/bits/types/mbstate_t.h" 2 3 4 9642: 9642: typedef __mbstate_t mbstate_t; 9642: # 54 "/usr/include/wchar.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/__FILE.h" 1 3 4 9642: 9642: 9642: 9642: struct _IO_FILE; 9642: typedef struct _IO_FILE __FILE; 9642: # 55 "/usr/include/wchar.h" 2 3 4 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/FILE.h" 1 3 4 9642: 9642: 9642: 9642: struct _IO_FILE; 9642: 9642: 9642: typedef struct _IO_FILE FILE; 9642: # 58 "/usr/include/wchar.h" 2 3 4 9642: # 90 "/usr/include/wchar.h" 3 4 9642: extern "C" { 9642: 9642: 9642: 9642: struct tm; 9642: 9642: 9642: 9642: extern wchar_t *wcscpy (wchar_t *__restrict __dest, 9642: const wchar_t *__restrict __src) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern wchar_t *wcsncpy (wchar_t *__restrict __dest, 9642: const wchar_t *__restrict __src, size_t __n) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: extern size_t wcslcpy (wchar_t *__restrict __dest, 9642: const wchar_t *__restrict __src, size_t __n) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__access__ (__write_only__, 1, 3))); 9642: 9642: 9642: 9642: extern size_t wcslcat (wchar_t *__restrict __dest, 9642: const wchar_t *__restrict __src, size_t __n) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__access__ (__read_write__, 1, 3))); 9642: 9642: 9642: 9642: extern wchar_t *wcscat (wchar_t *__restrict __dest, 9642: const wchar_t *__restrict __src) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: extern wchar_t *wcsncat (wchar_t *__restrict __dest, 9642: const wchar_t *__restrict __src, size_t __n) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int wcscmp (const wchar_t *__s1, const wchar_t *__s2) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: extern int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: extern int wcscasecmp (const wchar_t *__s1, const wchar_t *__s2) noexcept (true); 9642: 9642: 9642: extern int wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2, 9642: size_t __n) noexcept (true); 9642: 9642: 9642: 9642: extern int wcscasecmp_l (const wchar_t *__s1, const wchar_t *__s2, 9642: locale_t __loc) noexcept (true); 9642: 9642: extern int wcsncasecmp_l (const wchar_t *__s1, const wchar_t *__s2, 9642: size_t __n, locale_t __loc) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int wcscoll (const wchar_t *__s1, const wchar_t *__s2) noexcept (true); 9642: 9642: 9642: 9642: extern size_t wcsxfrm (wchar_t *__restrict __s1, 9642: const wchar_t *__restrict __s2, size_t __n) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int wcscoll_l (const wchar_t *__s1, const wchar_t *__s2, 9642: locale_t __loc) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern size_t wcsxfrm_l (wchar_t *__s1, const wchar_t *__s2, 9642: size_t __n, locale_t __loc) noexcept (true); 9642: 9642: 9642: extern wchar_t *wcsdup (const wchar_t *__s) noexcept (true) 9642: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (__builtin_free, 1))); 9642: 9642: 9642: 9642: 9642: extern "C++" wchar_t *wcschr (wchar_t *__wcs, wchar_t __wc) 9642: noexcept (true) __asm ("wcschr") __attribute__ ((__pure__)); 9642: extern "C++" const wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc) 9642: noexcept (true) __asm ("wcschr") __attribute__ ((__pure__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern "C++" wchar_t *wcsrchr (wchar_t *__wcs, wchar_t __wc) 9642: noexcept (true) __asm ("wcsrchr") __attribute__ ((__pure__)); 9642: extern "C++" const wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc) 9642: noexcept (true) __asm ("wcsrchr") __attribute__ ((__pure__)); 9642: # 206 "/usr/include/wchar.h" 3 4 9642: extern wchar_t *wcschrnul (const wchar_t *__s, wchar_t __wc) 9642: noexcept (true) __attribute__ ((__pure__)); 9642: 9642: 9642: 9642: 9642: extern size_t wcscspn (const wchar_t *__wcs, const wchar_t *__reject) 9642: noexcept (true) __attribute__ ((__pure__)); 9642: 9642: 9642: extern size_t wcsspn (const wchar_t *__wcs, const wchar_t *__accept) 9642: noexcept (true) __attribute__ ((__pure__)); 9642: 9642: 9642: extern "C++" wchar_t *wcspbrk (wchar_t *__wcs, const wchar_t *__accept) 9642: noexcept (true) __asm ("wcspbrk") __attribute__ ((__pure__)); 9642: extern "C++" const wchar_t *wcspbrk (const wchar_t *__wcs, 9642: const wchar_t *__accept) 9642: noexcept (true) __asm ("wcspbrk") __attribute__ ((__pure__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern "C++" wchar_t *wcsstr (wchar_t *__haystack, const wchar_t *__needle) 9642: noexcept (true) __asm ("wcsstr") __attribute__ ((__pure__)); 9642: extern "C++" const wchar_t *wcsstr (const wchar_t *__haystack, 9642: const wchar_t *__needle) 9642: noexcept (true) __asm ("wcsstr") __attribute__ ((__pure__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern wchar_t *wcstok (wchar_t *__restrict __s, 9642: const wchar_t *__restrict __delim, 9642: wchar_t **__restrict __ptr) noexcept (true); 9642: 9642: 9642: extern size_t wcslen (const wchar_t *__s) noexcept (true) __attribute__ ((__pure__)); 9642: 9642: 9642: 9642: 9642: extern "C++" wchar_t *wcswcs (wchar_t *__haystack, const wchar_t *__needle) 9642: noexcept (true) __asm ("wcswcs") __attribute__ ((__pure__)); 9642: extern "C++" const wchar_t *wcswcs (const wchar_t *__haystack, 9642: const wchar_t *__needle) 9642: noexcept (true) __asm ("wcswcs") __attribute__ ((__pure__)); 9642: # 265 "/usr/include/wchar.h" 3 4 9642: extern size_t wcsnlen (const wchar_t *__s, size_t __maxlen) 9642: noexcept (true) __attribute__ ((__pure__)); 9642: 9642: 9642: 9642: 9642: 9642: extern "C++" wchar_t *wmemchr (wchar_t *__s, wchar_t __c, size_t __n) 9642: noexcept (true) __asm ("wmemchr") __attribute__ ((__pure__)); 9642: extern "C++" const wchar_t *wmemchr (const wchar_t *__s, wchar_t __c, 9642: size_t __n) 9642: noexcept (true) __asm ("wmemchr") __attribute__ ((__pure__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int wmemcmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n) 9642: noexcept (true) __attribute__ ((__pure__)); 9642: 9642: 9642: extern wchar_t *wmemcpy (wchar_t *__restrict __s1, 9642: const wchar_t *__restrict __s2, size_t __n) noexcept (true); 9642: 9642: 9642: 9642: extern wchar_t *wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n) 9642: noexcept (true); 9642: 9642: 9642: extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern wchar_t *wmempcpy (wchar_t *__restrict __s1, 9642: const wchar_t *__restrict __s2, size_t __n) 9642: noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern wint_t btowc (int __c) noexcept (true); 9642: 9642: 9642: 9642: extern int wctob (wint_t __c) noexcept (true); 9642: 9642: 9642: 9642: extern int mbsinit (const mbstate_t *__ps) noexcept (true) __attribute__ ((__pure__)); 9642: 9642: 9642: 9642: extern size_t mbrtowc (wchar_t *__restrict __pwc, 9642: const char *__restrict __s, size_t __n, 9642: mbstate_t *__restrict __p) noexcept (true); 9642: 9642: 9642: extern size_t wcrtomb (char *__restrict __s, wchar_t __wc, 9642: mbstate_t *__restrict __ps) noexcept (true); 9642: 9642: 9642: extern size_t __mbrlen (const char *__restrict __s, size_t __n, 9642: mbstate_t *__restrict __ps) noexcept (true); 9642: extern size_t mbrlen (const char *__restrict __s, size_t __n, 9642: mbstate_t *__restrict __ps) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern wint_t __btowc_alias (int __c) __asm ("btowc"); 9642: extern __inline __attribute__ ((__gnu_inline__)) wint_t 9642: __attribute__ ((__leaf__)) btowc (int __c) noexcept (true) 9642: { return (__builtin_constant_p (__c) && __c >= '\0' && __c <= '\x7f' 9642: ? (wint_t) __c : __btowc_alias (__c)); } 9642: 9642: extern int __wctob_alias (wint_t __c) __asm ("wctob"); 9642: extern __inline __attribute__ ((__gnu_inline__)) int 9642: __attribute__ ((__leaf__)) wctob (wint_t __wc) noexcept (true) 9642: { return (__builtin_constant_p (__wc) && __wc >= L'\0' && __wc <= L'\x7f' 9642: ? (int) __wc : __wctob_alias (__wc)); } 9642: 9642: extern __inline __attribute__ ((__gnu_inline__)) size_t 9642: __attribute__ ((__leaf__)) mbrlen (const char *__restrict __s, size_t __n, mbstate_t *__restrict __ps) noexcept (true) 9642: 9642: { return (__ps != __null 9642: ? mbrtowc (__null, __s, __n, __ps) : __mbrlen (__s, __n, __null)); } 9642: 9642: 9642: 9642: 9642: extern size_t mbsrtowcs (wchar_t *__restrict __dst, 9642: const char **__restrict __src, size_t __len, 9642: mbstate_t *__restrict __ps) noexcept (true); 9642: 9642: 9642: 9642: extern size_t wcsrtombs (char *__restrict __dst, 9642: const wchar_t **__restrict __src, size_t __len, 9642: mbstate_t *__restrict __ps) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern size_t mbsnrtowcs (wchar_t *__restrict __dst, 9642: const char **__restrict __src, size_t __nmc, 9642: size_t __len, mbstate_t *__restrict __ps) noexcept (true); 9642: 9642: 9642: 9642: extern size_t wcsnrtombs (char *__restrict __dst, 9642: const wchar_t **__restrict __src, 9642: size_t __nwc, size_t __len, 9642: mbstate_t *__restrict __ps) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int wcwidth (wchar_t __c) noexcept (true); 9642: 9642: 9642: 9642: extern int wcswidth (const wchar_t *__s, size_t __n) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern double wcstod (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr) noexcept (true); 9642: 9642: 9642: 9642: extern float wcstof (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr) noexcept (true); 9642: extern long double wcstold (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr) noexcept (true); 9642: # 422 "/usr/include/wchar.h" 3 4 9642: extern _Float32 wcstof32 (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr) noexcept (true); 9642: 9642: 9642: 9642: extern _Float64 wcstof64 (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr) noexcept (true); 9642: # 437 "/usr/include/wchar.h" 3 4 9642: extern _Float32x wcstof32x (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr) noexcept (true); 9642: # 455 "/usr/include/wchar.h" 3 4 9642: extern long int wcstol (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr, int __base) noexcept (true); 9642: 9642: 9642: 9642: extern unsigned long int wcstoul (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr, int __base) 9642: noexcept (true); 9642: 9642: 9642: 9642: 9642: __extension__ 9642: extern long long int wcstoll (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr, int __base) 9642: noexcept (true); 9642: 9642: 9642: 9642: __extension__ 9642: extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr, 9642: int __base) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: __extension__ 9642: extern long long int wcstoq (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr, int __base) 9642: noexcept (true); 9642: 9642: 9642: 9642: __extension__ 9642: extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr, 9642: int __base) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern long int wcstol (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_wcstol") 9642: 9642: ; 9642: extern unsigned long int wcstoul (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_wcstoul") 9642: 9642: 9642: ; 9642: __extension__ 9642: extern long long int wcstoll (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_wcstoll") 9642: 9642: 9642: ; 9642: __extension__ 9642: extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_wcstoull") 9642: 9642: 9642: ; 9642: 9642: __extension__ 9642: extern long long int wcstoq (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_wcstoll") 9642: 9642: ; 9642: __extension__ 9642: extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_wcstoull") 9642: 9642: 9642: ; 9642: # 561 "/usr/include/wchar.h" 3 4 9642: extern long int wcstol_l (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr, int __base, 9642: locale_t __loc) noexcept (true); 9642: 9642: extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr, 9642: int __base, locale_t __loc) noexcept (true); 9642: 9642: __extension__ 9642: extern long long int wcstoll_l (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr, 9642: int __base, locale_t __loc) noexcept (true); 9642: 9642: __extension__ 9642: extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr, 9642: int __base, locale_t __loc) 9642: noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern long int wcstol_l (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_wcstol_l") 9642: 9642: 9642: ; 9642: extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_wcstoul_l") 9642: 9642: 9642: 9642: ; 9642: __extension__ 9642: extern long long int wcstoll_l (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_wcstoll_l") 9642: 9642: 9642: 9642: ; 9642: __extension__ 9642: extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_wcstoull_l") 9642: 9642: 9642: 9642: ; 9642: # 630 "/usr/include/wchar.h" 3 4 9642: extern double wcstod_l (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr, locale_t __loc) 9642: noexcept (true); 9642: 9642: extern float wcstof_l (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr, locale_t __loc) 9642: noexcept (true); 9642: 9642: extern long double wcstold_l (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr, 9642: locale_t __loc) noexcept (true); 9642: # 649 "/usr/include/wchar.h" 3 4 9642: extern _Float32 wcstof32_l (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr, 9642: locale_t __loc) noexcept (true); 9642: 9642: 9642: 9642: extern _Float64 wcstof64_l (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr, 9642: locale_t __loc) noexcept (true); 9642: # 667 "/usr/include/wchar.h" 3 4 9642: extern _Float32x wcstof32x_l (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr, 9642: locale_t __loc) noexcept (true); 9642: # 689 "/usr/include/wchar.h" 3 4 9642: extern wchar_t *wcpcpy (wchar_t *__restrict __dest, 9642: const wchar_t *__restrict __src) noexcept (true); 9642: 9642: 9642: 9642: extern wchar_t *wcpncpy (wchar_t *__restrict __dest, 9642: const wchar_t *__restrict __src, size_t __n) 9642: noexcept (true); 9642: # 718 "/usr/include/wchar.h" 3 4 9642: extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) noexcept (true) 9642: __attribute__ ((__malloc__)) ; 9642: 9642: 9642: 9642: 9642: 9642: extern int fwide (__FILE *__fp, int __mode) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int fwprintf (__FILE *__restrict __stream, 9642: const wchar_t *__restrict __format, ...) 9642: ; 9642: 9642: 9642: 9642: 9642: extern int wprintf (const wchar_t *__restrict __format, ...) 9642: ; 9642: 9642: extern int swprintf (wchar_t *__restrict __s, size_t __n, 9642: const wchar_t *__restrict __format, ...) 9642: noexcept (true) ; 9642: 9642: 9642: 9642: 9642: 9642: extern int vfwprintf (__FILE *__restrict __s, 9642: const wchar_t *__restrict __format, 9642: __gnuc_va_list __arg) 9642: ; 9642: 9642: 9642: 9642: 9642: extern int vwprintf (const wchar_t *__restrict __format, 9642: __gnuc_va_list __arg) 9642: ; 9642: 9642: 9642: extern int vswprintf (wchar_t *__restrict __s, size_t __n, 9642: const wchar_t *__restrict __format, 9642: __gnuc_va_list __arg) 9642: noexcept (true) ; 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int fwscanf (__FILE *__restrict __stream, 9642: const wchar_t *__restrict __format, ...) 9642: ; 9642: 9642: 9642: 9642: 9642: extern int wscanf (const wchar_t *__restrict __format, ...) 9642: ; 9642: 9642: extern int swscanf (const wchar_t *__restrict __s, 9642: const wchar_t *__restrict __format, ...) 9642: noexcept (true) ; 9642: # 795 "/usr/include/wchar.h" 3 4 9642: extern int fwscanf (__FILE *__restrict __stream, const wchar_t *__restrict __format, ...) __asm__ ("" "__isoc23_fwscanf") 9642: 9642: 9642: ; 9642: extern int wscanf (const wchar_t *__restrict __format, ...) __asm__ ("" "__isoc23_wscanf") 9642: 9642: ; 9642: extern int swscanf (const wchar_t *__restrict __s, const wchar_t *__restrict __format, ...) noexcept (true) __asm__ ("" "__isoc23_swscanf") 9642: 9642: 9642: ; 9642: # 851 "/usr/include/wchar.h" 3 4 9642: extern int vfwscanf (__FILE *__restrict __s, 9642: const wchar_t *__restrict __format, 9642: __gnuc_va_list __arg) 9642: ; 9642: 9642: 9642: 9642: 9642: extern int vwscanf (const wchar_t *__restrict __format, 9642: __gnuc_va_list __arg) 9642: ; 9642: 9642: extern int vswscanf (const wchar_t *__restrict __s, 9642: const wchar_t *__restrict __format, 9642: __gnuc_va_list __arg) 9642: noexcept (true) ; 9642: # 875 "/usr/include/wchar.h" 3 4 9642: extern int vfwscanf (__FILE *__restrict __s, const wchar_t *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc23_vfwscanf") 9642: 9642: 9642: ; 9642: extern int vwscanf (const wchar_t *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc23_vwscanf") 9642: 9642: ; 9642: extern int vswscanf (const wchar_t *__restrict __s, const wchar_t *__restrict __format, __gnuc_va_list __arg) noexcept (true) __asm__ ("" "__isoc23_vswscanf") 9642: 9642: 9642: ; 9642: # 935 "/usr/include/wchar.h" 3 4 9642: extern wint_t fgetwc (__FILE *__stream); 9642: extern wint_t getwc (__FILE *__stream); 9642: 9642: 9642: 9642: 9642: 9642: extern wint_t getwchar (void); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern wint_t fputwc (wchar_t __wc, __FILE *__stream); 9642: extern wint_t putwc (wchar_t __wc, __FILE *__stream); 9642: 9642: 9642: 9642: 9642: 9642: extern wint_t putwchar (wchar_t __wc); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n, 9642: __FILE *__restrict __stream); 9642: 9642: 9642: 9642: 9642: 9642: extern int fputws (const wchar_t *__restrict __ws, 9642: __FILE *__restrict __stream); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern wint_t ungetwc (wint_t __wc, __FILE *__stream); 9642: # 990 "/usr/include/wchar.h" 3 4 9642: extern wint_t getwc_unlocked (__FILE *__stream); 9642: extern wint_t getwchar_unlocked (void); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern wint_t fgetwc_unlocked (__FILE *__stream); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream); 9642: # 1016 "/usr/include/wchar.h" 3 4 9642: extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream); 9642: extern wint_t putwchar_unlocked (wchar_t __wc); 9642: # 1026 "/usr/include/wchar.h" 3 4 9642: extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n, 9642: __FILE *__restrict __stream); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int fputws_unlocked (const wchar_t *__restrict __ws, 9642: __FILE *__restrict __stream); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize, 9642: const wchar_t *__restrict __format, 9642: const struct tm *__restrict __tp) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize, 9642: const wchar_t *__restrict __format, 9642: const struct tm *__restrict __tp, 9642: locale_t __loc) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/wchar2-decl.h" 1 3 4 9642: # 27 "/usr/include/arm-linux-gnueabihf/bits/wchar2-decl.h" 3 4 9642: extern wchar_t *__wmemcpy_chk (wchar_t *__restrict __s1, 9642: const wchar_t *__restrict __s2, size_t __n, 9642: size_t __ns1) noexcept (true); 9642: extern wchar_t *__wmemcpy_alias (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) noexcept (true) __asm__ ("" "wmemcpy") 9642: 9642: 9642: ; 9642: extern wchar_t *__wmemcpy_chk_warn (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n, size_t __ns1) noexcept (true) __asm__ ("" "__wmemcpy_chk") 9642: 9642: 9642: 9642: __attribute__((__warning__ ("wmemcpy called with length bigger than size of destination " "buffer"))) 9642: ; 9642: 9642: extern wchar_t *__wmemmove_chk (wchar_t *__s1, const wchar_t *__s2, 9642: size_t __n, size_t __ns1) noexcept (true); 9642: extern wchar_t *__wmemmove_alias (wchar_t *__s1, const wchar_t *__s2, size_t __n) noexcept (true) __asm__ ("" "wmemmove") 9642: 9642: ; 9642: extern wchar_t *__wmemmove_chk_warn (wchar_t *__s1, const wchar_t *__s2, size_t __n, size_t __ns1) noexcept (true) __asm__ ("" "__wmemmove_chk") 9642: 9642: 9642: __attribute__((__warning__ ("wmemmove called with length bigger than size of destination " "buffer"))) 9642: ; 9642: 9642: 9642: 9642: 9642: extern wchar_t *__wmempcpy_chk (wchar_t *__restrict __s1, 9642: const wchar_t *__restrict __s2, size_t __n, 9642: size_t __ns1) noexcept (true); 9642: extern wchar_t *__wmempcpy_alias (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) noexcept (true) __asm__ ("" "wmempcpy") 9642: 9642: 9642: ; 9642: extern wchar_t *__wmempcpy_chk_warn (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n, size_t __ns1) noexcept (true) __asm__ ("" "__wmempcpy_chk") 9642: 9642: 9642: 9642: __attribute__((__warning__ ("wmempcpy called with length bigger than size of destination " "buffer"))) 9642: ; 9642: 9642: 9642: 9642: 9642: extern wchar_t *__wmemset_chk (wchar_t *__s, wchar_t __c, size_t __n, 9642: size_t __ns) noexcept (true); 9642: extern wchar_t *__wmemset_alias (wchar_t *__s, wchar_t __c, size_t __n) noexcept (true) __asm__ ("" "wmemset") 9642: ; 9642: extern wchar_t *__wmemset_chk_warn (wchar_t *__s, wchar_t __c, size_t __n, size_t __ns) noexcept (true) __asm__ ("" "__wmemset_chk") 9642: 9642: 9642: __attribute__((__warning__ ("wmemset called with length bigger than size of destination " "buffer"))) 9642: ; 9642: 9642: extern wchar_t *__wcscpy_chk (wchar_t *__restrict __dest, 9642: const wchar_t *__restrict __src, 9642: size_t __n) noexcept (true); 9642: extern wchar_t *__wcscpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src) noexcept (true) __asm__ ("" "wcscpy") 9642: 9642: ; 9642: 9642: extern wchar_t *__wcpcpy_chk (wchar_t *__restrict __dest, 9642: const wchar_t *__restrict __src, 9642: size_t __destlen) noexcept (true); 9642: extern wchar_t *__wcpcpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src) noexcept (true) __asm__ ("" "wcpcpy") 9642: 9642: ; 9642: 9642: extern wchar_t *__wcsncpy_chk (wchar_t *__restrict __dest, 9642: const wchar_t *__restrict __src, size_t __n, 9642: size_t __destlen) noexcept (true); 9642: extern wchar_t *__wcsncpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true) __asm__ ("" "wcsncpy") 9642: 9642: 9642: ; 9642: extern wchar_t *__wcsncpy_chk_warn (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n, size_t __destlen) noexcept (true) __asm__ ("" "__wcsncpy_chk") 9642: 9642: 9642: 9642: __attribute__((__warning__ ("wcsncpy called with length bigger than size of destination " "buffer"))) 9642: ; 9642: 9642: extern wchar_t *__wcpncpy_chk (wchar_t *__restrict __dest, 9642: const wchar_t *__restrict __src, size_t __n, 9642: size_t __destlen) noexcept (true); 9642: 9642: extern wchar_t *__wcpncpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true) __asm__ ("" "wcpncpy") 9642: 9642: 9642: ; 9642: extern wchar_t *__wcpncpy_chk_warn (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n, size_t __destlen) noexcept (true) __asm__ ("" "__wcpncpy_chk") 9642: 9642: 9642: 9642: __attribute__((__warning__ ("wcpncpy called with length bigger than size of destination " "buffer"))) 9642: ; 9642: 9642: extern wchar_t *__wcscat_chk (wchar_t *__restrict __dest, 9642: const wchar_t *__restrict __src, 9642: size_t __destlen) noexcept (true); 9642: extern wchar_t *__wcscat_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src) noexcept (true) __asm__ ("" "wcscat") 9642: 9642: ; 9642: 9642: extern wchar_t *__wcsncat_chk (wchar_t *__restrict __dest, 9642: const wchar_t *__restrict __src, 9642: size_t __n, size_t __destlen) noexcept (true); 9642: extern wchar_t *__wcsncat_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true) __asm__ ("" "wcsncat") 9642: 9642: 9642: ; 9642: 9642: extern int __swprintf_chk (wchar_t *__restrict __s, size_t __n, 9642: int __flag, size_t __s_len, 9642: const wchar_t *__restrict __format, ...) 9642: noexcept (true) ; 9642: extern int __swprintf_alias (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, ...) noexcept (true) __asm__ ("" "swprintf") 9642: 9642: 9642: ; 9642: 9642: extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n, 9642: int __flag, size_t __s_len, 9642: const wchar_t *__restrict __format, 9642: __gnuc_va_list __arg) 9642: noexcept (true) ; 9642: extern int __vswprintf_alias (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, __gnuc_va_list __ap) noexcept (true) __asm__ ("" "vswprintf") 9642: 9642: 9642: ; 9642: 9642: 9642: 9642: 9642: extern int __fwprintf_chk (__FILE *__restrict __stream, int __flag, 9642: const wchar_t *__restrict __format, ...); 9642: extern int __wprintf_chk (int __flag, const wchar_t *__restrict __format, 9642: ...); 9642: extern int __vfwprintf_chk (__FILE *__restrict __stream, int __flag, 9642: const wchar_t *__restrict __format, 9642: __gnuc_va_list __ap); 9642: extern int __vwprintf_chk (int __flag, const wchar_t *__restrict __format, 9642: __gnuc_va_list __ap); 9642: 9642: 9642: 9642: extern wchar_t *__fgetws_chk (wchar_t *__restrict __s, size_t __size, int __n, 9642: __FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)); 9642: extern wchar_t *__fgetws_alias (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) __asm__ ("" "fgetws") 9642: 9642: __attribute__ ((__warn_unused_result__)); 9642: extern wchar_t *__fgetws_chk_warn (wchar_t *__restrict __s, size_t __size, int __n, __FILE *__restrict __stream) __asm__ ("" "__fgetws_chk") 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgetws called with bigger size than length " "of destination buffer"))) 9642: ; 9642: 9642: 9642: 9642: extern wchar_t *__fgetws_unlocked_chk (wchar_t *__restrict __s, size_t __size, 9642: int __n, __FILE *__restrict __stream) 9642: __attribute__ ((__warn_unused_result__)); 9642: extern wchar_t *__fgetws_unlocked_alias (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) __asm__ ("" "fgetws_unlocked") 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)); 9642: extern wchar_t *__fgetws_unlocked_chk_warn (wchar_t *__restrict __s, size_t __size, int __n, __FILE *__restrict __stream) __asm__ ("" "__fgetws_unlocked_chk") 9642: 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgetws_unlocked called with bigger size than length " "of destination buffer"))) 9642: ; 9642: 9642: 9642: 9642: extern size_t __wcrtomb_chk (char *__restrict __s, wchar_t __wchar, 9642: mbstate_t *__restrict __p, 9642: size_t __buflen) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: extern size_t __wcrtomb_alias (char *__restrict __s, wchar_t __wchar, mbstate_t *__restrict __ps) noexcept (true) __asm__ ("" "wcrtomb") 9642: 9642: __attribute__ ((__warn_unused_result__)); 9642: 9642: extern size_t __mbsrtowcs_chk (wchar_t *__restrict __dst, 9642: const char **__restrict __src, 9642: size_t __len, mbstate_t *__restrict __ps, 9642: size_t __dstlen) noexcept (true); 9642: extern size_t __mbsrtowcs_alias (wchar_t *__restrict __dst, const char **__restrict __src, size_t __len, mbstate_t *__restrict __ps) noexcept (true) __asm__ ("" "mbsrtowcs") 9642: 9642: 9642: 9642: ; 9642: extern size_t __mbsrtowcs_chk_warn (wchar_t *__restrict __dst, const char **__restrict __src, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) noexcept (true) __asm__ ("" "__mbsrtowcs_chk") 9642: 9642: 9642: 9642: 9642: __attribute__((__warning__ ("mbsrtowcs called with dst buffer smaller than len " "* sizeof (wchar_t)"))) 9642: ; 9642: 9642: extern size_t __wcsrtombs_chk (char *__restrict __dst, 9642: const wchar_t **__restrict __src, 9642: size_t __len, mbstate_t *__restrict __ps, 9642: size_t __dstlen) noexcept (true); 9642: extern size_t __wcsrtombs_alias (char *__restrict __dst, const wchar_t **__restrict __src, size_t __len, mbstate_t *__restrict __ps) noexcept (true) __asm__ ("" "wcsrtombs") 9642: 9642: 9642: 9642: ; 9642: extern size_t __wcsrtombs_chk_warn (char *__restrict __dst, const wchar_t **__restrict __src, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) noexcept (true) __asm__ ("" "__wcsrtombs_chk") 9642: 9642: 9642: 9642: 9642: __attribute__((__warning__ ("wcsrtombs called with dst buffer smaller than len"))); 9642: 9642: 9642: 9642: extern size_t __mbsnrtowcs_chk (wchar_t *__restrict __dst, 9642: const char **__restrict __src, size_t __nmc, 9642: size_t __len, mbstate_t *__restrict __ps, 9642: size_t __dstlen) noexcept (true); 9642: extern size_t __mbsnrtowcs_alias (wchar_t *__restrict __dst, const char **__restrict __src, size_t __nmc, size_t __len, mbstate_t *__restrict __ps) noexcept (true) __asm__ ("" "mbsnrtowcs") 9642: 9642: 9642: 9642: ; 9642: extern size_t __mbsnrtowcs_chk_warn (wchar_t *__restrict __dst, const char **__restrict __src, size_t __nmc, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) noexcept (true) __asm__ ("" "__mbsnrtowcs_chk") 9642: 9642: 9642: 9642: 9642: __attribute__((__warning__ ("mbsnrtowcs called with dst buffer smaller than len " "* sizeof (wchar_t)"))) 9642: ; 9642: 9642: extern size_t __wcsnrtombs_chk (char *__restrict __dst, 9642: const wchar_t **__restrict __src, 9642: size_t __nwc, size_t __len, 9642: mbstate_t *__restrict __ps, size_t __dstlen) 9642: noexcept (true); 9642: extern size_t __wcsnrtombs_alias (char *__restrict __dst, const wchar_t **__restrict __src, size_t __nwc, size_t __len, mbstate_t *__restrict __ps) noexcept (true) __asm__ ("" "wcsnrtombs") 9642: 9642: 9642: 9642: ; 9642: extern size_t __wcsnrtombs_chk_warn (char *__restrict __dst, const wchar_t **__restrict __src, size_t __nwc, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) noexcept (true) __asm__ ("" "__wcsnrtombs_chk") 9642: 9642: 9642: 9642: 9642: 9642: __attribute__((__warning__ ("wcsnrtombs called with dst buffer smaller than len"))); 9642: 9642: 9642: 9642: 9642: extern size_t __wcslcpy_chk (wchar_t *__dest, const wchar_t *__src, size_t __n, 9642: size_t __destlen) noexcept (true); 9642: extern size_t __wcslcpy_alias (wchar_t *__dest, const wchar_t *__src, size_t __n) noexcept (true) __asm__ ("" "wcslcpy") 9642: 9642: ; 9642: 9642: extern size_t __wcslcat_chk (wchar_t *__dest, const wchar_t *__src, size_t __n, 9642: size_t __destlen) noexcept (true); 9642: extern size_t __wcslcat_alias (wchar_t *__dest, const wchar_t *__src, size_t __n) noexcept (true) __asm__ ("" "wcslcat") 9642: 9642: ; 9642: # 1060 "/usr/include/wchar.h" 2 3 4 9642: # 1070 "/usr/include/wchar.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/wchar2.h" 1 3 4 9642: # 23 "/usr/include/arm-linux-gnueabihf/bits/wchar2.h" 3 4 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 9642: __attribute__ ((__leaf__)) wmemcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) noexcept (true) 9642: 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__s1, 0)) && (__builtin_object_size (__s1, 0)) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((__builtin_object_size (__s1, 0))) / ((sizeof (wchar_t))))) && (((unsigned int) (__n)) <= ((__builtin_object_size (__s1, 0))) / ((sizeof (wchar_t)))))) ? __wmemcpy_alias (__s1, __s2, __n) : ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))) && !(((unsigned int) (__n)) <= (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))) ? __wmemcpy_chk_warn (__s1, __s2, __n, (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t))) : __wmemcpy_chk (__s1, __s2, __n, (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t))))) 9642: 9642: ; 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 9642: __attribute__ ((__leaf__)) wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n) noexcept (true) 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__s1, 0)) && (__builtin_object_size (__s1, 0)) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((__builtin_object_size (__s1, 0))) / ((sizeof (wchar_t))))) && (((unsigned int) (__n)) <= ((__builtin_object_size (__s1, 0))) / ((sizeof (wchar_t)))))) ? __wmemmove_alias (__s1, __s2, __n) : ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))) && !(((unsigned int) (__n)) <= (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))) ? __wmemmove_chk_warn (__s1, __s2, __n, (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t))) : __wmemmove_chk (__s1, __s2, __n, (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t))))) 9642: 9642: ; 9642: } 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 9642: __attribute__ ((__leaf__)) wmempcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) noexcept (true) 9642: 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__s1, 0)) && (__builtin_object_size (__s1, 0)) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((__builtin_object_size (__s1, 0))) / ((sizeof (wchar_t))))) && (((unsigned int) (__n)) <= ((__builtin_object_size (__s1, 0))) / ((sizeof (wchar_t)))))) ? __wmempcpy_alias (__s1, __s2, __n) : ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))) && !(((unsigned int) (__n)) <= (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))) ? __wmempcpy_chk_warn (__s1, __s2, __n, (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t))) : __wmempcpy_chk (__s1, __s2, __n, (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t))))) 9642: 9642: ; 9642: } 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 9642: __attribute__ ((__leaf__)) wmemset (wchar_t *__s, wchar_t __c, size_t __n) noexcept (true) 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__s, 0)) && (__builtin_object_size (__s, 0)) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((__builtin_object_size (__s, 0))) / ((sizeof (wchar_t))))) && (((unsigned int) (__n)) <= ((__builtin_object_size (__s, 0))) / ((sizeof (wchar_t)))))) ? __wmemset_alias (__s, __c, __n) : ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (__builtin_object_size (__s, 0)) / (sizeof (wchar_t)))) && !(((unsigned int) (__n)) <= (__builtin_object_size (__s, 0)) / (sizeof (wchar_t)))) ? __wmemset_chk_warn (__s, __c, __n, (__builtin_object_size (__s, 0)) / (sizeof (wchar_t))) : __wmemset_chk (__s, __c, __n, (__builtin_object_size (__s, 0)) / (sizeof (wchar_t))))) 9642: 9642: ; 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 9642: __attribute__ ((__leaf__)) wcscpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src) noexcept (true) 9642: { 9642: size_t sz = __builtin_object_size (__dest, 2 > 1); 9642: if (sz != (size_t) -1) 9642: return __wcscpy_chk (__dest, __src, sz / sizeof (wchar_t)); 9642: return __wcscpy_alias (__dest, __src); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 9642: __attribute__ ((__leaf__)) wcpcpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src) noexcept (true) 9642: { 9642: size_t sz = __builtin_object_size (__dest, 2 > 1); 9642: if (sz != (size_t) -1) 9642: return __wcpcpy_chk (__dest, __src, sz / sizeof (wchar_t)); 9642: return __wcpcpy_alias (__dest, __src); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 9642: __attribute__ ((__leaf__)) wcsncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true) 9642: 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__dest, 2 > 1)) && (__builtin_object_size (__dest, 2 > 1)) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((__builtin_object_size (__dest, 2 > 1))) / ((sizeof (wchar_t))))) && (((unsigned int) (__n)) <= ((__builtin_object_size (__dest, 2 > 1))) / ((sizeof (wchar_t)))))) ? __wcsncpy_alias (__dest, __src, __n) : ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t)))) && !(((unsigned int) (__n)) <= (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t)))) ? __wcsncpy_chk_warn (__dest, __src, __n, (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t))) : __wcsncpy_chk (__dest, __src, __n, (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t))))) 9642: 9642: ; 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 9642: __attribute__ ((__leaf__)) wcpncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true) 9642: 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__dest, 2 > 1)) && (__builtin_object_size (__dest, 2 > 1)) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((__builtin_object_size (__dest, 2 > 1))) / ((sizeof (wchar_t))))) && (((unsigned int) (__n)) <= ((__builtin_object_size (__dest, 2 > 1))) / ((sizeof (wchar_t)))))) ? __wcpncpy_alias (__dest, __src, __n) : ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t)))) && !(((unsigned int) (__n)) <= (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t)))) ? __wcpncpy_chk_warn (__dest, __src, __n, (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t))) : __wcpncpy_chk (__dest, __src, __n, (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t))))) 9642: 9642: ; 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 9642: __attribute__ ((__leaf__)) wcscat (wchar_t *__restrict __dest, const wchar_t *__restrict __src) noexcept (true) 9642: { 9642: size_t sz = __builtin_object_size (__dest, 2 > 1); 9642: if (sz != (size_t) -1) 9642: return __wcscat_chk (__dest, __src, sz / sizeof (wchar_t)); 9642: return __wcscat_alias (__dest, __src); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 9642: __attribute__ ((__leaf__)) wcsncat (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true) 9642: 9642: { 9642: size_t sz = __builtin_object_size (__dest, 2 > 1); 9642: if (sz != (size_t) -1) 9642: return __wcsncat_chk (__dest, __src, __n, sz / sizeof (wchar_t)); 9642: return __wcsncat_alias (__dest, __src, __n); 9642: } 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 9642: __attribute__ ((__leaf__)) wcslcpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true) 9642: 9642: { 9642: if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1 9642: && (!__builtin_constant_p (__n 9642: > __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t)) 9642: || __n > __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t))) 9642: return __wcslcpy_chk (__dest, __src, __n, 9642: __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t)); 9642: return __wcslcpy_alias (__dest, __src, __n); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 9642: __attribute__ ((__leaf__)) wcslcat (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true) 9642: 9642: { 9642: if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1 9642: && (!__builtin_constant_p (__n > __builtin_object_size (__dest, 2 > 1) 9642: / sizeof (wchar_t)) 9642: || __n > __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t))) 9642: return __wcslcat_chk (__dest, __src, __n, 9642: __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t)); 9642: return __wcslcat_alias (__dest, __src, __n); 9642: } 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: __attribute__ ((__leaf__)) swprintf (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, ...) noexcept (true) 9642: 9642: { 9642: size_t sz = __builtin_object_size (__s, 2 > 1); 9642: if (sz != (size_t) -1 || 2 > 1) 9642: return __swprintf_chk (__s, __n, 2 - 1, 9642: sz / sizeof (wchar_t), __fmt, __builtin_va_arg_pack ()); 9642: return __swprintf_alias (__s, __n, __fmt, __builtin_va_arg_pack ()); 9642: } 9642: # 162 "/usr/include/arm-linux-gnueabihf/bits/wchar2.h" 3 4 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: __attribute__ ((__leaf__)) vswprintf (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, __gnuc_va_list __ap) noexcept (true) 9642: 9642: { 9642: size_t sz = __builtin_object_size (__s, 2 > 1); 9642: if (sz != (size_t) -1 || 2 > 1) 9642: return __vswprintf_chk (__s, __n, 2 - 1, 9642: sz / sizeof (wchar_t), __fmt, __ap); 9642: return __vswprintf_alias (__s, __n, __fmt, __ap); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: wprintf (const wchar_t *__restrict __fmt, ...) 9642: { 9642: return __wprintf_chk (2 - 1, __fmt, __builtin_va_arg_pack ()); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: fwprintf (__FILE *__restrict __stream, const wchar_t *__restrict __fmt, ...) 9642: { 9642: return __fwprintf_chk (__stream, 2 - 1, __fmt, 9642: __builtin_va_arg_pack ()); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: vwprintf (const wchar_t *__restrict __fmt, __gnuc_va_list __ap) 9642: { 9642: return __vwprintf_chk (2 - 1, __fmt, __ap); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: vfwprintf (__FILE *__restrict __stream, 9642: const wchar_t *__restrict __fmt, __gnuc_va_list __ap) 9642: { 9642: return __vfwprintf_chk (__stream, 2 - 1, __fmt, __ap); 9642: } 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) wchar_t * 9642: fgetws (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) 9642: { 9642: size_t sz = __builtin_object_size (__s, 2 > 1); 9642: if (((__builtin_constant_p (sz) && (sz) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((sz)) / ((sizeof (wchar_t))))) && (((unsigned int) (__n)) <= ((sz)) / ((sizeof (wchar_t))))))) 9642: return __fgetws_alias (__s, __n, __stream); 9642: if ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (sz) / (sizeof (wchar_t)))) && !(((unsigned int) (__n)) <= (sz) / (sizeof (wchar_t))))) 9642: return __fgetws_chk_warn (__s, sz / sizeof (wchar_t), __n, __stream); 9642: return __fgetws_chk (__s, sz / sizeof (wchar_t), __n, __stream); 9642: } 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) wchar_t * 9642: fgetws_unlocked (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) 9642: { 9642: size_t sz = __builtin_object_size (__s, 2 > 1); 9642: if (((__builtin_constant_p (sz) && (sz) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((sz)) / ((sizeof (wchar_t))))) && (((unsigned int) (__n)) <= ((sz)) / ((sizeof (wchar_t))))))) 9642: return __fgetws_unlocked_alias (__s, __n, __stream); 9642: if ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (sz) / (sizeof (wchar_t)))) && !(((unsigned int) (__n)) <= (sz) / (sizeof (wchar_t))))) 9642: return __fgetws_unlocked_chk_warn (__s, sz / sizeof (wchar_t), __n, 9642: __stream); 9642: return __fgetws_unlocked_chk (__s, sz / sizeof (wchar_t), __n, __stream); 9642: } 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t 9642: __attribute__ ((__leaf__)) wcrtomb (char *__restrict __s, wchar_t __wchar, mbstate_t *__restrict __ps) noexcept (true) 9642: 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: if (__builtin_object_size (__s, 2 > 1) != (size_t) -1 9642: && 16 > __builtin_object_size (__s, 2 > 1)) 9642: return __wcrtomb_chk (__s, __wchar, __ps, __builtin_object_size (__s, 2 > 1)); 9642: return __wcrtomb_alias (__s, __wchar, __ps); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 9642: __attribute__ ((__leaf__)) mbsrtowcs (wchar_t *__restrict __dst, const char **__restrict __src, size_t __len, mbstate_t *__restrict __ps) noexcept (true) 9642: 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__dst, 2 > 1)) && (__builtin_object_size (__dst, 2 > 1)) == (unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (wchar_t))))) && (((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (wchar_t)))))) ? __mbsrtowcs_alias (__dst, __src, __len, __ps) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))) && !(((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))) ? __mbsrtowcs_chk_warn (__dst, __src, __len, __ps, (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t))) : __mbsrtowcs_chk (__dst, __src, __len, __ps, (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t))))) 9642: 9642: ; 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 9642: __attribute__ ((__leaf__)) wcsrtombs (char *__restrict __dst, const wchar_t **__restrict __src, size_t __len, mbstate_t *__restrict __ps) noexcept (true) 9642: 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__dst, 2 > 1)) && (__builtin_object_size (__dst, 2 > 1)) == (unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (char)))))) ? __wcsrtombs_alias (__dst, __src, __len, __ps) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (char)))) ? __wcsrtombs_chk_warn (__dst, __src, __len, __ps, __builtin_object_size (__dst, 2 > 1)) : __wcsrtombs_chk (__dst, __src, __len, __ps, __builtin_object_size (__dst, 2 > 1)))) 9642: 9642: ; 9642: } 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 9642: __attribute__ ((__leaf__)) mbsnrtowcs (wchar_t *__restrict __dst, const char **__restrict __src, size_t __nmc, size_t __len, mbstate_t *__restrict __ps) noexcept (true) 9642: 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__dst, 2 > 1)) && (__builtin_object_size (__dst, 2 > 1)) == (unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (wchar_t))))) && (((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (wchar_t)))))) ? __mbsnrtowcs_alias (__dst, __src, __nmc, __len, __ps) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))) && !(((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))) ? __mbsnrtowcs_chk_warn (__dst, __src, __nmc, __len, __ps, (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t))) : __mbsnrtowcs_chk (__dst, __src, __nmc, __len, __ps, (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t))))) 9642: 9642: ; 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 9642: __attribute__ ((__leaf__)) wcsnrtombs (char *__restrict __dst, const wchar_t **__restrict __src, size_t __nwc, size_t __len, mbstate_t *__restrict __ps) noexcept (true) 9642: 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__dst, 2 > 1)) && (__builtin_object_size (__dst, 2 > 1)) == (unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (char)))))) ? __wcsnrtombs_alias (__dst, __src, __nwc, __len, __ps) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (char)))) ? __wcsnrtombs_chk_warn (__dst, __src, __nwc, __len, __ps, __builtin_object_size (__dst, 2 > 1)) : __wcsnrtombs_chk (__dst, __src, __nwc, __len, __ps, __builtin_object_size (__dst, 2 > 1)))) 9642: 9642: ; 9642: } 9642: # 1071 "/usr/include/wchar.h" 2 3 4 9642: 9642: 9642: } 9642: # 45 "/usr/include/c++/13/cwchar" 2 3 9642: # 62 "/usr/include/c++/13/cwchar" 3 9642: namespace std 9642: { 9642: using ::mbstate_t; 9642: } 9642: # 135 "/usr/include/c++/13/cwchar" 3 9642: extern "C++" 9642: { 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: using ::wint_t; 9642: 9642: using ::btowc; 9642: using ::fgetwc; 9642: using ::fgetws; 9642: using ::fputwc; 9642: using ::fputws; 9642: using ::fwide; 9642: using ::fwprintf; 9642: using ::fwscanf; 9642: using ::getwc; 9642: using ::getwchar; 9642: using ::mbrlen; 9642: using ::mbrtowc; 9642: using ::mbsinit; 9642: using ::mbsrtowcs; 9642: using ::putwc; 9642: using ::putwchar; 9642: 9642: using ::swprintf; 9642: 9642: using ::swscanf; 9642: using ::ungetwc; 9642: using ::vfwprintf; 9642: 9642: using ::vfwscanf; 9642: 9642: 9642: using ::vswprintf; 9642: 9642: 9642: using ::vswscanf; 9642: 9642: using ::vwprintf; 9642: 9642: using ::vwscanf; 9642: 9642: using ::wcrtomb; 9642: using ::wcscat; 9642: using ::wcscmp; 9642: using ::wcscoll; 9642: using ::wcscpy; 9642: using ::wcscspn; 9642: using ::wcsftime; 9642: using ::wcslen; 9642: using ::wcsncat; 9642: using ::wcsncmp; 9642: using ::wcsncpy; 9642: using ::wcsrtombs; 9642: using ::wcsspn; 9642: using ::wcstod; 9642: 9642: using ::wcstof; 9642: 9642: using ::wcstok; 9642: using ::wcstol; 9642: using ::wcstoul; 9642: using ::wcsxfrm; 9642: using ::wctob; 9642: using ::wmemcmp; 9642: using ::wmemcpy; 9642: using ::wmemmove; 9642: using ::wmemset; 9642: using ::wprintf; 9642: using ::wscanf; 9642: using ::wcschr; 9642: using ::wcspbrk; 9642: using ::wcsrchr; 9642: using ::wcsstr; 9642: using ::wmemchr; 9642: # 234 "/usr/include/c++/13/cwchar" 3 9642: 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace __gnu_cxx 9642: { 9642: 9642: 9642: 9642: 9642: 9642: using ::wcstold; 9642: # 260 "/usr/include/c++/13/cwchar" 3 9642: using ::wcstoll; 9642: using ::wcstoull; 9642: 9642: } 9642: 9642: namespace std 9642: { 9642: using ::__gnu_cxx::wcstold; 9642: using ::__gnu_cxx::wcstoll; 9642: using ::__gnu_cxx::wcstoull; 9642: } 9642: # 280 "/usr/include/c++/13/cwchar" 3 9642: namespace std 9642: { 9642: 9642: using std::wcstof; 9642: 9642: 9642: using std::vfwscanf; 9642: 9642: 9642: using std::vswscanf; 9642: 9642: 9642: using std::vwscanf; 9642: 9642: 9642: 9642: using std::wcstold; 9642: using std::wcstoll; 9642: using std::wcstoull; 9642: 9642: } 9642: # 41 "/usr/include/c++/13/bits/postypes.h" 2 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 62 "/usr/include/c++/13/bits/postypes.h" 3 9642: typedef long long int streamoff; 9642: 9642: 9642: 9642: 9642: 9642: typedef ptrdiff_t streamsize; 9642: # 81 "/usr/include/c++/13/bits/postypes.h" 3 9642: template 9642: class fpos 9642: { 9642: private: 9642: streamoff _M_off; 9642: _StateT _M_state; 9642: 9642: public: 9642: 9642: 9642: 9642: 9642: fpos() 9642: : _M_off(0), _M_state() { } 9642: # 103 "/usr/include/c++/13/bits/postypes.h" 3 9642: fpos(streamoff __off) 9642: : _M_off(__off), _M_state() { } 9642: 9642: 9642: fpos(const fpos&) = default; 9642: fpos& operator=(const fpos&) = default; 9642: ~fpos() = default; 9642: 9642: 9642: 9642: operator streamoff() const { return _M_off; } 9642: 9642: 9642: void 9642: state(_StateT __st) 9642: { _M_state = __st; } 9642: 9642: 9642: _StateT 9642: state() const 9642: { return _M_state; } 9642: 9642: 9642: 9642: 9642: 9642: fpos& 9642: operator+=(streamoff __off) 9642: { 9642: _M_off += __off; 9642: return *this; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: fpos& 9642: operator-=(streamoff __off) 9642: { 9642: _M_off -= __off; 9642: return *this; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: fpos 9642: operator+(streamoff __off) const 9642: { 9642: fpos __pos(*this); 9642: __pos += __off; 9642: return __pos; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: fpos 9642: operator-(streamoff __off) const 9642: { 9642: fpos __pos(*this); 9642: __pos -= __off; 9642: return __pos; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: streamoff 9642: operator-(const fpos& __other) const 9642: { return _M_off - __other._M_off; } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator==(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs) 9642: { return streamoff(__lhs) == streamoff(__rhs); } 9642: 9642: template 9642: inline bool 9642: operator!=(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs) 9642: { return streamoff(__lhs) != streamoff(__rhs); } 9642: 9642: 9642: 9642: 9642: 9642: typedef fpos streampos; 9642: 9642: typedef fpos wstreampos; 9642: # 215 "/usr/include/c++/13/bits/postypes.h" 3 9642: typedef fpos u16streampos; 9642: 9642: typedef fpos u32streampos; 9642: 9642: 9642: 9642: } 9642: # 43 "/usr/include/c++/13/iosfwd" 2 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 76 "/usr/include/c++/13/iosfwd" 3 9642: class ios_base; 9642: 9642: template > 9642: class basic_ios; 9642: 9642: template > 9642: class basic_streambuf; 9642: 9642: template > 9642: class basic_istream; 9642: 9642: template > 9642: class basic_ostream; 9642: 9642: template > 9642: class basic_iostream; 9642: 9642: 9642: namespace __cxx11 { 9642: 9642: template, 9642: typename _Alloc = allocator<_CharT> > 9642: class basic_stringbuf; 9642: 9642: template, 9642: typename _Alloc = allocator<_CharT> > 9642: class basic_istringstream; 9642: 9642: template, 9642: typename _Alloc = allocator<_CharT> > 9642: class basic_ostringstream; 9642: 9642: template, 9642: typename _Alloc = allocator<_CharT> > 9642: class basic_stringstream; 9642: 9642: } 9642: 9642: template > 9642: class basic_filebuf; 9642: 9642: template > 9642: class basic_ifstream; 9642: 9642: template > 9642: class basic_ofstream; 9642: 9642: template > 9642: class basic_fstream; 9642: 9642: template > 9642: class istreambuf_iterator; 9642: 9642: template > 9642: class ostreambuf_iterator; 9642: 9642: 9642: 9642: typedef basic_ios ios; 9642: 9642: 9642: typedef basic_streambuf streambuf; 9642: 9642: 9642: typedef basic_istream istream; 9642: 9642: 9642: typedef basic_ostream ostream; 9642: 9642: 9642: typedef basic_iostream iostream; 9642: 9642: 9642: typedef basic_stringbuf stringbuf; 9642: 9642: 9642: typedef basic_istringstream istringstream; 9642: 9642: 9642: typedef basic_ostringstream ostringstream; 9642: 9642: 9642: typedef basic_stringstream stringstream; 9642: 9642: 9642: typedef basic_filebuf filebuf; 9642: 9642: 9642: typedef basic_ifstream ifstream; 9642: 9642: 9642: typedef basic_ofstream ofstream; 9642: 9642: 9642: typedef basic_fstream fstream; 9642: 9642: 9642: 9642: typedef basic_ios wios; 9642: 9642: 9642: typedef basic_streambuf wstreambuf; 9642: 9642: 9642: typedef basic_istream wistream; 9642: 9642: 9642: typedef basic_ostream wostream; 9642: 9642: 9642: typedef basic_iostream wiostream; 9642: 9642: 9642: typedef basic_stringbuf wstringbuf; 9642: 9642: 9642: typedef basic_istringstream wistringstream; 9642: 9642: 9642: typedef basic_ostringstream wostringstream; 9642: 9642: 9642: typedef basic_stringstream wstringstream; 9642: 9642: 9642: typedef basic_filebuf wfilebuf; 9642: 9642: 9642: typedef basic_ifstream wifstream; 9642: 9642: 9642: typedef basic_ofstream wofstream; 9642: 9642: 9642: typedef basic_fstream wfstream; 9642: # 255 "/usr/include/c++/13/iosfwd" 3 9642: 9642: } 9642: # 53 "/usr/include/c++/13/bits/shared_ptr.h" 2 3 9642: # 1 "/usr/include/c++/13/bits/shared_ptr_base.h" 1 3 9642: # 53 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 9642: # 1 "/usr/include/c++/13/bits/allocated_ptr.h" 1 3 9642: # 40 "/usr/include/c++/13/bits/allocated_ptr.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: template 9642: struct __allocated_ptr 9642: { 9642: using pointer = typename allocator_traits<_Alloc>::pointer; 9642: using value_type = typename allocator_traits<_Alloc>::value_type; 9642: 9642: 9642: __allocated_ptr(_Alloc& __a, pointer __ptr) noexcept 9642: : _M_alloc(std::__addressof(__a)), _M_ptr(__ptr) 9642: { } 9642: 9642: 9642: template>> 9642: __allocated_ptr(_Alloc& __a, _Ptr __ptr) 9642: : _M_alloc(std::__addressof(__a)), 9642: _M_ptr(pointer_traits::pointer_to(*__ptr)) 9642: { } 9642: 9642: 9642: __allocated_ptr(__allocated_ptr&& __gd) noexcept 9642: : _M_alloc(__gd._M_alloc), _M_ptr(__gd._M_ptr) 9642: { __gd._M_ptr = nullptr; } 9642: 9642: 9642: ~__allocated_ptr() 9642: { 9642: if (_M_ptr != nullptr) 9642: std::allocator_traits<_Alloc>::deallocate(*_M_alloc, _M_ptr, 1); 9642: } 9642: 9642: 9642: __allocated_ptr& 9642: operator=(std::nullptr_t) noexcept 9642: { 9642: _M_ptr = nullptr; 9642: return *this; 9642: } 9642: 9642: 9642: value_type* get() { return std::__to_address(_M_ptr); } 9642: 9642: private: 9642: _Alloc* _M_alloc; 9642: pointer _M_ptr; 9642: }; 9642: 9642: 9642: template 9642: __allocated_ptr<_Alloc> 9642: __allocate_guarded(_Alloc& __a) 9642: { 9642: return { __a, std::allocator_traits<_Alloc>::allocate(__a, 1) }; 9642: } 9642: 9642: 9642: 9642: } 9642: # 54 "/usr/include/c++/13/bits/shared_ptr_base.h" 2 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/ext/atomicity.h" 1 3 9642: # 32 "/usr/include/c++/13/ext/atomicity.h" 3 9642: 9642: # 33 "/usr/include/c++/13/ext/atomicity.h" 3 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr.h" 1 3 9642: # 30 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr.h" 3 9642: #pragma GCC visibility push(default) 9642: # 148 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr.h" 3 9642: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr-default.h" 1 3 9642: # 35 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr-default.h" 3 9642: # 1 "/usr/include/pthread.h" 1 3 4 9642: # 22 "/usr/include/pthread.h" 3 4 9642: # 1 "/usr/include/sched.h" 1 3 4 9642: # 29 "/usr/include/sched.h" 3 4 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 30 "/usr/include/sched.h" 2 3 4 9642: # 43 "/usr/include/sched.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/sched.h" 1 3 4 9642: # 80 "/usr/include/arm-linux-gnueabihf/bits/sched.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_sched_param.h" 1 3 4 9642: # 23 "/usr/include/arm-linux-gnueabihf/bits/types/struct_sched_param.h" 3 4 9642: struct sched_param 9642: { 9642: int sched_priority; 9642: }; 9642: # 81 "/usr/include/arm-linux-gnueabihf/bits/sched.h" 2 3 4 9642: 9642: extern "C" { 9642: 9642: 9642: 9642: extern int clone (int (*__fn) (void *__arg), void *__child_stack, 9642: int __flags, void *__arg, ...) noexcept (true); 9642: 9642: 9642: extern int unshare (int __flags) noexcept (true); 9642: 9642: 9642: extern int sched_getcpu (void) noexcept (true); 9642: 9642: 9642: extern int getcpu (unsigned int *, unsigned int *) noexcept (true); 9642: 9642: 9642: extern int setns (int __fd, int __nstype) noexcept (true); 9642: 9642: 9642: } 9642: # 44 "/usr/include/sched.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/cpu-set.h" 1 3 4 9642: # 32 "/usr/include/arm-linux-gnueabihf/bits/cpu-set.h" 3 4 9642: typedef unsigned long int __cpu_mask; 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef struct 9642: { 9642: __cpu_mask __bits[1024 / (8 * sizeof (__cpu_mask))]; 9642: } cpu_set_t; 9642: # 115 "/usr/include/arm-linux-gnueabihf/bits/cpu-set.h" 3 4 9642: extern "C" { 9642: 9642: extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp) 9642: noexcept (true); 9642: extern cpu_set_t *__sched_cpualloc (size_t __count) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: extern void __sched_cpufree (cpu_set_t *__set) noexcept (true); 9642: 9642: } 9642: # 45 "/usr/include/sched.h" 2 3 4 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern "C" { 9642: 9642: 9642: extern int sched_setparam (__pid_t __pid, const struct sched_param *__param) 9642: noexcept (true); 9642: 9642: 9642: extern int sched_getparam (__pid_t __pid, struct sched_param *__param) noexcept (true); 9642: 9642: 9642: extern int sched_setscheduler (__pid_t __pid, int __policy, 9642: const struct sched_param *__param) noexcept (true); 9642: 9642: 9642: extern int sched_getscheduler (__pid_t __pid) noexcept (true); 9642: 9642: 9642: extern int sched_yield (void) noexcept (true); 9642: 9642: 9642: extern int sched_get_priority_max (int __algorithm) noexcept (true); 9642: 9642: 9642: extern int sched_get_priority_min (int __algorithm) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) noexcept (true) __asm__ ("" "__sched_rr_get_interval64") 9642: 9642: ; 9642: # 130 "/usr/include/sched.h" 3 4 9642: extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize, 9642: const cpu_set_t *__cpuset) noexcept (true); 9642: 9642: 9642: extern int sched_getaffinity (__pid_t __pid, size_t __cpusetsize, 9642: cpu_set_t *__cpuset) noexcept (true); 9642: 9642: 9642: } 9642: # 23 "/usr/include/pthread.h" 2 3 4 9642: # 1 "/usr/include/time.h" 1 3 4 9642: # 29 "/usr/include/time.h" 3 4 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 30 "/usr/include/time.h" 2 3 4 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/time.h" 1 3 4 9642: # 73 "/usr/include/arm-linux-gnueabihf/bits/time.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/timex.h" 1 3 4 9642: # 26 "/usr/include/arm-linux-gnueabihf/bits/timex.h" 3 4 9642: struct timex 9642: { 9642: 9642: unsigned int modes; 9642: int :32; 9642: long long offset; 9642: long long freq; 9642: long long maxerror; 9642: long long esterror; 9642: int status; 9642: int :32; 9642: long long constant; 9642: long long precision; 9642: long long tolerance; 9642: struct timeval time; 9642: long long tick; 9642: long long ppsfreq; 9642: long long jitter; 9642: int shift; 9642: int :32; 9642: long long stabil; 9642: long long jitcnt; 9642: long long calcnt; 9642: long long errcnt; 9642: long long stbcnt; 9642: 9642: int tai; 9642: 9642: int :32; int :32; int :32; int :32; 9642: int :32; int :32; int :32; int :32; 9642: int :32; int :32; int :32; 9642: # 85 "/usr/include/arm-linux-gnueabihf/bits/timex.h" 3 4 9642: }; 9642: # 74 "/usr/include/arm-linux-gnueabihf/bits/time.h" 2 3 4 9642: 9642: extern "C" { 9642: 9642: 9642: extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) noexcept (true) __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: 9642: extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) noexcept (true) __asm__ ("" "__clock_adjtime64") 9642: 9642: __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 34 "/usr/include/time.h" 2 3 4 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_tm.h" 1 3 4 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct tm 9642: { 9642: int tm_sec; 9642: int tm_min; 9642: int tm_hour; 9642: int tm_mday; 9642: int tm_mon; 9642: int tm_year; 9642: int tm_wday; 9642: int tm_yday; 9642: int tm_isdst; 9642: 9642: 9642: long int tm_gmtoff; 9642: const char *tm_zone; 9642: 9642: 9642: 9642: 9642: }; 9642: # 40 "/usr/include/time.h" 2 3 4 9642: # 48 "/usr/include/time.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_itimerspec.h" 1 3 4 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct itimerspec 9642: { 9642: struct timespec it_interval; 9642: struct timespec it_value; 9642: }; 9642: # 49 "/usr/include/time.h" 2 3 4 9642: struct sigevent; 9642: # 68 "/usr/include/time.h" 3 4 9642: extern "C" { 9642: 9642: 9642: 9642: extern clock_t clock (void) noexcept (true); 9642: # 86 "/usr/include/time.h" 3 4 9642: extern time_t time (time_t *__timer) noexcept (true) __asm__ ("" "__time64"); 9642: extern double difftime (time_t __time1, time_t __time0) noexcept (true) __asm__ ("" "__difftime64") 9642: __attribute__ ((__const__)); 9642: extern time_t mktime (struct tm *__tp) noexcept (true) __asm__ ("" "__mktime64"); 9642: # 100 "/usr/include/time.h" 3 4 9642: extern size_t strftime (char *__restrict __s, size_t __maxsize, 9642: const char *__restrict __format, 9642: const struct tm *__restrict __tp) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 3, 4))); 9642: 9642: 9642: 9642: 9642: extern char *strptime (const char *__restrict __s, 9642: const char *__restrict __fmt, struct tm *__tp) 9642: noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern size_t strftime_l (char *__restrict __s, size_t __maxsize, 9642: const char *__restrict __format, 9642: const struct tm *__restrict __tp, 9642: locale_t __loc) noexcept (true); 9642: 9642: 9642: 9642: extern char *strptime_l (const char *__restrict __s, 9642: const char *__restrict __fmt, struct tm *__tp, 9642: locale_t __loc) noexcept (true); 9642: # 141 "/usr/include/time.h" 3 4 9642: extern struct tm*gmtime (const time_t *__timer) noexcept (true) __asm__ ("" "__gmtime64"); 9642: extern struct tm *localtime (const time_t *__timer) noexcept (true) __asm__ ("" "__localtime64") 9642: ; 9642: # 164 "/usr/include/time.h" 3 4 9642: extern struct tm*gmtime_r (const time_t *__restrict __timer, struct tm *__restrict __tp) noexcept (true) __asm__ ("" "__gmtime64_r") 9642: 9642: ; 9642: 9642: extern struct tm*localtime_r (const time_t *__restrict __t, struct tm *__restrict __tp) noexcept (true) __asm__ ("" "__localtime64_r") 9642: 9642: ; 9642: # 180 "/usr/include/time.h" 3 4 9642: extern char *asctime (const struct tm *__tp) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern char *ctime (const time_t *__timer) noexcept (true) __asm__ ("" "__ctime64"); 9642: # 198 "/usr/include/time.h" 3 4 9642: extern char *asctime_r (const struct tm *__restrict __tp, 9642: char *__restrict __buf) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern char *ctime_r (const time_t *__restrict __timer, char *__restrict __buf) noexcept (true) __asm__ ("" "__ctime64_r") 9642: ; 9642: # 218 "/usr/include/time.h" 3 4 9642: extern char *__tzname[2]; 9642: extern int __daylight; 9642: extern long int __timezone; 9642: 9642: 9642: 9642: 9642: extern char *tzname[2]; 9642: 9642: 9642: 9642: extern void tzset (void) noexcept (true); 9642: 9642: 9642: 9642: extern int daylight; 9642: extern long int timezone; 9642: # 250 "/usr/include/time.h" 3 4 9642: extern time_t timegm (struct tm *__tp) noexcept (true) __asm__ ("" "__timegm64"); 9642: # 267 "/usr/include/time.h" 3 4 9642: extern time_t timelocal (struct tm *__tp) noexcept (true) __asm__ ("" "__mktime64"); 9642: 9642: 9642: 9642: 9642: extern int dysize (int __year) noexcept (true) __attribute__ ((__const__)); 9642: # 297 "/usr/include/time.h" 3 4 9642: extern int nanosleep (const struct timespec *__requested_time, struct timespec *__remaining) __asm__ ("" "__nanosleep64") 9642: 9642: ; 9642: extern int clock_getres (clockid_t __clock_id, struct timespec *__res) noexcept (true) __asm__ ("" "__clock_getres64") 9642: 9642: ; 9642: extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) noexcept (true) __asm__ ("" "__clock_gettime64") 9642: 9642: __attribute__ ((__nonnull__ (2))); 9642: extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp) noexcept (true) __asm__ ("" "__clock_settime64") 9642: 9642: __attribute__ ((__nonnull__ (2))); 9642: # 329 "/usr/include/time.h" 3 4 9642: extern int clock_nanosleep (clockid_t __clock_id, int __flags, const struct timespec *__req, struct timespec *__rem) __asm__ ("" "__clock_nanosleep_time64") 9642: 9642: 9642: ; 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int timer_create (clockid_t __clock_id, 9642: struct sigevent *__restrict __evp, 9642: timer_t *__restrict __timerid) noexcept (true); 9642: 9642: 9642: extern int timer_delete (timer_t __timerid) noexcept (true); 9642: # 362 "/usr/include/time.h" 3 4 9642: extern int timer_settime (timer_t __timerid, int __flags, const struct itimerspec *__restrict __value, struct itimerspec *__restrict __ovalue) noexcept (true) __asm__ ("" "__timer_settime64") 9642: 9642: 9642: ; 9642: 9642: extern int timer_gettime (timer_t __timerid, struct itimerspec *__value) noexcept (true) __asm__ ("" "__timer_gettime64") 9642: 9642: ; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int timer_getoverrun (timer_t __timerid) noexcept (true); 9642: # 388 "/usr/include/time.h" 3 4 9642: extern int timespec_get (struct timespec *__ts, int __base) noexcept (true) __asm__ ("" "__timespec_get64") 9642: __attribute__ ((__nonnull__ (1))); 9642: # 404 "/usr/include/time.h" 3 4 9642: extern int timespec_getres (struct timespec *__ts, int __base) noexcept (true) __asm__ ("" "__timespec_getres64") 9642: 9642: ; 9642: # 426 "/usr/include/time.h" 3 4 9642: extern int getdate_err; 9642: # 435 "/usr/include/time.h" 3 4 9642: extern struct tm *getdate (const char *__string); 9642: # 449 "/usr/include/time.h" 3 4 9642: extern int getdate_r (const char *__restrict __string, 9642: struct tm *__restrict __resbufp); 9642: 9642: 9642: } 9642: # 24 "/usr/include/pthread.h" 2 3 4 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/setjmp.h" 1 3 4 9642: # 33 "/usr/include/arm-linux-gnueabihf/bits/setjmp.h" 3 4 9642: typedef int __jmp_buf[64] __attribute__((__aligned__ (8))); 9642: # 28 "/usr/include/pthread.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 9642: # 29 "/usr/include/pthread.h" 2 3 4 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct___jmp_buf_tag.h" 1 3 4 9642: # 26 "/usr/include/arm-linux-gnueabihf/bits/types/struct___jmp_buf_tag.h" 3 4 9642: struct __jmp_buf_tag 9642: { 9642: 9642: 9642: 9642: 9642: __jmp_buf __jmpbuf; 9642: int __mask_was_saved; 9642: __sigset_t __saved_mask; 9642: }; 9642: # 32 "/usr/include/pthread.h" 2 3 4 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/pthread_stack_min-dynamic.h" 1 3 4 9642: # 23 "/usr/include/arm-linux-gnueabihf/bits/pthread_stack_min-dynamic.h" 3 4 9642: extern "C" { 9642: extern long int __sysconf (int __name) noexcept (true); 9642: } 9642: # 34 "/usr/include/pthread.h" 2 3 4 9642: 9642: 9642: 9642: enum 9642: { 9642: PTHREAD_CREATE_JOINABLE, 9642: 9642: PTHREAD_CREATE_DETACHED 9642: 9642: }; 9642: 9642: 9642: 9642: enum 9642: { 9642: PTHREAD_MUTEX_TIMED_NP, 9642: PTHREAD_MUTEX_RECURSIVE_NP, 9642: PTHREAD_MUTEX_ERRORCHECK_NP, 9642: PTHREAD_MUTEX_ADAPTIVE_NP 9642: 9642: , 9642: PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP, 9642: PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP, 9642: PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP, 9642: PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL 9642: 9642: 9642: 9642: , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP 9642: 9642: }; 9642: 9642: 9642: 9642: 9642: enum 9642: { 9642: PTHREAD_MUTEX_STALLED, 9642: PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED, 9642: PTHREAD_MUTEX_ROBUST, 9642: PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: enum 9642: { 9642: PTHREAD_PRIO_NONE, 9642: PTHREAD_PRIO_INHERIT, 9642: PTHREAD_PRIO_PROTECT 9642: }; 9642: # 104 "/usr/include/pthread.h" 3 4 9642: enum 9642: { 9642: PTHREAD_RWLOCK_PREFER_READER_NP, 9642: PTHREAD_RWLOCK_PREFER_WRITER_NP, 9642: PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, 9642: PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP 9642: }; 9642: # 124 "/usr/include/pthread.h" 3 4 9642: enum 9642: { 9642: PTHREAD_INHERIT_SCHED, 9642: 9642: PTHREAD_EXPLICIT_SCHED 9642: 9642: }; 9642: 9642: 9642: 9642: enum 9642: { 9642: PTHREAD_SCOPE_SYSTEM, 9642: 9642: PTHREAD_SCOPE_PROCESS 9642: 9642: }; 9642: 9642: 9642: 9642: enum 9642: { 9642: PTHREAD_PROCESS_PRIVATE, 9642: 9642: PTHREAD_PROCESS_SHARED 9642: 9642: }; 9642: # 159 "/usr/include/pthread.h" 3 4 9642: struct _pthread_cleanup_buffer 9642: { 9642: void (*__routine) (void *); 9642: void *__arg; 9642: int __canceltype; 9642: struct _pthread_cleanup_buffer *__prev; 9642: }; 9642: 9642: 9642: enum 9642: { 9642: PTHREAD_CANCEL_ENABLE, 9642: 9642: PTHREAD_CANCEL_DISABLE 9642: 9642: }; 9642: enum 9642: { 9642: PTHREAD_CANCEL_DEFERRED, 9642: 9642: PTHREAD_CANCEL_ASYNCHRONOUS 9642: 9642: }; 9642: # 197 "/usr/include/pthread.h" 3 4 9642: extern "C" { 9642: 9642: 9642: 9642: 9642: extern int pthread_create (pthread_t *__restrict __newthread, 9642: const pthread_attr_t *__restrict __attr, 9642: void *(*__start_routine) (void *), 9642: void *__restrict __arg) noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 9642: 9642: 9642: 9642: 9642: 9642: extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int pthread_join (pthread_t __th, void **__thread_return); 9642: 9642: 9642: 9642: 9642: extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) noexcept (true); 9642: # 248 "/usr/include/pthread.h" 3 4 9642: extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return, const struct timespec *__abstime) __asm__ ("" "__pthread_timedjoin_np64") 9642: 9642: 9642: ; 9642: 9642: extern int pthread_clockjoin_np (pthread_t __th, void **__thread_return, clockid_t __clockid, const struct timespec *__abstime) __asm__ ("" "__pthread_clockjoin_np64") 9642: 9642: 9642: 9642: ; 9642: # 269 "/usr/include/pthread.h" 3 4 9642: extern int pthread_detach (pthread_t __th) noexcept (true); 9642: 9642: 9642: 9642: extern pthread_t pthread_self (void) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern int pthread_equal (pthread_t __thread1, pthread_t __thread2) 9642: noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int pthread_attr_init (pthread_attr_t *__attr) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_attr_destroy (pthread_attr_t *__attr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr, 9642: int *__detachstate) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int pthread_attr_setdetachstate (pthread_attr_t *__attr, 9642: int __detachstate) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern int pthread_attr_getguardsize (const pthread_attr_t *__attr, 9642: size_t *__guardsize) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int pthread_attr_setguardsize (pthread_attr_t *__attr, 9642: size_t __guardsize) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr, 9642: struct sched_param *__restrict __param) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr, 9642: const struct sched_param *__restrict 9642: __param) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict 9642: __attr, int *__restrict __policy) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict 9642: __attr, int *__restrict __inherit) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int pthread_attr_setinheritsched (pthread_attr_t *__attr, 9642: int __inherit) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr, 9642: int *__restrict __scope) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict 9642: __attr, void **__restrict __stackaddr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__deprecated__)); 9642: 9642: 9642: 9642: 9642: 9642: extern int pthread_attr_setstackaddr (pthread_attr_t *__attr, 9642: void *__stackaddr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)); 9642: 9642: 9642: extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict 9642: __attr, size_t *__restrict __stacksize) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: 9642: extern int pthread_attr_setstacksize (pthread_attr_t *__attr, 9642: size_t __stacksize) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr, 9642: void **__restrict __stackaddr, 9642: size_t *__restrict __stacksize) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2, 3))); 9642: 9642: 9642: 9642: 9642: extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr, 9642: size_t __stacksize) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr, 9642: size_t __cpusetsize, 9642: const cpu_set_t *__cpuset) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 9642: 9642: 9642: 9642: extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr, 9642: size_t __cpusetsize, 9642: cpu_set_t *__cpuset) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 9642: 9642: 9642: extern int pthread_getattr_default_np (pthread_attr_t *__attr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_attr_setsigmask_np (pthread_attr_t *__attr, 9642: const __sigset_t *sigmask); 9642: 9642: 9642: 9642: 9642: extern int pthread_attr_getsigmask_np (const pthread_attr_t *__attr, 9642: __sigset_t *sigmask); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int pthread_setattr_default_np (const pthread_attr_t *__attr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr) 9642: noexcept (true) __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int pthread_setschedparam (pthread_t __target_thread, int __policy, 9642: const struct sched_param *__param) 9642: noexcept (true) __attribute__ ((__nonnull__ (3))); 9642: 9642: 9642: extern int pthread_getschedparam (pthread_t __target_thread, 9642: int *__restrict __policy, 9642: struct sched_param *__restrict __param) 9642: noexcept (true) __attribute__ ((__nonnull__ (2, 3))); 9642: 9642: 9642: extern int pthread_setschedprio (pthread_t __target_thread, int __prio) 9642: noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int pthread_getname_np (pthread_t __target_thread, char *__buf, 9642: size_t __buflen) 9642: noexcept (true) __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: extern int pthread_setname_np (pthread_t __target_thread, const char *__name) 9642: noexcept (true) __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: 9642: 9642: 9642: extern int pthread_getconcurrency (void) noexcept (true); 9642: 9642: 9642: extern int pthread_setconcurrency (int __level) noexcept (true); 9642: 9642: 9642: 9642: extern int pthread_yield (void) noexcept (true); 9642: 9642: extern int pthread_yield (void) noexcept (true) __asm__ ("" "sched_yield") 9642: __attribute__ ((__deprecated__ ("pthread_yield is deprecated, use sched_yield instead"))) 9642: ; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize, 9642: const cpu_set_t *__cpuset) 9642: noexcept (true) __attribute__ ((__nonnull__ (3))); 9642: 9642: 9642: extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize, 9642: cpu_set_t *__cpuset) 9642: noexcept (true) __attribute__ ((__nonnull__ (3))); 9642: # 509 "/usr/include/pthread.h" 3 4 9642: extern int pthread_once (pthread_once_t *__once_control, 9642: void (*__init_routine) (void)) __attribute__ ((__nonnull__ (1, 2))); 9642: # 521 "/usr/include/pthread.h" 3 4 9642: extern int pthread_setcancelstate (int __state, int *__oldstate); 9642: 9642: 9642: 9642: extern int pthread_setcanceltype (int __type, int *__oldtype); 9642: 9642: 9642: extern int pthread_cancel (pthread_t __th); 9642: 9642: 9642: 9642: 9642: extern void pthread_testcancel (void); 9642: 9642: 9642: 9642: 9642: struct __cancel_jmp_buf_tag 9642: { 9642: __jmp_buf __cancel_jmp_buf; 9642: int __mask_was_saved; 9642: }; 9642: 9642: typedef struct 9642: { 9642: struct __cancel_jmp_buf_tag __cancel_jmp_buf[1]; 9642: void *__pad[4]; 9642: } __pthread_unwind_buf_t __attribute__ ((__aligned__)); 9642: # 557 "/usr/include/pthread.h" 3 4 9642: struct __pthread_cleanup_frame 9642: { 9642: void (*__cancel_routine) (void *); 9642: void *__cancel_arg; 9642: int __do_it; 9642: int __cancel_type; 9642: }; 9642: 9642: 9642: 9642: 9642: class __pthread_cleanup_class 9642: { 9642: void (*__cancel_routine) (void *); 9642: void *__cancel_arg; 9642: int __do_it; 9642: int __cancel_type; 9642: 9642: public: 9642: __pthread_cleanup_class (void (*__fct) (void *), void *__arg) 9642: : __cancel_routine (__fct), __cancel_arg (__arg), __do_it (1) { } 9642: ~__pthread_cleanup_class () { if (__do_it) __cancel_routine (__cancel_arg); } 9642: void __setdoit (int __newval) { __do_it = __newval; } 9642: void __defer () { pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, 9642: &__cancel_type); } 9642: void __restore () const { pthread_setcanceltype (__cancel_type, 0); } 9642: }; 9642: # 766 "/usr/include/pthread.h" 3 4 9642: extern int __sigsetjmp_cancel (struct __cancel_jmp_buf_tag __env[1], int __savemask) noexcept (true) __asm__ ("" "__sigsetjmp") 9642: 9642: 9642: __attribute__ ((__returns_twice__)); 9642: # 781 "/usr/include/pthread.h" 3 4 9642: extern int pthread_mutex_init (pthread_mutex_t *__mutex, 9642: const pthread_mutexattr_t *__mutexattr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_mutex_destroy (pthread_mutex_t *__mutex) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_mutex_trylock (pthread_mutex_t *__mutex) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_mutex_lock (pthread_mutex_t *__mutex) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: # 805 "/usr/include/pthread.h" 3 4 9642: extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex, const struct timespec *__restrict __abstime) noexcept (true) __asm__ ("" "__pthread_mutex_timedlock64") 9642: 9642: 9642: __attribute__ ((__nonnull__ (1, 2))); 9642: # 823 "/usr/include/pthread.h" 3 4 9642: extern int pthread_mutex_clocklock (pthread_mutex_t *__restrict __mutex, clockid_t __clockid, const struct timespec *__restrict __abstime) noexcept (true) __asm__ ("" "__pthread_mutex_clocklock64") 9642: 9642: 9642: 9642: __attribute__ ((__nonnull__ (1, 3))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int pthread_mutex_unlock (pthread_mutex_t *__mutex) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern int pthread_mutex_getprioceiling (const pthread_mutex_t * 9642: __restrict __mutex, 9642: int *__restrict __prioceiling) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex, 9642: int __prioceiling, 9642: int *__restrict __old_ceiling) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 9642: 9642: 9642: 9642: 9642: extern int pthread_mutex_consistent (pthread_mutex_t *__mutex) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_mutex_consistent_np (pthread_mutex_t *) noexcept (true) __asm__ ("" "pthread_mutex_consistent") 9642: __attribute__ ((__nonnull__ (1))) 9642: __attribute__ ((__deprecated__ ("pthread_mutex_consistent_np is deprecated, use pthread_mutex_consistent"))) 9642: ; 9642: # 874 "/usr/include/pthread.h" 3 4 9642: extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t * 9642: __restrict __attr, 9642: int *__restrict __pshared) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr, 9642: int __pshared) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict 9642: __attr, int *__restrict __kind) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: 9642: extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t * 9642: __restrict __attr, 9642: int *__restrict __protocol) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr, 9642: int __protocol) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t * 9642: __restrict __attr, 9642: int *__restrict __prioceiling) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr, 9642: int __prioceiling) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr, 9642: int *__robustness) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int pthread_mutexattr_getrobust_np (pthread_mutexattr_t *, int *) noexcept (true) __asm__ ("" "pthread_mutexattr_getrobust") 9642: 9642: __attribute__ ((__nonnull__ (1))) 9642: __attribute__ ((__deprecated__ ("pthread_mutexattr_getrobust_np is deprecated, use pthread_mutexattr_getrobust"))) 9642: ; 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr, 9642: int __robustness) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *, int) noexcept (true) __asm__ ("" "pthread_mutexattr_setrobust") 9642: 9642: __attribute__ ((__nonnull__ (1))) 9642: __attribute__ ((__deprecated__ ("pthread_mutexattr_setrobust_np is deprecated, use pthread_mutexattr_setrobust"))) 9642: ; 9642: # 967 "/usr/include/pthread.h" 3 4 9642: extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock, 9642: const pthread_rwlockattr_t *__restrict 9642: __attr) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: # 991 "/usr/include/pthread.h" 3 4 9642: extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock, const struct timespec *__restrict __abstime) noexcept (true) __asm__ ("" "__pthread_rwlock_timedrdlock64") 9642: 9642: 9642: 9642: __attribute__ ((__nonnull__ (1, 2))); 9642: # 1010 "/usr/include/pthread.h" 3 4 9642: extern int pthread_rwlock_clockrdlock (pthread_rwlock_t *__restrict __rwlock, clockid_t __clockid, const struct timespec *__restrict __abstime) noexcept (true) __asm__ ("" "__pthread_rwlock_clockrdlock64") 9642: 9642: 9642: 9642: 9642: __attribute__ ((__nonnull__ (1, 3))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: # 1038 "/usr/include/pthread.h" 3 4 9642: extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock, const struct timespec *__restrict __abstime) noexcept (true) __asm__ ("" "__pthread_rwlock_timedwrlock64") 9642: 9642: 9642: 9642: __attribute__ ((__nonnull__ (1, 2))); 9642: # 1058 "/usr/include/pthread.h" 3 4 9642: extern int pthread_rwlock_clockwrlock (pthread_rwlock_t *__restrict __rwlock, clockid_t __clockid, const struct timespec *__restrict __abstime) noexcept (true) __asm__ ("" "__pthread_rwlock_clockwrlock64") 9642: 9642: 9642: 9642: 9642: __attribute__ ((__nonnull__ (1, 3))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t * 9642: __restrict __attr, 9642: int *__restrict __pshared) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr, 9642: int __pshared) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t * 9642: __restrict __attr, 9642: int *__restrict __pref) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr, 9642: int __pref) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int pthread_cond_init (pthread_cond_t *__restrict __cond, 9642: const pthread_condattr_t *__restrict __cond_attr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_cond_destroy (pthread_cond_t *__cond) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_cond_signal (pthread_cond_t *__cond) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_cond_broadcast (pthread_cond_t *__cond) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int pthread_cond_wait (pthread_cond_t *__restrict __cond, 9642: pthread_mutex_t *__restrict __mutex) 9642: __attribute__ ((__nonnull__ (1, 2))); 9642: # 1151 "/usr/include/pthread.h" 3 4 9642: extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond, pthread_mutex_t *__restrict __mutex, const struct timespec *__restrict __abstime) __asm__ ("" "__pthread_cond_timedwait64") 9642: 9642: 9642: 9642: 9642: __attribute__ ((__nonnull__ (1, 2, 3))); 9642: # 1178 "/usr/include/pthread.h" 3 4 9642: extern int pthread_cond_clockwait (pthread_cond_t *__restrict __cond, pthread_mutex_t *__restrict __mutex, __clockid_t __clock_id, const struct timespec *__restrict __abstime) __asm__ ("" "__pthread_cond_clockwait64") 9642: 9642: 9642: 9642: 9642: 9642: __attribute__ ((__nonnull__ (1, 2, 4))); 9642: # 1194 "/usr/include/pthread.h" 3 4 9642: extern int pthread_condattr_init (pthread_condattr_t *__attr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_condattr_destroy (pthread_condattr_t *__attr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_condattr_getpshared (const pthread_condattr_t * 9642: __restrict __attr, 9642: int *__restrict __pshared) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int pthread_condattr_setpshared (pthread_condattr_t *__attr, 9642: int __pshared) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern int pthread_condattr_getclock (const pthread_condattr_t * 9642: __restrict __attr, 9642: __clockid_t *__restrict __clock_id) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int pthread_condattr_setclock (pthread_condattr_t *__attr, 9642: __clockid_t __clock_id) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: # 1230 "/usr/include/pthread.h" 3 4 9642: extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_spin_destroy (pthread_spinlock_t *__lock) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_spin_lock (pthread_spinlock_t *__lock) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_spin_trylock (pthread_spinlock_t *__lock) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_spin_unlock (pthread_spinlock_t *__lock) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier, 9642: const pthread_barrierattr_t *__restrict 9642: __attr, unsigned int __count) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_barrier_destroy (pthread_barrier_t *__barrier) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_barrier_wait (pthread_barrier_t *__barrier) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t * 9642: __restrict __attr, 9642: int *__restrict __pshared) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr, 9642: int __pshared) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: # 1297 "/usr/include/pthread.h" 3 4 9642: extern int pthread_key_create (pthread_key_t *__key, 9642: void (*__destr_function) (void *)) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int pthread_key_delete (pthread_key_t __key) noexcept (true); 9642: 9642: 9642: extern void *pthread_getspecific (pthread_key_t __key) noexcept (true); 9642: 9642: 9642: extern int pthread_setspecific (pthread_key_t __key, 9642: const void *__pointer) 9642: noexcept (true) __attribute__ ((__access__ (__none__, 2))); 9642: 9642: 9642: 9642: 9642: extern int pthread_getcpuclockid (pthread_t __thread_id, 9642: __clockid_t *__clock_id) 9642: noexcept (true) __attribute__ ((__nonnull__ (2))); 9642: # 1332 "/usr/include/pthread.h" 3 4 9642: extern int pthread_atfork (void (*__prepare) (void), 9642: void (*__parent) (void), 9642: void (*__child) (void)) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__gnu_inline__)) int 9642: __attribute__ ((__leaf__)) pthread_equal (pthread_t __thread1, pthread_t __thread2) noexcept (true) 9642: { 9642: return __thread1 == __thread2; 9642: } 9642: 9642: 9642: } 9642: # 36 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr-default.h" 2 3 9642: # 47 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr-default.h" 3 9642: typedef pthread_t __gthread_t; 9642: typedef pthread_key_t __gthread_key_t; 9642: typedef pthread_once_t __gthread_once_t; 9642: typedef pthread_mutex_t __gthread_mutex_t; 9642: typedef pthread_mutex_t __gthread_recursive_mutex_t; 9642: typedef pthread_cond_t __gthread_cond_t; 9642: typedef struct timespec __gthread_time_t; 9642: # 102 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr-default.h" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 299 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr-default.h" 3 9642: static inline int 9642: __gthread_active_p (void) 9642: { 9642: return 1; 9642: } 9642: # 659 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr-default.h" 3 9642: static inline int 9642: __gthread_create (__gthread_t *__threadid, void *(*__func) (void*), 9642: void *__args) 9642: { 9642: return pthread_create (__threadid, __null, __func, __args); 9642: } 9642: 9642: static inline int 9642: __gthread_join (__gthread_t __threadid, void **__value_ptr) 9642: { 9642: return pthread_join (__threadid, __value_ptr); 9642: } 9642: 9642: static inline int 9642: __gthread_detach (__gthread_t __threadid) 9642: { 9642: return pthread_detach (__threadid); 9642: } 9642: 9642: static inline int 9642: __gthread_equal (__gthread_t __t1, __gthread_t __t2) 9642: { 9642: return pthread_equal (__t1, __t2); 9642: } 9642: 9642: static inline __gthread_t 9642: __gthread_self (void) 9642: { 9642: return pthread_self (); 9642: } 9642: 9642: static inline int 9642: __gthread_yield (void) 9642: { 9642: return sched_yield (); 9642: } 9642: 9642: static inline int 9642: __gthread_once (__gthread_once_t *__once, void (*__func) (void)) 9642: { 9642: if (__gthread_active_p ()) 9642: return pthread_once (__once, __func); 9642: else 9642: return -1; 9642: } 9642: 9642: static inline int 9642: __gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *)) 9642: { 9642: return pthread_key_create (__key, __dtor); 9642: } 9642: 9642: static inline int 9642: __gthread_key_delete (__gthread_key_t __key) 9642: { 9642: return pthread_key_delete (__key); 9642: } 9642: 9642: static inline void * 9642: __gthread_getspecific (__gthread_key_t __key) 9642: { 9642: return pthread_getspecific (__key); 9642: } 9642: 9642: static inline int 9642: __gthread_setspecific (__gthread_key_t __key, const void *__ptr) 9642: { 9642: return pthread_setspecific (__key, __ptr); 9642: } 9642: 9642: static inline void 9642: __gthread_mutex_init_function (__gthread_mutex_t *__mutex) 9642: { 9642: if (__gthread_active_p ()) 9642: pthread_mutex_init (__mutex, __null); 9642: } 9642: 9642: static inline int 9642: __gthread_mutex_destroy (__gthread_mutex_t *__mutex) 9642: { 9642: if (__gthread_active_p ()) 9642: return pthread_mutex_destroy (__mutex); 9642: else 9642: return 0; 9642: } 9642: 9642: static inline int 9642: __gthread_mutex_lock (__gthread_mutex_t *__mutex) 9642: { 9642: if (__gthread_active_p ()) 9642: return pthread_mutex_lock (__mutex); 9642: else 9642: return 0; 9642: } 9642: 9642: static inline int 9642: __gthread_mutex_trylock (__gthread_mutex_t *__mutex) 9642: { 9642: if (__gthread_active_p ()) 9642: return pthread_mutex_trylock (__mutex); 9642: else 9642: return 0; 9642: } 9642: 9642: 9642: static inline int 9642: __gthread_mutex_timedlock (__gthread_mutex_t *__mutex, 9642: const __gthread_time_t *__abs_timeout) 9642: { 9642: if (__gthread_active_p ()) 9642: return pthread_mutex_timedlock (__mutex, __abs_timeout); 9642: else 9642: return 0; 9642: } 9642: 9642: 9642: static inline int 9642: __gthread_mutex_unlock (__gthread_mutex_t *__mutex) 9642: { 9642: if (__gthread_active_p ()) 9642: return pthread_mutex_unlock (__mutex); 9642: else 9642: return 0; 9642: } 9642: # 808 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr-default.h" 3 9642: static inline int 9642: __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex) 9642: { 9642: return __gthread_mutex_lock (__mutex); 9642: } 9642: 9642: static inline int 9642: __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex) 9642: { 9642: return __gthread_mutex_trylock (__mutex); 9642: } 9642: 9642: 9642: static inline int 9642: __gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex, 9642: const __gthread_time_t *__abs_timeout) 9642: { 9642: return __gthread_mutex_timedlock (__mutex, __abs_timeout); 9642: } 9642: 9642: 9642: static inline int 9642: __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex) 9642: { 9642: return __gthread_mutex_unlock (__mutex); 9642: } 9642: 9642: static inline int 9642: __gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex) 9642: { 9642: return __gthread_mutex_destroy (__mutex); 9642: } 9642: # 850 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr-default.h" 3 9642: static inline int 9642: __gthread_cond_broadcast (__gthread_cond_t *__cond) 9642: { 9642: return pthread_cond_broadcast (__cond); 9642: } 9642: 9642: static inline int 9642: __gthread_cond_signal (__gthread_cond_t *__cond) 9642: { 9642: return pthread_cond_signal (__cond); 9642: } 9642: 9642: static inline int 9642: __gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex) 9642: { 9642: return pthread_cond_wait (__cond, __mutex); 9642: } 9642: 9642: static inline int 9642: __gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex, 9642: const __gthread_time_t *__abs_timeout) 9642: { 9642: return pthread_cond_timedwait (__cond, __mutex, __abs_timeout); 9642: } 9642: 9642: static inline int 9642: __gthread_cond_wait_recursive (__gthread_cond_t *__cond, 9642: __gthread_recursive_mutex_t *__mutex) 9642: { 9642: return __gthread_cond_wait (__cond, __mutex); 9642: } 9642: 9642: static inline int 9642: __gthread_cond_destroy (__gthread_cond_t* __cond) 9642: { 9642: return pthread_cond_destroy (__cond); 9642: } 9642: # 149 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr.h" 2 3 9642: 9642: 9642: #pragma GCC visibility pop 9642: # 36 "/usr/include/c++/13/ext/atomicity.h" 2 3 9642: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/atomic_word.h" 1 3 9642: # 32 "/usr/include/arm-linux-gnueabihf/c++/13/bits/atomic_word.h" 3 9642: typedef int _Atomic_word; 9642: # 37 "/usr/include/c++/13/ext/atomicity.h" 2 3 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/sys/single_threaded.h" 1 3 4 9642: # 24 "/usr/include/arm-linux-gnueabihf/sys/single_threaded.h" 3 4 9642: extern "C" { 9642: 9642: 9642: 9642: 9642: extern char __libc_single_threaded; 9642: 9642: } 9642: # 39 "/usr/include/c++/13/ext/atomicity.h" 2 3 9642: 9642: 9642: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: __attribute__((__always_inline__)) 9642: inline bool 9642: __is_single_threaded() noexcept 9642: { 9642: 9642: 9642: 9642: return ::__libc_single_threaded; 9642: 9642: 9642: 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline _Atomic_word 9642: __attribute__((__always_inline__)) 9642: __exchange_and_add(volatile _Atomic_word* __mem, int __val) 9642: { return __atomic_fetch_add(__mem, __val, 4); } 9642: 9642: inline void 9642: __attribute__((__always_inline__)) 9642: __atomic_add(volatile _Atomic_word* __mem, int __val) 9642: { __atomic_fetch_add(__mem, __val, 4); } 9642: # 80 "/usr/include/c++/13/ext/atomicity.h" 3 9642: inline _Atomic_word 9642: __attribute__((__always_inline__)) 9642: __exchange_and_add_single(_Atomic_word* __mem, int __val) 9642: { 9642: _Atomic_word __result = *__mem; 9642: *__mem += __val; 9642: return __result; 9642: } 9642: 9642: inline void 9642: __attribute__((__always_inline__)) 9642: __atomic_add_single(_Atomic_word* __mem, int __val) 9642: { *__mem += __val; } 9642: 9642: inline _Atomic_word 9642: __attribute__ ((__always_inline__)) 9642: __exchange_and_add_dispatch(_Atomic_word* __mem, int __val) 9642: { 9642: if (__is_single_threaded()) 9642: return __exchange_and_add_single(__mem, __val); 9642: else 9642: return __exchange_and_add(__mem, __val); 9642: } 9642: 9642: inline void 9642: __attribute__ ((__always_inline__)) 9642: __atomic_add_dispatch(_Atomic_word* __mem, int __val) 9642: { 9642: if (__is_single_threaded()) 9642: __atomic_add_single(__mem, __val); 9642: else 9642: __atomic_add(__mem, __val); 9642: } 9642: 9642: 9642: } 9642: # 62 "/usr/include/c++/13/bits/shared_ptr_base.h" 2 3 9642: # 1 "/usr/include/c++/13/ext/concurrence.h" 1 3 9642: # 32 "/usr/include/c++/13/ext/concurrence.h" 3 9642: 9642: # 33 "/usr/include/c++/13/ext/concurrence.h" 3 9642: 9642: # 1 "/usr/include/c++/13/exception" 1 3 9642: # 33 "/usr/include/c++/13/exception" 3 9642: 9642: # 34 "/usr/include/c++/13/exception" 3 9642: 9642: 9642: 9642: 9642: extern "C++" { 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: # 51 "/usr/include/c++/13/exception" 3 9642: class bad_exception : public exception 9642: { 9642: public: 9642: bad_exception() noexcept { } 9642: 9642: 9642: 9642: virtual ~bad_exception() noexcept; 9642: 9642: 9642: virtual const char* 9642: what() const noexcept; 9642: }; 9642: 9642: 9642: typedef void (*terminate_handler) (); 9642: 9642: 9642: terminate_handler set_terminate(terminate_handler) noexcept; 9642: 9642: 9642: 9642: terminate_handler get_terminate() noexcept; 9642: 9642: 9642: 9642: 9642: void terminate() noexcept __attribute__ ((__noreturn__)); 9642: 9642: 9642: 9642: typedef void (*__attribute__ ((__deprecated__)) unexpected_handler) (); 9642: 9642: 9642: 9642: 9642: 9642: __attribute__ ((__deprecated__)) 9642: unexpected_handler set_unexpected(unexpected_handler) noexcept; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: __attribute__ ((__deprecated__)) 9642: unexpected_handler get_unexpected() noexcept; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: __attribute__ ((__deprecated__)) 9642: void unexpected() __attribute__ ((__noreturn__)); 9642: # 121 "/usr/include/c++/13/exception" 3 9642: __attribute__ ((__deprecated__ ("use '" "std::uncaught_exceptions()" "' instead"))) 9642: bool uncaught_exception() noexcept __attribute__ ((__pure__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: int uncaught_exceptions() noexcept __attribute__ ((__pure__)); 9642: 9642: 9642: 9642: } 9642: 9642: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 156 "/usr/include/c++/13/exception" 3 9642: void __verbose_terminate_handler(); 9642: 9642: 9642: } 9642: 9642: } 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/exception_ptr.h" 1 3 9642: # 36 "/usr/include/c++/13/bits/exception_ptr.h" 3 9642: # 1 "/usr/include/c++/13/bits/cxxabi_init_exception.h" 1 3 9642: # 34 "/usr/include/c++/13/bits/cxxabi_init_exception.h" 3 9642: 9642: # 35 "/usr/include/c++/13/bits/cxxabi_init_exception.h" 3 9642: 9642: #pragma GCC visibility push(default) 9642: 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 39 "/usr/include/c++/13/bits/cxxabi_init_exception.h" 2 3 9642: # 50 "/usr/include/c++/13/bits/cxxabi_init_exception.h" 3 9642: namespace std 9642: { 9642: class type_info; 9642: } 9642: 9642: namespace __cxxabiv1 9642: { 9642: struct __cxa_refcounted_exception; 9642: 9642: extern "C" 9642: { 9642: 9642: void* 9642: __cxa_allocate_exception(size_t) noexcept; 9642: 9642: void 9642: __cxa_free_exception(void*) noexcept; 9642: 9642: 9642: __cxa_refcounted_exception* 9642: __cxa_init_primary_exception(void *__object, std::type_info *__tinfo, 9642: void ( *__dest) (void *)) 9642: noexcept; 9642: 9642: } 9642: } 9642: 9642: 9642: 9642: #pragma GCC visibility pop 9642: # 37 "/usr/include/c++/13/bits/exception_ptr.h" 2 3 9642: # 50 "/usr/include/c++/13/bits/exception_ptr.h" 3 9642: extern "C++" { 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: class type_info; 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace __exception_ptr 9642: { 9642: class exception_ptr; 9642: } 9642: 9642: using __exception_ptr::exception_ptr; 9642: # 75 "/usr/include/c++/13/bits/exception_ptr.h" 3 9642: exception_ptr current_exception() noexcept; 9642: 9642: template 9642: exception_ptr make_exception_ptr(_Ex) noexcept; 9642: 9642: 9642: void rethrow_exception(exception_ptr) __attribute__ ((__noreturn__)); 9642: 9642: namespace __exception_ptr 9642: { 9642: using std::rethrow_exception; 9642: # 97 "/usr/include/c++/13/bits/exception_ptr.h" 3 9642: class exception_ptr 9642: { 9642: void* _M_exception_object; 9642: 9642: explicit exception_ptr(void* __e) noexcept; 9642: 9642: void _M_addref() noexcept; 9642: void _M_release() noexcept; 9642: 9642: void *_M_get() const noexcept __attribute__ ((__pure__)); 9642: 9642: friend exception_ptr std::current_exception() noexcept; 9642: friend void std::rethrow_exception(exception_ptr); 9642: template 9642: friend exception_ptr std::make_exception_ptr(_Ex) noexcept; 9642: 9642: public: 9642: exception_ptr() noexcept; 9642: 9642: exception_ptr(const exception_ptr&) noexcept; 9642: 9642: 9642: exception_ptr(nullptr_t) noexcept 9642: : _M_exception_object(nullptr) 9642: { } 9642: 9642: exception_ptr(exception_ptr&& __o) noexcept 9642: : _M_exception_object(__o._M_exception_object) 9642: { __o._M_exception_object = nullptr; } 9642: # 135 "/usr/include/c++/13/bits/exception_ptr.h" 3 9642: exception_ptr& 9642: operator=(const exception_ptr&) noexcept; 9642: 9642: 9642: exception_ptr& 9642: operator=(exception_ptr&& __o) noexcept 9642: { 9642: exception_ptr(static_cast(__o)).swap(*this); 9642: return *this; 9642: } 9642: 9642: 9642: ~exception_ptr() noexcept; 9642: 9642: void 9642: swap(exception_ptr&) noexcept; 9642: # 162 "/usr/include/c++/13/bits/exception_ptr.h" 3 9642: explicit operator bool() const noexcept 9642: { return _M_exception_object; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const exception_ptr& __x, const exception_ptr& __y) 9642: noexcept 9642: { return __x._M_exception_object == __y._M_exception_object; } 9642: 9642: friend bool 9642: operator!=(const exception_ptr& __x, const exception_ptr& __y) 9642: noexcept 9642: { return __x._M_exception_object != __y._M_exception_object; } 9642: 9642: 9642: const class std::type_info* 9642: __cxa_exception_type() const noexcept 9642: __attribute__ ((__pure__)); 9642: }; 9642: 9642: 9642: inline 9642: exception_ptr::exception_ptr() noexcept 9642: : _M_exception_object(0) 9642: { } 9642: 9642: 9642: inline 9642: exception_ptr::exception_ptr(const exception_ptr& __other) 9642: noexcept 9642: : _M_exception_object(__other._M_exception_object) 9642: { 9642: if (_M_exception_object) 9642: _M_addref(); 9642: } 9642: 9642: 9642: inline 9642: exception_ptr::~exception_ptr() noexcept 9642: { 9642: if (_M_exception_object) 9642: _M_release(); 9642: } 9642: 9642: 9642: inline exception_ptr& 9642: exception_ptr::operator=(const exception_ptr& __other) noexcept 9642: { 9642: exception_ptr(__other).swap(*this); 9642: return *this; 9642: } 9642: 9642: 9642: inline void 9642: exception_ptr::swap(exception_ptr &__other) noexcept 9642: { 9642: void *__tmp = _M_exception_object; 9642: _M_exception_object = __other._M_exception_object; 9642: __other._M_exception_object = __tmp; 9642: } 9642: 9642: 9642: inline void 9642: swap(exception_ptr& __lhs, exception_ptr& __rhs) 9642: { __lhs.swap(__rhs); } 9642: 9642: 9642: template 9642: 9642: inline void 9642: __dest_thunk(void* __x) 9642: { static_cast<_Ex*>(__x)->~_Ex(); } 9642: 9642: 9642: } 9642: 9642: using __exception_ptr::swap; 9642: 9642: 9642: 9642: template 9642: exception_ptr 9642: make_exception_ptr(_Ex __ex) noexcept 9642: { 9642: 9642: using _Ex2 = typename decay<_Ex>::type; 9642: void* __e = __cxxabiv1::__cxa_allocate_exception(sizeof(_Ex)); 9642: (void) __cxxabiv1::__cxa_init_primary_exception( 9642: __e, const_cast(&typeid(_Ex)), 9642: __exception_ptr::__dest_thunk<_Ex2>); 9642: try 9642: { 9642: ::new (__e) _Ex2(__ex); 9642: return exception_ptr(__e); 9642: } 9642: catch(...) 9642: { 9642: __cxxabiv1::__cxa_free_exception(__e); 9642: return current_exception(); 9642: } 9642: # 277 "/usr/include/c++/13/bits/exception_ptr.h" 3 9642: } 9642: # 291 "/usr/include/c++/13/bits/exception_ptr.h" 3 9642: } 9642: 9642: } 9642: # 165 "/usr/include/c++/13/exception" 2 3 9642: # 1 "/usr/include/c++/13/bits/nested_exception.h" 1 3 9642: # 40 "/usr/include/c++/13/bits/nested_exception.h" 3 9642: extern "C++" { 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: # 59 "/usr/include/c++/13/bits/nested_exception.h" 3 9642: class nested_exception 9642: { 9642: exception_ptr _M_ptr; 9642: 9642: public: 9642: 9642: nested_exception() noexcept : _M_ptr(current_exception()) { } 9642: 9642: nested_exception(const nested_exception&) noexcept = default; 9642: 9642: nested_exception& operator=(const nested_exception&) noexcept = default; 9642: 9642: virtual ~nested_exception() noexcept; 9642: 9642: 9642: [[noreturn]] 9642: void 9642: rethrow_nested() const 9642: { 9642: if (_M_ptr) 9642: rethrow_exception(_M_ptr); 9642: std::terminate(); 9642: } 9642: 9642: 9642: exception_ptr 9642: nested_ptr() const noexcept 9642: { return _M_ptr; } 9642: }; 9642: 9642: 9642: 9642: template 9642: struct _Nested_exception : public _Except, public nested_exception 9642: { 9642: explicit _Nested_exception(const _Except& __ex) 9642: : _Except(__ex) 9642: { } 9642: 9642: explicit _Nested_exception(_Except&& __ex) 9642: : _Except(static_cast<_Except&&>(__ex)) 9642: { } 9642: }; 9642: # 145 "/usr/include/c++/13/bits/nested_exception.h" 3 9642: template 9642: [[noreturn]] 9642: inline void 9642: throw_with_nested(_Tp&& __t) 9642: { 9642: using _Up = typename decay<_Tp>::type; 9642: using _CopyConstructible 9642: = __and_, is_move_constructible<_Up>>; 9642: static_assert(_CopyConstructible::value, 9642: "throw_with_nested argument must be CopyConstructible"); 9642: 9642: 9642: if constexpr (is_class_v<_Up>) 9642: if constexpr (!is_final_v<_Up>) 9642: if constexpr (!is_base_of_v) 9642: throw _Nested_exception<_Up>{std::forward<_Tp>(__t)}; 9642: throw std::forward<_Tp>(__t); 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 203 "/usr/include/c++/13/bits/nested_exception.h" 3 9642: template 9642: 9642: 9642: 9642: inline void 9642: rethrow_if_nested(const _Ex& __ex) 9642: { 9642: const _Ex* __ptr = __builtin_addressof(__ex); 9642: # 223 "/usr/include/c++/13/bits/nested_exception.h" 3 9642: if constexpr (!is_polymorphic_v<_Ex>) 9642: return; 9642: else if constexpr (is_base_of_v 9642: && !is_convertible_v<_Ex*, nested_exception*>) 9642: return; 9642: 9642: 9642: 9642: 9642: else if (auto __ne_ptr = dynamic_cast(__ptr)) 9642: __ne_ptr->rethrow_nested(); 9642: 9642: } 9642: 9642: 9642: } 9642: 9642: } 9642: # 166 "/usr/include/c++/13/exception" 2 3 9642: # 35 "/usr/include/c++/13/ext/concurrence.h" 2 3 9642: 9642: 9642: 9642: 9642: 9642: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: enum _Lock_policy { _S_single, _S_mutex, _S_atomic }; 9642: 9642: 9642: 9642: inline const _Lock_policy __default_lock_policy = 9642: 9642: 9642: 9642: _S_atomic; 9642: 9642: 9642: 9642: 9642: 9642: 9642: class __concurrence_lock_error : public std::exception 9642: { 9642: public: 9642: virtual char const* 9642: what() const throw() 9642: { return "__gnu_cxx::__concurrence_lock_error"; } 9642: }; 9642: 9642: class __concurrence_unlock_error : public std::exception 9642: { 9642: public: 9642: virtual char const* 9642: what() const throw() 9642: { return "__gnu_cxx::__concurrence_unlock_error"; } 9642: }; 9642: 9642: class __concurrence_broadcast_error : public std::exception 9642: { 9642: public: 9642: virtual char const* 9642: what() const throw() 9642: { return "__gnu_cxx::__concurrence_broadcast_error"; } 9642: }; 9642: 9642: class __concurrence_wait_error : public std::exception 9642: { 9642: public: 9642: virtual char const* 9642: what() const throw() 9642: { return "__gnu_cxx::__concurrence_wait_error"; } 9642: }; 9642: 9642: 9642: inline void 9642: __throw_concurrence_lock_error() 9642: { (throw (__concurrence_lock_error())); } 9642: 9642: inline void 9642: __throw_concurrence_unlock_error() 9642: { (throw (__concurrence_unlock_error())); } 9642: 9642: 9642: inline void 9642: __throw_concurrence_broadcast_error() 9642: { (throw (__concurrence_broadcast_error())); } 9642: 9642: inline void 9642: __throw_concurrence_wait_error() 9642: { (throw (__concurrence_wait_error())); } 9642: 9642: 9642: class __mutex 9642: { 9642: private: 9642: 9642: __gthread_mutex_t _M_mutex = { { 0, 0, 0, PTHREAD_MUTEX_TIMED_NP, 0, { 0 } } }; 9642: 9642: 9642: 9642: 9642: __mutex(const __mutex&); 9642: __mutex& operator=(const __mutex&); 9642: 9642: public: 9642: __mutex() 9642: { 9642: 9642: 9642: 9642: 9642: } 9642: # 144 "/usr/include/c++/13/ext/concurrence.h" 3 9642: void lock() 9642: { 9642: 9642: if (__gthread_active_p()) 9642: { 9642: if (__gthread_mutex_lock(&_M_mutex) != 0) 9642: __throw_concurrence_lock_error(); 9642: } 9642: 9642: } 9642: 9642: void unlock() 9642: { 9642: 9642: if (__gthread_active_p()) 9642: { 9642: if (__gthread_mutex_unlock(&_M_mutex) != 0) 9642: __throw_concurrence_unlock_error(); 9642: } 9642: 9642: } 9642: 9642: __gthread_mutex_t* gthread_mutex(void) 9642: { return &_M_mutex; } 9642: }; 9642: 9642: class __recursive_mutex 9642: { 9642: private: 9642: 9642: __gthread_recursive_mutex_t _M_mutex = { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { 0 } } }; 9642: 9642: 9642: 9642: 9642: __recursive_mutex(const __recursive_mutex&); 9642: __recursive_mutex& operator=(const __recursive_mutex&); 9642: 9642: public: 9642: __recursive_mutex() 9642: { 9642: 9642: 9642: 9642: 9642: } 9642: # 199 "/usr/include/c++/13/ext/concurrence.h" 3 9642: void lock() 9642: { 9642: 9642: if (__gthread_active_p()) 9642: { 9642: if (__gthread_recursive_mutex_lock(&_M_mutex) != 0) 9642: __throw_concurrence_lock_error(); 9642: } 9642: 9642: } 9642: 9642: void unlock() 9642: { 9642: 9642: if (__gthread_active_p()) 9642: { 9642: if (__gthread_recursive_mutex_unlock(&_M_mutex) != 0) 9642: __throw_concurrence_unlock_error(); 9642: } 9642: 9642: } 9642: 9642: __gthread_recursive_mutex_t* gthread_recursive_mutex(void) 9642: { return &_M_mutex; } 9642: }; 9642: 9642: 9642: 9642: 9642: class __scoped_lock 9642: { 9642: public: 9642: typedef __mutex __mutex_type; 9642: 9642: private: 9642: __mutex_type& _M_device; 9642: 9642: __scoped_lock(const __scoped_lock&); 9642: __scoped_lock& operator=(const __scoped_lock&); 9642: 9642: public: 9642: explicit __scoped_lock(__mutex_type& __name) : _M_device(__name) 9642: { _M_device.lock(); } 9642: 9642: ~__scoped_lock() throw() 9642: { _M_device.unlock(); } 9642: }; 9642: 9642: 9642: class __cond 9642: { 9642: private: 9642: 9642: __gthread_cond_t _M_cond = { { {0}, {0}, {0, 0}, {0, 0}, 0, 0, {0, 0} } }; 9642: 9642: 9642: 9642: 9642: __cond(const __cond&); 9642: __cond& operator=(const __cond&); 9642: 9642: public: 9642: __cond() 9642: { 9642: 9642: 9642: 9642: 9642: } 9642: # 277 "/usr/include/c++/13/ext/concurrence.h" 3 9642: void broadcast() 9642: { 9642: 9642: if (__gthread_active_p()) 9642: { 9642: if (__gthread_cond_broadcast(&_M_cond) != 0) 9642: __throw_concurrence_broadcast_error(); 9642: } 9642: 9642: } 9642: 9642: void wait(__mutex *mutex) 9642: { 9642: 9642: { 9642: if (__gthread_cond_wait(&_M_cond, mutex->gthread_mutex()) != 0) 9642: __throw_concurrence_wait_error(); 9642: } 9642: 9642: } 9642: 9642: void wait_recursive(__recursive_mutex *mutex) 9642: { 9642: 9642: { 9642: if (__gthread_cond_wait_recursive(&_M_cond, 9642: mutex->gthread_recursive_mutex()) 9642: != 0) 9642: __throw_concurrence_wait_error(); 9642: } 9642: 9642: } 9642: }; 9642: 9642: 9642: 9642: } 9642: # 63 "/usr/include/c++/13/bits/shared_ptr_base.h" 2 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: # 75 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: template class auto_ptr; 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: 9642: 9642: 9642: 9642: class bad_weak_ptr : public std::exception 9642: { 9642: public: 9642: virtual char const* what() const noexcept; 9642: 9642: virtual ~bad_weak_ptr() noexcept; 9642: }; 9642: 9642: 9642: inline void 9642: __throw_bad_weak_ptr() 9642: { (throw (bad_weak_ptr())); } 9642: 9642: using __gnu_cxx::_Lock_policy; 9642: using __gnu_cxx::__default_lock_policy; 9642: using __gnu_cxx::_S_single; 9642: using __gnu_cxx::_S_mutex; 9642: using __gnu_cxx::_S_atomic; 9642: 9642: 9642: template<_Lock_policy _Lp> 9642: class _Mutex_base 9642: { 9642: protected: 9642: 9642: enum { _S_need_barriers = 0 }; 9642: }; 9642: 9642: template<> 9642: class _Mutex_base<_S_mutex> 9642: : public __gnu_cxx::__mutex 9642: { 9642: protected: 9642: 9642: 9642: 9642: enum { _S_need_barriers = 1 }; 9642: }; 9642: 9642: template<_Lock_policy _Lp = __default_lock_policy> 9642: class _Sp_counted_base 9642: : public _Mutex_base<_Lp> 9642: { 9642: public: 9642: _Sp_counted_base() noexcept 9642: : _M_use_count(1), _M_weak_count(1) { } 9642: 9642: virtual 9642: ~_Sp_counted_base() noexcept 9642: { } 9642: 9642: 9642: 9642: virtual void 9642: _M_dispose() noexcept = 0; 9642: 9642: 9642: virtual void 9642: _M_destroy() noexcept 9642: { delete this; } 9642: 9642: virtual void* 9642: _M_get_deleter(const std::type_info&) noexcept = 0; 9642: 9642: 9642: void 9642: _M_add_ref_copy() 9642: { __gnu_cxx::__atomic_add_dispatch(&_M_use_count, 1); } 9642: 9642: 9642: void 9642: _M_add_ref_lock() 9642: { 9642: if (!_M_add_ref_lock_nothrow()) 9642: __throw_bad_weak_ptr(); 9642: } 9642: 9642: 9642: bool 9642: _M_add_ref_lock_nothrow() noexcept; 9642: 9642: 9642: void 9642: _M_release() noexcept; 9642: 9642: 9642: void 9642: _M_release_last_use() noexcept 9642: { 9642: ; 9642: _M_dispose(); 9642: 9642: 9642: 9642: 9642: if (_Mutex_base<_Lp>::_S_need_barriers) 9642: { 9642: __atomic_thread_fence (4); 9642: } 9642: 9642: 9642: ; 9642: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count, 9642: -1) == 1) 9642: { 9642: ; 9642: _M_destroy(); 9642: } 9642: } 9642: 9642: 9642: __attribute__((__noinline__)) 9642: void 9642: _M_release_last_use_cold() noexcept 9642: { _M_release_last_use(); } 9642: 9642: 9642: void 9642: _M_weak_add_ref() noexcept 9642: { __gnu_cxx::__atomic_add_dispatch(&_M_weak_count, 1); } 9642: 9642: 9642: void 9642: _M_weak_release() noexcept 9642: { 9642: 9642: ; 9642: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count, -1) == 1) 9642: { 9642: ; 9642: if (_Mutex_base<_Lp>::_S_need_barriers) 9642: { 9642: 9642: 9642: __atomic_thread_fence (4); 9642: } 9642: _M_destroy(); 9642: } 9642: } 9642: 9642: long 9642: _M_get_use_count() const noexcept 9642: { 9642: 9642: 9642: return __atomic_load_n(&_M_use_count, 0); 9642: } 9642: 9642: private: 9642: _Sp_counted_base(_Sp_counted_base const&) = delete; 9642: _Sp_counted_base& operator=(_Sp_counted_base const&) = delete; 9642: 9642: _Atomic_word _M_use_count; 9642: _Atomic_word _M_weak_count; 9642: }; 9642: 9642: template<> 9642: inline bool 9642: _Sp_counted_base<_S_single>:: 9642: _M_add_ref_lock_nothrow() noexcept 9642: { 9642: if (_M_use_count == 0) 9642: return false; 9642: ++_M_use_count; 9642: return true; 9642: } 9642: 9642: template<> 9642: inline bool 9642: _Sp_counted_base<_S_mutex>:: 9642: _M_add_ref_lock_nothrow() noexcept 9642: { 9642: __gnu_cxx::__scoped_lock sentry(*this); 9642: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1) == 0) 9642: { 9642: _M_use_count = 0; 9642: return false; 9642: } 9642: return true; 9642: } 9642: 9642: template<> 9642: inline bool 9642: _Sp_counted_base<_S_atomic>:: 9642: _M_add_ref_lock_nothrow() noexcept 9642: { 9642: 9642: _Atomic_word __count = _M_get_use_count(); 9642: do 9642: { 9642: if (__count == 0) 9642: return false; 9642: 9642: 9642: } 9642: while (!__atomic_compare_exchange_n(&_M_use_count, &__count, __count + 1, 9642: true, 4, 9642: 0)); 9642: return true; 9642: } 9642: 9642: template<> 9642: inline void 9642: _Sp_counted_base<_S_single>::_M_add_ref_copy() 9642: { ++_M_use_count; } 9642: 9642: template<> 9642: inline void 9642: _Sp_counted_base<_S_single>::_M_release() noexcept 9642: { 9642: if (--_M_use_count == 0) 9642: { 9642: _M_dispose(); 9642: if (--_M_weak_count == 0) 9642: _M_destroy(); 9642: } 9642: } 9642: 9642: template<> 9642: inline void 9642: _Sp_counted_base<_S_mutex>::_M_release() noexcept 9642: { 9642: 9642: ; 9642: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1) 9642: { 9642: _M_release_last_use(); 9642: } 9642: } 9642: 9642: template<> 9642: inline void 9642: _Sp_counted_base<_S_atomic>::_M_release() noexcept 9642: { 9642: ; 9642: 9642: constexpr bool __lock_free 9642: = __atomic_always_lock_free(sizeof(long long), 0) 9642: && __atomic_always_lock_free(sizeof(_Atomic_word), 0); 9642: constexpr bool __double_word 9642: = sizeof(long long) == 2 * sizeof(_Atomic_word); 9642: 9642: 9642: constexpr bool __aligned = __alignof(long long) <= alignof(void*); 9642: if constexpr (__lock_free && __double_word && __aligned) 9642: { 9642: constexpr int __wordbits = 8 * sizeof(_Atomic_word); 9642: constexpr int __shiftbits = __double_word ? __wordbits : 0; 9642: constexpr long long __unique_ref = 1LL + (1LL << __shiftbits); 9642: auto __both_counts = reinterpret_cast(&_M_use_count); 9642: 9642: ; 9642: if (__atomic_load_n(__both_counts, 2) == __unique_ref) 9642: { 9642: 9642: 9642: 9642: 9642: _M_weak_count = _M_use_count = 0; 9642: ; 9642: ; 9642: _M_dispose(); 9642: _M_destroy(); 9642: return; 9642: } 9642: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1) 9642: [[__unlikely__]] 9642: { 9642: _M_release_last_use_cold(); 9642: return; 9642: } 9642: } 9642: else 9642: 9642: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1) 9642: { 9642: _M_release_last_use(); 9642: } 9642: } 9642: 9642: template<> 9642: inline void 9642: _Sp_counted_base<_S_single>::_M_weak_add_ref() noexcept 9642: { ++_M_weak_count; } 9642: 9642: template<> 9642: inline void 9642: _Sp_counted_base<_S_single>::_M_weak_release() noexcept 9642: { 9642: if (--_M_weak_count == 0) 9642: _M_destroy(); 9642: } 9642: 9642: template<> 9642: inline long 9642: _Sp_counted_base<_S_single>::_M_get_use_count() const noexcept 9642: { return _M_use_count; } 9642: 9642: 9642: 9642: template 9642: class __shared_ptr; 9642: 9642: template 9642: class __weak_ptr; 9642: 9642: template 9642: class __enable_shared_from_this; 9642: 9642: template 9642: class shared_ptr; 9642: 9642: template 9642: class weak_ptr; 9642: 9642: template 9642: struct owner_less; 9642: 9642: template 9642: class enable_shared_from_this; 9642: 9642: template<_Lock_policy _Lp = __default_lock_policy> 9642: class __weak_count; 9642: 9642: template<_Lock_policy _Lp = __default_lock_policy> 9642: class __shared_count; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: class _Sp_counted_ptr final : public _Sp_counted_base<_Lp> 9642: { 9642: public: 9642: explicit 9642: _Sp_counted_ptr(_Ptr __p) noexcept 9642: : _M_ptr(__p) { } 9642: 9642: virtual void 9642: _M_dispose() noexcept 9642: { delete _M_ptr; } 9642: 9642: virtual void 9642: _M_destroy() noexcept 9642: { delete this; } 9642: 9642: virtual void* 9642: _M_get_deleter(const std::type_info&) noexcept 9642: { return nullptr; } 9642: 9642: _Sp_counted_ptr(const _Sp_counted_ptr&) = delete; 9642: _Sp_counted_ptr& operator=(const _Sp_counted_ptr&) = delete; 9642: 9642: private: 9642: _Ptr _M_ptr; 9642: }; 9642: 9642: template<> 9642: inline void 9642: _Sp_counted_ptr::_M_dispose() noexcept { } 9642: 9642: template<> 9642: inline void 9642: _Sp_counted_ptr::_M_dispose() noexcept { } 9642: 9642: template<> 9642: inline void 9642: _Sp_counted_ptr::_M_dispose() noexcept { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Sp_ebo_helper; 9642: 9642: 9642: template 9642: struct _Sp_ebo_helper<_Nm, _Tp, true> : private _Tp 9642: { 9642: explicit _Sp_ebo_helper(const _Tp& __tp) : _Tp(__tp) { } 9642: explicit _Sp_ebo_helper(_Tp&& __tp) : _Tp(std::move(__tp)) { } 9642: 9642: static _Tp& 9642: _S_get(_Sp_ebo_helper& __eboh) { return static_cast<_Tp&>(__eboh); } 9642: }; 9642: 9642: 9642: template 9642: struct _Sp_ebo_helper<_Nm, _Tp, false> 9642: { 9642: explicit _Sp_ebo_helper(const _Tp& __tp) : _M_tp(__tp) { } 9642: explicit _Sp_ebo_helper(_Tp&& __tp) : _M_tp(std::move(__tp)) { } 9642: 9642: static _Tp& 9642: _S_get(_Sp_ebo_helper& __eboh) 9642: { return __eboh._M_tp; } 9642: 9642: private: 9642: _Tp _M_tp; 9642: }; 9642: 9642: 9642: template 9642: class _Sp_counted_deleter final : public _Sp_counted_base<_Lp> 9642: { 9642: class _Impl : _Sp_ebo_helper<0, _Deleter>, _Sp_ebo_helper<1, _Alloc> 9642: { 9642: typedef _Sp_ebo_helper<0, _Deleter> _Del_base; 9642: typedef _Sp_ebo_helper<1, _Alloc> _Alloc_base; 9642: 9642: public: 9642: _Impl(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept 9642: : _Del_base(std::move(__d)), _Alloc_base(__a), _M_ptr(__p) 9642: { } 9642: 9642: _Deleter& _M_del() noexcept { return _Del_base::_S_get(*this); } 9642: _Alloc& _M_alloc() noexcept { return _Alloc_base::_S_get(*this); } 9642: 9642: _Ptr _M_ptr; 9642: }; 9642: 9642: public: 9642: using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_deleter>; 9642: 9642: 9642: _Sp_counted_deleter(_Ptr __p, _Deleter __d) noexcept 9642: : _M_impl(__p, std::move(__d), _Alloc()) { } 9642: 9642: 9642: _Sp_counted_deleter(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept 9642: : _M_impl(__p, std::move(__d), __a) { } 9642: 9642: ~_Sp_counted_deleter() noexcept { } 9642: 9642: virtual void 9642: _M_dispose() noexcept 9642: { _M_impl._M_del()(_M_impl._M_ptr); } 9642: 9642: virtual void 9642: _M_destroy() noexcept 9642: { 9642: __allocator_type __a(_M_impl._M_alloc()); 9642: __allocated_ptr<__allocator_type> __guard_ptr{ __a, this }; 9642: this->~_Sp_counted_deleter(); 9642: } 9642: 9642: virtual void* 9642: _M_get_deleter(const type_info& __ti [[__gnu__::__unused__]]) noexcept 9642: { 9642: 9642: 9642: 9642: return __ti == typeid(_Deleter) 9642: ? std::__addressof(_M_impl._M_del()) 9642: : nullptr; 9642: 9642: 9642: 9642: } 9642: 9642: private: 9642: _Impl _M_impl; 9642: }; 9642: 9642: 9642: 9642: struct _Sp_make_shared_tag 9642: { 9642: private: 9642: template 9642: friend class _Sp_counted_ptr_inplace; 9642: 9642: static const type_info& 9642: _S_ti() noexcept __attribute__ ((__visibility__ ("default"))) 9642: { 9642: alignas(type_info) static constexpr char __tag[sizeof(type_info)] = { }; 9642: return reinterpret_cast(__tag); 9642: } 9642: 9642: static bool _S_eq(const type_info&) noexcept; 9642: }; 9642: 9642: template 9642: struct _Sp_alloc_shared_tag 9642: { 9642: const _Alloc& _M_a; 9642: }; 9642: 9642: template 9642: class _Sp_counted_ptr_inplace final : public _Sp_counted_base<_Lp> 9642: { 9642: class _Impl : _Sp_ebo_helper<0, _Alloc> 9642: { 9642: typedef _Sp_ebo_helper<0, _Alloc> _A_base; 9642: 9642: public: 9642: explicit _Impl(_Alloc __a) noexcept : _A_base(__a) { } 9642: 9642: _Alloc& _M_alloc() noexcept { return _A_base::_S_get(*this); } 9642: 9642: __gnu_cxx::__aligned_buffer<_Tp> _M_storage; 9642: }; 9642: 9642: public: 9642: using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_ptr_inplace>; 9642: 9642: 9642: template 9642: _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args) 9642: : _M_impl(__a) 9642: { 9642: 9642: 9642: allocator_traits<_Alloc>::construct(__a, _M_ptr(), 9642: std::forward<_Args>(__args)...); 9642: } 9642: 9642: ~_Sp_counted_ptr_inplace() noexcept { } 9642: 9642: virtual void 9642: _M_dispose() noexcept 9642: { 9642: allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr()); 9642: } 9642: 9642: 9642: virtual void 9642: _M_destroy() noexcept 9642: { 9642: __allocator_type __a(_M_impl._M_alloc()); 9642: __allocated_ptr<__allocator_type> __guard_ptr{ __a, this }; 9642: this->~_Sp_counted_ptr_inplace(); 9642: } 9642: 9642: private: 9642: friend class __shared_count<_Lp>; 9642: 9642: 9642: 9642: virtual void* 9642: _M_get_deleter(const std::type_info& __ti) noexcept override 9642: { 9642: auto __ptr = const_cast::type*>(_M_ptr()); 9642: 9642: 9642: 9642: 9642: if (&__ti == &_Sp_make_shared_tag::_S_ti() 9642: || 9642: 9642: __ti == typeid(_Sp_make_shared_tag) 9642: 9642: 9642: 9642: ) 9642: return __ptr; 9642: return nullptr; 9642: } 9642: 9642: _Tp* _M_ptr() noexcept { return _M_impl._M_storage._M_ptr(); } 9642: 9642: _Impl _M_impl; 9642: }; 9642: # 886 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 9642: struct __sp_array_delete 9642: { 9642: template 9642: void operator()(_Yp* __p) const { delete[] __p; } 9642: }; 9642: 9642: template<_Lock_policy _Lp> 9642: class __shared_count 9642: { 9642: 9642: template 9642: struct __not_alloc_shared_tag { using type = void; }; 9642: 9642: template 9642: struct __not_alloc_shared_tag<_Sp_alloc_shared_tag<_Tp>> { }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: public: 9642: constexpr __shared_count() noexcept : _M_pi(0) 9642: { } 9642: 9642: template 9642: explicit 9642: __shared_count(_Ptr __p) : _M_pi(0) 9642: { 9642: try 9642: { 9642: _M_pi = new _Sp_counted_ptr<_Ptr, _Lp>(__p); 9642: } 9642: catch(...) 9642: { 9642: delete __p; 9642: throw; 9642: } 9642: } 9642: 9642: template 9642: __shared_count(_Ptr __p, false_type) 9642: : __shared_count(__p) 9642: { } 9642: 9642: template 9642: __shared_count(_Ptr __p, true_type) 9642: : __shared_count(__p, __sp_array_delete{}, allocator()) 9642: { } 9642: 9642: template::type> 9642: __shared_count(_Ptr __p, _Deleter __d) 9642: : __shared_count(__p, std::move(__d), allocator()) 9642: { } 9642: 9642: template::type> 9642: __shared_count(_Ptr __p, _Deleter __d, _Alloc __a) : _M_pi(0) 9642: { 9642: typedef _Sp_counted_deleter<_Ptr, _Deleter, _Alloc, _Lp> _Sp_cd_type; 9642: try 9642: { 9642: typename _Sp_cd_type::__allocator_type __a2(__a); 9642: auto __guard = std::__allocate_guarded(__a2); 9642: _Sp_cd_type* __mem = __guard.get(); 9642: ::new (__mem) _Sp_cd_type(__p, std::move(__d), std::move(__a)); 9642: _M_pi = __mem; 9642: __guard = nullptr; 9642: } 9642: catch(...) 9642: { 9642: __d(__p); 9642: throw; 9642: } 9642: } 9642: 9642: template 9642: __shared_count(_Tp*& __p, _Sp_alloc_shared_tag<_Alloc> __a, 9642: _Args&&... __args) 9642: { 9642: typedef _Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp> _Sp_cp_type; 9642: typename _Sp_cp_type::__allocator_type __a2(__a._M_a); 9642: auto __guard = std::__allocate_guarded(__a2); 9642: _Sp_cp_type* __mem = __guard.get(); 9642: auto __pi = ::new (__mem) 9642: _Sp_cp_type(__a._M_a, std::forward<_Args>(__args)...); 9642: __guard = nullptr; 9642: _M_pi = __pi; 9642: __p = __pi->_M_ptr(); 9642: } 9642: # 1024 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: 9642: template 9642: explicit 9642: __shared_count(std::auto_ptr<_Tp>&& __r); 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: 9642: template 9642: explicit 9642: __shared_count(std::unique_ptr<_Tp, _Del>&& __r) : _M_pi(0) 9642: { 9642: 9642: 9642: if (__r.get() == nullptr) 9642: return; 9642: 9642: using _Ptr = typename unique_ptr<_Tp, _Del>::pointer; 9642: using _Del2 = __conditional_t::value, 9642: reference_wrapper::type>, 9642: _Del>; 9642: using _Sp_cd_type 9642: = _Sp_counted_deleter<_Ptr, _Del2, allocator, _Lp>; 9642: using _Alloc = allocator<_Sp_cd_type>; 9642: using _Alloc_traits = allocator_traits<_Alloc>; 9642: _Alloc __a; 9642: _Sp_cd_type* __mem = _Alloc_traits::allocate(__a, 1); 9642: 9642: 9642: 9642: _Alloc_traits::construct(__a, __mem, __r.release(), 9642: std::forward<_Del>(__r.get_deleter())); 9642: _M_pi = __mem; 9642: } 9642: 9642: 9642: explicit __shared_count(const __weak_count<_Lp>& __r); 9642: 9642: 9642: explicit 9642: __shared_count(const __weak_count<_Lp>& __r, std::nothrow_t) noexcept; 9642: 9642: ~__shared_count() noexcept 9642: { 9642: if (_M_pi != nullptr) 9642: _M_pi->_M_release(); 9642: } 9642: 9642: __shared_count(const __shared_count& __r) noexcept 9642: : _M_pi(__r._M_pi) 9642: { 9642: if (_M_pi != nullptr) 9642: _M_pi->_M_add_ref_copy(); 9642: } 9642: 9642: __shared_count& 9642: operator=(const __shared_count& __r) noexcept 9642: { 9642: _Sp_counted_base<_Lp>* __tmp = __r._M_pi; 9642: if (__tmp != _M_pi) 9642: { 9642: if (__tmp != nullptr) 9642: __tmp->_M_add_ref_copy(); 9642: if (_M_pi != nullptr) 9642: _M_pi->_M_release(); 9642: _M_pi = __tmp; 9642: } 9642: return *this; 9642: } 9642: 9642: void 9642: _M_swap(__shared_count& __r) noexcept 9642: { 9642: _Sp_counted_base<_Lp>* __tmp = __r._M_pi; 9642: __r._M_pi = _M_pi; 9642: _M_pi = __tmp; 9642: } 9642: 9642: long 9642: _M_get_use_count() const noexcept 9642: { return _M_pi ? _M_pi->_M_get_use_count() : 0; } 9642: 9642: bool 9642: _M_unique() const noexcept 9642: { return this->_M_get_use_count() == 1; } 9642: 9642: void* 9642: _M_get_deleter(const std::type_info& __ti) const noexcept 9642: { return _M_pi ? _M_pi->_M_get_deleter(__ti) : nullptr; } 9642: 9642: bool 9642: _M_less(const __shared_count& __rhs) const noexcept 9642: { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } 9642: 9642: bool 9642: _M_less(const __weak_count<_Lp>& __rhs) const noexcept 9642: { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } 9642: 9642: 9642: friend inline bool 9642: operator==(const __shared_count& __a, const __shared_count& __b) noexcept 9642: { return __a._M_pi == __b._M_pi; } 9642: 9642: private: 9642: friend class __weak_count<_Lp>; 9642: 9642: 9642: 9642: 9642: _Sp_counted_base<_Lp>* _M_pi; 9642: }; 9642: 9642: 9642: template<_Lock_policy _Lp> 9642: class __weak_count 9642: { 9642: public: 9642: constexpr __weak_count() noexcept : _M_pi(nullptr) 9642: { } 9642: 9642: __weak_count(const __shared_count<_Lp>& __r) noexcept 9642: : _M_pi(__r._M_pi) 9642: { 9642: if (_M_pi != nullptr) 9642: _M_pi->_M_weak_add_ref(); 9642: } 9642: 9642: __weak_count(const __weak_count& __r) noexcept 9642: : _M_pi(__r._M_pi) 9642: { 9642: if (_M_pi != nullptr) 9642: _M_pi->_M_weak_add_ref(); 9642: } 9642: 9642: __weak_count(__weak_count&& __r) noexcept 9642: : _M_pi(__r._M_pi) 9642: { __r._M_pi = nullptr; } 9642: 9642: ~__weak_count() noexcept 9642: { 9642: if (_M_pi != nullptr) 9642: _M_pi->_M_weak_release(); 9642: } 9642: 9642: __weak_count& 9642: operator=(const __shared_count<_Lp>& __r) noexcept 9642: { 9642: _Sp_counted_base<_Lp>* __tmp = __r._M_pi; 9642: if (__tmp != nullptr) 9642: __tmp->_M_weak_add_ref(); 9642: if (_M_pi != nullptr) 9642: _M_pi->_M_weak_release(); 9642: _M_pi = __tmp; 9642: return *this; 9642: } 9642: 9642: __weak_count& 9642: operator=(const __weak_count& __r) noexcept 9642: { 9642: _Sp_counted_base<_Lp>* __tmp = __r._M_pi; 9642: if (__tmp != nullptr) 9642: __tmp->_M_weak_add_ref(); 9642: if (_M_pi != nullptr) 9642: _M_pi->_M_weak_release(); 9642: _M_pi = __tmp; 9642: return *this; 9642: } 9642: 9642: __weak_count& 9642: operator=(__weak_count&& __r) noexcept 9642: { 9642: if (_M_pi != nullptr) 9642: _M_pi->_M_weak_release(); 9642: _M_pi = __r._M_pi; 9642: __r._M_pi = nullptr; 9642: return *this; 9642: } 9642: 9642: void 9642: _M_swap(__weak_count& __r) noexcept 9642: { 9642: _Sp_counted_base<_Lp>* __tmp = __r._M_pi; 9642: __r._M_pi = _M_pi; 9642: _M_pi = __tmp; 9642: } 9642: 9642: long 9642: _M_get_use_count() const noexcept 9642: { return _M_pi != nullptr ? _M_pi->_M_get_use_count() : 0; } 9642: 9642: bool 9642: _M_less(const __weak_count& __rhs) const noexcept 9642: { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } 9642: 9642: bool 9642: _M_less(const __shared_count<_Lp>& __rhs) const noexcept 9642: { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } 9642: 9642: 9642: friend inline bool 9642: operator==(const __weak_count& __a, const __weak_count& __b) noexcept 9642: { return __a._M_pi == __b._M_pi; } 9642: 9642: private: 9642: friend class __shared_count<_Lp>; 9642: 9642: 9642: 9642: 9642: _Sp_counted_base<_Lp>* _M_pi; 9642: }; 9642: 9642: 9642: template<_Lock_policy _Lp> 9642: inline 9642: __shared_count<_Lp>::__shared_count(const __weak_count<_Lp>& __r) 9642: : _M_pi(__r._M_pi) 9642: { 9642: if (_M_pi == nullptr || !_M_pi->_M_add_ref_lock_nothrow()) 9642: __throw_bad_weak_ptr(); 9642: } 9642: 9642: 9642: template<_Lock_policy _Lp> 9642: inline 9642: __shared_count<_Lp>:: 9642: __shared_count(const __weak_count<_Lp>& __r, std::nothrow_t) noexcept 9642: : _M_pi(__r._M_pi) 9642: { 9642: if (_M_pi && !_M_pi->_M_add_ref_lock_nothrow()) 9642: _M_pi = nullptr; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct __sp_compatible_with 9642: : false_type 9642: { }; 9642: 9642: template 9642: struct __sp_compatible_with<_Yp*, _Tp*> 9642: : is_convertible<_Yp*, _Tp*>::type 9642: { }; 9642: 9642: template 9642: struct __sp_compatible_with<_Up(*)[_Nm], _Up(*)[]> 9642: : true_type 9642: { }; 9642: 9642: template 9642: struct __sp_compatible_with<_Up(*)[_Nm], const _Up(*)[]> 9642: : true_type 9642: { }; 9642: 9642: template 9642: struct __sp_compatible_with<_Up(*)[_Nm], volatile _Up(*)[]> 9642: : true_type 9642: { }; 9642: 9642: template 9642: struct __sp_compatible_with<_Up(*)[_Nm], const volatile _Up(*)[]> 9642: : true_type 9642: { }; 9642: 9642: 9642: template 9642: struct __sp_is_constructible_arrN 9642: : false_type 9642: { }; 9642: 9642: template 9642: struct __sp_is_constructible_arrN<_Up, _Nm, _Yp, __void_t<_Yp[_Nm]>> 9642: : is_convertible<_Yp(*)[_Nm], _Up(*)[_Nm]>::type 9642: { }; 9642: 9642: 9642: template 9642: struct __sp_is_constructible_arr 9642: : false_type 9642: { }; 9642: 9642: template 9642: struct __sp_is_constructible_arr<_Up, _Yp, __void_t<_Yp[]>> 9642: : is_convertible<_Yp(*)[], _Up(*)[]>::type 9642: { }; 9642: 9642: 9642: template 9642: struct __sp_is_constructible; 9642: 9642: 9642: template 9642: struct __sp_is_constructible<_Up[_Nm], _Yp> 9642: : __sp_is_constructible_arrN<_Up, _Nm, _Yp>::type 9642: { }; 9642: 9642: 9642: template 9642: struct __sp_is_constructible<_Up[], _Yp> 9642: : __sp_is_constructible_arr<_Up, _Yp>::type 9642: { }; 9642: 9642: 9642: template 9642: struct __sp_is_constructible 9642: : is_convertible<_Yp*, _Tp*>::type 9642: { }; 9642: 9642: 9642: 9642: template::value, bool = is_void<_Tp>::value> 9642: class __shared_ptr_access 9642: { 9642: public: 9642: using element_type = _Tp; 9642: 9642: element_type& 9642: operator*() const noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(_M_get() != nullptr)) __builtin_unreachable(); } while (false); 9642: return *_M_get(); 9642: } 9642: 9642: element_type* 9642: operator->() const noexcept 9642: { 9642: ; 9642: return _M_get(); 9642: } 9642: 9642: private: 9642: element_type* 9642: _M_get() const noexcept 9642: { return static_cast*>(this)->get(); } 9642: }; 9642: 9642: 9642: template 9642: class __shared_ptr_access<_Tp, _Lp, false, true> 9642: { 9642: public: 9642: using element_type = _Tp; 9642: 9642: element_type* 9642: operator->() const noexcept 9642: { 9642: auto __ptr = static_cast*>(this)->get(); 9642: ; 9642: return __ptr; 9642: } 9642: }; 9642: 9642: 9642: template 9642: class __shared_ptr_access<_Tp, _Lp, true, false> 9642: { 9642: public: 9642: using element_type = typename remove_extent<_Tp>::type; 9642: # 1407 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 9642: element_type& 9642: operator[](ptrdiff_t __i) const noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(_M_get() != nullptr)) __builtin_unreachable(); } while (false); 9642: do { if (std::__is_constant_evaluated() && !bool(!extent<_Tp>::value || __i < extent<_Tp>::value)) __builtin_unreachable(); } while (false); 9642: return _M_get()[__i]; 9642: } 9642: 9642: private: 9642: element_type* 9642: _M_get() const noexcept 9642: { return static_cast*>(this)->get(); } 9642: }; 9642: 9642: template 9642: class __shared_ptr 9642: : public __shared_ptr_access<_Tp, _Lp> 9642: { 9642: public: 9642: using element_type = typename remove_extent<_Tp>::type; 9642: 9642: private: 9642: 9642: template 9642: using _SafeConv 9642: = typename enable_if<__sp_is_constructible<_Tp, _Yp>::value>::type; 9642: 9642: 9642: template 9642: using _Compatible = typename 9642: enable_if<__sp_compatible_with<_Yp*, _Tp*>::value, _Res>::type; 9642: 9642: 9642: template 9642: using _Assignable = _Compatible<_Yp, __shared_ptr&>; 9642: 9642: 9642: template::pointer> 9642: using _UniqCompatible = __enable_if_t<__and_< 9642: __sp_compatible_with<_Yp*, _Tp*>, 9642: is_convertible<_Ptr, element_type*>, 9642: is_move_constructible<_Del> 9642: >::value, _Res>; 9642: 9642: 9642: template 9642: using _UniqAssignable = _UniqCompatible<_Yp, _Del, __shared_ptr&>; 9642: 9642: public: 9642: 9642: 9642: using weak_type = __weak_ptr<_Tp, _Lp>; 9642: 9642: 9642: constexpr __shared_ptr() noexcept 9642: : _M_ptr(0), _M_refcount() 9642: { } 9642: 9642: template> 9642: explicit 9642: __shared_ptr(_Yp* __p) 9642: : _M_ptr(__p), _M_refcount(__p, typename is_array<_Tp>::type()) 9642: { 9642: static_assert( !is_void<_Yp>::value, "incomplete type" ); 9642: static_assert( sizeof(_Yp) > 0, "incomplete type" ); 9642: _M_enable_shared_from_this_with(__p); 9642: } 9642: 9642: template> 9642: __shared_ptr(_Yp* __p, _Deleter __d) 9642: : _M_ptr(__p), _M_refcount(__p, std::move(__d)) 9642: { 9642: static_assert(__is_invocable<_Deleter&, _Yp*&>::value, 9642: "deleter expression d(p) is well-formed"); 9642: _M_enable_shared_from_this_with(__p); 9642: } 9642: 9642: template> 9642: __shared_ptr(_Yp* __p, _Deleter __d, _Alloc __a) 9642: : _M_ptr(__p), _M_refcount(__p, std::move(__d), std::move(__a)) 9642: { 9642: static_assert(__is_invocable<_Deleter&, _Yp*&>::value, 9642: "deleter expression d(p) is well-formed"); 9642: _M_enable_shared_from_this_with(__p); 9642: } 9642: 9642: template 9642: __shared_ptr(nullptr_t __p, _Deleter __d) 9642: : _M_ptr(0), _M_refcount(__p, std::move(__d)) 9642: { } 9642: 9642: template 9642: __shared_ptr(nullptr_t __p, _Deleter __d, _Alloc __a) 9642: : _M_ptr(0), _M_refcount(__p, std::move(__d), std::move(__a)) 9642: { } 9642: 9642: 9642: template 9642: __shared_ptr(const __shared_ptr<_Yp, _Lp>& __r, 9642: element_type* __p) noexcept 9642: : _M_ptr(__p), _M_refcount(__r._M_refcount) 9642: { } 9642: 9642: 9642: template 9642: __shared_ptr(__shared_ptr<_Yp, _Lp>&& __r, 9642: element_type* __p) noexcept 9642: : _M_ptr(__p), _M_refcount() 9642: { 9642: _M_refcount._M_swap(__r._M_refcount); 9642: __r._M_ptr = nullptr; 9642: } 9642: 9642: __shared_ptr(const __shared_ptr&) noexcept = default; 9642: __shared_ptr& operator=(const __shared_ptr&) noexcept = default; 9642: ~__shared_ptr() = default; 9642: 9642: template> 9642: __shared_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept 9642: : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) 9642: { } 9642: 9642: __shared_ptr(__shared_ptr&& __r) noexcept 9642: : _M_ptr(__r._M_ptr), _M_refcount() 9642: { 9642: _M_refcount._M_swap(__r._M_refcount); 9642: __r._M_ptr = nullptr; 9642: } 9642: 9642: template> 9642: __shared_ptr(__shared_ptr<_Yp, _Lp>&& __r) noexcept 9642: : _M_ptr(__r._M_ptr), _M_refcount() 9642: { 9642: _M_refcount._M_swap(__r._M_refcount); 9642: __r._M_ptr = nullptr; 9642: } 9642: 9642: template> 9642: explicit __shared_ptr(const __weak_ptr<_Yp, _Lp>& __r) 9642: : _M_refcount(__r._M_refcount) 9642: { 9642: 9642: 9642: _M_ptr = __r._M_ptr; 9642: } 9642: 9642: 9642: template> 9642: __shared_ptr(unique_ptr<_Yp, _Del>&& __r) 9642: : _M_ptr(__r.get()), _M_refcount() 9642: { 9642: auto __raw = __to_address(__r.get()); 9642: _M_refcount = __shared_count<_Lp>(std::move(__r)); 9642: _M_enable_shared_from_this_with(__raw); 9642: } 9642: # 1585 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: 9642: template> 9642: __shared_ptr(auto_ptr<_Yp>&& __r); 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: constexpr __shared_ptr(nullptr_t) noexcept : __shared_ptr() { } 9642: 9642: template 9642: _Assignable<_Yp> 9642: operator=(const __shared_ptr<_Yp, _Lp>& __r) noexcept 9642: { 9642: _M_ptr = __r._M_ptr; 9642: _M_refcount = __r._M_refcount; 9642: return *this; 9642: } 9642: 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: template 9642: _Assignable<_Yp> 9642: operator=(auto_ptr<_Yp>&& __r) 9642: { 9642: __shared_ptr(std::move(__r)).swap(*this); 9642: return *this; 9642: } 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: __shared_ptr& 9642: operator=(__shared_ptr&& __r) noexcept 9642: { 9642: __shared_ptr(std::move(__r)).swap(*this); 9642: return *this; 9642: } 9642: 9642: template 9642: _Assignable<_Yp> 9642: operator=(__shared_ptr<_Yp, _Lp>&& __r) noexcept 9642: { 9642: __shared_ptr(std::move(__r)).swap(*this); 9642: return *this; 9642: } 9642: 9642: template 9642: _UniqAssignable<_Yp, _Del> 9642: operator=(unique_ptr<_Yp, _Del>&& __r) 9642: { 9642: __shared_ptr(std::move(__r)).swap(*this); 9642: return *this; 9642: } 9642: 9642: void 9642: reset() noexcept 9642: { __shared_ptr().swap(*this); } 9642: 9642: template 9642: _SafeConv<_Yp> 9642: reset(_Yp* __p) 9642: { 9642: 9642: do { if (std::__is_constant_evaluated() && !bool(__p == nullptr || __p != _M_ptr)) __builtin_unreachable(); } while (false); 9642: __shared_ptr(__p).swap(*this); 9642: } 9642: 9642: template 9642: _SafeConv<_Yp> 9642: reset(_Yp* __p, _Deleter __d) 9642: { __shared_ptr(__p, std::move(__d)).swap(*this); } 9642: 9642: template 9642: _SafeConv<_Yp> 9642: reset(_Yp* __p, _Deleter __d, _Alloc __a) 9642: { __shared_ptr(__p, std::move(__d), std::move(__a)).swap(*this); } 9642: 9642: 9642: element_type* 9642: get() const noexcept 9642: { return _M_ptr; } 9642: 9642: 9642: explicit operator bool() const noexcept 9642: { return _M_ptr != nullptr; } 9642: 9642: 9642: bool 9642: unique() const noexcept 9642: { return _M_refcount._M_unique(); } 9642: 9642: 9642: long 9642: use_count() const noexcept 9642: { return _M_refcount._M_get_use_count(); } 9642: 9642: 9642: void 9642: swap(__shared_ptr<_Tp, _Lp>& __other) noexcept 9642: { 9642: std::swap(_M_ptr, __other._M_ptr); 9642: _M_refcount._M_swap(__other._M_refcount); 9642: } 9642: # 1697 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 9642: template 9642: bool 9642: owner_before(__shared_ptr<_Tp1, _Lp> const& __rhs) const noexcept 9642: { return _M_refcount._M_less(__rhs._M_refcount); } 9642: 9642: template 9642: bool 9642: owner_before(__weak_ptr<_Tp1, _Lp> const& __rhs) const noexcept 9642: { return _M_refcount._M_less(__rhs._M_refcount); } 9642: 9642: 9642: protected: 9642: 9642: template 9642: __shared_ptr(_Sp_alloc_shared_tag<_Alloc> __tag, _Args&&... __args) 9642: : _M_ptr(), _M_refcount(_M_ptr, __tag, std::forward<_Args>(__args)...) 9642: { _M_enable_shared_from_this_with(_M_ptr); } 9642: 9642: template 9642: friend __shared_ptr<_Tp1, _Lp1> 9642: __allocate_shared(const _Alloc& __a, _Args&&... __args); 9642: # 1731 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 9642: __shared_ptr(const __weak_ptr<_Tp, _Lp>& __r, std::nothrow_t) noexcept 9642: : _M_refcount(__r._M_refcount, std::nothrow) 9642: { 9642: _M_ptr = _M_refcount._M_get_use_count() ? __r._M_ptr : nullptr; 9642: } 9642: 9642: friend class __weak_ptr<_Tp, _Lp>; 9642: 9642: private: 9642: 9642: template 9642: using __esft_base_t = decltype(__enable_shared_from_this_base( 9642: std::declval&>(), 9642: std::declval<_Yp*>())); 9642: 9642: 9642: template 9642: struct __has_esft_base 9642: : false_type { }; 9642: 9642: template 9642: struct __has_esft_base<_Yp, __void_t<__esft_base_t<_Yp>>> 9642: : __not_> { }; 9642: 9642: template::type> 9642: typename enable_if<__has_esft_base<_Yp2>::value>::type 9642: _M_enable_shared_from_this_with(_Yp* __p) noexcept 9642: { 9642: if (auto __base = __enable_shared_from_this_base(_M_refcount, __p)) 9642: __base->_M_weak_assign(const_cast<_Yp2*>(__p), _M_refcount); 9642: } 9642: 9642: template::type> 9642: typename enable_if::value>::type 9642: _M_enable_shared_from_this_with(_Yp*) noexcept 9642: { } 9642: 9642: void* 9642: _M_get_deleter(const std::type_info& __ti) const noexcept 9642: { return _M_refcount._M_get_deleter(__ti); } 9642: 9642: template friend class __shared_ptr; 9642: template friend class __weak_ptr; 9642: 9642: template 9642: friend _Del* get_deleter(const __shared_ptr<_Tp1, _Lp1>&) noexcept; 9642: 9642: template 9642: friend _Del* get_deleter(const shared_ptr<_Tp1>&) noexcept; 9642: 9642: 9642: 9642: 9642: 9642: element_type* _M_ptr; 9642: __shared_count<_Lp> _M_refcount; 9642: }; 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator==(const __shared_ptr<_Tp1, _Lp>& __a, 9642: const __shared_ptr<_Tp2, _Lp>& __b) noexcept 9642: { return __a.get() == __b.get(); } 9642: 9642: template 9642: inline bool 9642: operator==(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept 9642: { return !__a; } 9642: # 1817 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 9642: template 9642: inline bool 9642: operator==(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept 9642: { return !__a; } 9642: 9642: template 9642: inline bool 9642: operator!=(const __shared_ptr<_Tp1, _Lp>& __a, 9642: const __shared_ptr<_Tp2, _Lp>& __b) noexcept 9642: { return __a.get() != __b.get(); } 9642: 9642: template 9642: inline bool 9642: operator!=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept 9642: { return (bool)__a; } 9642: 9642: template 9642: inline bool 9642: operator!=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept 9642: { return (bool)__a; } 9642: 9642: template 9642: inline bool 9642: operator<(const __shared_ptr<_Tp, _Lp>& __a, 9642: const __shared_ptr<_Up, _Lp>& __b) noexcept 9642: { 9642: using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type; 9642: using _Up_elt = typename __shared_ptr<_Up, _Lp>::element_type; 9642: using _Vp = typename common_type<_Tp_elt*, _Up_elt*>::type; 9642: return less<_Vp>()(__a.get(), __b.get()); 9642: } 9642: 9642: template 9642: inline bool 9642: operator<(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept 9642: { 9642: using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type; 9642: return less<_Tp_elt*>()(__a.get(), nullptr); 9642: } 9642: 9642: template 9642: inline bool 9642: operator<(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept 9642: { 9642: using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type; 9642: return less<_Tp_elt*>()(nullptr, __a.get()); 9642: } 9642: 9642: template 9642: inline bool 9642: operator<=(const __shared_ptr<_Tp1, _Lp>& __a, 9642: const __shared_ptr<_Tp2, _Lp>& __b) noexcept 9642: { return !(__b < __a); } 9642: 9642: template 9642: inline bool 9642: operator<=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept 9642: { return !(nullptr < __a); } 9642: 9642: template 9642: inline bool 9642: operator<=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept 9642: { return !(__a < nullptr); } 9642: 9642: template 9642: inline bool 9642: operator>(const __shared_ptr<_Tp1, _Lp>& __a, 9642: const __shared_ptr<_Tp2, _Lp>& __b) noexcept 9642: { return (__b < __a); } 9642: 9642: template 9642: inline bool 9642: operator>(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept 9642: { return nullptr < __a; } 9642: 9642: template 9642: inline bool 9642: operator>(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept 9642: { return __a < nullptr; } 9642: 9642: template 9642: inline bool 9642: operator>=(const __shared_ptr<_Tp1, _Lp>& __a, 9642: const __shared_ptr<_Tp2, _Lp>& __b) noexcept 9642: { return !(__a < __b); } 9642: 9642: template 9642: inline bool 9642: operator>=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept 9642: { return !(__a < nullptr); } 9642: 9642: template 9642: inline bool 9642: operator>=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept 9642: { return !(nullptr < __a); } 9642: 9642: 9642: 9642: template 9642: inline void 9642: swap(__shared_ptr<_Tp, _Lp>& __a, __shared_ptr<_Tp, _Lp>& __b) noexcept 9642: { __a.swap(__b); } 9642: # 1927 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 9642: template 9642: inline __shared_ptr<_Tp, _Lp> 9642: static_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept 9642: { 9642: using _Sp = __shared_ptr<_Tp, _Lp>; 9642: return _Sp(__r, static_cast(__r.get())); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline __shared_ptr<_Tp, _Lp> 9642: const_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept 9642: { 9642: using _Sp = __shared_ptr<_Tp, _Lp>; 9642: return _Sp(__r, const_cast(__r.get())); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline __shared_ptr<_Tp, _Lp> 9642: dynamic_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept 9642: { 9642: using _Sp = __shared_ptr<_Tp, _Lp>; 9642: if (auto* __p = dynamic_cast(__r.get())) 9642: return _Sp(__r, __p); 9642: return _Sp(); 9642: } 9642: 9642: 9642: template 9642: inline __shared_ptr<_Tp, _Lp> 9642: reinterpret_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept 9642: { 9642: using _Sp = __shared_ptr<_Tp, _Lp>; 9642: return _Sp(__r, reinterpret_cast(__r.get())); 9642: } 9642: 9642: 9642: template 9642: class __weak_ptr 9642: { 9642: template 9642: using _Compatible = typename 9642: enable_if<__sp_compatible_with<_Yp*, _Tp*>::value, _Res>::type; 9642: 9642: 9642: template 9642: using _Assignable = _Compatible<_Yp, __weak_ptr&>; 9642: 9642: public: 9642: using element_type = typename remove_extent<_Tp>::type; 9642: 9642: constexpr __weak_ptr() noexcept 9642: : _M_ptr(nullptr), _M_refcount() 9642: { } 9642: 9642: __weak_ptr(const __weak_ptr&) noexcept = default; 9642: 9642: ~__weak_ptr() = default; 9642: # 2009 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 9642: template> 9642: __weak_ptr(const __weak_ptr<_Yp, _Lp>& __r) noexcept 9642: : _M_refcount(__r._M_refcount) 9642: { _M_ptr = __r.lock().get(); } 9642: 9642: template> 9642: __weak_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept 9642: : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) 9642: { } 9642: 9642: __weak_ptr(__weak_ptr&& __r) noexcept 9642: : _M_ptr(__r._M_ptr), _M_refcount(std::move(__r._M_refcount)) 9642: { __r._M_ptr = nullptr; } 9642: 9642: template> 9642: __weak_ptr(__weak_ptr<_Yp, _Lp>&& __r) noexcept 9642: : _M_ptr(__r.lock().get()), _M_refcount(std::move(__r._M_refcount)) 9642: { __r._M_ptr = nullptr; } 9642: 9642: __weak_ptr& 9642: operator=(const __weak_ptr& __r) noexcept = default; 9642: 9642: template 9642: _Assignable<_Yp> 9642: operator=(const __weak_ptr<_Yp, _Lp>& __r) noexcept 9642: { 9642: _M_ptr = __r.lock().get(); 9642: _M_refcount = __r._M_refcount; 9642: return *this; 9642: } 9642: 9642: template 9642: _Assignable<_Yp> 9642: operator=(const __shared_ptr<_Yp, _Lp>& __r) noexcept 9642: { 9642: _M_ptr = __r._M_ptr; 9642: _M_refcount = __r._M_refcount; 9642: return *this; 9642: } 9642: 9642: __weak_ptr& 9642: operator=(__weak_ptr&& __r) noexcept 9642: { 9642: __weak_ptr(std::move(__r)).swap(*this); 9642: return *this; 9642: } 9642: 9642: template 9642: _Assignable<_Yp> 9642: operator=(__weak_ptr<_Yp, _Lp>&& __r) noexcept 9642: { 9642: _M_ptr = __r.lock().get(); 9642: _M_refcount = std::move(__r._M_refcount); 9642: __r._M_ptr = nullptr; 9642: return *this; 9642: } 9642: 9642: __shared_ptr<_Tp, _Lp> 9642: lock() const noexcept 9642: { return __shared_ptr(*this, std::nothrow); } 9642: 9642: long 9642: use_count() const noexcept 9642: { return _M_refcount._M_get_use_count(); } 9642: 9642: bool 9642: expired() const noexcept 9642: { return _M_refcount._M_get_use_count() == 0; } 9642: 9642: template 9642: bool 9642: owner_before(const __shared_ptr<_Tp1, _Lp>& __rhs) const noexcept 9642: { return _M_refcount._M_less(__rhs._M_refcount); } 9642: 9642: template 9642: bool 9642: owner_before(const __weak_ptr<_Tp1, _Lp>& __rhs) const noexcept 9642: { return _M_refcount._M_less(__rhs._M_refcount); } 9642: 9642: void 9642: reset() noexcept 9642: { __weak_ptr().swap(*this); } 9642: 9642: void 9642: swap(__weak_ptr& __s) noexcept 9642: { 9642: std::swap(_M_ptr, __s._M_ptr); 9642: _M_refcount._M_swap(__s._M_refcount); 9642: } 9642: 9642: private: 9642: 9642: void 9642: _M_assign(_Tp* __ptr, const __shared_count<_Lp>& __refcount) noexcept 9642: { 9642: if (use_count() == 0) 9642: { 9642: _M_ptr = __ptr; 9642: _M_refcount = __refcount; 9642: } 9642: } 9642: 9642: template friend class __shared_ptr; 9642: template friend class __weak_ptr; 9642: friend class __enable_shared_from_this<_Tp, _Lp>; 9642: friend class enable_shared_from_this<_Tp>; 9642: 9642: 9642: 9642: 9642: element_type* _M_ptr; 9642: __weak_count<_Lp> _M_refcount; 9642: }; 9642: 9642: 9642: template 9642: inline void 9642: swap(__weak_ptr<_Tp, _Lp>& __a, __weak_ptr<_Tp, _Lp>& __b) noexcept 9642: { __a.swap(__b); } 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: template 9642: struct _Sp_owner_less : public binary_function<_Tp, _Tp, bool> 9642: { 9642: bool 9642: operator()(const _Tp& __lhs, const _Tp& __rhs) const noexcept 9642: { return __lhs.owner_before(__rhs); } 9642: 9642: bool 9642: operator()(const _Tp& __lhs, const _Tp1& __rhs) const noexcept 9642: { return __lhs.owner_before(__rhs); } 9642: 9642: bool 9642: operator()(const _Tp1& __lhs, const _Tp& __rhs) const noexcept 9642: { return __lhs.owner_before(__rhs); } 9642: }; 9642: #pragma GCC diagnostic pop 9642: 9642: template<> 9642: struct _Sp_owner_less 9642: { 9642: template 9642: auto 9642: operator()(const _Tp& __lhs, const _Up& __rhs) const noexcept 9642: -> decltype(__lhs.owner_before(__rhs)) 9642: { return __lhs.owner_before(__rhs); } 9642: 9642: using is_transparent = void; 9642: }; 9642: 9642: template 9642: struct owner_less<__shared_ptr<_Tp, _Lp>> 9642: : public _Sp_owner_less<__shared_ptr<_Tp, _Lp>, __weak_ptr<_Tp, _Lp>> 9642: { }; 9642: 9642: template 9642: struct owner_less<__weak_ptr<_Tp, _Lp>> 9642: : public _Sp_owner_less<__weak_ptr<_Tp, _Lp>, __shared_ptr<_Tp, _Lp>> 9642: { }; 9642: 9642: 9642: template 9642: class __enable_shared_from_this 9642: { 9642: protected: 9642: constexpr __enable_shared_from_this() noexcept { } 9642: 9642: __enable_shared_from_this(const __enable_shared_from_this&) noexcept { } 9642: 9642: __enable_shared_from_this& 9642: operator=(const __enable_shared_from_this&) noexcept 9642: { return *this; } 9642: 9642: ~__enable_shared_from_this() { } 9642: 9642: public: 9642: __shared_ptr<_Tp, _Lp> 9642: shared_from_this() 9642: { return __shared_ptr<_Tp, _Lp>(this->_M_weak_this); } 9642: 9642: __shared_ptr 9642: shared_from_this() const 9642: { return __shared_ptr(this->_M_weak_this); } 9642: 9642: 9642: __weak_ptr<_Tp, _Lp> 9642: weak_from_this() noexcept 9642: { return this->_M_weak_this; } 9642: 9642: __weak_ptr 9642: weak_from_this() const noexcept 9642: { return this->_M_weak_this; } 9642: 9642: 9642: private: 9642: template 9642: void 9642: _M_weak_assign(_Tp1* __p, const __shared_count<_Lp>& __n) const noexcept 9642: { _M_weak_this._M_assign(__p, __n); } 9642: 9642: friend const __enable_shared_from_this* 9642: __enable_shared_from_this_base(const __shared_count<_Lp>&, 9642: const __enable_shared_from_this* __p) 9642: { return __p; } 9642: 9642: template 9642: friend class __shared_ptr; 9642: 9642: mutable __weak_ptr<_Tp, _Lp> _M_weak_this; 9642: }; 9642: 9642: template 9642: inline __shared_ptr<_Tp, _Lp> 9642: __allocate_shared(const _Alloc& __a, _Args&&... __args) 9642: { 9642: static_assert(!is_array<_Tp>::value, "make_shared not supported"); 9642: 9642: return __shared_ptr<_Tp, _Lp>(_Sp_alloc_shared_tag<_Alloc>{__a}, 9642: std::forward<_Args>(__args)...); 9642: } 9642: 9642: template 9642: inline __shared_ptr<_Tp, _Lp> 9642: __make_shared(_Args&&... __args) 9642: { 9642: typedef typename std::remove_const<_Tp>::type _Tp_nc; 9642: return std::__allocate_shared<_Tp, _Lp>(std::allocator<_Tp_nc>(), 9642: std::forward<_Args>(__args)...); 9642: } 9642: 9642: 9642: template 9642: struct hash<__shared_ptr<_Tp, _Lp>> 9642: : public __hash_base> 9642: { 9642: size_t 9642: operator()(const __shared_ptr<_Tp, _Lp>& __s) const noexcept 9642: { 9642: return hash::element_type*>()( 9642: __s.get()); 9642: } 9642: }; 9642: 9642: 9642: } 9642: # 54 "/usr/include/c++/13/bits/shared_ptr.h" 2 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 68 "/usr/include/c++/13/bits/shared_ptr.h" 3 9642: template 9642: inline std::basic_ostream<_Ch, _Tr>& 9642: operator<<(std::basic_ostream<_Ch, _Tr>& __os, 9642: const __shared_ptr<_Tp, _Lp>& __p) 9642: { 9642: __os << __p.get(); 9642: return __os; 9642: } 9642: 9642: template 9642: inline _Del* 9642: get_deleter(const __shared_ptr<_Tp, _Lp>& __p) noexcept 9642: { 9642: 9642: return static_cast<_Del*>(__p._M_get_deleter(typeid(_Del))); 9642: 9642: 9642: 9642: } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline _Del* 9642: get_deleter(const shared_ptr<_Tp>& __p) noexcept 9642: { 9642: 9642: return static_cast<_Del*>(__p._M_get_deleter(typeid(_Del))); 9642: 9642: 9642: 9642: } 9642: # 111 "/usr/include/c++/13/bits/shared_ptr.h" 3 9642: template 9642: using _NonArray = __enable_if_t::value, _Tp>; 9642: # 174 "/usr/include/c++/13/bits/shared_ptr.h" 3 9642: template 9642: class shared_ptr : public __shared_ptr<_Tp> 9642: { 9642: template 9642: using _Constructible = typename enable_if< 9642: is_constructible<__shared_ptr<_Tp>, _Args...>::value 9642: >::type; 9642: 9642: template 9642: using _Assignable = typename enable_if< 9642: is_assignable<__shared_ptr<_Tp>&, _Arg>::value, shared_ptr& 9642: >::type; 9642: 9642: public: 9642: 9642: 9642: using element_type = typename __shared_ptr<_Tp>::element_type; 9642: 9642: 9642: 9642: 9642: 9642: using weak_type = weak_ptr<_Tp>; 9642: 9642: 9642: 9642: 9642: 9642: constexpr shared_ptr() noexcept : __shared_ptr<_Tp>() { } 9642: 9642: shared_ptr(const shared_ptr&) noexcept = default; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template> 9642: explicit 9642: shared_ptr(_Yp* __p) : __shared_ptr<_Tp>(__p) { } 9642: # 229 "/usr/include/c++/13/bits/shared_ptr.h" 3 9642: template> 9642: shared_ptr(_Yp* __p, _Deleter __d) 9642: : __shared_ptr<_Tp>(__p, std::move(__d)) { } 9642: # 247 "/usr/include/c++/13/bits/shared_ptr.h" 3 9642: template 9642: shared_ptr(nullptr_t __p, _Deleter __d) 9642: : __shared_ptr<_Tp>(__p, std::move(__d)) { } 9642: # 266 "/usr/include/c++/13/bits/shared_ptr.h" 3 9642: template> 9642: shared_ptr(_Yp* __p, _Deleter __d, _Alloc __a) 9642: : __shared_ptr<_Tp>(__p, std::move(__d), std::move(__a)) { } 9642: # 286 "/usr/include/c++/13/bits/shared_ptr.h" 3 9642: template 9642: shared_ptr(nullptr_t __p, _Deleter __d, _Alloc __a) 9642: : __shared_ptr<_Tp>(__p, std::move(__d), std::move(__a)) { } 9642: # 310 "/usr/include/c++/13/bits/shared_ptr.h" 3 9642: template 9642: shared_ptr(const shared_ptr<_Yp>& __r, element_type* __p) noexcept 9642: : __shared_ptr<_Tp>(__r, __p) { } 9642: # 349 "/usr/include/c++/13/bits/shared_ptr.h" 3 9642: template&>> 9642: shared_ptr(const shared_ptr<_Yp>& __r) noexcept 9642: : __shared_ptr<_Tp>(__r) { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: shared_ptr(shared_ptr&& __r) noexcept 9642: : __shared_ptr<_Tp>(std::move(__r)) { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template>> 9642: shared_ptr(shared_ptr<_Yp>&& __r) noexcept 9642: : __shared_ptr<_Tp>(std::move(__r)) { } 9642: # 379 "/usr/include/c++/13/bits/shared_ptr.h" 3 9642: template&>> 9642: explicit shared_ptr(const weak_ptr<_Yp>& __r) 9642: : __shared_ptr<_Tp>(__r) { } 9642: 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: template>> 9642: shared_ptr(auto_ptr<_Yp>&& __r); 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: 9642: 9642: template>> 9642: shared_ptr(unique_ptr<_Yp, _Del>&& __r) 9642: : __shared_ptr<_Tp>(std::move(__r)) { } 9642: # 412 "/usr/include/c++/13/bits/shared_ptr.h" 3 9642: constexpr shared_ptr(nullptr_t) noexcept : shared_ptr() { } 9642: 9642: shared_ptr& operator=(const shared_ptr&) noexcept = default; 9642: 9642: template 9642: _Assignable&> 9642: operator=(const shared_ptr<_Yp>& __r) noexcept 9642: { 9642: this->__shared_ptr<_Tp>::operator=(__r); 9642: return *this; 9642: } 9642: 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: template 9642: _Assignable> 9642: operator=(auto_ptr<_Yp>&& __r) 9642: { 9642: this->__shared_ptr<_Tp>::operator=(std::move(__r)); 9642: return *this; 9642: } 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: shared_ptr& 9642: operator=(shared_ptr&& __r) noexcept 9642: { 9642: this->__shared_ptr<_Tp>::operator=(std::move(__r)); 9642: return *this; 9642: } 9642: 9642: template 9642: _Assignable> 9642: operator=(shared_ptr<_Yp>&& __r) noexcept 9642: { 9642: this->__shared_ptr<_Tp>::operator=(std::move(__r)); 9642: return *this; 9642: } 9642: 9642: template 9642: _Assignable> 9642: operator=(unique_ptr<_Yp, _Del>&& __r) 9642: { 9642: this->__shared_ptr<_Tp>::operator=(std::move(__r)); 9642: return *this; 9642: } 9642: 9642: private: 9642: 9642: template 9642: shared_ptr(_Sp_alloc_shared_tag<_Alloc> __tag, _Args&&... __args) 9642: : __shared_ptr<_Tp>(__tag, std::forward<_Args>(__args)...) 9642: { } 9642: 9642: template 9642: friend shared_ptr<_NonArray<_Yp>> 9642: allocate_shared(const _Alloc&, _Args&&...); 9642: 9642: template 9642: friend shared_ptr<_NonArray<_Yp>> 9642: make_shared(_Args&&...); 9642: # 535 "/usr/include/c++/13/bits/shared_ptr.h" 3 9642: shared_ptr(const weak_ptr<_Tp>& __r, std::nothrow_t) noexcept 9642: : __shared_ptr<_Tp>(__r, std::nothrow) { } 9642: 9642: friend class weak_ptr<_Tp>; 9642: }; 9642: 9642: 9642: template 9642: shared_ptr(weak_ptr<_Tp>) -> shared_ptr<_Tp>; 9642: template 9642: shared_ptr(unique_ptr<_Tp, _Del>) -> shared_ptr<_Tp>; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] inline bool 9642: operator==(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept 9642: { return __a.get() == __b.get(); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] inline bool 9642: operator==(const shared_ptr<_Tp>& __a, nullptr_t) noexcept 9642: { return !__a; } 9642: # 580 "/usr/include/c++/13/bits/shared_ptr.h" 3 9642: template 9642: [[__nodiscard__]] inline bool 9642: operator==(nullptr_t, const shared_ptr<_Tp>& __a) noexcept 9642: { return !__a; } 9642: 9642: 9642: template 9642: [[__nodiscard__]] inline bool 9642: operator!=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept 9642: { return __a.get() != __b.get(); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] inline bool 9642: operator!=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept 9642: { return (bool)__a; } 9642: 9642: 9642: template 9642: [[__nodiscard__]] inline bool 9642: operator!=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept 9642: { return (bool)__a; } 9642: 9642: 9642: template 9642: [[__nodiscard__]] inline bool 9642: operator<(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept 9642: { 9642: using _Tp_elt = typename shared_ptr<_Tp>::element_type; 9642: using _Up_elt = typename shared_ptr<_Up>::element_type; 9642: using _Vp = typename common_type<_Tp_elt*, _Up_elt*>::type; 9642: return less<_Vp>()(__a.get(), __b.get()); 9642: } 9642: 9642: 9642: template 9642: [[__nodiscard__]] inline bool 9642: operator<(const shared_ptr<_Tp>& __a, nullptr_t) noexcept 9642: { 9642: using _Tp_elt = typename shared_ptr<_Tp>::element_type; 9642: return less<_Tp_elt*>()(__a.get(), nullptr); 9642: } 9642: 9642: 9642: template 9642: [[__nodiscard__]] inline bool 9642: operator<(nullptr_t, const shared_ptr<_Tp>& __a) noexcept 9642: { 9642: using _Tp_elt = typename shared_ptr<_Tp>::element_type; 9642: return less<_Tp_elt*>()(nullptr, __a.get()); 9642: } 9642: 9642: 9642: template 9642: [[__nodiscard__]] inline bool 9642: operator<=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept 9642: { return !(__b < __a); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] inline bool 9642: operator<=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept 9642: { return !(nullptr < __a); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] inline bool 9642: operator<=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept 9642: { return !(__a < nullptr); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] inline bool 9642: operator>(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept 9642: { return (__b < __a); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] inline bool 9642: operator>(const shared_ptr<_Tp>& __a, nullptr_t) noexcept 9642: { return nullptr < __a; } 9642: 9642: 9642: template 9642: [[__nodiscard__]] inline bool 9642: operator>(nullptr_t, const shared_ptr<_Tp>& __a) noexcept 9642: { return __a < nullptr; } 9642: 9642: 9642: template 9642: [[__nodiscard__]] inline bool 9642: operator>=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept 9642: { return !(__a < __b); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] inline bool 9642: operator>=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept 9642: { return !(__a < nullptr); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] inline bool 9642: operator>=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept 9642: { return !(nullptr < __a); } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline void 9642: swap(shared_ptr<_Tp>& __a, shared_ptr<_Tp>& __b) noexcept 9642: { __a.swap(__b); } 9642: 9642: 9642: 9642: 9642: template 9642: inline shared_ptr<_Tp> 9642: static_pointer_cast(const shared_ptr<_Up>& __r) noexcept 9642: { 9642: using _Sp = shared_ptr<_Tp>; 9642: return _Sp(__r, static_cast(__r.get())); 9642: } 9642: 9642: 9642: template 9642: inline shared_ptr<_Tp> 9642: const_pointer_cast(const shared_ptr<_Up>& __r) noexcept 9642: { 9642: using _Sp = shared_ptr<_Tp>; 9642: return _Sp(__r, const_cast(__r.get())); 9642: } 9642: 9642: 9642: template 9642: inline shared_ptr<_Tp> 9642: dynamic_pointer_cast(const shared_ptr<_Up>& __r) noexcept 9642: { 9642: using _Sp = shared_ptr<_Tp>; 9642: if (auto* __p = dynamic_cast(__r.get())) 9642: return _Sp(__r, __p); 9642: return _Sp(); 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: inline shared_ptr<_Tp> 9642: reinterpret_pointer_cast(const shared_ptr<_Up>& __r) noexcept 9642: { 9642: using _Sp = shared_ptr<_Tp>; 9642: return _Sp(__r, reinterpret_cast(__r.get())); 9642: } 9642: # 810 "/usr/include/c++/13/bits/shared_ptr.h" 3 9642: template 9642: class weak_ptr : public __weak_ptr<_Tp> 9642: { 9642: template 9642: using _Constructible = typename enable_if< 9642: is_constructible<__weak_ptr<_Tp>, _Arg>::value 9642: >::type; 9642: 9642: template 9642: using _Assignable = typename enable_if< 9642: is_assignable<__weak_ptr<_Tp>&, _Arg>::value, weak_ptr& 9642: >::type; 9642: 9642: public: 9642: constexpr weak_ptr() noexcept = default; 9642: 9642: template&>> 9642: weak_ptr(const shared_ptr<_Yp>& __r) noexcept 9642: : __weak_ptr<_Tp>(__r) { } 9642: 9642: weak_ptr(const weak_ptr&) noexcept = default; 9642: 9642: template&>> 9642: weak_ptr(const weak_ptr<_Yp>& __r) noexcept 9642: : __weak_ptr<_Tp>(__r) { } 9642: 9642: weak_ptr(weak_ptr&&) noexcept = default; 9642: 9642: template>> 9642: weak_ptr(weak_ptr<_Yp>&& __r) noexcept 9642: : __weak_ptr<_Tp>(std::move(__r)) { } 9642: 9642: weak_ptr& 9642: operator=(const weak_ptr& __r) noexcept = default; 9642: 9642: template 9642: _Assignable&> 9642: operator=(const weak_ptr<_Yp>& __r) noexcept 9642: { 9642: this->__weak_ptr<_Tp>::operator=(__r); 9642: return *this; 9642: } 9642: 9642: template 9642: _Assignable&> 9642: operator=(const shared_ptr<_Yp>& __r) noexcept 9642: { 9642: this->__weak_ptr<_Tp>::operator=(__r); 9642: return *this; 9642: } 9642: 9642: weak_ptr& 9642: operator=(weak_ptr&& __r) noexcept = default; 9642: 9642: template 9642: _Assignable> 9642: operator=(weak_ptr<_Yp>&& __r) noexcept 9642: { 9642: this->__weak_ptr<_Tp>::operator=(std::move(__r)); 9642: return *this; 9642: } 9642: 9642: shared_ptr<_Tp> 9642: lock() const noexcept 9642: { return shared_ptr<_Tp>(*this, std::nothrow); } 9642: }; 9642: 9642: 9642: template 9642: weak_ptr(shared_ptr<_Tp>) -> weak_ptr<_Tp>; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline void 9642: swap(weak_ptr<_Tp>& __a, weak_ptr<_Tp>& __b) noexcept 9642: { __a.swap(__b); } 9642: 9642: 9642: 9642: template 9642: struct owner_less; 9642: 9642: 9642: template<> 9642: struct owner_less : _Sp_owner_less 9642: { }; 9642: 9642: 9642: template 9642: struct owner_less> 9642: : public _Sp_owner_less, weak_ptr<_Tp>> 9642: { }; 9642: 9642: 9642: template 9642: struct owner_less> 9642: : public _Sp_owner_less, shared_ptr<_Tp>> 9642: { }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: class enable_shared_from_this 9642: { 9642: protected: 9642: constexpr enable_shared_from_this() noexcept { } 9642: 9642: enable_shared_from_this(const enable_shared_from_this&) noexcept { } 9642: 9642: enable_shared_from_this& 9642: operator=(const enable_shared_from_this&) noexcept 9642: { return *this; } 9642: 9642: ~enable_shared_from_this() { } 9642: 9642: public: 9642: shared_ptr<_Tp> 9642: shared_from_this() 9642: { return shared_ptr<_Tp>(this->_M_weak_this); } 9642: 9642: shared_ptr 9642: shared_from_this() const 9642: { return shared_ptr(this->_M_weak_this); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: weak_ptr<_Tp> 9642: weak_from_this() noexcept 9642: { return this->_M_weak_this; } 9642: 9642: weak_ptr 9642: weak_from_this() const noexcept 9642: { return this->_M_weak_this; } 9642: 9642: 9642: 9642: private: 9642: template 9642: void 9642: _M_weak_assign(_Tp1* __p, const __shared_count<>& __n) const noexcept 9642: { _M_weak_this._M_assign(__p, __n); } 9642: 9642: 9642: friend const enable_shared_from_this* 9642: __enable_shared_from_this_base(const __shared_count<>&, 9642: const enable_shared_from_this* __p) 9642: { return __p; } 9642: 9642: template 9642: friend class __shared_ptr; 9642: 9642: mutable weak_ptr<_Tp> _M_weak_this; 9642: }; 9642: # 988 "/usr/include/c++/13/bits/shared_ptr.h" 3 9642: template 9642: inline shared_ptr<_NonArray<_Tp>> 9642: allocate_shared(const _Alloc& __a, _Args&&... __args) 9642: { 9642: return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a}, 9642: std::forward<_Args>(__args)...); 9642: } 9642: # 1003 "/usr/include/c++/13/bits/shared_ptr.h" 3 9642: template 9642: inline shared_ptr<_NonArray<_Tp>> 9642: make_shared(_Args&&... __args) 9642: { 9642: using _Alloc = allocator; 9642: _Alloc __a; 9642: return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a}, 9642: std::forward<_Args>(__args)...); 9642: } 9642: # 1152 "/usr/include/c++/13/bits/shared_ptr.h" 3 9642: template 9642: struct hash> 9642: : public __hash_base> 9642: { 9642: size_t 9642: operator()(const shared_ptr<_Tp>& __s) const noexcept 9642: { 9642: return std::hash::element_type*>()(__s.get()); 9642: } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: namespace __detail::__variant 9642: { 9642: template struct _Never_valueless_alt; 9642: 9642: 9642: 9642: template 9642: struct _Never_valueless_alt> 9642: : std::true_type 9642: { }; 9642: 9642: 9642: 9642: template 9642: struct _Never_valueless_alt> 9642: : std::true_type 9642: { }; 9642: } 9642: 9642: 9642: 9642: } 9642: # 81 "/usr/include/c++/13/memory" 2 3 9642: # 1 "/usr/include/c++/13/bits/shared_ptr_atomic.h" 1 3 9642: # 61 "/usr/include/c++/13/bits/shared_ptr_atomic.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 73 "/usr/include/c++/13/bits/shared_ptr_atomic.h" 3 9642: struct _Sp_locker 9642: { 9642: _Sp_locker(const _Sp_locker&) = delete; 9642: _Sp_locker& operator=(const _Sp_locker&) = delete; 9642: 9642: 9642: explicit 9642: _Sp_locker(const void*) noexcept; 9642: _Sp_locker(const void*, const void*) noexcept; 9642: ~_Sp_locker(); 9642: 9642: private: 9642: unsigned char _M_key1; 9642: unsigned char _M_key2; 9642: 9642: 9642: 9642: }; 9642: # 100 "/usr/include/c++/13/bits/shared_ptr_atomic.h" 3 9642: template 9642: inline bool 9642: atomic_is_lock_free(const __shared_ptr<_Tp, _Lp>*) 9642: { 9642: 9642: return __gthread_active_p() == 0; 9642: 9642: 9642: 9642: } 9642: 9642: template 9642: inline bool 9642: atomic_is_lock_free(const shared_ptr<_Tp>* __p) 9642: { return std::atomic_is_lock_free<_Tp, __default_lock_policy>(__p); } 9642: # 127 "/usr/include/c++/13/bits/shared_ptr_atomic.h" 3 9642: template 9642: inline shared_ptr<_Tp> 9642: atomic_load_explicit(const shared_ptr<_Tp>* __p, memory_order) 9642: { 9642: _Sp_locker __lock{__p}; 9642: return *__p; 9642: } 9642: 9642: template 9642: inline shared_ptr<_Tp> 9642: atomic_load(const shared_ptr<_Tp>* __p) 9642: { return std::atomic_load_explicit(__p, memory_order_seq_cst); } 9642: 9642: template 9642: inline __shared_ptr<_Tp, _Lp> 9642: atomic_load_explicit(const __shared_ptr<_Tp, _Lp>* __p, memory_order) 9642: { 9642: _Sp_locker __lock{__p}; 9642: return *__p; 9642: } 9642: 9642: template 9642: inline __shared_ptr<_Tp, _Lp> 9642: atomic_load(const __shared_ptr<_Tp, _Lp>* __p) 9642: { return std::atomic_load_explicit(__p, memory_order_seq_cst); } 9642: # 163 "/usr/include/c++/13/bits/shared_ptr_atomic.h" 3 9642: template 9642: inline void 9642: atomic_store_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r, 9642: memory_order) 9642: { 9642: _Sp_locker __lock{__p}; 9642: __p->swap(__r); 9642: } 9642: 9642: template 9642: inline void 9642: atomic_store(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r) 9642: { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); } 9642: 9642: template 9642: inline void 9642: atomic_store_explicit(__shared_ptr<_Tp, _Lp>* __p, 9642: __shared_ptr<_Tp, _Lp> __r, 9642: memory_order) 9642: { 9642: _Sp_locker __lock{__p}; 9642: __p->swap(__r); 9642: } 9642: 9642: template 9642: inline void 9642: atomic_store(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r) 9642: { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); } 9642: # 200 "/usr/include/c++/13/bits/shared_ptr_atomic.h" 3 9642: template 9642: inline shared_ptr<_Tp> 9642: atomic_exchange_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r, 9642: memory_order) 9642: { 9642: _Sp_locker __lock{__p}; 9642: __p->swap(__r); 9642: return __r; 9642: } 9642: 9642: template 9642: inline shared_ptr<_Tp> 9642: atomic_exchange(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r) 9642: { 9642: return std::atomic_exchange_explicit(__p, std::move(__r), 9642: memory_order_seq_cst); 9642: } 9642: 9642: template 9642: inline __shared_ptr<_Tp, _Lp> 9642: atomic_exchange_explicit(__shared_ptr<_Tp, _Lp>* __p, 9642: __shared_ptr<_Tp, _Lp> __r, 9642: memory_order) 9642: { 9642: _Sp_locker __lock{__p}; 9642: __p->swap(__r); 9642: return __r; 9642: } 9642: 9642: template 9642: inline __shared_ptr<_Tp, _Lp> 9642: atomic_exchange(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r) 9642: { 9642: return std::atomic_exchange_explicit(__p, std::move(__r), 9642: memory_order_seq_cst); 9642: } 9642: # 249 "/usr/include/c++/13/bits/shared_ptr_atomic.h" 3 9642: template 9642: bool 9642: atomic_compare_exchange_strong_explicit(shared_ptr<_Tp>* __p, 9642: shared_ptr<_Tp>* __v, 9642: shared_ptr<_Tp> __w, 9642: memory_order, 9642: memory_order) 9642: { 9642: shared_ptr<_Tp> __x; 9642: _Sp_locker __lock{__p, __v}; 9642: owner_less> __less; 9642: if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p)) 9642: { 9642: __x = std::move(*__p); 9642: *__p = std::move(__w); 9642: return true; 9642: } 9642: __x = std::move(*__v); 9642: *__v = *__p; 9642: return false; 9642: } 9642: 9642: template 9642: inline bool 9642: atomic_compare_exchange_strong(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v, 9642: shared_ptr<_Tp> __w) 9642: { 9642: return std::atomic_compare_exchange_strong_explicit(__p, __v, 9642: std::move(__w), memory_order_seq_cst, memory_order_seq_cst); 9642: } 9642: 9642: template 9642: inline bool 9642: atomic_compare_exchange_weak_explicit(shared_ptr<_Tp>* __p, 9642: shared_ptr<_Tp>* __v, 9642: shared_ptr<_Tp> __w, 9642: memory_order __success, 9642: memory_order __failure) 9642: { 9642: return std::atomic_compare_exchange_strong_explicit(__p, __v, 9642: std::move(__w), __success, __failure); 9642: } 9642: 9642: template 9642: inline bool 9642: atomic_compare_exchange_weak(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v, 9642: shared_ptr<_Tp> __w) 9642: { 9642: return std::atomic_compare_exchange_weak_explicit(__p, __v, 9642: std::move(__w), memory_order_seq_cst, memory_order_seq_cst); 9642: } 9642: 9642: template 9642: bool 9642: atomic_compare_exchange_strong_explicit(__shared_ptr<_Tp, _Lp>* __p, 9642: __shared_ptr<_Tp, _Lp>* __v, 9642: __shared_ptr<_Tp, _Lp> __w, 9642: memory_order, 9642: memory_order) 9642: { 9642: __shared_ptr<_Tp, _Lp> __x; 9642: _Sp_locker __lock{__p, __v}; 9642: owner_less<__shared_ptr<_Tp, _Lp>> __less; 9642: if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p)) 9642: { 9642: __x = std::move(*__p); 9642: *__p = std::move(__w); 9642: return true; 9642: } 9642: __x = std::move(*__v); 9642: *__v = *__p; 9642: return false; 9642: } 9642: 9642: template 9642: inline bool 9642: atomic_compare_exchange_strong(__shared_ptr<_Tp, _Lp>* __p, 9642: __shared_ptr<_Tp, _Lp>* __v, 9642: __shared_ptr<_Tp, _Lp> __w) 9642: { 9642: return std::atomic_compare_exchange_strong_explicit(__p, __v, 9642: std::move(__w), memory_order_seq_cst, memory_order_seq_cst); 9642: } 9642: 9642: template 9642: inline bool 9642: atomic_compare_exchange_weak_explicit(__shared_ptr<_Tp, _Lp>* __p, 9642: __shared_ptr<_Tp, _Lp>* __v, 9642: __shared_ptr<_Tp, _Lp> __w, 9642: memory_order __success, 9642: memory_order __failure) 9642: { 9642: return std::atomic_compare_exchange_strong_explicit(__p, __v, 9642: std::move(__w), __success, __failure); 9642: } 9642: 9642: template 9642: inline bool 9642: atomic_compare_exchange_weak(__shared_ptr<_Tp, _Lp>* __p, 9642: __shared_ptr<_Tp, _Lp>* __v, 9642: __shared_ptr<_Tp, _Lp> __w) 9642: { 9642: return std::atomic_compare_exchange_weak_explicit(__p, __v, 9642: std::move(__w), memory_order_seq_cst, memory_order_seq_cst); 9642: } 9642: # 850 "/usr/include/c++/13/bits/shared_ptr_atomic.h" 3 9642: 9642: } 9642: # 82 "/usr/include/c++/13/memory" 2 3 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/backward/auto_ptr.h" 1 3 9642: # 36 "/usr/include/c++/13/backward/auto_ptr.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 47 "/usr/include/c++/13/backward/auto_ptr.h" 3 9642: template 9642: struct auto_ptr_ref 9642: { 9642: _Tp1* _M_ptr; 9642: 9642: explicit 9642: auto_ptr_ref(_Tp1* __p): _M_ptr(__p) { } 9642: } __attribute__ ((__deprecated__)); 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: # 92 "/usr/include/c++/13/backward/auto_ptr.h" 3 9642: template 9642: class auto_ptr 9642: { 9642: private: 9642: _Tp* _M_ptr; 9642: 9642: public: 9642: 9642: typedef _Tp element_type; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { } 9642: # 118 "/usr/include/c++/13/backward/auto_ptr.h" 3 9642: auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { } 9642: # 130 "/usr/include/c++/13/backward/auto_ptr.h" 3 9642: template 9642: auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { } 9642: # 141 "/usr/include/c++/13/backward/auto_ptr.h" 3 9642: auto_ptr& 9642: operator=(auto_ptr& __a) throw() 9642: { 9642: reset(__a.release()); 9642: return *this; 9642: } 9642: # 158 "/usr/include/c++/13/backward/auto_ptr.h" 3 9642: template 9642: auto_ptr& 9642: operator=(auto_ptr<_Tp1>& __a) throw() 9642: { 9642: reset(__a.release()); 9642: return *this; 9642: } 9642: # 176 "/usr/include/c++/13/backward/auto_ptr.h" 3 9642: ~auto_ptr() { delete _M_ptr; } 9642: # 186 "/usr/include/c++/13/backward/auto_ptr.h" 3 9642: element_type& 9642: operator*() const throw() 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(_M_ptr != 0)) __builtin_unreachable(); } while (false); 9642: return *_M_ptr; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: element_type* 9642: operator->() const throw() 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(_M_ptr != 0)) __builtin_unreachable(); } while (false); 9642: return _M_ptr; 9642: } 9642: # 216 "/usr/include/c++/13/backward/auto_ptr.h" 3 9642: element_type* 9642: get() const throw() { return _M_ptr; } 9642: # 230 "/usr/include/c++/13/backward/auto_ptr.h" 3 9642: element_type* 9642: release() throw() 9642: { 9642: element_type* __tmp = _M_ptr; 9642: _M_ptr = 0; 9642: return __tmp; 9642: } 9642: # 245 "/usr/include/c++/13/backward/auto_ptr.h" 3 9642: void 9642: reset(element_type* __p = 0) throw() 9642: { 9642: if (__p != _M_ptr) 9642: { 9642: delete _M_ptr; 9642: _M_ptr = __p; 9642: } 9642: } 9642: # 270 "/usr/include/c++/13/backward/auto_ptr.h" 3 9642: auto_ptr(auto_ptr_ref __ref) throw() 9642: : _M_ptr(__ref._M_ptr) { } 9642: 9642: auto_ptr& 9642: operator=(auto_ptr_ref __ref) throw() 9642: { 9642: if (__ref._M_ptr != this->get()) 9642: { 9642: delete _M_ptr; 9642: _M_ptr = __ref._M_ptr; 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: operator auto_ptr_ref<_Tp1>() throw() 9642: { return auto_ptr_ref<_Tp1>(this->release()); } 9642: 9642: template 9642: operator auto_ptr<_Tp1>() throw() 9642: { return auto_ptr<_Tp1>(this->release()); } 9642: } __attribute__ ((__deprecated__ ("use '" "std::unique_ptr" "' instead"))); 9642: 9642: 9642: 9642: template<> 9642: class auto_ptr 9642: { 9642: public: 9642: typedef void element_type; 9642: } __attribute__ ((__deprecated__)); 9642: 9642: 9642: 9642: template<_Lock_policy _Lp> 9642: template 9642: inline 9642: __shared_count<_Lp>::__shared_count(std::auto_ptr<_Tp>&& __r) 9642: : _M_pi(new _Sp_counted_ptr<_Tp*, _Lp>(__r.get())) 9642: { __r.release(); } 9642: 9642: template 9642: template 9642: inline 9642: __shared_ptr<_Tp, _Lp>::__shared_ptr(std::auto_ptr<_Tp1>&& __r) 9642: : _M_ptr(__r.get()), _M_refcount() 9642: { 9642: 9642: static_assert( sizeof(_Tp1) > 0, "incomplete type" ); 9642: _Tp1* __tmp = __r.get(); 9642: _M_refcount = __shared_count<_Lp>(std::move(__r)); 9642: _M_enable_shared_from_this_with(__tmp); 9642: } 9642: 9642: template 9642: template 9642: inline 9642: shared_ptr<_Tp>::shared_ptr(std::auto_ptr<_Tp1>&& __r) 9642: : __shared_ptr<_Tp>(std::move(__r)) { } 9642: 9642: 9642: template 9642: template 9642: inline 9642: unique_ptr<_Tp, _Dp>::unique_ptr(auto_ptr<_Up>&& __u) noexcept 9642: : _M_t(__u.release(), deleter_type()) { } 9642: 9642: 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: } 9642: # 87 "/usr/include/c++/13/memory" 2 3 9642: # 101 "/usr/include/c++/13/memory" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 119 "/usr/include/c++/13/memory" 3 9642: enum class pointer_safety { relaxed, preferred, strict }; 9642: 9642: 9642: inline void 9642: declare_reachable(void*) { } 9642: 9642: 9642: template 9642: inline _Tp* 9642: undeclare_reachable(_Tp* __p) { return __p; } 9642: 9642: 9642: inline void 9642: declare_no_pointers(char*, size_t) { } 9642: 9642: 9642: inline void 9642: undeclare_no_pointers(char*, size_t) { } 9642: 9642: 9642: inline pointer_safety 9642: get_pointer_safety() noexcept { return pointer_safety::relaxed; } 9642: 9642: 9642: 9642: } 9642: # 154 "/usr/include/c++/13/memory" 3 9642: # 1 "/usr/include/c++/13/pstl/glue_memory_defs.h" 1 3 9642: # 13 "/usr/include/c++/13/pstl/glue_memory_defs.h" 3 9642: # 1 "/usr/include/c++/13/pstl/execution_defs.h" 1 3 9642: # 15 "/usr/include/c++/13/pstl/execution_defs.h" 3 9642: namespace __pstl 9642: { 9642: namespace execution 9642: { 9642: inline namespace v1 9642: { 9642: 9642: 9642: class sequenced_policy 9642: { 9642: public: 9642: 9642: static constexpr std::false_type 9642: __allow_unsequenced() 9642: { 9642: return std::false_type{}; 9642: } 9642: static constexpr std::false_type 9642: __allow_vector() 9642: { 9642: return std::false_type{}; 9642: } 9642: static constexpr std::false_type 9642: __allow_parallel() 9642: { 9642: return std::false_type{}; 9642: } 9642: }; 9642: 9642: 9642: class parallel_policy 9642: { 9642: public: 9642: 9642: static constexpr std::false_type 9642: __allow_unsequenced() 9642: { 9642: return std::false_type{}; 9642: } 9642: static constexpr std::false_type 9642: __allow_vector() 9642: { 9642: return std::false_type{}; 9642: } 9642: static constexpr std::true_type 9642: __allow_parallel() 9642: { 9642: return std::true_type{}; 9642: } 9642: }; 9642: 9642: 9642: class parallel_unsequenced_policy 9642: { 9642: public: 9642: 9642: static constexpr std::true_type 9642: __allow_unsequenced() 9642: { 9642: return std::true_type{}; 9642: } 9642: static constexpr std::true_type 9642: __allow_vector() 9642: { 9642: return std::true_type{}; 9642: } 9642: static constexpr std::true_type 9642: __allow_parallel() 9642: { 9642: return std::true_type{}; 9642: } 9642: }; 9642: 9642: class unsequenced_policy 9642: { 9642: public: 9642: 9642: static constexpr std::true_type 9642: __allow_unsequenced() 9642: { 9642: return std::true_type{}; 9642: } 9642: static constexpr std::true_type 9642: __allow_vector() 9642: { 9642: return std::true_type{}; 9642: } 9642: static constexpr std::false_type 9642: __allow_parallel() 9642: { 9642: return std::false_type{}; 9642: } 9642: }; 9642: 9642: 9642: inline constexpr sequenced_policy seq{}; 9642: inline constexpr parallel_policy par{}; 9642: inline constexpr parallel_unsequenced_policy par_unseq{}; 9642: inline constexpr unsequenced_policy unseq{}; 9642: 9642: 9642: template 9642: struct is_execution_policy : std::false_type 9642: { 9642: }; 9642: 9642: template <> 9642: struct is_execution_policy<__pstl::execution::sequenced_policy> : std::true_type 9642: { 9642: }; 9642: template <> 9642: struct is_execution_policy<__pstl::execution::parallel_policy> : std::true_type 9642: { 9642: }; 9642: template <> 9642: struct is_execution_policy<__pstl::execution::parallel_unsequenced_policy> : std::true_type 9642: { 9642: }; 9642: template <> 9642: struct is_execution_policy<__pstl::execution::unsequenced_policy> : std::true_type 9642: { 9642: }; 9642: 9642: 9642: template 9642: constexpr bool is_execution_policy_v = __pstl::execution::is_execution_policy<_Tp>::value; 9642: 9642: 9642: } 9642: } 9642: 9642: namespace __internal 9642: { 9642: template 9642: 9642: using __enable_if_execution_policy = 9642: typename std::enable_if<__pstl::execution::is_execution_policy>::value, 9642: _Tp>::type; 9642: 9642: 9642: 9642: 9642: 9642: } 9642: 9642: } 9642: # 14 "/usr/include/c++/13/pstl/glue_memory_defs.h" 2 3 9642: 9642: namespace std 9642: { 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: uninitialized_copy(_ExecutionPolicy&& __exec, _InputIterator __first, _InputIterator __last, _ForwardIterator __result); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: uninitialized_copy_n(_ExecutionPolicy&& __exec, _InputIterator __first, _Size __n, _ForwardIterator __result); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: uninitialized_move(_ExecutionPolicy&& __exec, _InputIterator __first, _InputIterator __last, _ForwardIterator __result); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: uninitialized_move_n(_ExecutionPolicy&& __exec, _InputIterator __first, _Size __n, _ForwardIterator __result); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: uninitialized_fill(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: uninitialized_fill_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size __n, const _Tp& __value); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: destroy(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: destroy_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size __n); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: uninitialized_default_construct(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: uninitialized_default_construct_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size __n); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: uninitialized_value_construct(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: uninitialized_value_construct_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size __n); 9642: 9642: } 9642: # 155 "/usr/include/c++/13/memory" 2 3 9642: # 15 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 9642: # 1 "/usr/include/c++/13/string" 1 3 9642: # 36 "/usr/include/c++/13/string" 3 9642: 9642: # 37 "/usr/include/c++/13/string" 3 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/char_traits.h" 1 3 9642: # 37 "/usr/include/c++/13/bits/char_traits.h" 3 9642: 9642: # 38 "/usr/include/c++/13/bits/char_traits.h" 3 9642: # 46 "/usr/include/c++/13/bits/char_traits.h" 3 9642: # 1 "/usr/include/c++/13/cwchar" 1 3 9642: # 39 "/usr/include/c++/13/cwchar" 3 9642: 9642: # 40 "/usr/include/c++/13/cwchar" 3 9642: # 47 "/usr/include/c++/13/bits/char_traits.h" 2 3 9642: # 64 "/usr/include/c++/13/bits/char_traits.h" 3 9642: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: # 68 "/usr/include/c++/13/bits/char_traits.h" 3 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wstringop-overflow" 9642: #pragma GCC diagnostic ignored "-Wstringop-overread" 9642: #pragma GCC diagnostic ignored "-Warray-bounds" 9642: # 83 "/usr/include/c++/13/bits/char_traits.h" 3 9642: template 9642: struct _Char_types 9642: { 9642: typedef unsigned long int_type; 9642: 9642: typedef std::streampos pos_type; 9642: typedef std::streamoff off_type; 9642: typedef std::mbstate_t state_type; 9642: 9642: }; 9642: # 110 "/usr/include/c++/13/bits/char_traits.h" 3 9642: template 9642: struct char_traits 9642: { 9642: typedef _CharT char_type; 9642: typedef typename _Char_types<_CharT>::int_type int_type; 9642: 9642: typedef typename _Char_types<_CharT>::pos_type pos_type; 9642: typedef typename _Char_types<_CharT>::off_type off_type; 9642: typedef typename _Char_types<_CharT>::state_type state_type; 9642: 9642: 9642: 9642: 9642: 9642: static constexpr void 9642: assign(char_type& __c1, const char_type& __c2) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: __c1 = __c2; 9642: } 9642: 9642: static constexpr bool 9642: eq(const char_type& __c1, const char_type& __c2) 9642: { return __c1 == __c2; } 9642: 9642: static constexpr bool 9642: lt(const char_type& __c1, const char_type& __c2) 9642: { return __c1 < __c2; } 9642: 9642: static constexpr int 9642: compare(const char_type* __s1, const char_type* __s2, std::size_t __n); 9642: 9642: static constexpr std::size_t 9642: length(const char_type* __s); 9642: 9642: static constexpr const char_type* 9642: find(const char_type* __s, std::size_t __n, const char_type& __a); 9642: 9642: static char_type* 9642: move(char_type* __s1, const char_type* __s2, std::size_t __n); 9642: 9642: static char_type* 9642: copy(char_type* __s1, const char_type* __s2, std::size_t __n); 9642: 9642: static char_type* 9642: assign(char_type* __s, std::size_t __n, char_type __a); 9642: 9642: static constexpr char_type 9642: to_char_type(const int_type& __c) 9642: { return static_cast(__c); } 9642: 9642: static constexpr int_type 9642: to_int_type(const char_type& __c) 9642: { return static_cast(__c); } 9642: 9642: static constexpr bool 9642: eq_int_type(const int_type& __c1, const int_type& __c2) 9642: { return __c1 == __c2; } 9642: 9642: 9642: static constexpr int_type 9642: eof() 9642: { return static_cast(-1); } 9642: 9642: static constexpr int_type 9642: not_eof(const int_type& __c) 9642: { return !eq_int_type(__c, eof()) ? __c : to_int_type(char_type()); } 9642: 9642: }; 9642: 9642: template 9642: constexpr int 9642: char_traits<_CharT>:: 9642: compare(const char_type* __s1, const char_type* __s2, std::size_t __n) 9642: { 9642: for (std::size_t __i = 0; __i < __n; ++__i) 9642: if (lt(__s1[__i], __s2[__i])) 9642: return -1; 9642: else if (lt(__s2[__i], __s1[__i])) 9642: return 1; 9642: return 0; 9642: } 9642: 9642: template 9642: constexpr std::size_t 9642: char_traits<_CharT>:: 9642: length(const char_type* __p) 9642: { 9642: std::size_t __i = 0; 9642: while (!eq(__p[__i], char_type())) 9642: ++__i; 9642: return __i; 9642: } 9642: 9642: template 9642: constexpr const typename char_traits<_CharT>::char_type* 9642: char_traits<_CharT>:: 9642: find(const char_type* __s, std::size_t __n, const char_type& __a) 9642: { 9642: for (std::size_t __i = 0; __i < __n; ++__i) 9642: if (eq(__s[__i], __a)) 9642: return __s + __i; 9642: return 0; 9642: } 9642: 9642: template 9642: 9642: typename char_traits<_CharT>::char_type* 9642: char_traits<_CharT>:: 9642: move(char_type* __s1, const char_type* __s2, std::size_t __n) 9642: { 9642: if (__n == 0) 9642: return __s1; 9642: # 246 "/usr/include/c++/13/bits/char_traits.h" 3 9642: __builtin_memmove(__s1, __s2, __n * sizeof(char_type)); 9642: return __s1; 9642: } 9642: 9642: template 9642: 9642: typename char_traits<_CharT>::char_type* 9642: char_traits<_CharT>:: 9642: copy(char_type* __s1, const char_type* __s2, std::size_t __n) 9642: { 9642: if (__n == 0) 9642: return __s1; 9642: # 266 "/usr/include/c++/13/bits/char_traits.h" 3 9642: __builtin_memcpy(__s1, __s2, __n * sizeof(char_type)); 9642: return __s1; 9642: } 9642: 9642: template 9642: 9642: typename char_traits<_CharT>::char_type* 9642: char_traits<_CharT>:: 9642: assign(char_type* __s, std::size_t __n, char_type __a) 9642: { 9642: # 285 "/usr/include/c++/13/bits/char_traits.h" 3 9642: if constexpr (sizeof(_CharT) == 1 && __is_trivial(_CharT)) 9642: { 9642: if (__n) 9642: { 9642: unsigned char __c; 9642: __builtin_memcpy(&__c, __builtin_addressof(__a), 1); 9642: __builtin_memset(__s, __c, __n); 9642: } 9642: } 9642: else 9642: { 9642: for (std::size_t __i = 0; __i < __n; ++__i) 9642: __s[__i] = __a; 9642: } 9642: return __s; 9642: } 9642: 9642: 9642: } 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 330 "/usr/include/c++/13/bits/char_traits.h" 3 9642: template 9642: struct char_traits : public __gnu_cxx::char_traits<_CharT> 9642: { }; 9642: 9642: 9642: 9642: template<> 9642: struct char_traits 9642: { 9642: typedef char char_type; 9642: typedef int int_type; 9642: 9642: typedef streampos pos_type; 9642: typedef streamoff off_type; 9642: typedef mbstate_t state_type; 9642: 9642: 9642: 9642: 9642: 9642: static constexpr void 9642: assign(char_type& __c1, const char_type& __c2) noexcept 9642: { 9642: 9642: 9642: 9642: 9642: 9642: __c1 = __c2; 9642: } 9642: 9642: static constexpr bool 9642: eq(const char_type& __c1, const char_type& __c2) noexcept 9642: { return __c1 == __c2; } 9642: 9642: static constexpr bool 9642: lt(const char_type& __c1, const char_type& __c2) noexcept 9642: { 9642: 9642: return (static_cast(__c1) 9642: < static_cast(__c2)); 9642: } 9642: 9642: static constexpr int 9642: compare(const char_type* __s1, const char_type* __s2, size_t __n) 9642: { 9642: if (__n == 0) 9642: return 0; 9642: 9642: if (std::__is_constant_evaluated()) 9642: { 9642: for (size_t __i = 0; __i < __n; ++__i) 9642: if (lt(__s1[__i], __s2[__i])) 9642: return -1; 9642: else if (lt(__s2[__i], __s1[__i])) 9642: return 1; 9642: return 0; 9642: } 9642: 9642: return __builtin_memcmp(__s1, __s2, __n); 9642: } 9642: 9642: static constexpr size_t 9642: length(const char_type* __s) 9642: { 9642: 9642: if (std::__is_constant_evaluated()) 9642: return __gnu_cxx::char_traits::length(__s); 9642: 9642: return __builtin_strlen(__s); 9642: } 9642: 9642: static constexpr const char_type* 9642: find(const char_type* __s, size_t __n, const char_type& __a) 9642: { 9642: if (__n == 0) 9642: return 0; 9642: 9642: if (std::__is_constant_evaluated()) 9642: return __gnu_cxx::char_traits::find(__s, __n, __a); 9642: 9642: return static_cast(__builtin_memchr(__s, __a, __n)); 9642: } 9642: 9642: static char_type* 9642: move(char_type* __s1, const char_type* __s2, size_t __n) 9642: { 9642: if (__n == 0) 9642: return __s1; 9642: 9642: 9642: 9642: 9642: return static_cast(__builtin_memmove(__s1, __s2, __n)); 9642: } 9642: 9642: static char_type* 9642: copy(char_type* __s1, const char_type* __s2, size_t __n) 9642: { 9642: if (__n == 0) 9642: return __s1; 9642: 9642: 9642: 9642: 9642: return static_cast(__builtin_memcpy(__s1, __s2, __n)); 9642: } 9642: 9642: static char_type* 9642: assign(char_type* __s, size_t __n, char_type __a) 9642: { 9642: if (__n == 0) 9642: return __s; 9642: 9642: 9642: 9642: 9642: return static_cast(__builtin_memset(__s, __a, __n)); 9642: } 9642: 9642: static constexpr char_type 9642: to_char_type(const int_type& __c) noexcept 9642: { return static_cast(__c); } 9642: 9642: 9642: 9642: static constexpr int_type 9642: to_int_type(const char_type& __c) noexcept 9642: { return static_cast(static_cast(__c)); } 9642: 9642: static constexpr bool 9642: eq_int_type(const int_type& __c1, const int_type& __c2) noexcept 9642: { return __c1 == __c2; } 9642: 9642: 9642: static constexpr int_type 9642: eof() noexcept 9642: { return static_cast(-1); } 9642: 9642: static constexpr int_type 9642: not_eof(const int_type& __c) noexcept 9642: { return (__c == eof()) ? 0 : __c; } 9642: 9642: }; 9642: 9642: 9642: 9642: 9642: template<> 9642: struct char_traits 9642: { 9642: typedef wchar_t char_type; 9642: typedef wint_t int_type; 9642: 9642: typedef streamoff off_type; 9642: typedef wstreampos pos_type; 9642: typedef mbstate_t state_type; 9642: 9642: 9642: 9642: 9642: 9642: static constexpr void 9642: assign(char_type& __c1, const char_type& __c2) noexcept 9642: { 9642: 9642: 9642: 9642: 9642: 9642: __c1 = __c2; 9642: } 9642: 9642: static constexpr bool 9642: eq(const char_type& __c1, const char_type& __c2) noexcept 9642: { return __c1 == __c2; } 9642: 9642: static constexpr bool 9642: lt(const char_type& __c1, const char_type& __c2) noexcept 9642: { return __c1 < __c2; } 9642: 9642: static constexpr int 9642: compare(const char_type* __s1, const char_type* __s2, size_t __n) 9642: { 9642: if (__n == 0) 9642: return 0; 9642: 9642: if (std::__is_constant_evaluated()) 9642: return __gnu_cxx::char_traits::compare(__s1, __s2, __n); 9642: 9642: return wmemcmp(__s1, __s2, __n); 9642: } 9642: 9642: static constexpr size_t 9642: length(const char_type* __s) 9642: { 9642: 9642: if (std::__is_constant_evaluated()) 9642: return __gnu_cxx::char_traits::length(__s); 9642: 9642: return wcslen(__s); 9642: } 9642: 9642: static constexpr const char_type* 9642: find(const char_type* __s, size_t __n, const char_type& __a) 9642: { 9642: if (__n == 0) 9642: return 0; 9642: 9642: if (std::__is_constant_evaluated()) 9642: return __gnu_cxx::char_traits::find(__s, __n, __a); 9642: 9642: return wmemchr(__s, __a, __n); 9642: } 9642: 9642: static char_type* 9642: move(char_type* __s1, const char_type* __s2, size_t __n) 9642: { 9642: if (__n == 0) 9642: return __s1; 9642: 9642: 9642: 9642: 9642: return wmemmove(__s1, __s2, __n); 9642: } 9642: 9642: static char_type* 9642: copy(char_type* __s1, const char_type* __s2, size_t __n) 9642: { 9642: if (__n == 0) 9642: return __s1; 9642: 9642: 9642: 9642: 9642: return wmemcpy(__s1, __s2, __n); 9642: } 9642: 9642: static char_type* 9642: assign(char_type* __s, size_t __n, char_type __a) 9642: { 9642: if (__n == 0) 9642: return __s; 9642: 9642: 9642: 9642: 9642: return wmemset(__s, __a, __n); 9642: } 9642: 9642: static constexpr char_type 9642: to_char_type(const int_type& __c) noexcept 9642: { return char_type(__c); } 9642: 9642: static constexpr int_type 9642: to_int_type(const char_type& __c) noexcept 9642: { return int_type(__c); } 9642: 9642: static constexpr bool 9642: eq_int_type(const int_type& __c1, const int_type& __c2) noexcept 9642: { return __c1 == __c2; } 9642: 9642: 9642: static constexpr int_type 9642: eof() noexcept 9642: { return static_cast((0xffffffffu)); } 9642: 9642: static constexpr int_type 9642: not_eof(const int_type& __c) noexcept 9642: { return eq_int_type(__c, eof()) ? 0 : __c; } 9642: 9642: }; 9642: # 740 "/usr/include/c++/13/bits/char_traits.h" 3 9642: 9642: } 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: template<> 9642: struct char_traits 9642: { 9642: typedef char16_t char_type; 9642: 9642: typedef short unsigned int int_type; 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef streamoff off_type; 9642: typedef u16streampos pos_type; 9642: typedef mbstate_t state_type; 9642: 9642: 9642: 9642: 9642: 9642: static constexpr void 9642: assign(char_type& __c1, const char_type& __c2) noexcept 9642: { 9642: 9642: 9642: 9642: 9642: 9642: __c1 = __c2; 9642: } 9642: 9642: static constexpr bool 9642: eq(const char_type& __c1, const char_type& __c2) noexcept 9642: { return __c1 == __c2; } 9642: 9642: static constexpr bool 9642: lt(const char_type& __c1, const char_type& __c2) noexcept 9642: { return __c1 < __c2; } 9642: 9642: static constexpr int 9642: compare(const char_type* __s1, const char_type* __s2, size_t __n) 9642: { 9642: for (size_t __i = 0; __i < __n; ++__i) 9642: if (lt(__s1[__i], __s2[__i])) 9642: return -1; 9642: else if (lt(__s2[__i], __s1[__i])) 9642: return 1; 9642: return 0; 9642: } 9642: 9642: static constexpr size_t 9642: length(const char_type* __s) 9642: { 9642: size_t __i = 0; 9642: while (!eq(__s[__i], char_type())) 9642: ++__i; 9642: return __i; 9642: } 9642: 9642: static constexpr const char_type* 9642: find(const char_type* __s, size_t __n, const char_type& __a) 9642: { 9642: for (size_t __i = 0; __i < __n; ++__i) 9642: if (eq(__s[__i], __a)) 9642: return __s + __i; 9642: return 0; 9642: } 9642: 9642: static char_type* 9642: move(char_type* __s1, const char_type* __s2, size_t __n) 9642: { 9642: if (__n == 0) 9642: return __s1; 9642: 9642: 9642: 9642: 9642: return (static_cast 9642: (__builtin_memmove(__s1, __s2, __n * sizeof(char_type)))); 9642: } 9642: 9642: static char_type* 9642: copy(char_type* __s1, const char_type* __s2, size_t __n) 9642: { 9642: if (__n == 0) 9642: return __s1; 9642: 9642: 9642: 9642: 9642: return (static_cast 9642: (__builtin_memcpy(__s1, __s2, __n * sizeof(char_type)))); 9642: } 9642: 9642: static char_type* 9642: assign(char_type* __s, size_t __n, char_type __a) 9642: { 9642: for (size_t __i = 0; __i < __n; ++__i) 9642: assign(__s[__i], __a); 9642: return __s; 9642: } 9642: 9642: static constexpr char_type 9642: to_char_type(const int_type& __c) noexcept 9642: { return char_type(__c); } 9642: 9642: static constexpr bool 9642: eq_int_type(const int_type& __c1, const int_type& __c2) noexcept 9642: { return __c1 == __c2; } 9642: 9642: 9642: static constexpr int_type 9642: to_int_type(const char_type& __c) noexcept 9642: { return __c == eof() ? int_type(0xfffd) : int_type(__c); } 9642: 9642: static constexpr int_type 9642: eof() noexcept 9642: { return static_cast(-1); } 9642: 9642: static constexpr int_type 9642: not_eof(const int_type& __c) noexcept 9642: { return eq_int_type(__c, eof()) ? 0 : __c; } 9642: 9642: 9642: 9642: 9642: 9642: }; 9642: 9642: template<> 9642: struct char_traits 9642: { 9642: typedef char32_t char_type; 9642: 9642: typedef unsigned int int_type; 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef streamoff off_type; 9642: typedef u32streampos pos_type; 9642: typedef mbstate_t state_type; 9642: 9642: 9642: 9642: 9642: 9642: static constexpr void 9642: assign(char_type& __c1, const char_type& __c2) noexcept 9642: { 9642: 9642: 9642: 9642: 9642: 9642: __c1 = __c2; 9642: } 9642: 9642: static constexpr bool 9642: eq(const char_type& __c1, const char_type& __c2) noexcept 9642: { return __c1 == __c2; } 9642: 9642: static constexpr bool 9642: lt(const char_type& __c1, const char_type& __c2) noexcept 9642: { return __c1 < __c2; } 9642: 9642: static constexpr int 9642: compare(const char_type* __s1, const char_type* __s2, size_t __n) 9642: { 9642: for (size_t __i = 0; __i < __n; ++__i) 9642: if (lt(__s1[__i], __s2[__i])) 9642: return -1; 9642: else if (lt(__s2[__i], __s1[__i])) 9642: return 1; 9642: return 0; 9642: } 9642: 9642: static constexpr size_t 9642: length(const char_type* __s) 9642: { 9642: size_t __i = 0; 9642: while (!eq(__s[__i], char_type())) 9642: ++__i; 9642: return __i; 9642: } 9642: 9642: static constexpr const char_type* 9642: find(const char_type* __s, size_t __n, const char_type& __a) 9642: { 9642: for (size_t __i = 0; __i < __n; ++__i) 9642: if (eq(__s[__i], __a)) 9642: return __s + __i; 9642: return 0; 9642: } 9642: 9642: static char_type* 9642: move(char_type* __s1, const char_type* __s2, size_t __n) 9642: { 9642: if (__n == 0) 9642: return __s1; 9642: 9642: 9642: 9642: 9642: return (static_cast 9642: (__builtin_memmove(__s1, __s2, __n * sizeof(char_type)))); 9642: } 9642: 9642: static char_type* 9642: copy(char_type* __s1, const char_type* __s2, size_t __n) 9642: { 9642: if (__n == 0) 9642: return __s1; 9642: 9642: 9642: 9642: 9642: return (static_cast 9642: (__builtin_memcpy(__s1, __s2, __n * sizeof(char_type)))); 9642: } 9642: 9642: static char_type* 9642: assign(char_type* __s, size_t __n, char_type __a) 9642: { 9642: for (size_t __i = 0; __i < __n; ++__i) 9642: assign(__s[__i], __a); 9642: return __s; 9642: } 9642: 9642: static constexpr char_type 9642: to_char_type(const int_type& __c) noexcept 9642: { return char_type(__c); } 9642: 9642: static constexpr int_type 9642: to_int_type(const char_type& __c) noexcept 9642: { return int_type(__c); } 9642: 9642: static constexpr bool 9642: eq_int_type(const int_type& __c1, const int_type& __c2) noexcept 9642: { return __c1 == __c2; } 9642: 9642: 9642: static constexpr int_type 9642: eof() noexcept 9642: { return static_cast(-1); } 9642: 9642: static constexpr int_type 9642: not_eof(const int_type& __c) noexcept 9642: { return eq_int_type(__c, eof()) ? 0 : __c; } 9642: 9642: }; 9642: # 1022 "/usr/include/c++/13/bits/char_traits.h" 3 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: } 9642: # 43 "/usr/include/c++/13/string" 2 3 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/localefwd.h" 1 3 9642: # 37 "/usr/include/c++/13/bits/localefwd.h" 3 9642: 9642: # 38 "/usr/include/c++/13/bits/localefwd.h" 3 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++locale.h" 1 3 9642: # 39 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++locale.h" 3 9642: 9642: # 40 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++locale.h" 3 9642: 9642: # 1 "/usr/include/c++/13/clocale" 1 3 9642: # 39 "/usr/include/c++/13/clocale" 3 9642: 9642: # 40 "/usr/include/c++/13/clocale" 3 9642: 9642: 9642: # 1 "/usr/include/locale.h" 1 3 4 9642: # 28 "/usr/include/locale.h" 3 4 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 29 "/usr/include/locale.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/locale.h" 1 3 4 9642: # 30 "/usr/include/locale.h" 2 3 4 9642: 9642: extern "C" { 9642: # 51 "/usr/include/locale.h" 3 4 9642: struct lconv 9642: { 9642: 9642: 9642: char *decimal_point; 9642: char *thousands_sep; 9642: 9642: 9642: 9642: 9642: 9642: char *grouping; 9642: 9642: 9642: 9642: 9642: 9642: char *int_curr_symbol; 9642: char *currency_symbol; 9642: char *mon_decimal_point; 9642: char *mon_thousands_sep; 9642: char *mon_grouping; 9642: char *positive_sign; 9642: char *negative_sign; 9642: char int_frac_digits; 9642: char frac_digits; 9642: 9642: char p_cs_precedes; 9642: 9642: char p_sep_by_space; 9642: 9642: char n_cs_precedes; 9642: 9642: char n_sep_by_space; 9642: 9642: 9642: 9642: 9642: 9642: 9642: char p_sign_posn; 9642: char n_sign_posn; 9642: 9642: 9642: char int_p_cs_precedes; 9642: 9642: char int_p_sep_by_space; 9642: 9642: char int_n_cs_precedes; 9642: 9642: char int_n_sep_by_space; 9642: 9642: 9642: 9642: 9642: 9642: 9642: char int_p_sign_posn; 9642: char int_n_sign_posn; 9642: # 118 "/usr/include/locale.h" 3 4 9642: }; 9642: 9642: 9642: 9642: extern char *setlocale (int __category, const char *__locale) noexcept (true); 9642: 9642: 9642: extern struct lconv *localeconv (void) noexcept (true); 9642: # 141 "/usr/include/locale.h" 3 4 9642: extern locale_t newlocale (int __category_mask, const char *__locale, 9642: locale_t __base) noexcept (true); 9642: # 176 "/usr/include/locale.h" 3 4 9642: extern locale_t duplocale (locale_t __dataset) noexcept (true); 9642: 9642: 9642: 9642: extern void freelocale (locale_t __dataset) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern locale_t uselocale (locale_t __dataset) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 43 "/usr/include/c++/13/clocale" 2 3 9642: # 51 "/usr/include/c++/13/clocale" 3 9642: namespace std 9642: { 9642: using ::lconv; 9642: using ::setlocale; 9642: using ::localeconv; 9642: } 9642: # 42 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++locale.h" 2 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: extern "C" __typeof(uselocale) __uselocale; 9642: 9642: 9642: } 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: typedef __locale_t __c_locale; 9642: # 73 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++locale.h" 3 9642: inline int 9642: __convert_from_v(const __c_locale& __cloc __attribute__ ((__unused__)), 9642: char* __out, 9642: const int __size __attribute__ ((__unused__)), 9642: const char* __fmt, ...) 9642: { 9642: 9642: __c_locale __old = __gnu_cxx::__uselocale(__cloc); 9642: # 93 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++locale.h" 3 9642: __builtin_va_list __args; 9642: __builtin_va_start(__args, __fmt); 9642: 9642: 9642: const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args); 9642: 9642: 9642: 9642: 9642: __builtin_va_end(__args); 9642: 9642: 9642: __gnu_cxx::__uselocale(__old); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: return __ret; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 41 "/usr/include/c++/13/bits/localefwd.h" 2 3 9642: 9642: # 1 "/usr/include/c++/13/cctype" 1 3 9642: # 39 "/usr/include/c++/13/cctype" 3 9642: 9642: # 40 "/usr/include/c++/13/cctype" 3 9642: 9642: 9642: # 1 "/usr/include/ctype.h" 1 3 4 9642: # 28 "/usr/include/ctype.h" 3 4 9642: extern "C" { 9642: # 46 "/usr/include/ctype.h" 3 4 9642: enum 9642: { 9642: _ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)), 9642: _ISlower = ((1) < 8 ? ((1 << (1)) << 8) : ((1 << (1)) >> 8)), 9642: _ISalpha = ((2) < 8 ? ((1 << (2)) << 8) : ((1 << (2)) >> 8)), 9642: _ISdigit = ((3) < 8 ? ((1 << (3)) << 8) : ((1 << (3)) >> 8)), 9642: _ISxdigit = ((4) < 8 ? ((1 << (4)) << 8) : ((1 << (4)) >> 8)), 9642: _ISspace = ((5) < 8 ? ((1 << (5)) << 8) : ((1 << (5)) >> 8)), 9642: _ISprint = ((6) < 8 ? ((1 << (6)) << 8) : ((1 << (6)) >> 8)), 9642: _ISgraph = ((7) < 8 ? ((1 << (7)) << 8) : ((1 << (7)) >> 8)), 9642: _ISblank = ((8) < 8 ? ((1 << (8)) << 8) : ((1 << (8)) >> 8)), 9642: _IScntrl = ((9) < 8 ? ((1 << (9)) << 8) : ((1 << (9)) >> 8)), 9642: _ISpunct = ((10) < 8 ? ((1 << (10)) << 8) : ((1 << (10)) >> 8)), 9642: _ISalnum = ((11) < 8 ? ((1 << (11)) << 8) : ((1 << (11)) >> 8)) 9642: }; 9642: # 79 "/usr/include/ctype.h" 3 4 9642: extern const unsigned short int **__ctype_b_loc (void) 9642: noexcept (true) __attribute__ ((__const__)); 9642: extern const __int32_t **__ctype_tolower_loc (void) 9642: noexcept (true) __attribute__ ((__const__)); 9642: extern const __int32_t **__ctype_toupper_loc (void) 9642: noexcept (true) __attribute__ ((__const__)); 9642: # 108 "/usr/include/ctype.h" 3 4 9642: extern int isalnum (int) noexcept (true); 9642: extern int isalpha (int) noexcept (true); 9642: extern int iscntrl (int) noexcept (true); 9642: extern int isdigit (int) noexcept (true); 9642: extern int islower (int) noexcept (true); 9642: extern int isgraph (int) noexcept (true); 9642: extern int isprint (int) noexcept (true); 9642: extern int ispunct (int) noexcept (true); 9642: extern int isspace (int) noexcept (true); 9642: extern int isupper (int) noexcept (true); 9642: extern int isxdigit (int) noexcept (true); 9642: 9642: 9642: 9642: extern int tolower (int __c) noexcept (true); 9642: 9642: 9642: extern int toupper (int __c) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int isblank (int) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int isctype (int __c, int __mask) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int isascii (int __c) noexcept (true); 9642: 9642: 9642: 9642: extern int toascii (int __c) noexcept (true); 9642: 9642: 9642: 9642: extern int _toupper (int) noexcept (true); 9642: extern int _tolower (int) noexcept (true); 9642: # 251 "/usr/include/ctype.h" 3 4 9642: extern int isalnum_l (int, locale_t) noexcept (true); 9642: extern int isalpha_l (int, locale_t) noexcept (true); 9642: extern int iscntrl_l (int, locale_t) noexcept (true); 9642: extern int isdigit_l (int, locale_t) noexcept (true); 9642: extern int islower_l (int, locale_t) noexcept (true); 9642: extern int isgraph_l (int, locale_t) noexcept (true); 9642: extern int isprint_l (int, locale_t) noexcept (true); 9642: extern int ispunct_l (int, locale_t) noexcept (true); 9642: extern int isspace_l (int, locale_t) noexcept (true); 9642: extern int isupper_l (int, locale_t) noexcept (true); 9642: extern int isxdigit_l (int, locale_t) noexcept (true); 9642: 9642: extern int isblank_l (int, locale_t) noexcept (true); 9642: 9642: 9642: 9642: extern int __tolower_l (int __c, locale_t __l) noexcept (true); 9642: extern int tolower_l (int __c, locale_t __l) noexcept (true); 9642: 9642: 9642: extern int __toupper_l (int __c, locale_t __l) noexcept (true); 9642: extern int toupper_l (int __c, locale_t __l) noexcept (true); 9642: # 327 "/usr/include/ctype.h" 3 4 9642: } 9642: # 43 "/usr/include/c++/13/cctype" 2 3 9642: # 62 "/usr/include/c++/13/cctype" 3 9642: namespace std 9642: { 9642: using ::isalnum; 9642: using ::isalpha; 9642: using ::iscntrl; 9642: using ::isdigit; 9642: using ::isgraph; 9642: using ::islower; 9642: using ::isprint; 9642: using ::ispunct; 9642: using ::isspace; 9642: using ::isupper; 9642: using ::isxdigit; 9642: using ::tolower; 9642: using ::toupper; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace std 9642: { 9642: using ::isblank; 9642: } 9642: # 43 "/usr/include/c++/13/bits/localefwd.h" 2 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 55 "/usr/include/c++/13/bits/localefwd.h" 3 9642: class locale; 9642: 9642: template 9642: bool 9642: has_facet(const locale&) throw(); 9642: 9642: template 9642: const _Facet& 9642: use_facet(const locale&); 9642: 9642: 9642: template 9642: bool 9642: isspace(_CharT, const locale&); 9642: 9642: template 9642: bool 9642: isprint(_CharT, const locale&); 9642: 9642: template 9642: bool 9642: iscntrl(_CharT, const locale&); 9642: 9642: template 9642: bool 9642: isupper(_CharT, const locale&); 9642: 9642: template 9642: bool 9642: islower(_CharT, const locale&); 9642: 9642: template 9642: bool 9642: isalpha(_CharT, const locale&); 9642: 9642: template 9642: bool 9642: isdigit(_CharT, const locale&); 9642: 9642: template 9642: bool 9642: ispunct(_CharT, const locale&); 9642: 9642: template 9642: bool 9642: isxdigit(_CharT, const locale&); 9642: 9642: template 9642: bool 9642: isalnum(_CharT, const locale&); 9642: 9642: template 9642: bool 9642: isgraph(_CharT, const locale&); 9642: 9642: 9642: template 9642: bool 9642: isblank(_CharT, const locale&); 9642: 9642: 9642: template 9642: _CharT 9642: toupper(_CharT, const locale&); 9642: 9642: template 9642: _CharT 9642: tolower(_CharT, const locale&); 9642: 9642: 9642: struct ctype_base; 9642: template 9642: class ctype; 9642: template<> class ctype; 9642: 9642: template<> class ctype; 9642: 9642: template 9642: class ctype_byname; 9642: 9642: 9642: class codecvt_base; 9642: template 9642: class codecvt; 9642: template<> class codecvt; 9642: 9642: template<> class codecvt; 9642: 9642: 9642: template<> class codecvt; 9642: template<> class codecvt; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: class codecvt_byname; 9642: 9642: 9642: 9642: template > 9642: class num_get; 9642: template > 9642: class num_put; 9642: 9642: namespace __cxx11 { 9642: template class numpunct; 9642: template class numpunct_byname; 9642: } 9642: 9642: namespace __cxx11 { 9642: 9642: template 9642: class collate; 9642: template 9642: class collate_byname; 9642: } 9642: 9642: 9642: class time_base; 9642: namespace __cxx11 { 9642: template > 9642: class time_get; 9642: template > 9642: class time_get_byname; 9642: } 9642: template > 9642: class time_put; 9642: template > 9642: class time_put_byname; 9642: 9642: 9642: class money_base; 9642: namespace __cxx11 { 9642: template > 9642: class money_get; 9642: template > 9642: class money_put; 9642: } 9642: namespace __cxx11 { 9642: template 9642: class moneypunct; 9642: template 9642: class moneypunct_byname; 9642: } 9642: 9642: 9642: struct messages_base; 9642: namespace __cxx11 { 9642: template 9642: class messages; 9642: template 9642: class messages_byname; 9642: } 9642: 9642: 9642: } 9642: # 46 "/usr/include/c++/13/string" 2 3 9642: # 1 "/usr/include/c++/13/bits/ostream_insert.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/ostream_insert.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/ostream_insert.h" 3 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/cxxabi_forced.h" 1 3 9642: # 34 "/usr/include/c++/13/bits/cxxabi_forced.h" 3 9642: 9642: # 35 "/usr/include/c++/13/bits/cxxabi_forced.h" 3 9642: 9642: #pragma GCC visibility push(default) 9642: 9642: 9642: namespace __cxxabiv1 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: class __forced_unwind 9642: { 9642: virtual ~__forced_unwind() throw(); 9642: 9642: 9642: virtual void __pure_dummy() = 0; 9642: }; 9642: } 9642: 9642: 9642: #pragma GCC visibility pop 9642: # 37 "/usr/include/c++/13/bits/ostream_insert.h" 2 3 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: template 9642: inline void 9642: __ostream_write(basic_ostream<_CharT, _Traits>& __out, 9642: const _CharT* __s, streamsize __n) 9642: { 9642: typedef basic_ostream<_CharT, _Traits> __ostream_type; 9642: typedef typename __ostream_type::ios_base __ios_base; 9642: 9642: const streamsize __put = __out.rdbuf()->sputn(__s, __n); 9642: if (__put != __n) 9642: __out.setstate(__ios_base::badbit); 9642: } 9642: 9642: template 9642: inline void 9642: __ostream_fill(basic_ostream<_CharT, _Traits>& __out, streamsize __n) 9642: { 9642: typedef basic_ostream<_CharT, _Traits> __ostream_type; 9642: typedef typename __ostream_type::ios_base __ios_base; 9642: 9642: const _CharT __c = __out.fill(); 9642: for (; __n > 0; --__n) 9642: { 9642: const typename _Traits::int_type __put = __out.rdbuf()->sputc(__c); 9642: if (_Traits::eq_int_type(__put, _Traits::eof())) 9642: { 9642: __out.setstate(__ios_base::badbit); 9642: break; 9642: } 9642: } 9642: } 9642: 9642: template 9642: basic_ostream<_CharT, _Traits>& 9642: __ostream_insert(basic_ostream<_CharT, _Traits>& __out, 9642: const _CharT* __s, streamsize __n) 9642: { 9642: typedef basic_ostream<_CharT, _Traits> __ostream_type; 9642: typedef typename __ostream_type::ios_base __ios_base; 9642: 9642: typename __ostream_type::sentry __cerb(__out); 9642: if (__cerb) 9642: { 9642: try 9642: { 9642: const streamsize __w = __out.width(); 9642: if (__w > __n) 9642: { 9642: const bool __left = ((__out.flags() 9642: & __ios_base::adjustfield) 9642: == __ios_base::left); 9642: if (!__left) 9642: __ostream_fill(__out, __w - __n); 9642: if (__out.good()) 9642: __ostream_write(__out, __s, __n); 9642: if (__left && __out.good()) 9642: __ostream_fill(__out, __w - __n); 9642: } 9642: else 9642: __ostream_write(__out, __s, __n); 9642: __out.width(0); 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: __out._M_setstate(__ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { __out._M_setstate(__ios_base::badbit); } 9642: } 9642: return __out; 9642: } 9642: 9642: 9642: 9642: 9642: extern template ostream& __ostream_insert(ostream&, const char*, streamsize); 9642: 9642: 9642: extern template wostream& __ostream_insert(wostream&, const wchar_t*, 9642: streamsize); 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 47 "/usr/include/c++/13/string" 2 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/basic_string.h" 1 3 9642: # 37 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: # 38 "/usr/include/c++/13/bits/basic_string.h" 3 9642: # 47 "/usr/include/c++/13/bits/basic_string.h" 3 9642: # 1 "/usr/include/c++/13/string_view" 1 3 9642: # 36 "/usr/include/c++/13/string_view" 3 9642: 9642: # 37 "/usr/include/c++/13/string_view" 3 9642: # 56 "/usr/include/c++/13/string_view" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 69 "/usr/include/c++/13/string_view" 3 9642: constexpr size_t 9642: __sv_check(size_t __size, size_t __pos, const char* __s) 9642: { 9642: if (__pos > __size) 9642: __throw_out_of_range_fmt(("%s: __pos (which is %zu) > __size " "(which is %zu)") 9642: , __s, __pos, __size); 9642: return __pos; 9642: } 9642: 9642: 9642: 9642: constexpr size_t 9642: __sv_limit(size_t __size, size_t __pos, size_t __off) noexcept 9642: { 9642: const bool __testoff = __off < __size - __pos; 9642: return __testoff ? __off : __size - __pos; 9642: } 9642: # 105 "/usr/include/c++/13/string_view" 3 9642: template> 9642: class basic_string_view 9642: { 9642: static_assert(!is_array_v<_CharT>); 9642: static_assert(is_trivial_v<_CharT> && is_standard_layout_v<_CharT>); 9642: static_assert(is_same_v<_CharT, typename _Traits::char_type>); 9642: 9642: public: 9642: 9642: 9642: using traits_type = _Traits; 9642: using value_type = _CharT; 9642: using pointer = value_type*; 9642: using const_pointer = const value_type*; 9642: using reference = value_type&; 9642: using const_reference = const value_type&; 9642: using const_iterator = const value_type*; 9642: using iterator = const_iterator; 9642: using const_reverse_iterator = std::reverse_iterator; 9642: using reverse_iterator = const_reverse_iterator; 9642: using size_type = size_t; 9642: using difference_type = ptrdiff_t; 9642: static constexpr size_type npos = size_type(-1); 9642: 9642: 9642: 9642: constexpr 9642: basic_string_view() noexcept 9642: : _M_len{0}, _M_str{nullptr} 9642: { } 9642: 9642: constexpr basic_string_view(const basic_string_view&) noexcept = default; 9642: 9642: [[__gnu__::__nonnull__]] 9642: constexpr 9642: basic_string_view(const _CharT* __str) noexcept 9642: : _M_len{traits_type::length(__str)}, 9642: _M_str{__str} 9642: { } 9642: 9642: constexpr 9642: basic_string_view(const _CharT* __str, size_type __len) noexcept 9642: : _M_len{__len}, _M_str{__str} 9642: { } 9642: # 180 "/usr/include/c++/13/string_view" 3 9642: constexpr basic_string_view& 9642: operator=(const basic_string_view&) noexcept = default; 9642: 9642: 9642: 9642: [[nodiscard]] 9642: constexpr const_iterator 9642: begin() const noexcept 9642: { return this->_M_str; } 9642: 9642: [[nodiscard]] 9642: constexpr const_iterator 9642: end() const noexcept 9642: { return this->_M_str + this->_M_len; } 9642: 9642: [[nodiscard]] 9642: constexpr const_iterator 9642: cbegin() const noexcept 9642: { return this->_M_str; } 9642: 9642: [[nodiscard]] 9642: constexpr const_iterator 9642: cend() const noexcept 9642: { return this->_M_str + this->_M_len; } 9642: 9642: [[nodiscard]] 9642: constexpr const_reverse_iterator 9642: rbegin() const noexcept 9642: { return const_reverse_iterator(this->end()); } 9642: 9642: [[nodiscard]] 9642: constexpr const_reverse_iterator 9642: rend() const noexcept 9642: { return const_reverse_iterator(this->begin()); } 9642: 9642: [[nodiscard]] 9642: constexpr const_reverse_iterator 9642: crbegin() const noexcept 9642: { return const_reverse_iterator(this->end()); } 9642: 9642: [[nodiscard]] 9642: constexpr const_reverse_iterator 9642: crend() const noexcept 9642: { return const_reverse_iterator(this->begin()); } 9642: 9642: 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: size() const noexcept 9642: { return this->_M_len; } 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: length() const noexcept 9642: { return _M_len; } 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: max_size() const noexcept 9642: { 9642: return (npos - sizeof(size_type) - sizeof(void*)) 9642: / sizeof(value_type) / 4; 9642: } 9642: 9642: [[nodiscard]] 9642: constexpr bool 9642: empty() const noexcept 9642: { return this->_M_len == 0; } 9642: 9642: 9642: 9642: [[nodiscard]] 9642: constexpr const_reference 9642: operator[](size_type __pos) const noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__pos < this->_M_len)) __builtin_unreachable(); } while (false); 9642: return *(this->_M_str + __pos); 9642: } 9642: 9642: [[nodiscard]] 9642: constexpr const_reference 9642: at(size_type __pos) const 9642: { 9642: if (__pos >= _M_len) 9642: __throw_out_of_range_fmt(("basic_string_view::at: __pos " "(which is %zu) >= this->size() " "(which is %zu)") 9642: 9642: , __pos, this->size()); 9642: return *(this->_M_str + __pos); 9642: } 9642: 9642: [[nodiscard]] 9642: constexpr const_reference 9642: front() const noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(this->_M_len > 0)) __builtin_unreachable(); } while (false); 9642: return *this->_M_str; 9642: } 9642: 9642: [[nodiscard]] 9642: constexpr const_reference 9642: back() const noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(this->_M_len > 0)) __builtin_unreachable(); } while (false); 9642: return *(this->_M_str + this->_M_len - 1); 9642: } 9642: 9642: [[nodiscard]] 9642: constexpr const_pointer 9642: data() const noexcept 9642: { return this->_M_str; } 9642: 9642: 9642: 9642: constexpr void 9642: remove_prefix(size_type __n) noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(this->_M_len >= __n)) __builtin_unreachable(); } while (false); 9642: this->_M_str += __n; 9642: this->_M_len -= __n; 9642: } 9642: 9642: constexpr void 9642: remove_suffix(size_type __n) noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(this->_M_len >= __n)) __builtin_unreachable(); } while (false); 9642: this->_M_len -= __n; 9642: } 9642: 9642: constexpr void 9642: swap(basic_string_view& __sv) noexcept 9642: { 9642: auto __tmp = *this; 9642: *this = __sv; 9642: __sv = __tmp; 9642: } 9642: 9642: 9642: 9642: 9642: size_type 9642: copy(_CharT* __str, size_type __n, size_type __pos = 0) const 9642: { 9642: ; 9642: __pos = std::__sv_check(size(), __pos, "basic_string_view::copy"); 9642: const size_type __rlen = std::min(__n, _M_len - __pos); 9642: 9642: 9642: traits_type::copy(__str, data() + __pos, __rlen); 9642: return __rlen; 9642: } 9642: 9642: [[nodiscard]] 9642: constexpr basic_string_view 9642: substr(size_type __pos = 0, size_type __n = npos) const noexcept(false) 9642: { 9642: __pos = std::__sv_check(size(), __pos, "basic_string_view::substr"); 9642: const size_type __rlen = std::min(__n, _M_len - __pos); 9642: return basic_string_view{_M_str + __pos, __rlen}; 9642: } 9642: 9642: [[nodiscard]] 9642: constexpr int 9642: compare(basic_string_view __str) const noexcept 9642: { 9642: const size_type __rlen = std::min(this->_M_len, __str._M_len); 9642: int __ret = traits_type::compare(this->_M_str, __str._M_str, __rlen); 9642: if (__ret == 0) 9642: __ret = _S_compare(this->_M_len, __str._M_len); 9642: return __ret; 9642: } 9642: 9642: [[nodiscard]] 9642: constexpr int 9642: compare(size_type __pos1, size_type __n1, basic_string_view __str) const 9642: { return this->substr(__pos1, __n1).compare(__str); } 9642: 9642: [[nodiscard]] 9642: constexpr int 9642: compare(size_type __pos1, size_type __n1, 9642: basic_string_view __str, size_type __pos2, size_type __n2) const 9642: { 9642: return this->substr(__pos1, __n1).compare(__str.substr(__pos2, __n2)); 9642: } 9642: 9642: [[nodiscard, __gnu__::__nonnull__]] 9642: constexpr int 9642: compare(const _CharT* __str) const noexcept 9642: { return this->compare(basic_string_view{__str}); } 9642: 9642: [[nodiscard, __gnu__::__nonnull__]] 9642: constexpr int 9642: compare(size_type __pos1, size_type __n1, const _CharT* __str) const 9642: { return this->substr(__pos1, __n1).compare(basic_string_view{__str}); } 9642: 9642: [[nodiscard]] 9642: constexpr int 9642: compare(size_type __pos1, size_type __n1, 9642: const _CharT* __str, size_type __n2) const noexcept(false) 9642: { 9642: return this->substr(__pos1, __n1) 9642: .compare(basic_string_view(__str, __n2)); 9642: } 9642: # 446 "/usr/include/c++/13/string_view" 3 9642: [[nodiscard]] 9642: constexpr size_type 9642: find(basic_string_view __str, size_type __pos = 0) const noexcept 9642: { return this->find(__str._M_str, __pos, __str._M_len); } 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: find(_CharT __c, size_type __pos = 0) const noexcept; 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: find(const _CharT* __str, size_type __pos, size_type __n) const noexcept; 9642: 9642: [[nodiscard, __gnu__::__nonnull__]] 9642: constexpr size_type 9642: find(const _CharT* __str, size_type __pos = 0) const noexcept 9642: { return this->find(__str, __pos, traits_type::length(__str)); } 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: rfind(basic_string_view __str, size_type __pos = npos) const noexcept 9642: { return this->rfind(__str._M_str, __pos, __str._M_len); } 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: rfind(_CharT __c, size_type __pos = npos) const noexcept; 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept; 9642: 9642: [[nodiscard, __gnu__::__nonnull__]] 9642: constexpr size_type 9642: rfind(const _CharT* __str, size_type __pos = npos) const noexcept 9642: { return this->rfind(__str, __pos, traits_type::length(__str)); } 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: find_first_of(basic_string_view __str, size_type __pos = 0) const noexcept 9642: { return this->find_first_of(__str._M_str, __pos, __str._M_len); } 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: find_first_of(_CharT __c, size_type __pos = 0) const noexcept 9642: { return this->find(__c, __pos); } 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: find_first_of(const _CharT* __str, size_type __pos, 9642: size_type __n) const noexcept; 9642: 9642: [[nodiscard, __gnu__::__nonnull__]] 9642: constexpr size_type 9642: find_first_of(const _CharT* __str, size_type __pos = 0) const noexcept 9642: { return this->find_first_of(__str, __pos, traits_type::length(__str)); } 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: find_last_of(basic_string_view __str, 9642: size_type __pos = npos) const noexcept 9642: { return this->find_last_of(__str._M_str, __pos, __str._M_len); } 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: find_last_of(_CharT __c, size_type __pos=npos) const noexcept 9642: { return this->rfind(__c, __pos); } 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: find_last_of(const _CharT* __str, size_type __pos, 9642: size_type __n) const noexcept; 9642: 9642: [[nodiscard, __gnu__::__nonnull__]] 9642: constexpr size_type 9642: find_last_of(const _CharT* __str, size_type __pos = npos) const noexcept 9642: { return this->find_last_of(__str, __pos, traits_type::length(__str)); } 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: find_first_not_of(basic_string_view __str, 9642: size_type __pos = 0) const noexcept 9642: { return this->find_first_not_of(__str._M_str, __pos, __str._M_len); } 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: find_first_not_of(_CharT __c, size_type __pos = 0) const noexcept; 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: find_first_not_of(const _CharT* __str, 9642: size_type __pos, size_type __n) const noexcept; 9642: 9642: [[nodiscard, __gnu__::__nonnull__]] 9642: constexpr size_type 9642: find_first_not_of(const _CharT* __str, size_type __pos = 0) const noexcept 9642: { 9642: return this->find_first_not_of(__str, __pos, 9642: traits_type::length(__str)); 9642: } 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: find_last_not_of(basic_string_view __str, 9642: size_type __pos = npos) const noexcept 9642: { return this->find_last_not_of(__str._M_str, __pos, __str._M_len); } 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: find_last_not_of(_CharT __c, size_type __pos = npos) const noexcept; 9642: 9642: [[nodiscard]] 9642: constexpr size_type 9642: find_last_not_of(const _CharT* __str, 9642: size_type __pos, size_type __n) const noexcept; 9642: 9642: [[nodiscard, __gnu__::__nonnull__]] 9642: constexpr size_type 9642: find_last_not_of(const _CharT* __str, 9642: size_type __pos = npos) const noexcept 9642: { 9642: return this->find_last_not_of(__str, __pos, 9642: traits_type::length(__str)); 9642: } 9642: 9642: private: 9642: 9642: static constexpr int 9642: _S_compare(size_type __n1, size_type __n2) noexcept 9642: { 9642: using __limits = __gnu_cxx::__int_traits; 9642: const difference_type __diff = __n1 - __n2; 9642: if (__diff > __limits::__max) 9642: return __limits::__max; 9642: if (__diff < __limits::__min) 9642: return __limits::__min; 9642: return static_cast(__diff); 9642: } 9642: 9642: size_t _M_len; 9642: const _CharT* _M_str; 9642: }; 9642: # 606 "/usr/include/c++/13/string_view" 3 9642: template 9642: [[nodiscard]] 9642: constexpr bool 9642: operator==(basic_string_view<_CharT, _Traits> __x, 9642: basic_string_view<_CharT, _Traits> __y) noexcept 9642: { return __x.size() == __y.size() && __x.compare(__y) == 0; } 9642: 9642: template 9642: [[nodiscard]] 9642: constexpr bool 9642: operator==(basic_string_view<_CharT, _Traits> __x, 9642: __type_identity_t> __y) 9642: noexcept 9642: { return __x.size() == __y.size() && __x.compare(__y) == 0; } 9642: # 639 "/usr/include/c++/13/string_view" 3 9642: template 9642: [[nodiscard]] 9642: constexpr bool 9642: operator==(__type_identity_t> __x, 9642: basic_string_view<_CharT, _Traits> __y) noexcept 9642: { return __x.size() == __y.size() && __x.compare(__y) == 0; } 9642: 9642: template 9642: [[nodiscard]] 9642: constexpr bool 9642: operator!=(basic_string_view<_CharT, _Traits> __x, 9642: basic_string_view<_CharT, _Traits> __y) noexcept 9642: { return !(__x == __y); } 9642: 9642: template 9642: [[nodiscard]] 9642: constexpr bool 9642: operator!=(basic_string_view<_CharT, _Traits> __x, 9642: __type_identity_t> __y) 9642: noexcept 9642: { return !(__x == __y); } 9642: 9642: template 9642: [[nodiscard]] 9642: constexpr bool 9642: operator!=(__type_identity_t> __x, 9642: basic_string_view<_CharT, _Traits> __y) noexcept 9642: { return !(__x == __y); } 9642: 9642: template 9642: [[nodiscard]] 9642: constexpr bool 9642: operator< (basic_string_view<_CharT, _Traits> __x, 9642: basic_string_view<_CharT, _Traits> __y) noexcept 9642: { return __x.compare(__y) < 0; } 9642: 9642: template 9642: [[nodiscard]] 9642: constexpr bool 9642: operator< (basic_string_view<_CharT, _Traits> __x, 9642: __type_identity_t> __y) 9642: noexcept 9642: { return __x.compare(__y) < 0; } 9642: 9642: template 9642: [[nodiscard]] 9642: constexpr bool 9642: operator< (__type_identity_t> __x, 9642: basic_string_view<_CharT, _Traits> __y) noexcept 9642: { return __x.compare(__y) < 0; } 9642: 9642: template 9642: [[nodiscard]] 9642: constexpr bool 9642: operator> (basic_string_view<_CharT, _Traits> __x, 9642: basic_string_view<_CharT, _Traits> __y) noexcept 9642: { return __x.compare(__y) > 0; } 9642: 9642: template 9642: [[nodiscard]] 9642: constexpr bool 9642: operator> (basic_string_view<_CharT, _Traits> __x, 9642: __type_identity_t> __y) 9642: noexcept 9642: { return __x.compare(__y) > 0; } 9642: 9642: template 9642: [[nodiscard]] 9642: constexpr bool 9642: operator> (__type_identity_t> __x, 9642: basic_string_view<_CharT, _Traits> __y) noexcept 9642: { return __x.compare(__y) > 0; } 9642: 9642: template 9642: [[nodiscard]] 9642: constexpr bool 9642: operator<=(basic_string_view<_CharT, _Traits> __x, 9642: basic_string_view<_CharT, _Traits> __y) noexcept 9642: { return __x.compare(__y) <= 0; } 9642: 9642: template 9642: [[nodiscard]] 9642: constexpr bool 9642: operator<=(basic_string_view<_CharT, _Traits> __x, 9642: __type_identity_t> __y) 9642: noexcept 9642: { return __x.compare(__y) <= 0; } 9642: 9642: template 9642: [[nodiscard]] 9642: constexpr bool 9642: operator<=(__type_identity_t> __x, 9642: basic_string_view<_CharT, _Traits> __y) noexcept 9642: { return __x.compare(__y) <= 0; } 9642: 9642: template 9642: [[nodiscard]] 9642: constexpr bool 9642: operator>=(basic_string_view<_CharT, _Traits> __x, 9642: basic_string_view<_CharT, _Traits> __y) noexcept 9642: { return __x.compare(__y) >= 0; } 9642: 9642: template 9642: [[nodiscard]] 9642: constexpr bool 9642: operator>=(basic_string_view<_CharT, _Traits> __x, 9642: __type_identity_t> __y) 9642: noexcept 9642: { return __x.compare(__y) >= 0; } 9642: 9642: template 9642: [[nodiscard]] 9642: constexpr bool 9642: operator>=(__type_identity_t> __x, 9642: basic_string_view<_CharT, _Traits> __y) noexcept 9642: { return __x.compare(__y) >= 0; } 9642: 9642: 9642: 9642: 9642: template 9642: inline basic_ostream<_CharT, _Traits>& 9642: operator<<(basic_ostream<_CharT, _Traits>& __os, 9642: basic_string_view<_CharT,_Traits> __str) 9642: { return __ostream_insert(__os, __str.data(), __str.size()); } 9642: 9642: 9642: 9642: 9642: using string_view = basic_string_view; 9642: using wstring_view = basic_string_view; 9642: 9642: 9642: 9642: using u16string_view = basic_string_view; 9642: using u32string_view = basic_string_view; 9642: 9642: 9642: 9642: template 9642: struct hash; 9642: 9642: template<> 9642: struct hash 9642: : public __hash_base 9642: { 9642: [[nodiscard]] 9642: size_t 9642: operator()(const string_view& __str) const noexcept 9642: { return std::_Hash_impl::hash(__str.data(), __str.length()); } 9642: }; 9642: 9642: template<> 9642: struct __is_fast_hash> : std::false_type 9642: { }; 9642: 9642: template<> 9642: struct hash 9642: : public __hash_base 9642: { 9642: [[nodiscard]] 9642: size_t 9642: operator()(const wstring_view& __s) const noexcept 9642: { return std::_Hash_impl::hash(__s.data(), 9642: __s.length() * sizeof(wchar_t)); } 9642: }; 9642: 9642: template<> 9642: struct __is_fast_hash> : std::false_type 9642: { }; 9642: # 826 "/usr/include/c++/13/string_view" 3 9642: template<> 9642: struct hash 9642: : public __hash_base 9642: { 9642: [[nodiscard]] 9642: size_t 9642: operator()(const u16string_view& __s) const noexcept 9642: { return std::_Hash_impl::hash(__s.data(), 9642: __s.length() * sizeof(char16_t)); } 9642: }; 9642: 9642: template<> 9642: struct __is_fast_hash> : std::false_type 9642: { }; 9642: 9642: template<> 9642: struct hash 9642: : public __hash_base 9642: { 9642: [[nodiscard]] 9642: size_t 9642: operator()(const u32string_view& __s) const noexcept 9642: { return std::_Hash_impl::hash(__s.data(), 9642: __s.length() * sizeof(char32_t)); } 9642: }; 9642: 9642: template<> 9642: struct __is_fast_hash> : std::false_type 9642: { }; 9642: 9642: inline namespace literals 9642: { 9642: inline namespace string_view_literals 9642: { 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wliteral-suffix" 9642: inline constexpr basic_string_view 9642: operator""sv(const char* __str, size_t __len) noexcept 9642: { return basic_string_view{__str, __len}; } 9642: 9642: inline constexpr basic_string_view 9642: operator""sv(const wchar_t* __str, size_t __len) noexcept 9642: { return basic_string_view{__str, __len}; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline constexpr basic_string_view 9642: operator""sv(const char16_t* __str, size_t __len) noexcept 9642: { return basic_string_view{__str, __len}; } 9642: 9642: inline constexpr basic_string_view 9642: operator""sv(const char32_t* __str, size_t __len) noexcept 9642: { return basic_string_view{__str, __len}; } 9642: 9642: #pragma GCC diagnostic pop 9642: } 9642: } 9642: # 902 "/usr/include/c++/13/string_view" 3 9642: 9642: } 9642: 9642: # 1 "/usr/include/c++/13/bits/string_view.tcc" 1 3 9642: # 37 "/usr/include/c++/13/bits/string_view.tcc" 3 9642: 9642: # 38 "/usr/include/c++/13/bits/string_view.tcc" 3 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: template 9642: constexpr typename basic_string_view<_CharT, _Traits>::size_type 9642: basic_string_view<_CharT, _Traits>:: 9642: find(const _CharT* __str, size_type __pos, size_type __n) const noexcept 9642: { 9642: ; 9642: 9642: if (__n == 0) 9642: return __pos <= _M_len ? __pos : npos; 9642: if (__pos >= _M_len) 9642: return npos; 9642: 9642: const _CharT __elem0 = __str[0]; 9642: const _CharT* __first = _M_str + __pos; 9642: const _CharT* const __last = _M_str + _M_len; 9642: size_type __len = _M_len - __pos; 9642: 9642: while (__len >= __n) 9642: { 9642: 9642: __first = traits_type::find(__first, __len - __n + 1, __elem0); 9642: if (!__first) 9642: return npos; 9642: 9642: 9642: 9642: if (traits_type::compare(__first, __str, __n) == 0) 9642: return __first - _M_str; 9642: __len = __last - ++__first; 9642: } 9642: return npos; 9642: } 9642: 9642: template 9642: constexpr typename basic_string_view<_CharT, _Traits>::size_type 9642: basic_string_view<_CharT, _Traits>:: 9642: find(_CharT __c, size_type __pos) const noexcept 9642: { 9642: size_type __ret = npos; 9642: if (__pos < this->_M_len) 9642: { 9642: const size_type __n = this->_M_len - __pos; 9642: const _CharT* __p = traits_type::find(this->_M_str + __pos, __n, __c); 9642: if (__p) 9642: __ret = __p - this->_M_str; 9642: } 9642: return __ret; 9642: } 9642: 9642: template 9642: constexpr typename basic_string_view<_CharT, _Traits>::size_type 9642: basic_string_view<_CharT, _Traits>:: 9642: rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept 9642: { 9642: ; 9642: 9642: if (__n <= this->_M_len) 9642: { 9642: __pos = std::min(size_type(this->_M_len - __n), __pos); 9642: do 9642: { 9642: if (traits_type::compare(this->_M_str + __pos, __str, __n) == 0) 9642: return __pos; 9642: } 9642: while (__pos-- > 0); 9642: } 9642: return npos; 9642: } 9642: 9642: template 9642: constexpr typename basic_string_view<_CharT, _Traits>::size_type 9642: basic_string_view<_CharT, _Traits>:: 9642: rfind(_CharT __c, size_type __pos) const noexcept 9642: { 9642: size_type __size = this->_M_len; 9642: if (__size > 0) 9642: { 9642: if (--__size > __pos) 9642: __size = __pos; 9642: for (++__size; __size-- > 0; ) 9642: if (traits_type::eq(this->_M_str[__size], __c)) 9642: return __size; 9642: } 9642: return npos; 9642: } 9642: 9642: template 9642: constexpr typename basic_string_view<_CharT, _Traits>::size_type 9642: basic_string_view<_CharT, _Traits>:: 9642: find_first_of(const _CharT* __str, size_type __pos, 9642: size_type __n) const noexcept 9642: { 9642: ; 9642: for (; __n && __pos < this->_M_len; ++__pos) 9642: { 9642: const _CharT* __p = traits_type::find(__str, __n, 9642: this->_M_str[__pos]); 9642: if (__p) 9642: return __pos; 9642: } 9642: return npos; 9642: } 9642: 9642: template 9642: constexpr typename basic_string_view<_CharT, _Traits>::size_type 9642: basic_string_view<_CharT, _Traits>:: 9642: find_last_of(const _CharT* __str, size_type __pos, 9642: size_type __n) const noexcept 9642: { 9642: ; 9642: size_type __size = this->size(); 9642: if (__size && __n) 9642: { 9642: if (--__size > __pos) 9642: __size = __pos; 9642: do 9642: { 9642: if (traits_type::find(__str, __n, this->_M_str[__size])) 9642: return __size; 9642: } 9642: while (__size-- != 0); 9642: } 9642: return npos; 9642: } 9642: 9642: template 9642: constexpr typename basic_string_view<_CharT, _Traits>::size_type 9642: basic_string_view<_CharT, _Traits>:: 9642: find_first_not_of(const _CharT* __str, size_type __pos, 9642: size_type __n) const noexcept 9642: { 9642: ; 9642: for (; __pos < this->_M_len; ++__pos) 9642: if (!traits_type::find(__str, __n, this->_M_str[__pos])) 9642: return __pos; 9642: return npos; 9642: } 9642: 9642: template 9642: constexpr typename basic_string_view<_CharT, _Traits>::size_type 9642: basic_string_view<_CharT, _Traits>:: 9642: find_first_not_of(_CharT __c, size_type __pos) const noexcept 9642: { 9642: for (; __pos < this->_M_len; ++__pos) 9642: if (!traits_type::eq(this->_M_str[__pos], __c)) 9642: return __pos; 9642: return npos; 9642: } 9642: 9642: template 9642: constexpr typename basic_string_view<_CharT, _Traits>::size_type 9642: basic_string_view<_CharT, _Traits>:: 9642: find_last_not_of(const _CharT* __str, size_type __pos, 9642: size_type __n) const noexcept 9642: { 9642: ; 9642: size_type __size = this->_M_len; 9642: if (__size) 9642: { 9642: if (--__size > __pos) 9642: __size = __pos; 9642: do 9642: { 9642: if (!traits_type::find(__str, __n, this->_M_str[__size])) 9642: return __size; 9642: } 9642: while (__size--); 9642: } 9642: return npos; 9642: } 9642: 9642: template 9642: constexpr typename basic_string_view<_CharT, _Traits>::size_type 9642: basic_string_view<_CharT, _Traits>:: 9642: find_last_not_of(_CharT __c, size_type __pos) const noexcept 9642: { 9642: size_type __size = this->_M_len; 9642: if (__size) 9642: { 9642: if (--__size > __pos) 9642: __size = __pos; 9642: do 9642: { 9642: if (!traits_type::eq(this->_M_str[__size], __c)) 9642: return __size; 9642: } 9642: while (__size--); 9642: } 9642: return npos; 9642: } 9642: 9642: 9642: } 9642: # 906 "/usr/include/c++/13/string_view" 2 3 9642: # 48 "/usr/include/c++/13/bits/basic_string.h" 2 3 9642: 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: namespace __cxx11 { 9642: # 86 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: class basic_string 9642: { 9642: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 9642: rebind<_CharT>::other _Char_alloc_type; 9642: 9642: typedef __gnu_cxx::__alloc_traits<_Char_alloc_type> _Alloc_traits; 9642: 9642: 9642: public: 9642: typedef _Traits traits_type; 9642: typedef typename _Traits::char_type value_type; 9642: typedef _Char_alloc_type allocator_type; 9642: typedef typename _Alloc_traits::size_type size_type; 9642: typedef typename _Alloc_traits::difference_type difference_type; 9642: typedef typename _Alloc_traits::reference reference; 9642: typedef typename _Alloc_traits::const_reference const_reference; 9642: typedef typename _Alloc_traits::pointer pointer; 9642: typedef typename _Alloc_traits::const_pointer const_pointer; 9642: typedef __gnu_cxx::__normal_iterator iterator; 9642: typedef __gnu_cxx::__normal_iterator 9642: const_iterator; 9642: typedef std::reverse_iterator const_reverse_iterator; 9642: typedef std::reverse_iterator reverse_iterator; 9642: 9642: 9642: static const size_type npos = static_cast(-1); 9642: 9642: protected: 9642: 9642: 9642: 9642: 9642: typedef const_iterator __const_iterator; 9642: 9642: 9642: private: 9642: static pointer 9642: _S_allocate(_Char_alloc_type& __a, size_type __n) 9642: { 9642: pointer __p = _Alloc_traits::allocate(__a, __n); 9642: # 136 "/usr/include/c++/13/bits/basic_string.h" 3 9642: return __p; 9642: } 9642: 9642: 9642: 9642: typedef basic_string_view<_CharT, _Traits> __sv_type; 9642: 9642: template 9642: using _If_sv = enable_if_t< 9642: __and_, 9642: __not_>, 9642: __not_>>::value, 9642: _Res>; 9642: 9642: 9642: 9642: static __sv_type 9642: _S_to_string_view(__sv_type __svt) noexcept 9642: { return __svt; } 9642: 9642: 9642: 9642: 9642: 9642: struct __sv_wrapper 9642: { 9642: explicit 9642: __sv_wrapper(__sv_type __sv) noexcept : _M_sv(__sv) { } 9642: 9642: __sv_type _M_sv; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: basic_string(__sv_wrapper __svw, const _Alloc& __a) 9642: : basic_string(__svw._M_sv.data(), __svw._M_sv.size(), __a) { } 9642: 9642: 9642: 9642: struct _Alloc_hider : allocator_type 9642: { 9642: 9642: 9642: 9642: 9642: 9642: _Alloc_hider(pointer __dat, const _Alloc& __a) 9642: : allocator_type(__a), _M_p(__dat) { } 9642: 9642: 9642: _Alloc_hider(pointer __dat, _Alloc&& __a = _Alloc()) 9642: : allocator_type(std::move(__a)), _M_p(__dat) { } 9642: 9642: 9642: pointer _M_p; 9642: }; 9642: 9642: _Alloc_hider _M_dataplus; 9642: size_type _M_string_length; 9642: 9642: enum { _S_local_capacity = 15 / sizeof(_CharT) }; 9642: 9642: union 9642: { 9642: _CharT _M_local_buf[_S_local_capacity + 1]; 9642: size_type _M_allocated_capacity; 9642: }; 9642: 9642: 9642: void 9642: _M_data(pointer __p) 9642: { _M_dataplus._M_p = __p; } 9642: 9642: 9642: void 9642: _M_length(size_type __length) 9642: { _M_string_length = __length; } 9642: 9642: 9642: pointer 9642: _M_data() const 9642: { return _M_dataplus._M_p; } 9642: 9642: 9642: pointer 9642: _M_local_data() 9642: { 9642: 9642: return std::pointer_traits::pointer_to(*_M_local_buf); 9642: 9642: 9642: 9642: } 9642: 9642: 9642: const_pointer 9642: _M_local_data() const 9642: { 9642: 9642: return std::pointer_traits::pointer_to(*_M_local_buf); 9642: 9642: 9642: 9642: } 9642: 9642: 9642: void 9642: _M_capacity(size_type __capacity) 9642: { _M_allocated_capacity = __capacity; } 9642: 9642: 9642: void 9642: _M_set_length(size_type __n) 9642: { 9642: _M_length(__n); 9642: traits_type::assign(_M_data()[__n], _CharT()); 9642: } 9642: 9642: 9642: bool 9642: _M_is_local() const 9642: { 9642: if (_M_data() == _M_local_data()) 9642: { 9642: if (_M_string_length > _S_local_capacity) 9642: __builtin_unreachable(); 9642: return true; 9642: } 9642: return false; 9642: } 9642: 9642: 9642: 9642: pointer 9642: _M_create(size_type&, size_type); 9642: 9642: 9642: void 9642: _M_dispose() 9642: { 9642: if (!_M_is_local()) 9642: _M_destroy(_M_allocated_capacity); 9642: } 9642: 9642: 9642: void 9642: _M_destroy(size_type __size) throw() 9642: { _Alloc_traits::deallocate(_M_get_allocator(), _M_data(), __size + 1); } 9642: # 316 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: 9642: void 9642: _M_construct(_InIterator __beg, _InIterator __end, 9642: std::input_iterator_tag); 9642: 9642: 9642: 9642: template 9642: 9642: void 9642: _M_construct(_FwdIterator __beg, _FwdIterator __end, 9642: std::forward_iterator_tag); 9642: 9642: 9642: void 9642: _M_construct(size_type __req, _CharT __c); 9642: 9642: 9642: allocator_type& 9642: _M_get_allocator() 9642: { return _M_dataplus; } 9642: 9642: 9642: const allocator_type& 9642: _M_get_allocator() const 9642: { return _M_dataplus; } 9642: 9642: 9642: __attribute__((__always_inline__)) 9642: constexpr 9642: void 9642: _M_init_local_buf() noexcept 9642: { 9642: 9642: 9642: 9642: 9642: 9642: } 9642: 9642: __attribute__((__always_inline__)) 9642: constexpr 9642: pointer 9642: _M_use_local_data() noexcept 9642: { 9642: 9642: 9642: 9642: return _M_local_data(); 9642: } 9642: 9642: private: 9642: # 384 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: size_type 9642: _M_check(size_type __pos, const char* __s) const 9642: { 9642: if (__pos > this->size()) 9642: __throw_out_of_range_fmt(("%s: __pos (which is %zu) > " "this->size() (which is %zu)") 9642: , 9642: __s, __pos, this->size()); 9642: return __pos; 9642: } 9642: 9642: 9642: void 9642: _M_check_length(size_type __n1, size_type __n2, const char* __s) const 9642: { 9642: if (this->max_size() - (this->size() - __n1) < __n2) 9642: __throw_length_error((__s)); 9642: } 9642: 9642: 9642: 9642: 9642: size_type 9642: _M_limit(size_type __pos, size_type __off) const noexcept 9642: { 9642: const bool __testoff = __off < this->size() - __pos; 9642: return __testoff ? __off : this->size() - __pos; 9642: } 9642: 9642: 9642: bool 9642: _M_disjunct(const _CharT* __s) const noexcept 9642: { 9642: return (less()(__s, _M_data()) 9642: || less()(_M_data() + this->size(), __s)); 9642: } 9642: 9642: 9642: 9642: 9642: static void 9642: _S_copy(_CharT* __d, const _CharT* __s, size_type __n) 9642: { 9642: if (__n == 1) 9642: traits_type::assign(*__d, *__s); 9642: else 9642: traits_type::copy(__d, __s, __n); 9642: } 9642: 9642: 9642: static void 9642: _S_move(_CharT* __d, const _CharT* __s, size_type __n) 9642: { 9642: if (__n == 1) 9642: traits_type::assign(*__d, *__s); 9642: else 9642: traits_type::move(__d, __s, __n); 9642: } 9642: 9642: 9642: static void 9642: _S_assign(_CharT* __d, size_type __n, _CharT __c) 9642: { 9642: if (__n == 1) 9642: traits_type::assign(*__d, __c); 9642: else 9642: traits_type::assign(__d, __n, __c); 9642: } 9642: 9642: 9642: 9642: template 9642: 9642: static void 9642: _S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2) 9642: { 9642: for (; __k1 != __k2; ++__k1, (void)++__p) 9642: traits_type::assign(*__p, *__k1); 9642: } 9642: 9642: 9642: static void 9642: _S_copy_chars(_CharT* __p, iterator __k1, iterator __k2) noexcept 9642: { _S_copy_chars(__p, __k1.base(), __k2.base()); } 9642: 9642: 9642: static void 9642: _S_copy_chars(_CharT* __p, const_iterator __k1, const_iterator __k2) 9642: noexcept 9642: { _S_copy_chars(__p, __k1.base(), __k2.base()); } 9642: 9642: 9642: static void 9642: _S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2) noexcept 9642: { _S_copy(__p, __k1, __k2 - __k1); } 9642: 9642: 9642: static void 9642: _S_copy_chars(_CharT* __p, const _CharT* __k1, const _CharT* __k2) 9642: noexcept 9642: { _S_copy(__p, __k1, __k2 - __k1); } 9642: 9642: 9642: static int 9642: _S_compare(size_type __n1, size_type __n2) noexcept 9642: { 9642: const difference_type __d = difference_type(__n1 - __n2); 9642: 9642: if (__d > __gnu_cxx::__numeric_traits::__max) 9642: return __gnu_cxx::__numeric_traits::__max; 9642: else if (__d < __gnu_cxx::__numeric_traits::__min) 9642: return __gnu_cxx::__numeric_traits::__min; 9642: else 9642: return int(__d); 9642: } 9642: 9642: 9642: void 9642: _M_assign(const basic_string&); 9642: 9642: 9642: void 9642: _M_mutate(size_type __pos, size_type __len1, const _CharT* __s, 9642: size_type __len2); 9642: 9642: 9642: void 9642: _M_erase(size_type __pos, size_type __n); 9642: 9642: public: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: basic_string() 9642: noexcept(is_nothrow_default_constructible<_Alloc>::value) 9642: : _M_dataplus(_M_local_data()) 9642: { 9642: _M_init_local_buf(); 9642: _M_set_length(0); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: basic_string(const _Alloc& __a) noexcept 9642: : _M_dataplus(_M_local_data(), __a) 9642: { 9642: _M_init_local_buf(); 9642: _M_set_length(0); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: basic_string(const basic_string& __str) 9642: : _M_dataplus(_M_local_data(), 9642: _Alloc_traits::_S_select_on_copy(__str._M_get_allocator())) 9642: { 9642: _M_construct(__str._M_data(), __str._M_data() + __str.length(), 9642: std::forward_iterator_tag()); 9642: } 9642: # 563 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string(const basic_string& __str, size_type __pos, 9642: const _Alloc& __a = _Alloc()) 9642: : _M_dataplus(_M_local_data(), __a) 9642: { 9642: const _CharT* __start = __str._M_data() 9642: + __str._M_check(__pos, "basic_string::basic_string"); 9642: _M_construct(__start, __start + __str._M_limit(__pos, npos), 9642: std::forward_iterator_tag()); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: basic_string(const basic_string& __str, size_type __pos, 9642: size_type __n) 9642: : _M_dataplus(_M_local_data()) 9642: { 9642: const _CharT* __start = __str._M_data() 9642: + __str._M_check(__pos, "basic_string::basic_string"); 9642: _M_construct(__start, __start + __str._M_limit(__pos, __n), 9642: std::forward_iterator_tag()); 9642: } 9642: # 598 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string(const basic_string& __str, size_type __pos, 9642: size_type __n, const _Alloc& __a) 9642: : _M_dataplus(_M_local_data(), __a) 9642: { 9642: const _CharT* __start 9642: = __str._M_data() + __str._M_check(__pos, "string::string"); 9642: _M_construct(__start, __start + __str._M_limit(__pos, __n), 9642: std::forward_iterator_tag()); 9642: } 9642: # 618 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string(const _CharT* __s, size_type __n, 9642: const _Alloc& __a = _Alloc()) 9642: : _M_dataplus(_M_local_data(), __a) 9642: { 9642: 9642: if (__s == 0 && __n > 0) 9642: std::__throw_logic_error(("basic_string: " "construction from null is not valid") 9642: ); 9642: _M_construct(__s, __s + __n, std::forward_iterator_tag()); 9642: } 9642: # 638 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template> 9642: 9642: 9642: basic_string(const _CharT* __s, const _Alloc& __a = _Alloc()) 9642: : _M_dataplus(_M_local_data(), __a) 9642: { 9642: 9642: if (__s == 0) 9642: std::__throw_logic_error(("basic_string: " "construction from null is not valid") 9642: ); 9642: const _CharT* __end = __s + traits_type::length(__s); 9642: _M_construct(__s, __end, forward_iterator_tag()); 9642: } 9642: # 661 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template> 9642: 9642: 9642: basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc()) 9642: : _M_dataplus(_M_local_data(), __a) 9642: { _M_construct(__n, __c); } 9642: # 676 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string(basic_string&& __str) noexcept 9642: : _M_dataplus(_M_local_data(), std::move(__str._M_get_allocator())) 9642: { 9642: if (__str._M_is_local()) 9642: { 9642: _M_init_local_buf(); 9642: traits_type::copy(_M_local_buf, __str._M_local_buf, 9642: __str.length() + 1); 9642: } 9642: else 9642: { 9642: _M_data(__str._M_data()); 9642: _M_capacity(__str._M_allocated_capacity); 9642: } 9642: 9642: 9642: 9642: 9642: _M_length(__str.length()); 9642: __str._M_data(__str._M_use_local_data()); 9642: __str._M_set_length(0); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc()) 9642: : _M_dataplus(_M_local_data(), __a) 9642: { _M_construct(__l.begin(), __l.end(), std::forward_iterator_tag()); } 9642: 9642: 9642: basic_string(const basic_string& __str, const _Alloc& __a) 9642: : _M_dataplus(_M_local_data(), __a) 9642: { _M_construct(__str.begin(), __str.end(), std::forward_iterator_tag()); } 9642: 9642: 9642: basic_string(basic_string&& __str, const _Alloc& __a) 9642: noexcept(_Alloc_traits::_S_always_equal()) 9642: : _M_dataplus(_M_local_data(), __a) 9642: { 9642: if (__str._M_is_local()) 9642: { 9642: _M_init_local_buf(); 9642: traits_type::copy(_M_local_buf, __str._M_local_buf, 9642: __str.length() + 1); 9642: _M_length(__str.length()); 9642: __str._M_set_length(0); 9642: } 9642: else if (_Alloc_traits::_S_always_equal() 9642: || __str.get_allocator() == __a) 9642: { 9642: _M_data(__str._M_data()); 9642: _M_length(__str.length()); 9642: _M_capacity(__str._M_allocated_capacity); 9642: __str._M_data(__str._M_use_local_data()); 9642: __str._M_set_length(0); 9642: } 9642: else 9642: _M_construct(__str.begin(), __str.end(), std::forward_iterator_tag()); 9642: } 9642: # 754 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template> 9642: 9642: 9642: 9642: 9642: basic_string(_InputIterator __beg, _InputIterator __end, 9642: const _Alloc& __a = _Alloc()) 9642: : _M_dataplus(_M_local_data(), __a), _M_string_length(0) 9642: { 9642: 9642: _M_construct(__beg, __end, std::__iterator_category(__beg)); 9642: 9642: 9642: 9642: 9642: } 9642: # 780 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template>> 9642: 9642: basic_string(const _Tp& __t, size_type __pos, size_type __n, 9642: const _Alloc& __a = _Alloc()) 9642: : basic_string(_S_to_string_view(__t).substr(__pos, __n), __a) { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template> 9642: 9642: explicit 9642: basic_string(const _Tp& __t, const _Alloc& __a = _Alloc()) 9642: : basic_string(__sv_wrapper(_S_to_string_view(__t)), __a) { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: ~basic_string() 9642: { _M_dispose(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: basic_string& 9642: operator=(const basic_string& __str) 9642: { 9642: return this->assign(__str); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: basic_string& 9642: operator=(const _CharT* __s) 9642: { return this->assign(__s); } 9642: # 833 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: operator=(_CharT __c) 9642: { 9642: this->assign(1, __c); 9642: return *this; 9642: } 9642: # 851 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: operator=(basic_string&& __str) 9642: noexcept(_Alloc_traits::_S_nothrow_move()) 9642: { 9642: const bool __equal_allocs = _Alloc_traits::_S_always_equal() 9642: || _M_get_allocator() == __str._M_get_allocator(); 9642: if (!_M_is_local() && _Alloc_traits::_S_propagate_on_move_assign() 9642: && !__equal_allocs) 9642: { 9642: 9642: _M_destroy(_M_allocated_capacity); 9642: _M_data(_M_local_data()); 9642: _M_set_length(0); 9642: } 9642: 9642: std::__alloc_on_move(_M_get_allocator(), __str._M_get_allocator()); 9642: 9642: if (__str._M_is_local()) 9642: { 9642: 9642: 9642: 9642: if (__builtin_expect(std::__addressof(__str) != this, true)) 9642: { 9642: if (__str.size()) 9642: this->_S_copy(_M_data(), __str._M_data(), __str.size()); 9642: _M_set_length(__str.size()); 9642: } 9642: } 9642: else if (_Alloc_traits::_S_propagate_on_move_assign() || __equal_allocs) 9642: { 9642: 9642: pointer __data = nullptr; 9642: size_type __capacity; 9642: if (!_M_is_local()) 9642: { 9642: if (__equal_allocs) 9642: { 9642: 9642: __data = _M_data(); 9642: __capacity = _M_allocated_capacity; 9642: } 9642: else 9642: _M_destroy(_M_allocated_capacity); 9642: } 9642: 9642: _M_data(__str._M_data()); 9642: _M_length(__str.length()); 9642: _M_capacity(__str._M_allocated_capacity); 9642: if (__data) 9642: { 9642: __str._M_data(__data); 9642: __str._M_capacity(__capacity); 9642: } 9642: else 9642: __str._M_data(__str._M_use_local_data()); 9642: } 9642: else 9642: assign(__str); 9642: __str.clear(); 9642: return *this; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: basic_string& 9642: operator=(initializer_list<_CharT> __l) 9642: { 9642: this->assign(__l.begin(), __l.size()); 9642: return *this; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: _If_sv<_Tp, basic_string&> 9642: operator=(const _Tp& __svt) 9642: { return this->assign(__svt); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: operator __sv_type() const noexcept 9642: { return __sv_type(data(), size()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: iterator 9642: begin() noexcept 9642: { return iterator(_M_data()); } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: begin() const noexcept 9642: { return const_iterator(_M_data()); } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: iterator 9642: end() noexcept 9642: { return iterator(_M_data() + this->size()); } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: end() const noexcept 9642: { return const_iterator(_M_data() + this->size()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: reverse_iterator 9642: rbegin() noexcept 9642: { return reverse_iterator(this->end()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: rbegin() const noexcept 9642: { return const_reverse_iterator(this->end()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: reverse_iterator 9642: rend() noexcept 9642: { return reverse_iterator(this->begin()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: rend() const noexcept 9642: { return const_reverse_iterator(this->begin()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: cbegin() const noexcept 9642: { return const_iterator(this->_M_data()); } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: cend() const noexcept 9642: { return const_iterator(this->_M_data() + this->size()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: crbegin() const noexcept 9642: { return const_reverse_iterator(this->end()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: crend() const noexcept 9642: { return const_reverse_iterator(this->begin()); } 9642: 9642: 9642: public: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: size_type 9642: size() const noexcept 9642: { return _M_string_length; } 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: size_type 9642: length() const noexcept 9642: { return _M_string_length; } 9642: 9642: 9642: [[__nodiscard__]] 9642: size_type 9642: max_size() const noexcept 9642: { return (_Alloc_traits::max_size(_M_get_allocator()) - 1) / 2; } 9642: # 1097 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: void 9642: resize(size_type __n, _CharT __c); 9642: # 1111 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: void 9642: resize(size_type __n) 9642: { this->resize(__n, _CharT()); } 9642: 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: 9642: 9642: void 9642: shrink_to_fit() noexcept 9642: { reserve(); } 9642: #pragma GCC diagnostic pop 9642: # 1167 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: capacity() const noexcept 9642: { 9642: return _M_is_local() ? size_type(_S_local_capacity) 9642: : _M_allocated_capacity; 9642: } 9642: # 1192 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: void 9642: reserve(size_type __res_arg); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: reserve(); 9642: 9642: 9642: 9642: 9642: 9642: void 9642: clear() noexcept 9642: { _M_set_length(0); } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: bool 9642: empty() const noexcept 9642: { return this->size() == 0; } 9642: # 1234 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: const_reference 9642: operator[] (size_type __pos) const noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__pos <= size())) __builtin_unreachable(); } while (false); 9642: return _M_data()[__pos]; 9642: } 9642: # 1252 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: reference 9642: operator[](size_type __pos) 9642: { 9642: 9642: 9642: do { if (std::__is_constant_evaluated() && !bool(__pos <= size())) __builtin_unreachable(); } while (false); 9642: 9642: ; 9642: return _M_data()[__pos]; 9642: } 9642: # 1274 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: const_reference 9642: at(size_type __n) const 9642: { 9642: if (__n >= this->size()) 9642: __throw_out_of_range_fmt(("basic_string::at: __n " "(which is %zu) >= this->size() " "(which is %zu)") 9642: 9642: , 9642: __n, this->size()); 9642: return _M_data()[__n]; 9642: } 9642: # 1296 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: reference 9642: at(size_type __n) 9642: { 9642: if (__n >= size()) 9642: __throw_out_of_range_fmt(("basic_string::at: __n " "(which is %zu) >= this->size() " "(which is %zu)") 9642: 9642: , 9642: __n, this->size()); 9642: return _M_data()[__n]; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: reference 9642: front() noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(!empty())) __builtin_unreachable(); } while (false); 9642: return operator[](0); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reference 9642: front() const noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(!empty())) __builtin_unreachable(); } while (false); 9642: return operator[](0); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: reference 9642: back() noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(!empty())) __builtin_unreachable(); } while (false); 9642: return operator[](this->size() - 1); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reference 9642: back() const noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(!empty())) __builtin_unreachable(); } while (false); 9642: return operator[](this->size() - 1); 9642: } 9642: # 1364 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: operator+=(const basic_string& __str) 9642: { return this->append(__str); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: basic_string& 9642: operator+=(const _CharT* __s) 9642: { return this->append(__s); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: basic_string& 9642: operator+=(_CharT __c) 9642: { 9642: this->push_back(__c); 9642: return *this; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: basic_string& 9642: operator+=(initializer_list<_CharT> __l) 9642: { return this->append(__l.begin(), __l.size()); } 9642: # 1410 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: 9642: _If_sv<_Tp, basic_string&> 9642: operator+=(const _Tp& __svt) 9642: { return this->append(__svt); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: basic_string& 9642: append(const basic_string& __str) 9642: { return this->append(__str._M_data(), __str.size()); } 9642: # 1440 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: append(const basic_string& __str, size_type __pos, size_type __n = npos) 9642: { return this->append(__str._M_data() 9642: + __str._M_check(__pos, "basic_string::append"), 9642: __str._M_limit(__pos, __n)); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: basic_string& 9642: append(const _CharT* __s, size_type __n) 9642: { 9642: ; 9642: _M_check_length(size_type(0), __n, "basic_string::append"); 9642: return _M_append(__s, __n); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: basic_string& 9642: append(const _CharT* __s) 9642: { 9642: ; 9642: const size_type __n = traits_type::length(__s); 9642: _M_check_length(size_type(0), __n, "basic_string::append"); 9642: return _M_append(__s, __n); 9642: } 9642: # 1485 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: append(size_type __n, _CharT __c) 9642: { return _M_replace_aux(this->size(), size_type(0), __n, __c); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: basic_string& 9642: append(initializer_list<_CharT> __l) 9642: { return this->append(__l.begin(), __l.size()); } 9642: # 1511 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template> 9642: 9642: 9642: 9642: 9642: basic_string& 9642: append(_InputIterator __first, _InputIterator __last) 9642: { return this->replace(end(), end(), __first, __last); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: _If_sv<_Tp, basic_string&> 9642: append(const _Tp& __svt) 9642: { 9642: __sv_type __sv = __svt; 9642: return this->append(__sv.data(), __sv.size()); 9642: } 9642: # 1543 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: 9642: _If_sv<_Tp, basic_string&> 9642: append(const _Tp& __svt, size_type __pos, size_type __n = npos) 9642: { 9642: __sv_type __sv = __svt; 9642: return _M_append(__sv.data() 9642: + std::__sv_check(__sv.size(), __pos, "basic_string::append"), 9642: std::__sv_limit(__sv.size(), __pos, __n)); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: push_back(_CharT __c) 9642: { 9642: const size_type __size = this->size(); 9642: if (__size + 1 > this->capacity()) 9642: this->_M_mutate(__size, size_type(0), 0, size_type(1)); 9642: traits_type::assign(this->_M_data()[__size], __c); 9642: this->_M_set_length(__size + 1); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: basic_string& 9642: assign(const basic_string& __str) 9642: { 9642: 9642: if (_Alloc_traits::_S_propagate_on_copy_assign()) 9642: { 9642: if (!_Alloc_traits::_S_always_equal() && !_M_is_local() 9642: && _M_get_allocator() != __str._M_get_allocator()) 9642: { 9642: 9642: 9642: if (__str.size() <= _S_local_capacity) 9642: { 9642: _M_destroy(_M_allocated_capacity); 9642: _M_data(_M_use_local_data()); 9642: _M_set_length(0); 9642: } 9642: else 9642: { 9642: const auto __len = __str.size(); 9642: auto __alloc = __str._M_get_allocator(); 9642: 9642: auto __ptr = _S_allocate(__alloc, __len + 1); 9642: _M_destroy(_M_allocated_capacity); 9642: _M_data(__ptr); 9642: _M_capacity(__len); 9642: _M_set_length(__len); 9642: } 9642: } 9642: std::__alloc_on_copy(_M_get_allocator(), __str._M_get_allocator()); 9642: } 9642: 9642: this->_M_assign(__str); 9642: return *this; 9642: } 9642: # 1621 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: assign(basic_string&& __str) 9642: noexcept(_Alloc_traits::_S_nothrow_move()) 9642: { 9642: 9642: 9642: return *this = std::move(__str); 9642: } 9642: # 1645 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: assign(const basic_string& __str, size_type __pos, size_type __n = npos) 9642: { return _M_replace(size_type(0), this->size(), __str._M_data() 9642: + __str._M_check(__pos, "basic_string::assign"), 9642: __str._M_limit(__pos, __n)); } 9642: # 1662 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: assign(const _CharT* __s, size_type __n) 9642: { 9642: ; 9642: return _M_replace(size_type(0), this->size(), __s, __n); 9642: } 9642: # 1679 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: assign(const _CharT* __s) 9642: { 9642: ; 9642: return _M_replace(size_type(0), this->size(), __s, 9642: traits_type::length(__s)); 9642: } 9642: # 1697 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: assign(size_type __n, _CharT __c) 9642: { return _M_replace_aux(size_type(0), this->size(), __n, __c); } 9642: # 1711 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template> 9642: 9642: 9642: 9642: 9642: basic_string& 9642: assign(_InputIterator __first, _InputIterator __last) 9642: { return this->replace(begin(), end(), __first, __last); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: basic_string& 9642: assign(initializer_list<_CharT> __l) 9642: { return this->assign(__l.begin(), __l.size()); } 9642: # 1739 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: 9642: _If_sv<_Tp, basic_string&> 9642: assign(const _Tp& __svt) 9642: { 9642: __sv_type __sv = __svt; 9642: return this->assign(__sv.data(), __sv.size()); 9642: } 9642: # 1755 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: 9642: _If_sv<_Tp, basic_string&> 9642: assign(const _Tp& __svt, size_type __pos, size_type __n = npos) 9642: { 9642: __sv_type __sv = __svt; 9642: return _M_replace(size_type(0), this->size(), 9642: __sv.data() 9642: + std::__sv_check(__sv.size(), __pos, "basic_string::assign"), 9642: std::__sv_limit(__sv.size(), __pos, __n)); 9642: } 9642: # 1784 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: iterator 9642: insert(const_iterator __p, size_type __n, _CharT __c) 9642: { 9642: ; 9642: const size_type __pos = __p - begin(); 9642: this->replace(__p, __p, __n, __c); 9642: return iterator(this->_M_data() + __pos); 9642: } 9642: # 1827 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template> 9642: 9642: iterator 9642: insert(const_iterator __p, _InputIterator __beg, _InputIterator __end) 9642: { 9642: ; 9642: const size_type __pos = __p - begin(); 9642: this->replace(__p, __p, __beg, __end); 9642: return iterator(this->_M_data() + __pos); 9642: } 9642: # 1864 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: iterator 9642: insert(const_iterator __p, initializer_list<_CharT> __l) 9642: { return this->insert(__p, __l.begin(), __l.end()); } 9642: # 1892 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: insert(size_type __pos1, const basic_string& __str) 9642: { return this->replace(__pos1, size_type(0), 9642: __str._M_data(), __str.size()); } 9642: # 1916 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: insert(size_type __pos1, const basic_string& __str, 9642: size_type __pos2, size_type __n = npos) 9642: { return this->replace(__pos1, size_type(0), __str._M_data() 9642: + __str._M_check(__pos2, "basic_string::insert"), 9642: __str._M_limit(__pos2, __n)); } 9642: # 1940 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: insert(size_type __pos, const _CharT* __s, size_type __n) 9642: { return this->replace(__pos, size_type(0), __s, __n); } 9642: # 1960 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: insert(size_type __pos, const _CharT* __s) 9642: { 9642: ; 9642: return this->replace(__pos, size_type(0), __s, 9642: traits_type::length(__s)); 9642: } 9642: # 1985 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: insert(size_type __pos, size_type __n, _CharT __c) 9642: { return _M_replace_aux(_M_check(__pos, "basic_string::insert"), 9642: size_type(0), __n, __c); } 9642: # 2004 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: iterator 9642: insert(__const_iterator __p, _CharT __c) 9642: { 9642: ; 9642: const size_type __pos = __p - begin(); 9642: _M_replace_aux(__pos, size_type(0), size_type(1), __c); 9642: return iterator(_M_data() + __pos); 9642: } 9642: # 2021 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: 9642: _If_sv<_Tp, basic_string&> 9642: insert(size_type __pos, const _Tp& __svt) 9642: { 9642: __sv_type __sv = __svt; 9642: return this->insert(__pos, __sv.data(), __sv.size()); 9642: } 9642: # 2038 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: 9642: _If_sv<_Tp, basic_string&> 9642: insert(size_type __pos1, const _Tp& __svt, 9642: size_type __pos2, size_type __n = npos) 9642: { 9642: __sv_type __sv = __svt; 9642: return this->replace(__pos1, size_type(0), 9642: __sv.data() 9642: + std::__sv_check(__sv.size(), __pos2, "basic_string::insert"), 9642: std::__sv_limit(__sv.size(), __pos2, __n)); 9642: } 9642: # 2067 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: erase(size_type __pos = 0, size_type __n = npos) 9642: { 9642: _M_check(__pos, "basic_string::erase"); 9642: if (__n == npos) 9642: this->_M_set_length(__pos); 9642: else if (__n != 0) 9642: this->_M_erase(__pos, _M_limit(__pos, __n)); 9642: return *this; 9642: } 9642: # 2087 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: iterator 9642: erase(__const_iterator __position) 9642: { 9642: 9642: ; 9642: const size_type __pos = __position - begin(); 9642: this->_M_erase(__pos, size_type(1)); 9642: return iterator(_M_data() + __pos); 9642: } 9642: # 2107 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: iterator 9642: erase(__const_iterator __first, __const_iterator __last) 9642: { 9642: 9642: ; 9642: const size_type __pos = __first - begin(); 9642: if (__last == end()) 9642: this->_M_set_length(__pos); 9642: else 9642: this->_M_erase(__pos, __last - __first); 9642: return iterator(this->_M_data() + __pos); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: pop_back() noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(!empty())) __builtin_unreachable(); } while (false); 9642: _M_erase(size() - 1, 1); 9642: } 9642: # 2153 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: replace(size_type __pos, size_type __n, const basic_string& __str) 9642: { return this->replace(__pos, __n, __str._M_data(), __str.size()); } 9642: # 2176 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: replace(size_type __pos1, size_type __n1, const basic_string& __str, 9642: size_type __pos2, size_type __n2 = npos) 9642: { return this->replace(__pos1, __n1, __str._M_data() 9642: + __str._M_check(__pos2, "basic_string::replace"), 9642: __str._M_limit(__pos2, __n2)); } 9642: # 2202 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: replace(size_type __pos, size_type __n1, const _CharT* __s, 9642: size_type __n2) 9642: { 9642: ; 9642: return _M_replace(_M_check(__pos, "basic_string::replace"), 9642: _M_limit(__pos, __n1), __s, __n2); 9642: } 9642: # 2228 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: replace(size_type __pos, size_type __n1, const _CharT* __s) 9642: { 9642: ; 9642: return this->replace(__pos, __n1, __s, traits_type::length(__s)); 9642: } 9642: # 2253 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c) 9642: { return _M_replace_aux(_M_check(__pos, "basic_string::replace"), 9642: _M_limit(__pos, __n1), __n2, __c); } 9642: # 2272 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: replace(__const_iterator __i1, __const_iterator __i2, 9642: const basic_string& __str) 9642: { return this->replace(__i1, __i2, __str._M_data(), __str.size()); } 9642: # 2293 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: replace(__const_iterator __i1, __const_iterator __i2, 9642: const _CharT* __s, size_type __n) 9642: { 9642: 9642: ; 9642: return this->replace(__i1 - begin(), __i2 - __i1, __s, __n); 9642: } 9642: # 2316 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: replace(__const_iterator __i1, __const_iterator __i2, const _CharT* __s) 9642: { 9642: ; 9642: return this->replace(__i1, __i2, __s, traits_type::length(__s)); 9642: } 9642: # 2338 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: replace(__const_iterator __i1, __const_iterator __i2, size_type __n, 9642: _CharT __c) 9642: { 9642: 9642: ; 9642: return _M_replace_aux(__i1 - begin(), __i2 - __i1, __n, __c); 9642: } 9642: # 2364 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template> 9642: 9642: basic_string& 9642: replace(const_iterator __i1, const_iterator __i2, 9642: _InputIterator __k1, _InputIterator __k2) 9642: { 9642: 9642: ; 9642: ; 9642: return this->_M_replace_dispatch(__i1, __i2, __k1, __k2, 9642: std::__false_type()); 9642: } 9642: # 2397 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& 9642: replace(__const_iterator __i1, __const_iterator __i2, 9642: _CharT* __k1, _CharT* __k2) 9642: { 9642: 9642: ; 9642: ; 9642: return this->replace(__i1 - begin(), __i2 - __i1, 9642: __k1, __k2 - __k1); 9642: } 9642: 9642: 9642: basic_string& 9642: replace(__const_iterator __i1, __const_iterator __i2, 9642: const _CharT* __k1, const _CharT* __k2) 9642: { 9642: 9642: ; 9642: ; 9642: return this->replace(__i1 - begin(), __i2 - __i1, 9642: __k1, __k2 - __k1); 9642: } 9642: 9642: 9642: basic_string& 9642: replace(__const_iterator __i1, __const_iterator __i2, 9642: iterator __k1, iterator __k2) 9642: { 9642: 9642: ; 9642: ; 9642: return this->replace(__i1 - begin(), __i2 - __i1, 9642: __k1.base(), __k2 - __k1); 9642: } 9642: 9642: 9642: basic_string& 9642: replace(__const_iterator __i1, __const_iterator __i2, 9642: const_iterator __k1, const_iterator __k2) 9642: { 9642: 9642: ; 9642: ; 9642: return this->replace(__i1 - begin(), __i2 - __i1, 9642: __k1.base(), __k2 - __k1); 9642: } 9642: # 2460 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: basic_string& replace(const_iterator __i1, const_iterator __i2, 9642: initializer_list<_CharT> __l) 9642: { return this->replace(__i1, __i2, __l.begin(), __l.size()); } 9642: # 2474 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: 9642: _If_sv<_Tp, basic_string&> 9642: replace(size_type __pos, size_type __n, const _Tp& __svt) 9642: { 9642: __sv_type __sv = __svt; 9642: return this->replace(__pos, __n, __sv.data(), __sv.size()); 9642: } 9642: # 2492 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: 9642: _If_sv<_Tp, basic_string&> 9642: replace(size_type __pos1, size_type __n1, const _Tp& __svt, 9642: size_type __pos2, size_type __n2 = npos) 9642: { 9642: __sv_type __sv = __svt; 9642: return this->replace(__pos1, __n1, 9642: __sv.data() 9642: + std::__sv_check(__sv.size(), __pos2, "basic_string::replace"), 9642: std::__sv_limit(__sv.size(), __pos2, __n2)); 9642: } 9642: # 2514 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: 9642: _If_sv<_Tp, basic_string&> 9642: replace(const_iterator __i1, const_iterator __i2, const _Tp& __svt) 9642: { 9642: __sv_type __sv = __svt; 9642: return this->replace(__i1 - begin(), __i2 - __i1, __sv); 9642: } 9642: 9642: 9642: private: 9642: template 9642: 9642: basic_string& 9642: _M_replace_dispatch(const_iterator __i1, const_iterator __i2, 9642: _Integer __n, _Integer __val, __true_type) 9642: { return _M_replace_aux(__i1 - begin(), __i2 - __i1, __n, __val); } 9642: 9642: template 9642: 9642: basic_string& 9642: _M_replace_dispatch(const_iterator __i1, const_iterator __i2, 9642: _InputIterator __k1, _InputIterator __k2, 9642: __false_type); 9642: 9642: 9642: basic_string& 9642: _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2, 9642: _CharT __c); 9642: 9642: __attribute__((__noinline__, __noclone__, __cold__)) void 9642: _M_replace_cold(pointer __p, size_type __len1, const _CharT* __s, 9642: const size_type __len2, const size_type __how_much); 9642: 9642: 9642: basic_string& 9642: _M_replace(size_type __pos, size_type __len1, const _CharT* __s, 9642: const size_type __len2); 9642: 9642: 9642: basic_string& 9642: _M_append(const _CharT* __s, size_type __n); 9642: 9642: public: 9642: # 2571 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: size_type 9642: copy(_CharT* __s, size_type __n, size_type __pos = 0) const; 9642: # 2582 "/usr/include/c++/13/bits/basic_string.h" 3 9642: 9642: void 9642: swap(basic_string& __s) noexcept; 9642: # 2593 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: const _CharT* 9642: c_str() const noexcept 9642: { return _M_data(); } 9642: # 2606 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: const _CharT* 9642: data() const noexcept 9642: { return _M_data(); } 9642: # 2618 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: _CharT* 9642: data() noexcept 9642: { return _M_data(); } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: allocator_type 9642: get_allocator() const noexcept 9642: { return _M_get_allocator(); } 9642: # 2644 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find(const _CharT* __s, size_type __pos, size_type __n) const 9642: noexcept; 9642: # 2659 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find(const basic_string& __str, size_type __pos = 0) const 9642: noexcept 9642: { return this->find(__str.data(), __pos, __str.size()); } 9642: # 2672 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: [[__nodiscard__]] 9642: _If_sv<_Tp, size_type> 9642: find(const _Tp& __svt, size_type __pos = 0) const 9642: noexcept(is_same<_Tp, __sv_type>::value) 9642: { 9642: __sv_type __sv = __svt; 9642: return this->find(__sv.data(), __pos, __sv.size()); 9642: } 9642: # 2693 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find(const _CharT* __s, size_type __pos = 0) const noexcept 9642: { 9642: ; 9642: return this->find(__s, __pos, traits_type::length(__s)); 9642: } 9642: # 2711 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find(_CharT __c, size_type __pos = 0) const noexcept; 9642: # 2725 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: rfind(const basic_string& __str, size_type __pos = npos) const 9642: noexcept 9642: { return this->rfind(__str.data(), __pos, __str.size()); } 9642: # 2738 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: [[__nodiscard__]] 9642: _If_sv<_Tp, size_type> 9642: rfind(const _Tp& __svt, size_type __pos = npos) const 9642: noexcept(is_same<_Tp, __sv_type>::value) 9642: { 9642: __sv_type __sv = __svt; 9642: return this->rfind(__sv.data(), __pos, __sv.size()); 9642: } 9642: # 2761 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: rfind(const _CharT* __s, size_type __pos, size_type __n) const 9642: noexcept; 9642: # 2776 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: rfind(const _CharT* __s, size_type __pos = npos) const 9642: { 9642: ; 9642: return this->rfind(__s, __pos, traits_type::length(__s)); 9642: } 9642: # 2794 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: rfind(_CharT __c, size_type __pos = npos) const noexcept; 9642: # 2809 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find_first_of(const basic_string& __str, size_type __pos = 0) const 9642: noexcept 9642: { return this->find_first_of(__str.data(), __pos, __str.size()); } 9642: # 2823 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: [[__nodiscard__]] 9642: _If_sv<_Tp, size_type> 9642: find_first_of(const _Tp& __svt, size_type __pos = 0) const 9642: noexcept(is_same<_Tp, __sv_type>::value) 9642: { 9642: __sv_type __sv = __svt; 9642: return this->find_first_of(__sv.data(), __pos, __sv.size()); 9642: } 9642: # 2846 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find_first_of(const _CharT* __s, size_type __pos, size_type __n) const 9642: noexcept; 9642: # 2861 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find_first_of(const _CharT* __s, size_type __pos = 0) const 9642: noexcept 9642: { 9642: ; 9642: return this->find_first_of(__s, __pos, traits_type::length(__s)); 9642: } 9642: # 2882 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find_first_of(_CharT __c, size_type __pos = 0) const noexcept 9642: { return this->find(__c, __pos); } 9642: # 2898 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find_last_of(const basic_string& __str, size_type __pos = npos) const 9642: noexcept 9642: { return this->find_last_of(__str.data(), __pos, __str.size()); } 9642: # 2912 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: [[__nodiscard__]] 9642: _If_sv<_Tp, size_type> 9642: find_last_of(const _Tp& __svt, size_type __pos = npos) const 9642: noexcept(is_same<_Tp, __sv_type>::value) 9642: { 9642: __sv_type __sv = __svt; 9642: return this->find_last_of(__sv.data(), __pos, __sv.size()); 9642: } 9642: # 2935 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find_last_of(const _CharT* __s, size_type __pos, size_type __n) const 9642: noexcept; 9642: # 2950 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find_last_of(const _CharT* __s, size_type __pos = npos) const 9642: noexcept 9642: { 9642: ; 9642: return this->find_last_of(__s, __pos, traits_type::length(__s)); 9642: } 9642: # 2971 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find_last_of(_CharT __c, size_type __pos = npos) const noexcept 9642: { return this->rfind(__c, __pos); } 9642: # 2986 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find_first_not_of(const basic_string& __str, size_type __pos = 0) const 9642: noexcept 9642: { return this->find_first_not_of(__str.data(), __pos, __str.size()); } 9642: # 3000 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: [[__nodiscard__]] 9642: _If_sv<_Tp, size_type> 9642: find_first_not_of(const _Tp& __svt, size_type __pos = 0) const 9642: noexcept(is_same<_Tp, __sv_type>::value) 9642: { 9642: __sv_type __sv = __svt; 9642: return this->find_first_not_of(__sv.data(), __pos, __sv.size()); 9642: } 9642: # 3023 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find_first_not_of(const _CharT* __s, size_type __pos, 9642: size_type __n) const noexcept; 9642: # 3038 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find_first_not_of(const _CharT* __s, size_type __pos = 0) const 9642: noexcept 9642: { 9642: ; 9642: return this->find_first_not_of(__s, __pos, traits_type::length(__s)); 9642: } 9642: # 3057 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find_first_not_of(_CharT __c, size_type __pos = 0) const 9642: noexcept; 9642: # 3073 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find_last_not_of(const basic_string& __str, size_type __pos = npos) const 9642: noexcept 9642: { return this->find_last_not_of(__str.data(), __pos, __str.size()); } 9642: # 3087 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: [[__nodiscard__]] 9642: _If_sv<_Tp, size_type> 9642: find_last_not_of(const _Tp& __svt, size_type __pos = npos) const 9642: noexcept(is_same<_Tp, __sv_type>::value) 9642: { 9642: __sv_type __sv = __svt; 9642: return this->find_last_not_of(__sv.data(), __pos, __sv.size()); 9642: } 9642: # 3110 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find_last_not_of(const _CharT* __s, size_type __pos, 9642: size_type __n) const noexcept; 9642: # 3125 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find_last_not_of(const _CharT* __s, size_type __pos = npos) const 9642: noexcept 9642: { 9642: ; 9642: return this->find_last_not_of(__s, __pos, traits_type::length(__s)); 9642: } 9642: # 3144 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: size_type 9642: find_last_not_of(_CharT __c, size_type __pos = npos) const 9642: noexcept; 9642: # 3161 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: basic_string 9642: substr(size_type __pos = 0, size_type __n = npos) const 9642: { return basic_string(*this, 9642: _M_check(__pos, "basic_string::substr"), __n); } 9642: # 3181 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: int 9642: compare(const basic_string& __str) const 9642: { 9642: const size_type __size = this->size(); 9642: const size_type __osize = __str.size(); 9642: const size_type __len = std::min(__size, __osize); 9642: 9642: int __r = traits_type::compare(_M_data(), __str.data(), __len); 9642: if (!__r) 9642: __r = _S_compare(__size, __osize); 9642: return __r; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: _If_sv<_Tp, int> 9642: compare(const _Tp& __svt) const 9642: noexcept(is_same<_Tp, __sv_type>::value) 9642: { 9642: __sv_type __sv = __svt; 9642: const size_type __size = this->size(); 9642: const size_type __osize = __sv.size(); 9642: const size_type __len = std::min(__size, __osize); 9642: 9642: int __r = traits_type::compare(_M_data(), __sv.data(), __len); 9642: if (!__r) 9642: __r = _S_compare(__size, __osize); 9642: return __r; 9642: } 9642: # 3226 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: [[__nodiscard__]] 9642: _If_sv<_Tp, int> 9642: compare(size_type __pos, size_type __n, const _Tp& __svt) const 9642: noexcept(is_same<_Tp, __sv_type>::value) 9642: { 9642: __sv_type __sv = __svt; 9642: return __sv_type(*this).substr(__pos, __n).compare(__sv); 9642: } 9642: # 3246 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: [[__nodiscard__]] 9642: _If_sv<_Tp, int> 9642: compare(size_type __pos1, size_type __n1, const _Tp& __svt, 9642: size_type __pos2, size_type __n2 = npos) const 9642: noexcept(is_same<_Tp, __sv_type>::value) 9642: { 9642: __sv_type __sv = __svt; 9642: return __sv_type(*this) 9642: .substr(__pos1, __n1).compare(__sv.substr(__pos2, __n2)); 9642: } 9642: # 3278 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: int 9642: compare(size_type __pos, size_type __n, const basic_string& __str) const 9642: { 9642: _M_check(__pos, "basic_string::compare"); 9642: __n = _M_limit(__pos, __n); 9642: const size_type __osize = __str.size(); 9642: const size_type __len = std::min(__n, __osize); 9642: int __r = traits_type::compare(_M_data() + __pos, __str.data(), __len); 9642: if (!__r) 9642: __r = _S_compare(__n, __osize); 9642: return __r; 9642: } 9642: # 3315 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: int 9642: compare(size_type __pos1, size_type __n1, const basic_string& __str, 9642: size_type __pos2, size_type __n2 = npos) const 9642: { 9642: _M_check(__pos1, "basic_string::compare"); 9642: __str._M_check(__pos2, "basic_string::compare"); 9642: __n1 = _M_limit(__pos1, __n1); 9642: __n2 = __str._M_limit(__pos2, __n2); 9642: const size_type __len = std::min(__n1, __n2); 9642: int __r = traits_type::compare(_M_data() + __pos1, 9642: __str.data() + __pos2, __len); 9642: if (!__r) 9642: __r = _S_compare(__n1, __n2); 9642: return __r; 9642: } 9642: # 3346 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: int 9642: compare(const _CharT* __s) const noexcept 9642: { 9642: ; 9642: const size_type __size = this->size(); 9642: const size_type __osize = traits_type::length(__s); 9642: const size_type __len = std::min(__size, __osize); 9642: int __r = traits_type::compare(_M_data(), __s, __len); 9642: if (!__r) 9642: __r = _S_compare(__size, __osize); 9642: return __r; 9642: } 9642: # 3381 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: int 9642: compare(size_type __pos, size_type __n1, const _CharT* __s) const 9642: { 9642: ; 9642: _M_check(__pos, "basic_string::compare"); 9642: __n1 = _M_limit(__pos, __n1); 9642: const size_type __osize = traits_type::length(__s); 9642: const size_type __len = std::min(__n1, __osize); 9642: int __r = traits_type::compare(_M_data() + __pos, __s, __len); 9642: if (!__r) 9642: __r = _S_compare(__n1, __osize); 9642: return __r; 9642: } 9642: # 3420 "/usr/include/c++/13/bits/basic_string.h" 3 9642: [[__nodiscard__]] 9642: int 9642: compare(size_type __pos, size_type __n1, const _CharT* __s, 9642: size_type __n2) const 9642: { 9642: ; 9642: _M_check(__pos, "basic_string::compare"); 9642: __n1 = _M_limit(__pos, __n1); 9642: const size_type __len = std::min(__n1, __n2); 9642: int __r = traits_type::compare(_M_data() + __pos, __s, __len); 9642: if (!__r) 9642: __r = _S_compare(__n1, __n2); 9642: return __r; 9642: } 9642: # 3485 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template friend class basic_stringbuf; 9642: }; 9642: } 9642: 9642: } 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: namespace __cxx11 { 9642: template::value_type, 9642: typename _Allocator = allocator<_CharT>, 9642: typename = _RequireInputIter<_InputIterator>, 9642: typename = _RequireAllocator<_Allocator>> 9642: basic_string(_InputIterator, _InputIterator, _Allocator = _Allocator()) 9642: -> basic_string<_CharT, char_traits<_CharT>, _Allocator>; 9642: 9642: 9642: 9642: template, 9642: typename = _RequireAllocator<_Allocator>> 9642: basic_string(basic_string_view<_CharT, _Traits>, const _Allocator& = _Allocator()) 9642: -> basic_string<_CharT, _Traits, _Allocator>; 9642: 9642: template, 9642: typename = _RequireAllocator<_Allocator>> 9642: basic_string(basic_string_view<_CharT, _Traits>, 9642: typename basic_string<_CharT, _Traits, _Allocator>::size_type, 9642: typename basic_string<_CharT, _Traits, _Allocator>::size_type, 9642: const _Allocator& = _Allocator()) 9642: -> basic_string<_CharT, _Traits, _Allocator>; 9642: } 9642: 9642: 9642: template 9642: 9642: inline _Str 9642: __str_concat(typename _Str::value_type const* __lhs, 9642: typename _Str::size_type __lhs_len, 9642: typename _Str::value_type const* __rhs, 9642: typename _Str::size_type __rhs_len, 9642: typename _Str::allocator_type const& __a) 9642: { 9642: typedef typename _Str::allocator_type allocator_type; 9642: typedef __gnu_cxx::__alloc_traits _Alloc_traits; 9642: _Str __str(_Alloc_traits::_S_select_on_copy(__a)); 9642: __str.reserve(__lhs_len + __rhs_len); 9642: __str.append(__lhs, __lhs_len); 9642: __str.append(__rhs, __rhs_len); 9642: return __str; 9642: } 9642: # 3550 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline basic_string<_CharT, _Traits, _Alloc> 9642: operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 9642: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 9642: { 9642: typedef basic_string<_CharT, _Traits, _Alloc> _Str; 9642: return std::__str_concat<_Str>(__lhs.c_str(), __lhs.size(), 9642: __rhs.c_str(), __rhs.size(), 9642: __lhs.get_allocator()); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline basic_string<_CharT,_Traits,_Alloc> 9642: operator+(const _CharT* __lhs, 9642: const basic_string<_CharT,_Traits,_Alloc>& __rhs) 9642: { 9642: ; 9642: typedef basic_string<_CharT, _Traits, _Alloc> _Str; 9642: return std::__str_concat<_Str>(__lhs, _Traits::length(__lhs), 9642: __rhs.c_str(), __rhs.size(), 9642: __rhs.get_allocator()); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline basic_string<_CharT,_Traits,_Alloc> 9642: operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs) 9642: { 9642: typedef basic_string<_CharT, _Traits, _Alloc> _Str; 9642: return std::__str_concat<_Str>(__builtin_addressof(__lhs), 1, 9642: __rhs.c_str(), __rhs.size(), 9642: __rhs.get_allocator()); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline basic_string<_CharT, _Traits, _Alloc> 9642: operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 9642: const _CharT* __rhs) 9642: { 9642: ; 9642: typedef basic_string<_CharT, _Traits, _Alloc> _Str; 9642: return std::__str_concat<_Str>(__lhs.c_str(), __lhs.size(), 9642: __rhs, _Traits::length(__rhs), 9642: __lhs.get_allocator()); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline basic_string<_CharT, _Traits, _Alloc> 9642: operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs) 9642: { 9642: typedef basic_string<_CharT, _Traits, _Alloc> _Str; 9642: return std::__str_concat<_Str>(__lhs.c_str(), __lhs.size(), 9642: __builtin_addressof(__rhs), 1, 9642: __lhs.get_allocator()); 9642: } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline basic_string<_CharT, _Traits, _Alloc> 9642: operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, 9642: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 9642: { return std::move(__lhs.append(__rhs)); } 9642: 9642: template 9642: 9642: inline basic_string<_CharT, _Traits, _Alloc> 9642: operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 9642: basic_string<_CharT, _Traits, _Alloc>&& __rhs) 9642: { return std::move(__rhs.insert(0, __lhs)); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline basic_string<_CharT, _Traits, _Alloc> 9642: operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, 9642: basic_string<_CharT, _Traits, _Alloc>&& __rhs) 9642: { 9642: 9642: using _Alloc_traits = allocator_traits<_Alloc>; 9642: bool __use_rhs = false; 9642: if constexpr (typename _Alloc_traits::is_always_equal{}) 9642: __use_rhs = true; 9642: else if (__lhs.get_allocator() == __rhs.get_allocator()) 9642: __use_rhs = true; 9642: if (__use_rhs) 9642: 9642: { 9642: const auto __size = __lhs.size() + __rhs.size(); 9642: if (__size > __lhs.capacity() && __size <= __rhs.capacity()) 9642: return std::move(__rhs.insert(0, __lhs)); 9642: } 9642: return std::move(__lhs.append(__rhs)); 9642: } 9642: 9642: template 9642: [[__nodiscard__]] [[__nodiscard__]] 9642: inline basic_string<_CharT, _Traits, _Alloc> 9642: operator+(const _CharT* __lhs, 9642: basic_string<_CharT, _Traits, _Alloc>&& __rhs) 9642: { return std::move(__rhs.insert(0, __lhs)); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline basic_string<_CharT, _Traits, _Alloc> 9642: operator+(_CharT __lhs, 9642: basic_string<_CharT, _Traits, _Alloc>&& __rhs) 9642: { return std::move(__rhs.insert(0, 1, __lhs)); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline basic_string<_CharT, _Traits, _Alloc> 9642: operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, 9642: const _CharT* __rhs) 9642: { return std::move(__lhs.append(__rhs)); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline basic_string<_CharT, _Traits, _Alloc> 9642: operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, 9642: _CharT __rhs) 9642: { return std::move(__lhs.append(1, __rhs)); } 9642: # 3707 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 9642: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 9642: noexcept 9642: { 9642: return __lhs.size() == __rhs.size() 9642: && !_Traits::compare(__lhs.data(), __rhs.data(), __lhs.size()); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 9642: const _CharT* __rhs) 9642: { 9642: return __lhs.size() == _Traits::length(__rhs) 9642: && !_Traits::compare(__lhs.data(), __rhs, __lhs.size()); 9642: } 9642: # 3771 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator==(const _CharT* __lhs, 9642: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 9642: { return __rhs == __lhs; } 9642: # 3785 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 9642: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 9642: noexcept 9642: { return !(__lhs == __rhs); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator!=(const _CharT* __lhs, 9642: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 9642: { return !(__rhs == __lhs); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 9642: const _CharT* __rhs) 9642: { return !(__lhs == __rhs); } 9642: # 3826 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 9642: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 9642: noexcept 9642: { return __lhs.compare(__rhs) < 0; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 9642: const _CharT* __rhs) 9642: { return __lhs.compare(__rhs) < 0; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<(const _CharT* __lhs, 9642: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 9642: { return __rhs.compare(__lhs) > 0; } 9642: # 3867 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 9642: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 9642: noexcept 9642: { return __lhs.compare(__rhs) > 0; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 9642: const _CharT* __rhs) 9642: { return __lhs.compare(__rhs) > 0; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator>(const _CharT* __lhs, 9642: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 9642: { return __rhs.compare(__lhs) < 0; } 9642: # 3908 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 9642: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 9642: noexcept 9642: { return __lhs.compare(__rhs) <= 0; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 9642: const _CharT* __rhs) 9642: { return __lhs.compare(__rhs) <= 0; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<=(const _CharT* __lhs, 9642: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 9642: { return __rhs.compare(__lhs) >= 0; } 9642: # 3949 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 9642: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 9642: noexcept 9642: { return __lhs.compare(__rhs) >= 0; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 9642: const _CharT* __rhs) 9642: { return __lhs.compare(__rhs) >= 0; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator>=(const _CharT* __lhs, 9642: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 9642: { return __rhs.compare(__lhs) <= 0; } 9642: # 3991 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: 9642: inline void 9642: swap(basic_string<_CharT, _Traits, _Alloc>& __lhs, 9642: basic_string<_CharT, _Traits, _Alloc>& __rhs) 9642: noexcept(noexcept(__lhs.swap(__rhs))) 9642: { __lhs.swap(__rhs); } 9642: # 4012 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: operator>>(basic_istream<_CharT, _Traits>& __is, 9642: basic_string<_CharT, _Traits, _Alloc>& __str); 9642: 9642: template<> 9642: basic_istream& 9642: operator>>(basic_istream& __is, basic_string& __str); 9642: # 4030 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: inline basic_ostream<_CharT, _Traits>& 9642: operator<<(basic_ostream<_CharT, _Traits>& __os, 9642: const basic_string<_CharT, _Traits, _Alloc>& __str) 9642: { 9642: 9642: 9642: return __ostream_insert(__os, __str.data(), __str.size()); 9642: } 9642: # 4053 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: getline(basic_istream<_CharT, _Traits>& __is, 9642: basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim); 9642: # 4070 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: inline basic_istream<_CharT, _Traits>& 9642: getline(basic_istream<_CharT, _Traits>& __is, 9642: basic_string<_CharT, _Traits, _Alloc>& __str) 9642: { return std::getline(__is, __str, __is.widen('\n')); } 9642: 9642: 9642: 9642: template 9642: inline basic_istream<_CharT, _Traits>& 9642: getline(basic_istream<_CharT, _Traits>&& __is, 9642: basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim) 9642: { return std::getline(__is, __str, __delim); } 9642: 9642: 9642: template 9642: inline basic_istream<_CharT, _Traits>& 9642: getline(basic_istream<_CharT, _Traits>&& __is, 9642: basic_string<_CharT, _Traits, _Alloc>& __str) 9642: { return std::getline(__is, __str); } 9642: 9642: 9642: template<> 9642: basic_istream& 9642: getline(basic_istream& __in, basic_string& __str, 9642: char __delim); 9642: 9642: 9642: template<> 9642: basic_istream& 9642: getline(basic_istream& __in, basic_string& __str, 9642: wchar_t __delim); 9642: 9642: 9642: 9642: } 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/ext/string_conversions.h" 1 3 9642: # 32 "/usr/include/c++/13/ext/string_conversions.h" 3 9642: 9642: # 33 "/usr/include/c++/13/ext/string_conversions.h" 3 9642: # 43 "/usr/include/c++/13/ext/string_conversions.h" 3 9642: # 1 "/usr/include/c++/13/cstdlib" 1 3 9642: # 39 "/usr/include/c++/13/cstdlib" 3 9642: 9642: # 40 "/usr/include/c++/13/cstdlib" 3 9642: # 44 "/usr/include/c++/13/ext/string_conversions.h" 2 3 9642: # 1 "/usr/include/c++/13/cwchar" 1 3 9642: # 39 "/usr/include/c++/13/cwchar" 3 9642: 9642: # 40 "/usr/include/c++/13/cwchar" 3 9642: # 45 "/usr/include/c++/13/ext/string_conversions.h" 2 3 9642: # 1 "/usr/include/c++/13/cstdio" 1 3 9642: # 39 "/usr/include/c++/13/cstdio" 3 9642: 9642: # 40 "/usr/include/c++/13/cstdio" 3 9642: 9642: 9642: # 1 "/usr/include/stdio.h" 1 3 4 9642: # 28 "/usr/include/stdio.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 9642: # 29 "/usr/include/stdio.h" 2 3 4 9642: 9642: extern "C" { 9642: 9642: 9642: 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 35 "/usr/include/stdio.h" 2 3 4 9642: 9642: 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stdarg.h" 1 3 4 9642: # 38 "/usr/include/stdio.h" 2 3 4 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/__fpos_t.h" 1 3 4 9642: # 10 "/usr/include/arm-linux-gnueabihf/bits/types/__fpos_t.h" 3 4 9642: typedef struct _G_fpos_t 9642: { 9642: __off_t __pos; 9642: __mbstate_t __state; 9642: } __fpos_t; 9642: # 41 "/usr/include/stdio.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/__fpos64_t.h" 1 3 4 9642: # 10 "/usr/include/arm-linux-gnueabihf/bits/types/__fpos64_t.h" 3 4 9642: typedef struct _G_fpos64_t 9642: { 9642: __off64_t __pos; 9642: __mbstate_t __state; 9642: } __fpos64_t; 9642: # 42 "/usr/include/stdio.h" 2 3 4 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_FILE.h" 1 3 4 9642: # 35 "/usr/include/arm-linux-gnueabihf/bits/types/struct_FILE.h" 3 4 9642: struct _IO_FILE; 9642: struct _IO_marker; 9642: struct _IO_codecvt; 9642: struct _IO_wide_data; 9642: 9642: 9642: 9642: 9642: typedef void _IO_lock_t; 9642: 9642: 9642: 9642: 9642: 9642: struct _IO_FILE 9642: { 9642: int _flags; 9642: 9642: 9642: char *_IO_read_ptr; 9642: char *_IO_read_end; 9642: char *_IO_read_base; 9642: char *_IO_write_base; 9642: char *_IO_write_ptr; 9642: char *_IO_write_end; 9642: char *_IO_buf_base; 9642: char *_IO_buf_end; 9642: 9642: 9642: char *_IO_save_base; 9642: char *_IO_backup_base; 9642: char *_IO_save_end; 9642: 9642: struct _IO_marker *_markers; 9642: 9642: struct _IO_FILE *_chain; 9642: 9642: int _fileno; 9642: int _flags2; 9642: __off_t _old_offset; 9642: 9642: 9642: unsigned short _cur_column; 9642: signed char _vtable_offset; 9642: char _shortbuf[1]; 9642: 9642: _IO_lock_t *_lock; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: __off64_t _offset; 9642: 9642: struct _IO_codecvt *_codecvt; 9642: struct _IO_wide_data *_wide_data; 9642: struct _IO_FILE *_freeres_list; 9642: void *_freeres_buf; 9642: size_t __pad5; 9642: int _mode; 9642: 9642: char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)]; 9642: }; 9642: # 45 "/usr/include/stdio.h" 2 3 4 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/cookie_io_functions_t.h" 1 3 4 9642: # 27 "/usr/include/arm-linux-gnueabihf/bits/types/cookie_io_functions_t.h" 3 4 9642: typedef __ssize_t cookie_read_function_t (void *__cookie, char *__buf, 9642: size_t __nbytes); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef __ssize_t cookie_write_function_t (void *__cookie, const char *__buf, 9642: size_t __nbytes); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef int cookie_seek_function_t (void *__cookie, __off64_t *__pos, int __w); 9642: 9642: 9642: typedef int cookie_close_function_t (void *__cookie); 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef struct _IO_cookie_io_functions_t 9642: { 9642: cookie_read_function_t *read; 9642: cookie_write_function_t *write; 9642: cookie_seek_function_t *seek; 9642: cookie_close_function_t *close; 9642: } cookie_io_functions_t; 9642: # 48 "/usr/include/stdio.h" 2 3 4 9642: # 87 "/usr/include/stdio.h" 3 4 9642: typedef __fpos64_t fpos_t; 9642: 9642: 9642: typedef __fpos64_t fpos64_t; 9642: # 129 "/usr/include/stdio.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdio_lim.h" 1 3 4 9642: # 130 "/usr/include/stdio.h" 2 3 4 9642: # 149 "/usr/include/stdio.h" 3 4 9642: extern FILE *stdin; 9642: extern FILE *stdout; 9642: extern FILE *stderr; 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int remove (const char *__filename) noexcept (true); 9642: 9642: extern int rename (const char *__old, const char *__new) noexcept (true); 9642: 9642: 9642: 9642: extern int renameat (int __oldfd, const char *__old, int __newfd, 9642: const char *__new) noexcept (true); 9642: # 176 "/usr/include/stdio.h" 3 4 9642: extern int renameat2 (int __oldfd, const char *__old, int __newfd, 9642: const char *__new, unsigned int __flags) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int fclose (FILE *__stream) __attribute__ ((__nonnull__ (1))); 9642: # 198 "/usr/include/stdio.h" 3 4 9642: extern FILE *tmpfile (void) __asm__ ("" "tmpfile64") 9642: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern FILE *tmpfile64 (void) 9642: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: extern char *tmpnam (char[20]) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern char *tmpnam_r (char __s[20]) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: # 228 "/usr/include/stdio.h" 3 4 9642: extern char *tempnam (const char *__dir, const char *__pfx) 9642: noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__malloc__ (__builtin_free, 1))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int fflush (FILE *__stream); 9642: # 245 "/usr/include/stdio.h" 3 4 9642: extern int fflush_unlocked (FILE *__stream); 9642: # 255 "/usr/include/stdio.h" 3 4 9642: extern int fcloseall (void); 9642: # 276 "/usr/include/stdio.h" 3 4 9642: extern FILE *fopen (const char *__restrict __filename, const char *__restrict __modes) __asm__ ("" "fopen64") 9642: 9642: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__)); 9642: extern FILE *freopen (const char *__restrict __filename, const char *__restrict __modes, FILE *__restrict __stream) __asm__ ("" "freopen64") 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (3))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern FILE *fopen64 (const char *__restrict __filename, 9642: const char *__restrict __modes) 9642: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__)); 9642: extern FILE *freopen64 (const char *__restrict __filename, 9642: const char *__restrict __modes, 9642: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (3))); 9642: 9642: 9642: 9642: 9642: extern FILE *fdopen (int __fd, const char *__modes) noexcept (true) 9642: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: extern FILE *fopencookie (void *__restrict __magic_cookie, 9642: const char *__restrict __modes, 9642: cookie_io_functions_t __io_funcs) noexcept (true) 9642: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern FILE *fmemopen (void *__s, size_t __len, const char *__modes) 9642: noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) noexcept (true) 9642: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) noexcept (true) 9642: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))); 9642: 9642: 9642: 9642: 9642: 9642: extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) noexcept (true) 9642: __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf, 9642: int __modes, size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf, 9642: size_t __size) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern void setlinebuf (FILE *__stream) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int fprintf (FILE *__restrict __stream, 9642: const char *__restrict __format, ...) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: extern int printf (const char *__restrict __format, ...); 9642: 9642: extern int sprintf (char *__restrict __s, 9642: const char *__restrict __format, ...) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern int vfprintf (FILE *__restrict __s, const char *__restrict __format, 9642: __gnuc_va_list __arg) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg); 9642: 9642: extern int vsprintf (char *__restrict __s, const char *__restrict __format, 9642: __gnuc_va_list __arg) noexcept (true); 9642: 9642: 9642: 9642: extern int snprintf (char *__restrict __s, size_t __maxlen, 9642: const char *__restrict __format, ...) 9642: noexcept (true) __attribute__ ((__format__ (__printf__, 3, 4))); 9642: 9642: extern int vsnprintf (char *__restrict __s, size_t __maxlen, 9642: const char *__restrict __format, __gnuc_va_list __arg) 9642: noexcept (true) __attribute__ ((__format__ (__printf__, 3, 0))); 9642: 9642: 9642: 9642: 9642: 9642: extern int vasprintf (char **__restrict __ptr, const char *__restrict __f, 9642: __gnuc_va_list __arg) 9642: noexcept (true) __attribute__ ((__format__ (__printf__, 2, 0))) __attribute__ ((__warn_unused_result__)); 9642: extern int __asprintf (char **__restrict __ptr, 9642: const char *__restrict __fmt, ...) 9642: noexcept (true) __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__)); 9642: extern int asprintf (char **__restrict __ptr, 9642: const char *__restrict __fmt, ...) 9642: noexcept (true) __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern int vdprintf (int __fd, const char *__restrict __fmt, 9642: __gnuc_va_list __arg) 9642: __attribute__ ((__format__ (__printf__, 2, 0))); 9642: extern int dprintf (int __fd, const char *__restrict __fmt, ...) 9642: __attribute__ ((__format__ (__printf__, 2, 3))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int fscanf (FILE *__restrict __stream, 9642: const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: extern int scanf (const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__)); 9642: 9642: extern int sscanf (const char *__restrict __s, 9642: const char *__restrict __format, ...) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/floatn.h" 1 3 4 9642: # 438 "/usr/include/stdio.h" 2 3 4 9642: 9642: 9642: 9642: 9642: extern int fscanf (FILE *__restrict __stream, const char *__restrict __format, ...) __asm__ ("" "__isoc23_fscanf") 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 9642: extern int scanf (const char *__restrict __format, ...) __asm__ ("" "__isoc23_scanf") 9642: __attribute__ ((__warn_unused_result__)); 9642: extern int sscanf (const char *__restrict __s, const char *__restrict __format, ...) noexcept (true) __asm__ ("" "__isoc23_sscanf") 9642: 9642: ; 9642: # 490 "/usr/include/stdio.h" 3 4 9642: extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, 9642: __gnuc_va_list __arg) 9642: __attribute__ ((__format__ (__scanf__, 2, 0))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) 9642: __attribute__ ((__format__ (__scanf__, 1, 0))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: extern int vsscanf (const char *__restrict __s, 9642: const char *__restrict __format, __gnuc_va_list __arg) 9642: noexcept (true) __attribute__ ((__format__ (__scanf__, 2, 0))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc23_vfscanf") 9642: 9642: 9642: 9642: __attribute__ ((__format__ (__scanf__, 2, 0))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 9642: extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc23_vscanf") 9642: 9642: __attribute__ ((__format__ (__scanf__, 1, 0))) __attribute__ ((__warn_unused_result__)); 9642: extern int vsscanf (const char *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) noexcept (true) __asm__ ("" "__isoc23_vsscanf") 9642: 9642: 9642: 9642: __attribute__ ((__format__ (__scanf__, 2, 0))); 9642: # 575 "/usr/include/stdio.h" 3 4 9642: extern int fgetc (FILE *__stream) __attribute__ ((__nonnull__ (1))); 9642: extern int getc (FILE *__stream) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: extern int getchar (void); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int getc_unlocked (FILE *__stream) __attribute__ ((__nonnull__ (1))); 9642: extern int getchar_unlocked (void); 9642: # 600 "/usr/include/stdio.h" 3 4 9642: extern int fgetc_unlocked (FILE *__stream) __attribute__ ((__nonnull__ (1))); 9642: # 611 "/usr/include/stdio.h" 3 4 9642: extern int fputc (int __c, FILE *__stream) __attribute__ ((__nonnull__ (2))); 9642: extern int putc (int __c, FILE *__stream) __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: 9642: 9642: 9642: extern int putchar (int __c); 9642: # 627 "/usr/include/stdio.h" 3 4 9642: extern int fputc_unlocked (int __c, FILE *__stream) __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int putc_unlocked (int __c, FILE *__stream) __attribute__ ((__nonnull__ (2))); 9642: extern int putchar_unlocked (int __c); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int getw (FILE *__stream) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int putw (int __w, FILE *__stream) __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream) 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))) __attribute__ ((__nonnull__ (3))); 9642: # 677 "/usr/include/stdio.h" 3 4 9642: extern char *fgets_unlocked (char *__restrict __s, int __n, 9642: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)) 9642: __attribute__ ((__access__ (__write_only__, 1, 2))) __attribute__ ((__nonnull__ (3))); 9642: # 694 "/usr/include/stdio.h" 3 4 9642: extern __ssize_t __getdelim (char **__restrict __lineptr, 9642: size_t *__restrict __n, int __delimiter, 9642: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (4))); 9642: extern __ssize_t getdelim (char **__restrict __lineptr, 9642: size_t *__restrict __n, int __delimiter, 9642: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (4))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern __ssize_t getline (char **__restrict __lineptr, 9642: size_t *__restrict __n, 9642: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (3))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int fputs (const char *__restrict __s, FILE *__restrict __stream) 9642: __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: 9642: 9642: 9642: extern int puts (const char *__s); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int ungetc (int __c, FILE *__stream) __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern size_t fread (void *__restrict __ptr, size_t __size, 9642: size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)) 9642: __attribute__ ((__nonnull__ (4))); 9642: 9642: 9642: 9642: 9642: extern size_t fwrite (const void *__restrict __ptr, size_t __size, 9642: size_t __n, FILE *__restrict __s) __attribute__ ((__nonnull__ (4))); 9642: # 755 "/usr/include/stdio.h" 3 4 9642: extern int fputs_unlocked (const char *__restrict __s, 9642: FILE *__restrict __stream) __attribute__ ((__nonnull__ (2))); 9642: # 766 "/usr/include/stdio.h" 3 4 9642: extern size_t fread_unlocked (void *__restrict __ptr, size_t __size, 9642: size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)) 9642: __attribute__ ((__nonnull__ (4))); 9642: extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size, 9642: size_t __n, FILE *__restrict __stream) 9642: __attribute__ ((__nonnull__ (4))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int fseek (FILE *__stream, long int __off, int __whence) 9642: __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: extern long int ftell (FILE *__stream) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: extern void rewind (FILE *__stream) __attribute__ ((__nonnull__ (1))); 9642: # 812 "/usr/include/stdio.h" 3 4 9642: extern int fseeko (FILE *__stream, __off64_t __off, int __whence) __asm__ ("" "fseeko64") 9642: 9642: __attribute__ ((__nonnull__ (1))); 9642: extern __off64_t ftello (FILE *__stream) __asm__ ("" "ftello64") 9642: __attribute__ ((__nonnull__ (1))); 9642: # 838 "/usr/include/stdio.h" 3 4 9642: extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos) __asm__ ("" "fgetpos64") 9642: 9642: __attribute__ ((__nonnull__ (1))); 9642: extern int fsetpos (FILE *__stream, const fpos_t *__pos) __asm__ ("" "fsetpos64") 9642: 9642: __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence) 9642: __attribute__ ((__nonnull__ (1))); 9642: extern __off64_t ftello64 (FILE *__stream) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 9642: extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos) 9642: __attribute__ ((__nonnull__ (1))); 9642: extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern void clearerr (FILE *__stream) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: extern int feof (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 9642: 9642: extern int ferror (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern void clearerr_unlocked (FILE *__stream) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: extern int feof_unlocked (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 9642: extern int ferror_unlocked (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern void perror (const char *__s) __attribute__ ((__cold__)); 9642: 9642: 9642: 9642: 9642: extern int fileno (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: extern int fileno_unlocked (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 9642: # 897 "/usr/include/stdio.h" 3 4 9642: extern int pclose (FILE *__stream) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: extern FILE *popen (const char *__command, const char *__modes) 9642: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (pclose, 1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern char *ctermid (char *__s) noexcept (true) 9642: __attribute__ ((__access__ (__write_only__, 1))); 9642: 9642: 9642: 9642: 9642: 9642: extern char *cuserid (char *__s) 9642: __attribute__ ((__access__ (__write_only__, 1))); 9642: 9642: 9642: 9642: 9642: struct obstack; 9642: 9642: 9642: extern int obstack_printf (struct obstack *__restrict __obstack, 9642: const char *__restrict __format, ...) 9642: noexcept (true) __attribute__ ((__format__ (__printf__, 2, 3))); 9642: extern int obstack_vprintf (struct obstack *__restrict __obstack, 9642: const char *__restrict __format, 9642: __gnuc_va_list __args) 9642: noexcept (true) __attribute__ ((__format__ (__printf__, 2, 0))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern void flockfile (FILE *__stream) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern int ftrylockfile (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern void funlockfile (FILE *__stream) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: # 959 "/usr/include/stdio.h" 3 4 9642: extern int __uflow (FILE *); 9642: extern int __overflow (FILE *, int); 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdio2-decl.h" 1 3 4 9642: # 26 "/usr/include/arm-linux-gnueabihf/bits/stdio2-decl.h" 3 4 9642: extern int __sprintf_chk (char *__restrict __s, int __flag, size_t __slen, 9642: const char *__restrict __format, ...) noexcept (true) 9642: __attribute__ ((__access__ (__write_only__, 1, 3))); 9642: extern int __vsprintf_chk (char *__restrict __s, int __flag, size_t __slen, 9642: const char *__restrict __format, 9642: __gnuc_va_list __ap) noexcept (true) 9642: __attribute__ ((__access__ (__write_only__, 1, 3))); 9642: 9642: 9642: 9642: extern int __snprintf_chk (char *__restrict __s, size_t __n, int __flag, 9642: size_t __slen, const char *__restrict __format, 9642: ...) noexcept (true) 9642: __attribute__ ((__access__ (__write_only__, 1, 2))); 9642: extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag, 9642: size_t __slen, const char *__restrict __format, 9642: __gnuc_va_list __ap) noexcept (true) 9642: __attribute__ ((__access__ (__write_only__, 1, 2))); 9642: 9642: 9642: 9642: 9642: 9642: extern int __fprintf_chk (FILE *__restrict __stream, int __flag, 9642: const char *__restrict __format, ...) 9642: __attribute__ ((__nonnull__ (1))); 9642: extern int __printf_chk (int __flag, const char *__restrict __format, ...); 9642: extern int __vfprintf_chk (FILE *__restrict __stream, int __flag, 9642: const char *__restrict __format, 9642: __gnuc_va_list __ap) __attribute__ ((__nonnull__ (1))); 9642: extern int __vprintf_chk (int __flag, const char *__restrict __format, 9642: __gnuc_va_list __ap); 9642: 9642: 9642: extern int __dprintf_chk (int __fd, int __flag, const char *__restrict __fmt, 9642: ...) __attribute__ ((__format__ (__printf__, 3, 4))); 9642: extern int __vdprintf_chk (int __fd, int __flag, 9642: const char *__restrict __fmt, __gnuc_va_list __arg) 9642: __attribute__ ((__format__ (__printf__, 3, 0))); 9642: 9642: 9642: 9642: 9642: extern int __asprintf_chk (char **__restrict __ptr, int __flag, 9642: const char *__restrict __fmt, ...) 9642: noexcept (true) __attribute__ ((__format__ (__printf__, 3, 4))) __attribute__ ((__warn_unused_result__)); 9642: extern int __vasprintf_chk (char **__restrict __ptr, int __flag, 9642: const char *__restrict __fmt, __gnuc_va_list __arg) 9642: noexcept (true) __attribute__ ((__format__ (__printf__, 3, 0))) __attribute__ ((__warn_unused_result__)); 9642: extern int __obstack_printf_chk (struct obstack *__restrict __obstack, 9642: int __flag, const char *__restrict __format, 9642: ...) 9642: noexcept (true) __attribute__ ((__format__ (__printf__, 3, 4))); 9642: extern int __obstack_vprintf_chk (struct obstack *__restrict __obstack, 9642: int __flag, 9642: const char *__restrict __format, 9642: __gnuc_va_list __args) 9642: noexcept (true) __attribute__ ((__format__ (__printf__, 3, 0))); 9642: # 96 "/usr/include/arm-linux-gnueabihf/bits/stdio2-decl.h" 3 4 9642: extern char *__fgets_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets") 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))); 9642: extern char *__fgets_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_chk") 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets called with bigger size than length " "of destination buffer"))) 9642: ; 9642: 9642: extern char *__fgets_chk (char *__restrict __s, size_t __size, int __n, 9642: FILE *__restrict __stream) 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__nonnull__ (4))); 9642: 9642: extern size_t __fread_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread") 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)); 9642: extern size_t __fread_chk_warn (void *__restrict __ptr, size_t __ptrlen, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "__fread_chk") 9642: 9642: 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread called with bigger size * nmemb than length " "of destination buffer"))) 9642: ; 9642: 9642: extern size_t __fread_chk (void *__restrict __ptr, size_t __ptrlen, 9642: size_t __size, size_t __n, 9642: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (5))); 9642: 9642: 9642: extern char *__fgets_unlocked_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets_unlocked") 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))); 9642: extern char *__fgets_unlocked_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_unlocked_chk") 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets_unlocked called with bigger size than length " "of destination buffer"))) 9642: ; 9642: 9642: 9642: extern char *__fgets_unlocked_chk (char *__restrict __s, size_t __size, 9642: int __n, FILE *__restrict __stream) 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__nonnull__ (4))); 9642: 9642: 9642: 9642: 9642: extern size_t __fread_unlocked_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread_unlocked") 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)); 9642: extern size_t __fread_unlocked_chk_warn (void *__restrict __ptr, size_t __ptrlen, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "__fread_unlocked_chk") 9642: 9642: 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread_unlocked called with bigger size * nmemb than " "length of destination buffer"))) 9642: ; 9642: 9642: extern size_t __fread_unlocked_chk (void *__restrict __ptr, size_t __ptrlen, 9642: size_t __size, size_t __n, 9642: FILE *__restrict __stream) 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (5))); 9642: # 965 "/usr/include/stdio.h" 2 3 4 9642: # 976 "/usr/include/stdio.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdio.h" 1 3 4 9642: # 46 "/usr/include/arm-linux-gnueabihf/bits/stdio.h" 3 4 9642: extern __inline __attribute__ ((__gnu_inline__)) int 9642: getchar (void) 9642: { 9642: return getc (stdin); 9642: } 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__gnu_inline__)) int 9642: fgetc_unlocked (FILE *__fp) 9642: { 9642: return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__gnu_inline__)) int 9642: getc_unlocked (FILE *__fp) 9642: { 9642: return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++); 9642: } 9642: 9642: 9642: extern __inline __attribute__ ((__gnu_inline__)) int 9642: getchar_unlocked (void) 9642: { 9642: return (__builtin_expect (((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end), 0) ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++); 9642: } 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__gnu_inline__)) int 9642: putchar (int __c) 9642: { 9642: return putc (__c, stdout); 9642: } 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__gnu_inline__)) int 9642: fputc_unlocked (int __c, FILE *__stream) 9642: { 9642: return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c))); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__gnu_inline__)) int 9642: putc_unlocked (int __c, FILE *__stream) 9642: { 9642: return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c))); 9642: } 9642: 9642: 9642: extern __inline __attribute__ ((__gnu_inline__)) int 9642: putchar_unlocked (int __c) 9642: { 9642: return (__builtin_expect (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end), 0) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c))); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__gnu_inline__)) __ssize_t 9642: getline (char **__lineptr, size_t *__n, FILE *__stream) 9642: { 9642: return __getdelim (__lineptr, __n, '\n', __stream); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__gnu_inline__)) int 9642: __attribute__ ((__leaf__)) feof_unlocked (FILE *__stream) noexcept (true) 9642: { 9642: return (((__stream)->_flags & 0x0010) != 0); 9642: } 9642: 9642: 9642: extern __inline __attribute__ ((__gnu_inline__)) int 9642: __attribute__ ((__leaf__)) ferror_unlocked (FILE *__stream) noexcept (true) 9642: { 9642: return (((__stream)->_flags & 0x0020) != 0); 9642: } 9642: # 977 "/usr/include/stdio.h" 2 3 4 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdio2.h" 1 3 4 9642: # 27 "/usr/include/arm-linux-gnueabihf/bits/stdio2.h" 3 4 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: __attribute__ ((__leaf__)) sprintf (char *__restrict __s, const char *__restrict __fmt, ...) noexcept (true) 9642: { 9642: return __builtin___sprintf_chk (__s, 2 - 1, 9642: __builtin_object_size (__s, 2 > 1), __fmt, 9642: __builtin_va_arg_pack ()); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: __attribute__ ((__leaf__)) vsprintf (char *__restrict __s, const char *__restrict __fmt, __gnuc_va_list __ap) noexcept (true) 9642: 9642: { 9642: return __builtin___vsprintf_chk (__s, 2 - 1, 9642: __builtin_object_size (__s, 2 > 1), __fmt, __ap); 9642: } 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: __attribute__ ((__leaf__)) snprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, ...) noexcept (true) 9642: 9642: { 9642: return __builtin___snprintf_chk (__s, __n, 2 - 1, 9642: __builtin_object_size (__s, 2 > 1), __fmt, 9642: __builtin_va_arg_pack ()); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: __attribute__ ((__leaf__)) vsnprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, __gnuc_va_list __ap) noexcept (true) 9642: 9642: { 9642: return __builtin___vsnprintf_chk (__s, __n, 2 - 1, 9642: __builtin_object_size (__s, 2 > 1), __fmt, __ap); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__nonnull__ (1))) int 9642: fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...) 9642: { 9642: return __fprintf_chk (__stream, 2 - 1, __fmt, 9642: __builtin_va_arg_pack ()); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: printf (const char *__restrict __fmt, ...) 9642: { 9642: return __printf_chk (2 - 1, __fmt, __builtin_va_arg_pack ()); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: vprintf (const char *__restrict __fmt, __gnuc_va_list __ap) 9642: { 9642: 9642: return __vfprintf_chk (stdout, 2 - 1, __fmt, __ap); 9642: 9642: 9642: 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__nonnull__ (1))) int 9642: vfprintf (FILE *__restrict __stream, 9642: const char *__restrict __fmt, __gnuc_va_list __ap) 9642: { 9642: return __vfprintf_chk (__stream, 2 - 1, __fmt, __ap); 9642: } 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: dprintf (int __fd, const char *__restrict __fmt, ...) 9642: { 9642: return __dprintf_chk (__fd, 2 - 1, __fmt, 9642: __builtin_va_arg_pack ()); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: vdprintf (int __fd, const char *__restrict __fmt, __gnuc_va_list __ap) 9642: { 9642: return __vdprintf_chk (__fd, 2 - 1, __fmt, __ap); 9642: } 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: __attribute__ ((__leaf__)) asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...) noexcept (true) 9642: { 9642: return __asprintf_chk (__ptr, 2 - 1, __fmt, 9642: __builtin_va_arg_pack ()); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: __attribute__ ((__leaf__)) __asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...) noexcept (true) 9642: 9642: { 9642: return __asprintf_chk (__ptr, 2 - 1, __fmt, 9642: __builtin_va_arg_pack ()); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: __attribute__ ((__leaf__)) obstack_printf (struct obstack *__restrict __obstack, const char *__restrict __fmt, ...) noexcept (true) 9642: 9642: { 9642: return __obstack_printf_chk (__obstack, 2 - 1, __fmt, 9642: __builtin_va_arg_pack ()); 9642: } 9642: # 165 "/usr/include/arm-linux-gnueabihf/bits/stdio2.h" 3 4 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: __attribute__ ((__leaf__)) vasprintf (char **__restrict __ptr, const char *__restrict __fmt, __gnuc_va_list __ap) noexcept (true) 9642: 9642: { 9642: return __vasprintf_chk (__ptr, 2 - 1, __fmt, __ap); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: __attribute__ ((__leaf__)) obstack_vprintf (struct obstack *__restrict __obstack, const char *__restrict __fmt, __gnuc_va_list __ap) noexcept (true) 9642: 9642: { 9642: return __obstack_vprintf_chk (__obstack, 2 - 1, __fmt, 9642: __ap); 9642: } 9642: # 194 "/usr/include/arm-linux-gnueabihf/bits/stdio2.h" 3 4 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))) 9642: __attribute__ ((__nonnull__ (3))) char * 9642: fgets (char *__restrict __s, int __n, FILE *__restrict __stream) 9642: { 9642: size_t sz = __builtin_object_size (__s, 2 > 1); 9642: if (((__builtin_constant_p (sz) && (sz) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((sz)) / ((sizeof (char))))) && (((unsigned int) (__n)) <= ((sz)) / ((sizeof (char))))))) 9642: return __fgets_alias (__s, __n, __stream); 9642: if ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (sz) / (sizeof (char)))) && !(((unsigned int) (__n)) <= (sz) / (sizeof (char))))) 9642: return __fgets_chk_warn (__s, sz, __n, __stream); 9642: return __fgets_chk (__s, sz, __n, __stream); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (4))) size_t 9642: fread (void *__restrict __ptr, size_t __size, size_t __n, 9642: FILE *__restrict __stream) 9642: { 9642: size_t sz = __builtin_object_size (__ptr, 0); 9642: if (((__builtin_constant_p (sz) && (sz) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((sz)) / ((__size)))) && (((unsigned int) (__n)) <= ((sz)) / ((__size)))))) 9642: return __fread_alias (__ptr, __size, __n, __stream); 9642: if ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (sz) / (__size))) && !(((unsigned int) (__n)) <= (sz) / (__size)))) 9642: return __fread_chk_warn (__ptr, sz, __size, __n, __stream); 9642: return __fread_chk (__ptr, sz, __size, __n, __stream); 9642: } 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))) 9642: __attribute__ ((__nonnull__ (3))) char * 9642: fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream) 9642: { 9642: size_t sz = __builtin_object_size (__s, 2 > 1); 9642: if (((__builtin_constant_p (sz) && (sz) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((sz)) / ((sizeof (char))))) && (((unsigned int) (__n)) <= ((sz)) / ((sizeof (char))))))) 9642: return __fgets_unlocked_alias (__s, __n, __stream); 9642: if ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (sz) / (sizeof (char)))) && !(((unsigned int) (__n)) <= (sz) / (sizeof (char))))) 9642: return __fgets_unlocked_chk_warn (__s, sz, __n, __stream); 9642: return __fgets_unlocked_chk (__s, sz, __n, __stream); 9642: } 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (4))) size_t 9642: fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n, 9642: FILE *__restrict __stream) 9642: { 9642: size_t sz = __builtin_object_size (__ptr, 0); 9642: if (((__builtin_constant_p (sz) && (sz) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((sz)) / ((__size)))) && (((unsigned int) (__n)) <= ((sz)) / ((__size)))))) 9642: { 9642: 9642: if (__builtin_constant_p (__size) 9642: && __builtin_constant_p (__n) 9642: && (__size | __n) < (((size_t) 1) << (8 * sizeof (size_t) / 2)) 9642: && __size * __n <= 8) 9642: { 9642: size_t __cnt = __size * __n; 9642: char *__cptr = (char *) __ptr; 9642: if (__cnt == 0) 9642: return 0; 9642: 9642: for (; __cnt > 0; --__cnt) 9642: { 9642: int __c = getc_unlocked (__stream); 9642: if (__c == (-1)) 9642: break; 9642: *__cptr++ = __c; 9642: } 9642: return (__cptr - (char *) __ptr) / __size; 9642: } 9642: 9642: return __fread_unlocked_alias (__ptr, __size, __n, __stream); 9642: } 9642: if ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (sz) / (__size))) && !(((unsigned int) (__n)) <= (sz) / (__size)))) 9642: return __fread_unlocked_chk_warn (__ptr, sz, __size, __n, __stream); 9642: return __fread_unlocked_chk (__ptr, sz, __size, __n, __stream); 9642: 9642: } 9642: # 981 "/usr/include/stdio.h" 2 3 4 9642: 9642: 9642: } 9642: # 43 "/usr/include/c++/13/cstdio" 2 3 9642: # 96 "/usr/include/c++/13/cstdio" 3 9642: namespace std 9642: { 9642: using ::FILE; 9642: using ::fpos_t; 9642: 9642: using ::clearerr; 9642: using ::fclose; 9642: using ::feof; 9642: using ::ferror; 9642: using ::fflush; 9642: using ::fgetc; 9642: using ::fgetpos; 9642: using ::fgets; 9642: using ::fopen; 9642: using ::fprintf; 9642: using ::fputc; 9642: using ::fputs; 9642: using ::fread; 9642: using ::freopen; 9642: using ::fscanf; 9642: using ::fseek; 9642: using ::fsetpos; 9642: using ::ftell; 9642: using ::fwrite; 9642: using ::getc; 9642: using ::getchar; 9642: 9642: 9642: 9642: 9642: using ::perror; 9642: using ::printf; 9642: using ::putc; 9642: using ::putchar; 9642: using ::puts; 9642: using ::remove; 9642: using ::rename; 9642: using ::rewind; 9642: using ::scanf; 9642: using ::setbuf; 9642: using ::setvbuf; 9642: using ::sprintf; 9642: using ::sscanf; 9642: using ::tmpfile; 9642: 9642: using ::tmpnam; 9642: 9642: using ::ungetc; 9642: using ::vfprintf; 9642: using ::vprintf; 9642: using ::vsprintf; 9642: } 9642: # 157 "/usr/include/c++/13/cstdio" 3 9642: namespace __gnu_cxx 9642: { 9642: # 175 "/usr/include/c++/13/cstdio" 3 9642: using ::snprintf; 9642: using ::vfscanf; 9642: using ::vscanf; 9642: using ::vsnprintf; 9642: using ::vsscanf; 9642: 9642: } 9642: 9642: namespace std 9642: { 9642: using ::__gnu_cxx::snprintf; 9642: using ::__gnu_cxx::vfscanf; 9642: using ::__gnu_cxx::vscanf; 9642: using ::__gnu_cxx::vsnprintf; 9642: using ::__gnu_cxx::vsscanf; 9642: } 9642: # 46 "/usr/include/c++/13/ext/string_conversions.h" 2 3 9642: # 1 "/usr/include/c++/13/cerrno" 1 3 9642: # 39 "/usr/include/c++/13/cerrno" 3 9642: 9642: # 40 "/usr/include/c++/13/cerrno" 3 9642: 9642: 9642: # 1 "/usr/include/errno.h" 1 3 4 9642: # 28 "/usr/include/errno.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/errno.h" 1 3 4 9642: # 26 "/usr/include/arm-linux-gnueabihf/bits/errno.h" 3 4 9642: # 1 "/usr/include/linux/errno.h" 1 3 4 9642: # 1 "/usr/lib/linux/uapi/arm/asm/errno.h" 1 3 4 9642: # 1 "/usr/include/asm-generic/errno.h" 1 3 4 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/asm-generic/errno-base.h" 1 3 4 9642: # 6 "/usr/include/asm-generic/errno.h" 2 3 4 9642: # 2 "/usr/lib/linux/uapi/arm/asm/errno.h" 2 3 4 9642: # 2 "/usr/include/linux/errno.h" 2 3 4 9642: # 27 "/usr/include/arm-linux-gnueabihf/bits/errno.h" 2 3 4 9642: # 29 "/usr/include/errno.h" 2 3 4 9642: 9642: 9642: 9642: 9642: 9642: extern "C" { 9642: 9642: 9642: extern int *__errno_location (void) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern char *program_invocation_name; 9642: extern char *program_invocation_short_name; 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/error_t.h" 1 3 4 9642: # 22 "/usr/include/arm-linux-gnueabihf/bits/types/error_t.h" 3 4 9642: typedef int error_t; 9642: # 49 "/usr/include/errno.h" 2 3 4 9642: 9642: 9642: 9642: } 9642: # 43 "/usr/include/c++/13/cerrno" 2 3 9642: # 47 "/usr/include/c++/13/ext/string_conversions.h" 2 3 9642: 9642: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: template 9642: _Ret 9642: __stoa(_TRet (*__convf) (const _CharT*, _CharT**, _Base...), 9642: const char* __name, const _CharT* __str, std::size_t* __idx, 9642: _Base... __base) 9642: { 9642: _Ret __ret; 9642: 9642: _CharT* __endptr; 9642: 9642: struct _Save_errno { 9642: _Save_errno() : _M_errno((*__errno_location ())) { (*__errno_location ()) = 0; } 9642: ~_Save_errno() { if ((*__errno_location ()) == 0) (*__errno_location ()) = _M_errno; } 9642: int _M_errno; 9642: } const __save_errno; 9642: 9642: struct _Range_chk { 9642: static bool 9642: _S_chk(_TRet, std::false_type) { return false; } 9642: 9642: static bool 9642: _S_chk(_TRet __val, std::true_type) 9642: { 9642: return __val < _TRet(__numeric_traits::__min) 9642: || __val > _TRet(__numeric_traits::__max); 9642: } 9642: }; 9642: 9642: const _TRet __tmp = __convf(__str, &__endptr, __base...); 9642: 9642: if (__endptr == __str) 9642: std::__throw_invalid_argument(__name); 9642: else if ((*__errno_location ()) == 34 9642: || _Range_chk::_S_chk(__tmp, std::is_same<_Ret, int>{})) 9642: std::__throw_out_of_range(__name); 9642: else 9642: __ret = __tmp; 9642: 9642: if (__idx) 9642: *__idx = __endptr - __str; 9642: 9642: return __ret; 9642: } 9642: 9642: 9642: template 9642: _String 9642: __to_xstring(int (*__convf) (_CharT*, std::size_t, const _CharT*, 9642: __builtin_va_list), std::size_t __n, 9642: const _CharT* __fmt, ...) 9642: { 9642: 9642: 9642: _CharT* __s = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) 9642: * __n)); 9642: 9642: __builtin_va_list __args; 9642: __builtin_va_start(__args, __fmt); 9642: 9642: const int __len = __convf(__s, __n, __fmt, __args); 9642: 9642: __builtin_va_end(__args); 9642: 9642: return _String(__s, __s + __len); 9642: } 9642: 9642: 9642: } 9642: # 4110 "/usr/include/c++/13/bits/basic_string.h" 2 3 9642: # 1 "/usr/include/c++/13/bits/charconv.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/charconv.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/charconv.h" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: namespace __detail 9642: { 9642: 9642: 9642: template 9642: constexpr bool __integer_to_chars_is_unsigned 9642: = ! __gnu_cxx::__int_traits<_Tp>::__is_signed; 9642: 9642: 9642: 9642: template 9642: constexpr unsigned 9642: __to_chars_len(_Tp __value, int __base = 10) noexcept 9642: { 9642: 9642: static_assert(__integer_to_chars_is_unsigned<_Tp>, "implementation bug"); 9642: 9642: 9642: unsigned __n = 1; 9642: const unsigned __b2 = __base * __base; 9642: const unsigned __b3 = __b2 * __base; 9642: const unsigned long __b4 = __b3 * __base; 9642: for (;;) 9642: { 9642: if (__value < (unsigned)__base) return __n; 9642: if (__value < __b2) return __n + 1; 9642: if (__value < __b3) return __n + 2; 9642: if (__value < __b4) return __n + 3; 9642: __value /= __b4; 9642: __n += 4; 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: void 9642: __to_chars_10_impl(char* __first, unsigned __len, _Tp __val) noexcept 9642: { 9642: 9642: static_assert(__integer_to_chars_is_unsigned<_Tp>, "implementation bug"); 9642: 9642: 9642: constexpr char __digits[201] = 9642: "0001020304050607080910111213141516171819" 9642: "2021222324252627282930313233343536373839" 9642: "4041424344454647484950515253545556575859" 9642: "6061626364656667686970717273747576777879" 9642: "8081828384858687888990919293949596979899"; 9642: unsigned __pos = __len - 1; 9642: while (__val >= 100) 9642: { 9642: auto const __num = (__val % 100) * 2; 9642: __val /= 100; 9642: __first[__pos] = __digits[__num + 1]; 9642: __first[__pos - 1] = __digits[__num]; 9642: __pos -= 2; 9642: } 9642: if (__val >= 10) 9642: { 9642: auto const __num = __val * 2; 9642: __first[1] = __digits[__num + 1]; 9642: __first[0] = __digits[__num]; 9642: } 9642: else 9642: __first[0] = '0' + __val; 9642: } 9642: 9642: } 9642: 9642: } 9642: # 4111 "/usr/include/c++/13/bits/basic_string.h" 2 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: namespace __cxx11 { 9642: 9642: 9642: 9642: inline int 9642: stoi(const string& __str, size_t* __idx = 0, int __base = 10) 9642: { return __gnu_cxx::__stoa(&std::strtol, "stoi", __str.c_str(), 9642: __idx, __base); } 9642: 9642: inline long 9642: stol(const string& __str, size_t* __idx = 0, int __base = 10) 9642: { return __gnu_cxx::__stoa(&std::strtol, "stol", __str.c_str(), 9642: __idx, __base); } 9642: 9642: inline unsigned long 9642: stoul(const string& __str, size_t* __idx = 0, int __base = 10) 9642: { return __gnu_cxx::__stoa(&std::strtoul, "stoul", __str.c_str(), 9642: __idx, __base); } 9642: 9642: inline long long 9642: stoll(const string& __str, size_t* __idx = 0, int __base = 10) 9642: { return __gnu_cxx::__stoa(&std::strtoll, "stoll", __str.c_str(), 9642: __idx, __base); } 9642: 9642: inline unsigned long long 9642: stoull(const string& __str, size_t* __idx = 0, int __base = 10) 9642: { return __gnu_cxx::__stoa(&std::strtoull, "stoull", __str.c_str(), 9642: __idx, __base); } 9642: 9642: 9642: inline float 9642: stof(const string& __str, size_t* __idx = 0) 9642: { return __gnu_cxx::__stoa(&std::strtof, "stof", __str.c_str(), __idx); } 9642: 9642: inline double 9642: stod(const string& __str, size_t* __idx = 0) 9642: { return __gnu_cxx::__stoa(&std::strtod, "stod", __str.c_str(), __idx); } 9642: 9642: inline long double 9642: stold(const string& __str, size_t* __idx = 0) 9642: { return __gnu_cxx::__stoa(&std::strtold, "stold", __str.c_str(), __idx); } 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: inline string 9642: to_string(int __val) 9642: 9642: noexcept 9642: 9642: { 9642: const bool __neg = __val < 0; 9642: const unsigned __uval = __neg ? (unsigned)~__val + 1u : __val; 9642: const auto __len = __detail::__to_chars_len(__uval); 9642: string __str(__neg + __len, '-'); 9642: __detail::__to_chars_10_impl(&__str[__neg], __len, __uval); 9642: return __str; 9642: } 9642: 9642: [[__nodiscard__]] 9642: inline string 9642: to_string(unsigned __val) 9642: 9642: noexcept 9642: 9642: { 9642: string __str(__detail::__to_chars_len(__val), '\0'); 9642: __detail::__to_chars_10_impl(&__str[0], __str.size(), __val); 9642: return __str; 9642: } 9642: 9642: [[__nodiscard__]] 9642: inline string 9642: to_string(long __val) 9642: 9642: noexcept 9642: 9642: { 9642: const bool __neg = __val < 0; 9642: const unsigned long __uval = __neg ? (unsigned long)~__val + 1ul : __val; 9642: const auto __len = __detail::__to_chars_len(__uval); 9642: string __str(__neg + __len, '-'); 9642: __detail::__to_chars_10_impl(&__str[__neg], __len, __uval); 9642: return __str; 9642: } 9642: 9642: [[__nodiscard__]] 9642: inline string 9642: to_string(unsigned long __val) 9642: 9642: noexcept 9642: 9642: { 9642: string __str(__detail::__to_chars_len(__val), '\0'); 9642: __detail::__to_chars_10_impl(&__str[0], __str.size(), __val); 9642: return __str; 9642: } 9642: 9642: [[__nodiscard__]] 9642: inline string 9642: to_string(long long __val) 9642: { 9642: const bool __neg = __val < 0; 9642: const unsigned long long __uval 9642: = __neg ? (unsigned long long)~__val + 1ull : __val; 9642: const auto __len = __detail::__to_chars_len(__uval); 9642: string __str(__neg + __len, '-'); 9642: __detail::__to_chars_10_impl(&__str[__neg], __len, __uval); 9642: return __str; 9642: } 9642: 9642: [[__nodiscard__]] 9642: inline string 9642: to_string(unsigned long long __val) 9642: { 9642: string __str(__detail::__to_chars_len(__val), '\0'); 9642: __detail::__to_chars_10_impl(&__str[0], __str.size(), __val); 9642: return __str; 9642: } 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: inline string 9642: to_string(float __val) 9642: { 9642: const int __n = 9642: __gnu_cxx::__numeric_traits::__max_exponent10 + 20; 9642: return __gnu_cxx::__to_xstring(&std::vsnprintf, __n, 9642: "%f", __val); 9642: } 9642: 9642: [[__nodiscard__]] 9642: inline string 9642: to_string(double __val) 9642: { 9642: const int __n = 9642: __gnu_cxx::__numeric_traits::__max_exponent10 + 20; 9642: return __gnu_cxx::__to_xstring(&std::vsnprintf, __n, 9642: "%f", __val); 9642: } 9642: 9642: [[__nodiscard__]] 9642: inline string 9642: to_string(long double __val) 9642: { 9642: const int __n = 9642: __gnu_cxx::__numeric_traits::__max_exponent10 + 20; 9642: return __gnu_cxx::__to_xstring(&std::vsnprintf, __n, 9642: "%Lf", __val); 9642: } 9642: 9642: 9642: 9642: inline int 9642: stoi(const wstring& __str, size_t* __idx = 0, int __base = 10) 9642: { return __gnu_cxx::__stoa(&std::wcstol, "stoi", __str.c_str(), 9642: __idx, __base); } 9642: 9642: inline long 9642: stol(const wstring& __str, size_t* __idx = 0, int __base = 10) 9642: { return __gnu_cxx::__stoa(&std::wcstol, "stol", __str.c_str(), 9642: __idx, __base); } 9642: 9642: inline unsigned long 9642: stoul(const wstring& __str, size_t* __idx = 0, int __base = 10) 9642: { return __gnu_cxx::__stoa(&std::wcstoul, "stoul", __str.c_str(), 9642: __idx, __base); } 9642: 9642: inline long long 9642: stoll(const wstring& __str, size_t* __idx = 0, int __base = 10) 9642: { return __gnu_cxx::__stoa(&std::wcstoll, "stoll", __str.c_str(), 9642: __idx, __base); } 9642: 9642: inline unsigned long long 9642: stoull(const wstring& __str, size_t* __idx = 0, int __base = 10) 9642: { return __gnu_cxx::__stoa(&std::wcstoull, "stoull", __str.c_str(), 9642: __idx, __base); } 9642: 9642: 9642: inline float 9642: stof(const wstring& __str, size_t* __idx = 0) 9642: { return __gnu_cxx::__stoa(&std::wcstof, "stof", __str.c_str(), __idx); } 9642: 9642: inline double 9642: stod(const wstring& __str, size_t* __idx = 0) 9642: { return __gnu_cxx::__stoa(&std::wcstod, "stod", __str.c_str(), __idx); } 9642: 9642: inline long double 9642: stold(const wstring& __str, size_t* __idx = 0) 9642: { return __gnu_cxx::__stoa(&std::wcstold, "stold", __str.c_str(), __idx); } 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: inline wstring 9642: to_wstring(int __val) 9642: { return __gnu_cxx::__to_xstring(&std::vswprintf, 4 * sizeof(int), 9642: L"%d", __val); } 9642: 9642: [[__nodiscard__]] 9642: inline wstring 9642: to_wstring(unsigned __val) 9642: { return __gnu_cxx::__to_xstring(&std::vswprintf, 9642: 4 * sizeof(unsigned), 9642: L"%u", __val); } 9642: 9642: [[__nodiscard__]] 9642: inline wstring 9642: to_wstring(long __val) 9642: { return __gnu_cxx::__to_xstring(&std::vswprintf, 4 * sizeof(long), 9642: L"%ld", __val); } 9642: 9642: [[__nodiscard__]] 9642: inline wstring 9642: to_wstring(unsigned long __val) 9642: { return __gnu_cxx::__to_xstring(&std::vswprintf, 9642: 4 * sizeof(unsigned long), 9642: L"%lu", __val); } 9642: 9642: [[__nodiscard__]] 9642: inline wstring 9642: to_wstring(long long __val) 9642: { return __gnu_cxx::__to_xstring(&std::vswprintf, 9642: 4 * sizeof(long long), 9642: L"%lld", __val); } 9642: 9642: [[__nodiscard__]] 9642: inline wstring 9642: to_wstring(unsigned long long __val) 9642: { return __gnu_cxx::__to_xstring(&std::vswprintf, 9642: 4 * sizeof(unsigned long long), 9642: L"%llu", __val); } 9642: 9642: [[__nodiscard__]] 9642: inline wstring 9642: to_wstring(float __val) 9642: { 9642: const int __n = 9642: __gnu_cxx::__numeric_traits::__max_exponent10 + 20; 9642: return __gnu_cxx::__to_xstring(&std::vswprintf, __n, 9642: L"%f", __val); 9642: } 9642: 9642: [[__nodiscard__]] 9642: inline wstring 9642: to_wstring(double __val) 9642: { 9642: const int __n = 9642: __gnu_cxx::__numeric_traits::__max_exponent10 + 20; 9642: return __gnu_cxx::__to_xstring(&std::vswprintf, __n, 9642: L"%f", __val); 9642: } 9642: 9642: [[__nodiscard__]] 9642: inline wstring 9642: to_wstring(long double __val) 9642: { 9642: const int __n = 9642: __gnu_cxx::__numeric_traits::__max_exponent10 + 20; 9642: return __gnu_cxx::__to_xstring(&std::vswprintf, __n, 9642: L"%Lf", __val); 9642: } 9642: 9642: 9642: 9642: } 9642: 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: template, _Alloc>> 9642: struct __str_hash_base 9642: : public __hash_base 9642: { 9642: [[__nodiscard__]] 9642: size_t 9642: operator()(const _StrT& __s) const noexcept 9642: { return _Hash_impl::hash(__s.data(), __s.length() * sizeof(_CharT)); } 9642: }; 9642: 9642: 9642: 9642: template 9642: struct hash, _Alloc>> 9642: : public __str_hash_base 9642: { }; 9642: 9642: 9642: template 9642: struct hash, _Alloc>> 9642: : public __str_hash_base 9642: { }; 9642: 9642: template 9642: struct __is_fast_hash, 9642: _Alloc>>> 9642: : std::false_type 9642: { }; 9642: # 4440 "/usr/include/c++/13/bits/basic_string.h" 3 9642: template 9642: struct hash, _Alloc>> 9642: : public __str_hash_base 9642: { }; 9642: 9642: 9642: template 9642: struct hash, _Alloc>> 9642: : public __str_hash_base 9642: { }; 9642: 9642: 9642: 9642: template<> struct __is_fast_hash> : std::false_type { }; 9642: template<> struct __is_fast_hash> : std::false_type { }; 9642: template<> struct __is_fast_hash> : std::false_type { }; 9642: template<> struct __is_fast_hash> : std::false_type { }; 9642: # 4472 "/usr/include/c++/13/bits/basic_string.h" 3 9642: inline namespace literals 9642: { 9642: inline namespace string_literals 9642: { 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wliteral-suffix" 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: inline basic_string 9642: operator""s(const char* __str, size_t __len) 9642: { return basic_string{__str, __len}; } 9642: 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: inline basic_string 9642: operator""s(const wchar_t* __str, size_t __len) 9642: { return basic_string{__str, __len}; } 9642: # 4502 "/usr/include/c++/13/bits/basic_string.h" 3 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: inline basic_string 9642: operator""s(const char16_t* __str, size_t __len) 9642: { return basic_string{__str, __len}; } 9642: 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: inline basic_string 9642: operator""s(const char32_t* __str, size_t __len) 9642: { return basic_string{__str, __len}; } 9642: 9642: 9642: #pragma GCC diagnostic pop 9642: } 9642: } 9642: 9642: 9642: namespace __detail::__variant 9642: { 9642: template struct _Never_valueless_alt; 9642: 9642: 9642: 9642: template 9642: struct _Never_valueless_alt> 9642: : __and_< 9642: is_nothrow_move_constructible>, 9642: is_nothrow_move_assignable> 9642: >::type 9642: { }; 9642: } 9642: 9642: 9642: 9642: 9642: } 9642: # 55 "/usr/include/c++/13/string" 2 3 9642: # 1 "/usr/include/c++/13/bits/basic_string.tcc" 1 3 9642: # 42 "/usr/include/c++/13/bits/basic_string.tcc" 3 9642: 9642: # 43 "/usr/include/c++/13/bits/basic_string.tcc" 3 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: template 9642: const typename basic_string<_CharT, _Traits, _Alloc>::size_type 9642: basic_string<_CharT, _Traits, _Alloc>::npos; 9642: 9642: template 9642: 9642: void 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: swap(basic_string& __s) noexcept 9642: { 9642: if (this == std::__addressof(__s)) 9642: return; 9642: 9642: _Alloc_traits::_S_on_swap(_M_get_allocator(), __s._M_get_allocator()); 9642: 9642: if (_M_is_local()) 9642: if (__s._M_is_local()) 9642: { 9642: if (length() && __s.length()) 9642: { 9642: _CharT __tmp_data[_S_local_capacity + 1]; 9642: traits_type::copy(__tmp_data, __s._M_local_buf, 9642: __s.length() + 1); 9642: traits_type::copy(__s._M_local_buf, _M_local_buf, 9642: length() + 1); 9642: traits_type::copy(_M_local_buf, __tmp_data, 9642: __s.length() + 1); 9642: } 9642: else if (__s.length()) 9642: { 9642: _M_init_local_buf(); 9642: traits_type::copy(_M_local_buf, __s._M_local_buf, 9642: __s.length() + 1); 9642: _M_length(__s.length()); 9642: __s._M_set_length(0); 9642: return; 9642: } 9642: else if (length()) 9642: { 9642: __s._M_init_local_buf(); 9642: traits_type::copy(__s._M_local_buf, _M_local_buf, 9642: length() + 1); 9642: __s._M_length(length()); 9642: _M_set_length(0); 9642: return; 9642: } 9642: } 9642: else 9642: { 9642: const size_type __tmp_capacity = __s._M_allocated_capacity; 9642: __s._M_init_local_buf(); 9642: traits_type::copy(__s._M_local_buf, _M_local_buf, 9642: length() + 1); 9642: _M_data(__s._M_data()); 9642: __s._M_data(__s._M_local_buf); 9642: _M_capacity(__tmp_capacity); 9642: } 9642: else 9642: { 9642: const size_type __tmp_capacity = _M_allocated_capacity; 9642: if (__s._M_is_local()) 9642: { 9642: _M_init_local_buf(); 9642: traits_type::copy(_M_local_buf, __s._M_local_buf, 9642: __s.length() + 1); 9642: __s._M_data(_M_data()); 9642: _M_data(_M_local_buf); 9642: } 9642: else 9642: { 9642: pointer __tmp_ptr = _M_data(); 9642: _M_data(__s._M_data()); 9642: __s._M_data(__tmp_ptr); 9642: _M_capacity(__s._M_allocated_capacity); 9642: } 9642: __s._M_capacity(__tmp_capacity); 9642: } 9642: 9642: const size_type __tmp_length = length(); 9642: _M_length(__s.length()); 9642: __s._M_length(__tmp_length); 9642: } 9642: 9642: template 9642: 9642: typename basic_string<_CharT, _Traits, _Alloc>::pointer 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: _M_create(size_type& __capacity, size_type __old_capacity) 9642: { 9642: 9642: 9642: if (__capacity > max_size()) 9642: std::__throw_length_error(("basic_string::_M_create")); 9642: 9642: 9642: 9642: 9642: if (__capacity > __old_capacity && __capacity < 2 * __old_capacity) 9642: { 9642: __capacity = 2 * __old_capacity; 9642: 9642: if (__capacity > max_size()) 9642: __capacity = max_size(); 9642: } 9642: 9642: 9642: 9642: return _S_allocate(_M_get_allocator(), __capacity + 1); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: template 9642: 9642: void 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: _M_construct(_InIterator __beg, _InIterator __end, 9642: std::input_iterator_tag) 9642: { 9642: size_type __len = 0; 9642: size_type __capacity = size_type(_S_local_capacity); 9642: 9642: _M_init_local_buf(); 9642: 9642: while (__beg != __end && __len < __capacity) 9642: { 9642: _M_local_buf[__len++] = *__beg; 9642: ++__beg; 9642: } 9642: 9642: struct _Guard 9642: { 9642: 9642: explicit _Guard(basic_string* __s) : _M_guarded(__s) { } 9642: 9642: 9642: ~_Guard() { if (_M_guarded) _M_guarded->_M_dispose(); } 9642: 9642: basic_string* _M_guarded; 9642: } __guard(this); 9642: 9642: while (__beg != __end) 9642: { 9642: if (__len == __capacity) 9642: { 9642: 9642: __capacity = __len + 1; 9642: pointer __another = _M_create(__capacity, __len); 9642: this->_S_copy(__another, _M_data(), __len); 9642: _M_dispose(); 9642: _M_data(__another); 9642: _M_capacity(__capacity); 9642: } 9642: traits_type::assign(_M_data()[__len++], *__beg); 9642: ++__beg; 9642: } 9642: 9642: __guard._M_guarded = 0; 9642: 9642: _M_set_length(__len); 9642: } 9642: 9642: template 9642: template 9642: 9642: void 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: _M_construct(_InIterator __beg, _InIterator __end, 9642: std::forward_iterator_tag) 9642: { 9642: size_type __dnew = static_cast(std::distance(__beg, __end)); 9642: 9642: if (__dnew > size_type(_S_local_capacity)) 9642: { 9642: _M_data(_M_create(__dnew, size_type(0))); 9642: _M_capacity(__dnew); 9642: } 9642: else 9642: _M_init_local_buf(); 9642: 9642: 9642: struct _Guard 9642: { 9642: 9642: explicit _Guard(basic_string* __s) : _M_guarded(__s) { } 9642: 9642: 9642: ~_Guard() { if (_M_guarded) _M_guarded->_M_dispose(); } 9642: 9642: basic_string* _M_guarded; 9642: } __guard(this); 9642: 9642: this->_S_copy_chars(_M_data(), __beg, __end); 9642: 9642: __guard._M_guarded = 0; 9642: 9642: _M_set_length(__dnew); 9642: } 9642: 9642: template 9642: 9642: void 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: _M_construct(size_type __n, _CharT __c) 9642: { 9642: if (__n > size_type(_S_local_capacity)) 9642: { 9642: _M_data(_M_create(__n, size_type(0))); 9642: _M_capacity(__n); 9642: } 9642: else 9642: _M_init_local_buf(); 9642: 9642: if (__n) 9642: this->_S_assign(_M_data(), __n, __c); 9642: 9642: _M_set_length(__n); 9642: } 9642: 9642: template 9642: 9642: void 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: _M_assign(const basic_string& __str) 9642: { 9642: if (this != std::__addressof(__str)) 9642: { 9642: const size_type __rsize = __str.length(); 9642: const size_type __capacity = capacity(); 9642: 9642: if (__rsize > __capacity) 9642: { 9642: size_type __new_capacity = __rsize; 9642: pointer __tmp = _M_create(__new_capacity, __capacity); 9642: _M_dispose(); 9642: _M_data(__tmp); 9642: _M_capacity(__new_capacity); 9642: } 9642: 9642: if (__rsize) 9642: this->_S_copy(_M_data(), __str._M_data(), __rsize); 9642: 9642: _M_set_length(__rsize); 9642: } 9642: } 9642: 9642: template 9642: 9642: void 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: reserve(size_type __res) 9642: { 9642: const size_type __capacity = capacity(); 9642: 9642: 9642: 9642: 9642: if (__res <= __capacity) 9642: return; 9642: 9642: pointer __tmp = _M_create(__res, __capacity); 9642: this->_S_copy(__tmp, _M_data(), length() + 1); 9642: _M_dispose(); 9642: _M_data(__tmp); 9642: _M_capacity(__res); 9642: } 9642: 9642: template 9642: 9642: void 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: _M_mutate(size_type __pos, size_type __len1, const _CharT* __s, 9642: size_type __len2) 9642: { 9642: const size_type __how_much = length() - __pos - __len1; 9642: 9642: size_type __new_capacity = length() + __len2 - __len1; 9642: pointer __r = _M_create(__new_capacity, capacity()); 9642: 9642: if (__pos) 9642: this->_S_copy(__r, _M_data(), __pos); 9642: if (__s && __len2) 9642: this->_S_copy(__r + __pos, __s, __len2); 9642: if (__how_much) 9642: this->_S_copy(__r + __pos + __len2, 9642: _M_data() + __pos + __len1, __how_much); 9642: 9642: _M_dispose(); 9642: _M_data(__r); 9642: _M_capacity(__new_capacity); 9642: } 9642: 9642: template 9642: 9642: void 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: _M_erase(size_type __pos, size_type __n) 9642: { 9642: const size_type __how_much = length() - __pos - __n; 9642: 9642: if (__how_much && __n) 9642: this->_S_move(_M_data() + __pos, _M_data() + __pos + __n, __how_much); 9642: 9642: _M_set_length(length() - __n); 9642: } 9642: 9642: template 9642: 9642: void 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: reserve() 9642: { 9642: if (_M_is_local()) 9642: return; 9642: 9642: const size_type __length = length(); 9642: const size_type __capacity = _M_allocated_capacity; 9642: 9642: if (__length <= size_type(_S_local_capacity)) 9642: { 9642: _M_init_local_buf(); 9642: this->_S_copy(_M_local_buf, _M_data(), __length + 1); 9642: _M_destroy(__capacity); 9642: _M_data(_M_local_data()); 9642: } 9642: 9642: else if (__length < __capacity) 9642: try 9642: { 9642: pointer __tmp = _S_allocate(_M_get_allocator(), __length + 1); 9642: this->_S_copy(__tmp, _M_data(), __length + 1); 9642: _M_dispose(); 9642: _M_data(__tmp); 9642: _M_capacity(__length); 9642: } 9642: catch (const __cxxabiv1::__forced_unwind&) 9642: { throw; } 9642: catch (...) 9642: { } 9642: 9642: } 9642: 9642: template 9642: 9642: void 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: resize(size_type __n, _CharT __c) 9642: { 9642: const size_type __size = this->size(); 9642: if (__size < __n) 9642: this->append(__n - __size, __c); 9642: else if (__n < __size) 9642: this->_M_set_length(__n); 9642: } 9642: 9642: template 9642: 9642: basic_string<_CharT, _Traits, _Alloc>& 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: _M_append(const _CharT* __s, size_type __n) 9642: { 9642: const size_type __len = __n + this->size(); 9642: 9642: if (__len <= this->capacity()) 9642: { 9642: if (__n) 9642: this->_S_copy(this->_M_data() + this->size(), __s, __n); 9642: } 9642: else 9642: this->_M_mutate(this->size(), size_type(0), __s, __n); 9642: 9642: this->_M_set_length(__len); 9642: return *this; 9642: } 9642: 9642: template 9642: template 9642: 9642: basic_string<_CharT, _Traits, _Alloc>& 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: _M_replace_dispatch(const_iterator __i1, const_iterator __i2, 9642: _InputIterator __k1, _InputIterator __k2, 9642: std::__false_type) 9642: { 9642: 9642: 9642: const basic_string __s(__k1, __k2, this->get_allocator()); 9642: const size_type __n1 = __i2 - __i1; 9642: return _M_replace(__i1 - begin(), __n1, __s._M_data(), 9642: __s.size()); 9642: } 9642: 9642: template 9642: 9642: basic_string<_CharT, _Traits, _Alloc>& 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2, 9642: _CharT __c) 9642: { 9642: _M_check_length(__n1, __n2, "basic_string::_M_replace_aux"); 9642: 9642: const size_type __old_size = this->size(); 9642: const size_type __new_size = __old_size + __n2 - __n1; 9642: 9642: if (__new_size <= this->capacity()) 9642: { 9642: pointer __p = this->_M_data() + __pos1; 9642: 9642: const size_type __how_much = __old_size - __pos1 - __n1; 9642: if (__how_much && __n1 != __n2) 9642: this->_S_move(__p + __n2, __p + __n1, __how_much); 9642: } 9642: else 9642: this->_M_mutate(__pos1, __n1, 0, __n2); 9642: 9642: if (__n2) 9642: this->_S_assign(this->_M_data() + __pos1, __n2, __c); 9642: 9642: this->_M_set_length(__new_size); 9642: return *this; 9642: } 9642: 9642: template 9642: __attribute__((__noinline__, __noclone__, __cold__)) void 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: _M_replace_cold(pointer __p, size_type __len1, const _CharT* __s, 9642: const size_type __len2, const size_type __how_much) 9642: { 9642: 9642: if (__len2 && __len2 <= __len1) 9642: this->_S_move(__p, __s, __len2); 9642: if (__how_much && __len1 != __len2) 9642: this->_S_move(__p + __len2, __p + __len1, __how_much); 9642: if (__len2 > __len1) 9642: { 9642: if (__s + __len2 <= __p + __len1) 9642: this->_S_move(__p, __s, __len2); 9642: else if (__s >= __p + __len1) 9642: { 9642: 9642: 9642: const size_type __poff = (__s - __p) + (__len2 - __len1); 9642: this->_S_copy(__p, __p + __poff, __len2); 9642: } 9642: else 9642: { 9642: const size_type __nleft = (__p + __len1) - __s; 9642: this->_S_move(__p, __s, __nleft); 9642: this->_S_copy(__p + __nleft, __p + __len2, __len2 - __nleft); 9642: } 9642: } 9642: } 9642: 9642: template 9642: 9642: basic_string<_CharT, _Traits, _Alloc>& 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: _M_replace(size_type __pos, size_type __len1, const _CharT* __s, 9642: const size_type __len2) 9642: { 9642: _M_check_length(__len1, __len2, "basic_string::_M_replace"); 9642: 9642: const size_type __old_size = this->size(); 9642: const size_type __new_size = __old_size + __len2 - __len1; 9642: 9642: if (__new_size <= this->capacity()) 9642: { 9642: pointer __p = this->_M_data() + __pos; 9642: 9642: const size_type __how_much = __old_size - __pos - __len1; 9642: # 537 "/usr/include/c++/13/bits/basic_string.tcc" 3 9642: if (__builtin_expect(_M_disjunct(__s), true)) 9642: { 9642: if (__how_much && __len1 != __len2) 9642: this->_S_move(__p + __len2, __p + __len1, __how_much); 9642: if (__len2) 9642: this->_S_copy(__p, __s, __len2); 9642: } 9642: else 9642: _M_replace_cold(__p, __len1, __s, __len2, __how_much); 9642: } 9642: else 9642: this->_M_mutate(__pos, __len1, __s, __len2); 9642: 9642: this->_M_set_length(__new_size); 9642: return *this; 9642: } 9642: 9642: template 9642: 9642: typename basic_string<_CharT, _Traits, _Alloc>::size_type 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: copy(_CharT* __s, size_type __n, size_type __pos) const 9642: { 9642: _M_check(__pos, "basic_string::copy"); 9642: __n = _M_limit(__pos, __n); 9642: ; 9642: if (__n) 9642: _S_copy(__s, _M_data() + __pos, __n); 9642: 9642: return __n; 9642: } 9642: # 615 "/usr/include/c++/13/bits/basic_string.tcc" 3 9642: template 9642: 9642: typename basic_string<_CharT, _Traits, _Alloc>::size_type 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: find(const _CharT* __s, size_type __pos, size_type __n) const 9642: noexcept 9642: { 9642: ; 9642: const size_type __size = this->size(); 9642: 9642: if (__n == 0) 9642: return __pos <= __size ? __pos : npos; 9642: if (__pos >= __size) 9642: return npos; 9642: 9642: const _CharT __elem0 = __s[0]; 9642: const _CharT* const __data = data(); 9642: const _CharT* __first = __data + __pos; 9642: const _CharT* const __last = __data + __size; 9642: size_type __len = __size - __pos; 9642: 9642: while (__len >= __n) 9642: { 9642: 9642: __first = traits_type::find(__first, __len - __n + 1, __elem0); 9642: if (!__first) 9642: return npos; 9642: 9642: 9642: 9642: if (traits_type::compare(__first, __s, __n) == 0) 9642: return __first - __data; 9642: __len = __last - ++__first; 9642: } 9642: return npos; 9642: } 9642: 9642: template 9642: 9642: typename basic_string<_CharT, _Traits, _Alloc>::size_type 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: find(_CharT __c, size_type __pos) const noexcept 9642: { 9642: size_type __ret = npos; 9642: const size_type __size = this->size(); 9642: if (__pos < __size) 9642: { 9642: const _CharT* __data = _M_data(); 9642: const size_type __n = __size - __pos; 9642: const _CharT* __p = traits_type::find(__data + __pos, __n, __c); 9642: if (__p) 9642: __ret = __p - __data; 9642: } 9642: return __ret; 9642: } 9642: 9642: template 9642: 9642: typename basic_string<_CharT, _Traits, _Alloc>::size_type 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: rfind(const _CharT* __s, size_type __pos, size_type __n) const 9642: noexcept 9642: { 9642: ; 9642: const size_type __size = this->size(); 9642: if (__n <= __size) 9642: { 9642: __pos = std::min(size_type(__size - __n), __pos); 9642: const _CharT* __data = _M_data(); 9642: do 9642: { 9642: if (traits_type::compare(__data + __pos, __s, __n) == 0) 9642: return __pos; 9642: } 9642: while (__pos-- > 0); 9642: } 9642: return npos; 9642: } 9642: 9642: template 9642: 9642: typename basic_string<_CharT, _Traits, _Alloc>::size_type 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: rfind(_CharT __c, size_type __pos) const noexcept 9642: { 9642: size_type __size = this->size(); 9642: if (__size) 9642: { 9642: if (--__size > __pos) 9642: __size = __pos; 9642: for (++__size; __size-- > 0; ) 9642: if (traits_type::eq(_M_data()[__size], __c)) 9642: return __size; 9642: } 9642: return npos; 9642: } 9642: 9642: template 9642: 9642: typename basic_string<_CharT, _Traits, _Alloc>::size_type 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: find_first_of(const _CharT* __s, size_type __pos, size_type __n) const 9642: noexcept 9642: { 9642: ; 9642: for (; __n && __pos < this->size(); ++__pos) 9642: { 9642: const _CharT* __p = traits_type::find(__s, __n, _M_data()[__pos]); 9642: if (__p) 9642: return __pos; 9642: } 9642: return npos; 9642: } 9642: 9642: template 9642: 9642: typename basic_string<_CharT, _Traits, _Alloc>::size_type 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: find_last_of(const _CharT* __s, size_type __pos, size_type __n) const 9642: noexcept 9642: { 9642: ; 9642: size_type __size = this->size(); 9642: if (__size && __n) 9642: { 9642: if (--__size > __pos) 9642: __size = __pos; 9642: do 9642: { 9642: if (traits_type::find(__s, __n, _M_data()[__size])) 9642: return __size; 9642: } 9642: while (__size-- != 0); 9642: } 9642: return npos; 9642: } 9642: 9642: template 9642: 9642: typename basic_string<_CharT, _Traits, _Alloc>::size_type 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const 9642: noexcept 9642: { 9642: ; 9642: for (; __pos < this->size(); ++__pos) 9642: if (!traits_type::find(__s, __n, _M_data()[__pos])) 9642: return __pos; 9642: return npos; 9642: } 9642: 9642: template 9642: 9642: typename basic_string<_CharT, _Traits, _Alloc>::size_type 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: find_first_not_of(_CharT __c, size_type __pos) const noexcept 9642: { 9642: for (; __pos < this->size(); ++__pos) 9642: if (!traits_type::eq(_M_data()[__pos], __c)) 9642: return __pos; 9642: return npos; 9642: } 9642: 9642: template 9642: 9642: typename basic_string<_CharT, _Traits, _Alloc>::size_type 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const 9642: noexcept 9642: { 9642: ; 9642: size_type __size = this->size(); 9642: if (__size) 9642: { 9642: if (--__size > __pos) 9642: __size = __pos; 9642: do 9642: { 9642: if (!traits_type::find(__s, __n, _M_data()[__size])) 9642: return __size; 9642: } 9642: while (__size--); 9642: } 9642: return npos; 9642: } 9642: 9642: template 9642: 9642: typename basic_string<_CharT, _Traits, _Alloc>::size_type 9642: basic_string<_CharT, _Traits, _Alloc>:: 9642: find_last_not_of(_CharT __c, size_type __pos) const noexcept 9642: { 9642: size_type __size = this->size(); 9642: if (__size) 9642: { 9642: if (--__size > __pos) 9642: __size = __pos; 9642: do 9642: { 9642: if (!traits_type::eq(_M_data()[__size], __c)) 9642: return __size; 9642: } 9642: while (__size--); 9642: } 9642: return npos; 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: operator>>(basic_istream<_CharT, _Traits>& __in, 9642: basic_string<_CharT, _Traits, _Alloc>& __str) 9642: { 9642: typedef basic_istream<_CharT, _Traits> __istream_type; 9642: typedef basic_string<_CharT, _Traits, _Alloc> __string_type; 9642: typedef typename __istream_type::ios_base __ios_base; 9642: typedef typename __istream_type::int_type __int_type; 9642: typedef typename __string_type::size_type __size_type; 9642: typedef ctype<_CharT> __ctype_type; 9642: typedef typename __ctype_type::ctype_base __ctype_base; 9642: 9642: __size_type __extracted = 0; 9642: typename __ios_base::iostate __err = __ios_base::goodbit; 9642: typename __istream_type::sentry __cerb(__in, false); 9642: if (__cerb) 9642: { 9642: try 9642: { 9642: 9642: __str.erase(); 9642: _CharT __buf[128]; 9642: __size_type __len = 0; 9642: const streamsize __w = __in.width(); 9642: const __size_type __n = __w > 0 ? static_cast<__size_type>(__w) 9642: : __str.max_size(); 9642: const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); 9642: const __int_type __eof = _Traits::eof(); 9642: __int_type __c = __in.rdbuf()->sgetc(); 9642: 9642: while (__extracted < __n 9642: && !_Traits::eq_int_type(__c, __eof) 9642: && !__ct.is(__ctype_base::space, 9642: _Traits::to_char_type(__c))) 9642: { 9642: if (__len == sizeof(__buf) / sizeof(_CharT)) 9642: { 9642: __str.append(__buf, sizeof(__buf) / sizeof(_CharT)); 9642: __len = 0; 9642: } 9642: __buf[__len++] = _Traits::to_char_type(__c); 9642: ++__extracted; 9642: __c = __in.rdbuf()->snextc(); 9642: } 9642: __str.append(__buf, __len); 9642: 9642: if (__extracted < __n && _Traits::eq_int_type(__c, __eof)) 9642: __err |= __ios_base::eofbit; 9642: __in.width(0); 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: __in._M_setstate(__ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { 9642: 9642: 9642: 9642: __in._M_setstate(__ios_base::badbit); 9642: } 9642: } 9642: 9642: if (!__extracted) 9642: __err |= __ios_base::failbit; 9642: if (__err) 9642: __in.setstate(__err); 9642: return __in; 9642: } 9642: 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: getline(basic_istream<_CharT, _Traits>& __in, 9642: basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim) 9642: { 9642: typedef basic_istream<_CharT, _Traits> __istream_type; 9642: typedef basic_string<_CharT, _Traits, _Alloc> __string_type; 9642: typedef typename __istream_type::ios_base __ios_base; 9642: typedef typename __istream_type::int_type __int_type; 9642: typedef typename __string_type::size_type __size_type; 9642: 9642: __size_type __extracted = 0; 9642: const __size_type __n = __str.max_size(); 9642: typename __ios_base::iostate __err = __ios_base::goodbit; 9642: typename __istream_type::sentry __cerb(__in, true); 9642: if (__cerb) 9642: { 9642: try 9642: { 9642: __str.erase(); 9642: const __int_type __idelim = _Traits::to_int_type(__delim); 9642: const __int_type __eof = _Traits::eof(); 9642: __int_type __c = __in.rdbuf()->sgetc(); 9642: 9642: while (__extracted < __n 9642: && !_Traits::eq_int_type(__c, __eof) 9642: && !_Traits::eq_int_type(__c, __idelim)) 9642: { 9642: __str += _Traits::to_char_type(__c); 9642: ++__extracted; 9642: __c = __in.rdbuf()->snextc(); 9642: } 9642: 9642: if (_Traits::eq_int_type(__c, __eof)) 9642: __err |= __ios_base::eofbit; 9642: else if (_Traits::eq_int_type(__c, __idelim)) 9642: { 9642: ++__extracted; 9642: __in.rdbuf()->sbumpc(); 9642: } 9642: else 9642: __err |= __ios_base::failbit; 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: __in._M_setstate(__ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { 9642: 9642: 9642: 9642: __in._M_setstate(__ios_base::badbit); 9642: } 9642: } 9642: if (!__extracted) 9642: __err |= __ios_base::failbit; 9642: if (__err) 9642: __in.setstate(__err); 9642: return __in; 9642: } 9642: # 969 "/usr/include/c++/13/bits/basic_string.tcc" 3 9642: extern template class basic_string; 9642: # 982 "/usr/include/c++/13/bits/basic_string.tcc" 3 9642: extern template 9642: basic_istream& 9642: operator>>(basic_istream&, string&); 9642: extern template 9642: basic_ostream& 9642: operator<<(basic_ostream&, const string&); 9642: extern template 9642: basic_istream& 9642: getline(basic_istream&, string&, char); 9642: extern template 9642: basic_istream& 9642: getline(basic_istream&, string&); 9642: 9642: 9642: 9642: extern template class basic_string; 9642: # 1008 "/usr/include/c++/13/bits/basic_string.tcc" 3 9642: extern template 9642: basic_istream& 9642: operator>>(basic_istream&, wstring&); 9642: extern template 9642: basic_ostream& 9642: operator<<(basic_ostream&, const wstring&); 9642: extern template 9642: basic_istream& 9642: getline(basic_istream&, wstring&, wchar_t); 9642: extern template 9642: basic_istream& 9642: getline(basic_istream&, wstring&); 9642: 9642: 9642: 9642: 9642: } 9642: # 56 "/usr/include/c++/13/string" 2 3 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: namespace pmr { 9642: template> 9642: using basic_string = std::basic_string<_CharT, _Traits, 9642: polymorphic_allocator<_CharT>>; 9642: using string = basic_string; 9642: 9642: 9642: 9642: using u16string = basic_string; 9642: using u32string = basic_string; 9642: using wstring = basic_string; 9642: } 9642: 9642: } 9642: # 16 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 9642: # 1 "/usr/include/c++/13/unordered_set" 1 3 9642: # 32 "/usr/include/c++/13/unordered_set" 3 9642: 9642: # 33 "/usr/include/c++/13/unordered_set" 3 9642: # 41 "/usr/include/c++/13/unordered_set" 3 9642: # 1 "/usr/include/c++/13/bits/unordered_set.h" 1 3 9642: # 38 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: template 9642: using __uset_traits = __detail::_Hashtable_traits<_Cache, true, true>; 9642: 9642: template, 9642: typename _Pred = std::equal_to<_Value>, 9642: typename _Alloc = std::allocator<_Value>, 9642: typename _Tr = __uset_traits<__cache_default<_Value, _Hash>::value>> 9642: using __uset_hashtable = _Hashtable<_Value, _Value, _Alloc, 9642: __detail::_Identity, _Pred, _Hash, 9642: __detail::_Mod_range_hashing, 9642: __detail::_Default_ranged_hash, 9642: __detail::_Prime_rehash_policy, _Tr>; 9642: 9642: 9642: template 9642: using __umset_traits = __detail::_Hashtable_traits<_Cache, true, false>; 9642: 9642: template, 9642: typename _Pred = std::equal_to<_Value>, 9642: typename _Alloc = std::allocator<_Value>, 9642: typename _Tr = __umset_traits<__cache_default<_Value, _Hash>::value>> 9642: using __umset_hashtable = _Hashtable<_Value, _Value, _Alloc, 9642: __detail::_Identity, 9642: _Pred, _Hash, 9642: __detail::_Mod_range_hashing, 9642: __detail::_Default_ranged_hash, 9642: __detail::_Prime_rehash_policy, _Tr>; 9642: 9642: template 9642: class unordered_multiset; 9642: # 100 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: template, 9642: typename _Pred = equal_to<_Value>, 9642: typename _Alloc = allocator<_Value>> 9642: class unordered_set 9642: { 9642: typedef __uset_hashtable<_Value, _Hash, _Pred, _Alloc> _Hashtable; 9642: _Hashtable _M_h; 9642: 9642: public: 9642: 9642: 9642: 9642: typedef typename _Hashtable::key_type key_type; 9642: typedef typename _Hashtable::value_type value_type; 9642: typedef typename _Hashtable::hasher hasher; 9642: typedef typename _Hashtable::key_equal key_equal; 9642: typedef typename _Hashtable::allocator_type allocator_type; 9642: 9642: 9642: 9642: 9642: typedef typename _Hashtable::pointer pointer; 9642: typedef typename _Hashtable::const_pointer const_pointer; 9642: typedef typename _Hashtable::reference reference; 9642: typedef typename _Hashtable::const_reference const_reference; 9642: typedef typename _Hashtable::iterator iterator; 9642: typedef typename _Hashtable::const_iterator const_iterator; 9642: typedef typename _Hashtable::local_iterator local_iterator; 9642: typedef typename _Hashtable::const_local_iterator const_local_iterator; 9642: typedef typename _Hashtable::size_type size_type; 9642: typedef typename _Hashtable::difference_type difference_type; 9642: 9642: 9642: 9642: using node_type = typename _Hashtable::node_type; 9642: using insert_return_type = typename _Hashtable::insert_return_type; 9642: 9642: 9642: 9642: 9642: 9642: unordered_set() = default; 9642: # 151 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: explicit 9642: unordered_set(size_type __n, 9642: const hasher& __hf = hasher(), 9642: const key_equal& __eql = key_equal(), 9642: const allocator_type& __a = allocator_type()) 9642: : _M_h(__n, __hf, __eql, __a) 9642: { } 9642: # 172 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: template 9642: unordered_set(_InputIterator __first, _InputIterator __last, 9642: size_type __n = 0, 9642: const hasher& __hf = hasher(), 9642: const key_equal& __eql = key_equal(), 9642: const allocator_type& __a = allocator_type()) 9642: : _M_h(__first, __last, __n, __hf, __eql, __a) 9642: { } 9642: 9642: 9642: unordered_set(const unordered_set&) = default; 9642: 9642: 9642: unordered_set(unordered_set&&) = default; 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: unordered_set(const allocator_type& __a) 9642: : _M_h(__a) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: unordered_set(const unordered_set& __uset, 9642: const allocator_type& __a) 9642: : _M_h(__uset._M_h, __a) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: unordered_set(unordered_set&& __uset, 9642: const allocator_type& __a) 9642: noexcept( noexcept(_Hashtable(std::move(__uset._M_h), __a)) ) 9642: : _M_h(std::move(__uset._M_h), __a) 9642: { } 9642: # 228 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: unordered_set(initializer_list __l, 9642: size_type __n = 0, 9642: const hasher& __hf = hasher(), 9642: const key_equal& __eql = key_equal(), 9642: const allocator_type& __a = allocator_type()) 9642: : _M_h(__l, __n, __hf, __eql, __a) 9642: { } 9642: 9642: unordered_set(size_type __n, const allocator_type& __a) 9642: : unordered_set(__n, hasher(), key_equal(), __a) 9642: { } 9642: 9642: unordered_set(size_type __n, const hasher& __hf, 9642: const allocator_type& __a) 9642: : unordered_set(__n, __hf, key_equal(), __a) 9642: { } 9642: 9642: template 9642: unordered_set(_InputIterator __first, _InputIterator __last, 9642: size_type __n, 9642: const allocator_type& __a) 9642: : unordered_set(__first, __last, __n, hasher(), key_equal(), __a) 9642: { } 9642: 9642: template 9642: unordered_set(_InputIterator __first, _InputIterator __last, 9642: size_type __n, const hasher& __hf, 9642: const allocator_type& __a) 9642: : unordered_set(__first, __last, __n, __hf, key_equal(), __a) 9642: { } 9642: 9642: unordered_set(initializer_list __l, 9642: size_type __n, 9642: const allocator_type& __a) 9642: : unordered_set(__l, __n, hasher(), key_equal(), __a) 9642: { } 9642: 9642: unordered_set(initializer_list __l, 9642: size_type __n, const hasher& __hf, 9642: const allocator_type& __a) 9642: : unordered_set(__l, __n, __hf, key_equal(), __a) 9642: { } 9642: 9642: 9642: unordered_set& 9642: operator=(const unordered_set&) = default; 9642: 9642: 9642: unordered_set& 9642: operator=(unordered_set&&) = default; 9642: # 290 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: unordered_set& 9642: operator=(initializer_list __l) 9642: { 9642: _M_h = __l; 9642: return *this; 9642: } 9642: 9642: 9642: allocator_type 9642: get_allocator() const noexcept 9642: { return _M_h.get_allocator(); } 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] bool 9642: empty() const noexcept 9642: { return _M_h.empty(); } 9642: 9642: 9642: size_type 9642: size() const noexcept 9642: { return _M_h.size(); } 9642: 9642: 9642: size_type 9642: max_size() const noexcept 9642: { return _M_h.max_size(); } 9642: # 326 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: iterator 9642: begin() noexcept 9642: { return _M_h.begin(); } 9642: 9642: const_iterator 9642: begin() const noexcept 9642: { return _M_h.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: iterator 9642: end() noexcept 9642: { return _M_h.end(); } 9642: 9642: const_iterator 9642: end() const noexcept 9642: { return _M_h.end(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_iterator 9642: cbegin() const noexcept 9642: { return _M_h.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: const_iterator 9642: cend() const noexcept 9642: { return _M_h.end(); } 9642: # 382 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: template 9642: std::pair 9642: emplace(_Args&&... __args) 9642: { return _M_h.emplace(std::forward<_Args>(__args)...); } 9642: # 408 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: template 9642: iterator 9642: emplace_hint(const_iterator __pos, _Args&&... __args) 9642: { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); } 9642: # 427 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: std::pair 9642: insert(const value_type& __x) 9642: { return _M_h.insert(__x); } 9642: 9642: std::pair 9642: insert(value_type&& __x) 9642: { return _M_h.insert(std::move(__x)); } 9642: # 456 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: iterator 9642: insert(const_iterator __hint, const value_type& __x) 9642: { return _M_h.insert(__hint, __x); } 9642: 9642: iterator 9642: insert(const_iterator __hint, value_type&& __x) 9642: { return _M_h.insert(__hint, std::move(__x)); } 9642: # 474 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: template 9642: void 9642: insert(_InputIterator __first, _InputIterator __last) 9642: { _M_h.insert(__first, __last); } 9642: # 486 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: void 9642: insert(initializer_list __l) 9642: { _M_h.insert(__l); } 9642: 9642: 9642: 9642: node_type 9642: extract(const_iterator __pos) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__pos != end())) __builtin_unreachable(); } while (false); 9642: return _M_h.extract(__pos); 9642: } 9642: 9642: 9642: node_type 9642: extract(const key_type& __key) 9642: { return _M_h.extract(__key); } 9642: 9642: 9642: insert_return_type 9642: insert(node_type&& __nh) 9642: { return _M_h._M_reinsert_node(std::move(__nh)); } 9642: 9642: 9642: iterator 9642: insert(const_iterator, node_type&& __nh) 9642: { return _M_h._M_reinsert_node(std::move(__nh)).position; } 9642: # 529 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: iterator 9642: erase(const_iterator __position) 9642: { return _M_h.erase(__position); } 9642: 9642: 9642: iterator 9642: erase(iterator __position) 9642: { return _M_h.erase(__position); } 9642: # 551 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: size_type 9642: erase(const key_type& __x) 9642: { return _M_h.erase(__x); } 9642: # 569 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: iterator 9642: erase(const_iterator __first, const_iterator __last) 9642: { return _M_h.erase(__first, __last); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: clear() noexcept 9642: { _M_h.clear(); } 9642: # 592 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: void 9642: swap(unordered_set& __x) 9642: noexcept( noexcept(_M_h.swap(__x._M_h)) ) 9642: { _M_h.swap(__x._M_h); } 9642: 9642: 9642: template 9642: friend class std::_Hash_merge_helper; 9642: 9642: template 9642: void 9642: merge(unordered_set<_Value, _H2, _P2, _Alloc>& __source) 9642: { 9642: using _Merge_helper = _Hash_merge_helper; 9642: _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); 9642: } 9642: 9642: template 9642: void 9642: merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source) 9642: { merge(__source); } 9642: 9642: template 9642: void 9642: merge(unordered_multiset<_Value, _H2, _P2, _Alloc>& __source) 9642: { 9642: using _Merge_helper = _Hash_merge_helper; 9642: _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); 9642: } 9642: 9642: template 9642: void 9642: merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source) 9642: { merge(__source); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: hasher 9642: hash_function() const 9642: { return _M_h.hash_function(); } 9642: 9642: 9642: 9642: key_equal 9642: key_eq() const 9642: { return _M_h.key_eq(); } 9642: # 656 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: iterator 9642: find(const key_type& __x) 9642: { return _M_h.find(__x); } 9642: # 668 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: const_iterator 9642: find(const key_type& __x) const 9642: { return _M_h.find(__x); } 9642: # 691 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: size_type 9642: count(const key_type& __x) const 9642: { return _M_h.count(__x); } 9642: # 732 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: std::pair 9642: equal_range(const key_type& __x) 9642: { return _M_h.equal_range(__x); } 9642: # 744 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: std::pair 9642: equal_range(const key_type& __x) const 9642: { return _M_h.equal_range(__x); } 9642: # 760 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: size_type 9642: bucket_count() const noexcept 9642: { return _M_h.bucket_count(); } 9642: 9642: 9642: size_type 9642: max_bucket_count() const noexcept 9642: { return _M_h.max_bucket_count(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_type 9642: bucket_size(size_type __n) const 9642: { return _M_h.bucket_size(__n); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_type 9642: bucket(const key_type& __key) const 9642: { return _M_h.bucket(__key); } 9642: # 794 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: local_iterator 9642: begin(size_type __n) 9642: { return _M_h.begin(__n); } 9642: 9642: const_local_iterator 9642: begin(size_type __n) const 9642: { return _M_h.begin(__n); } 9642: 9642: const_local_iterator 9642: cbegin(size_type __n) const 9642: { return _M_h.cbegin(__n); } 9642: # 814 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: local_iterator 9642: end(size_type __n) 9642: { return _M_h.end(__n); } 9642: 9642: const_local_iterator 9642: end(size_type __n) const 9642: { return _M_h.end(__n); } 9642: 9642: const_local_iterator 9642: cend(size_type __n) const 9642: { return _M_h.cend(__n); } 9642: 9642: 9642: 9642: 9642: 9642: float 9642: load_factor() const noexcept 9642: { return _M_h.load_factor(); } 9642: 9642: 9642: 9642: float 9642: max_load_factor() const noexcept 9642: { return _M_h.max_load_factor(); } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: max_load_factor(float __z) 9642: { _M_h.max_load_factor(__z); } 9642: # 855 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: void 9642: rehash(size_type __n) 9642: { _M_h.rehash(__n); } 9642: # 866 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: void 9642: reserve(size_type __n) 9642: { _M_h.reserve(__n); } 9642: 9642: template 9642: friend bool 9642: operator==(const unordered_set<_Value1, _Hash1, _Pred1, _Alloc1>&, 9642: const unordered_set<_Value1, _Hash1, _Pred1, _Alloc1>&); 9642: }; 9642: 9642: 9642: 9642: template::value_type>, 9642: typename _Pred = 9642: equal_to::value_type>, 9642: typename _Allocator = 9642: allocator::value_type>, 9642: typename = _RequireInputIter<_InputIterator>, 9642: typename = _RequireNotAllocatorOrIntegral<_Hash>, 9642: typename = _RequireNotAllocator<_Pred>, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_set(_InputIterator, _InputIterator, 9642: unordered_set::size_type = {}, 9642: _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) 9642: -> unordered_set::value_type, 9642: _Hash, _Pred, _Allocator>; 9642: 9642: template, 9642: typename _Pred = equal_to<_Tp>, 9642: typename _Allocator = allocator<_Tp>, 9642: typename = _RequireNotAllocatorOrIntegral<_Hash>, 9642: typename = _RequireNotAllocator<_Pred>, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_set(initializer_list<_Tp>, 9642: unordered_set::size_type = {}, 9642: _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) 9642: -> unordered_set<_Tp, _Hash, _Pred, _Allocator>; 9642: 9642: template, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_set(_InputIterator, _InputIterator, 9642: unordered_set::size_type, _Allocator) 9642: -> unordered_set::value_type, 9642: hash< 9642: typename iterator_traits<_InputIterator>::value_type>, 9642: equal_to< 9642: typename iterator_traits<_InputIterator>::value_type>, 9642: _Allocator>; 9642: 9642: template, 9642: typename = _RequireNotAllocatorOrIntegral<_Hash>, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_set(_InputIterator, _InputIterator, 9642: unordered_set::size_type, 9642: _Hash, _Allocator) 9642: -> unordered_set::value_type, 9642: _Hash, 9642: equal_to< 9642: typename iterator_traits<_InputIterator>::value_type>, 9642: _Allocator>; 9642: 9642: template> 9642: unordered_set(initializer_list<_Tp>, 9642: unordered_set::size_type, _Allocator) 9642: -> unordered_set<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>; 9642: 9642: template, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_set(initializer_list<_Tp>, 9642: unordered_set::size_type, _Hash, _Allocator) 9642: -> unordered_set<_Tp, _Hash, equal_to<_Tp>, _Allocator>; 9642: # 968 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: template, 9642: typename _Pred = equal_to<_Value>, 9642: typename _Alloc = allocator<_Value>> 9642: class unordered_multiset 9642: { 9642: typedef __umset_hashtable<_Value, _Hash, _Pred, _Alloc> _Hashtable; 9642: _Hashtable _M_h; 9642: 9642: public: 9642: 9642: 9642: 9642: typedef typename _Hashtable::key_type key_type; 9642: typedef typename _Hashtable::value_type value_type; 9642: typedef typename _Hashtable::hasher hasher; 9642: typedef typename _Hashtable::key_equal key_equal; 9642: typedef typename _Hashtable::allocator_type allocator_type; 9642: 9642: 9642: 9642: 9642: typedef typename _Hashtable::pointer pointer; 9642: typedef typename _Hashtable::const_pointer const_pointer; 9642: typedef typename _Hashtable::reference reference; 9642: typedef typename _Hashtable::const_reference const_reference; 9642: typedef typename _Hashtable::iterator iterator; 9642: typedef typename _Hashtable::const_iterator const_iterator; 9642: typedef typename _Hashtable::local_iterator local_iterator; 9642: typedef typename _Hashtable::const_local_iterator const_local_iterator; 9642: typedef typename _Hashtable::size_type size_type; 9642: typedef typename _Hashtable::difference_type difference_type; 9642: 9642: 9642: 9642: using node_type = typename _Hashtable::node_type; 9642: 9642: 9642: 9642: 9642: 9642: unordered_multiset() = default; 9642: # 1018 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: explicit 9642: unordered_multiset(size_type __n, 9642: const hasher& __hf = hasher(), 9642: const key_equal& __eql = key_equal(), 9642: const allocator_type& __a = allocator_type()) 9642: : _M_h(__n, __hf, __eql, __a) 9642: { } 9642: # 1039 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: template 9642: unordered_multiset(_InputIterator __first, _InputIterator __last, 9642: size_type __n = 0, 9642: const hasher& __hf = hasher(), 9642: const key_equal& __eql = key_equal(), 9642: const allocator_type& __a = allocator_type()) 9642: : _M_h(__first, __last, __n, __hf, __eql, __a) 9642: { } 9642: 9642: 9642: unordered_multiset(const unordered_multiset&) = default; 9642: 9642: 9642: unordered_multiset(unordered_multiset&&) = default; 9642: # 1065 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: unordered_multiset(initializer_list __l, 9642: size_type __n = 0, 9642: const hasher& __hf = hasher(), 9642: const key_equal& __eql = key_equal(), 9642: const allocator_type& __a = allocator_type()) 9642: : _M_h(__l, __n, __hf, __eql, __a) 9642: { } 9642: 9642: 9642: unordered_multiset& 9642: operator=(const unordered_multiset&) = default; 9642: 9642: 9642: unordered_multiset& 9642: operator=(unordered_multiset&&) = default; 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: unordered_multiset(const allocator_type& __a) 9642: : _M_h(__a) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: unordered_multiset(const unordered_multiset& __umset, 9642: const allocator_type& __a) 9642: : _M_h(__umset._M_h, __a) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: unordered_multiset(unordered_multiset&& __umset, 9642: const allocator_type& __a) 9642: noexcept( noexcept(_Hashtable(std::move(__umset._M_h), __a)) ) 9642: : _M_h(std::move(__umset._M_h), __a) 9642: { } 9642: 9642: unordered_multiset(size_type __n, const allocator_type& __a) 9642: : unordered_multiset(__n, hasher(), key_equal(), __a) 9642: { } 9642: 9642: unordered_multiset(size_type __n, const hasher& __hf, 9642: const allocator_type& __a) 9642: : unordered_multiset(__n, __hf, key_equal(), __a) 9642: { } 9642: 9642: template 9642: unordered_multiset(_InputIterator __first, _InputIterator __last, 9642: size_type __n, 9642: const allocator_type& __a) 9642: : unordered_multiset(__first, __last, __n, hasher(), key_equal(), __a) 9642: { } 9642: 9642: template 9642: unordered_multiset(_InputIterator __first, _InputIterator __last, 9642: size_type __n, const hasher& __hf, 9642: const allocator_type& __a) 9642: : unordered_multiset(__first, __last, __n, __hf, key_equal(), __a) 9642: { } 9642: 9642: unordered_multiset(initializer_list __l, 9642: size_type __n, 9642: const allocator_type& __a) 9642: : unordered_multiset(__l, __n, hasher(), key_equal(), __a) 9642: { } 9642: 9642: unordered_multiset(initializer_list __l, 9642: size_type __n, const hasher& __hf, 9642: const allocator_type& __a) 9642: : unordered_multiset(__l, __n, __hf, key_equal(), __a) 9642: { } 9642: # 1157 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: unordered_multiset& 9642: operator=(initializer_list __l) 9642: { 9642: _M_h = __l; 9642: return *this; 9642: } 9642: 9642: 9642: allocator_type 9642: get_allocator() const noexcept 9642: { return _M_h.get_allocator(); } 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] bool 9642: empty() const noexcept 9642: { return _M_h.empty(); } 9642: 9642: 9642: size_type 9642: size() const noexcept 9642: { return _M_h.size(); } 9642: 9642: 9642: size_type 9642: max_size() const noexcept 9642: { return _M_h.max_size(); } 9642: # 1193 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: iterator 9642: begin() noexcept 9642: { return _M_h.begin(); } 9642: 9642: const_iterator 9642: begin() const noexcept 9642: { return _M_h.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: iterator 9642: end() noexcept 9642: { return _M_h.end(); } 9642: 9642: const_iterator 9642: end() const noexcept 9642: { return _M_h.end(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_iterator 9642: cbegin() const noexcept 9642: { return _M_h.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: const_iterator 9642: cend() const noexcept 9642: { return _M_h.end(); } 9642: # 1241 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: template 9642: iterator 9642: emplace(_Args&&... __args) 9642: { return _M_h.emplace(std::forward<_Args>(__args)...); } 9642: # 1263 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: template 9642: iterator 9642: emplace_hint(const_iterator __pos, _Args&&... __args) 9642: { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); } 9642: # 1276 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: iterator 9642: insert(const value_type& __x) 9642: { return _M_h.insert(__x); } 9642: 9642: iterator 9642: insert(value_type&& __x) 9642: { return _M_h.insert(std::move(__x)); } 9642: # 1302 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: iterator 9642: insert(const_iterator __hint, const value_type& __x) 9642: { return _M_h.insert(__hint, __x); } 9642: 9642: iterator 9642: insert(const_iterator __hint, value_type&& __x) 9642: { return _M_h.insert(__hint, std::move(__x)); } 9642: # 1319 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: template 9642: void 9642: insert(_InputIterator __first, _InputIterator __last) 9642: { _M_h.insert(__first, __last); } 9642: # 1331 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: void 9642: insert(initializer_list __l) 9642: { _M_h.insert(__l); } 9642: 9642: 9642: 9642: node_type 9642: extract(const_iterator __pos) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__pos != end())) __builtin_unreachable(); } while (false); 9642: return _M_h.extract(__pos); 9642: } 9642: 9642: 9642: node_type 9642: extract(const key_type& __key) 9642: { return _M_h.extract(__key); } 9642: 9642: 9642: iterator 9642: insert(node_type&& __nh) 9642: { return _M_h._M_reinsert_node_multi(cend(), std::move(__nh)); } 9642: 9642: 9642: iterator 9642: insert(const_iterator __hint, node_type&& __nh) 9642: { return _M_h._M_reinsert_node_multi(__hint, std::move(__nh)); } 9642: # 1375 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: iterator 9642: erase(const_iterator __position) 9642: { return _M_h.erase(__position); } 9642: 9642: 9642: iterator 9642: erase(iterator __position) 9642: { return _M_h.erase(__position); } 9642: # 1398 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: size_type 9642: erase(const key_type& __x) 9642: { return _M_h.erase(__x); } 9642: # 1418 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: iterator 9642: erase(const_iterator __first, const_iterator __last) 9642: { return _M_h.erase(__first, __last); } 9642: # 1429 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: void 9642: clear() noexcept 9642: { _M_h.clear(); } 9642: # 1442 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: void 9642: swap(unordered_multiset& __x) 9642: noexcept( noexcept(_M_h.swap(__x._M_h)) ) 9642: { _M_h.swap(__x._M_h); } 9642: 9642: 9642: template 9642: friend class std::_Hash_merge_helper; 9642: 9642: template 9642: void 9642: merge(unordered_multiset<_Value, _H2, _P2, _Alloc>& __source) 9642: { 9642: using _Merge_helper 9642: = _Hash_merge_helper; 9642: _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); 9642: } 9642: 9642: template 9642: void 9642: merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source) 9642: { merge(__source); } 9642: 9642: template 9642: void 9642: merge(unordered_set<_Value, _H2, _P2, _Alloc>& __source) 9642: { 9642: using _Merge_helper 9642: = _Hash_merge_helper; 9642: _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); 9642: } 9642: 9642: template 9642: void 9642: merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source) 9642: { merge(__source); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: hasher 9642: hash_function() const 9642: { return _M_h.hash_function(); } 9642: 9642: 9642: 9642: key_equal 9642: key_eq() const 9642: { return _M_h.key_eq(); } 9642: # 1508 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: iterator 9642: find(const key_type& __x) 9642: { return _M_h.find(__x); } 9642: # 1520 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: const_iterator 9642: find(const key_type& __x) const 9642: { return _M_h.find(__x); } 9642: # 1539 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: size_type 9642: count(const key_type& __x) const 9642: { return _M_h.count(__x); } 9642: # 1577 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: std::pair 9642: equal_range(const key_type& __x) 9642: { return _M_h.equal_range(__x); } 9642: # 1589 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: std::pair 9642: equal_range(const key_type& __x) const 9642: { return _M_h.equal_range(__x); } 9642: # 1605 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: size_type 9642: bucket_count() const noexcept 9642: { return _M_h.bucket_count(); } 9642: 9642: 9642: size_type 9642: max_bucket_count() const noexcept 9642: { return _M_h.max_bucket_count(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_type 9642: bucket_size(size_type __n) const 9642: { return _M_h.bucket_size(__n); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_type 9642: bucket(const key_type& __key) const 9642: { return _M_h.bucket(__key); } 9642: # 1639 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: local_iterator 9642: begin(size_type __n) 9642: { return _M_h.begin(__n); } 9642: 9642: const_local_iterator 9642: begin(size_type __n) const 9642: { return _M_h.begin(__n); } 9642: 9642: const_local_iterator 9642: cbegin(size_type __n) const 9642: { return _M_h.cbegin(__n); } 9642: # 1659 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: local_iterator 9642: end(size_type __n) 9642: { return _M_h.end(__n); } 9642: 9642: const_local_iterator 9642: end(size_type __n) const 9642: { return _M_h.end(__n); } 9642: 9642: const_local_iterator 9642: cend(size_type __n) const 9642: { return _M_h.cend(__n); } 9642: 9642: 9642: 9642: 9642: 9642: float 9642: load_factor() const noexcept 9642: { return _M_h.load_factor(); } 9642: 9642: 9642: 9642: float 9642: max_load_factor() const noexcept 9642: { return _M_h.max_load_factor(); } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: max_load_factor(float __z) 9642: { _M_h.max_load_factor(__z); } 9642: # 1700 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: void 9642: rehash(size_type __n) 9642: { _M_h.rehash(__n); } 9642: # 1711 "/usr/include/c++/13/bits/unordered_set.h" 3 9642: void 9642: reserve(size_type __n) 9642: { _M_h.reserve(__n); } 9642: 9642: template 9642: friend bool 9642: operator==(const unordered_multiset<_Value1, _Hash1, _Pred1, _Alloc1>&, 9642: const unordered_multiset<_Value1, _Hash1, _Pred1, _Alloc1>&); 9642: }; 9642: 9642: 9642: 9642: 9642: template::value_type>, 9642: typename _Pred = 9642: equal_to::value_type>, 9642: typename _Allocator = 9642: allocator::value_type>, 9642: typename = _RequireInputIter<_InputIterator>, 9642: typename = _RequireNotAllocatorOrIntegral<_Hash>, 9642: typename = _RequireNotAllocator<_Pred>, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_multiset(_InputIterator, _InputIterator, 9642: unordered_multiset::size_type = {}, 9642: _Hash = _Hash(), _Pred = _Pred(), 9642: _Allocator = _Allocator()) 9642: -> unordered_multiset::value_type, 9642: _Hash, _Pred, _Allocator>; 9642: 9642: template, 9642: typename _Pred = equal_to<_Tp>, 9642: typename _Allocator = allocator<_Tp>, 9642: typename = _RequireNotAllocatorOrIntegral<_Hash>, 9642: typename = _RequireNotAllocator<_Pred>, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_multiset(initializer_list<_Tp>, 9642: unordered_multiset::size_type = {}, 9642: _Hash = _Hash(), _Pred = _Pred(), 9642: _Allocator = _Allocator()) 9642: -> unordered_multiset<_Tp, _Hash, _Pred, _Allocator>; 9642: 9642: template, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_multiset(_InputIterator, _InputIterator, 9642: unordered_multiset::size_type, _Allocator) 9642: -> unordered_multiset::value_type, 9642: hash::value_type>, 9642: equal_to::value_type>, 9642: _Allocator>; 9642: 9642: template, 9642: typename = _RequireNotAllocatorOrIntegral<_Hash>, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_multiset(_InputIterator, _InputIterator, 9642: unordered_multiset::size_type, 9642: _Hash, _Allocator) 9642: -> unordered_multiset::value_type, 9642: _Hash, 9642: equal_to< 9642: typename 9642: iterator_traits<_InputIterator>::value_type>, 9642: _Allocator>; 9642: 9642: template> 9642: unordered_multiset(initializer_list<_Tp>, 9642: unordered_multiset::size_type, _Allocator) 9642: -> unordered_multiset<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>; 9642: 9642: template, 9642: typename = _RequireAllocator<_Allocator>> 9642: unordered_multiset(initializer_list<_Tp>, 9642: unordered_multiset::size_type, _Hash, _Allocator) 9642: -> unordered_multiset<_Tp, _Hash, equal_to<_Tp>, _Allocator>; 9642: 9642: 9642: 9642: template 9642: inline void 9642: swap(unordered_set<_Value, _Hash, _Pred, _Alloc>& __x, 9642: unordered_set<_Value, _Hash, _Pred, _Alloc>& __y) 9642: noexcept(noexcept(__x.swap(__y))) 9642: { __x.swap(__y); } 9642: 9642: template 9642: inline void 9642: swap(unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, 9642: unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) 9642: noexcept(noexcept(__x.swap(__y))) 9642: { __x.swap(__y); } 9642: 9642: template 9642: inline bool 9642: operator==(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x, 9642: const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y) 9642: { return __x._M_h._M_equal(__y._M_h); } 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x, 9642: const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y) 9642: { return !(__x == __y); } 9642: 9642: 9642: template 9642: inline bool 9642: operator==(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, 9642: const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) 9642: { return __x._M_h._M_equal(__y._M_h); } 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, 9642: const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) 9642: { return !(__x == __y); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Hash_merge_helper< 9642: std::unordered_set<_Val, _Hash1, _Eq1, _Alloc>, _Hash2, _Eq2> 9642: { 9642: private: 9642: template 9642: using unordered_set = std::unordered_set<_Tp...>; 9642: template 9642: using unordered_multiset = std::unordered_multiset<_Tp...>; 9642: 9642: friend unordered_set<_Val, _Hash1, _Eq1, _Alloc>; 9642: 9642: static auto& 9642: _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set) 9642: { return __set._M_h; } 9642: 9642: static auto& 9642: _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set) 9642: { return __set._M_h; } 9642: }; 9642: 9642: 9642: template 9642: struct _Hash_merge_helper< 9642: std::unordered_multiset<_Val, _Hash1, _Eq1, _Alloc>, 9642: _Hash2, _Eq2> 9642: { 9642: private: 9642: template 9642: using unordered_set = std::unordered_set<_Tp...>; 9642: template 9642: using unordered_multiset = std::unordered_multiset<_Tp...>; 9642: 9642: friend unordered_multiset<_Val, _Hash1, _Eq1, _Alloc>; 9642: 9642: static auto& 9642: _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set) 9642: { return __set._M_h; } 9642: 9642: static auto& 9642: _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set) 9642: { return __set._M_h; } 9642: }; 9642: 9642: 9642: 9642: } 9642: # 42 "/usr/include/c++/13/unordered_set" 2 3 9642: # 51 "/usr/include/c++/13/unordered_set" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: namespace pmr 9642: { 9642: template, 9642: typename _Pred = std::equal_to<_Key>> 9642: using unordered_set 9642: = std::unordered_set<_Key, _Hash, _Pred, 9642: polymorphic_allocator<_Key>>; 9642: template, 9642: typename _Pred = std::equal_to<_Key>> 9642: using unordered_multiset 9642: = std::unordered_multiset<_Key, _Hash, _Pred, 9642: polymorphic_allocator<_Key>>; 9642: } 9642: 9642: } 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/optional" 1 3 9642: # 33 "/usr/include/c++/13/optional" 3 9642: 9642: # 34 "/usr/include/c++/13/optional" 3 9642: # 54 "/usr/include/c++/13/optional" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 71 "/usr/include/c++/13/optional" 3 9642: template 9642: class optional; 9642: 9642: 9642: struct nullopt_t 9642: { 9642: 9642: 9642: 9642: 9642: 9642: enum class _Construct { _Token }; 9642: 9642: 9642: explicit constexpr nullopt_t(_Construct) noexcept { } 9642: }; 9642: 9642: 9642: inline constexpr nullopt_t nullopt { nullopt_t::_Construct::_Token }; 9642: 9642: template struct _Optional_func { _Fn& _M_f; }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: class bad_optional_access : public exception 9642: { 9642: public: 9642: bad_optional_access() = default; 9642: virtual ~bad_optional_access() = default; 9642: 9642: const char* what() const noexcept override 9642: { return "bad optional access"; } 9642: }; 9642: 9642: 9642: [[__noreturn__]] inline void 9642: __throw_bad_optional_access() 9642: { (throw (bad_optional_access())); } 9642: 9642: 9642: 9642: template 9642: struct _Optional_payload_base 9642: { 9642: using _Stored_type = remove_const_t<_Tp>; 9642: 9642: _Optional_payload_base() = default; 9642: ~_Optional_payload_base() = default; 9642: 9642: template 9642: constexpr 9642: _Optional_payload_base(in_place_t __tag, _Args&&... __args) 9642: : _M_payload(__tag, std::forward<_Args>(__args)...), 9642: _M_engaged(true) 9642: { } 9642: 9642: template 9642: constexpr 9642: _Optional_payload_base(std::initializer_list<_Up> __il, 9642: _Args&&... __args) 9642: : _M_payload(__il, std::forward<_Args>(__args)...), 9642: _M_engaged(true) 9642: { } 9642: 9642: 9642: 9642: constexpr 9642: _Optional_payload_base(bool , 9642: const _Optional_payload_base& __other) 9642: { 9642: if (__other._M_engaged) 9642: this->_M_construct(__other._M_get()); 9642: } 9642: 9642: 9642: 9642: constexpr 9642: _Optional_payload_base(bool , 9642: _Optional_payload_base&& __other) 9642: { 9642: if (__other._M_engaged) 9642: this->_M_construct(std::move(__other._M_get())); 9642: } 9642: 9642: 9642: 9642: _Optional_payload_base(const _Optional_payload_base&) = default; 9642: 9642: 9642: 9642: _Optional_payload_base(_Optional_payload_base&&) = default; 9642: 9642: _Optional_payload_base& 9642: operator=(const _Optional_payload_base&) = default; 9642: 9642: _Optional_payload_base& 9642: operator=(_Optional_payload_base&&) = default; 9642: 9642: 9642: constexpr void 9642: _M_copy_assign(const _Optional_payload_base& __other) 9642: { 9642: if (this->_M_engaged && __other._M_engaged) 9642: this->_M_get() = __other._M_get(); 9642: else 9642: { 9642: if (__other._M_engaged) 9642: this->_M_construct(__other._M_get()); 9642: else 9642: this->_M_reset(); 9642: } 9642: } 9642: 9642: 9642: constexpr void 9642: _M_move_assign(_Optional_payload_base&& __other) 9642: noexcept(__and_v, 9642: is_nothrow_move_assignable<_Tp>>) 9642: { 9642: if (this->_M_engaged && __other._M_engaged) 9642: this->_M_get() = std::move(__other._M_get()); 9642: else 9642: { 9642: if (__other._M_engaged) 9642: this->_M_construct(std::move(__other._M_get())); 9642: else 9642: this->_M_reset(); 9642: } 9642: } 9642: 9642: struct _Empty_byte { }; 9642: 9642: template> 9642: union _Storage 9642: { 9642: constexpr _Storage() noexcept : _M_empty() { } 9642: 9642: template 9642: constexpr 9642: _Storage(in_place_t, _Args&&... __args) 9642: : _M_value(std::forward<_Args>(__args)...) 9642: { } 9642: 9642: template 9642: constexpr 9642: _Storage(std::initializer_list<_Vp> __il, _Args&&... __args) 9642: : _M_value(__il, std::forward<_Args>(__args)...) 9642: { } 9642: # 232 "/usr/include/c++/13/optional" 3 9642: _Empty_byte _M_empty; 9642: _Up _M_value; 9642: }; 9642: 9642: template 9642: union _Storage<_Up, false> 9642: { 9642: constexpr _Storage() noexcept : _M_empty() { } 9642: 9642: template 9642: constexpr 9642: _Storage(in_place_t, _Args&&... __args) 9642: : _M_value(std::forward<_Args>(__args)...) 9642: { } 9642: 9642: template 9642: constexpr 9642: _Storage(std::initializer_list<_Vp> __il, _Args&&... __args) 9642: : _M_value(__il, std::forward<_Args>(__args)...) 9642: { } 9642: # 263 "/usr/include/c++/13/optional" 3 9642: ~_Storage() { } 9642: 9642: _Empty_byte _M_empty; 9642: _Up _M_value; 9642: }; 9642: 9642: _Storage<_Stored_type> _M_payload; 9642: 9642: bool _M_engaged = false; 9642: 9642: template 9642: constexpr void 9642: _M_construct(_Args&&... __args) 9642: noexcept(is_nothrow_constructible_v<_Stored_type, _Args...>) 9642: { 9642: std::_Construct(std::__addressof(this->_M_payload._M_value), 9642: std::forward<_Args>(__args)...); 9642: this->_M_engaged = true; 9642: } 9642: 9642: constexpr void 9642: _M_destroy() noexcept 9642: { 9642: _M_engaged = false; 9642: _M_payload._M_value.~_Stored_type(); 9642: } 9642: # 305 "/usr/include/c++/13/optional" 3 9642: constexpr _Tp& 9642: _M_get() noexcept 9642: { return this->_M_payload._M_value; } 9642: 9642: constexpr const _Tp& 9642: _M_get() const noexcept 9642: { return this->_M_payload._M_value; } 9642: 9642: 9642: constexpr void 9642: _M_reset() noexcept 9642: { 9642: if (this->_M_engaged) 9642: _M_destroy(); 9642: else 9642: this->_M_engaged = false; 9642: } 9642: }; 9642: 9642: 9642: template , 9642: bool = 9642: is_trivially_copy_assignable_v<_Tp> 9642: && is_trivially_copy_constructible_v<_Tp>, 9642: bool = 9642: is_trivially_move_assignable_v<_Tp> 9642: && is_trivially_move_constructible_v<_Tp>> 9642: struct _Optional_payload; 9642: 9642: 9642: template 9642: struct _Optional_payload<_Tp, true, true, true> 9642: : _Optional_payload_base<_Tp> 9642: { 9642: using _Optional_payload_base<_Tp>::_Optional_payload_base; 9642: 9642: _Optional_payload() = default; 9642: }; 9642: 9642: 9642: template 9642: struct _Optional_payload<_Tp, true, false, true> 9642: : _Optional_payload_base<_Tp> 9642: { 9642: using _Optional_payload_base<_Tp>::_Optional_payload_base; 9642: 9642: _Optional_payload() = default; 9642: ~_Optional_payload() = default; 9642: _Optional_payload(const _Optional_payload&) = default; 9642: _Optional_payload(_Optional_payload&&) = default; 9642: _Optional_payload& operator=(_Optional_payload&&) = default; 9642: 9642: 9642: constexpr 9642: _Optional_payload& 9642: operator=(const _Optional_payload& __other) 9642: { 9642: this->_M_copy_assign(__other); 9642: return *this; 9642: } 9642: }; 9642: 9642: 9642: template 9642: struct _Optional_payload<_Tp, true, true, false> 9642: : _Optional_payload_base<_Tp> 9642: { 9642: using _Optional_payload_base<_Tp>::_Optional_payload_base; 9642: 9642: _Optional_payload() = default; 9642: ~_Optional_payload() = default; 9642: _Optional_payload(const _Optional_payload&) = default; 9642: _Optional_payload(_Optional_payload&&) = default; 9642: _Optional_payload& operator=(const _Optional_payload&) = default; 9642: 9642: 9642: constexpr 9642: _Optional_payload& 9642: operator=(_Optional_payload&& __other) 9642: noexcept(__and_v, 9642: is_nothrow_move_assignable<_Tp>>) 9642: { 9642: this->_M_move_assign(std::move(__other)); 9642: return *this; 9642: } 9642: }; 9642: 9642: 9642: template 9642: struct _Optional_payload<_Tp, true, false, false> 9642: : _Optional_payload_base<_Tp> 9642: { 9642: using _Optional_payload_base<_Tp>::_Optional_payload_base; 9642: 9642: _Optional_payload() = default; 9642: ~_Optional_payload() = default; 9642: _Optional_payload(const _Optional_payload&) = default; 9642: _Optional_payload(_Optional_payload&&) = default; 9642: 9642: 9642: constexpr 9642: _Optional_payload& 9642: operator=(const _Optional_payload& __other) 9642: { 9642: this->_M_copy_assign(__other); 9642: return *this; 9642: } 9642: 9642: 9642: constexpr 9642: _Optional_payload& 9642: operator=(_Optional_payload&& __other) 9642: noexcept(__and_v, 9642: is_nothrow_move_assignable<_Tp>>) 9642: { 9642: this->_M_move_assign(std::move(__other)); 9642: return *this; 9642: } 9642: }; 9642: 9642: 9642: template 9642: struct _Optional_payload<_Tp, false, _Copy, _Move> 9642: : _Optional_payload<_Tp, true, false, false> 9642: { 9642: 9642: using _Optional_payload<_Tp, true, false, false>::_Optional_payload; 9642: _Optional_payload() = default; 9642: _Optional_payload(const _Optional_payload&) = default; 9642: _Optional_payload(_Optional_payload&&) = default; 9642: _Optional_payload& operator=(const _Optional_payload&) = default; 9642: _Optional_payload& operator=(_Optional_payload&&) = default; 9642: 9642: 9642: ~_Optional_payload() { this->_M_reset(); } 9642: }; 9642: 9642: 9642: 9642: template 9642: class _Optional_base_impl 9642: { 9642: protected: 9642: using _Stored_type = remove_const_t<_Tp>; 9642: 9642: 9642: 9642: template 9642: constexpr void 9642: _M_construct(_Args&&... __args) 9642: noexcept(is_nothrow_constructible_v<_Stored_type, _Args...>) 9642: { 9642: static_cast<_Dp*>(this)->_M_payload._M_construct( 9642: std::forward<_Args>(__args)...); 9642: } 9642: 9642: constexpr void 9642: _M_destruct() noexcept 9642: { static_cast<_Dp*>(this)->_M_payload._M_destroy(); } 9642: 9642: 9642: constexpr void 9642: _M_reset() noexcept 9642: { static_cast<_Dp*>(this)->_M_payload._M_reset(); } 9642: 9642: constexpr bool _M_is_engaged() const noexcept 9642: { return static_cast(this)->_M_payload._M_engaged; } 9642: 9642: 9642: constexpr _Tp& 9642: _M_get() noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(this->_M_is_engaged())) __builtin_unreachable(); } while (false); 9642: return static_cast<_Dp*>(this)->_M_payload._M_get(); 9642: } 9642: 9642: constexpr const _Tp& 9642: _M_get() const noexcept 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(this->_M_is_engaged())) __builtin_unreachable(); } while (false); 9642: return static_cast(this)->_M_payload._M_get(); 9642: } 9642: }; 9642: # 509 "/usr/include/c++/13/optional" 3 9642: template, 9642: bool = is_trivially_move_constructible_v<_Tp>> 9642: struct _Optional_base 9642: : _Optional_base_impl<_Tp, _Optional_base<_Tp>> 9642: { 9642: 9642: constexpr _Optional_base() = default; 9642: 9642: 9642: template, bool> = false> 9642: constexpr explicit 9642: _Optional_base(in_place_t, _Args&&... __args) 9642: : _M_payload(in_place, std::forward<_Args>(__args)...) 9642: { } 9642: 9642: template&, 9642: _Args...>, bool> = false> 9642: constexpr explicit 9642: _Optional_base(in_place_t, 9642: initializer_list<_Up> __il, 9642: _Args&&... __args) 9642: : _M_payload(in_place, __il, std::forward<_Args>(__args)...) 9642: { } 9642: 9642: 9642: constexpr 9642: _Optional_base(const _Optional_base& __other) 9642: : _M_payload(__other._M_payload._M_engaged, __other._M_payload) 9642: { } 9642: 9642: constexpr 9642: _Optional_base(_Optional_base&& __other) 9642: noexcept(is_nothrow_move_constructible_v<_Tp>) 9642: : _M_payload(__other._M_payload._M_engaged, 9642: std::move(__other._M_payload)) 9642: { } 9642: 9642: 9642: _Optional_base& operator=(const _Optional_base&) = default; 9642: _Optional_base& operator=(_Optional_base&&) = default; 9642: 9642: _Optional_payload<_Tp> _M_payload; 9642: }; 9642: 9642: template 9642: struct _Optional_base<_Tp, false, true> 9642: : _Optional_base_impl<_Tp, _Optional_base<_Tp>> 9642: { 9642: 9642: constexpr _Optional_base() = default; 9642: 9642: 9642: template, bool> = false> 9642: constexpr explicit 9642: _Optional_base(in_place_t, _Args&&... __args) 9642: : _M_payload(in_place, std::forward<_Args>(__args)...) 9642: { } 9642: 9642: template&, 9642: _Args...>, bool> = false> 9642: constexpr explicit 9642: _Optional_base(in_place_t, 9642: initializer_list<_Up> __il, 9642: _Args... __args) 9642: : _M_payload(in_place, __il, std::forward<_Args>(__args)...) 9642: { } 9642: 9642: 9642: constexpr _Optional_base(const _Optional_base& __other) 9642: : _M_payload(__other._M_payload._M_engaged, __other._M_payload) 9642: { } 9642: 9642: constexpr _Optional_base(_Optional_base&& __other) = default; 9642: 9642: 9642: _Optional_base& operator=(const _Optional_base&) = default; 9642: _Optional_base& operator=(_Optional_base&&) = default; 9642: 9642: _Optional_payload<_Tp> _M_payload; 9642: }; 9642: 9642: template 9642: struct _Optional_base<_Tp, true, false> 9642: : _Optional_base_impl<_Tp, _Optional_base<_Tp>> 9642: { 9642: 9642: constexpr _Optional_base() = default; 9642: 9642: 9642: template, bool> = false> 9642: constexpr explicit 9642: _Optional_base(in_place_t, _Args&&... __args) 9642: : _M_payload(in_place, std::forward<_Args>(__args)...) 9642: { } 9642: 9642: template&, 9642: _Args...>, bool> = false> 9642: constexpr explicit 9642: _Optional_base(in_place_t, 9642: initializer_list<_Up> __il, 9642: _Args&&... __args) 9642: : _M_payload(in_place, __il, std::forward<_Args>(__args)...) 9642: { } 9642: 9642: 9642: constexpr _Optional_base(const _Optional_base& __other) = default; 9642: 9642: constexpr 9642: _Optional_base(_Optional_base&& __other) 9642: noexcept(is_nothrow_move_constructible_v<_Tp>) 9642: : _M_payload(__other._M_payload._M_engaged, 9642: std::move(__other._M_payload)) 9642: { } 9642: 9642: 9642: _Optional_base& operator=(const _Optional_base&) = default; 9642: _Optional_base& operator=(_Optional_base&&) = default; 9642: 9642: _Optional_payload<_Tp> _M_payload; 9642: }; 9642: 9642: template 9642: struct _Optional_base<_Tp, true, true> 9642: : _Optional_base_impl<_Tp, _Optional_base<_Tp>> 9642: { 9642: 9642: constexpr _Optional_base() = default; 9642: 9642: 9642: template, bool> = false> 9642: constexpr explicit 9642: _Optional_base(in_place_t, _Args&&... __args) 9642: : _M_payload(in_place, std::forward<_Args>(__args)...) 9642: { } 9642: 9642: template&, 9642: _Args...>, bool> = false> 9642: constexpr explicit 9642: _Optional_base(in_place_t, 9642: initializer_list<_Up> __il, 9642: _Args&&... __args) 9642: : _M_payload(in_place, __il, std::forward<_Args>(__args)...) 9642: { } 9642: 9642: 9642: constexpr _Optional_base(const _Optional_base& __other) = default; 9642: constexpr _Optional_base(_Optional_base&& __other) = default; 9642: 9642: 9642: _Optional_base& operator=(const _Optional_base&) = default; 9642: _Optional_base& operator=(_Optional_base&&) = default; 9642: 9642: _Optional_payload<_Tp> _M_payload; 9642: }; 9642: 9642: template 9642: class optional; 9642: 9642: template 9642: inline constexpr bool __is_optional_v = false; 9642: template 9642: inline constexpr bool __is_optional_v> = true; 9642: 9642: template 9642: using __converts_from_optional = 9642: __or_&>, 9642: is_constructible<_Tp, optional<_Up>&>, 9642: is_constructible<_Tp, const optional<_Up>&&>, 9642: is_constructible<_Tp, optional<_Up>&&>, 9642: is_convertible&, _Tp>, 9642: is_convertible&, _Tp>, 9642: is_convertible&&, _Tp>, 9642: is_convertible&&, _Tp>>; 9642: 9642: template 9642: using __assigns_from_optional = 9642: __or_&>, 9642: is_assignable<_Tp&, optional<_Up>&>, 9642: is_assignable<_Tp&, const optional<_Up>&&>, 9642: is_assignable<_Tp&, optional<_Up>&&>>; 9642: 9642: 9642: 9642: 9642: template 9642: class optional 9642: : private _Optional_base<_Tp>, 9642: private _Enable_copy_move< 9642: 9642: is_copy_constructible_v<_Tp>, 9642: 9642: __and_v, is_copy_assignable<_Tp>>, 9642: 9642: is_move_constructible_v<_Tp>, 9642: 9642: __and_v, is_move_assignable<_Tp>>, 9642: 9642: optional<_Tp>> 9642: { 9642: static_assert(!is_same_v, nullopt_t>); 9642: static_assert(!is_same_v, in_place_t>); 9642: static_assert(is_object_v<_Tp> && !is_array_v<_Tp>); 9642: 9642: private: 9642: using _Base = _Optional_base<_Tp>; 9642: 9642: 9642: template 9642: using __not_self = __not_>>; 9642: template 9642: using __not_tag = __not_>>; 9642: template 9642: using _Requires = enable_if_t<__and_v<_Cond...>, bool>; 9642: 9642: public: 9642: using value_type = _Tp; 9642: 9642: constexpr optional() noexcept { } 9642: 9642: constexpr optional(nullopt_t) noexcept { } 9642: 9642: 9642: template, __not_tag<_Up>, 9642: is_constructible<_Tp, _Up>, 9642: is_convertible<_Up, _Tp>> = true> 9642: constexpr 9642: optional(_Up&& __t) 9642: noexcept(is_nothrow_constructible_v<_Tp, _Up>) 9642: : _Base(std::in_place, std::forward<_Up>(__t)) { } 9642: 9642: template, __not_tag<_Up>, 9642: is_constructible<_Tp, _Up>, 9642: __not_>> = false> 9642: explicit constexpr 9642: optional(_Up&& __t) 9642: noexcept(is_nothrow_constructible_v<_Tp, _Up>) 9642: : _Base(std::in_place, std::forward<_Up>(__t)) { } 9642: 9642: template>, 9642: is_constructible<_Tp, const _Up&>, 9642: is_convertible, 9642: __not_<__converts_from_optional<_Tp, _Up>>> = true> 9642: constexpr 9642: optional(const optional<_Up>& __t) 9642: noexcept(is_nothrow_constructible_v<_Tp, const _Up&>) 9642: { 9642: if (__t) 9642: emplace(*__t); 9642: } 9642: 9642: template>, 9642: is_constructible<_Tp, const _Up&>, 9642: __not_>, 9642: __not_<__converts_from_optional<_Tp, _Up>>> = false> 9642: explicit constexpr 9642: optional(const optional<_Up>& __t) 9642: noexcept(is_nothrow_constructible_v<_Tp, const _Up&>) 9642: { 9642: if (__t) 9642: emplace(*__t); 9642: } 9642: 9642: template>, 9642: is_constructible<_Tp, _Up>, 9642: is_convertible<_Up, _Tp>, 9642: __not_<__converts_from_optional<_Tp, _Up>>> = true> 9642: constexpr 9642: optional(optional<_Up>&& __t) 9642: noexcept(is_nothrow_constructible_v<_Tp, _Up>) 9642: { 9642: if (__t) 9642: emplace(std::move(*__t)); 9642: } 9642: 9642: template>, 9642: is_constructible<_Tp, _Up>, 9642: __not_>, 9642: __not_<__converts_from_optional<_Tp, _Up>>> = false> 9642: explicit constexpr 9642: optional(optional<_Up>&& __t) 9642: noexcept(is_nothrow_constructible_v<_Tp, _Up>) 9642: { 9642: if (__t) 9642: emplace(std::move(*__t)); 9642: } 9642: 9642: template> = false> 9642: explicit constexpr 9642: optional(in_place_t, _Args&&... __args) 9642: noexcept(is_nothrow_constructible_v<_Tp, _Args...>) 9642: : _Base(std::in_place, std::forward<_Args>(__args)...) { } 9642: 9642: template&, 9642: _Args...>> = false> 9642: explicit constexpr 9642: optional(in_place_t, initializer_list<_Up> __il, _Args&&... __args) 9642: noexcept(is_nothrow_constructible_v<_Tp, initializer_list<_Up>&, 9642: _Args...>) 9642: : _Base(std::in_place, __il, std::forward<_Args>(__args)...) { } 9642: 9642: 9642: 9642: optional& 9642: operator=(nullopt_t) noexcept 9642: { 9642: this->_M_reset(); 9642: return *this; 9642: } 9642: 9642: template 9642: 9642: enable_if_t<__and_v<__not_self<_Up>, 9642: __not_<__and_, 9642: is_same<_Tp, decay_t<_Up>>>>, 9642: is_constructible<_Tp, _Up>, 9642: is_assignable<_Tp&, _Up>>, 9642: optional&> 9642: operator=(_Up&& __u) 9642: noexcept(__and_v, 9642: is_nothrow_assignable<_Tp&, _Up>>) 9642: { 9642: if (this->_M_is_engaged()) 9642: this->_M_get() = std::forward<_Up>(__u); 9642: else 9642: this->_M_construct(std::forward<_Up>(__u)); 9642: 9642: return *this; 9642: } 9642: 9642: template 9642: 9642: enable_if_t<__and_v<__not_>, 9642: is_constructible<_Tp, const _Up&>, 9642: is_assignable<_Tp&, const _Up&>, 9642: __not_<__converts_from_optional<_Tp, _Up>>, 9642: __not_<__assigns_from_optional<_Tp, _Up>>>, 9642: optional&> 9642: operator=(const optional<_Up>& __u) 9642: noexcept(__and_v, 9642: is_nothrow_assignable<_Tp&, const _Up&>>) 9642: { 9642: if (__u) 9642: { 9642: if (this->_M_is_engaged()) 9642: this->_M_get() = *__u; 9642: else 9642: this->_M_construct(*__u); 9642: } 9642: else 9642: { 9642: this->_M_reset(); 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: 9642: enable_if_t<__and_v<__not_>, 9642: is_constructible<_Tp, _Up>, 9642: is_assignable<_Tp&, _Up>, 9642: __not_<__converts_from_optional<_Tp, _Up>>, 9642: __not_<__assigns_from_optional<_Tp, _Up>>>, 9642: optional&> 9642: operator=(optional<_Up>&& __u) 9642: noexcept(__and_v, 9642: is_nothrow_assignable<_Tp&, _Up>>) 9642: { 9642: if (__u) 9642: { 9642: if (this->_M_is_engaged()) 9642: this->_M_get() = std::move(*__u); 9642: else 9642: this->_M_construct(std::move(*__u)); 9642: } 9642: else 9642: { 9642: this->_M_reset(); 9642: } 9642: 9642: return *this; 9642: } 9642: 9642: template 9642: 9642: enable_if_t, _Tp&> 9642: emplace(_Args&&... __args) 9642: noexcept(is_nothrow_constructible_v<_Tp, _Args...>) 9642: { 9642: this->_M_reset(); 9642: this->_M_construct(std::forward<_Args>(__args)...); 9642: return this->_M_get(); 9642: } 9642: 9642: template 9642: 9642: enable_if_t&, _Args...>, 9642: _Tp&> 9642: emplace(initializer_list<_Up> __il, _Args&&... __args) 9642: noexcept(is_nothrow_constructible_v<_Tp, initializer_list<_Up>&, 9642: _Args...>) 9642: { 9642: this->_M_reset(); 9642: this->_M_construct(__il, std::forward<_Args>(__args)...); 9642: return this->_M_get(); 9642: } 9642: 9642: 9642: 9642: 9642: void 9642: swap(optional& __other) 9642: noexcept(is_nothrow_move_constructible_v<_Tp> 9642: && is_nothrow_swappable_v<_Tp>) 9642: { 9642: using std::swap; 9642: 9642: if (this->_M_is_engaged() && __other._M_is_engaged()) 9642: swap(this->_M_get(), __other._M_get()); 9642: else if (this->_M_is_engaged()) 9642: { 9642: __other._M_construct(std::move(this->_M_get())); 9642: this->_M_destruct(); 9642: } 9642: else if (__other._M_is_engaged()) 9642: { 9642: this->_M_construct(std::move(__other._M_get())); 9642: __other._M_destruct(); 9642: } 9642: } 9642: 9642: 9642: constexpr const _Tp* 9642: operator->() const noexcept 9642: { return std::__addressof(this->_M_get()); } 9642: 9642: constexpr _Tp* 9642: operator->() noexcept 9642: { return std::__addressof(this->_M_get()); } 9642: 9642: constexpr const _Tp& 9642: operator*() const& noexcept 9642: { return this->_M_get(); } 9642: 9642: constexpr _Tp& 9642: operator*()& noexcept 9642: { return this->_M_get(); } 9642: 9642: constexpr _Tp&& 9642: operator*()&& noexcept 9642: { return std::move(this->_M_get()); } 9642: 9642: constexpr const _Tp&& 9642: operator*() const&& noexcept 9642: { return std::move(this->_M_get()); } 9642: 9642: constexpr explicit operator bool() const noexcept 9642: { return this->_M_is_engaged(); } 9642: 9642: constexpr bool has_value() const noexcept 9642: { return this->_M_is_engaged(); } 9642: 9642: constexpr const _Tp& 9642: value() const& 9642: { 9642: if (this->_M_is_engaged()) 9642: return this->_M_get(); 9642: __throw_bad_optional_access(); 9642: } 9642: 9642: constexpr _Tp& 9642: value()& 9642: { 9642: if (this->_M_is_engaged()) 9642: return this->_M_get(); 9642: __throw_bad_optional_access(); 9642: } 9642: 9642: constexpr _Tp&& 9642: value()&& 9642: { 9642: if (this->_M_is_engaged()) 9642: return std::move(this->_M_get()); 9642: __throw_bad_optional_access(); 9642: } 9642: 9642: constexpr const _Tp&& 9642: value() const&& 9642: { 9642: if (this->_M_is_engaged()) 9642: return std::move(this->_M_get()); 9642: __throw_bad_optional_access(); 9642: } 9642: 9642: template 9642: constexpr _Tp 9642: value_or(_Up&& __u) const& 9642: { 9642: static_assert(is_copy_constructible_v<_Tp>); 9642: static_assert(is_convertible_v<_Up&&, _Tp>); 9642: 9642: if (this->_M_is_engaged()) 9642: return this->_M_get(); 9642: else 9642: return static_cast<_Tp>(std::forward<_Up>(__u)); 9642: } 9642: 9642: template 9642: constexpr _Tp 9642: value_or(_Up&& __u) && 9642: { 9642: static_assert(is_move_constructible_v<_Tp>); 9642: static_assert(is_convertible_v<_Up&&, _Tp>); 9642: 9642: if (this->_M_is_engaged()) 9642: return std::move(this->_M_get()); 9642: else 9642: return static_cast<_Tp>(std::forward<_Up>(__u)); 9642: } 9642: # 1184 "/usr/include/c++/13/optional" 3 9642: void reset() noexcept { this->_M_reset(); } 9642: 9642: private: 9642: # 1197 "/usr/include/c++/13/optional" 3 9642: }; 9642: 9642: template 9642: using __optional_relop_t = 9642: enable_if_t::value, bool>; 9642: 9642: template 9642: using __optional_eq_t = __optional_relop_t< 9642: decltype(std::declval() == std::declval()) 9642: >; 9642: 9642: template 9642: using __optional_ne_t = __optional_relop_t< 9642: decltype(std::declval() != std::declval()) 9642: >; 9642: 9642: template 9642: using __optional_lt_t = __optional_relop_t< 9642: decltype(std::declval() < std::declval()) 9642: >; 9642: 9642: template 9642: using __optional_gt_t = __optional_relop_t< 9642: decltype(std::declval() > std::declval()) 9642: >; 9642: 9642: template 9642: using __optional_le_t = __optional_relop_t< 9642: decltype(std::declval() <= std::declval()) 9642: >; 9642: 9642: template 9642: using __optional_ge_t = __optional_relop_t< 9642: decltype(std::declval() >= std::declval()) 9642: >; 9642: 9642: 9642: template 9642: constexpr auto 9642: operator==(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) 9642: -> __optional_eq_t<_Tp, _Up> 9642: { 9642: return static_cast(__lhs) == static_cast(__rhs) 9642: && (!__lhs || *__lhs == *__rhs); 9642: } 9642: 9642: template 9642: constexpr auto 9642: operator!=(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) 9642: -> __optional_ne_t<_Tp, _Up> 9642: { 9642: return static_cast(__lhs) != static_cast(__rhs) 9642: || (static_cast(__lhs) && *__lhs != *__rhs); 9642: } 9642: 9642: template 9642: constexpr auto 9642: operator<(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) 9642: -> __optional_lt_t<_Tp, _Up> 9642: { 9642: return static_cast(__rhs) && (!__lhs || *__lhs < *__rhs); 9642: } 9642: 9642: template 9642: constexpr auto 9642: operator>(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) 9642: -> __optional_gt_t<_Tp, _Up> 9642: { 9642: return static_cast(__lhs) && (!__rhs || *__lhs > *__rhs); 9642: } 9642: 9642: template 9642: constexpr auto 9642: operator<=(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) 9642: -> __optional_le_t<_Tp, _Up> 9642: { 9642: return !__lhs || (static_cast(__rhs) && *__lhs <= *__rhs); 9642: } 9642: 9642: template 9642: constexpr auto 9642: operator>=(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) 9642: -> __optional_ge_t<_Tp, _Up> 9642: { 9642: return !__rhs || (static_cast(__lhs) && *__lhs >= *__rhs); 9642: } 9642: # 1294 "/usr/include/c++/13/optional" 3 9642: template 9642: constexpr bool 9642: operator==(const optional<_Tp>& __lhs, nullopt_t) noexcept 9642: { return !__lhs; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: constexpr bool 9642: operator==(nullopt_t, const optional<_Tp>& __rhs) noexcept 9642: { return !__rhs; } 9642: 9642: template 9642: constexpr bool 9642: operator!=(const optional<_Tp>& __lhs, nullopt_t) noexcept 9642: { return static_cast(__lhs); } 9642: 9642: template 9642: constexpr bool 9642: operator!=(nullopt_t, const optional<_Tp>& __rhs) noexcept 9642: { return static_cast(__rhs); } 9642: 9642: template 9642: constexpr bool 9642: operator<(const optional<_Tp>& , nullopt_t) noexcept 9642: { return false; } 9642: 9642: template 9642: constexpr bool 9642: operator<(nullopt_t, const optional<_Tp>& __rhs) noexcept 9642: { return static_cast(__rhs); } 9642: 9642: template 9642: constexpr bool 9642: operator>(const optional<_Tp>& __lhs, nullopt_t) noexcept 9642: { return static_cast(__lhs); } 9642: 9642: template 9642: constexpr bool 9642: operator>(nullopt_t, const optional<_Tp>& ) noexcept 9642: { return false; } 9642: 9642: template 9642: constexpr bool 9642: operator<=(const optional<_Tp>& __lhs, nullopt_t) noexcept 9642: { return !__lhs; } 9642: 9642: template 9642: constexpr bool 9642: operator<=(nullopt_t, const optional<_Tp>& ) noexcept 9642: { return true; } 9642: 9642: template 9642: constexpr bool 9642: operator>=(const optional<_Tp>& , nullopt_t) noexcept 9642: { return true; } 9642: 9642: template 9642: constexpr bool 9642: operator>=(nullopt_t, const optional<_Tp>& __rhs) noexcept 9642: { return !__rhs; } 9642: 9642: 9642: 9642: template 9642: constexpr auto 9642: operator==(const optional<_Tp>& __lhs, const _Up& __rhs) 9642: -> __optional_eq_t<_Tp, _Up> 9642: { return __lhs && *__lhs == __rhs; } 9642: 9642: template 9642: constexpr auto 9642: operator==(const _Up& __lhs, const optional<_Tp>& __rhs) 9642: -> __optional_eq_t<_Up, _Tp> 9642: { return __rhs && __lhs == *__rhs; } 9642: 9642: template 9642: constexpr auto 9642: operator!=(const optional<_Tp>& __lhs, const _Up& __rhs) 9642: -> __optional_ne_t<_Tp, _Up> 9642: { return !__lhs || *__lhs != __rhs; } 9642: 9642: template 9642: constexpr auto 9642: operator!=(const _Up& __lhs, const optional<_Tp>& __rhs) 9642: -> __optional_ne_t<_Up, _Tp> 9642: { return !__rhs || __lhs != *__rhs; } 9642: 9642: template 9642: constexpr auto 9642: operator<(const optional<_Tp>& __lhs, const _Up& __rhs) 9642: -> __optional_lt_t<_Tp, _Up> 9642: { return !__lhs || *__lhs < __rhs; } 9642: 9642: template 9642: constexpr auto 9642: operator<(const _Up& __lhs, const optional<_Tp>& __rhs) 9642: -> __optional_lt_t<_Up, _Tp> 9642: { return __rhs && __lhs < *__rhs; } 9642: 9642: template 9642: constexpr auto 9642: operator>(const optional<_Tp>& __lhs, const _Up& __rhs) 9642: -> __optional_gt_t<_Tp, _Up> 9642: { return __lhs && *__lhs > __rhs; } 9642: 9642: template 9642: constexpr auto 9642: operator>(const _Up& __lhs, const optional<_Tp>& __rhs) 9642: -> __optional_gt_t<_Up, _Tp> 9642: { return !__rhs || __lhs > *__rhs; } 9642: 9642: template 9642: constexpr auto 9642: operator<=(const optional<_Tp>& __lhs, const _Up& __rhs) 9642: -> __optional_le_t<_Tp, _Up> 9642: { return !__lhs || *__lhs <= __rhs; } 9642: 9642: template 9642: constexpr auto 9642: operator<=(const _Up& __lhs, const optional<_Tp>& __rhs) 9642: -> __optional_le_t<_Up, _Tp> 9642: { return __rhs && __lhs <= *__rhs; } 9642: 9642: template 9642: constexpr auto 9642: operator>=(const optional<_Tp>& __lhs, const _Up& __rhs) 9642: -> __optional_ge_t<_Tp, _Up> 9642: { return __lhs && *__lhs >= __rhs; } 9642: 9642: template 9642: constexpr auto 9642: operator>=(const _Up& __lhs, const optional<_Tp>& __rhs) 9642: -> __optional_ge_t<_Up, _Tp> 9642: { return !__rhs || __lhs >= *__rhs; } 9642: # 1447 "/usr/include/c++/13/optional" 3 9642: template 9642: 9642: inline enable_if_t && is_swappable_v<_Tp>> 9642: swap(optional<_Tp>& __lhs, optional<_Tp>& __rhs) 9642: noexcept(noexcept(__lhs.swap(__rhs))) 9642: { __lhs.swap(__rhs); } 9642: 9642: template 9642: enable_if_t && is_swappable_v<_Tp>)> 9642: swap(optional<_Tp>&, optional<_Tp>&) = delete; 9642: 9642: template 9642: constexpr 9642: enable_if_t, _Tp>, 9642: optional>> 9642: make_optional(_Tp&& __t) 9642: noexcept(is_nothrow_constructible_v>, _Tp>) 9642: { return optional>{ std::forward<_Tp>(__t) }; } 9642: 9642: template 9642: constexpr 9642: enable_if_t, 9642: optional<_Tp>> 9642: make_optional(_Args&&... __args) 9642: noexcept(is_nothrow_constructible_v<_Tp, _Args...>) 9642: { return optional<_Tp>{ in_place, std::forward<_Args>(__args)... }; } 9642: 9642: template 9642: constexpr 9642: enable_if_t&, _Args...>, 9642: optional<_Tp>> 9642: make_optional(initializer_list<_Up> __il, _Args&&... __args) 9642: noexcept(is_nothrow_constructible_v<_Tp, initializer_list<_Up>&, _Args...>) 9642: { return optional<_Tp>{ in_place, __il, std::forward<_Args>(__args)... }; } 9642: 9642: 9642: 9642: template, 9642: bool = __poison_hash<_Up>::__enable_hash_call> 9642: struct __optional_hash_call_base 9642: { 9642: size_t 9642: operator()(const optional<_Tp>& __t) const 9642: noexcept(noexcept(hash<_Up>{}(*__t))) 9642: { 9642: 9642: 9642: constexpr size_t __magic_disengaged_hash = static_cast(-3333); 9642: return __t ? hash<_Up>{}(*__t) : __magic_disengaged_hash; 9642: } 9642: }; 9642: 9642: template 9642: struct __optional_hash_call_base<_Tp, _Up, false> {}; 9642: 9642: template 9642: struct hash> 9642: : private __poison_hash>, 9642: public __optional_hash_call_base<_Tp> 9642: { 9642: using result_type [[__deprecated__]] = size_t; 9642: using argument_type [[__deprecated__]] = optional<_Tp>; 9642: }; 9642: 9642: template 9642: struct __is_fast_hash>> : __is_fast_hash> 9642: { }; 9642: 9642: 9642: 9642: 9642: template optional(_Tp) -> optional<_Tp>; 9642: 9642: 9642: 9642: } 9642: # 15 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 2 9642: 9642: # 1 "/usr/include/c++/13/utility" 1 3 9642: # 58 "/usr/include/c++/13/utility" 3 9642: 9642: # 59 "/usr/include/c++/13/utility" 3 9642: # 68 "/usr/include/c++/13/utility" 3 9642: # 1 "/usr/include/c++/13/bits/stl_relops.h" 1 3 9642: # 62 "/usr/include/c++/13/bits/stl_relops.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: namespace rel_ops 9642: { 9642: # 86 "/usr/include/c++/13/bits/stl_relops.h" 3 9642: template 9642: inline bool 9642: operator!=(const _Tp& __x, const _Tp& __y) 9642: { return !(__x == __y); } 9642: # 99 "/usr/include/c++/13/bits/stl_relops.h" 3 9642: template 9642: inline bool 9642: operator>(const _Tp& __x, const _Tp& __y) 9642: { return __y < __x; } 9642: # 112 "/usr/include/c++/13/bits/stl_relops.h" 3 9642: template 9642: inline bool 9642: operator<=(const _Tp& __x, const _Tp& __y) 9642: { return !(__y < __x); } 9642: # 125 "/usr/include/c++/13/bits/stl_relops.h" 3 9642: template 9642: inline bool 9642: operator>=(const _Tp& __x, const _Tp& __y) 9642: { return !(__x < __y); } 9642: } 9642: 9642: 9642: } 9642: # 69 "/usr/include/c++/13/utility" 2 3 9642: # 82 "/usr/include/c++/13/utility" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 94 "/usr/include/c++/13/utility" 3 9642: template 9642: 9642: inline _Tp 9642: exchange(_Tp& __obj, _Up&& __new_val) 9642: noexcept(__and_, 9642: is_nothrow_assignable<_Tp&, _Up>>::value) 9642: { return std::__exchange(__obj, std::forward<_Up>(__new_val)); } 9642: 9642: 9642: 9642: 9642: template 9642: [[nodiscard]] 9642: constexpr add_const_t<_Tp>& 9642: as_const(_Tp& __t) noexcept 9642: { return __t; } 9642: 9642: template 9642: void as_const(const _Tp&&) = delete; 9642: # 224 "/usr/include/c++/13/utility" 3 9642: 9642: } 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 1 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h" 1 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h" 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 1 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rocksdb_namespace.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 18 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/status.h" 1 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/status.h" 9642: 9642: # 31 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/status.h" 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 1 9642: # 19 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: 9642: 9642: # 1 "/usr/include/c++/13/cassert" 1 3 9642: # 41 "/usr/include/c++/13/cassert" 3 9642: 9642: # 42 "/usr/include/c++/13/cassert" 3 9642: 9642: 9642: # 1 "/usr/include/assert.h" 1 3 4 9642: # 66 "/usr/include/assert.h" 3 4 9642: extern "C" { 9642: 9642: 9642: extern void __assert_fail (const char *__assertion, const char *__file, 9642: unsigned int __line, const char *__function) 9642: noexcept (true) __attribute__ ((__noreturn__)); 9642: 9642: 9642: extern void __assert_perror_fail (int __errnum, const char *__file, 9642: unsigned int __line, const char *__function) 9642: noexcept (true) __attribute__ ((__noreturn__)); 9642: 9642: 9642: 9642: 9642: extern void __assert (const char *__assertion, const char *__file, int __line) 9642: noexcept (true) __attribute__ ((__noreturn__)); 9642: 9642: 9642: } 9642: # 45 "/usr/include/c++/13/cassert" 2 3 9642: # 22 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 2 9642: 9642: # 1 "/usr/include/c++/13/cstdio" 1 3 9642: # 39 "/usr/include/c++/13/cstdio" 3 9642: 9642: # 40 "/usr/include/c++/13/cstdio" 3 9642: # 24 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 2 9642: # 1 "/usr/include/c++/13/cstring" 1 3 9642: # 39 "/usr/include/c++/13/cstring" 3 9642: 9642: # 40 "/usr/include/c++/13/cstring" 3 9642: 9642: 9642: # 1 "/usr/include/string.h" 1 3 4 9642: # 26 "/usr/include/string.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 9642: # 27 "/usr/include/string.h" 2 3 4 9642: 9642: extern "C" { 9642: 9642: 9642: 9642: 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 34 "/usr/include/string.h" 2 3 4 9642: # 43 "/usr/include/string.h" 3 4 9642: extern void *memcpy (void *__restrict __dest, const void *__restrict __src, 9642: size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern void *memmove (void *__dest, const void *__src, size_t __n) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: 9642: 9642: extern void *memccpy (void *__restrict __dest, const void *__restrict __src, 9642: int __c, size_t __n) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__access__ (__write_only__, 1, 4))); 9642: 9642: 9642: 9642: 9642: extern void *memset (void *__s, int __c, size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int memcmp (const void *__s1, const void *__s2, size_t __n) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 9642: # 80 "/usr/include/string.h" 3 4 9642: extern int __memcmpeq (const void *__s1, const void *__s2, size_t __n) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: extern "C++" 9642: { 9642: extern void *memchr (void *__s, int __c, size_t __n) 9642: noexcept (true) __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 9642: extern const void *memchr (const void *__s, int __c, size_t __n) 9642: noexcept (true) __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) void * 9642: memchr (void *__s, int __c, size_t __n) noexcept (true) 9642: { 9642: return __builtin_memchr (__s, __c, __n); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const void * 9642: memchr (const void *__s, int __c, size_t __n) noexcept (true) 9642: { 9642: return __builtin_memchr (__s, __c, __n); 9642: } 9642: 9642: } 9642: # 115 "/usr/include/string.h" 3 4 9642: extern "C++" void *rawmemchr (void *__s, int __c) 9642: noexcept (true) __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 9642: extern "C++" const void *rawmemchr (const void *__s, int __c) 9642: noexcept (true) __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern "C++" void *memrchr (void *__s, int __c, size_t __n) 9642: noexcept (true) __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) 9642: __attribute__ ((__access__ (__read_only__, 1, 3))); 9642: extern "C++" const void *memrchr (const void *__s, int __c, size_t __n) 9642: noexcept (true) __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) 9642: __attribute__ ((__access__ (__read_only__, 1, 3))); 9642: # 141 "/usr/include/string.h" 3 4 9642: extern char *strcpy (char *__restrict __dest, const char *__restrict __src) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: extern char *strncpy (char *__restrict __dest, 9642: const char *__restrict __src, size_t __n) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern char *strcat (char *__restrict __dest, const char *__restrict __src) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: extern char *strncat (char *__restrict __dest, const char *__restrict __src, 9642: size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int strcmp (const char *__s1, const char *__s2) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: extern int strncmp (const char *__s1, const char *__s2, size_t __n) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int strcoll (const char *__s1, const char *__s2) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: extern size_t strxfrm (char *__restrict __dest, 9642: const char *__restrict __src, size_t __n) 9642: noexcept (true) __attribute__ ((__nonnull__ (2))) __attribute__ ((__access__ (__write_only__, 1, 3))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int strcoll_l (const char *__s1, const char *__s2, locale_t __l) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3))); 9642: 9642: 9642: extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n, 9642: locale_t __l) noexcept (true) __attribute__ ((__nonnull__ (2, 4))) 9642: __attribute__ ((__access__ (__write_only__, 1, 3))); 9642: 9642: 9642: 9642: 9642: 9642: extern char *strdup (const char *__s) 9642: noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern char *strndup (const char *__string, size_t __n) 9642: noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1))); 9642: # 224 "/usr/include/string.h" 3 4 9642: extern "C++" 9642: { 9642: extern char *strchr (char *__s, int __c) 9642: noexcept (true) __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 9642: extern const char *strchr (const char *__s, int __c) 9642: noexcept (true) __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * 9642: strchr (char *__s, int __c) noexcept (true) 9642: { 9642: return __builtin_strchr (__s, __c); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * 9642: strchr (const char *__s, int __c) noexcept (true) 9642: { 9642: return __builtin_strchr (__s, __c); 9642: } 9642: 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern "C++" 9642: { 9642: extern char *strrchr (char *__s, int __c) 9642: noexcept (true) __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 9642: extern const char *strrchr (const char *__s, int __c) 9642: noexcept (true) __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * 9642: strrchr (char *__s, int __c) noexcept (true) 9642: { 9642: return __builtin_strrchr (__s, __c); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * 9642: strrchr (const char *__s, int __c) noexcept (true) 9642: { 9642: return __builtin_strrchr (__s, __c); 9642: } 9642: 9642: } 9642: # 281 "/usr/include/string.h" 3 4 9642: extern "C++" char *strchrnul (char *__s, int __c) 9642: noexcept (true) __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 9642: extern "C++" const char *strchrnul (const char *__s, int __c) 9642: noexcept (true) __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 9642: # 293 "/usr/include/string.h" 3 4 9642: extern size_t strcspn (const char *__s, const char *__reject) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern size_t strspn (const char *__s, const char *__accept) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern "C++" 9642: { 9642: extern char *strpbrk (char *__s, const char *__accept) 9642: noexcept (true) __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 9642: extern const char *strpbrk (const char *__s, const char *__accept) 9642: noexcept (true) __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * 9642: strpbrk (char *__s, const char *__accept) noexcept (true) 9642: { 9642: return __builtin_strpbrk (__s, __accept); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * 9642: strpbrk (const char *__s, const char *__accept) noexcept (true) 9642: { 9642: return __builtin_strpbrk (__s, __accept); 9642: } 9642: 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern "C++" 9642: { 9642: extern char *strstr (char *__haystack, const char *__needle) 9642: noexcept (true) __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 9642: extern const char *strstr (const char *__haystack, const char *__needle) 9642: noexcept (true) __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * 9642: strstr (char *__haystack, const char *__needle) noexcept (true) 9642: { 9642: return __builtin_strstr (__haystack, __needle); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * 9642: strstr (const char *__haystack, const char *__needle) noexcept (true) 9642: { 9642: return __builtin_strstr (__haystack, __needle); 9642: } 9642: 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern char *strtok (char *__restrict __s, const char *__restrict __delim) 9642: noexcept (true) __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: 9642: extern char *__strtok_r (char *__restrict __s, 9642: const char *__restrict __delim, 9642: char **__restrict __save_ptr) 9642: noexcept (true) __attribute__ ((__nonnull__ (2, 3))); 9642: 9642: extern char *strtok_r (char *__restrict __s, const char *__restrict __delim, 9642: char **__restrict __save_ptr) 9642: noexcept (true) __attribute__ ((__nonnull__ (2, 3))); 9642: 9642: 9642: 9642: 9642: 9642: extern "C++" char *strcasestr (char *__haystack, const char *__needle) 9642: noexcept (true) __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 9642: extern "C++" const char *strcasestr (const char *__haystack, 9642: const char *__needle) 9642: noexcept (true) __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 9642: # 389 "/usr/include/string.h" 3 4 9642: extern void *memmem (const void *__haystack, size_t __haystacklen, 9642: const void *__needle, size_t __needlelen) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 3))) 9642: __attribute__ ((__access__ (__read_only__, 1, 2))) 9642: __attribute__ ((__access__ (__read_only__, 3, 4))); 9642: 9642: 9642: 9642: extern void *__mempcpy (void *__restrict __dest, 9642: const void *__restrict __src, size_t __n) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: extern void *mempcpy (void *__restrict __dest, 9642: const void *__restrict __src, size_t __n) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: 9642: extern size_t strlen (const char *__s) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: extern size_t strnlen (const char *__string, size_t __maxlen) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: extern char *strerror (int __errnum) noexcept (true); 9642: # 444 "/usr/include/string.h" 3 4 9642: extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) 9642: noexcept (true) __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: 9642: 9642: 9642: 9642: extern const char *strerrordesc_np (int __err) noexcept (true); 9642: 9642: extern const char *strerrorname_np (int __err) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern char *strerror_l (int __errnum, locale_t __l) noexcept (true); 9642: 9642: 9642: 9642: # 1 "/usr/include/strings.h" 1 3 4 9642: # 23 "/usr/include/strings.h" 3 4 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 24 "/usr/include/strings.h" 2 3 4 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern "C" { 9642: 9642: 9642: 9642: extern int bcmp (const void *__s1, const void *__s2, size_t __n) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern void bcopy (const void *__src, void *__dest, size_t __n) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern void bzero (void *__s, size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern "C++" 9642: { 9642: extern char *index (char *__s, int __c) 9642: noexcept (true) __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 9642: extern const char *index (const char *__s, int __c) 9642: noexcept (true) __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * 9642: index (char *__s, int __c) noexcept (true) 9642: { 9642: return __builtin_index (__s, __c); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * 9642: index (const char *__s, int __c) noexcept (true) 9642: { 9642: return __builtin_index (__s, __c); 9642: } 9642: 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern "C++" 9642: { 9642: extern char *rindex (char *__s, int __c) 9642: noexcept (true) __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 9642: extern const char *rindex (const char *__s, int __c) 9642: noexcept (true) __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * 9642: rindex (char *__s, int __c) noexcept (true) 9642: { 9642: return __builtin_rindex (__s, __c); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * 9642: rindex (const char *__s, int __c) noexcept (true) 9642: { 9642: return __builtin_rindex (__s, __c); 9642: } 9642: 9642: } 9642: # 104 "/usr/include/strings.h" 3 4 9642: extern int ffs (int __i) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: 9642: extern int ffsl (long int __l) noexcept (true) __attribute__ ((__const__)); 9642: __extension__ extern int ffsll (long long int __ll) 9642: noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern int strcasecmp (const char *__s1, const char *__s2) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern int strncasecmp (const char *__s1, const char *__s2, size_t __n) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int strcasecmp_l (const char *__s1, const char *__s2, locale_t __loc) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3))); 9642: 9642: 9642: 9642: extern int strncasecmp_l (const char *__s1, const char *__s2, 9642: size_t __n, locale_t __loc) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4))); 9642: 9642: 9642: } 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/strings_fortified.h" 1 3 4 9642: # 22 "/usr/include/arm-linux-gnueabihf/bits/strings_fortified.h" 3 4 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void 9642: __attribute__ ((__leaf__)) bcopy (const void *__src, void *__dest, size_t __len) noexcept (true) 9642: { 9642: (void) __builtin___memmove_chk (__dest, __src, __len, 9642: __builtin_object_size (__dest, 0)); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void 9642: __attribute__ ((__leaf__)) bzero (void *__dest, size_t __len) noexcept (true) 9642: { 9642: (void) __builtin___memset_chk (__dest, '\0', __len, 9642: __builtin_object_size (__dest, 0)); 9642: } 9642: # 145 "/usr/include/strings.h" 2 3 4 9642: # 463 "/usr/include/string.h" 2 3 4 9642: 9642: 9642: 9642: extern void explicit_bzero (void *__s, size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1))) 9642: __attribute__ ((__access__ (__write_only__, 1, 2))); 9642: 9642: 9642: 9642: extern char *strsep (char **__restrict __stringp, 9642: const char *__restrict __delim) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: 9642: extern char *strsignal (int __sig) noexcept (true); 9642: 9642: 9642: 9642: extern const char *sigabbrev_np (int __sig) noexcept (true); 9642: 9642: 9642: extern const char *sigdescr_np (int __sig) noexcept (true); 9642: 9642: 9642: 9642: extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: extern char *stpcpy (char *__restrict __dest, const char *__restrict __src) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: extern char *__stpncpy (char *__restrict __dest, 9642: const char *__restrict __src, size_t __n) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: extern char *stpncpy (char *__restrict __dest, 9642: const char *__restrict __src, size_t __n) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: 9642: extern size_t strlcpy (char *__restrict __dest, 9642: const char *__restrict __src, size_t __n) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__access__ (__write_only__, 1, 3))); 9642: 9642: 9642: 9642: extern size_t strlcat (char *__restrict __dest, 9642: const char *__restrict __src, size_t __n) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__access__ (__read_write__, 1, 3))); 9642: 9642: 9642: 9642: 9642: extern int strverscmp (const char *__s1, const char *__s2) 9642: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: extern char *strfry (char *__string) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern void *memfrob (void *__s, size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1))) 9642: __attribute__ ((__access__ (__read_write__, 1, 2))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern "C++" char *basename (char *__filename) 9642: noexcept (true) __asm ("basename") __attribute__ ((__nonnull__ (1))); 9642: extern "C++" const char *basename (const char *__filename) 9642: noexcept (true) __asm ("basename") __attribute__ ((__nonnull__ (1))); 9642: # 548 "/usr/include/string.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/string_fortified.h" 1 3 4 9642: # 25 "/usr/include/arm-linux-gnueabihf/bits/string_fortified.h" 3 4 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void * 9642: __attribute__ ((__leaf__)) memcpy (void *__restrict __dest, const void *__restrict __src, size_t __len) noexcept (true) 9642: 9642: { 9642: return __builtin___memcpy_chk (__dest, __src, __len, 9642: __builtin_object_size (__dest, 0)); 9642: } 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void * 9642: __attribute__ ((__leaf__)) memmove (void *__dest, const void *__src, size_t __len) noexcept (true) 9642: { 9642: return __builtin___memmove_chk (__dest, __src, __len, 9642: __builtin_object_size (__dest, 0)); 9642: } 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void * 9642: __attribute__ ((__leaf__)) mempcpy (void *__restrict __dest, const void *__restrict __src, size_t __len) noexcept (true) 9642: 9642: { 9642: return __builtin___mempcpy_chk (__dest, __src, __len, 9642: __builtin_object_size (__dest, 0)); 9642: } 9642: # 56 "/usr/include/arm-linux-gnueabihf/bits/string_fortified.h" 3 4 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void * 9642: __attribute__ ((__leaf__)) memset (void *__dest, int __ch, size_t __len) noexcept (true) 9642: { 9642: return __builtin___memset_chk (__dest, __ch, __len, 9642: __builtin_object_size (__dest, 0)); 9642: } 9642: 9642: 9642: 9642: 9642: void __explicit_bzero_chk (void *__dest, size_t __len, size_t __destlen) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__access__ (__write_only__, 1, 2))); 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void 9642: __attribute__ ((__leaf__)) explicit_bzero (void *__dest, size_t __len) noexcept (true) 9642: { 9642: __explicit_bzero_chk (__dest, __len, __builtin_object_size (__dest, 0)); 9642: } 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * 9642: __attribute__ ((__leaf__)) strcpy (char *__restrict __dest, const char *__restrict __src) noexcept (true) 9642: { 9642: return __builtin___strcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1)); 9642: } 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * 9642: __attribute__ ((__leaf__)) stpcpy (char *__restrict __dest, const char *__restrict __src) noexcept (true) 9642: { 9642: return __builtin___stpcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1)); 9642: } 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * 9642: __attribute__ ((__leaf__)) strncpy (char *__restrict __dest, const char *__restrict __src, size_t __len) noexcept (true) 9642: 9642: { 9642: return __builtin___strncpy_chk (__dest, __src, __len, 9642: __builtin_object_size (__dest, 2 > 1)); 9642: } 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * 9642: __attribute__ ((__leaf__)) stpncpy (char *__dest, const char *__src, size_t __n) noexcept (true) 9642: { 9642: return __builtin___stpncpy_chk (__dest, __src, __n, 9642: __builtin_object_size (__dest, 2 > 1)); 9642: } 9642: # 127 "/usr/include/arm-linux-gnueabihf/bits/string_fortified.h" 3 4 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * 9642: __attribute__ ((__leaf__)) strcat (char *__restrict __dest, const char *__restrict __src) noexcept (true) 9642: { 9642: return __builtin___strcat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1)); 9642: } 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * 9642: __attribute__ ((__leaf__)) strncat (char *__restrict __dest, const char *__restrict __src, size_t __len) noexcept (true) 9642: 9642: { 9642: return __builtin___strncat_chk (__dest, __src, __len, 9642: __builtin_object_size (__dest, 2 > 1)); 9642: } 9642: 9642: 9642: extern size_t __strlcpy_chk (char *__dest, const char *__src, size_t __n, 9642: size_t __destlen) noexcept (true); 9642: extern size_t __strlcpy_alias (char *__dest, const char *__src, size_t __n) noexcept (true) __asm__ ("" "strlcpy") 9642: 9642: ; 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 9642: __attribute__ ((__leaf__)) strlcpy (char *__restrict __dest, const char *__restrict __src, size_t __n) noexcept (true) 9642: 9642: { 9642: if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1 9642: && (!__builtin_constant_p (__n > __builtin_object_size (__dest, 2 > 1)) 9642: || __n > __builtin_object_size (__dest, 2 > 1))) 9642: return __strlcpy_chk (__dest, __src, __n, __builtin_object_size (__dest, 2 > 1)); 9642: return __strlcpy_alias (__dest, __src, __n); 9642: } 9642: 9642: extern size_t __strlcat_chk (char *__dest, const char *__src, size_t __n, 9642: size_t __destlen) noexcept (true); 9642: extern size_t __strlcat_alias (char *__dest, const char *__src, size_t __n) noexcept (true) __asm__ ("" "strlcat") 9642: 9642: ; 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 9642: __attribute__ ((__leaf__)) strlcat (char *__restrict __dest, const char *__restrict __src, size_t __n) noexcept (true) 9642: 9642: { 9642: if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1 9642: && (!__builtin_constant_p (__n > __builtin_object_size (__dest, 2 > 1)) 9642: || __n > __builtin_object_size (__dest, 2 > 1))) 9642: return __strlcat_chk (__dest, __src, __n, __builtin_object_size (__dest, 2 > 1)); 9642: return __strlcat_alias (__dest, __src, __n); 9642: } 9642: # 549 "/usr/include/string.h" 2 3 4 9642: 9642: 9642: 9642: } 9642: # 43 "/usr/include/c++/13/cstring" 2 3 9642: # 71 "/usr/include/c++/13/cstring" 3 9642: extern "C++" 9642: { 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: using ::memchr; 9642: using ::memcmp; 9642: using ::memcpy; 9642: using ::memmove; 9642: using ::memset; 9642: using ::strcat; 9642: using ::strcmp; 9642: using ::strcoll; 9642: using ::strcpy; 9642: using ::strcspn; 9642: using ::strerror; 9642: using ::strlen; 9642: using ::strncat; 9642: using ::strncmp; 9642: using ::strncpy; 9642: using ::strspn; 9642: using ::strtok; 9642: using ::strxfrm; 9642: using ::strchr; 9642: using ::strpbrk; 9642: using ::strrchr; 9642: using ::strstr; 9642: # 122 "/usr/include/c++/13/cstring" 3 9642: 9642: } 9642: } 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 2 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cleanable.h" 1 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cleanable.h" 9642: 9642: 9642: 9642: 9642: 9642: # 13 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cleanable.h" 9642: namespace rocksdb { 9642: 9642: class Cleanable { 9642: public: 9642: Cleanable(); 9642: 9642: Cleanable(Cleanable&) = delete; 9642: Cleanable& operator=(Cleanable&) = delete; 9642: 9642: 9642: ~Cleanable(); 9642: 9642: 9642: Cleanable(Cleanable&&) noexcept; 9642: Cleanable& operator=(Cleanable&&) noexcept; 9642: 9642: 9642: 9642: 9642: 9642: 9642: using CleanupFunction = void (*)(void* arg1, void* arg2); 9642: 9642: 9642: void RegisterCleanup(CleanupFunction function, void* arg1, void* arg2); 9642: 9642: 9642: 9642: void DelegateCleanupsTo(Cleanable* other); 9642: 9642: 9642: inline void Reset() { 9642: DoCleanup(); 9642: cleanup_.function = nullptr; 9642: cleanup_.next = nullptr; 9642: } 9642: 9642: inline bool HasCleanups() { return cleanup_.function != nullptr; } 9642: 9642: protected: 9642: struct Cleanup { 9642: CleanupFunction function; 9642: void* arg1; 9642: void* arg2; 9642: Cleanup* next; 9642: }; 9642: Cleanup cleanup_; 9642: 9642: void RegisterCleanup(Cleanup* c); 9642: 9642: private: 9642: 9642: 9642: 9642: inline void DoCleanup() { 9642: if (cleanup_.function != nullptr) { 9642: (*cleanup_.function)(cleanup_.arg1, cleanup_.arg2); 9642: for (Cleanup* c = cleanup_.next; c != nullptr;) { 9642: (*c->function)(c->arg1, c->arg2); 9642: Cleanup* next = c->next; 9642: delete c; 9642: c = next; 9642: } 9642: } 9642: } 9642: }; 9642: # 89 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cleanable.h" 9642: class SharedCleanablePtr { 9642: public: 9642: 9642: SharedCleanablePtr() {} 9642: 9642: SharedCleanablePtr(const SharedCleanablePtr& from); 9642: SharedCleanablePtr(SharedCleanablePtr&& from) noexcept; 9642: SharedCleanablePtr& operator=(const SharedCleanablePtr& from); 9642: SharedCleanablePtr& operator=(SharedCleanablePtr&& from) noexcept; 9642: 9642: ~SharedCleanablePtr(); 9642: 9642: 9642: void Allocate(); 9642: 9642: void Reset(); 9642: 9642: Cleanable& operator*(); 9642: Cleanable* operator->(); 9642: 9642: Cleanable* get(); 9642: 9642: 9642: 9642: 9642: 9642: 9642: void RegisterCopyWith(Cleanable* target); 9642: 9642: 9642: 9642: 9642: void MoveAsCleanupTo(Cleanable* target); 9642: 9642: private: 9642: struct Impl; 9642: Impl* ptr_ = nullptr; 9642: }; 9642: 9642: } 9642: # 29 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: class Slice { 9642: public: 9642: 9642: Slice() : data_(""), size_(0) {} 9642: 9642: 9642: Slice(const char* d, size_t n) : data_(d), size_(n) {} 9642: 9642: 9642: 9642: Slice(const std::string& s) : data_(s.data()), size_(s.size()) {} 9642: 9642: 9642: 9642: Slice(const std::string_view& sv) : data_(sv.data()), size_(sv.size()) {} 9642: 9642: 9642: 9642: Slice(const char* s) : data_(s) { size_ = (s == nullptr) ? 0 : strlen(s); } 9642: 9642: 9642: 9642: Slice(const struct SliceParts& parts, std::string* buf); 9642: 9642: 9642: const char* data() const { return data_; } 9642: 9642: 9642: size_t size() const { return size_; } 9642: 9642: 9642: bool empty() const { return size_ == 0; } 9642: 9642: 9642: 9642: char operator[](size_t n) const { 9642: 9642: # 68 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: (static_cast ( 9642: # 68 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: n < size() 9642: # 68 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 68 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: "n < size()" 9642: # 68 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 68 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: ; 9642: return data_[n]; 9642: } 9642: 9642: 9642: void clear() { 9642: data_ = ""; 9642: size_ = 0; 9642: } 9642: 9642: 9642: void remove_prefix(size_t n) { 9642: 9642: # 80 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: (static_cast ( 9642: # 80 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: n <= size() 9642: # 80 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 80 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: "n <= size()" 9642: # 80 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 80 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: ; 9642: data_ += n; 9642: size_ -= n; 9642: } 9642: 9642: void remove_suffix(size_t n) { 9642: 9642: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: (static_cast ( 9642: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: n <= size() 9642: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: "n <= size()" 9642: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: ; 9642: size_ -= n; 9642: } 9642: 9642: 9642: 9642: std::string ToString(bool hex = false) const; 9642: 9642: 9642: std::string_view ToStringView() const { 9642: return std::string_view(data_, size_); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool DecodeHex(std::string* result) const; 9642: 9642: 9642: 9642: 9642: 9642: int compare(const Slice& b) const; 9642: 9642: 9642: bool starts_with(const Slice& x) const { 9642: return ((size_ >= x.size_) && (memcmp(data_, x.data_, x.size_) == 0)); 9642: } 9642: 9642: bool ends_with(const Slice& x) const { 9642: return ((size_ >= x.size_) && 9642: (memcmp(data_ + size_ - x.size_, x.data_, x.size_) == 0)); 9642: } 9642: 9642: 9642: size_t difference_offset(const Slice& b) const; 9642: 9642: 9642: const char* data_; 9642: size_t size_; 9642: 9642: 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: class PinnableSlice : public Slice, public Cleanable { 9642: public: 9642: PinnableSlice() { buf_ = &self_space_; } 9642: explicit PinnableSlice(std::string* buf) { buf_ = buf; } 9642: 9642: PinnableSlice(PinnableSlice&& other); 9642: PinnableSlice& operator=(PinnableSlice&& other); 9642: 9642: 9642: PinnableSlice(PinnableSlice&) = delete; 9642: PinnableSlice& operator=(PinnableSlice&) = delete; 9642: 9642: inline void PinSlice(const Slice& s, CleanupFunction f, void* arg1, 9642: void* arg2) { 9642: 9642: # 152 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: (static_cast ( 9642: # 152 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: !pinned_ 9642: # 152 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 152 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: "!pinned_" 9642: # 152 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 152 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: ; 9642: pinned_ = true; 9642: data_ = s.data(); 9642: size_ = s.size(); 9642: RegisterCleanup(f, arg1, arg2); 9642: 9642: # 157 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: (static_cast ( 9642: # 157 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: pinned_ 9642: # 157 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 157 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: "pinned_" 9642: # 157 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 157 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: ; 9642: } 9642: 9642: inline void PinSlice(const Slice& s, Cleanable* cleanable) { 9642: 9642: # 161 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: (static_cast ( 9642: # 161 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: !pinned_ 9642: # 161 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 161 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: "!pinned_" 9642: # 161 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 161 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: ; 9642: pinned_ = true; 9642: data_ = s.data(); 9642: size_ = s.size(); 9642: if (cleanable != nullptr) { 9642: cleanable->DelegateCleanupsTo(this); 9642: } 9642: 9642: # 168 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: (static_cast ( 9642: # 168 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: pinned_ 9642: # 168 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 168 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: "pinned_" 9642: # 168 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 168 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: ; 9642: } 9642: 9642: inline void PinSelf(const Slice& slice) { 9642: 9642: # 172 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: (static_cast ( 9642: # 172 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: !pinned_ 9642: # 172 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 172 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: "!pinned_" 9642: # 172 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 172 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: ; 9642: buf_->assign(slice.data(), slice.size()); 9642: data_ = buf_->data(); 9642: size_ = buf_->size(); 9642: 9642: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: (static_cast ( 9642: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: !pinned_ 9642: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: "!pinned_" 9642: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: ; 9642: } 9642: 9642: inline void PinSelf() { 9642: 9642: # 180 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: (static_cast ( 9642: # 180 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: !pinned_ 9642: # 180 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 180 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: "!pinned_" 9642: # 180 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 180 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: ; 9642: data_ = buf_->data(); 9642: size_ = buf_->size(); 9642: 9642: # 183 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: (static_cast ( 9642: # 183 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: !pinned_ 9642: # 183 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 183 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: "!pinned_" 9642: # 183 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 183 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: ; 9642: } 9642: 9642: void remove_suffix(size_t n) { 9642: 9642: # 187 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: (static_cast ( 9642: # 187 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: n <= size() 9642: # 187 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 187 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: "n <= size()" 9642: # 187 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 187 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: ; 9642: if (pinned_) { 9642: size_ -= n; 9642: } else { 9642: buf_->erase(size() - n, n); 9642: PinSelf(); 9642: } 9642: } 9642: 9642: void remove_prefix(size_t n) { 9642: 9642: # 197 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: (static_cast ( 9642: # 197 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: n <= size() 9642: # 197 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 197 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: "n <= size()" 9642: # 197 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 197 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: ; 9642: if (pinned_) { 9642: data_ += n; 9642: size_ -= n; 9642: } else { 9642: buf_->erase(0, n); 9642: PinSelf(); 9642: } 9642: } 9642: 9642: void Reset() { 9642: Cleanable::Reset(); 9642: pinned_ = false; 9642: size_ = 0; 9642: } 9642: 9642: inline std::string* GetSelf() { return buf_; } 9642: 9642: inline bool IsPinned() const { return pinned_; } 9642: 9642: private: 9642: friend class PinnableSlice4Test; 9642: std::string self_space_; 9642: std::string* buf_; 9642: bool pinned_ = false; 9642: }; 9642: 9642: 9642: 9642: struct SliceParts { 9642: SliceParts(const Slice* _parts, int _num_parts) 9642: : parts(_parts), num_parts(_num_parts) {} 9642: SliceParts() : parts(nullptr), num_parts(0) {} 9642: 9642: const Slice* parts; 9642: int num_parts; 9642: }; 9642: 9642: inline bool operator==(const Slice& x, const Slice& y) { 9642: return ((x.size() == y.size()) && 9642: (memcmp(x.data(), y.data(), x.size()) == 0)); 9642: } 9642: 9642: inline bool operator!=(const Slice& x, const Slice& y) { return !(x == y); } 9642: 9642: inline int Slice::compare(const Slice& b) const { 9642: 9642: # 243 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: (static_cast ( 9642: # 243 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: data_ != nullptr && b.data_ != nullptr 9642: # 243 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 243 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: "data_ != nullptr && b.data_ != nullptr" 9642: # 243 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 243 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 9642: ; 9642: const size_t min_len = (size_ < b.size_) ? size_ : b.size_; 9642: int r = memcmp(data_, b.data_, min_len); 9642: if (r == 0) { 9642: if (size_ < b.size_) 9642: r = -1; 9642: else if (size_ > b.size_) 9642: r = +1; 9642: } 9642: return r; 9642: } 9642: 9642: inline size_t Slice::difference_offset(const Slice& b) const { 9642: size_t off = 0; 9642: const size_t len = (size_ < b.size_) ? size_ : b.size_; 9642: for (; off < len; off++) { 9642: if (data_[off] != b.data_[off]) break; 9642: } 9642: return off; 9642: } 9642: 9642: } 9642: # 32 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/status.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: class Status { 9642: public: 9642: 9642: Status() 9642: : code_(kOk), 9642: subcode_(kNone), 9642: sev_(kNoError), 9642: retryable_(false), 9642: data_loss_(false), 9642: scope_(0), 9642: state_(nullptr) {} 9642: ~Status() { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: 9642: 9642: Status(const Status& s); 9642: Status& operator=(const Status& s); 9642: Status(Status&& s) noexcept; 9642: Status& operator=(Status&& s) noexcept; 9642: bool operator==(const Status& rhs) const; 9642: bool operator!=(const Status& rhs) const; 9642: 9642: 9642: 9642: 9642: inline void PermitUncheckedError() const { MarkChecked(); } 9642: 9642: inline void MustCheck() const { 9642: 9642: 9642: 9642: } 9642: 9642: enum Code : unsigned char { 9642: kOk = 0, 9642: kNotFound = 1, 9642: kCorruption = 2, 9642: kNotSupported = 3, 9642: kInvalidArgument = 4, 9642: kIOError = 5, 9642: kMergeInProgress = 6, 9642: kIncomplete = 7, 9642: kShutdownInProgress = 8, 9642: kTimedOut = 9, 9642: kAborted = 10, 9642: kBusy = 11, 9642: kExpired = 12, 9642: kTryAgain = 13, 9642: kCompactionTooLarge = 14, 9642: kColumnFamilyDropped = 15, 9642: kMaxCode 9642: }; 9642: 9642: Code code() const { 9642: MarkChecked(); 9642: return code_; 9642: } 9642: 9642: enum SubCode : unsigned char { 9642: kNone = 0, 9642: kMutexTimeout = 1, 9642: kLockTimeout = 2, 9642: kLockLimit = 3, 9642: kNoSpace = 4, 9642: kDeadlock = 5, 9642: kStaleFile = 6, 9642: kMemoryLimit = 7, 9642: kSpaceLimit = 8, 9642: kPathNotFound = 9, 9642: KMergeOperandsInsufficientCapacity = 10, 9642: kManualCompactionPaused = 11, 9642: kOverwritten = 12, 9642: kTxnNotPrepared = 13, 9642: kIOFenced = 14, 9642: kMergeOperatorFailed = 15, 9642: kMergeOperandThresholdExceeded = 16, 9642: kMaxSubCode 9642: }; 9642: 9642: SubCode subcode() const { 9642: MarkChecked(); 9642: return subcode_; 9642: } 9642: 9642: enum Severity : unsigned char { 9642: kNoError = 0, 9642: kSoftError = 1, 9642: kHardError = 2, 9642: kFatalError = 3, 9642: kUnrecoverableError = 4, 9642: kMaxSeverity 9642: }; 9642: 9642: Status(const Status& s, Severity sev); 9642: 9642: Status(Code _code, SubCode _subcode, Severity _sev, const Slice& msg) 9642: : Status(_code, _subcode, msg, "", _sev) {} 9642: 9642: static Status CopyAppendMessage(const Status& s, const Slice& delim, 9642: const Slice& msg); 9642: 9642: Severity severity() const { 9642: MarkChecked(); 9642: return sev_; 9642: } 9642: 9642: 9642: const char* getState() const { 9642: MarkChecked(); 9642: return state_.get(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: Status& UpdateIfOk(Status&& s) { 9642: if (code() == kOk) { 9642: *this = std::move(s); 9642: } else { 9642: 9642: s.PermitUncheckedError(); 9642: } 9642: MustCheck(); 9642: return *this; 9642: } 9642: 9642: Status& UpdateIfOk(const Status& s) { 9642: return UpdateIfOk(std::forward(Status(s))); 9642: } 9642: 9642: 9642: static Status OK() { return Status(); } 9642: 9642: 9642: 9642: 9642: 9642: static Status OkOverwritten() { return Status(kOk, kOverwritten); } 9642: 9642: 9642: 9642: 9642: 9642: static Status OkMergeOperandThresholdExceeded() { 9642: return Status(kOk, kMergeOperandThresholdExceeded); 9642: } 9642: 9642: 9642: static Status NotFound(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return Status(kNotFound, msg, msg2); 9642: } 9642: 9642: 9642: static Status NotFound(SubCode msg = kNone) { return Status(kNotFound, msg); } 9642: 9642: static Status NotFound(SubCode sc, const Slice& msg, 9642: const Slice& msg2 = Slice()) { 9642: return Status(kNotFound, sc, msg, msg2); 9642: } 9642: 9642: static Status Corruption(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return Status(kCorruption, msg, msg2); 9642: } 9642: static Status Corruption(SubCode msg = kNone) { 9642: return Status(kCorruption, msg); 9642: } 9642: 9642: static Status NotSupported(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return Status(kNotSupported, msg, msg2); 9642: } 9642: static Status NotSupported(SubCode msg = kNone) { 9642: return Status(kNotSupported, msg); 9642: } 9642: 9642: static Status InvalidArgument(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return Status(kInvalidArgument, msg, msg2); 9642: } 9642: static Status InvalidArgument(SubCode msg = kNone) { 9642: return Status(kInvalidArgument, msg); 9642: } 9642: 9642: static Status IOError(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return Status(kIOError, msg, msg2); 9642: } 9642: static Status IOError(SubCode msg = kNone) { return Status(kIOError, msg); } 9642: 9642: static Status MergeInProgress(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return Status(kMergeInProgress, msg, msg2); 9642: } 9642: static Status MergeInProgress(SubCode msg = kNone) { 9642: return Status(kMergeInProgress, msg); 9642: } 9642: 9642: static Status Incomplete(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return Status(kIncomplete, msg, msg2); 9642: } 9642: static Status Incomplete(SubCode msg = kNone) { 9642: return Status(kIncomplete, msg); 9642: } 9642: 9642: static Status ShutdownInProgress(SubCode msg = kNone) { 9642: return Status(kShutdownInProgress, msg); 9642: } 9642: static Status ShutdownInProgress(const Slice& msg, 9642: const Slice& msg2 = Slice()) { 9642: return Status(kShutdownInProgress, msg, msg2); 9642: } 9642: static Status Aborted(SubCode msg = kNone) { return Status(kAborted, msg); } 9642: static Status Aborted(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return Status(kAborted, msg, msg2); 9642: } 9642: 9642: static Status Busy(SubCode msg = kNone) { return Status(kBusy, msg); } 9642: static Status Busy(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return Status(kBusy, msg, msg2); 9642: } 9642: 9642: static Status TimedOut(SubCode msg = kNone) { return Status(kTimedOut, msg); } 9642: static Status TimedOut(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return Status(kTimedOut, msg, msg2); 9642: } 9642: 9642: static Status Expired(SubCode msg = kNone) { return Status(kExpired, msg); } 9642: static Status Expired(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return Status(kExpired, msg, msg2); 9642: } 9642: 9642: static Status TryAgain(SubCode msg = kNone) { return Status(kTryAgain, msg); } 9642: static Status TryAgain(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return Status(kTryAgain, msg, msg2); 9642: } 9642: 9642: static Status CompactionTooLarge(SubCode msg = kNone) { 9642: return Status(kCompactionTooLarge, msg); 9642: } 9642: static Status CompactionTooLarge(const Slice& msg, 9642: const Slice& msg2 = Slice()) { 9642: return Status(kCompactionTooLarge, msg, msg2); 9642: } 9642: 9642: static Status ColumnFamilyDropped(SubCode msg = kNone) { 9642: return Status(kColumnFamilyDropped, msg); 9642: } 9642: 9642: static Status ColumnFamilyDropped(const Slice& msg, 9642: const Slice& msg2 = Slice()) { 9642: return Status(kColumnFamilyDropped, msg, msg2); 9642: } 9642: 9642: static Status NoSpace() { return Status(kIOError, kNoSpace); } 9642: static Status NoSpace(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return Status(kIOError, kNoSpace, msg, msg2); 9642: } 9642: 9642: static Status MemoryLimit() { return Status(kAborted, kMemoryLimit); } 9642: static Status MemoryLimit(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return Status(kAborted, kMemoryLimit, msg, msg2); 9642: } 9642: 9642: static Status SpaceLimit() { return Status(kIOError, kSpaceLimit); } 9642: static Status SpaceLimit(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return Status(kIOError, kSpaceLimit, msg, msg2); 9642: } 9642: 9642: static Status PathNotFound() { return Status(kIOError, kPathNotFound); } 9642: static Status PathNotFound(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return Status(kIOError, kPathNotFound, msg, msg2); 9642: } 9642: 9642: static Status TxnNotPrepared() { 9642: return Status(kInvalidArgument, kTxnNotPrepared); 9642: } 9642: static Status TxnNotPrepared(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return Status(kInvalidArgument, kTxnNotPrepared, msg, msg2); 9642: } 9642: 9642: 9642: bool ok() const { 9642: MarkChecked(); 9642: return code() == kOk; 9642: } 9642: 9642: 9642: 9642: bool IsOkOverwritten() const { 9642: MarkChecked(); 9642: return code() == kOk && subcode() == kOverwritten; 9642: } 9642: 9642: 9642: 9642: bool IsOkMergeOperandThresholdExceeded() const { 9642: MarkChecked(); 9642: return code() == kOk && subcode() == kMergeOperandThresholdExceeded; 9642: } 9642: 9642: 9642: bool IsNotFound() const { 9642: MarkChecked(); 9642: return code() == kNotFound; 9642: } 9642: 9642: 9642: bool IsCorruption() const { 9642: MarkChecked(); 9642: return code() == kCorruption; 9642: } 9642: 9642: 9642: bool IsNotSupported() const { 9642: MarkChecked(); 9642: return code() == kNotSupported; 9642: } 9642: 9642: 9642: bool IsInvalidArgument() const { 9642: MarkChecked(); 9642: return code() == kInvalidArgument; 9642: } 9642: 9642: 9642: bool IsIOError() const { 9642: MarkChecked(); 9642: return code() == kIOError; 9642: } 9642: 9642: 9642: bool IsMergeInProgress() const { 9642: MarkChecked(); 9642: return code() == kMergeInProgress; 9642: } 9642: 9642: 9642: bool IsIncomplete() const { 9642: MarkChecked(); 9642: return code() == kIncomplete; 9642: } 9642: 9642: 9642: bool IsShutdownInProgress() const { 9642: MarkChecked(); 9642: return code() == kShutdownInProgress; 9642: } 9642: 9642: bool IsTimedOut() const { 9642: MarkChecked(); 9642: return code() == kTimedOut; 9642: } 9642: 9642: bool IsAborted() const { 9642: MarkChecked(); 9642: return code() == kAborted; 9642: } 9642: 9642: bool IsLockLimit() const { 9642: MarkChecked(); 9642: return code() == kAborted && subcode() == kLockLimit; 9642: } 9642: 9642: 9642: 9642: bool IsBusy() const { 9642: MarkChecked(); 9642: return code() == kBusy; 9642: } 9642: 9642: bool IsDeadlock() const { 9642: MarkChecked(); 9642: return code() == kBusy && subcode() == kDeadlock; 9642: } 9642: 9642: 9642: bool IsExpired() const { 9642: MarkChecked(); 9642: return code() == kExpired; 9642: } 9642: 9642: 9642: 9642: 9642: bool IsTryAgain() const { 9642: MarkChecked(); 9642: return code() == kTryAgain; 9642: } 9642: 9642: 9642: bool IsCompactionTooLarge() const { 9642: MarkChecked(); 9642: return code() == kCompactionTooLarge; 9642: } 9642: 9642: 9642: bool IsColumnFamilyDropped() const { 9642: MarkChecked(); 9642: return code() == kColumnFamilyDropped; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool IsNoSpace() const { 9642: MarkChecked(); 9642: return (code() == kIOError) && (subcode() == kNoSpace); 9642: } 9642: 9642: 9642: 9642: 9642: bool IsMemoryLimit() const { 9642: MarkChecked(); 9642: return (code() == kAborted) && (subcode() == kMemoryLimit); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: bool IsPathNotFound() const { 9642: MarkChecked(); 9642: return (code() == kIOError || code() == kNotFound) && 9642: (subcode() == kPathNotFound); 9642: } 9642: 9642: 9642: 9642: bool IsManualCompactionPaused() const { 9642: MarkChecked(); 9642: return (code() == kIncomplete) && (subcode() == kManualCompactionPaused); 9642: } 9642: 9642: 9642: bool IsTxnNotPrepared() const { 9642: MarkChecked(); 9642: return (code() == kInvalidArgument) && (subcode() == kTxnNotPrepared); 9642: } 9642: 9642: 9642: bool IsIOFenced() const { 9642: MarkChecked(); 9642: return (code() == kIOError) && (subcode() == kIOFenced); 9642: } 9642: 9642: 9642: 9642: std::string ToString() const; 9642: 9642: protected: 9642: Code code_; 9642: SubCode subcode_; 9642: Severity sev_; 9642: bool retryable_; 9642: bool data_loss_; 9642: unsigned char scope_; 9642: 9642: 9642: std::unique_ptr state_; 9642: 9642: 9642: 9642: 9642: explicit Status(Code _code, SubCode _subcode = kNone) 9642: : code_(_code), 9642: subcode_(_subcode), 9642: sev_(kNoError), 9642: retryable_(false), 9642: data_loss_(false), 9642: scope_(0) {} 9642: 9642: explicit Status(Code _code, SubCode _subcode, bool retryable, bool data_loss, 9642: unsigned char scope) 9642: : code_(_code), 9642: subcode_(_subcode), 9642: sev_(kNoError), 9642: retryable_(retryable), 9642: data_loss_(data_loss), 9642: scope_(scope) {} 9642: 9642: Status(Code _code, SubCode _subcode, const Slice& msg, const Slice& msg2, 9642: Severity sev = kNoError); 9642: Status(Code _code, const Slice& msg, const Slice& msg2) 9642: : Status(_code, kNone, msg, msg2) {} 9642: 9642: static std::unique_ptr CopyState(const char* s); 9642: 9642: inline void MarkChecked() const { 9642: 9642: 9642: 9642: } 9642: }; 9642: 9642: inline Status::Status(const Status& s) 9642: : code_(s.code_), 9642: subcode_(s.subcode_), 9642: sev_(s.sev_), 9642: retryable_(s.retryable_), 9642: data_loss_(s.data_loss_), 9642: scope_(s.scope_) { 9642: s.MarkChecked(); 9642: state_ = (s.state_ == nullptr) ? nullptr : CopyState(s.state_.get()); 9642: } 9642: inline Status::Status(const Status& s, Severity sev) 9642: : code_(s.code_), 9642: subcode_(s.subcode_), 9642: sev_(sev), 9642: retryable_(s.retryable_), 9642: data_loss_(s.data_loss_), 9642: scope_(s.scope_) { 9642: s.MarkChecked(); 9642: state_ = (s.state_ == nullptr) ? nullptr : CopyState(s.state_.get()); 9642: } 9642: inline Status& Status::operator=(const Status& s) { 9642: if (this != &s) { 9642: s.MarkChecked(); 9642: MustCheck(); 9642: code_ = s.code_; 9642: subcode_ = s.subcode_; 9642: sev_ = s.sev_; 9642: retryable_ = s.retryable_; 9642: data_loss_ = s.data_loss_; 9642: scope_ = s.scope_; 9642: state_ = (s.state_ == nullptr) ? nullptr : CopyState(s.state_.get()); 9642: } 9642: return *this; 9642: } 9642: 9642: inline Status::Status(Status&& s) noexcept : Status() { 9642: s.MarkChecked(); 9642: *this = std::move(s); 9642: } 9642: 9642: inline Status& Status::operator=(Status&& s) noexcept { 9642: if (this != &s) { 9642: s.MarkChecked(); 9642: MustCheck(); 9642: code_ = std::move(s.code_); 9642: s.code_ = kOk; 9642: subcode_ = std::move(s.subcode_); 9642: s.subcode_ = kNone; 9642: sev_ = std::move(s.sev_); 9642: s.sev_ = kNoError; 9642: retryable_ = std::move(s.retryable_); 9642: s.retryable_ = false; 9642: data_loss_ = std::move(s.data_loss_); 9642: s.data_loss_ = false; 9642: scope_ = std::move(s.scope_); 9642: s.scope_ = 0; 9642: state_ = std::move(s.state_); 9642: } 9642: return *this; 9642: } 9642: 9642: inline bool Status::operator==(const Status& rhs) const { 9642: MarkChecked(); 9642: rhs.MarkChecked(); 9642: return (code_ == rhs.code_); 9642: } 9642: 9642: inline bool Status::operator!=(const Status& rhs) const { 9642: MarkChecked(); 9642: rhs.MarkChecked(); 9642: return !(*this == rhs); 9642: } 9642: 9642: } 9642: # 19 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 2 9642: 9642: namespace rocksdb { 9642: class Logger; 9642: class ObjectRegistry; 9642: class OptionTypeInfo; 9642: struct ColumnFamilyOptions; 9642: struct ConfigOptions; 9642: struct DBOptions; 9642: # 44 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 9642: class Configurable { 9642: protected: 9642: friend class ConfigurableHelper; 9642: struct RegisteredOptions { 9642: 9642: std::string name; 9642: 9642: void* opt_ptr; 9642: 9642: const std::unordered_map* type_map; 9642: }; 9642: 9642: public: 9642: virtual ~Configurable() {} 9642: # 68 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 9642: template 9642: const T* GetOptions() const { 9642: return GetOptions(T::kName()); 9642: } 9642: template 9642: T* GetOptions() { 9642: return GetOptions(T::kName()); 9642: } 9642: template 9642: const T* GetOptions(const std::string& name) const { 9642: return reinterpret_cast(GetOptionsPtr(name)); 9642: } 9642: template 9642: T* GetOptions(const std::string& name) { 9642: return reinterpret_cast(const_cast(GetOptionsPtr(name))); 9642: } 9642: # 114 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 9642: Status ConfigureFromMap( 9642: const ConfigOptions& config_options, 9642: const std::unordered_map& opt_map); 9642: Status ConfigureFromMap( 9642: const ConfigOptions& config_options, 9642: const std::unordered_map& opt_map, 9642: std::unordered_map* unused); 9642: # 133 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 9642: Status ConfigureOption(const ConfigOptions& config_options, 9642: const std::string& name, const std::string& value); 9642: # 158 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 9642: Status ConfigureFromString(const ConfigOptions& config_options, 9642: const std::string& opts); 9642: # 168 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 9642: Status GetOptionString(const ConfigOptions& config_options, 9642: std::string* result) const; 9642: 9642: 9642: 9642: 9642: 9642: std::string ToString(const ConfigOptions& config_options) const { 9642: return ToString(config_options, ""); 9642: } 9642: std::string ToString(const ConfigOptions& config_options, 9642: const std::string& prefix) const; 9642: 9642: 9642: 9642: 9642: 9642: 9642: Status GetOptionNames(const ConfigOptions& config_options, 9642: std::unordered_set* result) const; 9642: # 198 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 9642: virtual Status GetOption(const ConfigOptions& config_options, 9642: const std::string& name, std::string* value) const; 9642: # 208 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 9642: virtual bool AreEquivalent(const ConfigOptions& config_options, 9642: const Configurable* other, 9642: std::string* name) const; 9642: 9642: 9642: 9642: 9642: virtual std::string GetPrintableOptions() const { return ""; } 9642: # 239 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 9642: virtual Status PrepareOptions(const ConfigOptions& config_options); 9642: # 255 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 9642: virtual Status ValidateOptions(const DBOptions& db_opts, 9642: const ColumnFamilyOptions& cf_opts) const; 9642: # 272 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 9642: static Status GetOptionsMap( 9642: const std::string& opt_value, const std::string& default_id, 9642: std::string* id, std::unordered_map* options); 9642: 9642: protected: 9642: # 287 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 9642: virtual const void* GetOptionsPtr(const std::string& name) const; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status ParseStringOptions(const ConfigOptions& config_options, 9642: const std::string& opts_str); 9642: # 309 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 9642: virtual Status ConfigureOptions( 9642: const ConfigOptions& config_options, 9642: const std::unordered_map& opts_map, 9642: std::unordered_map* unused); 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status ParseOption(const ConfigOptions& config_options, 9642: const OptionTypeInfo& opt_info, 9642: const std::string& opt_name, 9642: const std::string& opt_value, void* opt_ptr); 9642: # 338 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 9642: virtual bool OptionsAreEqual(const ConfigOptions& config_options, 9642: const OptionTypeInfo& opt_info, 9642: const std::string& name, 9642: const void* const this_ptr, 9642: const void* const that_ptr, 9642: std::string* bad_name) const; 9642: 9642: 9642: virtual std::string SerializeOptions(const ConfigOptions& config_options, 9642: const std::string& header) const; 9642: 9642: 9642: virtual std::string GetOptionName(const std::string& long_name) const; 9642: # 371 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 9642: template 9642: void RegisterOptions( 9642: T* opt_ptr, 9642: const std::unordered_map* opt_map) { 9642: RegisterOptions(T::kName(), opt_ptr, opt_map); 9642: } 9642: void RegisterOptions( 9642: const std::string& name, void* opt_ptr, 9642: const std::unordered_map* opt_map); 9642: 9642: 9642: inline bool HasRegisteredOptions() const { return !options_.empty(); } 9642: 9642: private: 9642: 9642: 9642: 9642: std::vector options_; 9642: }; 9642: } 9642: # 12 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h" 2 9642: 9642: 9642: namespace rocksdb { 9642: # 56 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h" 9642: class Customizable : public Configurable { 9642: public: 9642: ~Customizable() override {} 9642: 9642: 9642: virtual const char* Name() const = 0; 9642: 9642: 9642: 9642: 9642: virtual std::string GetId() const { 9642: std::string id = Name(); 9642: return id; 9642: } 9642: # 89 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h" 9642: virtual bool IsInstanceOf(const std::string& name) const { 9642: if (name.empty()) { 9642: return false; 9642: } else if (name == Name()) { 9642: return true; 9642: } else { 9642: const char* nickname = NickName(); 9642: if (nickname != nullptr && name == nickname) { 9642: return true; 9642: } else { 9642: return false; 9642: } 9642: } 9642: } 9642: 9642: const void* GetOptionsPtr(const std::string& name) const override { 9642: const void* ptr = Configurable::GetOptionsPtr(name); 9642: if (ptr != nullptr) { 9642: return ptr; 9642: } else { 9642: const auto inner = Inner(); 9642: if (inner != nullptr) { 9642: return inner->GetOptionsPtr(name); 9642: } else { 9642: return nullptr; 9642: } 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: const T* CheckedCast() const { 9642: if (IsInstanceOf(T::kClassName())) { 9642: return static_cast(this); 9642: } else { 9642: const auto inner = Inner(); 9642: if (inner != nullptr) { 9642: return inner->CheckedCast(); 9642: } else { 9642: return nullptr; 9642: } 9642: } 9642: } 9642: 9642: template 9642: T* CheckedCast() { 9642: if (IsInstanceOf(T::kClassName())) { 9642: return static_cast(this); 9642: } else { 9642: auto inner = const_cast(Inner()); 9642: if (inner != nullptr) { 9642: return inner->CheckedCast(); 9642: } else { 9642: return nullptr; 9642: } 9642: } 9642: } 9642: # 157 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h" 9642: bool AreEquivalent(const ConfigOptions& config_options, 9642: const Configurable* other, 9642: std::string* mismatch) const override; 9642: 9642: 9642: Status GetOption(const ConfigOptions& config_options, const std::string& name, 9642: std::string* value) const override; 9642: # 183 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h" 9642: static Status GetOptionsMap( 9642: const ConfigOptions& config_options, const Customizable* custom, 9642: const std::string& opt_value, std::string* id, 9642: std::unordered_map* options); 9642: # 195 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h" 9642: static Status ConfigureNewObject( 9642: const ConfigOptions& config_options, Customizable* object, 9642: const std::unordered_map& options); 9642: 9642: 9642: 9642: 9642: virtual const Customizable* Inner() const { return nullptr; } 9642: 9642: protected: 9642: # 217 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h" 9642: std::string GenerateIndividualId() const; 9642: 9642: 9642: 9642: 9642: virtual const char* NickName() const { return ""; } 9642: 9642: std::string GetOptionName(const std::string& long_name) const override; 9642: std::string SerializeOptions(const ConfigOptions& options, 9642: const std::string& prefix) const override; 9642: }; 9642: 9642: } 9642: # 14 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 2 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class Slice; 9642: 9642: 9642: 9642: class CompareInterface { 9642: public: 9642: virtual ~CompareInterface() {} 9642: # 33 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 9642: virtual int Compare(const Slice& a, const Slice& b) const = 0; 9642: }; 9642: # 44 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 9642: class Comparator : public Customizable, public CompareInterface { 9642: public: 9642: Comparator() : timestamp_size_(0) {} 9642: 9642: Comparator(size_t ts_sz) : timestamp_size_(ts_sz) {} 9642: 9642: Comparator(const Comparator& orig) : timestamp_size_(orig.timestamp_size_) {} 9642: 9642: Comparator& operator=(const Comparator& rhs) { 9642: if (this != &rhs) { 9642: timestamp_size_ = rhs.timestamp_size_; 9642: } 9642: return *this; 9642: } 9642: 9642: ~Comparator() override {} 9642: 9642: static Status CreateFromString(const ConfigOptions& opts, 9642: const std::string& id, 9642: const Comparator** comp); 9642: static const char* Type() { return "Comparator"; } 9642: # 76 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 9642: const char* Name() const override = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual bool Equal(const Slice& a, const Slice& b) const { 9642: return Compare(a, b) == 0; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void FindShortestSeparator(std::string* start, 9642: const Slice& limit) const = 0; 9642: 9642: 9642: 9642: 9642: virtual void FindShortSuccessor(std::string* key) const = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual bool IsSameLengthImmediateSuccessor(const Slice& , 9642: const Slice& ) const { 9642: return false; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: virtual bool CanKeysWithDifferentByteContentsBeEqual() const { return true; } 9642: 9642: 9642: 9642: virtual const Comparator* GetRootComparator() const { return this; } 9642: 9642: inline size_t timestamp_size() const { return timestamp_size_; } 9642: 9642: 9642: 9642: 9642: virtual Slice GetMaxTimestamp() const { 9642: if (timestamp_size_ == 0) { 9642: return Slice(); 9642: } 9642: 9642: # 130 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 3 4 9642: (static_cast ( 9642: # 130 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 9642: false 9642: # 130 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 130 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 9642: "false" 9642: # 130 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 130 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 9642: ; 9642: return Slice(); 9642: } 9642: 9642: 9642: 9642: 9642: virtual Slice GetMinTimestamp() const { 9642: if (timestamp_size_ == 0) { 9642: return Slice(); 9642: } 9642: 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 3 4 9642: (static_cast ( 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 9642: false 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 9642: "false" 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 9642: ; 9642: return Slice(); 9642: } 9642: 9642: 9642: virtual std::string TimestampToString(const Slice& ) const { 9642: return ""; 9642: } 9642: 9642: int CompareWithoutTimestamp(const Slice& a, const Slice& b) const { 9642: return CompareWithoutTimestamp(a, true, b, true); 9642: } 9642: # 163 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 9642: virtual int CompareTimestamp(const Slice& , 9642: const Slice& ) const { 9642: return 0; 9642: } 9642: 9642: virtual int CompareWithoutTimestamp(const Slice& a, bool , 9642: const Slice& b, bool ) const { 9642: return Compare(a, b); 9642: } 9642: 9642: virtual bool EqualWithoutTimestamp(const Slice& a, const Slice& b) const { 9642: return 0 == 9642: CompareWithoutTimestamp(a, true, b, true); 9642: } 9642: 9642: private: 9642: size_t timestamp_size_; 9642: }; 9642: 9642: 9642: 9642: 9642: const Comparator* BytewiseComparator(); 9642: 9642: 9642: 9642: const Comparator* ReverseBytewiseComparator(); 9642: 9642: 9642: 9642: 9642: 9642: 9642: const Comparator* BytewiseComparatorWithU64Ts(); 9642: 9642: 9642: 9642: 9642: 9642: 9642: const Comparator* ReverseBytewiseComparatorWithU64Ts(); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: Status DecodeU64Ts(const Slice& ts, uint64_t* int_ts); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: Slice EncodeU64Ts(uint64_t ts, std::string* ts_buf); 9642: 9642: 9642: 9642: 9642: Slice MaxU64Ts(); 9642: 9642: 9642: 9642: 9642: Slice MinU64Ts(); 9642: 9642: } 9642: # 19 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice_transform.h" 1 9642: # 15 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice_transform.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class Slice; 9642: struct ConfigOptions; 9642: # 35 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice_transform.h" 9642: class SliceTransform : public Customizable { 9642: public: 9642: virtual ~SliceTransform(){} 9642: 9642: 9642: const char* Name() const override = 0; 9642: static const char* Type() { return "SliceTransform"; } 9642: 9642: 9642: static Status CreateFromString(const ConfigOptions& config_options, 9642: const std::string& id, 9642: std::shared_ptr* result); 9642: 9642: 9642: 9642: std::string AsString() const; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Slice Transform(const Slice& key) const = 0; 9642: # 71 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice_transform.h" 9642: virtual bool InDomain(const Slice& key) const = 0; 9642: 9642: 9642: 9642: virtual bool InRange(const Slice& ) const { return false; } 9642: # 92 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice_transform.h" 9642: virtual bool FullLengthEnabled(size_t* ) const { return false; } 9642: # 119 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice_transform.h" 9642: virtual bool SameResultWhenAppended(const Slice& ) const { 9642: return false; 9642: } 9642: }; 9642: 9642: 9642: 9642: const SliceTransform* NewFixedPrefixTransform(size_t prefix_len); 9642: 9642: 9642: 9642: const SliceTransform* NewCappedPrefixTransform(size_t cap_len); 9642: 9642: 9642: const SliceTransform* NewNoopTransform(); 9642: 9642: } 9642: # 21 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/types.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 15 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/types.h" 9642: namespace rocksdb { 9642: 9642: 9642: 9642: using ColumnFamilyId = uint32_t; 9642: 9642: 9642: using SequenceNumber = uint64_t; 9642: 9642: struct TableProperties; 9642: using TablePropertiesCollection = 9642: std::unordered_map>; 9642: 9642: const SequenceNumber kMinUnCommittedSeq = 1; 9642: 9642: enum class TableFileCreationReason { 9642: kFlush, 9642: kCompaction, 9642: kRecovery, 9642: kMisc, 9642: }; 9642: 9642: enum class BlobFileCreationReason { 9642: kFlush, 9642: kCompaction, 9642: kRecovery, 9642: }; 9642: 9642: 9642: 9642: enum FileType { 9642: kWalFile, 9642: kDBLockFile, 9642: kTableFile, 9642: kDescriptorFile, 9642: kCurrentFile, 9642: kTempFile, 9642: kInfoLogFile, 9642: kMetaDatabase, 9642: kIdentityFile, 9642: kOptionsFile, 9642: kBlobFile 9642: }; 9642: 9642: 9642: 9642: enum EntryType { 9642: kEntryPut, 9642: kEntryDelete, 9642: kEntrySingleDelete, 9642: kEntryMerge, 9642: kEntryRangeDeletion, 9642: kEntryBlobIndex, 9642: kEntryDeleteWithTimestamp, 9642: kEntryWideColumnEntity, 9642: kEntryTimedPut, 9642: kEntryOther, 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: struct ParsedEntryInfo { 9642: Slice user_key; 9642: Slice timestamp; 9642: SequenceNumber sequence; 9642: EntryType type; 9642: }; 9642: 9642: enum class WriteStallCause { 9642: 9642: 9642: 9642: kMemtableLimit, 9642: kL0FileCountLimit, 9642: kPendingCompactionBytes, 9642: kCFScopeWriteStallCauseEnumMax, 9642: 9642: 9642: 9642: 9642: 9642: kWriteBufferManagerLimit, 9642: kDBScopeWriteStallCauseEnumMax, 9642: 9642: 9642: 9642: kNone, 9642: }; 9642: 9642: enum class WriteStallCondition { 9642: kDelayed, 9642: kStopped, 9642: 9642: kNormal, 9642: }; 9642: 9642: } 9642: # 22 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/coding.h" 1 9642: # 18 "/build/reproducible-path/rocksdb-9.3.1/util/coding.h" 9642: 9642: # 1 "/usr/include/c++/13/algorithm" 1 3 9642: # 58 "/usr/include/c++/13/algorithm" 3 9642: 9642: # 59 "/usr/include/c++/13/algorithm" 3 9642: # 73 "/usr/include/c++/13/algorithm" 3 9642: # 1 "/usr/include/c++/13/pstl/glue_algorithm_defs.h" 1 3 9642: # 17 "/usr/include/c++/13/pstl/glue_algorithm_defs.h" 3 9642: 9642: # 17 "/usr/include/c++/13/pstl/glue_algorithm_defs.h" 3 9642: namespace std 9642: { 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 9642: any_of(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 9642: all_of(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 9642: none_of(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: for_each(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Function __f); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: for_each_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size __n, _Function __f); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: find_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: find_if_not(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: find(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1> 9642: find_end(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first, 9642: _ForwardIterator2 __s_last, _BinaryPredicate __pred); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1> 9642: find_end(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first, 9642: _ForwardIterator2 __s_last); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1> 9642: find_first_of(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 9642: _ForwardIterator2 __s_first, _ForwardIterator2 __s_last, _BinaryPredicate __pred); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1> 9642: find_first_of(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 9642: _ForwardIterator2 __s_first, _ForwardIterator2 __s_last); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: adjacent_find(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: adjacent_find(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __pred); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, 9642: typename iterator_traits<_ForwardIterator>::difference_type> 9642: count(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, 9642: typename iterator_traits<_ForwardIterator>::difference_type> 9642: count_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1> 9642: search(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first, 9642: _ForwardIterator2 __s_last, _BinaryPredicate __pred); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1> 9642: search(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first, 9642: _ForwardIterator2 __s_last); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: search_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Size __count, 9642: const _Tp& __value, _BinaryPredicate __pred); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: search_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Size __count, 9642: const _Tp& __value); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: copy_n(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _Size __n, _ForwardIterator2 __result); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: copy_if(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 result, 9642: _Predicate __pred); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: swap_ranges(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: transform(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result, 9642: _UnaryOperation __op); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: transform(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 9642: _ForwardIterator __result, _BinaryOperation __op); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: replace_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred, 9642: const _Tp& __new_value); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: replace(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __old_value, 9642: const _Tp& __new_value); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: replace_copy_if(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 9642: _ForwardIterator2 __result, _UnaryPredicate __pred, const _Tp& __new_value); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: replace_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result, 9642: const _Tp& __old_value, const _Tp& __new_value); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: fill(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: fill_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size __count, const _Tp& __value); 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: generate(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Generator __g); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: generate_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size count, _Generator __g); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: remove_copy_if(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 9642: _ForwardIterator2 __result, _Predicate __pred); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: remove_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result, 9642: const _Tp& __value); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: remove_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: remove(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: unique(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __pred); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: unique(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: unique_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result, 9642: _BinaryPredicate __pred); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: unique_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: reverse(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __last); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: reverse_copy(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __last, 9642: _ForwardIterator __d_first); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: rotate(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __middle, _ForwardIterator __last); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: rotate_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __middle, _ForwardIterator1 __last, 9642: _ForwardIterator2 __result); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 9642: is_partitioned(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: partition(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _BidirectionalIterator> 9642: stable_partition(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __last, 9642: _UnaryPredicate __pred); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>> 9642: partition_copy(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, 9642: _ForwardIterator1 __out_true, _ForwardIterator2 __out_false, _UnaryPredicate __pred); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: stable_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: stable_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>> 9642: mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 9642: _ForwardIterator2 __last2, _BinaryPredicate __pred); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>> 9642: mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 9642: _BinaryPredicate __pred); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>> 9642: mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 9642: _ForwardIterator2 __last2); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>> 9642: mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 9642: equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 9642: _BinaryPredicate __p); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 9642: equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 9642: equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 9642: _ForwardIterator2 __last2, _BinaryPredicate __p); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 9642: equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 9642: _ForwardIterator2 __last2); 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: move(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __d_first); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: partial_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __middle, 9642: _RandomAccessIterator __last, _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: partial_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __middle, 9642: _RandomAccessIterator __last); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _RandomAccessIterator> 9642: partial_sort_copy(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, 9642: _RandomAccessIterator __d_first, _RandomAccessIterator __d_last, _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _RandomAccessIterator> 9642: partial_sort_copy(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, 9642: _RandomAccessIterator __d_first, _RandomAccessIterator __d_last); 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: is_sorted_until(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: is_sorted_until(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 9642: is_sorted(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 9642: is_sorted(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: nth_element(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __nth, 9642: _RandomAccessIterator __last, _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: nth_element(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __nth, 9642: _RandomAccessIterator __last); 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: merge(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 9642: _ForwardIterator2 __last2, _ForwardIterator __d_first, _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: merge(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 9642: _ForwardIterator2 __last2, _ForwardIterator __d_first); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: inplace_merge(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __middle, 9642: _BidirectionalIterator __last, _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 9642: inplace_merge(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __middle, 9642: _BidirectionalIterator __last); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 9642: includes(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 9642: _ForwardIterator2 __last2, _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 9642: includes(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 9642: _ForwardIterator2 __last2); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: set_union(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 9642: _ForwardIterator2 __last2, _ForwardIterator __result, _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: set_union(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 9642: _ForwardIterator2 __last2, _ForwardIterator __result); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: set_intersection(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result, _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: set_intersection(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: set_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result, _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: set_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: set_symmetric_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator result, 9642: _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: set_symmetric_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result); 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _RandomAccessIterator> 9642: is_heap_until(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _RandomAccessIterator> 9642: is_heap_until(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 9642: is_heap(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 9642: is_heap(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: min_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: min_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: max_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 9642: max_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator, _ForwardIterator>> 9642: minmax_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator, _ForwardIterator>> 9642: minmax_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 9642: lexicographical_compare(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _ForwardIterator2 __last2, _Compare __comp); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 9642: lexicographical_compare(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _ForwardIterator2 __last2); 9642: 9642: } 9642: # 74 "/usr/include/c++/13/algorithm" 2 3 9642: # 20 "/build/reproducible-path/rocksdb-9.3.1/util/coding.h" 2 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/port/port.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/port/port.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 1 9642: # 12 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 9642: 9642: 9642: # 1 "/usr/include/c++/13/thread" 1 3 9642: # 32 "/usr/include/c++/13/thread" 3 9642: 9642: # 33 "/usr/include/c++/13/thread" 3 9642: # 45 "/usr/include/c++/13/thread" 3 9642: # 1 "/usr/include/c++/13/bits/std_thread.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/std_thread.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/std_thread.h" 3 9642: # 52 "/usr/include/c++/13/bits/std_thread.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 78 "/usr/include/c++/13/bits/std_thread.h" 3 9642: class thread 9642: { 9642: public: 9642: 9642: using native_handle_type = __gthread_t; 9642: # 92 "/usr/include/c++/13/bits/std_thread.h" 3 9642: class id 9642: { 9642: native_handle_type _M_thread; 9642: 9642: public: 9642: id() noexcept : _M_thread() { } 9642: 9642: explicit 9642: id(native_handle_type __id) : _M_thread(__id) { } 9642: 9642: private: 9642: friend class thread; 9642: friend struct hash; 9642: 9642: friend bool 9642: operator==(id __x, id __y) noexcept; 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator<(id __x, id __y) noexcept; 9642: 9642: 9642: template 9642: friend basic_ostream<_CharT, _Traits>& 9642: operator<<(basic_ostream<_CharT, _Traits>& __out, id __id); 9642: }; 9642: 9642: private: 9642: id _M_id; 9642: 9642: 9642: 9642: 9642: template 9642: using __not_same = __not_, thread>>; 9642: 9642: public: 9642: thread() noexcept = default; 9642: 9642: 9642: private: 9642: 9642: 9642: 9642: 9642: 9642: 9642: static void 9642: _M_thread_deps_never_run() { 9642: 9642: 9642: 9642: 9642: } 9642: 9642: public: 9642: template>> 9642: explicit 9642: thread(_Callable&& __f, _Args&&... __args) 9642: { 9642: static_assert( __is_invocable::type, 9642: typename decay<_Args>::type...>::value, 9642: "std::thread arguments must be invocable after conversion to rvalues" 9642: ); 9642: 9642: using _Wrapper = _Call_wrapper<_Callable, _Args...>; 9642: 9642: 9642: _M_start_thread(_State_ptr(new _State_impl<_Wrapper>( 9642: std::forward<_Callable>(__f), std::forward<_Args>(__args)...)), 9642: _M_thread_deps_never_run); 9642: } 9642: 9642: 9642: ~thread() 9642: { 9642: if (joinable()) 9642: std::__terminate(); 9642: } 9642: 9642: thread(const thread&) = delete; 9642: 9642: thread(thread&& __t) noexcept 9642: { swap(__t); } 9642: 9642: thread& operator=(const thread&) = delete; 9642: 9642: thread& operator=(thread&& __t) noexcept 9642: { 9642: if (joinable()) 9642: std::__terminate(); 9642: swap(__t); 9642: return *this; 9642: } 9642: 9642: void 9642: swap(thread& __t) noexcept 9642: { std::swap(_M_id, __t._M_id); } 9642: 9642: bool 9642: joinable() const noexcept 9642: { return !(_M_id == id()); } 9642: 9642: void 9642: join(); 9642: 9642: void 9642: detach(); 9642: 9642: id 9642: get_id() const noexcept 9642: { return _M_id; } 9642: 9642: 9642: 9642: native_handle_type 9642: native_handle() 9642: { return _M_id._M_thread; } 9642: 9642: 9642: static unsigned int 9642: hardware_concurrency() noexcept; 9642: 9642: 9642: 9642: private: 9642: 9642: 9642: 9642: struct _State 9642: { 9642: virtual ~_State(); 9642: virtual void _M_run() = 0; 9642: }; 9642: using _State_ptr = unique_ptr<_State>; 9642: 9642: private: 9642: template 9642: struct _State_impl : public _State 9642: { 9642: _Callable _M_func; 9642: 9642: template 9642: _State_impl(_Args&&... __args) 9642: : _M_func(std::forward<_Args>(__args)...) 9642: { } 9642: 9642: void 9642: _M_run() { _M_func(); } 9642: }; 9642: 9642: void 9642: _M_start_thread(_State_ptr, void (*)()); 9642: # 269 "/usr/include/c++/13/bits/std_thread.h" 3 9642: private: 9642: 9642: template 9642: struct _Invoker 9642: { 9642: template 9642: explicit 9642: _Invoker(_Args&&... __args) 9642: : _M_t(std::forward<_Args>(__args)...) 9642: { } 9642: 9642: _Tuple _M_t; 9642: 9642: template 9642: struct __result; 9642: template 9642: struct __result> 9642: : __invoke_result<_Fn, _Args...> 9642: { }; 9642: 9642: template 9642: typename __result<_Tuple>::type 9642: _M_invoke(_Index_tuple<_Ind...>) 9642: { return std::__invoke(std::get<_Ind>(std::move(_M_t))...); } 9642: 9642: typename __result<_Tuple>::type 9642: operator()() 9642: { 9642: using _Indices 9642: = typename _Build_index_tuple::value>::__type; 9642: return _M_invoke(_Indices()); 9642: } 9642: }; 9642: 9642: public: 9642: 9642: template 9642: using _Call_wrapper = _Invoker::type...>>; 9642: 9642: 9642: }; 9642: # 318 "/usr/include/c++/13/bits/std_thread.h" 3 9642: inline void 9642: swap(thread& __x, thread& __y) noexcept 9642: { __x.swap(__y); } 9642: 9642: 9642: inline bool 9642: operator==(thread::id __x, thread::id __y) noexcept 9642: { 9642: 9642: 9642: 9642: 9642: return __x._M_thread == __y._M_thread; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: template<> 9642: struct hash 9642: : public __hash_base 9642: { 9642: size_t 9642: operator()(const thread::id& __id) const noexcept 9642: { return std::_Hash_impl::hash(__id._M_thread); } 9642: }; 9642: 9642: namespace this_thread 9642: { 9642: 9642: inline thread::id 9642: get_id() noexcept 9642: { 9642: 9642: 9642: 9642: return thread::id(pthread_self()); 9642: 9642: 9642: 9642: } 9642: 9642: 9642: inline void 9642: yield() noexcept 9642: { 9642: 9642: __gthread_yield(); 9642: 9642: } 9642: 9642: } 9642: 9642: 9642: 9642: 9642: } 9642: # 46 "/usr/include/c++/13/thread" 2 3 9642: # 1 "/usr/include/c++/13/bits/this_thread_sleep.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/this_thread_sleep.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/this_thread_sleep.h" 3 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/chrono.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/chrono.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/chrono.h" 3 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/ratio" 1 3 9642: # 33 "/usr/include/c++/13/ratio" 3 9642: 9642: # 34 "/usr/include/c++/13/ratio" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/cstdint" 1 3 9642: # 32 "/usr/include/c++/13/cstdint" 3 9642: 9642: # 33 "/usr/include/c++/13/cstdint" 3 9642: # 48 "/usr/include/c++/13/cstdint" 3 9642: namespace std 9642: { 9642: 9642: using ::int8_t; 9642: using ::int16_t; 9642: using ::int32_t; 9642: using ::int64_t; 9642: 9642: using ::int_fast8_t; 9642: using ::int_fast16_t; 9642: using ::int_fast32_t; 9642: using ::int_fast64_t; 9642: 9642: using ::int_least8_t; 9642: using ::int_least16_t; 9642: using ::int_least32_t; 9642: using ::int_least64_t; 9642: 9642: using ::intmax_t; 9642: using ::intptr_t; 9642: 9642: using ::uint8_t; 9642: using ::uint16_t; 9642: using ::uint32_t; 9642: using ::uint64_t; 9642: 9642: using ::uint_fast8_t; 9642: using ::uint_fast16_t; 9642: using ::uint_fast32_t; 9642: using ::uint_fast64_t; 9642: 9642: using ::uint_least8_t; 9642: using ::uint_least16_t; 9642: using ::uint_least32_t; 9642: using ::uint_least64_t; 9642: 9642: using ::uintmax_t; 9642: using ::uintptr_t; 9642: # 142 "/usr/include/c++/13/cstdint" 3 9642: } 9642: # 41 "/usr/include/c++/13/ratio" 2 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 56 "/usr/include/c++/13/ratio" 3 9642: template 9642: struct __static_sign 9642: : integral_constant 9642: { }; 9642: 9642: template 9642: struct __static_abs 9642: : integral_constant::value> 9642: { }; 9642: 9642: template 9642: struct __static_gcd 9642: : __static_gcd<_Qn, (_Pn % _Qn)> 9642: { }; 9642: 9642: template 9642: struct __static_gcd<_Pn, 0> 9642: : integral_constant::value> 9642: { }; 9642: 9642: template 9642: struct __static_gcd<0, _Qn> 9642: : integral_constant::value> 9642: { }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct __safe_multiply 9642: { 9642: private: 9642: static const uintmax_t __c = uintmax_t(1) << (sizeof(intmax_t) * 4); 9642: 9642: static const uintmax_t __a0 = __static_abs<_Pn>::value % __c; 9642: static const uintmax_t __a1 = __static_abs<_Pn>::value / __c; 9642: static const uintmax_t __b0 = __static_abs<_Qn>::value % __c; 9642: static const uintmax_t __b1 = __static_abs<_Qn>::value / __c; 9642: 9642: static_assert(__a1 == 0 || __b1 == 0, 9642: "overflow in multiplication"); 9642: static_assert(__a0 * __b1 + __b0 * __a1 < (__c >> 1), 9642: "overflow in multiplication"); 9642: static_assert(__b0 * __a0 <= 0x7fffffffffffffffLL, 9642: "overflow in multiplication"); 9642: static_assert((__a0 * __b1 + __b0 * __a1) * __c 9642: <= 0x7fffffffffffffffLL - __b0 * __a0, 9642: "overflow in multiplication"); 9642: 9642: public: 9642: static const intmax_t value = _Pn * _Qn; 9642: }; 9642: 9642: 9642: 9642: template 9642: struct __big_less 9642: : integral_constant 9642: { }; 9642: 9642: template 9642: struct __big_add 9642: { 9642: static constexpr uintmax_t __lo = __lo1 + __lo2; 9642: static constexpr uintmax_t __hi = (__hi1 + __hi2 + 9642: (__lo1 + __lo2 < __lo1)); 9642: }; 9642: 9642: 9642: template 9642: struct __big_sub 9642: { 9642: static_assert(!__big_less<__hi1, __lo1, __hi2, __lo2>::value, 9642: "Internal library error"); 9642: static constexpr uintmax_t __lo = __lo1 - __lo2; 9642: static constexpr uintmax_t __hi = (__hi1 - __hi2 - 9642: (__lo1 < __lo2)); 9642: }; 9642: 9642: 9642: template 9642: struct __big_mul 9642: { 9642: private: 9642: static constexpr uintmax_t __c = uintmax_t(1) << (sizeof(intmax_t) * 4); 9642: static constexpr uintmax_t __x0 = __x % __c; 9642: static constexpr uintmax_t __x1 = __x / __c; 9642: static constexpr uintmax_t __y0 = __y % __c; 9642: static constexpr uintmax_t __y1 = __y / __c; 9642: static constexpr uintmax_t __x0y0 = __x0 * __y0; 9642: static constexpr uintmax_t __x0y1 = __x0 * __y1; 9642: static constexpr uintmax_t __x1y0 = __x1 * __y0; 9642: static constexpr uintmax_t __x1y1 = __x1 * __y1; 9642: static constexpr uintmax_t __mix = __x0y1 + __x1y0; 9642: static constexpr uintmax_t __mix_lo = __mix * __c; 9642: static constexpr uintmax_t __mix_hi 9642: = __mix / __c + ((__mix < __x0y1) ? __c : 0); 9642: typedef __big_add<__mix_hi, __mix_lo, __x1y1, __x0y0> _Res; 9642: public: 9642: static constexpr uintmax_t __hi = _Res::__hi; 9642: static constexpr uintmax_t __lo = _Res::__lo; 9642: }; 9642: 9642: 9642: 9642: template 9642: struct __big_div_impl 9642: { 9642: private: 9642: static_assert(__d >= (uintmax_t(1) << (sizeof(intmax_t) * 8 - 1)), 9642: "Internal library error"); 9642: static_assert(__n1 < __d, "Internal library error"); 9642: static constexpr uintmax_t __c = uintmax_t(1) << (sizeof(intmax_t) * 4); 9642: static constexpr uintmax_t __d1 = __d / __c; 9642: static constexpr uintmax_t __d0 = __d % __c; 9642: 9642: static constexpr uintmax_t __q1x = __n1 / __d1; 9642: static constexpr uintmax_t __r1x = __n1 % __d1; 9642: static constexpr uintmax_t __m = __q1x * __d0; 9642: static constexpr uintmax_t __r1y = __r1x * __c + __n0 / __c; 9642: static constexpr uintmax_t __r1z = __r1y + __d; 9642: static constexpr uintmax_t __r1 9642: = ((__r1y < __m) ? ((__r1z >= __d) && (__r1z < __m)) 9642: ? (__r1z + __d) : __r1z : __r1y) - __m; 9642: static constexpr uintmax_t __q1 9642: = __q1x - ((__r1y < __m) 9642: ? ((__r1z >= __d) && (__r1z < __m)) ? 2 : 1 : 0); 9642: static constexpr uintmax_t __q0x = __r1 / __d1; 9642: static constexpr uintmax_t __r0x = __r1 % __d1; 9642: static constexpr uintmax_t __n = __q0x * __d0; 9642: static constexpr uintmax_t __r0y = __r0x * __c + __n0 % __c; 9642: static constexpr uintmax_t __r0z = __r0y + __d; 9642: static constexpr uintmax_t __r0 9642: = ((__r0y < __n) ? ((__r0z >= __d) && (__r0z < __n)) 9642: ? (__r0z + __d) : __r0z : __r0y) - __n; 9642: static constexpr uintmax_t __q0 9642: = __q0x - ((__r0y < __n) ? ((__r0z >= __d) 9642: && (__r0z < __n)) ? 2 : 1 : 0); 9642: 9642: public: 9642: static constexpr uintmax_t __quot = __q1 * __c + __q0; 9642: static constexpr uintmax_t __rem = __r0; 9642: 9642: private: 9642: typedef __big_mul<__quot, __d> _Prod; 9642: typedef __big_add<_Prod::__hi, _Prod::__lo, 0, __rem> _Sum; 9642: static_assert(_Sum::__hi == __n1 && _Sum::__lo == __n0, 9642: "Internal library error"); 9642: }; 9642: 9642: template 9642: struct __big_div 9642: { 9642: private: 9642: static_assert(__d != 0, "Internal library error"); 9642: static_assert(sizeof (uintmax_t) == sizeof (unsigned long long), 9642: "This library calls __builtin_clzll on uintmax_t, which " 9642: "is unsafe on your platform. Please complain to " 9642: "http://gcc.gnu.org/bugzilla/"); 9642: static constexpr int __shift = __builtin_clzll(__d); 9642: static constexpr int __coshift_ = sizeof(uintmax_t) * 8 - __shift; 9642: static constexpr int __coshift = (__shift != 0) ? __coshift_ : 0; 9642: static constexpr uintmax_t __c1 = uintmax_t(1) << __shift; 9642: static constexpr uintmax_t __c2 = uintmax_t(1) << __coshift; 9642: static constexpr uintmax_t __new_d = __d * __c1; 9642: static constexpr uintmax_t __new_n0 = __n0 * __c1; 9642: static constexpr uintmax_t __n1_shifted = (__n1 % __d) * __c1; 9642: static constexpr uintmax_t __n0_top = (__shift != 0) ? (__n0 / __c2) : 0; 9642: static constexpr uintmax_t __new_n1 = __n1_shifted + __n0_top; 9642: typedef __big_div_impl<__new_n1, __new_n0, __new_d> _Res; 9642: 9642: public: 9642: static constexpr uintmax_t __quot_hi = __n1 / __d; 9642: static constexpr uintmax_t __quot_lo = _Res::__quot; 9642: static constexpr uintmax_t __rem = _Res::__rem / __c1; 9642: 9642: private: 9642: typedef __big_mul<__quot_lo, __d> _P0; 9642: typedef __big_mul<__quot_hi, __d> _P1; 9642: typedef __big_add<_P0::__hi, _P0::__lo, _P1::__lo, __rem> _Sum; 9642: 9642: static_assert(_P1::__hi == 0, "Internal library error"); 9642: static_assert(_Sum::__hi >= _P0::__hi, "Internal library error"); 9642: 9642: static_assert(_Sum::__hi == __n1 && _Sum::__lo == __n0, 9642: "Internal library error"); 9642: static_assert(__rem < __d, "Internal library error"); 9642: }; 9642: # 265 "/usr/include/c++/13/ratio" 3 9642: template 9642: struct ratio 9642: { 9642: static_assert(_Den != 0, "denominator cannot be zero"); 9642: static_assert(_Num >= -0x7fffffffffffffffLL && _Den >= -0x7fffffffffffffffLL, 9642: "out of range"); 9642: 9642: 9642: static constexpr intmax_t num = 9642: _Num * __static_sign<_Den>::value / __static_gcd<_Num, _Den>::value; 9642: 9642: static constexpr intmax_t den = 9642: __static_abs<_Den>::value / __static_gcd<_Num, _Den>::value; 9642: 9642: typedef ratio type; 9642: }; 9642: # 292 "/usr/include/c++/13/ratio" 3 9642: template 9642: struct __is_ratio 9642: : std::false_type 9642: { }; 9642: 9642: template 9642: struct __is_ratio> 9642: : std::true_type 9642: { }; 9642: 9642: 9642: template 9642: constexpr bool __is_ratio_v = false; 9642: template 9642: constexpr bool __is_ratio_v> = true; 9642: 9642: 9642: template 9642: constexpr bool 9642: __are_both_ratios() noexcept 9642: { 9642: 9642: if constexpr (__is_ratio_v<_R1>) 9642: if constexpr (__is_ratio_v<_R2>) 9642: return true; 9642: return false; 9642: 9642: 9642: 9642: } 9642: 9642: template 9642: struct __ratio_multiply 9642: { 9642: static_assert(std::__are_both_ratios<_R1, _R2>(), 9642: "both template arguments must be a std::ratio"); 9642: 9642: private: 9642: static const intmax_t __gcd1 = 9642: __static_gcd<_R1::num, _R2::den>::value; 9642: static const intmax_t __gcd2 = 9642: __static_gcd<_R2::num, _R1::den>::value; 9642: 9642: public: 9642: typedef ratio< 9642: __safe_multiply<(_R1::num / __gcd1), 9642: (_R2::num / __gcd2)>::value, 9642: __safe_multiply<(_R1::den / __gcd2), 9642: (_R2::den / __gcd1)>::value> type; 9642: 9642: static constexpr intmax_t num = type::num; 9642: static constexpr intmax_t den = type::den; 9642: }; 9642: # 357 "/usr/include/c++/13/ratio" 3 9642: template 9642: using ratio_multiply = typename __ratio_multiply<_R1, _R2>::type; 9642: 9642: 9642: 9642: template 9642: struct __ratio_divide 9642: { 9642: static_assert(_R2::num != 0, "division by 0"); 9642: 9642: typedef typename __ratio_multiply< 9642: _R1, 9642: ratio<_R2::den, _R2::num>>::type type; 9642: 9642: static constexpr intmax_t num = type::num; 9642: static constexpr intmax_t den = type::den; 9642: }; 9642: # 386 "/usr/include/c++/13/ratio" 3 9642: template 9642: using ratio_divide = typename __ratio_divide<_R1, _R2>::type; 9642: 9642: 9642: template 9642: struct ratio_equal 9642: : integral_constant 9642: { 9642: static_assert(std::__are_both_ratios<_R1, _R2>(), 9642: "both template arguments must be a std::ratio"); 9642: }; 9642: 9642: 9642: template 9642: struct ratio_not_equal 9642: : integral_constant::value> 9642: { }; 9642: 9642: 9642: 9642: 9642: template, 9642: typename _Right = __big_mul<_R2::num,_R1::den> > 9642: struct __ratio_less_impl_1 9642: : integral_constant::value> 9642: { }; 9642: 9642: template::value 9642: != __static_sign<_R2::num>::value)), 9642: bool = (__static_sign<_R1::num>::value == -1 9642: && __static_sign<_R2::num>::value == -1)> 9642: struct __ratio_less_impl 9642: : __ratio_less_impl_1<_R1, _R2>::type 9642: { }; 9642: 9642: template 9642: struct __ratio_less_impl<_R1, _R2, true, false> 9642: : integral_constant 9642: { }; 9642: 9642: template 9642: struct __ratio_less_impl<_R1, _R2, false, true> 9642: : __ratio_less_impl_1, 9642: ratio<-_R1::num, _R1::den> >::type 9642: { }; 9642: 9642: 9642: 9642: 9642: template 9642: struct ratio_less 9642: : __ratio_less_impl<_R1, _R2>::type 9642: { 9642: static_assert(std::__are_both_ratios<_R1, _R2>(), 9642: "both template arguments must be a std::ratio"); 9642: }; 9642: 9642: 9642: template 9642: struct ratio_less_equal 9642: : integral_constant::value> 9642: { }; 9642: 9642: 9642: template 9642: struct ratio_greater 9642: : integral_constant::value> 9642: { }; 9642: 9642: 9642: template 9642: struct ratio_greater_equal 9642: : integral_constant::value> 9642: { }; 9642: 9642: 9642: template 9642: inline constexpr bool ratio_equal_v = ratio_equal<_R1, _R2>::value; 9642: template 9642: inline constexpr bool ratio_not_equal_v = ratio_not_equal<_R1, _R2>::value; 9642: template 9642: inline constexpr bool ratio_less_v = ratio_less<_R1, _R2>::value; 9642: template 9642: inline constexpr bool ratio_less_equal_v 9642: = ratio_less_equal<_R1, _R2>::value; 9642: template 9642: inline constexpr bool ratio_greater_v = ratio_greater<_R1, _R2>::value; 9642: template 9642: inline constexpr bool ratio_greater_equal_v 9642: = ratio_greater_equal<_R1, _R2>::value; 9642: 9642: 9642: 9642: 9642: template= 0), 9642: bool = (_R2::num >= 0), 9642: bool = ratio_less::value, _R1::den>, 9642: ratio<__static_abs<_R2::num>::value, _R2::den> >::value> 9642: struct __ratio_add_impl 9642: { 9642: private: 9642: typedef typename __ratio_add_impl< 9642: ratio<-_R1::num, _R1::den>, 9642: ratio<-_R2::num, _R2::den> >::type __t; 9642: public: 9642: typedef ratio<-__t::num, __t::den> type; 9642: }; 9642: 9642: 9642: template 9642: struct __ratio_add_impl<_R1, _R2, true, true, __b> 9642: { 9642: private: 9642: static constexpr uintmax_t __g = __static_gcd<_R1::den, _R2::den>::value; 9642: static constexpr uintmax_t __d2 = _R2::den / __g; 9642: typedef __big_mul<_R1::den, __d2> __d; 9642: typedef __big_mul<_R1::num, _R2::den / __g> __x; 9642: typedef __big_mul<_R2::num, _R1::den / __g> __y; 9642: typedef __big_add<__x::__hi, __x::__lo, __y::__hi, __y::__lo> __n; 9642: static_assert(__n::__hi >= __x::__hi, "Internal library error"); 9642: typedef __big_div<__n::__hi, __n::__lo, __g> __ng; 9642: static constexpr uintmax_t __g2 = __static_gcd<__ng::__rem, __g>::value; 9642: typedef __big_div<__n::__hi, __n::__lo, __g2> __n_final; 9642: static_assert(__n_final::__rem == 0, "Internal library error"); 9642: static_assert(__n_final::__quot_hi == 0 && 9642: __n_final::__quot_lo <= 0x7fffffffffffffffLL, "overflow in addition"); 9642: typedef __big_mul<_R1::den / __g2, __d2> __d_final; 9642: static_assert(__d_final::__hi == 0 && 9642: __d_final::__lo <= 0x7fffffffffffffffLL, "overflow in addition"); 9642: public: 9642: typedef ratio<__n_final::__quot_lo, __d_final::__lo> type; 9642: }; 9642: 9642: template 9642: struct __ratio_add_impl<_R1, _R2, false, true, true> 9642: : __ratio_add_impl<_R2, _R1> 9642: { }; 9642: 9642: 9642: template 9642: struct __ratio_add_impl<_R1, _R2, true, false, false> 9642: { 9642: private: 9642: static constexpr uintmax_t __g = __static_gcd<_R1::den, _R2::den>::value; 9642: static constexpr uintmax_t __d2 = _R2::den / __g; 9642: typedef __big_mul<_R1::den, __d2> __d; 9642: typedef __big_mul<_R1::num, _R2::den / __g> __x; 9642: typedef __big_mul<-_R2::num, _R1::den / __g> __y; 9642: typedef __big_sub<__x::__hi, __x::__lo, __y::__hi, __y::__lo> __n; 9642: typedef __big_div<__n::__hi, __n::__lo, __g> __ng; 9642: static constexpr uintmax_t __g2 = __static_gcd<__ng::__rem, __g>::value; 9642: typedef __big_div<__n::__hi, __n::__lo, __g2> __n_final; 9642: static_assert(__n_final::__rem == 0, "Internal library error"); 9642: static_assert(__n_final::__quot_hi == 0 && 9642: __n_final::__quot_lo <= 0x7fffffffffffffffLL, "overflow in addition"); 9642: typedef __big_mul<_R1::den / __g2, __d2> __d_final; 9642: static_assert(__d_final::__hi == 0 && 9642: __d_final::__lo <= 0x7fffffffffffffffLL, "overflow in addition"); 9642: public: 9642: typedef ratio<__n_final::__quot_lo, __d_final::__lo> type; 9642: }; 9642: 9642: template 9642: struct __ratio_add 9642: { 9642: static_assert(std::__are_both_ratios<_R1, _R2>(), 9642: "both template arguments must be a std::ratio"); 9642: 9642: typedef typename __ratio_add_impl<_R1, _R2>::type type; 9642: static constexpr intmax_t num = type::num; 9642: static constexpr intmax_t den = type::den; 9642: }; 9642: # 575 "/usr/include/c++/13/ratio" 3 9642: template 9642: using ratio_add = typename __ratio_add<_R1, _R2>::type; 9642: 9642: 9642: 9642: template 9642: struct __ratio_subtract 9642: { 9642: typedef typename __ratio_add< 9642: _R1, 9642: ratio<-_R2::num, _R2::den>>::type type; 9642: 9642: static constexpr intmax_t num = type::num; 9642: static constexpr intmax_t den = type::den; 9642: }; 9642: # 602 "/usr/include/c++/13/ratio" 3 9642: template 9642: using ratio_subtract = typename __ratio_subtract<_R1, _R2>::type; 9642: 9642: 9642: typedef ratio<1, 1000000000000000000> atto; 9642: typedef ratio<1, 1000000000000000> femto; 9642: typedef ratio<1, 1000000000000> pico; 9642: typedef ratio<1, 1000000000> nano; 9642: typedef ratio<1, 1000000> micro; 9642: typedef ratio<1, 1000> milli; 9642: typedef ratio<1, 100> centi; 9642: typedef ratio<1, 10> deci; 9642: typedef ratio< 10, 1> deca; 9642: typedef ratio< 100, 1> hecto; 9642: typedef ratio< 1000, 1> kilo; 9642: typedef ratio< 1000000, 1> mega; 9642: typedef ratio< 1000000000, 1> giga; 9642: typedef ratio< 1000000000000, 1> tera; 9642: typedef ratio< 1000000000000000, 1> peta; 9642: typedef ratio< 1000000000000000000, 1> exa; 9642: 9642: 9642: 9642: } 9642: # 38 "/usr/include/c++/13/bits/chrono.h" 2 3 9642: 9642: # 1 "/usr/include/c++/13/limits" 1 3 9642: # 40 "/usr/include/c++/13/limits" 3 9642: 9642: # 41 "/usr/include/c++/13/limits" 3 9642: # 158 "/usr/include/c++/13/limits" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: enum float_round_style 9642: { 9642: round_indeterminate = -1, 9642: round_toward_zero = 0, 9642: round_to_nearest = 1, 9642: round_toward_infinity = 2, 9642: round_toward_neg_infinity = 3 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: enum float_denorm_style 9642: { 9642: 9642: denorm_indeterminate = -1, 9642: 9642: denorm_absent = 0, 9642: 9642: denorm_present = 1 9642: }; 9642: # 202 "/usr/include/c++/13/limits" 3 9642: struct __numeric_limits_base 9642: { 9642: 9642: 9642: static constexpr bool is_specialized = false; 9642: 9642: 9642: 9642: 9642: static constexpr int digits = 0; 9642: 9642: 9642: static constexpr int digits10 = 0; 9642: 9642: 9642: 9642: 9642: static constexpr int max_digits10 = 0; 9642: 9642: 9642: 9642: static constexpr bool is_signed = false; 9642: 9642: 9642: static constexpr bool is_integer = false; 9642: 9642: 9642: 9642: 9642: static constexpr bool is_exact = false; 9642: 9642: 9642: 9642: static constexpr int radix = 0; 9642: 9642: 9642: 9642: static constexpr int min_exponent = 0; 9642: 9642: 9642: 9642: static constexpr int min_exponent10 = 0; 9642: 9642: 9642: 9642: 9642: static constexpr int max_exponent = 0; 9642: 9642: 9642: 9642: static constexpr int max_exponent10 = 0; 9642: 9642: 9642: static constexpr bool has_infinity = false; 9642: 9642: 9642: 9642: static constexpr bool has_quiet_NaN = false; 9642: 9642: 9642: 9642: static constexpr bool has_signaling_NaN = false; 9642: 9642: 9642: static constexpr float_denorm_style has_denorm = denorm_absent; 9642: 9642: 9642: 9642: static constexpr bool has_denorm_loss = false; 9642: 9642: 9642: 9642: static constexpr bool is_iec559 = false; 9642: 9642: 9642: 9642: 9642: static constexpr bool is_bounded = false; 9642: # 288 "/usr/include/c++/13/limits" 3 9642: static constexpr bool is_modulo = false; 9642: 9642: 9642: static constexpr bool traps = false; 9642: 9642: 9642: static constexpr bool tinyness_before = false; 9642: 9642: 9642: 9642: 9642: static constexpr float_round_style round_style = 9642: round_toward_zero; 9642: }; 9642: # 311 "/usr/include/c++/13/limits" 3 9642: template 9642: struct numeric_limits : public __numeric_limits_base 9642: { 9642: 9642: 9642: static constexpr _Tp 9642: min() noexcept { return _Tp(); } 9642: 9642: 9642: static constexpr _Tp 9642: max() noexcept { return _Tp(); } 9642: 9642: 9642: 9642: 9642: static constexpr _Tp 9642: lowest() noexcept { return _Tp(); } 9642: 9642: 9642: 9642: 9642: static constexpr _Tp 9642: epsilon() noexcept { return _Tp(); } 9642: 9642: 9642: static constexpr _Tp 9642: round_error() noexcept { return _Tp(); } 9642: 9642: 9642: static constexpr _Tp 9642: infinity() noexcept { return _Tp(); } 9642: 9642: 9642: 9642: static constexpr _Tp 9642: quiet_NaN() noexcept { return _Tp(); } 9642: 9642: 9642: 9642: static constexpr _Tp 9642: signaling_NaN() noexcept { return _Tp(); } 9642: 9642: 9642: 9642: 9642: static constexpr _Tp 9642: denorm_min() noexcept { return _Tp(); } 9642: }; 9642: 9642: 9642: 9642: 9642: template 9642: struct numeric_limits 9642: : public numeric_limits<_Tp> { }; 9642: 9642: template 9642: struct numeric_limits 9642: : public numeric_limits<_Tp> { }; 9642: 9642: template 9642: struct numeric_limits 9642: : public numeric_limits<_Tp> { }; 9642: # 383 "/usr/include/c++/13/limits" 3 9642: template<> 9642: struct numeric_limits 9642: { 9642: static constexpr bool is_specialized = true; 9642: 9642: static constexpr bool 9642: min() noexcept { return false; } 9642: 9642: static constexpr bool 9642: max() noexcept { return true; } 9642: 9642: 9642: static constexpr bool 9642: lowest() noexcept { return min(); } 9642: 9642: static constexpr int digits = 1; 9642: static constexpr int digits10 = 0; 9642: 9642: static constexpr int max_digits10 = 0; 9642: 9642: static constexpr bool is_signed = false; 9642: static constexpr bool is_integer = true; 9642: static constexpr bool is_exact = true; 9642: static constexpr int radix = 2; 9642: 9642: static constexpr bool 9642: epsilon() noexcept { return false; } 9642: 9642: static constexpr bool 9642: round_error() noexcept { return false; } 9642: 9642: static constexpr int min_exponent = 0; 9642: static constexpr int min_exponent10 = 0; 9642: static constexpr int max_exponent = 0; 9642: static constexpr int max_exponent10 = 0; 9642: 9642: static constexpr bool has_infinity = false; 9642: static constexpr bool has_quiet_NaN = false; 9642: static constexpr bool has_signaling_NaN = false; 9642: static constexpr float_denorm_style has_denorm 9642: = denorm_absent; 9642: static constexpr bool has_denorm_loss = false; 9642: 9642: static constexpr bool 9642: infinity() noexcept { return false; } 9642: 9642: static constexpr bool 9642: quiet_NaN() noexcept { return false; } 9642: 9642: static constexpr bool 9642: signaling_NaN() noexcept { return false; } 9642: 9642: static constexpr bool 9642: denorm_min() noexcept { return false; } 9642: 9642: static constexpr bool is_iec559 = false; 9642: static constexpr bool is_bounded = true; 9642: static constexpr bool is_modulo = false; 9642: 9642: 9642: 9642: 9642: static constexpr bool traps = false; 9642: static constexpr bool tinyness_before = false; 9642: static constexpr float_round_style round_style 9642: = round_toward_zero; 9642: }; 9642: 9642: 9642: template<> 9642: struct numeric_limits 9642: { 9642: static constexpr bool is_specialized = true; 9642: 9642: static constexpr char 9642: min() noexcept { return (((char)(-1) < 0) ? -(((char)(-1) < 0) ? (((((char)1 << ((sizeof(char) * 8 - ((char)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char)0) - 1 : (char)0); } 9642: 9642: static constexpr char 9642: max() noexcept { return (((char)(-1) < 0) ? (((((char)1 << ((sizeof(char) * 8 - ((char)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char)0); } 9642: 9642: 9642: static constexpr char 9642: lowest() noexcept { return min(); } 9642: 9642: 9642: static constexpr int digits = (sizeof(char) * 8 - ((char)(-1) < 0)); 9642: static constexpr int digits10 = ((sizeof(char) * 8 - ((char)(-1) < 0)) * 643L / 2136); 9642: 9642: static constexpr int max_digits10 = 0; 9642: 9642: static constexpr bool is_signed = ((char)(-1) < 0); 9642: static constexpr bool is_integer = true; 9642: static constexpr bool is_exact = true; 9642: static constexpr int radix = 2; 9642: 9642: static constexpr char 9642: epsilon() noexcept { return 0; } 9642: 9642: static constexpr char 9642: round_error() noexcept { return 0; } 9642: 9642: static constexpr int min_exponent = 0; 9642: static constexpr int min_exponent10 = 0; 9642: static constexpr int max_exponent = 0; 9642: static constexpr int max_exponent10 = 0; 9642: 9642: static constexpr bool has_infinity = false; 9642: static constexpr bool has_quiet_NaN = false; 9642: static constexpr bool has_signaling_NaN = false; 9642: static constexpr float_denorm_style has_denorm 9642: = denorm_absent; 9642: static constexpr bool has_denorm_loss = false; 9642: 9642: static constexpr 9642: char infinity() noexcept { return char(); } 9642: 9642: static constexpr char 9642: quiet_NaN() noexcept { return char(); } 9642: 9642: static constexpr char 9642: signaling_NaN() noexcept { return char(); } 9642: 9642: static constexpr char 9642: denorm_min() noexcept { return static_cast(0); } 9642: 9642: static constexpr bool is_iec559 = false; 9642: static constexpr bool is_bounded = true; 9642: static constexpr bool is_modulo = !is_signed; 9642: 9642: static constexpr bool traps = false; 9642: static constexpr bool tinyness_before = false; 9642: static constexpr float_round_style round_style 9642: = round_toward_zero; 9642: }; 9642: 9642: 9642: template<> 9642: struct numeric_limits 9642: { 9642: static constexpr bool is_specialized = true; 9642: 9642: static constexpr signed char 9642: min() noexcept { return -0x7f - 1; } 9642: 9642: static constexpr signed char 9642: max() noexcept { return 0x7f; } 9642: 9642: 9642: static constexpr signed char 9642: lowest() noexcept { return min(); } 9642: 9642: 9642: static constexpr int digits = (sizeof(signed char) * 8 - ((signed char)(-1) < 0)); 9642: static constexpr int digits10 9642: = ((sizeof(signed char) * 8 - ((signed char)(-1) < 0)) * 643L / 2136); 9642: 9642: static constexpr int max_digits10 = 0; 9642: 9642: static constexpr bool is_signed = true; 9642: static constexpr bool is_integer = true; 9642: static constexpr bool is_exact = true; 9642: static constexpr int radix = 2; 9642: 9642: static constexpr signed char 9642: epsilon() noexcept { return 0; } 9642: 9642: static constexpr signed char 9642: round_error() noexcept { return 0; } 9642: 9642: static constexpr int min_exponent = 0; 9642: static constexpr int min_exponent10 = 0; 9642: static constexpr int max_exponent = 0; 9642: static constexpr int max_exponent10 = 0; 9642: 9642: static constexpr bool has_infinity = false; 9642: static constexpr bool has_quiet_NaN = false; 9642: static constexpr bool has_signaling_NaN = false; 9642: static constexpr float_denorm_style has_denorm 9642: = denorm_absent; 9642: static constexpr bool has_denorm_loss = false; 9642: 9642: static constexpr signed char 9642: infinity() noexcept { return static_cast(0); } 9642: 9642: static constexpr signed char 9642: quiet_NaN() noexcept { return static_cast(0); } 9642: 9642: static constexpr signed char 9642: signaling_NaN() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr signed char 9642: denorm_min() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr bool is_iec559 = false; 9642: static constexpr bool is_bounded = true; 9642: static constexpr bool is_modulo = false; 9642: 9642: static constexpr bool traps = false; 9642: static constexpr bool tinyness_before = false; 9642: static constexpr float_round_style round_style 9642: = round_toward_zero; 9642: }; 9642: 9642: 9642: template<> 9642: struct numeric_limits 9642: { 9642: static constexpr bool is_specialized = true; 9642: 9642: static constexpr unsigned char 9642: min() noexcept { return 0; } 9642: 9642: static constexpr unsigned char 9642: max() noexcept { return 0x7f * 2U + 1; } 9642: 9642: 9642: static constexpr unsigned char 9642: lowest() noexcept { return min(); } 9642: 9642: 9642: static constexpr int digits 9642: = (sizeof(unsigned char) * 8 - ((unsigned char)(-1) < 0)); 9642: static constexpr int digits10 9642: = ((sizeof(unsigned char) * 8 - ((unsigned char)(-1) < 0)) * 643L / 2136); 9642: 9642: static constexpr int max_digits10 = 0; 9642: 9642: static constexpr bool is_signed = false; 9642: static constexpr bool is_integer = true; 9642: static constexpr bool is_exact = true; 9642: static constexpr int radix = 2; 9642: 9642: static constexpr unsigned char 9642: epsilon() noexcept { return 0; } 9642: 9642: static constexpr unsigned char 9642: round_error() noexcept { return 0; } 9642: 9642: static constexpr int min_exponent = 0; 9642: static constexpr int min_exponent10 = 0; 9642: static constexpr int max_exponent = 0; 9642: static constexpr int max_exponent10 = 0; 9642: 9642: static constexpr bool has_infinity = false; 9642: static constexpr bool has_quiet_NaN = false; 9642: static constexpr bool has_signaling_NaN = false; 9642: static constexpr float_denorm_style has_denorm 9642: = denorm_absent; 9642: static constexpr bool has_denorm_loss = false; 9642: 9642: static constexpr unsigned char 9642: infinity() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr unsigned char 9642: quiet_NaN() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr unsigned char 9642: signaling_NaN() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr unsigned char 9642: denorm_min() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr bool is_iec559 = false; 9642: static constexpr bool is_bounded = true; 9642: static constexpr bool is_modulo = true; 9642: 9642: static constexpr bool traps = false; 9642: static constexpr bool tinyness_before = false; 9642: static constexpr float_round_style round_style 9642: = round_toward_zero; 9642: }; 9642: 9642: 9642: template<> 9642: struct numeric_limits 9642: { 9642: static constexpr bool is_specialized = true; 9642: 9642: static constexpr wchar_t 9642: min() noexcept { return (((wchar_t)(-1) < 0) ? -(((wchar_t)(-1) < 0) ? (((((wchar_t)1 << ((sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(wchar_t)0) - 1 : (wchar_t)0); } 9642: 9642: static constexpr wchar_t 9642: max() noexcept { return (((wchar_t)(-1) < 0) ? (((((wchar_t)1 << ((sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(wchar_t)0); } 9642: 9642: 9642: static constexpr wchar_t 9642: lowest() noexcept { return min(); } 9642: 9642: 9642: static constexpr int digits = (sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)); 9642: static constexpr int digits10 9642: = ((sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) * 643L / 2136); 9642: 9642: static constexpr int max_digits10 = 0; 9642: 9642: static constexpr bool is_signed = ((wchar_t)(-1) < 0); 9642: static constexpr bool is_integer = true; 9642: static constexpr bool is_exact = true; 9642: static constexpr int radix = 2; 9642: 9642: static constexpr wchar_t 9642: epsilon() noexcept { return 0; } 9642: 9642: static constexpr wchar_t 9642: round_error() noexcept { return 0; } 9642: 9642: static constexpr int min_exponent = 0; 9642: static constexpr int min_exponent10 = 0; 9642: static constexpr int max_exponent = 0; 9642: static constexpr int max_exponent10 = 0; 9642: 9642: static constexpr bool has_infinity = false; 9642: static constexpr bool has_quiet_NaN = false; 9642: static constexpr bool has_signaling_NaN = false; 9642: static constexpr float_denorm_style has_denorm 9642: = denorm_absent; 9642: static constexpr bool has_denorm_loss = false; 9642: 9642: static constexpr wchar_t 9642: infinity() noexcept { return wchar_t(); } 9642: 9642: static constexpr wchar_t 9642: quiet_NaN() noexcept { return wchar_t(); } 9642: 9642: static constexpr wchar_t 9642: signaling_NaN() noexcept { return wchar_t(); } 9642: 9642: static constexpr wchar_t 9642: denorm_min() noexcept { return wchar_t(); } 9642: 9642: static constexpr bool is_iec559 = false; 9642: static constexpr bool is_bounded = true; 9642: static constexpr bool is_modulo = !is_signed; 9642: 9642: static constexpr bool traps = false; 9642: static constexpr bool tinyness_before = false; 9642: static constexpr float_round_style round_style 9642: = round_toward_zero; 9642: }; 9642: # 796 "/usr/include/c++/13/limits" 3 9642: template<> 9642: struct numeric_limits 9642: { 9642: static constexpr bool is_specialized = true; 9642: 9642: static constexpr char16_t 9642: min() noexcept { return (((char16_t)(-1) < 0) ? -(((char16_t)(-1) < 0) ? (((((char16_t)1 << ((sizeof(char16_t) * 8 - ((char16_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char16_t)0) - 1 : (char16_t)0); } 9642: 9642: static constexpr char16_t 9642: max() noexcept { return (((char16_t)(-1) < 0) ? (((((char16_t)1 << ((sizeof(char16_t) * 8 - ((char16_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char16_t)0); } 9642: 9642: static constexpr char16_t 9642: lowest() noexcept { return min(); } 9642: 9642: static constexpr int digits = (sizeof(char16_t) * 8 - ((char16_t)(-1) < 0)); 9642: static constexpr int digits10 = ((sizeof(char16_t) * 8 - ((char16_t)(-1) < 0)) * 643L / 2136); 9642: static constexpr int max_digits10 = 0; 9642: static constexpr bool is_signed = ((char16_t)(-1) < 0); 9642: static constexpr bool is_integer = true; 9642: static constexpr bool is_exact = true; 9642: static constexpr int radix = 2; 9642: 9642: static constexpr char16_t 9642: epsilon() noexcept { return 0; } 9642: 9642: static constexpr char16_t 9642: round_error() noexcept { return 0; } 9642: 9642: static constexpr int min_exponent = 0; 9642: static constexpr int min_exponent10 = 0; 9642: static constexpr int max_exponent = 0; 9642: static constexpr int max_exponent10 = 0; 9642: 9642: static constexpr bool has_infinity = false; 9642: static constexpr bool has_quiet_NaN = false; 9642: static constexpr bool has_signaling_NaN = false; 9642: static constexpr float_denorm_style has_denorm = denorm_absent; 9642: static constexpr bool has_denorm_loss = false; 9642: 9642: static constexpr char16_t 9642: infinity() noexcept { return char16_t(); } 9642: 9642: static constexpr char16_t 9642: quiet_NaN() noexcept { return char16_t(); } 9642: 9642: static constexpr char16_t 9642: signaling_NaN() noexcept { return char16_t(); } 9642: 9642: static constexpr char16_t 9642: denorm_min() noexcept { return char16_t(); } 9642: 9642: static constexpr bool is_iec559 = false; 9642: static constexpr bool is_bounded = true; 9642: static constexpr bool is_modulo = !is_signed; 9642: 9642: static constexpr bool traps = false; 9642: static constexpr bool tinyness_before = false; 9642: static constexpr float_round_style round_style = round_toward_zero; 9642: }; 9642: 9642: 9642: template<> 9642: struct numeric_limits 9642: { 9642: static constexpr bool is_specialized = true; 9642: 9642: static constexpr char32_t 9642: min() noexcept { return (((char32_t)(-1) < 0) ? -(((char32_t)(-1) < 0) ? (((((char32_t)1 << ((sizeof(char32_t) * 8 - ((char32_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char32_t)0) - 1 : (char32_t)0); } 9642: 9642: static constexpr char32_t 9642: max() noexcept { return (((char32_t)(-1) < 0) ? (((((char32_t)1 << ((sizeof(char32_t) * 8 - ((char32_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char32_t)0); } 9642: 9642: static constexpr char32_t 9642: lowest() noexcept { return min(); } 9642: 9642: static constexpr int digits = (sizeof(char32_t) * 8 - ((char32_t)(-1) < 0)); 9642: static constexpr int digits10 = ((sizeof(char32_t) * 8 - ((char32_t)(-1) < 0)) * 643L / 2136); 9642: static constexpr int max_digits10 = 0; 9642: static constexpr bool is_signed = ((char32_t)(-1) < 0); 9642: static constexpr bool is_integer = true; 9642: static constexpr bool is_exact = true; 9642: static constexpr int radix = 2; 9642: 9642: static constexpr char32_t 9642: epsilon() noexcept { return 0; } 9642: 9642: static constexpr char32_t 9642: round_error() noexcept { return 0; } 9642: 9642: static constexpr int min_exponent = 0; 9642: static constexpr int min_exponent10 = 0; 9642: static constexpr int max_exponent = 0; 9642: static constexpr int max_exponent10 = 0; 9642: 9642: static constexpr bool has_infinity = false; 9642: static constexpr bool has_quiet_NaN = false; 9642: static constexpr bool has_signaling_NaN = false; 9642: static constexpr float_denorm_style has_denorm = denorm_absent; 9642: static constexpr bool has_denorm_loss = false; 9642: 9642: static constexpr char32_t 9642: infinity() noexcept { return char32_t(); } 9642: 9642: static constexpr char32_t 9642: quiet_NaN() noexcept { return char32_t(); } 9642: 9642: static constexpr char32_t 9642: signaling_NaN() noexcept { return char32_t(); } 9642: 9642: static constexpr char32_t 9642: denorm_min() noexcept { return char32_t(); } 9642: 9642: static constexpr bool is_iec559 = false; 9642: static constexpr bool is_bounded = true; 9642: static constexpr bool is_modulo = !is_signed; 9642: 9642: static constexpr bool traps = false; 9642: static constexpr bool tinyness_before = false; 9642: static constexpr float_round_style round_style = round_toward_zero; 9642: }; 9642: 9642: 9642: 9642: template<> 9642: struct numeric_limits 9642: { 9642: static constexpr bool is_specialized = true; 9642: 9642: static constexpr short 9642: min() noexcept { return -0x7fff - 1; } 9642: 9642: static constexpr short 9642: max() noexcept { return 0x7fff; } 9642: 9642: 9642: static constexpr short 9642: lowest() noexcept { return min(); } 9642: 9642: 9642: static constexpr int digits = (sizeof(short) * 8 - ((short)(-1) < 0)); 9642: static constexpr int digits10 = ((sizeof(short) * 8 - ((short)(-1) < 0)) * 643L / 2136); 9642: 9642: static constexpr int max_digits10 = 0; 9642: 9642: static constexpr bool is_signed = true; 9642: static constexpr bool is_integer = true; 9642: static constexpr bool is_exact = true; 9642: static constexpr int radix = 2; 9642: 9642: static constexpr short 9642: epsilon() noexcept { return 0; } 9642: 9642: static constexpr short 9642: round_error() noexcept { return 0; } 9642: 9642: static constexpr int min_exponent = 0; 9642: static constexpr int min_exponent10 = 0; 9642: static constexpr int max_exponent = 0; 9642: static constexpr int max_exponent10 = 0; 9642: 9642: static constexpr bool has_infinity = false; 9642: static constexpr bool has_quiet_NaN = false; 9642: static constexpr bool has_signaling_NaN = false; 9642: static constexpr float_denorm_style has_denorm 9642: = denorm_absent; 9642: static constexpr bool has_denorm_loss = false; 9642: 9642: static constexpr short 9642: infinity() noexcept { return short(); } 9642: 9642: static constexpr short 9642: quiet_NaN() noexcept { return short(); } 9642: 9642: static constexpr short 9642: signaling_NaN() noexcept { return short(); } 9642: 9642: static constexpr short 9642: denorm_min() noexcept { return short(); } 9642: 9642: static constexpr bool is_iec559 = false; 9642: static constexpr bool is_bounded = true; 9642: static constexpr bool is_modulo = false; 9642: 9642: static constexpr bool traps = false; 9642: static constexpr bool tinyness_before = false; 9642: static constexpr float_round_style round_style 9642: = round_toward_zero; 9642: }; 9642: 9642: 9642: template<> 9642: struct numeric_limits 9642: { 9642: static constexpr bool is_specialized = true; 9642: 9642: static constexpr unsigned short 9642: min() noexcept { return 0; } 9642: 9642: static constexpr unsigned short 9642: max() noexcept { return 0x7fff * 2U + 1; } 9642: 9642: 9642: static constexpr unsigned short 9642: lowest() noexcept { return min(); } 9642: 9642: 9642: static constexpr int digits 9642: = (sizeof(unsigned short) * 8 - ((unsigned short)(-1) < 0)); 9642: static constexpr int digits10 9642: = ((sizeof(unsigned short) * 8 - ((unsigned short)(-1) < 0)) * 643L / 2136); 9642: 9642: static constexpr int max_digits10 = 0; 9642: 9642: static constexpr bool is_signed = false; 9642: static constexpr bool is_integer = true; 9642: static constexpr bool is_exact = true; 9642: static constexpr int radix = 2; 9642: 9642: static constexpr unsigned short 9642: epsilon() noexcept { return 0; } 9642: 9642: static constexpr unsigned short 9642: round_error() noexcept { return 0; } 9642: 9642: static constexpr int min_exponent = 0; 9642: static constexpr int min_exponent10 = 0; 9642: static constexpr int max_exponent = 0; 9642: static constexpr int max_exponent10 = 0; 9642: 9642: static constexpr bool has_infinity = false; 9642: static constexpr bool has_quiet_NaN = false; 9642: static constexpr bool has_signaling_NaN = false; 9642: static constexpr float_denorm_style has_denorm 9642: = denorm_absent; 9642: static constexpr bool has_denorm_loss = false; 9642: 9642: static constexpr unsigned short 9642: infinity() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr unsigned short 9642: quiet_NaN() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr unsigned short 9642: signaling_NaN() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr unsigned short 9642: denorm_min() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr bool is_iec559 = false; 9642: static constexpr bool is_bounded = true; 9642: static constexpr bool is_modulo = true; 9642: 9642: static constexpr bool traps = false; 9642: static constexpr bool tinyness_before = false; 9642: static constexpr float_round_style round_style 9642: = round_toward_zero; 9642: }; 9642: 9642: 9642: template<> 9642: struct numeric_limits 9642: { 9642: static constexpr bool is_specialized = true; 9642: 9642: static constexpr int 9642: min() noexcept { return -0x7fffffff - 1; } 9642: 9642: static constexpr int 9642: max() noexcept { return 0x7fffffff; } 9642: 9642: 9642: static constexpr int 9642: lowest() noexcept { return min(); } 9642: 9642: 9642: static constexpr int digits = (sizeof(int) * 8 - ((int)(-1) < 0)); 9642: static constexpr int digits10 = ((sizeof(int) * 8 - ((int)(-1) < 0)) * 643L / 2136); 9642: 9642: static constexpr int max_digits10 = 0; 9642: 9642: static constexpr bool is_signed = true; 9642: static constexpr bool is_integer = true; 9642: static constexpr bool is_exact = true; 9642: static constexpr int radix = 2; 9642: 9642: static constexpr int 9642: epsilon() noexcept { return 0; } 9642: 9642: static constexpr int 9642: round_error() noexcept { return 0; } 9642: 9642: static constexpr int min_exponent = 0; 9642: static constexpr int min_exponent10 = 0; 9642: static constexpr int max_exponent = 0; 9642: static constexpr int max_exponent10 = 0; 9642: 9642: static constexpr bool has_infinity = false; 9642: static constexpr bool has_quiet_NaN = false; 9642: static constexpr bool has_signaling_NaN = false; 9642: static constexpr float_denorm_style has_denorm 9642: = denorm_absent; 9642: static constexpr bool has_denorm_loss = false; 9642: 9642: static constexpr int 9642: infinity() noexcept { return static_cast(0); } 9642: 9642: static constexpr int 9642: quiet_NaN() noexcept { return static_cast(0); } 9642: 9642: static constexpr int 9642: signaling_NaN() noexcept { return static_cast(0); } 9642: 9642: static constexpr int 9642: denorm_min() noexcept { return static_cast(0); } 9642: 9642: static constexpr bool is_iec559 = false; 9642: static constexpr bool is_bounded = true; 9642: static constexpr bool is_modulo = false; 9642: 9642: static constexpr bool traps = false; 9642: static constexpr bool tinyness_before = false; 9642: static constexpr float_round_style round_style 9642: = round_toward_zero; 9642: }; 9642: 9642: 9642: template<> 9642: struct numeric_limits 9642: { 9642: static constexpr bool is_specialized = true; 9642: 9642: static constexpr unsigned int 9642: min() noexcept { return 0; } 9642: 9642: static constexpr unsigned int 9642: max() noexcept { return 0x7fffffff * 2U + 1; } 9642: 9642: 9642: static constexpr unsigned int 9642: lowest() noexcept { return min(); } 9642: 9642: 9642: static constexpr int digits 9642: = (sizeof(unsigned int) * 8 - ((unsigned int)(-1) < 0)); 9642: static constexpr int digits10 9642: = ((sizeof(unsigned int) * 8 - ((unsigned int)(-1) < 0)) * 643L / 2136); 9642: 9642: static constexpr int max_digits10 = 0; 9642: 9642: static constexpr bool is_signed = false; 9642: static constexpr bool is_integer = true; 9642: static constexpr bool is_exact = true; 9642: static constexpr int radix = 2; 9642: 9642: static constexpr unsigned int 9642: epsilon() noexcept { return 0; } 9642: 9642: static constexpr unsigned int 9642: round_error() noexcept { return 0; } 9642: 9642: static constexpr int min_exponent = 0; 9642: static constexpr int min_exponent10 = 0; 9642: static constexpr int max_exponent = 0; 9642: static constexpr int max_exponent10 = 0; 9642: 9642: static constexpr bool has_infinity = false; 9642: static constexpr bool has_quiet_NaN = false; 9642: static constexpr bool has_signaling_NaN = false; 9642: static constexpr float_denorm_style has_denorm 9642: = denorm_absent; 9642: static constexpr bool has_denorm_loss = false; 9642: 9642: static constexpr unsigned int 9642: infinity() noexcept { return static_cast(0); } 9642: 9642: static constexpr unsigned int 9642: quiet_NaN() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr unsigned int 9642: signaling_NaN() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr unsigned int 9642: denorm_min() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr bool is_iec559 = false; 9642: static constexpr bool is_bounded = true; 9642: static constexpr bool is_modulo = true; 9642: 9642: static constexpr bool traps = false; 9642: static constexpr bool tinyness_before = false; 9642: static constexpr float_round_style round_style 9642: = round_toward_zero; 9642: }; 9642: 9642: 9642: template<> 9642: struct numeric_limits 9642: { 9642: static constexpr bool is_specialized = true; 9642: 9642: static constexpr long 9642: min() noexcept { return -0x7fffffffL - 1; } 9642: 9642: static constexpr long 9642: max() noexcept { return 0x7fffffffL; } 9642: 9642: 9642: static constexpr long 9642: lowest() noexcept { return min(); } 9642: 9642: 9642: static constexpr int digits = (sizeof(long) * 8 - ((long)(-1) < 0)); 9642: static constexpr int digits10 = ((sizeof(long) * 8 - ((long)(-1) < 0)) * 643L / 2136); 9642: 9642: static constexpr int max_digits10 = 0; 9642: 9642: static constexpr bool is_signed = true; 9642: static constexpr bool is_integer = true; 9642: static constexpr bool is_exact = true; 9642: static constexpr int radix = 2; 9642: 9642: static constexpr long 9642: epsilon() noexcept { return 0; } 9642: 9642: static constexpr long 9642: round_error() noexcept { return 0; } 9642: 9642: static constexpr int min_exponent = 0; 9642: static constexpr int min_exponent10 = 0; 9642: static constexpr int max_exponent = 0; 9642: static constexpr int max_exponent10 = 0; 9642: 9642: static constexpr bool has_infinity = false; 9642: static constexpr bool has_quiet_NaN = false; 9642: static constexpr bool has_signaling_NaN = false; 9642: static constexpr float_denorm_style has_denorm 9642: = denorm_absent; 9642: static constexpr bool has_denorm_loss = false; 9642: 9642: static constexpr long 9642: infinity() noexcept { return static_cast(0); } 9642: 9642: static constexpr long 9642: quiet_NaN() noexcept { return static_cast(0); } 9642: 9642: static constexpr long 9642: signaling_NaN() noexcept { return static_cast(0); } 9642: 9642: static constexpr long 9642: denorm_min() noexcept { return static_cast(0); } 9642: 9642: static constexpr bool is_iec559 = false; 9642: static constexpr bool is_bounded = true; 9642: static constexpr bool is_modulo = false; 9642: 9642: static constexpr bool traps = false; 9642: static constexpr bool tinyness_before = false; 9642: static constexpr float_round_style round_style 9642: = round_toward_zero; 9642: }; 9642: 9642: 9642: template<> 9642: struct numeric_limits 9642: { 9642: static constexpr bool is_specialized = true; 9642: 9642: static constexpr unsigned long 9642: min() noexcept { return 0; } 9642: 9642: static constexpr unsigned long 9642: max() noexcept { return 0x7fffffffL * 2UL + 1; } 9642: 9642: 9642: static constexpr unsigned long 9642: lowest() noexcept { return min(); } 9642: 9642: 9642: static constexpr int digits 9642: = (sizeof(unsigned long) * 8 - ((unsigned long)(-1) < 0)); 9642: static constexpr int digits10 9642: = ((sizeof(unsigned long) * 8 - ((unsigned long)(-1) < 0)) * 643L / 2136); 9642: 9642: static constexpr int max_digits10 = 0; 9642: 9642: static constexpr bool is_signed = false; 9642: static constexpr bool is_integer = true; 9642: static constexpr bool is_exact = true; 9642: static constexpr int radix = 2; 9642: 9642: static constexpr unsigned long 9642: epsilon() noexcept { return 0; } 9642: 9642: static constexpr unsigned long 9642: round_error() noexcept { return 0; } 9642: 9642: static constexpr int min_exponent = 0; 9642: static constexpr int min_exponent10 = 0; 9642: static constexpr int max_exponent = 0; 9642: static constexpr int max_exponent10 = 0; 9642: 9642: static constexpr bool has_infinity = false; 9642: static constexpr bool has_quiet_NaN = false; 9642: static constexpr bool has_signaling_NaN = false; 9642: static constexpr float_denorm_style has_denorm 9642: = denorm_absent; 9642: static constexpr bool has_denorm_loss = false; 9642: 9642: static constexpr unsigned long 9642: infinity() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr unsigned long 9642: quiet_NaN() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr unsigned long 9642: signaling_NaN() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr unsigned long 9642: denorm_min() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr bool is_iec559 = false; 9642: static constexpr bool is_bounded = true; 9642: static constexpr bool is_modulo = true; 9642: 9642: static constexpr bool traps = false; 9642: static constexpr bool tinyness_before = false; 9642: static constexpr float_round_style round_style 9642: = round_toward_zero; 9642: }; 9642: 9642: 9642: template<> 9642: struct numeric_limits 9642: { 9642: static constexpr bool is_specialized = true; 9642: 9642: static constexpr long long 9642: min() noexcept { return -0x7fffffffffffffffLL - 1; } 9642: 9642: static constexpr long long 9642: max() noexcept { return 0x7fffffffffffffffLL; } 9642: 9642: 9642: static constexpr long long 9642: lowest() noexcept { return min(); } 9642: 9642: 9642: static constexpr int digits 9642: = (sizeof(long long) * 8 - ((long long)(-1) < 0)); 9642: static constexpr int digits10 9642: = ((sizeof(long long) * 8 - ((long long)(-1) < 0)) * 643L / 2136); 9642: 9642: static constexpr int max_digits10 = 0; 9642: 9642: static constexpr bool is_signed = true; 9642: static constexpr bool is_integer = true; 9642: static constexpr bool is_exact = true; 9642: static constexpr int radix = 2; 9642: 9642: static constexpr long long 9642: epsilon() noexcept { return 0; } 9642: 9642: static constexpr long long 9642: round_error() noexcept { return 0; } 9642: 9642: static constexpr int min_exponent = 0; 9642: static constexpr int min_exponent10 = 0; 9642: static constexpr int max_exponent = 0; 9642: static constexpr int max_exponent10 = 0; 9642: 9642: static constexpr bool has_infinity = false; 9642: static constexpr bool has_quiet_NaN = false; 9642: static constexpr bool has_signaling_NaN = false; 9642: static constexpr float_denorm_style has_denorm 9642: = denorm_absent; 9642: static constexpr bool has_denorm_loss = false; 9642: 9642: static constexpr long long 9642: infinity() noexcept { return static_cast(0); } 9642: 9642: static constexpr long long 9642: quiet_NaN() noexcept { return static_cast(0); } 9642: 9642: static constexpr long long 9642: signaling_NaN() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr long long 9642: denorm_min() noexcept { return static_cast(0); } 9642: 9642: static constexpr bool is_iec559 = false; 9642: static constexpr bool is_bounded = true; 9642: static constexpr bool is_modulo = false; 9642: 9642: static constexpr bool traps = false; 9642: static constexpr bool tinyness_before = false; 9642: static constexpr float_round_style round_style 9642: = round_toward_zero; 9642: }; 9642: 9642: 9642: template<> 9642: struct numeric_limits 9642: { 9642: static constexpr bool is_specialized = true; 9642: 9642: static constexpr unsigned long long 9642: min() noexcept { return 0; } 9642: 9642: static constexpr unsigned long long 9642: max() noexcept { return 0x7fffffffffffffffLL * 2ULL + 1; } 9642: 9642: 9642: static constexpr unsigned long long 9642: lowest() noexcept { return min(); } 9642: 9642: 9642: static constexpr int digits 9642: = (sizeof(unsigned long long) * 8 - ((unsigned long long)(-1) < 0)); 9642: static constexpr int digits10 9642: = ((sizeof(unsigned long long) * 8 - ((unsigned long long)(-1) < 0)) * 643L / 2136); 9642: 9642: static constexpr int max_digits10 = 0; 9642: 9642: static constexpr bool is_signed = false; 9642: static constexpr bool is_integer = true; 9642: static constexpr bool is_exact = true; 9642: static constexpr int radix = 2; 9642: 9642: static constexpr unsigned long long 9642: epsilon() noexcept { return 0; } 9642: 9642: static constexpr unsigned long long 9642: round_error() noexcept { return 0; } 9642: 9642: static constexpr int min_exponent = 0; 9642: static constexpr int min_exponent10 = 0; 9642: static constexpr int max_exponent = 0; 9642: static constexpr int max_exponent10 = 0; 9642: 9642: static constexpr bool has_infinity = false; 9642: static constexpr bool has_quiet_NaN = false; 9642: static constexpr bool has_signaling_NaN = false; 9642: static constexpr float_denorm_style has_denorm 9642: = denorm_absent; 9642: static constexpr bool has_denorm_loss = false; 9642: 9642: static constexpr unsigned long long 9642: infinity() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr unsigned long long 9642: quiet_NaN() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr unsigned long long 9642: signaling_NaN() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr unsigned long long 9642: denorm_min() noexcept 9642: { return static_cast(0); } 9642: 9642: static constexpr bool is_iec559 = false; 9642: static constexpr bool is_bounded = true; 9642: static constexpr bool is_modulo = true; 9642: 9642: static constexpr bool traps = false; 9642: static constexpr bool tinyness_before = false; 9642: static constexpr float_round_style round_style 9642: = round_toward_zero; 9642: }; 9642: # 1669 "/usr/include/c++/13/limits" 3 9642: template<> 9642: struct numeric_limits 9642: { 9642: static constexpr bool is_specialized = true; 9642: 9642: static constexpr float 9642: min() noexcept { return 1.1754943508222875e-38F; } 9642: 9642: static constexpr float 9642: max() noexcept { return 3.4028234663852886e+38F; } 9642: 9642: 9642: static constexpr float 9642: lowest() noexcept { return -3.4028234663852886e+38F; } 9642: 9642: 9642: static constexpr int digits = 24; 9642: static constexpr int digits10 = 6; 9642: 9642: static constexpr int max_digits10 9642: = (2 + (24) * 643L / 2136); 9642: 9642: static constexpr bool is_signed = true; 9642: static constexpr bool is_integer = false; 9642: static constexpr bool is_exact = false; 9642: static constexpr int radix = 2; 9642: 9642: static constexpr float 9642: epsilon() noexcept { return 1.1920928955078125e-7F; } 9642: 9642: static constexpr float 9642: round_error() noexcept { return 0.5F; } 9642: 9642: static constexpr int min_exponent = (-125); 9642: static constexpr int min_exponent10 = (-37); 9642: static constexpr int max_exponent = 128; 9642: static constexpr int max_exponent10 = 38; 9642: 9642: static constexpr bool has_infinity = 1; 9642: static constexpr bool has_quiet_NaN = 1; 9642: static constexpr bool has_signaling_NaN = has_quiet_NaN; 9642: static constexpr float_denorm_style has_denorm 9642: = bool(1) ? denorm_present : denorm_absent; 9642: static constexpr bool has_denorm_loss 9642: = false; 9642: 9642: static constexpr float 9642: infinity() noexcept { return __builtin_huge_valf(); } 9642: 9642: static constexpr float 9642: quiet_NaN() noexcept { return __builtin_nanf(""); } 9642: 9642: static constexpr float 9642: signaling_NaN() noexcept { return __builtin_nansf(""); } 9642: 9642: static constexpr float 9642: denorm_min() noexcept { return 1.4012984643248171e-45F; } 9642: 9642: static constexpr bool is_iec559 9642: = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 9642: static constexpr bool is_bounded = true; 9642: static constexpr bool is_modulo = false; 9642: 9642: static constexpr bool traps = false; 9642: static constexpr bool tinyness_before 9642: = false; 9642: static constexpr float_round_style round_style 9642: = round_to_nearest; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template<> 9642: struct numeric_limits 9642: { 9642: static constexpr bool is_specialized = true; 9642: 9642: static constexpr double 9642: min() noexcept { return double(2.2250738585072014e-308L); } 9642: 9642: static constexpr double 9642: max() noexcept { return double(1.7976931348623157e+308L); } 9642: 9642: 9642: static constexpr double 9642: lowest() noexcept { return -double(1.7976931348623157e+308L); } 9642: 9642: 9642: static constexpr int digits = 53; 9642: static constexpr int digits10 = 15; 9642: 9642: static constexpr int max_digits10 9642: = (2 + (53) * 643L / 2136); 9642: 9642: static constexpr bool is_signed = true; 9642: static constexpr bool is_integer = false; 9642: static constexpr bool is_exact = false; 9642: static constexpr int radix = 2; 9642: 9642: static constexpr double 9642: epsilon() noexcept { return double(2.2204460492503131e-16L); } 9642: 9642: static constexpr double 9642: round_error() noexcept { return 0.5; } 9642: 9642: static constexpr int min_exponent = (-1021); 9642: static constexpr int min_exponent10 = (-307); 9642: static constexpr int max_exponent = 1024; 9642: static constexpr int max_exponent10 = 308; 9642: 9642: static constexpr bool has_infinity = 1; 9642: static constexpr bool has_quiet_NaN = 1; 9642: static constexpr bool has_signaling_NaN = has_quiet_NaN; 9642: static constexpr float_denorm_style has_denorm 9642: = bool(1) ? denorm_present : denorm_absent; 9642: static constexpr bool has_denorm_loss 9642: = false; 9642: 9642: static constexpr double 9642: infinity() noexcept { return __builtin_huge_val(); } 9642: 9642: static constexpr double 9642: quiet_NaN() noexcept { return __builtin_nan(""); } 9642: 9642: static constexpr double 9642: signaling_NaN() noexcept { return __builtin_nans(""); } 9642: 9642: static constexpr double 9642: denorm_min() noexcept { return double(4.9406564584124654e-324L); } 9642: 9642: static constexpr bool is_iec559 9642: = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 9642: static constexpr bool is_bounded = true; 9642: static constexpr bool is_modulo = false; 9642: 9642: static constexpr bool traps = false; 9642: static constexpr bool tinyness_before 9642: = false; 9642: static constexpr float_round_style round_style 9642: = round_to_nearest; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template<> 9642: struct numeric_limits 9642: { 9642: static constexpr bool is_specialized = true; 9642: 9642: static constexpr long double 9642: min() noexcept { return 2.2250738585072014e-308L; } 9642: 9642: static constexpr long double 9642: max() noexcept { return 1.7976931348623157e+308L; } 9642: 9642: 9642: static constexpr long double 9642: lowest() noexcept { return -1.7976931348623157e+308L; } 9642: 9642: 9642: static constexpr int digits = 53; 9642: static constexpr int digits10 = 15; 9642: 9642: static constexpr int max_digits10 9642: = (2 + (53) * 643L / 2136); 9642: 9642: static constexpr bool is_signed = true; 9642: static constexpr bool is_integer = false; 9642: static constexpr bool is_exact = false; 9642: static constexpr int radix = 2; 9642: 9642: static constexpr long double 9642: epsilon() noexcept { return 2.2204460492503131e-16L; } 9642: 9642: static constexpr long double 9642: round_error() noexcept { return 0.5L; } 9642: 9642: static constexpr int min_exponent = (-1021); 9642: static constexpr int min_exponent10 = (-307); 9642: static constexpr int max_exponent = 1024; 9642: static constexpr int max_exponent10 = 308; 9642: 9642: static constexpr bool has_infinity = 1; 9642: static constexpr bool has_quiet_NaN = 1; 9642: static constexpr bool has_signaling_NaN = has_quiet_NaN; 9642: static constexpr float_denorm_style has_denorm 9642: = bool(1) ? denorm_present : denorm_absent; 9642: static constexpr bool has_denorm_loss 9642: = false; 9642: 9642: static constexpr long double 9642: infinity() noexcept { return __builtin_huge_vall(); } 9642: 9642: static constexpr long double 9642: quiet_NaN() noexcept { return __builtin_nanl(""); } 9642: 9642: static constexpr long double 9642: signaling_NaN() noexcept { return __builtin_nansl(""); } 9642: 9642: static constexpr long double 9642: denorm_min() noexcept { return 4.9406564584124654e-324L; } 9642: 9642: static constexpr bool is_iec559 9642: = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 9642: static constexpr bool is_bounded = true; 9642: static constexpr bool is_modulo = false; 9642: 9642: static constexpr bool traps = false; 9642: static constexpr bool tinyness_before = 9642: false; 9642: static constexpr float_round_style round_style = 9642: round_to_nearest; 9642: }; 9642: # 2076 "/usr/include/c++/13/limits" 3 9642: 9642: } 9642: # 40 "/usr/include/c++/13/bits/chrono.h" 2 3 9642: # 1 "/usr/include/c++/13/ctime" 1 3 9642: # 39 "/usr/include/c++/13/ctime" 3 9642: 9642: # 40 "/usr/include/c++/13/ctime" 3 9642: # 58 "/usr/include/c++/13/ctime" 3 9642: namespace std 9642: { 9642: using ::clock_t; 9642: using ::time_t; 9642: using ::tm; 9642: 9642: using ::clock; 9642: using ::difftime; 9642: using ::mktime; 9642: using ::time; 9642: using ::asctime; 9642: using ::ctime; 9642: using ::gmtime; 9642: using ::localtime; 9642: using ::strftime; 9642: } 9642: 9642: 9642: 9642: namespace std 9642: { 9642: using ::timespec; 9642: using ::timespec_get; 9642: } 9642: # 41 "/usr/include/c++/13/bits/chrono.h" 2 3 9642: # 1 "/usr/include/c++/13/bits/parse_numbers.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/parse_numbers.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/parse_numbers.h" 3 9642: # 42 "/usr/include/c++/13/bits/parse_numbers.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: namespace __parse_int 9642: { 9642: template 9642: struct _Digit; 9642: 9642: template 9642: struct _Digit<_Base, '0'> : integral_constant 9642: { 9642: using __valid = true_type; 9642: }; 9642: 9642: template 9642: struct _Digit<_Base, '1'> : integral_constant 9642: { 9642: using __valid = true_type; 9642: }; 9642: 9642: template 9642: struct _Digit_impl : integral_constant 9642: { 9642: static_assert(_Base > _Val, "invalid digit"); 9642: using __valid = true_type; 9642: }; 9642: 9642: template 9642: struct _Digit<_Base, '2'> : _Digit_impl<_Base, 2> 9642: { }; 9642: 9642: template 9642: struct _Digit<_Base, '3'> : _Digit_impl<_Base, 3> 9642: { }; 9642: 9642: template 9642: struct _Digit<_Base, '4'> : _Digit_impl<_Base, 4> 9642: { }; 9642: 9642: template 9642: struct _Digit<_Base, '5'> : _Digit_impl<_Base, 5> 9642: { }; 9642: 9642: template 9642: struct _Digit<_Base, '6'> : _Digit_impl<_Base, 6> 9642: { }; 9642: 9642: template 9642: struct _Digit<_Base, '7'> : _Digit_impl<_Base, 7> 9642: { }; 9642: 9642: template 9642: struct _Digit<_Base, '8'> : _Digit_impl<_Base, 8> 9642: { }; 9642: 9642: template 9642: struct _Digit<_Base, '9'> : _Digit_impl<_Base, 9> 9642: { }; 9642: 9642: template 9642: struct _Digit<_Base, 'a'> : _Digit_impl<_Base, 0xa> 9642: { }; 9642: 9642: template 9642: struct _Digit<_Base, 'A'> : _Digit_impl<_Base, 0xa> 9642: { }; 9642: 9642: template 9642: struct _Digit<_Base, 'b'> : _Digit_impl<_Base, 0xb> 9642: { }; 9642: 9642: template 9642: struct _Digit<_Base, 'B'> : _Digit_impl<_Base, 0xb> 9642: { }; 9642: 9642: template 9642: struct _Digit<_Base, 'c'> : _Digit_impl<_Base, 0xc> 9642: { }; 9642: 9642: template 9642: struct _Digit<_Base, 'C'> : _Digit_impl<_Base, 0xc> 9642: { }; 9642: 9642: template 9642: struct _Digit<_Base, 'd'> : _Digit_impl<_Base, 0xd> 9642: { }; 9642: 9642: template 9642: struct _Digit<_Base, 'D'> : _Digit_impl<_Base, 0xd> 9642: { }; 9642: 9642: template 9642: struct _Digit<_Base, 'e'> : _Digit_impl<_Base, 0xe> 9642: { }; 9642: 9642: template 9642: struct _Digit<_Base, 'E'> : _Digit_impl<_Base, 0xe> 9642: { }; 9642: 9642: template 9642: struct _Digit<_Base, 'f'> : _Digit_impl<_Base, 0xf> 9642: { }; 9642: 9642: template 9642: struct _Digit<_Base, 'F'> : _Digit_impl<_Base, 0xf> 9642: { }; 9642: 9642: 9642: template 9642: struct _Digit<_Base, '\''> : integral_constant 9642: { 9642: using __valid = false_type; 9642: }; 9642: 9642: 9642: 9642: template 9642: using __ull_constant = integral_constant; 9642: 9642: template 9642: struct _Power_help 9642: { 9642: using __next = typename _Power_help<_Base, _Digs...>::type; 9642: using __valid_digit = typename _Digit<_Base, _Dig>::__valid; 9642: using type 9642: = __ull_constant<__next::value * (__valid_digit{} ? _Base : 1ULL)>; 9642: }; 9642: 9642: template 9642: struct _Power_help<_Base, _Dig> 9642: { 9642: using __valid_digit = typename _Digit<_Base, _Dig>::__valid; 9642: using type = __ull_constant<__valid_digit::value>; 9642: }; 9642: 9642: template 9642: struct _Power : _Power_help<_Base, _Digs...>::type 9642: { }; 9642: 9642: template 9642: struct _Power<_Base> : __ull_constant<0> 9642: { }; 9642: 9642: 9642: 9642: template 9642: struct _Number_help 9642: { 9642: using __digit = _Digit<_Base, _Dig>; 9642: using __valid_digit = typename __digit::__valid; 9642: using __next = _Number_help<_Base, 9642: __valid_digit::value ? _Pow / _Base : _Pow, 9642: _Digs...>; 9642: using type = __ull_constant<_Pow * __digit::value + __next::type::value>; 9642: static_assert((type::value / _Pow) == __digit::value, 9642: "integer literal does not fit in unsigned long long"); 9642: }; 9642: 9642: 9642: template 9642: struct _Number_help<_Base, _Pow, '\'', _Dig, _Digs...> 9642: : _Number_help<_Base, _Pow, _Dig, _Digs...> 9642: { }; 9642: 9642: 9642: template 9642: struct _Number_help<_Base, 1ULL, _Dig> 9642: { 9642: using type = __ull_constant<_Digit<_Base, _Dig>::value>; 9642: }; 9642: 9642: template 9642: struct _Number 9642: : _Number_help<_Base, _Power<_Base, _Digs...>::value, _Digs...>::type 9642: { }; 9642: 9642: template 9642: struct _Number<_Base> 9642: : __ull_constant<0> 9642: { }; 9642: 9642: 9642: 9642: template 9642: struct _Parse_int; 9642: 9642: template 9642: struct _Parse_int<'0', 'b', _Digs...> 9642: : _Number<2U, _Digs...>::type 9642: { }; 9642: 9642: template 9642: struct _Parse_int<'0', 'B', _Digs...> 9642: : _Number<2U, _Digs...>::type 9642: { }; 9642: 9642: template 9642: struct _Parse_int<'0', 'x', _Digs...> 9642: : _Number<16U, _Digs...>::type 9642: { }; 9642: 9642: template 9642: struct _Parse_int<'0', 'X', _Digs...> 9642: : _Number<16U, _Digs...>::type 9642: { }; 9642: 9642: template 9642: struct _Parse_int<'0', _Digs...> 9642: : _Number<8U, _Digs...>::type 9642: { }; 9642: 9642: template 9642: struct _Parse_int 9642: : _Number<10U, _Digs...>::type 9642: { }; 9642: 9642: } 9642: 9642: 9642: namespace __select_int 9642: { 9642: template 9642: struct _Select_int_base; 9642: 9642: template 9642: struct _Select_int_base<_Val, _IntType, _Ints...> 9642: : __conditional_t<(_Val <= __gnu_cxx::__int_traits<_IntType>::__max), 9642: integral_constant<_IntType, (_IntType)_Val>, 9642: _Select_int_base<_Val, _Ints...>> 9642: { }; 9642: 9642: template 9642: struct _Select_int_base<_Val> 9642: { }; 9642: 9642: template 9642: using _Select_int = typename _Select_int_base< 9642: __parse_int::_Parse_int<_Digs...>::value, 9642: unsigned char, 9642: unsigned short, 9642: unsigned int, 9642: unsigned long, 9642: unsigned long long 9642: >::type; 9642: 9642: } 9642: 9642: 9642: } 9642: # 42 "/usr/include/c++/13/bits/chrono.h" 2 3 9642: 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: namespace filesystem { struct __file_clock; }; 9642: 9642: 9642: namespace chrono 9642: { 9642: 9642: 9642: 9642: 9642: template> 9642: class duration; 9642: 9642: 9642: template 9642: class time_point; 9642: 9642: } 9642: # 77 "/usr/include/c++/13/bits/chrono.h" 3 9642: template 9642: struct __duration_common_type 9642: { }; 9642: 9642: template 9642: struct __duration_common_type<_CT, _Period1, _Period2, 9642: __void_t> 9642: { 9642: private: 9642: using __gcd_num = __static_gcd<_Period1::num, _Period2::num>; 9642: using __gcd_den = __static_gcd<_Period1::den, _Period2::den>; 9642: using __cr = typename _CT::type; 9642: using __r = ratio<__gcd_num::value, 9642: (_Period1::den / __gcd_den::value) * _Period2::den>; 9642: 9642: public: 9642: using type = chrono::duration<__cr, typename __r::type>; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct common_type, 9642: chrono::duration<_Rep2, _Period2>> 9642: : __duration_common_type, 9642: typename _Period1::type, 9642: typename _Period2::type> 9642: { }; 9642: 9642: 9642: template 9642: struct common_type, 9642: chrono::duration<_Rep, _Period>> 9642: { 9642: using type = chrono::duration::type, 9642: typename _Period::type>; 9642: }; 9642: 9642: 9642: template 9642: struct common_type> 9642: { 9642: using type = chrono::duration::type, 9642: typename _Period::type>; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct __timepoint_common_type 9642: { }; 9642: 9642: template 9642: struct __timepoint_common_type<_CT, _Clock, __void_t> 9642: { 9642: using type = chrono::time_point<_Clock, typename _CT::type>; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct common_type, 9642: chrono::time_point<_Clock, _Duration2>> 9642: : __timepoint_common_type, _Clock> 9642: { }; 9642: 9642: 9642: template 9642: struct common_type, 9642: chrono::time_point<_Clock, _Duration>> 9642: { using type = chrono::time_point<_Clock, _Duration>; }; 9642: 9642: 9642: template 9642: struct common_type> 9642: { using type = chrono::time_point<_Clock, _Duration>; }; 9642: 9642: 9642: 9642: 9642: namespace chrono 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct __duration_cast_impl 9642: { 9642: template 9642: static constexpr _ToDur 9642: __cast(const duration<_Rep, _Period>& __d) 9642: { 9642: typedef typename _ToDur::rep __to_rep; 9642: return _ToDur(static_cast<__to_rep>(static_cast<_CR>(__d.count()) 9642: * static_cast<_CR>(_CF::num) 9642: / static_cast<_CR>(_CF::den))); 9642: } 9642: }; 9642: 9642: template 9642: struct __duration_cast_impl<_ToDur, _CF, _CR, true, true> 9642: { 9642: template 9642: static constexpr _ToDur 9642: __cast(const duration<_Rep, _Period>& __d) 9642: { 9642: typedef typename _ToDur::rep __to_rep; 9642: return _ToDur(static_cast<__to_rep>(__d.count())); 9642: } 9642: }; 9642: 9642: template 9642: struct __duration_cast_impl<_ToDur, _CF, _CR, true, false> 9642: { 9642: template 9642: static constexpr _ToDur 9642: __cast(const duration<_Rep, _Period>& __d) 9642: { 9642: typedef typename _ToDur::rep __to_rep; 9642: return _ToDur(static_cast<__to_rep>( 9642: static_cast<_CR>(__d.count()) / static_cast<_CR>(_CF::den))); 9642: } 9642: }; 9642: 9642: template 9642: struct __duration_cast_impl<_ToDur, _CF, _CR, false, true> 9642: { 9642: template 9642: static constexpr _ToDur 9642: __cast(const duration<_Rep, _Period>& __d) 9642: { 9642: typedef typename _ToDur::rep __to_rep; 9642: return _ToDur(static_cast<__to_rep>( 9642: static_cast<_CR>(__d.count()) * static_cast<_CR>(_CF::num))); 9642: } 9642: }; 9642: 9642: template 9642: struct __is_duration 9642: : std::false_type 9642: { }; 9642: 9642: template 9642: struct __is_duration> 9642: : std::true_type 9642: { }; 9642: 9642: template 9642: using __enable_if_is_duration 9642: = typename enable_if<__is_duration<_Tp>::value, _Tp>::type; 9642: 9642: template 9642: using __disable_if_is_duration 9642: = typename enable_if::value, _Tp>::type; 9642: 9642: 9642: template 9642: inline constexpr bool __is_duration_v = false; 9642: template 9642: inline constexpr bool __is_duration_v> = true; 9642: template 9642: inline constexpr bool __is_time_point_v = false; 9642: template 9642: inline constexpr bool __is_time_point_v> = true; 9642: # 270 "/usr/include/c++/13/bits/chrono.h" 3 9642: template 9642: [[__nodiscard__]] 9642: constexpr __enable_if_is_duration<_ToDur> 9642: duration_cast(const duration<_Rep, _Period>& __d) 9642: { 9642: 9642: if constexpr (is_same_v<_ToDur, duration<_Rep, _Period>>) 9642: return __d; 9642: else 9642: { 9642: 9642: using __to_period = typename _ToDur::period; 9642: using __to_rep = typename _ToDur::rep; 9642: using __cf = ratio_divide<_Period, __to_period>; 9642: using __cr = typename common_type<__to_rep, _Rep, intmax_t>::type; 9642: using __dc = __duration_cast_impl<_ToDur, __cf, __cr, 9642: __cf::num == 1, __cf::den == 1>; 9642: return __dc::__cast(__d); 9642: 9642: } 9642: 9642: } 9642: # 304 "/usr/include/c++/13/bits/chrono.h" 3 9642: template 9642: struct treat_as_floating_point 9642: : is_floating_point<_Rep> 9642: { }; 9642: 9642: 9642: template 9642: inline constexpr bool treat_as_floating_point_v = 9642: treat_as_floating_point<_Rep>::value; 9642: 9642: template<> 9642: inline constexpr bool treat_as_floating_point_v = false; 9642: template<> 9642: inline constexpr bool treat_as_floating_point_v = false; 9642: template<> 9642: inline constexpr bool treat_as_floating_point_v = false; 9642: template<> 9642: inline constexpr bool treat_as_floating_point_v = true; 9642: template<> 9642: inline constexpr bool treat_as_floating_point_v = true; 9642: template<> 9642: inline constexpr bool treat_as_floating_point_v = true; 9642: # 386 "/usr/include/c++/13/bits/chrono.h" 3 9642: template 9642: [[nodiscard]] constexpr __enable_if_is_duration<_ToDur> 9642: floor(const duration<_Rep, _Period>& __d) 9642: { 9642: auto __to = chrono::duration_cast<_ToDur>(__d); 9642: if (__to > __d) 9642: return __to - _ToDur{1}; 9642: return __to; 9642: } 9642: # 406 "/usr/include/c++/13/bits/chrono.h" 3 9642: template 9642: [[nodiscard]] constexpr __enable_if_is_duration<_ToDur> 9642: ceil(const duration<_Rep, _Period>& __d) 9642: { 9642: auto __to = chrono::duration_cast<_ToDur>(__d); 9642: if (__to < __d) 9642: return __to + _ToDur{1}; 9642: return __to; 9642: } 9642: # 427 "/usr/include/c++/13/bits/chrono.h" 3 9642: template 9642: [[nodiscard]] constexpr 9642: enable_if_t< 9642: __and_<__is_duration<_ToDur>, 9642: __not_>>::value, 9642: _ToDur> 9642: round(const duration<_Rep, _Period>& __d) 9642: { 9642: _ToDur __t0 = chrono::floor<_ToDur>(__d); 9642: _ToDur __t1 = __t0 + _ToDur{1}; 9642: auto __diff0 = __d - __t0; 9642: auto __diff1 = __t1 - __d; 9642: if (__diff0 == __diff1) 9642: { 9642: if (__t0.count() & 1) 9642: return __t1; 9642: return __t0; 9642: } 9642: else if (__diff0 < __diff1) 9642: return __t0; 9642: return __t1; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: [[nodiscard]] constexpr 9642: enable_if_t::is_signed, duration<_Rep, _Period>> 9642: abs(duration<_Rep, _Period> __d) 9642: { 9642: if (__d >= __d.zero()) 9642: return __d; 9642: return -__d; 9642: } 9642: 9642: 9642: namespace __detail { using chrono::ceil; } 9642: # 494 "/usr/include/c++/13/bits/chrono.h" 3 9642: template 9642: struct duration_values 9642: { 9642: static constexpr _Rep 9642: zero() noexcept 9642: { return _Rep(0); } 9642: 9642: static constexpr _Rep 9642: max() noexcept 9642: { return numeric_limits<_Rep>::max(); } 9642: 9642: static constexpr _Rep 9642: min() noexcept 9642: { return numeric_limits<_Rep>::lowest(); } 9642: }; 9642: 9642: template 9642: class duration 9642: { 9642: static_assert(!__is_duration<_Rep>::value, 9642: "rep cannot be a std::chrono::duration"); 9642: static_assert(__is_ratio<_Period>::value, 9642: "period must be a specialization of std::ratio"); 9642: static_assert(_Period::num > 0, "period must be positive"); 9642: 9642: template 9642: using __is_float = treat_as_floating_point<_Rep2>; 9642: 9642: static constexpr intmax_t 9642: _S_gcd(intmax_t __m, intmax_t __n) noexcept 9642: { 9642: 9642: 9642: 9642: do 9642: { 9642: intmax_t __rem = __m % __n; 9642: __m = __n; 9642: __n = __rem; 9642: } 9642: while (__n != 0); 9642: return __m; 9642: 9642: 9642: 9642: 9642: 9642: } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: using __divide = ratio<(_R1::num / __gcd1) * (_R2::den / __gcd2), 9642: (_R1::den / __gcd2) * (_R2::num / __gcd1)>; 9642: 9642: 9642: template 9642: using __is_harmonic 9642: = __bool_constant<__divide<_Period2, _Period>::den == 1>; 9642: 9642: public: 9642: 9642: using rep = _Rep; 9642: using period = typename _Period::type; 9642: 9642: 9642: constexpr duration() = default; 9642: 9642: duration(const duration&) = default; 9642: 9642: 9642: 9642: template, 9642: __or_<__is_float, __not_<__is_float<_Rep2>>>>> 9642: constexpr explicit duration(const _Rep2& __rep) 9642: : __r(static_cast(__rep)) { } 9642: 9642: template, 9642: __or_<__is_float, 9642: __and_<__is_harmonic<_Period2>, 9642: __not_<__is_float<_Rep2>>>>>> 9642: constexpr duration(const duration<_Rep2, _Period2>& __d) 9642: : __r(duration_cast(__d).count()) { } 9642: 9642: ~duration() = default; 9642: duration& operator=(const duration&) = default; 9642: 9642: 9642: constexpr rep 9642: count() const 9642: { return __r; } 9642: 9642: 9642: 9642: constexpr duration::type, period> 9642: operator+() const 9642: { return duration::type, period>(__r); } 9642: 9642: constexpr duration::type, period> 9642: operator-() const 9642: { return duration::type, period>(-__r); } 9642: 9642: constexpr duration& 9642: operator++() 9642: { 9642: ++__r; 9642: return *this; 9642: } 9642: 9642: constexpr duration 9642: operator++(int) 9642: { return duration(__r++); } 9642: 9642: constexpr duration& 9642: operator--() 9642: { 9642: --__r; 9642: return *this; 9642: } 9642: 9642: constexpr duration 9642: operator--(int) 9642: { return duration(__r--); } 9642: 9642: constexpr duration& 9642: operator+=(const duration& __d) 9642: { 9642: __r += __d.count(); 9642: return *this; 9642: } 9642: 9642: constexpr duration& 9642: operator-=(const duration& __d) 9642: { 9642: __r -= __d.count(); 9642: return *this; 9642: } 9642: 9642: constexpr duration& 9642: operator*=(const rep& __rhs) 9642: { 9642: __r *= __rhs; 9642: return *this; 9642: } 9642: 9642: constexpr duration& 9642: operator/=(const rep& __rhs) 9642: { 9642: __r /= __rhs; 9642: return *this; 9642: } 9642: 9642: 9642: template 9642: constexpr 9642: __enable_if_t::value, duration&> 9642: operator%=(const rep& __rhs) 9642: { 9642: __r %= __rhs; 9642: return *this; 9642: } 9642: 9642: template 9642: constexpr 9642: __enable_if_t::value, duration&> 9642: operator%=(const duration& __d) 9642: { 9642: __r %= __d.count(); 9642: return *this; 9642: } 9642: 9642: 9642: static constexpr duration 9642: zero() noexcept 9642: { return duration(duration_values::zero()); } 9642: 9642: static constexpr duration 9642: min() noexcept 9642: { return duration(duration_values::min()); } 9642: 9642: static constexpr duration 9642: max() noexcept 9642: { return duration(duration_values::max()); } 9642: 9642: private: 9642: rep __r; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: constexpr typename common_type, 9642: duration<_Rep2, _Period2>>::type 9642: operator+(const duration<_Rep1, _Period1>& __lhs, 9642: const duration<_Rep2, _Period2>& __rhs) 9642: { 9642: typedef duration<_Rep1, _Period1> __dur1; 9642: typedef duration<_Rep2, _Period2> __dur2; 9642: typedef typename common_type<__dur1,__dur2>::type __cd; 9642: return __cd(__cd(__lhs).count() + __cd(__rhs).count()); 9642: } 9642: 9642: 9642: template 9642: constexpr typename common_type, 9642: duration<_Rep2, _Period2>>::type 9642: operator-(const duration<_Rep1, _Period1>& __lhs, 9642: const duration<_Rep2, _Period2>& __rhs) 9642: { 9642: typedef duration<_Rep1, _Period1> __dur1; 9642: typedef duration<_Rep2, _Period2> __dur2; 9642: typedef typename common_type<__dur1,__dur2>::type __cd; 9642: return __cd(__cd(__lhs).count() - __cd(__rhs).count()); 9642: } 9642: # 727 "/usr/include/c++/13/bits/chrono.h" 3 9642: template::type> 9642: using __common_rep_t = typename 9642: enable_if::value, _CRep>::type; 9642: # 739 "/usr/include/c++/13/bits/chrono.h" 3 9642: template 9642: constexpr duration<__common_rep_t<_Rep1, _Rep2>, _Period> 9642: operator*(const duration<_Rep1, _Period>& __d, const _Rep2& __s) 9642: { 9642: typedef duration::type, _Period> 9642: __cd; 9642: return __cd(__cd(__d).count() * __s); 9642: } 9642: 9642: template 9642: constexpr duration<__common_rep_t<_Rep2, _Rep1>, _Period> 9642: operator*(const _Rep1& __s, const duration<_Rep2, _Period>& __d) 9642: { return __d * __s; } 9642: 9642: template 9642: constexpr 9642: duration<__common_rep_t<_Rep1, __disable_if_is_duration<_Rep2>>, _Period> 9642: operator/(const duration<_Rep1, _Period>& __d, const _Rep2& __s) 9642: { 9642: typedef duration::type, _Period> 9642: __cd; 9642: return __cd(__cd(__d).count() / __s); 9642: } 9642: 9642: template 9642: constexpr typename common_type<_Rep1, _Rep2>::type 9642: operator/(const duration<_Rep1, _Period1>& __lhs, 9642: const duration<_Rep2, _Period2>& __rhs) 9642: { 9642: typedef duration<_Rep1, _Period1> __dur1; 9642: typedef duration<_Rep2, _Period2> __dur2; 9642: typedef typename common_type<__dur1,__dur2>::type __cd; 9642: return __cd(__lhs).count() / __cd(__rhs).count(); 9642: } 9642: 9642: 9642: template 9642: constexpr 9642: duration<__common_rep_t<_Rep1, __disable_if_is_duration<_Rep2>>, _Period> 9642: operator%(const duration<_Rep1, _Period>& __d, const _Rep2& __s) 9642: { 9642: typedef duration::type, _Period> 9642: __cd; 9642: return __cd(__cd(__d).count() % __s); 9642: } 9642: 9642: template 9642: constexpr typename common_type, 9642: duration<_Rep2, _Period2>>::type 9642: operator%(const duration<_Rep1, _Period1>& __lhs, 9642: const duration<_Rep2, _Period2>& __rhs) 9642: { 9642: typedef duration<_Rep1, _Period1> __dur1; 9642: typedef duration<_Rep2, _Period2> __dur2; 9642: typedef typename common_type<__dur1,__dur2>::type __cd; 9642: return __cd(__cd(__lhs).count() % __cd(__rhs).count()); 9642: } 9642: # 807 "/usr/include/c++/13/bits/chrono.h" 3 9642: template 9642: constexpr bool 9642: operator==(const duration<_Rep1, _Period1>& __lhs, 9642: const duration<_Rep2, _Period2>& __rhs) 9642: { 9642: typedef duration<_Rep1, _Period1> __dur1; 9642: typedef duration<_Rep2, _Period2> __dur2; 9642: typedef typename common_type<__dur1,__dur2>::type __ct; 9642: return __ct(__lhs).count() == __ct(__rhs).count(); 9642: } 9642: 9642: template 9642: constexpr bool 9642: operator<(const duration<_Rep1, _Period1>& __lhs, 9642: const duration<_Rep2, _Period2>& __rhs) 9642: { 9642: typedef duration<_Rep1, _Period1> __dur1; 9642: typedef duration<_Rep2, _Period2> __dur2; 9642: typedef typename common_type<__dur1,__dur2>::type __ct; 9642: return __ct(__lhs).count() < __ct(__rhs).count(); 9642: } 9642: # 844 "/usr/include/c++/13/bits/chrono.h" 3 9642: template 9642: constexpr bool 9642: operator!=(const duration<_Rep1, _Period1>& __lhs, 9642: const duration<_Rep2, _Period2>& __rhs) 9642: { return !(__lhs == __rhs); } 9642: 9642: 9642: template 9642: constexpr bool 9642: operator<=(const duration<_Rep1, _Period1>& __lhs, 9642: const duration<_Rep2, _Period2>& __rhs) 9642: { return !(__rhs < __lhs); } 9642: 9642: template 9642: constexpr bool 9642: operator>(const duration<_Rep1, _Period1>& __lhs, 9642: const duration<_Rep2, _Period2>& __rhs) 9642: { return __rhs < __lhs; } 9642: 9642: template 9642: constexpr bool 9642: operator>=(const duration<_Rep1, _Period1>& __lhs, 9642: const duration<_Rep2, _Period2>& __rhs) 9642: { return !(__lhs < __rhs); } 9642: # 888 "/usr/include/c++/13/bits/chrono.h" 3 9642: using nanoseconds = duration; 9642: 9642: 9642: using microseconds = duration; 9642: 9642: 9642: using milliseconds = duration; 9642: 9642: 9642: using seconds = duration; 9642: 9642: 9642: using minutes = duration>; 9642: 9642: 9642: using hours = duration>; 9642: # 921 "/usr/include/c++/13/bits/chrono.h" 3 9642: template 9642: class time_point 9642: { 9642: static_assert(__is_duration<_Dur>::value, 9642: "duration must be a specialization of std::chrono::duration"); 9642: 9642: public: 9642: typedef _Clock clock; 9642: typedef _Dur duration; 9642: typedef typename duration::rep rep; 9642: typedef typename duration::period period; 9642: 9642: constexpr time_point() : __d(duration::zero()) 9642: { } 9642: 9642: constexpr explicit time_point(const duration& __dur) 9642: : __d(__dur) 9642: { } 9642: 9642: 9642: template>> 9642: constexpr time_point(const time_point& __t) 9642: : __d(__t.time_since_epoch()) 9642: { } 9642: 9642: 9642: constexpr duration 9642: time_since_epoch() const 9642: { return __d; } 9642: # 977 "/usr/include/c++/13/bits/chrono.h" 3 9642: constexpr time_point& 9642: operator+=(const duration& __dur) 9642: { 9642: __d += __dur; 9642: return *this; 9642: } 9642: 9642: constexpr time_point& 9642: operator-=(const duration& __dur) 9642: { 9642: __d -= __dur; 9642: return *this; 9642: } 9642: 9642: 9642: static constexpr time_point 9642: min() noexcept 9642: { return time_point(duration::min()); } 9642: 9642: static constexpr time_point 9642: max() noexcept 9642: { return time_point(duration::max()); } 9642: 9642: private: 9642: duration __d; 9642: }; 9642: # 1016 "/usr/include/c++/13/bits/chrono.h" 3 9642: template 9642: [[__nodiscard__]] constexpr 9642: __enable_if_t<__is_duration<_ToDur>::value, time_point<_Clock, _ToDur>> 9642: time_point_cast(const time_point<_Clock, _Dur>& __t) 9642: { 9642: typedef time_point<_Clock, _ToDur> __time_point; 9642: return __time_point(duration_cast<_ToDur>(__t.time_since_epoch())); 9642: } 9642: # 1038 "/usr/include/c++/13/bits/chrono.h" 3 9642: template 9642: [[nodiscard]] constexpr 9642: enable_if_t<__is_duration_v<_ToDur>, time_point<_Clock, _ToDur>> 9642: floor(const time_point<_Clock, _Dur>& __tp) 9642: { 9642: return time_point<_Clock, _ToDur>{ 9642: chrono::floor<_ToDur>(__tp.time_since_epoch())}; 9642: } 9642: # 1059 "/usr/include/c++/13/bits/chrono.h" 3 9642: template 9642: [[nodiscard]] constexpr 9642: enable_if_t<__is_duration_v<_ToDur>, time_point<_Clock, _ToDur>> 9642: ceil(const time_point<_Clock, _Dur>& __tp) 9642: { 9642: return time_point<_Clock, _ToDur>{ 9642: chrono::ceil<_ToDur>(__tp.time_since_epoch())}; 9642: } 9642: # 1081 "/usr/include/c++/13/bits/chrono.h" 3 9642: template 9642: [[nodiscard]] constexpr 9642: enable_if_t<__is_duration_v<_ToDur> 9642: && !treat_as_floating_point_v, 9642: time_point<_Clock, _ToDur>> 9642: round(const time_point<_Clock, _Dur>& __tp) 9642: { 9642: return time_point<_Clock, _ToDur>{ 9642: chrono::round<_ToDur>(__tp.time_since_epoch())}; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: constexpr time_point<_Clock, 9642: typename common_type<_Dur1, duration<_Rep2, _Period2>>::type> 9642: operator+(const time_point<_Clock, _Dur1>& __lhs, 9642: const duration<_Rep2, _Period2>& __rhs) 9642: { 9642: typedef duration<_Rep2, _Period2> __dur2; 9642: typedef typename common_type<_Dur1,__dur2>::type __ct; 9642: typedef time_point<_Clock, __ct> __time_point; 9642: return __time_point(__lhs.time_since_epoch() + __rhs); 9642: } 9642: 9642: 9642: template 9642: constexpr time_point<_Clock, 9642: typename common_type, _Dur2>::type> 9642: operator+(const duration<_Rep1, _Period1>& __lhs, 9642: const time_point<_Clock, _Dur2>& __rhs) 9642: { 9642: typedef duration<_Rep1, _Period1> __dur1; 9642: typedef typename common_type<__dur1,_Dur2>::type __ct; 9642: typedef time_point<_Clock, __ct> __time_point; 9642: return __time_point(__rhs.time_since_epoch() + __lhs); 9642: } 9642: 9642: 9642: template 9642: constexpr time_point<_Clock, 9642: typename common_type<_Dur1, duration<_Rep2, _Period2>>::type> 9642: operator-(const time_point<_Clock, _Dur1>& __lhs, 9642: const duration<_Rep2, _Period2>& __rhs) 9642: { 9642: typedef duration<_Rep2, _Period2> __dur2; 9642: typedef typename common_type<_Dur1,__dur2>::type __ct; 9642: typedef time_point<_Clock, __ct> __time_point; 9642: return __time_point(__lhs.time_since_epoch() -__rhs); 9642: } 9642: 9642: 9642: template 9642: constexpr typename common_type<_Dur1, _Dur2>::type 9642: operator-(const time_point<_Clock, _Dur1>& __lhs, 9642: const time_point<_Clock, _Dur2>& __rhs) 9642: { return __lhs.time_since_epoch() - __rhs.time_since_epoch(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: constexpr bool 9642: operator==(const time_point<_Clock, _Dur1>& __lhs, 9642: const time_point<_Clock, _Dur2>& __rhs) 9642: { return __lhs.time_since_epoch() == __rhs.time_since_epoch(); } 9642: # 1165 "/usr/include/c++/13/bits/chrono.h" 3 9642: template 9642: constexpr bool 9642: operator!=(const time_point<_Clock, _Dur1>& __lhs, 9642: const time_point<_Clock, _Dur2>& __rhs) 9642: { return !(__lhs == __rhs); } 9642: 9642: 9642: template 9642: constexpr bool 9642: operator<(const time_point<_Clock, _Dur1>& __lhs, 9642: const time_point<_Clock, _Dur2>& __rhs) 9642: { return __lhs.time_since_epoch() < __rhs.time_since_epoch(); } 9642: 9642: template 9642: constexpr bool 9642: operator<=(const time_point<_Clock, _Dur1>& __lhs, 9642: const time_point<_Clock, _Dur2>& __rhs) 9642: { return !(__rhs < __lhs); } 9642: 9642: template 9642: constexpr bool 9642: operator>(const time_point<_Clock, _Dur1>& __lhs, 9642: const time_point<_Clock, _Dur2>& __rhs) 9642: { return __rhs < __lhs; } 9642: 9642: template 9642: constexpr bool 9642: operator>=(const time_point<_Clock, _Dur1>& __lhs, 9642: const time_point<_Clock, _Dur2>& __rhs) 9642: { return !(__lhs < __rhs); } 9642: # 1217 "/usr/include/c++/13/bits/chrono.h" 3 9642: inline namespace _V2 { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct system_clock 9642: { 9642: typedef chrono::nanoseconds duration; 9642: typedef duration::rep rep; 9642: typedef duration::period period; 9642: typedef chrono::time_point time_point; 9642: 9642: static_assert(system_clock::duration::min() 9642: < system_clock::duration::zero(), 9642: "a clock's minimum duration cannot be less than its epoch"); 9642: 9642: static constexpr bool is_steady = false; 9642: 9642: static time_point 9642: now() noexcept; 9642: 9642: 9642: 9642: static std::time_t 9642: to_time_t(const time_point& __t) noexcept 9642: { 9642: return std::time_t(duration_cast 9642: (__t.time_since_epoch()).count()); 9642: } 9642: 9642: 9642: static time_point 9642: from_time_t(std::time_t __t) noexcept 9642: { 9642: typedef chrono::time_point __from; 9642: return time_point_cast 9642: (__from(chrono::seconds(__t))); 9642: } 9642: }; 9642: # 1267 "/usr/include/c++/13/bits/chrono.h" 3 9642: struct steady_clock 9642: { 9642: typedef chrono::nanoseconds duration; 9642: typedef duration::rep rep; 9642: typedef duration::period period; 9642: typedef chrono::time_point time_point; 9642: 9642: static constexpr bool is_steady = true; 9642: 9642: static time_point 9642: now() noexcept; 9642: }; 9642: # 1289 "/usr/include/c++/13/bits/chrono.h" 3 9642: using high_resolution_clock = system_clock; 9642: 9642: } 9642: # 1315 "/usr/include/c++/13/bits/chrono.h" 3 9642: } 9642: 9642: 9642: 9642: 9642: inline namespace literals 9642: { 9642: # 1346 "/usr/include/c++/13/bits/chrono.h" 3 9642: inline namespace chrono_literals 9642: { 9642: 9642: 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wliteral-suffix" 9642: 9642: template 9642: constexpr _Dur __check_overflow() 9642: { 9642: using _Val = __parse_int::_Parse_int<_Digits...>; 9642: constexpr typename _Dur::rep __repval = _Val::value; 9642: static_assert(__repval >= 0 && __repval == _Val::value, 9642: "literal value cannot be represented by duration type"); 9642: return _Dur(__repval); 9642: } 9642: 9642: 9642: 9642: constexpr chrono::duration> 9642: operator""h(long double __hours) 9642: { return chrono::duration>{__hours}; } 9642: 9642: 9642: template 9642: constexpr chrono::hours 9642: operator""h() 9642: { return __check_overflow(); } 9642: 9642: 9642: constexpr chrono::duration> 9642: operator""min(long double __mins) 9642: { return chrono::duration>{__mins}; } 9642: 9642: 9642: template 9642: constexpr chrono::minutes 9642: operator""min() 9642: { return __check_overflow(); } 9642: 9642: 9642: constexpr chrono::duration 9642: operator""s(long double __secs) 9642: { return chrono::duration{__secs}; } 9642: 9642: 9642: template 9642: constexpr chrono::seconds 9642: operator""s() 9642: { return __check_overflow(); } 9642: 9642: 9642: constexpr chrono::duration 9642: operator""ms(long double __msecs) 9642: { return chrono::duration{__msecs}; } 9642: 9642: 9642: template 9642: constexpr chrono::milliseconds 9642: operator""ms() 9642: { return __check_overflow(); } 9642: 9642: 9642: constexpr chrono::duration 9642: operator""us(long double __usecs) 9642: { return chrono::duration{__usecs}; } 9642: 9642: 9642: template 9642: constexpr chrono::microseconds 9642: operator""us() 9642: { return __check_overflow(); } 9642: 9642: 9642: constexpr chrono::duration 9642: operator""ns(long double __nsecs) 9642: { return chrono::duration{__nsecs}; } 9642: 9642: 9642: template 9642: constexpr chrono::nanoseconds 9642: operator""ns() 9642: { return __check_overflow(); } 9642: 9642: #pragma GCC diagnostic pop 9642: 9642: } 9642: } 9642: 9642: namespace chrono 9642: { 9642: using namespace literals::chrono_literals; 9642: } 9642: 9642: 9642: 9642: namespace filesystem 9642: { 9642: struct __file_clock 9642: { 9642: using duration = chrono::nanoseconds; 9642: using rep = duration::rep; 9642: using period = duration::period; 9642: using time_point = chrono::time_point<__file_clock>; 9642: static constexpr bool is_steady = false; 9642: 9642: static time_point 9642: now() noexcept 9642: { return _S_from_sys(chrono::system_clock::now()); } 9642: # 1472 "/usr/include/c++/13/bits/chrono.h" 3 9642: private: 9642: using __sys_clock = chrono::system_clock; 9642: 9642: 9642: 9642: 9642: static constexpr chrono::seconds _S_epoch_diff{6437664000}; 9642: 9642: protected: 9642: 9642: template 9642: static 9642: chrono::time_point<__file_clock, common_type_t<_Dur, chrono::seconds>> 9642: _S_from_sys(const chrono::time_point<__sys_clock, _Dur>& __t) noexcept 9642: { 9642: using _CDur = common_type_t<_Dur, chrono::seconds>; 9642: using __file_time = chrono::time_point<__file_clock, _CDur>; 9642: return __file_time{__t.time_since_epoch()} - _S_epoch_diff; 9642: } 9642: 9642: 9642: template 9642: static 9642: chrono::time_point<__sys_clock, common_type_t<_Dur, chrono::seconds>> 9642: _S_to_sys(const chrono::time_point<__file_clock, _Dur>& __t) noexcept 9642: { 9642: using _CDur = common_type_t<_Dur, chrono::seconds>; 9642: using __sys_time = chrono::time_point<__sys_clock, _CDur>; 9642: return __sys_time{__t.time_since_epoch()} + _S_epoch_diff; 9642: } 9642: }; 9642: } 9642: 9642: 9642: 9642: } 9642: # 37 "/usr/include/c++/13/bits/this_thread_sleep.h" 2 3 9642: 9642: 9642: # 1 "/usr/include/c++/13/cerrno" 1 3 9642: # 39 "/usr/include/c++/13/cerrno" 3 9642: 9642: # 40 "/usr/include/c++/13/cerrno" 3 9642: # 40 "/usr/include/c++/13/bits/this_thread_sleep.h" 2 3 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 56 "/usr/include/c++/13/bits/this_thread_sleep.h" 3 9642: namespace this_thread 9642: { 9642: # 66 "/usr/include/c++/13/bits/this_thread_sleep.h" 3 9642: template 9642: inline void 9642: sleep_for(const chrono::duration<_Rep, _Period>& __rtime) 9642: { 9642: if (__rtime <= __rtime.zero()) 9642: return; 9642: auto __s = chrono::duration_cast(__rtime); 9642: auto __ns = chrono::duration_cast(__rtime - __s); 9642: 9642: struct ::timespec __ts = 9642: { 9642: static_cast(__s.count()), 9642: static_cast(__ns.count()) 9642: }; 9642: while (::nanosleep(&__ts, &__ts) == -1 && (*__errno_location ()) == 4) 9642: { } 9642: 9642: 9642: 9642: } 9642: 9642: 9642: template 9642: inline void 9642: sleep_until(const chrono::time_point<_Clock, _Duration>& __atime) 9642: { 9642: 9642: 9642: 9642: auto __now = _Clock::now(); 9642: if (_Clock::is_steady) 9642: { 9642: if (__now < __atime) 9642: sleep_for(__atime - __now); 9642: return; 9642: } 9642: while (__now < __atime) 9642: { 9642: sleep_for(__atime - __now); 9642: __now = _Clock::now(); 9642: } 9642: } 9642: 9642: } 9642: 9642: 9642: 9642: 9642: } 9642: # 47 "/usr/include/c++/13/thread" 2 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 70 "/usr/include/c++/13/thread" 3 9642: inline bool 9642: operator!=(thread::id __x, thread::id __y) noexcept 9642: { return !(__x == __y); } 9642: 9642: inline bool 9642: operator<(thread::id __x, thread::id __y) noexcept 9642: { 9642: 9642: 9642: return __x._M_thread < __y._M_thread; 9642: } 9642: 9642: inline bool 9642: operator<=(thread::id __x, thread::id __y) noexcept 9642: { return !(__y < __x); } 9642: 9642: inline bool 9642: operator>(thread::id __x, thread::id __y) noexcept 9642: { return __y < __x; } 9642: 9642: inline bool 9642: operator>=(thread::id __x, thread::id __y) noexcept 9642: { return !(__x < __y); } 9642: 9642: 9642: template 9642: inline basic_ostream<_CharT, _Traits>& 9642: operator<<(basic_ostream<_CharT, _Traits>& __out, thread::id __id) 9642: { 9642: if (__id == thread::id()) 9642: return __out << "thread::id of a non-executing thread"; 9642: else 9642: return __out << __id._M_thread; 9642: } 9642: # 283 "/usr/include/c++/13/thread" 3 9642: 9642: } 9642: # 15 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/port_defs.h" 1 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/port_defs.h" 9642: 9642: 9642: 9642: 9642: 9642: # 13 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/port_defs.h" 9642: namespace rocksdb { 9642: 9642: namespace port { 9642: class CondVar; 9642: } 9642: 9642: enum class CpuPriority { 9642: kIdle = 0, 9642: kLow = 1, 9642: kNormal = 2, 9642: kHigh = 3, 9642: }; 9642: 9642: } 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 2 9642: # 86 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 9642: namespace rocksdb { 9642: 9642: extern const bool kDefaultToAdaptiveMutex; 9642: 9642: namespace port { 9642: constexpr bool kLittleEndian = ( 9642: # 91 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 3 4 9642: 1234 9642: # 91 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 9642: == 9642: # 91 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 3 4 9642: 1234 9642: # 91 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 9642: ); 9642: 9642: 9642: class CondVar; 9642: 9642: class Mutex { 9642: public: 9642: static const char* kName() { return "pthread_mutex_t"; } 9642: 9642: explicit Mutex(bool adaptive = kDefaultToAdaptiveMutex); 9642: 9642: Mutex(const Mutex&) = delete; 9642: void operator=(const Mutex&) = delete; 9642: 9642: ~Mutex(); 9642: 9642: void Lock(); 9642: void Unlock(); 9642: 9642: bool TryLock(); 9642: 9642: 9642: 9642: void AssertHeld() const; 9642: 9642: 9642: inline void lock() { Lock(); } 9642: inline void unlock() { Unlock(); } 9642: inline bool try_lock() { return TryLock(); } 9642: 9642: private: 9642: friend class CondVar; 9642: pthread_mutex_t mu_; 9642: 9642: bool locked_ = false; 9642: 9642: }; 9642: 9642: class RWMutex { 9642: public: 9642: RWMutex(); 9642: 9642: RWMutex(const RWMutex&) = delete; 9642: void operator=(const RWMutex&) = delete; 9642: 9642: ~RWMutex(); 9642: 9642: void ReadLock(); 9642: void WriteLock(); 9642: void ReadUnlock(); 9642: void WriteUnlock(); 9642: void AssertHeld() const {} 9642: 9642: private: 9642: pthread_rwlock_t mu_; 9642: }; 9642: 9642: class CondVar { 9642: public: 9642: explicit CondVar(Mutex* mu); 9642: ~CondVar(); 9642: 9642: Mutex* GetMutex() const { return mu_; } 9642: 9642: void Wait(); 9642: 9642: bool TimedWait(uint64_t abs_time_us); 9642: void Signal(); 9642: void SignalAll(); 9642: 9642: private: 9642: pthread_cond_t cv_; 9642: Mutex* mu_; 9642: }; 9642: 9642: using Thread = std::thread; 9642: 9642: static inline void AsmVolatilePause() { 9642: # 179 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 9642: } 9642: 9642: 9642: int PhysicalCoreID(); 9642: 9642: using OnceType = pthread_once_t; 9642: 9642: void InitOnce(OnceType* once, void (*initializer)()); 9642: # 211 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 9642: static_assert((64U & (64U - 1)) == 0, 9642: "Cache line size must be a power of 2 number of bytes"); 9642: 9642: void* cacheline_aligned_alloc(size_t size); 9642: 9642: void cacheline_aligned_free(void* memblock); 9642: # 229 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 9642: void Crash(const std::string& srcfile, int srcline); 9642: 9642: int GetMaxOpenFiles(); 9642: 9642: extern const size_t kPageSize; 9642: 9642: using ThreadId = pid_t; 9642: 9642: void SetCpuPriority(ThreadId id, CpuPriority priority); 9642: 9642: int64_t GetProcessID(); 9642: 9642: 9642: 9642: bool GenerateRfcUuid(std::string* output); 9642: 9642: } 9642: } 9642: # 19 "/build/reproducible-path/rocksdb-9.3.1/port/port.h" 2 9642: # 23 "/build/reproducible-path/rocksdb-9.3.1/util/coding.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/coding_lean.h" 1 9642: # 12 "/build/reproducible-path/rocksdb-9.3.1/util/coding_lean.h" 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/cstring" 1 3 9642: # 39 "/usr/include/c++/13/cstring" 3 9642: 9642: # 40 "/usr/include/c++/13/cstring" 3 9642: # 16 "/build/reproducible-path/rocksdb-9.3.1/util/coding_lean.h" 2 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: inline void EncodeFixed16(char* buf, uint16_t value) { 9642: if (port::kLittleEndian) { 9642: memcpy(buf, &value, sizeof(value)); 9642: } else { 9642: buf[0] = value & 0xff; 9642: buf[1] = (value >> 8) & 0xff; 9642: } 9642: } 9642: 9642: inline void EncodeFixed32(char* buf, uint32_t value) { 9642: if (port::kLittleEndian) { 9642: memcpy(buf, &value, sizeof(value)); 9642: } else { 9642: buf[0] = value & 0xff; 9642: buf[1] = (value >> 8) & 0xff; 9642: buf[2] = (value >> 16) & 0xff; 9642: buf[3] = (value >> 24) & 0xff; 9642: } 9642: } 9642: 9642: inline void EncodeFixed64(char* buf, uint64_t value) { 9642: if (port::kLittleEndian) { 9642: memcpy(buf, &value, sizeof(value)); 9642: } else { 9642: buf[0] = value & 0xff; 9642: buf[1] = (value >> 8) & 0xff; 9642: buf[2] = (value >> 16) & 0xff; 9642: buf[3] = (value >> 24) & 0xff; 9642: buf[4] = (value >> 32) & 0xff; 9642: buf[5] = (value >> 40) & 0xff; 9642: buf[6] = (value >> 48) & 0xff; 9642: buf[7] = (value >> 56) & 0xff; 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: inline uint16_t DecodeFixed16(const char* ptr) { 9642: if (port::kLittleEndian) { 9642: 9642: uint16_t result; 9642: memcpy(&result, ptr, sizeof(result)); 9642: return result; 9642: } else { 9642: return ((static_cast(static_cast(ptr[0]))) | 9642: (static_cast(static_cast(ptr[1])) << 8)); 9642: } 9642: } 9642: 9642: inline uint32_t DecodeFixed32(const char* ptr) { 9642: if (port::kLittleEndian) { 9642: 9642: uint32_t result; 9642: memcpy(&result, ptr, sizeof(result)); 9642: return result; 9642: } else { 9642: return ((static_cast(static_cast(ptr[0]))) | 9642: (static_cast(static_cast(ptr[1])) << 8) | 9642: (static_cast(static_cast(ptr[2])) << 16) | 9642: (static_cast(static_cast(ptr[3])) << 24)); 9642: } 9642: } 9642: 9642: inline uint64_t DecodeFixed64(const char* ptr) { 9642: if (port::kLittleEndian) { 9642: 9642: uint64_t result; 9642: memcpy(&result, ptr, sizeof(result)); 9642: return result; 9642: } else { 9642: uint64_t lo = DecodeFixed32(ptr); 9642: uint64_t hi = DecodeFixed32(ptr + 4); 9642: return (hi << 32) | lo; 9642: } 9642: } 9642: 9642: } 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/util/coding.h" 2 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: 9642: const uint32_t kMaxVarint64Length = 10; 9642: 9642: 9642: void PutFixed16(std::string* dst, uint16_t value); 9642: void PutFixed32(std::string* dst, uint32_t value); 9642: void PutFixed64(std::string* dst, uint64_t value); 9642: void PutVarint32(std::string* dst, uint32_t value); 9642: void PutVarint32Varint32(std::string* dst, uint32_t value1, uint32_t value2); 9642: void PutVarint32Varint32Varint32(std::string* dst, uint32_t value1, 9642: uint32_t value2, uint32_t value3); 9642: void PutVarint64(std::string* dst, uint64_t value); 9642: void PutVarint64Varint64(std::string* dst, uint64_t value1, uint64_t value2); 9642: void PutVarint32Varint64(std::string* dst, uint32_t value1, uint64_t value2); 9642: void PutVarint32Varint32Varint64(std::string* dst, uint32_t value1, 9642: uint32_t value2, uint64_t value3); 9642: void PutLengthPrefixedSlice(std::string* dst, const Slice& value); 9642: void PutLengthPrefixedSliceParts(std::string* dst, 9642: const SliceParts& slice_parts); 9642: void PutLengthPrefixedSlicePartsWithPadding(std::string* dst, 9642: const SliceParts& slice_parts, 9642: size_t pad_sz); 9642: 9642: 9642: 9642: bool GetFixed64(Slice* input, uint64_t* value); 9642: bool GetFixed32(Slice* input, uint32_t* value); 9642: bool GetFixed16(Slice* input, uint16_t* value); 9642: bool GetVarint32(Slice* input, uint32_t* value); 9642: bool GetVarint64(Slice* input, uint64_t* value); 9642: bool GetVarsignedint64(Slice* input, int64_t* value); 9642: bool GetLengthPrefixedSlice(Slice* input, Slice* result); 9642: 9642: Slice GetLengthPrefixedSlice(const char* data); 9642: 9642: Slice GetSliceUntil(Slice* slice, char delimiter); 9642: 9642: 9642: 9642: constexpr inline uint64_t i64ToZigzag(const int64_t l) { 9642: return (static_cast(l) << 1) ^ static_cast(l >> 63); 9642: } 9642: inline int64_t zigzagToI64(uint64_t n) { 9642: return (n >> 1) ^ -static_cast(n & 1); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: const char* GetVarint32Ptr(const char* p, const char* limit, uint32_t* v); 9642: const char* GetVarint64Ptr(const char* p, const char* limit, uint64_t* v); 9642: inline const char* GetVarsignedint64Ptr(const char* p, const char* limit, 9642: int64_t* value) { 9642: uint64_t u = 0; 9642: const char* ret = GetVarint64Ptr(p, limit, &u); 9642: *value = zigzagToI64(u); 9642: return ret; 9642: } 9642: 9642: 9642: int VarintLength(uint64_t v); 9642: 9642: 9642: 9642: 9642: char* EncodeVarint32(char* dst, uint32_t value); 9642: char* EncodeVarint64(char* dst, uint64_t value); 9642: 9642: 9642: const char* GetVarint32PtrFallback(const char* p, const char* limit, 9642: uint32_t* value); 9642: inline const char* GetVarint32Ptr(const char* p, const char* limit, 9642: uint32_t* value) { 9642: if (p < limit) { 9642: uint32_t result = *(reinterpret_cast(p)); 9642: if ((result & 128) == 0) { 9642: *value = result; 9642: return p + 1; 9642: } 9642: } 9642: return GetVarint32PtrFallback(p, limit, value); 9642: } 9642: 9642: 9642: inline void PutFixed16(std::string* dst, uint16_t value) { 9642: if (port::kLittleEndian) { 9642: dst->append(const_cast(reinterpret_cast(&value)), 9642: sizeof(value)); 9642: } else { 9642: char buf[sizeof(value)]; 9642: EncodeFixed16(buf, value); 9642: dst->append(buf, sizeof(buf)); 9642: } 9642: } 9642: 9642: inline void PutFixed32(std::string* dst, uint32_t value) { 9642: if (port::kLittleEndian) { 9642: dst->append(const_cast(reinterpret_cast(&value)), 9642: sizeof(value)); 9642: } else { 9642: char buf[sizeof(value)]; 9642: EncodeFixed32(buf, value); 9642: dst->append(buf, sizeof(buf)); 9642: } 9642: } 9642: 9642: inline void PutFixed64(std::string* dst, uint64_t value) { 9642: if (port::kLittleEndian) { 9642: dst->append(const_cast(reinterpret_cast(&value)), 9642: sizeof(value)); 9642: } else { 9642: char buf[sizeof(value)]; 9642: EncodeFixed64(buf, value); 9642: dst->append(buf, sizeof(buf)); 9642: } 9642: } 9642: 9642: inline void PutVarint32(std::string* dst, uint32_t v) { 9642: char buf[5]; 9642: char* ptr = EncodeVarint32(buf, v); 9642: dst->append(buf, static_cast(ptr - buf)); 9642: } 9642: 9642: inline void PutVarint32Varint32(std::string* dst, uint32_t v1, uint32_t v2) { 9642: char buf[10]; 9642: char* ptr = EncodeVarint32(buf, v1); 9642: ptr = EncodeVarint32(ptr, v2); 9642: dst->append(buf, static_cast(ptr - buf)); 9642: } 9642: 9642: inline void PutVarint32Varint32Varint32(std::string* dst, uint32_t v1, 9642: uint32_t v2, uint32_t v3) { 9642: char buf[15]; 9642: char* ptr = EncodeVarint32(buf, v1); 9642: ptr = EncodeVarint32(ptr, v2); 9642: ptr = EncodeVarint32(ptr, v3); 9642: dst->append(buf, static_cast(ptr - buf)); 9642: } 9642: 9642: inline char* EncodeVarint64(char* dst, uint64_t v) { 9642: static const unsigned int B = 128; 9642: unsigned char* ptr = reinterpret_cast(dst); 9642: while (v >= B) { 9642: *(ptr++) = (v & (B - 1)) | B; 9642: v >>= 7; 9642: } 9642: *(ptr++) = static_cast(v); 9642: return reinterpret_cast(ptr); 9642: } 9642: 9642: inline void PutVarint64(std::string* dst, uint64_t v) { 9642: char buf[kMaxVarint64Length]; 9642: char* ptr = EncodeVarint64(buf, v); 9642: dst->append(buf, static_cast(ptr - buf)); 9642: } 9642: 9642: inline void PutVarsignedint64(std::string* dst, int64_t v) { 9642: char buf[kMaxVarint64Length]; 9642: 9642: char* ptr = EncodeVarint64(buf, i64ToZigzag(v)); 9642: dst->append(buf, static_cast(ptr - buf)); 9642: } 9642: 9642: inline void PutVarint64Varint64(std::string* dst, uint64_t v1, uint64_t v2) { 9642: char buf[20]; 9642: char* ptr = EncodeVarint64(buf, v1); 9642: ptr = EncodeVarint64(ptr, v2); 9642: dst->append(buf, static_cast(ptr - buf)); 9642: } 9642: 9642: inline void PutVarint32Varint64(std::string* dst, uint32_t v1, uint64_t v2) { 9642: char buf[15]; 9642: char* ptr = EncodeVarint32(buf, v1); 9642: ptr = EncodeVarint64(ptr, v2); 9642: dst->append(buf, static_cast(ptr - buf)); 9642: } 9642: 9642: inline void PutVarint32Varint32Varint64(std::string* dst, uint32_t v1, 9642: uint32_t v2, uint64_t v3) { 9642: char buf[20]; 9642: char* ptr = EncodeVarint32(buf, v1); 9642: ptr = EncodeVarint32(ptr, v2); 9642: ptr = EncodeVarint64(ptr, v3); 9642: dst->append(buf, static_cast(ptr - buf)); 9642: } 9642: 9642: inline void PutLengthPrefixedSlice(std::string* dst, const Slice& value) { 9642: PutVarint32(dst, static_cast(value.size())); 9642: dst->append(value.data(), value.size()); 9642: } 9642: 9642: inline void PutLengthPrefixedSliceParts(std::string* dst, size_t total_bytes, 9642: const SliceParts& slice_parts) { 9642: for (int i = 0; i < slice_parts.num_parts; ++i) { 9642: total_bytes += slice_parts.parts[i].size(); 9642: } 9642: PutVarint32(dst, static_cast(total_bytes)); 9642: for (int i = 0; i < slice_parts.num_parts; ++i) { 9642: dst->append(slice_parts.parts[i].data(), slice_parts.parts[i].size()); 9642: } 9642: } 9642: 9642: inline void PutLengthPrefixedSliceParts(std::string* dst, 9642: const SliceParts& slice_parts) { 9642: PutLengthPrefixedSliceParts(dst, 0, slice_parts); 9642: } 9642: 9642: inline void PutLengthPrefixedSlicePartsWithPadding( 9642: std::string* dst, const SliceParts& slice_parts, size_t pad_sz) { 9642: PutLengthPrefixedSliceParts(dst, pad_sz, slice_parts); 9642: dst->append(pad_sz, '\0'); 9642: } 9642: 9642: inline int VarintLength(uint64_t v) { 9642: int len = 1; 9642: while (v >= 128) { 9642: v >>= 7; 9642: len++; 9642: } 9642: return len; 9642: } 9642: 9642: inline bool GetFixed64(Slice* input, uint64_t* value) { 9642: if (input->size() < sizeof(uint64_t)) { 9642: return false; 9642: } 9642: *value = DecodeFixed64(input->data()); 9642: input->remove_prefix(sizeof(uint64_t)); 9642: return true; 9642: } 9642: 9642: inline bool GetFixed32(Slice* input, uint32_t* value) { 9642: if (input->size() < sizeof(uint32_t)) { 9642: return false; 9642: } 9642: *value = DecodeFixed32(input->data()); 9642: input->remove_prefix(sizeof(uint32_t)); 9642: return true; 9642: } 9642: 9642: inline bool GetFixed16(Slice* input, uint16_t* value) { 9642: if (input->size() < sizeof(uint16_t)) { 9642: return false; 9642: } 9642: *value = DecodeFixed16(input->data()); 9642: input->remove_prefix(sizeof(uint16_t)); 9642: return true; 9642: } 9642: 9642: inline bool GetVarint32(Slice* input, uint32_t* value) { 9642: const char* p = input->data(); 9642: const char* limit = p + input->size(); 9642: const char* q = GetVarint32Ptr(p, limit, value); 9642: if (q == nullptr) { 9642: return false; 9642: } else { 9642: *input = Slice(q, static_cast(limit - q)); 9642: return true; 9642: } 9642: } 9642: 9642: inline bool GetVarint64(Slice* input, uint64_t* value) { 9642: const char* p = input->data(); 9642: const char* limit = p + input->size(); 9642: const char* q = GetVarint64Ptr(p, limit, value); 9642: if (q == nullptr) { 9642: return false; 9642: } else { 9642: *input = Slice(q, static_cast(limit - q)); 9642: return true; 9642: } 9642: } 9642: 9642: inline bool GetVarsignedint64(Slice* input, int64_t* value) { 9642: const char* p = input->data(); 9642: const char* limit = p + input->size(); 9642: const char* q = GetVarsignedint64Ptr(p, limit, value); 9642: if (q == nullptr) { 9642: return false; 9642: } else { 9642: *input = Slice(q, static_cast(limit - q)); 9642: return true; 9642: } 9642: } 9642: 9642: inline bool GetLengthPrefixedSlice(Slice* input, Slice* result) { 9642: uint32_t len = 0; 9642: if (GetVarint32(input, &len) && input->size() >= len) { 9642: *result = Slice(input->data(), len); 9642: input->remove_prefix(len); 9642: return true; 9642: } else { 9642: return false; 9642: } 9642: } 9642: 9642: inline Slice GetLengthPrefixedSlice(const char* data) { 9642: uint32_t len = 0; 9642: 9642: 9642: auto p = GetVarint32Ptr(data, data + 5 , &len); 9642: return Slice(p, len); 9642: } 9642: 9642: inline Slice GetSliceUntil(Slice* slice, char delimiter) { 9642: uint32_t len = 0; 9642: for (len = 0; len < slice->size() && slice->data()[len] != delimiter; ++len) { 9642: 9642: } 9642: 9642: Slice ret(slice->data(), len); 9642: slice->remove_prefix(len + ((len < slice->size()) ? 1 : 0)); 9642: return ret; 9642: } 9642: 9642: template 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline void 9642: PutUnaligned(T* memory, const T& value) { 9642: 9642: 9642: 9642: 9642: *memory = value; 9642: 9642: } 9642: 9642: template 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline void 9642: GetUnaligned(const T* memory, T* value) { 9642: 9642: 9642: 9642: 9642: *value = *memory; 9642: 9642: } 9642: 9642: } 9642: # 23 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/user_comparator_wrapper.h" 1 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/util/user_comparator_wrapper.h" 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_context_imp.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_step_timer.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_level_imp.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/perf_level.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: 9642: enum PerfLevel : unsigned char { 9642: kUninitialized = 0, 9642: kDisable = 1, 9642: kEnableCount = 2, 9642: kEnableWait = 3, 9642: 9642: 9642: kEnableTimeExceptForMutex = 4, 9642: 9642: 9642: 9642: kEnableTimeAndCPUTimeExceptForMutex = 5, 9642: kEnableTime = 6, 9642: kOutOfBounds = 7 9642: }; 9642: 9642: 9642: void SetPerfLevel(PerfLevel level); 9642: 9642: 9642: PerfLevel GetPerfLevel(); 9642: 9642: } 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_level_imp.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: extern thread_local PerfLevel perf_level; 9642: 9642: } 9642: # 8 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_step_timer.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/monitoring/statistics_impl.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/map" 1 3 9642: # 58 "/usr/include/c++/13/map" 3 9642: 9642: # 59 "/usr/include/c++/13/map" 3 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/stl_tree.h" 1 3 9642: # 61 "/usr/include/c++/13/bits/stl_tree.h" 3 9642: 9642: # 62 "/usr/include/c++/13/bits/stl_tree.h" 3 9642: # 75 "/usr/include/c++/13/bits/stl_tree.h" 3 9642: 9642: # 75 "/usr/include/c++/13/bits/stl_tree.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 99 "/usr/include/c++/13/bits/stl_tree.h" 3 9642: enum _Rb_tree_color { _S_red = false, _S_black = true }; 9642: 9642: struct _Rb_tree_node_base 9642: { 9642: typedef _Rb_tree_node_base* _Base_ptr; 9642: typedef const _Rb_tree_node_base* _Const_Base_ptr; 9642: 9642: _Rb_tree_color _M_color; 9642: _Base_ptr _M_parent; 9642: _Base_ptr _M_left; 9642: _Base_ptr _M_right; 9642: 9642: static _Base_ptr 9642: _S_minimum(_Base_ptr __x) noexcept 9642: { 9642: while (__x->_M_left != 0) __x = __x->_M_left; 9642: return __x; 9642: } 9642: 9642: static _Const_Base_ptr 9642: _S_minimum(_Const_Base_ptr __x) noexcept 9642: { 9642: while (__x->_M_left != 0) __x = __x->_M_left; 9642: return __x; 9642: } 9642: 9642: static _Base_ptr 9642: _S_maximum(_Base_ptr __x) noexcept 9642: { 9642: while (__x->_M_right != 0) __x = __x->_M_right; 9642: return __x; 9642: } 9642: 9642: static _Const_Base_ptr 9642: _S_maximum(_Const_Base_ptr __x) noexcept 9642: { 9642: while (__x->_M_right != 0) __x = __x->_M_right; 9642: return __x; 9642: } 9642: }; 9642: 9642: 9642: template 9642: struct _Rb_tree_key_compare 9642: { 9642: _Key_compare _M_key_compare; 9642: 9642: _Rb_tree_key_compare() 9642: noexcept(is_nothrow_default_constructible<_Key_compare>::value) 9642: 9642: : _M_key_compare() 9642: { } 9642: 9642: _Rb_tree_key_compare(const _Key_compare& __comp) 9642: : _M_key_compare(__comp) 9642: { } 9642: 9642: 9642: 9642: _Rb_tree_key_compare(const _Rb_tree_key_compare&) = default; 9642: 9642: _Rb_tree_key_compare(_Rb_tree_key_compare&& __x) 9642: noexcept(is_nothrow_copy_constructible<_Key_compare>::value) 9642: : _M_key_compare(__x._M_key_compare) 9642: { } 9642: 9642: }; 9642: 9642: 9642: struct _Rb_tree_header 9642: { 9642: _Rb_tree_node_base _M_header; 9642: size_t _M_node_count; 9642: 9642: _Rb_tree_header() noexcept 9642: { 9642: _M_header._M_color = _S_red; 9642: _M_reset(); 9642: } 9642: 9642: 9642: _Rb_tree_header(_Rb_tree_header&& __x) noexcept 9642: { 9642: if (__x._M_header._M_parent != nullptr) 9642: _M_move_data(__x); 9642: else 9642: { 9642: _M_header._M_color = _S_red; 9642: _M_reset(); 9642: } 9642: } 9642: 9642: 9642: void 9642: _M_move_data(_Rb_tree_header& __from) 9642: { 9642: _M_header._M_color = __from._M_header._M_color; 9642: _M_header._M_parent = __from._M_header._M_parent; 9642: _M_header._M_left = __from._M_header._M_left; 9642: _M_header._M_right = __from._M_header._M_right; 9642: _M_header._M_parent->_M_parent = &_M_header; 9642: _M_node_count = __from._M_node_count; 9642: 9642: __from._M_reset(); 9642: } 9642: 9642: void 9642: _M_reset() 9642: { 9642: _M_header._M_parent = 0; 9642: _M_header._M_left = &_M_header; 9642: _M_header._M_right = &_M_header; 9642: _M_node_count = 0; 9642: } 9642: }; 9642: 9642: template 9642: struct _Rb_tree_node : public _Rb_tree_node_base 9642: { 9642: typedef _Rb_tree_node<_Val>* _Link_type; 9642: # 231 "/usr/include/c++/13/bits/stl_tree.h" 3 9642: __gnu_cxx::__aligned_membuf<_Val> _M_storage; 9642: 9642: _Val* 9642: _M_valptr() 9642: { return _M_storage._M_ptr(); } 9642: 9642: const _Val* 9642: _M_valptr() const 9642: { return _M_storage._M_ptr(); } 9642: 9642: }; 9642: 9642: __attribute__ ((__pure__)) _Rb_tree_node_base* 9642: _Rb_tree_increment(_Rb_tree_node_base* __x) throw (); 9642: 9642: __attribute__ ((__pure__)) const _Rb_tree_node_base* 9642: _Rb_tree_increment(const _Rb_tree_node_base* __x) throw (); 9642: 9642: __attribute__ ((__pure__)) _Rb_tree_node_base* 9642: _Rb_tree_decrement(_Rb_tree_node_base* __x) throw (); 9642: 9642: __attribute__ ((__pure__)) const _Rb_tree_node_base* 9642: _Rb_tree_decrement(const _Rb_tree_node_base* __x) throw (); 9642: 9642: template 9642: struct _Rb_tree_iterator 9642: { 9642: typedef _Tp value_type; 9642: typedef _Tp& reference; 9642: typedef _Tp* pointer; 9642: 9642: typedef bidirectional_iterator_tag iterator_category; 9642: typedef ptrdiff_t difference_type; 9642: 9642: typedef _Rb_tree_iterator<_Tp> _Self; 9642: typedef _Rb_tree_node_base::_Base_ptr _Base_ptr; 9642: typedef _Rb_tree_node<_Tp>* _Link_type; 9642: 9642: _Rb_tree_iterator() noexcept 9642: : _M_node() { } 9642: 9642: explicit 9642: _Rb_tree_iterator(_Base_ptr __x) noexcept 9642: : _M_node(__x) { } 9642: 9642: reference 9642: operator*() const noexcept 9642: { return *static_cast<_Link_type>(_M_node)->_M_valptr(); } 9642: 9642: pointer 9642: operator->() const noexcept 9642: { return static_cast<_Link_type> (_M_node)->_M_valptr(); } 9642: 9642: _Self& 9642: operator++() noexcept 9642: { 9642: _M_node = _Rb_tree_increment(_M_node); 9642: return *this; 9642: } 9642: 9642: _Self 9642: operator++(int) noexcept 9642: { 9642: _Self __tmp = *this; 9642: _M_node = _Rb_tree_increment(_M_node); 9642: return __tmp; 9642: } 9642: 9642: _Self& 9642: operator--() noexcept 9642: { 9642: _M_node = _Rb_tree_decrement(_M_node); 9642: return *this; 9642: } 9642: 9642: _Self 9642: operator--(int) noexcept 9642: { 9642: _Self __tmp = *this; 9642: _M_node = _Rb_tree_decrement(_M_node); 9642: return __tmp; 9642: } 9642: 9642: friend bool 9642: operator==(const _Self& __x, const _Self& __y) noexcept 9642: { return __x._M_node == __y._M_node; } 9642: 9642: 9642: friend bool 9642: operator!=(const _Self& __x, const _Self& __y) noexcept 9642: { return __x._M_node != __y._M_node; } 9642: 9642: 9642: _Base_ptr _M_node; 9642: }; 9642: 9642: template 9642: struct _Rb_tree_const_iterator 9642: { 9642: typedef _Tp value_type; 9642: typedef const _Tp& reference; 9642: typedef const _Tp* pointer; 9642: 9642: typedef _Rb_tree_iterator<_Tp> iterator; 9642: 9642: typedef bidirectional_iterator_tag iterator_category; 9642: typedef ptrdiff_t difference_type; 9642: 9642: typedef _Rb_tree_const_iterator<_Tp> _Self; 9642: typedef _Rb_tree_node_base::_Const_Base_ptr _Base_ptr; 9642: typedef const _Rb_tree_node<_Tp>* _Link_type; 9642: 9642: _Rb_tree_const_iterator() noexcept 9642: : _M_node() { } 9642: 9642: explicit 9642: _Rb_tree_const_iterator(_Base_ptr __x) noexcept 9642: : _M_node(__x) { } 9642: 9642: _Rb_tree_const_iterator(const iterator& __it) noexcept 9642: : _M_node(__it._M_node) { } 9642: 9642: iterator 9642: _M_const_cast() const noexcept 9642: { return iterator(const_cast(_M_node)); } 9642: 9642: reference 9642: operator*() const noexcept 9642: { return *static_cast<_Link_type>(_M_node)->_M_valptr(); } 9642: 9642: pointer 9642: operator->() const noexcept 9642: { return static_cast<_Link_type>(_M_node)->_M_valptr(); } 9642: 9642: _Self& 9642: operator++() noexcept 9642: { 9642: _M_node = _Rb_tree_increment(_M_node); 9642: return *this; 9642: } 9642: 9642: _Self 9642: operator++(int) noexcept 9642: { 9642: _Self __tmp = *this; 9642: _M_node = _Rb_tree_increment(_M_node); 9642: return __tmp; 9642: } 9642: 9642: _Self& 9642: operator--() noexcept 9642: { 9642: _M_node = _Rb_tree_decrement(_M_node); 9642: return *this; 9642: } 9642: 9642: _Self 9642: operator--(int) noexcept 9642: { 9642: _Self __tmp = *this; 9642: _M_node = _Rb_tree_decrement(_M_node); 9642: return __tmp; 9642: } 9642: 9642: friend bool 9642: operator==(const _Self& __x, const _Self& __y) noexcept 9642: { return __x._M_node == __y._M_node; } 9642: 9642: 9642: friend bool 9642: operator!=(const _Self& __x, const _Self& __y) noexcept 9642: { return __x._M_node != __y._M_node; } 9642: 9642: 9642: _Base_ptr _M_node; 9642: }; 9642: 9642: __attribute__((__nonnull__)) 9642: void 9642: _Rb_tree_insert_and_rebalance(const bool __insert_left, 9642: _Rb_tree_node_base* __x, 9642: _Rb_tree_node_base* __p, 9642: _Rb_tree_node_base& __header) throw (); 9642: 9642: __attribute__((__nonnull__,__returns_nonnull__)) 9642: _Rb_tree_node_base* 9642: _Rb_tree_rebalance_for_erase(_Rb_tree_node_base* const __z, 9642: _Rb_tree_node_base& __header) throw (); 9642: 9642: 9642: template 9642: struct _Rb_tree_merge_helper { }; 9642: 9642: 9642: template > 9642: class _Rb_tree 9642: { 9642: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 9642: rebind<_Rb_tree_node<_Val> >::other _Node_allocator; 9642: 9642: typedef __gnu_cxx::__alloc_traits<_Node_allocator> _Alloc_traits; 9642: 9642: protected: 9642: typedef _Rb_tree_node_base* _Base_ptr; 9642: typedef const _Rb_tree_node_base* _Const_Base_ptr; 9642: typedef _Rb_tree_node<_Val>* _Link_type; 9642: typedef const _Rb_tree_node<_Val>* _Const_Link_type; 9642: 9642: private: 9642: 9642: 9642: struct _Reuse_or_alloc_node 9642: { 9642: _Reuse_or_alloc_node(_Rb_tree& __t) 9642: : _M_root(__t._M_root()), _M_nodes(__t._M_rightmost()), _M_t(__t) 9642: { 9642: if (_M_root) 9642: { 9642: _M_root->_M_parent = 0; 9642: 9642: if (_M_nodes->_M_left) 9642: _M_nodes = _M_nodes->_M_left; 9642: } 9642: else 9642: _M_nodes = 0; 9642: } 9642: 9642: 9642: _Reuse_or_alloc_node(const _Reuse_or_alloc_node&) = delete; 9642: 9642: 9642: ~_Reuse_or_alloc_node() 9642: { _M_t._M_erase(static_cast<_Link_type>(_M_root)); } 9642: 9642: template 9642: _Link_type 9642: operator()(_Arg&& __arg) 9642: { 9642: _Link_type __node = static_cast<_Link_type>(_M_extract()); 9642: if (__node) 9642: { 9642: _M_t._M_destroy_node(__node); 9642: _M_t._M_construct_node(__node, std::forward<_Arg>(__arg)); 9642: return __node; 9642: } 9642: 9642: return _M_t._M_create_node(std::forward<_Arg>(__arg)); 9642: } 9642: 9642: private: 9642: _Base_ptr 9642: _M_extract() 9642: { 9642: if (!_M_nodes) 9642: return _M_nodes; 9642: 9642: _Base_ptr __node = _M_nodes; 9642: _M_nodes = _M_nodes->_M_parent; 9642: if (_M_nodes) 9642: { 9642: if (_M_nodes->_M_right == __node) 9642: { 9642: _M_nodes->_M_right = 0; 9642: 9642: if (_M_nodes->_M_left) 9642: { 9642: _M_nodes = _M_nodes->_M_left; 9642: 9642: while (_M_nodes->_M_right) 9642: _M_nodes = _M_nodes->_M_right; 9642: 9642: if (_M_nodes->_M_left) 9642: _M_nodes = _M_nodes->_M_left; 9642: } 9642: } 9642: else 9642: _M_nodes->_M_left = 0; 9642: } 9642: else 9642: _M_root = 0; 9642: 9642: return __node; 9642: } 9642: 9642: _Base_ptr _M_root; 9642: _Base_ptr _M_nodes; 9642: _Rb_tree& _M_t; 9642: }; 9642: 9642: 9642: 9642: struct _Alloc_node 9642: { 9642: _Alloc_node(_Rb_tree& __t) 9642: : _M_t(__t) { } 9642: 9642: template 9642: _Link_type 9642: operator()(_Arg&& __arg) const 9642: { return _M_t._M_create_node(std::forward<_Arg>(__arg)); } 9642: 9642: private: 9642: _Rb_tree& _M_t; 9642: }; 9642: 9642: public: 9642: typedef _Key key_type; 9642: typedef _Val value_type; 9642: typedef value_type* pointer; 9642: typedef const value_type* const_pointer; 9642: typedef value_type& reference; 9642: typedef const value_type& const_reference; 9642: typedef size_t size_type; 9642: typedef ptrdiff_t difference_type; 9642: typedef _Alloc allocator_type; 9642: 9642: _Node_allocator& 9642: _M_get_Node_allocator() noexcept 9642: { return this->_M_impl; } 9642: 9642: const _Node_allocator& 9642: _M_get_Node_allocator() const noexcept 9642: { return this->_M_impl; } 9642: 9642: allocator_type 9642: get_allocator() const noexcept 9642: { return allocator_type(_M_get_Node_allocator()); } 9642: 9642: protected: 9642: _Link_type 9642: _M_get_node() 9642: { return _Alloc_traits::allocate(_M_get_Node_allocator(), 1); } 9642: 9642: void 9642: _M_put_node(_Link_type __p) noexcept 9642: { _Alloc_traits::deallocate(_M_get_Node_allocator(), __p, 1); } 9642: # 590 "/usr/include/c++/13/bits/stl_tree.h" 3 9642: template 9642: void 9642: _M_construct_node(_Link_type __node, _Args&&... __args) 9642: { 9642: try 9642: { 9642: ::new(__node) _Rb_tree_node<_Val>; 9642: _Alloc_traits::construct(_M_get_Node_allocator(), 9642: __node->_M_valptr(), 9642: std::forward<_Args>(__args)...); 9642: } 9642: catch(...) 9642: { 9642: __node->~_Rb_tree_node<_Val>(); 9642: _M_put_node(__node); 9642: throw; 9642: } 9642: } 9642: 9642: template 9642: _Link_type 9642: _M_create_node(_Args&&... __args) 9642: { 9642: _Link_type __tmp = _M_get_node(); 9642: _M_construct_node(__tmp, std::forward<_Args>(__args)...); 9642: return __tmp; 9642: } 9642: 9642: 9642: void 9642: _M_destroy_node(_Link_type __p) noexcept 9642: { 9642: 9642: 9642: 9642: _Alloc_traits::destroy(_M_get_Node_allocator(), __p->_M_valptr()); 9642: __p->~_Rb_tree_node<_Val>(); 9642: 9642: } 9642: 9642: void 9642: _M_drop_node(_Link_type __p) noexcept 9642: { 9642: _M_destroy_node(__p); 9642: _M_put_node(__p); 9642: } 9642: 9642: template 9642: _Link_type 9642: _M_clone_node(_Link_type __x, _NodeGen& __node_gen) 9642: { 9642: 9642: using _Vp = __conditional_t<_MoveValue, 9642: value_type&&, 9642: const value_type&>; 9642: 9642: _Link_type __tmp 9642: = __node_gen(std::forward<_Vp>(*__x->_M_valptr())); 9642: __tmp->_M_color = __x->_M_color; 9642: __tmp->_M_left = 0; 9642: __tmp->_M_right = 0; 9642: return __tmp; 9642: } 9642: 9642: protected: 9642: 9642: 9642: 9642: 9642: template 9642: 9642: struct _Rb_tree_impl 9642: : public _Node_allocator 9642: , public _Rb_tree_key_compare<_Key_compare> 9642: , public _Rb_tree_header 9642: { 9642: typedef _Rb_tree_key_compare<_Key_compare> _Base_key_compare; 9642: 9642: _Rb_tree_impl() 9642: noexcept(is_nothrow_default_constructible<_Node_allocator>::value && is_nothrow_default_constructible<_Base_key_compare>::value) 9642: 9642: 9642: : _Node_allocator() 9642: { } 9642: 9642: _Rb_tree_impl(const _Rb_tree_impl& __x) 9642: : _Node_allocator(_Alloc_traits::_S_select_on_copy(__x)) 9642: , _Base_key_compare(__x._M_key_compare) 9642: , _Rb_tree_header() 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: _Rb_tree_impl(_Rb_tree_impl&&) 9642: noexcept( is_nothrow_move_constructible<_Base_key_compare>::value ) 9642: = default; 9642: 9642: explicit 9642: _Rb_tree_impl(_Node_allocator&& __a) 9642: : _Node_allocator(std::move(__a)) 9642: { } 9642: 9642: _Rb_tree_impl(_Rb_tree_impl&& __x, _Node_allocator&& __a) 9642: : _Node_allocator(std::move(__a)), 9642: _Base_key_compare(std::move(__x)), 9642: _Rb_tree_header(std::move(__x)) 9642: { } 9642: 9642: _Rb_tree_impl(const _Key_compare& __comp, _Node_allocator&& __a) 9642: : _Node_allocator(std::move(__a)), _Base_key_compare(__comp) 9642: { } 9642: 9642: }; 9642: 9642: _Rb_tree_impl<_Compare> _M_impl; 9642: 9642: protected: 9642: _Base_ptr& 9642: _M_root() noexcept 9642: { return this->_M_impl._M_header._M_parent; } 9642: 9642: _Const_Base_ptr 9642: _M_root() const noexcept 9642: { return this->_M_impl._M_header._M_parent; } 9642: 9642: _Base_ptr& 9642: _M_leftmost() noexcept 9642: { return this->_M_impl._M_header._M_left; } 9642: 9642: _Const_Base_ptr 9642: _M_leftmost() const noexcept 9642: { return this->_M_impl._M_header._M_left; } 9642: 9642: _Base_ptr& 9642: _M_rightmost() noexcept 9642: { return this->_M_impl._M_header._M_right; } 9642: 9642: _Const_Base_ptr 9642: _M_rightmost() const noexcept 9642: { return this->_M_impl._M_header._M_right; } 9642: 9642: _Link_type 9642: _M_mbegin() const noexcept 9642: { return static_cast<_Link_type>(this->_M_impl._M_header._M_parent); } 9642: 9642: _Link_type 9642: _M_begin() noexcept 9642: { return _M_mbegin(); } 9642: 9642: _Const_Link_type 9642: _M_begin() const noexcept 9642: { 9642: return static_cast<_Const_Link_type> 9642: (this->_M_impl._M_header._M_parent); 9642: } 9642: 9642: _Base_ptr 9642: _M_end() noexcept 9642: { return &this->_M_impl._M_header; } 9642: 9642: _Const_Base_ptr 9642: _M_end() const noexcept 9642: { return &this->_M_impl._M_header; } 9642: 9642: static const _Key& 9642: _S_key(_Const_Link_type __x) 9642: { 9642: 9642: 9642: 9642: static_assert(__is_invocable<_Compare&, const _Key&, const _Key&>{}, 9642: "comparison object must be invocable " 9642: "with two arguments of key type"); 9642: 9642: 9642: 9642: if constexpr (__is_invocable<_Compare&, const _Key&, const _Key&>{}) 9642: static_assert( 9642: is_invocable_v, 9642: "comparison object must be invocable as const"); 9642: 9642: 9642: 9642: return _KeyOfValue()(*__x->_M_valptr()); 9642: } 9642: 9642: static _Link_type 9642: _S_left(_Base_ptr __x) noexcept 9642: { return static_cast<_Link_type>(__x->_M_left); } 9642: 9642: static _Const_Link_type 9642: _S_left(_Const_Base_ptr __x) noexcept 9642: { return static_cast<_Const_Link_type>(__x->_M_left); } 9642: 9642: static _Link_type 9642: _S_right(_Base_ptr __x) noexcept 9642: { return static_cast<_Link_type>(__x->_M_right); } 9642: 9642: static _Const_Link_type 9642: _S_right(_Const_Base_ptr __x) noexcept 9642: { return static_cast<_Const_Link_type>(__x->_M_right); } 9642: 9642: static const _Key& 9642: _S_key(_Const_Base_ptr __x) 9642: { return _S_key(static_cast<_Const_Link_type>(__x)); } 9642: 9642: static _Base_ptr 9642: _S_minimum(_Base_ptr __x) noexcept 9642: { return _Rb_tree_node_base::_S_minimum(__x); } 9642: 9642: static _Const_Base_ptr 9642: _S_minimum(_Const_Base_ptr __x) noexcept 9642: { return _Rb_tree_node_base::_S_minimum(__x); } 9642: 9642: static _Base_ptr 9642: _S_maximum(_Base_ptr __x) noexcept 9642: { return _Rb_tree_node_base::_S_maximum(__x); } 9642: 9642: static _Const_Base_ptr 9642: _S_maximum(_Const_Base_ptr __x) noexcept 9642: { return _Rb_tree_node_base::_S_maximum(__x); } 9642: 9642: public: 9642: typedef _Rb_tree_iterator iterator; 9642: typedef _Rb_tree_const_iterator const_iterator; 9642: 9642: typedef std::reverse_iterator reverse_iterator; 9642: typedef std::reverse_iterator const_reverse_iterator; 9642: 9642: 9642: using node_type = _Node_handle<_Key, _Val, _Node_allocator>; 9642: using insert_return_type = _Node_insert_return< 9642: __conditional_t, const_iterator, iterator>, 9642: node_type>; 9642: 9642: 9642: pair<_Base_ptr, _Base_ptr> 9642: _M_get_insert_unique_pos(const key_type& __k); 9642: 9642: pair<_Base_ptr, _Base_ptr> 9642: _M_get_insert_equal_pos(const key_type& __k); 9642: 9642: pair<_Base_ptr, _Base_ptr> 9642: _M_get_insert_hint_unique_pos(const_iterator __pos, 9642: const key_type& __k); 9642: 9642: pair<_Base_ptr, _Base_ptr> 9642: _M_get_insert_hint_equal_pos(const_iterator __pos, 9642: const key_type& __k); 9642: 9642: private: 9642: 9642: template 9642: iterator 9642: _M_insert_(_Base_ptr __x, _Base_ptr __y, _Arg&& __v, _NodeGen&); 9642: 9642: iterator 9642: _M_insert_node(_Base_ptr __x, _Base_ptr __y, _Link_type __z); 9642: 9642: template 9642: iterator 9642: _M_insert_lower(_Base_ptr __y, _Arg&& __v); 9642: 9642: template 9642: iterator 9642: _M_insert_equal_lower(_Arg&& __x); 9642: 9642: iterator 9642: _M_insert_lower_node(_Base_ptr __p, _Link_type __z); 9642: 9642: iterator 9642: _M_insert_equal_lower_node(_Link_type __z); 9642: # 881 "/usr/include/c++/13/bits/stl_tree.h" 3 9642: enum { __as_lvalue, __as_rvalue }; 9642: 9642: template 9642: _Link_type 9642: _M_copy(_Link_type, _Base_ptr, _NodeGen&); 9642: 9642: template 9642: _Link_type 9642: _M_copy(const _Rb_tree& __x, _NodeGen& __gen) 9642: { 9642: _Link_type __root = 9642: _M_copy<_MoveValues>(__x._M_mbegin(), _M_end(), __gen); 9642: _M_leftmost() = _S_minimum(__root); 9642: _M_rightmost() = _S_maximum(__root); 9642: _M_impl._M_node_count = __x._M_impl._M_node_count; 9642: return __root; 9642: } 9642: 9642: _Link_type 9642: _M_copy(const _Rb_tree& __x) 9642: { 9642: _Alloc_node __an(*this); 9642: return _M_copy<__as_lvalue>(__x, __an); 9642: } 9642: 9642: void 9642: _M_erase(_Link_type __x); 9642: 9642: iterator 9642: _M_lower_bound(_Link_type __x, _Base_ptr __y, 9642: const _Key& __k); 9642: 9642: const_iterator 9642: _M_lower_bound(_Const_Link_type __x, _Const_Base_ptr __y, 9642: const _Key& __k) const; 9642: 9642: iterator 9642: _M_upper_bound(_Link_type __x, _Base_ptr __y, 9642: const _Key& __k); 9642: 9642: const_iterator 9642: _M_upper_bound(_Const_Link_type __x, _Const_Base_ptr __y, 9642: const _Key& __k) const; 9642: 9642: public: 9642: 9642: 9642: 9642: 9642: _Rb_tree() = default; 9642: 9642: 9642: _Rb_tree(const _Compare& __comp, 9642: const allocator_type& __a = allocator_type()) 9642: : _M_impl(__comp, _Node_allocator(__a)) { } 9642: 9642: _Rb_tree(const _Rb_tree& __x) 9642: : _M_impl(__x._M_impl) 9642: { 9642: if (__x._M_root() != 0) 9642: _M_root() = _M_copy(__x); 9642: } 9642: 9642: 9642: _Rb_tree(const allocator_type& __a) 9642: : _M_impl(_Node_allocator(__a)) 9642: { } 9642: 9642: _Rb_tree(const _Rb_tree& __x, const allocator_type& __a) 9642: : _M_impl(__x._M_impl._M_key_compare, _Node_allocator(__a)) 9642: { 9642: if (__x._M_root() != nullptr) 9642: _M_root() = _M_copy(__x); 9642: } 9642: 9642: _Rb_tree(_Rb_tree&&) = default; 9642: 9642: _Rb_tree(_Rb_tree&& __x, const allocator_type& __a) 9642: : _Rb_tree(std::move(__x), _Node_allocator(__a)) 9642: { } 9642: 9642: private: 9642: _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a, true_type) 9642: noexcept(is_nothrow_default_constructible<_Compare>::value) 9642: : _M_impl(std::move(__x._M_impl), std::move(__a)) 9642: { } 9642: 9642: _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a, false_type) 9642: : _M_impl(__x._M_impl._M_key_compare, std::move(__a)) 9642: { 9642: if (__x._M_root() != nullptr) 9642: _M_move_data(__x, false_type{}); 9642: } 9642: 9642: public: 9642: _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a) 9642: noexcept( noexcept( 9642: _Rb_tree(std::declval<_Rb_tree&&>(), std::declval<_Node_allocator&&>(), 9642: std::declval())) ) 9642: : _Rb_tree(std::move(__x), std::move(__a), 9642: typename _Alloc_traits::is_always_equal{}) 9642: { } 9642: 9642: 9642: ~_Rb_tree() noexcept 9642: { _M_erase(_M_begin()); } 9642: 9642: _Rb_tree& 9642: operator=(const _Rb_tree& __x); 9642: 9642: 9642: _Compare 9642: key_comp() const 9642: { return _M_impl._M_key_compare; } 9642: 9642: iterator 9642: begin() noexcept 9642: { return iterator(this->_M_impl._M_header._M_left); } 9642: 9642: const_iterator 9642: begin() const noexcept 9642: { return const_iterator(this->_M_impl._M_header._M_left); } 9642: 9642: iterator 9642: end() noexcept 9642: { return iterator(&this->_M_impl._M_header); } 9642: 9642: const_iterator 9642: end() const noexcept 9642: { return const_iterator(&this->_M_impl._M_header); } 9642: 9642: reverse_iterator 9642: rbegin() noexcept 9642: { return reverse_iterator(end()); } 9642: 9642: const_reverse_iterator 9642: rbegin() const noexcept 9642: { return const_reverse_iterator(end()); } 9642: 9642: reverse_iterator 9642: rend() noexcept 9642: { return reverse_iterator(begin()); } 9642: 9642: const_reverse_iterator 9642: rend() const noexcept 9642: { return const_reverse_iterator(begin()); } 9642: 9642: [[__nodiscard__]] bool 9642: empty() const noexcept 9642: { return _M_impl._M_node_count == 0; } 9642: 9642: size_type 9642: size() const noexcept 9642: { return _M_impl._M_node_count; } 9642: 9642: size_type 9642: max_size() const noexcept 9642: { return _Alloc_traits::max_size(_M_get_Node_allocator()); } 9642: 9642: void 9642: swap(_Rb_tree& __t) 9642: noexcept(__is_nothrow_swappable<_Compare>::value); 9642: 9642: 9642: 9642: template 9642: pair 9642: _M_insert_unique(_Arg&& __x); 9642: 9642: template 9642: iterator 9642: _M_insert_equal(_Arg&& __x); 9642: 9642: template 9642: iterator 9642: _M_insert_unique_(const_iterator __pos, _Arg&& __x, _NodeGen&); 9642: 9642: template 9642: iterator 9642: _M_insert_unique_(const_iterator __pos, _Arg&& __x) 9642: { 9642: _Alloc_node __an(*this); 9642: return _M_insert_unique_(__pos, std::forward<_Arg>(__x), __an); 9642: } 9642: 9642: template 9642: iterator 9642: _M_insert_equal_(const_iterator __pos, _Arg&& __x, _NodeGen&); 9642: 9642: template 9642: iterator 9642: _M_insert_equal_(const_iterator __pos, _Arg&& __x) 9642: { 9642: _Alloc_node __an(*this); 9642: return _M_insert_equal_(__pos, std::forward<_Arg>(__x), __an); 9642: } 9642: 9642: template 9642: pair 9642: _M_emplace_unique(_Args&&... __args); 9642: 9642: template 9642: iterator 9642: _M_emplace_equal(_Args&&... __args); 9642: 9642: template 9642: iterator 9642: _M_emplace_hint_unique(const_iterator __pos, _Args&&... __args); 9642: 9642: template 9642: iterator 9642: _M_emplace_hint_equal(const_iterator __pos, _Args&&... __args); 9642: 9642: template 9642: using __same_value_type 9642: = is_same::value_type>; 9642: 9642: template 9642: __enable_if_t<__same_value_type<_InputIterator>::value> 9642: _M_insert_range_unique(_InputIterator __first, _InputIterator __last) 9642: { 9642: _Alloc_node __an(*this); 9642: for (; __first != __last; ++__first) 9642: _M_insert_unique_(end(), *__first, __an); 9642: } 9642: 9642: template 9642: __enable_if_t::value> 9642: _M_insert_range_unique(_InputIterator __first, _InputIterator __last) 9642: { 9642: for (; __first != __last; ++__first) 9642: _M_emplace_unique(*__first); 9642: } 9642: 9642: template 9642: __enable_if_t<__same_value_type<_InputIterator>::value> 9642: _M_insert_range_equal(_InputIterator __first, _InputIterator __last) 9642: { 9642: _Alloc_node __an(*this); 9642: for (; __first != __last; ++__first) 9642: _M_insert_equal_(end(), *__first, __an); 9642: } 9642: 9642: template 9642: __enable_if_t::value> 9642: _M_insert_range_equal(_InputIterator __first, _InputIterator __last) 9642: { 9642: for (; __first != __last; ++__first) 9642: _M_emplace_equal(*__first); 9642: } 9642: # 1180 "/usr/include/c++/13/bits/stl_tree.h" 3 9642: private: 9642: void 9642: _M_erase_aux(const_iterator __position); 9642: 9642: void 9642: _M_erase_aux(const_iterator __first, const_iterator __last); 9642: 9642: public: 9642: 9642: 9642: 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: iterator 9642: erase(const_iterator __position) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__position != end())) __builtin_unreachable(); } while (false); 9642: const_iterator __result = __position; 9642: ++__result; 9642: _M_erase_aux(__position); 9642: return __result._M_const_cast(); 9642: } 9642: 9642: 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: iterator 9642: erase(iterator __position) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__position != end())) __builtin_unreachable(); } while (false); 9642: iterator __result = __position; 9642: ++__result; 9642: _M_erase_aux(__position); 9642: return __result; 9642: } 9642: # 1229 "/usr/include/c++/13/bits/stl_tree.h" 3 9642: size_type 9642: erase(const key_type& __x); 9642: 9642: 9642: 9642: 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: iterator 9642: erase(const_iterator __first, const_iterator __last) 9642: { 9642: _M_erase_aux(__first, __last); 9642: return __last._M_const_cast(); 9642: } 9642: # 1252 "/usr/include/c++/13/bits/stl_tree.h" 3 9642: void 9642: clear() noexcept 9642: { 9642: _M_erase(_M_begin()); 9642: _M_impl._M_reset(); 9642: } 9642: 9642: 9642: iterator 9642: find(const key_type& __k); 9642: 9642: const_iterator 9642: find(const key_type& __k) const; 9642: 9642: size_type 9642: count(const key_type& __k) const; 9642: 9642: iterator 9642: lower_bound(const key_type& __k) 9642: { return _M_lower_bound(_M_begin(), _M_end(), __k); } 9642: 9642: const_iterator 9642: lower_bound(const key_type& __k) const 9642: { return _M_lower_bound(_M_begin(), _M_end(), __k); } 9642: 9642: iterator 9642: upper_bound(const key_type& __k) 9642: { return _M_upper_bound(_M_begin(), _M_end(), __k); } 9642: 9642: const_iterator 9642: upper_bound(const key_type& __k) const 9642: { return _M_upper_bound(_M_begin(), _M_end(), __k); } 9642: 9642: pair 9642: equal_range(const key_type& __k); 9642: 9642: pair 9642: equal_range(const key_type& __k) const; 9642: 9642: 9642: template> 9642: iterator 9642: _M_find_tr(const _Kt& __k) 9642: { 9642: const _Rb_tree* __const_this = this; 9642: return __const_this->_M_find_tr(__k)._M_const_cast(); 9642: } 9642: 9642: template> 9642: const_iterator 9642: _M_find_tr(const _Kt& __k) const 9642: { 9642: auto __j = _M_lower_bound_tr(__k); 9642: if (__j != end() && _M_impl._M_key_compare(__k, _S_key(__j._M_node))) 9642: __j = end(); 9642: return __j; 9642: } 9642: 9642: template> 9642: size_type 9642: _M_count_tr(const _Kt& __k) const 9642: { 9642: auto __p = _M_equal_range_tr(__k); 9642: return std::distance(__p.first, __p.second); 9642: } 9642: 9642: template> 9642: iterator 9642: _M_lower_bound_tr(const _Kt& __k) 9642: { 9642: const _Rb_tree* __const_this = this; 9642: return __const_this->_M_lower_bound_tr(__k)._M_const_cast(); 9642: } 9642: 9642: template> 9642: const_iterator 9642: _M_lower_bound_tr(const _Kt& __k) const 9642: { 9642: auto __x = _M_begin(); 9642: auto __y = _M_end(); 9642: while (__x != 0) 9642: if (!_M_impl._M_key_compare(_S_key(__x), __k)) 9642: { 9642: __y = __x; 9642: __x = _S_left(__x); 9642: } 9642: else 9642: __x = _S_right(__x); 9642: return const_iterator(__y); 9642: } 9642: 9642: template> 9642: iterator 9642: _M_upper_bound_tr(const _Kt& __k) 9642: { 9642: const _Rb_tree* __const_this = this; 9642: return __const_this->_M_upper_bound_tr(__k)._M_const_cast(); 9642: } 9642: 9642: template> 9642: const_iterator 9642: _M_upper_bound_tr(const _Kt& __k) const 9642: { 9642: auto __x = _M_begin(); 9642: auto __y = _M_end(); 9642: while (__x != 0) 9642: if (_M_impl._M_key_compare(__k, _S_key(__x))) 9642: { 9642: __y = __x; 9642: __x = _S_left(__x); 9642: } 9642: else 9642: __x = _S_right(__x); 9642: return const_iterator(__y); 9642: } 9642: 9642: template> 9642: pair 9642: _M_equal_range_tr(const _Kt& __k) 9642: { 9642: const _Rb_tree* __const_this = this; 9642: auto __ret = __const_this->_M_equal_range_tr(__k); 9642: return { __ret.first._M_const_cast(), __ret.second._M_const_cast() }; 9642: } 9642: 9642: template> 9642: pair 9642: _M_equal_range_tr(const _Kt& __k) const 9642: { 9642: auto __low = _M_lower_bound_tr(__k); 9642: auto __high = __low; 9642: auto& __cmp = _M_impl._M_key_compare; 9642: while (__high != end() && !__cmp(__k, _S_key(__high._M_node))) 9642: ++__high; 9642: return { __low, __high }; 9642: } 9642: 9642: 9642: 9642: bool 9642: __rb_verify() const; 9642: 9642: 9642: _Rb_tree& 9642: operator=(_Rb_tree&&) 9642: noexcept(_Alloc_traits::_S_nothrow_move() 9642: && is_nothrow_move_assignable<_Compare>::value); 9642: 9642: template 9642: void 9642: _M_assign_unique(_Iterator, _Iterator); 9642: 9642: template 9642: void 9642: _M_assign_equal(_Iterator, _Iterator); 9642: 9642: private: 9642: 9642: void 9642: _M_move_data(_Rb_tree& __x, true_type) 9642: { _M_impl._M_move_data(__x._M_impl); } 9642: 9642: 9642: 9642: void 9642: _M_move_data(_Rb_tree&, false_type); 9642: 9642: 9642: void 9642: _M_move_assign(_Rb_tree&, true_type); 9642: 9642: 9642: 9642: void 9642: _M_move_assign(_Rb_tree&, false_type); 9642: 9642: 9642: 9642: public: 9642: 9642: insert_return_type 9642: _M_reinsert_node_unique(node_type&& __nh) 9642: { 9642: insert_return_type __ret; 9642: if (__nh.empty()) 9642: __ret.position = end(); 9642: else 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(_M_get_Node_allocator() == *__nh._M_alloc)) __builtin_unreachable(); } while (false); 9642: 9642: auto __res = _M_get_insert_unique_pos(__nh._M_key()); 9642: if (__res.second) 9642: { 9642: __ret.position 9642: = _M_insert_node(__res.first, __res.second, __nh._M_ptr); 9642: __nh.release(); 9642: __ret.inserted = true; 9642: } 9642: else 9642: { 9642: __ret.node = std::move(__nh); 9642: __ret.position = iterator(__res.first); 9642: __ret.inserted = false; 9642: } 9642: } 9642: return __ret; 9642: } 9642: 9642: 9642: iterator 9642: _M_reinsert_node_equal(node_type&& __nh) 9642: { 9642: iterator __ret; 9642: if (__nh.empty()) 9642: __ret = end(); 9642: else 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(_M_get_Node_allocator() == *__nh._M_alloc)) __builtin_unreachable(); } while (false); 9642: auto __res = _M_get_insert_equal_pos(__nh._M_key()); 9642: if (__res.second) 9642: __ret = _M_insert_node(__res.first, __res.second, __nh._M_ptr); 9642: else 9642: __ret = _M_insert_equal_lower_node(__nh._M_ptr); 9642: __nh.release(); 9642: } 9642: return __ret; 9642: } 9642: 9642: 9642: iterator 9642: _M_reinsert_node_hint_unique(const_iterator __hint, node_type&& __nh) 9642: { 9642: iterator __ret; 9642: if (__nh.empty()) 9642: __ret = end(); 9642: else 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(_M_get_Node_allocator() == *__nh._M_alloc)) __builtin_unreachable(); } while (false); 9642: auto __res = _M_get_insert_hint_unique_pos(__hint, __nh._M_key()); 9642: if (__res.second) 9642: { 9642: __ret = _M_insert_node(__res.first, __res.second, __nh._M_ptr); 9642: __nh.release(); 9642: } 9642: else 9642: __ret = iterator(__res.first); 9642: } 9642: return __ret; 9642: } 9642: 9642: 9642: iterator 9642: _M_reinsert_node_hint_equal(const_iterator __hint, node_type&& __nh) 9642: { 9642: iterator __ret; 9642: if (__nh.empty()) 9642: __ret = end(); 9642: else 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(_M_get_Node_allocator() == *__nh._M_alloc)) __builtin_unreachable(); } while (false); 9642: auto __res = _M_get_insert_hint_equal_pos(__hint, __nh._M_key()); 9642: if (__res.second) 9642: __ret = _M_insert_node(__res.first, __res.second, __nh._M_ptr); 9642: else 9642: __ret = _M_insert_equal_lower_node(__nh._M_ptr); 9642: __nh.release(); 9642: } 9642: return __ret; 9642: } 9642: 9642: 9642: node_type 9642: extract(const_iterator __pos) 9642: { 9642: auto __ptr = _Rb_tree_rebalance_for_erase( 9642: __pos._M_const_cast()._M_node, _M_impl._M_header); 9642: --_M_impl._M_node_count; 9642: return { static_cast<_Link_type>(__ptr), _M_get_Node_allocator() }; 9642: } 9642: 9642: 9642: node_type 9642: extract(const key_type& __k) 9642: { 9642: node_type __nh; 9642: auto __pos = find(__k); 9642: if (__pos != end()) 9642: __nh = extract(const_iterator(__pos)); 9642: return __nh; 9642: } 9642: 9642: template 9642: using _Compatible_tree 9642: = _Rb_tree<_Key, _Val, _KeyOfValue, _Compare2, _Alloc>; 9642: 9642: template 9642: friend struct _Rb_tree_merge_helper; 9642: 9642: 9642: template 9642: void 9642: _M_merge_unique(_Compatible_tree<_Compare2>& __src) noexcept 9642: { 9642: using _Merge_helper = _Rb_tree_merge_helper<_Rb_tree, _Compare2>; 9642: for (auto __i = __src.begin(), __end = __src.end(); __i != __end;) 9642: { 9642: auto __pos = __i++; 9642: auto __res = _M_get_insert_unique_pos(_KeyOfValue()(*__pos)); 9642: if (__res.second) 9642: { 9642: auto& __src_impl = _Merge_helper::_S_get_impl(__src); 9642: auto __ptr = _Rb_tree_rebalance_for_erase( 9642: __pos._M_node, __src_impl._M_header); 9642: --__src_impl._M_node_count; 9642: _M_insert_node(__res.first, __res.second, 9642: static_cast<_Link_type>(__ptr)); 9642: } 9642: } 9642: } 9642: 9642: 9642: template 9642: void 9642: _M_merge_equal(_Compatible_tree<_Compare2>& __src) noexcept 9642: { 9642: using _Merge_helper = _Rb_tree_merge_helper<_Rb_tree, _Compare2>; 9642: for (auto __i = __src.begin(), __end = __src.end(); __i != __end;) 9642: { 9642: auto __pos = __i++; 9642: auto __res = _M_get_insert_equal_pos(_KeyOfValue()(*__pos)); 9642: if (__res.second) 9642: { 9642: auto& __src_impl = _Merge_helper::_S_get_impl(__src); 9642: auto __ptr = _Rb_tree_rebalance_for_erase( 9642: __pos._M_node, __src_impl._M_header); 9642: --__src_impl._M_node_count; 9642: _M_insert_node(__res.first, __res.second, 9642: static_cast<_Link_type>(__ptr)); 9642: } 9642: } 9642: } 9642: 9642: 9642: friend bool 9642: operator==(const _Rb_tree& __x, const _Rb_tree& __y) 9642: { 9642: return __x.size() == __y.size() 9642: && std::equal(__x.begin(), __x.end(), __y.begin()); 9642: } 9642: # 1621 "/usr/include/c++/13/bits/stl_tree.h" 3 9642: friend bool 9642: operator<(const _Rb_tree& __x, const _Rb_tree& __y) 9642: { 9642: return std::lexicographical_compare(__x.begin(), __x.end(), 9642: __y.begin(), __y.end()); 9642: } 9642: 9642: 9642: private: 9642: 9642: 9642: struct _Auto_node 9642: { 9642: template 9642: _Auto_node(_Rb_tree& __t, _Args&&... __args) 9642: : _M_t(__t), 9642: _M_node(__t._M_create_node(std::forward<_Args>(__args)...)) 9642: { } 9642: 9642: ~_Auto_node() 9642: { 9642: if (_M_node) 9642: _M_t._M_drop_node(_M_node); 9642: } 9642: 9642: _Auto_node(_Auto_node&& __n) 9642: : _M_t(__n._M_t), _M_node(__n._M_node) 9642: { __n._M_node = nullptr; } 9642: 9642: const _Key& 9642: _M_key() const 9642: { return _S_key(_M_node); } 9642: 9642: iterator 9642: _M_insert(pair<_Base_ptr, _Base_ptr> __p) 9642: { 9642: auto __it = _M_t._M_insert_node(__p.first, __p.second, _M_node); 9642: _M_node = nullptr; 9642: return __it; 9642: } 9642: 9642: iterator 9642: _M_insert_equal_lower() 9642: { 9642: auto __it = _M_t._M_insert_equal_lower_node(_M_node); 9642: _M_node = nullptr; 9642: return __it; 9642: } 9642: 9642: _Rb_tree& _M_t; 9642: _Link_type _M_node; 9642: }; 9642: 9642: }; 9642: 9642: template 9642: inline void 9642: swap(_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x, 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y) 9642: { __x.swap(__y); } 9642: 9642: 9642: template 9642: void 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_move_data(_Rb_tree& __x, false_type) 9642: { 9642: if (_M_get_Node_allocator() == __x._M_get_Node_allocator()) 9642: _M_move_data(__x, true_type()); 9642: else 9642: { 9642: constexpr bool __move = !__move_if_noexcept_cond::value; 9642: _Alloc_node __an(*this); 9642: _M_root() = _M_copy<__move>(__x, __an); 9642: if constexpr (__move) 9642: __x.clear(); 9642: } 9642: } 9642: 9642: template 9642: inline void 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_move_assign(_Rb_tree& __x, true_type) 9642: { 9642: clear(); 9642: if (__x._M_root() != nullptr) 9642: _M_move_data(__x, true_type()); 9642: std::__alloc_on_move(_M_get_Node_allocator(), 9642: __x._M_get_Node_allocator()); 9642: } 9642: 9642: template 9642: void 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_move_assign(_Rb_tree& __x, false_type) 9642: { 9642: if (_M_get_Node_allocator() == __x._M_get_Node_allocator()) 9642: return _M_move_assign(__x, true_type{}); 9642: 9642: 9642: 9642: _Reuse_or_alloc_node __roan(*this); 9642: _M_impl._M_reset(); 9642: if (__x._M_root() != nullptr) 9642: { 9642: _M_root() = _M_copy<__as_rvalue>(__x, __roan); 9642: __x.clear(); 9642: } 9642: } 9642: 9642: template 9642: inline _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: operator=(_Rb_tree&& __x) 9642: noexcept(_Alloc_traits::_S_nothrow_move() 9642: && is_nothrow_move_assignable<_Compare>::value) 9642: { 9642: _M_impl._M_key_compare = std::move(__x._M_impl._M_key_compare); 9642: _M_move_assign(__x, __bool_constant<_Alloc_traits::_S_nothrow_move()>()); 9642: return *this; 9642: } 9642: 9642: template 9642: template 9642: void 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_assign_unique(_Iterator __first, _Iterator __last) 9642: { 9642: _Reuse_or_alloc_node __roan(*this); 9642: _M_impl._M_reset(); 9642: for (; __first != __last; ++__first) 9642: _M_insert_unique_(end(), *__first, __roan); 9642: } 9642: 9642: template 9642: template 9642: void 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_assign_equal(_Iterator __first, _Iterator __last) 9642: { 9642: _Reuse_or_alloc_node __roan(*this); 9642: _M_impl._M_reset(); 9642: for (; __first != __last; ++__first) 9642: _M_insert_equal_(end(), *__first, __roan); 9642: } 9642: 9642: 9642: template 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: operator=(const _Rb_tree& __x) 9642: { 9642: if (this != std::__addressof(__x)) 9642: { 9642: 9642: 9642: if (_Alloc_traits::_S_propagate_on_copy_assign()) 9642: { 9642: auto& __this_alloc = this->_M_get_Node_allocator(); 9642: auto& __that_alloc = __x._M_get_Node_allocator(); 9642: if (!_Alloc_traits::_S_always_equal() 9642: && __this_alloc != __that_alloc) 9642: { 9642: 9642: 9642: clear(); 9642: std::__alloc_on_copy(__this_alloc, __that_alloc); 9642: } 9642: } 9642: 9642: 9642: _Reuse_or_alloc_node __roan(*this); 9642: _M_impl._M_reset(); 9642: _M_impl._M_key_compare = __x._M_impl._M_key_compare; 9642: if (__x._M_root() != 0) 9642: _M_root() = _M_copy<__as_lvalue>(__x, __roan); 9642: } 9642: 9642: return *this; 9642: } 9642: 9642: template 9642: 9642: template 9642: 9642: 9642: 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_insert_(_Base_ptr __x, _Base_ptr __p, 9642: 9642: _Arg&& __v, 9642: 9642: 9642: 9642: _NodeGen& __node_gen) 9642: { 9642: bool __insert_left = (__x != 0 || __p == _M_end() 9642: || _M_impl._M_key_compare(_KeyOfValue()(__v), 9642: _S_key(__p))); 9642: 9642: _Link_type __z = __node_gen(std::forward<_Arg>(__v)); 9642: 9642: _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, 9642: this->_M_impl._M_header); 9642: ++_M_impl._M_node_count; 9642: return iterator(__z); 9642: } 9642: 9642: template 9642: 9642: template 9642: 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: 9642: _M_insert_lower(_Base_ptr __p, _Arg&& __v) 9642: 9642: 9642: 9642: { 9642: bool __insert_left = (__p == _M_end() 9642: || !_M_impl._M_key_compare(_S_key(__p), 9642: _KeyOfValue()(__v))); 9642: 9642: _Link_type __z = _M_create_node(std::forward<_Arg>(__v)); 9642: 9642: _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, 9642: this->_M_impl._M_header); 9642: ++_M_impl._M_node_count; 9642: return iterator(__z); 9642: } 9642: 9642: template 9642: 9642: template 9642: 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: 9642: _M_insert_equal_lower(_Arg&& __v) 9642: 9642: 9642: 9642: { 9642: _Link_type __x = _M_begin(); 9642: _Base_ptr __y = _M_end(); 9642: while (__x != 0) 9642: { 9642: __y = __x; 9642: __x = !_M_impl._M_key_compare(_S_key(__x), _KeyOfValue()(__v)) ? 9642: _S_left(__x) : _S_right(__x); 9642: } 9642: return _M_insert_lower(__y, std::forward<_Arg>(__v)); 9642: } 9642: 9642: template 9642: template 9642: typename _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>::_Link_type 9642: _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>:: 9642: _M_copy(_Link_type __x, _Base_ptr __p, _NodeGen& __node_gen) 9642: { 9642: 9642: _Link_type __top = _M_clone_node<_MoveValues>(__x, __node_gen); 9642: __top->_M_parent = __p; 9642: 9642: try 9642: { 9642: if (__x->_M_right) 9642: __top->_M_right = 9642: _M_copy<_MoveValues>(_S_right(__x), __top, __node_gen); 9642: __p = __top; 9642: __x = _S_left(__x); 9642: 9642: while (__x != 0) 9642: { 9642: _Link_type __y = _M_clone_node<_MoveValues>(__x, __node_gen); 9642: __p->_M_left = __y; 9642: __y->_M_parent = __p; 9642: if (__x->_M_right) 9642: __y->_M_right = _M_copy<_MoveValues>(_S_right(__x), 9642: __y, __node_gen); 9642: __p = __y; 9642: __x = _S_left(__x); 9642: } 9642: } 9642: catch(...) 9642: { 9642: _M_erase(__top); 9642: throw; 9642: } 9642: return __top; 9642: } 9642: 9642: template 9642: void 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_erase(_Link_type __x) 9642: { 9642: 9642: while (__x != 0) 9642: { 9642: _M_erase(_S_right(__x)); 9642: _Link_type __y = _S_left(__x); 9642: _M_drop_node(__x); 9642: __x = __y; 9642: } 9642: } 9642: 9642: template 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, 9642: _Compare, _Alloc>::iterator 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_lower_bound(_Link_type __x, _Base_ptr __y, 9642: const _Key& __k) 9642: { 9642: while (__x != 0) 9642: if (!_M_impl._M_key_compare(_S_key(__x), __k)) 9642: __y = __x, __x = _S_left(__x); 9642: else 9642: __x = _S_right(__x); 9642: return iterator(__y); 9642: } 9642: 9642: template 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, 9642: _Compare, _Alloc>::const_iterator 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_lower_bound(_Const_Link_type __x, _Const_Base_ptr __y, 9642: const _Key& __k) const 9642: { 9642: while (__x != 0) 9642: if (!_M_impl._M_key_compare(_S_key(__x), __k)) 9642: __y = __x, __x = _S_left(__x); 9642: else 9642: __x = _S_right(__x); 9642: return const_iterator(__y); 9642: } 9642: 9642: template 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, 9642: _Compare, _Alloc>::iterator 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_upper_bound(_Link_type __x, _Base_ptr __y, 9642: const _Key& __k) 9642: { 9642: while (__x != 0) 9642: if (_M_impl._M_key_compare(__k, _S_key(__x))) 9642: __y = __x, __x = _S_left(__x); 9642: else 9642: __x = _S_right(__x); 9642: return iterator(__y); 9642: } 9642: 9642: template 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, 9642: _Compare, _Alloc>::const_iterator 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_upper_bound(_Const_Link_type __x, _Const_Base_ptr __y, 9642: const _Key& __k) const 9642: { 9642: while (__x != 0) 9642: if (_M_impl._M_key_compare(__k, _S_key(__x))) 9642: __y = __x, __x = _S_left(__x); 9642: else 9642: __x = _S_right(__x); 9642: return const_iterator(__y); 9642: } 9642: 9642: template 9642: pair::iterator, 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, 9642: _Compare, _Alloc>::iterator> 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: equal_range(const _Key& __k) 9642: { 9642: _Link_type __x = _M_begin(); 9642: _Base_ptr __y = _M_end(); 9642: while (__x != 0) 9642: { 9642: if (_M_impl._M_key_compare(_S_key(__x), __k)) 9642: __x = _S_right(__x); 9642: else if (_M_impl._M_key_compare(__k, _S_key(__x))) 9642: __y = __x, __x = _S_left(__x); 9642: else 9642: { 9642: _Link_type __xu(__x); 9642: _Base_ptr __yu(__y); 9642: __y = __x, __x = _S_left(__x); 9642: __xu = _S_right(__xu); 9642: return pair(_M_lower_bound(__x, __y, __k), 9642: _M_upper_bound(__xu, __yu, __k)); 9642: } 9642: } 9642: return pair(iterator(__y), 9642: iterator(__y)); 9642: } 9642: 9642: template 9642: pair::const_iterator, 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, 9642: _Compare, _Alloc>::const_iterator> 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: equal_range(const _Key& __k) const 9642: { 9642: _Const_Link_type __x = _M_begin(); 9642: _Const_Base_ptr __y = _M_end(); 9642: while (__x != 0) 9642: { 9642: if (_M_impl._M_key_compare(_S_key(__x), __k)) 9642: __x = _S_right(__x); 9642: else if (_M_impl._M_key_compare(__k, _S_key(__x))) 9642: __y = __x, __x = _S_left(__x); 9642: else 9642: { 9642: _Const_Link_type __xu(__x); 9642: _Const_Base_ptr __yu(__y); 9642: __y = __x, __x = _S_left(__x); 9642: __xu = _S_right(__xu); 9642: return pair(_M_lower_bound(__x, __y, __k), 9642: _M_upper_bound(__xu, __yu, __k)); 9642: } 9642: } 9642: return pair(const_iterator(__y), 9642: const_iterator(__y)); 9642: } 9642: 9642: template 9642: void 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: swap(_Rb_tree& __t) 9642: noexcept(__is_nothrow_swappable<_Compare>::value) 9642: { 9642: if (_M_root() == 0) 9642: { 9642: if (__t._M_root() != 0) 9642: _M_impl._M_move_data(__t._M_impl); 9642: } 9642: else if (__t._M_root() == 0) 9642: __t._M_impl._M_move_data(_M_impl); 9642: else 9642: { 9642: std::swap(_M_root(),__t._M_root()); 9642: std::swap(_M_leftmost(),__t._M_leftmost()); 9642: std::swap(_M_rightmost(),__t._M_rightmost()); 9642: 9642: _M_root()->_M_parent = _M_end(); 9642: __t._M_root()->_M_parent = __t._M_end(); 9642: std::swap(this->_M_impl._M_node_count, __t._M_impl._M_node_count); 9642: } 9642: 9642: std::swap(this->_M_impl._M_key_compare, __t._M_impl._M_key_compare); 9642: 9642: _Alloc_traits::_S_on_swap(_M_get_Node_allocator(), 9642: __t._M_get_Node_allocator()); 9642: } 9642: 9642: template 9642: pair::_Base_ptr, 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, 9642: _Compare, _Alloc>::_Base_ptr> 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_get_insert_unique_pos(const key_type& __k) 9642: { 9642: typedef pair<_Base_ptr, _Base_ptr> _Res; 9642: _Link_type __x = _M_begin(); 9642: _Base_ptr __y = _M_end(); 9642: bool __comp = true; 9642: while (__x != 0) 9642: { 9642: __y = __x; 9642: __comp = _M_impl._M_key_compare(__k, _S_key(__x)); 9642: __x = __comp ? _S_left(__x) : _S_right(__x); 9642: } 9642: iterator __j = iterator(__y); 9642: if (__comp) 9642: { 9642: if (__j == begin()) 9642: return _Res(__x, __y); 9642: else 9642: --__j; 9642: } 9642: if (_M_impl._M_key_compare(_S_key(__j._M_node), __k)) 9642: return _Res(__x, __y); 9642: return _Res(__j._M_node, 0); 9642: } 9642: 9642: template 9642: pair::_Base_ptr, 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, 9642: _Compare, _Alloc>::_Base_ptr> 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_get_insert_equal_pos(const key_type& __k) 9642: { 9642: typedef pair<_Base_ptr, _Base_ptr> _Res; 9642: _Link_type __x = _M_begin(); 9642: _Base_ptr __y = _M_end(); 9642: while (__x != 0) 9642: { 9642: __y = __x; 9642: __x = _M_impl._M_key_compare(__k, _S_key(__x)) ? 9642: _S_left(__x) : _S_right(__x); 9642: } 9642: return _Res(__x, __y); 9642: } 9642: 9642: template 9642: 9642: template 9642: 9642: pair::iterator, bool> 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: 9642: _M_insert_unique(_Arg&& __v) 9642: 9642: 9642: 9642: { 9642: typedef pair _Res; 9642: pair<_Base_ptr, _Base_ptr> __res 9642: = _M_get_insert_unique_pos(_KeyOfValue()(__v)); 9642: 9642: if (__res.second) 9642: { 9642: _Alloc_node __an(*this); 9642: return _Res(_M_insert_(__res.first, __res.second, 9642: std::forward<_Arg>(__v), __an), 9642: true); 9642: } 9642: 9642: return _Res(iterator(__res.first), false); 9642: } 9642: 9642: template 9642: 9642: template 9642: 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: 9642: _M_insert_equal(_Arg&& __v) 9642: 9642: 9642: 9642: { 9642: pair<_Base_ptr, _Base_ptr> __res 9642: = _M_get_insert_equal_pos(_KeyOfValue()(__v)); 9642: _Alloc_node __an(*this); 9642: return _M_insert_(__res.first, __res.second, 9642: std::forward<_Arg>(__v), __an); 9642: } 9642: 9642: template 9642: pair::_Base_ptr, 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, 9642: _Compare, _Alloc>::_Base_ptr> 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_get_insert_hint_unique_pos(const_iterator __position, 9642: const key_type& __k) 9642: { 9642: iterator __pos = __position._M_const_cast(); 9642: typedef pair<_Base_ptr, _Base_ptr> _Res; 9642: 9642: 9642: if (__pos._M_node == _M_end()) 9642: { 9642: if (size() > 0 9642: && _M_impl._M_key_compare(_S_key(_M_rightmost()), __k)) 9642: return _Res(0, _M_rightmost()); 9642: else 9642: return _M_get_insert_unique_pos(__k); 9642: } 9642: else if (_M_impl._M_key_compare(__k, _S_key(__pos._M_node))) 9642: { 9642: 9642: iterator __before = __pos; 9642: if (__pos._M_node == _M_leftmost()) 9642: return _Res(_M_leftmost(), _M_leftmost()); 9642: else if (_M_impl._M_key_compare(_S_key((--__before)._M_node), __k)) 9642: { 9642: if (_S_right(__before._M_node) == 0) 9642: return _Res(0, __before._M_node); 9642: else 9642: return _Res(__pos._M_node, __pos._M_node); 9642: } 9642: else 9642: return _M_get_insert_unique_pos(__k); 9642: } 9642: else if (_M_impl._M_key_compare(_S_key(__pos._M_node), __k)) 9642: { 9642: 9642: iterator __after = __pos; 9642: if (__pos._M_node == _M_rightmost()) 9642: return _Res(0, _M_rightmost()); 9642: else if (_M_impl._M_key_compare(__k, _S_key((++__after)._M_node))) 9642: { 9642: if (_S_right(__pos._M_node) == 0) 9642: return _Res(0, __pos._M_node); 9642: else 9642: return _Res(__after._M_node, __after._M_node); 9642: } 9642: else 9642: return _M_get_insert_unique_pos(__k); 9642: } 9642: else 9642: 9642: return _Res(__pos._M_node, 0); 9642: } 9642: 9642: template 9642: 9642: template 9642: 9642: 9642: 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_insert_unique_(const_iterator __position, 9642: 9642: _Arg&& __v, 9642: 9642: 9642: 9642: _NodeGen& __node_gen) 9642: { 9642: pair<_Base_ptr, _Base_ptr> __res 9642: = _M_get_insert_hint_unique_pos(__position, _KeyOfValue()(__v)); 9642: 9642: if (__res.second) 9642: return _M_insert_(__res.first, __res.second, 9642: std::forward<_Arg>(__v), 9642: __node_gen); 9642: return iterator(__res.first); 9642: } 9642: 9642: template 9642: pair::_Base_ptr, 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, 9642: _Compare, _Alloc>::_Base_ptr> 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_get_insert_hint_equal_pos(const_iterator __position, const key_type& __k) 9642: { 9642: iterator __pos = __position._M_const_cast(); 9642: typedef pair<_Base_ptr, _Base_ptr> _Res; 9642: 9642: 9642: if (__pos._M_node == _M_end()) 9642: { 9642: if (size() > 0 9642: && !_M_impl._M_key_compare(__k, _S_key(_M_rightmost()))) 9642: return _Res(0, _M_rightmost()); 9642: else 9642: return _M_get_insert_equal_pos(__k); 9642: } 9642: else if (!_M_impl._M_key_compare(_S_key(__pos._M_node), __k)) 9642: { 9642: 9642: iterator __before = __pos; 9642: if (__pos._M_node == _M_leftmost()) 9642: return _Res(_M_leftmost(), _M_leftmost()); 9642: else if (!_M_impl._M_key_compare(__k, _S_key((--__before)._M_node))) 9642: { 9642: if (_S_right(__before._M_node) == 0) 9642: return _Res(0, __before._M_node); 9642: else 9642: return _Res(__pos._M_node, __pos._M_node); 9642: } 9642: else 9642: return _M_get_insert_equal_pos(__k); 9642: } 9642: else 9642: { 9642: 9642: iterator __after = __pos; 9642: if (__pos._M_node == _M_rightmost()) 9642: return _Res(0, _M_rightmost()); 9642: else if (!_M_impl._M_key_compare(_S_key((++__after)._M_node), __k)) 9642: { 9642: if (_S_right(__pos._M_node) == 0) 9642: return _Res(0, __pos._M_node); 9642: else 9642: return _Res(__after._M_node, __after._M_node); 9642: } 9642: else 9642: return _Res(0, 0); 9642: } 9642: } 9642: 9642: template 9642: 9642: template 9642: 9642: 9642: 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_insert_equal_(const_iterator __position, 9642: 9642: _Arg&& __v, 9642: 9642: 9642: 9642: _NodeGen& __node_gen) 9642: { 9642: pair<_Base_ptr, _Base_ptr> __res 9642: = _M_get_insert_hint_equal_pos(__position, _KeyOfValue()(__v)); 9642: 9642: if (__res.second) 9642: return _M_insert_(__res.first, __res.second, 9642: std::forward<_Arg>(__v), 9642: __node_gen); 9642: 9642: return _M_insert_equal_lower(std::forward<_Arg>(__v)); 9642: } 9642: 9642: 9642: template 9642: auto 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_insert_node(_Base_ptr __x, _Base_ptr __p, _Link_type __z) 9642: -> iterator 9642: { 9642: bool __insert_left = (__x != 0 || __p == _M_end() 9642: || _M_impl._M_key_compare(_S_key(__z), 9642: _S_key(__p))); 9642: 9642: _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, 9642: this->_M_impl._M_header); 9642: ++_M_impl._M_node_count; 9642: return iterator(__z); 9642: } 9642: 9642: template 9642: auto 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_insert_lower_node(_Base_ptr __p, _Link_type __z) 9642: -> iterator 9642: { 9642: bool __insert_left = (__p == _M_end() 9642: || !_M_impl._M_key_compare(_S_key(__p), 9642: _S_key(__z))); 9642: 9642: _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, 9642: this->_M_impl._M_header); 9642: ++_M_impl._M_node_count; 9642: return iterator(__z); 9642: } 9642: 9642: template 9642: auto 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_insert_equal_lower_node(_Link_type __z) 9642: -> iterator 9642: { 9642: _Link_type __x = _M_begin(); 9642: _Base_ptr __y = _M_end(); 9642: while (__x != 0) 9642: { 9642: __y = __x; 9642: __x = !_M_impl._M_key_compare(_S_key(__x), _S_key(__z)) ? 9642: _S_left(__x) : _S_right(__x); 9642: } 9642: return _M_insert_lower_node(__y, __z); 9642: } 9642: 9642: template 9642: template 9642: auto 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_emplace_unique(_Args&&... __args) 9642: -> pair 9642: { 9642: _Auto_node __z(*this, std::forward<_Args>(__args)...); 9642: auto __res = _M_get_insert_unique_pos(__z._M_key()); 9642: if (__res.second) 9642: return {__z._M_insert(__res), true}; 9642: return {iterator(__res.first), false}; 9642: } 9642: 9642: template 9642: template 9642: auto 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_emplace_equal(_Args&&... __args) 9642: -> iterator 9642: { 9642: _Auto_node __z(*this, std::forward<_Args>(__args)...); 9642: auto __res = _M_get_insert_equal_pos(__z._M_key()); 9642: return __z._M_insert(__res); 9642: } 9642: 9642: template 9642: template 9642: auto 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_emplace_hint_unique(const_iterator __pos, _Args&&... __args) 9642: -> iterator 9642: { 9642: _Auto_node __z(*this, std::forward<_Args>(__args)...); 9642: auto __res = _M_get_insert_hint_unique_pos(__pos, __z._M_key()); 9642: if (__res.second) 9642: return __z._M_insert(__res); 9642: return iterator(__res.first); 9642: } 9642: 9642: template 9642: template 9642: auto 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_emplace_hint_equal(const_iterator __pos, _Args&&... __args) 9642: -> iterator 9642: { 9642: _Auto_node __z(*this, std::forward<_Args>(__args)...); 9642: auto __res = _M_get_insert_hint_equal_pos(__pos, __z._M_key()); 9642: if (__res.second) 9642: return __z._M_insert(__res); 9642: return __z._M_insert_equal_lower(); 9642: } 9642: 9642: 9642: 9642: template 9642: void 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_erase_aux(const_iterator __position) 9642: { 9642: _Link_type __y = 9642: static_cast<_Link_type>(_Rb_tree_rebalance_for_erase 9642: (const_cast<_Base_ptr>(__position._M_node), 9642: this->_M_impl._M_header)); 9642: _M_drop_node(__y); 9642: --_M_impl._M_node_count; 9642: } 9642: 9642: template 9642: void 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: _M_erase_aux(const_iterator __first, const_iterator __last) 9642: { 9642: if (__first == begin() && __last == end()) 9642: clear(); 9642: else 9642: while (__first != __last) 9642: _M_erase_aux(__first++); 9642: } 9642: 9642: template 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: erase(const _Key& __x) 9642: { 9642: pair __p = equal_range(__x); 9642: const size_type __old_size = size(); 9642: _M_erase_aux(__p.first, __p.second); 9642: return __old_size - size(); 9642: } 9642: 9642: template 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, 9642: _Compare, _Alloc>::iterator 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: find(const _Key& __k) 9642: { 9642: iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k); 9642: return (__j == end() 9642: || _M_impl._M_key_compare(__k, 9642: _S_key(__j._M_node))) ? end() : __j; 9642: } 9642: 9642: template 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, 9642: _Compare, _Alloc>::const_iterator 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: find(const _Key& __k) const 9642: { 9642: const_iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k); 9642: return (__j == end() 9642: || _M_impl._M_key_compare(__k, 9642: _S_key(__j._M_node))) ? end() : __j; 9642: } 9642: 9642: template 9642: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type 9642: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 9642: count(const _Key& __k) const 9642: { 9642: pair __p = equal_range(__k); 9642: const size_type __n = std::distance(__p.first, __p.second); 9642: return __n; 9642: } 9642: 9642: __attribute__ ((__pure__)) unsigned int 9642: _Rb_tree_black_count(const _Rb_tree_node_base* __node, 9642: const _Rb_tree_node_base* __root) throw (); 9642: 9642: template 9642: bool 9642: _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::__rb_verify() const 9642: { 9642: if (_M_impl._M_node_count == 0 || begin() == end()) 9642: return _M_impl._M_node_count == 0 && begin() == end() 9642: && this->_M_impl._M_header._M_left == _M_end() 9642: && this->_M_impl._M_header._M_right == _M_end(); 9642: 9642: unsigned int __len = _Rb_tree_black_count(_M_leftmost(), _M_root()); 9642: for (const_iterator __it = begin(); __it != end(); ++__it) 9642: { 9642: _Const_Link_type __x = static_cast<_Const_Link_type>(__it._M_node); 9642: _Const_Link_type __L = _S_left(__x); 9642: _Const_Link_type __R = _S_right(__x); 9642: 9642: if (__x->_M_color == _S_red) 9642: if ((__L && __L->_M_color == _S_red) 9642: || (__R && __R->_M_color == _S_red)) 9642: return false; 9642: 9642: if (__L && _M_impl._M_key_compare(_S_key(__x), _S_key(__L))) 9642: return false; 9642: if (__R && _M_impl._M_key_compare(_S_key(__R), _S_key(__x))) 9642: return false; 9642: 9642: if (!__L && !__R && _Rb_tree_black_count(__x, _M_root()) != __len) 9642: return false; 9642: } 9642: 9642: if (_M_leftmost() != _Rb_tree_node_base::_S_minimum(_M_root())) 9642: return false; 9642: if (_M_rightmost() != _Rb_tree_node_base::_S_maximum(_M_root())) 9642: return false; 9642: return true; 9642: } 9642: 9642: 9642: 9642: template 9642: struct _Rb_tree_merge_helper<_Rb_tree<_Key, _Val, _Sel, _Cmp1, _Alloc>, 9642: _Cmp2> 9642: { 9642: private: 9642: friend class _Rb_tree<_Key, _Val, _Sel, _Cmp1, _Alloc>; 9642: 9642: static auto& 9642: _S_get_impl(_Rb_tree<_Key, _Val, _Sel, _Cmp2, _Alloc>& __tree) 9642: { return __tree._M_impl; } 9642: }; 9642: 9642: 9642: 9642: } 9642: # 63 "/usr/include/c++/13/map" 2 3 9642: # 1 "/usr/include/c++/13/bits/stl_map.h" 1 3 9642: # 66 "/usr/include/c++/13/bits/stl_map.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: template 9642: class multimap; 9642: # 100 "/usr/include/c++/13/bits/stl_map.h" 3 9642: template , 9642: typename _Alloc = std::allocator > > 9642: class map 9642: { 9642: public: 9642: typedef _Key key_type; 9642: typedef _Tp mapped_type; 9642: typedef std::pair value_type; 9642: typedef _Compare key_compare; 9642: typedef _Alloc allocator_type; 9642: 9642: private: 9642: # 130 "/usr/include/c++/13/bits/stl_map.h" 3 9642: public: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: class value_compare 9642: : public std::binary_function 9642: { 9642: friend class map<_Key, _Tp, _Compare, _Alloc>; 9642: protected: 9642: _Compare comp; 9642: 9642: value_compare(_Compare __c) 9642: : comp(__c) { } 9642: 9642: public: 9642: bool operator()(const value_type& __x, const value_type& __y) const 9642: { return comp(__x.first, __y.first); } 9642: }; 9642: #pragma GCC diagnostic pop 9642: 9642: private: 9642: 9642: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 9642: rebind::other _Pair_alloc_type; 9642: 9642: typedef _Rb_tree, 9642: key_compare, _Pair_alloc_type> _Rep_type; 9642: 9642: 9642: _Rep_type _M_t; 9642: 9642: typedef __gnu_cxx::__alloc_traits<_Pair_alloc_type> _Alloc_traits; 9642: 9642: 9642: template> 9642: static constexpr bool __usable_key 9642: = __or_v, 9642: __and_, is_scalar<_Key>>>; 9642: 9642: 9642: public: 9642: 9642: 9642: typedef typename _Alloc_traits::pointer pointer; 9642: typedef typename _Alloc_traits::const_pointer const_pointer; 9642: typedef typename _Alloc_traits::reference reference; 9642: typedef typename _Alloc_traits::const_reference const_reference; 9642: typedef typename _Rep_type::iterator iterator; 9642: typedef typename _Rep_type::const_iterator const_iterator; 9642: typedef typename _Rep_type::size_type size_type; 9642: typedef typename _Rep_type::difference_type difference_type; 9642: typedef typename _Rep_type::reverse_iterator reverse_iterator; 9642: typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; 9642: 9642: 9642: using node_type = typename _Rep_type::node_type; 9642: using insert_return_type = typename _Rep_type::insert_return_type; 9642: # 197 "/usr/include/c++/13/bits/stl_map.h" 3 9642: map() = default; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: map(const _Compare& __comp, 9642: const allocator_type& __a = allocator_type()) 9642: : _M_t(__comp, _Pair_alloc_type(__a)) { } 9642: # 219 "/usr/include/c++/13/bits/stl_map.h" 3 9642: map(const map&) = default; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: map(map&&) = default; 9642: # 240 "/usr/include/c++/13/bits/stl_map.h" 3 9642: map(initializer_list __l, 9642: const _Compare& __comp = _Compare(), 9642: const allocator_type& __a = allocator_type()) 9642: : _M_t(__comp, _Pair_alloc_type(__a)) 9642: { _M_t._M_insert_range_unique(__l.begin(), __l.end()); } 9642: 9642: 9642: explicit 9642: map(const allocator_type& __a) 9642: : _M_t(_Pair_alloc_type(__a)) { } 9642: 9642: 9642: map(const map& __m, const __type_identity_t& __a) 9642: : _M_t(__m._M_t, _Pair_alloc_type(__a)) { } 9642: 9642: 9642: map(map&& __m, const __type_identity_t& __a) 9642: noexcept(is_nothrow_copy_constructible<_Compare>::value 9642: && _Alloc_traits::_S_always_equal()) 9642: : _M_t(std::move(__m._M_t), _Pair_alloc_type(__a)) { } 9642: 9642: 9642: map(initializer_list __l, const allocator_type& __a) 9642: : _M_t(_Pair_alloc_type(__a)) 9642: { _M_t._M_insert_range_unique(__l.begin(), __l.end()); } 9642: 9642: 9642: template 9642: map(_InputIterator __first, _InputIterator __last, 9642: const allocator_type& __a) 9642: : _M_t(_Pair_alloc_type(__a)) 9642: { _M_t._M_insert_range_unique(__first, __last); } 9642: # 284 "/usr/include/c++/13/bits/stl_map.h" 3 9642: template 9642: map(_InputIterator __first, _InputIterator __last) 9642: : _M_t() 9642: { _M_t._M_insert_range_unique(__first, __last); } 9642: # 301 "/usr/include/c++/13/bits/stl_map.h" 3 9642: template 9642: map(_InputIterator __first, _InputIterator __last, 9642: const _Compare& __comp, 9642: const allocator_type& __a = allocator_type()) 9642: : _M_t(__comp, _Pair_alloc_type(__a)) 9642: { _M_t._M_insert_range_unique(__first, __last); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ~map() = default; 9642: # 330 "/usr/include/c++/13/bits/stl_map.h" 3 9642: map& 9642: operator=(const map&) = default; 9642: 9642: 9642: map& 9642: operator=(map&&) = default; 9642: # 348 "/usr/include/c++/13/bits/stl_map.h" 3 9642: map& 9642: operator=(initializer_list __l) 9642: { 9642: _M_t._M_assign_unique(__l.begin(), __l.end()); 9642: return *this; 9642: } 9642: 9642: 9642: 9642: allocator_type 9642: get_allocator() const noexcept 9642: { return allocator_type(_M_t.get_allocator()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: iterator 9642: begin() noexcept 9642: { return _M_t.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_iterator 9642: begin() const noexcept 9642: { return _M_t.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: iterator 9642: end() noexcept 9642: { return _M_t.end(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_iterator 9642: end() const noexcept 9642: { return _M_t.end(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: reverse_iterator 9642: rbegin() noexcept 9642: { return _M_t.rbegin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_reverse_iterator 9642: rbegin() const noexcept 9642: { return _M_t.rbegin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: reverse_iterator 9642: rend() noexcept 9642: { return _M_t.rend(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_reverse_iterator 9642: rend() const noexcept 9642: { return _M_t.rend(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_iterator 9642: cbegin() const noexcept 9642: { return _M_t.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_iterator 9642: cend() const noexcept 9642: { return _M_t.end(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_reverse_iterator 9642: crbegin() const noexcept 9642: { return _M_t.rbegin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_reverse_iterator 9642: crend() const noexcept 9642: { return _M_t.rend(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] bool 9642: empty() const noexcept 9642: { return _M_t.empty(); } 9642: 9642: 9642: size_type 9642: size() const noexcept 9642: { return _M_t.size(); } 9642: 9642: 9642: size_type 9642: max_size() const noexcept 9642: { return _M_t.max_size(); } 9642: # 503 "/usr/include/c++/13/bits/stl_map.h" 3 9642: mapped_type& 9642: operator[](const key_type& __k) 9642: { 9642: 9642: 9642: 9642: iterator __i = lower_bound(__k); 9642: 9642: if (__i == end() || key_comp()(__k, (*__i).first)) 9642: 9642: __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct, 9642: std::tuple(__k), 9642: std::tuple<>()); 9642: 9642: 9642: 9642: return (*__i).second; 9642: } 9642: 9642: 9642: mapped_type& 9642: operator[](key_type&& __k) 9642: { 9642: 9642: 9642: 9642: iterator __i = lower_bound(__k); 9642: 9642: if (__i == end() || key_comp()(__k, (*__i).first)) 9642: __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct, 9642: std::forward_as_tuple(std::move(__k)), 9642: std::tuple<>()); 9642: return (*__i).second; 9642: } 9642: # 548 "/usr/include/c++/13/bits/stl_map.h" 3 9642: mapped_type& 9642: at(const key_type& __k) 9642: { 9642: iterator __i = lower_bound(__k); 9642: if (__i == end() || key_comp()(__k, (*__i).first)) 9642: __throw_out_of_range(("map::at")); 9642: return (*__i).second; 9642: } 9642: 9642: const mapped_type& 9642: at(const key_type& __k) const 9642: { 9642: const_iterator __i = lower_bound(__k); 9642: if (__i == end() || key_comp()(__k, (*__i).first)) 9642: __throw_out_of_range(("map::at")); 9642: return (*__i).second; 9642: } 9642: # 586 "/usr/include/c++/13/bits/stl_map.h" 3 9642: template 9642: std::pair 9642: emplace(_Args&&... __args) 9642: { 9642: 9642: if constexpr (sizeof...(_Args) == 2) 9642: if constexpr (is_same_v>) 9642: { 9642: auto&& [__a, __v] = pair<_Args&...>(__args...); 9642: if constexpr (__usable_key) 9642: { 9642: const key_type& __k = __a; 9642: iterator __i = lower_bound(__k); 9642: if (__i == end() || key_comp()(__k, (*__i).first)) 9642: { 9642: __i = emplace_hint(__i, std::forward<_Args>(__args)...); 9642: return {__i, true}; 9642: } 9642: return {__i, false}; 9642: } 9642: } 9642: 9642: return _M_t._M_emplace_unique(std::forward<_Args>(__args)...); 9642: } 9642: # 636 "/usr/include/c++/13/bits/stl_map.h" 3 9642: template 9642: iterator 9642: emplace_hint(const_iterator __pos, _Args&&... __args) 9642: { 9642: return _M_t._M_emplace_hint_unique(__pos, 9642: std::forward<_Args>(__args)...); 9642: } 9642: 9642: 9642: 9642: 9642: node_type 9642: extract(const_iterator __pos) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__pos != end())) __builtin_unreachable(); } while (false); 9642: return _M_t.extract(__pos); 9642: } 9642: 9642: 9642: node_type 9642: extract(const key_type& __x) 9642: { return _M_t.extract(__x); } 9642: 9642: 9642: insert_return_type 9642: insert(node_type&& __nh) 9642: { return _M_t._M_reinsert_node_unique(std::move(__nh)); } 9642: 9642: 9642: iterator 9642: insert(const_iterator __hint, node_type&& __nh) 9642: { return _M_t._M_reinsert_node_hint_unique(__hint, std::move(__nh)); } 9642: 9642: template 9642: friend struct std::_Rb_tree_merge_helper; 9642: 9642: template 9642: void 9642: merge(map<_Key, _Tp, _Cmp2, _Alloc>& __source) 9642: { 9642: using _Merge_helper = _Rb_tree_merge_helper; 9642: _M_t._M_merge_unique(_Merge_helper::_S_get_tree(__source)); 9642: } 9642: 9642: template 9642: void 9642: merge(map<_Key, _Tp, _Cmp2, _Alloc>&& __source) 9642: { merge(__source); } 9642: 9642: template 9642: void 9642: merge(multimap<_Key, _Tp, _Cmp2, _Alloc>& __source) 9642: { 9642: using _Merge_helper = _Rb_tree_merge_helper; 9642: _M_t._M_merge_unique(_Merge_helper::_S_get_tree(__source)); 9642: } 9642: 9642: template 9642: void 9642: merge(multimap<_Key, _Tp, _Cmp2, _Alloc>&& __source) 9642: { merge(__source); } 9642: # 721 "/usr/include/c++/13/bits/stl_map.h" 3 9642: template 9642: pair 9642: try_emplace(const key_type& __k, _Args&&... __args) 9642: { 9642: iterator __i = lower_bound(__k); 9642: if (__i == end() || key_comp()(__k, (*__i).first)) 9642: { 9642: __i = emplace_hint(__i, std::piecewise_construct, 9642: std::forward_as_tuple(__k), 9642: std::forward_as_tuple( 9642: std::forward<_Args>(__args)...)); 9642: return {__i, true}; 9642: } 9642: return {__i, false}; 9642: } 9642: 9642: 9642: template 9642: pair 9642: try_emplace(key_type&& __k, _Args&&... __args) 9642: { 9642: iterator __i = lower_bound(__k); 9642: if (__i == end() || key_comp()(__k, (*__i).first)) 9642: { 9642: __i = emplace_hint(__i, std::piecewise_construct, 9642: std::forward_as_tuple(std::move(__k)), 9642: std::forward_as_tuple( 9642: std::forward<_Args>(__args)...)); 9642: return {__i, true}; 9642: } 9642: return {__i, false}; 9642: } 9642: # 781 "/usr/include/c++/13/bits/stl_map.h" 3 9642: template 9642: iterator 9642: try_emplace(const_iterator __hint, const key_type& __k, 9642: _Args&&... __args) 9642: { 9642: iterator __i; 9642: auto __true_hint = _M_t._M_get_insert_hint_unique_pos(__hint, __k); 9642: if (__true_hint.second) 9642: __i = emplace_hint(iterator(__true_hint.second), 9642: std::piecewise_construct, 9642: std::forward_as_tuple(__k), 9642: std::forward_as_tuple( 9642: std::forward<_Args>(__args)...)); 9642: else 9642: __i = iterator(__true_hint.first); 9642: return __i; 9642: } 9642: 9642: 9642: template 9642: iterator 9642: try_emplace(const_iterator __hint, key_type&& __k, _Args&&... __args) 9642: { 9642: iterator __i; 9642: auto __true_hint = _M_t._M_get_insert_hint_unique_pos(__hint, __k); 9642: if (__true_hint.second) 9642: __i = emplace_hint(iterator(__true_hint.second), 9642: std::piecewise_construct, 9642: std::forward_as_tuple(std::move(__k)), 9642: std::forward_as_tuple( 9642: std::forward<_Args>(__args)...)); 9642: else 9642: __i = iterator(__true_hint.first); 9642: return __i; 9642: } 9642: # 834 "/usr/include/c++/13/bits/stl_map.h" 3 9642: std::pair 9642: insert(const value_type& __x) 9642: { return _M_t._M_insert_unique(__x); } 9642: 9642: 9642: 9642: 9642: std::pair 9642: insert(value_type&& __x) 9642: { return _M_t._M_insert_unique(std::move(__x)); } 9642: 9642: template 9642: __enable_if_t::value, 9642: pair> 9642: insert(_Pair&& __x) 9642: { 9642: 9642: using _P2 = remove_reference_t<_Pair>; 9642: if constexpr (__is_pair>) 9642: if constexpr (is_same_v>) 9642: if constexpr (__usable_key) 9642: { 9642: const key_type& __k = __x.first; 9642: iterator __i = lower_bound(__k); 9642: if (__i == end() || key_comp()(__k, (*__i).first)) 9642: { 9642: __i = emplace_hint(__i, std::forward<_Pair>(__x)); 9642: return {__i, true}; 9642: } 9642: return {__i, false}; 9642: } 9642: 9642: return _M_t._M_emplace_unique(std::forward<_Pair>(__x)); 9642: } 9642: # 879 "/usr/include/c++/13/bits/stl_map.h" 3 9642: void 9642: insert(std::initializer_list __list) 9642: { insert(__list.begin(), __list.end()); } 9642: # 908 "/usr/include/c++/13/bits/stl_map.h" 3 9642: iterator 9642: 9642: insert(const_iterator __position, const value_type& __x) 9642: 9642: 9642: 9642: { return _M_t._M_insert_unique_(__position, __x); } 9642: 9642: 9642: 9642: 9642: iterator 9642: insert(const_iterator __position, value_type&& __x) 9642: { return _M_t._M_insert_unique_(__position, std::move(__x)); } 9642: 9642: template 9642: __enable_if_t::value, iterator> 9642: insert(const_iterator __position, _Pair&& __x) 9642: { 9642: return _M_t._M_emplace_hint_unique(__position, 9642: std::forward<_Pair>(__x)); 9642: } 9642: # 941 "/usr/include/c++/13/bits/stl_map.h" 3 9642: template 9642: void 9642: insert(_InputIterator __first, _InputIterator __last) 9642: { _M_t._M_insert_range_unique(__first, __last); } 9642: # 966 "/usr/include/c++/13/bits/stl_map.h" 3 9642: template 9642: pair 9642: insert_or_assign(const key_type& __k, _Obj&& __obj) 9642: { 9642: iterator __i = lower_bound(__k); 9642: if (__i == end() || key_comp()(__k, (*__i).first)) 9642: { 9642: __i = emplace_hint(__i, std::piecewise_construct, 9642: std::forward_as_tuple(__k), 9642: std::forward_as_tuple( 9642: std::forward<_Obj>(__obj))); 9642: return {__i, true}; 9642: } 9642: (*__i).second = std::forward<_Obj>(__obj); 9642: return {__i, false}; 9642: } 9642: 9642: 9642: template 9642: pair 9642: insert_or_assign(key_type&& __k, _Obj&& __obj) 9642: { 9642: iterator __i = lower_bound(__k); 9642: if (__i == end() || key_comp()(__k, (*__i).first)) 9642: { 9642: __i = emplace_hint(__i, std::piecewise_construct, 9642: std::forward_as_tuple(std::move(__k)), 9642: std::forward_as_tuple( 9642: std::forward<_Obj>(__obj))); 9642: return {__i, true}; 9642: } 9642: (*__i).second = std::forward<_Obj>(__obj); 9642: return {__i, false}; 9642: } 9642: # 1021 "/usr/include/c++/13/bits/stl_map.h" 3 9642: template 9642: iterator 9642: insert_or_assign(const_iterator __hint, 9642: const key_type& __k, _Obj&& __obj) 9642: { 9642: iterator __i; 9642: auto __true_hint = _M_t._M_get_insert_hint_unique_pos(__hint, __k); 9642: if (__true_hint.second) 9642: { 9642: return emplace_hint(iterator(__true_hint.second), 9642: std::piecewise_construct, 9642: std::forward_as_tuple(__k), 9642: std::forward_as_tuple( 9642: std::forward<_Obj>(__obj))); 9642: } 9642: __i = iterator(__true_hint.first); 9642: (*__i).second = std::forward<_Obj>(__obj); 9642: return __i; 9642: } 9642: 9642: 9642: template 9642: iterator 9642: insert_or_assign(const_iterator __hint, key_type&& __k, _Obj&& __obj) 9642: { 9642: iterator __i; 9642: auto __true_hint = _M_t._M_get_insert_hint_unique_pos(__hint, __k); 9642: if (__true_hint.second) 9642: { 9642: return emplace_hint(iterator(__true_hint.second), 9642: std::piecewise_construct, 9642: std::forward_as_tuple(std::move(__k)), 9642: std::forward_as_tuple( 9642: std::forward<_Obj>(__obj))); 9642: } 9642: __i = iterator(__true_hint.first); 9642: (*__i).second = std::forward<_Obj>(__obj); 9642: return __i; 9642: } 9642: # 1080 "/usr/include/c++/13/bits/stl_map.h" 3 9642: iterator 9642: erase(const_iterator __position) 9642: { return _M_t.erase(__position); } 9642: 9642: 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: iterator 9642: erase(iterator __position) 9642: { return _M_t.erase(__position); } 9642: # 1117 "/usr/include/c++/13/bits/stl_map.h" 3 9642: size_type 9642: erase(const key_type& __x) 9642: { return _M_t.erase(__x); } 9642: # 1137 "/usr/include/c++/13/bits/stl_map.h" 3 9642: iterator 9642: erase(const_iterator __first, const_iterator __last) 9642: { return _M_t.erase(__first, __last); } 9642: # 1171 "/usr/include/c++/13/bits/stl_map.h" 3 9642: void 9642: swap(map& __x) 9642: noexcept(__is_nothrow_swappable<_Compare>::value) 9642: { _M_t.swap(__x._M_t); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: clear() noexcept 9642: { _M_t.clear(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: key_compare 9642: key_comp() const 9642: { return _M_t.key_comp(); } 9642: 9642: 9642: 9642: 9642: 9642: value_compare 9642: value_comp() const 9642: { return value_compare(_M_t.key_comp()); } 9642: # 1218 "/usr/include/c++/13/bits/stl_map.h" 3 9642: iterator 9642: find(const key_type& __x) 9642: { return _M_t.find(__x); } 9642: 9642: 9642: template 9642: auto 9642: find(const _Kt& __x) -> decltype(_M_t._M_find_tr(__x)) 9642: { return _M_t._M_find_tr(__x); } 9642: # 1243 "/usr/include/c++/13/bits/stl_map.h" 3 9642: const_iterator 9642: find(const key_type& __x) const 9642: { return _M_t.find(__x); } 9642: 9642: 9642: template 9642: auto 9642: find(const _Kt& __x) const -> decltype(_M_t._M_find_tr(__x)) 9642: { return _M_t._M_find_tr(__x); } 9642: # 1264 "/usr/include/c++/13/bits/stl_map.h" 3 9642: size_type 9642: count(const key_type& __x) const 9642: { return _M_t.find(__x) == _M_t.end() ? 0 : 1; } 9642: 9642: 9642: template 9642: auto 9642: count(const _Kt& __x) const -> decltype(_M_t._M_count_tr(__x)) 9642: { return _M_t._M_count_tr(__x); } 9642: # 1307 "/usr/include/c++/13/bits/stl_map.h" 3 9642: iterator 9642: lower_bound(const key_type& __x) 9642: { return _M_t.lower_bound(__x); } 9642: 9642: 9642: template 9642: auto 9642: lower_bound(const _Kt& __x) 9642: -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) 9642: { return iterator(_M_t._M_lower_bound_tr(__x)); } 9642: # 1332 "/usr/include/c++/13/bits/stl_map.h" 3 9642: const_iterator 9642: lower_bound(const key_type& __x) const 9642: { return _M_t.lower_bound(__x); } 9642: 9642: 9642: template 9642: auto 9642: lower_bound(const _Kt& __x) const 9642: -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x))) 9642: { return const_iterator(_M_t._M_lower_bound_tr(__x)); } 9642: # 1352 "/usr/include/c++/13/bits/stl_map.h" 3 9642: iterator 9642: upper_bound(const key_type& __x) 9642: { return _M_t.upper_bound(__x); } 9642: 9642: 9642: template 9642: auto 9642: upper_bound(const _Kt& __x) 9642: -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) 9642: { return iterator(_M_t._M_upper_bound_tr(__x)); } 9642: # 1372 "/usr/include/c++/13/bits/stl_map.h" 3 9642: const_iterator 9642: upper_bound(const key_type& __x) const 9642: { return _M_t.upper_bound(__x); } 9642: 9642: 9642: template 9642: auto 9642: upper_bound(const _Kt& __x) const 9642: -> decltype(const_iterator(_M_t._M_upper_bound_tr(__x))) 9642: { return const_iterator(_M_t._M_upper_bound_tr(__x)); } 9642: # 1401 "/usr/include/c++/13/bits/stl_map.h" 3 9642: std::pair 9642: equal_range(const key_type& __x) 9642: { return _M_t.equal_range(__x); } 9642: 9642: 9642: template 9642: auto 9642: equal_range(const _Kt& __x) 9642: -> decltype(pair(_M_t._M_equal_range_tr(__x))) 9642: { return pair(_M_t._M_equal_range_tr(__x)); } 9642: # 1430 "/usr/include/c++/13/bits/stl_map.h" 3 9642: std::pair 9642: equal_range(const key_type& __x) const 9642: { return _M_t.equal_range(__x); } 9642: 9642: 9642: template 9642: auto 9642: equal_range(const _Kt& __x) const 9642: -> decltype(pair( 9642: _M_t._M_equal_range_tr(__x))) 9642: { 9642: return pair( 9642: _M_t._M_equal_range_tr(__x)); 9642: } 9642: 9642: 9642: 9642: template 9642: friend bool 9642: operator==(const map<_K1, _T1, _C1, _A1>&, 9642: const map<_K1, _T1, _C1, _A1>&); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: friend bool 9642: operator<(const map<_K1, _T1, _C1, _A1>&, 9642: const map<_K1, _T1, _C1, _A1>&); 9642: 9642: }; 9642: 9642: 9642: 9642: 9642: template>, 9642: typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, 9642: typename = _RequireInputIter<_InputIterator>, 9642: typename = _RequireNotAllocator<_Compare>, 9642: typename = _RequireAllocator<_Allocator>> 9642: map(_InputIterator, _InputIterator, 9642: _Compare = _Compare(), _Allocator = _Allocator()) 9642: -> map<__iter_key_t<_InputIterator>, __iter_val_t<_InputIterator>, 9642: _Compare, _Allocator>; 9642: 9642: template, 9642: typename _Allocator = allocator>, 9642: typename = _RequireNotAllocator<_Compare>, 9642: typename = _RequireAllocator<_Allocator>> 9642: map(initializer_list>, 9642: _Compare = _Compare(), _Allocator = _Allocator()) 9642: -> map<_Key, _Tp, _Compare, _Allocator>; 9642: 9642: template , 9642: typename = _RequireAllocator<_Allocator>> 9642: map(_InputIterator, _InputIterator, _Allocator) 9642: -> map<__iter_key_t<_InputIterator>, __iter_val_t<_InputIterator>, 9642: less<__iter_key_t<_InputIterator>>, _Allocator>; 9642: 9642: template> 9642: map(initializer_list>, _Allocator) 9642: -> map<_Key, _Tp, less<_Key>, _Allocator>; 9642: # 1511 "/usr/include/c++/13/bits/stl_map.h" 3 9642: template 9642: inline bool 9642: operator==(const map<_Key, _Tp, _Compare, _Alloc>& __x, 9642: const map<_Key, _Tp, _Compare, _Alloc>& __y) 9642: { return __x._M_t == __y._M_t; } 9642: # 1549 "/usr/include/c++/13/bits/stl_map.h" 3 9642: template 9642: inline bool 9642: operator<(const map<_Key, _Tp, _Compare, _Alloc>& __x, 9642: const map<_Key, _Tp, _Compare, _Alloc>& __y) 9642: { return __x._M_t < __y._M_t; } 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const map<_Key, _Tp, _Compare, _Alloc>& __x, 9642: const map<_Key, _Tp, _Compare, _Alloc>& __y) 9642: { return !(__x == __y); } 9642: 9642: 9642: template 9642: inline bool 9642: operator>(const map<_Key, _Tp, _Compare, _Alloc>& __x, 9642: const map<_Key, _Tp, _Compare, _Alloc>& __y) 9642: { return __y < __x; } 9642: 9642: 9642: template 9642: inline bool 9642: operator<=(const map<_Key, _Tp, _Compare, _Alloc>& __x, 9642: const map<_Key, _Tp, _Compare, _Alloc>& __y) 9642: { return !(__y < __x); } 9642: 9642: 9642: template 9642: inline bool 9642: operator>=(const map<_Key, _Tp, _Compare, _Alloc>& __x, 9642: const map<_Key, _Tp, _Compare, _Alloc>& __y) 9642: { return !(__x < __y); } 9642: 9642: 9642: 9642: template 9642: inline void 9642: swap(map<_Key, _Tp, _Compare, _Alloc>& __x, 9642: map<_Key, _Tp, _Compare, _Alloc>& __y) 9642: noexcept(noexcept(__x.swap(__y))) 9642: { __x.swap(__y); } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct 9642: _Rb_tree_merge_helper, 9642: _Cmp2> 9642: { 9642: private: 9642: friend class std::map<_Key, _Val, _Cmp1, _Alloc>; 9642: 9642: static auto& 9642: _S_get_tree(std::map<_Key, _Val, _Cmp2, _Alloc>& __map) 9642: { return __map._M_t; } 9642: 9642: static auto& 9642: _S_get_tree(std::multimap<_Key, _Val, _Cmp2, _Alloc>& __map) 9642: { return __map._M_t; } 9642: }; 9642: 9642: 9642: 9642: } 9642: # 64 "/usr/include/c++/13/map" 2 3 9642: # 1 "/usr/include/c++/13/bits/stl_multimap.h" 1 3 9642: # 64 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: template 9642: class map; 9642: # 98 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: template , 9642: typename _Alloc = std::allocator > > 9642: class multimap 9642: { 9642: public: 9642: typedef _Key key_type; 9642: typedef _Tp mapped_type; 9642: typedef std::pair value_type; 9642: typedef _Compare key_compare; 9642: typedef _Alloc allocator_type; 9642: 9642: private: 9642: # 129 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: public: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: class value_compare 9642: : public std::binary_function 9642: { 9642: friend class multimap<_Key, _Tp, _Compare, _Alloc>; 9642: protected: 9642: _Compare comp; 9642: 9642: value_compare(_Compare __c) 9642: : comp(__c) { } 9642: 9642: public: 9642: bool operator()(const value_type& __x, const value_type& __y) const 9642: { return comp(__x.first, __y.first); } 9642: }; 9642: #pragma GCC diagnostic pop 9642: 9642: private: 9642: 9642: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 9642: rebind::other _Pair_alloc_type; 9642: 9642: typedef _Rb_tree, 9642: key_compare, _Pair_alloc_type> _Rep_type; 9642: 9642: _Rep_type _M_t; 9642: 9642: typedef __gnu_cxx::__alloc_traits<_Pair_alloc_type> _Alloc_traits; 9642: 9642: public: 9642: 9642: 9642: typedef typename _Alloc_traits::pointer pointer; 9642: typedef typename _Alloc_traits::const_pointer const_pointer; 9642: typedef typename _Alloc_traits::reference reference; 9642: typedef typename _Alloc_traits::const_reference const_reference; 9642: typedef typename _Rep_type::iterator iterator; 9642: typedef typename _Rep_type::const_iterator const_iterator; 9642: typedef typename _Rep_type::size_type size_type; 9642: typedef typename _Rep_type::difference_type difference_type; 9642: typedef typename _Rep_type::reverse_iterator reverse_iterator; 9642: typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; 9642: 9642: 9642: using node_type = typename _Rep_type::node_type; 9642: # 187 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: multimap() = default; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: multimap(const _Compare& __comp, 9642: const allocator_type& __a = allocator_type()) 9642: : _M_t(__comp, _Pair_alloc_type(__a)) { } 9642: # 209 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: multimap(const multimap&) = default; 9642: # 218 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: multimap(multimap&&) = default; 9642: # 230 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: multimap(initializer_list __l, 9642: const _Compare& __comp = _Compare(), 9642: const allocator_type& __a = allocator_type()) 9642: : _M_t(__comp, _Pair_alloc_type(__a)) 9642: { _M_t._M_insert_range_equal(__l.begin(), __l.end()); } 9642: 9642: 9642: explicit 9642: multimap(const allocator_type& __a) 9642: : _M_t(_Pair_alloc_type(__a)) { } 9642: 9642: 9642: multimap(const multimap& __m, 9642: const __type_identity_t& __a) 9642: : _M_t(__m._M_t, _Pair_alloc_type(__a)) { } 9642: 9642: 9642: multimap(multimap&& __m, const __type_identity_t& __a) 9642: noexcept(is_nothrow_copy_constructible<_Compare>::value 9642: && _Alloc_traits::_S_always_equal()) 9642: : _M_t(std::move(__m._M_t), _Pair_alloc_type(__a)) { } 9642: 9642: 9642: multimap(initializer_list __l, const allocator_type& __a) 9642: : _M_t(_Pair_alloc_type(__a)) 9642: { _M_t._M_insert_range_equal(__l.begin(), __l.end()); } 9642: 9642: 9642: template 9642: multimap(_InputIterator __first, _InputIterator __last, 9642: const allocator_type& __a) 9642: : _M_t(_Pair_alloc_type(__a)) 9642: { _M_t._M_insert_range_equal(__first, __last); } 9642: # 274 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: template 9642: multimap(_InputIterator __first, _InputIterator __last) 9642: : _M_t() 9642: { _M_t._M_insert_range_equal(__first, __last); } 9642: # 290 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: template 9642: multimap(_InputIterator __first, _InputIterator __last, 9642: const _Compare& __comp, 9642: const allocator_type& __a = allocator_type()) 9642: : _M_t(__comp, _Pair_alloc_type(__a)) 9642: { _M_t._M_insert_range_equal(__first, __last); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ~multimap() = default; 9642: # 319 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: multimap& 9642: operator=(const multimap&) = default; 9642: 9642: 9642: multimap& 9642: operator=(multimap&&) = default; 9642: # 337 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: multimap& 9642: operator=(initializer_list __l) 9642: { 9642: _M_t._M_assign_equal(__l.begin(), __l.end()); 9642: return *this; 9642: } 9642: 9642: 9642: 9642: allocator_type 9642: get_allocator() const noexcept 9642: { return allocator_type(_M_t.get_allocator()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: iterator 9642: begin() noexcept 9642: { return _M_t.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_iterator 9642: begin() const noexcept 9642: { return _M_t.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: iterator 9642: end() noexcept 9642: { return _M_t.end(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_iterator 9642: end() const noexcept 9642: { return _M_t.end(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: reverse_iterator 9642: rbegin() noexcept 9642: { return _M_t.rbegin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_reverse_iterator 9642: rbegin() const noexcept 9642: { return _M_t.rbegin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: reverse_iterator 9642: rend() noexcept 9642: { return _M_t.rend(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_reverse_iterator 9642: rend() const noexcept 9642: { return _M_t.rend(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_iterator 9642: cbegin() const noexcept 9642: { return _M_t.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_iterator 9642: cend() const noexcept 9642: { return _M_t.end(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_reverse_iterator 9642: crbegin() const noexcept 9642: { return _M_t.rbegin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const_reverse_iterator 9642: crend() const noexcept 9642: { return _M_t.rend(); } 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] bool 9642: empty() const noexcept 9642: { return _M_t.empty(); } 9642: 9642: 9642: size_type 9642: size() const noexcept 9642: { return _M_t.size(); } 9642: 9642: 9642: size_type 9642: max_size() const noexcept 9642: { return _M_t.max_size(); } 9642: # 495 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: template 9642: iterator 9642: emplace(_Args&&... __args) 9642: { return _M_t._M_emplace_equal(std::forward<_Args>(__args)...); } 9642: # 522 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: template 9642: iterator 9642: emplace_hint(const_iterator __pos, _Args&&... __args) 9642: { 9642: return _M_t._M_emplace_hint_equal(__pos, 9642: std::forward<_Args>(__args)...); 9642: } 9642: # 544 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: iterator 9642: insert(const value_type& __x) 9642: { return _M_t._M_insert_equal(__x); } 9642: 9642: 9642: 9642: 9642: iterator 9642: insert(value_type&& __x) 9642: { return _M_t._M_insert_equal(std::move(__x)); } 9642: 9642: template 9642: __enable_if_t::value, iterator> 9642: insert(_Pair&& __x) 9642: { return _M_t._M_emplace_equal(std::forward<_Pair>(__x)); } 9642: # 583 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: iterator 9642: 9642: insert(const_iterator __position, const value_type& __x) 9642: 9642: 9642: 9642: { return _M_t._M_insert_equal_(__position, __x); } 9642: 9642: 9642: 9642: 9642: iterator 9642: insert(const_iterator __position, value_type&& __x) 9642: { return _M_t._M_insert_equal_(__position, std::move(__x)); } 9642: 9642: template 9642: __enable_if_t::value, iterator> 9642: insert(const_iterator __position, _Pair&& __x) 9642: { 9642: return _M_t._M_emplace_hint_equal(__position, 9642: std::forward<_Pair>(__x)); 9642: } 9642: # 617 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: template 9642: void 9642: insert(_InputIterator __first, _InputIterator __last) 9642: { _M_t._M_insert_range_equal(__first, __last); } 9642: # 630 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: void 9642: insert(initializer_list __l) 9642: { this->insert(__l.begin(), __l.end()); } 9642: 9642: 9642: 9642: 9642: node_type 9642: extract(const_iterator __pos) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__pos != end())) __builtin_unreachable(); } while (false); 9642: return _M_t.extract(__pos); 9642: } 9642: 9642: 9642: node_type 9642: extract(const key_type& __x) 9642: { return _M_t.extract(__x); } 9642: 9642: 9642: iterator 9642: insert(node_type&& __nh) 9642: { return _M_t._M_reinsert_node_equal(std::move(__nh)); } 9642: 9642: 9642: iterator 9642: insert(const_iterator __hint, node_type&& __nh) 9642: { return _M_t._M_reinsert_node_hint_equal(__hint, std::move(__nh)); } 9642: 9642: template 9642: friend struct std::_Rb_tree_merge_helper; 9642: 9642: template 9642: void 9642: merge(multimap<_Key, _Tp, _Cmp2, _Alloc>& __source) 9642: { 9642: using _Merge_helper = _Rb_tree_merge_helper; 9642: _M_t._M_merge_equal(_Merge_helper::_S_get_tree(__source)); 9642: } 9642: 9642: template 9642: void 9642: merge(multimap<_Key, _Tp, _Cmp2, _Alloc>&& __source) 9642: { merge(__source); } 9642: 9642: template 9642: void 9642: merge(map<_Key, _Tp, _Cmp2, _Alloc>& __source) 9642: { 9642: using _Merge_helper = _Rb_tree_merge_helper; 9642: _M_t._M_merge_equal(_Merge_helper::_S_get_tree(__source)); 9642: } 9642: 9642: template 9642: void 9642: merge(map<_Key, _Tp, _Cmp2, _Alloc>&& __source) 9642: { merge(__source); } 9642: # 707 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: iterator 9642: erase(const_iterator __position) 9642: { return _M_t.erase(__position); } 9642: 9642: 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: iterator 9642: erase(iterator __position) 9642: { return _M_t.erase(__position); } 9642: # 744 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: size_type 9642: erase(const key_type& __x) 9642: { return _M_t.erase(__x); } 9642: # 765 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: iterator 9642: erase(const_iterator __first, const_iterator __last) 9642: { return _M_t.erase(__first, __last); } 9642: # 802 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: void 9642: swap(multimap& __x) 9642: noexcept(__is_nothrow_swappable<_Compare>::value) 9642: { _M_t.swap(__x._M_t); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: clear() noexcept 9642: { _M_t.clear(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: key_compare 9642: key_comp() const 9642: { return _M_t.key_comp(); } 9642: 9642: 9642: 9642: 9642: 9642: value_compare 9642: value_comp() const 9642: { return value_compare(_M_t.key_comp()); } 9642: # 848 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: iterator 9642: find(const key_type& __x) 9642: { return _M_t.find(__x); } 9642: 9642: 9642: template 9642: auto 9642: find(const _Kt& __x) -> decltype(_M_t._M_find_tr(__x)) 9642: { return _M_t._M_find_tr(__x); } 9642: # 872 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: const_iterator 9642: find(const key_type& __x) const 9642: { return _M_t.find(__x); } 9642: 9642: 9642: template 9642: auto 9642: find(const _Kt& __x) const -> decltype(_M_t._M_find_tr(__x)) 9642: { return _M_t._M_find_tr(__x); } 9642: # 890 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: size_type 9642: count(const key_type& __x) const 9642: { return _M_t.count(__x); } 9642: 9642: 9642: template 9642: auto 9642: count(const _Kt& __x) const -> decltype(_M_t._M_count_tr(__x)) 9642: { return _M_t._M_count_tr(__x); } 9642: # 933 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: iterator 9642: lower_bound(const key_type& __x) 9642: { return _M_t.lower_bound(__x); } 9642: 9642: 9642: template 9642: auto 9642: lower_bound(const _Kt& __x) 9642: -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) 9642: { return iterator(_M_t._M_lower_bound_tr(__x)); } 9642: # 958 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: const_iterator 9642: lower_bound(const key_type& __x) const 9642: { return _M_t.lower_bound(__x); } 9642: 9642: 9642: template 9642: auto 9642: lower_bound(const _Kt& __x) const 9642: -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x))) 9642: { return const_iterator(_M_t._M_lower_bound_tr(__x)); } 9642: # 978 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: iterator 9642: upper_bound(const key_type& __x) 9642: { return _M_t.upper_bound(__x); } 9642: 9642: 9642: template 9642: auto 9642: upper_bound(const _Kt& __x) 9642: -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) 9642: { return iterator(_M_t._M_upper_bound_tr(__x)); } 9642: # 998 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: const_iterator 9642: upper_bound(const key_type& __x) const 9642: { return _M_t.upper_bound(__x); } 9642: 9642: 9642: template 9642: auto 9642: upper_bound(const _Kt& __x) const 9642: -> decltype(const_iterator(_M_t._M_upper_bound_tr(__x))) 9642: { return const_iterator(_M_t._M_upper_bound_tr(__x)); } 9642: # 1025 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: std::pair 9642: equal_range(const key_type& __x) 9642: { return _M_t.equal_range(__x); } 9642: 9642: 9642: template 9642: auto 9642: equal_range(const _Kt& __x) 9642: -> decltype(pair(_M_t._M_equal_range_tr(__x))) 9642: { return pair(_M_t._M_equal_range_tr(__x)); } 9642: # 1052 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: std::pair 9642: equal_range(const key_type& __x) const 9642: { return _M_t.equal_range(__x); } 9642: 9642: 9642: template 9642: auto 9642: equal_range(const _Kt& __x) const 9642: -> decltype(pair( 9642: _M_t._M_equal_range_tr(__x))) 9642: { 9642: return pair( 9642: _M_t._M_equal_range_tr(__x)); 9642: } 9642: 9642: 9642: 9642: template 9642: friend bool 9642: operator==(const multimap<_K1, _T1, _C1, _A1>&, 9642: const multimap<_K1, _T1, _C1, _A1>&); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: friend bool 9642: operator<(const multimap<_K1, _T1, _C1, _A1>&, 9642: const multimap<_K1, _T1, _C1, _A1>&); 9642: 9642: }; 9642: 9642: 9642: 9642: template>, 9642: typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, 9642: typename = _RequireInputIter<_InputIterator>, 9642: typename = _RequireNotAllocator<_Compare>, 9642: typename = _RequireAllocator<_Allocator>> 9642: multimap(_InputIterator, _InputIterator, 9642: _Compare = _Compare(), _Allocator = _Allocator()) 9642: -> multimap<__iter_key_t<_InputIterator>, __iter_val_t<_InputIterator>, 9642: _Compare, _Allocator>; 9642: 9642: template, 9642: typename _Allocator = allocator>, 9642: typename = _RequireNotAllocator<_Compare>, 9642: typename = _RequireAllocator<_Allocator>> 9642: multimap(initializer_list>, 9642: _Compare = _Compare(), _Allocator = _Allocator()) 9642: -> multimap<_Key, _Tp, _Compare, _Allocator>; 9642: 9642: template, 9642: typename = _RequireAllocator<_Allocator>> 9642: multimap(_InputIterator, _InputIterator, _Allocator) 9642: -> multimap<__iter_key_t<_InputIterator>, __iter_val_t<_InputIterator>, 9642: less<__iter_key_t<_InputIterator>>, _Allocator>; 9642: 9642: template> 9642: multimap(initializer_list>, _Allocator) 9642: -> multimap<_Key, _Tp, less<_Key>, _Allocator>; 9642: # 1132 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: template 9642: inline bool 9642: operator==(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, 9642: const multimap<_Key, _Tp, _Compare, _Alloc>& __y) 9642: { return __x._M_t == __y._M_t; } 9642: # 1170 "/usr/include/c++/13/bits/stl_multimap.h" 3 9642: template 9642: inline bool 9642: operator<(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, 9642: const multimap<_Key, _Tp, _Compare, _Alloc>& __y) 9642: { return __x._M_t < __y._M_t; } 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, 9642: const multimap<_Key, _Tp, _Compare, _Alloc>& __y) 9642: { return !(__x == __y); } 9642: 9642: 9642: template 9642: inline bool 9642: operator>(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, 9642: const multimap<_Key, _Tp, _Compare, _Alloc>& __y) 9642: { return __y < __x; } 9642: 9642: 9642: template 9642: inline bool 9642: operator<=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, 9642: const multimap<_Key, _Tp, _Compare, _Alloc>& __y) 9642: { return !(__y < __x); } 9642: 9642: 9642: template 9642: inline bool 9642: operator>=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, 9642: const multimap<_Key, _Tp, _Compare, _Alloc>& __y) 9642: { return !(__x < __y); } 9642: 9642: 9642: 9642: template 9642: inline void 9642: swap(multimap<_Key, _Tp, _Compare, _Alloc>& __x, 9642: multimap<_Key, _Tp, _Compare, _Alloc>& __y) 9642: noexcept(noexcept(__x.swap(__y))) 9642: { __x.swap(__y); } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct 9642: _Rb_tree_merge_helper, 9642: _Cmp2> 9642: { 9642: private: 9642: friend class std::multimap<_Key, _Val, _Cmp1, _Alloc>; 9642: 9642: static auto& 9642: _S_get_tree(std::map<_Key, _Val, _Cmp2, _Alloc>& __map) 9642: { return __map._M_t; } 9642: 9642: static auto& 9642: _S_get_tree(std::multimap<_Key, _Val, _Cmp2, _Alloc>& __map) 9642: { return __map._M_t; } 9642: }; 9642: 9642: 9642: 9642: } 9642: # 65 "/usr/include/c++/13/map" 2 3 9642: # 74 "/usr/include/c++/13/map" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: namespace pmr 9642: { 9642: template> 9642: using map 9642: = std::map<_Key, _Tp, _Cmp, 9642: polymorphic_allocator>>; 9642: template> 9642: using multimap 9642: = std::multimap<_Key, _Tp, _Cmp, 9642: polymorphic_allocator>>; 9642: } 9642: 9642: } 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/monitoring/statistics_impl.h" 2 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 9642: 9642: # 1 "/usr/include/c++/13/cassert" 1 3 9642: # 41 "/usr/include/c++/13/cassert" 3 9642: 9642: # 42 "/usr/include/c++/13/cassert" 3 9642: 9642: 9642: # 1 "/usr/include/assert.h" 1 3 4 9642: # 45 "/usr/include/c++/13/cassert" 2 3 9642: # 12 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 2 9642: 9642: # 1 "/usr/include/c++/13/mutex" 1 3 9642: # 32 "/usr/include/c++/13/mutex" 3 9642: 9642: # 33 "/usr/include/c++/13/mutex" 3 9642: # 44 "/usr/include/c++/13/mutex" 3 9642: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/error_constants.h" 1 3 9642: # 34 "/usr/include/arm-linux-gnueabihf/c++/13/bits/error_constants.h" 3 9642: # 1 "/usr/include/c++/13/cerrno" 1 3 9642: # 39 "/usr/include/c++/13/cerrno" 3 9642: 9642: # 40 "/usr/include/c++/13/cerrno" 3 9642: # 35 "/usr/include/arm-linux-gnueabihf/c++/13/bits/error_constants.h" 2 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: enum class errc 9642: { 9642: address_family_not_supported = 97, 9642: address_in_use = 98, 9642: address_not_available = 99, 9642: already_connected = 106, 9642: argument_list_too_long = 7, 9642: argument_out_of_domain = 33, 9642: bad_address = 14, 9642: bad_file_descriptor = 9, 9642: 9642: 9642: bad_message = 74, 9642: 9642: 9642: broken_pipe = 32, 9642: connection_aborted = 103, 9642: connection_already_in_progress = 114, 9642: connection_refused = 111, 9642: connection_reset = 104, 9642: cross_device_link = 18, 9642: destination_address_required = 89, 9642: device_or_resource_busy = 16, 9642: directory_not_empty = 39, 9642: executable_format_error = 8, 9642: file_exists = 17, 9642: file_too_large = 27, 9642: filename_too_long = 36, 9642: function_not_supported = 38, 9642: host_unreachable = 113, 9642: 9642: 9642: identifier_removed = 43, 9642: 9642: 9642: illegal_byte_sequence = 84, 9642: inappropriate_io_control_operation = 25, 9642: interrupted = 4, 9642: invalid_argument = 22, 9642: invalid_seek = 29, 9642: io_error = 5, 9642: is_a_directory = 21, 9642: message_size = 90, 9642: network_down = 100, 9642: network_reset = 102, 9642: network_unreachable = 101, 9642: no_buffer_space = 105, 9642: no_child_process = 10, 9642: 9642: 9642: no_link = 67, 9642: 9642: 9642: no_lock_available = 37, 9642: 9642: 9642: no_message_available = 61, 9642: 9642: 9642: no_message = 42, 9642: no_protocol_option = 92, 9642: no_space_on_device = 28, 9642: 9642: 9642: no_stream_resources = 63, 9642: 9642: 9642: no_such_device_or_address = 6, 9642: no_such_device = 19, 9642: no_such_file_or_directory = 2, 9642: no_such_process = 3, 9642: not_a_directory = 20, 9642: not_a_socket = 88, 9642: 9642: 9642: not_a_stream = 60, 9642: 9642: 9642: not_connected = 107, 9642: not_enough_memory = 12, 9642: 9642: 9642: not_supported = 95, 9642: 9642: 9642: 9642: operation_canceled = 125, 9642: 9642: 9642: operation_in_progress = 115, 9642: operation_not_permitted = 1, 9642: operation_not_supported = 95, 9642: operation_would_block = 11, 9642: 9642: 9642: owner_dead = 130, 9642: 9642: 9642: permission_denied = 13, 9642: 9642: 9642: protocol_error = 71, 9642: 9642: 9642: protocol_not_supported = 93, 9642: read_only_file_system = 30, 9642: resource_deadlock_would_occur = 35, 9642: resource_unavailable_try_again = 11, 9642: result_out_of_range = 34, 9642: 9642: 9642: state_not_recoverable = 131, 9642: 9642: 9642: 9642: stream_timeout = 62, 9642: 9642: 9642: 9642: text_file_busy = 26, 9642: 9642: 9642: timed_out = 110, 9642: too_many_files_open_in_system = 23, 9642: too_many_files_open = 24, 9642: too_many_links = 31, 9642: too_many_symbolic_link_levels = 40, 9642: 9642: 9642: value_too_large = 75, 9642: 9642: 9642: 9642: 9642: wrong_protocol_type = 91 9642: }; 9642: 9642: 9642: } 9642: # 45 "/usr/include/c++/13/mutex" 2 3 9642: # 1 "/usr/include/c++/13/bits/std_mutex.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/std_mutex.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/std_mutex.h" 3 9642: # 43 "/usr/include/c++/13/bits/std_mutex.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 59 "/usr/include/c++/13/bits/std_mutex.h" 3 9642: class __mutex_base 9642: { 9642: protected: 9642: typedef __gthread_mutex_t __native_type; 9642: 9642: 9642: __native_type _M_mutex = { { 0, 0, 0, PTHREAD_MUTEX_TIMED_NP, 0, { 0 } } }; 9642: 9642: constexpr __mutex_base() noexcept = default; 9642: # 80 "/usr/include/c++/13/bits/std_mutex.h" 3 9642: __mutex_base(const __mutex_base&) = delete; 9642: __mutex_base& operator=(const __mutex_base&) = delete; 9642: }; 9642: # 96 "/usr/include/c++/13/bits/std_mutex.h" 3 9642: class mutex : private __mutex_base 9642: { 9642: public: 9642: typedef __native_type* native_handle_type; 9642: 9642: 9642: constexpr 9642: 9642: mutex() noexcept = default; 9642: ~mutex() = default; 9642: 9642: mutex(const mutex&) = delete; 9642: mutex& operator=(const mutex&) = delete; 9642: 9642: void 9642: lock() 9642: { 9642: int __e = __gthread_mutex_lock(&_M_mutex); 9642: 9642: 9642: if (__e) 9642: __throw_system_error(__e); 9642: } 9642: 9642: [[__nodiscard__]] 9642: bool 9642: try_lock() noexcept 9642: { 9642: 9642: return !__gthread_mutex_trylock(&_M_mutex); 9642: } 9642: 9642: void 9642: unlock() 9642: { 9642: 9642: __gthread_mutex_unlock(&_M_mutex); 9642: } 9642: 9642: native_handle_type 9642: native_handle() noexcept 9642: { return &_M_mutex; } 9642: }; 9642: 9642: 9642: 9642: 9642: class __condvar 9642: { 9642: using timespec = __gthread_time_t; 9642: 9642: public: 9642: __condvar() noexcept 9642: { 9642: 9642: 9642: 9642: } 9642: 9642: ~__condvar() 9642: { 9642: int __e __attribute__((__unused__)) = __gthread_cond_destroy(&_M_cond); 9642: do { if (std::__is_constant_evaluated() && !bool(__e != 16)) __builtin_unreachable(); } while (false); 9642: } 9642: 9642: __condvar(const __condvar&) = delete; 9642: __condvar& operator=(const __condvar&) = delete; 9642: 9642: __gthread_cond_t* native_handle() noexcept { return &_M_cond; } 9642: 9642: 9642: void 9642: wait(mutex& __m) 9642: { 9642: int __e __attribute__((__unused__)) 9642: = __gthread_cond_wait(&_M_cond, __m.native_handle()); 9642: do { if (std::__is_constant_evaluated() && !bool(__e == 0)) __builtin_unreachable(); } while (false); 9642: } 9642: 9642: void 9642: wait_until(mutex& __m, timespec& __abs_time) 9642: { 9642: __gthread_cond_timedwait(&_M_cond, __m.native_handle(), &__abs_time); 9642: } 9642: 9642: 9642: void 9642: wait_until(mutex& __m, clockid_t __clock, timespec& __abs_time) 9642: { 9642: pthread_cond_clockwait(&_M_cond, __m.native_handle(), __clock, 9642: &__abs_time); 9642: } 9642: 9642: 9642: void 9642: notify_one() noexcept 9642: { 9642: int __e __attribute__((__unused__)) = __gthread_cond_signal(&_M_cond); 9642: do { if (std::__is_constant_evaluated() && !bool(__e == 0)) __builtin_unreachable(); } while (false); 9642: } 9642: 9642: void 9642: notify_all() noexcept 9642: { 9642: int __e __attribute__((__unused__)) = __gthread_cond_broadcast(&_M_cond); 9642: do { if (std::__is_constant_evaluated() && !bool(__e == 0)) __builtin_unreachable(); } while (false); 9642: } 9642: 9642: protected: 9642: 9642: __gthread_cond_t _M_cond = { { {0}, {0}, {0, 0}, {0, 0}, 0, 0, {0, 0} } }; 9642: 9642: 9642: 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: struct defer_lock_t { explicit defer_lock_t() = default; }; 9642: 9642: 9642: struct try_to_lock_t { explicit try_to_lock_t() = default; }; 9642: 9642: 9642: 9642: struct adopt_lock_t { explicit adopt_lock_t() = default; }; 9642: 9642: 9642: inline constexpr defer_lock_t defer_lock { }; 9642: 9642: 9642: inline constexpr try_to_lock_t try_to_lock { }; 9642: 9642: 9642: inline constexpr adopt_lock_t adopt_lock { }; 9642: # 242 "/usr/include/c++/13/bits/std_mutex.h" 3 9642: template 9642: class lock_guard 9642: { 9642: public: 9642: typedef _Mutex mutex_type; 9642: 9642: explicit lock_guard(mutex_type& __m) : _M_device(__m) 9642: { _M_device.lock(); } 9642: 9642: lock_guard(mutex_type& __m, adopt_lock_t) noexcept : _M_device(__m) 9642: { } 9642: 9642: ~lock_guard() 9642: { _M_device.unlock(); } 9642: 9642: lock_guard(const lock_guard&) = delete; 9642: lock_guard& operator=(const lock_guard&) = delete; 9642: 9642: private: 9642: mutex_type& _M_device; 9642: }; 9642: 9642: 9642: 9642: } 9642: # 46 "/usr/include/c++/13/mutex" 2 3 9642: # 1 "/usr/include/c++/13/bits/unique_lock.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/unique_lock.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/unique_lock.h" 3 9642: # 43 "/usr/include/c++/13/bits/unique_lock.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 58 "/usr/include/c++/13/bits/unique_lock.h" 3 9642: template 9642: class unique_lock 9642: { 9642: public: 9642: typedef _Mutex mutex_type; 9642: 9642: unique_lock() noexcept 9642: : _M_device(0), _M_owns(false) 9642: { } 9642: 9642: explicit unique_lock(mutex_type& __m) 9642: : _M_device(std::__addressof(__m)), _M_owns(false) 9642: { 9642: lock(); 9642: _M_owns = true; 9642: } 9642: 9642: unique_lock(mutex_type& __m, defer_lock_t) noexcept 9642: : _M_device(std::__addressof(__m)), _M_owns(false) 9642: { } 9642: 9642: unique_lock(mutex_type& __m, try_to_lock_t) 9642: : _M_device(std::__addressof(__m)), _M_owns(_M_device->try_lock()) 9642: { } 9642: 9642: unique_lock(mutex_type& __m, adopt_lock_t) noexcept 9642: : _M_device(std::__addressof(__m)), _M_owns(true) 9642: { 9642: 9642: } 9642: 9642: template 9642: unique_lock(mutex_type& __m, 9642: const chrono::time_point<_Clock, _Duration>& __atime) 9642: : _M_device(std::__addressof(__m)), 9642: _M_owns(_M_device->try_lock_until(__atime)) 9642: { } 9642: 9642: template 9642: unique_lock(mutex_type& __m, 9642: const chrono::duration<_Rep, _Period>& __rtime) 9642: : _M_device(std::__addressof(__m)), 9642: _M_owns(_M_device->try_lock_for(__rtime)) 9642: { } 9642: 9642: ~unique_lock() 9642: { 9642: if (_M_owns) 9642: unlock(); 9642: } 9642: 9642: unique_lock(const unique_lock&) = delete; 9642: unique_lock& operator=(const unique_lock&) = delete; 9642: 9642: unique_lock(unique_lock&& __u) noexcept 9642: : _M_device(__u._M_device), _M_owns(__u._M_owns) 9642: { 9642: __u._M_device = 0; 9642: __u._M_owns = false; 9642: } 9642: 9642: unique_lock& operator=(unique_lock&& __u) noexcept 9642: { 9642: if(_M_owns) 9642: unlock(); 9642: 9642: unique_lock(std::move(__u)).swap(*this); 9642: 9642: __u._M_device = 0; 9642: __u._M_owns = false; 9642: 9642: return *this; 9642: } 9642: 9642: void 9642: lock() 9642: { 9642: if (!_M_device) 9642: __throw_system_error(int(errc::operation_not_permitted)); 9642: else if (_M_owns) 9642: __throw_system_error(int(errc::resource_deadlock_would_occur)); 9642: else 9642: { 9642: _M_device->lock(); 9642: _M_owns = true; 9642: } 9642: } 9642: 9642: [[__nodiscard__]] 9642: bool 9642: try_lock() 9642: { 9642: if (!_M_device) 9642: __throw_system_error(int(errc::operation_not_permitted)); 9642: else if (_M_owns) 9642: __throw_system_error(int(errc::resource_deadlock_would_occur)); 9642: else 9642: { 9642: _M_owns = _M_device->try_lock(); 9642: return _M_owns; 9642: } 9642: } 9642: 9642: template 9642: [[__nodiscard__]] 9642: bool 9642: try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime) 9642: { 9642: if (!_M_device) 9642: __throw_system_error(int(errc::operation_not_permitted)); 9642: else if (_M_owns) 9642: __throw_system_error(int(errc::resource_deadlock_would_occur)); 9642: else 9642: { 9642: _M_owns = _M_device->try_lock_until(__atime); 9642: return _M_owns; 9642: } 9642: } 9642: 9642: template 9642: [[__nodiscard__]] 9642: bool 9642: try_lock_for(const chrono::duration<_Rep, _Period>& __rtime) 9642: { 9642: if (!_M_device) 9642: __throw_system_error(int(errc::operation_not_permitted)); 9642: else if (_M_owns) 9642: __throw_system_error(int(errc::resource_deadlock_would_occur)); 9642: else 9642: { 9642: _M_owns = _M_device->try_lock_for(__rtime); 9642: return _M_owns; 9642: } 9642: } 9642: 9642: void 9642: unlock() 9642: { 9642: if (!_M_owns) 9642: __throw_system_error(int(errc::operation_not_permitted)); 9642: else if (_M_device) 9642: { 9642: _M_device->unlock(); 9642: _M_owns = false; 9642: } 9642: } 9642: 9642: void 9642: swap(unique_lock& __u) noexcept 9642: { 9642: std::swap(_M_device, __u._M_device); 9642: std::swap(_M_owns, __u._M_owns); 9642: } 9642: 9642: mutex_type* 9642: release() noexcept 9642: { 9642: mutex_type* __ret = _M_device; 9642: _M_device = 0; 9642: _M_owns = false; 9642: return __ret; 9642: } 9642: 9642: [[__nodiscard__]] 9642: bool 9642: owns_lock() const noexcept 9642: { return _M_owns; } 9642: 9642: explicit operator bool() const noexcept 9642: { return owns_lock(); } 9642: 9642: [[__nodiscard__]] 9642: mutex_type* 9642: mutex() const noexcept 9642: { return _M_device; } 9642: 9642: private: 9642: mutex_type* _M_device; 9642: bool _M_owns; 9642: }; 9642: 9642: 9642: 9642: template 9642: inline void 9642: swap(unique_lock<_Mutex>& __x, unique_lock<_Mutex>& __y) noexcept 9642: { __x.swap(__y); } 9642: 9642: 9642: } 9642: # 47 "/usr/include/c++/13/mutex" 2 3 9642: # 57 "/usr/include/c++/13/mutex" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 70 "/usr/include/c++/13/mutex" 3 9642: class __recursive_mutex_base 9642: { 9642: protected: 9642: typedef __gthread_recursive_mutex_t __native_type; 9642: 9642: __recursive_mutex_base(const __recursive_mutex_base&) = delete; 9642: __recursive_mutex_base& operator=(const __recursive_mutex_base&) = delete; 9642: 9642: 9642: __native_type _M_mutex = { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { 0 } } }; 9642: 9642: __recursive_mutex_base() = default; 9642: # 94 "/usr/include/c++/13/mutex" 3 9642: }; 9642: # 106 "/usr/include/c++/13/mutex" 3 9642: class recursive_mutex : private __recursive_mutex_base 9642: { 9642: public: 9642: typedef __native_type* native_handle_type; 9642: 9642: recursive_mutex() = default; 9642: ~recursive_mutex() = default; 9642: 9642: recursive_mutex(const recursive_mutex&) = delete; 9642: recursive_mutex& operator=(const recursive_mutex&) = delete; 9642: 9642: void 9642: lock() 9642: { 9642: int __e = __gthread_recursive_mutex_lock(&_M_mutex); 9642: 9642: 9642: if (__e) 9642: __throw_system_error(__e); 9642: } 9642: 9642: [[__nodiscard__]] 9642: bool 9642: try_lock() noexcept 9642: { 9642: 9642: return !__gthread_recursive_mutex_trylock(&_M_mutex); 9642: } 9642: 9642: void 9642: unlock() 9642: { 9642: 9642: __gthread_recursive_mutex_unlock(&_M_mutex); 9642: } 9642: 9642: native_handle_type 9642: native_handle() noexcept 9642: { return &_M_mutex; } 9642: }; 9642: 9642: 9642: 9642: 9642: template 9642: class __timed_mutex_impl 9642: { 9642: protected: 9642: template 9642: bool 9642: _M_try_lock_for(const chrono::duration<_Rep, _Period>& __rtime) 9642: { 9642: 9642: using __clock = chrono::steady_clock; 9642: 9642: 9642: 9642: 9642: auto __rt = chrono::duration_cast<__clock::duration>(__rtime); 9642: if (ratio_greater<__clock::period, _Period>()) 9642: ++__rt; 9642: return _M_try_lock_until(__clock::now() + __rt); 9642: } 9642: 9642: template 9642: bool 9642: _M_try_lock_until(const chrono::time_point& __atime) 9642: { 9642: auto __s = chrono::time_point_cast(__atime); 9642: auto __ns = chrono::duration_cast(__atime - __s); 9642: 9642: __gthread_time_t __ts = { 9642: static_cast(__s.time_since_epoch().count()), 9642: static_cast(__ns.count()) 9642: }; 9642: 9642: return static_cast<_Derived*>(this)->_M_timedlock(__ts); 9642: } 9642: 9642: 9642: template 9642: bool 9642: _M_try_lock_until(const chrono::time_point& __atime) 9642: { 9642: auto __s = chrono::time_point_cast(__atime); 9642: auto __ns = chrono::duration_cast(__atime - __s); 9642: 9642: __gthread_time_t __ts = { 9642: static_cast(__s.time_since_epoch().count()), 9642: static_cast(__ns.count()) 9642: }; 9642: 9642: return static_cast<_Derived*>(this)->_M_clocklock(1, 9642: __ts); 9642: } 9642: 9642: 9642: template 9642: bool 9642: _M_try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: auto __now = _Clock::now(); 9642: do { 9642: auto __rtime = __atime - __now; 9642: if (_M_try_lock_for(__rtime)) 9642: return true; 9642: __now = _Clock::now(); 9642: } while (__atime > __now); 9642: return false; 9642: } 9642: }; 9642: # 235 "/usr/include/c++/13/mutex" 3 9642: class timed_mutex 9642: : private __mutex_base, public __timed_mutex_impl 9642: { 9642: public: 9642: typedef __native_type* native_handle_type; 9642: 9642: timed_mutex() = default; 9642: ~timed_mutex() = default; 9642: 9642: timed_mutex(const timed_mutex&) = delete; 9642: timed_mutex& operator=(const timed_mutex&) = delete; 9642: 9642: void 9642: lock() 9642: { 9642: int __e = __gthread_mutex_lock(&_M_mutex); 9642: 9642: 9642: if (__e) 9642: __throw_system_error(__e); 9642: } 9642: 9642: [[__nodiscard__]] 9642: bool 9642: try_lock() noexcept 9642: { 9642: 9642: return !__gthread_mutex_trylock(&_M_mutex); 9642: } 9642: 9642: template 9642: [[__nodiscard__]] 9642: bool 9642: try_lock_for(const chrono::duration<_Rep, _Period>& __rtime) 9642: { return _M_try_lock_for(__rtime); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: bool 9642: try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime) 9642: { return _M_try_lock_until(__atime); } 9642: 9642: void 9642: unlock() 9642: { 9642: 9642: __gthread_mutex_unlock(&_M_mutex); 9642: } 9642: 9642: native_handle_type 9642: native_handle() noexcept 9642: { return &_M_mutex; } 9642: 9642: private: 9642: friend class __timed_mutex_impl; 9642: 9642: bool 9642: _M_timedlock(const __gthread_time_t& __ts) 9642: { return !__gthread_mutex_timedlock(&_M_mutex, &__ts); } 9642: 9642: 9642: bool 9642: _M_clocklock(clockid_t __clockid, const __gthread_time_t& __ts) 9642: { return !pthread_mutex_clocklock(&_M_mutex, __clockid, &__ts); } 9642: 9642: }; 9642: # 312 "/usr/include/c++/13/mutex" 3 9642: class recursive_timed_mutex 9642: : private __recursive_mutex_base, 9642: public __timed_mutex_impl 9642: { 9642: public: 9642: typedef __native_type* native_handle_type; 9642: 9642: recursive_timed_mutex() = default; 9642: ~recursive_timed_mutex() = default; 9642: 9642: recursive_timed_mutex(const recursive_timed_mutex&) = delete; 9642: recursive_timed_mutex& operator=(const recursive_timed_mutex&) = delete; 9642: 9642: void 9642: lock() 9642: { 9642: int __e = __gthread_recursive_mutex_lock(&_M_mutex); 9642: 9642: 9642: if (__e) 9642: __throw_system_error(__e); 9642: } 9642: 9642: [[__nodiscard__]] 9642: bool 9642: try_lock() noexcept 9642: { 9642: 9642: return !__gthread_recursive_mutex_trylock(&_M_mutex); 9642: } 9642: 9642: template 9642: [[__nodiscard__]] 9642: bool 9642: try_lock_for(const chrono::duration<_Rep, _Period>& __rtime) 9642: { return _M_try_lock_for(__rtime); } 9642: 9642: template 9642: [[__nodiscard__]] 9642: bool 9642: try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime) 9642: { return _M_try_lock_until(__atime); } 9642: 9642: void 9642: unlock() 9642: { 9642: 9642: __gthread_recursive_mutex_unlock(&_M_mutex); 9642: } 9642: 9642: native_handle_type 9642: native_handle() noexcept 9642: { return &_M_mutex; } 9642: 9642: private: 9642: friend class __timed_mutex_impl; 9642: 9642: bool 9642: _M_timedlock(const __gthread_time_t& __ts) 9642: { return !__gthread_recursive_mutex_timedlock(&_M_mutex, &__ts); } 9642: 9642: 9642: bool 9642: _M_clocklock(clockid_t __clockid, const __gthread_time_t& __ts) 9642: { return !pthread_mutex_clocklock(&_M_mutex, __clockid, &__ts); } 9642: 9642: }; 9642: # 559 "/usr/include/c++/13/mutex" 3 9642: namespace __detail 9642: { 9642: 9642: template 9642: inline int 9642: __try_lock_impl(_Lockable& __l) 9642: { 9642: if (unique_lock<_Lockable> __lock{__l, try_to_lock}) 9642: { 9642: __lock.release(); 9642: return -1; 9642: } 9642: else 9642: return 0; 9642: } 9642: 9642: 9642: 9642: template 9642: inline int 9642: __try_lock_impl(_L0& __l0, _Lockables&... __lockables) 9642: { 9642: 9642: if constexpr ((is_same_v<_L0, _Lockables> && ...)) 9642: { 9642: constexpr int _Np = 1 + sizeof...(_Lockables); 9642: unique_lock<_L0> __locks[_Np] = { 9642: {__l0, defer_lock}, {__lockables, defer_lock}... 9642: }; 9642: for (int __i = 0; __i < _Np; ++__i) 9642: { 9642: if (!__locks[__i].try_lock()) 9642: { 9642: const int __failed = __i; 9642: while (__i--) 9642: __locks[__i].unlock(); 9642: return __failed; 9642: } 9642: } 9642: for (auto& __l : __locks) 9642: __l.release(); 9642: return -1; 9642: } 9642: else 9642: 9642: if (unique_lock<_L0> __lock{__l0, try_to_lock}) 9642: { 9642: int __idx = __detail::__try_lock_impl(__lockables...); 9642: if (__idx == -1) 9642: { 9642: __lock.release(); 9642: return -1; 9642: } 9642: return __idx + 1; 9642: } 9642: else 9642: return 0; 9642: } 9642: 9642: } 9642: # 631 "/usr/include/c++/13/mutex" 3 9642: template 9642: [[__nodiscard__]] 9642: inline int 9642: try_lock(_L1& __l1, _L2& __l2, _L3&... __l3) 9642: { 9642: return __detail::__try_lock_impl(__l1, __l2, __l3...); 9642: } 9642: 9642: 9642: namespace __detail 9642: { 9642: 9642: 9642: 9642: 9642: 9642: template 9642: void 9642: __lock_impl(int& __i, int __depth, _L0& __l0, _L1&... __l1) 9642: { 9642: while (__i >= __depth) 9642: { 9642: if (__i == __depth) 9642: { 9642: int __failed = 1; 9642: { 9642: unique_lock<_L0> __first(__l0); 9642: __failed += __detail::__try_lock_impl(__l1...); 9642: if (!__failed) 9642: { 9642: __i = -1; 9642: __first.release(); 9642: return; 9642: } 9642: } 9642: 9642: __gthread_yield(); 9642: 9642: constexpr auto __n = 1 + sizeof...(_L1); 9642: __i = (__depth + __failed) % __n; 9642: } 9642: else 9642: __detail::__lock_impl(__i, __depth + 1, __l1..., __l0); 9642: } 9642: } 9642: 9642: } 9642: # 691 "/usr/include/c++/13/mutex" 3 9642: template 9642: void 9642: lock(_L1& __l1, _L2& __l2, _L3&... __l3) 9642: { 9642: 9642: if constexpr (is_same_v<_L1, _L2> && (is_same_v<_L1, _L3> && ...)) 9642: { 9642: constexpr int _Np = 2 + sizeof...(_L3); 9642: unique_lock<_L1> __locks[] = { 9642: {__l1, defer_lock}, {__l2, defer_lock}, {__l3, defer_lock}... 9642: }; 9642: int __first = 0; 9642: do { 9642: __locks[__first].lock(); 9642: for (int __j = 1; __j < _Np; ++__j) 9642: { 9642: const int __idx = (__first + __j) % _Np; 9642: if (!__locks[__idx].try_lock()) 9642: { 9642: for (int __k = __j; __k != 0; --__k) 9642: __locks[(__first + __k - 1) % _Np].unlock(); 9642: __first = __idx; 9642: break; 9642: } 9642: } 9642: } while (!__locks[__first].owns_lock()); 9642: 9642: for (auto& __l : __locks) 9642: __l.release(); 9642: } 9642: else 9642: 9642: { 9642: int __i = 0; 9642: __detail::__lock_impl(__i, 0, __l1, __l2, __l3...); 9642: } 9642: } 9642: # 739 "/usr/include/c++/13/mutex" 3 9642: template 9642: class scoped_lock 9642: { 9642: public: 9642: explicit scoped_lock(_MutexTypes&... __m) : _M_devices(std::tie(__m...)) 9642: { std::lock(__m...); } 9642: 9642: explicit scoped_lock(adopt_lock_t, _MutexTypes&... __m) noexcept 9642: : _M_devices(std::tie(__m...)) 9642: { } 9642: 9642: ~scoped_lock() 9642: { std::apply([](auto&... __m) { (__m.unlock(), ...); }, _M_devices); } 9642: 9642: scoped_lock(const scoped_lock&) = delete; 9642: scoped_lock& operator=(const scoped_lock&) = delete; 9642: 9642: private: 9642: tuple<_MutexTypes&...> _M_devices; 9642: }; 9642: 9642: template<> 9642: class scoped_lock<> 9642: { 9642: public: 9642: explicit scoped_lock() = default; 9642: explicit scoped_lock(adopt_lock_t) noexcept { } 9642: ~scoped_lock() = default; 9642: 9642: scoped_lock(const scoped_lock&) = delete; 9642: scoped_lock& operator=(const scoped_lock&) = delete; 9642: }; 9642: 9642: template 9642: class scoped_lock<_Mutex> 9642: { 9642: public: 9642: using mutex_type = _Mutex; 9642: 9642: explicit scoped_lock(mutex_type& __m) : _M_device(__m) 9642: { _M_device.lock(); } 9642: 9642: explicit scoped_lock(adopt_lock_t, mutex_type& __m) noexcept 9642: : _M_device(__m) 9642: { } 9642: 9642: ~scoped_lock() 9642: { _M_device.unlock(); } 9642: 9642: scoped_lock(const scoped_lock&) = delete; 9642: scoped_lock& operator=(const scoped_lock&) = delete; 9642: 9642: private: 9642: mutex_type& _M_device; 9642: }; 9642: 9642: 9642: 9642: 9642: struct once_flag 9642: { 9642: constexpr once_flag() noexcept = default; 9642: 9642: 9642: once_flag(const once_flag&) = delete; 9642: 9642: once_flag& operator=(const once_flag&) = delete; 9642: 9642: private: 9642: 9642: 9642: __gthread_once_t _M_once = 0; 9642: 9642: struct _Prepare_execution; 9642: 9642: template 9642: friend void 9642: call_once(once_flag& __once, _Callable&& __f, _Args&&... __args); 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: extern __thread void* __once_callable; 9642: extern __thread void (*__once_call)(); 9642: 9642: 9642: struct once_flag::_Prepare_execution 9642: { 9642: template 9642: explicit 9642: _Prepare_execution(_Callable& __c) 9642: { 9642: 9642: __once_callable = std::__addressof(__c); 9642: 9642: __once_call = [] { (*static_cast<_Callable*>(__once_callable))(); }; 9642: } 9642: 9642: ~_Prepare_execution() 9642: { 9642: 9642: __once_callable = nullptr; 9642: __once_call = nullptr; 9642: } 9642: 9642: _Prepare_execution(const _Prepare_execution&) = delete; 9642: _Prepare_execution& operator=(const _Prepare_execution&) = delete; 9642: }; 9642: # 891 "/usr/include/c++/13/mutex" 3 9642: extern "C" void __once_proxy(void); 9642: 9642: 9642: template 9642: void 9642: call_once(once_flag& __once, _Callable&& __f, _Args&&... __args) 9642: { 9642: 9642: auto __callable = [&] { 9642: std::__invoke(std::forward<_Callable>(__f), 9642: std::forward<_Args>(__args)...); 9642: }; 9642: 9642: once_flag::_Prepare_execution __exec(__callable); 9642: 9642: 9642: if (int __e = __gthread_once(&__once._M_once, &__once_proxy)) 9642: __throw_system_error(__e); 9642: } 9642: # 1012 "/usr/include/c++/13/mutex" 3 9642: 9642: } 9642: # 14 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 2 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 19 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 9642: 9642: # 19 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 9642: namespace rocksdb { 9642: # 31 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 9642: enum Tickers : uint32_t { 9642: 9642: 9642: 9642: 9642: BLOCK_CACHE_MISS = 0, 9642: 9642: 9642: 9642: 9642: BLOCK_CACHE_HIT, 9642: 9642: BLOCK_CACHE_ADD, 9642: 9642: BLOCK_CACHE_ADD_FAILURES, 9642: 9642: BLOCK_CACHE_INDEX_MISS, 9642: 9642: BLOCK_CACHE_INDEX_HIT, 9642: 9642: BLOCK_CACHE_INDEX_ADD, 9642: 9642: BLOCK_CACHE_INDEX_BYTES_INSERT, 9642: 9642: BLOCK_CACHE_FILTER_MISS, 9642: 9642: BLOCK_CACHE_FILTER_HIT, 9642: 9642: BLOCK_CACHE_FILTER_ADD, 9642: 9642: BLOCK_CACHE_FILTER_BYTES_INSERT, 9642: 9642: BLOCK_CACHE_DATA_MISS, 9642: 9642: BLOCK_CACHE_DATA_HIT, 9642: 9642: BLOCK_CACHE_DATA_ADD, 9642: 9642: BLOCK_CACHE_DATA_BYTES_INSERT, 9642: 9642: BLOCK_CACHE_BYTES_READ, 9642: 9642: BLOCK_CACHE_BYTES_WRITE, 9642: 9642: BLOCK_CACHE_COMPRESSION_DICT_MISS, 9642: BLOCK_CACHE_COMPRESSION_DICT_HIT, 9642: BLOCK_CACHE_COMPRESSION_DICT_ADD, 9642: BLOCK_CACHE_COMPRESSION_DICT_BYTES_INSERT, 9642: 9642: 9642: 9642: BLOCK_CACHE_ADD_REDUNDANT, 9642: 9642: 9642: BLOCK_CACHE_INDEX_ADD_REDUNDANT, 9642: 9642: 9642: BLOCK_CACHE_FILTER_ADD_REDUNDANT, 9642: 9642: 9642: BLOCK_CACHE_DATA_ADD_REDUNDANT, 9642: 9642: 9642: 9642: BLOCK_CACHE_COMPRESSION_DICT_ADD_REDUNDANT, 9642: 9642: 9642: SECONDARY_CACHE_HITS, 9642: 9642: 9642: SECONDARY_CACHE_FILTER_HITS, 9642: SECONDARY_CACHE_INDEX_HITS, 9642: SECONDARY_CACHE_DATA_HITS, 9642: 9642: 9642: COMPRESSED_SECONDARY_CACHE_DUMMY_HITS, 9642: COMPRESSED_SECONDARY_CACHE_HITS, 9642: COMPRESSED_SECONDARY_CACHE_PROMOTIONS, 9642: COMPRESSED_SECONDARY_CACHE_PROMOTION_SKIPS, 9642: 9642: 9642: BLOOM_FILTER_USEFUL, 9642: 9642: BLOOM_FILTER_FULL_POSITIVE, 9642: 9642: 9642: BLOOM_FILTER_FULL_TRUE_POSITIVE, 9642: 9642: 9642: 9642: BLOOM_FILTER_PREFIX_CHECKED, 9642: 9642: BLOOM_FILTER_PREFIX_USEFUL, 9642: 9642: 9642: 9642: BLOOM_FILTER_PREFIX_TRUE_POSITIVE, 9642: 9642: 9642: PERSISTENT_CACHE_HIT, 9642: 9642: PERSISTENT_CACHE_MISS, 9642: 9642: 9642: SIM_BLOCK_CACHE_HIT, 9642: 9642: SIM_BLOCK_CACHE_MISS, 9642: 9642: 9642: MEMTABLE_HIT, 9642: 9642: MEMTABLE_MISS, 9642: 9642: 9642: GET_HIT_L0, 9642: 9642: GET_HIT_L1, 9642: 9642: GET_HIT_L2_AND_UP, 9642: 9642: 9642: 9642: 9642: 9642: COMPACTION_KEY_DROP_NEWER_ENTRY, 9642: 9642: COMPACTION_KEY_DROP_OBSOLETE, 9642: COMPACTION_KEY_DROP_RANGE_DEL, 9642: COMPACTION_KEY_DROP_USER, 9642: COMPACTION_RANGE_DEL_DROP_OBSOLETE, 9642: 9642: COMPACTION_OPTIMIZED_DEL_DROP_OBSOLETE, 9642: 9642: COMPACTION_CANCELLED, 9642: 9642: 9642: NUMBER_KEYS_WRITTEN, 9642: 9642: NUMBER_KEYS_READ, 9642: 9642: NUMBER_KEYS_UPDATED, 9642: 9642: 9642: BYTES_WRITTEN, 9642: 9642: 9642: 9642: 9642: BYTES_READ, 9642: 9642: NUMBER_DB_SEEK, 9642: NUMBER_DB_NEXT, 9642: NUMBER_DB_PREV, 9642: 9642: NUMBER_DB_SEEK_FOUND, 9642: NUMBER_DB_NEXT_FOUND, 9642: NUMBER_DB_PREV_FOUND, 9642: 9642: 9642: ITER_BYTES_READ, 9642: 9642: NUMBER_ITER_SKIP, 9642: 9642: 9642: NUMBER_OF_RESEEKS_IN_ITERATION, 9642: 9642: NO_ITERATOR_CREATED, 9642: NO_ITERATOR_DELETED, 9642: 9642: NO_FILE_OPENS, 9642: NO_FILE_ERRORS, 9642: 9642: STALL_MICROS, 9642: 9642: 9642: DB_MUTEX_WAIT_MICROS, 9642: 9642: 9642: NUMBER_MULTIGET_CALLS, 9642: NUMBER_MULTIGET_KEYS_READ, 9642: NUMBER_MULTIGET_BYTES_READ, 9642: 9642: 9642: 9642: NUMBER_MULTIGET_KEYS_FOUND, 9642: 9642: NUMBER_MERGE_FAILURES, 9642: 9642: 9642: 9642: GET_UPDATES_SINCE_CALLS, 9642: WAL_FILE_SYNCED, 9642: WAL_FILE_BYTES, 9642: 9642: 9642: 9642: WRITE_DONE_BY_SELF, 9642: WRITE_DONE_BY_OTHER, 9642: WRITE_WITH_WAL, 9642: COMPACT_READ_BYTES, 9642: COMPACT_WRITE_BYTES, 9642: FLUSH_WRITE_BYTES, 9642: 9642: 9642: COMPACT_READ_BYTES_MARKED, 9642: COMPACT_READ_BYTES_PERIODIC, 9642: COMPACT_READ_BYTES_TTL, 9642: COMPACT_WRITE_BYTES_MARKED, 9642: COMPACT_WRITE_BYTES_PERIODIC, 9642: COMPACT_WRITE_BYTES_TTL, 9642: 9642: 9642: 9642: NUMBER_DIRECT_LOAD_TABLE_PROPERTIES, 9642: NUMBER_SUPERVERSION_ACQUIRES, 9642: NUMBER_SUPERVERSION_RELEASES, 9642: NUMBER_SUPERVERSION_CLEANUPS, 9642: 9642: 9642: NUMBER_BLOCK_COMPRESSED, 9642: NUMBER_BLOCK_DECOMPRESSED, 9642: 9642: 9642: 9642: BYTES_COMPRESSED_FROM, 9642: 9642: 9642: BYTES_COMPRESSED_TO, 9642: 9642: 9642: 9642: 9642: BYTES_COMPRESSION_BYPASSED, 9642: 9642: 9642: 9642: 9642: 9642: BYTES_COMPRESSION_REJECTED, 9642: 9642: 9642: NUMBER_BLOCK_COMPRESSION_BYPASSED, 9642: 9642: NUMBER_BLOCK_COMPRESSION_REJECTED, 9642: 9642: 9642: 9642: BYTES_DECOMPRESSED_FROM, 9642: 9642: 9642: BYTES_DECOMPRESSED_TO, 9642: 9642: 9642: MERGE_OPERATION_TOTAL_TIME, 9642: FILTER_OPERATION_TOTAL_TIME, 9642: COMPACTION_CPU_TOTAL_TIME, 9642: 9642: 9642: ROW_CACHE_HIT, 9642: ROW_CACHE_MISS, 9642: 9642: 9642: 9642: 9642: 9642: 9642: READ_AMP_ESTIMATE_USEFUL_BYTES, 9642: READ_AMP_TOTAL_READ_BYTES, 9642: 9642: 9642: NUMBER_RATE_LIMITER_DRAINS, 9642: 9642: 9642: 9642: BLOB_DB_NUM_PUT, 9642: 9642: BLOB_DB_NUM_WRITE, 9642: 9642: BLOB_DB_NUM_GET, 9642: 9642: BLOB_DB_NUM_MULTIGET, 9642: 9642: 9642: BLOB_DB_NUM_SEEK, 9642: 9642: BLOB_DB_NUM_NEXT, 9642: 9642: BLOB_DB_NUM_PREV, 9642: 9642: BLOB_DB_NUM_KEYS_WRITTEN, 9642: 9642: BLOB_DB_NUM_KEYS_READ, 9642: 9642: 9642: BLOB_DB_BYTES_WRITTEN, 9642: 9642: 9642: BLOB_DB_BYTES_READ, 9642: 9642: 9642: BLOB_DB_WRITE_INLINED, 9642: 9642: 9642: BLOB_DB_WRITE_INLINED_TTL, 9642: 9642: 9642: BLOB_DB_WRITE_BLOB, 9642: 9642: 9642: BLOB_DB_WRITE_BLOB_TTL, 9642: 9642: BLOB_DB_BLOB_FILE_BYTES_WRITTEN, 9642: 9642: BLOB_DB_BLOB_FILE_BYTES_READ, 9642: 9642: BLOB_DB_BLOB_FILE_SYNCED, 9642: 9642: 9642: BLOB_DB_BLOB_INDEX_EXPIRED_COUNT, 9642: 9642: 9642: BLOB_DB_BLOB_INDEX_EXPIRED_SIZE, 9642: 9642: 9642: BLOB_DB_BLOB_INDEX_EVICTED_COUNT, 9642: 9642: 9642: BLOB_DB_BLOB_INDEX_EVICTED_SIZE, 9642: 9642: 9642: BLOB_DB_GC_NUM_FILES, 9642: 9642: 9642: BLOB_DB_GC_NUM_NEW_FILES, 9642: 9642: BLOB_DB_GC_FAILURES, 9642: 9642: BLOB_DB_GC_NUM_KEYS_RELOCATED, 9642: 9642: BLOB_DB_GC_BYTES_RELOCATED, 9642: 9642: 9642: BLOB_DB_FIFO_NUM_FILES_EVICTED, 9642: 9642: 9642: BLOB_DB_FIFO_NUM_KEYS_EVICTED, 9642: 9642: 9642: BLOB_DB_FIFO_BYTES_EVICTED, 9642: 9642: 9642: 9642: BLOB_DB_CACHE_MISS, 9642: 9642: BLOB_DB_CACHE_HIT, 9642: 9642: BLOB_DB_CACHE_ADD, 9642: 9642: BLOB_DB_CACHE_ADD_FAILURES, 9642: 9642: BLOB_DB_CACHE_BYTES_READ, 9642: 9642: BLOB_DB_CACHE_BYTES_WRITE, 9642: 9642: 9642: 9642: 9642: TXN_PREPARE_MUTEX_OVERHEAD, 9642: 9642: TXN_OLD_COMMIT_MAP_MUTEX_OVERHEAD, 9642: 9642: TXN_DUPLICATE_KEY_OVERHEAD, 9642: 9642: TXN_SNAPSHOT_MUTEX_OVERHEAD, 9642: 9642: TXN_GET_TRY_AGAIN, 9642: 9642: 9642: 9642: FILES_MARKED_TRASH, 9642: 9642: FILES_DELETED_FROM_TRASH_QUEUE, 9642: 9642: 9642: FILES_DELETED_IMMEDIATELY, 9642: 9642: 9642: 9642: ERROR_HANDLER_BG_ERROR_COUNT, 9642: ERROR_HANDLER_BG_IO_ERROR_COUNT, 9642: ERROR_HANDLER_BG_RETRYABLE_IO_ERROR_COUNT, 9642: ERROR_HANDLER_AUTORESUME_COUNT, 9642: ERROR_HANDLER_AUTORESUME_RETRY_TOTAL_COUNT, 9642: ERROR_HANDLER_AUTORESUME_SUCCESS_COUNT, 9642: 9642: 9642: 9642: MEMTABLE_PAYLOAD_BYTES_AT_FLUSH, 9642: 9642: MEMTABLE_GARBAGE_BYTES_AT_FLUSH, 9642: 9642: 9642: VERIFY_CHECKSUM_READ_BYTES, 9642: 9642: 9642: BACKUP_READ_BYTES, 9642: BACKUP_WRITE_BYTES, 9642: 9642: 9642: REMOTE_COMPACT_READ_BYTES, 9642: REMOTE_COMPACT_WRITE_BYTES, 9642: 9642: 9642: HOT_FILE_READ_BYTES, 9642: WARM_FILE_READ_BYTES, 9642: COLD_FILE_READ_BYTES, 9642: HOT_FILE_READ_COUNT, 9642: WARM_FILE_READ_COUNT, 9642: COLD_FILE_READ_COUNT, 9642: 9642: 9642: LAST_LEVEL_READ_BYTES, 9642: LAST_LEVEL_READ_COUNT, 9642: NON_LAST_LEVEL_READ_BYTES, 9642: NON_LAST_LEVEL_READ_COUNT, 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: LAST_LEVEL_SEEK_FILTERED, 9642: 9642: 9642: LAST_LEVEL_SEEK_FILTER_MATCH, 9642: 9642: 9642: LAST_LEVEL_SEEK_DATA, 9642: 9642: 9642: LAST_LEVEL_SEEK_DATA_USEFUL_NO_FILTER, 9642: 9642: 9642: LAST_LEVEL_SEEK_DATA_USEFUL_FILTER_MATCH, 9642: 9642: NON_LAST_LEVEL_SEEK_FILTERED, 9642: NON_LAST_LEVEL_SEEK_FILTER_MATCH, 9642: NON_LAST_LEVEL_SEEK_DATA, 9642: NON_LAST_LEVEL_SEEK_DATA_USEFUL_NO_FILTER, 9642: NON_LAST_LEVEL_SEEK_DATA_USEFUL_FILTER_MATCH, 9642: 9642: 9642: BLOCK_CHECKSUM_COMPUTE_COUNT, 9642: 9642: 9642: 9642: BLOCK_CHECKSUM_MISMATCH_COUNT, 9642: 9642: MULTIGET_COROUTINE_COUNT, 9642: 9642: 9642: READ_ASYNC_MICROS, 9642: 9642: ASYNC_READ_ERROR_COUNT, 9642: 9642: 9642: 9642: 9642: TABLE_OPEN_PREFETCH_TAIL_MISS, 9642: 9642: 9642: 9642: TABLE_OPEN_PREFETCH_TAIL_HIT, 9642: 9642: 9642: 9642: TIMESTAMP_FILTER_TABLE_CHECKED, 9642: 9642: TIMESTAMP_FILTER_TABLE_FILTERED, 9642: 9642: 9642: 9642: READAHEAD_TRIMMED, 9642: 9642: 9642: FIFO_MAX_SIZE_COMPACTIONS, 9642: FIFO_TTL_COMPACTIONS, 9642: 9642: 9642: PREFETCH_BYTES, 9642: 9642: 9642: PREFETCH_BYTES_USEFUL, 9642: 9642: 9642: PREFETCH_HITS, 9642: 9642: 9642: SST_FOOTER_CORRUPTION_COUNT, 9642: 9642: TICKER_ENUM_MAX 9642: }; 9642: 9642: 9642: 9642: extern const std::vector> TickersNameMap; 9642: # 550 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 9642: enum Histograms : uint32_t { 9642: DB_GET = 0, 9642: DB_WRITE, 9642: COMPACTION_TIME, 9642: COMPACTION_CPU_TIME, 9642: SUBCOMPACTION_SETUP_TIME, 9642: TABLE_SYNC_MICROS, 9642: COMPACTION_OUTFILE_SYNC_MICROS, 9642: WAL_FILE_SYNC_MICROS, 9642: MANIFEST_FILE_SYNC_MICROS, 9642: 9642: TABLE_OPEN_IO_MICROS, 9642: DB_MULTIGET, 9642: READ_BLOCK_COMPACTION_MICROS, 9642: READ_BLOCK_GET_MICROS, 9642: WRITE_RAW_BLOCK_MICROS, 9642: NUM_FILES_IN_SINGLE_COMPACTION, 9642: DB_SEEK, 9642: WRITE_STALL, 9642: 9642: SST_READ_MICROS, 9642: 9642: 9642: FILE_READ_FLUSH_MICROS, 9642: FILE_READ_COMPACTION_MICROS, 9642: FILE_READ_DB_OPEN_MICROS, 9642: 9642: 9642: FILE_READ_GET_MICROS, 9642: FILE_READ_MULTIGET_MICROS, 9642: FILE_READ_DB_ITERATOR_MICROS, 9642: FILE_READ_VERIFY_DB_CHECKSUM_MICROS, 9642: FILE_READ_VERIFY_FILE_CHECKSUMS_MICROS, 9642: 9642: 9642: SST_WRITE_MICROS, 9642: 9642: 9642: FILE_WRITE_FLUSH_MICROS, 9642: FILE_WRITE_COMPACTION_MICROS, 9642: FILE_WRITE_DB_OPEN_MICROS, 9642: 9642: 9642: NUM_SUBCOMPACTIONS_SCHEDULED, 9642: 9642: BYTES_PER_READ, 9642: BYTES_PER_WRITE, 9642: BYTES_PER_MULTIGET, 9642: 9642: COMPRESSION_TIMES_NANOS, 9642: DECOMPRESSION_TIMES_NANOS, 9642: 9642: 9642: READ_NUM_MERGE_OPERANDS, 9642: 9642: 9642: 9642: BLOB_DB_KEY_SIZE, 9642: 9642: BLOB_DB_VALUE_SIZE, 9642: 9642: 9642: BLOB_DB_WRITE_MICROS, 9642: 9642: BLOB_DB_GET_MICROS, 9642: 9642: BLOB_DB_MULTIGET_MICROS, 9642: 9642: 9642: BLOB_DB_SEEK_MICROS, 9642: 9642: BLOB_DB_NEXT_MICROS, 9642: 9642: BLOB_DB_PREV_MICROS, 9642: 9642: BLOB_DB_BLOB_FILE_WRITE_MICROS, 9642: 9642: BLOB_DB_BLOB_FILE_READ_MICROS, 9642: 9642: BLOB_DB_BLOB_FILE_SYNC_MICROS, 9642: 9642: BLOB_DB_COMPRESSION_MICROS, 9642: 9642: BLOB_DB_DECOMPRESSION_MICROS, 9642: 9642: FLUSH_TIME, 9642: SST_BATCH_SIZE, 9642: 9642: 9642: MULTIGET_IO_BATCH_SIZE, 9642: 9642: 9642: NUM_INDEX_AND_FILTER_BLOCKS_READ_PER_LEVEL, 9642: 9642: NUM_SST_READ_PER_LEVEL, 9642: 9642: NUM_LEVEL_READ_PER_MULTIGET, 9642: 9642: 9642: ERROR_HANDLER_AUTORESUME_RETRY_COUNT, 9642: 9642: 9642: ASYNC_READ_BYTES, 9642: POLL_WAIT_MICROS, 9642: 9642: 9642: PREFETCHED_BYTES_DISCARDED, 9642: 9642: 9642: ASYNC_PREFETCH_ABORT_MICROS, 9642: 9642: 9642: 9642: TABLE_OPEN_PREFETCH_TAIL_READ_BYTES, 9642: 9642: HISTOGRAM_ENUM_MAX 9642: }; 9642: 9642: extern const std::vector> HistogramsNameMap; 9642: 9642: struct HistogramData { 9642: double median; 9642: double percentile95; 9642: double percentile99; 9642: double average; 9642: double standard_deviation; 9642: 9642: 9642: double max = 0.0; 9642: uint64_t count = 0; 9642: uint64_t sum = 0; 9642: double min = 0.0; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: enum StatsLevel : uint8_t { 9642: 9642: kDisableAll, 9642: 9642: kExceptTickers = kDisableAll, 9642: 9642: kExceptHistogramOrTimers, 9642: 9642: kExceptTimers, 9642: 9642: 9642: kExceptDetailedTimers, 9642: 9642: 9642: kExceptTimeForMutex, 9642: 9642: 9642: 9642: kAll, 9642: }; 9642: # 722 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 9642: class Statistics : public Customizable { 9642: public: 9642: ~Statistics() override {} 9642: static const char* Type() { return "Statistics"; } 9642: static Status CreateFromString(const ConfigOptions& opts, 9642: const std::string& value, 9642: std::shared_ptr* result); 9642: 9642: 9642: 9642: const char* Name() const override { return ""; } 9642: virtual uint64_t getTickerCount(uint32_t tickerType) const = 0; 9642: virtual void histogramData(uint32_t type, 9642: HistogramData* const data) const = 0; 9642: virtual std::string getHistogramString(uint32_t ) const { return ""; } 9642: virtual void recordTick(uint32_t tickerType, uint64_t count = 1) = 0; 9642: virtual void setTickerCount(uint32_t tickerType, uint64_t count) = 0; 9642: virtual uint64_t getAndResetTickerCount(uint32_t tickerType) = 0; 9642: virtual void reportTimeToHistogram(uint32_t histogramType, uint64_t time) { 9642: if (get_stats_level() <= StatsLevel::kExceptTimers) { 9642: return; 9642: } 9642: recordInHistogram(histogramType, time); 9642: } 9642: 9642: 9642: 9642: virtual void measureTime(uint32_t , uint64_t ) { 9642: 9642: 9642: # 751 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 3 4 9642: (static_cast ( 9642: # 751 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 9642: false 9642: # 751 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 751 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 9642: "false" 9642: # 751 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 751 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 9642: ; 9642: } 9642: virtual void recordInHistogram(uint32_t histogramType, uint64_t time) { 9642: 9642: 9642: 9642: 9642: measureTime(histogramType, time); 9642: } 9642: 9642: 9642: virtual Status Reset() { return Status::NotSupported("Not implemented"); } 9642: 9642: using Customizable::ToString; 9642: 9642: virtual std::string ToString() const { 9642: 9642: return std::string("ToString(): not implemented"); 9642: } 9642: 9642: virtual bool getTickerMap(std::map*) const { 9642: 9642: return false; 9642: } 9642: 9642: 9642: virtual bool HistEnabledForType(uint32_t type) const { 9642: return type < HISTOGRAM_ENUM_MAX; 9642: } 9642: void set_stats_level(StatsLevel sl) { 9642: stats_level_.store(sl, std::memory_order_relaxed); 9642: } 9642: StatsLevel get_stats_level() const { 9642: return stats_level_.load(std::memory_order_relaxed); 9642: } 9642: 9642: private: 9642: std::atomic stats_level_{kExceptDetailedTimers}; 9642: }; 9642: 9642: 9642: std::shared_ptr CreateDBStatistics(); 9642: 9642: } 9642: # 18 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: class HistogramBucketMapper { 9642: public: 9642: HistogramBucketMapper(); 9642: 9642: 9642: size_t IndexForValue(uint64_t value) const; 9642: 9642: 9642: size_t BucketCount() const { return bucketValues_.size(); } 9642: 9642: uint64_t LastValue() const { return maxBucketValue_; } 9642: 9642: uint64_t FirstValue() const { return minBucketValue_; } 9642: 9642: uint64_t BucketLimit(const size_t bucketNumber) const { 9642: 9642: # 36 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 3 4 9642: (static_cast ( 9642: # 36 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 9642: bucketNumber < BucketCount() 9642: # 36 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 36 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 9642: "bucketNumber < BucketCount()" 9642: # 36 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 36 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 9642: ; 9642: return bucketValues_[bucketNumber]; 9642: } 9642: 9642: private: 9642: std::vector bucketValues_; 9642: uint64_t maxBucketValue_; 9642: uint64_t minBucketValue_; 9642: }; 9642: 9642: struct HistogramStat { 9642: HistogramStat(); 9642: ~HistogramStat() {} 9642: 9642: HistogramStat(const HistogramStat&) = delete; 9642: HistogramStat& operator=(const HistogramStat&) = delete; 9642: 9642: void Clear(); 9642: bool Empty() const; 9642: void Add(uint64_t value); 9642: void Merge(const HistogramStat& other); 9642: 9642: inline uint64_t min() const { return min_.load(std::memory_order_relaxed); } 9642: inline uint64_t max() const { return max_.load(std::memory_order_relaxed); } 9642: inline uint64_t num() const { return num_.load(std::memory_order_relaxed); } 9642: inline uint64_t sum() const { return sum_.load(std::memory_order_relaxed); } 9642: inline uint64_t sum_squares() const { 9642: return sum_squares_.load(std::memory_order_relaxed); 9642: } 9642: inline uint64_t bucket_at(size_t b) const { 9642: return buckets_[b].load(std::memory_order_relaxed); 9642: } 9642: 9642: double Median() const; 9642: double Percentile(double p) const; 9642: double Average() const; 9642: double StandardDeviation() const; 9642: void Data(HistogramData* const data) const; 9642: std::string ToString() const; 9642: 9642: 9642: 9642: 9642: std::atomic_uint_fast64_t min_; 9642: std::atomic_uint_fast64_t max_; 9642: std::atomic_uint_fast64_t num_; 9642: std::atomic_uint_fast64_t sum_; 9642: std::atomic_uint_fast64_t sum_squares_; 9642: std::atomic_uint_fast64_t buckets_[109]; 9642: const uint64_t num_buckets_; 9642: }; 9642: 9642: class Histogram { 9642: public: 9642: Histogram() {} 9642: virtual ~Histogram(){} 9642: 9642: virtual void Clear() = 0; 9642: virtual bool Empty() const = 0; 9642: virtual void Add(uint64_t value) = 0; 9642: virtual void Merge(const Histogram&) = 0; 9642: 9642: virtual std::string ToString() const = 0; 9642: virtual const char* Name() const = 0; 9642: virtual uint64_t min() const = 0; 9642: virtual uint64_t max() const = 0; 9642: virtual uint64_t num() const = 0; 9642: virtual double Median() const = 0; 9642: virtual double Percentile(double p) const = 0; 9642: virtual double Average() const = 0; 9642: virtual double StandardDeviation() const = 0; 9642: virtual void Data(HistogramData* const data) const = 0; 9642: }; 9642: 9642: class HistogramImpl : public Histogram { 9642: public: 9642: HistogramImpl() { Clear(); } 9642: 9642: HistogramImpl(const HistogramImpl&) = delete; 9642: HistogramImpl& operator=(const HistogramImpl&) = delete; 9642: 9642: void Clear() override; 9642: bool Empty() const override; 9642: void Add(uint64_t value) override; 9642: void Merge(const Histogram& other) override; 9642: void Merge(const HistogramImpl& other); 9642: 9642: std::string ToString() const override; 9642: const char* Name() const override { return "HistogramImpl"; } 9642: uint64_t min() const override { return stats_.min(); } 9642: uint64_t max() const override { return stats_.max(); } 9642: uint64_t num() const override { return stats_.num(); } 9642: double Median() const override; 9642: double Percentile(double p) const override; 9642: double Average() const override; 9642: double StandardDeviation() const override; 9642: void Data(HistogramData* const data) const override; 9642: 9642: virtual ~HistogramImpl() {} 9642: 9642: inline HistogramStat& TEST_GetStats() { return stats_; } 9642: 9642: private: 9642: HistogramStat stats_; 9642: std::mutex mutex_; 9642: }; 9642: 9642: } 9642: # 13 "/build/reproducible-path/rocksdb-9.3.1/monitoring/statistics_impl.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/port/likely.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/port/likely.h" 9642: 9642: # 14 "/build/reproducible-path/rocksdb-9.3.1/monitoring/statistics_impl.h" 2 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/cassert" 1 3 9642: # 41 "/usr/include/c++/13/cassert" 3 9642: 9642: # 42 "/usr/include/c++/13/cassert" 3 9642: 9642: 9642: # 1 "/usr/include/assert.h" 1 3 4 9642: # 45 "/usr/include/c++/13/cassert" 2 3 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 2 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/assert.h" 1 3 4 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 2 9642: # 19 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/port/lang.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 54 "/build/reproducible-path/rocksdb-9.3.1/port/lang.h" 9642: constexpr bool kMustFreeHeapAllocations = false; 9642: # 20 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 2 9642: 9642: 9642: static_assert(true, "Semicolon required"); 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: template 9642: inline T BottomNBits(T v, int nbits) { 9642: static_assert(std::is_integral_v, "non-integral type"); 9642: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 9642: 9642: # 32 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 9642: (static_cast ( 9642: # 32 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: nbits >= 0 9642: # 32 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 32 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: "nbits >= 0" 9642: # 32 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 32 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: ; 9642: 9642: # 33 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 9642: (static_cast ( 9642: # 33 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: nbits < int{8 * sizeof(T)} 9642: # 33 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 33 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: "nbits < int{8 * sizeof(T)}" 9642: # 33 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 33 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: ; 9642: # 44 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: return static_cast(v & ((T{1} << nbits) - 1)); 9642: } 9642: 9642: 9642: 9642: template 9642: inline int FloorLog2(T v) { 9642: static_assert(std::is_integral_v, "non-integral type"); 9642: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 9642: 9642: # 53 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 9642: (static_cast ( 9642: # 53 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: v > 0 9642: # 53 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 53 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: "v > 0" 9642: # 53 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 53 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: ; 9642: # 74 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: static_assert(sizeof(T) <= sizeof(unsigned long long), "type too big"); 9642: if (sizeof(T) <= sizeof(unsigned int)) { 9642: int lz = __builtin_clz(static_cast(v)); 9642: return int{sizeof(unsigned int)} * 8 - 1 - lz; 9642: } else if (sizeof(T) <= sizeof(unsigned long)) { 9642: int lz = __builtin_clzl(static_cast(v)); 9642: return int{sizeof(unsigned long)} * 8 - 1 - lz; 9642: } else { 9642: int lz = __builtin_clzll(static_cast(v)); 9642: return int{sizeof(unsigned long long)} * 8 - 1 - lz; 9642: } 9642: 9642: } 9642: 9642: 9642: template 9642: constexpr int ConstexprFloorLog2(T v) { 9642: 9642: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 9642: int rv = 0; 9642: while (v > T{1}) { 9642: ++rv; 9642: v >>= 1; 9642: } 9642: return rv; 9642: } 9642: 9642: 9642: template 9642: inline int CountTrailingZeroBits(T v) { 9642: static_assert(std::is_integral_v, "non-integral type"); 9642: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 9642: 9642: # 106 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 9642: (static_cast ( 9642: # 106 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: v != 0 9642: # 106 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 106 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: "v != 0" 9642: # 106 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 106 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: ; 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: static_assert(sizeof(T) <= sizeof(unsigned long long), "type too big"); 9642: if (sizeof(T) <= sizeof(unsigned int)) { 9642: return __builtin_ctz(static_cast(v)); 9642: } else if (sizeof(T) <= sizeof(unsigned long)) { 9642: return __builtin_ctzl(static_cast(v)); 9642: } else { 9642: return __builtin_ctzll(static_cast(v)); 9642: } 9642: 9642: } 9642: # 172 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: template 9642: inline int BitsSetToOne(T v) { 9642: static_assert(std::is_integral_v, "non-integral type"); 9642: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 9642: # 209 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: static_assert(sizeof(T) <= sizeof(unsigned long long), "type too big"); 9642: if (sizeof(T) < sizeof(unsigned int)) { 9642: 9642: constexpr auto mm = 8 * sizeof(unsigned int) - 1; 9642: 9642: constexpr unsigned int m = (1U << ((8 * sizeof(T)) & mm)) - 1; 9642: return __builtin_popcount(static_cast(v) & m); 9642: } else if (sizeof(T) == sizeof(unsigned int)) { 9642: return __builtin_popcount(static_cast(v)); 9642: } else if (sizeof(T) <= sizeof(unsigned long)) { 9642: return __builtin_popcountl(static_cast(v)); 9642: } else { 9642: return __builtin_popcountll(static_cast(v)); 9642: } 9642: 9642: } 9642: 9642: template 9642: inline int BitParity(T v) { 9642: static_assert(std::is_integral_v, "non-integral type"); 9642: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 9642: 9642: 9642: 9642: 9642: 9642: static_assert(sizeof(T) <= sizeof(unsigned long long), "type too big"); 9642: if (sizeof(T) <= sizeof(unsigned int)) { 9642: 9642: return __builtin_parity(static_cast(v)); 9642: } else if (sizeof(T) <= sizeof(unsigned long)) { 9642: return __builtin_parityl(static_cast(v)); 9642: } else { 9642: return __builtin_parityll(static_cast(v)); 9642: } 9642: 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: inline T EndianSwapValue(T v) { 9642: static_assert(std::is_integral_v, "non-integral type"); 9642: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 9642: # 264 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: if (sizeof(T) == 2) { 9642: return static_cast(__builtin_bswap16(static_cast(v))); 9642: } else if (sizeof(T) == 4) { 9642: return static_cast(__builtin_bswap32(static_cast(v))); 9642: } else if (sizeof(T) == 8) { 9642: return static_cast(__builtin_bswap64(static_cast(v))); 9642: } 9642: 9642: 9642: T ret_val = 0; 9642: for (std::size_t i = 0; i < sizeof(T); ++i) { 9642: ret_val |= ((v >> (8 * i)) & 0xff) << (8 * (sizeof(T) - 1 - i)); 9642: } 9642: return ret_val; 9642: } 9642: 9642: 9642: template 9642: inline T ReverseBits(T v) { 9642: static_assert(std::is_integral_v, "non-integral type"); 9642: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 9642: 9642: T r = EndianSwapValue(v); 9642: const T kHighestByte = T{1} << ((sizeof(T) - 1) * 8); 9642: const T kEveryByte = kHighestByte | (kHighestByte / 255); 9642: 9642: r = ((r & (kEveryByte * 0x0f)) << 4) | ((r >> 4) & (kEveryByte * 0x0f)); 9642: r = ((r & (kEveryByte * 0x33)) << 2) | ((r >> 2) & (kEveryByte * 0x33)); 9642: r = ((r & (kEveryByte * 0x55)) << 1) | ((r >> 1) & (kEveryByte * 0x55)); 9642: 9642: return r; 9642: } 9642: # 317 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 9642: template 9642: inline T DownwardInvolution(T v) { 9642: static_assert(std::is_integral_v, "non-integral type"); 9642: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 9642: static_assert(sizeof(T) <= 8, "only supported up to 64 bits"); 9642: 9642: uint64_t r = static_cast(v); 9642: if constexpr (sizeof(T) > 4) { 9642: r ^= r >> 32; 9642: } 9642: if constexpr (sizeof(T) > 2) { 9642: r ^= (r & 0xffff0000ffff0000U) >> 16; 9642: } 9642: if constexpr (sizeof(T) > 1) { 9642: r ^= (r & 0xff00ff00ff00ff00U) >> 8; 9642: } 9642: r ^= (r & 0xf0f0f0f0f0f0f0f0U) >> 4; 9642: r ^= (r & 0xccccccccccccccccU) >> 2; 9642: r ^= (r & 0xaaaaaaaaaaaaaaaaU) >> 1; 9642: return static_cast(r); 9642: } 9642: 9642: 9642: 9642: template 9642: inline std::conditional_t BitwiseAnd(A a, B b) { 9642: static_assert(std::is_integral_v, "non-integral type"); 9642: static_assert(std::is_integral_v, "non-integral type"); 9642: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 9642: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 9642: using Smaller = std::conditional_t; 9642: return static_cast(a & b); 9642: } 9642: 9642: } 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/random.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/util/random.h" 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/random" 1 3 9642: # 32 "/usr/include/c++/13/random" 3 9642: 9642: # 33 "/usr/include/c++/13/random" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/cmath" 1 3 9642: # 39 "/usr/include/c++/13/cmath" 3 9642: 9642: # 40 "/usr/include/c++/13/cmath" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/math.h" 1 3 4 9642: # 27 "/usr/include/math.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 9642: # 28 "/usr/include/math.h" 2 3 4 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 34 "/usr/include/math.h" 3 4 9642: extern "C" { 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/math-vector.h" 1 3 4 9642: # 27 "/usr/include/arm-linux-gnueabihf/bits/math-vector.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/libm-simd-decl-stubs.h" 1 3 4 9642: # 28 "/usr/include/arm-linux-gnueabihf/bits/math-vector.h" 2 3 4 9642: # 41 "/usr/include/math.h" 2 3 4 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/floatn.h" 1 3 4 9642: # 44 "/usr/include/math.h" 2 3 4 9642: # 152 "/usr/include/math.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/flt-eval-method.h" 1 3 4 9642: # 153 "/usr/include/math.h" 2 3 4 9642: # 163 "/usr/include/math.h" 3 4 9642: typedef float float_t; 9642: typedef double double_t; 9642: # 204 "/usr/include/math.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/fp-logb.h" 1 3 4 9642: # 205 "/usr/include/math.h" 2 3 4 9642: # 247 "/usr/include/math.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/fp-fast.h" 1 3 4 9642: # 248 "/usr/include/math.h" 2 3 4 9642: 9642: 9642: 9642: enum 9642: { 9642: FP_INT_UPWARD = 9642: 9642: 0, 9642: FP_INT_DOWNWARD = 9642: 9642: 1, 9642: FP_INT_TOWARDZERO = 9642: 9642: 2, 9642: FP_INT_TONEARESTFROMZERO = 9642: 9642: 3, 9642: FP_INT_TONEAREST = 9642: 9642: 4, 9642: }; 9642: # 312 "/usr/include/math.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-helper-functions.h" 1 3 4 9642: # 20 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-helper-functions.h" 3 4 9642: extern int __fpclassify (double __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: extern int __signbit (double __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern int __isinf (double __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: extern int __finite (double __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: extern int __isnan (double __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: extern int __iseqsig (double __x, double __y) noexcept (true); 9642: 9642: 9642: extern int __issignaling (double __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: # 313 "/usr/include/math.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 1 3 4 9642: # 53 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern double acos (double __x) noexcept (true); extern double __acos (double __x) noexcept (true); 9642: 9642: extern double asin (double __x) noexcept (true); extern double __asin (double __x) noexcept (true); 9642: 9642: extern double atan (double __x) noexcept (true); extern double __atan (double __x) noexcept (true); 9642: 9642: extern double atan2 (double __y, double __x) noexcept (true); extern double __atan2 (double __y, double __x) noexcept (true); 9642: 9642: 9642: extern double cos (double __x) noexcept (true); extern double __cos (double __x) noexcept (true); 9642: 9642: extern double sin (double __x) noexcept (true); extern double __sin (double __x) noexcept (true); 9642: 9642: extern double tan (double __x) noexcept (true); extern double __tan (double __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern double cosh (double __x) noexcept (true); extern double __cosh (double __x) noexcept (true); 9642: 9642: extern double sinh (double __x) noexcept (true); extern double __sinh (double __x) noexcept (true); 9642: 9642: extern double tanh (double __x) noexcept (true); extern double __tanh (double __x) noexcept (true); 9642: 9642: 9642: 9642: extern void sincos (double __x, double *__sinx, double *__cosx) noexcept (true); extern void __sincos (double __x, double *__sinx, double *__cosx) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: 9642: extern double acosh (double __x) noexcept (true); extern double __acosh (double __x) noexcept (true); 9642: 9642: extern double asinh (double __x) noexcept (true); extern double __asinh (double __x) noexcept (true); 9642: 9642: extern double atanh (double __x) noexcept (true); extern double __atanh (double __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern double exp (double __x) noexcept (true); extern double __exp (double __x) noexcept (true); 9642: 9642: 9642: extern double frexp (double __x, int *__exponent) noexcept (true); extern double __frexp (double __x, int *__exponent) noexcept (true); 9642: 9642: 9642: extern double ldexp (double __x, int __exponent) noexcept (true); extern double __ldexp (double __x, int __exponent) noexcept (true); 9642: 9642: 9642: extern double log (double __x) noexcept (true); extern double __log (double __x) noexcept (true); 9642: 9642: 9642: extern double log10 (double __x) noexcept (true); extern double __log10 (double __x) noexcept (true); 9642: 9642: 9642: extern double modf (double __x, double *__iptr) noexcept (true); extern double __modf (double __x, double *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: 9642: extern double exp10 (double __x) noexcept (true); extern double __exp10 (double __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern double expm1 (double __x) noexcept (true); extern double __expm1 (double __x) noexcept (true); 9642: 9642: 9642: extern double log1p (double __x) noexcept (true); extern double __log1p (double __x) noexcept (true); 9642: 9642: 9642: extern double logb (double __x) noexcept (true); extern double __logb (double __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern double exp2 (double __x) noexcept (true); extern double __exp2 (double __x) noexcept (true); 9642: 9642: 9642: extern double log2 (double __x) noexcept (true); extern double __log2 (double __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern double pow (double __x, double __y) noexcept (true); extern double __pow (double __x, double __y) noexcept (true); 9642: 9642: 9642: extern double sqrt (double __x) noexcept (true); extern double __sqrt (double __x) noexcept (true); 9642: 9642: 9642: 9642: extern double hypot (double __x, double __y) noexcept (true); extern double __hypot (double __x, double __y) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern double cbrt (double __x) noexcept (true); extern double __cbrt (double __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern double ceil (double __x) noexcept (true) __attribute__ ((__const__)); extern double __ceil (double __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern double fabs (double __x) noexcept (true) __attribute__ ((__const__)); extern double __fabs (double __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern double floor (double __x) noexcept (true) __attribute__ ((__const__)); extern double __floor (double __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern double fmod (double __x, double __y) noexcept (true); extern double __fmod (double __x, double __y) noexcept (true); 9642: # 183 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern int finite (double __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: extern double drem (double __x, double __y) noexcept (true); extern double __drem (double __x, double __y) noexcept (true); 9642: 9642: 9642: 9642: extern double significand (double __x) noexcept (true); extern double __significand (double __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern double copysign (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __copysign (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern double nan (const char *__tagb) noexcept (true); extern double __nan (const char *__tagb) noexcept (true); 9642: # 220 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern double j0 (double) noexcept (true); extern double __j0 (double) noexcept (true); 9642: extern double j1 (double) noexcept (true); extern double __j1 (double) noexcept (true); 9642: extern double jn (int, double) noexcept (true); extern double __jn (int, double) noexcept (true); 9642: extern double y0 (double) noexcept (true); extern double __y0 (double) noexcept (true); 9642: extern double y1 (double) noexcept (true); extern double __y1 (double) noexcept (true); 9642: extern double yn (int, double) noexcept (true); extern double __yn (int, double) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern double erf (double) noexcept (true); extern double __erf (double) noexcept (true); 9642: extern double erfc (double) noexcept (true); extern double __erfc (double) noexcept (true); 9642: extern double lgamma (double) noexcept (true); extern double __lgamma (double) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern double tgamma (double) noexcept (true); extern double __tgamma (double) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern double gamma (double) noexcept (true); extern double __gamma (double) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern double lgamma_r (double, int *__signgamp) noexcept (true); extern double __lgamma_r (double, int *__signgamp) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern double rint (double __x) noexcept (true); extern double __rint (double __x) noexcept (true); 9642: 9642: 9642: extern double nextafter (double __x, double __y) noexcept (true); extern double __nextafter (double __x, double __y) noexcept (true); 9642: 9642: extern double nexttoward (double __x, long double __y) noexcept (true); extern double __nexttoward (double __x, long double __y) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern double nextdown (double __x) noexcept (true); extern double __nextdown (double __x) noexcept (true); 9642: 9642: extern double nextup (double __x) noexcept (true); extern double __nextup (double __x) noexcept (true); 9642: 9642: 9642: 9642: extern double remainder (double __x, double __y) noexcept (true); extern double __remainder (double __x, double __y) noexcept (true); 9642: 9642: 9642: 9642: extern double scalbn (double __x, int __n) noexcept (true); extern double __scalbn (double __x, int __n) noexcept (true); 9642: 9642: 9642: 9642: extern int ilogb (double __x) noexcept (true); extern int __ilogb (double __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern long int llogb (double __x) noexcept (true); extern long int __llogb (double __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern double scalbln (double __x, long int __n) noexcept (true); extern double __scalbln (double __x, long int __n) noexcept (true); 9642: 9642: 9642: 9642: extern double nearbyint (double __x) noexcept (true); extern double __nearbyint (double __x) noexcept (true); 9642: 9642: 9642: 9642: extern double round (double __x) noexcept (true) __attribute__ ((__const__)); extern double __round (double __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern double trunc (double __x) noexcept (true) __attribute__ ((__const__)); extern double __trunc (double __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern double remquo (double __x, double __y, int *__quo) noexcept (true); extern double __remquo (double __x, double __y, int *__quo) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern long int lrint (double __x) noexcept (true); extern long int __lrint (double __x) noexcept (true); 9642: __extension__ 9642: extern long long int llrint (double __x) noexcept (true); extern long long int __llrint (double __x) noexcept (true); 9642: 9642: 9642: 9642: extern long int lround (double __x) noexcept (true); extern long int __lround (double __x) noexcept (true); 9642: __extension__ 9642: extern long long int llround (double __x) noexcept (true); extern long long int __llround (double __x) noexcept (true); 9642: 9642: 9642: 9642: extern double fdim (double __x, double __y) noexcept (true); extern double __fdim (double __x, double __y) noexcept (true); 9642: 9642: 9642: 9642: extern double fmax (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmax (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern double fmin (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmin (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern double fma (double __x, double __y, double __z) noexcept (true); extern double __fma (double __x, double __y, double __z) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern double roundeven (double __x) noexcept (true) __attribute__ ((__const__)); extern double __roundeven (double __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern __intmax_t fromfp (double __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfp (double __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: extern __uintmax_t ufromfp (double __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfp (double __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: 9642: extern __intmax_t fromfpx (double __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpx (double __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: 9642: extern __uintmax_t ufromfpx (double __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpx (double __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: extern int canonicalize (double *__cx, const double *__x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern double fmaxmag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmaxmag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern double fminmag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fminmag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern double fmaximum (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmaximum (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern double fminimum (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fminimum (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern double fmaximum_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmaximum_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern double fminimum_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fminimum_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern double fmaximum_mag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmaximum_mag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern double fminimum_mag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fminimum_mag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern double fmaximum_mag_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmaximum_mag_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern double fminimum_mag_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fminimum_mag_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern int totalorder (const double *__x, const double *__y) noexcept (true) 9642: 9642: __attribute__ ((__pure__)); 9642: 9642: 9642: extern int totalordermag (const double *__x, const double *__y) noexcept (true) 9642: 9642: __attribute__ ((__pure__)); 9642: 9642: 9642: extern double getpayload (const double *__x) noexcept (true); extern double __getpayload (const double *__x) noexcept (true); 9642: 9642: 9642: extern int setpayload (double *__x, double __payload) noexcept (true); 9642: 9642: 9642: extern int setpayloadsig (double *__x, double __payload) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern double scalb (double __x, double __n) noexcept (true); extern double __scalb (double __x, double __n) noexcept (true); 9642: # 314 "/usr/include/math.h" 2 3 4 9642: # 329 "/usr/include/math.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-helper-functions.h" 1 3 4 9642: # 20 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-helper-functions.h" 3 4 9642: extern int __fpclassifyf (float __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: extern int __signbitf (float __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern int __isinff (float __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: extern int __finitef (float __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: extern int __isnanf (float __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: extern int __iseqsigf (float __x, float __y) noexcept (true); 9642: 9642: 9642: extern int __issignalingf (float __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: # 330 "/usr/include/math.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 1 3 4 9642: # 53 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern float acosf (float __x) noexcept (true); extern float __acosf (float __x) noexcept (true); 9642: 9642: extern float asinf (float __x) noexcept (true); extern float __asinf (float __x) noexcept (true); 9642: 9642: extern float atanf (float __x) noexcept (true); extern float __atanf (float __x) noexcept (true); 9642: 9642: extern float atan2f (float __y, float __x) noexcept (true); extern float __atan2f (float __y, float __x) noexcept (true); 9642: 9642: 9642: extern float cosf (float __x) noexcept (true); extern float __cosf (float __x) noexcept (true); 9642: 9642: extern float sinf (float __x) noexcept (true); extern float __sinf (float __x) noexcept (true); 9642: 9642: extern float tanf (float __x) noexcept (true); extern float __tanf (float __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern float coshf (float __x) noexcept (true); extern float __coshf (float __x) noexcept (true); 9642: 9642: extern float sinhf (float __x) noexcept (true); extern float __sinhf (float __x) noexcept (true); 9642: 9642: extern float tanhf (float __x) noexcept (true); extern float __tanhf (float __x) noexcept (true); 9642: 9642: 9642: 9642: extern void sincosf (float __x, float *__sinx, float *__cosx) noexcept (true); extern void __sincosf (float __x, float *__sinx, float *__cosx) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: 9642: extern float acoshf (float __x) noexcept (true); extern float __acoshf (float __x) noexcept (true); 9642: 9642: extern float asinhf (float __x) noexcept (true); extern float __asinhf (float __x) noexcept (true); 9642: 9642: extern float atanhf (float __x) noexcept (true); extern float __atanhf (float __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern float expf (float __x) noexcept (true); extern float __expf (float __x) noexcept (true); 9642: 9642: 9642: extern float frexpf (float __x, int *__exponent) noexcept (true); extern float __frexpf (float __x, int *__exponent) noexcept (true); 9642: 9642: 9642: extern float ldexpf (float __x, int __exponent) noexcept (true); extern float __ldexpf (float __x, int __exponent) noexcept (true); 9642: 9642: 9642: extern float logf (float __x) noexcept (true); extern float __logf (float __x) noexcept (true); 9642: 9642: 9642: extern float log10f (float __x) noexcept (true); extern float __log10f (float __x) noexcept (true); 9642: 9642: 9642: extern float modff (float __x, float *__iptr) noexcept (true); extern float __modff (float __x, float *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: 9642: extern float exp10f (float __x) noexcept (true); extern float __exp10f (float __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern float expm1f (float __x) noexcept (true); extern float __expm1f (float __x) noexcept (true); 9642: 9642: 9642: extern float log1pf (float __x) noexcept (true); extern float __log1pf (float __x) noexcept (true); 9642: 9642: 9642: extern float logbf (float __x) noexcept (true); extern float __logbf (float __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern float exp2f (float __x) noexcept (true); extern float __exp2f (float __x) noexcept (true); 9642: 9642: 9642: extern float log2f (float __x) noexcept (true); extern float __log2f (float __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern float powf (float __x, float __y) noexcept (true); extern float __powf (float __x, float __y) noexcept (true); 9642: 9642: 9642: extern float sqrtf (float __x) noexcept (true); extern float __sqrtf (float __x) noexcept (true); 9642: 9642: 9642: 9642: extern float hypotf (float __x, float __y) noexcept (true); extern float __hypotf (float __x, float __y) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern float cbrtf (float __x) noexcept (true); extern float __cbrtf (float __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern float ceilf (float __x) noexcept (true) __attribute__ ((__const__)); extern float __ceilf (float __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern float fabsf (float __x) noexcept (true) __attribute__ ((__const__)); extern float __fabsf (float __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern float floorf (float __x) noexcept (true) __attribute__ ((__const__)); extern float __floorf (float __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern float fmodf (float __x, float __y) noexcept (true); extern float __fmodf (float __x, float __y) noexcept (true); 9642: # 177 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern int isinff (float __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern int finitef (float __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: extern float dremf (float __x, float __y) noexcept (true); extern float __dremf (float __x, float __y) noexcept (true); 9642: 9642: 9642: 9642: extern float significandf (float __x) noexcept (true); extern float __significandf (float __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern float copysignf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __copysignf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern float nanf (const char *__tagb) noexcept (true); extern float __nanf (const char *__tagb) noexcept (true); 9642: # 213 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern int isnanf (float __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: 9642: extern float j0f (float) noexcept (true); extern float __j0f (float) noexcept (true); 9642: extern float j1f (float) noexcept (true); extern float __j1f (float) noexcept (true); 9642: extern float jnf (int, float) noexcept (true); extern float __jnf (int, float) noexcept (true); 9642: extern float y0f (float) noexcept (true); extern float __y0f (float) noexcept (true); 9642: extern float y1f (float) noexcept (true); extern float __y1f (float) noexcept (true); 9642: extern float ynf (int, float) noexcept (true); extern float __ynf (int, float) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern float erff (float) noexcept (true); extern float __erff (float) noexcept (true); 9642: extern float erfcf (float) noexcept (true); extern float __erfcf (float) noexcept (true); 9642: extern float lgammaf (float) noexcept (true); extern float __lgammaf (float) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern float tgammaf (float) noexcept (true); extern float __tgammaf (float) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern float gammaf (float) noexcept (true); extern float __gammaf (float) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern float lgammaf_r (float, int *__signgamp) noexcept (true); extern float __lgammaf_r (float, int *__signgamp) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern float rintf (float __x) noexcept (true); extern float __rintf (float __x) noexcept (true); 9642: 9642: 9642: extern float nextafterf (float __x, float __y) noexcept (true); extern float __nextafterf (float __x, float __y) noexcept (true); 9642: 9642: extern float nexttowardf (float __x, long double __y) noexcept (true); extern float __nexttowardf (float __x, long double __y) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern float nextdownf (float __x) noexcept (true); extern float __nextdownf (float __x) noexcept (true); 9642: 9642: extern float nextupf (float __x) noexcept (true); extern float __nextupf (float __x) noexcept (true); 9642: 9642: 9642: 9642: extern float remainderf (float __x, float __y) noexcept (true); extern float __remainderf (float __x, float __y) noexcept (true); 9642: 9642: 9642: 9642: extern float scalbnf (float __x, int __n) noexcept (true); extern float __scalbnf (float __x, int __n) noexcept (true); 9642: 9642: 9642: 9642: extern int ilogbf (float __x) noexcept (true); extern int __ilogbf (float __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern long int llogbf (float __x) noexcept (true); extern long int __llogbf (float __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern float scalblnf (float __x, long int __n) noexcept (true); extern float __scalblnf (float __x, long int __n) noexcept (true); 9642: 9642: 9642: 9642: extern float nearbyintf (float __x) noexcept (true); extern float __nearbyintf (float __x) noexcept (true); 9642: 9642: 9642: 9642: extern float roundf (float __x) noexcept (true) __attribute__ ((__const__)); extern float __roundf (float __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern float truncf (float __x) noexcept (true) __attribute__ ((__const__)); extern float __truncf (float __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern float remquof (float __x, float __y, int *__quo) noexcept (true); extern float __remquof (float __x, float __y, int *__quo) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern long int lrintf (float __x) noexcept (true); extern long int __lrintf (float __x) noexcept (true); 9642: __extension__ 9642: extern long long int llrintf (float __x) noexcept (true); extern long long int __llrintf (float __x) noexcept (true); 9642: 9642: 9642: 9642: extern long int lroundf (float __x) noexcept (true); extern long int __lroundf (float __x) noexcept (true); 9642: __extension__ 9642: extern long long int llroundf (float __x) noexcept (true); extern long long int __llroundf (float __x) noexcept (true); 9642: 9642: 9642: 9642: extern float fdimf (float __x, float __y) noexcept (true); extern float __fdimf (float __x, float __y) noexcept (true); 9642: 9642: 9642: 9642: extern float fmaxf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fmaxf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern float fminf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fminf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern float fmaf (float __x, float __y, float __z) noexcept (true); extern float __fmaf (float __x, float __y, float __z) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern float roundevenf (float __x) noexcept (true) __attribute__ ((__const__)); extern float __roundevenf (float __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern __intmax_t fromfpf (float __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpf (float __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: extern __uintmax_t ufromfpf (float __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpf (float __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: 9642: extern __intmax_t fromfpxf (float __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpxf (float __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: 9642: extern __uintmax_t ufromfpxf (float __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpxf (float __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: extern int canonicalizef (float *__cx, const float *__x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern float fmaxmagf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fmaxmagf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern float fminmagf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fminmagf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern float fmaximumf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fmaximumf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern float fminimumf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fminimumf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern float fmaximum_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fmaximum_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern float fminimum_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fminimum_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern float fmaximum_magf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fmaximum_magf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern float fminimum_magf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fminimum_magf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern float fmaximum_mag_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fmaximum_mag_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern float fminimum_mag_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fminimum_mag_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern int totalorderf (const float *__x, const float *__y) noexcept (true) 9642: 9642: __attribute__ ((__pure__)); 9642: 9642: 9642: extern int totalordermagf (const float *__x, const float *__y) noexcept (true) 9642: 9642: __attribute__ ((__pure__)); 9642: 9642: 9642: extern float getpayloadf (const float *__x) noexcept (true); extern float __getpayloadf (const float *__x) noexcept (true); 9642: 9642: 9642: extern int setpayloadf (float *__x, float __payload) noexcept (true); 9642: 9642: 9642: extern int setpayloadsigf (float *__x, float __payload) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern float scalbf (float __x, float __n) noexcept (true); extern float __scalbf (float __x, float __n) noexcept (true); 9642: # 331 "/usr/include/math.h" 2 3 4 9642: # 398 "/usr/include/math.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-helper-functions.h" 1 3 4 9642: # 20 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-helper-functions.h" 3 4 9642: extern int __fpclassifyl (long double __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: extern int __signbitl (long double __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern int __isinfl (long double __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: extern int __finitel (long double __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: extern int __isnanl (long double __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: extern int __iseqsigl (long double __x, long double __y) noexcept (true); 9642: 9642: 9642: extern int __issignalingl (long double __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: # 399 "/usr/include/math.h" 2 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 1 3 4 9642: # 53 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern long double acosl (long double __x) noexcept (true); extern long double __acosl (long double __x) noexcept (true); 9642: 9642: extern long double asinl (long double __x) noexcept (true); extern long double __asinl (long double __x) noexcept (true); 9642: 9642: extern long double atanl (long double __x) noexcept (true); extern long double __atanl (long double __x) noexcept (true); 9642: 9642: extern long double atan2l (long double __y, long double __x) noexcept (true); extern long double __atan2l (long double __y, long double __x) noexcept (true); 9642: 9642: 9642: extern long double cosl (long double __x) noexcept (true); extern long double __cosl (long double __x) noexcept (true); 9642: 9642: extern long double sinl (long double __x) noexcept (true); extern long double __sinl (long double __x) noexcept (true); 9642: 9642: extern long double tanl (long double __x) noexcept (true); extern long double __tanl (long double __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern long double coshl (long double __x) noexcept (true); extern long double __coshl (long double __x) noexcept (true); 9642: 9642: extern long double sinhl (long double __x) noexcept (true); extern long double __sinhl (long double __x) noexcept (true); 9642: 9642: extern long double tanhl (long double __x) noexcept (true); extern long double __tanhl (long double __x) noexcept (true); 9642: 9642: 9642: 9642: extern void sincosl (long double __x, long double *__sinx, long double *__cosx) noexcept (true); extern void __sincosl (long double __x, long double *__sinx, long double *__cosx) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: 9642: extern long double acoshl (long double __x) noexcept (true); extern long double __acoshl (long double __x) noexcept (true); 9642: 9642: extern long double asinhl (long double __x) noexcept (true); extern long double __asinhl (long double __x) noexcept (true); 9642: 9642: extern long double atanhl (long double __x) noexcept (true); extern long double __atanhl (long double __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern long double expl (long double __x) noexcept (true); extern long double __expl (long double __x) noexcept (true); 9642: 9642: 9642: extern long double frexpl (long double __x, int *__exponent) noexcept (true); extern long double __frexpl (long double __x, int *__exponent) noexcept (true); 9642: 9642: 9642: extern long double ldexpl (long double __x, int __exponent) noexcept (true); extern long double __ldexpl (long double __x, int __exponent) noexcept (true); 9642: 9642: 9642: extern long double logl (long double __x) noexcept (true); extern long double __logl (long double __x) noexcept (true); 9642: 9642: 9642: extern long double log10l (long double __x) noexcept (true); extern long double __log10l (long double __x) noexcept (true); 9642: 9642: 9642: extern long double modfl (long double __x, long double *__iptr) noexcept (true); extern long double __modfl (long double __x, long double *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: 9642: extern long double exp10l (long double __x) noexcept (true); extern long double __exp10l (long double __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern long double expm1l (long double __x) noexcept (true); extern long double __expm1l (long double __x) noexcept (true); 9642: 9642: 9642: extern long double log1pl (long double __x) noexcept (true); extern long double __log1pl (long double __x) noexcept (true); 9642: 9642: 9642: extern long double logbl (long double __x) noexcept (true); extern long double __logbl (long double __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern long double exp2l (long double __x) noexcept (true); extern long double __exp2l (long double __x) noexcept (true); 9642: 9642: 9642: extern long double log2l (long double __x) noexcept (true); extern long double __log2l (long double __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern long double powl (long double __x, long double __y) noexcept (true); extern long double __powl (long double __x, long double __y) noexcept (true); 9642: 9642: 9642: extern long double sqrtl (long double __x) noexcept (true); extern long double __sqrtl (long double __x) noexcept (true); 9642: 9642: 9642: 9642: extern long double hypotl (long double __x, long double __y) noexcept (true); extern long double __hypotl (long double __x, long double __y) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern long double cbrtl (long double __x) noexcept (true); extern long double __cbrtl (long double __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern long double ceill (long double __x) noexcept (true) __attribute__ ((__const__)); extern long double __ceill (long double __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern long double fabsl (long double __x) noexcept (true) __attribute__ ((__const__)); extern long double __fabsl (long double __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern long double floorl (long double __x) noexcept (true) __attribute__ ((__const__)); extern long double __floorl (long double __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern long double fmodl (long double __x, long double __y) noexcept (true); extern long double __fmodl (long double __x, long double __y) noexcept (true); 9642: # 177 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern int isinfl (long double __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern int finitel (long double __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: extern long double dreml (long double __x, long double __y) noexcept (true); extern long double __dreml (long double __x, long double __y) noexcept (true); 9642: 9642: 9642: 9642: extern long double significandl (long double __x) noexcept (true); extern long double __significandl (long double __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern long double copysignl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __copysignl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern long double nanl (const char *__tagb) noexcept (true); extern long double __nanl (const char *__tagb) noexcept (true); 9642: # 213 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern int isnanl (long double __value) noexcept (true) 9642: __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: 9642: extern long double j0l (long double) noexcept (true); extern long double __j0l (long double) noexcept (true); 9642: extern long double j1l (long double) noexcept (true); extern long double __j1l (long double) noexcept (true); 9642: extern long double jnl (int, long double) noexcept (true); extern long double __jnl (int, long double) noexcept (true); 9642: extern long double y0l (long double) noexcept (true); extern long double __y0l (long double) noexcept (true); 9642: extern long double y1l (long double) noexcept (true); extern long double __y1l (long double) noexcept (true); 9642: extern long double ynl (int, long double) noexcept (true); extern long double __ynl (int, long double) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern long double erfl (long double) noexcept (true); extern long double __erfl (long double) noexcept (true); 9642: extern long double erfcl (long double) noexcept (true); extern long double __erfcl (long double) noexcept (true); 9642: extern long double lgammal (long double) noexcept (true); extern long double __lgammal (long double) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern long double tgammal (long double) noexcept (true); extern long double __tgammal (long double) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern long double gammal (long double) noexcept (true); extern long double __gammal (long double) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern long double lgammal_r (long double, int *__signgamp) noexcept (true); extern long double __lgammal_r (long double, int *__signgamp) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern long double rintl (long double __x) noexcept (true); extern long double __rintl (long double __x) noexcept (true); 9642: 9642: 9642: extern long double nextafterl (long double __x, long double __y) noexcept (true); extern long double __nextafterl (long double __x, long double __y) noexcept (true); 9642: 9642: extern long double nexttowardl (long double __x, long double __y) noexcept (true); extern long double __nexttowardl (long double __x, long double __y) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern long double nextdownl (long double __x) noexcept (true); extern long double __nextdownl (long double __x) noexcept (true); 9642: 9642: extern long double nextupl (long double __x) noexcept (true); extern long double __nextupl (long double __x) noexcept (true); 9642: 9642: 9642: 9642: extern long double remainderl (long double __x, long double __y) noexcept (true); extern long double __remainderl (long double __x, long double __y) noexcept (true); 9642: 9642: 9642: 9642: extern long double scalbnl (long double __x, int __n) noexcept (true); extern long double __scalbnl (long double __x, int __n) noexcept (true); 9642: 9642: 9642: 9642: extern int ilogbl (long double __x) noexcept (true); extern int __ilogbl (long double __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern long int llogbl (long double __x) noexcept (true); extern long int __llogbl (long double __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern long double scalblnl (long double __x, long int __n) noexcept (true); extern long double __scalblnl (long double __x, long int __n) noexcept (true); 9642: 9642: 9642: 9642: extern long double nearbyintl (long double __x) noexcept (true); extern long double __nearbyintl (long double __x) noexcept (true); 9642: 9642: 9642: 9642: extern long double roundl (long double __x) noexcept (true) __attribute__ ((__const__)); extern long double __roundl (long double __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern long double truncl (long double __x) noexcept (true) __attribute__ ((__const__)); extern long double __truncl (long double __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern long double remquol (long double __x, long double __y, int *__quo) noexcept (true); extern long double __remquol (long double __x, long double __y, int *__quo) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern long int lrintl (long double __x) noexcept (true); extern long int __lrintl (long double __x) noexcept (true); 9642: __extension__ 9642: extern long long int llrintl (long double __x) noexcept (true); extern long long int __llrintl (long double __x) noexcept (true); 9642: 9642: 9642: 9642: extern long int lroundl (long double __x) noexcept (true); extern long int __lroundl (long double __x) noexcept (true); 9642: __extension__ 9642: extern long long int llroundl (long double __x) noexcept (true); extern long long int __llroundl (long double __x) noexcept (true); 9642: 9642: 9642: 9642: extern long double fdiml (long double __x, long double __y) noexcept (true); extern long double __fdiml (long double __x, long double __y) noexcept (true); 9642: 9642: 9642: 9642: extern long double fmaxl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fmaxl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern long double fminl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fminl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern long double fmal (long double __x, long double __y, long double __z) noexcept (true); extern long double __fmal (long double __x, long double __y, long double __z) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern long double roundevenl (long double __x) noexcept (true) __attribute__ ((__const__)); extern long double __roundevenl (long double __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern __intmax_t fromfpl (long double __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpl (long double __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: extern __uintmax_t ufromfpl (long double __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpl (long double __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: 9642: extern __intmax_t fromfpxl (long double __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpxl (long double __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: 9642: extern __uintmax_t ufromfpxl (long double __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpxl (long double __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: extern int canonicalizel (long double *__cx, const long double *__x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern long double fmaxmagl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fmaxmagl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern long double fminmagl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fminmagl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern long double fmaximuml (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fmaximuml (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern long double fminimuml (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fminimuml (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern long double fmaximum_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fmaximum_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern long double fminimum_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fminimum_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern long double fmaximum_magl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fmaximum_magl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern long double fminimum_magl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fminimum_magl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern long double fmaximum_mag_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fmaximum_mag_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern long double fminimum_mag_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fminimum_mag_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern int totalorderl (const long double *__x, const long double *__y) noexcept (true) 9642: 9642: __attribute__ ((__pure__)); 9642: 9642: 9642: extern int totalordermagl (const long double *__x, const long double *__y) noexcept (true) 9642: 9642: __attribute__ ((__pure__)); 9642: 9642: 9642: extern long double getpayloadl (const long double *__x) noexcept (true); extern long double __getpayloadl (const long double *__x) noexcept (true); 9642: 9642: 9642: extern int setpayloadl (long double *__x, long double __payload) noexcept (true); 9642: 9642: 9642: extern int setpayloadsigl (long double *__x, long double __payload) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern long double scalbl (long double __x, long double __n) noexcept (true); extern long double __scalbl (long double __x, long double __n) noexcept (true); 9642: # 400 "/usr/include/math.h" 2 3 4 9642: # 450 "/usr/include/math.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 1 3 4 9642: # 53 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern _Float32 acosf32 (_Float32 __x) noexcept (true); extern _Float32 __acosf32 (_Float32 __x) noexcept (true); 9642: 9642: extern _Float32 asinf32 (_Float32 __x) noexcept (true); extern _Float32 __asinf32 (_Float32 __x) noexcept (true); 9642: 9642: extern _Float32 atanf32 (_Float32 __x) noexcept (true); extern _Float32 __atanf32 (_Float32 __x) noexcept (true); 9642: 9642: extern _Float32 atan2f32 (_Float32 __y, _Float32 __x) noexcept (true); extern _Float32 __atan2f32 (_Float32 __y, _Float32 __x) noexcept (true); 9642: 9642: 9642: extern _Float32 cosf32 (_Float32 __x) noexcept (true); extern _Float32 __cosf32 (_Float32 __x) noexcept (true); 9642: 9642: extern _Float32 sinf32 (_Float32 __x) noexcept (true); extern _Float32 __sinf32 (_Float32 __x) noexcept (true); 9642: 9642: extern _Float32 tanf32 (_Float32 __x) noexcept (true); extern _Float32 __tanf32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float32 coshf32 (_Float32 __x) noexcept (true); extern _Float32 __coshf32 (_Float32 __x) noexcept (true); 9642: 9642: extern _Float32 sinhf32 (_Float32 __x) noexcept (true); extern _Float32 __sinhf32 (_Float32 __x) noexcept (true); 9642: 9642: extern _Float32 tanhf32 (_Float32 __x) noexcept (true); extern _Float32 __tanhf32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: 9642: extern void sincosf32 (_Float32 __x, _Float32 *__sinx, _Float32 *__cosx) noexcept (true); extern void __sincosf32 (_Float32 __x, _Float32 *__sinx, _Float32 *__cosx) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: 9642: extern _Float32 acoshf32 (_Float32 __x) noexcept (true); extern _Float32 __acoshf32 (_Float32 __x) noexcept (true); 9642: 9642: extern _Float32 asinhf32 (_Float32 __x) noexcept (true); extern _Float32 __asinhf32 (_Float32 __x) noexcept (true); 9642: 9642: extern _Float32 atanhf32 (_Float32 __x) noexcept (true); extern _Float32 __atanhf32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern _Float32 expf32 (_Float32 __x) noexcept (true); extern _Float32 __expf32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: extern _Float32 frexpf32 (_Float32 __x, int *__exponent) noexcept (true); extern _Float32 __frexpf32 (_Float32 __x, int *__exponent) noexcept (true); 9642: 9642: 9642: extern _Float32 ldexpf32 (_Float32 __x, int __exponent) noexcept (true); extern _Float32 __ldexpf32 (_Float32 __x, int __exponent) noexcept (true); 9642: 9642: 9642: extern _Float32 logf32 (_Float32 __x) noexcept (true); extern _Float32 __logf32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: extern _Float32 log10f32 (_Float32 __x) noexcept (true); extern _Float32 __log10f32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: extern _Float32 modff32 (_Float32 __x, _Float32 *__iptr) noexcept (true); extern _Float32 __modff32 (_Float32 __x, _Float32 *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: 9642: extern _Float32 exp10f32 (_Float32 __x) noexcept (true); extern _Float32 __exp10f32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float32 expm1f32 (_Float32 __x) noexcept (true); extern _Float32 __expm1f32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: extern _Float32 log1pf32 (_Float32 __x) noexcept (true); extern _Float32 __log1pf32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: extern _Float32 logbf32 (_Float32 __x) noexcept (true); extern _Float32 __logbf32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float32 exp2f32 (_Float32 __x) noexcept (true); extern _Float32 __exp2f32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: extern _Float32 log2f32 (_Float32 __x) noexcept (true); extern _Float32 __log2f32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern _Float32 powf32 (_Float32 __x, _Float32 __y) noexcept (true); extern _Float32 __powf32 (_Float32 __x, _Float32 __y) noexcept (true); 9642: 9642: 9642: extern _Float32 sqrtf32 (_Float32 __x) noexcept (true); extern _Float32 __sqrtf32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: 9642: extern _Float32 hypotf32 (_Float32 __x, _Float32 __y) noexcept (true); extern _Float32 __hypotf32 (_Float32 __x, _Float32 __y) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float32 cbrtf32 (_Float32 __x) noexcept (true); extern _Float32 __cbrtf32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern _Float32 ceilf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); extern _Float32 __ceilf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32 fabsf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fabsf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32 floorf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); extern _Float32 __floorf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32 fmodf32 (_Float32 __x, _Float32 __y) noexcept (true); extern _Float32 __fmodf32 (_Float32 __x, _Float32 __y) noexcept (true); 9642: # 198 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern _Float32 copysignf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __copysignf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern _Float32 nanf32 (const char *__tagb) noexcept (true); extern _Float32 __nanf32 (const char *__tagb) noexcept (true); 9642: # 220 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern _Float32 j0f32 (_Float32) noexcept (true); extern _Float32 __j0f32 (_Float32) noexcept (true); 9642: extern _Float32 j1f32 (_Float32) noexcept (true); extern _Float32 __j1f32 (_Float32) noexcept (true); 9642: extern _Float32 jnf32 (int, _Float32) noexcept (true); extern _Float32 __jnf32 (int, _Float32) noexcept (true); 9642: extern _Float32 y0f32 (_Float32) noexcept (true); extern _Float32 __y0f32 (_Float32) noexcept (true); 9642: extern _Float32 y1f32 (_Float32) noexcept (true); extern _Float32 __y1f32 (_Float32) noexcept (true); 9642: extern _Float32 ynf32 (int, _Float32) noexcept (true); extern _Float32 __ynf32 (int, _Float32) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern _Float32 erff32 (_Float32) noexcept (true); extern _Float32 __erff32 (_Float32) noexcept (true); 9642: extern _Float32 erfcf32 (_Float32) noexcept (true); extern _Float32 __erfcf32 (_Float32) noexcept (true); 9642: extern _Float32 lgammaf32 (_Float32) noexcept (true); extern _Float32 __lgammaf32 (_Float32) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float32 tgammaf32 (_Float32) noexcept (true); extern _Float32 __tgammaf32 (_Float32) noexcept (true); 9642: # 252 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern _Float32 lgammaf32_r (_Float32, int *__signgamp) noexcept (true); extern _Float32 __lgammaf32_r (_Float32, int *__signgamp) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern _Float32 rintf32 (_Float32 __x) noexcept (true); extern _Float32 __rintf32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: extern _Float32 nextafterf32 (_Float32 __x, _Float32 __y) noexcept (true); extern _Float32 __nextafterf32 (_Float32 __x, _Float32 __y) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern _Float32 nextdownf32 (_Float32 __x) noexcept (true); extern _Float32 __nextdownf32 (_Float32 __x) noexcept (true); 9642: 9642: extern _Float32 nextupf32 (_Float32 __x) noexcept (true); extern _Float32 __nextupf32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: 9642: extern _Float32 remainderf32 (_Float32 __x, _Float32 __y) noexcept (true); extern _Float32 __remainderf32 (_Float32 __x, _Float32 __y) noexcept (true); 9642: 9642: 9642: 9642: extern _Float32 scalbnf32 (_Float32 __x, int __n) noexcept (true); extern _Float32 __scalbnf32 (_Float32 __x, int __n) noexcept (true); 9642: 9642: 9642: 9642: extern int ilogbf32 (_Float32 __x) noexcept (true); extern int __ilogbf32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern long int llogbf32 (_Float32 __x) noexcept (true); extern long int __llogbf32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float32 scalblnf32 (_Float32 __x, long int __n) noexcept (true); extern _Float32 __scalblnf32 (_Float32 __x, long int __n) noexcept (true); 9642: 9642: 9642: 9642: extern _Float32 nearbyintf32 (_Float32 __x) noexcept (true); extern _Float32 __nearbyintf32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: 9642: extern _Float32 roundf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); extern _Float32 __roundf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern _Float32 truncf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); extern _Float32 __truncf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern _Float32 remquof32 (_Float32 __x, _Float32 __y, int *__quo) noexcept (true); extern _Float32 __remquof32 (_Float32 __x, _Float32 __y, int *__quo) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern long int lrintf32 (_Float32 __x) noexcept (true); extern long int __lrintf32 (_Float32 __x) noexcept (true); 9642: __extension__ 9642: extern long long int llrintf32 (_Float32 __x) noexcept (true); extern long long int __llrintf32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: 9642: extern long int lroundf32 (_Float32 __x) noexcept (true); extern long int __lroundf32 (_Float32 __x) noexcept (true); 9642: __extension__ 9642: extern long long int llroundf32 (_Float32 __x) noexcept (true); extern long long int __llroundf32 (_Float32 __x) noexcept (true); 9642: 9642: 9642: 9642: extern _Float32 fdimf32 (_Float32 __x, _Float32 __y) noexcept (true); extern _Float32 __fdimf32 (_Float32 __x, _Float32 __y) noexcept (true); 9642: 9642: 9642: 9642: extern _Float32 fmaxf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fmaxf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32 fminf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fminf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern _Float32 fmaf32 (_Float32 __x, _Float32 __y, _Float32 __z) noexcept (true); extern _Float32 __fmaf32 (_Float32 __x, _Float32 __y, _Float32 __z) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float32 roundevenf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); extern _Float32 __roundevenf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern __intmax_t fromfpf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: extern __uintmax_t ufromfpf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: 9642: extern __intmax_t fromfpxf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpxf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: 9642: extern __uintmax_t ufromfpxf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpxf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: extern int canonicalizef32 (_Float32 *__cx, const _Float32 *__x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern _Float32 fmaxmagf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fmaxmagf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32 fminmagf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fminmagf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern _Float32 fmaximumf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fmaximumf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32 fminimumf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fminimumf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32 fmaximum_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fmaximum_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32 fminimum_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fminimum_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32 fmaximum_magf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fmaximum_magf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32 fminimum_magf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fminimum_magf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32 fmaximum_mag_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fmaximum_mag_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32 fminimum_mag_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fminimum_mag_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern int totalorderf32 (const _Float32 *__x, const _Float32 *__y) noexcept (true) 9642: 9642: __attribute__ ((__pure__)); 9642: 9642: 9642: extern int totalordermagf32 (const _Float32 *__x, const _Float32 *__y) noexcept (true) 9642: 9642: __attribute__ ((__pure__)); 9642: 9642: 9642: extern _Float32 getpayloadf32 (const _Float32 *__x) noexcept (true); extern _Float32 __getpayloadf32 (const _Float32 *__x) noexcept (true); 9642: 9642: 9642: extern int setpayloadf32 (_Float32 *__x, _Float32 __payload) noexcept (true); 9642: 9642: 9642: extern int setpayloadsigf32 (_Float32 *__x, _Float32 __payload) noexcept (true); 9642: # 451 "/usr/include/math.h" 2 3 4 9642: # 467 "/usr/include/math.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 1 3 4 9642: # 53 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern _Float64 acosf64 (_Float64 __x) noexcept (true); extern _Float64 __acosf64 (_Float64 __x) noexcept (true); 9642: 9642: extern _Float64 asinf64 (_Float64 __x) noexcept (true); extern _Float64 __asinf64 (_Float64 __x) noexcept (true); 9642: 9642: extern _Float64 atanf64 (_Float64 __x) noexcept (true); extern _Float64 __atanf64 (_Float64 __x) noexcept (true); 9642: 9642: extern _Float64 atan2f64 (_Float64 __y, _Float64 __x) noexcept (true); extern _Float64 __atan2f64 (_Float64 __y, _Float64 __x) noexcept (true); 9642: 9642: 9642: extern _Float64 cosf64 (_Float64 __x) noexcept (true); extern _Float64 __cosf64 (_Float64 __x) noexcept (true); 9642: 9642: extern _Float64 sinf64 (_Float64 __x) noexcept (true); extern _Float64 __sinf64 (_Float64 __x) noexcept (true); 9642: 9642: extern _Float64 tanf64 (_Float64 __x) noexcept (true); extern _Float64 __tanf64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float64 coshf64 (_Float64 __x) noexcept (true); extern _Float64 __coshf64 (_Float64 __x) noexcept (true); 9642: 9642: extern _Float64 sinhf64 (_Float64 __x) noexcept (true); extern _Float64 __sinhf64 (_Float64 __x) noexcept (true); 9642: 9642: extern _Float64 tanhf64 (_Float64 __x) noexcept (true); extern _Float64 __tanhf64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: 9642: extern void sincosf64 (_Float64 __x, _Float64 *__sinx, _Float64 *__cosx) noexcept (true); extern void __sincosf64 (_Float64 __x, _Float64 *__sinx, _Float64 *__cosx) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: 9642: extern _Float64 acoshf64 (_Float64 __x) noexcept (true); extern _Float64 __acoshf64 (_Float64 __x) noexcept (true); 9642: 9642: extern _Float64 asinhf64 (_Float64 __x) noexcept (true); extern _Float64 __asinhf64 (_Float64 __x) noexcept (true); 9642: 9642: extern _Float64 atanhf64 (_Float64 __x) noexcept (true); extern _Float64 __atanhf64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern _Float64 expf64 (_Float64 __x) noexcept (true); extern _Float64 __expf64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: extern _Float64 frexpf64 (_Float64 __x, int *__exponent) noexcept (true); extern _Float64 __frexpf64 (_Float64 __x, int *__exponent) noexcept (true); 9642: 9642: 9642: extern _Float64 ldexpf64 (_Float64 __x, int __exponent) noexcept (true); extern _Float64 __ldexpf64 (_Float64 __x, int __exponent) noexcept (true); 9642: 9642: 9642: extern _Float64 logf64 (_Float64 __x) noexcept (true); extern _Float64 __logf64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: extern _Float64 log10f64 (_Float64 __x) noexcept (true); extern _Float64 __log10f64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: extern _Float64 modff64 (_Float64 __x, _Float64 *__iptr) noexcept (true); extern _Float64 __modff64 (_Float64 __x, _Float64 *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: 9642: extern _Float64 exp10f64 (_Float64 __x) noexcept (true); extern _Float64 __exp10f64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float64 expm1f64 (_Float64 __x) noexcept (true); extern _Float64 __expm1f64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: extern _Float64 log1pf64 (_Float64 __x) noexcept (true); extern _Float64 __log1pf64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: extern _Float64 logbf64 (_Float64 __x) noexcept (true); extern _Float64 __logbf64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float64 exp2f64 (_Float64 __x) noexcept (true); extern _Float64 __exp2f64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: extern _Float64 log2f64 (_Float64 __x) noexcept (true); extern _Float64 __log2f64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern _Float64 powf64 (_Float64 __x, _Float64 __y) noexcept (true); extern _Float64 __powf64 (_Float64 __x, _Float64 __y) noexcept (true); 9642: 9642: 9642: extern _Float64 sqrtf64 (_Float64 __x) noexcept (true); extern _Float64 __sqrtf64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: 9642: extern _Float64 hypotf64 (_Float64 __x, _Float64 __y) noexcept (true); extern _Float64 __hypotf64 (_Float64 __x, _Float64 __y) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float64 cbrtf64 (_Float64 __x) noexcept (true); extern _Float64 __cbrtf64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern _Float64 ceilf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); extern _Float64 __ceilf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float64 fabsf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fabsf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float64 floorf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); extern _Float64 __floorf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float64 fmodf64 (_Float64 __x, _Float64 __y) noexcept (true); extern _Float64 __fmodf64 (_Float64 __x, _Float64 __y) noexcept (true); 9642: # 198 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern _Float64 copysignf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __copysignf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern _Float64 nanf64 (const char *__tagb) noexcept (true); extern _Float64 __nanf64 (const char *__tagb) noexcept (true); 9642: # 220 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern _Float64 j0f64 (_Float64) noexcept (true); extern _Float64 __j0f64 (_Float64) noexcept (true); 9642: extern _Float64 j1f64 (_Float64) noexcept (true); extern _Float64 __j1f64 (_Float64) noexcept (true); 9642: extern _Float64 jnf64 (int, _Float64) noexcept (true); extern _Float64 __jnf64 (int, _Float64) noexcept (true); 9642: extern _Float64 y0f64 (_Float64) noexcept (true); extern _Float64 __y0f64 (_Float64) noexcept (true); 9642: extern _Float64 y1f64 (_Float64) noexcept (true); extern _Float64 __y1f64 (_Float64) noexcept (true); 9642: extern _Float64 ynf64 (int, _Float64) noexcept (true); extern _Float64 __ynf64 (int, _Float64) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern _Float64 erff64 (_Float64) noexcept (true); extern _Float64 __erff64 (_Float64) noexcept (true); 9642: extern _Float64 erfcf64 (_Float64) noexcept (true); extern _Float64 __erfcf64 (_Float64) noexcept (true); 9642: extern _Float64 lgammaf64 (_Float64) noexcept (true); extern _Float64 __lgammaf64 (_Float64) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float64 tgammaf64 (_Float64) noexcept (true); extern _Float64 __tgammaf64 (_Float64) noexcept (true); 9642: # 252 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern _Float64 lgammaf64_r (_Float64, int *__signgamp) noexcept (true); extern _Float64 __lgammaf64_r (_Float64, int *__signgamp) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern _Float64 rintf64 (_Float64 __x) noexcept (true); extern _Float64 __rintf64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: extern _Float64 nextafterf64 (_Float64 __x, _Float64 __y) noexcept (true); extern _Float64 __nextafterf64 (_Float64 __x, _Float64 __y) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern _Float64 nextdownf64 (_Float64 __x) noexcept (true); extern _Float64 __nextdownf64 (_Float64 __x) noexcept (true); 9642: 9642: extern _Float64 nextupf64 (_Float64 __x) noexcept (true); extern _Float64 __nextupf64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: 9642: extern _Float64 remainderf64 (_Float64 __x, _Float64 __y) noexcept (true); extern _Float64 __remainderf64 (_Float64 __x, _Float64 __y) noexcept (true); 9642: 9642: 9642: 9642: extern _Float64 scalbnf64 (_Float64 __x, int __n) noexcept (true); extern _Float64 __scalbnf64 (_Float64 __x, int __n) noexcept (true); 9642: 9642: 9642: 9642: extern int ilogbf64 (_Float64 __x) noexcept (true); extern int __ilogbf64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern long int llogbf64 (_Float64 __x) noexcept (true); extern long int __llogbf64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float64 scalblnf64 (_Float64 __x, long int __n) noexcept (true); extern _Float64 __scalblnf64 (_Float64 __x, long int __n) noexcept (true); 9642: 9642: 9642: 9642: extern _Float64 nearbyintf64 (_Float64 __x) noexcept (true); extern _Float64 __nearbyintf64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: 9642: extern _Float64 roundf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); extern _Float64 __roundf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern _Float64 truncf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); extern _Float64 __truncf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern _Float64 remquof64 (_Float64 __x, _Float64 __y, int *__quo) noexcept (true); extern _Float64 __remquof64 (_Float64 __x, _Float64 __y, int *__quo) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern long int lrintf64 (_Float64 __x) noexcept (true); extern long int __lrintf64 (_Float64 __x) noexcept (true); 9642: __extension__ 9642: extern long long int llrintf64 (_Float64 __x) noexcept (true); extern long long int __llrintf64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: 9642: extern long int lroundf64 (_Float64 __x) noexcept (true); extern long int __lroundf64 (_Float64 __x) noexcept (true); 9642: __extension__ 9642: extern long long int llroundf64 (_Float64 __x) noexcept (true); extern long long int __llroundf64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: 9642: extern _Float64 fdimf64 (_Float64 __x, _Float64 __y) noexcept (true); extern _Float64 __fdimf64 (_Float64 __x, _Float64 __y) noexcept (true); 9642: 9642: 9642: 9642: extern _Float64 fmaxf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fmaxf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float64 fminf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fminf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern _Float64 fmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) noexcept (true); extern _Float64 __fmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float64 roundevenf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); extern _Float64 __roundevenf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern __intmax_t fromfpf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: extern __uintmax_t ufromfpf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: 9642: extern __intmax_t fromfpxf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpxf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: 9642: extern __uintmax_t ufromfpxf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpxf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: extern int canonicalizef64 (_Float64 *__cx, const _Float64 *__x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern _Float64 fmaxmagf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fmaxmagf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float64 fminmagf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fminmagf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern _Float64 fmaximumf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fmaximumf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float64 fminimumf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fminimumf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float64 fmaximum_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fmaximum_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float64 fminimum_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fminimum_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float64 fmaximum_magf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fmaximum_magf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float64 fminimum_magf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fminimum_magf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float64 fmaximum_mag_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fmaximum_mag_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float64 fminimum_mag_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fminimum_mag_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern int totalorderf64 (const _Float64 *__x, const _Float64 *__y) noexcept (true) 9642: 9642: __attribute__ ((__pure__)); 9642: 9642: 9642: extern int totalordermagf64 (const _Float64 *__x, const _Float64 *__y) noexcept (true) 9642: 9642: __attribute__ ((__pure__)); 9642: 9642: 9642: extern _Float64 getpayloadf64 (const _Float64 *__x) noexcept (true); extern _Float64 __getpayloadf64 (const _Float64 *__x) noexcept (true); 9642: 9642: 9642: extern int setpayloadf64 (_Float64 *__x, _Float64 __payload) noexcept (true); 9642: 9642: 9642: extern int setpayloadsigf64 (_Float64 *__x, _Float64 __payload) noexcept (true); 9642: # 468 "/usr/include/math.h" 2 3 4 9642: # 501 "/usr/include/math.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 1 3 4 9642: # 53 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern _Float32x acosf32x (_Float32x __x) noexcept (true); extern _Float32x __acosf32x (_Float32x __x) noexcept (true); 9642: 9642: extern _Float32x asinf32x (_Float32x __x) noexcept (true); extern _Float32x __asinf32x (_Float32x __x) noexcept (true); 9642: 9642: extern _Float32x atanf32x (_Float32x __x) noexcept (true); extern _Float32x __atanf32x (_Float32x __x) noexcept (true); 9642: 9642: extern _Float32x atan2f32x (_Float32x __y, _Float32x __x) noexcept (true); extern _Float32x __atan2f32x (_Float32x __y, _Float32x __x) noexcept (true); 9642: 9642: 9642: extern _Float32x cosf32x (_Float32x __x) noexcept (true); extern _Float32x __cosf32x (_Float32x __x) noexcept (true); 9642: 9642: extern _Float32x sinf32x (_Float32x __x) noexcept (true); extern _Float32x __sinf32x (_Float32x __x) noexcept (true); 9642: 9642: extern _Float32x tanf32x (_Float32x __x) noexcept (true); extern _Float32x __tanf32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float32x coshf32x (_Float32x __x) noexcept (true); extern _Float32x __coshf32x (_Float32x __x) noexcept (true); 9642: 9642: extern _Float32x sinhf32x (_Float32x __x) noexcept (true); extern _Float32x __sinhf32x (_Float32x __x) noexcept (true); 9642: 9642: extern _Float32x tanhf32x (_Float32x __x) noexcept (true); extern _Float32x __tanhf32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: 9642: extern void sincosf32x (_Float32x __x, _Float32x *__sinx, _Float32x *__cosx) noexcept (true); extern void __sincosf32x (_Float32x __x, _Float32x *__sinx, _Float32x *__cosx) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: 9642: extern _Float32x acoshf32x (_Float32x __x) noexcept (true); extern _Float32x __acoshf32x (_Float32x __x) noexcept (true); 9642: 9642: extern _Float32x asinhf32x (_Float32x __x) noexcept (true); extern _Float32x __asinhf32x (_Float32x __x) noexcept (true); 9642: 9642: extern _Float32x atanhf32x (_Float32x __x) noexcept (true); extern _Float32x __atanhf32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern _Float32x expf32x (_Float32x __x) noexcept (true); extern _Float32x __expf32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: extern _Float32x frexpf32x (_Float32x __x, int *__exponent) noexcept (true); extern _Float32x __frexpf32x (_Float32x __x, int *__exponent) noexcept (true); 9642: 9642: 9642: extern _Float32x ldexpf32x (_Float32x __x, int __exponent) noexcept (true); extern _Float32x __ldexpf32x (_Float32x __x, int __exponent) noexcept (true); 9642: 9642: 9642: extern _Float32x logf32x (_Float32x __x) noexcept (true); extern _Float32x __logf32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: extern _Float32x log10f32x (_Float32x __x) noexcept (true); extern _Float32x __log10f32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: extern _Float32x modff32x (_Float32x __x, _Float32x *__iptr) noexcept (true); extern _Float32x __modff32x (_Float32x __x, _Float32x *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: 9642: extern _Float32x exp10f32x (_Float32x __x) noexcept (true); extern _Float32x __exp10f32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float32x expm1f32x (_Float32x __x) noexcept (true); extern _Float32x __expm1f32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: extern _Float32x log1pf32x (_Float32x __x) noexcept (true); extern _Float32x __log1pf32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: extern _Float32x logbf32x (_Float32x __x) noexcept (true); extern _Float32x __logbf32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float32x exp2f32x (_Float32x __x) noexcept (true); extern _Float32x __exp2f32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: extern _Float32x log2f32x (_Float32x __x) noexcept (true); extern _Float32x __log2f32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern _Float32x powf32x (_Float32x __x, _Float32x __y) noexcept (true); extern _Float32x __powf32x (_Float32x __x, _Float32x __y) noexcept (true); 9642: 9642: 9642: extern _Float32x sqrtf32x (_Float32x __x) noexcept (true); extern _Float32x __sqrtf32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: 9642: extern _Float32x hypotf32x (_Float32x __x, _Float32x __y) noexcept (true); extern _Float32x __hypotf32x (_Float32x __x, _Float32x __y) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float32x cbrtf32x (_Float32x __x) noexcept (true); extern _Float32x __cbrtf32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern _Float32x ceilf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); extern _Float32x __ceilf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32x fabsf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fabsf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32x floorf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); extern _Float32x __floorf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32x fmodf32x (_Float32x __x, _Float32x __y) noexcept (true); extern _Float32x __fmodf32x (_Float32x __x, _Float32x __y) noexcept (true); 9642: # 198 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern _Float32x copysignf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __copysignf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern _Float32x nanf32x (const char *__tagb) noexcept (true); extern _Float32x __nanf32x (const char *__tagb) noexcept (true); 9642: # 220 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern _Float32x j0f32x (_Float32x) noexcept (true); extern _Float32x __j0f32x (_Float32x) noexcept (true); 9642: extern _Float32x j1f32x (_Float32x) noexcept (true); extern _Float32x __j1f32x (_Float32x) noexcept (true); 9642: extern _Float32x jnf32x (int, _Float32x) noexcept (true); extern _Float32x __jnf32x (int, _Float32x) noexcept (true); 9642: extern _Float32x y0f32x (_Float32x) noexcept (true); extern _Float32x __y0f32x (_Float32x) noexcept (true); 9642: extern _Float32x y1f32x (_Float32x) noexcept (true); extern _Float32x __y1f32x (_Float32x) noexcept (true); 9642: extern _Float32x ynf32x (int, _Float32x) noexcept (true); extern _Float32x __ynf32x (int, _Float32x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern _Float32x erff32x (_Float32x) noexcept (true); extern _Float32x __erff32x (_Float32x) noexcept (true); 9642: extern _Float32x erfcf32x (_Float32x) noexcept (true); extern _Float32x __erfcf32x (_Float32x) noexcept (true); 9642: extern _Float32x lgammaf32x (_Float32x) noexcept (true); extern _Float32x __lgammaf32x (_Float32x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float32x tgammaf32x (_Float32x) noexcept (true); extern _Float32x __tgammaf32x (_Float32x) noexcept (true); 9642: # 252 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 9642: extern _Float32x lgammaf32x_r (_Float32x, int *__signgamp) noexcept (true); extern _Float32x __lgammaf32x_r (_Float32x, int *__signgamp) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern _Float32x rintf32x (_Float32x __x) noexcept (true); extern _Float32x __rintf32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: extern _Float32x nextafterf32x (_Float32x __x, _Float32x __y) noexcept (true); extern _Float32x __nextafterf32x (_Float32x __x, _Float32x __y) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern _Float32x nextdownf32x (_Float32x __x) noexcept (true); extern _Float32x __nextdownf32x (_Float32x __x) noexcept (true); 9642: 9642: extern _Float32x nextupf32x (_Float32x __x) noexcept (true); extern _Float32x __nextupf32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: 9642: extern _Float32x remainderf32x (_Float32x __x, _Float32x __y) noexcept (true); extern _Float32x __remainderf32x (_Float32x __x, _Float32x __y) noexcept (true); 9642: 9642: 9642: 9642: extern _Float32x scalbnf32x (_Float32x __x, int __n) noexcept (true); extern _Float32x __scalbnf32x (_Float32x __x, int __n) noexcept (true); 9642: 9642: 9642: 9642: extern int ilogbf32x (_Float32x __x) noexcept (true); extern int __ilogbf32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern long int llogbf32x (_Float32x __x) noexcept (true); extern long int __llogbf32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float32x scalblnf32x (_Float32x __x, long int __n) noexcept (true); extern _Float32x __scalblnf32x (_Float32x __x, long int __n) noexcept (true); 9642: 9642: 9642: 9642: extern _Float32x nearbyintf32x (_Float32x __x) noexcept (true); extern _Float32x __nearbyintf32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: 9642: extern _Float32x roundf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); extern _Float32x __roundf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern _Float32x truncf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); extern _Float32x __truncf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern _Float32x remquof32x (_Float32x __x, _Float32x __y, int *__quo) noexcept (true); extern _Float32x __remquof32x (_Float32x __x, _Float32x __y, int *__quo) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern long int lrintf32x (_Float32x __x) noexcept (true); extern long int __lrintf32x (_Float32x __x) noexcept (true); 9642: __extension__ 9642: extern long long int llrintf32x (_Float32x __x) noexcept (true); extern long long int __llrintf32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: 9642: extern long int lroundf32x (_Float32x __x) noexcept (true); extern long int __lroundf32x (_Float32x __x) noexcept (true); 9642: __extension__ 9642: extern long long int llroundf32x (_Float32x __x) noexcept (true); extern long long int __llroundf32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: 9642: extern _Float32x fdimf32x (_Float32x __x, _Float32x __y) noexcept (true); extern _Float32x __fdimf32x (_Float32x __x, _Float32x __y) noexcept (true); 9642: 9642: 9642: 9642: extern _Float32x fmaxf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fmaxf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32x fminf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fminf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern _Float32x fmaf32x (_Float32x __x, _Float32x __y, _Float32x __z) noexcept (true); extern _Float32x __fmaf32x (_Float32x __x, _Float32x __y, _Float32x __z) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern _Float32x roundevenf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); extern _Float32x __roundevenf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: extern __intmax_t fromfpf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: extern __uintmax_t ufromfpf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: 9642: extern __intmax_t fromfpxf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpxf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: 9642: 9642: extern __uintmax_t ufromfpxf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpxf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true) 9642: ; 9642: 9642: 9642: extern int canonicalizef32x (_Float32x *__cx, const _Float32x *__x) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern _Float32x fmaxmagf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fmaxmagf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32x fminmagf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fminmagf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern _Float32x fmaximumf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fmaximumf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32x fminimumf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fminimumf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32x fmaximum_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fmaximum_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32x fminimum_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fminimum_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32x fmaximum_magf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fmaximum_magf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32x fminimum_magf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fminimum_magf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32x fmaximum_mag_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fmaximum_mag_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern _Float32x fminimum_mag_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fminimum_mag_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern int totalorderf32x (const _Float32x *__x, const _Float32x *__y) noexcept (true) 9642: 9642: __attribute__ ((__pure__)); 9642: 9642: 9642: extern int totalordermagf32x (const _Float32x *__x, const _Float32x *__y) noexcept (true) 9642: 9642: __attribute__ ((__pure__)); 9642: 9642: 9642: extern _Float32x getpayloadf32x (const _Float32x *__x) noexcept (true); extern _Float32x __getpayloadf32x (const _Float32x *__x) noexcept (true); 9642: 9642: 9642: extern int setpayloadf32x (_Float32x *__x, _Float32x __payload) noexcept (true); 9642: 9642: 9642: extern int setpayloadsigf32x (_Float32x *__x, _Float32x __payload) noexcept (true); 9642: # 502 "/usr/include/math.h" 2 3 4 9642: # 566 "/usr/include/math.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 1 3 4 9642: # 24 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 3 4 9642: extern float fadd (double __x, double __y) noexcept (true); 9642: 9642: 9642: extern float fdiv (double __x, double __y) noexcept (true); 9642: 9642: 9642: extern float ffma (double __x, double __y, double __z) noexcept (true); 9642: 9642: 9642: extern float fmul (double __x, double __y) noexcept (true); 9642: 9642: 9642: extern float fsqrt (double __x) noexcept (true); 9642: 9642: 9642: extern float fsub (double __x, double __y) noexcept (true); 9642: # 567 "/usr/include/math.h" 2 3 4 9642: # 587 "/usr/include/math.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 1 3 4 9642: # 24 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 3 4 9642: extern float faddl (long double __x, long double __y) noexcept (true); 9642: 9642: 9642: extern float fdivl (long double __x, long double __y) noexcept (true); 9642: 9642: 9642: extern float ffmal (long double __x, long double __y, long double __z) noexcept (true); 9642: 9642: 9642: extern float fmull (long double __x, long double __y) noexcept (true); 9642: 9642: 9642: extern float fsqrtl (long double __x) noexcept (true); 9642: 9642: 9642: extern float fsubl (long double __x, long double __y) noexcept (true); 9642: # 588 "/usr/include/math.h" 2 3 4 9642: # 616 "/usr/include/math.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 1 3 4 9642: # 24 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 3 4 9642: extern double daddl (long double __x, long double __y) noexcept (true); 9642: 9642: 9642: extern double ddivl (long double __x, long double __y) noexcept (true); 9642: 9642: 9642: extern double dfmal (long double __x, long double __y, long double __z) noexcept (true); 9642: 9642: 9642: extern double dmull (long double __x, long double __y) noexcept (true); 9642: 9642: 9642: extern double dsqrtl (long double __x) noexcept (true); 9642: 9642: 9642: extern double dsubl (long double __x, long double __y) noexcept (true); 9642: # 617 "/usr/include/math.h" 2 3 4 9642: # 697 "/usr/include/math.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 1 3 4 9642: # 24 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 3 4 9642: extern _Float32 f32addf32x (_Float32x __x, _Float32x __y) noexcept (true); 9642: 9642: 9642: extern _Float32 f32divf32x (_Float32x __x, _Float32x __y) noexcept (true); 9642: 9642: 9642: extern _Float32 f32fmaf32x (_Float32x __x, _Float32x __y, _Float32x __z) noexcept (true); 9642: 9642: 9642: extern _Float32 f32mulf32x (_Float32x __x, _Float32x __y) noexcept (true); 9642: 9642: 9642: extern _Float32 f32sqrtf32x (_Float32x __x) noexcept (true); 9642: 9642: 9642: extern _Float32 f32subf32x (_Float32x __x, _Float32x __y) noexcept (true); 9642: # 698 "/usr/include/math.h" 2 3 4 9642: # 707 "/usr/include/math.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 1 3 4 9642: # 24 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 3 4 9642: extern _Float32 f32addf64 (_Float64 __x, _Float64 __y) noexcept (true); 9642: 9642: 9642: extern _Float32 f32divf64 (_Float64 __x, _Float64 __y) noexcept (true); 9642: 9642: 9642: extern _Float32 f32fmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) noexcept (true); 9642: 9642: 9642: extern _Float32 f32mulf64 (_Float64 __x, _Float64 __y) noexcept (true); 9642: 9642: 9642: extern _Float32 f32sqrtf64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: extern _Float32 f32subf64 (_Float64 __x, _Float64 __y) noexcept (true); 9642: # 708 "/usr/include/math.h" 2 3 4 9642: # 747 "/usr/include/math.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 1 3 4 9642: # 24 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 3 4 9642: extern _Float32x f32xaddf64 (_Float64 __x, _Float64 __y) noexcept (true); 9642: 9642: 9642: extern _Float32x f32xdivf64 (_Float64 __x, _Float64 __y) noexcept (true); 9642: 9642: 9642: extern _Float32x f32xfmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) noexcept (true); 9642: 9642: 9642: extern _Float32x f32xmulf64 (_Float64 __x, _Float64 __y) noexcept (true); 9642: 9642: 9642: extern _Float32x f32xsqrtf64 (_Float64 __x) noexcept (true); 9642: 9642: 9642: extern _Float32x f32xsubf64 (_Float64 __x, _Float64 __y) noexcept (true); 9642: # 748 "/usr/include/math.h" 2 3 4 9642: # 854 "/usr/include/math.h" 3 4 9642: extern int signgam; 9642: # 934 "/usr/include/math.h" 3 4 9642: enum 9642: { 9642: FP_NAN = 9642: 9642: 0, 9642: FP_INFINITE = 9642: 9642: 1, 9642: FP_ZERO = 9642: 9642: 2, 9642: FP_SUBNORMAL = 9642: 9642: 3, 9642: FP_NORMAL = 9642: 9642: 4 9642: }; 9642: # 1055 "/usr/include/math.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/iscanonical.h" 1 3 4 9642: # 1056 "/usr/include/math.h" 2 3 4 9642: # 1067 "/usr/include/math.h" 3 4 9642: extern "C++" { 9642: inline int issignaling (float __val) { return __issignalingf (__val); } 9642: inline int issignaling (double __val) { return __issignaling (__val); } 9642: inline int 9642: issignaling (long double __val) 9642: { 9642: 9642: return __issignaling (__val); 9642: 9642: 9642: 9642: } 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 1098 "/usr/include/math.h" 3 4 9642: extern "C++" { 9642: # 1129 "/usr/include/math.h" 3 4 9642: template inline bool 9642: iszero (__T __val) 9642: { 9642: return __val == 0; 9642: } 9642: 9642: } 9642: # 1364 "/usr/include/math.h" 3 4 9642: extern "C++" { 9642: template struct __iseqsig_type; 9642: 9642: template<> struct __iseqsig_type 9642: { 9642: static int __call (float __x, float __y) throw () 9642: { 9642: return __iseqsigf (__x, __y); 9642: } 9642: }; 9642: 9642: template<> struct __iseqsig_type 9642: { 9642: static int __call (double __x, double __y) throw () 9642: { 9642: return __iseqsig (__x, __y); 9642: } 9642: }; 9642: 9642: template<> struct __iseqsig_type 9642: { 9642: static int __call (long double __x, long double __y) throw () 9642: { 9642: 9642: 9642: 9642: return __iseqsig (__x, __y); 9642: 9642: } 9642: }; 9642: 9642: 9642: template<> struct __iseqsig_type<_Float32> 9642: { 9642: static int __call (_Float32 __x, _Float32 __y) throw () 9642: { 9642: return __iseqsigf (__x, __y); 9642: } 9642: }; 9642: 9642: 9642: 9642: template<> struct __iseqsig_type<_Float64> 9642: { 9642: static int __call (_Float64 __x, _Float64 __y) throw () 9642: { 9642: return __iseqsig (__x, __y); 9642: } 9642: }; 9642: # 1432 "/usr/include/math.h" 3 4 9642: template<> struct __iseqsig_type<_Float32x> 9642: { 9642: static int __call (_Float32x __x, _Float32x __y) throw () 9642: { 9642: return __iseqsig (__x, __y); 9642: } 9642: }; 9642: # 1455 "/usr/include/math.h" 3 4 9642: template 9642: inline int 9642: iseqsig (_T1 __x, _T2 __y) throw () 9642: { 9642: 9642: typedef decltype (((__x) + (__y) + 0.0f)) _T3; 9642: 9642: 9642: 9642: return __iseqsig_type<_T3>::__call (__x, __y); 9642: } 9642: 9642: } 9642: 9642: 9642: 9642: 9642: } 9642: # 48 "/usr/include/c++/13/cmath" 2 3 9642: # 79 "/usr/include/c++/13/cmath" 3 9642: extern "C++" 9642: { 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: using ::acos; 9642: 9642: 9642: inline constexpr float 9642: acos(float __x) 9642: { return __builtin_acosf(__x); } 9642: 9642: inline constexpr long double 9642: acos(long double __x) 9642: { return __builtin_acosl(__x); } 9642: 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: acos(_Tp __x) 9642: { return __builtin_acos(__x); } 9642: 9642: using ::asin; 9642: 9642: 9642: inline constexpr float 9642: asin(float __x) 9642: { return __builtin_asinf(__x); } 9642: 9642: inline constexpr long double 9642: asin(long double __x) 9642: { return __builtin_asinl(__x); } 9642: 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: asin(_Tp __x) 9642: { return __builtin_asin(__x); } 9642: 9642: using ::atan; 9642: 9642: 9642: inline constexpr float 9642: atan(float __x) 9642: { return __builtin_atanf(__x); } 9642: 9642: inline constexpr long double 9642: atan(long double __x) 9642: { return __builtin_atanl(__x); } 9642: 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: atan(_Tp __x) 9642: { return __builtin_atan(__x); } 9642: 9642: using ::atan2; 9642: 9642: 9642: inline constexpr float 9642: atan2(float __y, float __x) 9642: { return __builtin_atan2f(__y, __x); } 9642: 9642: inline constexpr long double 9642: atan2(long double __y, long double __x) 9642: { return __builtin_atan2l(__y, __x); } 9642: 9642: 9642: using ::ceil; 9642: 9642: 9642: inline constexpr float 9642: ceil(float __x) 9642: { return __builtin_ceilf(__x); } 9642: 9642: inline constexpr long double 9642: ceil(long double __x) 9642: { return __builtin_ceill(__x); } 9642: 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: ceil(_Tp __x) 9642: { return __builtin_ceil(__x); } 9642: 9642: using ::cos; 9642: 9642: 9642: inline constexpr float 9642: cos(float __x) 9642: { return __builtin_cosf(__x); } 9642: 9642: inline constexpr long double 9642: cos(long double __x) 9642: { return __builtin_cosl(__x); } 9642: 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: cos(_Tp __x) 9642: { return __builtin_cos(__x); } 9642: 9642: using ::cosh; 9642: 9642: 9642: inline constexpr float 9642: cosh(float __x) 9642: { return __builtin_coshf(__x); } 9642: 9642: inline constexpr long double 9642: cosh(long double __x) 9642: { return __builtin_coshl(__x); } 9642: 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: cosh(_Tp __x) 9642: { return __builtin_cosh(__x); } 9642: 9642: using ::exp; 9642: 9642: 9642: inline constexpr float 9642: exp(float __x) 9642: { return __builtin_expf(__x); } 9642: 9642: inline constexpr long double 9642: exp(long double __x) 9642: { return __builtin_expl(__x); } 9642: 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: exp(_Tp __x) 9642: { return __builtin_exp(__x); } 9642: 9642: using ::fabs; 9642: 9642: 9642: inline constexpr float 9642: fabs(float __x) 9642: { return __builtin_fabsf(__x); } 9642: 9642: inline constexpr long double 9642: fabs(long double __x) 9642: { return __builtin_fabsl(__x); } 9642: 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: fabs(_Tp __x) 9642: { return __builtin_fabs(__x); } 9642: 9642: using ::floor; 9642: 9642: 9642: inline constexpr float 9642: floor(float __x) 9642: { return __builtin_floorf(__x); } 9642: 9642: inline constexpr long double 9642: floor(long double __x) 9642: { return __builtin_floorl(__x); } 9642: 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: floor(_Tp __x) 9642: { return __builtin_floor(__x); } 9642: 9642: using ::fmod; 9642: 9642: 9642: inline constexpr float 9642: fmod(float __x, float __y) 9642: { return __builtin_fmodf(__x, __y); } 9642: 9642: inline constexpr long double 9642: fmod(long double __x, long double __y) 9642: { return __builtin_fmodl(__x, __y); } 9642: 9642: 9642: using ::frexp; 9642: 9642: 9642: inline float 9642: frexp(float __x, int* __exp) 9642: { return __builtin_frexpf(__x, __exp); } 9642: 9642: inline long double 9642: frexp(long double __x, int* __exp) 9642: { return __builtin_frexpl(__x, __exp); } 9642: 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: frexp(_Tp __x, int* __exp) 9642: { return __builtin_frexp(__x, __exp); } 9642: 9642: using ::ldexp; 9642: 9642: 9642: inline constexpr float 9642: ldexp(float __x, int __exp) 9642: { return __builtin_ldexpf(__x, __exp); } 9642: 9642: inline constexpr long double 9642: ldexp(long double __x, int __exp) 9642: { return __builtin_ldexpl(__x, __exp); } 9642: 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: ldexp(_Tp __x, int __exp) 9642: { return __builtin_ldexp(__x, __exp); } 9642: 9642: using ::log; 9642: 9642: 9642: inline constexpr float 9642: log(float __x) 9642: { return __builtin_logf(__x); } 9642: 9642: inline constexpr long double 9642: log(long double __x) 9642: { return __builtin_logl(__x); } 9642: 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: log(_Tp __x) 9642: { return __builtin_log(__x); } 9642: 9642: using ::log10; 9642: 9642: 9642: inline constexpr float 9642: log10(float __x) 9642: { return __builtin_log10f(__x); } 9642: 9642: inline constexpr long double 9642: log10(long double __x) 9642: { return __builtin_log10l(__x); } 9642: 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: log10(_Tp __x) 9642: { return __builtin_log10(__x); } 9642: 9642: using ::modf; 9642: 9642: 9642: inline float 9642: modf(float __x, float* __iptr) 9642: { return __builtin_modff(__x, __iptr); } 9642: 9642: inline long double 9642: modf(long double __x, long double* __iptr) 9642: { return __builtin_modfl(__x, __iptr); } 9642: 9642: 9642: using ::pow; 9642: 9642: 9642: inline constexpr float 9642: pow(float __x, float __y) 9642: { return __builtin_powf(__x, __y); } 9642: 9642: inline constexpr long double 9642: pow(long double __x, long double __y) 9642: { return __builtin_powl(__x, __y); } 9642: # 396 "/usr/include/c++/13/cmath" 3 9642: using ::sin; 9642: 9642: 9642: inline constexpr float 9642: sin(float __x) 9642: { return __builtin_sinf(__x); } 9642: 9642: inline constexpr long double 9642: sin(long double __x) 9642: { return __builtin_sinl(__x); } 9642: 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: sin(_Tp __x) 9642: { return __builtin_sin(__x); } 9642: 9642: using ::sinh; 9642: 9642: 9642: inline constexpr float 9642: sinh(float __x) 9642: { return __builtin_sinhf(__x); } 9642: 9642: inline constexpr long double 9642: sinh(long double __x) 9642: { return __builtin_sinhl(__x); } 9642: 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: sinh(_Tp __x) 9642: { return __builtin_sinh(__x); } 9642: 9642: using ::sqrt; 9642: 9642: 9642: inline constexpr float 9642: sqrt(float __x) 9642: { return __builtin_sqrtf(__x); } 9642: 9642: inline constexpr long double 9642: sqrt(long double __x) 9642: { return __builtin_sqrtl(__x); } 9642: 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: sqrt(_Tp __x) 9642: { return __builtin_sqrt(__x); } 9642: 9642: using ::tan; 9642: 9642: 9642: inline constexpr float 9642: tan(float __x) 9642: { return __builtin_tanf(__x); } 9642: 9642: inline constexpr long double 9642: tan(long double __x) 9642: { return __builtin_tanl(__x); } 9642: 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: tan(_Tp __x) 9642: { return __builtin_tan(__x); } 9642: 9642: using ::tanh; 9642: 9642: 9642: inline constexpr float 9642: tanh(float __x) 9642: { return __builtin_tanhf(__x); } 9642: 9642: inline constexpr long double 9642: tanh(long double __x) 9642: { return __builtin_tanhl(__x); } 9642: 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: tanh(_Tp __x) 9642: { return __builtin_tanh(__x); } 9642: # 1049 "/usr/include/c++/13/cmath" 3 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 9642: atan2(_Tp __y, _Up __x) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 9642: return atan2(__type(__y), __type(__x)); 9642: } 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 9642: fmod(_Tp __x, _Up __y) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 9642: return fmod(__type(__x), __type(__y)); 9642: } 9642: 9642: template 9642: inline constexpr 9642: typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 9642: pow(_Tp __x, _Up __y) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 9642: return pow(__type(__x), __type(__y)); 9642: } 9642: # 1096 "/usr/include/c++/13/cmath" 3 9642: constexpr int 9642: fpclassify(float __x) 9642: { return __builtin_fpclassify(0, 1, 4, 9642: 3, 2, __x); } 9642: 9642: constexpr int 9642: fpclassify(double __x) 9642: { return __builtin_fpclassify(0, 1, 4, 9642: 3, 2, __x); } 9642: 9642: constexpr int 9642: fpclassify(long double __x) 9642: { return __builtin_fpclassify(0, 1, 4, 9642: 3, 2, __x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: int>::__type 9642: fpclassify(_Tp __x) 9642: { return __x != 0 ? 4 : 2; } 9642: 9642: 9642: 9642: constexpr bool 9642: isfinite(float __x) 9642: { return __builtin_isfinite(__x); } 9642: 9642: constexpr bool 9642: isfinite(double __x) 9642: { return __builtin_isfinite(__x); } 9642: 9642: constexpr bool 9642: isfinite(long double __x) 9642: { return __builtin_isfinite(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: bool>::__type 9642: isfinite(_Tp) 9642: { return true; } 9642: 9642: 9642: 9642: constexpr bool 9642: isinf(float __x) 9642: { return __builtin_isinf(__x); } 9642: 9642: 9642: 9642: 9642: 9642: constexpr bool 9642: isinf(double __x) 9642: { return __builtin_isinf(__x); } 9642: 9642: 9642: constexpr bool 9642: isinf(long double __x) 9642: { return __builtin_isinf(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: bool>::__type 9642: isinf(_Tp) 9642: { return false; } 9642: 9642: 9642: 9642: constexpr bool 9642: isnan(float __x) 9642: { return __builtin_isnan(__x); } 9642: 9642: 9642: 9642: 9642: 9642: constexpr bool 9642: isnan(double __x) 9642: { return __builtin_isnan(__x); } 9642: 9642: 9642: constexpr bool 9642: isnan(long double __x) 9642: { return __builtin_isnan(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: bool>::__type 9642: isnan(_Tp) 9642: { return false; } 9642: 9642: 9642: 9642: constexpr bool 9642: isnormal(float __x) 9642: { return __builtin_isnormal(__x); } 9642: 9642: constexpr bool 9642: isnormal(double __x) 9642: { return __builtin_isnormal(__x); } 9642: 9642: constexpr bool 9642: isnormal(long double __x) 9642: { return __builtin_isnormal(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: bool>::__type 9642: isnormal(_Tp __x) 9642: { return __x != 0 ? true : false; } 9642: 9642: 9642: 9642: 9642: constexpr bool 9642: signbit(float __x) 9642: { return __builtin_signbit(__x); } 9642: 9642: constexpr bool 9642: signbit(double __x) 9642: { return __builtin_signbit(__x); } 9642: 9642: constexpr bool 9642: signbit(long double __x) 9642: { return __builtin_signbit(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: bool>::__type 9642: signbit(_Tp __x) 9642: { return __x < 0 ? true : false; } 9642: 9642: 9642: 9642: constexpr bool 9642: isgreater(float __x, float __y) 9642: { return __builtin_isgreater(__x, __y); } 9642: 9642: constexpr bool 9642: isgreater(double __x, double __y) 9642: { return __builtin_isgreater(__x, __y); } 9642: 9642: constexpr bool 9642: isgreater(long double __x, long double __y) 9642: { return __builtin_isgreater(__x, __y); } 9642: 9642: 9642: 9642: template 9642: constexpr typename 9642: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value 9642: && __is_arithmetic<_Up>::__value), bool>::__type 9642: isgreater(_Tp __x, _Up __y) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 9642: return __builtin_isgreater(__type(__x), __type(__y)); 9642: } 9642: 9642: 9642: 9642: constexpr bool 9642: isgreaterequal(float __x, float __y) 9642: { return __builtin_isgreaterequal(__x, __y); } 9642: 9642: constexpr bool 9642: isgreaterequal(double __x, double __y) 9642: { return __builtin_isgreaterequal(__x, __y); } 9642: 9642: constexpr bool 9642: isgreaterequal(long double __x, long double __y) 9642: { return __builtin_isgreaterequal(__x, __y); } 9642: 9642: 9642: 9642: template 9642: constexpr typename 9642: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value 9642: && __is_arithmetic<_Up>::__value), bool>::__type 9642: isgreaterequal(_Tp __x, _Up __y) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 9642: return __builtin_isgreaterequal(__type(__x), __type(__y)); 9642: } 9642: 9642: 9642: 9642: constexpr bool 9642: isless(float __x, float __y) 9642: { return __builtin_isless(__x, __y); } 9642: 9642: constexpr bool 9642: isless(double __x, double __y) 9642: { return __builtin_isless(__x, __y); } 9642: 9642: constexpr bool 9642: isless(long double __x, long double __y) 9642: { return __builtin_isless(__x, __y); } 9642: 9642: 9642: 9642: template 9642: constexpr typename 9642: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value 9642: && __is_arithmetic<_Up>::__value), bool>::__type 9642: isless(_Tp __x, _Up __y) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 9642: return __builtin_isless(__type(__x), __type(__y)); 9642: } 9642: 9642: 9642: 9642: constexpr bool 9642: islessequal(float __x, float __y) 9642: { return __builtin_islessequal(__x, __y); } 9642: 9642: constexpr bool 9642: islessequal(double __x, double __y) 9642: { return __builtin_islessequal(__x, __y); } 9642: 9642: constexpr bool 9642: islessequal(long double __x, long double __y) 9642: { return __builtin_islessequal(__x, __y); } 9642: 9642: 9642: 9642: template 9642: constexpr typename 9642: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value 9642: && __is_arithmetic<_Up>::__value), bool>::__type 9642: islessequal(_Tp __x, _Up __y) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 9642: return __builtin_islessequal(__type(__x), __type(__y)); 9642: } 9642: 9642: 9642: 9642: constexpr bool 9642: islessgreater(float __x, float __y) 9642: { return __builtin_islessgreater(__x, __y); } 9642: 9642: constexpr bool 9642: islessgreater(double __x, double __y) 9642: { return __builtin_islessgreater(__x, __y); } 9642: 9642: constexpr bool 9642: islessgreater(long double __x, long double __y) 9642: { return __builtin_islessgreater(__x, __y); } 9642: 9642: 9642: 9642: template 9642: constexpr typename 9642: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value 9642: && __is_arithmetic<_Up>::__value), bool>::__type 9642: islessgreater(_Tp __x, _Up __y) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 9642: return __builtin_islessgreater(__type(__x), __type(__y)); 9642: } 9642: 9642: 9642: 9642: constexpr bool 9642: isunordered(float __x, float __y) 9642: { return __builtin_isunordered(__x, __y); } 9642: 9642: constexpr bool 9642: isunordered(double __x, double __y) 9642: { return __builtin_isunordered(__x, __y); } 9642: 9642: constexpr bool 9642: isunordered(long double __x, long double __y) 9642: { return __builtin_isunordered(__x, __y); } 9642: 9642: 9642: 9642: template 9642: constexpr typename 9642: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value 9642: && __is_arithmetic<_Up>::__value), bool>::__type 9642: isunordered(_Tp __x, _Up __y) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 9642: return __builtin_isunordered(__type(__x), __type(__y)); 9642: } 9642: # 1881 "/usr/include/c++/13/cmath" 3 9642: using ::double_t; 9642: using ::float_t; 9642: 9642: 9642: using ::acosh; 9642: using ::acoshf; 9642: using ::acoshl; 9642: 9642: using ::asinh; 9642: using ::asinhf; 9642: using ::asinhl; 9642: 9642: using ::atanh; 9642: using ::atanhf; 9642: using ::atanhl; 9642: 9642: using ::cbrt; 9642: using ::cbrtf; 9642: using ::cbrtl; 9642: 9642: using ::copysign; 9642: using ::copysignf; 9642: using ::copysignl; 9642: 9642: using ::erf; 9642: using ::erff; 9642: using ::erfl; 9642: 9642: using ::erfc; 9642: using ::erfcf; 9642: using ::erfcl; 9642: 9642: using ::exp2; 9642: using ::exp2f; 9642: using ::exp2l; 9642: 9642: using ::expm1; 9642: using ::expm1f; 9642: using ::expm1l; 9642: 9642: using ::fdim; 9642: using ::fdimf; 9642: using ::fdiml; 9642: 9642: using ::fma; 9642: using ::fmaf; 9642: using ::fmal; 9642: 9642: using ::fmax; 9642: using ::fmaxf; 9642: using ::fmaxl; 9642: 9642: using ::fmin; 9642: using ::fminf; 9642: using ::fminl; 9642: 9642: using ::hypot; 9642: using ::hypotf; 9642: using ::hypotl; 9642: 9642: using ::ilogb; 9642: using ::ilogbf; 9642: using ::ilogbl; 9642: 9642: using ::lgamma; 9642: using ::lgammaf; 9642: using ::lgammal; 9642: 9642: 9642: using ::llrint; 9642: using ::llrintf; 9642: using ::llrintl; 9642: 9642: using ::llround; 9642: using ::llroundf; 9642: using ::llroundl; 9642: 9642: 9642: using ::log1p; 9642: using ::log1pf; 9642: using ::log1pl; 9642: 9642: using ::log2; 9642: using ::log2f; 9642: using ::log2l; 9642: 9642: using ::logb; 9642: using ::logbf; 9642: using ::logbl; 9642: 9642: using ::lrint; 9642: using ::lrintf; 9642: using ::lrintl; 9642: 9642: using ::lround; 9642: using ::lroundf; 9642: using ::lroundl; 9642: 9642: using ::nan; 9642: using ::nanf; 9642: using ::nanl; 9642: 9642: using ::nearbyint; 9642: using ::nearbyintf; 9642: using ::nearbyintl; 9642: 9642: using ::nextafter; 9642: using ::nextafterf; 9642: using ::nextafterl; 9642: 9642: using ::nexttoward; 9642: using ::nexttowardf; 9642: using ::nexttowardl; 9642: 9642: using ::remainder; 9642: using ::remainderf; 9642: using ::remainderl; 9642: 9642: using ::remquo; 9642: using ::remquof; 9642: using ::remquol; 9642: 9642: using ::rint; 9642: using ::rintf; 9642: using ::rintl; 9642: 9642: using ::round; 9642: using ::roundf; 9642: using ::roundl; 9642: 9642: using ::scalbln; 9642: using ::scalblnf; 9642: using ::scalblnl; 9642: 9642: using ::scalbn; 9642: using ::scalbnf; 9642: using ::scalbnl; 9642: 9642: using ::tgamma; 9642: using ::tgammaf; 9642: using ::tgammal; 9642: 9642: using ::trunc; 9642: using ::truncf; 9642: using ::truncl; 9642: 9642: 9642: 9642: constexpr float 9642: acosh(float __x) 9642: { return __builtin_acoshf(__x); } 9642: 9642: constexpr long double 9642: acosh(long double __x) 9642: { return __builtin_acoshl(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: acosh(_Tp __x) 9642: { return __builtin_acosh(__x); } 9642: 9642: 9642: 9642: constexpr float 9642: asinh(float __x) 9642: { return __builtin_asinhf(__x); } 9642: 9642: constexpr long double 9642: asinh(long double __x) 9642: { return __builtin_asinhl(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: asinh(_Tp __x) 9642: { return __builtin_asinh(__x); } 9642: 9642: 9642: 9642: constexpr float 9642: atanh(float __x) 9642: { return __builtin_atanhf(__x); } 9642: 9642: constexpr long double 9642: atanh(long double __x) 9642: { return __builtin_atanhl(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: atanh(_Tp __x) 9642: { return __builtin_atanh(__x); } 9642: 9642: 9642: 9642: constexpr float 9642: cbrt(float __x) 9642: { return __builtin_cbrtf(__x); } 9642: 9642: constexpr long double 9642: cbrt(long double __x) 9642: { return __builtin_cbrtl(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: cbrt(_Tp __x) 9642: { return __builtin_cbrt(__x); } 9642: 9642: 9642: 9642: constexpr float 9642: copysign(float __x, float __y) 9642: { return __builtin_copysignf(__x, __y); } 9642: 9642: constexpr long double 9642: copysign(long double __x, long double __y) 9642: { return __builtin_copysignl(__x, __y); } 9642: 9642: 9642: 9642: constexpr float 9642: erf(float __x) 9642: { return __builtin_erff(__x); } 9642: 9642: constexpr long double 9642: erf(long double __x) 9642: { return __builtin_erfl(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: erf(_Tp __x) 9642: { return __builtin_erf(__x); } 9642: 9642: 9642: 9642: constexpr float 9642: erfc(float __x) 9642: { return __builtin_erfcf(__x); } 9642: 9642: constexpr long double 9642: erfc(long double __x) 9642: { return __builtin_erfcl(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: erfc(_Tp __x) 9642: { return __builtin_erfc(__x); } 9642: 9642: 9642: 9642: constexpr float 9642: exp2(float __x) 9642: { return __builtin_exp2f(__x); } 9642: 9642: constexpr long double 9642: exp2(long double __x) 9642: { return __builtin_exp2l(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: exp2(_Tp __x) 9642: { return __builtin_exp2(__x); } 9642: 9642: 9642: 9642: constexpr float 9642: expm1(float __x) 9642: { return __builtin_expm1f(__x); } 9642: 9642: constexpr long double 9642: expm1(long double __x) 9642: { return __builtin_expm1l(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: expm1(_Tp __x) 9642: { return __builtin_expm1(__x); } 9642: 9642: 9642: 9642: constexpr float 9642: fdim(float __x, float __y) 9642: { return __builtin_fdimf(__x, __y); } 9642: 9642: constexpr long double 9642: fdim(long double __x, long double __y) 9642: { return __builtin_fdiml(__x, __y); } 9642: 9642: 9642: 9642: constexpr float 9642: fma(float __x, float __y, float __z) 9642: { return __builtin_fmaf(__x, __y, __z); } 9642: 9642: constexpr long double 9642: fma(long double __x, long double __y, long double __z) 9642: { return __builtin_fmal(__x, __y, __z); } 9642: 9642: 9642: 9642: constexpr float 9642: fmax(float __x, float __y) 9642: { return __builtin_fmaxf(__x, __y); } 9642: 9642: constexpr long double 9642: fmax(long double __x, long double __y) 9642: { return __builtin_fmaxl(__x, __y); } 9642: 9642: 9642: 9642: constexpr float 9642: fmin(float __x, float __y) 9642: { return __builtin_fminf(__x, __y); } 9642: 9642: constexpr long double 9642: fmin(long double __x, long double __y) 9642: { return __builtin_fminl(__x, __y); } 9642: 9642: 9642: 9642: constexpr float 9642: hypot(float __x, float __y) 9642: { return __builtin_hypotf(__x, __y); } 9642: 9642: constexpr long double 9642: hypot(long double __x, long double __y) 9642: { return __builtin_hypotl(__x, __y); } 9642: 9642: 9642: 9642: constexpr int 9642: ilogb(float __x) 9642: { return __builtin_ilogbf(__x); } 9642: 9642: constexpr int 9642: ilogb(long double __x) 9642: { return __builtin_ilogbl(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr 9642: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: int>::__type 9642: ilogb(_Tp __x) 9642: { return __builtin_ilogb(__x); } 9642: 9642: 9642: 9642: constexpr float 9642: lgamma(float __x) 9642: { return __builtin_lgammaf(__x); } 9642: 9642: constexpr long double 9642: lgamma(long double __x) 9642: { return __builtin_lgammal(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: lgamma(_Tp __x) 9642: { return __builtin_lgamma(__x); } 9642: 9642: 9642: 9642: constexpr long long 9642: llrint(float __x) 9642: { return __builtin_llrintf(__x); } 9642: 9642: constexpr long long 9642: llrint(long double __x) 9642: { return __builtin_llrintl(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: long long>::__type 9642: llrint(_Tp __x) 9642: { return __builtin_llrint(__x); } 9642: 9642: 9642: 9642: constexpr long long 9642: llround(float __x) 9642: { return __builtin_llroundf(__x); } 9642: 9642: constexpr long long 9642: llround(long double __x) 9642: { return __builtin_llroundl(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: long long>::__type 9642: llround(_Tp __x) 9642: { return __builtin_llround(__x); } 9642: 9642: 9642: 9642: constexpr float 9642: log1p(float __x) 9642: { return __builtin_log1pf(__x); } 9642: 9642: constexpr long double 9642: log1p(long double __x) 9642: { return __builtin_log1pl(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: log1p(_Tp __x) 9642: { return __builtin_log1p(__x); } 9642: 9642: 9642: 9642: 9642: constexpr float 9642: log2(float __x) 9642: { return __builtin_log2f(__x); } 9642: 9642: constexpr long double 9642: log2(long double __x) 9642: { return __builtin_log2l(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: log2(_Tp __x) 9642: { return __builtin_log2(__x); } 9642: 9642: 9642: 9642: constexpr float 9642: logb(float __x) 9642: { return __builtin_logbf(__x); } 9642: 9642: constexpr long double 9642: logb(long double __x) 9642: { return __builtin_logbl(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: logb(_Tp __x) 9642: { return __builtin_logb(__x); } 9642: 9642: 9642: 9642: constexpr long 9642: lrint(float __x) 9642: { return __builtin_lrintf(__x); } 9642: 9642: constexpr long 9642: lrint(long double __x) 9642: { return __builtin_lrintl(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: long>::__type 9642: lrint(_Tp __x) 9642: { return __builtin_lrint(__x); } 9642: 9642: 9642: 9642: constexpr long 9642: lround(float __x) 9642: { return __builtin_lroundf(__x); } 9642: 9642: constexpr long 9642: lround(long double __x) 9642: { return __builtin_lroundl(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: long>::__type 9642: lround(_Tp __x) 9642: { return __builtin_lround(__x); } 9642: 9642: 9642: 9642: constexpr float 9642: nearbyint(float __x) 9642: { return __builtin_nearbyintf(__x); } 9642: 9642: constexpr long double 9642: nearbyint(long double __x) 9642: { return __builtin_nearbyintl(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: nearbyint(_Tp __x) 9642: { return __builtin_nearbyint(__x); } 9642: 9642: 9642: 9642: constexpr float 9642: nextafter(float __x, float __y) 9642: { return __builtin_nextafterf(__x, __y); } 9642: 9642: constexpr long double 9642: nextafter(long double __x, long double __y) 9642: { return __builtin_nextafterl(__x, __y); } 9642: 9642: 9642: 9642: constexpr float 9642: nexttoward(float __x, long double __y) 9642: { return __builtin_nexttowardf(__x, __y); } 9642: 9642: constexpr long double 9642: nexttoward(long double __x, long double __y) 9642: { return __builtin_nexttowardl(__x, __y); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: nexttoward(_Tp __x, long double __y) 9642: { return __builtin_nexttoward(__x, __y); } 9642: 9642: 9642: 9642: constexpr float 9642: remainder(float __x, float __y) 9642: { return __builtin_remainderf(__x, __y); } 9642: 9642: constexpr long double 9642: remainder(long double __x, long double __y) 9642: { return __builtin_remainderl(__x, __y); } 9642: 9642: 9642: 9642: inline float 9642: remquo(float __x, float __y, int* __pquo) 9642: { return __builtin_remquof(__x, __y, __pquo); } 9642: 9642: inline long double 9642: remquo(long double __x, long double __y, int* __pquo) 9642: { return __builtin_remquol(__x, __y, __pquo); } 9642: 9642: 9642: 9642: constexpr float 9642: rint(float __x) 9642: { return __builtin_rintf(__x); } 9642: 9642: constexpr long double 9642: rint(long double __x) 9642: { return __builtin_rintl(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: rint(_Tp __x) 9642: { return __builtin_rint(__x); } 9642: 9642: 9642: 9642: constexpr float 9642: round(float __x) 9642: { return __builtin_roundf(__x); } 9642: 9642: constexpr long double 9642: round(long double __x) 9642: { return __builtin_roundl(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: round(_Tp __x) 9642: { return __builtin_round(__x); } 9642: 9642: 9642: 9642: constexpr float 9642: scalbln(float __x, long __ex) 9642: { return __builtin_scalblnf(__x, __ex); } 9642: 9642: constexpr long double 9642: scalbln(long double __x, long __ex) 9642: { return __builtin_scalblnl(__x, __ex); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: scalbln(_Tp __x, long __ex) 9642: { return __builtin_scalbln(__x, __ex); } 9642: 9642: 9642: 9642: constexpr float 9642: scalbn(float __x, int __ex) 9642: { return __builtin_scalbnf(__x, __ex); } 9642: 9642: constexpr long double 9642: scalbn(long double __x, int __ex) 9642: { return __builtin_scalbnl(__x, __ex); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: scalbn(_Tp __x, int __ex) 9642: { return __builtin_scalbn(__x, __ex); } 9642: 9642: 9642: 9642: constexpr float 9642: tgamma(float __x) 9642: { return __builtin_tgammaf(__x); } 9642: 9642: constexpr long double 9642: tgamma(long double __x) 9642: { return __builtin_tgammal(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: tgamma(_Tp __x) 9642: { return __builtin_tgamma(__x); } 9642: 9642: 9642: 9642: constexpr float 9642: trunc(float __x) 9642: { return __builtin_truncf(__x); } 9642: 9642: constexpr long double 9642: trunc(long double __x) 9642: { return __builtin_truncl(__x); } 9642: 9642: 9642: 9642: template 9642: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 9642: double>::__type 9642: trunc(_Tp __x) 9642: { return __builtin_trunc(__x); } 9642: # 3469 "/usr/include/c++/13/cmath" 3 9642: template 9642: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 9642: copysign(_Tp __x, _Up __y) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 9642: return copysign(__type(__x), __type(__y)); 9642: } 9642: 9642: template 9642: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 9642: fdim(_Tp __x, _Up __y) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 9642: return fdim(__type(__x), __type(__y)); 9642: } 9642: 9642: template 9642: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 9642: fmax(_Tp __x, _Up __y) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 9642: return fmax(__type(__x), __type(__y)); 9642: } 9642: 9642: template 9642: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 9642: fmin(_Tp __x, _Up __y) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 9642: return fmin(__type(__x), __type(__y)); 9642: } 9642: 9642: template 9642: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 9642: hypot(_Tp __x, _Up __y) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 9642: return hypot(__type(__x), __type(__y)); 9642: } 9642: 9642: template 9642: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 9642: nextafter(_Tp __x, _Up __y) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 9642: return nextafter(__type(__x), __type(__y)); 9642: } 9642: 9642: template 9642: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 9642: remainder(_Tp __x, _Up __y) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 9642: return remainder(__type(__x), __type(__y)); 9642: } 9642: 9642: template 9642: inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 9642: remquo(_Tp __x, _Up __y, int* __pquo) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 9642: return remquo(__type(__x), __type(__y), __pquo); 9642: } 9642: 9642: template 9642: constexpr typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type 9642: fma(_Tp __x, _Up __y, _Vp __z) 9642: { 9642: typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type; 9642: return fma(__type(__x), __type(__y), __type(__z)); 9642: } 9642: # 3550 "/usr/include/c++/13/cmath" 3 9642: template 9642: inline _Tp 9642: __hypot3(_Tp __x, _Tp __y, _Tp __z) 9642: { 9642: __x = std::abs(__x); 9642: __y = std::abs(__y); 9642: __z = std::abs(__z); 9642: if (_Tp __a = __x < __y ? __y < __z ? __z : __y : __x < __z ? __z : __x) 9642: return __a * std::sqrt((__x / __a) * (__x / __a) 9642: + (__y / __a) * (__y / __a) 9642: + (__z / __a) * (__z / __a)); 9642: else 9642: return {}; 9642: } 9642: 9642: inline float 9642: hypot(float __x, float __y, float __z) 9642: { return std::__hypot3(__x, __y, __z); } 9642: 9642: inline double 9642: hypot(double __x, double __y, double __z) 9642: { return std::__hypot3(__x, __y, __z); } 9642: 9642: inline long double 9642: hypot(long double __x, long double __y, long double __z) 9642: { return std::__hypot3(__x, __y, __z); } 9642: 9642: template 9642: __gnu_cxx::__promoted_t<_Tp, _Up, _Vp> 9642: hypot(_Tp __x, _Up __y, _Vp __z) 9642: { 9642: using __type = __gnu_cxx::__promoted_t<_Tp, _Up, _Vp>; 9642: return std::__hypot3<__type>(__x, __y, __z); 9642: } 9642: # 3695 "/usr/include/c++/13/cmath" 3 9642: 9642: } 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/specfun.h" 1 3 9642: # 47 "/usr/include/c++/13/bits/specfun.h" 3 9642: # 1 "/usr/include/c++/13/tr1/gamma.tcc" 1 3 9642: # 49 "/usr/include/c++/13/tr1/gamma.tcc" 3 9642: # 1 "/usr/include/c++/13/tr1/special_function_util.h" 1 3 9642: # 39 "/usr/include/c++/13/tr1/special_function_util.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 50 "/usr/include/c++/13/tr1/special_function_util.h" 3 9642: namespace __detail 9642: { 9642: 9642: 9642: 9642: template 9642: struct __floating_point_constant 9642: { 9642: static const _Tp __value; 9642: }; 9642: 9642: 9642: 9642: template 9642: struct __numeric_constants 9642: { 9642: 9642: static _Tp __pi() throw() 9642: { return static_cast<_Tp>(3.1415926535897932384626433832795029L); } 9642: 9642: static _Tp __pi_2() throw() 9642: { return static_cast<_Tp>(1.5707963267948966192313216916397514L); } 9642: 9642: static _Tp __pi_3() throw() 9642: { return static_cast<_Tp>(1.0471975511965977461542144610931676L); } 9642: 9642: static _Tp __pi_4() throw() 9642: { return static_cast<_Tp>(0.7853981633974483096156608458198757L); } 9642: 9642: static _Tp __1_pi() throw() 9642: { return static_cast<_Tp>(0.3183098861837906715377675267450287L); } 9642: 9642: static _Tp __2_sqrtpi() throw() 9642: { return static_cast<_Tp>(1.1283791670955125738961589031215452L); } 9642: 9642: static _Tp __sqrt2() throw() 9642: { return static_cast<_Tp>(1.4142135623730950488016887242096981L); } 9642: 9642: static _Tp __sqrt3() throw() 9642: { return static_cast<_Tp>(1.7320508075688772935274463415058723L); } 9642: 9642: static _Tp __sqrtpio2() throw() 9642: { return static_cast<_Tp>(1.2533141373155002512078826424055226L); } 9642: 9642: static _Tp __sqrt1_2() throw() 9642: { return static_cast<_Tp>(0.7071067811865475244008443621048490L); } 9642: 9642: static _Tp __lnpi() throw() 9642: { return static_cast<_Tp>(1.1447298858494001741434273513530587L); } 9642: 9642: static _Tp __gamma_e() throw() 9642: { return static_cast<_Tp>(0.5772156649015328606065120900824024L); } 9642: 9642: static _Tp __euler() throw() 9642: { return static_cast<_Tp>(2.7182818284590452353602874713526625L); } 9642: }; 9642: # 114 "/usr/include/c++/13/tr1/special_function_util.h" 3 9642: template 9642: inline bool __isnan(_Tp __x) 9642: { return std::isnan(__x); } 9642: # 133 "/usr/include/c++/13/tr1/special_function_util.h" 3 9642: } 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 50 "/usr/include/c++/13/tr1/gamma.tcc" 2 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 65 "/usr/include/c++/13/tr1/gamma.tcc" 3 9642: namespace __detail 9642: { 9642: # 76 "/usr/include/c++/13/tr1/gamma.tcc" 3 9642: template 9642: _Tp 9642: __bernoulli_series(unsigned int __n) 9642: { 9642: 9642: static const _Tp __num[28] = { 9642: _Tp(1UL), -_Tp(1UL) / _Tp(2UL), 9642: _Tp(1UL) / _Tp(6UL), _Tp(0UL), 9642: -_Tp(1UL) / _Tp(30UL), _Tp(0UL), 9642: _Tp(1UL) / _Tp(42UL), _Tp(0UL), 9642: -_Tp(1UL) / _Tp(30UL), _Tp(0UL), 9642: _Tp(5UL) / _Tp(66UL), _Tp(0UL), 9642: -_Tp(691UL) / _Tp(2730UL), _Tp(0UL), 9642: _Tp(7UL) / _Tp(6UL), _Tp(0UL), 9642: -_Tp(3617UL) / _Tp(510UL), _Tp(0UL), 9642: _Tp(43867UL) / _Tp(798UL), _Tp(0UL), 9642: -_Tp(174611) / _Tp(330UL), _Tp(0UL), 9642: _Tp(854513UL) / _Tp(138UL), _Tp(0UL), 9642: -_Tp(236364091UL) / _Tp(2730UL), _Tp(0UL), 9642: _Tp(8553103UL) / _Tp(6UL), _Tp(0UL) 9642: }; 9642: 9642: if (__n == 0) 9642: return _Tp(1); 9642: 9642: if (__n == 1) 9642: return -_Tp(1) / _Tp(2); 9642: 9642: 9642: if (__n % 2 == 1) 9642: return _Tp(0); 9642: 9642: 9642: if (__n < 28) 9642: return __num[__n]; 9642: 9642: 9642: _Tp __fact = _Tp(1); 9642: if ((__n / 2) % 2 == 0) 9642: __fact *= _Tp(-1); 9642: for (unsigned int __k = 1; __k <= __n; ++__k) 9642: __fact *= __k / (_Tp(2) * __numeric_constants<_Tp>::__pi()); 9642: __fact *= _Tp(2); 9642: 9642: _Tp __sum = _Tp(0); 9642: for (unsigned int __i = 1; __i < 1000; ++__i) 9642: { 9642: _Tp __term = std::pow(_Tp(__i), -_Tp(__n)); 9642: if (__term < std::numeric_limits<_Tp>::epsilon()) 9642: break; 9642: __sum += __term; 9642: } 9642: 9642: return __fact * __sum; 9642: } 9642: # 139 "/usr/include/c++/13/tr1/gamma.tcc" 3 9642: template 9642: inline _Tp 9642: __bernoulli(int __n) 9642: { return __bernoulli_series<_Tp>(__n); } 9642: # 153 "/usr/include/c++/13/tr1/gamma.tcc" 3 9642: template 9642: _Tp 9642: __log_gamma_bernoulli(_Tp __x) 9642: { 9642: _Tp __lg = (__x - _Tp(0.5L)) * std::log(__x) - __x 9642: + _Tp(0.5L) * std::log(_Tp(2) 9642: * __numeric_constants<_Tp>::__pi()); 9642: 9642: const _Tp __xx = __x * __x; 9642: _Tp __help = _Tp(1) / __x; 9642: for ( unsigned int __i = 1; __i < 20; ++__i ) 9642: { 9642: const _Tp __2i = _Tp(2 * __i); 9642: __help /= __2i * (__2i - _Tp(1)) * __xx; 9642: __lg += __bernoulli<_Tp>(2 * __i) * __help; 9642: } 9642: 9642: return __lg; 9642: } 9642: # 181 "/usr/include/c++/13/tr1/gamma.tcc" 3 9642: template 9642: _Tp 9642: __log_gamma_lanczos(_Tp __x) 9642: { 9642: const _Tp __xm1 = __x - _Tp(1); 9642: 9642: static const _Tp __lanczos_cheb_7[9] = { 9642: _Tp( 0.99999999999980993227684700473478L), 9642: _Tp( 676.520368121885098567009190444019L), 9642: _Tp(-1259.13921672240287047156078755283L), 9642: _Tp( 771.3234287776530788486528258894L), 9642: _Tp(-176.61502916214059906584551354L), 9642: _Tp( 12.507343278686904814458936853L), 9642: _Tp(-0.13857109526572011689554707L), 9642: _Tp( 9.984369578019570859563e-6L), 9642: _Tp( 1.50563273514931155834e-7L) 9642: }; 9642: 9642: static const _Tp __LOGROOT2PI 9642: = _Tp(0.9189385332046727417803297364056176L); 9642: 9642: _Tp __sum = __lanczos_cheb_7[0]; 9642: for(unsigned int __k = 1; __k < 9; ++__k) 9642: __sum += __lanczos_cheb_7[__k] / (__xm1 + __k); 9642: 9642: const _Tp __term1 = (__xm1 + _Tp(0.5L)) 9642: * std::log((__xm1 + _Tp(7.5L)) 9642: / __numeric_constants<_Tp>::__euler()); 9642: const _Tp __term2 = __LOGROOT2PI + std::log(__sum); 9642: const _Tp __result = __term1 + (__term2 - _Tp(7)); 9642: 9642: return __result; 9642: } 9642: # 225 "/usr/include/c++/13/tr1/gamma.tcc" 3 9642: template 9642: _Tp 9642: __log_gamma(_Tp __x) 9642: { 9642: if (__x > _Tp(0.5L)) 9642: return __log_gamma_lanczos(__x); 9642: else 9642: { 9642: const _Tp __sin_fact 9642: = std::abs(std::sin(__numeric_constants<_Tp>::__pi() * __x)); 9642: if (__sin_fact == _Tp(0)) 9642: std::__throw_domain_error(("Argument is nonpositive integer " "in __log_gamma") 9642: ); 9642: return __numeric_constants<_Tp>::__lnpi() 9642: - std::log(__sin_fact) 9642: - __log_gamma_lanczos(_Tp(1) - __x); 9642: } 9642: } 9642: # 252 "/usr/include/c++/13/tr1/gamma.tcc" 3 9642: template 9642: _Tp 9642: __log_gamma_sign(_Tp __x) 9642: { 9642: if (__x > _Tp(0)) 9642: return _Tp(1); 9642: else 9642: { 9642: const _Tp __sin_fact 9642: = std::sin(__numeric_constants<_Tp>::__pi() * __x); 9642: if (__sin_fact > _Tp(0)) 9642: return (1); 9642: else if (__sin_fact < _Tp(0)) 9642: return -_Tp(1); 9642: else 9642: return _Tp(0); 9642: } 9642: } 9642: # 283 "/usr/include/c++/13/tr1/gamma.tcc" 3 9642: template 9642: _Tp 9642: __log_bincoef(unsigned int __n, unsigned int __k) 9642: { 9642: 9642: static const _Tp __max_bincoeff 9642: = std::numeric_limits<_Tp>::max_exponent10 9642: * std::log(_Tp(10)) - _Tp(1); 9642: 9642: _Tp __coeff = ::std::lgamma(_Tp(1 + __n)) 9642: - ::std::lgamma(_Tp(1 + __k)) 9642: - ::std::lgamma(_Tp(1 + __n - __k)); 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 314 "/usr/include/c++/13/tr1/gamma.tcc" 3 9642: template 9642: _Tp 9642: __bincoef(unsigned int __n, unsigned int __k) 9642: { 9642: 9642: static const _Tp __max_bincoeff 9642: = std::numeric_limits<_Tp>::max_exponent10 9642: * std::log(_Tp(10)) - _Tp(1); 9642: 9642: const _Tp __log_coeff = __log_bincoef<_Tp>(__n, __k); 9642: if (__log_coeff > __max_bincoeff) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else 9642: return std::exp(__log_coeff); 9642: } 9642: # 337 "/usr/include/c++/13/tr1/gamma.tcc" 3 9642: template 9642: inline _Tp 9642: __gamma(_Tp __x) 9642: { return std::exp(__log_gamma(__x)); } 9642: # 356 "/usr/include/c++/13/tr1/gamma.tcc" 3 9642: template 9642: _Tp 9642: __psi_series(_Tp __x) 9642: { 9642: _Tp __sum = -__numeric_constants<_Tp>::__gamma_e() - _Tp(1) / __x; 9642: const unsigned int __max_iter = 100000; 9642: for (unsigned int __k = 1; __k < __max_iter; ++__k) 9642: { 9642: const _Tp __term = __x / (__k * (__k + __x)); 9642: __sum += __term; 9642: if (std::abs(__term / __sum) < std::numeric_limits<_Tp>::epsilon()) 9642: break; 9642: } 9642: return __sum; 9642: } 9642: # 386 "/usr/include/c++/13/tr1/gamma.tcc" 3 9642: template 9642: _Tp 9642: __psi_asymp(_Tp __x) 9642: { 9642: _Tp __sum = std::log(__x) - _Tp(0.5L) / __x; 9642: const _Tp __xx = __x * __x; 9642: _Tp __xp = __xx; 9642: const unsigned int __max_iter = 100; 9642: for (unsigned int __k = 1; __k < __max_iter; ++__k) 9642: { 9642: const _Tp __term = __bernoulli<_Tp>(2 * __k) / (2 * __k * __xp); 9642: __sum -= __term; 9642: if (std::abs(__term / __sum) < std::numeric_limits<_Tp>::epsilon()) 9642: break; 9642: __xp *= __xx; 9642: } 9642: return __sum; 9642: } 9642: # 417 "/usr/include/c++/13/tr1/gamma.tcc" 3 9642: template 9642: _Tp 9642: __psi(_Tp __x) 9642: { 9642: const int __n = static_cast(__x + 0.5L); 9642: const _Tp __eps = _Tp(4) * std::numeric_limits<_Tp>::epsilon(); 9642: if (__n <= 0 && std::abs(__x - _Tp(__n)) < __eps) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (__x < _Tp(0)) 9642: { 9642: const _Tp __pi = __numeric_constants<_Tp>::__pi(); 9642: return __psi(_Tp(1) - __x) 9642: - __pi * std::cos(__pi * __x) / std::sin(__pi * __x); 9642: } 9642: else if (__x > _Tp(100)) 9642: return __psi_asymp(__x); 9642: else 9642: return __psi_series(__x); 9642: } 9642: # 446 "/usr/include/c++/13/tr1/gamma.tcc" 3 9642: template 9642: _Tp 9642: __psi(unsigned int __n, _Tp __x) 9642: { 9642: if (__x <= _Tp(0)) 9642: std::__throw_domain_error(("Argument out of range " "in __psi") 9642: ); 9642: else if (__n == 0) 9642: return __psi(__x); 9642: else 9642: { 9642: const _Tp __hzeta = __hurwitz_zeta(_Tp(__n + 1), __x); 9642: 9642: const _Tp __ln_nfact = ::std::lgamma(_Tp(__n + 1)); 9642: 9642: 9642: 9642: _Tp __result = std::exp(__ln_nfact) * __hzeta; 9642: if (__n % 2 == 1) 9642: __result = -__result; 9642: return __result; 9642: } 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 48 "/usr/include/c++/13/bits/specfun.h" 2 3 9642: # 1 "/usr/include/c++/13/tr1/bessel_function.tcc" 1 3 9642: # 55 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 71 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 9642: namespace __detail 9642: { 9642: # 98 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 9642: template 9642: void 9642: __gamma_temme(_Tp __mu, 9642: _Tp & __gam1, _Tp & __gam2, _Tp & __gampl, _Tp & __gammi) 9642: { 9642: 9642: __gampl = _Tp(1) / ::std::tgamma(_Tp(1) + __mu); 9642: __gammi = _Tp(1) / ::std::tgamma(_Tp(1) - __mu); 9642: 9642: 9642: 9642: 9642: 9642: if (std::abs(__mu) < std::numeric_limits<_Tp>::epsilon()) 9642: __gam1 = -_Tp(__numeric_constants<_Tp>::__gamma_e()); 9642: else 9642: __gam1 = (__gammi - __gampl) / (_Tp(2) * __mu); 9642: 9642: __gam2 = (__gammi + __gampl) / (_Tp(2)); 9642: 9642: return; 9642: } 9642: # 136 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 9642: template 9642: void 9642: __bessel_jn(_Tp __nu, _Tp __x, 9642: _Tp & __Jnu, _Tp & __Nnu, _Tp & __Jpnu, _Tp & __Npnu) 9642: { 9642: if (__x == _Tp(0)) 9642: { 9642: if (__nu == _Tp(0)) 9642: { 9642: __Jnu = _Tp(1); 9642: __Jpnu = _Tp(0); 9642: } 9642: else if (__nu == _Tp(1)) 9642: { 9642: __Jnu = _Tp(0); 9642: __Jpnu = _Tp(0.5L); 9642: } 9642: else 9642: { 9642: __Jnu = _Tp(0); 9642: __Jpnu = _Tp(0); 9642: } 9642: __Nnu = -std::numeric_limits<_Tp>::infinity(); 9642: __Npnu = std::numeric_limits<_Tp>::infinity(); 9642: return; 9642: } 9642: 9642: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 9642: 9642: 9642: 9642: 9642: const _Tp __fp_min = std::sqrt(std::numeric_limits<_Tp>::min()); 9642: const int __max_iter = 15000; 9642: const _Tp __x_min = _Tp(2); 9642: 9642: const int __nl = (__x < __x_min 9642: ? static_cast(__nu + _Tp(0.5L)) 9642: : std::max(0, static_cast(__nu - __x + _Tp(1.5L)))); 9642: 9642: const _Tp __mu = __nu - __nl; 9642: const _Tp __mu2 = __mu * __mu; 9642: const _Tp __xi = _Tp(1) / __x; 9642: const _Tp __xi2 = _Tp(2) * __xi; 9642: _Tp __w = __xi2 / __numeric_constants<_Tp>::__pi(); 9642: int __isign = 1; 9642: _Tp __h = __nu * __xi; 9642: if (__h < __fp_min) 9642: __h = __fp_min; 9642: _Tp __b = __xi2 * __nu; 9642: _Tp __d = _Tp(0); 9642: _Tp __c = __h; 9642: int __i; 9642: for (__i = 1; __i <= __max_iter; ++__i) 9642: { 9642: __b += __xi2; 9642: __d = __b - __d; 9642: if (std::abs(__d) < __fp_min) 9642: __d = __fp_min; 9642: __c = __b - _Tp(1) / __c; 9642: if (std::abs(__c) < __fp_min) 9642: __c = __fp_min; 9642: __d = _Tp(1) / __d; 9642: const _Tp __del = __c * __d; 9642: __h *= __del; 9642: if (__d < _Tp(0)) 9642: __isign = -__isign; 9642: if (std::abs(__del - _Tp(1)) < __eps) 9642: break; 9642: } 9642: if (__i > __max_iter) 9642: std::__throw_runtime_error(("Argument x too large in __bessel_jn; " "try asymptotic expansion.") 9642: ); 9642: _Tp __Jnul = __isign * __fp_min; 9642: _Tp __Jpnul = __h * __Jnul; 9642: _Tp __Jnul1 = __Jnul; 9642: _Tp __Jpnu1 = __Jpnul; 9642: _Tp __fact = __nu * __xi; 9642: for ( int __l = __nl; __l >= 1; --__l ) 9642: { 9642: const _Tp __Jnutemp = __fact * __Jnul + __Jpnul; 9642: __fact -= __xi; 9642: __Jpnul = __fact * __Jnutemp - __Jnul; 9642: __Jnul = __Jnutemp; 9642: } 9642: if (__Jnul == _Tp(0)) 9642: __Jnul = __eps; 9642: _Tp __f= __Jpnul / __Jnul; 9642: _Tp __Nmu, __Nnu1, __Npmu, __Jmu; 9642: if (__x < __x_min) 9642: { 9642: const _Tp __x2 = __x / _Tp(2); 9642: const _Tp __pimu = __numeric_constants<_Tp>::__pi() * __mu; 9642: _Tp __fact = (std::abs(__pimu) < __eps 9642: ? _Tp(1) : __pimu / std::sin(__pimu)); 9642: _Tp __d = -std::log(__x2); 9642: _Tp __e = __mu * __d; 9642: _Tp __fact2 = (std::abs(__e) < __eps 9642: ? _Tp(1) : std::sinh(__e) / __e); 9642: _Tp __gam1, __gam2, __gampl, __gammi; 9642: __gamma_temme(__mu, __gam1, __gam2, __gampl, __gammi); 9642: _Tp __ff = (_Tp(2) / __numeric_constants<_Tp>::__pi()) 9642: * __fact * (__gam1 * std::cosh(__e) + __gam2 * __fact2 * __d); 9642: __e = std::exp(__e); 9642: _Tp __p = __e / (__numeric_constants<_Tp>::__pi() * __gampl); 9642: _Tp __q = _Tp(1) / (__e * __numeric_constants<_Tp>::__pi() * __gammi); 9642: const _Tp __pimu2 = __pimu / _Tp(2); 9642: _Tp __fact3 = (std::abs(__pimu2) < __eps 9642: ? _Tp(1) : std::sin(__pimu2) / __pimu2 ); 9642: _Tp __r = __numeric_constants<_Tp>::__pi() * __pimu2 * __fact3 * __fact3; 9642: _Tp __c = _Tp(1); 9642: __d = -__x2 * __x2; 9642: _Tp __sum = __ff + __r * __q; 9642: _Tp __sum1 = __p; 9642: for (__i = 1; __i <= __max_iter; ++__i) 9642: { 9642: __ff = (__i * __ff + __p + __q) / (__i * __i - __mu2); 9642: __c *= __d / _Tp(__i); 9642: __p /= _Tp(__i) - __mu; 9642: __q /= _Tp(__i) + __mu; 9642: const _Tp __del = __c * (__ff + __r * __q); 9642: __sum += __del; 9642: const _Tp __del1 = __c * __p - __i * __del; 9642: __sum1 += __del1; 9642: if ( std::abs(__del) < __eps * (_Tp(1) + std::abs(__sum)) ) 9642: break; 9642: } 9642: if ( __i > __max_iter ) 9642: std::__throw_runtime_error(("Bessel y series failed to converge " "in __bessel_jn.") 9642: ); 9642: __Nmu = -__sum; 9642: __Nnu1 = -__sum1 * __xi2; 9642: __Npmu = __mu * __xi * __Nmu - __Nnu1; 9642: __Jmu = __w / (__Npmu - __f * __Nmu); 9642: } 9642: else 9642: { 9642: _Tp __a = _Tp(0.25L) - __mu2; 9642: _Tp __q = _Tp(1); 9642: _Tp __p = -__xi / _Tp(2); 9642: _Tp __br = _Tp(2) * __x; 9642: _Tp __bi = _Tp(2); 9642: _Tp __fact = __a * __xi / (__p * __p + __q * __q); 9642: _Tp __cr = __br + __q * __fact; 9642: _Tp __ci = __bi + __p * __fact; 9642: _Tp __den = __br * __br + __bi * __bi; 9642: _Tp __dr = __br / __den; 9642: _Tp __di = -__bi / __den; 9642: _Tp __dlr = __cr * __dr - __ci * __di; 9642: _Tp __dli = __cr * __di + __ci * __dr; 9642: _Tp __temp = __p * __dlr - __q * __dli; 9642: __q = __p * __dli + __q * __dlr; 9642: __p = __temp; 9642: int __i; 9642: for (__i = 2; __i <= __max_iter; ++__i) 9642: { 9642: __a += _Tp(2 * (__i - 1)); 9642: __bi += _Tp(2); 9642: __dr = __a * __dr + __br; 9642: __di = __a * __di + __bi; 9642: if (std::abs(__dr) + std::abs(__di) < __fp_min) 9642: __dr = __fp_min; 9642: __fact = __a / (__cr * __cr + __ci * __ci); 9642: __cr = __br + __cr * __fact; 9642: __ci = __bi - __ci * __fact; 9642: if (std::abs(__cr) + std::abs(__ci) < __fp_min) 9642: __cr = __fp_min; 9642: __den = __dr * __dr + __di * __di; 9642: __dr /= __den; 9642: __di /= -__den; 9642: __dlr = __cr * __dr - __ci * __di; 9642: __dli = __cr * __di + __ci * __dr; 9642: __temp = __p * __dlr - __q * __dli; 9642: __q = __p * __dli + __q * __dlr; 9642: __p = __temp; 9642: if (std::abs(__dlr - _Tp(1)) + std::abs(__dli) < __eps) 9642: break; 9642: } 9642: if (__i > __max_iter) 9642: std::__throw_runtime_error(("Lentz's method failed " "in __bessel_jn.") 9642: ); 9642: const _Tp __gam = (__p - __f) / __q; 9642: __Jmu = std::sqrt(__w / ((__p - __f) * __gam + __q)); 9642: 9642: __Jmu = ::std::copysign(__Jmu, __Jnul); 9642: 9642: 9642: 9642: 9642: __Nmu = __gam * __Jmu; 9642: __Npmu = (__p + __q / __gam) * __Nmu; 9642: __Nnu1 = __mu * __xi * __Nmu - __Npmu; 9642: } 9642: __fact = __Jmu / __Jnul; 9642: __Jnu = __fact * __Jnul1; 9642: __Jpnu = __fact * __Jpnu1; 9642: for (__i = 1; __i <= __nl; ++__i) 9642: { 9642: const _Tp __Nnutemp = (__mu + __i) * __xi2 * __Nnu1 - __Nmu; 9642: __Nmu = __Nnu1; 9642: __Nnu1 = __Nnutemp; 9642: } 9642: __Nnu = __Nmu; 9642: __Npnu = __nu * __xi * __Nmu - __Nnu1; 9642: 9642: return; 9642: } 9642: # 361 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 9642: template 9642: void 9642: __cyl_bessel_jn_asymp(_Tp __nu, _Tp __x, _Tp & __Jnu, _Tp & __Nnu) 9642: { 9642: const _Tp __mu = _Tp(4) * __nu * __nu; 9642: const _Tp __8x = _Tp(8) * __x; 9642: 9642: _Tp __P = _Tp(0); 9642: _Tp __Q = _Tp(0); 9642: 9642: _Tp __k = _Tp(0); 9642: _Tp __term = _Tp(1); 9642: 9642: int __epsP = 0; 9642: int __epsQ = 0; 9642: 9642: _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 9642: 9642: do 9642: { 9642: __term *= (__k == 0 9642: ? _Tp(1) 9642: : -(__mu - (2 * __k - 1) * (2 * __k - 1)) / (__k * __8x)); 9642: 9642: __epsP = std::abs(__term) < __eps * std::abs(__P); 9642: __P += __term; 9642: 9642: __k++; 9642: 9642: __term *= (__mu - (2 * __k - 1) * (2 * __k - 1)) / (__k * __8x); 9642: __epsQ = std::abs(__term) < __eps * std::abs(__Q); 9642: __Q += __term; 9642: 9642: if (__epsP && __epsQ && __k > (__nu / 2.)) 9642: break; 9642: 9642: __k++; 9642: } 9642: while (__k < 1000); 9642: 9642: const _Tp __chi = __x - (__nu + _Tp(0.5L)) 9642: * __numeric_constants<_Tp>::__pi_2(); 9642: 9642: const _Tp __c = std::cos(__chi); 9642: const _Tp __s = std::sin(__chi); 9642: 9642: const _Tp __coef = std::sqrt(_Tp(2) 9642: / (__numeric_constants<_Tp>::__pi() * __x)); 9642: 9642: __Jnu = __coef * (__c * __P - __s * __Q); 9642: __Nnu = __coef * (__s * __P + __c * __Q); 9642: 9642: return; 9642: } 9642: # 444 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 9642: template 9642: _Tp 9642: __cyl_bessel_ij_series(_Tp __nu, _Tp __x, _Tp __sgn, 9642: unsigned int __max_iter) 9642: { 9642: if (__x == _Tp(0)) 9642: return __nu == _Tp(0) ? _Tp(1) : _Tp(0); 9642: 9642: const _Tp __x2 = __x / _Tp(2); 9642: _Tp __fact = __nu * std::log(__x2); 9642: 9642: __fact -= ::std::lgamma(__nu + _Tp(1)); 9642: 9642: 9642: 9642: __fact = std::exp(__fact); 9642: const _Tp __xx4 = __sgn * __x2 * __x2; 9642: _Tp __Jn = _Tp(1); 9642: _Tp __term = _Tp(1); 9642: 9642: for (unsigned int __i = 1; __i < __max_iter; ++__i) 9642: { 9642: __term *= __xx4 / (_Tp(__i) * (__nu + _Tp(__i))); 9642: __Jn += __term; 9642: if (std::abs(__term / __Jn) < std::numeric_limits<_Tp>::epsilon()) 9642: break; 9642: } 9642: 9642: return __fact * __Jn; 9642: } 9642: # 490 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 9642: template 9642: _Tp 9642: __cyl_bessel_j(_Tp __nu, _Tp __x) 9642: { 9642: if (__nu < _Tp(0) || __x < _Tp(0)) 9642: std::__throw_domain_error(("Bad argument " "in __cyl_bessel_j.") 9642: ); 9642: else if (__isnan(__nu) || __isnan(__x)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (__x * __x < _Tp(10) * (__nu + _Tp(1))) 9642: return __cyl_bessel_ij_series(__nu, __x, -_Tp(1), 200); 9642: else if (__x > _Tp(1000)) 9642: { 9642: _Tp __J_nu, __N_nu; 9642: __cyl_bessel_jn_asymp(__nu, __x, __J_nu, __N_nu); 9642: return __J_nu; 9642: } 9642: else 9642: { 9642: _Tp __J_nu, __N_nu, __Jp_nu, __Np_nu; 9642: __bessel_jn(__nu, __x, __J_nu, __N_nu, __Jp_nu, __Np_nu); 9642: return __J_nu; 9642: } 9642: } 9642: # 532 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 9642: template 9642: _Tp 9642: __cyl_neumann_n(_Tp __nu, _Tp __x) 9642: { 9642: if (__nu < _Tp(0) || __x < _Tp(0)) 9642: std::__throw_domain_error(("Bad argument " "in __cyl_neumann_n.") 9642: ); 9642: else if (__isnan(__nu) || __isnan(__x)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (__x > _Tp(1000)) 9642: { 9642: _Tp __J_nu, __N_nu; 9642: __cyl_bessel_jn_asymp(__nu, __x, __J_nu, __N_nu); 9642: return __N_nu; 9642: } 9642: else 9642: { 9642: _Tp __J_nu, __N_nu, __Jp_nu, __Np_nu; 9642: __bessel_jn(__nu, __x, __J_nu, __N_nu, __Jp_nu, __Np_nu); 9642: return __N_nu; 9642: } 9642: } 9642: # 569 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 9642: template 9642: void 9642: __sph_bessel_jn(unsigned int __n, _Tp __x, 9642: _Tp & __j_n, _Tp & __n_n, _Tp & __jp_n, _Tp & __np_n) 9642: { 9642: const _Tp __nu = _Tp(__n) + _Tp(0.5L); 9642: 9642: _Tp __J_nu, __N_nu, __Jp_nu, __Np_nu; 9642: __bessel_jn(__nu, __x, __J_nu, __N_nu, __Jp_nu, __Np_nu); 9642: 9642: const _Tp __factor = __numeric_constants<_Tp>::__sqrtpio2() 9642: / std::sqrt(__x); 9642: 9642: __j_n = __factor * __J_nu; 9642: __n_n = __factor * __N_nu; 9642: __jp_n = __factor * __Jp_nu - __j_n / (_Tp(2) * __x); 9642: __np_n = __factor * __Np_nu - __n_n / (_Tp(2) * __x); 9642: 9642: return; 9642: } 9642: # 604 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 9642: template 9642: _Tp 9642: __sph_bessel(unsigned int __n, _Tp __x) 9642: { 9642: if (__x < _Tp(0)) 9642: std::__throw_domain_error(("Bad argument " "in __sph_bessel.") 9642: ); 9642: else if (__isnan(__x)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (__x == _Tp(0)) 9642: { 9642: if (__n == 0) 9642: return _Tp(1); 9642: else 9642: return _Tp(0); 9642: } 9642: else 9642: { 9642: _Tp __j_n, __n_n, __jp_n, __np_n; 9642: __sph_bessel_jn(__n, __x, __j_n, __n_n, __jp_n, __np_n); 9642: return __j_n; 9642: } 9642: } 9642: # 642 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 9642: template 9642: _Tp 9642: __sph_neumann(unsigned int __n, _Tp __x) 9642: { 9642: if (__x < _Tp(0)) 9642: std::__throw_domain_error(("Bad argument " "in __sph_neumann.") 9642: ); 9642: else if (__isnan(__x)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (__x == _Tp(0)) 9642: return -std::numeric_limits<_Tp>::infinity(); 9642: else 9642: { 9642: _Tp __j_n, __n_n, __jp_n, __np_n; 9642: __sph_bessel_jn(__n, __x, __j_n, __n_n, __jp_n, __np_n); 9642: return __n_n; 9642: } 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 49 "/usr/include/c++/13/bits/specfun.h" 2 3 9642: # 1 "/usr/include/c++/13/tr1/beta_function.tcc" 1 3 9642: # 49 "/usr/include/c++/13/tr1/beta_function.tcc" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 65 "/usr/include/c++/13/tr1/beta_function.tcc" 3 9642: namespace __detail 9642: { 9642: # 79 "/usr/include/c++/13/tr1/beta_function.tcc" 3 9642: template 9642: _Tp 9642: __beta_gamma(_Tp __x, _Tp __y) 9642: { 9642: 9642: _Tp __bet; 9642: 9642: if (__x > __y) 9642: { 9642: __bet = ::std::tgamma(__x) 9642: / ::std::tgamma(__x + __y); 9642: __bet *= ::std::tgamma(__y); 9642: } 9642: else 9642: { 9642: __bet = ::std::tgamma(__y) 9642: / ::std::tgamma(__x + __y); 9642: __bet *= ::std::tgamma(__x); 9642: } 9642: # 111 "/usr/include/c++/13/tr1/beta_function.tcc" 3 9642: return __bet; 9642: } 9642: # 127 "/usr/include/c++/13/tr1/beta_function.tcc" 3 9642: template 9642: _Tp 9642: __beta_lgamma(_Tp __x, _Tp __y) 9642: { 9642: 9642: _Tp __bet = ::std::lgamma(__x) 9642: + ::std::lgamma(__y) 9642: - ::std::lgamma(__x + __y); 9642: 9642: 9642: 9642: 9642: 9642: __bet = std::exp(__bet); 9642: return __bet; 9642: } 9642: # 158 "/usr/include/c++/13/tr1/beta_function.tcc" 3 9642: template 9642: _Tp 9642: __beta_product(_Tp __x, _Tp __y) 9642: { 9642: 9642: _Tp __bet = (__x + __y) / (__x * __y); 9642: 9642: unsigned int __max_iter = 1000000; 9642: for (unsigned int __k = 1; __k < __max_iter; ++__k) 9642: { 9642: _Tp __term = (_Tp(1) + (__x + __y) / __k) 9642: / ((_Tp(1) + __x / __k) * (_Tp(1) + __y / __k)); 9642: __bet *= __term; 9642: } 9642: 9642: return __bet; 9642: } 9642: # 189 "/usr/include/c++/13/tr1/beta_function.tcc" 3 9642: template 9642: inline _Tp 9642: __beta(_Tp __x, _Tp __y) 9642: { 9642: if (__isnan(__x) || __isnan(__y)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else 9642: return __beta_lgamma(__x, __y); 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 50 "/usr/include/c++/13/bits/specfun.h" 2 3 9642: # 1 "/usr/include/c++/13/tr1/ell_integral.tcc" 1 3 9642: # 45 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 59 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 9642: namespace __detail 9642: { 9642: # 76 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 9642: template 9642: _Tp 9642: __ellint_rf(_Tp __x, _Tp __y, _Tp __z) 9642: { 9642: const _Tp __min = std::numeric_limits<_Tp>::min(); 9642: const _Tp __lolim = _Tp(5) * __min; 9642: 9642: if (__x < _Tp(0) || __y < _Tp(0) || __z < _Tp(0)) 9642: std::__throw_domain_error(("Argument less than zero " "in __ellint_rf.") 9642: ); 9642: else if (__x + __y < __lolim || __x + __z < __lolim 9642: || __y + __z < __lolim) 9642: std::__throw_domain_error(("Argument too small in __ellint_rf")); 9642: else 9642: { 9642: const _Tp __c0 = _Tp(1) / _Tp(4); 9642: const _Tp __c1 = _Tp(1) / _Tp(24); 9642: const _Tp __c2 = _Tp(1) / _Tp(10); 9642: const _Tp __c3 = _Tp(3) / _Tp(44); 9642: const _Tp __c4 = _Tp(1) / _Tp(14); 9642: 9642: _Tp __xn = __x; 9642: _Tp __yn = __y; 9642: _Tp __zn = __z; 9642: 9642: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 9642: const _Tp __errtol = std::pow(__eps, _Tp(1) / _Tp(6)); 9642: _Tp __mu; 9642: _Tp __xndev, __yndev, __zndev; 9642: 9642: const unsigned int __max_iter = 100; 9642: for (unsigned int __iter = 0; __iter < __max_iter; ++__iter) 9642: { 9642: __mu = (__xn + __yn + __zn) / _Tp(3); 9642: __xndev = 2 - (__mu + __xn) / __mu; 9642: __yndev = 2 - (__mu + __yn) / __mu; 9642: __zndev = 2 - (__mu + __zn) / __mu; 9642: _Tp __epsilon = std::max(std::abs(__xndev), std::abs(__yndev)); 9642: __epsilon = std::max(__epsilon, std::abs(__zndev)); 9642: if (__epsilon < __errtol) 9642: break; 9642: const _Tp __xnroot = std::sqrt(__xn); 9642: const _Tp __ynroot = std::sqrt(__yn); 9642: const _Tp __znroot = std::sqrt(__zn); 9642: const _Tp __lambda = __xnroot * (__ynroot + __znroot) 9642: + __ynroot * __znroot; 9642: __xn = __c0 * (__xn + __lambda); 9642: __yn = __c0 * (__yn + __lambda); 9642: __zn = __c0 * (__zn + __lambda); 9642: } 9642: 9642: const _Tp __e2 = __xndev * __yndev - __zndev * __zndev; 9642: const _Tp __e3 = __xndev * __yndev * __zndev; 9642: const _Tp __s = _Tp(1) + (__c1 * __e2 - __c2 - __c3 * __e3) * __e2 9642: + __c4 * __e3; 9642: 9642: return __s / std::sqrt(__mu); 9642: } 9642: } 9642: # 153 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 9642: template 9642: _Tp 9642: __comp_ellint_1_series(_Tp __k) 9642: { 9642: 9642: const _Tp __kk = __k * __k; 9642: 9642: _Tp __term = __kk / _Tp(4); 9642: _Tp __sum = _Tp(1) + __term; 9642: 9642: const unsigned int __max_iter = 1000; 9642: for (unsigned int __i = 2; __i < __max_iter; ++__i) 9642: { 9642: __term *= (2 * __i - 1) * __kk / (2 * __i); 9642: if (__term < std::numeric_limits<_Tp>::epsilon()) 9642: break; 9642: __sum += __term; 9642: } 9642: 9642: return __numeric_constants<_Tp>::__pi_2() * __sum; 9642: } 9642: # 191 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 9642: template 9642: _Tp 9642: __comp_ellint_1(_Tp __k) 9642: { 9642: 9642: if (__isnan(__k)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (std::abs(__k) >= _Tp(1)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else 9642: return __ellint_rf(_Tp(0), _Tp(1) - __k * __k, _Tp(1)); 9642: } 9642: # 219 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 9642: template 9642: _Tp 9642: __ellint_1(_Tp __k, _Tp __phi) 9642: { 9642: 9642: if (__isnan(__k) || __isnan(__phi)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (std::abs(__k) > _Tp(1)) 9642: std::__throw_domain_error(("Bad argument in __ellint_1.")); 9642: else 9642: { 9642: 9642: const int __n = std::floor(__phi / __numeric_constants<_Tp>::__pi() 9642: + _Tp(0.5L)); 9642: const _Tp __phi_red = __phi 9642: - __n * __numeric_constants<_Tp>::__pi(); 9642: 9642: const _Tp __s = std::sin(__phi_red); 9642: const _Tp __c = std::cos(__phi_red); 9642: 9642: const _Tp __F = __s 9642: * __ellint_rf(__c * __c, 9642: _Tp(1) - __k * __k * __s * __s, _Tp(1)); 9642: 9642: if (__n == 0) 9642: return __F; 9642: else 9642: return __F + _Tp(2) * __n * __comp_ellint_1(__k); 9642: } 9642: } 9642: # 266 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 9642: template 9642: _Tp 9642: __comp_ellint_2_series(_Tp __k) 9642: { 9642: 9642: const _Tp __kk = __k * __k; 9642: 9642: _Tp __term = __kk; 9642: _Tp __sum = __term; 9642: 9642: const unsigned int __max_iter = 1000; 9642: for (unsigned int __i = 2; __i < __max_iter; ++__i) 9642: { 9642: const _Tp __i2m = 2 * __i - 1; 9642: const _Tp __i2 = 2 * __i; 9642: __term *= __i2m * __i2m * __kk / (__i2 * __i2); 9642: if (__term < std::numeric_limits<_Tp>::epsilon()) 9642: break; 9642: __sum += __term / __i2m; 9642: } 9642: 9642: return __numeric_constants<_Tp>::__pi_2() * (_Tp(1) - __sum); 9642: } 9642: # 314 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 9642: template 9642: _Tp 9642: __ellint_rd(_Tp __x, _Tp __y, _Tp __z) 9642: { 9642: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 9642: const _Tp __errtol = std::pow(__eps / _Tp(8), _Tp(1) / _Tp(6)); 9642: const _Tp __max = std::numeric_limits<_Tp>::max(); 9642: const _Tp __lolim = _Tp(2) / std::pow(__max, _Tp(2) / _Tp(3)); 9642: 9642: if (__x < _Tp(0) || __y < _Tp(0)) 9642: std::__throw_domain_error(("Argument less than zero " "in __ellint_rd.") 9642: ); 9642: else if (__x + __y < __lolim || __z < __lolim) 9642: std::__throw_domain_error(("Argument too small " "in __ellint_rd.") 9642: ); 9642: else 9642: { 9642: const _Tp __c0 = _Tp(1) / _Tp(4); 9642: const _Tp __c1 = _Tp(3) / _Tp(14); 9642: const _Tp __c2 = _Tp(1) / _Tp(6); 9642: const _Tp __c3 = _Tp(9) / _Tp(22); 9642: const _Tp __c4 = _Tp(3) / _Tp(26); 9642: 9642: _Tp __xn = __x; 9642: _Tp __yn = __y; 9642: _Tp __zn = __z; 9642: _Tp __sigma = _Tp(0); 9642: _Tp __power4 = _Tp(1); 9642: 9642: _Tp __mu; 9642: _Tp __xndev, __yndev, __zndev; 9642: 9642: const unsigned int __max_iter = 100; 9642: for (unsigned int __iter = 0; __iter < __max_iter; ++__iter) 9642: { 9642: __mu = (__xn + __yn + _Tp(3) * __zn) / _Tp(5); 9642: __xndev = (__mu - __xn) / __mu; 9642: __yndev = (__mu - __yn) / __mu; 9642: __zndev = (__mu - __zn) / __mu; 9642: _Tp __epsilon = std::max(std::abs(__xndev), std::abs(__yndev)); 9642: __epsilon = std::max(__epsilon, std::abs(__zndev)); 9642: if (__epsilon < __errtol) 9642: break; 9642: _Tp __xnroot = std::sqrt(__xn); 9642: _Tp __ynroot = std::sqrt(__yn); 9642: _Tp __znroot = std::sqrt(__zn); 9642: _Tp __lambda = __xnroot * (__ynroot + __znroot) 9642: + __ynroot * __znroot; 9642: __sigma += __power4 / (__znroot * (__zn + __lambda)); 9642: __power4 *= __c0; 9642: __xn = __c0 * (__xn + __lambda); 9642: __yn = __c0 * (__yn + __lambda); 9642: __zn = __c0 * (__zn + __lambda); 9642: } 9642: 9642: _Tp __ea = __xndev * __yndev; 9642: _Tp __eb = __zndev * __zndev; 9642: _Tp __ec = __ea - __eb; 9642: _Tp __ed = __ea - _Tp(6) * __eb; 9642: _Tp __ef = __ed + __ec + __ec; 9642: _Tp __s1 = __ed * (-__c1 + __c3 * __ed 9642: / _Tp(3) - _Tp(3) * __c4 * __zndev * __ef 9642: / _Tp(2)); 9642: _Tp __s2 = __zndev 9642: * (__c2 * __ef 9642: + __zndev * (-__c3 * __ec - __zndev * __c4 - __ea)); 9642: 9642: return _Tp(3) * __sigma + __power4 * (_Tp(1) + __s1 + __s2) 9642: / (__mu * std::sqrt(__mu)); 9642: } 9642: } 9642: # 399 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 9642: template 9642: _Tp 9642: __comp_ellint_2(_Tp __k) 9642: { 9642: 9642: if (__isnan(__k)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (std::abs(__k) == 1) 9642: return _Tp(1); 9642: else if (std::abs(__k) > _Tp(1)) 9642: std::__throw_domain_error(("Bad argument in __comp_ellint_2.")); 9642: else 9642: { 9642: const _Tp __kk = __k * __k; 9642: 9642: return __ellint_rf(_Tp(0), _Tp(1) - __kk, _Tp(1)) 9642: - __kk * __ellint_rd(_Tp(0), _Tp(1) - __kk, _Tp(1)) / _Tp(3); 9642: } 9642: } 9642: # 433 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 9642: template 9642: _Tp 9642: __ellint_2(_Tp __k, _Tp __phi) 9642: { 9642: 9642: if (__isnan(__k) || __isnan(__phi)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (std::abs(__k) > _Tp(1)) 9642: std::__throw_domain_error(("Bad argument in __ellint_2.")); 9642: else 9642: { 9642: 9642: const int __n = std::floor(__phi / __numeric_constants<_Tp>::__pi() 9642: + _Tp(0.5L)); 9642: const _Tp __phi_red = __phi 9642: - __n * __numeric_constants<_Tp>::__pi(); 9642: 9642: const _Tp __kk = __k * __k; 9642: const _Tp __s = std::sin(__phi_red); 9642: const _Tp __ss = __s * __s; 9642: const _Tp __sss = __ss * __s; 9642: const _Tp __c = std::cos(__phi_red); 9642: const _Tp __cc = __c * __c; 9642: 9642: const _Tp __E = __s 9642: * __ellint_rf(__cc, _Tp(1) - __kk * __ss, _Tp(1)) 9642: - __kk * __sss 9642: * __ellint_rd(__cc, _Tp(1) - __kk * __ss, _Tp(1)) 9642: / _Tp(3); 9642: 9642: if (__n == 0) 9642: return __E; 9642: else 9642: return __E + _Tp(2) * __n * __comp_ellint_2(__k); 9642: } 9642: } 9642: # 492 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 9642: template 9642: _Tp 9642: __ellint_rc(_Tp __x, _Tp __y) 9642: { 9642: const _Tp __min = std::numeric_limits<_Tp>::min(); 9642: const _Tp __lolim = _Tp(5) * __min; 9642: 9642: if (__x < _Tp(0) || __y < _Tp(0) || __x + __y < __lolim) 9642: std::__throw_domain_error(("Argument less than zero " "in __ellint_rc.") 9642: ); 9642: else 9642: { 9642: const _Tp __c0 = _Tp(1) / _Tp(4); 9642: const _Tp __c1 = _Tp(1) / _Tp(7); 9642: const _Tp __c2 = _Tp(9) / _Tp(22); 9642: const _Tp __c3 = _Tp(3) / _Tp(10); 9642: const _Tp __c4 = _Tp(3) / _Tp(8); 9642: 9642: _Tp __xn = __x; 9642: _Tp __yn = __y; 9642: 9642: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 9642: const _Tp __errtol = std::pow(__eps / _Tp(30), _Tp(1) / _Tp(6)); 9642: _Tp __mu; 9642: _Tp __sn; 9642: 9642: const unsigned int __max_iter = 100; 9642: for (unsigned int __iter = 0; __iter < __max_iter; ++__iter) 9642: { 9642: __mu = (__xn + _Tp(2) * __yn) / _Tp(3); 9642: __sn = (__yn + __mu) / __mu - _Tp(2); 9642: if (std::abs(__sn) < __errtol) 9642: break; 9642: const _Tp __lambda = _Tp(2) * std::sqrt(__xn) * std::sqrt(__yn) 9642: + __yn; 9642: __xn = __c0 * (__xn + __lambda); 9642: __yn = __c0 * (__yn + __lambda); 9642: } 9642: 9642: _Tp __s = __sn * __sn 9642: * (__c3 + __sn*(__c1 + __sn * (__c4 + __sn * __c2))); 9642: 9642: return (_Tp(1) + __s) / std::sqrt(__mu); 9642: } 9642: } 9642: # 561 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 9642: template 9642: _Tp 9642: __ellint_rj(_Tp __x, _Tp __y, _Tp __z, _Tp __p) 9642: { 9642: const _Tp __min = std::numeric_limits<_Tp>::min(); 9642: const _Tp __lolim = std::pow(_Tp(5) * __min, _Tp(1)/_Tp(3)); 9642: 9642: if (__x < _Tp(0) || __y < _Tp(0) || __z < _Tp(0)) 9642: std::__throw_domain_error(("Argument less than zero " "in __ellint_rj.") 9642: ); 9642: else if (__x + __y < __lolim || __x + __z < __lolim 9642: || __y + __z < __lolim || __p < __lolim) 9642: std::__throw_domain_error(("Argument too small " "in __ellint_rj") 9642: ); 9642: else 9642: { 9642: const _Tp __c0 = _Tp(1) / _Tp(4); 9642: const _Tp __c1 = _Tp(3) / _Tp(14); 9642: const _Tp __c2 = _Tp(1) / _Tp(3); 9642: const _Tp __c3 = _Tp(3) / _Tp(22); 9642: const _Tp __c4 = _Tp(3) / _Tp(26); 9642: 9642: _Tp __xn = __x; 9642: _Tp __yn = __y; 9642: _Tp __zn = __z; 9642: _Tp __pn = __p; 9642: _Tp __sigma = _Tp(0); 9642: _Tp __power4 = _Tp(1); 9642: 9642: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 9642: const _Tp __errtol = std::pow(__eps / _Tp(8), _Tp(1) / _Tp(6)); 9642: 9642: _Tp __mu; 9642: _Tp __xndev, __yndev, __zndev, __pndev; 9642: 9642: const unsigned int __max_iter = 100; 9642: for (unsigned int __iter = 0; __iter < __max_iter; ++__iter) 9642: { 9642: __mu = (__xn + __yn + __zn + _Tp(2) * __pn) / _Tp(5); 9642: __xndev = (__mu - __xn) / __mu; 9642: __yndev = (__mu - __yn) / __mu; 9642: __zndev = (__mu - __zn) / __mu; 9642: __pndev = (__mu - __pn) / __mu; 9642: _Tp __epsilon = std::max(std::abs(__xndev), std::abs(__yndev)); 9642: __epsilon = std::max(__epsilon, std::abs(__zndev)); 9642: __epsilon = std::max(__epsilon, std::abs(__pndev)); 9642: if (__epsilon < __errtol) 9642: break; 9642: const _Tp __xnroot = std::sqrt(__xn); 9642: const _Tp __ynroot = std::sqrt(__yn); 9642: const _Tp __znroot = std::sqrt(__zn); 9642: const _Tp __lambda = __xnroot * (__ynroot + __znroot) 9642: + __ynroot * __znroot; 9642: const _Tp __alpha1 = __pn * (__xnroot + __ynroot + __znroot) 9642: + __xnroot * __ynroot * __znroot; 9642: const _Tp __alpha2 = __alpha1 * __alpha1; 9642: const _Tp __beta = __pn * (__pn + __lambda) 9642: * (__pn + __lambda); 9642: __sigma += __power4 * __ellint_rc(__alpha2, __beta); 9642: __power4 *= __c0; 9642: __xn = __c0 * (__xn + __lambda); 9642: __yn = __c0 * (__yn + __lambda); 9642: __zn = __c0 * (__zn + __lambda); 9642: __pn = __c0 * (__pn + __lambda); 9642: } 9642: 9642: _Tp __ea = __xndev * (__yndev + __zndev) + __yndev * __zndev; 9642: _Tp __eb = __xndev * __yndev * __zndev; 9642: _Tp __ec = __pndev * __pndev; 9642: _Tp __e2 = __ea - _Tp(3) * __ec; 9642: _Tp __e3 = __eb + _Tp(2) * __pndev * (__ea - __ec); 9642: _Tp __s1 = _Tp(1) + __e2 * (-__c1 + _Tp(3) * __c3 * __e2 / _Tp(4) 9642: - _Tp(3) * __c4 * __e3 / _Tp(2)); 9642: _Tp __s2 = __eb * (__c2 / _Tp(2) 9642: + __pndev * (-__c3 - __c3 + __pndev * __c4)); 9642: _Tp __s3 = __pndev * __ea * (__c2 - __pndev * __c3) 9642: - __c2 * __pndev * __ec; 9642: 9642: return _Tp(3) * __sigma + __power4 * (__s1 + __s2 + __s3) 9642: / (__mu * std::sqrt(__mu)); 9642: } 9642: } 9642: # 661 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 9642: template 9642: _Tp 9642: __comp_ellint_3(_Tp __k, _Tp __nu) 9642: { 9642: 9642: if (__isnan(__k) || __isnan(__nu)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (__nu == _Tp(1)) 9642: return std::numeric_limits<_Tp>::infinity(); 9642: else if (std::abs(__k) > _Tp(1)) 9642: std::__throw_domain_error(("Bad argument in __comp_ellint_3.")); 9642: else 9642: { 9642: const _Tp __kk = __k * __k; 9642: 9642: return __ellint_rf(_Tp(0), _Tp(1) - __kk, _Tp(1)) 9642: + __nu 9642: * __ellint_rj(_Tp(0), _Tp(1) - __kk, _Tp(1), _Tp(1) - __nu) 9642: / _Tp(3); 9642: } 9642: } 9642: # 701 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 9642: template 9642: _Tp 9642: __ellint_3(_Tp __k, _Tp __nu, _Tp __phi) 9642: { 9642: 9642: if (__isnan(__k) || __isnan(__nu) || __isnan(__phi)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (std::abs(__k) > _Tp(1)) 9642: std::__throw_domain_error(("Bad argument in __ellint_3.")); 9642: else 9642: { 9642: 9642: const int __n = std::floor(__phi / __numeric_constants<_Tp>::__pi() 9642: + _Tp(0.5L)); 9642: const _Tp __phi_red = __phi 9642: - __n * __numeric_constants<_Tp>::__pi(); 9642: 9642: const _Tp __kk = __k * __k; 9642: const _Tp __s = std::sin(__phi_red); 9642: const _Tp __ss = __s * __s; 9642: const _Tp __sss = __ss * __s; 9642: const _Tp __c = std::cos(__phi_red); 9642: const _Tp __cc = __c * __c; 9642: 9642: const _Tp __Pi = __s 9642: * __ellint_rf(__cc, _Tp(1) - __kk * __ss, _Tp(1)) 9642: + __nu * __sss 9642: * __ellint_rj(__cc, _Tp(1) - __kk * __ss, _Tp(1), 9642: _Tp(1) - __nu * __ss) / _Tp(3); 9642: 9642: if (__n == 0) 9642: return __Pi; 9642: else 9642: return __Pi + _Tp(2) * __n * __comp_ellint_3(__k, __nu); 9642: } 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 51 "/usr/include/c++/13/bits/specfun.h" 2 3 9642: # 1 "/usr/include/c++/13/tr1/exp_integral.tcc" 1 3 9642: # 50 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 64 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 9642: namespace __detail 9642: { 9642: template _Tp __expint_E1(_Tp); 9642: # 81 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 9642: template 9642: _Tp 9642: __expint_E1_series(_Tp __x) 9642: { 9642: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 9642: _Tp __term = _Tp(1); 9642: _Tp __esum = _Tp(0); 9642: _Tp __osum = _Tp(0); 9642: const unsigned int __max_iter = 1000; 9642: for (unsigned int __i = 1; __i < __max_iter; ++__i) 9642: { 9642: __term *= - __x / __i; 9642: if (std::abs(__term) < __eps) 9642: break; 9642: if (__term >= _Tp(0)) 9642: __esum += __term / __i; 9642: else 9642: __osum += __term / __i; 9642: } 9642: 9642: return - __esum - __osum 9642: - __numeric_constants<_Tp>::__gamma_e() - std::log(__x); 9642: } 9642: # 118 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 9642: template 9642: _Tp 9642: __expint_E1_asymp(_Tp __x) 9642: { 9642: _Tp __term = _Tp(1); 9642: _Tp __esum = _Tp(1); 9642: _Tp __osum = _Tp(0); 9642: const unsigned int __max_iter = 1000; 9642: for (unsigned int __i = 1; __i < __max_iter; ++__i) 9642: { 9642: _Tp __prev = __term; 9642: __term *= - __i / __x; 9642: if (std::abs(__term) > std::abs(__prev)) 9642: break; 9642: if (__term >= _Tp(0)) 9642: __esum += __term; 9642: else 9642: __osum += __term; 9642: } 9642: 9642: return std::exp(- __x) * (__esum + __osum) / __x; 9642: } 9642: # 155 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 9642: template 9642: _Tp 9642: __expint_En_series(unsigned int __n, _Tp __x) 9642: { 9642: const unsigned int __max_iter = 1000; 9642: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 9642: const int __nm1 = __n - 1; 9642: _Tp __ans = (__nm1 != 0 9642: ? _Tp(1) / __nm1 : -std::log(__x) 9642: - __numeric_constants<_Tp>::__gamma_e()); 9642: _Tp __fact = _Tp(1); 9642: for (int __i = 1; __i <= __max_iter; ++__i) 9642: { 9642: __fact *= -__x / _Tp(__i); 9642: _Tp __del; 9642: if ( __i != __nm1 ) 9642: __del = -__fact / _Tp(__i - __nm1); 9642: else 9642: { 9642: _Tp __psi = -__numeric_constants<_Tp>::gamma_e(); 9642: for (int __ii = 1; __ii <= __nm1; ++__ii) 9642: __psi += _Tp(1) / _Tp(__ii); 9642: __del = __fact * (__psi - std::log(__x)); 9642: } 9642: __ans += __del; 9642: if (std::abs(__del) < __eps * std::abs(__ans)) 9642: return __ans; 9642: } 9642: std::__throw_runtime_error(("Series summation failed " "in __expint_En_series.") 9642: ); 9642: } 9642: # 201 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 9642: template 9642: _Tp 9642: __expint_En_cont_frac(unsigned int __n, _Tp __x) 9642: { 9642: const unsigned int __max_iter = 1000; 9642: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 9642: const _Tp __fp_min = std::numeric_limits<_Tp>::min(); 9642: const int __nm1 = __n - 1; 9642: _Tp __b = __x + _Tp(__n); 9642: _Tp __c = _Tp(1) / __fp_min; 9642: _Tp __d = _Tp(1) / __b; 9642: _Tp __h = __d; 9642: for ( unsigned int __i = 1; __i <= __max_iter; ++__i ) 9642: { 9642: _Tp __a = -_Tp(__i * (__nm1 + __i)); 9642: __b += _Tp(2); 9642: __d = _Tp(1) / (__a * __d + __b); 9642: __c = __b + __a / __c; 9642: const _Tp __del = __c * __d; 9642: __h *= __del; 9642: if (std::abs(__del - _Tp(1)) < __eps) 9642: { 9642: const _Tp __ans = __h * std::exp(-__x); 9642: return __ans; 9642: } 9642: } 9642: std::__throw_runtime_error(("Continued fraction failed " "in __expint_En_cont_frac.") 9642: ); 9642: } 9642: # 246 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 9642: template 9642: _Tp 9642: __expint_En_recursion(unsigned int __n, _Tp __x) 9642: { 9642: _Tp __En; 9642: _Tp __E1 = __expint_E1(__x); 9642: if (__x < _Tp(__n)) 9642: { 9642: 9642: __En = __E1; 9642: for (unsigned int __j = 2; __j < __n; ++__j) 9642: __En = (std::exp(-__x) - __x * __En) / _Tp(__j - 1); 9642: } 9642: else 9642: { 9642: 9642: __En = _Tp(1); 9642: const int __N = __n + 20; 9642: _Tp __save = _Tp(0); 9642: for (int __j = __N; __j > 0; --__j) 9642: { 9642: __En = (std::exp(-__x) - __j * __En) / __x; 9642: if (__j == __n) 9642: __save = __En; 9642: } 9642: _Tp __norm = __En / __E1; 9642: __En /= __norm; 9642: } 9642: 9642: return __En; 9642: } 9642: # 290 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 9642: template 9642: _Tp 9642: __expint_Ei_series(_Tp __x) 9642: { 9642: _Tp __term = _Tp(1); 9642: _Tp __sum = _Tp(0); 9642: const unsigned int __max_iter = 1000; 9642: for (unsigned int __i = 1; __i < __max_iter; ++__i) 9642: { 9642: __term *= __x / __i; 9642: __sum += __term / __i; 9642: if (__term < std::numeric_limits<_Tp>::epsilon() * __sum) 9642: break; 9642: } 9642: 9642: return __numeric_constants<_Tp>::__gamma_e() + __sum + std::log(__x); 9642: } 9642: # 321 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 9642: template 9642: _Tp 9642: __expint_Ei_asymp(_Tp __x) 9642: { 9642: _Tp __term = _Tp(1); 9642: _Tp __sum = _Tp(1); 9642: const unsigned int __max_iter = 1000; 9642: for (unsigned int __i = 1; __i < __max_iter; ++__i) 9642: { 9642: _Tp __prev = __term; 9642: __term *= __i / __x; 9642: if (__term < std::numeric_limits<_Tp>::epsilon()) 9642: break; 9642: if (__term >= __prev) 9642: break; 9642: __sum += __term; 9642: } 9642: 9642: return std::exp(__x) * __sum / __x; 9642: } 9642: # 354 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 9642: template 9642: _Tp 9642: __expint_Ei(_Tp __x) 9642: { 9642: if (__x < _Tp(0)) 9642: return -__expint_E1(-__x); 9642: else if (__x < -std::log(std::numeric_limits<_Tp>::epsilon())) 9642: return __expint_Ei_series(__x); 9642: else 9642: return __expint_Ei_asymp(__x); 9642: } 9642: # 378 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 9642: template 9642: _Tp 9642: __expint_E1(_Tp __x) 9642: { 9642: if (__x < _Tp(0)) 9642: return -__expint_Ei(-__x); 9642: else if (__x < _Tp(1)) 9642: return __expint_E1_series(__x); 9642: else if (__x < _Tp(100)) 9642: return __expint_En_cont_frac(1, __x); 9642: else 9642: return __expint_E1_asymp(__x); 9642: } 9642: # 408 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 9642: template 9642: _Tp 9642: __expint_asymp(unsigned int __n, _Tp __x) 9642: { 9642: _Tp __term = _Tp(1); 9642: _Tp __sum = _Tp(1); 9642: for (unsigned int __i = 1; __i <= __n; ++__i) 9642: { 9642: _Tp __prev = __term; 9642: __term *= -(__n - __i + 1) / __x; 9642: if (std::abs(__term) > std::abs(__prev)) 9642: break; 9642: __sum += __term; 9642: } 9642: 9642: return std::exp(-__x) * __sum / __x; 9642: } 9642: # 442 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 9642: template 9642: _Tp 9642: __expint_large_n(unsigned int __n, _Tp __x) 9642: { 9642: const _Tp __xpn = __x + __n; 9642: const _Tp __xpn2 = __xpn * __xpn; 9642: _Tp __term = _Tp(1); 9642: _Tp __sum = _Tp(1); 9642: for (unsigned int __i = 1; __i <= __n; ++__i) 9642: { 9642: _Tp __prev = __term; 9642: __term *= (__n - 2 * (__i - 1) * __x) / __xpn2; 9642: if (std::abs(__term) < std::numeric_limits<_Tp>::epsilon()) 9642: break; 9642: __sum += __term; 9642: } 9642: 9642: return std::exp(-__x) * __sum / __xpn; 9642: } 9642: # 476 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 9642: template 9642: _Tp 9642: __expint(unsigned int __n, _Tp __x) 9642: { 9642: 9642: if (__isnan(__x)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (__n <= 1 && __x == _Tp(0)) 9642: return std::numeric_limits<_Tp>::infinity(); 9642: else 9642: { 9642: _Tp __E0 = std::exp(__x) / __x; 9642: if (__n == 0) 9642: return __E0; 9642: 9642: _Tp __E1 = __expint_E1(__x); 9642: if (__n == 1) 9642: return __E1; 9642: 9642: if (__x == _Tp(0)) 9642: return _Tp(1) / static_cast<_Tp>(__n - 1); 9642: 9642: _Tp __En = __expint_En_recursion(__n, __x); 9642: 9642: return __En; 9642: } 9642: } 9642: # 516 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 9642: template 9642: inline _Tp 9642: __expint(_Tp __x) 9642: { 9642: if (__isnan(__x)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else 9642: return __expint_Ei(__x); 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 52 "/usr/include/c++/13/bits/specfun.h" 2 3 9642: # 1 "/usr/include/c++/13/tr1/hypergeometric.tcc" 1 3 9642: # 44 "/usr/include/c++/13/tr1/hypergeometric.tcc" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 60 "/usr/include/c++/13/tr1/hypergeometric.tcc" 3 9642: namespace __detail 9642: { 9642: # 83 "/usr/include/c++/13/tr1/hypergeometric.tcc" 3 9642: template 9642: _Tp 9642: __conf_hyperg_series(_Tp __a, _Tp __c, _Tp __x) 9642: { 9642: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 9642: 9642: _Tp __term = _Tp(1); 9642: _Tp __Fac = _Tp(1); 9642: const unsigned int __max_iter = 100000; 9642: unsigned int __i; 9642: for (__i = 0; __i < __max_iter; ++__i) 9642: { 9642: __term *= (__a + _Tp(__i)) * __x 9642: / ((__c + _Tp(__i)) * _Tp(1 + __i)); 9642: if (std::abs(__term) < __eps) 9642: { 9642: break; 9642: } 9642: __Fac += __term; 9642: } 9642: if (__i == __max_iter) 9642: std::__throw_runtime_error(("Series failed to converge " "in __conf_hyperg_series.") 9642: ); 9642: 9642: return __Fac; 9642: } 9642: # 120 "/usr/include/c++/13/tr1/hypergeometric.tcc" 3 9642: template 9642: _Tp 9642: __conf_hyperg_luke(_Tp __a, _Tp __c, _Tp __xin) 9642: { 9642: const _Tp __big = std::pow(std::numeric_limits<_Tp>::max(), _Tp(0.16L)); 9642: const int __nmax = 20000; 9642: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 9642: const _Tp __x = -__xin; 9642: const _Tp __x3 = __x * __x * __x; 9642: const _Tp __t0 = __a / __c; 9642: const _Tp __t1 = (__a + _Tp(1)) / (_Tp(2) * __c); 9642: const _Tp __t2 = (__a + _Tp(2)) / (_Tp(2) * (__c + _Tp(1))); 9642: _Tp __F = _Tp(1); 9642: _Tp __prec; 9642: 9642: _Tp __Bnm3 = _Tp(1); 9642: _Tp __Bnm2 = _Tp(1) + __t1 * __x; 9642: _Tp __Bnm1 = _Tp(1) + __t2 * __x * (_Tp(1) + __t1 / _Tp(3) * __x); 9642: 9642: _Tp __Anm3 = _Tp(1); 9642: _Tp __Anm2 = __Bnm2 - __t0 * __x; 9642: _Tp __Anm1 = __Bnm1 - __t0 * (_Tp(1) + __t2 * __x) * __x 9642: + __t0 * __t1 * (__c / (__c + _Tp(1))) * __x * __x; 9642: 9642: int __n = 3; 9642: while(1) 9642: { 9642: _Tp __npam1 = _Tp(__n - 1) + __a; 9642: _Tp __npcm1 = _Tp(__n - 1) + __c; 9642: _Tp __npam2 = _Tp(__n - 2) + __a; 9642: _Tp __npcm2 = _Tp(__n - 2) + __c; 9642: _Tp __tnm1 = _Tp(2 * __n - 1); 9642: _Tp __tnm3 = _Tp(2 * __n - 3); 9642: _Tp __tnm5 = _Tp(2 * __n - 5); 9642: _Tp __F1 = (_Tp(__n - 2) - __a) / (_Tp(2) * __tnm3 * __npcm1); 9642: _Tp __F2 = (_Tp(__n) + __a) * __npam1 9642: / (_Tp(4) * __tnm1 * __tnm3 * __npcm2 * __npcm1); 9642: _Tp __F3 = -__npam2 * __npam1 * (_Tp(__n - 2) - __a) 9642: / (_Tp(8) * __tnm3 * __tnm3 * __tnm5 9642: * (_Tp(__n - 3) + __c) * __npcm2 * __npcm1); 9642: _Tp __E = -__npam1 * (_Tp(__n - 1) - __c) 9642: / (_Tp(2) * __tnm3 * __npcm2 * __npcm1); 9642: 9642: _Tp __An = (_Tp(1) + __F1 * __x) * __Anm1 9642: + (__E + __F2 * __x) * __x * __Anm2 + __F3 * __x3 * __Anm3; 9642: _Tp __Bn = (_Tp(1) + __F1 * __x) * __Bnm1 9642: + (__E + __F2 * __x) * __x * __Bnm2 + __F3 * __x3 * __Bnm3; 9642: _Tp __r = __An / __Bn; 9642: 9642: __prec = std::abs((__F - __r) / __F); 9642: __F = __r; 9642: 9642: if (__prec < __eps || __n > __nmax) 9642: break; 9642: 9642: if (std::abs(__An) > __big || std::abs(__Bn) > __big) 9642: { 9642: __An /= __big; 9642: __Bn /= __big; 9642: __Anm1 /= __big; 9642: __Bnm1 /= __big; 9642: __Anm2 /= __big; 9642: __Bnm2 /= __big; 9642: __Anm3 /= __big; 9642: __Bnm3 /= __big; 9642: } 9642: else if (std::abs(__An) < _Tp(1) / __big 9642: || std::abs(__Bn) < _Tp(1) / __big) 9642: { 9642: __An *= __big; 9642: __Bn *= __big; 9642: __Anm1 *= __big; 9642: __Bnm1 *= __big; 9642: __Anm2 *= __big; 9642: __Bnm2 *= __big; 9642: __Anm3 *= __big; 9642: __Bnm3 *= __big; 9642: } 9642: 9642: ++__n; 9642: __Bnm3 = __Bnm2; 9642: __Bnm2 = __Bnm1; 9642: __Bnm1 = __Bn; 9642: __Anm3 = __Anm2; 9642: __Anm2 = __Anm1; 9642: __Anm1 = __An; 9642: } 9642: 9642: if (__n >= __nmax) 9642: std::__throw_runtime_error(("Iteration failed to converge " "in __conf_hyperg_luke.") 9642: ); 9642: 9642: return __F; 9642: } 9642: # 227 "/usr/include/c++/13/tr1/hypergeometric.tcc" 3 9642: template 9642: _Tp 9642: __conf_hyperg(_Tp __a, _Tp __c, _Tp __x) 9642: { 9642: 9642: const _Tp __c_nint = ::std::nearbyint(__c); 9642: 9642: 9642: 9642: if (__isnan(__a) || __isnan(__c) || __isnan(__x)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (__c_nint == __c && __c_nint <= 0) 9642: return std::numeric_limits<_Tp>::infinity(); 9642: else if (__a == _Tp(0)) 9642: return _Tp(1); 9642: else if (__c == __a) 9642: return std::exp(__x); 9642: else if (__x < _Tp(0)) 9642: return __conf_hyperg_luke(__a, __c, __x); 9642: else 9642: return __conf_hyperg_series(__a, __c, __x); 9642: } 9642: # 271 "/usr/include/c++/13/tr1/hypergeometric.tcc" 3 9642: template 9642: _Tp 9642: __hyperg_series(_Tp __a, _Tp __b, _Tp __c, _Tp __x) 9642: { 9642: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 9642: 9642: _Tp __term = _Tp(1); 9642: _Tp __Fabc = _Tp(1); 9642: const unsigned int __max_iter = 100000; 9642: unsigned int __i; 9642: for (__i = 0; __i < __max_iter; ++__i) 9642: { 9642: __term *= (__a + _Tp(__i)) * (__b + _Tp(__i)) * __x 9642: / ((__c + _Tp(__i)) * _Tp(1 + __i)); 9642: if (std::abs(__term) < __eps) 9642: { 9642: break; 9642: } 9642: __Fabc += __term; 9642: } 9642: if (__i == __max_iter) 9642: std::__throw_runtime_error(("Series failed to converge " "in __hyperg_series.") 9642: ); 9642: 9642: return __Fabc; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: _Tp 9642: __hyperg_luke(_Tp __a, _Tp __b, _Tp __c, _Tp __xin) 9642: { 9642: const _Tp __big = std::pow(std::numeric_limits<_Tp>::max(), _Tp(0.16L)); 9642: const int __nmax = 20000; 9642: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 9642: const _Tp __x = -__xin; 9642: const _Tp __x3 = __x * __x * __x; 9642: const _Tp __t0 = __a * __b / __c; 9642: const _Tp __t1 = (__a + _Tp(1)) * (__b + _Tp(1)) / (_Tp(2) * __c); 9642: const _Tp __t2 = (__a + _Tp(2)) * (__b + _Tp(2)) 9642: / (_Tp(2) * (__c + _Tp(1))); 9642: 9642: _Tp __F = _Tp(1); 9642: 9642: _Tp __Bnm3 = _Tp(1); 9642: _Tp __Bnm2 = _Tp(1) + __t1 * __x; 9642: _Tp __Bnm1 = _Tp(1) + __t2 * __x * (_Tp(1) + __t1 / _Tp(3) * __x); 9642: 9642: _Tp __Anm3 = _Tp(1); 9642: _Tp __Anm2 = __Bnm2 - __t0 * __x; 9642: _Tp __Anm1 = __Bnm1 - __t0 * (_Tp(1) + __t2 * __x) * __x 9642: + __t0 * __t1 * (__c / (__c + _Tp(1))) * __x * __x; 9642: 9642: int __n = 3; 9642: while (1) 9642: { 9642: const _Tp __npam1 = _Tp(__n - 1) + __a; 9642: const _Tp __npbm1 = _Tp(__n - 1) + __b; 9642: const _Tp __npcm1 = _Tp(__n - 1) + __c; 9642: const _Tp __npam2 = _Tp(__n - 2) + __a; 9642: const _Tp __npbm2 = _Tp(__n - 2) + __b; 9642: const _Tp __npcm2 = _Tp(__n - 2) + __c; 9642: const _Tp __tnm1 = _Tp(2 * __n - 1); 9642: const _Tp __tnm3 = _Tp(2 * __n - 3); 9642: const _Tp __tnm5 = _Tp(2 * __n - 5); 9642: const _Tp __n2 = __n * __n; 9642: const _Tp __F1 = (_Tp(3) * __n2 + (__a + __b - _Tp(6)) * __n 9642: + _Tp(2) - __a * __b - _Tp(2) * (__a + __b)) 9642: / (_Tp(2) * __tnm3 * __npcm1); 9642: const _Tp __F2 = -(_Tp(3) * __n2 - (__a + __b + _Tp(6)) * __n 9642: + _Tp(2) - __a * __b) * __npam1 * __npbm1 9642: / (_Tp(4) * __tnm1 * __tnm3 * __npcm2 * __npcm1); 9642: const _Tp __F3 = (__npam2 * __npam1 * __npbm2 * __npbm1 9642: * (_Tp(__n - 2) - __a) * (_Tp(__n - 2) - __b)) 9642: / (_Tp(8) * __tnm3 * __tnm3 * __tnm5 9642: * (_Tp(__n - 3) + __c) * __npcm2 * __npcm1); 9642: const _Tp __E = -__npam1 * __npbm1 * (_Tp(__n - 1) - __c) 9642: / (_Tp(2) * __tnm3 * __npcm2 * __npcm1); 9642: 9642: _Tp __An = (_Tp(1) + __F1 * __x) * __Anm1 9642: + (__E + __F2 * __x) * __x * __Anm2 + __F3 * __x3 * __Anm3; 9642: _Tp __Bn = (_Tp(1) + __F1 * __x) * __Bnm1 9642: + (__E + __F2 * __x) * __x * __Bnm2 + __F3 * __x3 * __Bnm3; 9642: const _Tp __r = __An / __Bn; 9642: 9642: const _Tp __prec = std::abs((__F - __r) / __F); 9642: __F = __r; 9642: 9642: if (__prec < __eps || __n > __nmax) 9642: break; 9642: 9642: if (std::abs(__An) > __big || std::abs(__Bn) > __big) 9642: { 9642: __An /= __big; 9642: __Bn /= __big; 9642: __Anm1 /= __big; 9642: __Bnm1 /= __big; 9642: __Anm2 /= __big; 9642: __Bnm2 /= __big; 9642: __Anm3 /= __big; 9642: __Bnm3 /= __big; 9642: } 9642: else if (std::abs(__An) < _Tp(1) / __big 9642: || std::abs(__Bn) < _Tp(1) / __big) 9642: { 9642: __An *= __big; 9642: __Bn *= __big; 9642: __Anm1 *= __big; 9642: __Bnm1 *= __big; 9642: __Anm2 *= __big; 9642: __Bnm2 *= __big; 9642: __Anm3 *= __big; 9642: __Bnm3 *= __big; 9642: } 9642: 9642: ++__n; 9642: __Bnm3 = __Bnm2; 9642: __Bnm2 = __Bnm1; 9642: __Bnm1 = __Bn; 9642: __Anm3 = __Anm2; 9642: __Anm2 = __Anm1; 9642: __Anm1 = __An; 9642: } 9642: 9642: if (__n >= __nmax) 9642: std::__throw_runtime_error(("Iteration failed to converge " "in __hyperg_luke.") 9642: ); 9642: 9642: return __F; 9642: } 9642: # 438 "/usr/include/c++/13/tr1/hypergeometric.tcc" 3 9642: template 9642: _Tp 9642: __hyperg_reflect(_Tp __a, _Tp __b, _Tp __c, _Tp __x) 9642: { 9642: const _Tp __d = __c - __a - __b; 9642: const int __intd = std::floor(__d + _Tp(0.5L)); 9642: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 9642: const _Tp __toler = _Tp(1000) * __eps; 9642: const _Tp __log_max = std::log(std::numeric_limits<_Tp>::max()); 9642: const bool __d_integer = (std::abs(__d - __intd) < __toler); 9642: 9642: if (__d_integer) 9642: { 9642: const _Tp __ln_omx = std::log(_Tp(1) - __x); 9642: const _Tp __ad = std::abs(__d); 9642: _Tp __F1, __F2; 9642: 9642: _Tp __d1, __d2; 9642: if (__d >= _Tp(0)) 9642: { 9642: __d1 = __d; 9642: __d2 = _Tp(0); 9642: } 9642: else 9642: { 9642: __d1 = _Tp(0); 9642: __d2 = __d; 9642: } 9642: 9642: const _Tp __lng_c = __log_gamma(__c); 9642: 9642: 9642: if (__ad < __eps) 9642: { 9642: 9642: __F1 = _Tp(0); 9642: } 9642: else 9642: { 9642: 9642: bool __ok_d1 = true; 9642: _Tp __lng_ad, __lng_ad1, __lng_bd1; 9642: try 9642: { 9642: __lng_ad = __log_gamma(__ad); 9642: __lng_ad1 = __log_gamma(__a + __d1); 9642: __lng_bd1 = __log_gamma(__b + __d1); 9642: } 9642: catch(...) 9642: { 9642: __ok_d1 = false; 9642: } 9642: 9642: if (__ok_d1) 9642: { 9642: 9642: 9642: 9642: _Tp __sum1 = _Tp(1); 9642: _Tp __term = _Tp(1); 9642: _Tp __ln_pre1 = __lng_ad + __lng_c + __d2 * __ln_omx 9642: - __lng_ad1 - __lng_bd1; 9642: 9642: 9642: 9642: for (int __i = 1; __i < __ad; ++__i) 9642: { 9642: const int __j = __i - 1; 9642: __term *= (__a + __d2 + __j) * (__b + __d2 + __j) 9642: / (_Tp(1) + __d2 + __j) / __i * (_Tp(1) - __x); 9642: __sum1 += __term; 9642: } 9642: 9642: if (__ln_pre1 > __log_max) 9642: std::__throw_runtime_error(("Overflow of gamma functions" " in __hyperg_luke.") 9642: ); 9642: else 9642: __F1 = std::exp(__ln_pre1) * __sum1; 9642: } 9642: else 9642: { 9642: 9642: 9642: __F1 = _Tp(0); 9642: } 9642: } 9642: 9642: 9642: bool __ok_d2 = true; 9642: _Tp __lng_ad2, __lng_bd2; 9642: try 9642: { 9642: __lng_ad2 = __log_gamma(__a + __d2); 9642: __lng_bd2 = __log_gamma(__b + __d2); 9642: } 9642: catch(...) 9642: { 9642: __ok_d2 = false; 9642: } 9642: 9642: if (__ok_d2) 9642: { 9642: 9642: 9642: const int __maxiter = 2000; 9642: const _Tp __psi_1 = -__numeric_constants<_Tp>::__gamma_e(); 9642: const _Tp __psi_1pd = __psi(_Tp(1) + __ad); 9642: const _Tp __psi_apd1 = __psi(__a + __d1); 9642: const _Tp __psi_bpd1 = __psi(__b + __d1); 9642: 9642: _Tp __psi_term = __psi_1 + __psi_1pd - __psi_apd1 9642: - __psi_bpd1 - __ln_omx; 9642: _Tp __fact = _Tp(1); 9642: _Tp __sum2 = __psi_term; 9642: _Tp __ln_pre2 = __lng_c + __d1 * __ln_omx 9642: - __lng_ad2 - __lng_bd2; 9642: 9642: 9642: int __j; 9642: for (__j = 1; __j < __maxiter; ++__j) 9642: { 9642: 9642: 9642: const _Tp __term1 = _Tp(1) / _Tp(__j) 9642: + _Tp(1) / (__ad + __j); 9642: const _Tp __term2 = _Tp(1) / (__a + __d1 + _Tp(__j - 1)) 9642: + _Tp(1) / (__b + __d1 + _Tp(__j - 1)); 9642: __psi_term += __term1 - __term2; 9642: __fact *= (__a + __d1 + _Tp(__j - 1)) 9642: * (__b + __d1 + _Tp(__j - 1)) 9642: / ((__ad + __j) * __j) * (_Tp(1) - __x); 9642: const _Tp __delta = __fact * __psi_term; 9642: __sum2 += __delta; 9642: if (std::abs(__delta) < __eps * std::abs(__sum2)) 9642: break; 9642: } 9642: if (__j == __maxiter) 9642: std::__throw_runtime_error(("Sum F2 failed to converge " "in __hyperg_reflect") 9642: ); 9642: 9642: if (__sum2 == _Tp(0)) 9642: __F2 = _Tp(0); 9642: else 9642: __F2 = std::exp(__ln_pre2) * __sum2; 9642: } 9642: else 9642: { 9642: 9642: 9642: __F2 = _Tp(0); 9642: } 9642: 9642: const _Tp __sgn_2 = (__intd % 2 == 1 ? -_Tp(1) : _Tp(1)); 9642: const _Tp __F = __F1 + __sgn_2 * __F2; 9642: 9642: return __F; 9642: } 9642: else 9642: { 9642: 9642: 9642: 9642: 9642: bool __ok1 = true; 9642: _Tp __sgn_g1ca = _Tp(0), __ln_g1ca = _Tp(0); 9642: _Tp __sgn_g1cb = _Tp(0), __ln_g1cb = _Tp(0); 9642: try 9642: { 9642: __sgn_g1ca = __log_gamma_sign(__c - __a); 9642: __ln_g1ca = __log_gamma(__c - __a); 9642: __sgn_g1cb = __log_gamma_sign(__c - __b); 9642: __ln_g1cb = __log_gamma(__c - __b); 9642: } 9642: catch(...) 9642: { 9642: __ok1 = false; 9642: } 9642: 9642: bool __ok2 = true; 9642: _Tp __sgn_g2a = _Tp(0), __ln_g2a = _Tp(0); 9642: _Tp __sgn_g2b = _Tp(0), __ln_g2b = _Tp(0); 9642: try 9642: { 9642: __sgn_g2a = __log_gamma_sign(__a); 9642: __ln_g2a = __log_gamma(__a); 9642: __sgn_g2b = __log_gamma_sign(__b); 9642: __ln_g2b = __log_gamma(__b); 9642: } 9642: catch(...) 9642: { 9642: __ok2 = false; 9642: } 9642: 9642: const _Tp __sgn_gc = __log_gamma_sign(__c); 9642: const _Tp __ln_gc = __log_gamma(__c); 9642: const _Tp __sgn_gd = __log_gamma_sign(__d); 9642: const _Tp __ln_gd = __log_gamma(__d); 9642: const _Tp __sgn_gmd = __log_gamma_sign(-__d); 9642: const _Tp __ln_gmd = __log_gamma(-__d); 9642: 9642: const _Tp __sgn1 = __sgn_gc * __sgn_gd * __sgn_g1ca * __sgn_g1cb; 9642: const _Tp __sgn2 = __sgn_gc * __sgn_gmd * __sgn_g2a * __sgn_g2b; 9642: 9642: _Tp __pre1, __pre2; 9642: if (__ok1 && __ok2) 9642: { 9642: _Tp __ln_pre1 = __ln_gc + __ln_gd - __ln_g1ca - __ln_g1cb; 9642: _Tp __ln_pre2 = __ln_gc + __ln_gmd - __ln_g2a - __ln_g2b 9642: + __d * std::log(_Tp(1) - __x); 9642: if (__ln_pre1 < __log_max && __ln_pre2 < __log_max) 9642: { 9642: __pre1 = std::exp(__ln_pre1); 9642: __pre2 = std::exp(__ln_pre2); 9642: __pre1 *= __sgn1; 9642: __pre2 *= __sgn2; 9642: } 9642: else 9642: { 9642: std::__throw_runtime_error(("Overflow of gamma functions " "in __hyperg_reflect") 9642: ); 9642: } 9642: } 9642: else if (__ok1 && !__ok2) 9642: { 9642: _Tp __ln_pre1 = __ln_gc + __ln_gd - __ln_g1ca - __ln_g1cb; 9642: if (__ln_pre1 < __log_max) 9642: { 9642: __pre1 = std::exp(__ln_pre1); 9642: __pre1 *= __sgn1; 9642: __pre2 = _Tp(0); 9642: } 9642: else 9642: { 9642: std::__throw_runtime_error(("Overflow of gamma functions " "in __hyperg_reflect") 9642: ); 9642: } 9642: } 9642: else if (!__ok1 && __ok2) 9642: { 9642: _Tp __ln_pre2 = __ln_gc + __ln_gmd - __ln_g2a - __ln_g2b 9642: + __d * std::log(_Tp(1) - __x); 9642: if (__ln_pre2 < __log_max) 9642: { 9642: __pre1 = _Tp(0); 9642: __pre2 = std::exp(__ln_pre2); 9642: __pre2 *= __sgn2; 9642: } 9642: else 9642: { 9642: std::__throw_runtime_error(("Overflow of gamma functions " "in __hyperg_reflect") 9642: ); 9642: } 9642: } 9642: else 9642: { 9642: __pre1 = _Tp(0); 9642: __pre2 = _Tp(0); 9642: std::__throw_runtime_error(("Underflow of gamma functions " "in __hyperg_reflect") 9642: ); 9642: } 9642: 9642: const _Tp __F1 = __hyperg_series(__a, __b, _Tp(1) - __d, 9642: _Tp(1) - __x); 9642: const _Tp __F2 = __hyperg_series(__c - __a, __c - __b, _Tp(1) + __d, 9642: _Tp(1) - __x); 9642: 9642: const _Tp __F = __pre1 * __F1 + __pre2 * __F2; 9642: 9642: return __F; 9642: } 9642: } 9642: # 728 "/usr/include/c++/13/tr1/hypergeometric.tcc" 3 9642: template 9642: _Tp 9642: __hyperg(_Tp __a, _Tp __b, _Tp __c, _Tp __x) 9642: { 9642: 9642: const _Tp __a_nint = ::std::nearbyint(__a); 9642: const _Tp __b_nint = ::std::nearbyint(__b); 9642: const _Tp __c_nint = ::std::nearbyint(__c); 9642: 9642: 9642: 9642: 9642: 9642: const _Tp __toler = _Tp(1000) * std::numeric_limits<_Tp>::epsilon(); 9642: if (std::abs(__x) >= _Tp(1)) 9642: std::__throw_domain_error(("Argument outside unit circle " "in __hyperg.") 9642: ); 9642: else if (__isnan(__a) || __isnan(__b) 9642: || __isnan(__c) || __isnan(__x)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (__c_nint == __c && __c_nint <= _Tp(0)) 9642: return std::numeric_limits<_Tp>::infinity(); 9642: else if (std::abs(__c - __b) < __toler || std::abs(__c - __a) < __toler) 9642: return std::pow(_Tp(1) - __x, __c - __a - __b); 9642: else if (__a >= _Tp(0) && __b >= _Tp(0) && __c >= _Tp(0) 9642: && __x >= _Tp(0) && __x < _Tp(0.995L)) 9642: return __hyperg_series(__a, __b, __c, __x); 9642: else if (std::abs(__a) < _Tp(10) && std::abs(__b) < _Tp(10)) 9642: { 9642: 9642: 9642: if (__a < _Tp(0) && std::abs(__a - __a_nint) < __toler) 9642: return __hyperg_series(__a_nint, __b, __c, __x); 9642: else if (__b < _Tp(0) && std::abs(__b - __b_nint) < __toler) 9642: return __hyperg_series(__a, __b_nint, __c, __x); 9642: else if (__x < -_Tp(0.25L)) 9642: return __hyperg_luke(__a, __b, __c, __x); 9642: else if (__x < _Tp(0.5L)) 9642: return __hyperg_series(__a, __b, __c, __x); 9642: else 9642: if (std::abs(__c) > _Tp(10)) 9642: return __hyperg_series(__a, __b, __c, __x); 9642: else 9642: return __hyperg_reflect(__a, __b, __c, __x); 9642: } 9642: else 9642: return __hyperg_luke(__a, __b, __c, __x); 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 53 "/usr/include/c++/13/bits/specfun.h" 2 3 9642: # 1 "/usr/include/c++/13/tr1/legendre_function.tcc" 1 3 9642: # 49 "/usr/include/c++/13/tr1/legendre_function.tcc" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 65 "/usr/include/c++/13/tr1/legendre_function.tcc" 3 9642: namespace __detail 9642: { 9642: # 80 "/usr/include/c++/13/tr1/legendre_function.tcc" 3 9642: template 9642: _Tp 9642: __poly_legendre_p(unsigned int __l, _Tp __x) 9642: { 9642: 9642: if (__isnan(__x)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (__x == +_Tp(1)) 9642: return +_Tp(1); 9642: else if (__x == -_Tp(1)) 9642: return (__l % 2 == 1 ? -_Tp(1) : +_Tp(1)); 9642: else 9642: { 9642: _Tp __p_lm2 = _Tp(1); 9642: if (__l == 0) 9642: return __p_lm2; 9642: 9642: _Tp __p_lm1 = __x; 9642: if (__l == 1) 9642: return __p_lm1; 9642: 9642: _Tp __p_l = 0; 9642: for (unsigned int __ll = 2; __ll <= __l; ++__ll) 9642: { 9642: 9642: 9642: __p_l = _Tp(2) * __x * __p_lm1 - __p_lm2 9642: - (__x * __p_lm1 - __p_lm2) / _Tp(__ll); 9642: __p_lm2 = __p_lm1; 9642: __p_lm1 = __p_l; 9642: } 9642: 9642: return __p_l; 9642: } 9642: } 9642: # 136 "/usr/include/c++/13/tr1/legendre_function.tcc" 3 9642: template 9642: _Tp 9642: __assoc_legendre_p(unsigned int __l, unsigned int __m, _Tp __x, 9642: _Tp __phase = _Tp(+1)) 9642: { 9642: 9642: if (__m > __l) 9642: return _Tp(0); 9642: else if (__isnan(__x)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (__m == 0) 9642: return __poly_legendre_p(__l, __x); 9642: else 9642: { 9642: _Tp __p_mm = _Tp(1); 9642: if (__m > 0) 9642: { 9642: 9642: 9642: _Tp __root = std::sqrt(_Tp(1) - __x) * std::sqrt(_Tp(1) + __x); 9642: _Tp __fact = _Tp(1); 9642: for (unsigned int __i = 1; __i <= __m; ++__i) 9642: { 9642: __p_mm *= __phase * __fact * __root; 9642: __fact += _Tp(2); 9642: } 9642: } 9642: if (__l == __m) 9642: return __p_mm; 9642: 9642: _Tp __p_mp1m = _Tp(2 * __m + 1) * __x * __p_mm; 9642: if (__l == __m + 1) 9642: return __p_mp1m; 9642: 9642: _Tp __p_lm2m = __p_mm; 9642: _Tp __P_lm1m = __p_mp1m; 9642: _Tp __p_lm = _Tp(0); 9642: for (unsigned int __j = __m + 2; __j <= __l; ++__j) 9642: { 9642: __p_lm = (_Tp(2 * __j - 1) * __x * __P_lm1m 9642: - _Tp(__j + __m - 1) * __p_lm2m) / _Tp(__j - __m); 9642: __p_lm2m = __P_lm1m; 9642: __P_lm1m = __p_lm; 9642: } 9642: 9642: return __p_lm; 9642: } 9642: } 9642: # 214 "/usr/include/c++/13/tr1/legendre_function.tcc" 3 9642: template 9642: _Tp 9642: __sph_legendre(unsigned int __l, unsigned int __m, _Tp __theta) 9642: { 9642: if (__isnan(__theta)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: 9642: const _Tp __x = std::cos(__theta); 9642: 9642: if (__m > __l) 9642: return _Tp(0); 9642: else if (__m == 0) 9642: { 9642: _Tp __P = __poly_legendre_p(__l, __x); 9642: _Tp __fact = std::sqrt(_Tp(2 * __l + 1) 9642: / (_Tp(4) * __numeric_constants<_Tp>::__pi())); 9642: __P *= __fact; 9642: return __P; 9642: } 9642: else if (__x == _Tp(1) || __x == -_Tp(1)) 9642: { 9642: 9642: return _Tp(0); 9642: } 9642: else 9642: { 9642: 9642: 9642: 9642: 9642: 9642: const _Tp __sgn = ( __m % 2 == 1 ? -_Tp(1) : _Tp(1)); 9642: const _Tp __y_mp1m_factor = __x * std::sqrt(_Tp(2 * __m + 3)); 9642: 9642: const _Tp __lncirc = ::std::log1p(-__x * __x); 9642: 9642: 9642: 9642: 9642: 9642: const _Tp __lnpoch = ::std::lgamma(_Tp(__m + _Tp(0.5L))) 9642: - ::std::lgamma(_Tp(__m)); 9642: 9642: 9642: 9642: 9642: const _Tp __lnpre_val = 9642: -_Tp(0.25L) * __numeric_constants<_Tp>::__lnpi() 9642: + _Tp(0.5L) * (__lnpoch + __m * __lncirc); 9642: const _Tp __sr = std::sqrt((_Tp(2) + _Tp(1) / __m) 9642: / (_Tp(4) * __numeric_constants<_Tp>::__pi())); 9642: _Tp __y_mm = __sgn * __sr * std::exp(__lnpre_val); 9642: _Tp __y_mp1m = __y_mp1m_factor * __y_mm; 9642: 9642: if (__l == __m) 9642: return __y_mm; 9642: else if (__l == __m + 1) 9642: return __y_mp1m; 9642: else 9642: { 9642: _Tp __y_lm = _Tp(0); 9642: 9642: 9642: for (unsigned int __ll = __m + 2; __ll <= __l; ++__ll) 9642: { 9642: const _Tp __rat1 = _Tp(__ll - __m) / _Tp(__ll + __m); 9642: const _Tp __rat2 = _Tp(__ll - __m - 1) / _Tp(__ll + __m - 1); 9642: const _Tp __fact1 = std::sqrt(__rat1 * _Tp(2 * __ll + 1) 9642: * _Tp(2 * __ll - 1)); 9642: const _Tp __fact2 = std::sqrt(__rat1 * __rat2 * _Tp(2 * __ll + 1) 9642: / _Tp(2 * __ll - 3)); 9642: __y_lm = (__x * __y_mp1m * __fact1 9642: - (__ll + __m - 1) * __y_mm * __fact2) / _Tp(__ll - __m); 9642: __y_mm = __y_mp1m; 9642: __y_mp1m = __y_lm; 9642: } 9642: 9642: return __y_lm; 9642: } 9642: } 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 54 "/usr/include/c++/13/bits/specfun.h" 2 3 9642: # 1 "/usr/include/c++/13/tr1/modified_bessel_func.tcc" 1 3 9642: # 51 "/usr/include/c++/13/tr1/modified_bessel_func.tcc" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 65 "/usr/include/c++/13/tr1/modified_bessel_func.tcc" 3 9642: namespace __detail 9642: { 9642: # 83 "/usr/include/c++/13/tr1/modified_bessel_func.tcc" 3 9642: template 9642: void 9642: __bessel_ik(_Tp __nu, _Tp __x, 9642: _Tp & __Inu, _Tp & __Knu, _Tp & __Ipnu, _Tp & __Kpnu) 9642: { 9642: if (__x == _Tp(0)) 9642: { 9642: if (__nu == _Tp(0)) 9642: { 9642: __Inu = _Tp(1); 9642: __Ipnu = _Tp(0); 9642: } 9642: else if (__nu == _Tp(1)) 9642: { 9642: __Inu = _Tp(0); 9642: __Ipnu = _Tp(0.5L); 9642: } 9642: else 9642: { 9642: __Inu = _Tp(0); 9642: __Ipnu = _Tp(0); 9642: } 9642: __Knu = std::numeric_limits<_Tp>::infinity(); 9642: __Kpnu = -std::numeric_limits<_Tp>::infinity(); 9642: return; 9642: } 9642: 9642: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 9642: const _Tp __fp_min = _Tp(10) * std::numeric_limits<_Tp>::epsilon(); 9642: const int __max_iter = 15000; 9642: const _Tp __x_min = _Tp(2); 9642: 9642: const int __nl = static_cast(__nu + _Tp(0.5L)); 9642: 9642: const _Tp __mu = __nu - __nl; 9642: const _Tp __mu2 = __mu * __mu; 9642: const _Tp __xi = _Tp(1) / __x; 9642: const _Tp __xi2 = _Tp(2) * __xi; 9642: _Tp __h = __nu * __xi; 9642: if ( __h < __fp_min ) 9642: __h = __fp_min; 9642: _Tp __b = __xi2 * __nu; 9642: _Tp __d = _Tp(0); 9642: _Tp __c = __h; 9642: int __i; 9642: for ( __i = 1; __i <= __max_iter; ++__i ) 9642: { 9642: __b += __xi2; 9642: __d = _Tp(1) / (__b + __d); 9642: __c = __b + _Tp(1) / __c; 9642: const _Tp __del = __c * __d; 9642: __h *= __del; 9642: if (std::abs(__del - _Tp(1)) < __eps) 9642: break; 9642: } 9642: if (__i > __max_iter) 9642: std::__throw_runtime_error(("Argument x too large " "in __bessel_ik; " "try asymptotic expansion.") 9642: 9642: ); 9642: _Tp __Inul = __fp_min; 9642: _Tp __Ipnul = __h * __Inul; 9642: _Tp __Inul1 = __Inul; 9642: _Tp __Ipnu1 = __Ipnul; 9642: _Tp __fact = __nu * __xi; 9642: for (int __l = __nl; __l >= 1; --__l) 9642: { 9642: const _Tp __Inutemp = __fact * __Inul + __Ipnul; 9642: __fact -= __xi; 9642: __Ipnul = __fact * __Inutemp + __Inul; 9642: __Inul = __Inutemp; 9642: } 9642: _Tp __f = __Ipnul / __Inul; 9642: _Tp __Kmu, __Knu1; 9642: if (__x < __x_min) 9642: { 9642: const _Tp __x2 = __x / _Tp(2); 9642: const _Tp __pimu = __numeric_constants<_Tp>::__pi() * __mu; 9642: const _Tp __fact = (std::abs(__pimu) < __eps 9642: ? _Tp(1) : __pimu / std::sin(__pimu)); 9642: _Tp __d = -std::log(__x2); 9642: _Tp __e = __mu * __d; 9642: const _Tp __fact2 = (std::abs(__e) < __eps 9642: ? _Tp(1) : std::sinh(__e) / __e); 9642: _Tp __gam1, __gam2, __gampl, __gammi; 9642: __gamma_temme(__mu, __gam1, __gam2, __gampl, __gammi); 9642: _Tp __ff = __fact 9642: * (__gam1 * std::cosh(__e) + __gam2 * __fact2 * __d); 9642: _Tp __sum = __ff; 9642: __e = std::exp(__e); 9642: _Tp __p = __e / (_Tp(2) * __gampl); 9642: _Tp __q = _Tp(1) / (_Tp(2) * __e * __gammi); 9642: _Tp __c = _Tp(1); 9642: __d = __x2 * __x2; 9642: _Tp __sum1 = __p; 9642: int __i; 9642: for (__i = 1; __i <= __max_iter; ++__i) 9642: { 9642: __ff = (__i * __ff + __p + __q) / (__i * __i - __mu2); 9642: __c *= __d / __i; 9642: __p /= __i - __mu; 9642: __q /= __i + __mu; 9642: const _Tp __del = __c * __ff; 9642: __sum += __del; 9642: const _Tp __del1 = __c * (__p - __i * __ff); 9642: __sum1 += __del1; 9642: if (std::abs(__del) < __eps * std::abs(__sum)) 9642: break; 9642: } 9642: if (__i > __max_iter) 9642: std::__throw_runtime_error(("Bessel k series failed to converge " "in __bessel_ik.") 9642: ); 9642: __Kmu = __sum; 9642: __Knu1 = __sum1 * __xi2; 9642: } 9642: else 9642: { 9642: _Tp __b = _Tp(2) * (_Tp(1) + __x); 9642: _Tp __d = _Tp(1) / __b; 9642: _Tp __delh = __d; 9642: _Tp __h = __delh; 9642: _Tp __q1 = _Tp(0); 9642: _Tp __q2 = _Tp(1); 9642: _Tp __a1 = _Tp(0.25L) - __mu2; 9642: _Tp __q = __c = __a1; 9642: _Tp __a = -__a1; 9642: _Tp __s = _Tp(1) + __q * __delh; 9642: int __i; 9642: for (__i = 2; __i <= __max_iter; ++__i) 9642: { 9642: __a -= 2 * (__i - 1); 9642: __c = -__a * __c / __i; 9642: const _Tp __qnew = (__q1 - __b * __q2) / __a; 9642: __q1 = __q2; 9642: __q2 = __qnew; 9642: __q += __c * __qnew; 9642: __b += _Tp(2); 9642: __d = _Tp(1) / (__b + __a * __d); 9642: __delh = (__b * __d - _Tp(1)) * __delh; 9642: __h += __delh; 9642: const _Tp __dels = __q * __delh; 9642: __s += __dels; 9642: if ( std::abs(__dels / __s) < __eps ) 9642: break; 9642: } 9642: if (__i > __max_iter) 9642: std::__throw_runtime_error(("Steed's method failed " "in __bessel_ik.") 9642: ); 9642: __h = __a1 * __h; 9642: __Kmu = std::sqrt(__numeric_constants<_Tp>::__pi() / (_Tp(2) * __x)) 9642: * std::exp(-__x) / __s; 9642: __Knu1 = __Kmu * (__mu + __x + _Tp(0.5L) - __h) * __xi; 9642: } 9642: 9642: _Tp __Kpmu = __mu * __xi * __Kmu - __Knu1; 9642: _Tp __Inumu = __xi / (__f * __Kmu - __Kpmu); 9642: __Inu = __Inumu * __Inul1 / __Inul; 9642: __Ipnu = __Inumu * __Ipnu1 / __Inul; 9642: for ( __i = 1; __i <= __nl; ++__i ) 9642: { 9642: const _Tp __Knutemp = (__mu + __i) * __xi2 * __Knu1 + __Kmu; 9642: __Kmu = __Knu1; 9642: __Knu1 = __Knutemp; 9642: } 9642: __Knu = __Kmu; 9642: __Kpnu = __nu * __xi * __Kmu - __Knu1; 9642: 9642: return; 9642: } 9642: # 267 "/usr/include/c++/13/tr1/modified_bessel_func.tcc" 3 9642: template 9642: _Tp 9642: __cyl_bessel_i(_Tp __nu, _Tp __x) 9642: { 9642: if (__nu < _Tp(0) || __x < _Tp(0)) 9642: std::__throw_domain_error(("Bad argument " "in __cyl_bessel_i.") 9642: ); 9642: else if (__isnan(__nu) || __isnan(__x)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (__x * __x < _Tp(10) * (__nu + _Tp(1))) 9642: return __cyl_bessel_ij_series(__nu, __x, +_Tp(1), 200); 9642: else 9642: { 9642: _Tp __I_nu, __K_nu, __Ip_nu, __Kp_nu; 9642: __bessel_ik(__nu, __x, __I_nu, __K_nu, __Ip_nu, __Kp_nu); 9642: return __I_nu; 9642: } 9642: } 9642: # 303 "/usr/include/c++/13/tr1/modified_bessel_func.tcc" 3 9642: template 9642: _Tp 9642: __cyl_bessel_k(_Tp __nu, _Tp __x) 9642: { 9642: if (__nu < _Tp(0) || __x < _Tp(0)) 9642: std::__throw_domain_error(("Bad argument " "in __cyl_bessel_k.") 9642: ); 9642: else if (__isnan(__nu) || __isnan(__x)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else 9642: { 9642: _Tp __I_nu, __K_nu, __Ip_nu, __Kp_nu; 9642: __bessel_ik(__nu, __x, __I_nu, __K_nu, __Ip_nu, __Kp_nu); 9642: return __K_nu; 9642: } 9642: } 9642: # 337 "/usr/include/c++/13/tr1/modified_bessel_func.tcc" 3 9642: template 9642: void 9642: __sph_bessel_ik(unsigned int __n, _Tp __x, 9642: _Tp & __i_n, _Tp & __k_n, _Tp & __ip_n, _Tp & __kp_n) 9642: { 9642: const _Tp __nu = _Tp(__n) + _Tp(0.5L); 9642: 9642: _Tp __I_nu, __Ip_nu, __K_nu, __Kp_nu; 9642: __bessel_ik(__nu, __x, __I_nu, __K_nu, __Ip_nu, __Kp_nu); 9642: 9642: const _Tp __factor = __numeric_constants<_Tp>::__sqrtpio2() 9642: / std::sqrt(__x); 9642: 9642: __i_n = __factor * __I_nu; 9642: __k_n = __factor * __K_nu; 9642: __ip_n = __factor * __Ip_nu - __i_n / (_Tp(2) * __x); 9642: __kp_n = __factor * __Kp_nu - __k_n / (_Tp(2) * __x); 9642: 9642: return; 9642: } 9642: # 373 "/usr/include/c++/13/tr1/modified_bessel_func.tcc" 3 9642: template 9642: void 9642: __airy(_Tp __x, _Tp & __Ai, _Tp & __Bi, _Tp & __Aip, _Tp & __Bip) 9642: { 9642: const _Tp __absx = std::abs(__x); 9642: const _Tp __rootx = std::sqrt(__absx); 9642: const _Tp __z = _Tp(2) * __absx * __rootx / _Tp(3); 9642: const _Tp _S_inf = std::numeric_limits<_Tp>::infinity(); 9642: 9642: if (__isnan(__x)) 9642: __Bip = __Aip = __Bi = __Ai = std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (__z == _S_inf) 9642: { 9642: __Aip = __Ai = _Tp(0); 9642: __Bip = __Bi = _S_inf; 9642: } 9642: else if (__z == -_S_inf) 9642: __Bip = __Aip = __Bi = __Ai = _Tp(0); 9642: else if (__x > _Tp(0)) 9642: { 9642: _Tp __I_nu, __Ip_nu, __K_nu, __Kp_nu; 9642: 9642: __bessel_ik(_Tp(1) / _Tp(3), __z, __I_nu, __K_nu, __Ip_nu, __Kp_nu); 9642: __Ai = __rootx * __K_nu 9642: / (__numeric_constants<_Tp>::__sqrt3() 9642: * __numeric_constants<_Tp>::__pi()); 9642: __Bi = __rootx * (__K_nu / __numeric_constants<_Tp>::__pi() 9642: + _Tp(2) * __I_nu / __numeric_constants<_Tp>::__sqrt3()); 9642: 9642: __bessel_ik(_Tp(2) / _Tp(3), __z, __I_nu, __K_nu, __Ip_nu, __Kp_nu); 9642: __Aip = -__x * __K_nu 9642: / (__numeric_constants<_Tp>::__sqrt3() 9642: * __numeric_constants<_Tp>::__pi()); 9642: __Bip = __x * (__K_nu / __numeric_constants<_Tp>::__pi() 9642: + _Tp(2) * __I_nu 9642: / __numeric_constants<_Tp>::__sqrt3()); 9642: } 9642: else if (__x < _Tp(0)) 9642: { 9642: _Tp __J_nu, __Jp_nu, __N_nu, __Np_nu; 9642: 9642: __bessel_jn(_Tp(1) / _Tp(3), __z, __J_nu, __N_nu, __Jp_nu, __Np_nu); 9642: __Ai = __rootx * (__J_nu 9642: - __N_nu / __numeric_constants<_Tp>::__sqrt3()) / _Tp(2); 9642: __Bi = -__rootx * (__N_nu 9642: + __J_nu / __numeric_constants<_Tp>::__sqrt3()) / _Tp(2); 9642: 9642: __bessel_jn(_Tp(2) / _Tp(3), __z, __J_nu, __N_nu, __Jp_nu, __Np_nu); 9642: __Aip = __absx * (__N_nu / __numeric_constants<_Tp>::__sqrt3() 9642: + __J_nu) / _Tp(2); 9642: __Bip = __absx * (__J_nu / __numeric_constants<_Tp>::__sqrt3() 9642: - __N_nu) / _Tp(2); 9642: } 9642: else 9642: { 9642: 9642: 9642: 9642: __Ai = _Tp(0.35502805388781723926L); 9642: __Bi = __Ai * __numeric_constants<_Tp>::__sqrt3(); 9642: 9642: 9642: 9642: 9642: __Aip = -_Tp(0.25881940379280679840L); 9642: __Bip = -__Aip * __numeric_constants<_Tp>::__sqrt3(); 9642: } 9642: 9642: return; 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 55 "/usr/include/c++/13/bits/specfun.h" 2 3 9642: # 1 "/usr/include/c++/13/tr1/poly_hermite.tcc" 1 3 9642: # 42 "/usr/include/c++/13/tr1/poly_hermite.tcc" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 56 "/usr/include/c++/13/tr1/poly_hermite.tcc" 3 9642: namespace __detail 9642: { 9642: # 72 "/usr/include/c++/13/tr1/poly_hermite.tcc" 3 9642: template 9642: _Tp 9642: __poly_hermite_recursion(unsigned int __n, _Tp __x) 9642: { 9642: 9642: _Tp __H_0 = 1; 9642: if (__n == 0) 9642: return __H_0; 9642: 9642: 9642: _Tp __H_1 = 2 * __x; 9642: if (__n == 1) 9642: return __H_1; 9642: 9642: 9642: _Tp __H_n, __H_nm1, __H_nm2; 9642: unsigned int __i; 9642: for (__H_nm2 = __H_0, __H_nm1 = __H_1, __i = 2; __i <= __n; ++__i) 9642: { 9642: __H_n = 2 * (__x * __H_nm1 - (__i - 1) * __H_nm2); 9642: __H_nm2 = __H_nm1; 9642: __H_nm1 = __H_n; 9642: } 9642: 9642: return __H_n; 9642: } 9642: # 114 "/usr/include/c++/13/tr1/poly_hermite.tcc" 3 9642: template 9642: inline _Tp 9642: __poly_hermite(unsigned int __n, _Tp __x) 9642: { 9642: if (__isnan(__x)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else 9642: return __poly_hermite_recursion(__n, __x); 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 56 "/usr/include/c++/13/bits/specfun.h" 2 3 9642: # 1 "/usr/include/c++/13/tr1/poly_laguerre.tcc" 1 3 9642: # 44 "/usr/include/c++/13/tr1/poly_laguerre.tcc" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 60 "/usr/include/c++/13/tr1/poly_laguerre.tcc" 3 9642: namespace __detail 9642: { 9642: # 75 "/usr/include/c++/13/tr1/poly_laguerre.tcc" 3 9642: template 9642: _Tp 9642: __poly_laguerre_large_n(unsigned __n, _Tpa __alpha1, _Tp __x) 9642: { 9642: const _Tp __a = -_Tp(__n); 9642: const _Tp __b = _Tp(__alpha1) + _Tp(1); 9642: const _Tp __eta = _Tp(2) * __b - _Tp(4) * __a; 9642: const _Tp __cos2th = __x / __eta; 9642: const _Tp __sin2th = _Tp(1) - __cos2th; 9642: const _Tp __th = std::acos(std::sqrt(__cos2th)); 9642: const _Tp __pre_h = __numeric_constants<_Tp>::__pi_2() 9642: * __numeric_constants<_Tp>::__pi_2() 9642: * __eta * __eta * __cos2th * __sin2th; 9642: 9642: 9642: const _Tp __lg_b = ::std::lgamma(_Tp(__n) + __b); 9642: const _Tp __lnfact = ::std::lgamma(_Tp(__n + 1)); 9642: 9642: 9642: 9642: 9642: 9642: _Tp __pre_term1 = _Tp(0.5L) * (_Tp(1) - __b) 9642: * std::log(_Tp(0.25L) * __x * __eta); 9642: _Tp __pre_term2 = _Tp(0.25L) * std::log(__pre_h); 9642: _Tp __lnpre = __lg_b - __lnfact + _Tp(0.5L) * __x 9642: + __pre_term1 - __pre_term2; 9642: _Tp __ser_term1 = std::sin(__a * __numeric_constants<_Tp>::__pi()); 9642: _Tp __ser_term2 = std::sin(_Tp(0.25L) * __eta 9642: * (_Tp(2) * __th 9642: - std::sin(_Tp(2) * __th)) 9642: + __numeric_constants<_Tp>::__pi_4()); 9642: _Tp __ser = __ser_term1 + __ser_term2; 9642: 9642: return std::exp(__lnpre) * __ser; 9642: } 9642: # 129 "/usr/include/c++/13/tr1/poly_laguerre.tcc" 3 9642: template 9642: _Tp 9642: __poly_laguerre_hyperg(unsigned int __n, _Tpa __alpha1, _Tp __x) 9642: { 9642: const _Tp __b = _Tp(__alpha1) + _Tp(1); 9642: const _Tp __mx = -__x; 9642: const _Tp __tc_sgn = (__x < _Tp(0) ? _Tp(1) 9642: : ((__n % 2 == 1) ? -_Tp(1) : _Tp(1))); 9642: 9642: _Tp __tc = _Tp(1); 9642: const _Tp __ax = std::abs(__x); 9642: for (unsigned int __k = 1; __k <= __n; ++__k) 9642: __tc *= (__ax / __k); 9642: 9642: _Tp __term = __tc * __tc_sgn; 9642: _Tp __sum = __term; 9642: for (int __k = int(__n) - 1; __k >= 0; --__k) 9642: { 9642: __term *= ((__b + _Tp(__k)) / _Tp(int(__n) - __k)) 9642: * _Tp(__k + 1) / __mx; 9642: __sum += __term; 9642: } 9642: 9642: return __sum; 9642: } 9642: # 185 "/usr/include/c++/13/tr1/poly_laguerre.tcc" 3 9642: template 9642: _Tp 9642: __poly_laguerre_recursion(unsigned int __n, _Tpa __alpha1, _Tp __x) 9642: { 9642: 9642: _Tp __l_0 = _Tp(1); 9642: if (__n == 0) 9642: return __l_0; 9642: 9642: 9642: _Tp __l_1 = -__x + _Tp(1) + _Tp(__alpha1); 9642: if (__n == 1) 9642: return __l_1; 9642: 9642: 9642: _Tp __l_n2 = __l_0; 9642: _Tp __l_n1 = __l_1; 9642: _Tp __l_n = _Tp(0); 9642: for (unsigned int __nn = 2; __nn <= __n; ++__nn) 9642: { 9642: __l_n = (_Tp(2 * __nn - 1) + _Tp(__alpha1) - __x) 9642: * __l_n1 / _Tp(__nn) 9642: - (_Tp(__nn - 1) + _Tp(__alpha1)) * __l_n2 / _Tp(__nn); 9642: __l_n2 = __l_n1; 9642: __l_n1 = __l_n; 9642: } 9642: 9642: return __l_n; 9642: } 9642: # 244 "/usr/include/c++/13/tr1/poly_laguerre.tcc" 3 9642: template 9642: _Tp 9642: __poly_laguerre(unsigned int __n, _Tpa __alpha1, _Tp __x) 9642: { 9642: if (__x < _Tp(0)) 9642: std::__throw_domain_error(("Negative argument " "in __poly_laguerre.") 9642: ); 9642: 9642: else if (__isnan(__x)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (__n == 0) 9642: return _Tp(1); 9642: else if (__n == 1) 9642: return _Tp(1) + _Tp(__alpha1) - __x; 9642: else if (__x == _Tp(0)) 9642: { 9642: _Tp __prod = _Tp(__alpha1) + _Tp(1); 9642: for (unsigned int __k = 2; __k <= __n; ++__k) 9642: __prod *= (_Tp(__alpha1) + _Tp(__k)) / _Tp(__k); 9642: return __prod; 9642: } 9642: else if (__n > 10000000 && _Tp(__alpha1) > -_Tp(1) 9642: && __x < _Tp(2) * (_Tp(__alpha1) + _Tp(1)) + _Tp(4 * __n)) 9642: return __poly_laguerre_large_n(__n, __alpha1, __x); 9642: else if (_Tp(__alpha1) >= _Tp(0) 9642: || (__x > _Tp(0) && _Tp(__alpha1) < -_Tp(__n + 1))) 9642: return __poly_laguerre_recursion(__n, __alpha1, __x); 9642: else 9642: return __poly_laguerre_hyperg(__n, __alpha1, __x); 9642: } 9642: # 296 "/usr/include/c++/13/tr1/poly_laguerre.tcc" 3 9642: template 9642: inline _Tp 9642: __assoc_laguerre(unsigned int __n, unsigned int __m, _Tp __x) 9642: { return __poly_laguerre(__n, __m, __x); } 9642: # 316 "/usr/include/c++/13/tr1/poly_laguerre.tcc" 3 9642: template 9642: inline _Tp 9642: __laguerre(unsigned int __n, _Tp __x) 9642: { return __poly_laguerre(__n, 0, __x); } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 57 "/usr/include/c++/13/bits/specfun.h" 2 3 9642: # 1 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 1 3 9642: # 47 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 63 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 3 9642: namespace __detail 9642: { 9642: # 78 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 3 9642: template 9642: _Tp 9642: __riemann_zeta_sum(_Tp __s) 9642: { 9642: 9642: if (__s < _Tp(1)) 9642: std::__throw_domain_error(("Bad argument in zeta sum.")); 9642: 9642: const unsigned int max_iter = 10000; 9642: _Tp __zeta = _Tp(0); 9642: for (unsigned int __k = 1; __k < max_iter; ++__k) 9642: { 9642: _Tp __term = std::pow(static_cast<_Tp>(__k), -__s); 9642: if (__term < std::numeric_limits<_Tp>::epsilon()) 9642: { 9642: break; 9642: } 9642: __zeta += __term; 9642: } 9642: 9642: return __zeta; 9642: } 9642: # 115 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 3 9642: template 9642: _Tp 9642: __riemann_zeta_alt(_Tp __s) 9642: { 9642: _Tp __sgn = _Tp(1); 9642: _Tp __zeta = _Tp(0); 9642: for (unsigned int __i = 1; __i < 10000000; ++__i) 9642: { 9642: _Tp __term = __sgn / std::pow(__i, __s); 9642: if (std::abs(__term) < std::numeric_limits<_Tp>::epsilon()) 9642: break; 9642: __zeta += __term; 9642: __sgn *= _Tp(-1); 9642: } 9642: __zeta /= _Tp(1) - std::pow(_Tp(2), _Tp(1) - __s); 9642: 9642: return __zeta; 9642: } 9642: # 157 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 3 9642: template 9642: _Tp 9642: __riemann_zeta_glob(_Tp __s) 9642: { 9642: _Tp __zeta = _Tp(0); 9642: 9642: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 9642: 9642: const _Tp __max_bincoeff = std::numeric_limits<_Tp>::max_exponent10 9642: * std::log(_Tp(10)) - _Tp(1); 9642: 9642: 9642: 9642: if (__s < _Tp(0)) 9642: { 9642: 9642: if (::std::fmod(__s,_Tp(2)) == _Tp(0)) 9642: return _Tp(0); 9642: else 9642: 9642: { 9642: _Tp __zeta = __riemann_zeta_glob(_Tp(1) - __s); 9642: __zeta *= std::pow(_Tp(2) 9642: * __numeric_constants<_Tp>::__pi(), __s) 9642: * std::sin(__numeric_constants<_Tp>::__pi_2() * __s) 9642: 9642: * std::exp(::std::lgamma(_Tp(1) - __s)) 9642: 9642: 9642: 9642: / __numeric_constants<_Tp>::__pi(); 9642: return __zeta; 9642: } 9642: } 9642: 9642: _Tp __num = _Tp(0.5L); 9642: const unsigned int __maxit = 10000; 9642: for (unsigned int __i = 0; __i < __maxit; ++__i) 9642: { 9642: bool __punt = false; 9642: _Tp __sgn = _Tp(1); 9642: _Tp __term = _Tp(0); 9642: for (unsigned int __j = 0; __j <= __i; ++__j) 9642: { 9642: 9642: _Tp __bincoeff = ::std::lgamma(_Tp(1 + __i)) 9642: - ::std::lgamma(_Tp(1 + __j)) 9642: - ::std::lgamma(_Tp(1 + __i - __j)); 9642: 9642: 9642: 9642: 9642: 9642: if (__bincoeff > __max_bincoeff) 9642: { 9642: 9642: __punt = true; 9642: break; 9642: } 9642: __bincoeff = std::exp(__bincoeff); 9642: __term += __sgn * __bincoeff * std::pow(_Tp(1 + __j), -__s); 9642: __sgn *= _Tp(-1); 9642: } 9642: if (__punt) 9642: break; 9642: __term *= __num; 9642: __zeta += __term; 9642: if (std::abs(__term/__zeta) < __eps) 9642: break; 9642: __num *= _Tp(0.5L); 9642: } 9642: 9642: __zeta /= _Tp(1) - std::pow(_Tp(2), _Tp(1) - __s); 9642: 9642: return __zeta; 9642: } 9642: # 252 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 3 9642: template 9642: _Tp 9642: __riemann_zeta_product(_Tp __s) 9642: { 9642: static const _Tp __prime[] = { 9642: _Tp(2), _Tp(3), _Tp(5), _Tp(7), _Tp(11), _Tp(13), _Tp(17), _Tp(19), 9642: _Tp(23), _Tp(29), _Tp(31), _Tp(37), _Tp(41), _Tp(43), _Tp(47), 9642: _Tp(53), _Tp(59), _Tp(61), _Tp(67), _Tp(71), _Tp(73), _Tp(79), 9642: _Tp(83), _Tp(89), _Tp(97), _Tp(101), _Tp(103), _Tp(107), _Tp(109) 9642: }; 9642: static const unsigned int __num_primes = sizeof(__prime) / sizeof(_Tp); 9642: 9642: _Tp __zeta = _Tp(1); 9642: for (unsigned int __i = 0; __i < __num_primes; ++__i) 9642: { 9642: const _Tp __fact = _Tp(1) - std::pow(__prime[__i], -__s); 9642: __zeta *= __fact; 9642: if (_Tp(1) - __fact < std::numeric_limits<_Tp>::epsilon()) 9642: break; 9642: } 9642: 9642: __zeta = _Tp(1) / __zeta; 9642: 9642: return __zeta; 9642: } 9642: # 293 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 3 9642: template 9642: _Tp 9642: __riemann_zeta(_Tp __s) 9642: { 9642: if (__isnan(__s)) 9642: return std::numeric_limits<_Tp>::quiet_NaN(); 9642: else if (__s == _Tp(1)) 9642: return std::numeric_limits<_Tp>::infinity(); 9642: else if (__s < -_Tp(19)) 9642: { 9642: _Tp __zeta = __riemann_zeta_product(_Tp(1) - __s); 9642: __zeta *= std::pow(_Tp(2) * __numeric_constants<_Tp>::__pi(), __s) 9642: * std::sin(__numeric_constants<_Tp>::__pi_2() * __s) 9642: 9642: * std::exp(::std::lgamma(_Tp(1) - __s)) 9642: 9642: 9642: 9642: / __numeric_constants<_Tp>::__pi(); 9642: return __zeta; 9642: } 9642: else if (__s < _Tp(20)) 9642: { 9642: 9642: bool __glob = true; 9642: if (__glob) 9642: return __riemann_zeta_glob(__s); 9642: else 9642: { 9642: if (__s > _Tp(1)) 9642: return __riemann_zeta_sum(__s); 9642: else 9642: { 9642: _Tp __zeta = std::pow(_Tp(2) 9642: * __numeric_constants<_Tp>::__pi(), __s) 9642: * std::sin(__numeric_constants<_Tp>::__pi_2() * __s) 9642: 9642: * ::std::tgamma(_Tp(1) - __s) 9642: 9642: 9642: 9642: * __riemann_zeta_sum(_Tp(1) - __s); 9642: return __zeta; 9642: } 9642: } 9642: } 9642: else 9642: return __riemann_zeta_product(__s); 9642: } 9642: # 365 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 3 9642: template 9642: _Tp 9642: __hurwitz_zeta_glob(_Tp __a, _Tp __s) 9642: { 9642: _Tp __zeta = _Tp(0); 9642: 9642: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 9642: 9642: const _Tp __max_bincoeff = std::numeric_limits<_Tp>::max_exponent10 9642: * std::log(_Tp(10)) - _Tp(1); 9642: 9642: const unsigned int __maxit = 10000; 9642: for (unsigned int __i = 0; __i < __maxit; ++__i) 9642: { 9642: bool __punt = false; 9642: _Tp __sgn = _Tp(1); 9642: _Tp __term = _Tp(0); 9642: for (unsigned int __j = 0; __j <= __i; ++__j) 9642: { 9642: 9642: _Tp __bincoeff = ::std::lgamma(_Tp(1 + __i)) 9642: - ::std::lgamma(_Tp(1 + __j)) 9642: - ::std::lgamma(_Tp(1 + __i - __j)); 9642: 9642: 9642: 9642: 9642: 9642: if (__bincoeff > __max_bincoeff) 9642: { 9642: 9642: __punt = true; 9642: break; 9642: } 9642: __bincoeff = std::exp(__bincoeff); 9642: __term += __sgn * __bincoeff * std::pow(_Tp(__a + __j), -__s); 9642: __sgn *= _Tp(-1); 9642: } 9642: if (__punt) 9642: break; 9642: __term /= _Tp(__i + 1); 9642: if (std::abs(__term / __zeta) < __eps) 9642: break; 9642: __zeta += __term; 9642: } 9642: 9642: __zeta /= __s - _Tp(1); 9642: 9642: return __zeta; 9642: } 9642: # 430 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 3 9642: template 9642: inline _Tp 9642: __hurwitz_zeta(_Tp __a, _Tp __s) 9642: { return __hurwitz_zeta_glob(__a, __s); } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 58 "/usr/include/c++/13/bits/specfun.h" 2 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 203 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: assoc_laguerref(unsigned int __n, unsigned int __m, float __x) 9642: { return __detail::__assoc_laguerre(__n, __m, __x); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: assoc_laguerrel(unsigned int __n, unsigned int __m, long double __x) 9642: { return __detail::__assoc_laguerre(__n, __m, __x); } 9642: # 248 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote<_Tp>::__type 9642: assoc_laguerre(unsigned int __n, unsigned int __m, _Tp __x) 9642: { 9642: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 9642: return __detail::__assoc_laguerre<__type>(__n, __m, __x); 9642: } 9642: # 264 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: assoc_legendref(unsigned int __l, unsigned int __m, float __x) 9642: { return __detail::__assoc_legendre_p(__l, __m, __x); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: assoc_legendrel(unsigned int __l, unsigned int __m, long double __x) 9642: { return __detail::__assoc_legendre_p(__l, __m, __x); } 9642: # 294 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote<_Tp>::__type 9642: assoc_legendre(unsigned int __l, unsigned int __m, _Tp __x) 9642: { 9642: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 9642: return __detail::__assoc_legendre_p<__type>(__l, __m, __x); 9642: } 9642: # 309 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: betaf(float __a, float __b) 9642: { return __detail::__beta(__a, __b); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: betal(long double __a, long double __b) 9642: { return __detail::__beta(__a, __b); } 9642: # 339 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote_2<_Tpa, _Tpb>::__type 9642: beta(_Tpa __a, _Tpb __b) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tpa, _Tpb>::__type __type; 9642: return __detail::__beta<__type>(__a, __b); 9642: } 9642: # 355 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: comp_ellint_1f(float __k) 9642: { return __detail::__comp_ellint_1(__k); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: comp_ellint_1l(long double __k) 9642: { return __detail::__comp_ellint_1(__k); } 9642: # 387 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote<_Tp>::__type 9642: comp_ellint_1(_Tp __k) 9642: { 9642: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 9642: return __detail::__comp_ellint_1<__type>(__k); 9642: } 9642: # 403 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: comp_ellint_2f(float __k) 9642: { return __detail::__comp_ellint_2(__k); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: comp_ellint_2l(long double __k) 9642: { return __detail::__comp_ellint_2(__k); } 9642: # 434 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote<_Tp>::__type 9642: comp_ellint_2(_Tp __k) 9642: { 9642: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 9642: return __detail::__comp_ellint_2<__type>(__k); 9642: } 9642: # 450 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: comp_ellint_3f(float __k, float __nu) 9642: { return __detail::__comp_ellint_3(__k, __nu); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: comp_ellint_3l(long double __k, long double __nu) 9642: { return __detail::__comp_ellint_3(__k, __nu); } 9642: # 485 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote_2<_Tp, _Tpn>::__type 9642: comp_ellint_3(_Tp __k, _Tpn __nu) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Tpn>::__type __type; 9642: return __detail::__comp_ellint_3<__type>(__k, __nu); 9642: } 9642: # 501 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: cyl_bessel_if(float __nu, float __x) 9642: { return __detail::__cyl_bessel_i(__nu, __x); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: cyl_bessel_il(long double __nu, long double __x) 9642: { return __detail::__cyl_bessel_i(__nu, __x); } 9642: # 531 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type 9642: cyl_bessel_i(_Tpnu __nu, _Tp __x) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type; 9642: return __detail::__cyl_bessel_i<__type>(__nu, __x); 9642: } 9642: # 547 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: cyl_bessel_jf(float __nu, float __x) 9642: { return __detail::__cyl_bessel_j(__nu, __x); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: cyl_bessel_jl(long double __nu, long double __x) 9642: { return __detail::__cyl_bessel_j(__nu, __x); } 9642: # 577 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type 9642: cyl_bessel_j(_Tpnu __nu, _Tp __x) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type; 9642: return __detail::__cyl_bessel_j<__type>(__nu, __x); 9642: } 9642: # 593 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: cyl_bessel_kf(float __nu, float __x) 9642: { return __detail::__cyl_bessel_k(__nu, __x); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: cyl_bessel_kl(long double __nu, long double __x) 9642: { return __detail::__cyl_bessel_k(__nu, __x); } 9642: # 629 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type 9642: cyl_bessel_k(_Tpnu __nu, _Tp __x) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type; 9642: return __detail::__cyl_bessel_k<__type>(__nu, __x); 9642: } 9642: # 645 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: cyl_neumannf(float __nu, float __x) 9642: { return __detail::__cyl_neumann_n(__nu, __x); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: cyl_neumannl(long double __nu, long double __x) 9642: { return __detail::__cyl_neumann_n(__nu, __x); } 9642: # 677 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type 9642: cyl_neumann(_Tpnu __nu, _Tp __x) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type; 9642: return __detail::__cyl_neumann_n<__type>(__nu, __x); 9642: } 9642: # 693 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: ellint_1f(float __k, float __phi) 9642: { return __detail::__ellint_1(__k, __phi); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: ellint_1l(long double __k, long double __phi) 9642: { return __detail::__ellint_1(__k, __phi); } 9642: # 725 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type 9642: ellint_1(_Tp __k, _Tpp __phi) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type __type; 9642: return __detail::__ellint_1<__type>(__k, __phi); 9642: } 9642: # 741 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: ellint_2f(float __k, float __phi) 9642: { return __detail::__ellint_2(__k, __phi); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: ellint_2l(long double __k, long double __phi) 9642: { return __detail::__ellint_2(__k, __phi); } 9642: # 773 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type 9642: ellint_2(_Tp __k, _Tpp __phi) 9642: { 9642: typedef typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type __type; 9642: return __detail::__ellint_2<__type>(__k, __phi); 9642: } 9642: # 789 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: ellint_3f(float __k, float __nu, float __phi) 9642: { return __detail::__ellint_3(__k, __nu, __phi); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: ellint_3l(long double __k, long double __nu, long double __phi) 9642: { return __detail::__ellint_3(__k, __nu, __phi); } 9642: # 826 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote_3<_Tp, _Tpn, _Tpp>::__type 9642: ellint_3(_Tp __k, _Tpn __nu, _Tpp __phi) 9642: { 9642: typedef typename __gnu_cxx::__promote_3<_Tp, _Tpn, _Tpp>::__type __type; 9642: return __detail::__ellint_3<__type>(__k, __nu, __phi); 9642: } 9642: # 841 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: expintf(float __x) 9642: { return __detail::__expint(__x); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: expintl(long double __x) 9642: { return __detail::__expint(__x); } 9642: # 866 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote<_Tp>::__type 9642: expint(_Tp __x) 9642: { 9642: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 9642: return __detail::__expint<__type>(__x); 9642: } 9642: # 882 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: hermitef(unsigned int __n, float __x) 9642: { return __detail::__poly_hermite(__n, __x); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: hermitel(unsigned int __n, long double __x) 9642: { return __detail::__poly_hermite(__n, __x); } 9642: # 914 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote<_Tp>::__type 9642: hermite(unsigned int __n, _Tp __x) 9642: { 9642: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 9642: return __detail::__poly_hermite<__type>(__n, __x); 9642: } 9642: # 930 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: laguerref(unsigned int __n, float __x) 9642: { return __detail::__laguerre(__n, __x); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: laguerrel(unsigned int __n, long double __x) 9642: { return __detail::__laguerre(__n, __x); } 9642: # 958 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote<_Tp>::__type 9642: laguerre(unsigned int __n, _Tp __x) 9642: { 9642: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 9642: return __detail::__laguerre<__type>(__n, __x); 9642: } 9642: # 974 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: legendref(unsigned int __l, float __x) 9642: { return __detail::__poly_legendre_p(__l, __x); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: legendrel(unsigned int __l, long double __x) 9642: { return __detail::__poly_legendre_p(__l, __x); } 9642: # 1003 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote<_Tp>::__type 9642: legendre(unsigned int __l, _Tp __x) 9642: { 9642: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 9642: return __detail::__poly_legendre_p<__type>(__l, __x); 9642: } 9642: # 1019 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: riemann_zetaf(float __s) 9642: { return __detail::__riemann_zeta(__s); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: riemann_zetal(long double __s) 9642: { return __detail::__riemann_zeta(__s); } 9642: # 1054 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote<_Tp>::__type 9642: riemann_zeta(_Tp __s) 9642: { 9642: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 9642: return __detail::__riemann_zeta<__type>(__s); 9642: } 9642: # 1070 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: sph_besself(unsigned int __n, float __x) 9642: { return __detail::__sph_bessel(__n, __x); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: sph_bessell(unsigned int __n, long double __x) 9642: { return __detail::__sph_bessel(__n, __x); } 9642: # 1098 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote<_Tp>::__type 9642: sph_bessel(unsigned int __n, _Tp __x) 9642: { 9642: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 9642: return __detail::__sph_bessel<__type>(__n, __x); 9642: } 9642: # 1114 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: sph_legendref(unsigned int __l, unsigned int __m, float __theta) 9642: { return __detail::__sph_legendre(__l, __m, __theta); } 9642: # 1125 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline long double 9642: sph_legendrel(unsigned int __l, unsigned int __m, long double __theta) 9642: { return __detail::__sph_legendre(__l, __m, __theta); } 9642: # 1145 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote<_Tp>::__type 9642: sph_legendre(unsigned int __l, unsigned int __m, _Tp __theta) 9642: { 9642: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 9642: return __detail::__sph_legendre<__type>(__l, __m, __theta); 9642: } 9642: # 1161 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: sph_neumannf(unsigned int __n, float __x) 9642: { return __detail::__sph_neumann(__n, __x); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline long double 9642: sph_neumannl(unsigned int __n, long double __x) 9642: { return __detail::__sph_neumann(__n, __x); } 9642: # 1189 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote<_Tp>::__type 9642: sph_neumann(unsigned int __n, _Tp __x) 9642: { 9642: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 9642: return __detail::__sph_neumann<__type>(__n, __x); 9642: } 9642: 9642: 9642: 9642: 9642: } 9642: 9642: 9642: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 1216 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: airy_aif(float __x) 9642: { 9642: float __Ai, __Bi, __Aip, __Bip; 9642: std::__detail::__airy(__x, __Ai, __Bi, __Aip, __Bip); 9642: return __Ai; 9642: } 9642: 9642: 9642: 9642: 9642: inline long double 9642: airy_ail(long double __x) 9642: { 9642: long double __Ai, __Bi, __Aip, __Bip; 9642: std::__detail::__airy(__x, __Ai, __Bi, __Aip, __Bip); 9642: return __Ai; 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: inline typename __gnu_cxx::__promote<_Tp>::__type 9642: airy_ai(_Tp __x) 9642: { 9642: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 9642: __type __Ai, __Bi, __Aip, __Bip; 9642: std::__detail::__airy<__type>(__x, __Ai, __Bi, __Aip, __Bip); 9642: return __Ai; 9642: } 9642: 9642: 9642: 9642: 9642: inline float 9642: airy_bif(float __x) 9642: { 9642: float __Ai, __Bi, __Aip, __Bip; 9642: std::__detail::__airy(__x, __Ai, __Bi, __Aip, __Bip); 9642: return __Bi; 9642: } 9642: 9642: 9642: 9642: 9642: inline long double 9642: airy_bil(long double __x) 9642: { 9642: long double __Ai, __Bi, __Aip, __Bip; 9642: std::__detail::__airy(__x, __Ai, __Bi, __Aip, __Bip); 9642: return __Bi; 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: inline typename __gnu_cxx::__promote<_Tp>::__type 9642: airy_bi(_Tp __x) 9642: { 9642: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 9642: __type __Ai, __Bi, __Aip, __Bip; 9642: std::__detail::__airy<__type>(__x, __Ai, __Bi, __Aip, __Bip); 9642: return __Bi; 9642: } 9642: # 1292 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: conf_hypergf(float __a, float __c, float __x) 9642: { return std::__detail::__conf_hyperg(__a, __c, __x); } 9642: # 1303 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline long double 9642: conf_hypergl(long double __a, long double __c, long double __x) 9642: { return std::__detail::__conf_hyperg(__a, __c, __x); } 9642: # 1323 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote_3<_Tpa, _Tpc, _Tp>::__type 9642: conf_hyperg(_Tpa __a, _Tpc __c, _Tp __x) 9642: { 9642: typedef typename __gnu_cxx::__promote_3<_Tpa, _Tpc, _Tp>::__type __type; 9642: return std::__detail::__conf_hyperg<__type>(__a, __c, __x); 9642: } 9642: # 1340 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline float 9642: hypergf(float __a, float __b, float __c, float __x) 9642: { return std::__detail::__hyperg(__a, __b, __c, __x); } 9642: # 1351 "/usr/include/c++/13/bits/specfun.h" 3 9642: inline long double 9642: hypergl(long double __a, long double __b, long double __c, long double __x) 9642: { return std::__detail::__hyperg(__a, __b, __c, __x); } 9642: # 1372 "/usr/include/c++/13/bits/specfun.h" 3 9642: template 9642: inline typename __gnu_cxx::__promote_4<_Tpa, _Tpb, _Tpc, _Tp>::__type 9642: hyperg(_Tpa __a, _Tpb __b, _Tpc __c, _Tp __x) 9642: { 9642: typedef typename __gnu_cxx::__promote_4<_Tpa, _Tpb, _Tpc, _Tp> 9642: ::__type __type; 9642: return std::__detail::__hyperg<__type>(__a, __b, __c, __x); 9642: } 9642: 9642: 9642: 9642: } 9642: # 3700 "/usr/include/c++/13/cmath" 2 3 9642: 9642: 9642: } 9642: # 41 "/usr/include/c++/13/random" 2 3 9642: # 1 "/usr/include/c++/13/cstdlib" 1 3 9642: # 39 "/usr/include/c++/13/cstdlib" 3 9642: 9642: # 40 "/usr/include/c++/13/cstdlib" 3 9642: # 42 "/usr/include/c++/13/random" 2 3 9642: # 51 "/usr/include/c++/13/random" 3 9642: # 1 "/usr/include/c++/13/bits/random.h" 1 3 9642: # 37 "/usr/include/c++/13/bits/random.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 58 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: _RealType 9642: generate_canonical(_UniformRandomNumberGenerator& __g); 9642: 9642: 9642: 9642: namespace __detail 9642: { 9642: template 9642: (std::numeric_limits<_UIntType>::digits)> 9642: struct _Shift 9642: { static constexpr _UIntType __value = 0; }; 9642: 9642: template 9642: struct _Shift<_UIntType, __w, true> 9642: { static constexpr _UIntType __value = _UIntType(1) << __w; }; 9642: 9642: template 9642: struct _Select_uint_least_t 9642: { 9642: static_assert(__which < 0, 9642: "sorry, would be too much trouble for a slow result"); 9642: }; 9642: 9642: template 9642: struct _Select_uint_least_t<__s, 4> 9642: { using type = unsigned int; }; 9642: 9642: template 9642: struct _Select_uint_least_t<__s, 3> 9642: { using type = unsigned long; }; 9642: 9642: template 9642: struct _Select_uint_least_t<__s, 2> 9642: { using type = unsigned long long; }; 9642: # 108 "/usr/include/c++/13/bits/random.h" 3 9642: template= __m - 1), 9642: bool __schrage_ok = __m % __a < __m / __a> 9642: struct _Mod 9642: { 9642: static _Tp 9642: __calc(_Tp __x) 9642: { 9642: using _Tp2 9642: = typename _Select_uint_least_t::type; 9642: return static_cast<_Tp>((_Tp2(__a) * __x + __c) % __m); 9642: } 9642: }; 9642: 9642: 9642: template 9642: struct _Mod<_Tp, __m, __a, __c, false, true> 9642: { 9642: static _Tp 9642: __calc(_Tp __x); 9642: }; 9642: 9642: 9642: 9642: 9642: template 9642: struct _Mod<_Tp, __m, __a, __c, true, __s> 9642: { 9642: static _Tp 9642: __calc(_Tp __x) 9642: { 9642: _Tp __res = __a * __x + __c; 9642: if (__m) 9642: __res %= __m; 9642: return __res; 9642: } 9642: }; 9642: 9642: template 9642: inline _Tp 9642: __mod(_Tp __x) 9642: { 9642: if constexpr (__a == 0) 9642: return __c; 9642: else 9642: { 9642: 9642: constexpr _Tp __a1 = __a ? __a : 1; 9642: return _Mod<_Tp, __m, __a1, __c>::__calc(__x); 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Adaptor 9642: { 9642: static_assert(std::is_floating_point<_DInputType>::value, 9642: "template argument must be a floating point type"); 9642: 9642: public: 9642: _Adaptor(_Engine& __g) 9642: : _M_g(__g) { } 9642: 9642: _DInputType 9642: min() const 9642: { return _DInputType(0); } 9642: 9642: _DInputType 9642: max() const 9642: { return _DInputType(1); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: _DInputType 9642: operator()() 9642: { 9642: return std::generate_canonical<_DInputType, 9642: std::numeric_limits<_DInputType>::digits, 9642: _Engine>(_M_g); 9642: } 9642: 9642: private: 9642: _Engine& _M_g; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: using __seed_seq_generate_t = decltype( 9642: std::declval<_Sseq&>().generate(std::declval(), 9642: std::declval())); 9642: 9642: template> 9642: using _If_seed_seq_for = _Require< 9642: __not_, _Engine>>, 9642: is_unsigned, 9642: __not_> 9642: >; 9642: 9642: } 9642: # 263 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class linear_congruential_engine 9642: { 9642: static_assert(std::is_unsigned<_UIntType>::value, 9642: "result_type must be an unsigned integral type"); 9642: static_assert(__m == 0u || (__a < __m && __c < __m), 9642: "template argument substituting __m out of bounds"); 9642: 9642: template 9642: using _If_seed_seq 9642: = __detail::_If_seed_seq_for<_Sseq, linear_congruential_engine, 9642: _UIntType>; 9642: 9642: public: 9642: 9642: typedef _UIntType result_type; 9642: 9642: 9642: static constexpr result_type multiplier = __a; 9642: 9642: static constexpr result_type increment = __c; 9642: 9642: static constexpr result_type modulus = __m; 9642: static constexpr result_type default_seed = 1u; 9642: 9642: 9642: 9642: 9642: 9642: linear_congruential_engine() : linear_congruential_engine(default_seed) 9642: { } 9642: # 302 "/usr/include/c++/13/bits/random.h" 3 9642: explicit 9642: linear_congruential_engine(result_type __s) 9642: { seed(__s); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template> 9642: explicit 9642: linear_congruential_engine(_Sseq& __q) 9642: { seed(__q); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: seed(result_type __s = default_seed); 9642: # 333 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: _If_seed_seq<_Sseq> 9642: seed(_Sseq& __q); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: static constexpr result_type 9642: min() 9642: { return __c == 0u ? 1u : 0u; } 9642: 9642: 9642: 9642: 9642: static constexpr result_type 9642: max() 9642: { return __m - 1u; } 9642: 9642: 9642: 9642: 9642: void 9642: discard(unsigned long long __z) 9642: { 9642: for (; __z != 0ULL; --__z) 9642: (*this)(); 9642: } 9642: 9642: 9642: 9642: 9642: result_type 9642: operator()() 9642: { 9642: _M_x = __detail::__mod<_UIntType, __m, __a, __c>(_M_x); 9642: return _M_x; 9642: } 9642: # 385 "/usr/include/c++/13/bits/random.h" 3 9642: friend bool 9642: operator==(const linear_congruential_engine& __lhs, 9642: const linear_congruential_engine& __rhs) 9642: { return __lhs._M_x == __rhs._M_x; } 9642: # 398 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::linear_congruential_engine<_UIntType1, 9642: __a1, __c1, __m1>& __lcr); 9642: # 418 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::linear_congruential_engine<_UIntType1, __a1, 9642: __c1, __m1>& __lcr); 9642: 9642: private: 9642: _UIntType _M_x; 9642: }; 9642: # 441 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: inline bool 9642: operator!=(const std::linear_congruential_engine<_UIntType, __a, 9642: __c, __m>& __lhs, 9642: const std::linear_congruential_engine<_UIntType, __a, 9642: __c, __m>& __rhs) 9642: { return !(__lhs == __rhs); } 9642: # 481 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class mersenne_twister_engine 9642: { 9642: static_assert(std::is_unsigned<_UIntType>::value, 9642: "result_type must be an unsigned integral type"); 9642: static_assert(1u <= __m && __m <= __n, 9642: "template argument substituting __m out of bounds"); 9642: static_assert(__r <= __w, "template argument substituting " 9642: "__r out of bound"); 9642: static_assert(__u <= __w, "template argument substituting " 9642: "__u out of bound"); 9642: static_assert(__s <= __w, "template argument substituting " 9642: "__s out of bound"); 9642: static_assert(__t <= __w, "template argument substituting " 9642: "__t out of bound"); 9642: static_assert(__l <= __w, "template argument substituting " 9642: "__l out of bound"); 9642: static_assert(__w <= std::numeric_limits<_UIntType>::digits, 9642: "template argument substituting __w out of bound"); 9642: static_assert(__a <= (__detail::_Shift<_UIntType, __w>::__value - 1), 9642: "template argument substituting __a out of bound"); 9642: static_assert(__b <= (__detail::_Shift<_UIntType, __w>::__value - 1), 9642: "template argument substituting __b out of bound"); 9642: static_assert(__c <= (__detail::_Shift<_UIntType, __w>::__value - 1), 9642: "template argument substituting __c out of bound"); 9642: static_assert(__d <= (__detail::_Shift<_UIntType, __w>::__value - 1), 9642: "template argument substituting __d out of bound"); 9642: static_assert(__f <= (__detail::_Shift<_UIntType, __w>::__value - 1), 9642: "template argument substituting __f out of bound"); 9642: 9642: template 9642: using _If_seed_seq 9642: = __detail::_If_seed_seq_for<_Sseq, mersenne_twister_engine, 9642: _UIntType>; 9642: 9642: public: 9642: 9642: typedef _UIntType result_type; 9642: 9642: 9642: static constexpr size_t word_size = __w; 9642: static constexpr size_t state_size = __n; 9642: static constexpr size_t shift_size = __m; 9642: static constexpr size_t mask_bits = __r; 9642: static constexpr result_type xor_mask = __a; 9642: static constexpr size_t tempering_u = __u; 9642: static constexpr result_type tempering_d = __d; 9642: static constexpr size_t tempering_s = __s; 9642: static constexpr result_type tempering_b = __b; 9642: static constexpr size_t tempering_t = __t; 9642: static constexpr result_type tempering_c = __c; 9642: static constexpr size_t tempering_l = __l; 9642: static constexpr result_type initialization_multiplier = __f; 9642: static constexpr result_type default_seed = 5489u; 9642: 9642: 9642: 9642: mersenne_twister_engine() : mersenne_twister_engine(default_seed) { } 9642: 9642: explicit 9642: mersenne_twister_engine(result_type __sd) 9642: { seed(__sd); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template> 9642: explicit 9642: mersenne_twister_engine(_Sseq& __q) 9642: { seed(__q); } 9642: 9642: void 9642: seed(result_type __sd = default_seed); 9642: 9642: template 9642: _If_seed_seq<_Sseq> 9642: seed(_Sseq& __q); 9642: 9642: 9642: 9642: 9642: static constexpr result_type 9642: min() 9642: { return 0; } 9642: 9642: 9642: 9642: 9642: static constexpr result_type 9642: max() 9642: { return __detail::_Shift<_UIntType, __w>::__value - 1; } 9642: 9642: 9642: 9642: 9642: void 9642: discard(unsigned long long __z); 9642: 9642: result_type 9642: operator()(); 9642: # 601 "/usr/include/c++/13/bits/random.h" 3 9642: friend bool 9642: operator==(const mersenne_twister_engine& __lhs, 9642: const mersenne_twister_engine& __rhs) 9642: { return (std::equal(__lhs._M_x, __lhs._M_x + state_size, __rhs._M_x) 9642: && __lhs._M_p == __rhs._M_p); } 9642: # 619 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::mersenne_twister_engine<_UIntType1, __w1, __n1, 9642: __m1, __r1, __a1, __u1, __d1, __s1, __b1, __t1, __c1, 9642: __l1, __f1>& __x); 9642: # 645 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::mersenne_twister_engine<_UIntType1, __w1, __n1, __m1, 9642: __r1, __a1, __u1, __d1, __s1, __b1, __t1, __c1, 9642: __l1, __f1>& __x); 9642: 9642: private: 9642: void _M_gen_rand(); 9642: 9642: _UIntType _M_x[state_size]; 9642: size_t _M_p; 9642: }; 9642: # 679 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: inline bool 9642: operator!=(const std::mersenne_twister_engine<_UIntType, __w, __n, __m, 9642: __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>& __lhs, 9642: const std::mersenne_twister_engine<_UIntType, __w, __n, __m, 9642: __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>& __rhs) 9642: { return !(__lhs == __rhs); } 9642: # 710 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class subtract_with_carry_engine 9642: { 9642: static_assert(std::is_unsigned<_UIntType>::value, 9642: "result_type must be an unsigned integral type"); 9642: static_assert(0u < __s && __s < __r, 9642: "0 < s < r"); 9642: static_assert(0u < __w && __w <= std::numeric_limits<_UIntType>::digits, 9642: "template argument substituting __w out of bounds"); 9642: 9642: template 9642: using _If_seed_seq 9642: = __detail::_If_seed_seq_for<_Sseq, subtract_with_carry_engine, 9642: _UIntType>; 9642: 9642: public: 9642: 9642: typedef _UIntType result_type; 9642: 9642: 9642: static constexpr size_t word_size = __w; 9642: static constexpr size_t short_lag = __s; 9642: static constexpr size_t long_lag = __r; 9642: static constexpr uint_least32_t default_seed = 19780503u; 9642: 9642: subtract_with_carry_engine() : subtract_with_carry_engine(0u) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: subtract_with_carry_engine(result_type __sd) 9642: { seed(__sd); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template> 9642: explicit 9642: subtract_with_carry_engine(_Sseq& __q) 9642: { seed(__q); } 9642: # 769 "/usr/include/c++/13/bits/random.h" 3 9642: void 9642: seed(result_type __sd = 0u); 9642: 9642: 9642: 9642: 9642: 9642: template 9642: _If_seed_seq<_Sseq> 9642: seed(_Sseq& __q); 9642: 9642: 9642: 9642: 9642: 9642: static constexpr result_type 9642: min() 9642: { return 0; } 9642: 9642: 9642: 9642: 9642: 9642: static constexpr result_type 9642: max() 9642: { return __detail::_Shift<_UIntType, __w>::__value - 1; } 9642: 9642: 9642: 9642: 9642: void 9642: discard(unsigned long long __z) 9642: { 9642: for (; __z != 0ULL; --__z) 9642: (*this)(); 9642: } 9642: 9642: 9642: 9642: 9642: result_type 9642: operator()(); 9642: # 824 "/usr/include/c++/13/bits/random.h" 3 9642: friend bool 9642: operator==(const subtract_with_carry_engine& __lhs, 9642: const subtract_with_carry_engine& __rhs) 9642: { return (std::equal(__lhs._M_x, __lhs._M_x + long_lag, __rhs._M_x) 9642: && __lhs._M_carry == __rhs._M_carry 9642: && __lhs._M_p == __rhs._M_p); } 9642: # 843 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::subtract_with_carry_engine<_UIntType1, __w1, 9642: __s1, __r1>& __x); 9642: # 862 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::subtract_with_carry_engine<_UIntType1, __w1, 9642: __s1, __r1>& __x); 9642: 9642: private: 9642: 9642: _UIntType _M_x[long_lag]; 9642: _UIntType _M_carry; 9642: size_t _M_p; 9642: }; 9642: # 889 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: inline bool 9642: operator!=(const std::subtract_with_carry_engine<_UIntType, __w, 9642: __s, __r>& __lhs, 9642: const std::subtract_with_carry_engine<_UIntType, __w, 9642: __s, __r>& __rhs) 9642: { return !(__lhs == __rhs); } 9642: # 907 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class discard_block_engine 9642: { 9642: static_assert(1 <= __r && __r <= __p, 9642: "template argument substituting __r out of bounds"); 9642: 9642: public: 9642: 9642: typedef typename _RandomNumberEngine::result_type result_type; 9642: 9642: template 9642: using _If_seed_seq 9642: = __detail::_If_seed_seq_for<_Sseq, discard_block_engine, 9642: result_type>; 9642: 9642: 9642: static constexpr size_t block_size = __p; 9642: static constexpr size_t used_block = __r; 9642: 9642: 9642: 9642: 9642: 9642: 9642: discard_block_engine() 9642: : _M_b(), _M_n(0) { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: discard_block_engine(const _RandomNumberEngine& __rng) 9642: : _M_b(__rng), _M_n(0) { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: discard_block_engine(_RandomNumberEngine&& __rng) 9642: : _M_b(std::move(__rng)), _M_n(0) { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: discard_block_engine(result_type __s) 9642: : _M_b(__s), _M_n(0) { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template> 9642: explicit 9642: discard_block_engine(_Sseq& __q) 9642: : _M_b(__q), _M_n(0) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: seed() 9642: { 9642: _M_b.seed(); 9642: _M_n = 0; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: seed(result_type __s) 9642: { 9642: _M_b.seed(__s); 9642: _M_n = 0; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: _If_seed_seq<_Sseq> 9642: seed(_Sseq& __q) 9642: { 9642: _M_b.seed(__q); 9642: _M_n = 0; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: const _RandomNumberEngine& 9642: base() const noexcept 9642: { return _M_b; } 9642: 9642: 9642: 9642: 9642: static constexpr result_type 9642: min() 9642: { return _RandomNumberEngine::min(); } 9642: 9642: 9642: 9642: 9642: static constexpr result_type 9642: max() 9642: { return _RandomNumberEngine::max(); } 9642: 9642: 9642: 9642: 9642: void 9642: discard(unsigned long long __z) 9642: { 9642: for (; __z != 0ULL; --__z) 9642: (*this)(); 9642: } 9642: 9642: 9642: 9642: 9642: result_type 9642: operator()(); 9642: # 1059 "/usr/include/c++/13/bits/random.h" 3 9642: friend bool 9642: operator==(const discard_block_engine& __lhs, 9642: const discard_block_engine& __rhs) 9642: { return __lhs._M_b == __rhs._M_b && __lhs._M_n == __rhs._M_n; } 9642: # 1075 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::discard_block_engine<_RandomNumberEngine1, 9642: __p1, __r1>& __x); 9642: # 1093 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::discard_block_engine<_RandomNumberEngine1, 9642: __p1, __r1>& __x); 9642: 9642: private: 9642: _RandomNumberEngine _M_b; 9642: size_t _M_n; 9642: }; 9642: # 1117 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: inline bool 9642: operator!=(const std::discard_block_engine<_RandomNumberEngine, __p, 9642: __r>& __lhs, 9642: const std::discard_block_engine<_RandomNumberEngine, __p, 9642: __r>& __rhs) 9642: { return !(__lhs == __rhs); } 9642: # 1133 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class independent_bits_engine 9642: { 9642: static_assert(std::is_unsigned<_UIntType>::value, 9642: "result_type must be an unsigned integral type"); 9642: static_assert(0u < __w && __w <= std::numeric_limits<_UIntType>::digits, 9642: "template argument substituting __w out of bounds"); 9642: 9642: template 9642: using _If_seed_seq 9642: = __detail::_If_seed_seq_for<_Sseq, independent_bits_engine, 9642: _UIntType>; 9642: 9642: public: 9642: 9642: typedef _UIntType result_type; 9642: 9642: 9642: 9642: 9642: 9642: 9642: independent_bits_engine() 9642: : _M_b() { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: independent_bits_engine(const _RandomNumberEngine& __rng) 9642: : _M_b(__rng) { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: independent_bits_engine(_RandomNumberEngine&& __rng) 9642: : _M_b(std::move(__rng)) { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: independent_bits_engine(result_type __s) 9642: : _M_b(__s) { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template> 9642: explicit 9642: independent_bits_engine(_Sseq& __q) 9642: : _M_b(__q) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: seed() 9642: { _M_b.seed(); } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: seed(result_type __s) 9642: { _M_b.seed(__s); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: _If_seed_seq<_Sseq> 9642: seed(_Sseq& __q) 9642: { _M_b.seed(__q); } 9642: 9642: 9642: 9642: 9642: 9642: const _RandomNumberEngine& 9642: base() const noexcept 9642: { return _M_b; } 9642: 9642: 9642: 9642: 9642: static constexpr result_type 9642: min() 9642: { return 0U; } 9642: 9642: 9642: 9642: 9642: static constexpr result_type 9642: max() 9642: { return __detail::_Shift<_UIntType, __w>::__value - 1; } 9642: 9642: 9642: 9642: 9642: void 9642: discard(unsigned long long __z) 9642: { 9642: for (; __z != 0ULL; --__z) 9642: (*this)(); 9642: } 9642: 9642: 9642: 9642: 9642: result_type 9642: operator()(); 9642: # 1275 "/usr/include/c++/13/bits/random.h" 3 9642: friend bool 9642: operator==(const independent_bits_engine& __lhs, 9642: const independent_bits_engine& __rhs) 9642: { return __lhs._M_b == __rhs._M_b; } 9642: # 1292 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::independent_bits_engine<_RandomNumberEngine, 9642: __w, _UIntType>& __x) 9642: { 9642: __is >> __x._M_b; 9642: return __is; 9642: } 9642: 9642: private: 9642: _RandomNumberEngine _M_b; 9642: }; 9642: # 1319 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: inline bool 9642: operator!=(const std::independent_bits_engine<_RandomNumberEngine, __w, 9642: _UIntType>& __lhs, 9642: const std::independent_bits_engine<_RandomNumberEngine, __w, 9642: _UIntType>& __rhs) 9642: { return !(__lhs == __rhs); } 9642: # 1338 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::independent_bits_engine<_RandomNumberEngine, 9642: __w, _UIntType>& __x) 9642: { 9642: __os << __x.base(); 9642: return __os; 9642: } 9642: # 1360 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class shuffle_order_engine 9642: { 9642: static_assert(1u <= __k, "template argument substituting " 9642: "__k out of bound"); 9642: 9642: public: 9642: 9642: typedef typename _RandomNumberEngine::result_type result_type; 9642: 9642: template 9642: using _If_seed_seq 9642: = __detail::_If_seed_seq_for<_Sseq, shuffle_order_engine, 9642: result_type>; 9642: 9642: static constexpr size_t table_size = __k; 9642: 9642: 9642: 9642: 9642: 9642: 9642: shuffle_order_engine() 9642: : _M_b() 9642: { _M_initialize(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: shuffle_order_engine(const _RandomNumberEngine& __rng) 9642: : _M_b(__rng) 9642: { _M_initialize(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: shuffle_order_engine(_RandomNumberEngine&& __rng) 9642: : _M_b(std::move(__rng)) 9642: { _M_initialize(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: shuffle_order_engine(result_type __s) 9642: : _M_b(__s) 9642: { _M_initialize(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template> 9642: explicit 9642: shuffle_order_engine(_Sseq& __q) 9642: : _M_b(__q) 9642: { _M_initialize(); } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: seed() 9642: { 9642: _M_b.seed(); 9642: _M_initialize(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: seed(result_type __s) 9642: { 9642: _M_b.seed(__s); 9642: _M_initialize(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: _If_seed_seq<_Sseq> 9642: seed(_Sseq& __q) 9642: { 9642: _M_b.seed(__q); 9642: _M_initialize(); 9642: } 9642: 9642: 9642: 9642: 9642: const _RandomNumberEngine& 9642: base() const noexcept 9642: { return _M_b; } 9642: 9642: 9642: 9642: 9642: static constexpr result_type 9642: min() 9642: { return _RandomNumberEngine::min(); } 9642: 9642: 9642: 9642: 9642: static constexpr result_type 9642: max() 9642: { return _RandomNumberEngine::max(); } 9642: 9642: 9642: 9642: 9642: void 9642: discard(unsigned long long __z) 9642: { 9642: for (; __z != 0ULL; --__z) 9642: (*this)(); 9642: } 9642: 9642: 9642: 9642: 9642: result_type 9642: operator()(); 9642: # 1513 "/usr/include/c++/13/bits/random.h" 3 9642: friend bool 9642: operator==(const shuffle_order_engine& __lhs, 9642: const shuffle_order_engine& __rhs) 9642: { return (__lhs._M_b == __rhs._M_b 9642: && std::equal(__lhs._M_v, __lhs._M_v + __k, __rhs._M_v) 9642: && __lhs._M_y == __rhs._M_y); } 9642: # 1531 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::shuffle_order_engine<_RandomNumberEngine1, 9642: __k1>& __x); 9642: # 1549 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::shuffle_order_engine<_RandomNumberEngine1, __k1>& __x); 9642: 9642: private: 9642: void _M_initialize() 9642: { 9642: for (size_t __i = 0; __i < __k; ++__i) 9642: _M_v[__i] = _M_b(); 9642: _M_y = _M_b(); 9642: } 9642: 9642: _RandomNumberEngine _M_b; 9642: result_type _M_v[__k]; 9642: result_type _M_y; 9642: }; 9642: # 1580 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: inline bool 9642: operator!=(const std::shuffle_order_engine<_RandomNumberEngine, 9642: __k>& __lhs, 9642: const std::shuffle_order_engine<_RandomNumberEngine, 9642: __k>& __rhs) 9642: { return !(__lhs == __rhs); } 9642: 9642: 9642: 9642: 9642: 9642: typedef linear_congruential_engine 9642: minstd_rand0; 9642: 9642: 9642: 9642: 9642: typedef linear_congruential_engine 9642: minstd_rand; 9642: # 1609 "/usr/include/c++/13/bits/random.h" 3 9642: typedef mersenne_twister_engine< 9642: uint_fast32_t, 9642: 32, 624, 397, 31, 9642: 0x9908b0dfUL, 11, 9642: 0xffffffffUL, 7, 9642: 0x9d2c5680UL, 15, 9642: 0xefc60000UL, 18, 1812433253UL> mt19937; 9642: 9642: 9642: 9642: 9642: typedef mersenne_twister_engine< 9642: uint_fast64_t, 9642: 64, 312, 156, 31, 9642: 0xb5026f5aa96619e9ULL, 29, 9642: 0x5555555555555555ULL, 17, 9642: 0x71d67fffeda60000ULL, 37, 9642: 0xfff7eee000000000ULL, 43, 9642: 6364136223846793005ULL> mt19937_64; 9642: 9642: typedef subtract_with_carry_engine 9642: ranlux24_base; 9642: 9642: typedef subtract_with_carry_engine 9642: ranlux48_base; 9642: 9642: typedef discard_block_engine ranlux24; 9642: 9642: typedef discard_block_engine ranlux48; 9642: 9642: typedef shuffle_order_engine knuth_b; 9642: 9642: typedef minstd_rand0 default_random_engine; 9642: # 1650 "/usr/include/c++/13/bits/random.h" 3 9642: class random_device 9642: { 9642: public: 9642: 9642: typedef unsigned int result_type; 9642: 9642: 9642: 9642: random_device() { _M_init("default"); } 9642: 9642: explicit 9642: random_device(const std::string& __token) { _M_init(__token); } 9642: 9642: ~random_device() 9642: { _M_fini(); } 9642: 9642: static constexpr result_type 9642: min() 9642: { return std::numeric_limits::min(); } 9642: 9642: static constexpr result_type 9642: max() 9642: { return std::numeric_limits::max(); } 9642: 9642: double 9642: entropy() const noexcept 9642: { return this->_M_getentropy(); } 9642: 9642: result_type 9642: operator()() 9642: { return this->_M_getval(); } 9642: 9642: 9642: random_device(const random_device&) = delete; 9642: void operator=(const random_device&) = delete; 9642: 9642: private: 9642: 9642: void _M_init(const std::string& __token); 9642: void _M_init_pretr1(const std::string& __token); 9642: void _M_fini(); 9642: 9642: result_type _M_getval(); 9642: result_type _M_getval_pretr1(); 9642: double _M_getentropy() const noexcept; 9642: 9642: void _M_init(const char*, size_t); 9642: 9642: __extension__ union 9642: { 9642: struct 9642: { 9642: void* _M_file; 9642: result_type (*_M_func)(void*); 9642: int _M_fd; 9642: }; 9642: mt19937 _M_mt; 9642: }; 9642: }; 9642: # 1731 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: inline bool 9642: operator!=(const std::uniform_int_distribution<_IntType>& __d1, 9642: const std::uniform_int_distribution<_IntType>& __d2) 9642: { return !(__d1 == __d2); } 9642: # 1748 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>&, 9642: const std::uniform_int_distribution<_IntType>&); 9642: # 1762 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>&, 9642: std::uniform_int_distribution<_IntType>&); 9642: # 1778 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class uniform_real_distribution 9642: { 9642: static_assert(std::is_floating_point<_RealType>::value, 9642: "result_type must be a floating point type"); 9642: 9642: public: 9642: 9642: typedef _RealType result_type; 9642: 9642: 9642: struct param_type 9642: { 9642: typedef uniform_real_distribution<_RealType> distribution_type; 9642: 9642: param_type() : param_type(0) { } 9642: 9642: explicit 9642: param_type(_RealType __a, _RealType __b = _RealType(1)) 9642: : _M_a(__a), _M_b(__b) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(_M_a <= _M_b)) __builtin_unreachable(); } while (false); 9642: } 9642: 9642: result_type 9642: a() const 9642: { return _M_a; } 9642: 9642: result_type 9642: b() const 9642: { return _M_b; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; } 9642: 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: 9642: private: 9642: _RealType _M_a; 9642: _RealType _M_b; 9642: }; 9642: 9642: public: 9642: 9642: 9642: 9642: 9642: 9642: uniform_real_distribution() : uniform_real_distribution(0.0) { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: uniform_real_distribution(_RealType __a, _RealType __b = _RealType(1)) 9642: : _M_param(__a, __b) 9642: { } 9642: 9642: explicit 9642: uniform_real_distribution(const param_type& __p) 9642: : _M_param(__p) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: reset() { } 9642: 9642: result_type 9642: a() const 9642: { return _M_param.a(); } 9642: 9642: result_type 9642: b() const 9642: { return _M_param.b(); } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { _M_param = __param; } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { return this->a(); } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { return this->b(); } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng) 9642: { return this->operator()(__urng, _M_param); } 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 9642: __aurng(__urng); 9642: return (__aurng() * (__p.b() - __p.a())) + __p.a(); 9642: } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate(__f, __t, __urng, _M_param); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const uniform_real_distribution& __d1, 9642: const uniform_real_distribution& __d2) 9642: { return __d1._M_param == __d2._M_param; } 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: param_type _M_param; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const std::uniform_real_distribution<_IntType>& __d1, 9642: const std::uniform_real_distribution<_IntType>& __d2) 9642: { return !(__d1 == __d2); } 9642: # 1976 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>&, 9642: const std::uniform_real_distribution<_RealType>&); 9642: # 1990 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>&, 9642: std::uniform_real_distribution<_RealType>&); 9642: # 2015 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class normal_distribution 9642: { 9642: static_assert(std::is_floating_point<_RealType>::value, 9642: "result_type must be a floating point type"); 9642: 9642: public: 9642: 9642: typedef _RealType result_type; 9642: 9642: 9642: struct param_type 9642: { 9642: typedef normal_distribution<_RealType> distribution_type; 9642: 9642: param_type() : param_type(0.0) { } 9642: 9642: explicit 9642: param_type(_RealType __mean, _RealType __stddev = _RealType(1)) 9642: : _M_mean(__mean), _M_stddev(__stddev) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(_M_stddev > _RealType(0))) __builtin_unreachable(); } while (false); 9642: } 9642: 9642: _RealType 9642: mean() const 9642: { return _M_mean; } 9642: 9642: _RealType 9642: stddev() const 9642: { return _M_stddev; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return (__p1._M_mean == __p2._M_mean 9642: && __p1._M_stddev == __p2._M_stddev); } 9642: 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: 9642: private: 9642: _RealType _M_mean; 9642: _RealType _M_stddev; 9642: }; 9642: 9642: public: 9642: normal_distribution() : normal_distribution(0.0) { } 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: normal_distribution(result_type __mean, 9642: result_type __stddev = result_type(1)) 9642: : _M_param(__mean, __stddev) 9642: { } 9642: 9642: explicit 9642: normal_distribution(const param_type& __p) 9642: : _M_param(__p) 9642: { } 9642: 9642: 9642: 9642: 9642: void 9642: reset() 9642: { _M_saved_available = false; } 9642: 9642: 9642: 9642: 9642: _RealType 9642: mean() const 9642: { return _M_param.mean(); } 9642: 9642: 9642: 9642: 9642: _RealType 9642: stddev() const 9642: { return _M_param.stddev(); } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { _M_param = __param; } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { return std::numeric_limits::lowest(); } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { return std::numeric_limits::max(); } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng) 9642: { return this->operator()(__urng, _M_param); } 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate(__f, __t, __urng, _M_param); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: friend bool 9642: operator==(const std::normal_distribution<_RealType1>& __d1, 9642: const std::normal_distribution<_RealType1>& __d2); 9642: # 2186 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::normal_distribution<_RealType1>& __x); 9642: # 2201 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::normal_distribution<_RealType1>& __x); 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: param_type _M_param; 9642: result_type _M_saved = 0; 9642: bool _M_saved_available = false; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const std::normal_distribution<_RealType>& __d1, 9642: const std::normal_distribution<_RealType>& __d2) 9642: { return !(__d1 == __d2); } 9642: # 2242 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class lognormal_distribution 9642: { 9642: static_assert(std::is_floating_point<_RealType>::value, 9642: "result_type must be a floating point type"); 9642: 9642: public: 9642: 9642: typedef _RealType result_type; 9642: 9642: 9642: struct param_type 9642: { 9642: typedef lognormal_distribution<_RealType> distribution_type; 9642: 9642: param_type() : param_type(0.0) { } 9642: 9642: explicit 9642: param_type(_RealType __m, _RealType __s = _RealType(1)) 9642: : _M_m(__m), _M_s(__s) 9642: { } 9642: 9642: _RealType 9642: m() const 9642: { return _M_m; } 9642: 9642: _RealType 9642: s() const 9642: { return _M_s; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return __p1._M_m == __p2._M_m && __p1._M_s == __p2._M_s; } 9642: 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: 9642: private: 9642: _RealType _M_m; 9642: _RealType _M_s; 9642: }; 9642: 9642: lognormal_distribution() : lognormal_distribution(0.0) { } 9642: 9642: explicit 9642: lognormal_distribution(_RealType __m, _RealType __s = _RealType(1)) 9642: : _M_param(__m, __s), _M_nd() 9642: { } 9642: 9642: explicit 9642: lognormal_distribution(const param_type& __p) 9642: : _M_param(__p), _M_nd() 9642: { } 9642: 9642: 9642: 9642: 9642: void 9642: reset() 9642: { _M_nd.reset(); } 9642: 9642: 9642: 9642: 9642: _RealType 9642: m() const 9642: { return _M_param.m(); } 9642: 9642: _RealType 9642: s() const 9642: { return _M_param.s(); } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { _M_param = __param; } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { return result_type(0); } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { return std::numeric_limits::max(); } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng) 9642: { return this->operator()(__urng, _M_param); } 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { return std::exp(__p.s() * _M_nd(__urng) + __p.m()); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate(__f, __t, __urng, _M_param); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const lognormal_distribution& __d1, 9642: const lognormal_distribution& __d2) 9642: { return (__d1._M_param == __d2._M_param 9642: && __d1._M_nd == __d2._M_nd); } 9642: # 2403 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::lognormal_distribution<_RealType1>& __x); 9642: # 2418 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::lognormal_distribution<_RealType1>& __x); 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: param_type _M_param; 9642: 9642: std::normal_distribution _M_nd; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const std::lognormal_distribution<_RealType>& __d1, 9642: const std::lognormal_distribution<_RealType>& __d2) 9642: { return !(__d1 == __d2); } 9642: # 2467 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class gamma_distribution 9642: { 9642: static_assert(std::is_floating_point<_RealType>::value, 9642: "result_type must be a floating point type"); 9642: 9642: public: 9642: 9642: typedef _RealType result_type; 9642: 9642: 9642: struct param_type 9642: { 9642: typedef gamma_distribution<_RealType> distribution_type; 9642: friend class gamma_distribution<_RealType>; 9642: 9642: param_type() : param_type(1.0) { } 9642: 9642: explicit 9642: param_type(_RealType __alpha_val, _RealType __beta_val = _RealType(1)) 9642: : _M_alpha(__alpha_val), _M_beta(__beta_val) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(_M_alpha > _RealType(0))) __builtin_unreachable(); } while (false); 9642: _M_initialize(); 9642: } 9642: 9642: _RealType 9642: alpha() const 9642: { return _M_alpha; } 9642: 9642: _RealType 9642: beta() const 9642: { return _M_beta; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return (__p1._M_alpha == __p2._M_alpha 9642: && __p1._M_beta == __p2._M_beta); } 9642: 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: 9642: private: 9642: void 9642: _M_initialize(); 9642: 9642: _RealType _M_alpha; 9642: _RealType _M_beta; 9642: 9642: _RealType _M_malpha, _M_a2; 9642: }; 9642: 9642: public: 9642: 9642: 9642: 9642: gamma_distribution() : gamma_distribution(1.0) { } 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: gamma_distribution(_RealType __alpha_val, 9642: _RealType __beta_val = _RealType(1)) 9642: : _M_param(__alpha_val, __beta_val), _M_nd() 9642: { } 9642: 9642: explicit 9642: gamma_distribution(const param_type& __p) 9642: : _M_param(__p), _M_nd() 9642: { } 9642: 9642: 9642: 9642: 9642: void 9642: reset() 9642: { _M_nd.reset(); } 9642: 9642: 9642: 9642: 9642: _RealType 9642: alpha() const 9642: { return _M_param.alpha(); } 9642: 9642: 9642: 9642: 9642: _RealType 9642: beta() const 9642: { return _M_param.beta(); } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { _M_param = __param; } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { return result_type(0); } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { return std::numeric_limits::max(); } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng) 9642: { return this->operator()(__urng, _M_param); } 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate(__f, __t, __urng, _M_param); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const gamma_distribution& __d1, 9642: const gamma_distribution& __d2) 9642: { return (__d1._M_param == __d2._M_param 9642: && __d1._M_nd == __d2._M_nd); } 9642: # 2649 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::gamma_distribution<_RealType1>& __x); 9642: # 2663 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::gamma_distribution<_RealType1>& __x); 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: param_type _M_param; 9642: 9642: std::normal_distribution _M_nd; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const std::gamma_distribution<_RealType>& __d1, 9642: const std::gamma_distribution<_RealType>& __d2) 9642: { return !(__d1 == __d2); } 9642: # 2709 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class chi_squared_distribution 9642: { 9642: static_assert(std::is_floating_point<_RealType>::value, 9642: "result_type must be a floating point type"); 9642: 9642: public: 9642: 9642: typedef _RealType result_type; 9642: 9642: 9642: struct param_type 9642: { 9642: typedef chi_squared_distribution<_RealType> distribution_type; 9642: 9642: param_type() : param_type(1) { } 9642: 9642: explicit 9642: param_type(_RealType __n) 9642: : _M_n(__n) 9642: { } 9642: 9642: _RealType 9642: n() const 9642: { return _M_n; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return __p1._M_n == __p2._M_n; } 9642: 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: 9642: private: 9642: _RealType _M_n; 9642: }; 9642: 9642: chi_squared_distribution() : chi_squared_distribution(1) { } 9642: 9642: explicit 9642: chi_squared_distribution(_RealType __n) 9642: : _M_param(__n), _M_gd(__n / 2) 9642: { } 9642: 9642: explicit 9642: chi_squared_distribution(const param_type& __p) 9642: : _M_param(__p), _M_gd(__p.n() / 2) 9642: { } 9642: 9642: 9642: 9642: 9642: void 9642: reset() 9642: { _M_gd.reset(); } 9642: 9642: 9642: 9642: 9642: _RealType 9642: n() const 9642: { return _M_param.n(); } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { 9642: _M_param = __param; 9642: typedef typename std::gamma_distribution::param_type 9642: param_type; 9642: _M_gd.param(param_type{__param.n() / 2}); 9642: } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { return result_type(0); } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { return std::numeric_limits::max(); } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng) 9642: { return 2 * _M_gd(__urng); } 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: typedef typename std::gamma_distribution::param_type 9642: param_type; 9642: return 2 * _M_gd(__urng, param_type(__p.n() / 2)); 9642: } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate_impl(__f, __t, __urng); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { typename std::gamma_distribution::param_type 9642: __p2(__p.n() / 2); 9642: this->__generate_impl(__f, __t, __urng, __p2); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate_impl(__f, __t, __urng); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { typename std::gamma_distribution::param_type 9642: __p2(__p.n() / 2); 9642: this->__generate_impl(__f, __t, __urng, __p2); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const chi_squared_distribution& __d1, 9642: const chi_squared_distribution& __d2) 9642: { return __d1._M_param == __d2._M_param && __d1._M_gd == __d2._M_gd; } 9642: # 2879 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::chi_squared_distribution<_RealType1>& __x); 9642: # 2894 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::chi_squared_distribution<_RealType1>& __x); 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng); 9642: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const typename 9642: std::gamma_distribution::param_type& __p); 9642: 9642: param_type _M_param; 9642: 9642: std::gamma_distribution _M_gd; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const std::chi_squared_distribution<_RealType>& __d1, 9642: const std::chi_squared_distribution<_RealType>& __d2) 9642: { return !(__d1 == __d2); } 9642: # 2939 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class cauchy_distribution 9642: { 9642: static_assert(std::is_floating_point<_RealType>::value, 9642: "result_type must be a floating point type"); 9642: 9642: public: 9642: 9642: typedef _RealType result_type; 9642: 9642: 9642: struct param_type 9642: { 9642: typedef cauchy_distribution<_RealType> distribution_type; 9642: 9642: param_type() : param_type(0) { } 9642: 9642: explicit 9642: param_type(_RealType __a, _RealType __b = _RealType(1)) 9642: : _M_a(__a), _M_b(__b) 9642: { } 9642: 9642: _RealType 9642: a() const 9642: { return _M_a; } 9642: 9642: _RealType 9642: b() const 9642: { return _M_b; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; } 9642: 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: 9642: private: 9642: _RealType _M_a; 9642: _RealType _M_b; 9642: }; 9642: 9642: cauchy_distribution() : cauchy_distribution(0.0) { } 9642: 9642: explicit 9642: cauchy_distribution(_RealType __a, _RealType __b = 1.0) 9642: : _M_param(__a, __b) 9642: { } 9642: 9642: explicit 9642: cauchy_distribution(const param_type& __p) 9642: : _M_param(__p) 9642: { } 9642: 9642: 9642: 9642: 9642: void 9642: reset() 9642: { } 9642: 9642: 9642: 9642: 9642: _RealType 9642: a() const 9642: { return _M_param.a(); } 9642: 9642: _RealType 9642: b() const 9642: { return _M_param.b(); } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { _M_param = __param; } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { return std::numeric_limits::lowest(); } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { return std::numeric_limits::max(); } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng) 9642: { return this->operator()(__urng, _M_param); } 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate(__f, __t, __urng, _M_param); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const cauchy_distribution& __d1, 9642: const cauchy_distribution& __d2) 9642: { return __d1._M_param == __d2._M_param; } 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: param_type _M_param; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const std::cauchy_distribution<_RealType>& __d1, 9642: const std::cauchy_distribution<_RealType>& __d2) 9642: { return !(__d1 == __d2); } 9642: # 3120 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::cauchy_distribution<_RealType>& __x); 9642: # 3135 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::cauchy_distribution<_RealType>& __x); 9642: # 3154 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class fisher_f_distribution 9642: { 9642: static_assert(std::is_floating_point<_RealType>::value, 9642: "result_type must be a floating point type"); 9642: 9642: public: 9642: 9642: typedef _RealType result_type; 9642: 9642: 9642: struct param_type 9642: { 9642: typedef fisher_f_distribution<_RealType> distribution_type; 9642: 9642: param_type() : param_type(1) { } 9642: 9642: explicit 9642: param_type(_RealType __m, _RealType __n = _RealType(1)) 9642: : _M_m(__m), _M_n(__n) 9642: { } 9642: 9642: _RealType 9642: m() const 9642: { return _M_m; } 9642: 9642: _RealType 9642: n() const 9642: { return _M_n; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return __p1._M_m == __p2._M_m && __p1._M_n == __p2._M_n; } 9642: 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: 9642: private: 9642: _RealType _M_m; 9642: _RealType _M_n; 9642: }; 9642: 9642: fisher_f_distribution() : fisher_f_distribution(1.0) { } 9642: 9642: explicit 9642: fisher_f_distribution(_RealType __m, 9642: _RealType __n = _RealType(1)) 9642: : _M_param(__m, __n), _M_gd_x(__m / 2), _M_gd_y(__n / 2) 9642: { } 9642: 9642: explicit 9642: fisher_f_distribution(const param_type& __p) 9642: : _M_param(__p), _M_gd_x(__p.m() / 2), _M_gd_y(__p.n() / 2) 9642: { } 9642: 9642: 9642: 9642: 9642: void 9642: reset() 9642: { 9642: _M_gd_x.reset(); 9642: _M_gd_y.reset(); 9642: } 9642: 9642: 9642: 9642: 9642: _RealType 9642: m() const 9642: { return _M_param.m(); } 9642: 9642: _RealType 9642: n() const 9642: { return _M_param.n(); } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { _M_param = __param; } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { return result_type(0); } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { return std::numeric_limits::max(); } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng) 9642: { return (_M_gd_x(__urng) * n()) / (_M_gd_y(__urng) * m()); } 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: typedef typename std::gamma_distribution::param_type 9642: param_type; 9642: return ((_M_gd_x(__urng, param_type(__p.m() / 2)) * n()) 9642: / (_M_gd_y(__urng, param_type(__p.n() / 2)) * m())); 9642: } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate_impl(__f, __t, __urng); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate_impl(__f, __t, __urng); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const fisher_f_distribution& __d1, 9642: const fisher_f_distribution& __d2) 9642: { return (__d1._M_param == __d2._M_param 9642: && __d1._M_gd_x == __d2._M_gd_x 9642: && __d1._M_gd_y == __d2._M_gd_y); } 9642: # 3331 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::fisher_f_distribution<_RealType1>& __x); 9642: # 3346 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::fisher_f_distribution<_RealType1>& __x); 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng); 9642: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: param_type _M_param; 9642: 9642: std::gamma_distribution _M_gd_x, _M_gd_y; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const std::fisher_f_distribution<_RealType>& __d1, 9642: const std::fisher_f_distribution<_RealType>& __d2) 9642: { return !(__d1 == __d2); } 9642: # 3393 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class student_t_distribution 9642: { 9642: static_assert(std::is_floating_point<_RealType>::value, 9642: "result_type must be a floating point type"); 9642: 9642: public: 9642: 9642: typedef _RealType result_type; 9642: 9642: 9642: struct param_type 9642: { 9642: typedef student_t_distribution<_RealType> distribution_type; 9642: 9642: param_type() : param_type(1) { } 9642: 9642: explicit 9642: param_type(_RealType __n) 9642: : _M_n(__n) 9642: { } 9642: 9642: _RealType 9642: n() const 9642: { return _M_n; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return __p1._M_n == __p2._M_n; } 9642: 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: 9642: private: 9642: _RealType _M_n; 9642: }; 9642: 9642: student_t_distribution() : student_t_distribution(1.0) { } 9642: 9642: explicit 9642: student_t_distribution(_RealType __n) 9642: : _M_param(__n), _M_nd(), _M_gd(__n / 2, 2) 9642: { } 9642: 9642: explicit 9642: student_t_distribution(const param_type& __p) 9642: : _M_param(__p), _M_nd(), _M_gd(__p.n() / 2, 2) 9642: { } 9642: 9642: 9642: 9642: 9642: void 9642: reset() 9642: { 9642: _M_nd.reset(); 9642: _M_gd.reset(); 9642: } 9642: 9642: 9642: 9642: 9642: _RealType 9642: n() const 9642: { return _M_param.n(); } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { _M_param = __param; } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { return std::numeric_limits::lowest(); } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { return std::numeric_limits::max(); } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng) 9642: { return _M_nd(__urng) * std::sqrt(n() / _M_gd(__urng)); } 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: typedef typename std::gamma_distribution::param_type 9642: param_type; 9642: 9642: const result_type __g = _M_gd(__urng, param_type(__p.n() / 2, 2)); 9642: return _M_nd(__urng) * std::sqrt(__p.n() / __g); 9642: } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate_impl(__f, __t, __urng); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate_impl(__f, __t, __urng); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const student_t_distribution& __d1, 9642: const student_t_distribution& __d2) 9642: { return (__d1._M_param == __d2._M_param 9642: && __d1._M_nd == __d2._M_nd && __d1._M_gd == __d2._M_gd); } 9642: # 3560 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::student_t_distribution<_RealType1>& __x); 9642: # 3575 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::student_t_distribution<_RealType1>& __x); 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng); 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: param_type _M_param; 9642: 9642: std::normal_distribution _M_nd; 9642: std::gamma_distribution _M_gd; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const std::student_t_distribution<_RealType>& __d1, 9642: const std::student_t_distribution<_RealType>& __d2) 9642: { return !(__d1 == __d2); } 9642: # 3627 "/usr/include/c++/13/bits/random.h" 3 9642: class bernoulli_distribution 9642: { 9642: public: 9642: 9642: typedef bool result_type; 9642: 9642: 9642: struct param_type 9642: { 9642: typedef bernoulli_distribution distribution_type; 9642: 9642: param_type() : param_type(0.5) { } 9642: 9642: explicit 9642: param_type(double __p) 9642: : _M_p(__p) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool((_M_p >= 0.0) && (_M_p <= 1.0))) __builtin_unreachable(); } while (false); 9642: } 9642: 9642: double 9642: p() const 9642: { return _M_p; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return __p1._M_p == __p2._M_p; } 9642: 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: 9642: private: 9642: double _M_p; 9642: }; 9642: 9642: public: 9642: 9642: 9642: 9642: bernoulli_distribution() : bernoulli_distribution(0.5) { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: bernoulli_distribution(double __p) 9642: : _M_param(__p) 9642: { } 9642: 9642: explicit 9642: bernoulli_distribution(const param_type& __p) 9642: : _M_param(__p) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: reset() { } 9642: 9642: 9642: 9642: 9642: double 9642: p() const 9642: { return _M_param.p(); } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { _M_param = __param; } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { return std::numeric_limits::min(); } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { return std::numeric_limits::max(); } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng) 9642: { return this->operator()(__urng, _M_param); } 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 9642: __aurng(__urng); 9642: if ((__aurng() - __aurng.min()) 9642: < __p.p() * (__aurng.max() - __aurng.min())) 9642: return true; 9642: return false; 9642: } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate(__f, __t, __urng, _M_param); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const bernoulli_distribution& __d1, 9642: const bernoulli_distribution& __d2) 9642: { return __d1._M_param == __d2._M_param; } 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: param_type _M_param; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline bool 9642: operator!=(const std::bernoulli_distribution& __d1, 9642: const std::bernoulli_distribution& __d2) 9642: { return !(__d1 == __d2); } 9642: # 3814 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::bernoulli_distribution& __x); 9642: # 3828 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: inline std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::bernoulli_distribution& __x) 9642: { 9642: double __p; 9642: if (__is >> __p) 9642: __x.param(bernoulli_distribution::param_type(__p)); 9642: return __is; 9642: } 9642: # 3850 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class binomial_distribution 9642: { 9642: static_assert(std::is_integral<_IntType>::value, 9642: "result_type must be an integral type"); 9642: 9642: public: 9642: 9642: typedef _IntType result_type; 9642: 9642: 9642: struct param_type 9642: { 9642: typedef binomial_distribution<_IntType> distribution_type; 9642: friend class binomial_distribution<_IntType>; 9642: 9642: param_type() : param_type(1) { } 9642: 9642: explicit 9642: param_type(_IntType __t, double __p = 0.5) 9642: : _M_t(__t), _M_p(__p) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool((_M_t >= _IntType(0)) && (_M_p >= 0.0) && (_M_p <= 1.0))) __builtin_unreachable(); } while (false) 9642: 9642: ; 9642: _M_initialize(); 9642: } 9642: 9642: _IntType 9642: t() const 9642: { return _M_t; } 9642: 9642: double 9642: p() const 9642: { return _M_p; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return __p1._M_t == __p2._M_t && __p1._M_p == __p2._M_p; } 9642: 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: 9642: private: 9642: void 9642: _M_initialize(); 9642: 9642: _IntType _M_t; 9642: double _M_p; 9642: 9642: double _M_q; 9642: 9642: double _M_d1, _M_d2, _M_s1, _M_s2, _M_c, 9642: _M_a1, _M_a123, _M_s, _M_lf, _M_lp1p; 9642: 9642: bool _M_easy; 9642: }; 9642: 9642: 9642: 9642: binomial_distribution() : binomial_distribution(1) { } 9642: 9642: explicit 9642: binomial_distribution(_IntType __t, double __p = 0.5) 9642: : _M_param(__t, __p), _M_nd() 9642: { } 9642: 9642: explicit 9642: binomial_distribution(const param_type& __p) 9642: : _M_param(__p), _M_nd() 9642: { } 9642: 9642: 9642: 9642: 9642: void 9642: reset() 9642: { _M_nd.reset(); } 9642: 9642: 9642: 9642: 9642: _IntType 9642: t() const 9642: { return _M_param.t(); } 9642: 9642: 9642: 9642: 9642: double 9642: p() const 9642: { return _M_param.p(); } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { _M_param = __param; } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { return 0; } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { return _M_param.t(); } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng) 9642: { return this->operator()(__urng, _M_param); } 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate(__f, __t, __urng, _M_param); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const binomial_distribution& __d1, 9642: const binomial_distribution& __d2) 9642: 9642: { return __d1._M_param == __d2._M_param && __d1._M_nd == __d2._M_nd; } 9642: # 4034 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::binomial_distribution<_IntType1>& __x); 9642: # 4050 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::binomial_distribution<_IntType1>& __x); 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: template 9642: result_type 9642: _M_waiting(_UniformRandomNumberGenerator& __urng, 9642: _IntType __t, double __q); 9642: 9642: param_type _M_param; 9642: 9642: 9642: std::normal_distribution _M_nd; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const std::binomial_distribution<_IntType>& __d1, 9642: const std::binomial_distribution<_IntType>& __d2) 9642: { return !(__d1 == __d2); } 9642: # 4096 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class geometric_distribution 9642: { 9642: static_assert(std::is_integral<_IntType>::value, 9642: "result_type must be an integral type"); 9642: 9642: public: 9642: 9642: typedef _IntType result_type; 9642: 9642: 9642: struct param_type 9642: { 9642: typedef geometric_distribution<_IntType> distribution_type; 9642: friend class geometric_distribution<_IntType>; 9642: 9642: param_type() : param_type(0.5) { } 9642: 9642: explicit 9642: param_type(double __p) 9642: : _M_p(__p) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool((_M_p > 0.0) && (_M_p < 1.0))) __builtin_unreachable(); } while (false); 9642: _M_initialize(); 9642: } 9642: 9642: double 9642: p() const 9642: { return _M_p; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return __p1._M_p == __p2._M_p; } 9642: 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: 9642: private: 9642: void 9642: _M_initialize() 9642: { _M_log_1_p = std::log(1.0 - _M_p); } 9642: 9642: double _M_p; 9642: 9642: double _M_log_1_p; 9642: }; 9642: 9642: 9642: 9642: geometric_distribution() : geometric_distribution(0.5) { } 9642: 9642: explicit 9642: geometric_distribution(double __p) 9642: : _M_param(__p) 9642: { } 9642: 9642: explicit 9642: geometric_distribution(const param_type& __p) 9642: : _M_param(__p) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: reset() { } 9642: 9642: 9642: 9642: 9642: double 9642: p() const 9642: { return _M_param.p(); } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { _M_param = __param; } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { return 0; } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { return std::numeric_limits::max(); } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng) 9642: { return this->operator()(__urng, _M_param); } 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate(__f, __t, __urng, _M_param); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const geometric_distribution& __d1, 9642: const geometric_distribution& __d2) 9642: { return __d1._M_param == __d2._M_param; } 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: param_type _M_param; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const std::geometric_distribution<_IntType>& __d1, 9642: const std::geometric_distribution<_IntType>& __d2) 9642: { return !(__d1 == __d2); } 9642: # 4281 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::geometric_distribution<_IntType>& __x); 9642: # 4296 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::geometric_distribution<_IntType>& __x); 9642: # 4313 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class negative_binomial_distribution 9642: { 9642: static_assert(std::is_integral<_IntType>::value, 9642: "result_type must be an integral type"); 9642: 9642: public: 9642: 9642: typedef _IntType result_type; 9642: 9642: 9642: struct param_type 9642: { 9642: typedef negative_binomial_distribution<_IntType> distribution_type; 9642: 9642: param_type() : param_type(1) { } 9642: 9642: explicit 9642: param_type(_IntType __k, double __p = 0.5) 9642: : _M_k(__k), _M_p(__p) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool((_M_k > 0) && (_M_p > 0.0) && (_M_p <= 1.0))) __builtin_unreachable(); } while (false); 9642: } 9642: 9642: _IntType 9642: k() const 9642: { return _M_k; } 9642: 9642: double 9642: p() const 9642: { return _M_p; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return __p1._M_k == __p2._M_k && __p1._M_p == __p2._M_p; } 9642: 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: 9642: private: 9642: _IntType _M_k; 9642: double _M_p; 9642: }; 9642: 9642: negative_binomial_distribution() : negative_binomial_distribution(1) { } 9642: 9642: explicit 9642: negative_binomial_distribution(_IntType __k, double __p = 0.5) 9642: : _M_param(__k, __p), _M_gd(__k, (1.0 - __p) / __p) 9642: { } 9642: 9642: explicit 9642: negative_binomial_distribution(const param_type& __p) 9642: : _M_param(__p), _M_gd(__p.k(), (1.0 - __p.p()) / __p.p()) 9642: { } 9642: 9642: 9642: 9642: 9642: void 9642: reset() 9642: { _M_gd.reset(); } 9642: 9642: 9642: 9642: 9642: _IntType 9642: k() const 9642: { return _M_param.k(); } 9642: 9642: 9642: 9642: 9642: double 9642: p() const 9642: { return _M_param.p(); } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { _M_param = __param; } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { return result_type(0); } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { return std::numeric_limits::max(); } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng); 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate_impl(__f, __t, __urng); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate_impl(__f, __t, __urng); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const negative_binomial_distribution& __d1, 9642: const negative_binomial_distribution& __d2) 9642: { return __d1._M_param == __d2._M_param && __d1._M_gd == __d2._M_gd; } 9642: # 4483 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::negative_binomial_distribution<_IntType1>& __x); 9642: # 4498 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::negative_binomial_distribution<_IntType1>& __x); 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng); 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: param_type _M_param; 9642: 9642: std::gamma_distribution _M_gd; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const std::negative_binomial_distribution<_IntType>& __d1, 9642: const std::negative_binomial_distribution<_IntType>& __d2) 9642: { return !(__d1 == __d2); } 9642: # 4550 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class poisson_distribution 9642: { 9642: static_assert(std::is_integral<_IntType>::value, 9642: "result_type must be an integral type"); 9642: 9642: public: 9642: 9642: typedef _IntType result_type; 9642: 9642: 9642: struct param_type 9642: { 9642: typedef poisson_distribution<_IntType> distribution_type; 9642: friend class poisson_distribution<_IntType>; 9642: 9642: param_type() : param_type(1.0) { } 9642: 9642: explicit 9642: param_type(double __mean) 9642: : _M_mean(__mean) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(_M_mean > 0.0)) __builtin_unreachable(); } while (false); 9642: _M_initialize(); 9642: } 9642: 9642: double 9642: mean() const 9642: { return _M_mean; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return __p1._M_mean == __p2._M_mean; } 9642: 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: 9642: private: 9642: 9642: void 9642: _M_initialize(); 9642: 9642: double _M_mean; 9642: 9642: double _M_lm_thr; 9642: 9642: double _M_lfm, _M_sm, _M_d, _M_scx, _M_1cx, _M_c2b, _M_cb; 9642: 9642: }; 9642: 9642: 9642: 9642: poisson_distribution() : poisson_distribution(1.0) { } 9642: 9642: explicit 9642: poisson_distribution(double __mean) 9642: : _M_param(__mean), _M_nd() 9642: { } 9642: 9642: explicit 9642: poisson_distribution(const param_type& __p) 9642: : _M_param(__p), _M_nd() 9642: { } 9642: 9642: 9642: 9642: 9642: void 9642: reset() 9642: { _M_nd.reset(); } 9642: 9642: 9642: 9642: 9642: double 9642: mean() const 9642: { return _M_param.mean(); } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { _M_param = __param; } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { return 0; } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { return std::numeric_limits::max(); } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng) 9642: { return this->operator()(__urng, _M_param); } 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate(__f, __t, __urng, _M_param); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const poisson_distribution& __d1, 9642: const poisson_distribution& __d2) 9642: 9642: { return __d1._M_param == __d2._M_param && __d1._M_nd == __d2._M_nd; } 9642: # 4719 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::poisson_distribution<_IntType1>& __x); 9642: # 4734 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::poisson_distribution<_IntType1>& __x); 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: param_type _M_param; 9642: 9642: 9642: std::normal_distribution _M_nd; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const std::poisson_distribution<_IntType>& __d1, 9642: const std::poisson_distribution<_IntType>& __d2) 9642: { return !(__d1 == __d2); } 9642: # 4782 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class exponential_distribution 9642: { 9642: static_assert(std::is_floating_point<_RealType>::value, 9642: "result_type must be a floating point type"); 9642: 9642: public: 9642: 9642: typedef _RealType result_type; 9642: 9642: 9642: struct param_type 9642: { 9642: typedef exponential_distribution<_RealType> distribution_type; 9642: 9642: param_type() : param_type(1.0) { } 9642: 9642: explicit 9642: param_type(_RealType __lambda) 9642: : _M_lambda(__lambda) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(_M_lambda > _RealType(0))) __builtin_unreachable(); } while (false); 9642: } 9642: 9642: _RealType 9642: lambda() const 9642: { return _M_lambda; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return __p1._M_lambda == __p2._M_lambda; } 9642: 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: 9642: private: 9642: _RealType _M_lambda; 9642: }; 9642: 9642: public: 9642: 9642: 9642: 9642: 9642: exponential_distribution() : exponential_distribution(1.0) { } 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: exponential_distribution(_RealType __lambda) 9642: : _M_param(__lambda) 9642: { } 9642: 9642: explicit 9642: exponential_distribution(const param_type& __p) 9642: : _M_param(__p) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: reset() { } 9642: 9642: 9642: 9642: 9642: _RealType 9642: lambda() const 9642: { return _M_param.lambda(); } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { _M_param = __param; } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { return result_type(0); } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { return std::numeric_limits::max(); } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng) 9642: { return this->operator()(__urng, _M_param); } 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 9642: __aurng(__urng); 9642: return -std::log(result_type(1) - __aurng()) / __p.lambda(); 9642: } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate(__f, __t, __urng, _M_param); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const exponential_distribution& __d1, 9642: const exponential_distribution& __d2) 9642: { return __d1._M_param == __d2._M_param; } 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: param_type _M_param; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const std::exponential_distribution<_RealType>& __d1, 9642: const std::exponential_distribution<_RealType>& __d2) 9642: { return !(__d1 == __d2); } 9642: # 4971 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::exponential_distribution<_RealType>& __x); 9642: # 4986 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::exponential_distribution<_RealType>& __x); 9642: # 5004 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class weibull_distribution 9642: { 9642: static_assert(std::is_floating_point<_RealType>::value, 9642: "result_type must be a floating point type"); 9642: 9642: public: 9642: 9642: typedef _RealType result_type; 9642: 9642: 9642: struct param_type 9642: { 9642: typedef weibull_distribution<_RealType> distribution_type; 9642: 9642: param_type() : param_type(1.0) { } 9642: 9642: explicit 9642: param_type(_RealType __a, _RealType __b = _RealType(1.0)) 9642: : _M_a(__a), _M_b(__b) 9642: { } 9642: 9642: _RealType 9642: a() const 9642: { return _M_a; } 9642: 9642: _RealType 9642: b() const 9642: { return _M_b; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; } 9642: 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: 9642: private: 9642: _RealType _M_a; 9642: _RealType _M_b; 9642: }; 9642: 9642: weibull_distribution() : weibull_distribution(1.0) { } 9642: 9642: explicit 9642: weibull_distribution(_RealType __a, _RealType __b = _RealType(1)) 9642: : _M_param(__a, __b) 9642: { } 9642: 9642: explicit 9642: weibull_distribution(const param_type& __p) 9642: : _M_param(__p) 9642: { } 9642: 9642: 9642: 9642: 9642: void 9642: reset() 9642: { } 9642: 9642: 9642: 9642: 9642: _RealType 9642: a() const 9642: { return _M_param.a(); } 9642: 9642: 9642: 9642: 9642: _RealType 9642: b() const 9642: { return _M_param.b(); } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { _M_param = __param; } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { return result_type(0); } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { return std::numeric_limits::max(); } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng) 9642: { return this->operator()(__urng, _M_param); } 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate(__f, __t, __urng, _M_param); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const weibull_distribution& __d1, 9642: const weibull_distribution& __d2) 9642: { return __d1._M_param == __d2._M_param; } 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: param_type _M_param; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const std::weibull_distribution<_RealType>& __d1, 9642: const std::weibull_distribution<_RealType>& __d2) 9642: { return !(__d1 == __d2); } 9642: # 5188 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::weibull_distribution<_RealType>& __x); 9642: # 5203 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::weibull_distribution<_RealType>& __x); 9642: # 5221 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class extreme_value_distribution 9642: { 9642: static_assert(std::is_floating_point<_RealType>::value, 9642: "result_type must be a floating point type"); 9642: 9642: public: 9642: 9642: typedef _RealType result_type; 9642: 9642: 9642: struct param_type 9642: { 9642: typedef extreme_value_distribution<_RealType> distribution_type; 9642: 9642: param_type() : param_type(0.0) { } 9642: 9642: explicit 9642: param_type(_RealType __a, _RealType __b = _RealType(1.0)) 9642: : _M_a(__a), _M_b(__b) 9642: { } 9642: 9642: _RealType 9642: a() const 9642: { return _M_a; } 9642: 9642: _RealType 9642: b() const 9642: { return _M_b; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; } 9642: 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: 9642: private: 9642: _RealType _M_a; 9642: _RealType _M_b; 9642: }; 9642: 9642: extreme_value_distribution() : extreme_value_distribution(0.0) { } 9642: 9642: explicit 9642: extreme_value_distribution(_RealType __a, _RealType __b = _RealType(1)) 9642: : _M_param(__a, __b) 9642: { } 9642: 9642: explicit 9642: extreme_value_distribution(const param_type& __p) 9642: : _M_param(__p) 9642: { } 9642: 9642: 9642: 9642: 9642: void 9642: reset() 9642: { } 9642: 9642: 9642: 9642: 9642: _RealType 9642: a() const 9642: { return _M_param.a(); } 9642: 9642: 9642: 9642: 9642: _RealType 9642: b() const 9642: { return _M_param.b(); } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { _M_param = __param; } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { return std::numeric_limits::lowest(); } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { return std::numeric_limits::max(); } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng) 9642: { return this->operator()(__urng, _M_param); } 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate(__f, __t, __urng, _M_param); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const extreme_value_distribution& __d1, 9642: const extreme_value_distribution& __d2) 9642: { return __d1._M_param == __d2._M_param; } 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: param_type _M_param; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const std::extreme_value_distribution<_RealType>& __d1, 9642: const std::extreme_value_distribution<_RealType>& __d2) 9642: { return !(__d1 == __d2); } 9642: # 5405 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::extreme_value_distribution<_RealType>& __x); 9642: # 5420 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::extreme_value_distribution<_RealType>& __x); 9642: # 5443 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class discrete_distribution 9642: { 9642: static_assert(std::is_integral<_IntType>::value, 9642: "result_type must be an integral type"); 9642: 9642: public: 9642: 9642: typedef _IntType result_type; 9642: 9642: 9642: struct param_type 9642: { 9642: typedef discrete_distribution<_IntType> distribution_type; 9642: friend class discrete_distribution<_IntType>; 9642: 9642: param_type() 9642: : _M_prob(), _M_cp() 9642: { } 9642: 9642: template 9642: param_type(_InputIterator __wbegin, 9642: _InputIterator __wend) 9642: : _M_prob(__wbegin, __wend), _M_cp() 9642: { _M_initialize(); } 9642: 9642: param_type(initializer_list __wil) 9642: : _M_prob(__wil.begin(), __wil.end()), _M_cp() 9642: { _M_initialize(); } 9642: 9642: template 9642: param_type(size_t __nw, double __xmin, double __xmax, 9642: _Func __fw); 9642: 9642: 9642: param_type(const param_type&) = default; 9642: param_type& operator=(const param_type&) = default; 9642: 9642: std::vector 9642: probabilities() const 9642: { return _M_prob.empty() ? std::vector(1, 1.0) : _M_prob; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return __p1._M_prob == __p2._M_prob; } 9642: 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: 9642: private: 9642: void 9642: _M_initialize(); 9642: 9642: std::vector _M_prob; 9642: std::vector _M_cp; 9642: }; 9642: 9642: discrete_distribution() 9642: : _M_param() 9642: { } 9642: 9642: template 9642: discrete_distribution(_InputIterator __wbegin, 9642: _InputIterator __wend) 9642: : _M_param(__wbegin, __wend) 9642: { } 9642: 9642: discrete_distribution(initializer_list __wl) 9642: : _M_param(__wl) 9642: { } 9642: 9642: template 9642: discrete_distribution(size_t __nw, double __xmin, double __xmax, 9642: _Func __fw) 9642: : _M_param(__nw, __xmin, __xmax, __fw) 9642: { } 9642: 9642: explicit 9642: discrete_distribution(const param_type& __p) 9642: : _M_param(__p) 9642: { } 9642: 9642: 9642: 9642: 9642: void 9642: reset() 9642: { } 9642: 9642: 9642: 9642: 9642: std::vector 9642: probabilities() const 9642: { 9642: return _M_param._M_prob.empty() 9642: ? std::vector(1, 1.0) : _M_param._M_prob; 9642: } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { _M_param = __param; } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { return result_type(0); } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { 9642: return _M_param._M_prob.empty() 9642: ? result_type(0) : result_type(_M_param._M_prob.size() - 1); 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng) 9642: { return this->operator()(__urng, _M_param); } 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate(__f, __t, __urng, _M_param); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const discrete_distribution& __d1, 9642: const discrete_distribution& __d2) 9642: { return __d1._M_param == __d2._M_param; } 9642: # 5631 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::discrete_distribution<_IntType1>& __x); 9642: # 5647 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::discrete_distribution<_IntType1>& __x); 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: param_type _M_param; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const std::discrete_distribution<_IntType>& __d1, 9642: const std::discrete_distribution<_IntType>& __d2) 9642: { return !(__d1 == __d2); } 9642: # 5691 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class piecewise_constant_distribution 9642: { 9642: static_assert(std::is_floating_point<_RealType>::value, 9642: "result_type must be a floating point type"); 9642: 9642: public: 9642: 9642: typedef _RealType result_type; 9642: 9642: 9642: struct param_type 9642: { 9642: typedef piecewise_constant_distribution<_RealType> distribution_type; 9642: friend class piecewise_constant_distribution<_RealType>; 9642: 9642: param_type() 9642: : _M_int(), _M_den(), _M_cp() 9642: { } 9642: 9642: template 9642: param_type(_InputIteratorB __bfirst, 9642: _InputIteratorB __bend, 9642: _InputIteratorW __wbegin); 9642: 9642: template 9642: param_type(initializer_list<_RealType> __bi, _Func __fw); 9642: 9642: template 9642: param_type(size_t __nw, _RealType __xmin, _RealType __xmax, 9642: _Func __fw); 9642: 9642: 9642: param_type(const param_type&) = default; 9642: param_type& operator=(const param_type&) = default; 9642: 9642: std::vector<_RealType> 9642: intervals() const 9642: { 9642: if (_M_int.empty()) 9642: { 9642: std::vector<_RealType> __tmp(2); 9642: __tmp[1] = _RealType(1); 9642: return __tmp; 9642: } 9642: else 9642: return _M_int; 9642: } 9642: 9642: std::vector 9642: densities() const 9642: { return _M_den.empty() ? std::vector(1, 1.0) : _M_den; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return __p1._M_int == __p2._M_int && __p1._M_den == __p2._M_den; } 9642: 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: 9642: private: 9642: void 9642: _M_initialize(); 9642: 9642: std::vector<_RealType> _M_int; 9642: std::vector _M_den; 9642: std::vector _M_cp; 9642: }; 9642: 9642: piecewise_constant_distribution() 9642: : _M_param() 9642: { } 9642: 9642: template 9642: piecewise_constant_distribution(_InputIteratorB __bfirst, 9642: _InputIteratorB __bend, 9642: _InputIteratorW __wbegin) 9642: : _M_param(__bfirst, __bend, __wbegin) 9642: { } 9642: 9642: template 9642: piecewise_constant_distribution(initializer_list<_RealType> __bl, 9642: _Func __fw) 9642: : _M_param(__bl, __fw) 9642: { } 9642: 9642: template 9642: piecewise_constant_distribution(size_t __nw, 9642: _RealType __xmin, _RealType __xmax, 9642: _Func __fw) 9642: : _M_param(__nw, __xmin, __xmax, __fw) 9642: { } 9642: 9642: explicit 9642: piecewise_constant_distribution(const param_type& __p) 9642: : _M_param(__p) 9642: { } 9642: 9642: 9642: 9642: 9642: void 9642: reset() 9642: { } 9642: 9642: 9642: 9642: 9642: std::vector<_RealType> 9642: intervals() const 9642: { 9642: if (_M_param._M_int.empty()) 9642: { 9642: std::vector<_RealType> __tmp(2); 9642: __tmp[1] = _RealType(1); 9642: return __tmp; 9642: } 9642: else 9642: return _M_param._M_int; 9642: } 9642: 9642: 9642: 9642: 9642: std::vector 9642: densities() const 9642: { 9642: return _M_param._M_den.empty() 9642: ? std::vector(1, 1.0) : _M_param._M_den; 9642: } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { _M_param = __param; } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { 9642: return _M_param._M_int.empty() 9642: ? result_type(0) : _M_param._M_int.front(); 9642: } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { 9642: return _M_param._M_int.empty() 9642: ? result_type(1) : _M_param._M_int.back(); 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng) 9642: { return this->operator()(__urng, _M_param); } 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate(__f, __t, __urng, _M_param); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const piecewise_constant_distribution& __d1, 9642: const piecewise_constant_distribution& __d2) 9642: { return __d1._M_param == __d2._M_param; } 9642: # 5915 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::piecewise_constant_distribution<_RealType1>& __x); 9642: # 5931 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::piecewise_constant_distribution<_RealType1>& __x); 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: param_type _M_param; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const std::piecewise_constant_distribution<_RealType>& __d1, 9642: const std::piecewise_constant_distribution<_RealType>& __d2) 9642: { return !(__d1 == __d2); } 9642: # 5971 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: class piecewise_linear_distribution 9642: { 9642: static_assert(std::is_floating_point<_RealType>::value, 9642: "result_type must be a floating point type"); 9642: 9642: public: 9642: 9642: typedef _RealType result_type; 9642: 9642: 9642: struct param_type 9642: { 9642: typedef piecewise_linear_distribution<_RealType> distribution_type; 9642: friend class piecewise_linear_distribution<_RealType>; 9642: 9642: param_type() 9642: : _M_int(), _M_den(), _M_cp(), _M_m() 9642: { } 9642: 9642: template 9642: param_type(_InputIteratorB __bfirst, 9642: _InputIteratorB __bend, 9642: _InputIteratorW __wbegin); 9642: 9642: template 9642: param_type(initializer_list<_RealType> __bl, _Func __fw); 9642: 9642: template 9642: param_type(size_t __nw, _RealType __xmin, _RealType __xmax, 9642: _Func __fw); 9642: 9642: 9642: param_type(const param_type&) = default; 9642: param_type& operator=(const param_type&) = default; 9642: 9642: std::vector<_RealType> 9642: intervals() const 9642: { 9642: if (_M_int.empty()) 9642: { 9642: std::vector<_RealType> __tmp(2); 9642: __tmp[1] = _RealType(1); 9642: return __tmp; 9642: } 9642: else 9642: return _M_int; 9642: } 9642: 9642: std::vector 9642: densities() const 9642: { return _M_den.empty() ? std::vector(2, 1.0) : _M_den; } 9642: 9642: friend bool 9642: operator==(const param_type& __p1, const param_type& __p2) 9642: { return __p1._M_int == __p2._M_int && __p1._M_den == __p2._M_den; } 9642: 9642: 9642: friend bool 9642: operator!=(const param_type& __p1, const param_type& __p2) 9642: { return !(__p1 == __p2); } 9642: 9642: 9642: private: 9642: void 9642: _M_initialize(); 9642: 9642: std::vector<_RealType> _M_int; 9642: std::vector _M_den; 9642: std::vector _M_cp; 9642: std::vector _M_m; 9642: }; 9642: 9642: piecewise_linear_distribution() 9642: : _M_param() 9642: { } 9642: 9642: template 9642: piecewise_linear_distribution(_InputIteratorB __bfirst, 9642: _InputIteratorB __bend, 9642: _InputIteratorW __wbegin) 9642: : _M_param(__bfirst, __bend, __wbegin) 9642: { } 9642: 9642: template 9642: piecewise_linear_distribution(initializer_list<_RealType> __bl, 9642: _Func __fw) 9642: : _M_param(__bl, __fw) 9642: { } 9642: 9642: template 9642: piecewise_linear_distribution(size_t __nw, 9642: _RealType __xmin, _RealType __xmax, 9642: _Func __fw) 9642: : _M_param(__nw, __xmin, __xmax, __fw) 9642: { } 9642: 9642: explicit 9642: piecewise_linear_distribution(const param_type& __p) 9642: : _M_param(__p) 9642: { } 9642: 9642: 9642: 9642: 9642: void 9642: reset() 9642: { } 9642: 9642: 9642: 9642: 9642: std::vector<_RealType> 9642: intervals() const 9642: { 9642: if (_M_param._M_int.empty()) 9642: { 9642: std::vector<_RealType> __tmp(2); 9642: __tmp[1] = _RealType(1); 9642: return __tmp; 9642: } 9642: else 9642: return _M_param._M_int; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: std::vector 9642: densities() const 9642: { 9642: return _M_param._M_den.empty() 9642: ? std::vector(2, 1.0) : _M_param._M_den; 9642: } 9642: 9642: 9642: 9642: 9642: param_type 9642: param() const 9642: { return _M_param; } 9642: 9642: 9642: 9642: 9642: 9642: void 9642: param(const param_type& __param) 9642: { _M_param = __param; } 9642: 9642: 9642: 9642: 9642: result_type 9642: min() const 9642: { 9642: return _M_param._M_int.empty() 9642: ? result_type(0) : _M_param._M_int.front(); 9642: } 9642: 9642: 9642: 9642: 9642: result_type 9642: max() const 9642: { 9642: return _M_param._M_int.empty() 9642: ? result_type(1) : _M_param._M_int.back(); 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng) 9642: { return this->operator()(__urng, _M_param); } 9642: 9642: template 9642: result_type 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { this->__generate(__f, __t, __urng, _M_param); } 9642: 9642: template 9642: void 9642: __generate(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: template 9642: void 9642: __generate(result_type* __f, result_type* __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { this->__generate_impl(__f, __t, __urng, __p); } 9642: 9642: 9642: 9642: 9642: 9642: friend bool 9642: operator==(const piecewise_linear_distribution& __d1, 9642: const piecewise_linear_distribution& __d2) 9642: { return __d1._M_param == __d2._M_param; } 9642: # 6197 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const std::piecewise_linear_distribution<_RealType1>& __x); 9642: # 6213 "/usr/include/c++/13/bits/random.h" 3 9642: template 9642: friend std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: std::piecewise_linear_distribution<_RealType1>& __x); 9642: 9642: private: 9642: template 9642: void 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p); 9642: 9642: param_type _M_param; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const std::piecewise_linear_distribution<_RealType>& __d1, 9642: const std::piecewise_linear_distribution<_RealType>& __d2) 9642: { return !(__d1 == __d2); } 9642: # 6258 "/usr/include/c++/13/bits/random.h" 3 9642: class seed_seq 9642: { 9642: public: 9642: 9642: typedef uint_least32_t result_type; 9642: 9642: 9642: seed_seq() noexcept 9642: : _M_v() 9642: { } 9642: 9642: template>> 9642: seed_seq(std::initializer_list<_IntType> __il); 9642: 9642: template 9642: seed_seq(_InputIterator __begin, _InputIterator __end); 9642: 9642: 9642: template 9642: void 9642: generate(_RandomAccessIterator __begin, _RandomAccessIterator __end); 9642: 9642: 9642: size_t size() const noexcept 9642: { return _M_v.size(); } 9642: 9642: template 9642: void 9642: param(_OutputIterator __dest) const 9642: { std::copy(_M_v.begin(), _M_v.end(), __dest); } 9642: 9642: 9642: seed_seq(const seed_seq&) = delete; 9642: seed_seq& operator=(const seed_seq&) = delete; 9642: 9642: private: 9642: std::vector _M_v; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 52 "/usr/include/c++/13/random" 2 3 9642: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/opt_random.h" 1 3 9642: # 33 "/usr/include/arm-linux-gnueabihf/c++/13/bits/opt_random.h" 3 9642: 9642: # 34 "/usr/include/arm-linux-gnueabihf/c++/13/bits/opt_random.h" 3 9642: # 53 "/usr/include/c++/13/random" 2 3 9642: # 1 "/usr/include/c++/13/bits/random.tcc" 1 3 9642: # 33 "/usr/include/c++/13/bits/random.tcc" 3 9642: # 1 "/usr/include/c++/13/numeric" 1 3 9642: # 58 "/usr/include/c++/13/numeric" 3 9642: 9642: # 59 "/usr/include/c++/13/numeric" 3 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/stl_numeric.h" 1 3 9642: # 64 "/usr/include/c++/13/bits/stl_numeric.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 85 "/usr/include/c++/13/bits/stl_numeric.h" 3 9642: template 9642: 9642: void 9642: iota(_ForwardIterator __first, _ForwardIterator __last, _Tp __value) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: for (; __first != __last; ++__first) 9642: { 9642: *__first = __value; 9642: ++__value; 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: # 131 "/usr/include/c++/13/bits/stl_numeric.h" 3 9642: template 9642: 9642: inline _Tp 9642: accumulate(_InputIterator __first, _InputIterator __last, _Tp __init) 9642: { 9642: 9642: 9642: ; 9642: 9642: for (; __first != __last; ++__first) 9642: __init = __init + *__first; 9642: return __init; 9642: } 9642: # 158 "/usr/include/c++/13/bits/stl_numeric.h" 3 9642: template 9642: 9642: inline _Tp 9642: accumulate(_InputIterator __first, _InputIterator __last, _Tp __init, 9642: _BinaryOperation __binary_op) 9642: { 9642: 9642: 9642: ; 9642: 9642: for (; __first != __last; ++__first) 9642: __init = __binary_op(__init, *__first); 9642: return __init; 9642: } 9642: # 187 "/usr/include/c++/13/bits/stl_numeric.h" 3 9642: template 9642: 9642: inline _Tp 9642: inner_product(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _Tp __init) 9642: { 9642: 9642: 9642: 9642: ; 9642: 9642: for (; __first1 != __last1; ++__first1, (void)++__first2) 9642: __init = __init + (*__first1 * *__first2); 9642: return __init; 9642: } 9642: # 219 "/usr/include/c++/13/bits/stl_numeric.h" 3 9642: template 9642: 9642: inline _Tp 9642: inner_product(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _Tp __init, 9642: _BinaryOperation1 __binary_op1, 9642: _BinaryOperation2 __binary_op2) 9642: { 9642: 9642: 9642: 9642: ; 9642: 9642: for (; __first1 != __last1; ++__first1, (void)++__first2) 9642: __init = __binary_op1(__init, 9642: __binary_op2(*__first1, *__first2)); 9642: return __init; 9642: } 9642: # 253 "/usr/include/c++/13/bits/stl_numeric.h" 3 9642: template 9642: 9642: _OutputIterator 9642: partial_sum(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result) 9642: { 9642: typedef typename iterator_traits<_InputIterator>::value_type _ValueType; 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: if (__first == __last) 9642: return __result; 9642: _ValueType __value = *__first; 9642: *__result = __value; 9642: while (++__first != __last) 9642: { 9642: __value = __value + *__first; 9642: *++__result = __value; 9642: } 9642: return ++__result; 9642: } 9642: # 294 "/usr/include/c++/13/bits/stl_numeric.h" 3 9642: template 9642: 9642: _OutputIterator 9642: partial_sum(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, _BinaryOperation __binary_op) 9642: { 9642: typedef typename iterator_traits<_InputIterator>::value_type _ValueType; 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: if (__first == __last) 9642: return __result; 9642: _ValueType __value = *__first; 9642: *__result = __value; 9642: while (++__first != __last) 9642: { 9642: __value = __binary_op(__value, *__first); 9642: *++__result = __value; 9642: } 9642: return ++__result; 9642: } 9642: # 334 "/usr/include/c++/13/bits/stl_numeric.h" 3 9642: template 9642: 9642: _OutputIterator 9642: adjacent_difference(_InputIterator __first, 9642: _InputIterator __last, _OutputIterator __result) 9642: { 9642: typedef typename iterator_traits<_InputIterator>::value_type _ValueType; 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: if (__first == __last) 9642: return __result; 9642: _ValueType __value = *__first; 9642: *__result = __value; 9642: while (++__first != __last) 9642: { 9642: _ValueType __tmp = *__first; 9642: *++__result = __tmp - __value; 9642: __value = std::move(__tmp); 9642: } 9642: return ++__result; 9642: } 9642: # 376 "/usr/include/c++/13/bits/stl_numeric.h" 3 9642: template 9642: 9642: _OutputIterator 9642: adjacent_difference(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, _BinaryOperation __binary_op) 9642: { 9642: typedef typename iterator_traits<_InputIterator>::value_type _ValueType; 9642: 9642: 9642: 9642: 9642: 9642: ; 9642: 9642: if (__first == __last) 9642: return __result; 9642: _ValueType __value = *__first; 9642: *__result = __value; 9642: while (++__first != __last) 9642: { 9642: _ValueType __tmp = *__first; 9642: *++__result = __binary_op(__tmp, __value); 9642: __value = std::move(__tmp); 9642: } 9642: return ++__result; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 63 "/usr/include/c++/13/numeric" 2 3 9642: # 90 "/usr/include/c++/13/numeric" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: namespace __detail 9642: { 9642: 9642: 9642: template 9642: constexpr _Res 9642: __abs_r(_Tp __val) 9642: { 9642: static_assert(sizeof(_Res) >= sizeof(_Tp), 9642: "result type must be at least as wide as the input type"); 9642: 9642: if (__val >= 0) 9642: return __val; 9642: 9642: 9642: 9642: 9642: return -static_cast<_Res>(__val); 9642: } 9642: 9642: template void __abs_r(bool) = delete; 9642: 9642: 9642: template 9642: constexpr _Tp 9642: __gcd(_Tp __m, _Tp __n) 9642: { 9642: static_assert(is_unsigned<_Tp>::value, "type must be unsigned"); 9642: 9642: if (__m == 0) 9642: return __n; 9642: if (__n == 0) 9642: return __m; 9642: 9642: const int __i = std::__countr_zero(__m); 9642: __m >>= __i; 9642: const int __j = std::__countr_zero(__n); 9642: __n >>= __j; 9642: const int __k = __i < __j ? __i : __j; 9642: 9642: while (true) 9642: { 9642: if (__m > __n) 9642: { 9642: _Tp __tmp = __m; 9642: __m = __n; 9642: __n = __tmp; 9642: } 9642: 9642: __n -= __m; 9642: 9642: if (__n == 0) 9642: return __m << __k; 9642: 9642: __n >>= std::__countr_zero(__n); 9642: } 9642: } 9642: } 9642: # 162 "/usr/include/c++/13/numeric" 3 9642: template 9642: constexpr common_type_t<_Mn, _Nn> 9642: gcd(_Mn __m, _Nn __n) noexcept 9642: { 9642: static_assert(is_integral_v<_Mn> && is_integral_v<_Nn>, 9642: "std::gcd arguments must be integers"); 9642: static_assert(_Mn(2) == 2 && _Nn(2) == 2, 9642: "std::gcd arguments must not be bool"); 9642: using _Ct = common_type_t<_Mn, _Nn>; 9642: const _Ct __m2 = __detail::__abs_r<_Ct>(__m); 9642: const _Ct __n2 = __detail::__abs_r<_Ct>(__n); 9642: return __detail::__gcd>(__m2, __n2); 9642: } 9642: 9642: 9642: template 9642: constexpr common_type_t<_Mn, _Nn> 9642: lcm(_Mn __m, _Nn __n) noexcept 9642: { 9642: static_assert(is_integral_v<_Mn> && is_integral_v<_Nn>, 9642: "std::lcm arguments must be integers"); 9642: static_assert(_Mn(2) == 2 && _Nn(2) == 2, 9642: "std::lcm arguments must not be bool"); 9642: using _Ct = common_type_t<_Mn, _Nn>; 9642: const _Ct __m2 = __detail::__abs_r<_Ct>(__m); 9642: const _Ct __n2 = __detail::__abs_r<_Ct>(__n); 9642: if (__m2 == 0 || __n2 == 0) 9642: return 0; 9642: _Ct __r = __m2 / __detail::__gcd>(__m2, __n2); 9642: 9642: if constexpr (is_signed_v<_Ct>) 9642: if (__is_constant_evaluated()) 9642: return __r * __n2; 9642: 9642: bool __overflow = __builtin_mul_overflow(__r, __n2, &__r); 9642: do { if (std::__is_constant_evaluated() && !bool(!__overflow)) __builtin_unreachable(); } while (false); 9642: return __r; 9642: } 9642: # 284 "/usr/include/c++/13/numeric" 3 9642: template 9642: 9642: _Tp 9642: reduce(_InputIterator __first, _InputIterator __last, _Tp __init, 9642: _BinaryOperation __binary_op) 9642: { 9642: using __ref = typename iterator_traits<_InputIterator>::reference; 9642: static_assert(is_invocable_r_v<_Tp, _BinaryOperation&, _Tp&, __ref>); 9642: static_assert(is_invocable_r_v<_Tp, _BinaryOperation&, __ref, _Tp&>); 9642: static_assert(is_invocable_r_v<_Tp, _BinaryOperation&, _Tp&, _Tp&>); 9642: static_assert(is_invocable_r_v<_Tp, _BinaryOperation&, __ref, __ref>); 9642: if constexpr (__is_random_access_iter<_InputIterator>::value) 9642: { 9642: while ((__last - __first) >= 4) 9642: { 9642: _Tp __v1 = __binary_op(__first[0], __first[1]); 9642: _Tp __v2 = __binary_op(__first[2], __first[3]); 9642: _Tp __v3 = __binary_op(__v1, __v2); 9642: __init = __binary_op(__init, __v3); 9642: __first += 4; 9642: } 9642: } 9642: for (; __first != __last; ++__first) 9642: __init = __binary_op(__init, *__first); 9642: return __init; 9642: } 9642: # 322 "/usr/include/c++/13/numeric" 3 9642: template 9642: 9642: inline _Tp 9642: reduce(_InputIterator __first, _InputIterator __last, _Tp __init) 9642: { return std::reduce(__first, __last, std::move(__init), plus<>()); } 9642: # 339 "/usr/include/c++/13/numeric" 3 9642: template 9642: 9642: inline typename iterator_traits<_InputIterator>::value_type 9642: reduce(_InputIterator __first, _InputIterator __last) 9642: { 9642: using value_type = typename iterator_traits<_InputIterator>::value_type; 9642: return std::reduce(__first, __last, value_type{}, plus<>()); 9642: } 9642: # 366 "/usr/include/c++/13/numeric" 3 9642: template 9642: 9642: _Tp 9642: transform_reduce(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _Tp __init, 9642: _BinaryOperation1 __binary_op1, 9642: _BinaryOperation2 __binary_op2) 9642: { 9642: if constexpr (__and_v<__is_random_access_iter<_InputIterator1>, 9642: __is_random_access_iter<_InputIterator2>>) 9642: { 9642: while ((__last1 - __first1) >= 4) 9642: { 9642: _Tp __v1 = __binary_op1(__binary_op2(__first1[0], __first2[0]), 9642: __binary_op2(__first1[1], __first2[1])); 9642: _Tp __v2 = __binary_op1(__binary_op2(__first1[2], __first2[2]), 9642: __binary_op2(__first1[3], __first2[3])); 9642: _Tp __v3 = __binary_op1(__v1, __v2); 9642: __init = __binary_op1(__init, __v3); 9642: __first1 += 4; 9642: __first2 += 4; 9642: } 9642: } 9642: for (; __first1 != __last1; ++__first1, (void) ++__first2) 9642: __init = __binary_op1(__init, __binary_op2(*__first1, *__first2)); 9642: return __init; 9642: } 9642: # 410 "/usr/include/c++/13/numeric" 3 9642: template 9642: 9642: inline _Tp 9642: transform_reduce(_InputIterator1 __first1, _InputIterator1 __last1, 9642: _InputIterator2 __first2, _Tp __init) 9642: { 9642: return std::transform_reduce(__first1, __last1, __first2, 9642: std::move(__init), 9642: plus<>(), multiplies<>()); 9642: } 9642: # 435 "/usr/include/c++/13/numeric" 3 9642: template 9642: 9642: _Tp 9642: transform_reduce(_InputIterator __first, _InputIterator __last, _Tp __init, 9642: _BinaryOperation __binary_op, _UnaryOperation __unary_op) 9642: { 9642: if constexpr (__is_random_access_iter<_InputIterator>::value) 9642: { 9642: while ((__last - __first) >= 4) 9642: { 9642: _Tp __v1 = __binary_op(__unary_op(__first[0]), 9642: __unary_op(__first[1])); 9642: _Tp __v2 = __binary_op(__unary_op(__first[2]), 9642: __unary_op(__first[3])); 9642: _Tp __v3 = __binary_op(__v1, __v2); 9642: __init = __binary_op(__init, __v3); 9642: __first += 4; 9642: } 9642: } 9642: for (; __first != __last; ++__first) 9642: __init = __binary_op(__init, __unary_op(*__first)); 9642: return __init; 9642: } 9642: # 478 "/usr/include/c++/13/numeric" 3 9642: template 9642: 9642: _OutputIterator 9642: exclusive_scan(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, _Tp __init, 9642: _BinaryOperation __binary_op) 9642: { 9642: while (__first != __last) 9642: { 9642: auto __v = __init; 9642: __init = __binary_op(__init, *__first); 9642: ++__first; 9642: *__result++ = std::move(__v); 9642: } 9642: return __result; 9642: } 9642: # 513 "/usr/include/c++/13/numeric" 3 9642: template 9642: 9642: inline _OutputIterator 9642: exclusive_scan(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, _Tp __init) 9642: { 9642: return std::exclusive_scan(__first, __last, __result, std::move(__init), 9642: plus<>()); 9642: } 9642: # 541 "/usr/include/c++/13/numeric" 3 9642: template 9642: 9642: _OutputIterator 9642: inclusive_scan(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, _BinaryOperation __binary_op, 9642: _Tp __init) 9642: { 9642: for (; __first != __last; ++__first) 9642: *__result++ = __init = __binary_op(__init, *__first); 9642: return __result; 9642: } 9642: # 570 "/usr/include/c++/13/numeric" 3 9642: template 9642: 9642: _OutputIterator 9642: inclusive_scan(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, _BinaryOperation __binary_op) 9642: { 9642: if (__first != __last) 9642: { 9642: auto __init = *__first; 9642: *__result++ = __init; 9642: ++__first; 9642: if (__first != __last) 9642: __result = std::inclusive_scan(__first, __last, __result, 9642: __binary_op, std::move(__init)); 9642: } 9642: return __result; 9642: } 9642: # 604 "/usr/include/c++/13/numeric" 3 9642: template 9642: 9642: inline _OutputIterator 9642: inclusive_scan(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result) 9642: { return std::inclusive_scan(__first, __last, __result, plus<>()); } 9642: # 631 "/usr/include/c++/13/numeric" 3 9642: template 9642: 9642: _OutputIterator 9642: transform_exclusive_scan(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, _Tp __init, 9642: _BinaryOperation __binary_op, 9642: _UnaryOperation __unary_op) 9642: { 9642: while (__first != __last) 9642: { 9642: auto __v = __init; 9642: __init = __binary_op(__init, __unary_op(*__first)); 9642: ++__first; 9642: *__result++ = std::move(__v); 9642: } 9642: return __result; 9642: } 9642: # 670 "/usr/include/c++/13/numeric" 3 9642: template 9642: 9642: _OutputIterator 9642: transform_inclusive_scan(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, 9642: _BinaryOperation __binary_op, 9642: _UnaryOperation __unary_op, 9642: _Tp __init) 9642: { 9642: for (; __first != __last; ++__first) 9642: *__result++ = __init = __binary_op(__init, __unary_op(*__first)); 9642: return __result; 9642: } 9642: # 704 "/usr/include/c++/13/numeric" 3 9642: template 9642: 9642: _OutputIterator 9642: transform_inclusive_scan(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, 9642: _BinaryOperation __binary_op, 9642: _UnaryOperation __unary_op) 9642: { 9642: if (__first != __last) 9642: { 9642: auto __init = __unary_op(*__first); 9642: *__result++ = __init; 9642: ++__first; 9642: if (__first != __last) 9642: __result = std::transform_inclusive_scan(__first, __last, __result, 9642: __binary_op, __unary_op, 9642: std::move(__init)); 9642: } 9642: return __result; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 739 "/usr/include/c++/13/numeric" 3 9642: # 1 "/usr/include/c++/13/pstl/glue_numeric_defs.h" 1 3 9642: # 15 "/usr/include/c++/13/pstl/glue_numeric_defs.h" 3 9642: namespace std 9642: { 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp> 9642: reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init, 9642: _BinaryOperation __binary_op); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp> 9642: reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, 9642: typename iterator_traits<_ForwardIterator>::value_type> 9642: reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp> 9642: transform_reduce(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _Tp __init); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp> 9642: transform_reduce(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 9642: _ForwardIterator2 __first2, _Tp __init, _BinaryOperation1 __binary_op1, 9642: _BinaryOperation2 __binary_op2); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp> 9642: transform_reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init, 9642: _BinaryOperation __binary_op, _UnaryOperation __unary_op); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: exclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 9642: _ForwardIterator2 __result, _Tp __init); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: exclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 9642: _ForwardIterator2 __result, _Tp __init, _BinaryOperation __binary_op); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 9642: _ForwardIterator2 __result); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 9642: _ForwardIterator2 __result, _BinaryOperation __binary_op); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 9642: _ForwardIterator2 __result, _BinaryOperation __binary_op, _Tp __init); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: transform_exclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 9642: _ForwardIterator2 __result, _Tp __init, _BinaryOperation __binary_op, 9642: _UnaryOperation __unary_op); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: transform_inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 9642: _ForwardIterator2 __result, _BinaryOperation __binary_op, _UnaryOperation __unary_op, 9642: _Tp __init); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: transform_inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 9642: _ForwardIterator2 __result, _BinaryOperation __binary_op, _UnaryOperation __unary_op); 9642: 9642: 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: adjacent_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 9642: _ForwardIterator2 __d_first, _BinaryOperation __op); 9642: 9642: template 9642: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 9642: adjacent_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 9642: _ForwardIterator2 __d_first); 9642: 9642: } 9642: # 740 "/usr/include/c++/13/numeric" 2 3 9642: # 34 "/usr/include/c++/13/bits/random.tcc" 2 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: namespace __detail 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: _Tp 9642: _Mod<_Tp, __m, __a, __c, false, true>:: 9642: __calc(_Tp __x) 9642: { 9642: if (__a == 1) 9642: __x %= __m; 9642: else 9642: { 9642: static const _Tp __q = __m / __a; 9642: static const _Tp __r = __m % __a; 9642: 9642: _Tp __t1 = __a * (__x % __q); 9642: _Tp __t2 = __r * (__x / __q); 9642: if (__t1 >= __t2) 9642: __x = __t1 - __t2; 9642: else 9642: __x = __m - __t2 + __t1; 9642: } 9642: 9642: if (__c != 0) 9642: { 9642: const _Tp __d = __m - __x; 9642: if (__d > __c) 9642: __x += __c; 9642: else 9642: __x = __c - __d; 9642: } 9642: return __x; 9642: } 9642: 9642: template 9642: _OutputIterator 9642: __normalize(_InputIterator __first, _InputIterator __last, 9642: _OutputIterator __result, const _Tp& __factor) 9642: { 9642: for (; __first != __last; ++__first, ++__result) 9642: *__result = *__first / __factor; 9642: return __result; 9642: } 9642: 9642: } 9642: # 116 "/usr/include/c++/13/bits/random.tcc" 3 9642: template 9642: void 9642: linear_congruential_engine<_UIntType, __a, __c, __m>:: 9642: seed(result_type __s) 9642: { 9642: if ((__detail::__mod<_UIntType, __m>(__c) == 0) 9642: && (__detail::__mod<_UIntType, __m>(__s) == 0)) 9642: _M_x = 1; 9642: else 9642: _M_x = __detail::__mod<_UIntType, __m>(__s); 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: template 9642: auto 9642: linear_congruential_engine<_UIntType, __a, __c, __m>:: 9642: seed(_Sseq& __q) 9642: -> _If_seed_seq<_Sseq> 9642: { 9642: const _UIntType __k0 = __m == 0 ? std::numeric_limits<_UIntType>::digits 9642: : std::__lg(__m); 9642: const _UIntType __k = (__k0 + 31) / 32; 9642: uint_least32_t __arr[__k + 3]; 9642: __q.generate(__arr + 0, __arr + __k + 3); 9642: _UIntType __factor = 1u; 9642: _UIntType __sum = 0u; 9642: for (size_t __j = 0; __j < __k; ++__j) 9642: { 9642: __sum += __arr[__j + 3] * __factor; 9642: __factor *= __detail::_Shift<_UIntType, 32>::__value; 9642: } 9642: seed(__sum); 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const linear_congruential_engine<_UIntType, 9642: __a, __c, __m>& __lcr) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left); 9642: __os.fill(__os.widen(' ')); 9642: 9642: __os << __lcr._M_x; 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: linear_congruential_engine<_UIntType, __a, __c, __m>& __lcr) 9642: { 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec); 9642: 9642: __is >> __lcr._M_x; 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: # 320 "/usr/include/c++/13/bits/random.tcc" 3 9642: template 9642: void 9642: mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, 9642: __s, __b, __t, __c, __l, __f>:: 9642: seed(result_type __sd) 9642: { 9642: _M_x[0] = __detail::__mod<_UIntType, 9642: __detail::_Shift<_UIntType, __w>::__value>(__sd); 9642: 9642: for (size_t __i = 1; __i < state_size; ++__i) 9642: { 9642: _UIntType __x = _M_x[__i - 1]; 9642: __x ^= __x >> (__w - 2); 9642: __x *= __f; 9642: __x += __detail::__mod<_UIntType, __n>(__i); 9642: _M_x[__i] = __detail::__mod<_UIntType, 9642: __detail::_Shift<_UIntType, __w>::__value>(__x); 9642: } 9642: _M_p = state_size; 9642: } 9642: 9642: template 9642: template 9642: auto 9642: mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, 9642: __s, __b, __t, __c, __l, __f>:: 9642: seed(_Sseq& __q) 9642: -> _If_seed_seq<_Sseq> 9642: { 9642: const _UIntType __upper_mask = (~_UIntType()) << __r; 9642: const size_t __k = (__w + 31) / 32; 9642: uint_least32_t __arr[__n * __k]; 9642: __q.generate(__arr + 0, __arr + __n * __k); 9642: 9642: bool __zero = true; 9642: for (size_t __i = 0; __i < state_size; ++__i) 9642: { 9642: _UIntType __factor = 1u; 9642: _UIntType __sum = 0u; 9642: for (size_t __j = 0; __j < __k; ++__j) 9642: { 9642: __sum += __arr[__k * __i + __j] * __factor; 9642: __factor *= __detail::_Shift<_UIntType, 32>::__value; 9642: } 9642: _M_x[__i] = __detail::__mod<_UIntType, 9642: __detail::_Shift<_UIntType, __w>::__value>(__sum); 9642: 9642: if (__zero) 9642: { 9642: if (__i == 0) 9642: { 9642: if ((_M_x[0] & __upper_mask) != 0u) 9642: __zero = false; 9642: } 9642: else if (_M_x[__i] != 0u) 9642: __zero = false; 9642: } 9642: } 9642: if (__zero) 9642: _M_x[0] = __detail::_Shift<_UIntType, __w - 1>::__value; 9642: _M_p = state_size; 9642: } 9642: 9642: template 9642: void 9642: mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, 9642: __s, __b, __t, __c, __l, __f>:: 9642: _M_gen_rand(void) 9642: { 9642: const _UIntType __upper_mask = (~_UIntType()) << __r; 9642: const _UIntType __lower_mask = ~__upper_mask; 9642: 9642: for (size_t __k = 0; __k < (__n - __m); ++__k) 9642: { 9642: _UIntType __y = ((_M_x[__k] & __upper_mask) 9642: | (_M_x[__k + 1] & __lower_mask)); 9642: _M_x[__k] = (_M_x[__k + __m] ^ (__y >> 1) 9642: ^ ((__y & 0x01) ? __a : 0)); 9642: } 9642: 9642: for (size_t __k = (__n - __m); __k < (__n - 1); ++__k) 9642: { 9642: _UIntType __y = ((_M_x[__k] & __upper_mask) 9642: | (_M_x[__k + 1] & __lower_mask)); 9642: _M_x[__k] = (_M_x[__k + (__m - __n)] ^ (__y >> 1) 9642: ^ ((__y & 0x01) ? __a : 0)); 9642: } 9642: 9642: _UIntType __y = ((_M_x[__n - 1] & __upper_mask) 9642: | (_M_x[0] & __lower_mask)); 9642: _M_x[__n - 1] = (_M_x[__m - 1] ^ (__y >> 1) 9642: ^ ((__y & 0x01) ? __a : 0)); 9642: _M_p = 0; 9642: } 9642: 9642: template 9642: void 9642: mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, 9642: __s, __b, __t, __c, __l, __f>:: 9642: discard(unsigned long long __z) 9642: { 9642: while (__z > state_size - _M_p) 9642: { 9642: __z -= state_size - _M_p; 9642: _M_gen_rand(); 9642: } 9642: _M_p += __z; 9642: } 9642: 9642: template 9642: typename 9642: mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, 9642: __s, __b, __t, __c, __l, __f>::result_type 9642: mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, 9642: __s, __b, __t, __c, __l, __f>:: 9642: operator()() 9642: { 9642: 9642: if (_M_p >= state_size) 9642: _M_gen_rand(); 9642: 9642: 9642: result_type __z = _M_x[_M_p++]; 9642: __z ^= (__z >> __u) & __d; 9642: __z ^= (__z << __s) & __b; 9642: __z ^= (__z << __t) & __c; 9642: __z ^= (__z >> __l); 9642: 9642: return __z; 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const mersenne_twister_engine<_UIntType, __w, __n, __m, 9642: __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left); 9642: __os.fill(__space); 9642: 9642: for (size_t __i = 0; __i < __n; ++__i) 9642: __os << __x._M_x[__i] << __space; 9642: __os << __x._M_p; 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: mersenne_twister_engine<_UIntType, __w, __n, __m, 9642: __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>& __x) 9642: { 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec | __ios_base::skipws); 9642: 9642: for (size_t __i = 0; __i < __n; ++__i) 9642: __is >> __x._M_x[__i]; 9642: __is >> __x._M_p; 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: # 539 "/usr/include/c++/13/bits/random.tcc" 3 9642: template 9642: void 9642: subtract_with_carry_engine<_UIntType, __w, __s, __r>:: 9642: seed(result_type __value) 9642: { 9642: 9642: 9642: 9642: std::linear_congruential_engine 9642: __lcg(__value == 0u ? default_seed : __value % 2147483563u); 9642: 9642: const size_t __n = (__w + 31) / 32; 9642: 9642: for (size_t __i = 0; __i < long_lag; ++__i) 9642: { 9642: _UIntType __sum = 0u; 9642: _UIntType __factor = 1u; 9642: for (size_t __j = 0; __j < __n; ++__j) 9642: { 9642: __sum += __detail::__mod::__value> 9642: (__lcg()) * __factor; 9642: __factor *= __detail::_Shift<_UIntType, 32>::__value; 9642: } 9642: _M_x[__i] = __detail::__mod<_UIntType, 9642: __detail::_Shift<_UIntType, __w>::__value>(__sum); 9642: } 9642: _M_carry = (_M_x[long_lag - 1] == 0) ? 1 : 0; 9642: _M_p = 0; 9642: } 9642: 9642: template 9642: template 9642: auto 9642: subtract_with_carry_engine<_UIntType, __w, __s, __r>:: 9642: seed(_Sseq& __q) 9642: -> _If_seed_seq<_Sseq> 9642: { 9642: const size_t __k = (__w + 31) / 32; 9642: uint_least32_t __arr[__r * __k]; 9642: __q.generate(__arr + 0, __arr + __r * __k); 9642: 9642: for (size_t __i = 0; __i < long_lag; ++__i) 9642: { 9642: _UIntType __sum = 0u; 9642: _UIntType __factor = 1u; 9642: for (size_t __j = 0; __j < __k; ++__j) 9642: { 9642: __sum += __arr[__k * __i + __j] * __factor; 9642: __factor *= __detail::_Shift<_UIntType, 32>::__value; 9642: } 9642: _M_x[__i] = __detail::__mod<_UIntType, 9642: __detail::_Shift<_UIntType, __w>::__value>(__sum); 9642: } 9642: _M_carry = (_M_x[long_lag - 1] == 0) ? 1 : 0; 9642: _M_p = 0; 9642: } 9642: 9642: template 9642: typename subtract_with_carry_engine<_UIntType, __w, __s, __r>:: 9642: result_type 9642: subtract_with_carry_engine<_UIntType, __w, __s, __r>:: 9642: operator()() 9642: { 9642: 9642: long __ps = _M_p - short_lag; 9642: if (__ps < 0) 9642: __ps += long_lag; 9642: 9642: 9642: 9642: 9642: _UIntType __xi; 9642: if (_M_x[__ps] >= _M_x[_M_p] + _M_carry) 9642: { 9642: __xi = _M_x[__ps] - _M_x[_M_p] - _M_carry; 9642: _M_carry = 0; 9642: } 9642: else 9642: { 9642: __xi = (__detail::_Shift<_UIntType, __w>::__value 9642: - _M_x[_M_p] - _M_carry + _M_x[__ps]); 9642: _M_carry = 1; 9642: } 9642: _M_x[_M_p] = __xi; 9642: 9642: 9642: if (++_M_p >= long_lag) 9642: _M_p = 0; 9642: 9642: return __xi; 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const subtract_with_carry_engine<_UIntType, 9642: __w, __s, __r>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left); 9642: __os.fill(__space); 9642: 9642: for (size_t __i = 0; __i < __r; ++__i) 9642: __os << __x._M_x[__i] << __space; 9642: __os << __x._M_carry << __space << __x._M_p; 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: subtract_with_carry_engine<_UIntType, __w, __s, __r>& __x) 9642: { 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec | __ios_base::skipws); 9642: 9642: for (size_t __i = 0; __i < __r; ++__i) 9642: __is >> __x._M_x[__i]; 9642: __is >> __x._M_carry; 9642: __is >> __x._M_p; 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: # 686 "/usr/include/c++/13/bits/random.tcc" 3 9642: template 9642: typename discard_block_engine<_RandomNumberEngine, 9642: __p, __r>::result_type 9642: discard_block_engine<_RandomNumberEngine, __p, __r>:: 9642: operator()() 9642: { 9642: if (_M_n >= used_block) 9642: { 9642: _M_b.discard(block_size - _M_n); 9642: _M_n = 0; 9642: } 9642: ++_M_n; 9642: return _M_b(); 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const discard_block_engine<_RandomNumberEngine, 9642: __p, __r>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left); 9642: __os.fill(__space); 9642: 9642: __os << __x.base() << __space << __x._M_n; 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: discard_block_engine<_RandomNumberEngine, __p, __r>& __x) 9642: { 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec | __ios_base::skipws); 9642: 9642: __is >> __x._M_b >> __x._M_n; 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: 9642: template 9642: typename independent_bits_engine<_RandomNumberEngine, __w, _UIntType>:: 9642: result_type 9642: independent_bits_engine<_RandomNumberEngine, __w, _UIntType>:: 9642: operator()() 9642: { 9642: typedef typename _RandomNumberEngine::result_type _Eresult_type; 9642: const _Eresult_type __r 9642: = (_M_b.max() - _M_b.min() < std::numeric_limits<_Eresult_type>::max() 9642: ? _M_b.max() - _M_b.min() + 1 : 0); 9642: const unsigned __edig = std::numeric_limits<_Eresult_type>::digits; 9642: const unsigned __m = __r ? std::__lg(__r) : __edig; 9642: 9642: typedef typename std::common_type<_Eresult_type, result_type>::type 9642: __ctype; 9642: const unsigned __cdig = std::numeric_limits<__ctype>::digits; 9642: 9642: unsigned __n, __n0; 9642: __ctype __s0, __s1, __y0, __y1; 9642: 9642: for (size_t __i = 0; __i < 2; ++__i) 9642: { 9642: __n = (__w + __m - 1) / __m + __i; 9642: __n0 = __n - __w % __n; 9642: const unsigned __w0 = __w / __n; 9642: 9642: __s0 = 0; 9642: __s1 = 0; 9642: if (__w0 < __cdig) 9642: { 9642: __s0 = __ctype(1) << __w0; 9642: __s1 = __s0 << 1; 9642: } 9642: 9642: __y0 = 0; 9642: __y1 = 0; 9642: if (__r) 9642: { 9642: __y0 = __s0 * (__r / __s0); 9642: if (__s1) 9642: __y1 = __s1 * (__r / __s1); 9642: 9642: if (__r - __y0 <= __y0 / __n) 9642: break; 9642: } 9642: else 9642: break; 9642: } 9642: 9642: result_type __sum = 0; 9642: for (size_t __k = 0; __k < __n0; ++__k) 9642: { 9642: __ctype __u; 9642: do 9642: __u = _M_b() - _M_b.min(); 9642: while (__y0 && __u >= __y0); 9642: __sum = __s0 * __sum + (__s0 ? __u % __s0 : __u); 9642: } 9642: for (size_t __k = __n0; __k < __n; ++__k) 9642: { 9642: __ctype __u; 9642: do 9642: __u = _M_b() - _M_b.min(); 9642: while (__y1 && __u >= __y1); 9642: __sum = __s1 * __sum + (__s1 ? __u % __s1 : __u); 9642: } 9642: return __sum; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace __detail 9642: { 9642: 9642: template 9642: constexpr bool 9642: __representable_as_double(_Tp __x) noexcept 9642: { 9642: static_assert(numeric_limits<_Tp>::is_integer, ""); 9642: static_assert(!numeric_limits<_Tp>::is_signed, ""); 9642: 9642: return (__x <= (1ull << 53)) 9642: 9642: || (!(__x & 1) && __detail::__representable_as_double(__x >> 1)); 9642: } 9642: 9642: 9642: template 9642: constexpr bool 9642: __p1_representable_as_double(_Tp __x) noexcept 9642: { 9642: static_assert(numeric_limits<_Tp>::is_integer, ""); 9642: static_assert(!numeric_limits<_Tp>::is_signed, ""); 9642: return numeric_limits<_Tp>::digits < 53 9642: || (bool(__x + 1u) 9642: && __detail::__representable_as_double(__x + 1u)); 9642: } 9642: } 9642: 9642: template 9642: typename shuffle_order_engine<_RandomNumberEngine, __k>::result_type 9642: shuffle_order_engine<_RandomNumberEngine, __k>:: 9642: operator()() 9642: { 9642: constexpr result_type __range = max() - min(); 9642: size_t __j = __k; 9642: const result_type __y = _M_y - min(); 9642: 9642: if constexpr (__detail::__p1_representable_as_double(__range)) 9642: __j *= __y / (__range + 1.0); 9642: else 9642: __j *= __y / (__range + 1.0L); 9642: _M_y = _M_v[__j]; 9642: _M_v[__j] = _M_b(); 9642: 9642: return _M_y; 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const shuffle_order_engine<_RandomNumberEngine, __k>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left); 9642: __os.fill(__space); 9642: 9642: __os << __x.base(); 9642: for (size_t __i = 0; __i < __k; ++__i) 9642: __os << __space << __x._M_v[__i]; 9642: __os << __space << __x._M_y; 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: shuffle_order_engine<_RandomNumberEngine, __k>& __x) 9642: { 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec | __ios_base::skipws); 9642: 9642: __is >> __x._M_b; 9642: for (size_t __i = 0; __i < __k; ++__i) 9642: __is >> __x._M_v[__i]; 9642: __is >> __x._M_y; 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const uniform_int_distribution<_IntType>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__space); 9642: 9642: __os << __x.a() << __space << __x.b(); 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: uniform_int_distribution<_IntType>& __x) 9642: { 9642: using param_type 9642: = typename uniform_int_distribution<_IntType>::param_type; 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec | __ios_base::skipws); 9642: 9642: _IntType __a, __b; 9642: if (__is >> __a >> __b) 9642: __x.param(param_type(__a, __b)); 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: 9642: template 9642: template 9642: void 9642: uniform_real_distribution<_RealType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 9642: __aurng(__urng); 9642: auto __range = __p.b() - __p.a(); 9642: while (__f != __t) 9642: *__f++ = __aurng() * __range + __p.a(); 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const uniform_real_distribution<_RealType>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const std::streamsize __precision = __os.precision(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__space); 9642: __os.precision(std::numeric_limits<_RealType>::max_digits10); 9642: 9642: __os << __x.a() << __space << __x.b(); 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: __os.precision(__precision); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: uniform_real_distribution<_RealType>& __x) 9642: { 9642: using param_type 9642: = typename uniform_real_distribution<_RealType>::param_type; 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::skipws); 9642: 9642: _RealType __a, __b; 9642: if (__is >> __a >> __b) 9642: __x.param(param_type(__a, __b)); 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: 9642: template 9642: void 9642: std::bernoulli_distribution:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 9642: __aurng(__urng); 9642: auto __limit = __p.p() * (__aurng.max() - __aurng.min()); 9642: 9642: while (__f != __t) 9642: *__f++ = (__aurng() - __aurng.min()) < __limit; 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const bernoulli_distribution& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const std::streamsize __precision = __os.precision(); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__os.widen(' ')); 9642: __os.precision(std::numeric_limits::max_digits10); 9642: 9642: __os << __x.p(); 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: __os.precision(__precision); 9642: return __os; 9642: } 9642: 9642: 9642: template 9642: template 9642: typename geometric_distribution<_IntType>::result_type 9642: geometric_distribution<_IntType>:: 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __param) 9642: { 9642: 9642: 9642: const double __naf = 9642: (1 - std::numeric_limits::epsilon()) / 2; 9642: 9642: const double __thr = 9642: std::numeric_limits<_IntType>::max() + __naf; 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 9642: __aurng(__urng); 9642: 9642: double __cand; 9642: do 9642: __cand = std::floor(std::log(1.0 - __aurng()) / __param._M_log_1_p); 9642: while (__cand >= __thr); 9642: 9642: return result_type(__cand + __naf); 9642: } 9642: 9642: template 9642: template 9642: void 9642: geometric_distribution<_IntType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __param) 9642: { 9642: 9642: 9642: 9642: const double __naf = 9642: (1 - std::numeric_limits::epsilon()) / 2; 9642: 9642: const double __thr = 9642: std::numeric_limits<_IntType>::max() + __naf; 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 9642: __aurng(__urng); 9642: 9642: while (__f != __t) 9642: { 9642: double __cand; 9642: do 9642: __cand = std::floor(std::log(1.0 - __aurng()) 9642: / __param._M_log_1_p); 9642: while (__cand >= __thr); 9642: 9642: *__f++ = __cand + __naf; 9642: } 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const geometric_distribution<_IntType>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const std::streamsize __precision = __os.precision(); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__os.widen(' ')); 9642: __os.precision(std::numeric_limits::max_digits10); 9642: 9642: __os << __x.p(); 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: __os.precision(__precision); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: geometric_distribution<_IntType>& __x) 9642: { 9642: using param_type = typename geometric_distribution<_IntType>::param_type; 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::skipws); 9642: 9642: double __p; 9642: if (__is >> __p) 9642: __x.param(param_type(__p)); 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: 9642: template 9642: template 9642: typename negative_binomial_distribution<_IntType>::result_type 9642: negative_binomial_distribution<_IntType>:: 9642: operator()(_UniformRandomNumberGenerator& __urng) 9642: { 9642: const double __y = _M_gd(__urng); 9642: 9642: 9642: std::poisson_distribution __poisson(__y); 9642: return __poisson(__urng); 9642: } 9642: 9642: template 9642: template 9642: typename negative_binomial_distribution<_IntType>::result_type 9642: negative_binomial_distribution<_IntType>:: 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: typedef typename std::gamma_distribution::param_type 9642: param_type; 9642: 9642: const double __y = 9642: _M_gd(__urng, param_type(__p.k(), (1.0 - __p.p()) / __p.p())); 9642: 9642: std::poisson_distribution __poisson(__y); 9642: return __poisson(__urng); 9642: } 9642: 9642: template 9642: template 9642: void 9642: negative_binomial_distribution<_IntType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { 9642: 9642: while (__f != __t) 9642: { 9642: const double __y = _M_gd(__urng); 9642: 9642: 9642: std::poisson_distribution __poisson(__y); 9642: *__f++ = __poisson(__urng); 9642: } 9642: } 9642: 9642: template 9642: template 9642: void 9642: negative_binomial_distribution<_IntType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: 9642: typename std::gamma_distribution::param_type 9642: __p2(__p.k(), (1.0 - __p.p()) / __p.p()); 9642: 9642: while (__f != __t) 9642: { 9642: const double __y = _M_gd(__urng, __p2); 9642: 9642: std::poisson_distribution __poisson(__y); 9642: *__f++ = __poisson(__urng); 9642: } 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const negative_binomial_distribution<_IntType>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const std::streamsize __precision = __os.precision(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__os.widen(' ')); 9642: __os.precision(std::numeric_limits::max_digits10); 9642: 9642: __os << __x.k() << __space << __x.p() 9642: << __space << __x._M_gd; 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: __os.precision(__precision); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: negative_binomial_distribution<_IntType>& __x) 9642: { 9642: using param_type 9642: = typename negative_binomial_distribution<_IntType>::param_type; 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::skipws); 9642: 9642: _IntType __k; 9642: double __p; 9642: if (__is >> __k >> __p >> __x._M_gd) 9642: __x.param(param_type(__k, __p)); 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: 9642: template 9642: void 9642: poisson_distribution<_IntType>::param_type:: 9642: _M_initialize() 9642: { 9642: 9642: if (_M_mean >= 12) 9642: { 9642: const double __m = std::floor(_M_mean); 9642: _M_lm_thr = std::log(_M_mean); 9642: _M_lfm = std::lgamma(__m + 1); 9642: _M_sm = std::sqrt(__m); 9642: 9642: const double __pi_4 = 0.7853981633974483096156608458198757L; 9642: const double __dx = std::sqrt(2 * __m * std::log(32 * __m 9642: / __pi_4)); 9642: _M_d = std::round(std::max(6.0, std::min(__m, __dx))); 9642: const double __cx = 2 * __m + _M_d; 9642: _M_scx = std::sqrt(__cx / 2); 9642: _M_1cx = 1 / __cx; 9642: 9642: _M_c2b = std::sqrt(__pi_4 * __cx) * std::exp(_M_1cx); 9642: _M_cb = 2 * __cx * std::exp(-_M_d * _M_1cx * (1 + _M_d / 2)) 9642: / _M_d; 9642: } 9642: else 9642: 9642: _M_lm_thr = std::exp(-_M_mean); 9642: } 9642: # 1308 "/usr/include/c++/13/bits/random.tcc" 3 9642: template 9642: template 9642: typename poisson_distribution<_IntType>::result_type 9642: poisson_distribution<_IntType>:: 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __param) 9642: { 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 9642: __aurng(__urng); 9642: 9642: if (__param.mean() >= 12) 9642: { 9642: double __x; 9642: 9642: 9642: const double __naf = 9642: (1 - std::numeric_limits::epsilon()) / 2; 9642: const double __thr = 9642: std::numeric_limits<_IntType>::max() + __naf; 9642: 9642: const double __m = std::floor(__param.mean()); 9642: 9642: const double __spi_2 = 1.2533141373155002512078826424055226L; 9642: const double __c1 = __param._M_sm * __spi_2; 9642: const double __c2 = __param._M_c2b + __c1; 9642: const double __c3 = __c2 + 1; 9642: const double __c4 = __c3 + 1; 9642: 9642: const double __178 = 0.0128205128205128205128205128205128L; 9642: 9642: const double __e178 = 1.0129030479320018583185514777512983L; 9642: const double __c5 = __c4 + __e178; 9642: const double __c = __param._M_cb + __c5; 9642: const double __2cx = 2 * (2 * __m + __param._M_d); 9642: 9642: bool __reject = true; 9642: do 9642: { 9642: const double __u = __c * __aurng(); 9642: const double __e = -std::log(1.0 - __aurng()); 9642: 9642: double __w = 0.0; 9642: 9642: if (__u <= __c1) 9642: { 9642: const double __n = _M_nd(__urng); 9642: const double __y = -std::abs(__n) * __param._M_sm - 1; 9642: __x = std::floor(__y); 9642: __w = -__n * __n / 2; 9642: if (__x < -__m) 9642: continue; 9642: } 9642: else if (__u <= __c2) 9642: { 9642: const double __n = _M_nd(__urng); 9642: const double __y = 1 + std::abs(__n) * __param._M_scx; 9642: __x = std::ceil(__y); 9642: __w = __y * (2 - __y) * __param._M_1cx; 9642: if (__x > __param._M_d) 9642: continue; 9642: } 9642: else if (__u <= __c3) 9642: 9642: 9642: __x = -1; 9642: else if (__u <= __c4) 9642: __x = 0; 9642: else if (__u <= __c5) 9642: { 9642: __x = 1; 9642: 9642: __w = __178; 9642: } 9642: else 9642: { 9642: const double __v = -std::log(1.0 - __aurng()); 9642: const double __y = __param._M_d 9642: + __v * __2cx / __param._M_d; 9642: __x = std::ceil(__y); 9642: __w = -__param._M_d * __param._M_1cx * (1 + __y / 2); 9642: } 9642: 9642: __reject = (__w - __e - __x * __param._M_lm_thr 9642: > __param._M_lfm - std::lgamma(__x + __m + 1)); 9642: 9642: __reject |= __x + __m >= __thr; 9642: 9642: } while (__reject); 9642: 9642: return result_type(__x + __m + __naf); 9642: } 9642: else 9642: 9642: { 9642: _IntType __x = 0; 9642: double __prod = 1.0; 9642: 9642: do 9642: { 9642: __prod *= __aurng(); 9642: __x += 1; 9642: } 9642: while (__prod > __param._M_lm_thr); 9642: 9642: return __x - 1; 9642: } 9642: } 9642: 9642: template 9642: template 9642: void 9642: poisson_distribution<_IntType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __param) 9642: { 9642: 9642: 9642: while (__f != __t) 9642: *__f++ = this->operator()(__urng, __param); 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const poisson_distribution<_IntType>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const std::streamsize __precision = __os.precision(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__space); 9642: __os.precision(std::numeric_limits::max_digits10); 9642: 9642: __os << __x.mean() << __space << __x._M_nd; 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: __os.precision(__precision); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: poisson_distribution<_IntType>& __x) 9642: { 9642: using param_type = typename poisson_distribution<_IntType>::param_type; 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::skipws); 9642: 9642: double __mean; 9642: if (__is >> __mean >> __x._M_nd) 9642: __x.param(param_type(__mean)); 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: 9642: template 9642: void 9642: binomial_distribution<_IntType>::param_type:: 9642: _M_initialize() 9642: { 9642: const double __p12 = _M_p <= 0.5 ? _M_p : 1.0 - _M_p; 9642: 9642: _M_easy = true; 9642: 9642: 9642: if (_M_t * __p12 >= 8) 9642: { 9642: _M_easy = false; 9642: const double __np = std::floor(_M_t * __p12); 9642: const double __pa = __np / _M_t; 9642: const double __1p = 1 - __pa; 9642: 9642: const double __pi_4 = 0.7853981633974483096156608458198757L; 9642: const double __d1x = 9642: std::sqrt(__np * __1p * std::log(32 * __np 9642: / (81 * __pi_4 * __1p))); 9642: _M_d1 = std::round(std::max(1.0, __d1x)); 9642: const double __d2x = 9642: std::sqrt(__np * __1p * std::log(32 * _M_t * __1p 9642: / (__pi_4 * __pa))); 9642: _M_d2 = std::round(std::max(1.0, __d2x)); 9642: 9642: 9642: const double __spi_2 = 1.2533141373155002512078826424055226L; 9642: _M_s1 = std::sqrt(__np * __1p) * (1 + _M_d1 / (4 * __np)); 9642: _M_s2 = std::sqrt(__np * __1p) * (1 + _M_d2 / (4 * (_M_t * __1p))); 9642: _M_c = 2 * _M_d1 / __np; 9642: _M_a1 = std::exp(_M_c) * _M_s1 * __spi_2; 9642: const double __a12 = _M_a1 + _M_s2 * __spi_2; 9642: const double __s1s = _M_s1 * _M_s1; 9642: _M_a123 = __a12 + (std::exp(_M_d1 / (_M_t * __1p)) 9642: * 2 * __s1s / _M_d1 9642: * std::exp(-_M_d1 * _M_d1 / (2 * __s1s))); 9642: const double __s2s = _M_s2 * _M_s2; 9642: _M_s = (_M_a123 + 2 * __s2s / _M_d2 9642: * std::exp(-_M_d2 * _M_d2 / (2 * __s2s))); 9642: _M_lf = (std::lgamma(__np + 1) 9642: + std::lgamma(_M_t - __np + 1)); 9642: _M_lp1p = std::log(__pa / __1p); 9642: 9642: _M_q = -std::log(1 - (__p12 - __pa) / __1p); 9642: } 9642: else 9642: 9642: _M_q = -std::log(1 - __p12); 9642: } 9642: 9642: template 9642: template 9642: typename binomial_distribution<_IntType>::result_type 9642: binomial_distribution<_IntType>:: 9642: _M_waiting(_UniformRandomNumberGenerator& __urng, 9642: _IntType __t, double __q) 9642: { 9642: _IntType __x = 0; 9642: double __sum = 0.0; 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 9642: __aurng(__urng); 9642: 9642: do 9642: { 9642: if (__t == __x) 9642: return __x; 9642: const double __e = -std::log(1.0 - __aurng()); 9642: __sum += __e / (__t - __x); 9642: __x += 1; 9642: } 9642: while (__sum <= __q); 9642: 9642: return __x - 1; 9642: } 9642: # 1563 "/usr/include/c++/13/bits/random.tcc" 3 9642: template 9642: template 9642: typename binomial_distribution<_IntType>::result_type 9642: binomial_distribution<_IntType>:: 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __param) 9642: { 9642: result_type __ret; 9642: const _IntType __t = __param.t(); 9642: const double __p = __param.p(); 9642: const double __p12 = __p <= 0.5 ? __p : 1.0 - __p; 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 9642: __aurng(__urng); 9642: 9642: 9642: if (!__param._M_easy) 9642: { 9642: double __x; 9642: 9642: 9642: const double __naf = 9642: (1 - std::numeric_limits::epsilon()) / 2; 9642: const double __thr = 9642: std::numeric_limits<_IntType>::max() + __naf; 9642: 9642: const double __np = std::floor(__t * __p12); 9642: 9642: 9642: const double __spi_2 = 1.2533141373155002512078826424055226L; 9642: const double __a1 = __param._M_a1; 9642: const double __a12 = __a1 + __param._M_s2 * __spi_2; 9642: const double __a123 = __param._M_a123; 9642: const double __s1s = __param._M_s1 * __param._M_s1; 9642: const double __s2s = __param._M_s2 * __param._M_s2; 9642: 9642: bool __reject; 9642: do 9642: { 9642: const double __u = __param._M_s * __aurng(); 9642: 9642: double __v; 9642: 9642: if (__u <= __a1) 9642: { 9642: const double __n = _M_nd(__urng); 9642: const double __y = __param._M_s1 * std::abs(__n); 9642: __reject = __y >= __param._M_d1; 9642: if (!__reject) 9642: { 9642: const double __e = -std::log(1.0 - __aurng()); 9642: __x = std::floor(__y); 9642: __v = -__e - __n * __n / 2 + __param._M_c; 9642: } 9642: } 9642: else if (__u <= __a12) 9642: { 9642: const double __n = _M_nd(__urng); 9642: const double __y = __param._M_s2 * std::abs(__n); 9642: __reject = __y >= __param._M_d2; 9642: if (!__reject) 9642: { 9642: const double __e = -std::log(1.0 - __aurng()); 9642: __x = std::floor(-__y); 9642: __v = -__e - __n * __n / 2; 9642: } 9642: } 9642: else if (__u <= __a123) 9642: { 9642: const double __e1 = -std::log(1.0 - __aurng()); 9642: const double __e2 = -std::log(1.0 - __aurng()); 9642: 9642: const double __y = __param._M_d1 9642: + 2 * __s1s * __e1 / __param._M_d1; 9642: __x = std::floor(__y); 9642: __v = (-__e2 + __param._M_d1 * (1 / (__t - __np) 9642: -__y / (2 * __s1s))); 9642: __reject = false; 9642: } 9642: else 9642: { 9642: const double __e1 = -std::log(1.0 - __aurng()); 9642: const double __e2 = -std::log(1.0 - __aurng()); 9642: 9642: const double __y = __param._M_d2 9642: + 2 * __s2s * __e1 / __param._M_d2; 9642: __x = std::floor(-__y); 9642: __v = -__e2 - __param._M_d2 * __y / (2 * __s2s); 9642: __reject = false; 9642: } 9642: 9642: __reject = __reject || __x < -__np || __x > __t - __np; 9642: if (!__reject) 9642: { 9642: const double __lfx = 9642: std::lgamma(__np + __x + 1) 9642: + std::lgamma(__t - (__np + __x) + 1); 9642: __reject = __v > __param._M_lf - __lfx 9642: + __x * __param._M_lp1p; 9642: } 9642: 9642: __reject |= __x + __np >= __thr; 9642: } 9642: while (__reject); 9642: 9642: __x += __np + __naf; 9642: 9642: const _IntType __z = _M_waiting(__urng, __t - _IntType(__x), 9642: __param._M_q); 9642: __ret = _IntType(__x) + __z; 9642: } 9642: else 9642: 9642: __ret = _M_waiting(__urng, __t, __param._M_q); 9642: 9642: if (__p12 != __p) 9642: __ret = __t - __ret; 9642: return __ret; 9642: } 9642: 9642: template 9642: template 9642: void 9642: binomial_distribution<_IntType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __param) 9642: { 9642: 9642: 9642: while (__f != __t) 9642: *__f++ = this->operator()(__urng, __param); 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const binomial_distribution<_IntType>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const std::streamsize __precision = __os.precision(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__space); 9642: __os.precision(std::numeric_limits::max_digits10); 9642: 9642: __os << __x.t() << __space << __x.p() 9642: << __space << __x._M_nd; 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: __os.precision(__precision); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: binomial_distribution<_IntType>& __x) 9642: { 9642: using param_type = typename binomial_distribution<_IntType>::param_type; 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec | __ios_base::skipws); 9642: 9642: _IntType __t; 9642: double __p; 9642: if (__is >> __t >> __p >> __x._M_nd) 9642: __x.param(param_type(__t, __p)); 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: 9642: template 9642: template 9642: void 9642: std::exponential_distribution<_RealType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 9642: __aurng(__urng); 9642: while (__f != __t) 9642: *__f++ = -std::log(result_type(1) - __aurng()) / __p.lambda(); 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const exponential_distribution<_RealType>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const std::streamsize __precision = __os.precision(); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__os.widen(' ')); 9642: __os.precision(std::numeric_limits<_RealType>::max_digits10); 9642: 9642: __os << __x.lambda(); 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: __os.precision(__precision); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: exponential_distribution<_RealType>& __x) 9642: { 9642: using param_type 9642: = typename exponential_distribution<_RealType>::param_type; 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec | __ios_base::skipws); 9642: 9642: _RealType __lambda; 9642: if (__is >> __lambda) 9642: __x.param(param_type(__lambda)); 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: # 1809 "/usr/include/c++/13/bits/random.tcc" 3 9642: template 9642: template 9642: typename normal_distribution<_RealType>::result_type 9642: normal_distribution<_RealType>:: 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __param) 9642: { 9642: result_type __ret; 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 9642: __aurng(__urng); 9642: 9642: if (_M_saved_available) 9642: { 9642: _M_saved_available = false; 9642: __ret = _M_saved; 9642: } 9642: else 9642: { 9642: result_type __x, __y, __r2; 9642: do 9642: { 9642: __x = result_type(2.0) * __aurng() - 1.0; 9642: __y = result_type(2.0) * __aurng() - 1.0; 9642: __r2 = __x * __x + __y * __y; 9642: } 9642: while (__r2 > 1.0 || __r2 == 0.0); 9642: 9642: const result_type __mult = std::sqrt(-2 * std::log(__r2) / __r2); 9642: _M_saved = __x * __mult; 9642: _M_saved_available = true; 9642: __ret = __y * __mult; 9642: } 9642: 9642: __ret = __ret * __param.stddev() + __param.mean(); 9642: return __ret; 9642: } 9642: 9642: template 9642: template 9642: void 9642: normal_distribution<_RealType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __param) 9642: { 9642: 9642: 9642: if (__f == __t) 9642: return; 9642: 9642: if (_M_saved_available) 9642: { 9642: _M_saved_available = false; 9642: *__f++ = _M_saved * __param.stddev() + __param.mean(); 9642: 9642: if (__f == __t) 9642: return; 9642: } 9642: 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 9642: __aurng(__urng); 9642: 9642: while (__f + 1 < __t) 9642: { 9642: result_type __x, __y, __r2; 9642: do 9642: { 9642: __x = result_type(2.0) * __aurng() - 1.0; 9642: __y = result_type(2.0) * __aurng() - 1.0; 9642: __r2 = __x * __x + __y * __y; 9642: } 9642: while (__r2 > 1.0 || __r2 == 0.0); 9642: 9642: const result_type __mult = std::sqrt(-2 * std::log(__r2) / __r2); 9642: *__f++ = __y * __mult * __param.stddev() + __param.mean(); 9642: *__f++ = __x * __mult * __param.stddev() + __param.mean(); 9642: } 9642: 9642: if (__f != __t) 9642: { 9642: result_type __x, __y, __r2; 9642: do 9642: { 9642: __x = result_type(2.0) * __aurng() - 1.0; 9642: __y = result_type(2.0) * __aurng() - 1.0; 9642: __r2 = __x * __x + __y * __y; 9642: } 9642: while (__r2 > 1.0 || __r2 == 0.0); 9642: 9642: const result_type __mult = std::sqrt(-2 * std::log(__r2) / __r2); 9642: _M_saved = __x * __mult; 9642: _M_saved_available = true; 9642: *__f = __y * __mult * __param.stddev() + __param.mean(); 9642: } 9642: } 9642: 9642: template 9642: bool 9642: operator==(const std::normal_distribution<_RealType>& __d1, 9642: const std::normal_distribution<_RealType>& __d2) 9642: { 9642: if (__d1._M_param == __d2._M_param 9642: && __d1._M_saved_available == __d2._M_saved_available) 9642: return __d1._M_saved_available ? __d1._M_saved == __d2._M_saved : true; 9642: else 9642: return false; 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const normal_distribution<_RealType>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const std::streamsize __precision = __os.precision(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__space); 9642: __os.precision(std::numeric_limits<_RealType>::max_digits10); 9642: 9642: __os << __x.mean() << __space << __x.stddev() 9642: << __space << __x._M_saved_available; 9642: if (__x._M_saved_available) 9642: __os << __space << __x._M_saved; 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: __os.precision(__precision); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: normal_distribution<_RealType>& __x) 9642: { 9642: using param_type = typename normal_distribution<_RealType>::param_type; 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec | __ios_base::skipws); 9642: 9642: double __mean, __stddev; 9642: bool __saved_avail; 9642: if (__is >> __mean >> __stddev >> __saved_avail) 9642: { 9642: if (!__saved_avail || (__is >> __x._M_saved)) 9642: { 9642: __x._M_saved_available = __saved_avail; 9642: __x.param(param_type(__mean, __stddev)); 9642: } 9642: } 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: 9642: template 9642: template 9642: void 9642: lognormal_distribution<_RealType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: 9642: while (__f != __t) 9642: *__f++ = std::exp(__p.s() * _M_nd(__urng) + __p.m()); 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const lognormal_distribution<_RealType>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const std::streamsize __precision = __os.precision(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__space); 9642: __os.precision(std::numeric_limits<_RealType>::max_digits10); 9642: 9642: __os << __x.m() << __space << __x.s() 9642: << __space << __x._M_nd; 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: __os.precision(__precision); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: lognormal_distribution<_RealType>& __x) 9642: { 9642: using param_type 9642: = typename lognormal_distribution<_RealType>::param_type; 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec | __ios_base::skipws); 9642: 9642: _RealType __m, __s; 9642: if (__is >> __m >> __s >> __x._M_nd) 9642: __x.param(param_type(__m, __s)); 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: template 9642: template 9642: void 9642: std::chi_squared_distribution<_RealType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { 9642: 9642: while (__f != __t) 9642: *__f++ = 2 * _M_gd(__urng); 9642: } 9642: 9642: template 9642: template 9642: void 9642: std::chi_squared_distribution<_RealType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const typename 9642: std::gamma_distribution::param_type& __p) 9642: { 9642: 9642: while (__f != __t) 9642: *__f++ = 2 * _M_gd(__urng, __p); 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const chi_squared_distribution<_RealType>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const std::streamsize __precision = __os.precision(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__space); 9642: __os.precision(std::numeric_limits<_RealType>::max_digits10); 9642: 9642: __os << __x.n() << __space << __x._M_gd; 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: __os.precision(__precision); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: chi_squared_distribution<_RealType>& __x) 9642: { 9642: using param_type 9642: = typename chi_squared_distribution<_RealType>::param_type; 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec | __ios_base::skipws); 9642: 9642: _RealType __n; 9642: if (__is >> __n >> __x._M_gd) 9642: __x.param(param_type(__n)); 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: 9642: template 9642: template 9642: typename cauchy_distribution<_RealType>::result_type 9642: cauchy_distribution<_RealType>:: 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 9642: __aurng(__urng); 9642: _RealType __u; 9642: do 9642: __u = __aurng(); 9642: while (__u == 0.5); 9642: 9642: const _RealType __pi = 3.1415926535897932384626433832795029L; 9642: return __p.a() + __p.b() * std::tan(__pi * __u); 9642: } 9642: 9642: template 9642: template 9642: void 9642: cauchy_distribution<_RealType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: 9642: const _RealType __pi = 3.1415926535897932384626433832795029L; 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 9642: __aurng(__urng); 9642: while (__f != __t) 9642: { 9642: _RealType __u; 9642: do 9642: __u = __aurng(); 9642: while (__u == 0.5); 9642: 9642: *__f++ = __p.a() + __p.b() * std::tan(__pi * __u); 9642: } 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const cauchy_distribution<_RealType>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const std::streamsize __precision = __os.precision(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__space); 9642: __os.precision(std::numeric_limits<_RealType>::max_digits10); 9642: 9642: __os << __x.a() << __space << __x.b(); 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: __os.precision(__precision); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: cauchy_distribution<_RealType>& __x) 9642: { 9642: using param_type = typename cauchy_distribution<_RealType>::param_type; 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec | __ios_base::skipws); 9642: 9642: _RealType __a, __b; 9642: if (__is >> __a >> __b) 9642: __x.param(param_type(__a, __b)); 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: 9642: template 9642: template 9642: void 9642: std::fisher_f_distribution<_RealType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { 9642: 9642: while (__f != __t) 9642: *__f++ = ((_M_gd_x(__urng) * n()) / (_M_gd_y(__urng) * m())); 9642: } 9642: 9642: template 9642: template 9642: void 9642: std::fisher_f_distribution<_RealType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: 9642: typedef typename std::gamma_distribution::param_type 9642: param_type; 9642: param_type __p1(__p.m() / 2); 9642: param_type __p2(__p.n() / 2); 9642: while (__f != __t) 9642: *__f++ = ((_M_gd_x(__urng, __p1) * n()) 9642: / (_M_gd_y(__urng, __p2) * m())); 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const fisher_f_distribution<_RealType>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const std::streamsize __precision = __os.precision(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__space); 9642: __os.precision(std::numeric_limits<_RealType>::max_digits10); 9642: 9642: __os << __x.m() << __space << __x.n() 9642: << __space << __x._M_gd_x << __space << __x._M_gd_y; 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: __os.precision(__precision); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: fisher_f_distribution<_RealType>& __x) 9642: { 9642: using param_type 9642: = typename fisher_f_distribution<_RealType>::param_type; 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec | __ios_base::skipws); 9642: 9642: _RealType __m, __n; 9642: if (__is >> __m >> __n >> __x._M_gd_x >> __x._M_gd_y) 9642: __x.param(param_type(__m, __n)); 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: 9642: template 9642: template 9642: void 9642: std::student_t_distribution<_RealType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng) 9642: { 9642: 9642: while (__f != __t) 9642: *__f++ = _M_nd(__urng) * std::sqrt(n() / _M_gd(__urng)); 9642: } 9642: 9642: template 9642: template 9642: void 9642: std::student_t_distribution<_RealType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: 9642: typename std::gamma_distribution::param_type 9642: __p2(__p.n() / 2, 2); 9642: while (__f != __t) 9642: *__f++ = _M_nd(__urng) * std::sqrt(__p.n() / _M_gd(__urng, __p2)); 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const student_t_distribution<_RealType>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const std::streamsize __precision = __os.precision(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__space); 9642: __os.precision(std::numeric_limits<_RealType>::max_digits10); 9642: 9642: __os << __x.n() << __space << __x._M_nd << __space << __x._M_gd; 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: __os.precision(__precision); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: student_t_distribution<_RealType>& __x) 9642: { 9642: using param_type 9642: = typename student_t_distribution<_RealType>::param_type; 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec | __ios_base::skipws); 9642: 9642: _RealType __n; 9642: if (__is >> __n >> __x._M_nd >> __x._M_gd) 9642: __x.param(param_type(__n)); 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: 9642: template 9642: void 9642: gamma_distribution<_RealType>::param_type:: 9642: _M_initialize() 9642: { 9642: _M_malpha = _M_alpha < 1.0 ? _M_alpha + _RealType(1.0) : _M_alpha; 9642: 9642: const _RealType __a1 = _M_malpha - _RealType(1.0) / _RealType(3.0); 9642: _M_a2 = _RealType(1.0) / std::sqrt(_RealType(9.0) * __a1); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: template 9642: typename gamma_distribution<_RealType>::result_type 9642: gamma_distribution<_RealType>:: 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __param) 9642: { 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 9642: __aurng(__urng); 9642: 9642: result_type __u, __v, __n; 9642: const result_type __a1 = (__param._M_malpha 9642: - _RealType(1.0) / _RealType(3.0)); 9642: 9642: do 9642: { 9642: do 9642: { 9642: __n = _M_nd(__urng); 9642: __v = result_type(1.0) + __param._M_a2 * __n; 9642: } 9642: while (__v <= 0.0); 9642: 9642: __v = __v * __v * __v; 9642: __u = __aurng(); 9642: } 9642: while (__u > result_type(1.0) - 0.0331 * __n * __n * __n * __n 9642: && (std::log(__u) > (0.5 * __n * __n + __a1 9642: * (1.0 - __v + std::log(__v))))); 9642: 9642: if (__param.alpha() == __param._M_malpha) 9642: return __a1 * __v * __param.beta(); 9642: else 9642: { 9642: do 9642: __u = __aurng(); 9642: while (__u == 0.0); 9642: 9642: return (std::pow(__u, result_type(1.0) / __param.alpha()) 9642: * __a1 * __v * __param.beta()); 9642: } 9642: } 9642: 9642: template 9642: template 9642: void 9642: gamma_distribution<_RealType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __param) 9642: { 9642: 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 9642: __aurng(__urng); 9642: 9642: result_type __u, __v, __n; 9642: const result_type __a1 = (__param._M_malpha 9642: - _RealType(1.0) / _RealType(3.0)); 9642: 9642: if (__param.alpha() == __param._M_malpha) 9642: while (__f != __t) 9642: { 9642: do 9642: { 9642: do 9642: { 9642: __n = _M_nd(__urng); 9642: __v = result_type(1.0) + __param._M_a2 * __n; 9642: } 9642: while (__v <= 0.0); 9642: 9642: __v = __v * __v * __v; 9642: __u = __aurng(); 9642: } 9642: while (__u > result_type(1.0) - 0.0331 * __n * __n * __n * __n 9642: && (std::log(__u) > (0.5 * __n * __n + __a1 9642: * (1.0 - __v + std::log(__v))))); 9642: 9642: *__f++ = __a1 * __v * __param.beta(); 9642: } 9642: else 9642: while (__f != __t) 9642: { 9642: do 9642: { 9642: do 9642: { 9642: __n = _M_nd(__urng); 9642: __v = result_type(1.0) + __param._M_a2 * __n; 9642: } 9642: while (__v <= 0.0); 9642: 9642: __v = __v * __v * __v; 9642: __u = __aurng(); 9642: } 9642: while (__u > result_type(1.0) - 0.0331 * __n * __n * __n * __n 9642: && (std::log(__u) > (0.5 * __n * __n + __a1 9642: * (1.0 - __v + std::log(__v))))); 9642: 9642: do 9642: __u = __aurng(); 9642: while (__u == 0.0); 9642: 9642: *__f++ = (std::pow(__u, result_type(1.0) / __param.alpha()) 9642: * __a1 * __v * __param.beta()); 9642: } 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const gamma_distribution<_RealType>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const std::streamsize __precision = __os.precision(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__space); 9642: __os.precision(std::numeric_limits<_RealType>::max_digits10); 9642: 9642: __os << __x.alpha() << __space << __x.beta() 9642: << __space << __x._M_nd; 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: __os.precision(__precision); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: gamma_distribution<_RealType>& __x) 9642: { 9642: using param_type = typename gamma_distribution<_RealType>::param_type; 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec | __ios_base::skipws); 9642: 9642: _RealType __alpha_val, __beta_val; 9642: if (__is >> __alpha_val >> __beta_val >> __x._M_nd) 9642: __x.param(param_type(__alpha_val, __beta_val)); 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: 9642: template 9642: template 9642: typename weibull_distribution<_RealType>::result_type 9642: weibull_distribution<_RealType>:: 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 9642: __aurng(__urng); 9642: return __p.b() * std::pow(-std::log(result_type(1) - __aurng()), 9642: result_type(1) / __p.a()); 9642: } 9642: 9642: template 9642: template 9642: void 9642: weibull_distribution<_RealType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 9642: __aurng(__urng); 9642: auto __inv_a = result_type(1) / __p.a(); 9642: 9642: while (__f != __t) 9642: *__f++ = __p.b() * std::pow(-std::log(result_type(1) - __aurng()), 9642: __inv_a); 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const weibull_distribution<_RealType>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const std::streamsize __precision = __os.precision(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__space); 9642: __os.precision(std::numeric_limits<_RealType>::max_digits10); 9642: 9642: __os << __x.a() << __space << __x.b(); 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: __os.precision(__precision); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: weibull_distribution<_RealType>& __x) 9642: { 9642: using param_type = typename weibull_distribution<_RealType>::param_type; 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec | __ios_base::skipws); 9642: 9642: _RealType __a, __b; 9642: if (__is >> __a >> __b) 9642: __x.param(param_type(__a, __b)); 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: 9642: template 9642: template 9642: typename extreme_value_distribution<_RealType>::result_type 9642: extreme_value_distribution<_RealType>:: 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 9642: __aurng(__urng); 9642: return __p.a() - __p.b() * std::log(-std::log(result_type(1) 9642: - __aurng())); 9642: } 9642: 9642: template 9642: template 9642: void 9642: extreme_value_distribution<_RealType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __p) 9642: { 9642: 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 9642: __aurng(__urng); 9642: 9642: while (__f != __t) 9642: *__f++ = __p.a() - __p.b() * std::log(-std::log(result_type(1) 9642: - __aurng())); 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const extreme_value_distribution<_RealType>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const std::streamsize __precision = __os.precision(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__space); 9642: __os.precision(std::numeric_limits<_RealType>::max_digits10); 9642: 9642: __os << __x.a() << __space << __x.b(); 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: __os.precision(__precision); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: extreme_value_distribution<_RealType>& __x) 9642: { 9642: using param_type 9642: = typename extreme_value_distribution<_RealType>::param_type; 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec | __ios_base::skipws); 9642: 9642: _RealType __a, __b; 9642: if (__is >> __a >> __b) 9642: __x.param(param_type(__a, __b)); 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: 9642: template 9642: void 9642: discrete_distribution<_IntType>::param_type:: 9642: _M_initialize() 9642: { 9642: if (_M_prob.size() < 2) 9642: { 9642: _M_prob.clear(); 9642: return; 9642: } 9642: 9642: const double __sum = std::accumulate(_M_prob.begin(), 9642: _M_prob.end(), 0.0); 9642: do { if (std::__is_constant_evaluated() && !bool(__sum > 0)) __builtin_unreachable(); } while (false); 9642: 9642: __detail::__normalize(_M_prob.begin(), _M_prob.end(), _M_prob.begin(), 9642: __sum); 9642: 9642: _M_cp.reserve(_M_prob.size()); 9642: std::partial_sum(_M_prob.begin(), _M_prob.end(), 9642: std::back_inserter(_M_cp)); 9642: 9642: _M_cp[_M_cp.size() - 1] = 1.0; 9642: } 9642: 9642: template 9642: template 9642: discrete_distribution<_IntType>::param_type:: 9642: param_type(size_t __nw, double __xmin, double __xmax, _Func __fw) 9642: : _M_prob(), _M_cp() 9642: { 9642: const size_t __n = __nw == 0 ? 1 : __nw; 9642: const double __delta = (__xmax - __xmin) / __n; 9642: 9642: _M_prob.reserve(__n); 9642: for (size_t __k = 0; __k < __nw; ++__k) 9642: _M_prob.push_back(__fw(__xmin + __k * __delta + 0.5 * __delta)); 9642: 9642: _M_initialize(); 9642: } 9642: 9642: template 9642: template 9642: typename discrete_distribution<_IntType>::result_type 9642: discrete_distribution<_IntType>:: 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __param) 9642: { 9642: if (__param._M_cp.empty()) 9642: return result_type(0); 9642: 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 9642: __aurng(__urng); 9642: 9642: const double __p = __aurng(); 9642: auto __pos = std::lower_bound(__param._M_cp.begin(), 9642: __param._M_cp.end(), __p); 9642: 9642: return __pos - __param._M_cp.begin(); 9642: } 9642: 9642: template 9642: template 9642: void 9642: discrete_distribution<_IntType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __param) 9642: { 9642: 9642: 9642: if (__param._M_cp.empty()) 9642: { 9642: while (__f != __t) 9642: *__f++ = result_type(0); 9642: return; 9642: } 9642: 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 9642: __aurng(__urng); 9642: 9642: while (__f != __t) 9642: { 9642: const double __p = __aurng(); 9642: auto __pos = std::lower_bound(__param._M_cp.begin(), 9642: __param._M_cp.end(), __p); 9642: 9642: *__f++ = __pos - __param._M_cp.begin(); 9642: } 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const discrete_distribution<_IntType>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const std::streamsize __precision = __os.precision(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__space); 9642: __os.precision(std::numeric_limits::max_digits10); 9642: 9642: std::vector __prob = __x.probabilities(); 9642: __os << __prob.size(); 9642: for (auto __dit = __prob.begin(); __dit != __prob.end(); ++__dit) 9642: __os << __space << *__dit; 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: __os.precision(__precision); 9642: return __os; 9642: } 9642: 9642: namespace __detail 9642: { 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: __extract_params(basic_istream<_CharT, _Traits>& __is, 9642: vector<_ValT>& __vals, size_t __n) 9642: { 9642: __vals.reserve(__n); 9642: while (__n--) 9642: { 9642: _ValT __val; 9642: if (__is >> __val) 9642: __vals.push_back(__val); 9642: else 9642: break; 9642: } 9642: return __is; 9642: } 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: discrete_distribution<_IntType>& __x) 9642: { 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec | __ios_base::skipws); 9642: 9642: size_t __n; 9642: if (__is >> __n) 9642: { 9642: std::vector __prob_vec; 9642: if (__detail::__extract_params(__is, __prob_vec, __n)) 9642: __x.param({__prob_vec.begin(), __prob_vec.end()}); 9642: } 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: 9642: template 9642: void 9642: piecewise_constant_distribution<_RealType>::param_type:: 9642: _M_initialize() 9642: { 9642: if (_M_int.size() < 2 9642: || (_M_int.size() == 2 9642: && _M_int[0] == _RealType(0) 9642: && _M_int[1] == _RealType(1))) 9642: { 9642: _M_int.clear(); 9642: _M_den.clear(); 9642: return; 9642: } 9642: 9642: const double __sum = std::accumulate(_M_den.begin(), 9642: _M_den.end(), 0.0); 9642: do { if (std::__is_constant_evaluated() && !bool(__sum > 0)) __builtin_unreachable(); } while (false); 9642: 9642: __detail::__normalize(_M_den.begin(), _M_den.end(), _M_den.begin(), 9642: __sum); 9642: 9642: _M_cp.reserve(_M_den.size()); 9642: std::partial_sum(_M_den.begin(), _M_den.end(), 9642: std::back_inserter(_M_cp)); 9642: 9642: 9642: _M_cp[_M_cp.size() - 1] = 1.0; 9642: 9642: for (size_t __k = 0; __k < _M_den.size(); ++__k) 9642: _M_den[__k] /= _M_int[__k + 1] - _M_int[__k]; 9642: } 9642: 9642: template 9642: template 9642: piecewise_constant_distribution<_RealType>::param_type:: 9642: param_type(_InputIteratorB __bbegin, 9642: _InputIteratorB __bend, 9642: _InputIteratorW __wbegin) 9642: : _M_int(), _M_den(), _M_cp() 9642: { 9642: if (__bbegin != __bend) 9642: { 9642: for (;;) 9642: { 9642: _M_int.push_back(*__bbegin); 9642: ++__bbegin; 9642: if (__bbegin == __bend) 9642: break; 9642: 9642: _M_den.push_back(*__wbegin); 9642: ++__wbegin; 9642: } 9642: } 9642: 9642: _M_initialize(); 9642: } 9642: 9642: template 9642: template 9642: piecewise_constant_distribution<_RealType>::param_type:: 9642: param_type(initializer_list<_RealType> __bl, _Func __fw) 9642: : _M_int(), _M_den(), _M_cp() 9642: { 9642: _M_int.reserve(__bl.size()); 9642: for (auto __biter = __bl.begin(); __biter != __bl.end(); ++__biter) 9642: _M_int.push_back(*__biter); 9642: 9642: _M_den.reserve(_M_int.size() - 1); 9642: for (size_t __k = 0; __k < _M_int.size() - 1; ++__k) 9642: _M_den.push_back(__fw(0.5 * (_M_int[__k + 1] + _M_int[__k]))); 9642: 9642: _M_initialize(); 9642: } 9642: 9642: template 9642: template 9642: piecewise_constant_distribution<_RealType>::param_type:: 9642: param_type(size_t __nw, _RealType __xmin, _RealType __xmax, _Func __fw) 9642: : _M_int(), _M_den(), _M_cp() 9642: { 9642: const size_t __n = __nw == 0 ? 1 : __nw; 9642: const _RealType __delta = (__xmax - __xmin) / __n; 9642: 9642: _M_int.reserve(__n + 1); 9642: for (size_t __k = 0; __k <= __nw; ++__k) 9642: _M_int.push_back(__xmin + __k * __delta); 9642: 9642: _M_den.reserve(__n); 9642: for (size_t __k = 0; __k < __nw; ++__k) 9642: _M_den.push_back(__fw(_M_int[__k] + 0.5 * __delta)); 9642: 9642: _M_initialize(); 9642: } 9642: 9642: template 9642: template 9642: typename piecewise_constant_distribution<_RealType>::result_type 9642: piecewise_constant_distribution<_RealType>:: 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __param) 9642: { 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 9642: __aurng(__urng); 9642: 9642: const double __p = __aurng(); 9642: if (__param._M_cp.empty()) 9642: return __p; 9642: 9642: auto __pos = std::lower_bound(__param._M_cp.begin(), 9642: __param._M_cp.end(), __p); 9642: const size_t __i = __pos - __param._M_cp.begin(); 9642: 9642: const double __pref = __i > 0 ? __param._M_cp[__i - 1] : 0.0; 9642: 9642: return __param._M_int[__i] + (__p - __pref) / __param._M_den[__i]; 9642: } 9642: 9642: template 9642: template 9642: void 9642: piecewise_constant_distribution<_RealType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __param) 9642: { 9642: 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 9642: __aurng(__urng); 9642: 9642: if (__param._M_cp.empty()) 9642: { 9642: while (__f != __t) 9642: *__f++ = __aurng(); 9642: return; 9642: } 9642: 9642: while (__f != __t) 9642: { 9642: const double __p = __aurng(); 9642: 9642: auto __pos = std::lower_bound(__param._M_cp.begin(), 9642: __param._M_cp.end(), __p); 9642: const size_t __i = __pos - __param._M_cp.begin(); 9642: 9642: const double __pref = __i > 0 ? __param._M_cp[__i - 1] : 0.0; 9642: 9642: *__f++ = (__param._M_int[__i] 9642: + (__p - __pref) / __param._M_den[__i]); 9642: } 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const piecewise_constant_distribution<_RealType>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const std::streamsize __precision = __os.precision(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__space); 9642: __os.precision(std::numeric_limits<_RealType>::max_digits10); 9642: 9642: std::vector<_RealType> __int = __x.intervals(); 9642: __os << __int.size() - 1; 9642: 9642: for (auto __xit = __int.begin(); __xit != __int.end(); ++__xit) 9642: __os << __space << *__xit; 9642: 9642: std::vector __den = __x.densities(); 9642: for (auto __dit = __den.begin(); __dit != __den.end(); ++__dit) 9642: __os << __space << *__dit; 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: __os.precision(__precision); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: piecewise_constant_distribution<_RealType>& __x) 9642: { 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec | __ios_base::skipws); 9642: 9642: size_t __n; 9642: if (__is >> __n) 9642: { 9642: std::vector<_RealType> __int_vec; 9642: if (__detail::__extract_params(__is, __int_vec, __n + 1)) 9642: { 9642: std::vector __den_vec; 9642: if (__detail::__extract_params(__is, __den_vec, __n)) 9642: { 9642: __x.param({ __int_vec.begin(), __int_vec.end(), 9642: __den_vec.begin() }); 9642: } 9642: } 9642: } 9642: 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: 9642: template 9642: void 9642: piecewise_linear_distribution<_RealType>::param_type:: 9642: _M_initialize() 9642: { 9642: if (_M_int.size() < 2 9642: || (_M_int.size() == 2 9642: && _M_int[0] == _RealType(0) 9642: && _M_int[1] == _RealType(1) 9642: && _M_den[0] == _M_den[1])) 9642: { 9642: _M_int.clear(); 9642: _M_den.clear(); 9642: return; 9642: } 9642: 9642: double __sum = 0.0; 9642: _M_cp.reserve(_M_int.size() - 1); 9642: _M_m.reserve(_M_int.size() - 1); 9642: for (size_t __k = 0; __k < _M_int.size() - 1; ++__k) 9642: { 9642: const _RealType __delta = _M_int[__k + 1] - _M_int[__k]; 9642: __sum += 0.5 * (_M_den[__k + 1] + _M_den[__k]) * __delta; 9642: _M_cp.push_back(__sum); 9642: _M_m.push_back((_M_den[__k + 1] - _M_den[__k]) / __delta); 9642: } 9642: do { if (std::__is_constant_evaluated() && !bool(__sum > 0)) __builtin_unreachable(); } while (false); 9642: 9642: 9642: __detail::__normalize(_M_den.begin(), _M_den.end(), _M_den.begin(), 9642: __sum); 9642: 9642: __detail::__normalize(_M_cp.begin(), _M_cp.end(), _M_cp.begin(), __sum); 9642: 9642: __detail::__normalize(_M_m.begin(), _M_m.end(), _M_m.begin(), __sum); 9642: 9642: 9642: _M_cp[_M_cp.size() - 1] = 1.0; 9642: } 9642: 9642: template 9642: template 9642: piecewise_linear_distribution<_RealType>::param_type:: 9642: param_type(_InputIteratorB __bbegin, 9642: _InputIteratorB __bend, 9642: _InputIteratorW __wbegin) 9642: : _M_int(), _M_den(), _M_cp(), _M_m() 9642: { 9642: for (; __bbegin != __bend; ++__bbegin, ++__wbegin) 9642: { 9642: _M_int.push_back(*__bbegin); 9642: _M_den.push_back(*__wbegin); 9642: } 9642: 9642: _M_initialize(); 9642: } 9642: 9642: template 9642: template 9642: piecewise_linear_distribution<_RealType>::param_type:: 9642: param_type(initializer_list<_RealType> __bl, _Func __fw) 9642: : _M_int(), _M_den(), _M_cp(), _M_m() 9642: { 9642: _M_int.reserve(__bl.size()); 9642: _M_den.reserve(__bl.size()); 9642: for (auto __biter = __bl.begin(); __biter != __bl.end(); ++__biter) 9642: { 9642: _M_int.push_back(*__biter); 9642: _M_den.push_back(__fw(*__biter)); 9642: } 9642: 9642: _M_initialize(); 9642: } 9642: 9642: template 9642: template 9642: piecewise_linear_distribution<_RealType>::param_type:: 9642: param_type(size_t __nw, _RealType __xmin, _RealType __xmax, _Func __fw) 9642: : _M_int(), _M_den(), _M_cp(), _M_m() 9642: { 9642: const size_t __n = __nw == 0 ? 1 : __nw; 9642: const _RealType __delta = (__xmax - __xmin) / __n; 9642: 9642: _M_int.reserve(__n + 1); 9642: _M_den.reserve(__n + 1); 9642: for (size_t __k = 0; __k <= __nw; ++__k) 9642: { 9642: _M_int.push_back(__xmin + __k * __delta); 9642: _M_den.push_back(__fw(_M_int[__k] + __delta)); 9642: } 9642: 9642: _M_initialize(); 9642: } 9642: 9642: template 9642: template 9642: typename piecewise_linear_distribution<_RealType>::result_type 9642: piecewise_linear_distribution<_RealType>:: 9642: operator()(_UniformRandomNumberGenerator& __urng, 9642: const param_type& __param) 9642: { 9642: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 9642: __aurng(__urng); 9642: 9642: const double __p = __aurng(); 9642: if (__param._M_cp.empty()) 9642: return __p; 9642: 9642: auto __pos = std::lower_bound(__param._M_cp.begin(), 9642: __param._M_cp.end(), __p); 9642: const size_t __i = __pos - __param._M_cp.begin(); 9642: 9642: const double __pref = __i > 0 ? __param._M_cp[__i - 1] : 0.0; 9642: 9642: const double __a = 0.5 * __param._M_m[__i]; 9642: const double __b = __param._M_den[__i]; 9642: const double __cm = __p - __pref; 9642: 9642: _RealType __x = __param._M_int[__i]; 9642: if (__a == 0) 9642: __x += __cm / __b; 9642: else 9642: { 9642: const double __d = __b * __b + 4.0 * __a * __cm; 9642: __x += 0.5 * (std::sqrt(__d) - __b) / __a; 9642: } 9642: 9642: return __x; 9642: } 9642: 9642: template 9642: template 9642: void 9642: piecewise_linear_distribution<_RealType>:: 9642: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 9642: _UniformRandomNumberGenerator& __urng, 9642: const param_type& __param) 9642: { 9642: 9642: 9642: while (__f != __t) 9642: *__f++ = this->operator()(__urng, __param); 9642: } 9642: 9642: template 9642: std::basic_ostream<_CharT, _Traits>& 9642: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 9642: const piecewise_linear_distribution<_RealType>& __x) 9642: { 9642: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __os.flags(); 9642: const _CharT __fill = __os.fill(); 9642: const std::streamsize __precision = __os.precision(); 9642: const _CharT __space = __os.widen(' '); 9642: __os.flags(__ios_base::scientific | __ios_base::left); 9642: __os.fill(__space); 9642: __os.precision(std::numeric_limits<_RealType>::max_digits10); 9642: 9642: std::vector<_RealType> __int = __x.intervals(); 9642: __os << __int.size() - 1; 9642: 9642: for (auto __xit = __int.begin(); __xit != __int.end(); ++__xit) 9642: __os << __space << *__xit; 9642: 9642: std::vector __den = __x.densities(); 9642: for (auto __dit = __den.begin(); __dit != __den.end(); ++__dit) 9642: __os << __space << *__dit; 9642: 9642: __os.flags(__flags); 9642: __os.fill(__fill); 9642: __os.precision(__precision); 9642: return __os; 9642: } 9642: 9642: template 9642: std::basic_istream<_CharT, _Traits>& 9642: operator>>(std::basic_istream<_CharT, _Traits>& __is, 9642: piecewise_linear_distribution<_RealType>& __x) 9642: { 9642: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 9642: 9642: const typename __ios_base::fmtflags __flags = __is.flags(); 9642: __is.flags(__ios_base::dec | __ios_base::skipws); 9642: 9642: size_t __n; 9642: if (__is >> __n) 9642: { 9642: vector<_RealType> __int_vec; 9642: if (__detail::__extract_params(__is, __int_vec, __n + 1)) 9642: { 9642: vector __den_vec; 9642: if (__detail::__extract_params(__is, __den_vec, __n + 1)) 9642: { 9642: __x.param({ __int_vec.begin(), __int_vec.end(), 9642: __den_vec.begin() }); 9642: } 9642: } 9642: } 9642: __is.flags(__flags); 9642: return __is; 9642: } 9642: 9642: 9642: template 9642: seed_seq::seed_seq(std::initializer_list<_IntType> __il) 9642: { 9642: _M_v.reserve(__il.size()); 9642: for (auto __iter = __il.begin(); __iter != __il.end(); ++__iter) 9642: _M_v.push_back(__detail::__mod::__value>(*__iter)); 9642: } 9642: 9642: template 9642: seed_seq::seed_seq(_InputIterator __begin, _InputIterator __end) 9642: { 9642: if constexpr (__is_random_access_iter<_InputIterator>::value) 9642: _M_v.reserve(std::distance(__begin, __end)); 9642: 9642: for (_InputIterator __iter = __begin; __iter != __end; ++__iter) 9642: _M_v.push_back(__detail::__mod::__value>(*__iter)); 9642: } 9642: 9642: template 9642: void 9642: seed_seq::generate(_RandomAccessIterator __begin, 9642: _RandomAccessIterator __end) 9642: { 9642: typedef typename iterator_traits<_RandomAccessIterator>::value_type 9642: _Type; 9642: 9642: if (__begin == __end) 9642: return; 9642: 9642: std::fill(__begin, __end, _Type(0x8b8b8b8bu)); 9642: 9642: const size_t __n = __end - __begin; 9642: const size_t __s = _M_v.size(); 9642: const size_t __t = (__n >= 623) ? 11 9642: : (__n >= 68) ? 7 9642: : (__n >= 39) ? 5 9642: : (__n >= 7) ? 3 9642: : (__n - 1) / 2; 9642: const size_t __p = (__n - __t) / 2; 9642: const size_t __q = __p + __t; 9642: const size_t __m = std::max(size_t(__s + 1), __n); 9642: # 3292 "/usr/include/c++/13/bits/random.tcc" 3 9642: { 9642: uint32_t __r1 = 1371501266u; 9642: uint32_t __r2 = __r1 + __s; 9642: __begin[__p] += __r1; 9642: __begin[__q] = (uint32_t)__begin[__q] + __r2; 9642: __begin[0] = __r2; 9642: } 9642: 9642: for (size_t __k = 1; __k <= __s; ++__k) 9642: { 9642: const size_t __kn = __k % __n; 9642: const size_t __kpn = (__k + __p) % __n; 9642: const size_t __kqn = (__k + __q) % __n; 9642: uint32_t __arg = (__begin[__kn] 9642: ^ __begin[__kpn] 9642: ^ __begin[(__k - 1) % __n]); 9642: uint32_t __r1 = 1664525u * (__arg ^ (__arg >> 27)); 9642: uint32_t __r2 = __r1 + (uint32_t)__kn + _M_v[__k - 1]; 9642: __begin[__kpn] = (uint32_t)__begin[__kpn] + __r1; 9642: __begin[__kqn] = (uint32_t)__begin[__kqn] + __r2; 9642: __begin[__kn] = __r2; 9642: } 9642: 9642: for (size_t __k = __s + 1; __k < __m; ++__k) 9642: { 9642: const size_t __kn = __k % __n; 9642: const size_t __kpn = (__k + __p) % __n; 9642: const size_t __kqn = (__k + __q) % __n; 9642: uint32_t __arg = (__begin[__kn] 9642: ^ __begin[__kpn] 9642: ^ __begin[(__k - 1) % __n]); 9642: uint32_t __r1 = 1664525u * (__arg ^ (__arg >> 27)); 9642: uint32_t __r2 = __r1 + (uint32_t)__kn; 9642: __begin[__kpn] = (uint32_t)__begin[__kpn] + __r1; 9642: __begin[__kqn] = (uint32_t)__begin[__kqn] + __r2; 9642: __begin[__kn] = __r2; 9642: } 9642: 9642: for (size_t __k = __m; __k < __m + __n; ++__k) 9642: { 9642: const size_t __kn = __k % __n; 9642: const size_t __kpn = (__k + __p) % __n; 9642: const size_t __kqn = (__k + __q) % __n; 9642: uint32_t __arg = (__begin[__kn] 9642: + __begin[__kpn] 9642: + __begin[(__k - 1) % __n]); 9642: uint32_t __r3 = 1566083941u * (__arg ^ (__arg >> 27)); 9642: uint32_t __r4 = __r3 - __kn; 9642: __begin[__kpn] ^= __r3; 9642: __begin[__kqn] ^= __r4; 9642: __begin[__kn] = __r4; 9642: } 9642: } 9642: 9642: template 9642: _RealType 9642: generate_canonical(_UniformRandomNumberGenerator& __urng) 9642: { 9642: static_assert(std::is_floating_point<_RealType>::value, 9642: "template argument must be a floating point type"); 9642: 9642: const size_t __b 9642: = std::min(static_cast(std::numeric_limits<_RealType>::digits), 9642: __bits); 9642: const long double __r = static_cast(__urng.max()) 9642: - static_cast(__urng.min()) + 1.0L; 9642: const size_t __log2r = std::log(__r) / std::log(2.0L); 9642: const size_t __m = std::max(1UL, 9642: (__b + __log2r - 1UL) / __log2r); 9642: _RealType __ret; 9642: _RealType __sum = _RealType(0); 9642: _RealType __tmp = _RealType(1); 9642: for (size_t __k = __m; __k != 0; --__k) 9642: { 9642: __sum += _RealType(__urng() - __urng.min()) * __tmp; 9642: __tmp *= __r; 9642: } 9642: __ret = __sum / __tmp; 9642: if (__builtin_expect(__ret >= _RealType(1), 0)) 9642: { 9642: 9642: __ret = std::nextafter(_RealType(1), _RealType(0)); 9642: 9642: 9642: 9642: 9642: } 9642: return __ret; 9642: } 9642: 9642: 9642: } 9642: # 54 "/usr/include/c++/13/random" 2 3 9642: # 15 "/build/reproducible-path/rocksdb-9.3.1/util/random.h" 2 9642: 9642: 9642: 9642: 9642: # 18 "/build/reproducible-path/rocksdb-9.3.1/util/random.h" 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: class Random { 9642: private: 9642: enum : uint32_t { 9642: M = 2147483647L 9642: }; 9642: enum : uint64_t { 9642: A = 16807 9642: }; 9642: 9642: uint32_t seed_; 9642: 9642: static uint32_t GoodSeed(uint32_t s) { return (s & M) != 0 ? (s & M) : 1; } 9642: 9642: public: 9642: 9642: enum : uint32_t { kMaxNext = M }; 9642: 9642: explicit Random(uint32_t s) : seed_(GoodSeed(s)) {} 9642: 9642: void Reset(uint32_t s) { seed_ = GoodSeed(s); } 9642: 9642: uint32_t Next() { 9642: 9642: 9642: 9642: 9642: 9642: 9642: uint64_t product = seed_ * A; 9642: 9642: 9642: seed_ = static_cast((product >> 31) + (product & M)); 9642: 9642: 9642: 9642: if (seed_ > M) { 9642: seed_ -= M; 9642: } 9642: return seed_; 9642: } 9642: 9642: uint64_t Next64() { return (uint64_t{Next()} << 32) | Next(); } 9642: 9642: 9642: 9642: uint32_t Uniform(int n) { return Next() % n; } 9642: 9642: 9642: 9642: bool OneIn(int n) { return Uniform(n) == 0; } 9642: 9642: 9642: 9642: bool OneInOpt(int n) { return n > 0 && OneIn(n); } 9642: 9642: 9642: 9642: 9642: bool PercentTrue(int percentage) { 9642: return static_cast(Uniform(100)) < percentage; 9642: } 9642: 9642: 9642: 9642: 9642: uint32_t Skewed(int max_log) { return Uniform(1 << Uniform(max_log + 1)); } 9642: 9642: 9642: std::string RandomString(int len); 9642: 9642: 9642: std::string HumanReadableString(int len); 9642: 9642: 9642: std::string RandomBinaryString(int len); 9642: 9642: 9642: 9642: static Random* GetTLSInstance(); 9642: }; 9642: 9642: 9642: 9642: 9642: class Random32 { 9642: private: 9642: std::mt19937 generator_; 9642: 9642: public: 9642: explicit Random32(uint32_t s) : generator_(s) {} 9642: 9642: 9642: uint32_t Next() { return static_cast(generator_()); } 9642: 9642: 9642: 9642: uint32_t Uniform(uint32_t n) { 9642: return static_cast( 9642: std::uniform_int_distribution( 9642: 0, n - 1)(generator_)); 9642: } 9642: 9642: 9642: 9642: 9642: uint32_t Uniformish(uint32_t n) { 9642: 9642: return static_cast((uint64_t(generator_()) * uint64_t(n)) >> 32); 9642: } 9642: 9642: 9642: 9642: bool OneIn(uint32_t n) { return Uniform(n) == 0; } 9642: 9642: 9642: 9642: 9642: uint32_t Skewed(int max_log) { 9642: return Uniform(uint32_t{1} << Uniform(max_log + 1)); 9642: } 9642: 9642: 9642: void Seed(uint32_t new_seed) { generator_.seed(new_seed); } 9642: }; 9642: 9642: 9642: class Random64 { 9642: private: 9642: std::mt19937_64 generator_; 9642: 9642: public: 9642: explicit Random64(uint64_t s) : generator_(s) {} 9642: 9642: 9642: uint64_t Next() { return generator_(); } 9642: 9642: 9642: 9642: uint64_t Uniform(uint64_t n) { 9642: return std::uniform_int_distribution(0, n - 1)(generator_); 9642: } 9642: 9642: 9642: 9642: bool OneIn(uint64_t n) { return Uniform(n) == 0; } 9642: 9642: 9642: 9642: 9642: uint64_t Skewed(int max_log) { 9642: return Uniform(uint64_t(1) << Uniform(max_log + 1)); 9642: } 9642: }; 9642: 9642: 9642: template 9642: void RandomShuffle(RandomIt first, RandomIt last, uint32_t seed) { 9642: std::mt19937 rng(seed); 9642: std::shuffle(first, last, rng); 9642: } 9642: 9642: 9642: template 9642: void RandomShuffle(RandomIt first, RandomIt last) { 9642: RandomShuffle(first, last, std::random_device{}()); 9642: } 9642: 9642: } 9642: # 18 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: template 9642: class CoreLocalArray { 9642: public: 9642: CoreLocalArray(); 9642: 9642: size_t Size() const; 9642: 9642: 9642: T* Access() const; 9642: 9642: 9642: 9642: std::pair AccessElementAndIndex() const; 9642: 9642: 9642: T* AccessAtCore(size_t core_idx) const; 9642: 9642: private: 9642: std::unique_ptr data_; 9642: int size_shift_; 9642: }; 9642: 9642: template 9642: CoreLocalArray::CoreLocalArray() { 9642: int num_cpus = static_cast(std::thread::hardware_concurrency()); 9642: 9642: size_shift_ = 3; 9642: while (1 << size_shift_ < num_cpus) { 9642: ++size_shift_; 9642: } 9642: data_.reset(new T[static_cast(1) << size_shift_]); 9642: } 9642: 9642: template 9642: size_t CoreLocalArray::Size() const { 9642: return static_cast(1) << size_shift_; 9642: } 9642: 9642: template 9642: T* CoreLocalArray::Access() const { 9642: return AccessElementAndIndex().first; 9642: } 9642: 9642: template 9642: std::pair CoreLocalArray::AccessElementAndIndex() const { 9642: int cpuid = port::PhysicalCoreID(); 9642: size_t core_idx; 9642: if ((__builtin_expect((cpuid < 0), 0))) { 9642: 9642: core_idx = Random::GetTLSInstance()->Uniform(1 << size_shift_); 9642: } else { 9642: core_idx = static_cast(BottomNBits(cpuid, size_shift_)); 9642: } 9642: return {AccessAtCore(core_idx), core_idx}; 9642: } 9642: 9642: template 9642: T* CoreLocalArray::AccessAtCore(size_t core_idx) const { 9642: 9642: # 81 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 3 4 9642: (static_cast ( 9642: # 81 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 9642: core_idx < static_cast(1) << size_shift_ 9642: # 81 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 81 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 9642: "core_idx < static_cast(1) << size_shift_" 9642: # 81 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 81 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 9642: ; 9642: return &data_[core_idx]; 9642: } 9642: 9642: } 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/monitoring/statistics_impl.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/mutexlock.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/util/mutexlock.h" 9642: 9642: # 1 "/usr/include/assert.h" 1 3 4 9642: # 12 "/build/reproducible-path/rocksdb-9.3.1/util/mutexlock.h" 2 9642: # 20 "/build/reproducible-path/rocksdb-9.3.1/util/mutexlock.h" 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/fastrange.h" 1 9642: # 19 "/build/reproducible-path/rocksdb-9.3.1/util/fastrange.h" 9642: 9642: # 31 "/build/reproducible-path/rocksdb-9.3.1/util/fastrange.h" 9642: namespace rocksdb { 9642: 9642: namespace detail { 9642: 9642: 9642: template 9642: struct FastRangeGenericImpl { 9642: 9642: }; 9642: 9642: template 9642: struct FastRangeGenericImpl { 9642: static inline Range Fn(uint32_t hash, Range range) { 9642: static_assert(std::is_unsigned::value, "must be unsigned"); 9642: static_assert(sizeof(Range) <= sizeof(uint32_t), 9642: "cannot be larger than hash (32 bits)"); 9642: 9642: uint64_t product = uint64_t{range} * hash; 9642: return static_cast(product >> 32); 9642: } 9642: }; 9642: 9642: template 9642: struct FastRangeGenericImpl { 9642: static inline Range Fn(uint64_t hash, Range range) { 9642: static_assert(std::is_unsigned::value, "must be unsigned"); 9642: static_assert(sizeof(Range) <= sizeof(uint64_t), 9642: "cannot be larger than hash (64 bits)"); 9642: # 68 "/build/reproducible-path/rocksdb-9.3.1/util/fastrange.h" 9642: uint64_t range64 = range; 9642: uint64_t tmp = uint64_t{range64 & 0xffffFFFF} * uint64_t{hash & 0xffffFFFF}; 9642: tmp >>= 32; 9642: tmp += uint64_t{range64 & 0xffffFFFF} * uint64_t{hash >> 32}; 9642: 9642: uint64_t tmp2 = uint64_t{range64 >> 32} * uint64_t{hash & 0xffffFFFF}; 9642: tmp += static_cast(tmp2); 9642: tmp >>= 32; 9642: tmp += (tmp2 >> 32); 9642: tmp += uint64_t{range64 >> 32} * uint64_t{hash >> 32}; 9642: return static_cast(tmp); 9642: 9642: } 9642: }; 9642: 9642: } 9642: # 96 "/build/reproducible-path/rocksdb-9.3.1/util/fastrange.h" 9642: template 9642: inline Range FastRangeGeneric(Hash hash, Range range) { 9642: return detail::FastRangeGenericImpl::Fn(hash, range); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: inline size_t FastRange64(uint64_t hash, size_t range) { 9642: return FastRangeGeneric(hash, range); 9642: } 9642: 9642: 9642: inline uint32_t FastRange32(uint32_t hash, uint32_t range) { 9642: return FastRangeGeneric(hash, range); 9642: } 9642: 9642: } 9642: # 21 "/build/reproducible-path/rocksdb-9.3.1/util/mutexlock.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/hash.h" 1 9642: # 20 "/build/reproducible-path/rocksdb-9.3.1/util/hash.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: 9642: uint64_t Hash64(const char* data, size_t n, uint64_t seed); 9642: 9642: 9642: uint64_t Hash64(const char* data, size_t n); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline uint64_t NPHash64(const char* data, size_t n, uint64_t seed) { 9642: 9642: 9642: 9642: 9642: 9642: return Hash64(data, n, seed); 9642: 9642: } 9642: 9642: 9642: inline uint64_t NPHash64(const char* data, size_t n) { 9642: 9642: 9642: 9642: 9642: 9642: return Hash64(data, n); 9642: 9642: } 9642: 9642: 9642: 9642: void Hash2x64(const char* data, size_t n, uint64_t* high64, uint64_t* low64); 9642: void Hash2x64(const char* data, size_t n, uint64_t seed, uint64_t* high64, 9642: uint64_t* low64); 9642: 9642: 9642: 9642: void BijectiveHash2x64(uint64_t in_high64, uint64_t in_low64, 9642: uint64_t* out_high64, uint64_t* out_low64); 9642: void BijectiveHash2x64(uint64_t in_high64, uint64_t in_low64, uint64_t seed, 9642: uint64_t* out_high64, uint64_t* out_low64); 9642: 9642: 9642: void BijectiveUnhash2x64(uint64_t in_high64, uint64_t in_low64, 9642: uint64_t* out_high64, uint64_t* out_low64); 9642: void BijectiveUnhash2x64(uint64_t in_high64, uint64_t in_low64, uint64_t seed, 9642: uint64_t* out_high64, uint64_t* out_low64); 9642: 9642: 9642: 9642: 9642: 9642: 9642: uint32_t Hash(const char* data, size_t n, uint32_t seed); 9642: 9642: 9642: inline uint32_t BloomHash(const Slice& key) { 9642: return Hash(key.data(), key.size(), 0xbc9f1d34); 9642: } 9642: 9642: inline uint64_t GetSliceHash64(const Slice& key) { 9642: return Hash64(key.data(), key.size()); 9642: } 9642: 9642: 9642: extern uint64_t (*kGetSliceNPHash64UnseededFnPtr)(const Slice&); 9642: 9642: inline uint64_t GetSliceNPHash64(const Slice& s) { 9642: return NPHash64(s.data(), s.size()); 9642: } 9642: 9642: inline uint64_t GetSliceNPHash64(const Slice& s, uint64_t seed) { 9642: return NPHash64(s.data(), s.size(), seed); 9642: } 9642: 9642: 9642: 9642: uint64_t GetSlicePartsNPHash64(const SliceParts& data, uint64_t seed); 9642: 9642: inline size_t GetSliceRangedNPHash(const Slice& s, size_t range) { 9642: return FastRange64(NPHash64(s.data(), s.size()), range); 9642: } 9642: 9642: 9642: inline uint32_t GetSliceHash(const Slice& s) { 9642: return Hash(s.data(), s.size(), 397); 9642: } 9642: 9642: 9642: inline uint32_t Upper32of64(uint64_t v) { 9642: return static_cast(v >> 32); 9642: } 9642: inline uint32_t Lower32of64(uint64_t v) { return static_cast(v); } 9642: 9642: 9642: struct SliceHasher32 { 9642: uint32_t operator()(const Slice& s) const { return GetSliceHash(s); } 9642: }; 9642: struct SliceNPHasher64 { 9642: uint64_t operator()(const Slice& s, uint64_t seed = 0) const { 9642: return GetSliceNPHash64(s, seed); 9642: } 9642: }; 9642: 9642: } 9642: # 22 "/build/reproducible-path/rocksdb-9.3.1/util/mutexlock.h" 2 9642: 9642: namespace rocksdb { 9642: # 35 "/build/reproducible-path/rocksdb-9.3.1/util/mutexlock.h" 9642: class MutexLock { 9642: public: 9642: explicit MutexLock(port::Mutex *mu) : mu_(mu) { this->mu_->Lock(); } 9642: 9642: MutexLock(const MutexLock &) = delete; 9642: void operator=(const MutexLock &) = delete; 9642: 9642: ~MutexLock() { this->mu_->Unlock(); } 9642: 9642: private: 9642: port::Mutex *const mu_; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: class ReadLock { 9642: public: 9642: explicit ReadLock(port::RWMutex *mu) : mu_(mu) { this->mu_->ReadLock(); } 9642: 9642: ReadLock(const ReadLock &) = delete; 9642: void operator=(const ReadLock &) = delete; 9642: 9642: ~ReadLock() { this->mu_->ReadUnlock(); } 9642: 9642: private: 9642: port::RWMutex *const mu_; 9642: }; 9642: 9642: 9642: 9642: 9642: class ReadUnlock { 9642: public: 9642: explicit ReadUnlock(port::RWMutex *mu) : mu_(mu) { mu->AssertHeld(); } 9642: 9642: ReadUnlock(const ReadUnlock &) = delete; 9642: ReadUnlock &operator=(const ReadUnlock &) = delete; 9642: 9642: ~ReadUnlock() { mu_->ReadUnlock(); } 9642: 9642: private: 9642: port::RWMutex *const mu_; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: class WriteLock { 9642: public: 9642: explicit WriteLock(port::RWMutex *mu) : mu_(mu) { this->mu_->WriteLock(); } 9642: 9642: WriteLock(const WriteLock &) = delete; 9642: void operator=(const WriteLock &) = delete; 9642: 9642: ~WriteLock() { this->mu_->WriteUnlock(); } 9642: 9642: private: 9642: port::RWMutex *const mu_; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: class SpinMutex { 9642: public: 9642: SpinMutex() : locked_(false) {} 9642: 9642: bool try_lock() { 9642: auto currently_locked = locked_.load(std::memory_order_relaxed); 9642: return !currently_locked && 9642: locked_.compare_exchange_weak(currently_locked, true, 9642: std::memory_order_acquire, 9642: std::memory_order_relaxed); 9642: } 9642: 9642: void lock() { 9642: for (size_t tries = 0;; ++tries) { 9642: if (try_lock()) { 9642: 9642: break; 9642: } 9642: port::AsmVolatilePause(); 9642: if (tries > 100) { 9642: std::this_thread::yield(); 9642: } 9642: } 9642: } 9642: 9642: void unlock() { locked_.store(false, std::memory_order_release); } 9642: 9642: private: 9642: std::atomic locked_; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct alignas(64U) CacheAlignedWrapper { 9642: T obj_; 9642: }; 9642: template 9642: struct Unwrap { 9642: using type = T; 9642: static type &Go(T &t) { return t; } 9642: }; 9642: template 9642: struct Unwrap> { 9642: using type = T; 9642: static type &Go(CacheAlignedWrapper &t) { return t.obj_; } 9642: }; 9642: # 165 "/build/reproducible-path/rocksdb-9.3.1/util/mutexlock.h" 9642: template 9642: class Striped { 9642: public: 9642: explicit Striped(size_t stripe_count) 9642: : stripe_count_(stripe_count), data_(new T[stripe_count]) {} 9642: 9642: using Unwrapped = typename Unwrap::type; 9642: Unwrapped &Get(const Key &key, uint64_t seed = 0) { 9642: size_t index = FastRangeGeneric(hash_(key, seed), stripe_count_); 9642: return Unwrap::Go(data_[index]); 9642: } 9642: 9642: size_t ApproximateMemoryUsage() const { 9642: 9642: 9642: return sizeof(*this) + stripe_count_ * sizeof(T); 9642: } 9642: 9642: private: 9642: size_t stripe_count_; 9642: std::unique_ptr data_; 9642: Hash hash_; 9642: }; 9642: 9642: } 9642: # 18 "/build/reproducible-path/rocksdb-9.3.1/monitoring/statistics_impl.h" 2 9642: # 30 "/build/reproducible-path/rocksdb-9.3.1/monitoring/statistics_impl.h" 9642: namespace rocksdb { 9642: 9642: enum TickersInternal : uint32_t { 9642: INTERNAL_TICKER_ENUM_START = TICKER_ENUM_MAX, 9642: INTERNAL_TICKER_ENUM_MAX 9642: }; 9642: 9642: enum HistogramsInternal : uint32_t { 9642: INTERNAL_HISTOGRAM_START = HISTOGRAM_ENUM_MAX, 9642: INTERNAL_HISTOGRAM_ENUM_MAX 9642: }; 9642: 9642: class StatisticsImpl : public Statistics { 9642: public: 9642: StatisticsImpl(std::shared_ptr stats); 9642: virtual ~StatisticsImpl(); 9642: const char* Name() const override { return kClassName(); } 9642: static const char* kClassName() { return "BasicStatistics"; } 9642: 9642: uint64_t getTickerCount(uint32_t ticker_type) const override; 9642: void histogramData(uint32_t histogram_type, 9642: HistogramData* const data) const override; 9642: std::string getHistogramString(uint32_t histogram_type) const override; 9642: 9642: void setTickerCount(uint32_t ticker_type, uint64_t count) override; 9642: uint64_t getAndResetTickerCount(uint32_t ticker_type) override; 9642: void recordTick(uint32_t ticker_type, uint64_t count) override; 9642: 9642: 9642: 9642: 9642: void measureTime(uint32_t histogramType, uint64_t time) override { 9642: recordInHistogram(histogramType, time); 9642: } 9642: void recordInHistogram(uint32_t histogram_type, uint64_t value) override; 9642: 9642: Status Reset() override; 9642: std::string ToString() const override; 9642: bool getTickerMap(std::map*) const override; 9642: bool HistEnabledForType(uint32_t type) const override; 9642: 9642: const Customizable* Inner() const override { return stats_.get(); } 9642: 9642: private: 9642: 9642: std::shared_ptr stats_; 9642: 9642: 9642: mutable port::Mutex aggregate_lock_; 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct alignas(64U) StatisticsData { 9642: std::atomic_uint_fast64_t tickers_[INTERNAL_TICKER_ENUM_MAX] = {{0}}; 9642: HistogramImpl histograms_[INTERNAL_HISTOGRAM_ENUM_MAX]; 9642: 9642: char 9642: padding[(64U - 9642: (INTERNAL_TICKER_ENUM_MAX * sizeof(std::atomic_uint_fast64_t) + 9642: INTERNAL_HISTOGRAM_ENUM_MAX * sizeof(HistogramImpl)) % 9642: 64U)] ; 9642: 9642: void* operator new(size_t s) { return port::cacheline_aligned_alloc(s); } 9642: void* operator new[](size_t s) { return port::cacheline_aligned_alloc(s); } 9642: void operator delete(void* p) { port::cacheline_aligned_free(p); } 9642: void operator delete[](void* p) { port::cacheline_aligned_free(p); } 9642: }; 9642: 9642: 9642: static_assert(sizeof(StatisticsData) % 64U == 0, 9642: "Expected " "64U" "-byte aligned"); 9642: 9642: 9642: CoreLocalArray per_core_stats_; 9642: 9642: uint64_t getTickerCountLocked(uint32_t ticker_type) const; 9642: std::unique_ptr getHistogramImplLocked( 9642: uint32_t histogram_type) const; 9642: void setTickerCountLocked(uint32_t ticker_type, uint64_t count); 9642: }; 9642: 9642: 9642: inline void RecordInHistogram(Statistics* statistics, uint32_t histogram_type, 9642: uint64_t value) { 9642: if (statistics) { 9642: statistics->recordInHistogram(histogram_type, value); 9642: } 9642: } 9642: 9642: inline void RecordTimeToHistogram(Statistics* statistics, 9642: uint32_t histogram_type, uint64_t value) { 9642: if (statistics) { 9642: statistics->reportTimeToHistogram(histogram_type, value); 9642: } 9642: } 9642: 9642: inline void RecordTick(Statistics* statistics, uint32_t ticker_type, 9642: uint64_t count = 1) { 9642: if (statistics) { 9642: statistics->recordTick(ticker_type, count); 9642: } 9642: } 9642: 9642: inline void SetTickerCount(Statistics* statistics, uint32_t ticker_type, 9642: uint64_t count) { 9642: if (statistics) { 9642: statistics->setTickerCount(ticker_type, count); 9642: } 9642: } 9642: 9642: } 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_step_timer.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/system_clock.h" 1 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/system_clock.h" 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/chrono" 1 3 9642: # 33 "/usr/include/c++/13/chrono" 3 9642: 9642: # 34 "/usr/include/c++/13/chrono" 3 9642: # 59 "/usr/include/c++/13/chrono" 3 9642: 9642: # 59 "/usr/include/c++/13/chrono" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 76 "/usr/include/c++/13/chrono" 3 9642: namespace chrono 9642: { 9642: # 3338 "/usr/include/c++/13/chrono" 3 9642: } 9642: # 3366 "/usr/include/c++/13/chrono" 3 9642: 9642: } 9642: # 13 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/system_clock.h" 2 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/system_clock.h" 9642: 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/system_clock.h" 9642: namespace rocksdb { 9642: struct ConfigOptions; 9642: 9642: 9642: 9642: class SystemClock : public Customizable { 9642: public: 9642: ~SystemClock() override {} 9642: 9642: static const char* Type() { return "SystemClock"; } 9642: static Status CreateFromString(const ConfigOptions& options, 9642: const std::string& value, 9642: std::shared_ptr* result); 9642: 9642: const char* Name() const override = 0; 9642: 9642: 9642: 9642: static const char* kDefaultName() { return "DefaultClock"; } 9642: 9642: 9642: 9642: static const std::shared_ptr& Default(); 9642: 9642: 9642: 9642: 9642: virtual uint64_t NowMicros() = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual uint64_t NowNanos() { return NowMicros() * 1000; } 9642: 9642: 9642: 9642: virtual uint64_t CPUMicros() { return 0; } 9642: 9642: 9642: 9642: 9642: virtual uint64_t CPUNanos() { return CPUMicros() * 1000; } 9642: 9642: 9642: virtual void SleepForMicroseconds(int micros) = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual bool TimedWait(port::CondVar* cv, std::chrono::microseconds deadline); 9642: 9642: 9642: 9642: virtual Status GetCurrentTime(int64_t* unix_time) = 0; 9642: 9642: 9642: virtual std::string TimeToString(uint64_t time) = 0; 9642: }; 9642: 9642: 9642: 9642: class SystemClockWrapper : public SystemClock { 9642: public: 9642: explicit SystemClockWrapper(const std::shared_ptr& t); 9642: 9642: uint64_t NowMicros() override { return target_->NowMicros(); } 9642: 9642: uint64_t NowNanos() override { return target_->NowNanos(); } 9642: 9642: uint64_t CPUMicros() override { return target_->CPUMicros(); } 9642: 9642: uint64_t CPUNanos() override { return target_->CPUNanos(); } 9642: 9642: void SleepForMicroseconds(int micros) override { 9642: return target_->SleepForMicroseconds(micros); 9642: } 9642: 9642: bool TimedWait(port::CondVar* cv, 9642: std::chrono::microseconds deadline) override { 9642: return target_->TimedWait(cv, deadline); 9642: } 9642: 9642: Status GetCurrentTime(int64_t* unix_time) override { 9642: return target_->GetCurrentTime(unix_time); 9642: } 9642: 9642: std::string TimeToString(uint64_t time) override { 9642: return target_->TimeToString(time); 9642: } 9642: 9642: Status PrepareOptions(const ConfigOptions& options) override; 9642: std::string SerializeOptions(const ConfigOptions& config_options, 9642: const std::string& header) const override; 9642: const Customizable* Inner() const override { return target_.get(); } 9642: 9642: protected: 9642: std::shared_ptr target_; 9642: }; 9642: 9642: } 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_step_timer.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: class PerfStepTimer { 9642: public: 9642: explicit PerfStepTimer( 9642: uint64_t* metric, SystemClock* clock = nullptr, bool use_cpu_time = false, 9642: PerfLevel enable_level = PerfLevel::kEnableTimeExceptForMutex, 9642: Statistics* statistics = nullptr, uint32_t ticker_type = 0) 9642: : perf_counter_enabled_(perf_level >= enable_level), 9642: use_cpu_time_(use_cpu_time), 9642: ticker_type_(ticker_type), 9642: clock_((perf_counter_enabled_ || statistics != nullptr) 9642: ? (clock ? clock : SystemClock::Default().get()) 9642: : nullptr), 9642: start_(0), 9642: metric_(metric), 9642: statistics_(statistics) {} 9642: 9642: ~PerfStepTimer() { Stop(); } 9642: 9642: void Start() { 9642: if (perf_counter_enabled_ || statistics_ != nullptr) { 9642: start_ = time_now(); 9642: } 9642: } 9642: 9642: void Measure() { 9642: if (start_) { 9642: uint64_t now = time_now(); 9642: *metric_ += now - start_; 9642: start_ = now; 9642: } 9642: } 9642: 9642: void Stop() { 9642: if (start_) { 9642: uint64_t duration = time_now() - start_; 9642: if (perf_counter_enabled_) { 9642: *metric_ += duration; 9642: } 9642: 9642: if (statistics_ != nullptr) { 9642: RecordTick(statistics_, ticker_type_, duration); 9642: } 9642: start_ = 0; 9642: } 9642: } 9642: 9642: private: 9642: uint64_t time_now() { 9642: if (!use_cpu_time_) { 9642: return clock_->NowNanos(); 9642: } else { 9642: return clock_->CPUNanos(); 9642: } 9642: } 9642: 9642: const bool perf_counter_enabled_; 9642: const bool use_cpu_time_; 9642: uint32_t ticker_type_; 9642: SystemClock* const clock_; 9642: uint64_t start_; 9642: uint64_t* metric_; 9642: Statistics* statistics_; 9642: }; 9642: 9642: } 9642: # 8 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_context_imp.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/perf_context.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 15 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/perf_context.h" 9642: namespace rocksdb { 9642: # 27 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/perf_context.h" 9642: struct PerfContextByLevelBase { 9642: 9642: 9642: 9642: uint64_t bloom_filter_useful = 0; 9642: 9642: uint64_t bloom_filter_full_positive = 0; 9642: 9642: 9642: uint64_t bloom_filter_full_true_positive = 0; 9642: 9642: 9642: 9642: uint64_t user_key_return_count = 0; 9642: 9642: 9642: uint64_t get_from_table_nanos = 0; 9642: 9642: uint64_t block_cache_hit_count = 0; 9642: uint64_t block_cache_miss_count = 0; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct PerfContextByLevel : public PerfContextByLevelBase { 9642: void Reset(); 9642: }; 9642: # 67 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/perf_context.h" 9642: struct PerfContextBase { 9642: uint64_t user_key_comparison_count; 9642: uint64_t block_cache_hit_count; 9642: uint64_t block_read_count; 9642: uint64_t block_read_byte; 9642: uint64_t block_read_time; 9642: 9642: uint64_t block_read_cpu_time; 9642: uint64_t block_cache_index_hit_count; 9642: 9642: uint64_t block_cache_standalone_handle_count; 9642: 9642: 9642: uint64_t block_cache_real_handle_count; 9642: uint64_t index_block_read_count; 9642: uint64_t block_cache_filter_hit_count; 9642: uint64_t filter_block_read_count; 9642: uint64_t compression_dict_block_read_count; 9642: 9642: 9642: uint64_t block_cache_index_read_byte; 9642: uint64_t block_cache_filter_read_byte; 9642: uint64_t block_cache_compression_dict_read_byte; 9642: uint64_t block_cache_read_byte; 9642: 9642: uint64_t secondary_cache_hit_count; 9642: 9642: uint64_t compressed_sec_cache_insert_real_count; 9642: 9642: uint64_t compressed_sec_cache_insert_dummy_count; 9642: 9642: uint64_t compressed_sec_cache_uncompressed_bytes; 9642: 9642: uint64_t compressed_sec_cache_compressed_bytes; 9642: 9642: uint64_t block_checksum_time; 9642: uint64_t block_decompress_time; 9642: 9642: uint64_t get_read_bytes; 9642: uint64_t multiget_read_bytes; 9642: uint64_t iter_read_bytes; 9642: 9642: uint64_t blob_cache_hit_count; 9642: uint64_t blob_read_count; 9642: uint64_t blob_read_byte; 9642: uint64_t blob_read_time; 9642: uint64_t blob_checksum_time; 9642: uint64_t blob_decompress_time; 9642: # 133 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/perf_context.h" 9642: uint64_t internal_key_skipped_count; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: uint64_t internal_delete_skipped_count; 9642: 9642: 9642: 9642: uint64_t internal_recent_skipped_count; 9642: 9642: 9642: 9642: uint64_t internal_merge_count; 9642: 9642: 9642: 9642: uint64_t internal_merge_point_lookup_count; 9642: 9642: 9642: 9642: uint64_t internal_range_del_reseek_count; 9642: 9642: uint64_t get_snapshot_time; 9642: uint64_t get_from_memtable_time; 9642: uint64_t get_from_memtable_count; 9642: 9642: uint64_t get_post_process_time; 9642: uint64_t get_from_output_files_time; 9642: 9642: uint64_t seek_on_memtable_time; 9642: 9642: 9642: uint64_t seek_on_memtable_count; 9642: 9642: uint64_t next_on_memtable_count; 9642: 9642: uint64_t prev_on_memtable_count; 9642: 9642: uint64_t seek_child_seek_time; 9642: 9642: uint64_t seek_child_seek_count; 9642: uint64_t seek_min_heap_time; 9642: uint64_t seek_max_heap_time; 9642: 9642: uint64_t seek_internal_seek_time; 9642: 9642: uint64_t find_next_user_entry_time; 9642: 9642: 9642: 9642: 9642: 9642: 9642: uint64_t write_wal_time; 9642: 9642: uint64_t write_memtable_time; 9642: 9642: uint64_t write_delay_time; 9642: 9642: 9642: uint64_t write_scheduling_flushes_compactions_time; 9642: 9642: uint64_t write_pre_and_post_process_time; 9642: 9642: 9642: uint64_t write_thread_wait_nanos; 9642: 9642: 9642: uint64_t db_mutex_lock_nanos; 9642: 9642: uint64_t db_condition_wait_nanos; 9642: 9642: uint64_t merge_operator_time_nanos; 9642: 9642: 9642: uint64_t read_index_block_nanos; 9642: 9642: uint64_t read_filter_block_nanos; 9642: 9642: uint64_t new_table_block_iter_nanos; 9642: 9642: uint64_t new_table_iterator_nanos; 9642: 9642: uint64_t block_seek_nanos; 9642: 9642: uint64_t find_table_nanos; 9642: 9642: uint64_t bloom_memtable_hit_count; 9642: 9642: uint64_t bloom_memtable_miss_count; 9642: 9642: uint64_t bloom_sst_hit_count; 9642: 9642: uint64_t bloom_sst_miss_count; 9642: 9642: 9642: uint64_t key_lock_wait_time; 9642: 9642: uint64_t key_lock_wait_count; 9642: 9642: 9642: 9642: uint64_t env_new_sequential_file_nanos; 9642: uint64_t env_new_random_access_file_nanos; 9642: uint64_t env_new_writable_file_nanos; 9642: uint64_t env_reuse_writable_file_nanos; 9642: uint64_t env_new_random_rw_file_nanos; 9642: uint64_t env_new_directory_nanos; 9642: uint64_t env_file_exists_nanos; 9642: uint64_t env_get_children_nanos; 9642: uint64_t env_get_children_file_attributes_nanos; 9642: uint64_t env_delete_file_nanos; 9642: uint64_t env_create_dir_nanos; 9642: uint64_t env_create_dir_if_missing_nanos; 9642: uint64_t env_delete_dir_nanos; 9642: uint64_t env_get_file_size_nanos; 9642: uint64_t env_get_file_modification_time_nanos; 9642: uint64_t env_rename_file_nanos; 9642: uint64_t env_link_file_nanos; 9642: uint64_t env_lock_file_nanos; 9642: uint64_t env_unlock_file_nanos; 9642: uint64_t env_new_logger_nanos; 9642: 9642: uint64_t get_cpu_nanos; 9642: uint64_t iter_next_cpu_nanos; 9642: uint64_t iter_prev_cpu_nanos; 9642: uint64_t iter_seek_cpu_nanos; 9642: 9642: 9642: 9642: 9642: uint64_t iter_next_count; 9642: uint64_t iter_prev_count; 9642: uint64_t iter_seek_count; 9642: 9642: 9642: uint64_t encrypt_data_nanos; 9642: 9642: uint64_t decrypt_data_nanos; 9642: 9642: uint64_t number_async_seek; 9642: }; 9642: 9642: struct PerfContext : public PerfContextBase { 9642: ~PerfContext(); 9642: 9642: PerfContext() { Reset(); } 9642: 9642: PerfContext(const PerfContext&); 9642: PerfContext& operator=(const PerfContext&); 9642: PerfContext(PerfContext&&) noexcept; 9642: 9642: void Reset(); 9642: 9642: std::string ToString(bool exclude_zero_counters = false) const; 9642: 9642: 9642: void EnablePerLevelPerfContext(); 9642: 9642: 9642: void DisablePerLevelPerfContext(); 9642: 9642: 9642: void ClearPerLevelPerfContext(); 9642: 9642: std::map* level_to_perf_context = nullptr; 9642: bool per_level_perf_context_enabled = false; 9642: 9642: void copyMetrics(const PerfContext* other) noexcept; 9642: }; 9642: # 317 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/perf_context.h" 9642: PerfContext* get_perf_context(); 9642: 9642: } 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_context_imp.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/stop_watch.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: 9642: 9642: class StopWatch { 9642: public: 9642: StopWatch(SystemClock* clock, Statistics* statistics, 9642: const uint32_t hist_type_1, 9642: const uint32_t hist_type_2 = Histograms::HISTOGRAM_ENUM_MAX, 9642: uint64_t* elapsed = nullptr, bool overwrite = true, 9642: bool delay_enabled = false) 9642: : clock_(clock), 9642: statistics_(statistics), 9642: hist_type_1_(statistics && statistics->HistEnabledForType(hist_type_1) 9642: ? hist_type_1 9642: : Histograms::HISTOGRAM_ENUM_MAX), 9642: hist_type_2_(statistics && statistics->HistEnabledForType(hist_type_2) 9642: ? hist_type_2 9642: : Histograms::HISTOGRAM_ENUM_MAX), 9642: elapsed_(elapsed), 9642: overwrite_(overwrite), 9642: stats_enabled_(statistics && 9642: statistics->get_stats_level() > 9642: StatsLevel::kExceptTimers && 9642: (hist_type_1_ != Histograms::HISTOGRAM_ENUM_MAX || 9642: hist_type_2_ != Histograms::HISTOGRAM_ENUM_MAX)), 9642: delay_enabled_(delay_enabled), 9642: total_delay_(0), 9642: delay_start_time_(0), 9642: start_time_((stats_enabled_ || elapsed != nullptr) ? clock->NowMicros() 9642: : 0) {} 9642: 9642: ~StopWatch() { 9642: if (elapsed_) { 9642: if (overwrite_) { 9642: *elapsed_ = clock_->NowMicros() - start_time_; 9642: } else { 9642: *elapsed_ += clock_->NowMicros() - start_time_; 9642: } 9642: } 9642: if (elapsed_ && delay_enabled_) { 9642: *elapsed_ -= total_delay_; 9642: } 9642: if (stats_enabled_) { 9642: const auto time = (elapsed_ != nullptr) 9642: ? *elapsed_ 9642: : (clock_->NowMicros() - start_time_); 9642: if (hist_type_1_ != Histograms::HISTOGRAM_ENUM_MAX) { 9642: statistics_->reportTimeToHistogram(hist_type_1_, time); 9642: } 9642: if (hist_type_2_ != Histograms::HISTOGRAM_ENUM_MAX) { 9642: statistics_->reportTimeToHistogram(hist_type_2_, time); 9642: } 9642: } 9642: } 9642: 9642: void DelayStart() { 9642: 9642: 9642: if (elapsed_ && delay_enabled_ && delay_start_time_ == 0) { 9642: delay_start_time_ = clock_->NowMicros(); 9642: } 9642: } 9642: 9642: void DelayStop() { 9642: if (elapsed_ && delay_enabled_ && delay_start_time_ != 0) { 9642: total_delay_ += clock_->NowMicros() - delay_start_time_; 9642: } 9642: 9642: 9642: delay_start_time_ = 0; 9642: } 9642: 9642: uint64_t GetDelay() const { return delay_enabled_ ? total_delay_ : 0; } 9642: 9642: uint64_t start_time() const { return start_time_; } 9642: 9642: private: 9642: SystemClock* clock_; 9642: Statistics* statistics_; 9642: const uint32_t hist_type_1_; 9642: const uint32_t hist_type_2_; 9642: uint64_t* elapsed_; 9642: bool overwrite_; 9642: bool stats_enabled_; 9642: bool delay_enabled_; 9642: uint64_t total_delay_; 9642: uint64_t delay_start_time_; 9642: const uint64_t start_time_; 9642: }; 9642: 9642: 9642: class StopWatchNano { 9642: public: 9642: explicit StopWatchNano(SystemClock* clock, bool auto_start = false) 9642: : clock_(clock), start_(0) { 9642: if (auto_start) { 9642: Start(); 9642: } 9642: } 9642: 9642: void Start() { start_ = clock_->NowNanos(); } 9642: 9642: uint64_t ElapsedNanos(bool reset = false) { 9642: auto now = clock_->NowNanos(); 9642: auto elapsed = now - start_; 9642: if (reset) { 9642: start_ = now; 9642: } 9642: return elapsed; 9642: } 9642: 9642: uint64_t ElapsedNanosSafe(bool reset = false) { 9642: return (clock_ != nullptr) ? ElapsedNanos(reset) : 0U; 9642: } 9642: 9642: bool IsStarted() { return start_ != 0; } 9642: 9642: private: 9642: SystemClock* clock_; 9642: uint64_t start_; 9642: }; 9642: 9642: } 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_context_imp.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern thread_local PerfContext perf_context; 9642: # 103 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_context_imp.h" 9642: } 9642: # 12 "/build/reproducible-path/rocksdb-9.3.1/util/user_comparator_wrapper.h" 2 9642: 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: class UserComparatorWrapper { 9642: public: 9642: 9642: 9642: UserComparatorWrapper() : user_comparator_(nullptr) {} 9642: 9642: explicit UserComparatorWrapper(const Comparator* const user_cmp) 9642: : user_comparator_(user_cmp) {} 9642: 9642: ~UserComparatorWrapper() = default; 9642: 9642: const Comparator* user_comparator() const { return user_comparator_; } 9642: 9642: int Compare(const Slice& a, const Slice& b) const { 9642: if (perf_level >= PerfLevel::kEnableCount) { perf_context.user_key_comparison_count += 1; } static_assert(true, "semicolon required"); 9642: return user_comparator_->Compare(a, b); 9642: } 9642: 9642: bool Equal(const Slice& a, const Slice& b) const { 9642: if (perf_level >= PerfLevel::kEnableCount) { perf_context.user_key_comparison_count += 1; } static_assert(true, "semicolon required"); 9642: return user_comparator_->Equal(a, b); 9642: } 9642: 9642: int CompareTimestamp(const Slice& ts1, const Slice& ts2) const { 9642: return user_comparator_->CompareTimestamp(ts1, ts2); 9642: } 9642: 9642: int CompareWithoutTimestamp(const Slice& a, const Slice& b) const { 9642: if (perf_level >= PerfLevel::kEnableCount) { perf_context.user_key_comparison_count += 1; } static_assert(true, "semicolon required"); 9642: return user_comparator_->CompareWithoutTimestamp(a, b); 9642: } 9642: 9642: int CompareWithoutTimestamp(const Slice& a, bool a_has_ts, const Slice& b, 9642: bool b_has_ts) const { 9642: if (perf_level >= PerfLevel::kEnableCount) { perf_context.user_key_comparison_count += 1; } static_assert(true, "semicolon required"); 9642: return user_comparator_->CompareWithoutTimestamp(a, a_has_ts, b, b_has_ts); 9642: } 9642: 9642: bool EqualWithoutTimestamp(const Slice& a, const Slice& b) const { 9642: return user_comparator_->EqualWithoutTimestamp(a, b); 9642: } 9642: 9642: private: 9642: const Comparator* user_comparator_; 9642: }; 9642: 9642: } 9642: # 24 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: class InternalKey; 9642: 9642: 9642: 9642: 9642: 9642: 9642: enum ValueType : unsigned char { 9642: kTypeDeletion = 0x0, 9642: kTypeValue = 0x1, 9642: kTypeMerge = 0x2, 9642: kTypeLogData = 0x3, 9642: kTypeColumnFamilyDeletion = 0x4, 9642: kTypeColumnFamilyValue = 0x5, 9642: kTypeColumnFamilyMerge = 0x6, 9642: kTypeSingleDeletion = 0x7, 9642: kTypeColumnFamilySingleDeletion = 0x8, 9642: kTypeBeginPrepareXID = 0x9, 9642: kTypeEndPrepareXID = 0xA, 9642: kTypeCommitXID = 0xB, 9642: kTypeRollbackXID = 0xC, 9642: kTypeNoop = 0xD, 9642: kTypeColumnFamilyRangeDeletion = 0xE, 9642: kTypeRangeDeletion = 0xF, 9642: kTypeColumnFamilyBlobIndex = 0x10, 9642: kTypeBlobIndex = 0x11, 9642: 9642: 9642: 9642: 9642: kTypeBeginPersistedPrepareXID = 0x12, 9642: 9642: 9642: 9642: kTypeBeginUnprepareXID = 0x13, 9642: kTypeDeletionWithTimestamp = 0x14, 9642: kTypeCommitXIDAndTimestamp = 0x15, 9642: kTypeWideColumnEntity = 0x16, 9642: kTypeColumnFamilyWideColumnEntity = 0x17, 9642: kTypeValuePreferredSeqno = 0x18, 9642: kTypeColumnFamilyValuePreferredSeqno = 0x19, 9642: kTypeMaxValid, 9642: 9642: kMaxValue = 0x7F 9642: }; 9642: 9642: 9642: extern const ValueType kValueTypeForSeek; 9642: extern const ValueType kValueTypeForSeekForPrev; 9642: 9642: 9642: 9642: struct UserKeyRange { 9642: 9642: 9642: Slice start; 9642: Slice limit; 9642: 9642: UserKeyRange() = default; 9642: UserKeyRange(const Slice& s, const Slice& l) : start(s), limit(l) {} 9642: }; 9642: 9642: 9642: 9642: struct UserKeyRangePtr { 9642: 9642: 9642: 9642: std::optional start; 9642: 9642: std::optional limit; 9642: 9642: UserKeyRangePtr(const std::optional& s, const std::optional& l) 9642: : start(s), limit(l) {} 9642: }; 9642: 9642: 9642: 9642: inline bool IsValueType(ValueType t) { 9642: return t <= kTypeMerge || kTypeSingleDeletion == t || kTypeBlobIndex == t || 9642: kTypeDeletionWithTimestamp == t || kTypeWideColumnEntity == t || 9642: kTypeValuePreferredSeqno == t; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: inline bool IsExtendedValueType(ValueType t) { 9642: return IsValueType(t) || t == kTypeRangeDeletion || t == kTypeMaxValid; 9642: } 9642: 9642: 9642: 9642: static const SequenceNumber kMaxSequenceNumber = ((0x1ull << 56) - 1); 9642: 9642: static const SequenceNumber kDisableGlobalSequenceNumber = 9642: std::numeric_limits::max(); 9642: 9642: constexpr uint64_t kNumInternalBytes = 8; 9642: 9642: 9642: extern const std::string kDisableUserTimestamp; 9642: 9642: 9642: 9642: struct ParsedInternalKey { 9642: Slice user_key; 9642: SequenceNumber sequence; 9642: ValueType type; 9642: 9642: ParsedInternalKey() 9642: : sequence(kMaxSequenceNumber), 9642: type(kTypeDeletion) 9642: {} 9642: 9642: ParsedInternalKey(const Slice& u, const SequenceNumber& seq, ValueType t) 9642: : user_key(u), sequence(seq), type(t) {} 9642: std::string DebugString(bool log_err_key, bool hex, 9642: const Comparator* ucmp = nullptr) const; 9642: 9642: void clear() { 9642: user_key.clear(); 9642: sequence = 0; 9642: type = kTypeDeletion; 9642: } 9642: 9642: void SetTimestamp(const Slice& ts) { 9642: 9642: # 161 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 161 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ts.size() <= user_key.size() 9642: # 161 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 161 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "ts.size() <= user_key.size()" 9642: # 161 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 161 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: const char* addr = user_key.data() + user_key.size() - ts.size(); 9642: memcpy(const_cast(addr), ts.data(), ts.size()); 9642: } 9642: 9642: Slice GetTimestamp(size_t ts_sz) { 9642: 9642: # 167 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 167 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ts_sz <= user_key.size() 9642: # 167 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 167 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "ts_sz <= user_key.size()" 9642: # 167 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 167 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: const char* addr = user_key.data() + user_key.size() - ts_sz; 9642: return Slice(const_cast(addr), ts_sz); 9642: } 9642: }; 9642: 9642: 9642: inline size_t InternalKeyEncodingLength(const ParsedInternalKey& key) { 9642: return key.user_key.size() + kNumInternalBytes; 9642: } 9642: 9642: 9642: inline uint64_t PackSequenceAndType(uint64_t seq, ValueType t) { 9642: 9642: # 180 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 180 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: seq <= kMaxSequenceNumber 9642: # 180 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 180 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "seq <= kMaxSequenceNumber" 9642: # 180 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 180 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: 9642: 9642: # 182 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 182 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: IsExtendedValueType(t) || t == kTypeMaxValid 9642: # 182 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 182 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "IsExtendedValueType(t) || t == kTypeMaxValid" 9642: # 182 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 182 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: return (seq << 8) | t; 9642: } 9642: 9642: 9642: 9642: inline void UnPackSequenceAndType(uint64_t packed, uint64_t* seq, 9642: ValueType* t) { 9642: *seq = packed >> 8; 9642: *t = static_cast(packed & 0xff); 9642: 9642: 9642: 9642: 9642: 9642: } 9642: 9642: const uint64_t kRangeTombstoneSentinel = 9642: PackSequenceAndType(kMaxSequenceNumber, kTypeRangeDeletion); 9642: 9642: EntryType GetEntryType(ValueType value_type); 9642: 9642: 9642: 9642: 9642: 9642: 9642: void AppendInternalKey(std::string* result, const ParsedInternalKey& key); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void AppendInternalKeyWithDifferentTimestamp(std::string* result, 9642: const ParsedInternalKey& key, 9642: const Slice& ts); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void AppendUserKeyWithDifferentTimestamp(std::string* result, const Slice& key, 9642: const Slice& ts); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void AppendInternalKeyFooter(std::string* result, SequenceNumber s, 9642: ValueType t); 9642: 9642: 9642: 9642: 9642: 9642: 9642: void AppendKeyWithMinTimestamp(std::string* result, const Slice& key, 9642: size_t ts_sz); 9642: 9642: 9642: 9642: 9642: 9642: 9642: void AppendKeyWithMaxTimestamp(std::string* result, const Slice& key, 9642: size_t ts_sz); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void AppendUserKeyWithMinTimestamp(std::string* result, const Slice& key, 9642: size_t ts_sz); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void AppendUserKeyWithMaxTimestamp(std::string* result, const Slice& key, 9642: size_t ts_sz); 9642: # 280 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: void PadInternalKeyWithMinTimestamp(std::string* result, const Slice& key, 9642: size_t ts_sz); 9642: # 290 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: void PadInternalKeyWithMaxTimestamp(std::string* result, const Slice& key, 9642: size_t ts_sz); 9642: # 300 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: void StripTimestampFromInternalKey(std::string* result, const Slice& key, 9642: size_t ts_sz); 9642: # 310 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: void ReplaceInternalKeyWithMinTimestamp(std::string* result, const Slice& key, 9642: size_t ts_sz); 9642: 9642: 9642: 9642: 9642: 9642: Status ParseInternalKey(const Slice& internal_key, ParsedInternalKey* result, 9642: bool log_err_key); 9642: 9642: 9642: 9642: 9642: 9642: inline Slice ExtractUserKey(const Slice& internal_key) { 9642: 9642: # 325 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 325 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: internal_key.size() >= kNumInternalBytes 9642: # 325 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 325 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "internal_key.size() >= kNumInternalBytes" 9642: # 325 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 325 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: return Slice(internal_key.data(), internal_key.size() - kNumInternalBytes); 9642: } 9642: 9642: 9642: 9642: inline Slice ExtractUserKeyAndStripTimestamp(const Slice& internal_key, 9642: size_t ts_sz) { 9642: Slice ret = internal_key; 9642: ret.remove_suffix(kNumInternalBytes + ts_sz); 9642: return ret; 9642: } 9642: 9642: 9642: 9642: inline Slice StripTimestampFromUserKey(const Slice& user_key, size_t ts_sz) { 9642: Slice ret = user_key; 9642: ret.remove_suffix(ts_sz); 9642: return ret; 9642: } 9642: 9642: 9642: 9642: inline Slice ExtractTimestampFromUserKey(const Slice& user_key, size_t ts_sz) { 9642: 9642: # 349 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 349 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: user_key.size() >= ts_sz 9642: # 349 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 349 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "user_key.size() >= ts_sz" 9642: # 349 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 349 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: return Slice(user_key.data() + user_key.size() - ts_sz, ts_sz); 9642: } 9642: 9642: 9642: 9642: inline Slice ExtractTimestampFromKey(const Slice& internal_key, size_t ts_sz) { 9642: const size_t key_size = internal_key.size(); 9642: 9642: # 357 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 357 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: key_size >= kNumInternalBytes + ts_sz 9642: # 357 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 357 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "key_size >= kNumInternalBytes + ts_sz" 9642: # 357 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 357 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: return Slice(internal_key.data() + key_size - ts_sz - kNumInternalBytes, 9642: ts_sz); 9642: } 9642: 9642: 9642: 9642: inline uint64_t ExtractInternalKeyFooter(const Slice& internal_key) { 9642: 9642: # 365 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 365 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: internal_key.size() >= kNumInternalBytes 9642: # 365 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 365 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "internal_key.size() >= kNumInternalBytes" 9642: # 365 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 365 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: const size_t n = internal_key.size(); 9642: return DecodeFixed64(internal_key.data() + n - kNumInternalBytes); 9642: } 9642: 9642: 9642: 9642: inline ValueType ExtractValueType(const Slice& internal_key) { 9642: uint64_t num = ExtractInternalKeyFooter(internal_key); 9642: unsigned char c = num & 0xff; 9642: return static_cast(c); 9642: } 9642: 9642: 9642: 9642: class InternalKeyComparator 9642: 9642: 9642: 9642: : public CompareInterface { 9642: private: 9642: UserComparatorWrapper user_comparator_; 9642: 9642: public: 9642: 9642: 9642: InternalKeyComparator() = default; 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit InternalKeyComparator(const Comparator* c) : user_comparator_(c) {} 9642: virtual ~InternalKeyComparator() {} 9642: 9642: int Compare(const Slice& a, const Slice& b) const override; 9642: 9642: bool Equal(const Slice& a, const Slice& b) const { 9642: 9642: 9642: return Compare(a, b) == 0; 9642: } 9642: 9642: 9642: int CompareKeySeq(const Slice& a, const Slice& b) const; 9642: int CompareKeySeq(const ParsedInternalKey& a, const Slice& b) const; 9642: 9642: const Comparator* user_comparator() const { 9642: return user_comparator_.user_comparator(); 9642: } 9642: 9642: int Compare(const InternalKey& a, const InternalKey& b) const; 9642: int Compare(const ParsedInternalKey& a, const ParsedInternalKey& b) const; 9642: int Compare(const Slice& a, const ParsedInternalKey& b) const; 9642: int Compare(const ParsedInternalKey& a, const Slice& b) const; 9642: 9642: 9642: 9642: 9642: int Compare(const Slice& a, SequenceNumber a_global_seqno, const Slice& b, 9642: SequenceNumber b_global_seqno) const; 9642: }; 9642: 9642: 9642: class InternalKey { 9642: private: 9642: std::string rep_; 9642: 9642: public: 9642: InternalKey() {} 9642: InternalKey(const Slice& _user_key, SequenceNumber s, ValueType t) { 9642: AppendInternalKey(&rep_, ParsedInternalKey(_user_key, s, t)); 9642: } 9642: InternalKey(const Slice& _user_key, SequenceNumber s, ValueType t, Slice ts) { 9642: AppendInternalKeyWithDifferentTimestamp( 9642: &rep_, ParsedInternalKey(_user_key, s, t), ts); 9642: } 9642: 9642: 9642: 9642: void SetMaxPossibleForUserKey(const Slice& _user_key) { 9642: AppendInternalKey( 9642: &rep_, ParsedInternalKey(_user_key, 0, static_cast(0))); 9642: } 9642: 9642: 9642: 9642: void SetMinPossibleForUserKey(const Slice& _user_key) { 9642: AppendInternalKey(&rep_, ParsedInternalKey(_user_key, kMaxSequenceNumber, 9642: kValueTypeForSeek)); 9642: } 9642: 9642: bool Valid() const { 9642: ParsedInternalKey parsed; 9642: return (ParseInternalKey(Slice(rep_), &parsed, false ) 9642: .ok()); 9642: } 9642: 9642: void DecodeFrom(const Slice& s) { rep_.assign(s.data(), s.size()); } 9642: Slice Encode() const { 9642: 9642: # 466 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 466 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: !rep_.empty() 9642: # 466 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 466 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "!rep_.empty()" 9642: # 466 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 466 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: return rep_; 9642: } 9642: 9642: Slice user_key() const { return ExtractUserKey(rep_); } 9642: size_t size() const { return rep_.size(); } 9642: 9642: void Set(const Slice& _user_key, SequenceNumber s, ValueType t) { 9642: SetFrom(ParsedInternalKey(_user_key, s, t)); 9642: } 9642: 9642: void Set(const Slice& _user_key_with_ts, SequenceNumber s, ValueType t, 9642: const Slice& ts) { 9642: ParsedInternalKey pik(_user_key_with_ts, s, t); 9642: 9642: 9642: SetFrom(pik, ts); 9642: } 9642: 9642: void SetFrom(const ParsedInternalKey& p) { 9642: rep_.clear(); 9642: AppendInternalKey(&rep_, p); 9642: } 9642: 9642: void SetFrom(const ParsedInternalKey& p, const Slice& ts) { 9642: rep_.clear(); 9642: AppendInternalKeyWithDifferentTimestamp(&rep_, p, ts); 9642: } 9642: 9642: void Clear() { rep_.clear(); } 9642: 9642: 9642: 9642: std::string* rep() { return &rep_; } 9642: 9642: 9642: 9642: void ConvertFromUserKey(SequenceNumber s, ValueType t) { 9642: AppendInternalKeyFooter(&rep_, s, t); 9642: } 9642: 9642: std::string DebugString(bool hex, const Comparator* ucmp = nullptr) const; 9642: }; 9642: 9642: inline int InternalKeyComparator::Compare(const InternalKey& a, 9642: const InternalKey& b) const { 9642: return Compare(a.Encode(), b.Encode()); 9642: } 9642: 9642: inline Status ParseInternalKey(const Slice& internal_key, 9642: ParsedInternalKey* result, bool log_err_key) { 9642: const size_t n = internal_key.size(); 9642: 9642: if (n < kNumInternalBytes) { 9642: return Status::Corruption("Corrupted Key: Internal Key too small. Size=" + 9642: std::to_string(n) + ". "); 9642: } 9642: 9642: uint64_t num = DecodeFixed64(internal_key.data() + n - kNumInternalBytes); 9642: unsigned char c = num & 0xff; 9642: result->sequence = num >> 8; 9642: result->type = static_cast(c); 9642: 9642: # 528 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 528 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: result->type <= ValueType::kMaxValue 9642: # 528 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 528 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "result->type <= ValueType::kMaxValue" 9642: # 528 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 528 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: result->user_key = Slice(internal_key.data(), n - kNumInternalBytes); 9642: 9642: if (IsExtendedValueType(result->type)) { 9642: return Status::OK(); 9642: } else { 9642: return Status::Corruption("Corrupted Key", 9642: result->DebugString(log_err_key, true)); 9642: } 9642: } 9642: 9642: 9642: 9642: inline void UpdateInternalKey(std::string* ikey, uint64_t seq, ValueType t) { 9642: size_t ikey_sz = ikey->size(); 9642: 9642: # 543 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 543 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ikey_sz >= kNumInternalBytes 9642: # 543 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 543 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "ikey_sz >= kNumInternalBytes" 9642: # 543 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 543 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: uint64_t newval = (seq << 8) | t; 9642: 9642: 9642: 9642: EncodeFixed64(&(*ikey)[ikey_sz - kNumInternalBytes], newval); 9642: } 9642: 9642: 9642: inline uint64_t GetInternalKeySeqno(const Slice& internal_key) { 9642: const size_t n = internal_key.size(); 9642: 9642: # 554 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 554 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: n >= kNumInternalBytes 9642: # 554 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 554 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "n >= kNumInternalBytes" 9642: # 554 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 554 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: uint64_t num = DecodeFixed64(internal_key.data() + n - kNumInternalBytes); 9642: return num >> 8; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: class IterKey { 9642: public: 9642: IterKey() 9642: : buf_(space_), 9642: key_(buf_), 9642: key_size_(0), 9642: buf_size_(sizeof(space_)), 9642: is_user_key_(true) {} 9642: 9642: IterKey(const IterKey&) = delete; 9642: void operator=(const IterKey&) = delete; 9642: 9642: ~IterKey() { ResetBuffer(); } 9642: 9642: 9642: void SetIsUserKey(bool is_user_key) { is_user_key_ = is_user_key; } 9642: 9642: 9642: 9642: 9642: Slice GetKey() const { return Slice(key_, key_size_); } 9642: 9642: Slice GetInternalKey() const { 9642: 9642: # 588 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 588 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: !IsUserKey() 9642: # 588 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 588 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "!IsUserKey()" 9642: # 588 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 588 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: return Slice(key_, key_size_); 9642: } 9642: 9642: 9642: 9642: Slice GetUserKey() const { 9642: if (IsUserKey()) { 9642: return Slice(key_, key_size_); 9642: } else { 9642: 9642: # 598 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 598 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: key_size_ >= kNumInternalBytes 9642: # 598 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 598 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "key_size_ >= kNumInternalBytes" 9642: # 598 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 598 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: return Slice(key_, key_size_ - kNumInternalBytes); 9642: } 9642: } 9642: 9642: size_t Size() const { return key_size_; } 9642: 9642: void Clear() { key_size_ = 0; } 9642: 9642: 9642: 9642: 9642: 9642: void TrimAppend(const size_t shared_len, const char* non_shared_data, 9642: const size_t non_shared_len) { 9642: 9642: # 613 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 613 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: shared_len <= key_size_ 9642: # 613 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 613 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "shared_len <= key_size_" 9642: # 613 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 613 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: size_t total_size = shared_len + non_shared_len; 9642: 9642: if (IsKeyPinned() ) { 9642: 9642: EnlargeBufferIfNeeded(total_size); 9642: memcpy(buf_, key_, shared_len); 9642: } else if (total_size > buf_size_) { 9642: 9642: char* p = new char[total_size]; 9642: memcpy(p, key_, shared_len); 9642: 9642: if (buf_ != space_) { 9642: delete[] buf_; 9642: } 9642: 9642: buf_ = p; 9642: buf_size_ = total_size; 9642: } 9642: 9642: memcpy(buf_ + shared_len, non_shared_data, non_shared_len); 9642: key_ = buf_; 9642: key_size_ = total_size; 9642: } 9642: 9642: 9642: 9642: 9642: void TrimAppendWithTimestamp(const size_t shared_len, 9642: const char* non_shared_data, 9642: const size_t non_shared_len, 9642: const size_t ts_sz) { 9642: std::string kTsMin(ts_sz, static_cast(0)); 9642: std::string key_with_ts; 9642: std::vector key_parts_with_ts; 9642: if (IsUserKey()) { 9642: key_parts_with_ts = {Slice(key_, shared_len), 9642: Slice(non_shared_data, non_shared_len), 9642: Slice(kTsMin)}; 9642: } else { 9642: 9642: # 653 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 653 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: shared_len + non_shared_len >= kNumInternalBytes 9642: # 653 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 653 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "shared_len + non_shared_len >= kNumInternalBytes" 9642: # 653 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 653 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: 9642: 9642: 9642: 9642: 9642: 9642: const size_t user_key_len = key_size_ - kNumInternalBytes; 9642: const size_t sharable_user_key_len = user_key_len - ts_sz; 9642: const size_t shared_user_key_len = 9642: std::min(shared_len, sharable_user_key_len); 9642: const size_t shared_internal_bytes_len = shared_len - shared_user_key_len; 9642: 9642: 9642: 9642: key_parts_with_ts.reserve(5); 9642: bool ts_added = false; 9642: 9642: MaybeAddKeyPartsWithTimestamp( 9642: key_, shared_user_key_len, 9642: shared_internal_bytes_len + non_shared_len < kNumInternalBytes, 9642: shared_len + non_shared_len - kNumInternalBytes, kTsMin, 9642: key_parts_with_ts, &ts_added); 9642: MaybeAddKeyPartsWithTimestamp( 9642: key_ + user_key_len, shared_internal_bytes_len, 9642: non_shared_len < kNumInternalBytes, 9642: shared_internal_bytes_len + non_shared_len - kNumInternalBytes, 9642: kTsMin, key_parts_with_ts, &ts_added); 9642: MaybeAddKeyPartsWithTimestamp(non_shared_data, non_shared_len, 9642: non_shared_len >= kNumInternalBytes, 9642: non_shared_len - kNumInternalBytes, kTsMin, 9642: key_parts_with_ts, &ts_added); 9642: 9642: # 685 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 685 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ts_added 9642: # 685 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 685 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "ts_added" 9642: # 685 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 685 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: } 9642: 9642: Slice new_key(SliceParts(&key_parts_with_ts.front(), 9642: static_cast(key_parts_with_ts.size())), 9642: &key_with_ts); 9642: SetKey(new_key); 9642: } 9642: 9642: Slice SetKey(const Slice& key, bool copy = true) { 9642: 9642: return SetKeyImpl(key, copy); 9642: } 9642: 9642: 9642: 9642: 9642: Slice SetUserKey(const Slice& key, bool copy = true) { 9642: is_user_key_ = true; 9642: return SetKeyImpl(key, copy); 9642: } 9642: 9642: Slice SetInternalKey(const Slice& key, bool copy = true) { 9642: is_user_key_ = false; 9642: return SetKeyImpl(key, copy); 9642: } 9642: 9642: 9642: 9642: Slice SetInternalKey(const Slice& key, ParsedInternalKey* ikey) { 9642: size_t key_n = key.size(); 9642: 9642: # 716 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 716 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: key_n >= kNumInternalBytes 9642: # 716 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 716 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "key_n >= kNumInternalBytes" 9642: # 716 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 716 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: SetInternalKey(key); 9642: ikey->user_key = Slice(key_, key_n - kNumInternalBytes); 9642: return Slice(key_, key_n); 9642: } 9642: 9642: 9642: void OwnKey() { 9642: 9642: # 724 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 724 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: IsKeyPinned() == true 9642: # 724 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 724 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "IsKeyPinned() == true" 9642: # 724 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 724 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: 9642: Reserve(key_size_); 9642: memcpy(buf_, key_, key_size_); 9642: key_ = buf_; 9642: } 9642: 9642: 9642: 9642: void UpdateInternalKey(uint64_t seq, ValueType t, const Slice* ts = nullptr) { 9642: 9642: # 734 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 734 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: !IsKeyPinned() 9642: # 734 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 734 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "!IsKeyPinned()" 9642: # 734 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 734 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: 9642: # 735 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 735 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: key_size_ >= kNumInternalBytes 9642: # 735 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 735 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "key_size_ >= kNumInternalBytes" 9642: # 735 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 735 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: if (ts) { 9642: 9642: # 737 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 737 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: key_size_ >= kNumInternalBytes + ts->size() 9642: # 737 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 737 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "key_size_ >= kNumInternalBytes + ts->size()" 9642: # 737 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 737 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: memcpy(&buf_[key_size_ - kNumInternalBytes - ts->size()], ts->data(), 9642: ts->size()); 9642: } 9642: uint64_t newval = (seq << 8) | t; 9642: EncodeFixed64(&buf_[key_size_ - kNumInternalBytes], newval); 9642: } 9642: 9642: bool IsKeyPinned() const { return (key_ != buf_); } 9642: 9642: 9642: 9642: 9642: void SetInternalKey(const Slice& key_prefix, const Slice& user_key, 9642: SequenceNumber s, 9642: ValueType value_type = kValueTypeForSeek, 9642: const Slice* ts = nullptr) { 9642: size_t psize = key_prefix.size(); 9642: size_t usize = user_key.size(); 9642: size_t ts_sz = (ts != nullptr ? ts->size() : 0); 9642: EnlargeBufferIfNeeded(psize + usize + sizeof(uint64_t) + ts_sz); 9642: if (psize > 0) { 9642: memcpy(buf_, key_prefix.data(), psize); 9642: } 9642: memcpy(buf_ + psize, user_key.data(), usize); 9642: if (ts) { 9642: memcpy(buf_ + psize + usize, ts->data(), ts_sz); 9642: } 9642: EncodeFixed64(buf_ + usize + psize + ts_sz, 9642: PackSequenceAndType(s, value_type)); 9642: 9642: key_ = buf_; 9642: key_size_ = psize + usize + sizeof(uint64_t) + ts_sz; 9642: is_user_key_ = false; 9642: } 9642: 9642: void SetInternalKey(const Slice& user_key, SequenceNumber s, 9642: ValueType value_type = kValueTypeForSeek, 9642: const Slice* ts = nullptr) { 9642: SetInternalKey(Slice(), user_key, s, value_type, ts); 9642: } 9642: 9642: void Reserve(size_t size) { 9642: EnlargeBufferIfNeeded(size); 9642: key_size_ = size; 9642: } 9642: 9642: void SetInternalKey(const ParsedInternalKey& parsed_key) { 9642: SetInternalKey(Slice(), parsed_key); 9642: } 9642: 9642: void SetInternalKey(const Slice& key_prefix, 9642: const ParsedInternalKey& parsed_key_suffix) { 9642: SetInternalKey(key_prefix, parsed_key_suffix.user_key, 9642: parsed_key_suffix.sequence, parsed_key_suffix.type); 9642: } 9642: 9642: void EncodeLengthPrefixedKey(const Slice& key) { 9642: auto size = key.size(); 9642: EnlargeBufferIfNeeded(size + static_cast(VarintLength(size))); 9642: char* ptr = EncodeVarint32(buf_, static_cast(size)); 9642: memcpy(ptr, key.data(), size); 9642: key_ = buf_; 9642: is_user_key_ = true; 9642: } 9642: 9642: bool IsUserKey() const { return is_user_key_; } 9642: 9642: private: 9642: char* buf_; 9642: const char* key_; 9642: size_t key_size_; 9642: size_t buf_size_; 9642: char space_[39]; 9642: bool is_user_key_; 9642: 9642: Slice SetKeyImpl(const Slice& key, bool copy) { 9642: size_t size = key.size(); 9642: if (copy) { 9642: 9642: EnlargeBufferIfNeeded(size); 9642: memcpy(buf_, key.data(), size); 9642: key_ = buf_; 9642: } else { 9642: 9642: key_ = key.data(); 9642: } 9642: key_size_ = size; 9642: return Slice(key_, key_size_); 9642: } 9642: 9642: void ResetBuffer() { 9642: if (buf_ != space_) { 9642: delete[] buf_; 9642: buf_ = space_; 9642: } 9642: buf_size_ = sizeof(space_); 9642: key_size_ = 0; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: void EnlargeBufferIfNeeded(size_t key_size) { 9642: 9642: 9642: if (key_size > buf_size_) { 9642: EnlargeBuffer(key_size); 9642: } 9642: } 9642: 9642: void EnlargeBuffer(size_t key_size); 9642: 9642: void MaybeAddKeyPartsWithTimestamp(const char* slice_data, 9642: const size_t slice_sz, bool add_timestamp, 9642: const size_t left_sz, 9642: const std::string& min_timestamp, 9642: std::vector& key_parts, 9642: bool* ts_added) { 9642: if (add_timestamp && !*ts_added) { 9642: 9642: # 859 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 859 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: slice_sz >= left_sz 9642: # 859 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 859 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "slice_sz >= left_sz" 9642: # 859 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 859 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: key_parts.emplace_back(slice_data, left_sz); 9642: key_parts.emplace_back(min_timestamp); 9642: key_parts.emplace_back(slice_data + left_sz, slice_sz - left_sz); 9642: *ts_added = true; 9642: } else { 9642: key_parts.emplace_back(slice_data, slice_sz); 9642: } 9642: } 9642: }; 9642: 9642: 9642: 9642: class InternalKeySliceTransform : public SliceTransform { 9642: public: 9642: explicit InternalKeySliceTransform(const SliceTransform* transform) 9642: : transform_(transform) {} 9642: 9642: const char* Name() const override { return transform_->Name(); } 9642: 9642: Slice Transform(const Slice& src) const override { 9642: auto user_key = ExtractUserKey(src); 9642: return transform_->Transform(user_key); 9642: } 9642: 9642: bool InDomain(const Slice& src) const override { 9642: auto user_key = ExtractUserKey(src); 9642: return transform_->InDomain(user_key); 9642: } 9642: 9642: bool InRange(const Slice& dst) const override { 9642: auto user_key = ExtractUserKey(dst); 9642: return transform_->InRange(user_key); 9642: } 9642: 9642: const SliceTransform* user_prefix_extractor() const { return transform_; } 9642: 9642: private: 9642: 9642: 9642: const SliceTransform* const transform_; 9642: }; 9642: 9642: 9642: 9642: 9642: bool ReadKeyFromWriteBatchEntry(Slice* input, Slice* key, bool cf_record); 9642: # 914 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: Status ReadRecordFromWriteBatch(Slice* input, char* tag, 9642: uint32_t* column_family, Slice* key, 9642: Slice* value, Slice* blob, Slice* xid, 9642: uint64_t* write_unix_time); 9642: 9642: 9642: 9642: 9642: 9642: struct RangeTombstone { 9642: Slice start_key_; 9642: Slice end_key_; 9642: SequenceNumber seq_; 9642: 9642: 9642: Slice ts_; 9642: std::string pinned_start_key_; 9642: std::string pinned_end_key_; 9642: 9642: RangeTombstone() = default; 9642: RangeTombstone(Slice sk, Slice ek, SequenceNumber sn) 9642: : start_key_(sk), end_key_(ek), seq_(sn) {} 9642: 9642: 9642: 9642: 9642: 9642: 9642: RangeTombstone(Slice sk, Slice ek, SequenceNumber sn, Slice ts, 9642: bool logical_strip_timestamp) 9642: : seq_(sn) { 9642: const size_t ts_sz = ts.size(); 9642: 9642: # 946 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: (static_cast ( 9642: # 946 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ts_sz > 0 9642: # 946 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 946 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: "ts_sz > 0" 9642: # 946 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 946 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: ; 9642: pinned_start_key_.reserve(sk.size()); 9642: pinned_end_key_.reserve(ek.size()); 9642: if (logical_strip_timestamp) { 9642: AppendUserKeyWithMinTimestamp(&pinned_start_key_, sk, ts_sz); 9642: AppendUserKeyWithMinTimestamp(&pinned_end_key_, ek, ts_sz); 9642: } else { 9642: AppendUserKeyWithDifferentTimestamp(&pinned_start_key_, sk, ts); 9642: AppendUserKeyWithDifferentTimestamp(&pinned_end_key_, ek, ts); 9642: } 9642: start_key_ = pinned_start_key_; 9642: end_key_ = pinned_end_key_; 9642: ts_ = Slice(pinned_start_key_.data() + sk.size() - ts_sz, ts_sz); 9642: } 9642: 9642: RangeTombstone(ParsedInternalKey parsed_key, Slice value) { 9642: start_key_ = parsed_key.user_key; 9642: seq_ = parsed_key.sequence; 9642: end_key_ = value; 9642: } 9642: 9642: 9642: std::pair Serialize() const { 9642: auto key = InternalKey(start_key_, seq_, kTypeRangeDeletion); 9642: return std::make_pair(std::move(key), end_key_); 9642: } 9642: 9642: 9642: InternalKey SerializeKey() const { 9642: return InternalKey(start_key_, seq_, kTypeRangeDeletion); 9642: } 9642: # 985 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 9642: InternalKey SerializeEndKey() const { 9642: if (!ts_.empty()) { 9642: static constexpr char kTsMax[] = "\xff\xff\xff\xff\xff\xff\xff\xff\xff"; 9642: if (ts_.size() <= strlen(kTsMax)) { 9642: return InternalKey(end_key_, kMaxSequenceNumber, kTypeRangeDeletion, 9642: Slice(kTsMax, ts_.size())); 9642: } else { 9642: return InternalKey(end_key_, kMaxSequenceNumber, kTypeRangeDeletion, 9642: std::string(ts_.size(), '\xff')); 9642: } 9642: } 9642: return InternalKey(end_key_, kMaxSequenceNumber, kTypeRangeDeletion); 9642: } 9642: }; 9642: 9642: inline int InternalKeyComparator::Compare(const Slice& akey, 9642: const Slice& bkey) const { 9642: 9642: 9642: 9642: 9642: int r = user_comparator_.Compare(ExtractUserKey(akey), ExtractUserKey(bkey)); 9642: if (r == 0) { 9642: const uint64_t anum = 9642: DecodeFixed64(akey.data() + akey.size() - kNumInternalBytes); 9642: const uint64_t bnum = 9642: DecodeFixed64(bkey.data() + bkey.size() - kNumInternalBytes); 9642: if (anum > bnum) { 9642: r = -1; 9642: } else if (anum < bnum) { 9642: r = +1; 9642: } 9642: } 9642: return r; 9642: } 9642: 9642: inline int InternalKeyComparator::CompareKeySeq(const Slice& akey, 9642: const Slice& bkey) const { 9642: 9642: 9642: 9642: int r = user_comparator_.Compare(ExtractUserKey(akey), ExtractUserKey(bkey)); 9642: if (r == 0) { 9642: 9642: const uint64_t anum = 9642: DecodeFixed64(akey.data() + akey.size() - kNumInternalBytes) >> 8; 9642: const uint64_t bnum = 9642: DecodeFixed64(bkey.data() + bkey.size() - kNumInternalBytes) >> 8; 9642: if (anum > bnum) { 9642: r = -1; 9642: } else if (anum < bnum) { 9642: r = +1; 9642: } 9642: } 9642: return r; 9642: } 9642: 9642: inline int InternalKeyComparator::CompareKeySeq(const ParsedInternalKey& a, 9642: const Slice& b) const { 9642: 9642: 9642: 9642: int r = user_comparator_.Compare(a.user_key, ExtractUserKey(b)); 9642: if (r == 0) { 9642: 9642: const uint64_t anum = a.sequence; 9642: const uint64_t bnum = 9642: DecodeFixed64(b.data() + b.size() - kNumInternalBytes) >> 8; 9642: if (anum > bnum) { 9642: r = -1; 9642: } else if (anum < bnum) { 9642: r = +1; 9642: } 9642: } 9642: return r; 9642: } 9642: 9642: inline int InternalKeyComparator::Compare(const Slice& a, 9642: SequenceNumber a_global_seqno, 9642: const Slice& b, 9642: SequenceNumber b_global_seqno) const { 9642: int r = user_comparator_.Compare(ExtractUserKey(a), ExtractUserKey(b)); 9642: if (r == 0) { 9642: uint64_t a_footer, b_footer; 9642: if (a_global_seqno == kDisableGlobalSequenceNumber) { 9642: a_footer = ExtractInternalKeyFooter(a); 9642: } else { 9642: a_footer = PackSequenceAndType(a_global_seqno, ExtractValueType(a)); 9642: } 9642: if (b_global_seqno == kDisableGlobalSequenceNumber) { 9642: b_footer = ExtractInternalKeyFooter(b); 9642: } else { 9642: b_footer = PackSequenceAndType(b_global_seqno, ExtractValueType(b)); 9642: } 9642: if (a_footer > b_footer) { 9642: r = -1; 9642: } else if (a_footer < b_footer) { 9642: r = +1; 9642: } 9642: } 9642: return r; 9642: } 9642: 9642: 9642: struct ParsedInternalKeyComparator { 9642: explicit ParsedInternalKeyComparator(const InternalKeyComparator* c) 9642: : cmp(c) {} 9642: 9642: bool operator()(const ParsedInternalKey& a, 9642: const ParsedInternalKey& b) const { 9642: return cmp->Compare(a, b) < 0; 9642: } 9642: 9642: const InternalKeyComparator* cmp; 9642: }; 9642: 9642: } 9642: # 20 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 1 9642: # 31 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: template 9642: class ProtectionInfo; 9642: template 9642: class ProtectionInfoKVO; 9642: template 9642: class ProtectionInfoKVOC; 9642: template 9642: class ProtectionInfoKVOS; 9642: template 9642: class ProtectionInfoKV; 9642: 9642: 9642: using ProtectionInfo64 = ProtectionInfo; 9642: using ProtectionInfoKVO64 = ProtectionInfoKVO; 9642: using ProtectionInfoKVOC64 = ProtectionInfoKVOC; 9642: using ProtectionInfoKVOS64 = ProtectionInfoKVOS; 9642: 9642: template 9642: class ProtectionInfo { 9642: public: 9642: ProtectionInfo() = default; 9642: 9642: Status GetStatus() const; 9642: ProtectionInfoKVO ProtectKVO(const Slice& key, const Slice& value, 9642: ValueType op_type) const; 9642: ProtectionInfoKVO ProtectKVO(const SliceParts& key, 9642: const SliceParts& value, 9642: ValueType op_type) const; 9642: ProtectionInfoKV ProtectKV(const Slice& key, const Slice& value) const; 9642: 9642: private: 9642: friend class ProtectionInfoKVO; 9642: friend class ProtectionInfoKVOS; 9642: friend class ProtectionInfoKVOC; 9642: friend class ProtectionInfoKV; 9642: # 84 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 9642: static const uint64_t kSeedK = 0; 9642: static const uint64_t kSeedV = 0xD28AAD72F49BD50B; 9642: static const uint64_t kSeedO = 0xA5155AE5E937AA16; 9642: static const uint64_t kSeedS = 0x77A00858DDD37F21; 9642: static const uint64_t kSeedC = 0x4A2AB5CBD26F542C; 9642: 9642: ProtectionInfo(T val) : val_(val) { 9642: static_assert(sizeof(ProtectionInfo) == sizeof(T), ""); 9642: } 9642: 9642: T GetVal() const { return val_; } 9642: void SetVal(T val) { val_ = val; } 9642: 9642: void Encode(uint8_t len, char* dst) const { 9642: 9642: # 98 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 9642: (static_cast ( 9642: # 98 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 9642: sizeof(val_) >= len 9642: # 98 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 98 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 9642: "sizeof(val_) >= len" 9642: # 98 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 98 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 9642: ; 9642: switch (len) { 9642: case 1: 9642: dst[0] = static_cast(val_); 9642: break; 9642: case 2: 9642: EncodeFixed16(dst, static_cast(val_)); 9642: break; 9642: case 4: 9642: EncodeFixed32(dst, static_cast(val_)); 9642: break; 9642: case 8: 9642: EncodeFixed64(dst, static_cast(val_)); 9642: break; 9642: default: 9642: 9642: # 113 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 9642: (static_cast ( 9642: # 113 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 9642: false 9642: # 113 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 113 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 9642: "false" 9642: # 113 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 113 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 9642: ; 9642: } 9642: } 9642: 9642: bool Verify(uint8_t len, const char* checksum_ptr) const { 9642: 9642: # 118 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 9642: (static_cast ( 9642: # 118 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 9642: sizeof(val_) >= len 9642: # 118 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 118 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 9642: "sizeof(val_) >= len" 9642: # 118 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 118 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 9642: ; 9642: switch (len) { 9642: case 1: 9642: return static_cast(checksum_ptr[0]) == 9642: static_cast(val_); 9642: case 2: 9642: return DecodeFixed16(checksum_ptr) == static_cast(val_); 9642: case 4: 9642: return DecodeFixed32(checksum_ptr) == static_cast(val_); 9642: case 8: 9642: return DecodeFixed64(checksum_ptr) == static_cast(val_); 9642: default: 9642: 9642: # 130 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 9642: (static_cast ( 9642: # 130 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 9642: false 9642: # 130 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 130 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 9642: "false" 9642: # 130 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 130 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 9642: ; 9642: return false; 9642: } 9642: } 9642: 9642: T val_ = 0; 9642: }; 9642: 9642: template 9642: class ProtectionInfoKVO { 9642: public: 9642: ProtectionInfoKVO() = default; 9642: 9642: ProtectionInfo StripKVO(const Slice& key, const Slice& value, 9642: ValueType op_type) const; 9642: ProtectionInfo StripKVO(const SliceParts& key, const SliceParts& value, 9642: ValueType op_type) const; 9642: 9642: ProtectionInfoKVOC ProtectC(ColumnFamilyId column_family_id) const; 9642: ProtectionInfoKVOS ProtectS(SequenceNumber sequence_number) const; 9642: 9642: void UpdateK(const Slice& old_key, const Slice& new_key); 9642: void UpdateK(const SliceParts& old_key, const SliceParts& new_key); 9642: void UpdateV(const Slice& old_value, const Slice& new_value); 9642: void UpdateV(const SliceParts& old_value, const SliceParts& new_value); 9642: void UpdateO(ValueType old_op_type, ValueType new_op_type); 9642: 9642: 9642: void Encode(uint8_t len, char* dst) const { info_.Encode(len, dst); } 9642: 9642: 9642: 9642: bool Verify(uint8_t len, const char* checksum_ptr) const { 9642: return info_.Verify(len, checksum_ptr); 9642: } 9642: 9642: private: 9642: friend class ProtectionInfo; 9642: friend class ProtectionInfoKVOS; 9642: friend class ProtectionInfoKVOC; 9642: 9642: explicit ProtectionInfoKVO(T val) : info_(val) { 9642: static_assert(sizeof(ProtectionInfoKVO) == sizeof(T), ""); 9642: } 9642: 9642: T GetVal() const { return info_.GetVal(); } 9642: void SetVal(T val) { info_.SetVal(val); } 9642: 9642: ProtectionInfo info_; 9642: }; 9642: 9642: template 9642: class ProtectionInfoKVOC { 9642: public: 9642: ProtectionInfoKVOC() = default; 9642: 9642: ProtectionInfoKVO StripC(ColumnFamilyId column_family_id) const; 9642: 9642: void UpdateK(const Slice& old_key, const Slice& new_key) { 9642: kvo_.UpdateK(old_key, new_key); 9642: } 9642: void UpdateK(const SliceParts& old_key, const SliceParts& new_key) { 9642: kvo_.UpdateK(old_key, new_key); 9642: } 9642: void UpdateV(const Slice& old_value, const Slice& new_value) { 9642: kvo_.UpdateV(old_value, new_value); 9642: } 9642: void UpdateV(const SliceParts& old_value, const SliceParts& new_value) { 9642: kvo_.UpdateV(old_value, new_value); 9642: } 9642: void UpdateO(ValueType old_op_type, ValueType new_op_type) { 9642: kvo_.UpdateO(old_op_type, new_op_type); 9642: } 9642: void UpdateC(ColumnFamilyId old_column_family_id, 9642: ColumnFamilyId new_column_family_id); 9642: 9642: void Encode(uint8_t len, char* dst) const { kvo_.Encode(len, dst); } 9642: bool Verify(uint8_t len, const char* checksum_ptr) const { 9642: return kvo_.Verify(len, checksum_ptr); 9642: } 9642: 9642: private: 9642: friend class ProtectionInfoKVO; 9642: 9642: explicit ProtectionInfoKVOC(T val) : kvo_(val) { 9642: static_assert(sizeof(ProtectionInfoKVOC) == sizeof(T), ""); 9642: } 9642: 9642: T GetVal() const { return kvo_.GetVal(); } 9642: void SetVal(T val) { kvo_.SetVal(val); } 9642: 9642: ProtectionInfoKVO kvo_; 9642: }; 9642: 9642: template 9642: class ProtectionInfoKVOS { 9642: public: 9642: ProtectionInfoKVOS() = default; 9642: 9642: ProtectionInfoKVO StripS(SequenceNumber sequence_number) const; 9642: 9642: void UpdateK(const Slice& old_key, const Slice& new_key) { 9642: kvo_.UpdateK(old_key, new_key); 9642: } 9642: void UpdateK(const SliceParts& old_key, const SliceParts& new_key) { 9642: kvo_.UpdateK(old_key, new_key); 9642: } 9642: void UpdateV(const Slice& old_value, const Slice& new_value) { 9642: kvo_.UpdateV(old_value, new_value); 9642: } 9642: void UpdateV(const SliceParts& old_value, const SliceParts& new_value) { 9642: kvo_.UpdateV(old_value, new_value); 9642: } 9642: void UpdateO(ValueType old_op_type, ValueType new_op_type) { 9642: kvo_.UpdateO(old_op_type, new_op_type); 9642: } 9642: void UpdateS(SequenceNumber old_sequence_number, 9642: SequenceNumber new_sequence_number); 9642: 9642: void Encode(uint8_t len, char* dst) const { kvo_.Encode(len, dst); } 9642: bool Verify(uint8_t len, const char* checksum_ptr) const { 9642: return kvo_.Verify(len, checksum_ptr); 9642: } 9642: 9642: private: 9642: friend class ProtectionInfoKVO; 9642: 9642: explicit ProtectionInfoKVOS(T val) : kvo_(val) { 9642: static_assert(sizeof(ProtectionInfoKVOS) == sizeof(T), ""); 9642: } 9642: 9642: T GetVal() const { return kvo_.GetVal(); } 9642: void SetVal(T val) { kvo_.SetVal(val); } 9642: 9642: ProtectionInfoKVO kvo_; 9642: }; 9642: 9642: template 9642: class ProtectionInfoKV { 9642: public: 9642: ProtectionInfoKV() = default; 9642: 9642: void Encode(uint8_t len, char* dst) const { info_.Encode(len, dst); } 9642: bool Verify(uint8_t len, const char* checksum_ptr) const { 9642: return info_.Verify(len, checksum_ptr); 9642: } 9642: 9642: private: 9642: friend class ProtectionInfo; 9642: 9642: explicit ProtectionInfoKV(T val) : info_(val) { 9642: static_assert(sizeof(ProtectionInfoKV) == sizeof(T)); 9642: } 9642: 9642: ProtectionInfo info_; 9642: }; 9642: 9642: template 9642: Status ProtectionInfo::GetStatus() const { 9642: if (val_ != 0) { 9642: return Status::Corruption("ProtectionInfo mismatch"); 9642: } 9642: return Status::OK(); 9642: } 9642: 9642: template 9642: ProtectionInfoKVO ProtectionInfo::ProtectKVO(const Slice& key, 9642: const Slice& value, 9642: ValueType op_type) const { 9642: T val = GetVal(); 9642: val = val ^ static_cast(GetSliceNPHash64(key, ProtectionInfo::kSeedK)); 9642: val = 9642: val ^ static_cast(GetSliceNPHash64(value, ProtectionInfo::kSeedV)); 9642: val = val ^ 9642: static_cast(NPHash64(reinterpret_cast(&op_type), 9642: sizeof(op_type), ProtectionInfo::kSeedO)); 9642: return ProtectionInfoKVO(val); 9642: } 9642: 9642: template 9642: ProtectionInfoKVO ProtectionInfo::ProtectKVO(const SliceParts& key, 9642: const SliceParts& value, 9642: ValueType op_type) const { 9642: T val = GetVal(); 9642: val = val ^ 9642: static_cast(GetSlicePartsNPHash64(key, ProtectionInfo::kSeedK)); 9642: val = val ^ 9642: static_cast(GetSlicePartsNPHash64(value, ProtectionInfo::kSeedV)); 9642: val = val ^ 9642: static_cast(NPHash64(reinterpret_cast(&op_type), 9642: sizeof(op_type), ProtectionInfo::kSeedO)); 9642: return ProtectionInfoKVO(val); 9642: } 9642: 9642: template 9642: ProtectionInfoKV ProtectionInfo::ProtectKV(const Slice& key, 9642: const Slice& value) const { 9642: T val = GetVal(); 9642: val = val ^ static_cast(GetSliceNPHash64(key, ProtectionInfo::kSeedK)); 9642: val = 9642: val ^ static_cast(GetSliceNPHash64(value, ProtectionInfo::kSeedV)); 9642: return ProtectionInfoKV(val); 9642: } 9642: 9642: template 9642: void ProtectionInfoKVO::UpdateK(const Slice& old_key, const Slice& new_key) { 9642: T val = GetVal(); 9642: val = val ^ 9642: static_cast(GetSliceNPHash64(old_key, ProtectionInfo::kSeedK)); 9642: val = val ^ 9642: static_cast(GetSliceNPHash64(new_key, ProtectionInfo::kSeedK)); 9642: SetVal(val); 9642: } 9642: 9642: template 9642: void ProtectionInfoKVO::UpdateK(const SliceParts& old_key, 9642: const SliceParts& new_key) { 9642: T val = GetVal(); 9642: val = val ^ static_cast( 9642: GetSlicePartsNPHash64(old_key, ProtectionInfo::kSeedK)); 9642: val = val ^ static_cast( 9642: GetSlicePartsNPHash64(new_key, ProtectionInfo::kSeedK)); 9642: SetVal(val); 9642: } 9642: 9642: template 9642: void ProtectionInfoKVO::UpdateV(const Slice& old_value, 9642: const Slice& new_value) { 9642: T val = GetVal(); 9642: val = val ^ 9642: static_cast(GetSliceNPHash64(old_value, ProtectionInfo::kSeedV)); 9642: val = val ^ 9642: static_cast(GetSliceNPHash64(new_value, ProtectionInfo::kSeedV)); 9642: SetVal(val); 9642: } 9642: 9642: template 9642: void ProtectionInfoKVO::UpdateV(const SliceParts& old_value, 9642: const SliceParts& new_value) { 9642: T val = GetVal(); 9642: val = val ^ static_cast( 9642: GetSlicePartsNPHash64(old_value, ProtectionInfo::kSeedV)); 9642: val = val ^ static_cast( 9642: GetSlicePartsNPHash64(new_value, ProtectionInfo::kSeedV)); 9642: SetVal(val); 9642: } 9642: 9642: template 9642: void ProtectionInfoKVO::UpdateO(ValueType old_op_type, 9642: ValueType new_op_type) { 9642: T val = GetVal(); 9642: val = val ^ static_cast(NPHash64(reinterpret_cast(&old_op_type), 9642: sizeof(old_op_type), 9642: ProtectionInfo::kSeedO)); 9642: val = val ^ static_cast(NPHash64(reinterpret_cast(&new_op_type), 9642: sizeof(new_op_type), 9642: ProtectionInfo::kSeedO)); 9642: SetVal(val); 9642: } 9642: 9642: template 9642: ProtectionInfo ProtectionInfoKVO::StripKVO(const Slice& key, 9642: const Slice& value, 9642: ValueType op_type) const { 9642: T val = GetVal(); 9642: val = val ^ static_cast(GetSliceNPHash64(key, ProtectionInfo::kSeedK)); 9642: val = 9642: val ^ static_cast(GetSliceNPHash64(value, ProtectionInfo::kSeedV)); 9642: val = val ^ 9642: static_cast(NPHash64(reinterpret_cast(&op_type), 9642: sizeof(op_type), ProtectionInfo::kSeedO)); 9642: return ProtectionInfo(val); 9642: } 9642: 9642: template 9642: ProtectionInfo ProtectionInfoKVO::StripKVO(const SliceParts& key, 9642: const SliceParts& value, 9642: ValueType op_type) const { 9642: T val = GetVal(); 9642: val = val ^ 9642: static_cast(GetSlicePartsNPHash64(key, ProtectionInfo::kSeedK)); 9642: val = val ^ 9642: static_cast(GetSlicePartsNPHash64(value, ProtectionInfo::kSeedV)); 9642: val = val ^ 9642: static_cast(NPHash64(reinterpret_cast(&op_type), 9642: sizeof(op_type), ProtectionInfo::kSeedO)); 9642: return ProtectionInfo(val); 9642: } 9642: 9642: template 9642: ProtectionInfoKVOC ProtectionInfoKVO::ProtectC( 9642: ColumnFamilyId column_family_id) const { 9642: T val = GetVal(); 9642: val = val ^ static_cast(NPHash64( 9642: reinterpret_cast(&column_family_id), 9642: sizeof(column_family_id), ProtectionInfo::kSeedC)); 9642: return ProtectionInfoKVOC(val); 9642: } 9642: 9642: template 9642: ProtectionInfoKVO ProtectionInfoKVOC::StripC( 9642: ColumnFamilyId column_family_id) const { 9642: T val = GetVal(); 9642: val = val ^ static_cast(NPHash64( 9642: reinterpret_cast(&column_family_id), 9642: sizeof(column_family_id), ProtectionInfo::kSeedC)); 9642: return ProtectionInfoKVO(val); 9642: } 9642: 9642: template 9642: void ProtectionInfoKVOC::UpdateC(ColumnFamilyId old_column_family_id, 9642: ColumnFamilyId new_column_family_id) { 9642: T val = GetVal(); 9642: val = val ^ static_cast(NPHash64( 9642: reinterpret_cast(&old_column_family_id), 9642: sizeof(old_column_family_id), ProtectionInfo::kSeedC)); 9642: val = val ^ static_cast(NPHash64( 9642: reinterpret_cast(&new_column_family_id), 9642: sizeof(new_column_family_id), ProtectionInfo::kSeedC)); 9642: SetVal(val); 9642: } 9642: 9642: template 9642: ProtectionInfoKVOS ProtectionInfoKVO::ProtectS( 9642: SequenceNumber sequence_number) const { 9642: T val = GetVal(); 9642: val = val ^ static_cast(NPHash64(reinterpret_cast(&sequence_number), 9642: sizeof(sequence_number), 9642: ProtectionInfo::kSeedS)); 9642: return ProtectionInfoKVOS(val); 9642: } 9642: 9642: template 9642: ProtectionInfoKVO ProtectionInfoKVOS::StripS( 9642: SequenceNumber sequence_number) const { 9642: T val = GetVal(); 9642: val = val ^ static_cast(NPHash64(reinterpret_cast(&sequence_number), 9642: sizeof(sequence_number), 9642: ProtectionInfo::kSeedS)); 9642: return ProtectionInfoKVO(val); 9642: } 9642: 9642: template 9642: void ProtectionInfoKVOS::UpdateS(SequenceNumber old_sequence_number, 9642: SequenceNumber new_sequence_number) { 9642: T val = GetVal(); 9642: val = val ^ static_cast(NPHash64( 9642: reinterpret_cast(&old_sequence_number), 9642: sizeof(old_sequence_number), ProtectionInfo::kSeedS)); 9642: val = val ^ static_cast(NPHash64( 9642: reinterpret_cast(&new_sequence_number), 9642: sizeof(new_sequence_number), ProtectionInfo::kSeedS)); 9642: SetVal(val); 9642: } 9642: } 9642: # 21 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/list" 1 3 9642: # 58 "/usr/include/c++/13/list" 3 9642: 9642: # 59 "/usr/include/c++/13/list" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/stl_list.h" 1 3 9642: # 68 "/usr/include/c++/13/bits/stl_list.h" 3 9642: 9642: # 68 "/usr/include/c++/13/bits/stl_list.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: namespace __detail 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct _List_node_base 9642: { 9642: _List_node_base* _M_next; 9642: _List_node_base* _M_prev; 9642: 9642: static void 9642: swap(_List_node_base& __x, _List_node_base& __y) noexcept; 9642: 9642: void 9642: _M_transfer(_List_node_base* const __first, 9642: _List_node_base* const __last) noexcept; 9642: 9642: void 9642: _M_reverse() noexcept; 9642: 9642: void 9642: _M_hook(_List_node_base* const __position) noexcept; 9642: 9642: void 9642: _M_unhook() noexcept; 9642: }; 9642: 9642: 9642: struct _List_node_header : public _List_node_base 9642: { 9642: 9642: std::size_t _M_size; 9642: 9642: 9642: _List_node_header() noexcept 9642: { _M_init(); } 9642: 9642: 9642: _List_node_header(_List_node_header&& __x) noexcept 9642: : _List_node_base{ __x._M_next, __x._M_prev } 9642: 9642: , _M_size(__x._M_size) 9642: 9642: { 9642: if (__x._M_base()->_M_next == __x._M_base()) 9642: this->_M_next = this->_M_prev = this; 9642: else 9642: { 9642: this->_M_next->_M_prev = this->_M_prev->_M_next = this->_M_base(); 9642: __x._M_init(); 9642: } 9642: } 9642: 9642: void 9642: _M_move_nodes(_List_node_header&& __x) 9642: { 9642: _List_node_base* const __xnode = __x._M_base(); 9642: if (__xnode->_M_next == __xnode) 9642: _M_init(); 9642: else 9642: { 9642: _List_node_base* const __node = this->_M_base(); 9642: __node->_M_next = __xnode->_M_next; 9642: __node->_M_prev = __xnode->_M_prev; 9642: __node->_M_next->_M_prev = __node->_M_prev->_M_next = __node; 9642: 9642: _M_size = __x._M_size; 9642: 9642: __x._M_init(); 9642: } 9642: } 9642: 9642: 9642: void 9642: _M_init() noexcept 9642: { 9642: this->_M_next = this->_M_prev = this; 9642: 9642: this->_M_size = 0; 9642: 9642: } 9642: 9642: private: 9642: _List_node_base* _M_base() { return this; } 9642: }; 9642: 9642: 9642: struct _Scratch_list : _List_node_base 9642: { 9642: _Scratch_list() { _M_next = _M_prev = this; } 9642: 9642: bool empty() const { return _M_next == this; } 9642: 9642: void swap(_List_node_base& __l) { _List_node_base::swap(*this, __l); } 9642: 9642: template 9642: struct _Ptr_cmp 9642: { 9642: _Cmp _M_cmp; 9642: 9642: bool 9642: operator()(__detail::_List_node_base* __lhs, 9642: __detail::_List_node_base* __rhs) 9642: { return _M_cmp(*_Iter(__lhs), *_Iter(__rhs)); } 9642: }; 9642: 9642: template 9642: struct _Ptr_cmp<_Iter, void> 9642: { 9642: bool 9642: operator()(__detail::_List_node_base* __lhs, 9642: __detail::_List_node_base* __rhs) const 9642: { return *_Iter(__lhs) < *_Iter(__rhs); } 9642: }; 9642: 9642: 9642: template 9642: void 9642: merge(_List_node_base& __x, _Cmp __comp) 9642: { 9642: _List_node_base* __first1 = _M_next; 9642: _List_node_base* const __last1 = this; 9642: _List_node_base* __first2 = __x._M_next; 9642: _List_node_base* const __last2 = std::__addressof(__x); 9642: 9642: while (__first1 != __last1 && __first2 != __last2) 9642: { 9642: if (__comp(__first2, __first1)) 9642: { 9642: _List_node_base* __next = __first2->_M_next; 9642: __first1->_M_transfer(__first2, __next); 9642: __first2 = __next; 9642: } 9642: else 9642: __first1 = __first1->_M_next; 9642: } 9642: if (__first2 != __last2) 9642: this->_M_transfer(__first2, __last2); 9642: } 9642: 9642: 9642: void _M_take_one(_List_node_base* __i) 9642: { this->_M_transfer(__i, __i->_M_next); } 9642: 9642: 9642: void _M_put_all(_List_node_base* __i) 9642: { 9642: if (!empty()) 9642: __i->_M_transfer(_M_next, this); 9642: } 9642: }; 9642: 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: struct _List_node : public __detail::_List_node_base 9642: { 9642: 9642: __gnu_cxx::__aligned_membuf<_Tp> _M_storage; 9642: _Tp* _M_valptr() { return _M_storage._M_ptr(); } 9642: _Tp const* _M_valptr() const { return _M_storage._M_ptr(); } 9642: 9642: 9642: 9642: 9642: 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _List_iterator 9642: { 9642: typedef _List_iterator<_Tp> _Self; 9642: typedef _List_node<_Tp> _Node; 9642: 9642: typedef ptrdiff_t difference_type; 9642: typedef std::bidirectional_iterator_tag iterator_category; 9642: typedef _Tp value_type; 9642: typedef _Tp* pointer; 9642: typedef _Tp& reference; 9642: 9642: _List_iterator() noexcept 9642: : _M_node() { } 9642: 9642: explicit 9642: _List_iterator(__detail::_List_node_base* __x) noexcept 9642: : _M_node(__x) { } 9642: 9642: _Self 9642: _M_const_cast() const noexcept 9642: { return *this; } 9642: 9642: 9642: [[__nodiscard__]] 9642: reference 9642: operator*() const noexcept 9642: { return *static_cast<_Node*>(_M_node)->_M_valptr(); } 9642: 9642: [[__nodiscard__]] 9642: pointer 9642: operator->() const noexcept 9642: { return static_cast<_Node*>(_M_node)->_M_valptr(); } 9642: 9642: _Self& 9642: operator++() noexcept 9642: { 9642: _M_node = _M_node->_M_next; 9642: return *this; 9642: } 9642: 9642: _Self 9642: operator++(int) noexcept 9642: { 9642: _Self __tmp = *this; 9642: _M_node = _M_node->_M_next; 9642: return __tmp; 9642: } 9642: 9642: _Self& 9642: operator--() noexcept 9642: { 9642: _M_node = _M_node->_M_prev; 9642: return *this; 9642: } 9642: 9642: _Self 9642: operator--(int) noexcept 9642: { 9642: _Self __tmp = *this; 9642: _M_node = _M_node->_M_prev; 9642: return __tmp; 9642: } 9642: 9642: [[__nodiscard__]] 9642: friend bool 9642: operator==(const _Self& __x, const _Self& __y) noexcept 9642: { return __x._M_node == __y._M_node; } 9642: 9642: 9642: [[__nodiscard__]] 9642: friend bool 9642: operator!=(const _Self& __x, const _Self& __y) noexcept 9642: { return __x._M_node != __y._M_node; } 9642: 9642: 9642: 9642: __detail::_List_node_base* _M_node; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _List_const_iterator 9642: { 9642: typedef _List_const_iterator<_Tp> _Self; 9642: typedef const _List_node<_Tp> _Node; 9642: typedef _List_iterator<_Tp> iterator; 9642: 9642: typedef ptrdiff_t difference_type; 9642: typedef std::bidirectional_iterator_tag iterator_category; 9642: typedef _Tp value_type; 9642: typedef const _Tp* pointer; 9642: typedef const _Tp& reference; 9642: 9642: _List_const_iterator() noexcept 9642: : _M_node() { } 9642: 9642: explicit 9642: _List_const_iterator(const __detail::_List_node_base* __x) 9642: noexcept 9642: : _M_node(__x) { } 9642: 9642: _List_const_iterator(const iterator& __x) noexcept 9642: : _M_node(__x._M_node) { } 9642: 9642: iterator 9642: _M_const_cast() const noexcept 9642: { return iterator(const_cast<__detail::_List_node_base*>(_M_node)); } 9642: 9642: 9642: [[__nodiscard__]] 9642: reference 9642: operator*() const noexcept 9642: { return *static_cast<_Node*>(_M_node)->_M_valptr(); } 9642: 9642: [[__nodiscard__]] 9642: pointer 9642: operator->() const noexcept 9642: { return static_cast<_Node*>(_M_node)->_M_valptr(); } 9642: 9642: _Self& 9642: operator++() noexcept 9642: { 9642: _M_node = _M_node->_M_next; 9642: return *this; 9642: } 9642: 9642: _Self 9642: operator++(int) noexcept 9642: { 9642: _Self __tmp = *this; 9642: _M_node = _M_node->_M_next; 9642: return __tmp; 9642: } 9642: 9642: _Self& 9642: operator--() noexcept 9642: { 9642: _M_node = _M_node->_M_prev; 9642: return *this; 9642: } 9642: 9642: _Self 9642: operator--(int) noexcept 9642: { 9642: _Self __tmp = *this; 9642: _M_node = _M_node->_M_prev; 9642: return __tmp; 9642: } 9642: 9642: [[__nodiscard__]] 9642: friend bool 9642: operator==(const _Self& __x, const _Self& __y) noexcept 9642: { return __x._M_node == __y._M_node; } 9642: 9642: 9642: [[__nodiscard__]] 9642: friend bool 9642: operator!=(const _Self& __x, const _Self& __y) noexcept 9642: { return __x._M_node != __y._M_node; } 9642: 9642: 9642: 9642: const __detail::_List_node_base* _M_node; 9642: }; 9642: 9642: namespace __cxx11 { 9642: 9642: template 9642: class _List_base 9642: { 9642: protected: 9642: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 9642: rebind<_Tp>::other _Tp_alloc_type; 9642: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tp_alloc_traits; 9642: typedef typename _Tp_alloc_traits::template 9642: rebind<_List_node<_Tp> >::other _Node_alloc_type; 9642: typedef __gnu_cxx::__alloc_traits<_Node_alloc_type> _Node_alloc_traits; 9642: 9642: 9642: static size_t 9642: _S_distance(const __detail::_List_node_base* __first, 9642: const __detail::_List_node_base* __last) 9642: { 9642: size_t __n = 0; 9642: while (__first != __last) 9642: { 9642: __first = __first->_M_next; 9642: ++__n; 9642: } 9642: return __n; 9642: } 9642: 9642: 9642: struct _List_impl 9642: : public _Node_alloc_type 9642: { 9642: __detail::_List_node_header _M_node; 9642: 9642: _List_impl() noexcept(is_nothrow_default_constructible<_Node_alloc_type>::value) 9642: 9642: : _Node_alloc_type() 9642: { } 9642: 9642: _List_impl(const _Node_alloc_type& __a) noexcept 9642: : _Node_alloc_type(__a) 9642: { } 9642: 9642: 9642: _List_impl(_List_impl&&) = default; 9642: 9642: _List_impl(_Node_alloc_type&& __a, _List_impl&& __x) 9642: : _Node_alloc_type(std::move(__a)), _M_node(std::move(__x._M_node)) 9642: { } 9642: 9642: _List_impl(_Node_alloc_type&& __a) noexcept 9642: : _Node_alloc_type(std::move(__a)) 9642: { } 9642: 9642: }; 9642: 9642: _List_impl _M_impl; 9642: 9642: 9642: size_t _M_get_size() const { return _M_impl._M_node._M_size; } 9642: 9642: void _M_set_size(size_t __n) { _M_impl._M_node._M_size = __n; } 9642: 9642: void _M_inc_size(size_t __n) { _M_impl._M_node._M_size += __n; } 9642: 9642: void _M_dec_size(size_t __n) { _M_impl._M_node._M_size -= __n; } 9642: 9642: 9642: size_t 9642: _M_distance(const __detail::_List_node_base* __first, 9642: const __detail::_List_node_base* __last) const 9642: { return _S_distance(__first, __last); } 9642: 9642: 9642: size_t _M_node_count() const { return _M_get_size(); } 9642: # 516 "/usr/include/c++/13/bits/stl_list.h" 3 9642: typename _Node_alloc_traits::pointer 9642: _M_get_node() 9642: { return _Node_alloc_traits::allocate(_M_impl, 1); } 9642: 9642: void 9642: _M_put_node(typename _Node_alloc_traits::pointer __p) noexcept 9642: { _Node_alloc_traits::deallocate(_M_impl, __p, 1); } 9642: 9642: public: 9642: typedef _Alloc allocator_type; 9642: 9642: _Node_alloc_type& 9642: _M_get_Node_allocator() noexcept 9642: { return _M_impl; } 9642: 9642: const _Node_alloc_type& 9642: _M_get_Node_allocator() const noexcept 9642: { return _M_impl; } 9642: 9642: 9642: _List_base() = default; 9642: 9642: 9642: 9642: 9642: _List_base(const _Node_alloc_type& __a) noexcept 9642: : _M_impl(__a) 9642: { } 9642: 9642: 9642: _List_base(_List_base&&) = default; 9642: 9642: 9642: _List_base(_List_base&& __x, _Node_alloc_type&& __a) 9642: : _M_impl(std::move(__a)) 9642: { 9642: if (__x._M_get_Node_allocator() == _M_get_Node_allocator()) 9642: _M_move_nodes(std::move(__x)); 9642: 9642: } 9642: 9642: 9642: 9642: _List_base(_Node_alloc_type&& __a, _List_base&& __x) 9642: : _M_impl(std::move(__a), std::move(__x._M_impl)) 9642: { } 9642: 9642: 9642: _List_base(_Node_alloc_type&& __a) 9642: : _M_impl(std::move(__a)) 9642: { } 9642: 9642: void 9642: _M_move_nodes(_List_base&& __x) 9642: { _M_impl._M_node._M_move_nodes(std::move(__x._M_impl._M_node)); } 9642: 9642: 9642: 9642: ~_List_base() noexcept 9642: { _M_clear(); } 9642: 9642: void 9642: _M_clear() noexcept; 9642: 9642: void 9642: _M_init() noexcept 9642: { this->_M_impl._M_node._M_init(); } 9642: }; 9642: # 631 "/usr/include/c++/13/bits/stl_list.h" 3 9642: template > 9642: class list : protected _List_base<_Tp, _Alloc> 9642: { 9642: # 644 "/usr/include/c++/13/bits/stl_list.h" 3 9642: static_assert(is_same::type, _Tp>::value, 9642: "std::list must have a non-const, non-volatile value_type"); 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef _List_base<_Tp, _Alloc> _Base; 9642: typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; 9642: typedef typename _Base::_Tp_alloc_traits _Tp_alloc_traits; 9642: typedef typename _Base::_Node_alloc_type _Node_alloc_type; 9642: typedef typename _Base::_Node_alloc_traits _Node_alloc_traits; 9642: 9642: public: 9642: typedef _Tp value_type; 9642: typedef typename _Tp_alloc_traits::pointer pointer; 9642: typedef typename _Tp_alloc_traits::const_pointer const_pointer; 9642: typedef typename _Tp_alloc_traits::reference reference; 9642: typedef typename _Tp_alloc_traits::const_reference const_reference; 9642: typedef _List_iterator<_Tp> iterator; 9642: typedef _List_const_iterator<_Tp> const_iterator; 9642: typedef std::reverse_iterator const_reverse_iterator; 9642: typedef std::reverse_iterator reverse_iterator; 9642: typedef size_t size_type; 9642: typedef ptrdiff_t difference_type; 9642: typedef _Alloc allocator_type; 9642: 9642: protected: 9642: 9642: 9642: typedef _List_node<_Tp> _Node; 9642: 9642: using _Base::_M_impl; 9642: using _Base::_M_put_node; 9642: using _Base::_M_get_node; 9642: using _Base::_M_get_Node_allocator; 9642: # 706 "/usr/include/c++/13/bits/stl_list.h" 3 9642: template 9642: _Node* 9642: _M_create_node(_Args&&... __args) 9642: { 9642: auto __p = this->_M_get_node(); 9642: auto& __alloc = _M_get_Node_allocator(); 9642: __allocated_ptr<_Node_alloc_type> __guard{__alloc, __p}; 9642: _Node_alloc_traits::construct(__alloc, __p->_M_valptr(), 9642: std::forward<_Args>(__args)...); 9642: __guard = nullptr; 9642: return __p; 9642: } 9642: 9642: 9642: 9642: static size_t 9642: _S_distance(const_iterator __first, const_iterator __last) 9642: { return std::distance(__first, __last); } 9642: 9642: 9642: size_t 9642: _M_node_count() const 9642: { return this->_M_get_size(); } 9642: # 741 "/usr/include/c++/13/bits/stl_list.h" 3 9642: public: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: list() = default; 9642: # 758 "/usr/include/c++/13/bits/stl_list.h" 3 9642: explicit 9642: list(const allocator_type& __a) noexcept 9642: : _Base(_Node_alloc_type(__a)) { } 9642: # 771 "/usr/include/c++/13/bits/stl_list.h" 3 9642: explicit 9642: list(size_type __n, const allocator_type& __a = allocator_type()) 9642: : _Base(_Node_alloc_type(__a)) 9642: { _M_default_initialize(__n); } 9642: # 784 "/usr/include/c++/13/bits/stl_list.h" 3 9642: list(size_type __n, const value_type& __value, 9642: const allocator_type& __a = allocator_type()) 9642: : _Base(_Node_alloc_type(__a)) 9642: { _M_fill_initialize(__n, __value); } 9642: # 811 "/usr/include/c++/13/bits/stl_list.h" 3 9642: list(const list& __x) 9642: : _Base(_Node_alloc_traits:: 9642: _S_select_on_copy(__x._M_get_Node_allocator())) 9642: { _M_initialize_dispatch(__x.begin(), __x.end(), __false_type()); } 9642: # 824 "/usr/include/c++/13/bits/stl_list.h" 3 9642: list(list&&) = default; 9642: # 834 "/usr/include/c++/13/bits/stl_list.h" 3 9642: list(initializer_list __l, 9642: const allocator_type& __a = allocator_type()) 9642: : _Base(_Node_alloc_type(__a)) 9642: { _M_initialize_dispatch(__l.begin(), __l.end(), __false_type()); } 9642: 9642: list(const list& __x, const __type_identity_t& __a) 9642: : _Base(_Node_alloc_type(__a)) 9642: { _M_initialize_dispatch(__x.begin(), __x.end(), __false_type()); } 9642: 9642: private: 9642: list(list&& __x, const allocator_type& __a, true_type) noexcept 9642: : _Base(_Node_alloc_type(__a), std::move(__x)) 9642: { } 9642: 9642: list(list&& __x, const allocator_type& __a, false_type) 9642: : _Base(_Node_alloc_type(__a)) 9642: { 9642: if (__x._M_get_Node_allocator() == this->_M_get_Node_allocator()) 9642: this->_M_move_nodes(std::move(__x)); 9642: else 9642: insert(begin(), std::__make_move_if_noexcept_iterator(__x.begin()), 9642: std::__make_move_if_noexcept_iterator(__x.end())); 9642: } 9642: 9642: public: 9642: list(list&& __x, const __type_identity_t& __a) 9642: noexcept(_Node_alloc_traits::_S_always_equal()) 9642: : list(std::move(__x), __a, 9642: typename _Node_alloc_traits::is_always_equal{}) 9642: { } 9642: # 877 "/usr/include/c++/13/bits/stl_list.h" 3 9642: template> 9642: list(_InputIterator __first, _InputIterator __last, 9642: const allocator_type& __a = allocator_type()) 9642: : _Base(_Node_alloc_type(__a)) 9642: { _M_initialize_dispatch(__first, __last, __false_type()); } 9642: # 903 "/usr/include/c++/13/bits/stl_list.h" 3 9642: ~list() = default; 9642: # 914 "/usr/include/c++/13/bits/stl_list.h" 3 9642: list& 9642: operator=(const list& __x); 9642: # 928 "/usr/include/c++/13/bits/stl_list.h" 3 9642: list& 9642: operator=(list&& __x) 9642: noexcept(_Node_alloc_traits::_S_nothrow_move()) 9642: { 9642: constexpr bool __move_storage = 9642: _Node_alloc_traits::_S_propagate_on_move_assign() 9642: || _Node_alloc_traits::_S_always_equal(); 9642: _M_move_assign(std::move(__x), __bool_constant<__move_storage>()); 9642: return *this; 9642: } 9642: # 946 "/usr/include/c++/13/bits/stl_list.h" 3 9642: list& 9642: operator=(initializer_list __l) 9642: { 9642: this->assign(__l.begin(), __l.end()); 9642: return *this; 9642: } 9642: # 964 "/usr/include/c++/13/bits/stl_list.h" 3 9642: void 9642: assign(size_type __n, const value_type& __val) 9642: { _M_fill_assign(__n, __val); } 9642: # 981 "/usr/include/c++/13/bits/stl_list.h" 3 9642: template> 9642: void 9642: assign(_InputIterator __first, _InputIterator __last) 9642: { _M_assign_dispatch(__first, __last, __false_type()); } 9642: # 1005 "/usr/include/c++/13/bits/stl_list.h" 3 9642: void 9642: assign(initializer_list __l) 9642: { this->_M_assign_dispatch(__l.begin(), __l.end(), __false_type()); } 9642: 9642: 9642: 9642: allocator_type 9642: get_allocator() const noexcept 9642: { return allocator_type(_Base::_M_get_Node_allocator()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: iterator 9642: begin() noexcept 9642: { return iterator(this->_M_impl._M_node._M_next); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: begin() const noexcept 9642: { return const_iterator(this->_M_impl._M_node._M_next); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: iterator 9642: end() noexcept 9642: { return iterator(&this->_M_impl._M_node); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: end() const noexcept 9642: { return const_iterator(&this->_M_impl._M_node); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: reverse_iterator 9642: rbegin() noexcept 9642: { return reverse_iterator(end()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: rbegin() const noexcept 9642: { return const_reverse_iterator(end()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: reverse_iterator 9642: rend() noexcept 9642: { return reverse_iterator(begin()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: rend() const noexcept 9642: { return const_reverse_iterator(begin()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: cbegin() const noexcept 9642: { return const_iterator(this->_M_impl._M_node._M_next); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_iterator 9642: cend() const noexcept 9642: { return const_iterator(&this->_M_impl._M_node); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: crbegin() const noexcept 9642: { return const_reverse_iterator(end()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reverse_iterator 9642: crend() const noexcept 9642: { return const_reverse_iterator(begin()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] bool 9642: empty() const noexcept 9642: { return this->_M_impl._M_node._M_next == &this->_M_impl._M_node; } 9642: 9642: 9642: [[__nodiscard__]] 9642: size_type 9642: size() const noexcept 9642: { return _M_node_count(); } 9642: 9642: 9642: [[__nodiscard__]] 9642: size_type 9642: max_size() const noexcept 9642: { return _Node_alloc_traits::max_size(_M_get_Node_allocator()); } 9642: # 1168 "/usr/include/c++/13/bits/stl_list.h" 3 9642: void 9642: resize(size_type __new_size); 9642: # 1181 "/usr/include/c++/13/bits/stl_list.h" 3 9642: void 9642: resize(size_type __new_size, const value_type& __x); 9642: # 1203 "/usr/include/c++/13/bits/stl_list.h" 3 9642: [[__nodiscard__]] 9642: reference 9642: front() noexcept 9642: { return *begin(); } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reference 9642: front() const noexcept 9642: { return *begin(); } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: reference 9642: back() noexcept 9642: { 9642: iterator __tmp = end(); 9642: --__tmp; 9642: return *__tmp; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: const_reference 9642: back() const noexcept 9642: { 9642: const_iterator __tmp = end(); 9642: --__tmp; 9642: return *__tmp; 9642: } 9642: # 1254 "/usr/include/c++/13/bits/stl_list.h" 3 9642: void 9642: push_front(const value_type& __x) 9642: { this->_M_insert(begin(), __x); } 9642: 9642: 9642: void 9642: push_front(value_type&& __x) 9642: { this->_M_insert(begin(), std::move(__x)); } 9642: 9642: template 9642: 9642: reference 9642: 9642: 9642: 9642: emplace_front(_Args&&... __args) 9642: { 9642: this->_M_insert(begin(), std::forward<_Args>(__args)...); 9642: 9642: return front(); 9642: 9642: } 9642: # 1290 "/usr/include/c++/13/bits/stl_list.h" 3 9642: void 9642: pop_front() noexcept 9642: { this->_M_erase(begin()); } 9642: # 1304 "/usr/include/c++/13/bits/stl_list.h" 3 9642: void 9642: push_back(const value_type& __x) 9642: { this->_M_insert(end(), __x); } 9642: 9642: 9642: void 9642: push_back(value_type&& __x) 9642: { this->_M_insert(end(), std::move(__x)); } 9642: 9642: template 9642: 9642: reference 9642: 9642: 9642: 9642: emplace_back(_Args&&... __args) 9642: { 9642: this->_M_insert(end(), std::forward<_Args>(__args)...); 9642: 9642: return back(); 9642: 9642: } 9642: # 1339 "/usr/include/c++/13/bits/stl_list.h" 3 9642: void 9642: pop_back() noexcept 9642: { this->_M_erase(iterator(this->_M_impl._M_node._M_prev)); } 9642: # 1356 "/usr/include/c++/13/bits/stl_list.h" 3 9642: template 9642: iterator 9642: emplace(const_iterator __position, _Args&&... __args); 9642: # 1371 "/usr/include/c++/13/bits/stl_list.h" 3 9642: iterator 9642: insert(const_iterator __position, const value_type& __x); 9642: # 1401 "/usr/include/c++/13/bits/stl_list.h" 3 9642: iterator 9642: insert(const_iterator __position, value_type&& __x) 9642: { return emplace(__position, std::move(__x)); } 9642: # 1420 "/usr/include/c++/13/bits/stl_list.h" 3 9642: iterator 9642: insert(const_iterator __p, initializer_list __l) 9642: { return this->insert(__p, __l.begin(), __l.end()); } 9642: # 1440 "/usr/include/c++/13/bits/stl_list.h" 3 9642: iterator 9642: insert(const_iterator __position, size_type __n, const value_type& __x); 9642: # 1479 "/usr/include/c++/13/bits/stl_list.h" 3 9642: template> 9642: iterator 9642: insert(const_iterator __position, _InputIterator __first, 9642: _InputIterator __last); 9642: # 1523 "/usr/include/c++/13/bits/stl_list.h" 3 9642: iterator 9642: 9642: erase(const_iterator __position) noexcept; 9642: # 1548 "/usr/include/c++/13/bits/stl_list.h" 3 9642: iterator 9642: 9642: erase(const_iterator __first, const_iterator __last) noexcept 9642: 9642: 9642: 9642: { 9642: while (__first != __last) 9642: __first = erase(__first); 9642: return __last._M_const_cast(); 9642: } 9642: # 1571 "/usr/include/c++/13/bits/stl_list.h" 3 9642: void 9642: swap(list& __x) noexcept 9642: { 9642: __detail::_List_node_base::swap(this->_M_impl._M_node, 9642: __x._M_impl._M_node); 9642: 9642: size_t __xsize = __x._M_get_size(); 9642: __x._M_set_size(this->_M_get_size()); 9642: this->_M_set_size(__xsize); 9642: 9642: _Node_alloc_traits::_S_on_swap(this->_M_get_Node_allocator(), 9642: __x._M_get_Node_allocator()); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: clear() noexcept 9642: { 9642: _Base::_M_clear(); 9642: _Base::_M_init(); 9642: } 9642: # 1610 "/usr/include/c++/13/bits/stl_list.h" 3 9642: void 9642: 9642: splice(const_iterator __position, list&& __x) noexcept 9642: 9642: 9642: 9642: { 9642: if (!__x.empty()) 9642: { 9642: _M_check_equal_allocators(__x); 9642: 9642: this->_M_transfer(__position._M_const_cast(), 9642: __x.begin(), __x.end()); 9642: 9642: this->_M_inc_size(__x._M_get_size()); 9642: __x._M_set_size(0); 9642: } 9642: } 9642: 9642: 9642: void 9642: splice(const_iterator __position, list& __x) noexcept 9642: { splice(__position, std::move(__x)); } 9642: # 1646 "/usr/include/c++/13/bits/stl_list.h" 3 9642: void 9642: splice(const_iterator __position, list&& __x, const_iterator __i) noexcept 9642: # 1661 "/usr/include/c++/13/bits/stl_list.h" 3 9642: { 9642: iterator __j = __i._M_const_cast(); 9642: ++__j; 9642: if (__position == __i || __position == __j) 9642: return; 9642: 9642: if (this != std::__addressof(__x)) 9642: _M_check_equal_allocators(__x); 9642: 9642: this->_M_transfer(__position._M_const_cast(), 9642: __i._M_const_cast(), __j); 9642: 9642: this->_M_inc_size(1); 9642: __x._M_dec_size(1); 9642: } 9642: # 1688 "/usr/include/c++/13/bits/stl_list.h" 3 9642: void 9642: splice(const_iterator __position, list& __x, const_iterator __i) noexcept 9642: { splice(__position, std::move(__x), __i); } 9642: # 1707 "/usr/include/c++/13/bits/stl_list.h" 3 9642: void 9642: splice(const_iterator __position, list&& __x, const_iterator __first, 9642: const_iterator __last) noexcept 9642: # 1727 "/usr/include/c++/13/bits/stl_list.h" 3 9642: { 9642: if (__first != __last) 9642: { 9642: if (this != std::__addressof(__x)) 9642: _M_check_equal_allocators(__x); 9642: 9642: size_t __n = _S_distance(__first, __last); 9642: this->_M_inc_size(__n); 9642: __x._M_dec_size(__n); 9642: 9642: this->_M_transfer(__position._M_const_cast(), 9642: __first._M_const_cast(), 9642: __last._M_const_cast()); 9642: } 9642: } 9642: # 1757 "/usr/include/c++/13/bits/stl_list.h" 3 9642: void 9642: splice(const_iterator __position, list& __x, const_iterator __first, 9642: const_iterator __last) noexcept 9642: { splice(__position, std::move(__x), __first, __last); } 9642: 9642: 9642: private: 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef void __remove_return_type; 9642: 9642: 9642: public: 9642: # 1786 "/usr/include/c++/13/bits/stl_list.h" 3 9642: 9642: __remove_return_type 9642: remove(const _Tp& __value); 9642: # 1801 "/usr/include/c++/13/bits/stl_list.h" 3 9642: template 9642: __remove_return_type 9642: remove_if(_Predicate); 9642: # 1815 "/usr/include/c++/13/bits/stl_list.h" 3 9642: 9642: __remove_return_type 9642: unique(); 9642: # 1831 "/usr/include/c++/13/bits/stl_list.h" 3 9642: template 9642: __remove_return_type 9642: unique(_BinaryPredicate); 9642: # 1847 "/usr/include/c++/13/bits/stl_list.h" 3 9642: void 9642: merge(list&& __x); 9642: 9642: void 9642: merge(list& __x) 9642: { merge(std::move(__x)); } 9642: # 1872 "/usr/include/c++/13/bits/stl_list.h" 3 9642: template 9642: void 9642: merge(list&& __x, _StrictWeakOrdering __comp); 9642: 9642: template 9642: void 9642: merge(list& __x, _StrictWeakOrdering __comp) 9642: { merge(std::move(__x), __comp); } 9642: # 1891 "/usr/include/c++/13/bits/stl_list.h" 3 9642: void 9642: reverse() noexcept 9642: { this->_M_impl._M_node._M_reverse(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: sort(); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: void 9642: sort(_StrictWeakOrdering); 9642: 9642: protected: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: void 9642: _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type) 9642: { _M_fill_initialize(static_cast(__n), __x); } 9642: 9642: 9642: template 9642: void 9642: _M_initialize_dispatch(_InputIterator __first, _InputIterator __last, 9642: __false_type) 9642: { 9642: for (; __first != __last; ++__first) 9642: 9642: emplace_back(*__first); 9642: 9642: 9642: 9642: } 9642: 9642: 9642: 9642: void 9642: _M_fill_initialize(size_type __n, const value_type& __x) 9642: { 9642: for (; __n; --__n) 9642: push_back(__x); 9642: } 9642: 9642: 9642: 9642: void 9642: _M_default_initialize(size_type __n) 9642: { 9642: for (; __n; --__n) 9642: emplace_back(); 9642: } 9642: 9642: 9642: void 9642: _M_default_append(size_type __n); 9642: # 1969 "/usr/include/c++/13/bits/stl_list.h" 3 9642: template 9642: void 9642: _M_assign_dispatch(_Integer __n, _Integer __val, __true_type) 9642: { _M_fill_assign(__n, __val); } 9642: 9642: 9642: template 9642: void 9642: _M_assign_dispatch(_InputIterator __first, _InputIterator __last, 9642: __false_type); 9642: 9642: 9642: 9642: void 9642: _M_fill_assign(size_type __n, const value_type& __val); 9642: 9642: 9642: 9642: void 9642: _M_transfer(iterator __position, iterator __first, iterator __last) 9642: { __position._M_node->_M_transfer(__first._M_node, __last._M_node); } 9642: # 2001 "/usr/include/c++/13/bits/stl_list.h" 3 9642: template 9642: void 9642: _M_insert(iterator __position, _Args&&... __args) 9642: { 9642: _Node* __tmp = _M_create_node(std::forward<_Args>(__args)...); 9642: __tmp->_M_hook(__position._M_node); 9642: this->_M_inc_size(1); 9642: } 9642: 9642: 9642: 9642: void 9642: _M_erase(iterator __position) noexcept 9642: { 9642: this->_M_dec_size(1); 9642: __position._M_node->_M_unhook(); 9642: _Node* __n = static_cast<_Node*>(__position._M_node); 9642: 9642: _Node_alloc_traits::destroy(_M_get_Node_allocator(), __n->_M_valptr()); 9642: 9642: 9642: 9642: 9642: _M_put_node(__n); 9642: } 9642: 9642: 9642: void 9642: _M_check_equal_allocators(const list& __x) noexcept 9642: { 9642: if (_M_get_Node_allocator() != __x._M_get_Node_allocator()) 9642: __builtin_abort(); 9642: } 9642: 9642: 9642: const_iterator 9642: _M_resize_pos(size_type& __new_size) const; 9642: 9642: 9642: void 9642: _M_move_assign(list&& __x, true_type) noexcept 9642: { 9642: this->clear(); 9642: this->_M_move_nodes(std::move(__x)); 9642: std::__alloc_on_move(this->_M_get_Node_allocator(), 9642: __x._M_get_Node_allocator()); 9642: } 9642: 9642: void 9642: _M_move_assign(list&& __x, false_type) 9642: { 9642: if (__x._M_get_Node_allocator() == this->_M_get_Node_allocator()) 9642: _M_move_assign(std::move(__x), true_type{}); 9642: else 9642: 9642: 9642: _M_assign_dispatch(std::make_move_iterator(__x.begin()), 9642: std::make_move_iterator(__x.end()), 9642: __false_type{}); 9642: } 9642: 9642: 9642: 9642: 9642: struct _Finalize_merge 9642: { 9642: explicit 9642: _Finalize_merge(list& __dest, list& __src, const iterator& __src_next) 9642: : _M_dest(__dest), _M_src(__src), _M_next(__src_next) 9642: { } 9642: 9642: ~_Finalize_merge() 9642: { 9642: 9642: 9642: 9642: const size_t __num_unmerged = std::distance(_M_next, _M_src.end()); 9642: const size_t __orig_size = _M_src._M_get_size(); 9642: _M_dest._M_inc_size(__orig_size - __num_unmerged); 9642: _M_src._M_set_size(__num_unmerged); 9642: } 9642: 9642: list& _M_dest; 9642: list& _M_src; 9642: const iterator& _M_next; 9642: 9642: 9642: _Finalize_merge(const _Finalize_merge&) = delete; 9642: 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: }; 9642: 9642: 9642: template::value_type, 9642: typename _Allocator = allocator<_ValT>, 9642: typename = _RequireInputIter<_InputIterator>, 9642: typename = _RequireAllocator<_Allocator>> 9642: list(_InputIterator, _InputIterator, _Allocator = _Allocator()) 9642: -> list<_ValT, _Allocator>; 9642: 9642: 9642: } 9642: # 2120 "/usr/include/c++/13/bits/stl_list.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator==(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) 9642: { 9642: 9642: if (__x.size() != __y.size()) 9642: return false; 9642: 9642: 9642: typedef typename list<_Tp, _Alloc>::const_iterator const_iterator; 9642: const_iterator __end1 = __x.end(); 9642: const_iterator __end2 = __y.end(); 9642: 9642: const_iterator __i1 = __x.begin(); 9642: const_iterator __i2 = __y.begin(); 9642: while (__i1 != __end1 && __i2 != __end2 && *__i1 == *__i2) 9642: { 9642: ++__i1; 9642: ++__i2; 9642: } 9642: return __i1 == __end1 && __i2 == __end2; 9642: } 9642: # 2177 "/usr/include/c++/13/bits/stl_list.h" 3 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) 9642: { return std::lexicographical_compare(__x.begin(), __x.end(), 9642: __y.begin(), __y.end()); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator!=(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) 9642: { return !(__x == __y); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator>(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) 9642: { return __y < __x; } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator<=(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) 9642: { return !(__y < __x); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator>=(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) 9642: { return !(__x < __y); } 9642: 9642: 9642: 9642: template 9642: inline void 9642: swap(list<_Tp, _Alloc>& __x, list<_Tp, _Alloc>& __y) 9642: noexcept(noexcept(__x.swap(__y))) 9642: { __x.swap(__y); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline ptrdiff_t 9642: __distance(std::_List_iterator<_Tp> __first, 9642: std::_List_iterator<_Tp> __last, 9642: input_iterator_tag __tag) 9642: { 9642: typedef std::_List_const_iterator<_Tp> _CIter; 9642: return std::__distance(_CIter(__first), _CIter(__last), __tag); 9642: } 9642: 9642: template 9642: inline ptrdiff_t 9642: __distance(std::_List_const_iterator<_Tp> __first, 9642: std::_List_const_iterator<_Tp> __last, 9642: input_iterator_tag) 9642: { 9642: typedef __detail::_List_node_header _Sentinel; 9642: std::_List_const_iterator<_Tp> __beyond = __last; 9642: ++__beyond; 9642: const bool __whole = __first == __beyond; 9642: if (__builtin_constant_p (__whole) && __whole) 9642: return static_cast(__last._M_node)->_M_size; 9642: 9642: ptrdiff_t __n = 0; 9642: while (__first != __last) 9642: { 9642: ++__first; 9642: ++__n; 9642: } 9642: return __n; 9642: } 9642: 9642: 9642: 9642: } 9642: # 66 "/usr/include/c++/13/list" 2 3 9642: # 1 "/usr/include/c++/13/bits/list.tcc" 1 3 9642: # 59 "/usr/include/c++/13/bits/list.tcc" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: template 9642: void 9642: _List_base<_Tp, _Alloc>:: 9642: _M_clear() noexcept 9642: { 9642: typedef _List_node<_Tp> _Node; 9642: __detail::_List_node_base* __cur = _M_impl._M_node._M_next; 9642: while (__cur != &_M_impl._M_node) 9642: { 9642: _Node* __tmp = static_cast<_Node*>(__cur); 9642: __cur = __tmp->_M_next; 9642: _Tp* __val = __tmp->_M_valptr(); 9642: 9642: _Node_alloc_traits::destroy(_M_get_Node_allocator(), __val); 9642: 9642: 9642: 9642: _M_put_node(__tmp); 9642: } 9642: } 9642: 9642: 9642: template 9642: template 9642: typename list<_Tp, _Alloc>::iterator 9642: list<_Tp, _Alloc>:: 9642: emplace(const_iterator __position, _Args&&... __args) 9642: { 9642: _Node* __tmp = _M_create_node(std::forward<_Args>(__args)...); 9642: __tmp->_M_hook(__position._M_const_cast()._M_node); 9642: this->_M_inc_size(1); 9642: return iterator(__tmp); 9642: } 9642: 9642: 9642: template 9642: typename list<_Tp, _Alloc>::iterator 9642: list<_Tp, _Alloc>:: 9642: 9642: insert(const_iterator __position, const value_type& __x) 9642: 9642: 9642: 9642: { 9642: _Node* __tmp = _M_create_node(__x); 9642: __tmp->_M_hook(__position._M_const_cast()._M_node); 9642: this->_M_inc_size(1); 9642: return iterator(__tmp); 9642: } 9642: 9642: 9642: template 9642: typename list<_Tp, _Alloc>::iterator 9642: list<_Tp, _Alloc>:: 9642: insert(const_iterator __position, size_type __n, const value_type& __x) 9642: { 9642: if (__n) 9642: { 9642: list __tmp(__n, __x, get_allocator()); 9642: iterator __it = __tmp.begin(); 9642: splice(__position, __tmp); 9642: return __it; 9642: } 9642: return __position._M_const_cast(); 9642: } 9642: 9642: template 9642: template 9642: typename list<_Tp, _Alloc>::iterator 9642: list<_Tp, _Alloc>:: 9642: insert(const_iterator __position, _InputIterator __first, 9642: _InputIterator __last) 9642: { 9642: list __tmp(__first, __last, get_allocator()); 9642: if (!__tmp.empty()) 9642: { 9642: iterator __it = __tmp.begin(); 9642: splice(__position, __tmp); 9642: return __it; 9642: } 9642: return __position._M_const_cast(); 9642: } 9642: 9642: 9642: template 9642: typename list<_Tp, _Alloc>::iterator 9642: list<_Tp, _Alloc>:: 9642: 9642: erase(const_iterator __position) noexcept 9642: 9642: 9642: 9642: { 9642: iterator __ret = iterator(__position._M_node->_M_next); 9642: _M_erase(__position._M_const_cast()); 9642: return __ret; 9642: } 9642: # 173 "/usr/include/c++/13/bits/list.tcc" 3 9642: template 9642: typename list<_Tp, _Alloc>::const_iterator 9642: list<_Tp, _Alloc>:: 9642: _M_resize_pos(size_type& __new_size) const 9642: { 9642: const_iterator __i; 9642: 9642: const size_type __len = size(); 9642: if (__new_size < __len) 9642: { 9642: if (__new_size <= __len / 2) 9642: { 9642: __i = begin(); 9642: std::advance(__i, __new_size); 9642: } 9642: else 9642: { 9642: __i = end(); 9642: ptrdiff_t __num_erase = __len - __new_size; 9642: std::advance(__i, -__num_erase); 9642: } 9642: __new_size = 0; 9642: return __i; 9642: } 9642: else 9642: __i = end(); 9642: 9642: 9642: 9642: 9642: 9642: __new_size -= __len; 9642: return __i; 9642: } 9642: 9642: 9642: template 9642: void 9642: list<_Tp, _Alloc>:: 9642: _M_default_append(size_type __n) 9642: { 9642: size_type __i = 0; 9642: try 9642: { 9642: for (; __i < __n; ++__i) 9642: emplace_back(); 9642: } 9642: catch(...) 9642: { 9642: for (; __i; --__i) 9642: pop_back(); 9642: throw; 9642: } 9642: } 9642: 9642: template 9642: void 9642: list<_Tp, _Alloc>:: 9642: resize(size_type __new_size) 9642: { 9642: const_iterator __i = _M_resize_pos(__new_size); 9642: if (__new_size) 9642: _M_default_append(__new_size); 9642: else 9642: erase(__i, end()); 9642: } 9642: 9642: template 9642: void 9642: list<_Tp, _Alloc>:: 9642: resize(size_type __new_size, const value_type& __x) 9642: { 9642: const_iterator __i = _M_resize_pos(__new_size); 9642: if (__new_size) 9642: insert(end(), __new_size, __x); 9642: else 9642: erase(__i, end()); 9642: } 9642: # 265 "/usr/include/c++/13/bits/list.tcc" 3 9642: template 9642: list<_Tp, _Alloc>& 9642: list<_Tp, _Alloc>:: 9642: operator=(const list& __x) 9642: { 9642: if (this != std::__addressof(__x)) 9642: { 9642: 9642: if (_Node_alloc_traits::_S_propagate_on_copy_assign()) 9642: { 9642: auto& __this_alloc = this->_M_get_Node_allocator(); 9642: auto& __that_alloc = __x._M_get_Node_allocator(); 9642: if (!_Node_alloc_traits::_S_always_equal() 9642: && __this_alloc != __that_alloc) 9642: { 9642: 9642: clear(); 9642: } 9642: std::__alloc_on_copy(__this_alloc, __that_alloc); 9642: } 9642: 9642: _M_assign_dispatch(__x.begin(), __x.end(), __false_type()); 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: void 9642: list<_Tp, _Alloc>:: 9642: _M_fill_assign(size_type __n, const value_type& __val) 9642: { 9642: iterator __i = begin(); 9642: for (; __i != end() && __n > 0; ++__i, --__n) 9642: *__i = __val; 9642: if (__n > 0) 9642: insert(end(), __n, __val); 9642: else 9642: erase(__i, end()); 9642: } 9642: 9642: template 9642: template 9642: void 9642: list<_Tp, _Alloc>:: 9642: _M_assign_dispatch(_InputIterator __first2, _InputIterator __last2, 9642: __false_type) 9642: { 9642: iterator __first1 = begin(); 9642: iterator __last1 = end(); 9642: for (; __first1 != __last1 && __first2 != __last2; 9642: ++__first1, (void)++__first2) 9642: *__first1 = *__first2; 9642: if (__first2 == __last2) 9642: erase(__first1, __last1); 9642: else 9642: insert(__last1, __first2, __last2); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: typename list<_Tp, _Alloc>::__remove_return_type 9642: list<_Tp, _Alloc>:: 9642: remove(const value_type& __value) 9642: { 9642: 9642: 9642: 9642: list __to_destroy(get_allocator()); 9642: iterator __first = begin(); 9642: iterator __last = end(); 9642: while (__first != __last) 9642: { 9642: iterator __next = __first; 9642: ++__next; 9642: if (*__first == __value) 9642: { 9642: 9642: 9642: 9642: __to_destroy.splice(__to_destroy.begin(), *this, __first); 9642: 9642: 9642: 9642: } 9642: 9642: __first = __next; 9642: } 9642: 9642: 9642: 9642: 9642: return ; 9642: 9642: } 9642: 9642: template 9642: typename list<_Tp, _Alloc>::__remove_return_type 9642: list<_Tp, _Alloc>:: 9642: unique() 9642: { 9642: iterator __first = begin(); 9642: iterator __last = end(); 9642: if (__first == __last) 9642: return ; 9642: 9642: 9642: 9642: list __to_destroy(get_allocator()); 9642: iterator __next = __first; 9642: while (++__next != __last) 9642: { 9642: if (*__first == *__next) 9642: { 9642: __to_destroy.splice(__to_destroy.begin(), *this, __next); 9642: 9642: 9642: 9642: } 9642: else 9642: __first = __next; 9642: __next = __first; 9642: } 9642: 9642: 9642: 9642: 9642: return ; 9642: 9642: } 9642: 9642: template 9642: void 9642: list<_Tp, _Alloc>:: 9642: 9642: merge(list&& __x) 9642: 9642: 9642: 9642: { 9642: 9642: 9642: if (this != std::__addressof(__x)) 9642: { 9642: _M_check_equal_allocators(__x); 9642: 9642: iterator __first1 = begin(); 9642: iterator __last1 = end(); 9642: iterator __first2 = __x.begin(); 9642: iterator __last2 = __x.end(); 9642: 9642: const _Finalize_merge __fin(*this, __x, __first2); 9642: 9642: while (__first1 != __last1 && __first2 != __last2) 9642: if (*__first2 < *__first1) 9642: { 9642: iterator __next = __first2; 9642: _M_transfer(__first1, __first2, ++__next); 9642: __first2 = __next; 9642: } 9642: else 9642: ++__first1; 9642: if (__first2 != __last2) 9642: { 9642: _M_transfer(__last1, __first2, __last2); 9642: __first2 = __last2; 9642: } 9642: } 9642: } 9642: 9642: template 9642: template 9642: void 9642: list<_Tp, _Alloc>:: 9642: 9642: merge(list&& __x, _StrictWeakOrdering __comp) 9642: 9642: 9642: 9642: { 9642: 9642: 9642: if (this != std::__addressof(__x)) 9642: { 9642: _M_check_equal_allocators(__x); 9642: 9642: iterator __first1 = begin(); 9642: iterator __last1 = end(); 9642: iterator __first2 = __x.begin(); 9642: iterator __last2 = __x.end(); 9642: 9642: const _Finalize_merge __fin(*this, __x, __first2); 9642: 9642: while (__first1 != __last1 && __first2 != __last2) 9642: if (__comp(*__first2, *__first1)) 9642: { 9642: iterator __next = __first2; 9642: _M_transfer(__first1, __first2, ++__next); 9642: __first2 = __next; 9642: } 9642: else 9642: ++__first1; 9642: if (__first2 != __last2) 9642: { 9642: _M_transfer(__last1, __first2, __last2); 9642: __first2 = __last2; 9642: } 9642: } 9642: } 9642: 9642: template 9642: void 9642: list<_Tp, _Alloc>:: 9642: sort() 9642: { 9642: 9642: if (this->_M_impl._M_node._M_next != &this->_M_impl._M_node 9642: && this->_M_impl._M_node._M_next->_M_next != &this->_M_impl._M_node) 9642: { 9642: using __detail::_Scratch_list; 9642: # 497 "/usr/include/c++/13/bits/list.tcc" 3 9642: _Scratch_list __carry; 9642: _Scratch_list __tmp[64]; 9642: _Scratch_list* __fill = __tmp; 9642: _Scratch_list* __counter; 9642: 9642: _Scratch_list::_Ptr_cmp __ptr_comp; 9642: 9642: try 9642: { 9642: do 9642: { 9642: __carry._M_take_one(begin()._M_node); 9642: 9642: for(__counter = __tmp; 9642: __counter != __fill && !__counter->empty(); 9642: ++__counter) 9642: { 9642: 9642: __counter->merge(__carry, __ptr_comp); 9642: __carry.swap(*__counter); 9642: } 9642: __carry.swap(*__counter); 9642: if (__counter == __fill) 9642: ++__fill; 9642: } 9642: while ( !empty() ); 9642: 9642: for (__counter = __tmp + 1; __counter != __fill; ++__counter) 9642: __counter->merge(__counter[-1], __ptr_comp); 9642: __fill[-1].swap(this->_M_impl._M_node); 9642: } 9642: catch(...) 9642: { 9642: 9642: __carry._M_put_all(end()._M_node); 9642: for (int __i = 0; __i < sizeof(__tmp)/sizeof(__tmp[0]); ++__i) 9642: __tmp[__i]._M_put_all(end()._M_node); 9642: throw; 9642: } 9642: } 9642: } 9642: 9642: template 9642: template 9642: typename list<_Tp, _Alloc>::__remove_return_type 9642: list<_Tp, _Alloc>:: 9642: remove_if(_Predicate __pred) 9642: { 9642: 9642: 9642: 9642: list __to_destroy(get_allocator()); 9642: iterator __first = begin(); 9642: iterator __last = end(); 9642: while (__first != __last) 9642: { 9642: iterator __next = __first; 9642: ++__next; 9642: if (__pred(*__first)) 9642: { 9642: __to_destroy.splice(__to_destroy.begin(), *this, __first); 9642: 9642: 9642: 9642: } 9642: __first = __next; 9642: } 9642: 9642: 9642: 9642: 9642: return ; 9642: 9642: } 9642: 9642: template 9642: template 9642: typename list<_Tp, _Alloc>::__remove_return_type 9642: list<_Tp, _Alloc>:: 9642: unique(_BinaryPredicate __binary_pred) 9642: { 9642: iterator __first = begin(); 9642: iterator __last = end(); 9642: if (__first == __last) 9642: return ; 9642: 9642: 9642: 9642: list __to_destroy(get_allocator()); 9642: iterator __next = __first; 9642: while (++__next != __last) 9642: { 9642: if (__binary_pred(*__first, *__next)) 9642: { 9642: __to_destroy.splice(__to_destroy.begin(), *this, __next); 9642: 9642: 9642: 9642: } 9642: else 9642: __first = __next; 9642: __next = __first; 9642: } 9642: 9642: 9642: 9642: 9642: return ; 9642: 9642: } 9642: 9642: 9642: 9642: template 9642: template 9642: void 9642: list<_Tp, _Alloc>:: 9642: sort(_StrictWeakOrdering __comp) 9642: { 9642: 9642: if (this->_M_impl._M_node._M_next != &this->_M_impl._M_node 9642: && this->_M_impl._M_node._M_next->_M_next != &this->_M_impl._M_node) 9642: { 9642: using __detail::_Scratch_list; 9642: _Scratch_list __carry; 9642: _Scratch_list __tmp[64]; 9642: _Scratch_list* __fill = __tmp; 9642: _Scratch_list* __counter; 9642: 9642: _Scratch_list::_Ptr_cmp __ptr_comp 9642: = { __comp }; 9642: 9642: try 9642: { 9642: do 9642: { 9642: __carry._M_take_one(begin()._M_node); 9642: 9642: for(__counter = __tmp; 9642: __counter != __fill && !__counter->empty(); 9642: ++__counter) 9642: { 9642: 9642: __counter->merge(__carry, __ptr_comp); 9642: __carry.swap(*__counter); 9642: } 9642: __carry.swap(*__counter); 9642: if (__counter == __fill) 9642: ++__fill; 9642: } 9642: while ( !empty() ); 9642: 9642: for (__counter = __tmp + 1; __counter != __fill; ++__counter) 9642: __counter->merge(__counter[-1], __ptr_comp); 9642: __fill[-1].swap(this->_M_impl._M_node); 9642: } 9642: catch(...) 9642: { 9642: 9642: __carry._M_put_all(end()._M_node); 9642: for (size_t __i = 0; __i < sizeof(__tmp)/sizeof(__tmp[0]); ++__i) 9642: __tmp[__i]._M_put_all(end()._M_node); 9642: throw; 9642: } 9642: } 9642: } 9642: 9642: 9642: 9642: } 9642: # 67 "/usr/include/c++/13/list" 2 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: namespace pmr 9642: { 9642: template 9642: using list = std::list<_Tp, polymorphic_allocator<_Tp>>; 9642: } 9642: 9642: } 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 2 9642: 9642: # 1 "/usr/include/c++/13/set" 1 3 9642: # 58 "/usr/include/c++/13/set" 3 9642: 9642: # 59 "/usr/include/c++/13/set" 3 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/stl_set.h" 1 3 9642: # 64 "/usr/include/c++/13/bits/stl_set.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: template 9642: class multiset; 9642: # 94 "/usr/include/c++/13/bits/stl_set.h" 3 9642: template, 9642: typename _Alloc = std::allocator<_Key> > 9642: class set 9642: { 9642: # 110 "/usr/include/c++/13/bits/stl_set.h" 3 9642: static_assert(is_same::type, _Key>::value, 9642: "std::set must have a non-const, non-volatile value_type"); 9642: 9642: 9642: 9642: 9642: 9642: 9642: public: 9642: 9642: 9642: 9642: typedef _Key key_type; 9642: typedef _Key value_type; 9642: typedef _Compare key_compare; 9642: typedef _Compare value_compare; 9642: typedef _Alloc allocator_type; 9642: 9642: 9642: private: 9642: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 9642: rebind<_Key>::other _Key_alloc_type; 9642: 9642: typedef _Rb_tree, 9642: key_compare, _Key_alloc_type> _Rep_type; 9642: _Rep_type _M_t; 9642: 9642: typedef __gnu_cxx::__alloc_traits<_Key_alloc_type> _Alloc_traits; 9642: 9642: public: 9642: 9642: 9642: typedef typename _Alloc_traits::pointer pointer; 9642: typedef typename _Alloc_traits::const_pointer const_pointer; 9642: typedef typename _Alloc_traits::reference reference; 9642: typedef typename _Alloc_traits::const_reference const_reference; 9642: 9642: 9642: 9642: typedef typename _Rep_type::const_iterator iterator; 9642: typedef typename _Rep_type::const_iterator const_iterator; 9642: typedef typename _Rep_type::const_reverse_iterator reverse_iterator; 9642: typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; 9642: typedef typename _Rep_type::size_type size_type; 9642: typedef typename _Rep_type::difference_type difference_type; 9642: 9642: 9642: 9642: using node_type = typename _Rep_type::node_type; 9642: using insert_return_type = typename _Rep_type::insert_return_type; 9642: # 169 "/usr/include/c++/13/bits/stl_set.h" 3 9642: set() = default; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: set(const _Compare& __comp, 9642: const allocator_type& __a = allocator_type()) 9642: : _M_t(__comp, _Key_alloc_type(__a)) { } 9642: # 192 "/usr/include/c++/13/bits/stl_set.h" 3 9642: template 9642: set(_InputIterator __first, _InputIterator __last) 9642: : _M_t() 9642: { _M_t._M_insert_range_unique(__first, __last); } 9642: # 209 "/usr/include/c++/13/bits/stl_set.h" 3 9642: template 9642: set(_InputIterator __first, _InputIterator __last, 9642: const _Compare& __comp, 9642: const allocator_type& __a = allocator_type()) 9642: : _M_t(__comp, _Key_alloc_type(__a)) 9642: { _M_t._M_insert_range_unique(__first, __last); } 9642: # 225 "/usr/include/c++/13/bits/stl_set.h" 3 9642: set(const set&) = default; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: set(set&&) = default; 9642: # 245 "/usr/include/c++/13/bits/stl_set.h" 3 9642: set(initializer_list __l, 9642: const _Compare& __comp = _Compare(), 9642: const allocator_type& __a = allocator_type()) 9642: : _M_t(__comp, _Key_alloc_type(__a)) 9642: { _M_t._M_insert_range_unique(__l.begin(), __l.end()); } 9642: 9642: 9642: explicit 9642: set(const allocator_type& __a) 9642: : _M_t(_Key_alloc_type(__a)) { } 9642: 9642: 9642: set(const set& __x, const __type_identity_t& __a) 9642: : _M_t(__x._M_t, _Key_alloc_type(__a)) { } 9642: 9642: 9642: set(set&& __x, const __type_identity_t& __a) 9642: noexcept(is_nothrow_copy_constructible<_Compare>::value 9642: && _Alloc_traits::_S_always_equal()) 9642: : _M_t(std::move(__x._M_t), _Key_alloc_type(__a)) { } 9642: 9642: 9642: set(initializer_list __l, const allocator_type& __a) 9642: : _M_t(_Key_alloc_type(__a)) 9642: { _M_t._M_insert_range_unique(__l.begin(), __l.end()); } 9642: 9642: 9642: template 9642: set(_InputIterator __first, _InputIterator __last, 9642: const allocator_type& __a) 9642: : _M_t(_Key_alloc_type(__a)) 9642: { _M_t._M_insert_range_unique(__first, __last); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: ~set() = default; 9642: # 299 "/usr/include/c++/13/bits/stl_set.h" 3 9642: set& 9642: operator=(const set&) = default; 9642: 9642: 9642: set& 9642: operator=(set&&) = default; 9642: # 317 "/usr/include/c++/13/bits/stl_set.h" 3 9642: set& 9642: operator=(initializer_list __l) 9642: { 9642: _M_t._M_assign_unique(__l.begin(), __l.end()); 9642: return *this; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: key_compare 9642: key_comp() const 9642: { return _M_t.key_comp(); } 9642: 9642: value_compare 9642: value_comp() const 9642: { return _M_t.key_comp(); } 9642: 9642: allocator_type 9642: get_allocator() const noexcept 9642: { return allocator_type(_M_t.get_allocator()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: iterator 9642: begin() const noexcept 9642: { return _M_t.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: iterator 9642: end() const noexcept 9642: { return _M_t.end(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: reverse_iterator 9642: rbegin() const noexcept 9642: { return _M_t.rbegin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: reverse_iterator 9642: rend() const noexcept 9642: { return _M_t.rend(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: iterator 9642: cbegin() const noexcept 9642: { return _M_t.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: iterator 9642: cend() const noexcept 9642: { return _M_t.end(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: reverse_iterator 9642: crbegin() const noexcept 9642: { return _M_t.rbegin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: reverse_iterator 9642: crend() const noexcept 9642: { return _M_t.rend(); } 9642: 9642: 9642: 9642: [[__nodiscard__]] bool 9642: empty() const noexcept 9642: { return _M_t.empty(); } 9642: 9642: 9642: size_type 9642: size() const noexcept 9642: { return _M_t.size(); } 9642: 9642: 9642: size_type 9642: max_size() const noexcept 9642: { return _M_t.max_size(); } 9642: # 442 "/usr/include/c++/13/bits/stl_set.h" 3 9642: void 9642: swap(set& __x) 9642: noexcept(__is_nothrow_swappable<_Compare>::value) 9642: { _M_t.swap(__x._M_t); } 9642: # 462 "/usr/include/c++/13/bits/stl_set.h" 3 9642: template 9642: std::pair 9642: emplace(_Args&&... __args) 9642: { return _M_t._M_emplace_unique(std::forward<_Args>(__args)...); } 9642: # 488 "/usr/include/c++/13/bits/stl_set.h" 3 9642: template 9642: iterator 9642: emplace_hint(const_iterator __pos, _Args&&... __args) 9642: { 9642: return _M_t._M_emplace_hint_unique(__pos, 9642: std::forward<_Args>(__args)...); 9642: } 9642: # 510 "/usr/include/c++/13/bits/stl_set.h" 3 9642: std::pair 9642: insert(const value_type& __x) 9642: { 9642: std::pair __p = 9642: _M_t._M_insert_unique(__x); 9642: return std::pair(__p.first, __p.second); 9642: } 9642: 9642: 9642: std::pair 9642: insert(value_type&& __x) 9642: { 9642: std::pair __p = 9642: _M_t._M_insert_unique(std::move(__x)); 9642: return std::pair(__p.first, __p.second); 9642: } 9642: # 547 "/usr/include/c++/13/bits/stl_set.h" 3 9642: iterator 9642: insert(const_iterator __position, const value_type& __x) 9642: { return _M_t._M_insert_unique_(__position, __x); } 9642: 9642: 9642: iterator 9642: insert(const_iterator __position, value_type&& __x) 9642: { return _M_t._M_insert_unique_(__position, std::move(__x)); } 9642: # 566 "/usr/include/c++/13/bits/stl_set.h" 3 9642: template 9642: void 9642: insert(_InputIterator __first, _InputIterator __last) 9642: { _M_t._M_insert_range_unique(__first, __last); } 9642: # 579 "/usr/include/c++/13/bits/stl_set.h" 3 9642: void 9642: insert(initializer_list __l) 9642: { this->insert(__l.begin(), __l.end()); } 9642: 9642: 9642: 9642: 9642: node_type 9642: extract(const_iterator __pos) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__pos != end())) __builtin_unreachable(); } while (false); 9642: return _M_t.extract(__pos); 9642: } 9642: 9642: 9642: node_type 9642: extract(const key_type& __x) 9642: { return _M_t.extract(__x); } 9642: 9642: 9642: insert_return_type 9642: insert(node_type&& __nh) 9642: { return _M_t._M_reinsert_node_unique(std::move(__nh)); } 9642: 9642: 9642: iterator 9642: insert(const_iterator __hint, node_type&& __nh) 9642: { return _M_t._M_reinsert_node_hint_unique(__hint, std::move(__nh)); } 9642: 9642: template 9642: friend struct std::_Rb_tree_merge_helper; 9642: 9642: template 9642: void 9642: merge(set<_Key, _Compare1, _Alloc>& __source) 9642: { 9642: using _Merge_helper = _Rb_tree_merge_helper; 9642: _M_t._M_merge_unique(_Merge_helper::_S_get_tree(__source)); 9642: } 9642: 9642: template 9642: void 9642: merge(set<_Key, _Compare1, _Alloc>&& __source) 9642: { merge(__source); } 9642: 9642: template 9642: void 9642: merge(multiset<_Key, _Compare1, _Alloc>& __source) 9642: { 9642: using _Merge_helper = _Rb_tree_merge_helper; 9642: _M_t._M_merge_unique(_Merge_helper::_S_get_tree(__source)); 9642: } 9642: 9642: template 9642: void 9642: merge(multiset<_Key, _Compare1, _Alloc>&& __source) 9642: { merge(__source); } 9642: # 654 "/usr/include/c++/13/bits/stl_set.h" 3 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: iterator 9642: erase(const_iterator __position) 9642: { return _M_t.erase(__position); } 9642: # 685 "/usr/include/c++/13/bits/stl_set.h" 3 9642: size_type 9642: erase(const key_type& __x) 9642: { return _M_t.erase(__x); } 9642: # 706 "/usr/include/c++/13/bits/stl_set.h" 3 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: iterator 9642: erase(const_iterator __first, const_iterator __last) 9642: { return _M_t.erase(__first, __last); } 9642: # 734 "/usr/include/c++/13/bits/stl_set.h" 3 9642: void 9642: clear() noexcept 9642: { _M_t.clear(); } 9642: # 749 "/usr/include/c++/13/bits/stl_set.h" 3 9642: size_type 9642: count(const key_type& __x) const 9642: { return _M_t.find(__x) == _M_t.end() ? 0 : 1; } 9642: 9642: 9642: template 9642: auto 9642: count(const _Kt& __x) const 9642: -> decltype(_M_t._M_count_tr(__x)) 9642: { return _M_t._M_count_tr(__x); } 9642: # 795 "/usr/include/c++/13/bits/stl_set.h" 3 9642: iterator 9642: find(const key_type& __x) 9642: { return _M_t.find(__x); } 9642: 9642: const_iterator 9642: find(const key_type& __x) const 9642: { return _M_t.find(__x); } 9642: 9642: 9642: template 9642: auto 9642: find(const _Kt& __x) 9642: -> decltype(iterator{_M_t._M_find_tr(__x)}) 9642: { return iterator{_M_t._M_find_tr(__x)}; } 9642: 9642: template 9642: auto 9642: find(const _Kt& __x) const 9642: -> decltype(const_iterator{_M_t._M_find_tr(__x)}) 9642: { return const_iterator{_M_t._M_find_tr(__x)}; } 9642: # 830 "/usr/include/c++/13/bits/stl_set.h" 3 9642: iterator 9642: lower_bound(const key_type& __x) 9642: { return _M_t.lower_bound(__x); } 9642: 9642: const_iterator 9642: lower_bound(const key_type& __x) const 9642: { return _M_t.lower_bound(__x); } 9642: 9642: 9642: template 9642: auto 9642: lower_bound(const _Kt& __x) 9642: -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) 9642: { return iterator(_M_t._M_lower_bound_tr(__x)); } 9642: 9642: template 9642: auto 9642: lower_bound(const _Kt& __x) const 9642: -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x))) 9642: { return const_iterator(_M_t._M_lower_bound_tr(__x)); } 9642: # 860 "/usr/include/c++/13/bits/stl_set.h" 3 9642: iterator 9642: upper_bound(const key_type& __x) 9642: { return _M_t.upper_bound(__x); } 9642: 9642: const_iterator 9642: upper_bound(const key_type& __x) const 9642: { return _M_t.upper_bound(__x); } 9642: 9642: 9642: template 9642: auto 9642: upper_bound(const _Kt& __x) 9642: -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) 9642: { return iterator(_M_t._M_upper_bound_tr(__x)); } 9642: 9642: template 9642: auto 9642: upper_bound(const _Kt& __x) const 9642: -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) 9642: { return const_iterator(_M_t._M_upper_bound_tr(__x)); } 9642: # 899 "/usr/include/c++/13/bits/stl_set.h" 3 9642: std::pair 9642: equal_range(const key_type& __x) 9642: { return _M_t.equal_range(__x); } 9642: 9642: std::pair 9642: equal_range(const key_type& __x) const 9642: { return _M_t.equal_range(__x); } 9642: 9642: 9642: template 9642: auto 9642: equal_range(const _Kt& __x) 9642: -> decltype(pair(_M_t._M_equal_range_tr(__x))) 9642: { return pair(_M_t._M_equal_range_tr(__x)); } 9642: 9642: template 9642: auto 9642: equal_range(const _Kt& __x) const 9642: -> decltype(pair(_M_t._M_equal_range_tr(__x))) 9642: { return pair(_M_t._M_equal_range_tr(__x)); } 9642: 9642: 9642: 9642: template 9642: friend bool 9642: operator==(const set<_K1, _C1, _A1>&, const set<_K1, _C1, _A1>&); 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: friend bool 9642: operator<(const set<_K1, _C1, _A1>&, const set<_K1, _C1, _A1>&); 9642: 9642: }; 9642: 9642: 9642: 9642: template::value_type>, 9642: typename _Allocator = 9642: allocator::value_type>, 9642: typename = _RequireInputIter<_InputIterator>, 9642: typename = _RequireNotAllocator<_Compare>, 9642: typename = _RequireAllocator<_Allocator>> 9642: set(_InputIterator, _InputIterator, 9642: _Compare = _Compare(), _Allocator = _Allocator()) 9642: -> set::value_type, 9642: _Compare, _Allocator>; 9642: 9642: template, 9642: typename _Allocator = allocator<_Key>, 9642: typename = _RequireNotAllocator<_Compare>, 9642: typename = _RequireAllocator<_Allocator>> 9642: set(initializer_list<_Key>, 9642: _Compare = _Compare(), _Allocator = _Allocator()) 9642: -> set<_Key, _Compare, _Allocator>; 9642: 9642: template, 9642: typename = _RequireAllocator<_Allocator>> 9642: set(_InputIterator, _InputIterator, _Allocator) 9642: -> set::value_type, 9642: less::value_type>, 9642: _Allocator>; 9642: 9642: template> 9642: set(initializer_list<_Key>, _Allocator) 9642: -> set<_Key, less<_Key>, _Allocator>; 9642: # 985 "/usr/include/c++/13/bits/stl_set.h" 3 9642: template 9642: inline bool 9642: operator==(const set<_Key, _Compare, _Alloc>& __x, 9642: const set<_Key, _Compare, _Alloc>& __y) 9642: { return __x._M_t == __y._M_t; } 9642: # 1023 "/usr/include/c++/13/bits/stl_set.h" 3 9642: template 9642: inline bool 9642: operator<(const set<_Key, _Compare, _Alloc>& __x, 9642: const set<_Key, _Compare, _Alloc>& __y) 9642: { return __x._M_t < __y._M_t; } 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const set<_Key, _Compare, _Alloc>& __x, 9642: const set<_Key, _Compare, _Alloc>& __y) 9642: { return !(__x == __y); } 9642: 9642: 9642: template 9642: inline bool 9642: operator>(const set<_Key, _Compare, _Alloc>& __x, 9642: const set<_Key, _Compare, _Alloc>& __y) 9642: { return __y < __x; } 9642: 9642: 9642: template 9642: inline bool 9642: operator<=(const set<_Key, _Compare, _Alloc>& __x, 9642: const set<_Key, _Compare, _Alloc>& __y) 9642: { return !(__y < __x); } 9642: 9642: 9642: template 9642: inline bool 9642: operator>=(const set<_Key, _Compare, _Alloc>& __x, 9642: const set<_Key, _Compare, _Alloc>& __y) 9642: { return !(__x < __y); } 9642: 9642: 9642: 9642: template 9642: inline void 9642: swap(set<_Key, _Compare, _Alloc>& __x, set<_Key, _Compare, _Alloc>& __y) 9642: noexcept(noexcept(__x.swap(__y))) 9642: { __x.swap(__y); } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct 9642: _Rb_tree_merge_helper, _Cmp2> 9642: { 9642: private: 9642: friend class std::set<_Val, _Cmp1, _Alloc>; 9642: 9642: static auto& 9642: _S_get_tree(std::set<_Val, _Cmp2, _Alloc>& __set) 9642: { return __set._M_t; } 9642: 9642: static auto& 9642: _S_get_tree(std::multiset<_Val, _Cmp2, _Alloc>& __set) 9642: { return __set._M_t; } 9642: }; 9642: 9642: 9642: 9642: } 9642: # 64 "/usr/include/c++/13/set" 2 3 9642: # 1 "/usr/include/c++/13/bits/stl_multiset.h" 1 3 9642: # 64 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: template 9642: class set; 9642: # 95 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: template , 9642: typename _Alloc = std::allocator<_Key> > 9642: class multiset 9642: { 9642: # 111 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: static_assert(is_same::type, _Key>::value, 9642: "std::multiset must have a non-const, non-volatile value_type"); 9642: 9642: 9642: 9642: 9642: 9642: 9642: public: 9642: 9642: typedef _Key key_type; 9642: typedef _Key value_type; 9642: typedef _Compare key_compare; 9642: typedef _Compare value_compare; 9642: typedef _Alloc allocator_type; 9642: 9642: private: 9642: 9642: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 9642: rebind<_Key>::other _Key_alloc_type; 9642: 9642: typedef _Rb_tree, 9642: key_compare, _Key_alloc_type> _Rep_type; 9642: 9642: _Rep_type _M_t; 9642: 9642: typedef __gnu_cxx::__alloc_traits<_Key_alloc_type> _Alloc_traits; 9642: 9642: public: 9642: typedef typename _Alloc_traits::pointer pointer; 9642: typedef typename _Alloc_traits::const_pointer const_pointer; 9642: typedef typename _Alloc_traits::reference reference; 9642: typedef typename _Alloc_traits::const_reference const_reference; 9642: 9642: 9642: 9642: typedef typename _Rep_type::const_iterator iterator; 9642: typedef typename _Rep_type::const_iterator const_iterator; 9642: typedef typename _Rep_type::const_reverse_iterator reverse_iterator; 9642: typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; 9642: typedef typename _Rep_type::size_type size_type; 9642: typedef typename _Rep_type::difference_type difference_type; 9642: 9642: 9642: using node_type = typename _Rep_type::node_type; 9642: # 165 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: multiset() = default; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: multiset(const _Compare& __comp, 9642: const allocator_type& __a = allocator_type()) 9642: : _M_t(__comp, _Key_alloc_type(__a)) { } 9642: # 187 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: template 9642: multiset(_InputIterator __first, _InputIterator __last) 9642: : _M_t() 9642: { _M_t._M_insert_range_equal(__first, __last); } 9642: # 203 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: template 9642: multiset(_InputIterator __first, _InputIterator __last, 9642: const _Compare& __comp, 9642: const allocator_type& __a = allocator_type()) 9642: : _M_t(__comp, _Key_alloc_type(__a)) 9642: { _M_t._M_insert_range_equal(__first, __last); } 9642: # 219 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: multiset(const multiset&) = default; 9642: # 228 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: multiset(multiset&&) = default; 9642: # 240 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: multiset(initializer_list __l, 9642: const _Compare& __comp = _Compare(), 9642: const allocator_type& __a = allocator_type()) 9642: : _M_t(__comp, _Key_alloc_type(__a)) 9642: { _M_t._M_insert_range_equal(__l.begin(), __l.end()); } 9642: 9642: 9642: explicit 9642: multiset(const allocator_type& __a) 9642: : _M_t(_Key_alloc_type(__a)) { } 9642: 9642: 9642: multiset(const multiset& __m, 9642: const __type_identity_t& __a) 9642: : _M_t(__m._M_t, _Key_alloc_type(__a)) { } 9642: 9642: 9642: multiset(multiset&& __m, const __type_identity_t& __a) 9642: noexcept(is_nothrow_copy_constructible<_Compare>::value 9642: && _Alloc_traits::_S_always_equal()) 9642: : _M_t(std::move(__m._M_t), _Key_alloc_type(__a)) { } 9642: 9642: 9642: multiset(initializer_list __l, const allocator_type& __a) 9642: : _M_t(_Key_alloc_type(__a)) 9642: { _M_t._M_insert_range_equal(__l.begin(), __l.end()); } 9642: 9642: 9642: template 9642: multiset(_InputIterator __first, _InputIterator __last, 9642: const allocator_type& __a) 9642: : _M_t(_Key_alloc_type(__a)) 9642: { _M_t._M_insert_range_equal(__first, __last); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: ~multiset() = default; 9642: # 295 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: multiset& 9642: operator=(const multiset&) = default; 9642: 9642: 9642: multiset& 9642: operator=(multiset&&) = default; 9642: # 313 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: multiset& 9642: operator=(initializer_list __l) 9642: { 9642: _M_t._M_assign_equal(__l.begin(), __l.end()); 9642: return *this; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: key_compare 9642: key_comp() const 9642: { return _M_t.key_comp(); } 9642: 9642: value_compare 9642: value_comp() const 9642: { return _M_t.key_comp(); } 9642: 9642: allocator_type 9642: get_allocator() const noexcept 9642: { return allocator_type(_M_t.get_allocator()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: iterator 9642: begin() const noexcept 9642: { return _M_t.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: iterator 9642: end() const noexcept 9642: { return _M_t.end(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: reverse_iterator 9642: rbegin() const noexcept 9642: { return _M_t.rbegin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: reverse_iterator 9642: rend() const noexcept 9642: { return _M_t.rend(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: iterator 9642: cbegin() const noexcept 9642: { return _M_t.begin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: iterator 9642: cend() const noexcept 9642: { return _M_t.end(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: reverse_iterator 9642: crbegin() const noexcept 9642: { return _M_t.rbegin(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: reverse_iterator 9642: crend() const noexcept 9642: { return _M_t.rend(); } 9642: 9642: 9642: 9642: [[__nodiscard__]] bool 9642: empty() const noexcept 9642: { return _M_t.empty(); } 9642: 9642: 9642: size_type 9642: size() const noexcept 9642: { return _M_t.size(); } 9642: 9642: 9642: size_type 9642: max_size() const noexcept 9642: { return _M_t.max_size(); } 9642: # 438 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: void 9642: swap(multiset& __x) 9642: noexcept(__is_nothrow_swappable<_Compare>::value) 9642: { _M_t.swap(__x._M_t); } 9642: # 457 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: template 9642: iterator 9642: emplace(_Args&&... __args) 9642: { return _M_t._M_emplace_equal(std::forward<_Args>(__args)...); } 9642: # 483 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: template 9642: iterator 9642: emplace_hint(const_iterator __pos, _Args&&... __args) 9642: { 9642: return _M_t._M_emplace_hint_equal(__pos, 9642: std::forward<_Args>(__args)...); 9642: } 9642: # 503 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: iterator 9642: insert(const value_type& __x) 9642: { return _M_t._M_insert_equal(__x); } 9642: 9642: 9642: iterator 9642: insert(value_type&& __x) 9642: { return _M_t._M_insert_equal(std::move(__x)); } 9642: # 533 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: iterator 9642: insert(const_iterator __position, const value_type& __x) 9642: { return _M_t._M_insert_equal_(__position, __x); } 9642: 9642: 9642: iterator 9642: insert(const_iterator __position, value_type&& __x) 9642: { return _M_t._M_insert_equal_(__position, std::move(__x)); } 9642: # 551 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: template 9642: void 9642: insert(_InputIterator __first, _InputIterator __last) 9642: { _M_t._M_insert_range_equal(__first, __last); } 9642: # 564 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: void 9642: insert(initializer_list __l) 9642: { this->insert(__l.begin(), __l.end()); } 9642: 9642: 9642: 9642: 9642: node_type 9642: extract(const_iterator __pos) 9642: { 9642: do { if (std::__is_constant_evaluated() && !bool(__pos != end())) __builtin_unreachable(); } while (false); 9642: return _M_t.extract(__pos); 9642: } 9642: 9642: 9642: node_type 9642: extract(const key_type& __x) 9642: { return _M_t.extract(__x); } 9642: 9642: 9642: iterator 9642: insert(node_type&& __nh) 9642: { return _M_t._M_reinsert_node_equal(std::move(__nh)); } 9642: 9642: 9642: iterator 9642: insert(const_iterator __hint, node_type&& __nh) 9642: { return _M_t._M_reinsert_node_hint_equal(__hint, std::move(__nh)); } 9642: 9642: template 9642: friend struct std::_Rb_tree_merge_helper; 9642: 9642: template 9642: void 9642: merge(multiset<_Key, _Compare1, _Alloc>& __source) 9642: { 9642: using _Merge_helper = _Rb_tree_merge_helper; 9642: _M_t._M_merge_equal(_Merge_helper::_S_get_tree(__source)); 9642: } 9642: 9642: template 9642: void 9642: merge(multiset<_Key, _Compare1, _Alloc>&& __source) 9642: { merge(__source); } 9642: 9642: template 9642: void 9642: merge(set<_Key, _Compare1, _Alloc>& __source) 9642: { 9642: using _Merge_helper = _Rb_tree_merge_helper; 9642: _M_t._M_merge_equal(_Merge_helper::_S_get_tree(__source)); 9642: } 9642: 9642: template 9642: void 9642: merge(set<_Key, _Compare1, _Alloc>&& __source) 9642: { merge(__source); } 9642: # 639 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: iterator 9642: erase(const_iterator __position) 9642: { return _M_t.erase(__position); } 9642: # 670 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: size_type 9642: erase(const key_type& __x) 9642: { return _M_t.erase(__x); } 9642: # 691 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: iterator 9642: erase(const_iterator __first, const_iterator __last) 9642: { return _M_t.erase(__first, __last); } 9642: # 719 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: void 9642: clear() noexcept 9642: { _M_t.clear(); } 9642: # 731 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: size_type 9642: count(const key_type& __x) const 9642: { return _M_t.count(__x); } 9642: 9642: 9642: template 9642: auto 9642: count(const _Kt& __x) const -> decltype(_M_t._M_count_tr(__x)) 9642: { return _M_t._M_count_tr(__x); } 9642: # 776 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: iterator 9642: find(const key_type& __x) 9642: { return _M_t.find(__x); } 9642: 9642: const_iterator 9642: find(const key_type& __x) const 9642: { return _M_t.find(__x); } 9642: 9642: 9642: template 9642: auto 9642: find(const _Kt& __x) 9642: -> decltype(iterator{_M_t._M_find_tr(__x)}) 9642: { return iterator{_M_t._M_find_tr(__x)}; } 9642: 9642: template 9642: auto 9642: find(const _Kt& __x) const 9642: -> decltype(const_iterator{_M_t._M_find_tr(__x)}) 9642: { return const_iterator{_M_t._M_find_tr(__x)}; } 9642: # 811 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: iterator 9642: lower_bound(const key_type& __x) 9642: { return _M_t.lower_bound(__x); } 9642: 9642: const_iterator 9642: lower_bound(const key_type& __x) const 9642: { return _M_t.lower_bound(__x); } 9642: 9642: 9642: template 9642: auto 9642: lower_bound(const _Kt& __x) 9642: -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) 9642: { return iterator(_M_t._M_lower_bound_tr(__x)); } 9642: 9642: template 9642: auto 9642: lower_bound(const _Kt& __x) const 9642: -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) 9642: { return iterator(_M_t._M_lower_bound_tr(__x)); } 9642: # 841 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: iterator 9642: upper_bound(const key_type& __x) 9642: { return _M_t.upper_bound(__x); } 9642: 9642: const_iterator 9642: upper_bound(const key_type& __x) const 9642: { return _M_t.upper_bound(__x); } 9642: 9642: 9642: template 9642: auto 9642: upper_bound(const _Kt& __x) 9642: -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) 9642: { return iterator(_M_t._M_upper_bound_tr(__x)); } 9642: 9642: template 9642: auto 9642: upper_bound(const _Kt& __x) const 9642: -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) 9642: { return iterator(_M_t._M_upper_bound_tr(__x)); } 9642: # 880 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: std::pair 9642: equal_range(const key_type& __x) 9642: { return _M_t.equal_range(__x); } 9642: 9642: std::pair 9642: equal_range(const key_type& __x) const 9642: { return _M_t.equal_range(__x); } 9642: 9642: 9642: template 9642: auto 9642: equal_range(const _Kt& __x) 9642: -> decltype(pair(_M_t._M_equal_range_tr(__x))) 9642: { return pair(_M_t._M_equal_range_tr(__x)); } 9642: 9642: template 9642: auto 9642: equal_range(const _Kt& __x) const 9642: -> decltype(pair(_M_t._M_equal_range_tr(__x))) 9642: { return pair(_M_t._M_equal_range_tr(__x)); } 9642: 9642: 9642: 9642: template 9642: friend bool 9642: operator==(const multiset<_K1, _C1, _A1>&, 9642: const multiset<_K1, _C1, _A1>&); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: friend bool 9642: operator< (const multiset<_K1, _C1, _A1>&, 9642: const multiset<_K1, _C1, _A1>&); 9642: 9642: }; 9642: 9642: 9642: 9642: template::value_type>, 9642: typename _Allocator = 9642: allocator::value_type>, 9642: typename = _RequireInputIter<_InputIterator>, 9642: typename = _RequireNotAllocator<_Compare>, 9642: typename = _RequireAllocator<_Allocator>> 9642: multiset(_InputIterator, _InputIterator, 9642: _Compare = _Compare(), _Allocator = _Allocator()) 9642: -> multiset::value_type, 9642: _Compare, _Allocator>; 9642: 9642: template, 9642: typename _Allocator = allocator<_Key>, 9642: typename = _RequireNotAllocator<_Compare>, 9642: typename = _RequireAllocator<_Allocator>> 9642: multiset(initializer_list<_Key>, 9642: _Compare = _Compare(), _Allocator = _Allocator()) 9642: -> multiset<_Key, _Compare, _Allocator>; 9642: 9642: template, 9642: typename = _RequireAllocator<_Allocator>> 9642: multiset(_InputIterator, _InputIterator, _Allocator) 9642: -> multiset::value_type, 9642: less::value_type>, 9642: _Allocator>; 9642: 9642: template> 9642: multiset(initializer_list<_Key>, _Allocator) 9642: -> multiset<_Key, less<_Key>, _Allocator>; 9642: # 971 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: template 9642: inline bool 9642: operator==(const multiset<_Key, _Compare, _Alloc>& __x, 9642: const multiset<_Key, _Compare, _Alloc>& __y) 9642: { return __x._M_t == __y._M_t; } 9642: # 1009 "/usr/include/c++/13/bits/stl_multiset.h" 3 9642: template 9642: inline bool 9642: operator<(const multiset<_Key, _Compare, _Alloc>& __x, 9642: const multiset<_Key, _Compare, _Alloc>& __y) 9642: { return __x._M_t < __y._M_t; } 9642: 9642: 9642: template 9642: inline bool 9642: operator!=(const multiset<_Key, _Compare, _Alloc>& __x, 9642: const multiset<_Key, _Compare, _Alloc>& __y) 9642: { return !(__x == __y); } 9642: 9642: 9642: template 9642: inline bool 9642: operator>(const multiset<_Key,_Compare,_Alloc>& __x, 9642: const multiset<_Key,_Compare,_Alloc>& __y) 9642: { return __y < __x; } 9642: 9642: 9642: template 9642: inline bool 9642: operator<=(const multiset<_Key, _Compare, _Alloc>& __x, 9642: const multiset<_Key, _Compare, _Alloc>& __y) 9642: { return !(__y < __x); } 9642: 9642: 9642: template 9642: inline bool 9642: operator>=(const multiset<_Key, _Compare, _Alloc>& __x, 9642: const multiset<_Key, _Compare, _Alloc>& __y) 9642: { return !(__x < __y); } 9642: 9642: 9642: 9642: template 9642: inline void 9642: swap(multiset<_Key, _Compare, _Alloc>& __x, 9642: multiset<_Key, _Compare, _Alloc>& __y) 9642: noexcept(noexcept(__x.swap(__y))) 9642: { __x.swap(__y); } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct 9642: _Rb_tree_merge_helper, 9642: _Cmp2> 9642: { 9642: private: 9642: friend class std::multiset<_Val, _Cmp1, _Alloc>; 9642: 9642: static auto& 9642: _S_get_tree(std::set<_Val, _Cmp2, _Alloc>& __set) 9642: { return __set._M_t; } 9642: 9642: static auto& 9642: _S_get_tree(std::multiset<_Val, _Cmp2, _Alloc>& __set) 9642: { return __set._M_t; } 9642: }; 9642: 9642: 9642: 9642: } 9642: # 65 "/usr/include/c++/13/set" 2 3 9642: # 74 "/usr/include/c++/13/set" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: namespace pmr 9642: { 9642: template> 9642: using set = std::set<_Key, _Cmp, polymorphic_allocator<_Key>>; 9642: template> 9642: using multiset = std::multiset<_Key, _Cmp, polymorphic_allocator<_Key>>; 9642: } 9642: 9642: } 9642: # 11 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 2 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/file/readahead_file_info.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 13 "/build/reproducible-path/rocksdb-9.3.1/file/readahead_file_info.h" 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct ReadaheadFileInfo { 9642: struct ReadaheadInfo { 9642: size_t readahead_size = 0; 9642: int64_t num_file_reads = 0; 9642: }; 9642: 9642: 9642: ReadaheadInfo data_block_readahead_info; 9642: 9642: 9642: ReadaheadInfo index_block_readahead_info; 9642: }; 9642: 9642: } 9642: # 13 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 1 9642: # 19 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator_base.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class IteratorBase : public Cleanable { 9642: public: 9642: IteratorBase() {} 9642: 9642: IteratorBase(const IteratorBase&) = delete; 9642: void operator=(const IteratorBase&) = delete; 9642: 9642: virtual ~IteratorBase() {} 9642: 9642: 9642: 9642: 9642: virtual bool Valid() const = 0; 9642: 9642: 9642: 9642: virtual void SeekToFirst() = 0; 9642: 9642: 9642: 9642: virtual void SeekToLast() = 0; 9642: # 43 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator_base.h" 9642: virtual void Seek(const Slice& target) = 0; 9642: 9642: 9642: 9642: 9642: 9642: virtual void SeekForPrev(const Slice& target) = 0; 9642: 9642: 9642: 9642: 9642: virtual void Next() = 0; 9642: 9642: 9642: 9642: 9642: virtual void Prev() = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Slice key() const = 0; 9642: 9642: 9642: 9642: 9642: virtual Status status() const = 0; 9642: }; 9642: 9642: } 9642: # 24 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/ostream" 1 3 9642: # 36 "/usr/include/c++/13/ostream" 3 9642: 9642: # 37 "/usr/include/c++/13/ostream" 3 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/ios" 1 3 9642: # 36 "/usr/include/c++/13/ios" 3 9642: 9642: # 37 "/usr/include/c++/13/ios" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/ios_base.h" 1 3 9642: # 37 "/usr/include/c++/13/bits/ios_base.h" 3 9642: 9642: # 38 "/usr/include/c++/13/bits/ios_base.h" 3 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/locale_classes.h" 1 3 9642: # 37 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: 9642: # 38 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 43 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 62 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: class locale 9642: { 9642: public: 9642: 9642: 9642: typedef int category; 9642: 9642: 9642: class facet; 9642: class id; 9642: class _Impl; 9642: 9642: friend class facet; 9642: friend class _Impl; 9642: 9642: template 9642: friend bool 9642: has_facet(const locale&) throw(); 9642: 9642: template 9642: friend const _Facet& 9642: use_facet(const locale&); 9642: 9642: template 9642: friend const _Facet* 9642: __try_use_facet(const locale&) noexcept; 9642: 9642: template 9642: friend struct __use_cache; 9642: # 102 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: static const category none = 0; 9642: static const category ctype = 1L << 0; 9642: static const category numeric = 1L << 1; 9642: static const category collate = 1L << 2; 9642: static const category time = 1L << 3; 9642: static const category monetary = 1L << 4; 9642: static const category messages = 1L << 5; 9642: static const category all = (ctype | numeric | collate | 9642: time | monetary | messages); 9642: # 121 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: locale() throw(); 9642: # 130 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: locale(const locale& __other) throw(); 9642: # 140 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: explicit 9642: locale(const char* __s); 9642: # 155 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: locale(const locale& __base, const char* __s, category __cat); 9642: # 166 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: explicit 9642: locale(const std::string& __s) : locale(__s.c_str()) { } 9642: # 181 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: locale(const locale& __base, const std::string& __s, category __cat) 9642: : locale(__base, __s.c_str(), __cat) { } 9642: # 196 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: locale(const locale& __base, const locale& __add, category __cat); 9642: # 209 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: template 9642: locale(const locale& __other, _Facet* __f); 9642: 9642: 9642: ~locale() throw(); 9642: # 223 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: const locale& 9642: operator=(const locale& __other) throw(); 9642: # 238 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: template 9642: locale 9642: combine(const locale& __other) const; 9642: 9642: 9642: 9642: 9642: 9642: 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: string 9642: name() const; 9642: # 258 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: bool 9642: operator==(const locale& __other) const throw(); 9642: # 268 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: bool 9642: operator!=(const locale& __other) const throw() 9642: { return !(this->operator==(__other)); } 9642: # 288 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: template 9642: bool 9642: operator()(const basic_string<_Char, _Traits, _Alloc>& __s1, 9642: const basic_string<_Char, _Traits, _Alloc>& __s2) const; 9642: # 304 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: static locale 9642: global(const locale& __loc); 9642: 9642: 9642: 9642: 9642: static const locale& 9642: classic(); 9642: 9642: private: 9642: 9642: _Impl* _M_impl; 9642: 9642: 9642: static _Impl* _S_classic; 9642: 9642: 9642: static _Impl* _S_global; 9642: 9642: 9642: 9642: 9642: 9642: static const char* const* const _S_categories; 9642: # 339 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: enum { _S_categories_size = 6 + 6 }; 9642: 9642: 9642: static __gthread_once_t _S_once; 9642: 9642: 9642: explicit 9642: locale(_Impl*) throw(); 9642: 9642: static void 9642: _S_initialize(); 9642: 9642: static void 9642: _S_initialize_once() throw(); 9642: 9642: static category 9642: _S_normalize_category(category); 9642: 9642: void 9642: _M_coalesce(const locale& __base, const locale& __add, category __cat); 9642: 9642: 9642: static const id* const _S_twinned_facets[]; 9642: 9642: }; 9642: # 377 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: class locale::facet 9642: { 9642: private: 9642: friend class locale; 9642: friend class locale::_Impl; 9642: 9642: mutable _Atomic_word _M_refcount; 9642: 9642: 9642: static __c_locale _S_c_locale; 9642: 9642: 9642: static const char _S_c_name[2]; 9642: 9642: 9642: static __gthread_once_t _S_once; 9642: 9642: 9642: static void 9642: _S_initialize_once(); 9642: 9642: protected: 9642: # 408 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: explicit 9642: facet(size_t __refs = 0) throw() : _M_refcount(__refs ? 1 : 0) 9642: { } 9642: 9642: 9642: virtual 9642: ~facet(); 9642: 9642: static void 9642: _S_create_c_locale(__c_locale& __cloc, const char* __s, 9642: __c_locale __old = 0); 9642: 9642: static __c_locale 9642: _S_clone_c_locale(__c_locale& __cloc) throw(); 9642: 9642: static void 9642: _S_destroy_c_locale(__c_locale& __cloc); 9642: 9642: static __c_locale 9642: _S_lc_ctype_c_locale(__c_locale __cloc, const char* __s); 9642: 9642: 9642: 9642: static __c_locale 9642: _S_get_c_locale(); 9642: 9642: __attribute__ ((__const__)) static const char* 9642: _S_get_c_name() throw(); 9642: # 444 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: facet(const facet&) = delete; 9642: 9642: facet& 9642: operator=(const facet&) = delete; 9642: 9642: 9642: private: 9642: void 9642: _M_add_reference() const throw() 9642: { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); } 9642: 9642: void 9642: _M_remove_reference() const throw() 9642: { 9642: 9642: ; 9642: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1) 9642: { 9642: ; 9642: try 9642: { delete this; } 9642: catch(...) 9642: { } 9642: } 9642: } 9642: 9642: const facet* _M_sso_shim(const id*) const; 9642: const facet* _M_cow_shim(const id*) const; 9642: 9642: protected: 9642: class __shim; 9642: }; 9642: # 489 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: class locale::id 9642: { 9642: private: 9642: friend class locale; 9642: friend class locale::_Impl; 9642: 9642: template 9642: friend const _Facet& 9642: use_facet(const locale&); 9642: 9642: template 9642: friend bool 9642: has_facet(const locale&) throw(); 9642: 9642: template 9642: friend const _Facet* 9642: __try_use_facet(const locale&) noexcept; 9642: 9642: 9642: 9642: 9642: mutable size_t _M_index; 9642: 9642: 9642: static _Atomic_word _S_refcount; 9642: 9642: void 9642: operator=(const id&); 9642: 9642: id(const id&); 9642: 9642: public: 9642: 9642: 9642: 9642: id() { } 9642: 9642: size_t 9642: _M_id() const throw(); 9642: }; 9642: 9642: 9642: 9642: class locale::_Impl 9642: { 9642: public: 9642: 9642: friend class locale; 9642: friend class locale::facet; 9642: 9642: template 9642: friend bool 9642: has_facet(const locale&) throw(); 9642: 9642: template 9642: friend const _Facet& 9642: use_facet(const locale&); 9642: 9642: template 9642: friend const _Facet* 9642: __try_use_facet(const locale&) noexcept; 9642: 9642: template 9642: friend struct __use_cache; 9642: 9642: private: 9642: 9642: _Atomic_word _M_refcount; 9642: const facet** _M_facets; 9642: size_t _M_facets_size; 9642: const facet** _M_caches; 9642: char** _M_names; 9642: static const locale::id* const _S_id_ctype[]; 9642: static const locale::id* const _S_id_numeric[]; 9642: static const locale::id* const _S_id_collate[]; 9642: static const locale::id* const _S_id_time[]; 9642: static const locale::id* const _S_id_monetary[]; 9642: static const locale::id* const _S_id_messages[]; 9642: static const locale::id* const* const _S_facet_categories[]; 9642: 9642: void 9642: _M_add_reference() throw() 9642: { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); } 9642: 9642: void 9642: _M_remove_reference() throw() 9642: { 9642: 9642: ; 9642: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1) 9642: { 9642: ; 9642: try 9642: { delete this; } 9642: catch(...) 9642: { } 9642: } 9642: } 9642: 9642: _Impl(const _Impl&, size_t); 9642: _Impl(const char*, size_t); 9642: _Impl(size_t) throw(); 9642: 9642: ~_Impl() throw(); 9642: 9642: _Impl(const _Impl&); 9642: 9642: void 9642: operator=(const _Impl&); 9642: 9642: bool 9642: _M_check_same_name() 9642: { 9642: bool __ret = true; 9642: if (_M_names[1]) 9642: 9642: for (size_t __i = 0; __ret && __i < _S_categories_size - 1; ++__i) 9642: __ret = __builtin_strcmp(_M_names[__i], _M_names[__i + 1]) == 0; 9642: return __ret; 9642: } 9642: 9642: void 9642: _M_replace_categories(const _Impl*, category); 9642: 9642: void 9642: _M_replace_category(const _Impl*, const locale::id* const*); 9642: 9642: void 9642: _M_replace_facet(const _Impl*, const locale::id*); 9642: 9642: void 9642: _M_install_facet(const locale::id*, const facet*); 9642: 9642: template 9642: void 9642: _M_init_facet(_Facet* __facet) 9642: { _M_install_facet(&_Facet::id, __facet); } 9642: 9642: template 9642: void 9642: _M_init_facet_unchecked(_Facet* __facet) 9642: { 9642: __facet->_M_add_reference(); 9642: _M_facets[_Facet::id._M_id()] = __facet; 9642: } 9642: 9642: void 9642: _M_install_cache(const facet*, size_t); 9642: 9642: void _M_init_extra(facet**); 9642: void _M_init_extra(void*, void*, const char*, const char*); 9642: 9642: 9642: 9642: 9642: }; 9642: # 659 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: template 9642: class __cxx11:: collate : public locale::facet 9642: { 9642: public: 9642: 9642: 9642: 9642: typedef _CharT char_type; 9642: typedef basic_string<_CharT> string_type; 9642: 9642: 9642: protected: 9642: 9642: 9642: __c_locale _M_c_locale_collate; 9642: 9642: public: 9642: 9642: static locale::id id; 9642: # 686 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: explicit 9642: collate(size_t __refs = 0) 9642: : facet(__refs), _M_c_locale_collate(_S_get_c_locale()) 9642: { } 9642: # 700 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: explicit 9642: collate(__c_locale __cloc, size_t __refs = 0) 9642: : facet(__refs), _M_c_locale_collate(_S_clone_c_locale(__cloc)) 9642: { } 9642: # 717 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: int 9642: compare(const _CharT* __lo1, const _CharT* __hi1, 9642: const _CharT* __lo2, const _CharT* __hi2) const 9642: { return this->do_compare(__lo1, __hi1, __lo2, __hi2); } 9642: # 736 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: string_type 9642: transform(const _CharT* __lo, const _CharT* __hi) const 9642: { return this->do_transform(__lo, __hi); } 9642: # 750 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: long 9642: hash(const _CharT* __lo, const _CharT* __hi) const 9642: { return this->do_hash(__lo, __hi); } 9642: 9642: 9642: int 9642: _M_compare(const _CharT*, const _CharT*) const throw(); 9642: 9642: size_t 9642: _M_transform(_CharT*, const _CharT*, size_t) const throw(); 9642: 9642: protected: 9642: 9642: virtual 9642: ~collate() 9642: { _S_destroy_c_locale(_M_c_locale_collate); } 9642: # 779 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: virtual int 9642: do_compare(const _CharT* __lo1, const _CharT* __hi1, 9642: const _CharT* __lo2, const _CharT* __hi2) const; 9642: # 793 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: virtual string_type 9642: do_transform(const _CharT* __lo, const _CharT* __hi) const; 9642: # 806 "/usr/include/c++/13/bits/locale_classes.h" 3 9642: virtual long 9642: do_hash(const _CharT* __lo, const _CharT* __hi) const; 9642: }; 9642: 9642: template 9642: locale::id collate<_CharT>::id; 9642: 9642: 9642: template<> 9642: int 9642: collate::_M_compare(const char*, const char*) const throw(); 9642: 9642: template<> 9642: size_t 9642: collate::_M_transform(char*, const char*, size_t) const throw(); 9642: 9642: 9642: template<> 9642: int 9642: collate::_M_compare(const wchar_t*, const wchar_t*) const throw(); 9642: 9642: template<> 9642: size_t 9642: collate::_M_transform(wchar_t*, const wchar_t*, size_t) const throw(); 9642: 9642: 9642: 9642: template 9642: class __cxx11:: collate_byname : public collate<_CharT> 9642: { 9642: public: 9642: 9642: 9642: typedef _CharT char_type; 9642: typedef basic_string<_CharT> string_type; 9642: 9642: 9642: explicit 9642: collate_byname(const char* __s, size_t __refs = 0) 9642: : collate<_CharT>(__refs) 9642: { 9642: if (__builtin_strcmp(__s, "C") != 0 9642: && __builtin_strcmp(__s, "POSIX") != 0) 9642: { 9642: this->_S_destroy_c_locale(this->_M_c_locale_collate); 9642: this->_S_create_c_locale(this->_M_c_locale_collate, __s); 9642: } 9642: } 9642: 9642: 9642: explicit 9642: collate_byname(const string& __s, size_t __refs = 0) 9642: : collate_byname(__s.c_str(), __refs) { } 9642: 9642: 9642: protected: 9642: virtual 9642: ~collate_byname() { } 9642: }; 9642: 9642: 9642: } 9642: 9642: # 1 "/usr/include/c++/13/bits/locale_classes.tcc" 1 3 9642: # 37 "/usr/include/c++/13/bits/locale_classes.tcc" 3 9642: 9642: # 38 "/usr/include/c++/13/bits/locale_classes.tcc" 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: template 9642: locale:: 9642: locale(const locale& __other, _Facet* __f) 9642: { 9642: _M_impl = new _Impl(*__other._M_impl, 1); 9642: 9642: try 9642: { _M_impl->_M_install_facet(&_Facet::id, __f); } 9642: catch(...) 9642: { 9642: _M_impl->_M_remove_reference(); 9642: throw; 9642: } 9642: delete [] _M_impl->_M_names[0]; 9642: _M_impl->_M_names[0] = 0; 9642: } 9642: 9642: template 9642: locale 9642: locale:: 9642: combine(const locale& __other) const 9642: { 9642: _Impl* __tmp = new _Impl(*_M_impl, 1); 9642: try 9642: { 9642: __tmp->_M_replace_facet(__other._M_impl, &_Facet::id); 9642: } 9642: catch(...) 9642: { 9642: __tmp->_M_remove_reference(); 9642: throw; 9642: } 9642: return locale(__tmp); 9642: } 9642: 9642: template 9642: bool 9642: locale:: 9642: operator()(const basic_string<_CharT, _Traits, _Alloc>& __s1, 9642: const basic_string<_CharT, _Traits, _Alloc>& __s2) const 9642: { 9642: typedef std::collate<_CharT> __collate_type; 9642: const __collate_type& __collate = use_facet<__collate_type>(*this); 9642: return (__collate.compare(__s1.data(), __s1.data() + __s1.length(), 9642: __s2.data(), __s2.data() + __s2.length()) < 0); 9642: } 9642: 9642: template 9642: inline const _Facet* 9642: __try_use_facet(const locale& __loc) noexcept 9642: { 9642: const size_t __i = _Facet::id._M_id(); 9642: const locale::facet** __facets = __loc._M_impl->_M_facets; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: if constexpr (__is_same(_Facet, ctype)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, num_get)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, num_put)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, codecvt)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, collate)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, moneypunct)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, moneypunct)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, money_get)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, money_put)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, numpunct)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, time_get)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, time_put)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, messages)) return static_cast(__facets[__i]); 9642: 9642: 9642: if constexpr (__is_same(_Facet, ctype)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, num_get)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, num_put)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, codecvt)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, collate)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, moneypunct)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, moneypunct)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, money_get)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, money_put)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, numpunct)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, time_get)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, time_put)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, messages)) return static_cast(__facets[__i]); 9642: 9642: 9642: if constexpr (__is_same(_Facet, codecvt)) return static_cast(__facets[__i]); 9642: if constexpr (__is_same(_Facet, codecvt)) return static_cast(__facets[__i]); 9642: 9642: 9642: 9642: 9642: if (__i >= __loc._M_impl->_M_facets_size || !__facets[__i]) 9642: return 0; 9642: 9642: 9642: return dynamic_cast(__facets[__i]); 9642: 9642: 9642: 9642: } 9642: # 161 "/usr/include/c++/13/bits/locale_classes.tcc" 3 9642: template 9642: inline bool 9642: has_facet(const locale& __loc) throw() 9642: { 9642: 9642: static_assert(__is_base_of(locale::facet, _Facet), 9642: "template argument must be derived from locale::facet"); 9642: 9642: 9642: 9642: return std::__try_use_facet<_Facet>(__loc) != 0; 9642: } 9642: # 188 "/usr/include/c++/13/bits/locale_classes.tcc" 3 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdangling-reference" 9642: template 9642: inline const _Facet& 9642: use_facet(const locale& __loc) 9642: { 9642: 9642: static_assert(__is_base_of(locale::facet, _Facet), 9642: "template argument must be derived from locale::facet"); 9642: 9642: 9642: 9642: if (const _Facet* __f = std::__try_use_facet<_Facet>(__loc)) 9642: return *__f; 9642: __throw_bad_cast(); 9642: } 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: 9642: template 9642: int 9642: collate<_CharT>::_M_compare(const _CharT*, const _CharT*) const throw () 9642: { return 0; } 9642: 9642: 9642: template 9642: size_t 9642: collate<_CharT>::_M_transform(_CharT*, const _CharT*, size_t) const throw () 9642: { return 0; } 9642: 9642: template 9642: int 9642: collate<_CharT>:: 9642: do_compare(const _CharT* __lo1, const _CharT* __hi1, 9642: const _CharT* __lo2, const _CharT* __hi2) const 9642: { 9642: 9642: 9642: const string_type __one(__lo1, __hi1); 9642: const string_type __two(__lo2, __hi2); 9642: 9642: const _CharT* __p = __one.c_str(); 9642: const _CharT* __pend = __one.data() + __one.length(); 9642: const _CharT* __q = __two.c_str(); 9642: const _CharT* __qend = __two.data() + __two.length(); 9642: 9642: 9642: 9642: 9642: for (;;) 9642: { 9642: const int __res = _M_compare(__p, __q); 9642: if (__res) 9642: return __res; 9642: 9642: __p += char_traits<_CharT>::length(__p); 9642: __q += char_traits<_CharT>::length(__q); 9642: if (__p == __pend && __q == __qend) 9642: return 0; 9642: else if (__p == __pend) 9642: return -1; 9642: else if (__q == __qend) 9642: return 1; 9642: 9642: __p++; 9642: __q++; 9642: } 9642: } 9642: 9642: template 9642: typename collate<_CharT>::string_type 9642: collate<_CharT>:: 9642: do_transform(const _CharT* __lo, const _CharT* __hi) const 9642: { 9642: string_type __ret; 9642: 9642: 9642: const string_type __str(__lo, __hi); 9642: 9642: const _CharT* __p = __str.c_str(); 9642: const _CharT* __pend = __str.data() + __str.length(); 9642: 9642: size_t __len = (__hi - __lo) * 2; 9642: 9642: _CharT* __c = new _CharT[__len]; 9642: 9642: try 9642: { 9642: 9642: 9642: 9642: for (;;) 9642: { 9642: 9642: size_t __res = _M_transform(__c, __p, __len); 9642: 9642: 9642: if (__res >= __len) 9642: { 9642: __len = __res + 1; 9642: delete [] __c, __c = 0; 9642: __c = new _CharT[__len]; 9642: __res = _M_transform(__c, __p, __len); 9642: } 9642: 9642: __ret.append(__c, __res); 9642: __p += char_traits<_CharT>::length(__p); 9642: if (__p == __pend) 9642: break; 9642: 9642: __p++; 9642: __ret.push_back(_CharT()); 9642: } 9642: } 9642: catch(...) 9642: { 9642: delete [] __c; 9642: throw; 9642: } 9642: 9642: delete [] __c; 9642: 9642: return __ret; 9642: } 9642: 9642: template 9642: long 9642: collate<_CharT>:: 9642: do_hash(const _CharT* __lo, const _CharT* __hi) const 9642: { 9642: unsigned long __val = 0; 9642: for (; __lo < __hi; ++__lo) 9642: __val = 9642: *__lo + ((__val << 7) 9642: | (__val >> (__gnu_cxx::__numeric_traits:: 9642: __digits - 7))); 9642: return static_cast(__val); 9642: } 9642: 9642: 9642: 9642: 9642: extern template class collate; 9642: extern template class collate_byname; 9642: 9642: extern template 9642: const collate* 9642: __try_use_facet >(const locale&) noexcept; 9642: 9642: extern template 9642: const collate& 9642: use_facet >(const locale&); 9642: 9642: extern template 9642: bool 9642: has_facet >(const locale&); 9642: 9642: 9642: extern template class collate; 9642: extern template class collate_byname; 9642: 9642: extern template 9642: const collate* 9642: __try_use_facet >(const locale&) noexcept; 9642: 9642: extern template 9642: const collate& 9642: use_facet >(const locale&); 9642: 9642: extern template 9642: bool 9642: has_facet >(const locale&); 9642: 9642: 9642: 9642: 9642: } 9642: # 870 "/usr/include/c++/13/bits/locale_classes.h" 2 3 9642: # 42 "/usr/include/c++/13/bits/ios_base.h" 2 3 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/system_error" 1 3 9642: # 32 "/usr/include/c++/13/system_error" 3 9642: 9642: # 33 "/usr/include/c++/13/system_error" 3 9642: # 43 "/usr/include/c++/13/system_error" 3 9642: # 1 "/usr/include/c++/13/stdexcept" 1 3 9642: # 36 "/usr/include/c++/13/stdexcept" 3 9642: 9642: # 37 "/usr/include/c++/13/stdexcept" 3 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: struct __cow_string 9642: { 9642: union { 9642: const char* _M_p; 9642: char _M_bytes[sizeof(const char*)]; 9642: }; 9642: 9642: __cow_string(); 9642: __cow_string(const std::string&); 9642: __cow_string(const char*, size_t); 9642: __cow_string(const __cow_string&) noexcept; 9642: __cow_string& operator=(const __cow_string&) noexcept; 9642: ~__cow_string(); 9642: 9642: __cow_string(__cow_string&&) noexcept; 9642: __cow_string& operator=(__cow_string&&) noexcept; 9642: 9642: }; 9642: 9642: typedef basic_string __sso_string; 9642: # 113 "/usr/include/c++/13/stdexcept" 3 9642: class logic_error : public exception 9642: { 9642: __cow_string _M_msg; 9642: 9642: public: 9642: 9642: explicit 9642: logic_error(const string& __arg) ; 9642: 9642: 9642: explicit 9642: logic_error(const char*) ; 9642: 9642: logic_error(logic_error&&) noexcept; 9642: logic_error& operator=(logic_error&&) noexcept; 9642: 9642: 9642: 9642: logic_error(const logic_error&) noexcept; 9642: logic_error& operator=(const logic_error&) noexcept; 9642: 9642: 9642: 9642: 9642: 9642: virtual ~logic_error() noexcept; 9642: 9642: 9642: 9642: virtual const char* 9642: what() const noexcept; 9642: 9642: 9642: 9642: 9642: 9642: }; 9642: 9642: 9642: 9642: class domain_error : public logic_error 9642: { 9642: public: 9642: explicit domain_error(const string& __arg) ; 9642: 9642: explicit domain_error(const char*) ; 9642: domain_error(const domain_error&) = default; 9642: domain_error& operator=(const domain_error&) = default; 9642: domain_error(domain_error&&) = default; 9642: domain_error& operator=(domain_error&&) = default; 9642: 9642: virtual ~domain_error() noexcept; 9642: }; 9642: 9642: 9642: class invalid_argument : public logic_error 9642: { 9642: public: 9642: explicit invalid_argument(const string& __arg) ; 9642: 9642: explicit invalid_argument(const char*) ; 9642: invalid_argument(const invalid_argument&) = default; 9642: invalid_argument& operator=(const invalid_argument&) = default; 9642: invalid_argument(invalid_argument&&) = default; 9642: invalid_argument& operator=(invalid_argument&&) = default; 9642: 9642: virtual ~invalid_argument() noexcept; 9642: }; 9642: 9642: 9642: 9642: class length_error : public logic_error 9642: { 9642: public: 9642: explicit length_error(const string& __arg) ; 9642: 9642: explicit length_error(const char*) ; 9642: length_error(const length_error&) = default; 9642: length_error& operator=(const length_error&) = default; 9642: length_error(length_error&&) = default; 9642: length_error& operator=(length_error&&) = default; 9642: 9642: virtual ~length_error() noexcept; 9642: }; 9642: 9642: 9642: 9642: class out_of_range : public logic_error 9642: { 9642: public: 9642: explicit out_of_range(const string& __arg) ; 9642: 9642: explicit out_of_range(const char*) ; 9642: out_of_range(const out_of_range&) = default; 9642: out_of_range& operator=(const out_of_range&) = default; 9642: out_of_range(out_of_range&&) = default; 9642: out_of_range& operator=(out_of_range&&) = default; 9642: 9642: virtual ~out_of_range() noexcept; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: class runtime_error : public exception 9642: { 9642: __cow_string _M_msg; 9642: 9642: public: 9642: 9642: explicit 9642: runtime_error(const string& __arg) ; 9642: 9642: 9642: explicit 9642: runtime_error(const char*) ; 9642: 9642: runtime_error(runtime_error&&) noexcept; 9642: runtime_error& operator=(runtime_error&&) noexcept; 9642: 9642: 9642: 9642: runtime_error(const runtime_error&) noexcept; 9642: runtime_error& operator=(const runtime_error&) noexcept; 9642: 9642: 9642: 9642: 9642: 9642: virtual ~runtime_error() noexcept; 9642: 9642: 9642: 9642: virtual const char* 9642: what() const noexcept; 9642: 9642: 9642: 9642: 9642: 9642: }; 9642: 9642: 9642: class range_error : public runtime_error 9642: { 9642: public: 9642: explicit range_error(const string& __arg) ; 9642: 9642: explicit range_error(const char*) ; 9642: range_error(const range_error&) = default; 9642: range_error& operator=(const range_error&) = default; 9642: range_error(range_error&&) = default; 9642: range_error& operator=(range_error&&) = default; 9642: 9642: virtual ~range_error() noexcept; 9642: }; 9642: 9642: 9642: class overflow_error : public runtime_error 9642: { 9642: public: 9642: explicit overflow_error(const string& __arg) ; 9642: 9642: explicit overflow_error(const char*) ; 9642: overflow_error(const overflow_error&) = default; 9642: overflow_error& operator=(const overflow_error&) = default; 9642: overflow_error(overflow_error&&) = default; 9642: overflow_error& operator=(overflow_error&&) = default; 9642: 9642: virtual ~overflow_error() noexcept; 9642: }; 9642: 9642: 9642: class underflow_error : public runtime_error 9642: { 9642: public: 9642: explicit underflow_error(const string& __arg) ; 9642: 9642: explicit underflow_error(const char*) ; 9642: underflow_error(const underflow_error&) = default; 9642: underflow_error& operator=(const underflow_error&) = default; 9642: underflow_error(underflow_error&&) = default; 9642: underflow_error& operator=(underflow_error&&) = default; 9642: 9642: virtual ~underflow_error() noexcept; 9642: }; 9642: 9642: 9642: 9642: 9642: } 9642: # 44 "/usr/include/c++/13/system_error" 2 3 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: class error_code; 9642: class error_condition; 9642: class system_error; 9642: 9642: 9642: template 9642: struct is_error_code_enum : public false_type { }; 9642: 9642: 9642: template 9642: struct is_error_condition_enum : public false_type { }; 9642: 9642: template<> 9642: struct is_error_condition_enum 9642: : public true_type { }; 9642: 9642: 9642: template 9642: inline constexpr bool is_error_code_enum_v = 9642: is_error_code_enum<_Tp>::value; 9642: template 9642: inline constexpr bool is_error_condition_enum_v = 9642: is_error_condition_enum<_Tp>::value; 9642: 9642: 9642: 9642: inline namespace _V2 { 9642: # 106 "/usr/include/c++/13/system_error" 3 9642: class error_category 9642: { 9642: public: 9642: constexpr error_category() noexcept = default; 9642: 9642: virtual ~error_category(); 9642: 9642: error_category(const error_category&) = delete; 9642: error_category& operator=(const error_category&) = delete; 9642: 9642: 9642: virtual const char* 9642: name() const noexcept = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: private: 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: virtual __cow_string 9642: _M_message(int) const; 9642: 9642: public: 9642: 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: virtual string 9642: message(int) const = 0; 9642: # 144 "/usr/include/c++/13/system_error" 3 9642: public: 9642: 9642: virtual error_condition 9642: default_error_condition(int __i) const noexcept; 9642: 9642: 9642: virtual bool 9642: equivalent(int __i, const error_condition& __cond) const noexcept; 9642: 9642: 9642: virtual bool 9642: equivalent(const error_code& __code, int __i) const noexcept; 9642: 9642: 9642: [[__nodiscard__]] 9642: bool 9642: operator==(const error_category& __other) const noexcept 9642: { return this == &__other; } 9642: # 170 "/usr/include/c++/13/system_error" 3 9642: bool 9642: operator<(const error_category& __other) const noexcept 9642: { return less()(this, &__other); } 9642: 9642: bool 9642: operator!=(const error_category& __other) const noexcept 9642: { return this != &__other; } 9642: 9642: }; 9642: 9642: 9642: 9642: 9642: [[__nodiscard__, __gnu__::__const__]] 9642: const error_category& 9642: generic_category() noexcept; 9642: 9642: 9642: [[__nodiscard__, __gnu__::__const__]] 9642: const error_category& 9642: system_category() noexcept; 9642: 9642: 9642: 9642: } 9642: 9642: 9642: 9642: 9642: 9642: namespace __adl_only 9642: { 9642: void make_error_code() = delete; 9642: void make_error_condition() = delete; 9642: } 9642: # 223 "/usr/include/c++/13/system_error" 3 9642: class error_code 9642: { 9642: template 9642: using _Check 9642: = __enable_if_t::value>; 9642: 9642: public: 9642: error_code() noexcept 9642: : _M_value(0), _M_cat(&system_category()) { } 9642: 9642: error_code(int __v, const error_category& __cat) noexcept 9642: : _M_value(__v), _M_cat(&__cat) { } 9642: 9642: 9642: template> 9642: error_code(_ErrorCodeEnum __e) noexcept 9642: { 9642: using __adl_only::make_error_code; 9642: *this = make_error_code(__e); 9642: } 9642: 9642: error_code(const error_code&) = default; 9642: error_code& operator=(const error_code&) = default; 9642: 9642: void 9642: assign(int __v, const error_category& __cat) noexcept 9642: { 9642: _M_value = __v; 9642: _M_cat = &__cat; 9642: } 9642: 9642: void 9642: clear() noexcept 9642: { assign(0, system_category()); } 9642: 9642: 9642: [[__nodiscard__]] 9642: int 9642: value() const noexcept { return _M_value; } 9642: 9642: 9642: [[__nodiscard__]] 9642: const error_category& 9642: category() const noexcept { return *_M_cat; } 9642: 9642: 9642: error_condition 9642: default_error_condition() const noexcept; 9642: 9642: 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: string 9642: message() const 9642: { return category().message(value()); } 9642: 9642: 9642: [[__nodiscard__]] 9642: explicit operator bool() const noexcept 9642: { return _M_value != 0; } 9642: 9642: 9642: private: 9642: int _M_value; 9642: const error_category* _M_cat; 9642: }; 9642: # 300 "/usr/include/c++/13/system_error" 3 9642: [[__nodiscard__]] 9642: inline error_code 9642: make_error_code(errc __e) noexcept 9642: { return error_code(static_cast(__e), generic_category()); } 9642: # 323 "/usr/include/c++/13/system_error" 3 9642: inline bool 9642: operator<(const error_code& __lhs, const error_code& __rhs) noexcept 9642: { 9642: return (__lhs.category() < __rhs.category() 9642: || (__lhs.category() == __rhs.category() 9642: && __lhs.value() < __rhs.value())); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: basic_ostream<_CharT, _Traits>& 9642: operator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __e) 9642: { return (__os << __e.category().name() << ':' << __e.value()); } 9642: # 354 "/usr/include/c++/13/system_error" 3 9642: class error_condition 9642: { 9642: template 9642: using _Check 9642: = __enable_if_t::value>; 9642: 9642: public: 9642: 9642: error_condition() noexcept 9642: : _M_value(0), _M_cat(&generic_category()) { } 9642: 9642: 9642: error_condition(int __v, const error_category& __cat) noexcept 9642: : _M_value(__v), _M_cat(&__cat) { } 9642: 9642: 9642: template> 9642: error_condition(_ErrorConditionEnum __e) noexcept 9642: { 9642: using __adl_only::make_error_condition; 9642: *this = make_error_condition(__e); 9642: } 9642: 9642: error_condition(const error_condition&) = default; 9642: error_condition& operator=(const error_condition&) = default; 9642: 9642: 9642: void 9642: assign(int __v, const error_category& __cat) noexcept 9642: { 9642: _M_value = __v; 9642: _M_cat = &__cat; 9642: } 9642: 9642: 9642: void 9642: clear() noexcept 9642: { assign(0, generic_category()); } 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: int 9642: value() const noexcept { return _M_value; } 9642: 9642: 9642: [[__nodiscard__]] 9642: const error_category& 9642: category() const noexcept { return *_M_cat; } 9642: 9642: 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: string 9642: message() const 9642: { return category().message(value()); } 9642: 9642: 9642: [[__nodiscard__]] 9642: explicit operator bool() const noexcept 9642: { return _M_value != 0; } 9642: 9642: 9642: private: 9642: int _M_value; 9642: const error_category* _M_cat; 9642: }; 9642: # 433 "/usr/include/c++/13/system_error" 3 9642: [[__nodiscard__]] 9642: inline error_condition 9642: make_error_condition(errc __e) noexcept 9642: { return error_condition(static_cast(__e), generic_category()); } 9642: # 447 "/usr/include/c++/13/system_error" 3 9642: [[__nodiscard__]] 9642: inline bool 9642: operator==(const error_code& __lhs, const error_code& __rhs) noexcept 9642: { 9642: return __lhs.category() == __rhs.category() 9642: && __lhs.value() == __rhs.value(); 9642: } 9642: # 463 "/usr/include/c++/13/system_error" 3 9642: [[__nodiscard__]] 9642: inline bool 9642: operator==(const error_code& __lhs, const error_condition& __rhs) noexcept 9642: { 9642: return __lhs.category().equivalent(__lhs.value(), __rhs) 9642: || __rhs.category().equivalent(__lhs, __rhs.value()); 9642: } 9642: # 478 "/usr/include/c++/13/system_error" 3 9642: [[__nodiscard__]] 9642: inline bool 9642: operator==(const error_condition& __lhs, 9642: const error_condition& __rhs) noexcept 9642: { 9642: return __lhs.category() == __rhs.category() 9642: && __lhs.value() == __rhs.value(); 9642: } 9642: # 506 "/usr/include/c++/13/system_error" 3 9642: inline bool 9642: operator<(const error_condition& __lhs, 9642: const error_condition& __rhs) noexcept 9642: { 9642: return (__lhs.category() < __rhs.category() 9642: || (__lhs.category() == __rhs.category() 9642: && __lhs.value() < __rhs.value())); 9642: } 9642: 9642: 9642: inline bool 9642: operator==(const error_condition& __lhs, const error_code& __rhs) noexcept 9642: { 9642: return (__rhs.category().equivalent(__rhs.value(), __lhs) 9642: || __lhs.category().equivalent(__rhs, __lhs.value())); 9642: } 9642: 9642: 9642: inline bool 9642: operator!=(const error_code& __lhs, const error_code& __rhs) noexcept 9642: { return !(__lhs == __rhs); } 9642: 9642: 9642: inline bool 9642: operator!=(const error_code& __lhs, const error_condition& __rhs) noexcept 9642: { return !(__lhs == __rhs); } 9642: 9642: 9642: inline bool 9642: operator!=(const error_condition& __lhs, const error_code& __rhs) noexcept 9642: { return !(__lhs == __rhs); } 9642: 9642: 9642: inline bool 9642: operator!=(const error_condition& __lhs, 9642: const error_condition& __rhs) noexcept 9642: { return !(__lhs == __rhs); } 9642: # 556 "/usr/include/c++/13/system_error" 3 9642: class system_error : public std::runtime_error 9642: { 9642: private: 9642: error_code _M_code; 9642: 9642: public: 9642: system_error(error_code __ec = error_code()) 9642: : runtime_error(__ec.message()), _M_code(__ec) { } 9642: 9642: system_error(error_code __ec, const string& __what) 9642: : runtime_error(__what + (": " + __ec.message())), _M_code(__ec) { } 9642: 9642: system_error(error_code __ec, const char* __what) 9642: : runtime_error(__what + (": " + __ec.message())), _M_code(__ec) { } 9642: 9642: system_error(int __v, const error_category& __ecat, const char* __what) 9642: : system_error(error_code(__v, __ecat), __what) { } 9642: 9642: system_error(int __v, const error_category& __ecat) 9642: : runtime_error(error_code(__v, __ecat).message()), 9642: _M_code(__v, __ecat) { } 9642: 9642: system_error(int __v, const error_category& __ecat, const string& __what) 9642: : runtime_error(__what + (": " + error_code(__v, __ecat).message())), 9642: _M_code(__v, __ecat) { } 9642: 9642: 9642: system_error (const system_error &) = default; 9642: system_error &operator= (const system_error &) = default; 9642: 9642: 9642: virtual ~system_error() noexcept; 9642: 9642: const error_code& 9642: code() const noexcept { return _M_code; } 9642: }; 9642: 9642: 9642: } 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: template<> 9642: struct hash 9642: : public __hash_base 9642: { 9642: size_t 9642: operator()(const error_code& __e) const noexcept 9642: { 9642: const size_t __tmp = std::_Hash_impl::hash(__e.value()); 9642: return std::_Hash_impl::__hash_combine(&__e.category(), __tmp); 9642: } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template<> 9642: struct hash 9642: : public __hash_base 9642: { 9642: size_t 9642: operator()(const error_condition& __e) const noexcept 9642: { 9642: const size_t __tmp = std::_Hash_impl::hash(__e.value()); 9642: return std::_Hash_impl::__hash_combine(&__e.category(), __tmp); 9642: } 9642: }; 9642: 9642: 9642: 9642: } 9642: # 47 "/usr/include/c++/13/bits/ios_base.h" 2 3 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: enum _Ios_Fmtflags 9642: { 9642: _S_boolalpha = 1L << 0, 9642: _S_dec = 1L << 1, 9642: _S_fixed = 1L << 2, 9642: _S_hex = 1L << 3, 9642: _S_internal = 1L << 4, 9642: _S_left = 1L << 5, 9642: _S_oct = 1L << 6, 9642: _S_right = 1L << 7, 9642: _S_scientific = 1L << 8, 9642: _S_showbase = 1L << 9, 9642: _S_showpoint = 1L << 10, 9642: _S_showpos = 1L << 11, 9642: _S_skipws = 1L << 12, 9642: _S_unitbuf = 1L << 13, 9642: _S_uppercase = 1L << 14, 9642: _S_adjustfield = _S_left | _S_right | _S_internal, 9642: _S_basefield = _S_dec | _S_oct | _S_hex, 9642: _S_floatfield = _S_scientific | _S_fixed, 9642: _S_ios_fmtflags_end = 1L << 16, 9642: _S_ios_fmtflags_max = 0x7fffffff, 9642: _S_ios_fmtflags_min = ~0x7fffffff 9642: }; 9642: 9642: inline constexpr _Ios_Fmtflags 9642: operator&(_Ios_Fmtflags __a, _Ios_Fmtflags __b) 9642: { return _Ios_Fmtflags(static_cast(__a) & static_cast(__b)); } 9642: 9642: inline constexpr _Ios_Fmtflags 9642: operator|(_Ios_Fmtflags __a, _Ios_Fmtflags __b) 9642: { return _Ios_Fmtflags(static_cast(__a) | static_cast(__b)); } 9642: 9642: inline constexpr _Ios_Fmtflags 9642: operator^(_Ios_Fmtflags __a, _Ios_Fmtflags __b) 9642: { return _Ios_Fmtflags(static_cast(__a) ^ static_cast(__b)); } 9642: 9642: inline constexpr _Ios_Fmtflags 9642: operator~(_Ios_Fmtflags __a) 9642: { return _Ios_Fmtflags(~static_cast(__a)); } 9642: 9642: inline const _Ios_Fmtflags& 9642: operator|=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) 9642: { return __a = __a | __b; } 9642: 9642: inline const _Ios_Fmtflags& 9642: operator&=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) 9642: { return __a = __a & __b; } 9642: 9642: inline const _Ios_Fmtflags& 9642: operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) 9642: { return __a = __a ^ __b; } 9642: 9642: 9642: enum _Ios_Openmode 9642: { 9642: _S_app = 1L << 0, 9642: _S_ate = 1L << 1, 9642: _S_bin = 1L << 2, 9642: _S_in = 1L << 3, 9642: _S_out = 1L << 4, 9642: _S_trunc = 1L << 5, 9642: _S_noreplace = 1L << 6, 9642: _S_ios_openmode_end = 1L << 16, 9642: _S_ios_openmode_max = 0x7fffffff, 9642: _S_ios_openmode_min = ~0x7fffffff 9642: }; 9642: 9642: inline constexpr _Ios_Openmode 9642: operator&(_Ios_Openmode __a, _Ios_Openmode __b) 9642: { return _Ios_Openmode(static_cast(__a) & static_cast(__b)); } 9642: 9642: inline constexpr _Ios_Openmode 9642: operator|(_Ios_Openmode __a, _Ios_Openmode __b) 9642: { return _Ios_Openmode(static_cast(__a) | static_cast(__b)); } 9642: 9642: inline constexpr _Ios_Openmode 9642: operator^(_Ios_Openmode __a, _Ios_Openmode __b) 9642: { return _Ios_Openmode(static_cast(__a) ^ static_cast(__b)); } 9642: 9642: inline constexpr _Ios_Openmode 9642: operator~(_Ios_Openmode __a) 9642: { return _Ios_Openmode(~static_cast(__a)); } 9642: 9642: inline const _Ios_Openmode& 9642: operator|=(_Ios_Openmode& __a, _Ios_Openmode __b) 9642: { return __a = __a | __b; } 9642: 9642: inline const _Ios_Openmode& 9642: operator&=(_Ios_Openmode& __a, _Ios_Openmode __b) 9642: { return __a = __a & __b; } 9642: 9642: inline const _Ios_Openmode& 9642: operator^=(_Ios_Openmode& __a, _Ios_Openmode __b) 9642: { return __a = __a ^ __b; } 9642: 9642: 9642: enum _Ios_Iostate 9642: { 9642: _S_goodbit = 0, 9642: _S_badbit = 1L << 0, 9642: _S_eofbit = 1L << 1, 9642: _S_failbit = 1L << 2, 9642: _S_ios_iostate_end = 1L << 16, 9642: _S_ios_iostate_max = 0x7fffffff, 9642: _S_ios_iostate_min = ~0x7fffffff 9642: }; 9642: 9642: inline constexpr _Ios_Iostate 9642: operator&(_Ios_Iostate __a, _Ios_Iostate __b) 9642: { return _Ios_Iostate(static_cast(__a) & static_cast(__b)); } 9642: 9642: inline constexpr _Ios_Iostate 9642: operator|(_Ios_Iostate __a, _Ios_Iostate __b) 9642: { return _Ios_Iostate(static_cast(__a) | static_cast(__b)); } 9642: 9642: inline constexpr _Ios_Iostate 9642: operator^(_Ios_Iostate __a, _Ios_Iostate __b) 9642: { return _Ios_Iostate(static_cast(__a) ^ static_cast(__b)); } 9642: 9642: inline constexpr _Ios_Iostate 9642: operator~(_Ios_Iostate __a) 9642: { return _Ios_Iostate(~static_cast(__a)); } 9642: 9642: inline const _Ios_Iostate& 9642: operator|=(_Ios_Iostate& __a, _Ios_Iostate __b) 9642: { return __a = __a | __b; } 9642: 9642: inline const _Ios_Iostate& 9642: operator&=(_Ios_Iostate& __a, _Ios_Iostate __b) 9642: { return __a = __a & __b; } 9642: 9642: inline const _Ios_Iostate& 9642: operator^=(_Ios_Iostate& __a, _Ios_Iostate __b) 9642: { return __a = __a ^ __b; } 9642: 9642: 9642: enum _Ios_Seekdir 9642: { 9642: _S_beg = 0, 9642: _S_cur = 1, 9642: _S_end = 2, 9642: _S_ios_seekdir_end = 1L << 16 9642: }; 9642: 9642: 9642: 9642: enum class io_errc { stream = 1 }; 9642: 9642: template <> struct is_error_code_enum : public true_type { }; 9642: 9642: [[__nodiscard__, __gnu__::__const__]] 9642: const error_category& 9642: iostream_category() noexcept; 9642: 9642: [[__nodiscard__]] 9642: inline error_code 9642: make_error_code(io_errc __e) noexcept 9642: { return error_code(static_cast(__e), iostream_category()); } 9642: 9642: [[__nodiscard__]] 9642: inline error_condition 9642: make_error_condition(io_errc __e) noexcept 9642: { return error_condition(static_cast(__e), iostream_category()); } 9642: # 233 "/usr/include/c++/13/bits/ios_base.h" 3 9642: class ios_base 9642: { 9642: # 251 "/usr/include/c++/13/bits/ios_base.h" 3 9642: public: 9642: # 260 "/usr/include/c++/13/bits/ios_base.h" 3 9642: class __attribute ((__abi_tag__ ("cxx11"))) failure : public system_error 9642: { 9642: public: 9642: explicit 9642: failure(const string& __str); 9642: 9642: 9642: explicit 9642: failure(const string&, const error_code&); 9642: 9642: explicit 9642: failure(const char*, const error_code& = io_errc::stream); 9642: 9642: 9642: virtual 9642: ~failure() throw(); 9642: 9642: virtual const char* 9642: what() const throw(); 9642: }; 9642: # 346 "/usr/include/c++/13/bits/ios_base.h" 3 9642: typedef _Ios_Fmtflags fmtflags; 9642: 9642: 9642: static const fmtflags boolalpha = _S_boolalpha; 9642: 9642: 9642: static const fmtflags dec = _S_dec; 9642: 9642: 9642: static const fmtflags fixed = _S_fixed; 9642: 9642: 9642: static const fmtflags hex = _S_hex; 9642: 9642: 9642: 9642: 9642: static const fmtflags internal = _S_internal; 9642: 9642: 9642: 9642: static const fmtflags left = _S_left; 9642: 9642: 9642: static const fmtflags oct = _S_oct; 9642: 9642: 9642: 9642: static const fmtflags right = _S_right; 9642: 9642: 9642: static const fmtflags scientific = _S_scientific; 9642: 9642: 9642: 9642: static const fmtflags showbase = _S_showbase; 9642: 9642: 9642: 9642: static const fmtflags showpoint = _S_showpoint; 9642: 9642: 9642: static const fmtflags showpos = _S_showpos; 9642: 9642: 9642: static const fmtflags skipws = _S_skipws; 9642: 9642: 9642: static const fmtflags unitbuf = _S_unitbuf; 9642: 9642: 9642: 9642: static const fmtflags uppercase = _S_uppercase; 9642: 9642: 9642: static const fmtflags adjustfield = _S_adjustfield; 9642: 9642: 9642: static const fmtflags basefield = _S_basefield; 9642: 9642: 9642: static const fmtflags floatfield = _S_floatfield; 9642: # 421 "/usr/include/c++/13/bits/ios_base.h" 3 9642: typedef _Ios_Iostate iostate; 9642: 9642: 9642: 9642: static const iostate badbit = _S_badbit; 9642: 9642: 9642: static const iostate eofbit = _S_eofbit; 9642: 9642: 9642: 9642: 9642: static const iostate failbit = _S_failbit; 9642: 9642: 9642: static const iostate goodbit = _S_goodbit; 9642: # 452 "/usr/include/c++/13/bits/ios_base.h" 3 9642: typedef _Ios_Openmode openmode; 9642: 9642: 9642: static const openmode app = _S_app; 9642: 9642: 9642: static const openmode ate = _S_ate; 9642: 9642: 9642: 9642: 9642: static const openmode binary = _S_bin; 9642: 9642: 9642: static const openmode in = _S_in; 9642: 9642: 9642: static const openmode out = _S_out; 9642: 9642: 9642: static const openmode trunc = _S_trunc; 9642: 9642: static const openmode __noreplace = _S_noreplace; 9642: # 492 "/usr/include/c++/13/bits/ios_base.h" 3 9642: typedef _Ios_Seekdir seekdir; 9642: 9642: 9642: static const seekdir beg = _S_beg; 9642: 9642: 9642: static const seekdir cur = _S_cur; 9642: 9642: 9642: static const seekdir end = _S_end; 9642: # 525 "/usr/include/c++/13/bits/ios_base.h" 3 9642: enum event 9642: { 9642: erase_event, 9642: imbue_event, 9642: copyfmt_event 9642: }; 9642: # 542 "/usr/include/c++/13/bits/ios_base.h" 3 9642: typedef void (*event_callback) (event __e, ios_base& __b, int __i); 9642: # 554 "/usr/include/c++/13/bits/ios_base.h" 3 9642: void 9642: register_callback(event_callback __fn, int __index); 9642: 9642: protected: 9642: streamsize _M_precision; 9642: streamsize _M_width; 9642: fmtflags _M_flags; 9642: iostate _M_exception; 9642: iostate _M_streambuf_state; 9642: 9642: 9642: 9642: struct _Callback_list 9642: { 9642: 9642: _Callback_list* _M_next; 9642: ios_base::event_callback _M_fn; 9642: int _M_index; 9642: _Atomic_word _M_refcount; 9642: 9642: _Callback_list(ios_base::event_callback __fn, int __index, 9642: _Callback_list* __cb) 9642: : _M_next(__cb), _M_fn(__fn), _M_index(__index), _M_refcount(0) { } 9642: 9642: void 9642: _M_add_reference() { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); } 9642: 9642: 9642: int 9642: _M_remove_reference() 9642: { 9642: 9642: ; 9642: int __res = __gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1); 9642: if (__res == 0) 9642: { 9642: ; 9642: } 9642: return __res; 9642: } 9642: }; 9642: 9642: _Callback_list* _M_callbacks; 9642: 9642: void 9642: _M_call_callbacks(event __ev) throw(); 9642: 9642: void 9642: _M_dispose_callbacks(void) throw(); 9642: 9642: 9642: struct _Words 9642: { 9642: void* _M_pword; 9642: long _M_iword; 9642: _Words() : _M_pword(0), _M_iword(0) { } 9642: }; 9642: 9642: 9642: _Words _M_word_zero; 9642: 9642: 9642: 9642: enum { _S_local_word_size = 8 }; 9642: _Words _M_local_word[_S_local_word_size]; 9642: 9642: 9642: int _M_word_size; 9642: _Words* _M_word; 9642: 9642: _Words& 9642: _M_grow_words(int __index, bool __iword); 9642: 9642: 9642: locale _M_ios_locale; 9642: 9642: void 9642: _M_init() throw(); 9642: 9642: public: 9642: 9642: 9642: 9642: 9642: 9642: class Init 9642: { 9642: friend class ios_base; 9642: public: 9642: Init(); 9642: ~Init(); 9642: 9642: 9642: Init(const Init&) = default; 9642: Init& operator=(const Init&) = default; 9642: 9642: 9642: private: 9642: static _Atomic_word _S_refcount; 9642: static bool _S_synced_with_stdio; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: fmtflags 9642: flags() const 9642: { return _M_flags; } 9642: # 672 "/usr/include/c++/13/bits/ios_base.h" 3 9642: fmtflags 9642: flags(fmtflags __fmtfl) 9642: { 9642: fmtflags __old = _M_flags; 9642: _M_flags = __fmtfl; 9642: return __old; 9642: } 9642: # 688 "/usr/include/c++/13/bits/ios_base.h" 3 9642: fmtflags 9642: setf(fmtflags __fmtfl) 9642: { 9642: fmtflags __old = _M_flags; 9642: _M_flags |= __fmtfl; 9642: return __old; 9642: } 9642: # 705 "/usr/include/c++/13/bits/ios_base.h" 3 9642: fmtflags 9642: setf(fmtflags __fmtfl, fmtflags __mask) 9642: { 9642: fmtflags __old = _M_flags; 9642: _M_flags &= ~__mask; 9642: _M_flags |= (__fmtfl & __mask); 9642: return __old; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: unsetf(fmtflags __mask) 9642: { _M_flags &= ~__mask; } 9642: # 731 "/usr/include/c++/13/bits/ios_base.h" 3 9642: streamsize 9642: precision() const 9642: { return _M_precision; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: streamsize 9642: precision(streamsize __prec) 9642: { 9642: streamsize __old = _M_precision; 9642: _M_precision = __prec; 9642: return __old; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: streamsize 9642: width() const 9642: { return _M_width; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: streamsize 9642: width(streamsize __wide) 9642: { 9642: streamsize __old = _M_width; 9642: _M_width = __wide; 9642: return __old; 9642: } 9642: # 782 "/usr/include/c++/13/bits/ios_base.h" 3 9642: static bool 9642: sync_with_stdio(bool __sync = true); 9642: # 794 "/usr/include/c++/13/bits/ios_base.h" 3 9642: locale 9642: imbue(const locale& __loc) throw(); 9642: # 805 "/usr/include/c++/13/bits/ios_base.h" 3 9642: locale 9642: getloc() const 9642: { return _M_ios_locale; } 9642: # 816 "/usr/include/c++/13/bits/ios_base.h" 3 9642: const locale& 9642: _M_getloc() const 9642: { return _M_ios_locale; } 9642: # 835 "/usr/include/c++/13/bits/ios_base.h" 3 9642: static int 9642: xalloc() throw(); 9642: # 851 "/usr/include/c++/13/bits/ios_base.h" 3 9642: long& 9642: iword(int __ix) 9642: { 9642: _Words& __word = ((unsigned)__ix < (unsigned)_M_word_size) 9642: ? _M_word[__ix] : _M_grow_words(__ix, true); 9642: return __word._M_iword; 9642: } 9642: # 872 "/usr/include/c++/13/bits/ios_base.h" 3 9642: void*& 9642: pword(int __ix) 9642: { 9642: _Words& __word = ((unsigned)__ix < (unsigned)_M_word_size) 9642: ? _M_word[__ix] : _M_grow_words(__ix, false); 9642: return __word._M_pword; 9642: } 9642: # 889 "/usr/include/c++/13/bits/ios_base.h" 3 9642: virtual ~ios_base(); 9642: 9642: protected: 9642: ios_base() throw (); 9642: # 903 "/usr/include/c++/13/bits/ios_base.h" 3 9642: public: 9642: ios_base(const ios_base&) = delete; 9642: 9642: ios_base& 9642: operator=(const ios_base&) = delete; 9642: 9642: protected: 9642: void 9642: _M_move(ios_base&) noexcept; 9642: 9642: void 9642: _M_swap(ios_base& __rhs) noexcept; 9642: 9642: }; 9642: 9642: 9642: 9642: inline ios_base& 9642: boolalpha(ios_base& __base) 9642: { 9642: __base.setf(ios_base::boolalpha); 9642: return __base; 9642: } 9642: 9642: 9642: inline ios_base& 9642: noboolalpha(ios_base& __base) 9642: { 9642: __base.unsetf(ios_base::boolalpha); 9642: return __base; 9642: } 9642: 9642: 9642: inline ios_base& 9642: showbase(ios_base& __base) 9642: { 9642: __base.setf(ios_base::showbase); 9642: return __base; 9642: } 9642: 9642: 9642: inline ios_base& 9642: noshowbase(ios_base& __base) 9642: { 9642: __base.unsetf(ios_base::showbase); 9642: return __base; 9642: } 9642: 9642: 9642: inline ios_base& 9642: showpoint(ios_base& __base) 9642: { 9642: __base.setf(ios_base::showpoint); 9642: return __base; 9642: } 9642: 9642: 9642: inline ios_base& 9642: noshowpoint(ios_base& __base) 9642: { 9642: __base.unsetf(ios_base::showpoint); 9642: return __base; 9642: } 9642: 9642: 9642: inline ios_base& 9642: showpos(ios_base& __base) 9642: { 9642: __base.setf(ios_base::showpos); 9642: return __base; 9642: } 9642: 9642: 9642: inline ios_base& 9642: noshowpos(ios_base& __base) 9642: { 9642: __base.unsetf(ios_base::showpos); 9642: return __base; 9642: } 9642: 9642: 9642: inline ios_base& 9642: skipws(ios_base& __base) 9642: { 9642: __base.setf(ios_base::skipws); 9642: return __base; 9642: } 9642: 9642: 9642: inline ios_base& 9642: noskipws(ios_base& __base) 9642: { 9642: __base.unsetf(ios_base::skipws); 9642: return __base; 9642: } 9642: 9642: 9642: inline ios_base& 9642: uppercase(ios_base& __base) 9642: { 9642: __base.setf(ios_base::uppercase); 9642: return __base; 9642: } 9642: 9642: 9642: inline ios_base& 9642: nouppercase(ios_base& __base) 9642: { 9642: __base.unsetf(ios_base::uppercase); 9642: return __base; 9642: } 9642: 9642: 9642: inline ios_base& 9642: unitbuf(ios_base& __base) 9642: { 9642: __base.setf(ios_base::unitbuf); 9642: return __base; 9642: } 9642: 9642: 9642: inline ios_base& 9642: nounitbuf(ios_base& __base) 9642: { 9642: __base.unsetf(ios_base::unitbuf); 9642: return __base; 9642: } 9642: 9642: 9642: 9642: inline ios_base& 9642: internal(ios_base& __base) 9642: { 9642: __base.setf(ios_base::internal, ios_base::adjustfield); 9642: return __base; 9642: } 9642: 9642: 9642: inline ios_base& 9642: left(ios_base& __base) 9642: { 9642: __base.setf(ios_base::left, ios_base::adjustfield); 9642: return __base; 9642: } 9642: 9642: 9642: inline ios_base& 9642: right(ios_base& __base) 9642: { 9642: __base.setf(ios_base::right, ios_base::adjustfield); 9642: return __base; 9642: } 9642: 9642: 9642: 9642: inline ios_base& 9642: dec(ios_base& __base) 9642: { 9642: __base.setf(ios_base::dec, ios_base::basefield); 9642: return __base; 9642: } 9642: 9642: 9642: inline ios_base& 9642: hex(ios_base& __base) 9642: { 9642: __base.setf(ios_base::hex, ios_base::basefield); 9642: return __base; 9642: } 9642: 9642: 9642: inline ios_base& 9642: oct(ios_base& __base) 9642: { 9642: __base.setf(ios_base::oct, ios_base::basefield); 9642: return __base; 9642: } 9642: 9642: 9642: 9642: inline ios_base& 9642: fixed(ios_base& __base) 9642: { 9642: __base.setf(ios_base::fixed, ios_base::floatfield); 9642: return __base; 9642: } 9642: 9642: 9642: inline ios_base& 9642: scientific(ios_base& __base) 9642: { 9642: __base.setf(ios_base::scientific, ios_base::floatfield); 9642: return __base; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline ios_base& 9642: hexfloat(ios_base& __base) 9642: { 9642: __base.setf(ios_base::fixed | ios_base::scientific, ios_base::floatfield); 9642: return __base; 9642: } 9642: 9642: 9642: inline ios_base& 9642: defaultfloat(ios_base& __base) 9642: { 9642: __base.unsetf(ios_base::floatfield); 9642: return __base; 9642: } 9642: 9642: 9642: 9642: } 9642: # 45 "/usr/include/c++/13/ios" 2 3 9642: # 1 "/usr/include/c++/13/streambuf" 1 3 9642: # 36 "/usr/include/c++/13/streambuf" 3 9642: 9642: # 37 "/usr/include/c++/13/streambuf" 3 9642: # 47 "/usr/include/c++/13/streambuf" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: template 9642: streamsize 9642: __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>*, 9642: basic_streambuf<_CharT, _Traits>*, bool&); 9642: # 123 "/usr/include/c++/13/streambuf" 3 9642: template 9642: class basic_streambuf 9642: { 9642: public: 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef _CharT char_type; 9642: typedef _Traits traits_type; 9642: typedef typename traits_type::int_type int_type; 9642: typedef typename traits_type::pos_type pos_type; 9642: typedef typename traits_type::off_type off_type; 9642: 9642: 9642: 9642: 9642: typedef basic_streambuf __streambuf_type; 9642: 9642: 9642: friend class basic_ios; 9642: friend class basic_istream; 9642: friend class basic_ostream; 9642: friend class istreambuf_iterator; 9642: friend class ostreambuf_iterator; 9642: 9642: friend streamsize 9642: __copy_streambufs_eof<>(basic_streambuf*, basic_streambuf*, bool&); 9642: 9642: template 9642: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, 9642: _CharT2*>::__type 9642: __copy_move_a2(istreambuf_iterator<_CharT2>, 9642: istreambuf_iterator<_CharT2>, _CharT2*); 9642: 9642: template 9642: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, 9642: istreambuf_iterator<_CharT2> >::__type 9642: find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, 9642: const _CharT2&); 9642: 9642: template 9642: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, 9642: void>::__type 9642: advance(istreambuf_iterator<_CharT2>&, _Distance); 9642: 9642: friend void __istream_extract(istream&, char*, streamsize); 9642: 9642: template 9642: friend basic_istream<_CharT2, _Traits2>& 9642: operator>>(basic_istream<_CharT2, _Traits2>&, 9642: basic_string<_CharT2, _Traits2, _Alloc>&); 9642: 9642: template 9642: friend basic_istream<_CharT2, _Traits2>& 9642: getline(basic_istream<_CharT2, _Traits2>&, 9642: basic_string<_CharT2, _Traits2, _Alloc>&, _CharT2); 9642: 9642: protected: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: char_type* _M_in_beg; 9642: char_type* _M_in_cur; 9642: char_type* _M_in_end; 9642: char_type* _M_out_beg; 9642: char_type* _M_out_cur; 9642: char_type* _M_out_end; 9642: 9642: 9642: locale _M_buf_locale; 9642: 9642: public: 9642: 9642: virtual 9642: ~basic_streambuf() 9642: { } 9642: # 215 "/usr/include/c++/13/streambuf" 3 9642: locale 9642: pubimbue(const locale& __loc) 9642: { 9642: locale __tmp(this->getloc()); 9642: this->imbue(__loc); 9642: _M_buf_locale = __loc; 9642: return __tmp; 9642: } 9642: # 232 "/usr/include/c++/13/streambuf" 3 9642: locale 9642: getloc() const 9642: { return _M_buf_locale; } 9642: # 245 "/usr/include/c++/13/streambuf" 3 9642: basic_streambuf* 9642: pubsetbuf(char_type* __s, streamsize __n) 9642: { return this->setbuf(__s, __n); } 9642: # 257 "/usr/include/c++/13/streambuf" 3 9642: pos_type 9642: pubseekoff(off_type __off, ios_base::seekdir __way, 9642: ios_base::openmode __mode = ios_base::in | ios_base::out) 9642: { return this->seekoff(__off, __way, __mode); } 9642: # 269 "/usr/include/c++/13/streambuf" 3 9642: pos_type 9642: pubseekpos(pos_type __sp, 9642: ios_base::openmode __mode = ios_base::in | ios_base::out) 9642: { return this->seekpos(__sp, __mode); } 9642: 9642: 9642: 9642: 9642: int 9642: pubsync() { return this->sync(); } 9642: # 290 "/usr/include/c++/13/streambuf" 3 9642: streamsize 9642: in_avail() 9642: { 9642: const streamsize __ret = this->egptr() - this->gptr(); 9642: return __ret ? __ret : this->showmanyc(); 9642: } 9642: # 304 "/usr/include/c++/13/streambuf" 3 9642: int_type 9642: snextc() 9642: { 9642: int_type __ret = traits_type::eof(); 9642: if (__builtin_expect(!traits_type::eq_int_type(this->sbumpc(), 9642: __ret), true)) 9642: __ret = this->sgetc(); 9642: return __ret; 9642: } 9642: # 322 "/usr/include/c++/13/streambuf" 3 9642: int_type 9642: sbumpc() 9642: { 9642: int_type __ret; 9642: if (__builtin_expect(this->gptr() < this->egptr(), true)) 9642: { 9642: __ret = traits_type::to_int_type(*this->gptr()); 9642: this->gbump(1); 9642: } 9642: else 9642: __ret = this->uflow(); 9642: return __ret; 9642: } 9642: # 344 "/usr/include/c++/13/streambuf" 3 9642: int_type 9642: sgetc() 9642: { 9642: int_type __ret; 9642: if (__builtin_expect(this->gptr() < this->egptr(), true)) 9642: __ret = traits_type::to_int_type(*this->gptr()); 9642: else 9642: __ret = this->underflow(); 9642: return __ret; 9642: } 9642: # 363 "/usr/include/c++/13/streambuf" 3 9642: streamsize 9642: sgetn(char_type* __s, streamsize __n) 9642: { return this->xsgetn(__s, __n); } 9642: # 378 "/usr/include/c++/13/streambuf" 3 9642: int_type 9642: sputbackc(char_type __c) 9642: { 9642: int_type __ret; 9642: const bool __testpos = this->eback() < this->gptr(); 9642: if (__builtin_expect(!__testpos || 9642: !traits_type::eq(__c, this->gptr()[-1]), false)) 9642: __ret = this->pbackfail(traits_type::to_int_type(__c)); 9642: else 9642: { 9642: this->gbump(-1); 9642: __ret = traits_type::to_int_type(*this->gptr()); 9642: } 9642: return __ret; 9642: } 9642: # 403 "/usr/include/c++/13/streambuf" 3 9642: int_type 9642: sungetc() 9642: { 9642: int_type __ret; 9642: if (__builtin_expect(this->eback() < this->gptr(), true)) 9642: { 9642: this->gbump(-1); 9642: __ret = traits_type::to_int_type(*this->gptr()); 9642: } 9642: else 9642: __ret = this->pbackfail(); 9642: return __ret; 9642: } 9642: # 430 "/usr/include/c++/13/streambuf" 3 9642: int_type 9642: sputc(char_type __c) 9642: { 9642: int_type __ret; 9642: if (__builtin_expect(this->pptr() < this->epptr(), true)) 9642: { 9642: *this->pptr() = __c; 9642: this->pbump(1); 9642: __ret = traits_type::to_int_type(__c); 9642: } 9642: else 9642: __ret = this->overflow(traits_type::to_int_type(__c)); 9642: return __ret; 9642: } 9642: # 456 "/usr/include/c++/13/streambuf" 3 9642: streamsize 9642: sputn(const char_type* __s, streamsize __n) 9642: { return this->xsputn(__s, __n); } 9642: 9642: protected: 9642: # 470 "/usr/include/c++/13/streambuf" 3 9642: basic_streambuf() 9642: : _M_in_beg(0), _M_in_cur(0), _M_in_end(0), 9642: _M_out_beg(0), _M_out_cur(0), _M_out_end(0), 9642: _M_buf_locale(locale()) 9642: { } 9642: # 488 "/usr/include/c++/13/streambuf" 3 9642: char_type* 9642: eback() const { return _M_in_beg; } 9642: 9642: char_type* 9642: gptr() const { return _M_in_cur; } 9642: 9642: char_type* 9642: egptr() const { return _M_in_end; } 9642: # 504 "/usr/include/c++/13/streambuf" 3 9642: void 9642: gbump(int __n) { _M_in_cur += __n; } 9642: # 515 "/usr/include/c++/13/streambuf" 3 9642: void 9642: setg(char_type* __gbeg, char_type* __gnext, char_type* __gend) 9642: { 9642: _M_in_beg = __gbeg; 9642: _M_in_cur = __gnext; 9642: _M_in_end = __gend; 9642: } 9642: # 535 "/usr/include/c++/13/streambuf" 3 9642: char_type* 9642: pbase() const { return _M_out_beg; } 9642: 9642: char_type* 9642: pptr() const { return _M_out_cur; } 9642: 9642: char_type* 9642: epptr() const { return _M_out_end; } 9642: # 551 "/usr/include/c++/13/streambuf" 3 9642: void 9642: pbump(int __n) { _M_out_cur += __n; } 9642: # 561 "/usr/include/c++/13/streambuf" 3 9642: void 9642: setp(char_type* __pbeg, char_type* __pend) 9642: { 9642: _M_out_beg = _M_out_cur = __pbeg; 9642: _M_out_end = __pend; 9642: } 9642: # 582 "/usr/include/c++/13/streambuf" 3 9642: virtual void 9642: imbue(const locale& __loc __attribute__ ((__unused__))) 9642: { } 9642: # 597 "/usr/include/c++/13/streambuf" 3 9642: virtual basic_streambuf* 9642: setbuf(char_type*, streamsize) 9642: { return this; } 9642: # 608 "/usr/include/c++/13/streambuf" 3 9642: virtual pos_type 9642: seekoff(off_type, ios_base::seekdir, 9642: ios_base::openmode = ios_base::in | ios_base::out) 9642: { return pos_type(off_type(-1)); } 9642: # 620 "/usr/include/c++/13/streambuf" 3 9642: virtual pos_type 9642: seekpos(pos_type, 9642: ios_base::openmode = ios_base::in | ios_base::out) 9642: { return pos_type(off_type(-1)); } 9642: # 633 "/usr/include/c++/13/streambuf" 3 9642: virtual int 9642: sync() { return 0; } 9642: # 655 "/usr/include/c++/13/streambuf" 3 9642: virtual streamsize 9642: showmanyc() { return 0; } 9642: # 671 "/usr/include/c++/13/streambuf" 3 9642: virtual streamsize 9642: xsgetn(char_type* __s, streamsize __n); 9642: # 693 "/usr/include/c++/13/streambuf" 3 9642: virtual int_type 9642: underflow() 9642: { return traits_type::eof(); } 9642: # 706 "/usr/include/c++/13/streambuf" 3 9642: virtual int_type 9642: uflow() 9642: { 9642: int_type __ret = traits_type::eof(); 9642: const bool __testeof = traits_type::eq_int_type(this->underflow(), 9642: __ret); 9642: if (!__testeof) 9642: { 9642: __ret = traits_type::to_int_type(*this->gptr()); 9642: this->gbump(1); 9642: } 9642: return __ret; 9642: } 9642: # 730 "/usr/include/c++/13/streambuf" 3 9642: virtual int_type 9642: pbackfail(int_type __c __attribute__ ((__unused__)) = traits_type::eof()) 9642: { return traits_type::eof(); } 9642: # 748 "/usr/include/c++/13/streambuf" 3 9642: virtual streamsize 9642: xsputn(const char_type* __s, streamsize __n); 9642: # 774 "/usr/include/c++/13/streambuf" 3 9642: virtual int_type 9642: overflow(int_type __c __attribute__ ((__unused__)) = traits_type::eof()) 9642: { return traits_type::eof(); } 9642: # 801 "/usr/include/c++/13/streambuf" 3 9642: void 9642: __safe_gbump(streamsize __n) { _M_in_cur += __n; } 9642: 9642: void 9642: __safe_pbump(streamsize __n) { _M_out_cur += __n; } 9642: 9642: 9642: 9642: 9642: protected: 9642: 9642: basic_streambuf(const basic_streambuf&); 9642: 9642: basic_streambuf& 9642: operator=(const basic_streambuf&); 9642: 9642: 9642: void 9642: swap(basic_streambuf& __sb) 9642: { 9642: std::swap(_M_in_beg, __sb._M_in_beg); 9642: std::swap(_M_in_cur, __sb._M_in_cur); 9642: std::swap(_M_in_end, __sb._M_in_end); 9642: std::swap(_M_out_beg, __sb._M_out_beg); 9642: std::swap(_M_out_cur, __sb._M_out_cur); 9642: std::swap(_M_out_end, __sb._M_out_end); 9642: std::swap(_M_buf_locale, __sb._M_buf_locale); 9642: } 9642: 9642: }; 9642: 9642: 9642: template 9642: std::basic_streambuf<_CharT, _Traits>:: 9642: basic_streambuf(const basic_streambuf&) = default; 9642: 9642: template 9642: std::basic_streambuf<_CharT, _Traits>& 9642: std::basic_streambuf<_CharT, _Traits>:: 9642: operator=(const basic_streambuf&) = default; 9642: 9642: 9642: 9642: template<> 9642: streamsize 9642: __copy_streambufs_eof(basic_streambuf* __sbin, 9642: basic_streambuf* __sbout, bool& __ineof); 9642: 9642: template<> 9642: streamsize 9642: __copy_streambufs_eof(basic_streambuf* __sbin, 9642: basic_streambuf* __sbout, bool& __ineof); 9642: 9642: 9642: 9642: 9642: 9642: } 9642: 9642: # 1 "/usr/include/c++/13/bits/streambuf.tcc" 1 3 9642: # 37 "/usr/include/c++/13/bits/streambuf.tcc" 3 9642: 9642: # 38 "/usr/include/c++/13/bits/streambuf.tcc" 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: template 9642: streamsize 9642: basic_streambuf<_CharT, _Traits>:: 9642: xsgetn(char_type* __s, streamsize __n) 9642: { 9642: streamsize __ret = 0; 9642: while (__ret < __n) 9642: { 9642: const streamsize __buf_len = this->egptr() - this->gptr(); 9642: if (__buf_len) 9642: { 9642: const streamsize __remaining = __n - __ret; 9642: const streamsize __len = std::min(__buf_len, __remaining); 9642: traits_type::copy(__s, this->gptr(), __len); 9642: __ret += __len; 9642: __s += __len; 9642: this->__safe_gbump(__len); 9642: } 9642: 9642: if (__ret < __n) 9642: { 9642: const int_type __c = this->uflow(); 9642: if (!traits_type::eq_int_type(__c, traits_type::eof())) 9642: { 9642: traits_type::assign(*__s++, traits_type::to_char_type(__c)); 9642: ++__ret; 9642: } 9642: else 9642: break; 9642: } 9642: } 9642: return __ret; 9642: } 9642: 9642: template 9642: streamsize 9642: basic_streambuf<_CharT, _Traits>:: 9642: xsputn(const char_type* __s, streamsize __n) 9642: { 9642: streamsize __ret = 0; 9642: while (__ret < __n) 9642: { 9642: const streamsize __buf_len = this->epptr() - this->pptr(); 9642: if (__buf_len) 9642: { 9642: const streamsize __remaining = __n - __ret; 9642: const streamsize __len = std::min(__buf_len, __remaining); 9642: traits_type::copy(this->pptr(), __s, __len); 9642: __ret += __len; 9642: __s += __len; 9642: this->__safe_pbump(__len); 9642: } 9642: 9642: if (__ret < __n) 9642: { 9642: int_type __c = this->overflow(traits_type::to_int_type(*__s)); 9642: if (!traits_type::eq_int_type(__c, traits_type::eof())) 9642: { 9642: ++__ret; 9642: ++__s; 9642: } 9642: else 9642: break; 9642: } 9642: } 9642: return __ret; 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: streamsize 9642: __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>* __sbin, 9642: basic_streambuf<_CharT, _Traits>* __sbout, 9642: bool& __ineof) 9642: { 9642: streamsize __ret = 0; 9642: __ineof = true; 9642: typename _Traits::int_type __c = __sbin->sgetc(); 9642: while (!_Traits::eq_int_type(__c, _Traits::eof())) 9642: { 9642: __c = __sbout->sputc(_Traits::to_char_type(__c)); 9642: if (_Traits::eq_int_type(__c, _Traits::eof())) 9642: { 9642: __ineof = false; 9642: break; 9642: } 9642: ++__ret; 9642: __c = __sbin->snextc(); 9642: } 9642: return __ret; 9642: } 9642: 9642: template 9642: inline streamsize 9642: __copy_streambufs(basic_streambuf<_CharT, _Traits>* __sbin, 9642: basic_streambuf<_CharT, _Traits>* __sbout) 9642: { 9642: bool __ineof; 9642: return __copy_streambufs_eof(__sbin, __sbout, __ineof); 9642: } 9642: 9642: 9642: 9642: 9642: extern template class basic_streambuf; 9642: 9642: extern template 9642: streamsize 9642: __copy_streambufs(basic_streambuf*, 9642: basic_streambuf*); 9642: 9642: 9642: extern template class basic_streambuf; 9642: 9642: extern template 9642: streamsize 9642: __copy_streambufs(basic_streambuf*, 9642: basic_streambuf*); 9642: 9642: 9642: 9642: 9642: } 9642: # 861 "/usr/include/c++/13/streambuf" 2 3 9642: # 46 "/usr/include/c++/13/ios" 2 3 9642: # 1 "/usr/include/c++/13/bits/basic_ios.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/basic_ios.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/basic_ios.h" 3 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/locale_facets.h" 1 3 9642: # 37 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: 9642: # 38 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: 9642: # 1 "/usr/include/c++/13/cwctype" 1 3 9642: # 39 "/usr/include/c++/13/cwctype" 3 9642: 9642: # 40 "/usr/include/c++/13/cwctype" 3 9642: # 50 "/usr/include/c++/13/cwctype" 3 9642: # 1 "/usr/include/wctype.h" 1 3 4 9642: # 38 "/usr/include/wctype.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/wctype-wchar.h" 1 3 4 9642: # 38 "/usr/include/arm-linux-gnueabihf/bits/wctype-wchar.h" 3 4 9642: typedef unsigned long int wctype_t; 9642: # 56 "/usr/include/arm-linux-gnueabihf/bits/wctype-wchar.h" 3 4 9642: enum 9642: { 9642: __ISwupper = 0, 9642: __ISwlower = 1, 9642: __ISwalpha = 2, 9642: __ISwdigit = 3, 9642: __ISwxdigit = 4, 9642: __ISwspace = 5, 9642: __ISwprint = 6, 9642: __ISwgraph = 7, 9642: __ISwblank = 8, 9642: __ISwcntrl = 9, 9642: __ISwpunct = 10, 9642: __ISwalnum = 11, 9642: 9642: _ISwupper = ((__ISwupper) < 8 ? (int) ((1UL << (__ISwupper)) << 24) : ((__ISwupper) < 16 ? (int) ((1UL << (__ISwupper)) << 8) : ((__ISwupper) < 24 ? (int) ((1UL << (__ISwupper)) >> 8) : (int) ((1UL << (__ISwupper)) >> 24)))), 9642: _ISwlower = ((__ISwlower) < 8 ? (int) ((1UL << (__ISwlower)) << 24) : ((__ISwlower) < 16 ? (int) ((1UL << (__ISwlower)) << 8) : ((__ISwlower) < 24 ? (int) ((1UL << (__ISwlower)) >> 8) : (int) ((1UL << (__ISwlower)) >> 24)))), 9642: _ISwalpha = ((__ISwalpha) < 8 ? (int) ((1UL << (__ISwalpha)) << 24) : ((__ISwalpha) < 16 ? (int) ((1UL << (__ISwalpha)) << 8) : ((__ISwalpha) < 24 ? (int) ((1UL << (__ISwalpha)) >> 8) : (int) ((1UL << (__ISwalpha)) >> 24)))), 9642: _ISwdigit = ((__ISwdigit) < 8 ? (int) ((1UL << (__ISwdigit)) << 24) : ((__ISwdigit) < 16 ? (int) ((1UL << (__ISwdigit)) << 8) : ((__ISwdigit) < 24 ? (int) ((1UL << (__ISwdigit)) >> 8) : (int) ((1UL << (__ISwdigit)) >> 24)))), 9642: _ISwxdigit = ((__ISwxdigit) < 8 ? (int) ((1UL << (__ISwxdigit)) << 24) : ((__ISwxdigit) < 16 ? (int) ((1UL << (__ISwxdigit)) << 8) : ((__ISwxdigit) < 24 ? (int) ((1UL << (__ISwxdigit)) >> 8) : (int) ((1UL << (__ISwxdigit)) >> 24)))), 9642: _ISwspace = ((__ISwspace) < 8 ? (int) ((1UL << (__ISwspace)) << 24) : ((__ISwspace) < 16 ? (int) ((1UL << (__ISwspace)) << 8) : ((__ISwspace) < 24 ? (int) ((1UL << (__ISwspace)) >> 8) : (int) ((1UL << (__ISwspace)) >> 24)))), 9642: _ISwprint = ((__ISwprint) < 8 ? (int) ((1UL << (__ISwprint)) << 24) : ((__ISwprint) < 16 ? (int) ((1UL << (__ISwprint)) << 8) : ((__ISwprint) < 24 ? (int) ((1UL << (__ISwprint)) >> 8) : (int) ((1UL << (__ISwprint)) >> 24)))), 9642: _ISwgraph = ((__ISwgraph) < 8 ? (int) ((1UL << (__ISwgraph)) << 24) : ((__ISwgraph) < 16 ? (int) ((1UL << (__ISwgraph)) << 8) : ((__ISwgraph) < 24 ? (int) ((1UL << (__ISwgraph)) >> 8) : (int) ((1UL << (__ISwgraph)) >> 24)))), 9642: _ISwblank = ((__ISwblank) < 8 ? (int) ((1UL << (__ISwblank)) << 24) : ((__ISwblank) < 16 ? (int) ((1UL << (__ISwblank)) << 8) : ((__ISwblank) < 24 ? (int) ((1UL << (__ISwblank)) >> 8) : (int) ((1UL << (__ISwblank)) >> 24)))), 9642: _ISwcntrl = ((__ISwcntrl) < 8 ? (int) ((1UL << (__ISwcntrl)) << 24) : ((__ISwcntrl) < 16 ? (int) ((1UL << (__ISwcntrl)) << 8) : ((__ISwcntrl) < 24 ? (int) ((1UL << (__ISwcntrl)) >> 8) : (int) ((1UL << (__ISwcntrl)) >> 24)))), 9642: _ISwpunct = ((__ISwpunct) < 8 ? (int) ((1UL << (__ISwpunct)) << 24) : ((__ISwpunct) < 16 ? (int) ((1UL << (__ISwpunct)) << 8) : ((__ISwpunct) < 24 ? (int) ((1UL << (__ISwpunct)) >> 8) : (int) ((1UL << (__ISwpunct)) >> 24)))), 9642: _ISwalnum = ((__ISwalnum) < 8 ? (int) ((1UL << (__ISwalnum)) << 24) : ((__ISwalnum) < 16 ? (int) ((1UL << (__ISwalnum)) << 8) : ((__ISwalnum) < 24 ? (int) ((1UL << (__ISwalnum)) >> 8) : (int) ((1UL << (__ISwalnum)) >> 24)))) 9642: }; 9642: 9642: 9642: 9642: extern "C" { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int iswalnum (wint_t __wc) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern int iswalpha (wint_t __wc) noexcept (true); 9642: 9642: 9642: extern int iswcntrl (wint_t __wc) noexcept (true); 9642: 9642: 9642: 9642: extern int iswdigit (wint_t __wc) noexcept (true); 9642: 9642: 9642: 9642: extern int iswgraph (wint_t __wc) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int iswlower (wint_t __wc) noexcept (true); 9642: 9642: 9642: extern int iswprint (wint_t __wc) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int iswpunct (wint_t __wc) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int iswspace (wint_t __wc) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int iswupper (wint_t __wc) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int iswxdigit (wint_t __wc) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern int iswblank (wint_t __wc) noexcept (true); 9642: # 155 "/usr/include/arm-linux-gnueabihf/bits/wctype-wchar.h" 3 4 9642: extern wctype_t wctype (const char *__property) noexcept (true); 9642: 9642: 9642: 9642: extern int iswctype (wint_t __wc, wctype_t __desc) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern wint_t towlower (wint_t __wc) noexcept (true); 9642: 9642: 9642: extern wint_t towupper (wint_t __wc) noexcept (true); 9642: 9642: } 9642: # 39 "/usr/include/wctype.h" 2 3 4 9642: 9642: 9642: 9642: 9642: 9642: extern "C" { 9642: 9642: 9642: 9642: typedef const __int32_t *wctrans_t; 9642: 9642: 9642: 9642: extern wctrans_t wctrans (const char *__property) noexcept (true); 9642: 9642: 9642: extern wint_t towctrans (wint_t __wc, wctrans_t __desc) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int iswalnum_l (wint_t __wc, locale_t __locale) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern int iswalpha_l (wint_t __wc, locale_t __locale) noexcept (true); 9642: 9642: 9642: extern int iswcntrl_l (wint_t __wc, locale_t __locale) noexcept (true); 9642: 9642: 9642: 9642: extern int iswdigit_l (wint_t __wc, locale_t __locale) noexcept (true); 9642: 9642: 9642: 9642: extern int iswgraph_l (wint_t __wc, locale_t __locale) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int iswlower_l (wint_t __wc, locale_t __locale) noexcept (true); 9642: 9642: 9642: extern int iswprint_l (wint_t __wc, locale_t __locale) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int iswpunct_l (wint_t __wc, locale_t __locale) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int iswspace_l (wint_t __wc, locale_t __locale) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int iswupper_l (wint_t __wc, locale_t __locale) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int iswxdigit_l (wint_t __wc, locale_t __locale) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int iswblank_l (wint_t __wc, locale_t __locale) noexcept (true); 9642: 9642: 9642: 9642: extern wctype_t wctype_l (const char *__property, locale_t __locale) 9642: noexcept (true); 9642: 9642: 9642: 9642: extern int iswctype_l (wint_t __wc, wctype_t __desc, locale_t __locale) 9642: noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern wint_t towlower_l (wint_t __wc, locale_t __locale) noexcept (true); 9642: 9642: 9642: extern wint_t towupper_l (wint_t __wc, locale_t __locale) noexcept (true); 9642: 9642: 9642: 9642: extern wctrans_t wctrans_l (const char *__property, locale_t __locale) 9642: noexcept (true); 9642: 9642: 9642: extern wint_t towctrans_l (wint_t __wc, wctrans_t __desc, 9642: locale_t __locale) noexcept (true); 9642: 9642: 9642: 9642: } 9642: # 51 "/usr/include/c++/13/cwctype" 2 3 9642: # 80 "/usr/include/c++/13/cwctype" 3 9642: namespace std 9642: { 9642: using ::wctrans_t; 9642: using ::wctype_t; 9642: using ::wint_t; 9642: 9642: using ::iswalnum; 9642: using ::iswalpha; 9642: 9642: using ::iswblank; 9642: 9642: using ::iswcntrl; 9642: using ::iswctype; 9642: using ::iswdigit; 9642: using ::iswgraph; 9642: using ::iswlower; 9642: using ::iswprint; 9642: using ::iswpunct; 9642: using ::iswspace; 9642: using ::iswupper; 9642: using ::iswxdigit; 9642: using ::towctrans; 9642: using ::towlower; 9642: using ::towupper; 9642: using ::wctrans; 9642: using ::wctype; 9642: } 9642: # 40 "/usr/include/c++/13/bits/locale_facets.h" 2 3 9642: # 1 "/usr/include/c++/13/cctype" 1 3 9642: # 39 "/usr/include/c++/13/cctype" 3 9642: 9642: # 40 "/usr/include/c++/13/cctype" 3 9642: # 41 "/usr/include/c++/13/bits/locale_facets.h" 2 3 9642: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/ctype_base.h" 1 3 9642: # 36 "/usr/include/arm-linux-gnueabihf/c++/13/bits/ctype_base.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: struct ctype_base 9642: { 9642: 9642: typedef const int* __to_type; 9642: 9642: 9642: 9642: typedef unsigned short mask; 9642: static const mask upper = _ISupper; 9642: static const mask lower = _ISlower; 9642: static const mask alpha = _ISalpha; 9642: static const mask digit = _ISdigit; 9642: static const mask xdigit = _ISxdigit; 9642: static const mask space = _ISspace; 9642: static const mask print = _ISprint; 9642: static const mask graph = _ISalpha | _ISdigit | _ISpunct; 9642: static const mask cntrl = _IScntrl; 9642: static const mask punct = _ISpunct; 9642: static const mask alnum = _ISalpha | _ISdigit; 9642: 9642: static const mask blank = _ISblank; 9642: 9642: }; 9642: 9642: 9642: } 9642: # 42 "/usr/include/c++/13/bits/locale_facets.h" 2 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/streambuf_iterator.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/streambuf_iterator.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/streambuf_iterator.h" 3 9642: 9642: 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 49 "/usr/include/c++/13/bits/streambuf_iterator.h" 3 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: 9642: 9642: template 9642: class istreambuf_iterator 9642: : public iterator 9642: { 9642: public: 9642: # 70 "/usr/include/c++/13/bits/streambuf_iterator.h" 3 9642: typedef _CharT char_type; 9642: typedef _Traits traits_type; 9642: typedef typename _Traits::int_type int_type; 9642: typedef basic_streambuf<_CharT, _Traits> streambuf_type; 9642: typedef basic_istream<_CharT, _Traits> istream_type; 9642: 9642: 9642: template 9642: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, 9642: ostreambuf_iterator<_CharT2> >::__type 9642: copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, 9642: ostreambuf_iterator<_CharT2>); 9642: 9642: template 9642: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, 9642: _CharT2*>::__type 9642: __copy_move_a2(istreambuf_iterator<_CharT2>, 9642: istreambuf_iterator<_CharT2>, _CharT2*); 9642: 9642: template 9642: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, 9642: _CharT2*>::__type 9642: __copy_n_a(istreambuf_iterator<_CharT2>, _Size, _CharT2*, bool); 9642: 9642: template 9642: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, 9642: istreambuf_iterator<_CharT2> >::__type 9642: find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, 9642: const _CharT2&); 9642: 9642: template 9642: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, 9642: void>::__type 9642: advance(istreambuf_iterator<_CharT2>&, _Distance); 9642: 9642: private: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: mutable streambuf_type* _M_sbuf; 9642: int_type _M_c; 9642: 9642: public: 9642: 9642: constexpr istreambuf_iterator() noexcept 9642: : _M_sbuf(0), _M_c(traits_type::eof()) { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: istreambuf_iterator(const istreambuf_iterator&) noexcept = default; 9642: 9642: ~istreambuf_iterator() = default; 9642: 9642: 9642: 9642: istreambuf_iterator(istream_type& __s) noexcept 9642: : _M_sbuf(__s.rdbuf()), _M_c(traits_type::eof()) { } 9642: 9642: 9642: istreambuf_iterator(streambuf_type* __s) noexcept 9642: : _M_sbuf(__s), _M_c(traits_type::eof()) { } 9642: 9642: 9642: istreambuf_iterator& 9642: operator=(const istreambuf_iterator&) noexcept = default; 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: char_type 9642: operator*() const 9642: { 9642: int_type __c = _M_get(); 9642: # 161 "/usr/include/c++/13/bits/streambuf_iterator.h" 3 9642: return traits_type::to_char_type(__c); 9642: } 9642: 9642: 9642: istreambuf_iterator& 9642: operator++() 9642: { 9642: 9642: 9642: 9642: ; 9642: 9642: _M_sbuf->sbumpc(); 9642: _M_c = traits_type::eof(); 9642: return *this; 9642: } 9642: 9642: 9642: istreambuf_iterator 9642: operator++(int) 9642: { 9642: 9642: 9642: 9642: ; 9642: 9642: istreambuf_iterator __old = *this; 9642: __old._M_c = _M_sbuf->sbumpc(); 9642: _M_c = traits_type::eof(); 9642: return __old; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: bool 9642: equal(const istreambuf_iterator& __b) const 9642: { return _M_at_eof() == __b._M_at_eof(); } 9642: 9642: private: 9642: int_type 9642: _M_get() const 9642: { 9642: int_type __ret = _M_c; 9642: if (_M_sbuf && _S_is_eof(__ret) && _S_is_eof(__ret = _M_sbuf->sgetc())) 9642: _M_sbuf = 0; 9642: return __ret; 9642: } 9642: 9642: bool 9642: _M_at_eof() const 9642: { return _S_is_eof(_M_get()); } 9642: 9642: static bool 9642: _S_is_eof(int_type __c) 9642: { 9642: const int_type __eof = traits_type::eof(); 9642: return traits_type::eq_int_type(__c, __eof); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: }; 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator==(const istreambuf_iterator<_CharT, _Traits>& __a, 9642: const istreambuf_iterator<_CharT, _Traits>& __b) 9642: { return __a.equal(__b); } 9642: 9642: 9642: template 9642: [[__nodiscard__]] 9642: inline bool 9642: operator!=(const istreambuf_iterator<_CharT, _Traits>& __a, 9642: const istreambuf_iterator<_CharT, _Traits>& __b) 9642: { return !__a.equal(__b); } 9642: 9642: 9642: 9642: template 9642: class ostreambuf_iterator 9642: : public iterator 9642: { 9642: public: 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef _CharT char_type; 9642: typedef _Traits traits_type; 9642: typedef basic_streambuf<_CharT, _Traits> streambuf_type; 9642: typedef basic_ostream<_CharT, _Traits> ostream_type; 9642: 9642: 9642: template 9642: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, 9642: ostreambuf_iterator<_CharT2> >::__type 9642: copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, 9642: ostreambuf_iterator<_CharT2>); 9642: 9642: private: 9642: streambuf_type* _M_sbuf; 9642: bool _M_failed; 9642: 9642: public: 9642: # 284 "/usr/include/c++/13/bits/streambuf_iterator.h" 3 9642: ostreambuf_iterator(ostream_type& __s) noexcept 9642: : _M_sbuf(__s.rdbuf()), _M_failed(!_M_sbuf) { } 9642: 9642: 9642: ostreambuf_iterator(streambuf_type* __s) noexcept 9642: : _M_sbuf(__s), _M_failed(!_M_sbuf) { } 9642: 9642: 9642: ostreambuf_iterator& 9642: operator=(_CharT __c) 9642: { 9642: if (!_M_failed && 9642: _Traits::eq_int_type(_M_sbuf->sputc(__c), _Traits::eof())) 9642: _M_failed = true; 9642: return *this; 9642: } 9642: 9642: 9642: [[__nodiscard__]] 9642: ostreambuf_iterator& 9642: operator*() 9642: { return *this; } 9642: 9642: 9642: ostreambuf_iterator& 9642: operator++(int) 9642: { return *this; } 9642: 9642: 9642: ostreambuf_iterator& 9642: operator++() 9642: { return *this; } 9642: 9642: 9642: [[__nodiscard__]] 9642: bool 9642: failed() const noexcept 9642: { return _M_failed; } 9642: 9642: ostreambuf_iterator& 9642: _M_put(const _CharT* __ws, streamsize __len) 9642: { 9642: if (__builtin_expect(!_M_failed, true) 9642: && __builtin_expect(this->_M_sbuf->sputn(__ws, __len) != __len, 9642: false)) 9642: _M_failed = true; 9642: return *this; 9642: } 9642: }; 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: template 9642: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 9642: ostreambuf_iterator<_CharT> >::__type 9642: copy(istreambuf_iterator<_CharT> __first, 9642: istreambuf_iterator<_CharT> __last, 9642: ostreambuf_iterator<_CharT> __result) 9642: { 9642: if (__first._M_sbuf && !__last._M_sbuf && !__result._M_failed) 9642: { 9642: bool __ineof; 9642: __copy_streambufs_eof(__first._M_sbuf, __result._M_sbuf, __ineof); 9642: if (!__ineof) 9642: __result._M_failed = true; 9642: } 9642: return __result; 9642: } 9642: 9642: template 9642: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 9642: ostreambuf_iterator<_CharT> >::__type 9642: __copy_move_a2(_CharT* __first, _CharT* __last, 9642: ostreambuf_iterator<_CharT> __result) 9642: { 9642: const streamsize __num = __last - __first; 9642: if (__num > 0) 9642: __result._M_put(__first, __num); 9642: return __result; 9642: } 9642: 9642: template 9642: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 9642: ostreambuf_iterator<_CharT> >::__type 9642: __copy_move_a2(const _CharT* __first, const _CharT* __last, 9642: ostreambuf_iterator<_CharT> __result) 9642: { 9642: const streamsize __num = __last - __first; 9642: if (__num > 0) 9642: __result._M_put(__first, __num); 9642: return __result; 9642: } 9642: 9642: template 9642: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 9642: _CharT*>::__type 9642: __copy_move_a2(istreambuf_iterator<_CharT> __first, 9642: istreambuf_iterator<_CharT> __last, _CharT* __result) 9642: { 9642: typedef istreambuf_iterator<_CharT> __is_iterator_type; 9642: typedef typename __is_iterator_type::traits_type traits_type; 9642: typedef typename __is_iterator_type::streambuf_type streambuf_type; 9642: typedef typename traits_type::int_type int_type; 9642: 9642: if (__first._M_sbuf && !__last._M_sbuf) 9642: { 9642: streambuf_type* __sb = __first._M_sbuf; 9642: int_type __c = __sb->sgetc(); 9642: while (!traits_type::eq_int_type(__c, traits_type::eof())) 9642: { 9642: const streamsize __n = __sb->egptr() - __sb->gptr(); 9642: if (__n > 1) 9642: { 9642: traits_type::copy(__result, __sb->gptr(), __n); 9642: __sb->__safe_gbump(__n); 9642: __result += __n; 9642: __c = __sb->underflow(); 9642: } 9642: else 9642: { 9642: *__result++ = traits_type::to_char_type(__c); 9642: __c = __sb->snextc(); 9642: } 9642: } 9642: } 9642: return __result; 9642: } 9642: 9642: template 9642: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 9642: _CharT*>::__type 9642: __copy_n_a(istreambuf_iterator<_CharT> __it, _Size __n, _CharT* __result, 9642: bool __strict __attribute__((__unused__))) 9642: { 9642: if (__n == 0) 9642: return __result; 9642: 9642: 9642: 9642: ; 9642: _CharT* __beg = __result; 9642: __result += __it._M_sbuf->sgetn(__beg, __n); 9642: 9642: 9642: ; 9642: return __result; 9642: } 9642: 9642: template 9642: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 9642: istreambuf_iterator<_CharT> >::__type 9642: find(istreambuf_iterator<_CharT> __first, 9642: istreambuf_iterator<_CharT> __last, const _CharT& __val) 9642: { 9642: typedef istreambuf_iterator<_CharT> __is_iterator_type; 9642: typedef typename __is_iterator_type::traits_type traits_type; 9642: typedef typename __is_iterator_type::streambuf_type streambuf_type; 9642: typedef typename traits_type::int_type int_type; 9642: const int_type __eof = traits_type::eof(); 9642: 9642: if (__first._M_sbuf && !__last._M_sbuf) 9642: { 9642: const int_type __ival = traits_type::to_int_type(__val); 9642: streambuf_type* __sb = __first._M_sbuf; 9642: int_type __c = __sb->sgetc(); 9642: while (!traits_type::eq_int_type(__c, __eof) 9642: && !traits_type::eq_int_type(__c, __ival)) 9642: { 9642: streamsize __n = __sb->egptr() - __sb->gptr(); 9642: if (__n > 1) 9642: { 9642: const _CharT* __p = traits_type::find(__sb->gptr(), 9642: __n, __val); 9642: if (__p) 9642: __n = __p - __sb->gptr(); 9642: __sb->__safe_gbump(__n); 9642: __c = __sb->sgetc(); 9642: } 9642: else 9642: __c = __sb->snextc(); 9642: } 9642: 9642: __first._M_c = __eof; 9642: } 9642: 9642: return __first; 9642: } 9642: 9642: template 9642: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 9642: void>::__type 9642: advance(istreambuf_iterator<_CharT>& __i, _Distance __n) 9642: { 9642: if (__n == 0) 9642: return; 9642: 9642: do { if (std::__is_constant_evaluated() && !bool(__n > 0)) __builtin_unreachable(); } while (false); 9642: 9642: 9642: ; 9642: 9642: typedef istreambuf_iterator<_CharT> __is_iterator_type; 9642: typedef typename __is_iterator_type::traits_type traits_type; 9642: typedef typename __is_iterator_type::streambuf_type streambuf_type; 9642: typedef typename traits_type::int_type int_type; 9642: const int_type __eof = traits_type::eof(); 9642: 9642: streambuf_type* __sb = __i._M_sbuf; 9642: while (__n > 0) 9642: { 9642: streamsize __size = __sb->egptr() - __sb->gptr(); 9642: if (__size > __n) 9642: { 9642: __sb->__safe_gbump(__n); 9642: break; 9642: } 9642: 9642: __sb->__safe_gbump(__size); 9642: __n -= __size; 9642: if (traits_type::eq_int_type(__sb->underflow(), __eof)) 9642: { 9642: 9642: 9642: ; 9642: break; 9642: } 9642: } 9642: 9642: __i._M_c = __eof; 9642: } 9642: 9642: 9642: 9642: 9642: } 9642: # 49 "/usr/include/c++/13/bits/locale_facets.h" 2 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 74 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: template 9642: void 9642: __convert_to_v(const char*, _Tp&, ios_base::iostate&, 9642: const __c_locale&) throw(); 9642: 9642: 9642: template<> 9642: void 9642: __convert_to_v(const char*, float&, ios_base::iostate&, 9642: const __c_locale&) throw(); 9642: 9642: template<> 9642: void 9642: __convert_to_v(const char*, double&, ios_base::iostate&, 9642: const __c_locale&) throw(); 9642: 9642: template<> 9642: void 9642: __convert_to_v(const char*, long double&, ios_base::iostate&, 9642: const __c_locale&) throw(); 9642: 9642: 9642: 9642: template 9642: struct __pad 9642: { 9642: static void 9642: _S_pad(ios_base& __io, _CharT __fill, _CharT* __news, 9642: const _CharT* __olds, streamsize __newlen, streamsize __oldlen); 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: _CharT* 9642: __add_grouping(_CharT* __s, _CharT __sep, 9642: const char* __gbeg, size_t __gsize, 9642: const _CharT* __first, const _CharT* __last); 9642: 9642: 9642: 9642: 9642: template 9642: inline 9642: ostreambuf_iterator<_CharT> 9642: __write(ostreambuf_iterator<_CharT> __s, const _CharT* __ws, int __len) 9642: { 9642: __s._M_put(__ws, __len); 9642: return __s; 9642: } 9642: 9642: 9642: template 9642: inline 9642: _OutIter 9642: __write(_OutIter __s, const _CharT* __ws, int __len) 9642: { 9642: for (int __j = 0; __j < __len; __j++, ++__s) 9642: *__s = __ws[__j]; 9642: return __s; 9642: } 9642: # 152 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: template 9642: class __ctype_abstract_base : public locale::facet, public ctype_base 9642: { 9642: public: 9642: 9642: 9642: typedef _CharT char_type; 9642: # 171 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: bool 9642: is(mask __m, char_type __c) const 9642: { return this->do_is(__m, __c); } 9642: # 188 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: const char_type* 9642: is(const char_type *__lo, const char_type *__hi, mask *__vec) const 9642: { return this->do_is(__lo, __hi, __vec); } 9642: # 204 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: const char_type* 9642: scan_is(mask __m, const char_type* __lo, const char_type* __hi) const 9642: { return this->do_scan_is(__m, __lo, __hi); } 9642: # 220 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: const char_type* 9642: scan_not(mask __m, const char_type* __lo, const char_type* __hi) const 9642: { return this->do_scan_not(__m, __lo, __hi); } 9642: # 234 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: char_type 9642: toupper(char_type __c) const 9642: { return this->do_toupper(__c); } 9642: # 249 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: const char_type* 9642: toupper(char_type *__lo, const char_type* __hi) const 9642: { return this->do_toupper(__lo, __hi); } 9642: # 263 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: char_type 9642: tolower(char_type __c) const 9642: { return this->do_tolower(__c); } 9642: # 278 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: const char_type* 9642: tolower(char_type* __lo, const char_type* __hi) const 9642: { return this->do_tolower(__lo, __hi); } 9642: # 295 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: char_type 9642: widen(char __c) const 9642: { return this->do_widen(__c); } 9642: # 314 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: const char* 9642: widen(const char* __lo, const char* __hi, char_type* __to) const 9642: { return this->do_widen(__lo, __hi, __to); } 9642: # 333 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: char 9642: narrow(char_type __c, char __dfault) const 9642: { return this->do_narrow(__c, __dfault); } 9642: # 355 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: const char_type* 9642: narrow(const char_type* __lo, const char_type* __hi, 9642: char __dfault, char* __to) const 9642: { return this->do_narrow(__lo, __hi, __dfault, __to); } 9642: 9642: protected: 9642: explicit 9642: __ctype_abstract_base(size_t __refs = 0): facet(__refs) { } 9642: 9642: virtual 9642: ~__ctype_abstract_base() { } 9642: # 380 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual bool 9642: do_is(mask __m, char_type __c) const = 0; 9642: # 399 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual const char_type* 9642: do_is(const char_type* __lo, const char_type* __hi, 9642: mask* __vec) const = 0; 9642: # 418 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual const char_type* 9642: do_scan_is(mask __m, const char_type* __lo, 9642: const char_type* __hi) const = 0; 9642: # 437 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual const char_type* 9642: do_scan_not(mask __m, const char_type* __lo, 9642: const char_type* __hi) const = 0; 9642: # 455 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual char_type 9642: do_toupper(char_type __c) const = 0; 9642: # 472 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual const char_type* 9642: do_toupper(char_type* __lo, const char_type* __hi) const = 0; 9642: # 488 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual char_type 9642: do_tolower(char_type __c) const = 0; 9642: # 505 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual const char_type* 9642: do_tolower(char_type* __lo, const char_type* __hi) const = 0; 9642: # 524 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual char_type 9642: do_widen(char __c) const = 0; 9642: # 545 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual const char* 9642: do_widen(const char* __lo, const char* __hi, char_type* __to) const = 0; 9642: # 566 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual char 9642: do_narrow(char_type __c, char __dfault) const = 0; 9642: # 591 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual const char_type* 9642: do_narrow(const char_type* __lo, const char_type* __hi, 9642: char __dfault, char* __to) const = 0; 9642: }; 9642: # 614 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: template 9642: class ctype : public __ctype_abstract_base<_CharT> 9642: { 9642: public: 9642: 9642: typedef _CharT char_type; 9642: typedef typename __ctype_abstract_base<_CharT>::mask mask; 9642: 9642: 9642: static locale::id id; 9642: 9642: explicit 9642: ctype(size_t __refs = 0) : __ctype_abstract_base<_CharT>(__refs) { } 9642: 9642: protected: 9642: virtual 9642: ~ctype(); 9642: 9642: virtual bool 9642: do_is(mask __m, char_type __c) const; 9642: 9642: virtual const char_type* 9642: do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const; 9642: 9642: virtual const char_type* 9642: do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const; 9642: 9642: virtual const char_type* 9642: do_scan_not(mask __m, const char_type* __lo, 9642: const char_type* __hi) const; 9642: 9642: virtual char_type 9642: do_toupper(char_type __c) const; 9642: 9642: virtual const char_type* 9642: do_toupper(char_type* __lo, const char_type* __hi) const; 9642: 9642: virtual char_type 9642: do_tolower(char_type __c) const; 9642: 9642: virtual const char_type* 9642: do_tolower(char_type* __lo, const char_type* __hi) const; 9642: 9642: virtual char_type 9642: do_widen(char __c) const; 9642: 9642: virtual const char* 9642: do_widen(const char* __lo, const char* __hi, char_type* __dest) const; 9642: 9642: virtual char 9642: do_narrow(char_type, char __dfault) const; 9642: 9642: virtual const char_type* 9642: do_narrow(const char_type* __lo, const char_type* __hi, 9642: char __dfault, char* __to) const; 9642: }; 9642: 9642: template 9642: locale::id ctype<_CharT>::id; 9642: 9642: 9642: 9642: template 9642: class ctype >; 9642: # 688 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: template<> 9642: class ctype : public locale::facet, public ctype_base 9642: { 9642: public: 9642: 9642: 9642: typedef char char_type; 9642: 9642: protected: 9642: 9642: __c_locale _M_c_locale_ctype; 9642: bool _M_del; 9642: __to_type _M_toupper; 9642: __to_type _M_tolower; 9642: const mask* _M_table; 9642: mutable char _M_widen_ok; 9642: mutable char _M_widen[1 + static_cast(-1)]; 9642: mutable char _M_narrow[1 + static_cast(-1)]; 9642: mutable char _M_narrow_ok; 9642: 9642: 9642: public: 9642: 9642: static locale::id id; 9642: 9642: static const size_t table_size = 1 + static_cast(-1); 9642: # 725 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: explicit 9642: ctype(const mask* __table = 0, bool __del = false, size_t __refs = 0); 9642: # 738 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: explicit 9642: ctype(__c_locale __cloc, const mask* __table = 0, bool __del = false, 9642: size_t __refs = 0); 9642: # 751 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: inline bool 9642: is(mask __m, char __c) const; 9642: # 766 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: inline const char* 9642: is(const char* __lo, const char* __hi, mask* __vec) const; 9642: # 780 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: inline const char* 9642: scan_is(mask __m, const char* __lo, const char* __hi) const; 9642: # 794 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: inline const char* 9642: scan_not(mask __m, const char* __lo, const char* __hi) const; 9642: # 809 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: char_type 9642: toupper(char_type __c) const 9642: { return this->do_toupper(__c); } 9642: # 826 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: const char_type* 9642: toupper(char_type *__lo, const char_type* __hi) const 9642: { return this->do_toupper(__lo, __hi); } 9642: # 842 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: char_type 9642: tolower(char_type __c) const 9642: { return this->do_tolower(__c); } 9642: # 859 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: const char_type* 9642: tolower(char_type* __lo, const char_type* __hi) const 9642: { return this->do_tolower(__lo, __hi); } 9642: # 879 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: char_type 9642: widen(char __c) const 9642: { 9642: if (_M_widen_ok) 9642: return _M_widen[static_cast(__c)]; 9642: this->_M_widen_init(); 9642: return this->do_widen(__c); 9642: } 9642: # 906 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: const char* 9642: widen(const char* __lo, const char* __hi, char_type* __to) const 9642: { 9642: if (_M_widen_ok == 1) 9642: { 9642: if (__builtin_expect(__hi != __lo, true)) 9642: __builtin_memcpy(__to, __lo, __hi - __lo); 9642: return __hi; 9642: } 9642: if (!_M_widen_ok) 9642: _M_widen_init(); 9642: return this->do_widen(__lo, __hi, __to); 9642: } 9642: # 938 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: char 9642: narrow(char_type __c, char __dfault) const 9642: { 9642: if (_M_narrow[static_cast(__c)]) 9642: return _M_narrow[static_cast(__c)]; 9642: const char __t = do_narrow(__c, __dfault); 9642: if (__t != __dfault) 9642: _M_narrow[static_cast(__c)] = __t; 9642: return __t; 9642: } 9642: # 971 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: const char_type* 9642: narrow(const char_type* __lo, const char_type* __hi, 9642: char __dfault, char* __to) const 9642: { 9642: if (__builtin_expect(_M_narrow_ok == 1, true)) 9642: { 9642: if (__builtin_expect(__hi != __lo, true)) 9642: __builtin_memcpy(__to, __lo, __hi - __lo); 9642: return __hi; 9642: } 9642: if (!_M_narrow_ok) 9642: _M_narrow_init(); 9642: return this->do_narrow(__lo, __hi, __dfault, __to); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: const mask* 9642: table() const throw() 9642: { return _M_table; } 9642: 9642: 9642: static const mask* 9642: classic_table() throw(); 9642: protected: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual 9642: ~ctype(); 9642: # 1021 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual char_type 9642: do_toupper(char_type __c) const; 9642: # 1038 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual const char_type* 9642: do_toupper(char_type* __lo, const char_type* __hi) const; 9642: # 1054 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual char_type 9642: do_tolower(char_type __c) const; 9642: # 1071 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual const char_type* 9642: do_tolower(char_type* __lo, const char_type* __hi) const; 9642: # 1091 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual char_type 9642: do_widen(char __c) const 9642: { return __c; } 9642: # 1114 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual const char* 9642: do_widen(const char* __lo, const char* __hi, char_type* __to) const 9642: { 9642: if (__builtin_expect(__hi != __lo, true)) 9642: __builtin_memcpy(__to, __lo, __hi - __lo); 9642: return __hi; 9642: } 9642: # 1141 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual char 9642: do_narrow(char_type __c, char __dfault __attribute__((__unused__))) const 9642: { return __c; } 9642: # 1167 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual const char_type* 9642: do_narrow(const char_type* __lo, const char_type* __hi, 9642: char __dfault __attribute__((__unused__)), char* __to) const 9642: { 9642: if (__builtin_expect(__hi != __lo, true)) 9642: __builtin_memcpy(__to, __lo, __hi - __lo); 9642: return __hi; 9642: } 9642: 9642: private: 9642: void _M_narrow_init() const; 9642: void _M_widen_init() const; 9642: }; 9642: # 1193 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: template<> 9642: class ctype : public __ctype_abstract_base 9642: { 9642: public: 9642: 9642: 9642: typedef wchar_t char_type; 9642: typedef wctype_t __wmask_type; 9642: 9642: protected: 9642: __c_locale _M_c_locale_ctype; 9642: 9642: 9642: bool _M_narrow_ok; 9642: char _M_narrow[128]; 9642: wint_t _M_widen[1 + static_cast(-1)]; 9642: 9642: 9642: mask _M_bit[16]; 9642: __wmask_type _M_wmask[16]; 9642: 9642: public: 9642: 9642: 9642: static locale::id id; 9642: # 1226 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: explicit 9642: ctype(size_t __refs = 0); 9642: # 1237 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: explicit 9642: ctype(__c_locale __cloc, size_t __refs = 0); 9642: 9642: protected: 9642: __wmask_type 9642: _M_convert_to_wmask(const mask __m) const throw(); 9642: 9642: 9642: virtual 9642: ~ctype(); 9642: # 1261 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual bool 9642: do_is(mask __m, char_type __c) const; 9642: # 1280 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual const char_type* 9642: do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const; 9642: # 1298 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual const char_type* 9642: do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const; 9642: # 1316 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual const char_type* 9642: do_scan_not(mask __m, const char_type* __lo, 9642: const char_type* __hi) const; 9642: # 1333 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual char_type 9642: do_toupper(char_type __c) const; 9642: # 1350 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual const char_type* 9642: do_toupper(char_type* __lo, const char_type* __hi) const; 9642: # 1366 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual char_type 9642: do_tolower(char_type __c) const; 9642: # 1383 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual const char_type* 9642: do_tolower(char_type* __lo, const char_type* __hi) const; 9642: # 1403 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual char_type 9642: do_widen(char __c) const; 9642: # 1425 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual const char* 9642: do_widen(const char* __lo, const char* __hi, char_type* __to) const; 9642: # 1448 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual char 9642: do_narrow(char_type __c, char __dfault) const; 9642: # 1474 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual const char_type* 9642: do_narrow(const char_type* __lo, const char_type* __hi, 9642: char __dfault, char* __to) const; 9642: 9642: 9642: void 9642: _M_initialize_ctype() throw(); 9642: }; 9642: 9642: 9642: 9642: template 9642: class ctype_byname : public ctype<_CharT> 9642: { 9642: public: 9642: typedef typename ctype<_CharT>::mask mask; 9642: 9642: explicit 9642: ctype_byname(const char* __s, size_t __refs = 0); 9642: 9642: 9642: explicit 9642: ctype_byname(const string& __s, size_t __refs = 0) 9642: : ctype_byname(__s.c_str(), __refs) { } 9642: 9642: 9642: protected: 9642: virtual 9642: ~ctype_byname() { } 9642: }; 9642: 9642: 9642: template<> 9642: class ctype_byname : public ctype 9642: { 9642: public: 9642: explicit 9642: ctype_byname(const char* __s, size_t __refs = 0); 9642: 9642: 9642: explicit 9642: ctype_byname(const string& __s, size_t __refs = 0); 9642: 9642: 9642: protected: 9642: virtual 9642: ~ctype_byname(); 9642: }; 9642: 9642: 9642: template<> 9642: class ctype_byname : public ctype 9642: { 9642: public: 9642: explicit 9642: ctype_byname(const char* __s, size_t __refs = 0); 9642: 9642: 9642: explicit 9642: ctype_byname(const string& __s, size_t __refs = 0); 9642: 9642: 9642: protected: 9642: virtual 9642: ~ctype_byname(); 9642: }; 9642: 9642: 9642: 9642: } 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/ctype_inline.h" 1 3 9642: # 37 "/usr/include/arm-linux-gnueabihf/c++/13/bits/ctype_inline.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: bool 9642: ctype:: 9642: is(mask __m, char __c) const 9642: { return _M_table[static_cast(__c)] & __m; } 9642: 9642: const char* 9642: ctype:: 9642: is(const char* __low, const char* __high, mask* __vec) const 9642: { 9642: while (__low < __high) 9642: *__vec++ = _M_table[static_cast(*__low++)]; 9642: return __high; 9642: } 9642: 9642: const char* 9642: ctype:: 9642: scan_is(mask __m, const char* __low, const char* __high) const 9642: { 9642: while (__low < __high 9642: && !(_M_table[static_cast(*__low)] & __m)) 9642: ++__low; 9642: return __low; 9642: } 9642: 9642: const char* 9642: ctype:: 9642: scan_not(mask __m, const char* __low, const char* __high) const 9642: { 9642: while (__low < __high 9642: && (_M_table[static_cast(*__low)] & __m) != 0) 9642: ++__low; 9642: return __low; 9642: } 9642: 9642: 9642: } 9642: # 1547 "/usr/include/c++/13/bits/locale_facets.h" 2 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: class __num_base 9642: { 9642: public: 9642: 9642: 9642: enum 9642: { 9642: _S_ominus, 9642: _S_oplus, 9642: _S_ox, 9642: _S_oX, 9642: _S_odigits, 9642: _S_odigits_end = _S_odigits + 16, 9642: _S_oudigits = _S_odigits_end, 9642: _S_oudigits_end = _S_oudigits + 16, 9642: _S_oe = _S_odigits + 14, 9642: _S_oE = _S_oudigits + 14, 9642: _S_oend = _S_oudigits_end 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: static const char* _S_atoms_out; 9642: 9642: 9642: 9642: static const char* _S_atoms_in; 9642: 9642: enum 9642: { 9642: _S_iminus, 9642: _S_iplus, 9642: _S_ix, 9642: _S_iX, 9642: _S_izero, 9642: _S_ie = _S_izero + 14, 9642: _S_iE = _S_izero + 20, 9642: _S_iend = 26 9642: }; 9642: 9642: 9642: 9642: static void 9642: _S_format_float(const ios_base& __io, char* __fptr, char __mod) throw(); 9642: }; 9642: 9642: template 9642: struct __numpunct_cache : public locale::facet 9642: { 9642: const char* _M_grouping; 9642: size_t _M_grouping_size; 9642: bool _M_use_grouping; 9642: const _CharT* _M_truename; 9642: size_t _M_truename_size; 9642: const _CharT* _M_falsename; 9642: size_t _M_falsename_size; 9642: _CharT _M_decimal_point; 9642: _CharT _M_thousands_sep; 9642: 9642: 9642: 9642: 9642: 9642: _CharT _M_atoms_out[__num_base::_S_oend]; 9642: 9642: 9642: 9642: 9642: 9642: _CharT _M_atoms_in[__num_base::_S_iend]; 9642: 9642: bool _M_allocated; 9642: 9642: __numpunct_cache(size_t __refs = 0) 9642: : facet(__refs), _M_grouping(0), _M_grouping_size(0), 9642: _M_use_grouping(false), 9642: _M_truename(0), _M_truename_size(0), _M_falsename(0), 9642: _M_falsename_size(0), _M_decimal_point(_CharT()), 9642: _M_thousands_sep(_CharT()), _M_allocated(false) 9642: { } 9642: 9642: ~__numpunct_cache(); 9642: 9642: void 9642: _M_cache(const locale& __loc); 9642: 9642: private: 9642: __numpunct_cache& 9642: operator=(const __numpunct_cache&); 9642: 9642: explicit 9642: __numpunct_cache(const __numpunct_cache&); 9642: }; 9642: 9642: template 9642: __numpunct_cache<_CharT>::~__numpunct_cache() 9642: { 9642: if (_M_allocated) 9642: { 9642: delete [] _M_grouping; 9642: delete [] _M_truename; 9642: delete [] _M_falsename; 9642: } 9642: } 9642: 9642: namespace __cxx11 { 9642: # 1677 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: template 9642: class numpunct : public locale::facet 9642: { 9642: public: 9642: 9642: 9642: 9642: typedef _CharT char_type; 9642: typedef basic_string<_CharT> string_type; 9642: 9642: typedef __numpunct_cache<_CharT> __cache_type; 9642: 9642: protected: 9642: __cache_type* _M_data; 9642: 9642: public: 9642: 9642: static locale::id id; 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: numpunct(size_t __refs = 0) 9642: : facet(__refs), _M_data(0) 9642: { _M_initialize_numpunct(); } 9642: # 1715 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: explicit 9642: numpunct(__cache_type* __cache, size_t __refs = 0) 9642: : facet(__refs), _M_data(__cache) 9642: { _M_initialize_numpunct(); } 9642: # 1729 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: explicit 9642: numpunct(__c_locale __cloc, size_t __refs = 0) 9642: : facet(__refs), _M_data(0) 9642: { _M_initialize_numpunct(__cloc); } 9642: # 1743 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: char_type 9642: decimal_point() const 9642: { return this->do_decimal_point(); } 9642: # 1756 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: char_type 9642: thousands_sep() const 9642: { return this->do_thousands_sep(); } 9642: # 1787 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: string 9642: grouping() const 9642: { return this->do_grouping(); } 9642: # 1800 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: string_type 9642: truename() const 9642: { return this->do_truename(); } 9642: # 1813 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: string_type 9642: falsename() const 9642: { return this->do_falsename(); } 9642: 9642: protected: 9642: 9642: virtual 9642: ~numpunct(); 9642: # 1830 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual char_type 9642: do_decimal_point() const 9642: { return _M_data->_M_decimal_point; } 9642: # 1842 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual char_type 9642: do_thousands_sep() const 9642: { return _M_data->_M_thousands_sep; } 9642: # 1855 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual string 9642: do_grouping() const 9642: { return _M_data->_M_grouping; } 9642: # 1868 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual string_type 9642: do_truename() const 9642: { return _M_data->_M_truename; } 9642: # 1881 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual string_type 9642: do_falsename() const 9642: { return _M_data->_M_falsename; } 9642: 9642: 9642: void 9642: _M_initialize_numpunct(__c_locale __cloc = 0); 9642: }; 9642: 9642: template 9642: locale::id numpunct<_CharT>::id; 9642: 9642: template<> 9642: numpunct::~numpunct(); 9642: 9642: template<> 9642: void 9642: numpunct::_M_initialize_numpunct(__c_locale __cloc); 9642: 9642: 9642: template<> 9642: numpunct::~numpunct(); 9642: 9642: template<> 9642: void 9642: numpunct::_M_initialize_numpunct(__c_locale __cloc); 9642: 9642: 9642: 9642: template 9642: class numpunct_byname : public numpunct<_CharT> 9642: { 9642: public: 9642: typedef _CharT char_type; 9642: typedef basic_string<_CharT> string_type; 9642: 9642: explicit 9642: numpunct_byname(const char* __s, size_t __refs = 0) 9642: : numpunct<_CharT>(__refs) 9642: { 9642: if (__builtin_strcmp(__s, "C") != 0 9642: && __builtin_strcmp(__s, "POSIX") != 0) 9642: { 9642: __c_locale __tmp; 9642: this->_S_create_c_locale(__tmp, __s); 9642: this->_M_initialize_numpunct(__tmp); 9642: this->_S_destroy_c_locale(__tmp); 9642: } 9642: } 9642: 9642: 9642: explicit 9642: numpunct_byname(const string& __s, size_t __refs = 0) 9642: : numpunct_byname(__s.c_str(), __refs) { } 9642: 9642: 9642: protected: 9642: virtual 9642: ~numpunct_byname() { } 9642: }; 9642: 9642: } 9642: 9642: 9642: # 1959 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: template 9642: class num_get : public locale::facet 9642: { 9642: public: 9642: 9642: 9642: 9642: typedef _CharT char_type; 9642: typedef _InIter iter_type; 9642: 9642: 9642: 9642: static locale::id id; 9642: # 1980 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: explicit 9642: num_get(size_t __refs = 0) : facet(__refs) { } 9642: # 2006 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: iter_type 9642: get(iter_type __in, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, bool& __v) const 9642: { return this->do_get(__in, __end, __io, __err, __v); } 9642: # 2043 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: iter_type 9642: get(iter_type __in, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, long& __v) const 9642: { return this->do_get(__in, __end, __io, __err, __v); } 9642: 9642: iter_type 9642: get(iter_type __in, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, unsigned short& __v) const 9642: { return this->do_get(__in, __end, __io, __err, __v); } 9642: 9642: iter_type 9642: get(iter_type __in, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, unsigned int& __v) const 9642: { return this->do_get(__in, __end, __io, __err, __v); } 9642: 9642: iter_type 9642: get(iter_type __in, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, unsigned long& __v) const 9642: { return this->do_get(__in, __end, __io, __err, __v); } 9642: 9642: 9642: iter_type 9642: get(iter_type __in, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, long long& __v) const 9642: { return this->do_get(__in, __end, __io, __err, __v); } 9642: 9642: iter_type 9642: get(iter_type __in, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, unsigned long long& __v) const 9642: { return this->do_get(__in, __end, __io, __err, __v); } 9642: # 2103 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: iter_type 9642: get(iter_type __in, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, float& __v) const 9642: { return this->do_get(__in, __end, __io, __err, __v); } 9642: 9642: iter_type 9642: get(iter_type __in, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, double& __v) const 9642: { return this->do_get(__in, __end, __io, __err, __v); } 9642: 9642: iter_type 9642: get(iter_type __in, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, long double& __v) const 9642: { return this->do_get(__in, __end, __io, __err, __v); } 9642: # 2146 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: iter_type 9642: get(iter_type __in, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, void*& __v) const 9642: { return this->do_get(__in, __end, __io, __err, __v); } 9642: 9642: protected: 9642: 9642: virtual ~num_get() { } 9642: 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: iter_type 9642: _M_extract_float(iter_type, iter_type, ios_base&, ios_base::iostate&, 9642: string&) const; 9642: 9642: template 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: iter_type 9642: _M_extract_int(iter_type, iter_type, ios_base&, ios_base::iostate&, 9642: _ValueT&) const; 9642: 9642: template 9642: typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, int>::__type 9642: _M_find(const _CharT2*, size_t __len, _CharT2 __c) const 9642: { 9642: int __ret = -1; 9642: if (__len <= 10) 9642: { 9642: if (__c >= _CharT2('0') && __c < _CharT2(_CharT2('0') + __len)) 9642: __ret = __c - _CharT2('0'); 9642: } 9642: else 9642: { 9642: if (__c >= _CharT2('0') && __c <= _CharT2('9')) 9642: __ret = __c - _CharT2('0'); 9642: else if (__c >= _CharT2('a') && __c <= _CharT2('f')) 9642: __ret = 10 + (__c - _CharT2('a')); 9642: else if (__c >= _CharT2('A') && __c <= _CharT2('F')) 9642: __ret = 10 + (__c - _CharT2('A')); 9642: } 9642: return __ret; 9642: } 9642: 9642: template 9642: typename __gnu_cxx::__enable_if::__value, 9642: int>::__type 9642: _M_find(const _CharT2* __zero, size_t __len, _CharT2 __c) const 9642: { 9642: int __ret = -1; 9642: const char_type* __q = char_traits<_CharT2>::find(__zero, __len, __c); 9642: if (__q) 9642: { 9642: __ret = __q - __zero; 9642: if (__ret > 15) 9642: __ret -= 6; 9642: } 9642: return __ret; 9642: } 9642: # 2219 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual iter_type 9642: do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, bool&) const; 9642: 9642: virtual iter_type 9642: do_get(iter_type __beg, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, long& __v) const 9642: { return _M_extract_int(__beg, __end, __io, __err, __v); } 9642: 9642: virtual iter_type 9642: do_get(iter_type __beg, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, unsigned short& __v) const 9642: { return _M_extract_int(__beg, __end, __io, __err, __v); } 9642: 9642: virtual iter_type 9642: do_get(iter_type __beg, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, unsigned int& __v) const 9642: { return _M_extract_int(__beg, __end, __io, __err, __v); } 9642: 9642: virtual iter_type 9642: do_get(iter_type __beg, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, unsigned long& __v) const 9642: { return _M_extract_int(__beg, __end, __io, __err, __v); } 9642: 9642: 9642: virtual iter_type 9642: do_get(iter_type __beg, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, long long& __v) const 9642: { return _M_extract_int(__beg, __end, __io, __err, __v); } 9642: 9642: virtual iter_type 9642: do_get(iter_type __beg, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, unsigned long long& __v) const 9642: { return _M_extract_int(__beg, __end, __io, __err, __v); } 9642: 9642: 9642: virtual iter_type 9642: do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, float&) const; 9642: 9642: virtual iter_type 9642: do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, 9642: double&) const; 9642: # 2271 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual iter_type 9642: do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, 9642: long double&) const; 9642: 9642: 9642: virtual iter_type 9642: do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, void*&) const; 9642: # 2299 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: }; 9642: 9642: template 9642: locale::id num_get<_CharT, _InIter>::id; 9642: # 2317 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: template 9642: class num_put : public locale::facet 9642: { 9642: public: 9642: 9642: 9642: 9642: typedef _CharT char_type; 9642: typedef _OutIter iter_type; 9642: 9642: 9642: 9642: static locale::id id; 9642: # 2338 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: explicit 9642: num_put(size_t __refs = 0) : facet(__refs) { } 9642: # 2356 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: iter_type 9642: put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const 9642: { return this->do_put(__s, __io, __fill, __v); } 9642: # 2398 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: iter_type 9642: put(iter_type __s, ios_base& __io, char_type __fill, long __v) const 9642: { return this->do_put(__s, __io, __fill, __v); } 9642: 9642: iter_type 9642: put(iter_type __s, ios_base& __io, char_type __fill, 9642: unsigned long __v) const 9642: { return this->do_put(__s, __io, __fill, __v); } 9642: 9642: 9642: iter_type 9642: put(iter_type __s, ios_base& __io, char_type __fill, long long __v) const 9642: { return this->do_put(__s, __io, __fill, __v); } 9642: 9642: iter_type 9642: put(iter_type __s, ios_base& __io, char_type __fill, 9642: unsigned long long __v) const 9642: { return this->do_put(__s, __io, __fill, __v); } 9642: # 2461 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: iter_type 9642: put(iter_type __s, ios_base& __io, char_type __fill, double __v) const 9642: { return this->do_put(__s, __io, __fill, __v); } 9642: 9642: iter_type 9642: put(iter_type __s, ios_base& __io, char_type __fill, 9642: long double __v) const 9642: { return this->do_put(__s, __io, __fill, __v); } 9642: # 2486 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: iter_type 9642: put(iter_type __s, ios_base& __io, char_type __fill, 9642: const void* __v) const 9642: { return this->do_put(__s, __io, __fill, __v); } 9642: 9642: protected: 9642: template 9642: iter_type 9642: _M_insert_float(iter_type, ios_base& __io, char_type __fill, 9642: char __mod, _ValueT __v) const; 9642: 9642: void 9642: _M_group_float(const char* __grouping, size_t __grouping_size, 9642: char_type __sep, const char_type* __p, char_type* __new, 9642: char_type* __cs, int& __len) const; 9642: 9642: template 9642: iter_type 9642: _M_insert_int(iter_type, ios_base& __io, char_type __fill, 9642: _ValueT __v) const; 9642: 9642: void 9642: _M_group_int(const char* __grouping, size_t __grouping_size, 9642: char_type __sep, ios_base& __io, char_type* __new, 9642: char_type* __cs, int& __len) const; 9642: 9642: void 9642: _M_pad(char_type __fill, streamsize __w, ios_base& __io, 9642: char_type* __new, const char_type* __cs, int& __len) const; 9642: 9642: 9642: virtual 9642: ~num_put() { } 9642: # 2534 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: virtual iter_type 9642: do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const; 9642: 9642: virtual iter_type 9642: do_put(iter_type __s, ios_base& __io, char_type __fill, long __v) const 9642: { return _M_insert_int(__s, __io, __fill, __v); } 9642: 9642: virtual iter_type 9642: do_put(iter_type __s, ios_base& __io, char_type __fill, 9642: unsigned long __v) const 9642: { return _M_insert_int(__s, __io, __fill, __v); } 9642: 9642: 9642: virtual iter_type 9642: do_put(iter_type __s, ios_base& __io, char_type __fill, 9642: long long __v) const 9642: { return _M_insert_int(__s, __io, __fill, __v); } 9642: 9642: virtual iter_type 9642: do_put(iter_type __s, ios_base& __io, char_type __fill, 9642: unsigned long long __v) const 9642: { return _M_insert_int(__s, __io, __fill, __v); } 9642: 9642: 9642: virtual iter_type 9642: do_put(iter_type, ios_base&, char_type, double) const; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual iter_type 9642: do_put(iter_type, ios_base&, char_type, long double) const; 9642: 9642: 9642: virtual iter_type 9642: do_put(iter_type, ios_base&, char_type, const void*) const; 9642: # 2586 "/usr/include/c++/13/bits/locale_facets.h" 3 9642: }; 9642: 9642: template 9642: locale::id num_put<_CharT, _OutIter>::id; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline bool 9642: isspace(_CharT __c, const locale& __loc) 9642: { return use_facet >(__loc).is(ctype_base::space, __c); } 9642: 9642: 9642: template 9642: inline bool 9642: isprint(_CharT __c, const locale& __loc) 9642: { return use_facet >(__loc).is(ctype_base::print, __c); } 9642: 9642: 9642: template 9642: inline bool 9642: iscntrl(_CharT __c, const locale& __loc) 9642: { return use_facet >(__loc).is(ctype_base::cntrl, __c); } 9642: 9642: 9642: template 9642: inline bool 9642: isupper(_CharT __c, const locale& __loc) 9642: { return use_facet >(__loc).is(ctype_base::upper, __c); } 9642: 9642: 9642: template 9642: inline bool 9642: islower(_CharT __c, const locale& __loc) 9642: { return use_facet >(__loc).is(ctype_base::lower, __c); } 9642: 9642: 9642: template 9642: inline bool 9642: isalpha(_CharT __c, const locale& __loc) 9642: { return use_facet >(__loc).is(ctype_base::alpha, __c); } 9642: 9642: 9642: template 9642: inline bool 9642: isdigit(_CharT __c, const locale& __loc) 9642: { return use_facet >(__loc).is(ctype_base::digit, __c); } 9642: 9642: 9642: template 9642: inline bool 9642: ispunct(_CharT __c, const locale& __loc) 9642: { return use_facet >(__loc).is(ctype_base::punct, __c); } 9642: 9642: 9642: template 9642: inline bool 9642: isxdigit(_CharT __c, const locale& __loc) 9642: { return use_facet >(__loc).is(ctype_base::xdigit, __c); } 9642: 9642: 9642: template 9642: inline bool 9642: isalnum(_CharT __c, const locale& __loc) 9642: { return use_facet >(__loc).is(ctype_base::alnum, __c); } 9642: 9642: 9642: template 9642: inline bool 9642: isgraph(_CharT __c, const locale& __loc) 9642: { return use_facet >(__loc).is(ctype_base::graph, __c); } 9642: 9642: 9642: 9642: template 9642: inline bool 9642: isblank(_CharT __c, const locale& __loc) 9642: { return use_facet >(__loc).is(ctype_base::blank, __c); } 9642: 9642: 9642: 9642: template 9642: inline _CharT 9642: toupper(_CharT __c, const locale& __loc) 9642: { return use_facet >(__loc).toupper(__c); } 9642: 9642: 9642: template 9642: inline _CharT 9642: tolower(_CharT __c, const locale& __loc) 9642: { return use_facet >(__loc).tolower(__c); } 9642: 9642: 9642: } 9642: 9642: # 1 "/usr/include/c++/13/bits/locale_facets.tcc" 1 3 9642: # 33 "/usr/include/c++/13/bits/locale_facets.tcc" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/locale_facets.tcc" 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: template 9642: struct __use_cache 9642: { 9642: const _Facet* 9642: operator() (const locale& __loc) const; 9642: }; 9642: 9642: 9642: template 9642: struct __use_cache<__numpunct_cache<_CharT> > 9642: { 9642: const __numpunct_cache<_CharT>* 9642: operator() (const locale& __loc) const 9642: { 9642: const size_t __i = numpunct<_CharT>::id._M_id(); 9642: const locale::facet** __caches = __loc._M_impl->_M_caches; 9642: if (!__caches[__i]) 9642: { 9642: __numpunct_cache<_CharT>* __tmp = 0; 9642: try 9642: { 9642: __tmp = new __numpunct_cache<_CharT>; 9642: __tmp->_M_cache(__loc); 9642: } 9642: catch(...) 9642: { 9642: delete __tmp; 9642: throw; 9642: } 9642: __loc._M_impl->_M_install_cache(__tmp, __i); 9642: } 9642: return static_cast*>(__caches[__i]); 9642: } 9642: }; 9642: 9642: template 9642: void 9642: __numpunct_cache<_CharT>::_M_cache(const locale& __loc) 9642: { 9642: const numpunct<_CharT>& __np = use_facet >(__loc); 9642: 9642: char* __grouping = 0; 9642: _CharT* __truename = 0; 9642: _CharT* __falsename = 0; 9642: try 9642: { 9642: const string& __g = __np.grouping(); 9642: _M_grouping_size = __g.size(); 9642: __grouping = new char[_M_grouping_size]; 9642: __g.copy(__grouping, _M_grouping_size); 9642: _M_use_grouping = (_M_grouping_size 9642: && static_cast(__grouping[0]) > 0 9642: && (__grouping[0] 9642: != __gnu_cxx::__numeric_traits::__max)); 9642: 9642: const basic_string<_CharT>& __tn = __np.truename(); 9642: _M_truename_size = __tn.size(); 9642: __truename = new _CharT[_M_truename_size]; 9642: __tn.copy(__truename, _M_truename_size); 9642: 9642: const basic_string<_CharT>& __fn = __np.falsename(); 9642: _M_falsename_size = __fn.size(); 9642: __falsename = new _CharT[_M_falsename_size]; 9642: __fn.copy(__falsename, _M_falsename_size); 9642: 9642: _M_decimal_point = __np.decimal_point(); 9642: _M_thousands_sep = __np.thousands_sep(); 9642: 9642: const ctype<_CharT>& __ct = use_facet >(__loc); 9642: __ct.widen(__num_base::_S_atoms_out, 9642: __num_base::_S_atoms_out 9642: + __num_base::_S_oend, _M_atoms_out); 9642: __ct.widen(__num_base::_S_atoms_in, 9642: __num_base::_S_atoms_in 9642: + __num_base::_S_iend, _M_atoms_in); 9642: 9642: _M_grouping = __grouping; 9642: _M_truename = __truename; 9642: _M_falsename = __falsename; 9642: _M_allocated = true; 9642: } 9642: catch(...) 9642: { 9642: delete [] __grouping; 9642: delete [] __truename; 9642: delete [] __falsename; 9642: throw; 9642: } 9642: } 9642: # 139 "/usr/include/c++/13/bits/locale_facets.tcc" 3 9642: __attribute__ ((__pure__)) bool 9642: __verify_grouping(const char* __grouping, size_t __grouping_size, 9642: const string& __grouping_tmp) throw (); 9642: 9642: 9642: 9642: template 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: _InIter 9642: num_get<_CharT, _InIter>:: 9642: _M_extract_float(_InIter __beg, _InIter __end, ios_base& __io, 9642: ios_base::iostate& __err, string& __xtrc) const 9642: { 9642: typedef char_traits<_CharT> __traits_type; 9642: typedef __numpunct_cache<_CharT> __cache_type; 9642: __use_cache<__cache_type> __uc; 9642: const locale& __loc = __io._M_getloc(); 9642: const __cache_type* __lc = __uc(__loc); 9642: const _CharT* __lit = __lc->_M_atoms_in; 9642: char_type __c = char_type(); 9642: 9642: 9642: bool __testeof = __beg == __end; 9642: 9642: 9642: if (!__testeof) 9642: { 9642: __c = *__beg; 9642: const bool __plus = __c == __lit[__num_base::_S_iplus]; 9642: if ((__plus || __c == __lit[__num_base::_S_iminus]) 9642: && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) 9642: && !(__c == __lc->_M_decimal_point)) 9642: { 9642: __xtrc += __plus ? '+' : '-'; 9642: if (++__beg != __end) 9642: __c = *__beg; 9642: else 9642: __testeof = true; 9642: } 9642: } 9642: 9642: 9642: bool __found_mantissa = false; 9642: int __sep_pos = 0; 9642: while (!__testeof) 9642: { 9642: if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) 9642: || __c == __lc->_M_decimal_point) 9642: break; 9642: else if (__c == __lit[__num_base::_S_izero]) 9642: { 9642: if (!__found_mantissa) 9642: { 9642: __xtrc += '0'; 9642: __found_mantissa = true; 9642: } 9642: ++__sep_pos; 9642: 9642: if (++__beg != __end) 9642: __c = *__beg; 9642: else 9642: __testeof = true; 9642: } 9642: else 9642: break; 9642: } 9642: 9642: 9642: bool __found_dec = false; 9642: bool __found_sci = false; 9642: string __found_grouping; 9642: if (__lc->_M_use_grouping) 9642: __found_grouping.reserve(32); 9642: const char_type* __lit_zero = __lit + __num_base::_S_izero; 9642: 9642: if (!__lc->_M_allocated) 9642: 9642: while (!__testeof) 9642: { 9642: const int __digit = _M_find(__lit_zero, 10, __c); 9642: if (__digit != -1) 9642: { 9642: __xtrc += '0' + __digit; 9642: __found_mantissa = true; 9642: } 9642: else if (__c == __lc->_M_decimal_point 9642: && !__found_dec && !__found_sci) 9642: { 9642: __xtrc += '.'; 9642: __found_dec = true; 9642: } 9642: else if ((__c == __lit[__num_base::_S_ie] 9642: || __c == __lit[__num_base::_S_iE]) 9642: && !__found_sci && __found_mantissa) 9642: { 9642: 9642: __xtrc += 'e'; 9642: __found_sci = true; 9642: 9642: 9642: if (++__beg != __end) 9642: { 9642: __c = *__beg; 9642: const bool __plus = __c == __lit[__num_base::_S_iplus]; 9642: if (__plus || __c == __lit[__num_base::_S_iminus]) 9642: __xtrc += __plus ? '+' : '-'; 9642: else 9642: continue; 9642: } 9642: else 9642: { 9642: __testeof = true; 9642: break; 9642: } 9642: } 9642: else 9642: break; 9642: 9642: if (++__beg != __end) 9642: __c = *__beg; 9642: else 9642: __testeof = true; 9642: } 9642: else 9642: while (!__testeof) 9642: { 9642: 9642: 9642: if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) 9642: { 9642: if (!__found_dec && !__found_sci) 9642: { 9642: 9642: 9642: if (__sep_pos) 9642: { 9642: __found_grouping += static_cast(__sep_pos); 9642: __sep_pos = 0; 9642: } 9642: else 9642: { 9642: 9642: 9642: __xtrc.clear(); 9642: break; 9642: } 9642: } 9642: else 9642: break; 9642: } 9642: else if (__c == __lc->_M_decimal_point) 9642: { 9642: if (!__found_dec && !__found_sci) 9642: { 9642: 9642: 9642: 9642: if (__found_grouping.size()) 9642: __found_grouping += static_cast(__sep_pos); 9642: __xtrc += '.'; 9642: __found_dec = true; 9642: } 9642: else 9642: break; 9642: } 9642: else 9642: { 9642: const char_type* __q = 9642: __traits_type::find(__lit_zero, 10, __c); 9642: if (__q) 9642: { 9642: __xtrc += '0' + (__q - __lit_zero); 9642: __found_mantissa = true; 9642: ++__sep_pos; 9642: } 9642: else if ((__c == __lit[__num_base::_S_ie] 9642: || __c == __lit[__num_base::_S_iE]) 9642: && !__found_sci && __found_mantissa) 9642: { 9642: 9642: if (__found_grouping.size() && !__found_dec) 9642: __found_grouping += static_cast(__sep_pos); 9642: __xtrc += 'e'; 9642: __found_sci = true; 9642: 9642: 9642: if (++__beg != __end) 9642: { 9642: __c = *__beg; 9642: const bool __plus = __c == __lit[__num_base::_S_iplus]; 9642: if ((__plus || __c == __lit[__num_base::_S_iminus]) 9642: && !(__lc->_M_use_grouping 9642: && __c == __lc->_M_thousands_sep) 9642: && !(__c == __lc->_M_decimal_point)) 9642: __xtrc += __plus ? '+' : '-'; 9642: else 9642: continue; 9642: } 9642: else 9642: { 9642: __testeof = true; 9642: break; 9642: } 9642: } 9642: else 9642: break; 9642: } 9642: 9642: if (++__beg != __end) 9642: __c = *__beg; 9642: else 9642: __testeof = true; 9642: } 9642: 9642: 9642: 9642: if (__found_grouping.size()) 9642: { 9642: 9642: if (!__found_dec && !__found_sci) 9642: __found_grouping += static_cast(__sep_pos); 9642: 9642: if (!std::__verify_grouping(__lc->_M_grouping, 9642: __lc->_M_grouping_size, 9642: __found_grouping)) 9642: __err = ios_base::failbit; 9642: } 9642: 9642: return __beg; 9642: } 9642: 9642: template 9642: template 9642: __attribute ((__abi_tag__ ("cxx11"))) 9642: _InIter 9642: num_get<_CharT, _InIter>:: 9642: _M_extract_int(_InIter __beg, _InIter __end, ios_base& __io, 9642: ios_base::iostate& __err, _ValueT& __v) const 9642: { 9642: typedef char_traits<_CharT> __traits_type; 9642: using __gnu_cxx::__add_unsigned; 9642: typedef typename __add_unsigned<_ValueT>::__type __unsigned_type; 9642: typedef __numpunct_cache<_CharT> __cache_type; 9642: __use_cache<__cache_type> __uc; 9642: const locale& __loc = __io._M_getloc(); 9642: const __cache_type* __lc = __uc(__loc); 9642: const _CharT* __lit = __lc->_M_atoms_in; 9642: char_type __c = char_type(); 9642: 9642: 9642: const ios_base::fmtflags __basefield = __io.flags() 9642: & ios_base::basefield; 9642: const bool __oct = __basefield == ios_base::oct; 9642: int __base = __oct ? 8 : (__basefield == ios_base::hex ? 16 : 10); 9642: 9642: 9642: bool __testeof = __beg == __end; 9642: 9642: 9642: bool __negative = false; 9642: if (!__testeof) 9642: { 9642: __c = *__beg; 9642: __negative = __c == __lit[__num_base::_S_iminus]; 9642: if ((__negative || __c == __lit[__num_base::_S_iplus]) 9642: && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) 9642: && !(__c == __lc->_M_decimal_point)) 9642: { 9642: if (++__beg != __end) 9642: __c = *__beg; 9642: else 9642: __testeof = true; 9642: } 9642: } 9642: 9642: 9642: 9642: bool __found_zero = false; 9642: int __sep_pos = 0; 9642: while (!__testeof) 9642: { 9642: if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) 9642: || __c == __lc->_M_decimal_point) 9642: break; 9642: else if (__c == __lit[__num_base::_S_izero] 9642: && (!__found_zero || __base == 10)) 9642: { 9642: __found_zero = true; 9642: ++__sep_pos; 9642: if (__basefield == 0) 9642: __base = 8; 9642: if (__base == 8) 9642: __sep_pos = 0; 9642: } 9642: else if (__found_zero 9642: && (__c == __lit[__num_base::_S_ix] 9642: || __c == __lit[__num_base::_S_iX])) 9642: { 9642: if (__basefield == 0) 9642: __base = 16; 9642: if (__base == 16) 9642: { 9642: __found_zero = false; 9642: __sep_pos = 0; 9642: } 9642: else 9642: break; 9642: } 9642: else 9642: break; 9642: 9642: if (++__beg != __end) 9642: { 9642: __c = *__beg; 9642: if (!__found_zero) 9642: break; 9642: } 9642: else 9642: __testeof = true; 9642: } 9642: 9642: 9642: 9642: const size_t __len = (__base == 16 ? __num_base::_S_iend 9642: - __num_base::_S_izero : __base); 9642: 9642: 9642: typedef __gnu_cxx::__numeric_traits<_ValueT> __num_traits; 9642: string __found_grouping; 9642: if (__lc->_M_use_grouping) 9642: __found_grouping.reserve(32); 9642: bool __testfail = false; 9642: bool __testoverflow = false; 9642: const __unsigned_type __max = 9642: (__negative && __num_traits::__is_signed) 9642: ? -static_cast<__unsigned_type>(__num_traits::__min) 9642: : __num_traits::__max; 9642: const __unsigned_type __smax = __max / __base; 9642: __unsigned_type __result = 0; 9642: int __digit = 0; 9642: const char_type* __lit_zero = __lit + __num_base::_S_izero; 9642: 9642: if (!__lc->_M_allocated) 9642: 9642: while (!__testeof) 9642: { 9642: __digit = _M_find(__lit_zero, __len, __c); 9642: if (__digit == -1) 9642: break; 9642: 9642: if (__result > __smax) 9642: __testoverflow = true; 9642: else 9642: { 9642: __result *= __base; 9642: __testoverflow |= __result > __max - __digit; 9642: __result += __digit; 9642: ++__sep_pos; 9642: } 9642: 9642: if (++__beg != __end) 9642: __c = *__beg; 9642: else 9642: __testeof = true; 9642: } 9642: else 9642: while (!__testeof) 9642: { 9642: 9642: 9642: if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) 9642: { 9642: 9642: 9642: if (__sep_pos) 9642: { 9642: __found_grouping += static_cast(__sep_pos); 9642: __sep_pos = 0; 9642: } 9642: else 9642: { 9642: __testfail = true; 9642: break; 9642: } 9642: } 9642: else if (__c == __lc->_M_decimal_point) 9642: break; 9642: else 9642: { 9642: const char_type* __q = 9642: __traits_type::find(__lit_zero, __len, __c); 9642: if (!__q) 9642: break; 9642: 9642: __digit = __q - __lit_zero; 9642: if (__digit > 15) 9642: __digit -= 6; 9642: if (__result > __smax) 9642: __testoverflow = true; 9642: else 9642: { 9642: __result *= __base; 9642: __testoverflow |= __result > __max - __digit; 9642: __result += __digit; 9642: ++__sep_pos; 9642: } 9642: } 9642: 9642: if (++__beg != __end) 9642: __c = *__beg; 9642: else 9642: __testeof = true; 9642: } 9642: 9642: 9642: 9642: if (__found_grouping.size()) 9642: { 9642: 9642: __found_grouping += static_cast(__sep_pos); 9642: 9642: if (!std::__verify_grouping(__lc->_M_grouping, 9642: __lc->_M_grouping_size, 9642: __found_grouping)) 9642: __err = ios_base::failbit; 9642: } 9642: 9642: 9642: 9642: if ((!__sep_pos && !__found_zero && !__found_grouping.size()) 9642: || __testfail) 9642: { 9642: __v = 0; 9642: __err = ios_base::failbit; 9642: } 9642: else if (__testoverflow) 9642: { 9642: if (__negative && __num_traits::__is_signed) 9642: __v = __num_traits::__min; 9642: else 9642: __v = __num_traits::__max; 9642: __err = ios_base::failbit; 9642: } 9642: else 9642: __v = __negative ? -__result : __result; 9642: 9642: if (__testeof) 9642: __err |= ios_base::eofbit; 9642: return __beg; 9642: } 9642: 9642: 9642: 9642: template 9642: _InIter 9642: num_get<_CharT, _InIter>:: 9642: do_get(iter_type __beg, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, bool& __v) const 9642: { 9642: if (!(__io.flags() & ios_base::boolalpha)) 9642: { 9642: 9642: 9642: 9642: long __l = -1; 9642: __beg = _M_extract_int(__beg, __end, __io, __err, __l); 9642: if (__l == 0 || __l == 1) 9642: __v = bool(__l); 9642: else 9642: { 9642: 9642: 9642: __v = true; 9642: __err = ios_base::failbit; 9642: if (__beg == __end) 9642: __err |= ios_base::eofbit; 9642: } 9642: } 9642: else 9642: { 9642: 9642: typedef __numpunct_cache<_CharT> __cache_type; 9642: __use_cache<__cache_type> __uc; 9642: const locale& __loc = __io._M_getloc(); 9642: const __cache_type* __lc = __uc(__loc); 9642: 9642: bool __testf = true; 9642: bool __testt = true; 9642: bool __donef = __lc->_M_falsename_size == 0; 9642: bool __donet = __lc->_M_truename_size == 0; 9642: bool __testeof = false; 9642: size_t __n = 0; 9642: while (!__donef || !__donet) 9642: { 9642: if (__beg == __end) 9642: { 9642: __testeof = true; 9642: break; 9642: } 9642: 9642: const char_type __c = *__beg; 9642: 9642: if (!__donef) 9642: __testf = __c == __lc->_M_falsename[__n]; 9642: 9642: if (!__testf && __donet) 9642: break; 9642: 9642: if (!__donet) 9642: __testt = __c == __lc->_M_truename[__n]; 9642: 9642: if (!__testt && __donef) 9642: break; 9642: 9642: if (!__testt && !__testf) 9642: break; 9642: 9642: ++__n; 9642: ++__beg; 9642: 9642: __donef = !__testf || __n >= __lc->_M_falsename_size; 9642: __donet = !__testt || __n >= __lc->_M_truename_size; 9642: } 9642: if (__testf && __n == __lc->_M_falsename_size && __n) 9642: { 9642: __v = false; 9642: if (__testt && __n == __lc->_M_truename_size) 9642: __err = ios_base::failbit; 9642: else 9642: __err = __testeof ? ios_base::eofbit : ios_base::goodbit; 9642: } 9642: else if (__testt && __n == __lc->_M_truename_size && __n) 9642: { 9642: __v = true; 9642: __err = __testeof ? ios_base::eofbit : ios_base::goodbit; 9642: } 9642: else 9642: { 9642: 9642: 9642: __v = false; 9642: __err = ios_base::failbit; 9642: if (__testeof) 9642: __err |= ios_base::eofbit; 9642: } 9642: } 9642: return __beg; 9642: } 9642: 9642: template 9642: _InIter 9642: num_get<_CharT, _InIter>:: 9642: do_get(iter_type __beg, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, float& __v) const 9642: { 9642: string __xtrc; 9642: __xtrc.reserve(32); 9642: __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); 9642: std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); 9642: if (__beg == __end) 9642: __err |= ios_base::eofbit; 9642: return __beg; 9642: } 9642: 9642: template 9642: _InIter 9642: num_get<_CharT, _InIter>:: 9642: do_get(iter_type __beg, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, double& __v) const 9642: { 9642: string __xtrc; 9642: __xtrc.reserve(32); 9642: __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); 9642: std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); 9642: if (__beg == __end) 9642: __err |= ios_base::eofbit; 9642: return __beg; 9642: } 9642: # 735 "/usr/include/c++/13/bits/locale_facets.tcc" 3 9642: template 9642: _InIter 9642: num_get<_CharT, _InIter>:: 9642: do_get(iter_type __beg, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, long double& __v) const 9642: { 9642: string __xtrc; 9642: __xtrc.reserve(32); 9642: __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); 9642: std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); 9642: if (__beg == __end) 9642: __err |= ios_base::eofbit; 9642: return __beg; 9642: } 9642: 9642: template 9642: _InIter 9642: num_get<_CharT, _InIter>:: 9642: do_get(iter_type __beg, iter_type __end, ios_base& __io, 9642: ios_base::iostate& __err, void*& __v) const 9642: { 9642: 9642: typedef ios_base::fmtflags fmtflags; 9642: const fmtflags __fmt = __io.flags(); 9642: __io.flags((__fmt & ~ios_base::basefield) | ios_base::hex); 9642: 9642: typedef __gnu_cxx::__conditional_type<(sizeof(void*) 9642: <= sizeof(unsigned long)), 9642: unsigned long, unsigned long long>::__type _UIntPtrType; 9642: 9642: _UIntPtrType __ul; 9642: __beg = _M_extract_int(__beg, __end, __io, __err, __ul); 9642: 9642: 9642: __io.flags(__fmt); 9642: 9642: __v = reinterpret_cast(__ul); 9642: return __beg; 9642: } 9642: # 795 "/usr/include/c++/13/bits/locale_facets.tcc" 3 9642: template 9642: void 9642: num_put<_CharT, _OutIter>:: 9642: _M_pad(_CharT __fill, streamsize __w, ios_base& __io, 9642: _CharT* __new, const _CharT* __cs, int& __len) const 9642: { 9642: 9642: 9642: __pad<_CharT, char_traits<_CharT> >::_S_pad(__io, __fill, __new, 9642: __cs, __w, __len); 9642: __len = static_cast(__w); 9642: } 9642: 9642: 9642: 9642: template 9642: int 9642: __int_to_char(_CharT* __bufend, _ValueT __v, const _CharT* __lit, 9642: ios_base::fmtflags __flags, bool __dec) 9642: { 9642: _CharT* __buf = __bufend; 9642: if (__builtin_expect(__dec, true)) 9642: { 9642: 9642: do 9642: { 9642: *--__buf = __lit[(__v % 10) + __num_base::_S_odigits]; 9642: __v /= 10; 9642: } 9642: while (__v != 0); 9642: } 9642: else if ((__flags & ios_base::basefield) == ios_base::oct) 9642: { 9642: 9642: do 9642: { 9642: *--__buf = __lit[(__v & 0x7) + __num_base::_S_odigits]; 9642: __v >>= 3; 9642: } 9642: while (__v != 0); 9642: } 9642: else 9642: { 9642: 9642: const bool __uppercase = __flags & ios_base::uppercase; 9642: const int __case_offset = __uppercase ? __num_base::_S_oudigits 9642: : __num_base::_S_odigits; 9642: do 9642: { 9642: *--__buf = __lit[(__v & 0xf) + __case_offset]; 9642: __v >>= 4; 9642: } 9642: while (__v != 0); 9642: } 9642: return __bufend - __buf; 9642: } 9642: 9642: 9642: 9642: template 9642: void 9642: num_put<_CharT, _OutIter>:: 9642: _M_group_int(const char* __grouping, size_t __grouping_size, _CharT __sep, 9642: ios_base&, _CharT* __new, _CharT* __cs, int& __len) const 9642: { 9642: _CharT* __p = std::__add_grouping(__new, __sep, __grouping, 9642: __grouping_size, __cs, __cs + __len); 9642: __len = __p - __new; 9642: } 9642: 9642: template 9642: template 9642: _OutIter 9642: num_put<_CharT, _OutIter>:: 9642: _M_insert_int(_OutIter __s, ios_base& __io, _CharT __fill, 9642: _ValueT __v) const 9642: { 9642: using __gnu_cxx::__add_unsigned; 9642: typedef typename __add_unsigned<_ValueT>::__type __unsigned_type; 9642: typedef __numpunct_cache<_CharT> __cache_type; 9642: __use_cache<__cache_type> __uc; 9642: const locale& __loc = __io._M_getloc(); 9642: const __cache_type* __lc = __uc(__loc); 9642: const _CharT* __lit = __lc->_M_atoms_out; 9642: const ios_base::fmtflags __flags = __io.flags(); 9642: 9642: 9642: const int __ilen = 5 * sizeof(_ValueT); 9642: _CharT* __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) 9642: * __ilen)); 9642: 9642: 9642: 9642: const ios_base::fmtflags __basefield = __flags & ios_base::basefield; 9642: const bool __dec = (__basefield != ios_base::oct 9642: && __basefield != ios_base::hex); 9642: const __unsigned_type __u = ((__v > 0 || !__dec) 9642: ? __unsigned_type(__v) 9642: : -__unsigned_type(__v)); 9642: int __len = __int_to_char(__cs + __ilen, __u, __lit, __flags, __dec); 9642: __cs += __ilen - __len; 9642: 9642: 9642: if (__lc->_M_use_grouping) 9642: { 9642: 9642: 9642: _CharT* __cs2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) 9642: * (__len + 1) 9642: * 2)); 9642: _M_group_int(__lc->_M_grouping, __lc->_M_grouping_size, 9642: __lc->_M_thousands_sep, __io, __cs2 + 2, __cs, __len); 9642: __cs = __cs2 + 2; 9642: } 9642: 9642: 9642: if (__builtin_expect(__dec, true)) 9642: { 9642: 9642: if (__v >= 0) 9642: { 9642: if (bool(__flags & ios_base::showpos) 9642: && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed) 9642: *--__cs = __lit[__num_base::_S_oplus], ++__len; 9642: } 9642: else 9642: *--__cs = __lit[__num_base::_S_ominus], ++__len; 9642: } 9642: else if (bool(__flags & ios_base::showbase) && __v) 9642: { 9642: if (__basefield == ios_base::oct) 9642: *--__cs = __lit[__num_base::_S_odigits], ++__len; 9642: else 9642: { 9642: 9642: const bool __uppercase = __flags & ios_base::uppercase; 9642: *--__cs = __lit[__num_base::_S_ox + __uppercase]; 9642: 9642: *--__cs = __lit[__num_base::_S_odigits]; 9642: __len += 2; 9642: } 9642: } 9642: 9642: 9642: const streamsize __w = __io.width(); 9642: if (__w > static_cast(__len)) 9642: { 9642: _CharT* __cs3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) 9642: * __w)); 9642: _M_pad(__fill, __w, __io, __cs3, __cs, __len); 9642: __cs = __cs3; 9642: } 9642: __io.width(0); 9642: 9642: 9642: 9642: return std::__write(__s, __cs, __len); 9642: } 9642: 9642: template 9642: void 9642: num_put<_CharT, _OutIter>:: 9642: _M_group_float(const char* __grouping, size_t __grouping_size, 9642: _CharT __sep, const _CharT* __p, _CharT* __new, 9642: _CharT* __cs, int& __len) const 9642: { 9642: 9642: 9642: 9642: const int __declen = __p ? __p - __cs : __len; 9642: _CharT* __p2 = std::__add_grouping(__new, __sep, __grouping, 9642: __grouping_size, 9642: __cs, __cs + __declen); 9642: 9642: 9642: int __newlen = __p2 - __new; 9642: if (__p) 9642: { 9642: char_traits<_CharT>::copy(__p2, __p, __len - __declen); 9642: __newlen += __len - __declen; 9642: } 9642: __len = __newlen; 9642: } 9642: # 989 "/usr/include/c++/13/bits/locale_facets.tcc" 3 9642: template 9642: template 9642: _OutIter 9642: num_put<_CharT, _OutIter>:: 9642: _M_insert_float(_OutIter __s, ios_base& __io, _CharT __fill, char __mod, 9642: _ValueT __v) const 9642: { 9642: typedef __numpunct_cache<_CharT> __cache_type; 9642: __use_cache<__cache_type> __uc; 9642: const locale& __loc = __io._M_getloc(); 9642: const __cache_type* __lc = __uc(__loc); 9642: 9642: 9642: const streamsize __prec = __io.precision() < 0 ? 6 : __io.precision(); 9642: 9642: const int __max_digits = 9642: __gnu_cxx::__numeric_traits<_ValueT>::__digits10; 9642: 9642: 9642: int __len; 9642: 9642: char __fbuf[16]; 9642: __num_base::_S_format_float(__io, __fbuf, __mod); 9642: 9642: 9642: 9642: const bool __use_prec = 9642: (__io.flags() & ios_base::floatfield) != ios_base::floatfield; 9642: 9642: 9642: 9642: int __cs_size = __max_digits * 3; 9642: char* __cs = static_cast(__builtin_alloca(__cs_size)); 9642: if (__use_prec) 9642: __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, 9642: __fbuf, __prec, __v); 9642: else 9642: __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, 9642: __fbuf, __v); 9642: 9642: 9642: if (__len >= __cs_size) 9642: { 9642: __cs_size = __len + 1; 9642: __cs = static_cast(__builtin_alloca(__cs_size)); 9642: if (__use_prec) 9642: __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, 9642: __fbuf, __prec, __v); 9642: else 9642: __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, 9642: __fbuf, __v); 9642: } 9642: # 1062 "/usr/include/c++/13/bits/locale_facets.tcc" 3 9642: const ctype<_CharT>& __ctype = use_facet >(__loc); 9642: 9642: _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) 9642: * __len)); 9642: __ctype.widen(__cs, __cs + __len, __ws); 9642: 9642: 9642: _CharT* __wp = 0; 9642: const char* __p = char_traits::find(__cs, __len, '.'); 9642: if (__p) 9642: { 9642: __wp = __ws + (__p - __cs); 9642: *__wp = __lc->_M_decimal_point; 9642: } 9642: 9642: 9642: 9642: 9642: if (__lc->_M_use_grouping 9642: && (__wp || __len < 3 || (__cs[1] <= '9' && __cs[2] <= '9' 9642: && __cs[1] >= '0' && __cs[2] >= '0'))) 9642: { 9642: 9642: 9642: _CharT* __ws2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) 9642: * __len * 2)); 9642: 9642: streamsize __off = 0; 9642: if (__cs[0] == '-' || __cs[0] == '+') 9642: { 9642: __off = 1; 9642: __ws2[0] = __ws[0]; 9642: __len -= 1; 9642: } 9642: 9642: _M_group_float(__lc->_M_grouping, __lc->_M_grouping_size, 9642: __lc->_M_thousands_sep, __wp, __ws2 + __off, 9642: __ws + __off, __len); 9642: __len += __off; 9642: 9642: __ws = __ws2; 9642: } 9642: 9642: 9642: const streamsize __w = __io.width(); 9642: if (__w > static_cast(__len)) 9642: { 9642: _CharT* __ws3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) 9642: * __w)); 9642: _M_pad(__fill, __w, __io, __ws3, __ws, __len); 9642: __ws = __ws3; 9642: } 9642: __io.width(0); 9642: 9642: 9642: 9642: return std::__write(__s, __ws, __len); 9642: } 9642: 9642: template 9642: _OutIter 9642: num_put<_CharT, _OutIter>:: 9642: do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const 9642: { 9642: const ios_base::fmtflags __flags = __io.flags(); 9642: if ((__flags & ios_base::boolalpha) == 0) 9642: { 9642: const long __l = __v; 9642: __s = _M_insert_int(__s, __io, __fill, __l); 9642: } 9642: else 9642: { 9642: typedef __numpunct_cache<_CharT> __cache_type; 9642: __use_cache<__cache_type> __uc; 9642: const locale& __loc = __io._M_getloc(); 9642: const __cache_type* __lc = __uc(__loc); 9642: 9642: const _CharT* __name = __v ? __lc->_M_truename 9642: : __lc->_M_falsename; 9642: int __len = __v ? __lc->_M_truename_size 9642: : __lc->_M_falsename_size; 9642: 9642: const streamsize __w = __io.width(); 9642: if (__w > static_cast(__len)) 9642: { 9642: const streamsize __plen = __w - __len; 9642: _CharT* __ps 9642: = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) 9642: * __plen)); 9642: 9642: char_traits<_CharT>::assign(__ps, __plen, __fill); 9642: __io.width(0); 9642: 9642: if ((__flags & ios_base::adjustfield) == ios_base::left) 9642: { 9642: __s = std::__write(__s, __name, __len); 9642: __s = std::__write(__s, __ps, __plen); 9642: } 9642: else 9642: { 9642: __s = std::__write(__s, __ps, __plen); 9642: __s = std::__write(__s, __name, __len); 9642: } 9642: return __s; 9642: } 9642: __io.width(0); 9642: __s = std::__write(__s, __name, __len); 9642: } 9642: return __s; 9642: } 9642: 9642: template 9642: _OutIter 9642: num_put<_CharT, _OutIter>:: 9642: do_put(iter_type __s, ios_base& __io, char_type __fill, double __v) const 9642: { return _M_insert_float(__s, __io, __fill, char(), __v); } 9642: # 1187 "/usr/include/c++/13/bits/locale_facets.tcc" 3 9642: template 9642: _OutIter 9642: num_put<_CharT, _OutIter>:: 9642: do_put(iter_type __s, ios_base& __io, char_type __fill, 9642: long double __v) const 9642: { return _M_insert_float(__s, __io, __fill, 'L', __v); } 9642: 9642: template 9642: _OutIter 9642: num_put<_CharT, _OutIter>:: 9642: do_put(iter_type __s, ios_base& __io, char_type __fill, 9642: const void* __v) const 9642: { 9642: const ios_base::fmtflags __flags = __io.flags(); 9642: const ios_base::fmtflags __fmt = ~(ios_base::basefield 9642: | ios_base::uppercase); 9642: __io.flags((__flags & __fmt) | (ios_base::hex | ios_base::showbase)); 9642: 9642: typedef __gnu_cxx::__conditional_type<(sizeof(const void*) 9642: <= sizeof(unsigned long)), 9642: unsigned long, unsigned long long>::__type _UIntPtrType; 9642: 9642: __s = _M_insert_int(__s, __io, __fill, 9642: reinterpret_cast<_UIntPtrType>(__v)); 9642: __io.flags(__flags); 9642: return __s; 9642: } 9642: # 1224 "/usr/include/c++/13/bits/locale_facets.tcc" 3 9642: 9642: # 1233 "/usr/include/c++/13/bits/locale_facets.tcc" 3 9642: template 9642: void 9642: __pad<_CharT, _Traits>::_S_pad(ios_base& __io, _CharT __fill, 9642: _CharT* __news, const _CharT* __olds, 9642: streamsize __newlen, streamsize __oldlen) 9642: { 9642: const size_t __plen = static_cast(__newlen - __oldlen); 9642: const ios_base::fmtflags __adjust = __io.flags() & ios_base::adjustfield; 9642: 9642: 9642: if (__adjust == ios_base::left) 9642: { 9642: _Traits::copy(__news, __olds, __oldlen); 9642: _Traits::assign(__news + __oldlen, __plen, __fill); 9642: return; 9642: } 9642: 9642: size_t __mod = 0; 9642: if (__adjust == ios_base::internal) 9642: { 9642: 9642: 9642: 9642: const locale& __loc = __io._M_getloc(); 9642: const ctype<_CharT>& __ctype = use_facet >(__loc); 9642: 9642: if (__ctype.widen('-') == __olds[0] 9642: || __ctype.widen('+') == __olds[0]) 9642: { 9642: __news[0] = __olds[0]; 9642: __mod = 1; 9642: ++__news; 9642: } 9642: else if (__ctype.widen('0') == __olds[0] 9642: && __oldlen > 1 9642: && (__ctype.widen('x') == __olds[1] 9642: || __ctype.widen('X') == __olds[1])) 9642: { 9642: __news[0] = __olds[0]; 9642: __news[1] = __olds[1]; 9642: __mod = 2; 9642: __news += 2; 9642: } 9642: 9642: } 9642: _Traits::assign(__news, __plen, __fill); 9642: _Traits::copy(__news + __plen, __olds + __mod, __oldlen - __mod); 9642: } 9642: 9642: template 9642: _CharT* 9642: __add_grouping(_CharT* __s, _CharT __sep, 9642: const char* __gbeg, size_t __gsize, 9642: const _CharT* __first, const _CharT* __last) 9642: { 9642: size_t __idx = 0; 9642: size_t __ctr = 0; 9642: 9642: while (__last - __first > __gbeg[__idx] 9642: && static_cast(__gbeg[__idx]) > 0 9642: && __gbeg[__idx] != __gnu_cxx::__numeric_traits::__max) 9642: { 9642: __last -= __gbeg[__idx]; 9642: __idx < __gsize - 1 ? ++__idx : ++__ctr; 9642: } 9642: 9642: while (__first != __last) 9642: *__s++ = *__first++; 9642: 9642: while (__ctr--) 9642: { 9642: *__s++ = __sep; 9642: for (char __i = __gbeg[__idx]; __i > 0; --__i) 9642: *__s++ = *__first++; 9642: } 9642: 9642: while (__idx--) 9642: { 9642: *__s++ = __sep; 9642: for (char __i = __gbeg[__idx]; __i > 0; --__i) 9642: *__s++ = *__first++; 9642: } 9642: 9642: return __s; 9642: } 9642: 9642: 9642: 9642: 9642: extern template class __cxx11:: numpunct; 9642: extern template class __cxx11:: numpunct_byname; 9642: extern template class num_get; 9642: extern template class num_put; 9642: extern template class ctype_byname; 9642: 9642: extern template 9642: const ctype* 9642: __try_use_facet >(const locale&) noexcept; 9642: 9642: extern template 9642: const numpunct* 9642: __try_use_facet >(const locale&) noexcept; 9642: 9642: extern template 9642: const num_put* 9642: __try_use_facet >(const locale&) noexcept; 9642: 9642: extern template 9642: const num_get* 9642: __try_use_facet >(const locale&) noexcept; 9642: 9642: extern template 9642: const ctype& 9642: use_facet >(const locale&); 9642: 9642: extern template 9642: const numpunct& 9642: use_facet >(const locale&); 9642: 9642: extern template 9642: const num_put& 9642: use_facet >(const locale&); 9642: 9642: extern template 9642: const num_get& 9642: use_facet >(const locale&); 9642: 9642: extern template 9642: bool 9642: has_facet >(const locale&); 9642: 9642: extern template 9642: bool 9642: has_facet >(const locale&); 9642: 9642: extern template 9642: bool 9642: has_facet >(const locale&); 9642: 9642: extern template 9642: bool 9642: has_facet >(const locale&); 9642: 9642: 9642: extern template class __cxx11:: numpunct; 9642: extern template class __cxx11:: numpunct_byname; 9642: extern template class num_get; 9642: extern template class num_put; 9642: extern template class ctype_byname; 9642: 9642: extern template 9642: const ctype* 9642: __try_use_facet >(const locale&) noexcept; 9642: 9642: extern template 9642: const numpunct* 9642: __try_use_facet >(const locale&) noexcept; 9642: 9642: extern template 9642: const num_put* 9642: __try_use_facet >(const locale&) noexcept; 9642: 9642: extern template 9642: const num_get* 9642: __try_use_facet >(const locale&) noexcept; 9642: 9642: extern template 9642: const ctype& 9642: use_facet >(const locale&); 9642: 9642: extern template 9642: const numpunct& 9642: use_facet >(const locale&); 9642: 9642: extern template 9642: const num_put& 9642: use_facet >(const locale&); 9642: 9642: extern template 9642: const num_get& 9642: use_facet >(const locale&); 9642: 9642: extern template 9642: bool 9642: has_facet >(const locale&); 9642: 9642: extern template 9642: bool 9642: has_facet >(const locale&); 9642: 9642: extern template 9642: bool 9642: has_facet >(const locale&); 9642: 9642: extern template 9642: bool 9642: has_facet >(const locale&); 9642: 9642: 9642: 9642: 9642: } 9642: # 2688 "/usr/include/c++/13/bits/locale_facets.h" 2 3 9642: # 38 "/usr/include/c++/13/bits/basic_ios.h" 2 3 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: template 9642: inline const _Facet& 9642: __check_facet(const _Facet* __f) 9642: { 9642: if (!__f) 9642: __throw_bad_cast(); 9642: return *__f; 9642: } 9642: # 66 "/usr/include/c++/13/bits/basic_ios.h" 3 9642: template 9642: class basic_ios : public ios_base 9642: { 9642: public: 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef _CharT char_type; 9642: typedef typename _Traits::int_type int_type; 9642: typedef typename _Traits::pos_type pos_type; 9642: typedef typename _Traits::off_type off_type; 9642: typedef _Traits traits_type; 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef ctype<_CharT> __ctype_type; 9642: typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> > 9642: __num_put_type; 9642: typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> > 9642: __num_get_type; 9642: 9642: 9642: 9642: protected: 9642: basic_ostream<_CharT, _Traits>* _M_tie; 9642: mutable char_type _M_fill; 9642: mutable bool _M_fill_init; 9642: basic_streambuf<_CharT, _Traits>* _M_streambuf; 9642: 9642: 9642: const __ctype_type* _M_ctype; 9642: 9642: const __num_put_type* _M_num_put; 9642: 9642: const __num_get_type* _M_num_get; 9642: 9642: public: 9642: # 117 "/usr/include/c++/13/bits/basic_ios.h" 3 9642: explicit operator bool() const 9642: { return !this->fail(); } 9642: 9642: 9642: 9642: 9642: 9642: bool 9642: operator!() const 9642: { return this->fail(); } 9642: # 136 "/usr/include/c++/13/bits/basic_ios.h" 3 9642: iostate 9642: rdstate() const 9642: { return _M_streambuf_state; } 9642: # 147 "/usr/include/c++/13/bits/basic_ios.h" 3 9642: void 9642: clear(iostate __state = goodbit); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: setstate(iostate __state) 9642: { this->clear(this->rdstate() | __state); } 9642: 9642: 9642: 9642: 9642: void 9642: _M_setstate(iostate __state) 9642: { 9642: 9642: 9642: _M_streambuf_state |= __state; 9642: if (this->exceptions() & __state) 9642: throw; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool 9642: good() const 9642: { return this->rdstate() == 0; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool 9642: eof() const 9642: { return (this->rdstate() & eofbit) != 0; } 9642: # 200 "/usr/include/c++/13/bits/basic_ios.h" 3 9642: bool 9642: fail() const 9642: { return (this->rdstate() & (badbit | failbit)) != 0; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool 9642: bad() const 9642: { return (this->rdstate() & badbit) != 0; } 9642: # 221 "/usr/include/c++/13/bits/basic_ios.h" 3 9642: iostate 9642: exceptions() const 9642: { return _M_exception; } 9642: # 256 "/usr/include/c++/13/bits/basic_ios.h" 3 9642: void 9642: exceptions(iostate __except) 9642: { 9642: _M_exception = __except; 9642: this->clear(_M_streambuf_state); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: basic_ios(basic_streambuf<_CharT, _Traits>* __sb) 9642: : ios_base(), _M_tie(0), _M_fill(), _M_fill_init(false), _M_streambuf(0), 9642: _M_ctype(0), _M_num_put(0), _M_num_get(0) 9642: { this->init(__sb); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual 9642: ~basic_ios() { } 9642: # 294 "/usr/include/c++/13/bits/basic_ios.h" 3 9642: basic_ostream<_CharT, _Traits>* 9642: tie() const 9642: { return _M_tie; } 9642: # 306 "/usr/include/c++/13/bits/basic_ios.h" 3 9642: basic_ostream<_CharT, _Traits>* 9642: tie(basic_ostream<_CharT, _Traits>* __tiestr) 9642: { 9642: basic_ostream<_CharT, _Traits>* __old = _M_tie; 9642: _M_tie = __tiestr; 9642: return __old; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: basic_streambuf<_CharT, _Traits>* 9642: rdbuf() const 9642: { return _M_streambuf; } 9642: # 346 "/usr/include/c++/13/bits/basic_ios.h" 3 9642: basic_streambuf<_CharT, _Traits>* 9642: rdbuf(basic_streambuf<_CharT, _Traits>* __sb); 9642: # 360 "/usr/include/c++/13/bits/basic_ios.h" 3 9642: basic_ios& 9642: copyfmt(const basic_ios& __rhs); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: char_type 9642: fill() const 9642: { 9642: if (!_M_fill_init) 9642: { 9642: _M_fill = this->widen(' '); 9642: _M_fill_init = true; 9642: } 9642: return _M_fill; 9642: } 9642: # 389 "/usr/include/c++/13/bits/basic_ios.h" 3 9642: char_type 9642: fill(char_type __ch) 9642: { 9642: char_type __old = this->fill(); 9642: _M_fill = __ch; 9642: return __old; 9642: } 9642: # 409 "/usr/include/c++/13/bits/basic_ios.h" 3 9642: locale 9642: imbue(const locale& __loc); 9642: # 429 "/usr/include/c++/13/bits/basic_ios.h" 3 9642: char 9642: narrow(char_type __c, char __dfault) const 9642: { return __check_facet(_M_ctype).narrow(__c, __dfault); } 9642: # 448 "/usr/include/c++/13/bits/basic_ios.h" 3 9642: char_type 9642: widen(char __c) const 9642: { return __check_facet(_M_ctype).widen(__c); } 9642: 9642: protected: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: basic_ios() 9642: : ios_base(), _M_tie(0), _M_fill(char_type()), _M_fill_init(false), 9642: _M_streambuf(0), _M_ctype(0), _M_num_put(0), _M_num_get(0) 9642: { } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: init(basic_streambuf<_CharT, _Traits>* __sb); 9642: 9642: 9642: basic_ios(const basic_ios&) = delete; 9642: basic_ios& operator=(const basic_ios&) = delete; 9642: 9642: void 9642: move(basic_ios& __rhs) 9642: { 9642: ios_base::_M_move(__rhs); 9642: _M_cache_locale(_M_ios_locale); 9642: this->tie(__rhs.tie(nullptr)); 9642: _M_fill = __rhs._M_fill; 9642: _M_fill_init = __rhs._M_fill_init; 9642: _M_streambuf = nullptr; 9642: } 9642: 9642: void 9642: move(basic_ios&& __rhs) 9642: { this->move(__rhs); } 9642: 9642: void 9642: swap(basic_ios& __rhs) noexcept 9642: { 9642: ios_base::_M_swap(__rhs); 9642: _M_cache_locale(_M_ios_locale); 9642: __rhs._M_cache_locale(__rhs._M_ios_locale); 9642: std::swap(_M_tie, __rhs._M_tie); 9642: std::swap(_M_fill, __rhs._M_fill); 9642: std::swap(_M_fill_init, __rhs._M_fill_init); 9642: } 9642: 9642: void 9642: set_rdbuf(basic_streambuf<_CharT, _Traits>* __sb) 9642: { _M_streambuf = __sb; } 9642: 9642: 9642: void 9642: _M_cache_locale(const locale& __loc); 9642: }; 9642: 9642: 9642: } 9642: 9642: # 1 "/usr/include/c++/13/bits/basic_ios.tcc" 1 3 9642: # 33 "/usr/include/c++/13/bits/basic_ios.tcc" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/basic_ios.tcc" 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: template 9642: void 9642: basic_ios<_CharT, _Traits>::clear(iostate __state) 9642: { 9642: if (this->rdbuf()) 9642: _M_streambuf_state = __state; 9642: else 9642: _M_streambuf_state = __state | badbit; 9642: if (this->exceptions() & this->rdstate()) 9642: __throw_ios_failure(("basic_ios::clear")); 9642: } 9642: 9642: template 9642: basic_streambuf<_CharT, _Traits>* 9642: basic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<_CharT, _Traits>* __sb) 9642: { 9642: basic_streambuf<_CharT, _Traits>* __old = _M_streambuf; 9642: _M_streambuf = __sb; 9642: this->clear(); 9642: return __old; 9642: } 9642: 9642: template 9642: basic_ios<_CharT, _Traits>& 9642: basic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs) 9642: { 9642: 9642: 9642: if (this != std::__addressof(__rhs)) 9642: { 9642: 9642: 9642: 9642: 9642: _Words* __words = (__rhs._M_word_size <= _S_local_word_size) ? 9642: _M_local_word : new _Words[__rhs._M_word_size]; 9642: 9642: 9642: _Callback_list* __cb = __rhs._M_callbacks; 9642: if (__cb) 9642: __cb->_M_add_reference(); 9642: _M_call_callbacks(erase_event); 9642: if (_M_word != _M_local_word) 9642: { 9642: delete [] _M_word; 9642: _M_word = 0; 9642: } 9642: _M_dispose_callbacks(); 9642: 9642: 9642: _M_callbacks = __cb; 9642: for (int __i = 0; __i < __rhs._M_word_size; ++__i) 9642: __words[__i] = __rhs._M_word[__i]; 9642: _M_word = __words; 9642: _M_word_size = __rhs._M_word_size; 9642: 9642: this->flags(__rhs.flags()); 9642: this->width(__rhs.width()); 9642: this->precision(__rhs.precision()); 9642: this->tie(__rhs.tie()); 9642: this->fill(__rhs.fill()); 9642: _M_ios_locale = __rhs.getloc(); 9642: _M_cache_locale(_M_ios_locale); 9642: 9642: _M_call_callbacks(copyfmt_event); 9642: 9642: 9642: this->exceptions(__rhs.exceptions()); 9642: } 9642: return *this; 9642: } 9642: 9642: 9642: template 9642: locale 9642: basic_ios<_CharT, _Traits>::imbue(const locale& __loc) 9642: { 9642: locale __old(this->getloc()); 9642: ios_base::imbue(__loc); 9642: _M_cache_locale(__loc); 9642: if (this->rdbuf() != 0) 9642: this->rdbuf()->pubimbue(__loc); 9642: return __old; 9642: } 9642: 9642: template 9642: void 9642: basic_ios<_CharT, _Traits>::init(basic_streambuf<_CharT, _Traits>* __sb) 9642: { 9642: 9642: ios_base::_M_init(); 9642: 9642: 9642: _M_cache_locale(_M_ios_locale); 9642: # 146 "/usr/include/c++/13/bits/basic_ios.tcc" 3 9642: _M_fill = _CharT(); 9642: _M_fill_init = false; 9642: 9642: _M_tie = 0; 9642: _M_exception = goodbit; 9642: _M_streambuf = __sb; 9642: _M_streambuf_state = __sb ? goodbit : badbit; 9642: } 9642: 9642: template 9642: void 9642: basic_ios<_CharT, _Traits>::_M_cache_locale(const locale& __loc) 9642: { 9642: _M_ctype = std::__try_use_facet<__ctype_type>(__loc); 9642: _M_num_put = std::__try_use_facet<__num_put_type>(__loc); 9642: _M_num_get = std::__try_use_facet<__num_get_type>(__loc); 9642: } 9642: 9642: 9642: 9642: 9642: extern template class basic_ios; 9642: 9642: 9642: extern template class basic_ios; 9642: 9642: 9642: 9642: 9642: } 9642: # 517 "/usr/include/c++/13/bits/basic_ios.h" 2 3 9642: # 47 "/usr/include/c++/13/ios" 2 3 9642: # 41 "/usr/include/c++/13/ostream" 2 3 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 59 "/usr/include/c++/13/ostream" 3 9642: template 9642: class basic_ostream : virtual public basic_ios<_CharT, _Traits> 9642: { 9642: public: 9642: 9642: typedef _CharT char_type; 9642: typedef typename _Traits::int_type int_type; 9642: typedef typename _Traits::pos_type pos_type; 9642: typedef typename _Traits::off_type off_type; 9642: typedef _Traits traits_type; 9642: 9642: 9642: typedef basic_streambuf<_CharT, _Traits> __streambuf_type; 9642: typedef basic_ios<_CharT, _Traits> __ios_type; 9642: typedef basic_ostream<_CharT, _Traits> __ostream_type; 9642: typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> > 9642: __num_put_type; 9642: typedef ctype<_CharT> __ctype_type; 9642: # 85 "/usr/include/c++/13/ostream" 3 9642: explicit 9642: basic_ostream(__streambuf_type* __sb) 9642: { this->init(__sb); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual 9642: ~basic_ostream() { } 9642: 9642: 9642: class sentry; 9642: friend class sentry; 9642: # 109 "/usr/include/c++/13/ostream" 3 9642: __ostream_type& 9642: operator<<(__ostream_type& (*__pf)(__ostream_type&)) 9642: { 9642: 9642: 9642: 9642: return __pf(*this); 9642: } 9642: 9642: __ostream_type& 9642: operator<<(__ios_type& (*__pf)(__ios_type&)) 9642: { 9642: 9642: 9642: 9642: __pf(*this); 9642: return *this; 9642: } 9642: 9642: __ostream_type& 9642: operator<<(ios_base& (*__pf) (ios_base&)) 9642: { 9642: 9642: 9642: 9642: __pf(*this); 9642: return *this; 9642: } 9642: # 167 "/usr/include/c++/13/ostream" 3 9642: __ostream_type& 9642: operator<<(long __n) 9642: { return _M_insert(__n); } 9642: 9642: __ostream_type& 9642: operator<<(unsigned long __n) 9642: { return _M_insert(__n); } 9642: 9642: __ostream_type& 9642: operator<<(bool __n) 9642: { return _M_insert(__n); } 9642: 9642: __ostream_type& 9642: operator<<(short __n); 9642: 9642: __ostream_type& 9642: operator<<(unsigned short __n) 9642: { 9642: 9642: 9642: return _M_insert(static_cast(__n)); 9642: } 9642: 9642: __ostream_type& 9642: operator<<(int __n); 9642: 9642: __ostream_type& 9642: operator<<(unsigned int __n) 9642: { 9642: 9642: 9642: return _M_insert(static_cast(__n)); 9642: } 9642: 9642: 9642: __ostream_type& 9642: operator<<(long long __n) 9642: { return _M_insert(__n); } 9642: 9642: __ostream_type& 9642: operator<<(unsigned long long __n) 9642: { return _M_insert(__n); } 9642: # 221 "/usr/include/c++/13/ostream" 3 9642: __ostream_type& 9642: operator<<(double __f) 9642: { return _M_insert(__f); } 9642: 9642: __ostream_type& 9642: operator<<(float __f) 9642: { 9642: 9642: 9642: return _M_insert(static_cast(__f)); 9642: } 9642: 9642: __ostream_type& 9642: operator<<(long double __f) 9642: { return _M_insert(__f); } 9642: # 291 "/usr/include/c++/13/ostream" 3 9642: __ostream_type& 9642: operator<<(const void* __p) 9642: { return _M_insert(__p); } 9642: 9642: 9642: __ostream_type& 9642: operator<<(nullptr_t) 9642: { return *this << "nullptr"; } 9642: # 329 "/usr/include/c++/13/ostream" 3 9642: __ostream_type& 9642: operator<<(__streambuf_type* __sb); 9642: # 362 "/usr/include/c++/13/ostream" 3 9642: __ostream_type& 9642: put(char_type __c); 9642: # 381 "/usr/include/c++/13/ostream" 3 9642: __ostream_type& 9642: write(const char_type* __s, streamsize __n); 9642: # 394 "/usr/include/c++/13/ostream" 3 9642: __ostream_type& 9642: flush(); 9642: # 404 "/usr/include/c++/13/ostream" 3 9642: pos_type 9642: tellp(); 9642: # 415 "/usr/include/c++/13/ostream" 3 9642: __ostream_type& 9642: seekp(pos_type); 9642: # 427 "/usr/include/c++/13/ostream" 3 9642: __ostream_type& 9642: seekp(off_type, ios_base::seekdir); 9642: 9642: protected: 9642: basic_ostream() 9642: { this->init(0); } 9642: 9642: 9642: 9642: basic_ostream(basic_iostream<_CharT, _Traits>&) { } 9642: 9642: basic_ostream(const basic_ostream&) = delete; 9642: 9642: basic_ostream(basic_ostream&& __rhs) 9642: : __ios_type() 9642: { __ios_type::move(__rhs); } 9642: 9642: 9642: 9642: basic_ostream& operator=(const basic_ostream&) = delete; 9642: 9642: basic_ostream& 9642: operator=(basic_ostream&& __rhs) 9642: { 9642: swap(__rhs); 9642: return *this; 9642: } 9642: 9642: void 9642: swap(basic_ostream& __rhs) 9642: { __ios_type::swap(__rhs); } 9642: 9642: 9642: template 9642: __ostream_type& 9642: _M_insert(_ValueT __v); 9642: 9642: private: 9642: 9642: void 9642: _M_write(const char_type* __s, streamsize __n) 9642: { std::__ostream_insert(*this, __s, __n); } 9642: 9642: }; 9642: # 479 "/usr/include/c++/13/ostream" 3 9642: template 9642: class basic_ostream<_CharT, _Traits>::sentry 9642: { 9642: 9642: bool _M_ok; 9642: basic_ostream<_CharT, _Traits>& _M_os; 9642: 9642: public: 9642: # 498 "/usr/include/c++/13/ostream" 3 9642: explicit 9642: sentry(basic_ostream<_CharT, _Traits>& __os); 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ~sentry() 9642: { 9642: 9642: if (bool(_M_os.flags() & ios_base::unitbuf) && !uncaught_exception()) 9642: { 9642: 9642: if (_M_os.rdbuf() && _M_os.rdbuf()->pubsync() == -1) 9642: _M_os.setstate(ios_base::badbit); 9642: } 9642: } 9642: #pragma GCC diagnostic pop 9642: # 530 "/usr/include/c++/13/ostream" 3 9642: explicit 9642: 9642: operator bool() const 9642: { return _M_ok; } 9642: }; 9642: # 552 "/usr/include/c++/13/ostream" 3 9642: template 9642: inline basic_ostream<_CharT, _Traits>& 9642: operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c) 9642: { 9642: if (__out.width() != 0) 9642: return __ostream_insert(__out, &__c, 1); 9642: __out.put(__c); 9642: return __out; 9642: } 9642: 9642: template 9642: inline basic_ostream<_CharT, _Traits>& 9642: operator<<(basic_ostream<_CharT, _Traits>& __out, char __c) 9642: { return (__out << __out.widen(__c)); } 9642: 9642: 9642: template 9642: inline basic_ostream& 9642: operator<<(basic_ostream& __out, char __c) 9642: { 9642: if (__out.width() != 0) 9642: return __ostream_insert(__out, &__c, 1); 9642: __out.put(__c); 9642: return __out; 9642: } 9642: 9642: 9642: template 9642: inline basic_ostream& 9642: operator<<(basic_ostream& __out, signed char __c) 9642: { return (__out << static_cast(__c)); } 9642: 9642: template 9642: inline basic_ostream& 9642: operator<<(basic_ostream& __out, unsigned char __c) 9642: { return (__out << static_cast(__c)); } 9642: # 643 "/usr/include/c++/13/ostream" 3 9642: template 9642: inline basic_ostream<_CharT, _Traits>& 9642: operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s) 9642: { 9642: if (!__s) 9642: __out.setstate(ios_base::badbit); 9642: else 9642: __ostream_insert(__out, __s, 9642: static_cast(_Traits::length(__s))); 9642: return __out; 9642: } 9642: 9642: template 9642: basic_ostream<_CharT, _Traits> & 9642: operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s); 9642: 9642: 9642: template 9642: inline basic_ostream& 9642: operator<<(basic_ostream& __out, const char* __s) 9642: { 9642: if (!__s) 9642: __out.setstate(ios_base::badbit); 9642: else 9642: __ostream_insert(__out, __s, 9642: static_cast(_Traits::length(__s))); 9642: return __out; 9642: } 9642: 9642: 9642: template 9642: inline basic_ostream& 9642: operator<<(basic_ostream& __out, const signed char* __s) 9642: { return (__out << reinterpret_cast(__s)); } 9642: 9642: template 9642: inline basic_ostream & 9642: operator<<(basic_ostream& __out, const unsigned char* __s) 9642: { return (__out << reinterpret_cast(__s)); } 9642: # 733 "/usr/include/c++/13/ostream" 3 9642: template 9642: inline basic_ostream<_CharT, _Traits>& 9642: endl(basic_ostream<_CharT, _Traits>& __os) 9642: { return flush(__os.put(__os.widen('\n'))); } 9642: # 745 "/usr/include/c++/13/ostream" 3 9642: template 9642: inline basic_ostream<_CharT, _Traits>& 9642: ends(basic_ostream<_CharT, _Traits>& __os) 9642: { return __os.put(_CharT()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline basic_ostream<_CharT, _Traits>& 9642: flush(basic_ostream<_CharT, _Traits>& __os) 9642: { return __os.flush(); } 9642: # 777 "/usr/include/c++/13/ostream" 3 9642: template 9642: using _Require_derived_from_ios_base 9642: = _Require, __not_>, 9642: is_convertible::type, ios_base*>>; 9642: 9642: template, 9642: typename 9642: = decltype(std::declval<_Os&>() << std::declval())> 9642: using __rvalue_stream_insertion_t = _Os&&; 9642: # 799 "/usr/include/c++/13/ostream" 3 9642: template 9642: inline __rvalue_stream_insertion_t<_Ostream, _Tp> 9642: operator<<(_Ostream&& __os, const _Tp& __x) 9642: { 9642: __os << __x; 9642: return std::move(__os); 9642: } 9642: # 877 "/usr/include/c++/13/ostream" 3 9642: 9642: } 9642: 9642: # 1 "/usr/include/c++/13/bits/ostream.tcc" 1 3 9642: # 37 "/usr/include/c++/13/bits/ostream.tcc" 3 9642: 9642: # 38 "/usr/include/c++/13/bits/ostream.tcc" 3 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: template 9642: basic_ostream<_CharT, _Traits>::sentry:: 9642: sentry(basic_ostream<_CharT, _Traits>& __os) 9642: : _M_ok(false), _M_os(__os) 9642: { 9642: 9642: if (__os.tie() && __os.good()) 9642: __os.tie()->flush(); 9642: 9642: if (__os.good()) 9642: _M_ok = true; 9642: else if (__os.bad()) 9642: __os.setstate(ios_base::failbit); 9642: } 9642: 9642: template 9642: template 9642: basic_ostream<_CharT, _Traits>& 9642: basic_ostream<_CharT, _Traits>:: 9642: _M_insert(_ValueT __v) 9642: { 9642: sentry __cerb(*this); 9642: if (__cerb) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: 9642: const __num_put_type& __np = __check_facet(this->_M_num_put); 9642: 9642: 9642: 9642: 9642: if (__np.put(*this, *this, this->fill(), __v).failed()) 9642: __err |= ios_base::badbit; 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: if (__err) 9642: this->setstate(__err); 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: basic_ostream<_CharT, _Traits>& 9642: basic_ostream<_CharT, _Traits>:: 9642: operator<<(short __n) 9642: { 9642: 9642: 9642: const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield; 9642: if (__fmt == ios_base::oct || __fmt == ios_base::hex) 9642: return _M_insert(static_cast(static_cast(__n))); 9642: else 9642: return _M_insert(static_cast(__n)); 9642: } 9642: 9642: template 9642: basic_ostream<_CharT, _Traits>& 9642: basic_ostream<_CharT, _Traits>:: 9642: operator<<(int __n) 9642: { 9642: 9642: 9642: const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield; 9642: if (__fmt == ios_base::oct || __fmt == ios_base::hex) 9642: return _M_insert(static_cast(static_cast(__n))); 9642: else 9642: return _M_insert(static_cast(__n)); 9642: } 9642: 9642: template 9642: basic_ostream<_CharT, _Traits>& 9642: basic_ostream<_CharT, _Traits>:: 9642: operator<<(__streambuf_type* __sbin) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: sentry __cerb(*this); 9642: if (__cerb && __sbin) 9642: { 9642: try 9642: { 9642: if (!__copy_streambufs(__sbin, this->rdbuf())) 9642: __err |= ios_base::failbit; 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::failbit); } 9642: } 9642: else if (!__sbin) 9642: __err |= ios_base::badbit; 9642: if (__err) 9642: this->setstate(__err); 9642: return *this; 9642: } 9642: 9642: template 9642: basic_ostream<_CharT, _Traits>& 9642: basic_ostream<_CharT, _Traits>:: 9642: put(char_type __c) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: sentry __cerb(*this); 9642: if (__cerb) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: const int_type __put = this->rdbuf()->sputc(__c); 9642: if (traits_type::eq_int_type(__put, traits_type::eof())) 9642: __err |= ios_base::badbit; 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: if (__err) 9642: this->setstate(__err); 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: basic_ostream<_CharT, _Traits>& 9642: basic_ostream<_CharT, _Traits>:: 9642: write(const _CharT* __s, streamsize __n) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: sentry __cerb(*this); 9642: if (__cerb) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: if (this->rdbuf()->sputn(__s, __n) != __n) 9642: __err = ios_base::badbit; 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: if (__err) 9642: this->setstate(ios_base::badbit); 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: basic_ostream<_CharT, _Traits>& 9642: basic_ostream<_CharT, _Traits>:: 9642: flush() 9642: { 9642: 9642: 9642: 9642: 9642: 9642: if (__streambuf_type* __buf = this->rdbuf()) 9642: { 9642: sentry __cerb(*this); 9642: if (__cerb) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: if (this->rdbuf()->pubsync() == -1) 9642: __err |= ios_base::badbit; 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: if (__err) 9642: this->setstate(__err); 9642: } 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: typename basic_ostream<_CharT, _Traits>::pos_type 9642: basic_ostream<_CharT, _Traits>:: 9642: tellp() 9642: { 9642: sentry __cerb(*this); 9642: pos_type __ret = pos_type(-1); 9642: if (!this->fail()) 9642: __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out); 9642: return __ret; 9642: } 9642: 9642: template 9642: basic_ostream<_CharT, _Traits>& 9642: basic_ostream<_CharT, _Traits>:: 9642: seekp(pos_type __pos) 9642: { 9642: sentry __cerb(*this); 9642: if (!this->fail()) 9642: { 9642: 9642: 9642: const pos_type __p = this->rdbuf()->pubseekpos(__pos, ios_base::out); 9642: 9642: 9642: if (__p == pos_type(off_type(-1))) 9642: this->setstate(ios_base::failbit); 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: basic_ostream<_CharT, _Traits>& 9642: basic_ostream<_CharT, _Traits>:: 9642: seekp(off_type __off, ios_base::seekdir __dir) 9642: { 9642: sentry __cerb(*this); 9642: if (!this->fail()) 9642: { 9642: 9642: 9642: const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir, 9642: ios_base::out); 9642: 9642: 9642: if (__p == pos_type(off_type(-1))) 9642: this->setstate(ios_base::failbit); 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: basic_ostream<_CharT, _Traits>& 9642: operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s) 9642: { 9642: if (!__s) 9642: __out.setstate(ios_base::badbit); 9642: else 9642: { 9642: 9642: 9642: const size_t __clen = char_traits::length(__s); 9642: try 9642: { 9642: struct __ptr_guard 9642: { 9642: _CharT *__p; 9642: __ptr_guard (_CharT *__ip): __p(__ip) { } 9642: ~__ptr_guard() { delete[] __p; } 9642: _CharT* __get() { return __p; } 9642: } __pg (new _CharT[__clen]); 9642: 9642: _CharT *__ws = __pg.__get(); 9642: for (size_t __i = 0; __i < __clen; ++__i) 9642: __ws[__i] = __out.widen(__s[__i]); 9642: __ostream_insert(__out, __ws, __clen); 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: __out._M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { __out._M_setstate(ios_base::badbit); } 9642: } 9642: return __out; 9642: } 9642: 9642: 9642: 9642: 9642: extern template class basic_ostream; 9642: extern template ostream& endl(ostream&); 9642: extern template ostream& ends(ostream&); 9642: extern template ostream& flush(ostream&); 9642: extern template ostream& operator<<(ostream&, char); 9642: extern template ostream& operator<<(ostream&, unsigned char); 9642: extern template ostream& operator<<(ostream&, signed char); 9642: extern template ostream& operator<<(ostream&, const char*); 9642: extern template ostream& operator<<(ostream&, const unsigned char*); 9642: extern template ostream& operator<<(ostream&, const signed char*); 9642: 9642: extern template ostream& ostream::_M_insert(long); 9642: extern template ostream& ostream::_M_insert(unsigned long); 9642: extern template ostream& ostream::_M_insert(bool); 9642: 9642: extern template ostream& ostream::_M_insert(long long); 9642: extern template ostream& ostream::_M_insert(unsigned long long); 9642: 9642: extern template ostream& ostream::_M_insert(double); 9642: extern template ostream& ostream::_M_insert(long double); 9642: extern template ostream& ostream::_M_insert(const void*); 9642: 9642: 9642: extern template class basic_ostream; 9642: extern template wostream& endl(wostream&); 9642: extern template wostream& ends(wostream&); 9642: extern template wostream& flush(wostream&); 9642: extern template wostream& operator<<(wostream&, wchar_t); 9642: extern template wostream& operator<<(wostream&, char); 9642: extern template wostream& operator<<(wostream&, const wchar_t*); 9642: extern template wostream& operator<<(wostream&, const char*); 9642: 9642: extern template wostream& wostream::_M_insert(long); 9642: extern template wostream& wostream::_M_insert(unsigned long); 9642: extern template wostream& wostream::_M_insert(bool); 9642: 9642: extern template wostream& wostream::_M_insert(long long); 9642: extern template wostream& wostream::_M_insert(unsigned long long); 9642: 9642: extern template wostream& wostream::_M_insert(double); 9642: extern template wostream& wostream::_M_insert(long double); 9642: extern template wostream& wostream::_M_insert(const void*); 9642: 9642: 9642: 9642: 9642: } 9642: # 881 "/usr/include/c++/13/ostream" 2 3 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 2 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 9642: 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 9642: namespace rocksdb { 9642: 9642: class ColumnFamilyHandle; 9642: 9642: 9642: 9642: class WideColumn { 9642: public: 9642: WideColumn() = default; 9642: # 35 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 9642: template 9642: WideColumn(N&& name, V&& value) 9642: : name_(std::forward(name)), value_(std::forward(value)) {} 9642: # 49 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 9642: template 9642: WideColumn(std::piecewise_construct_t, NTuple&& name_tuple, 9642: VTuple&& value_tuple) 9642: : name_(std::make_from_tuple(std::forward(name_tuple))), 9642: value_(std::make_from_tuple(std::forward(value_tuple))) { 9642: } 9642: 9642: const Slice& name() const { return name_; } 9642: const Slice& value() const { return value_; } 9642: 9642: Slice& name() { return name_; } 9642: Slice& value() { return value_; } 9642: 9642: private: 9642: Slice name_; 9642: Slice value_; 9642: }; 9642: 9642: 9642: inline bool operator==(const WideColumn& lhs, const WideColumn& rhs) { 9642: return lhs.name() == rhs.name() && lhs.value() == rhs.value(); 9642: } 9642: 9642: inline bool operator!=(const WideColumn& lhs, const WideColumn& rhs) { 9642: return !(lhs == rhs); 9642: } 9642: 9642: inline std::ostream& operator<<(std::ostream& os, const WideColumn& column) { 9642: const bool hex = 9642: (os.flags() & std::ios_base::basefield) == std::ios_base::hex; 9642: if (!column.name().empty()) { 9642: if (hex) { 9642: os << "0x"; 9642: } 9642: os << column.name().ToString(hex); 9642: } 9642: os << ':'; 9642: if (!column.value().empty()) { 9642: if (hex) { 9642: os << "0x"; 9642: } 9642: os << column.value().ToString(hex); 9642: } 9642: return os; 9642: } 9642: 9642: 9642: using WideColumns = std::vector; 9642: 9642: 9642: extern const Slice kDefaultWideColumnName; 9642: 9642: 9642: extern const WideColumns kNoWideColumns; 9642: 9642: 9642: 9642: class PinnableWideColumns { 9642: public: 9642: PinnableWideColumns() = default; 9642: 9642: PinnableWideColumns(const PinnableWideColumns&) = delete; 9642: PinnableWideColumns& operator=(const PinnableWideColumns&) = delete; 9642: 9642: PinnableWideColumns(PinnableWideColumns&&); 9642: PinnableWideColumns& operator=(PinnableWideColumns&&); 9642: 9642: ~PinnableWideColumns() = default; 9642: 9642: const WideColumns& columns() const { return columns_; } 9642: size_t serialized_size() const { return value_.size(); } 9642: 9642: void SetPlainValue(const Slice& value); 9642: void SetPlainValue(const Slice& value, Cleanable* cleanable); 9642: void SetPlainValue(PinnableSlice&& value); 9642: void SetPlainValue(std::string&& value); 9642: 9642: Status SetWideColumnValue(const Slice& value); 9642: Status SetWideColumnValue(const Slice& value, Cleanable* cleanable); 9642: Status SetWideColumnValue(PinnableSlice&& value); 9642: Status SetWideColumnValue(std::string&& value); 9642: 9642: void Reset(); 9642: 9642: private: 9642: void Move(PinnableWideColumns&& other); 9642: void CopyValue(const Slice& value); 9642: void PinOrCopyValue(const Slice& value, Cleanable* cleanable); 9642: void MoveValue(PinnableSlice&& value); 9642: void MoveValue(std::string&& value); 9642: 9642: void CreateIndexForPlainValue(); 9642: Status CreateIndexForWideColumns(); 9642: 9642: PinnableSlice value_; 9642: WideColumns columns_; 9642: }; 9642: 9642: inline void PinnableWideColumns::Reset() { 9642: value_.Reset(); 9642: columns_.clear(); 9642: } 9642: 9642: inline void PinnableWideColumns::Move(PinnableWideColumns&& other) { 9642: 9642: # 153 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 3 4 9642: (static_cast ( 9642: # 153 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 9642: columns_.empty() 9642: # 153 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 153 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 9642: "columns_.empty()" 9642: # 153 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 153 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 9642: ; 9642: 9642: if (other.columns_.empty()) { 9642: return; 9642: } 9642: 9642: const char* const data = other.value_.data(); 9642: const bool is_plain_value = 9642: other.columns_.size() == 1 && 9642: other.columns_.front().name() == kDefaultWideColumnName && 9642: other.columns_.front().value() == other.value_; 9642: 9642: MoveValue(std::move(other.value_)); 9642: 9642: if (value_.data() == data) { 9642: columns_ = std::move(other.columns_); 9642: } else { 9642: if (is_plain_value) { 9642: CreateIndexForPlainValue(); 9642: } else { 9642: const Status s = CreateIndexForWideColumns(); 9642: 9642: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 3 4 9642: (static_cast ( 9642: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 9642: s.ok() 9642: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 9642: "s.ok()" 9642: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 9642: ; 9642: 9642: s.PermitUncheckedError(); 9642: } 9642: } 9642: 9642: other.Reset(); 9642: } 9642: 9642: inline void PinnableWideColumns::CopyValue(const Slice& value) { 9642: value_.PinSelf(value); 9642: } 9642: 9642: inline void PinnableWideColumns::PinOrCopyValue(const Slice& value, 9642: Cleanable* cleanable) { 9642: if (!cleanable) { 9642: CopyValue(value); 9642: return; 9642: } 9642: 9642: value_.PinSlice(value, cleanable); 9642: } 9642: 9642: inline void PinnableWideColumns::MoveValue(PinnableSlice&& value) { 9642: value_ = std::move(value); 9642: } 9642: 9642: inline void PinnableWideColumns::MoveValue(std::string&& value) { 9642: std::string* const buf = value_.GetSelf(); 9642: 9642: # 203 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 3 4 9642: (static_cast ( 9642: # 203 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 9642: buf 9642: # 203 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 203 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 9642: "buf" 9642: # 203 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 203 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 9642: ; 9642: 9642: *buf = std::move(value); 9642: value_.PinSelf(); 9642: } 9642: 9642: inline void PinnableWideColumns::CreateIndexForPlainValue() { 9642: columns_ = WideColumns{{kDefaultWideColumnName, value_}}; 9642: } 9642: 9642: inline void PinnableWideColumns::SetPlainValue(const Slice& value) { 9642: CopyValue(value); 9642: CreateIndexForPlainValue(); 9642: } 9642: 9642: inline void PinnableWideColumns::SetPlainValue(const Slice& value, 9642: Cleanable* cleanable) { 9642: PinOrCopyValue(value, cleanable); 9642: CreateIndexForPlainValue(); 9642: } 9642: 9642: inline void PinnableWideColumns::SetPlainValue(PinnableSlice&& value) { 9642: MoveValue(std::move(value)); 9642: CreateIndexForPlainValue(); 9642: } 9642: 9642: inline void PinnableWideColumns::SetPlainValue(std::string&& value) { 9642: MoveValue(std::move(value)); 9642: CreateIndexForPlainValue(); 9642: } 9642: 9642: inline Status PinnableWideColumns::SetWideColumnValue(const Slice& value) { 9642: CopyValue(value); 9642: 9642: const Status s = CreateIndexForWideColumns(); 9642: if (!s.ok()) { 9642: Reset(); 9642: } 9642: 9642: return s; 9642: } 9642: 9642: inline Status PinnableWideColumns::SetWideColumnValue(const Slice& value, 9642: Cleanable* cleanable) { 9642: PinOrCopyValue(value, cleanable); 9642: 9642: const Status s = CreateIndexForWideColumns(); 9642: if (!s.ok()) { 9642: Reset(); 9642: } 9642: 9642: return s; 9642: } 9642: 9642: inline Status PinnableWideColumns::SetWideColumnValue(PinnableSlice&& value) { 9642: MoveValue(std::move(value)); 9642: 9642: const Status s = CreateIndexForWideColumns(); 9642: if (!s.ok()) { 9642: Reset(); 9642: } 9642: 9642: return s; 9642: } 9642: 9642: inline Status PinnableWideColumns::SetWideColumnValue(std::string&& value) { 9642: MoveValue(std::move(value)); 9642: 9642: const Status s = CreateIndexForWideColumns(); 9642: if (!s.ok()) { 9642: Reset(); 9642: } 9642: 9642: return s; 9642: } 9642: 9642: inline PinnableWideColumns::PinnableWideColumns(PinnableWideColumns&& other) { 9642: Move(std::move(other)); 9642: } 9642: 9642: inline PinnableWideColumns& PinnableWideColumns::operator=( 9642: PinnableWideColumns&& other) { 9642: if (this != &other) { 9642: Reset(); 9642: Move(std::move(other)); 9642: } 9642: 9642: return *this; 9642: } 9642: 9642: inline bool operator==(const PinnableWideColumns& lhs, 9642: const PinnableWideColumns& rhs) { 9642: return lhs.columns() == rhs.columns(); 9642: } 9642: 9642: inline bool operator!=(const PinnableWideColumns& lhs, 9642: const PinnableWideColumns& rhs) { 9642: return !(lhs == rhs); 9642: } 9642: 9642: } 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: class Iterator : public IteratorBase { 9642: public: 9642: Iterator() {} 9642: 9642: Iterator(const Iterator&) = delete; 9642: void operator=(const Iterator&) = delete; 9642: 9642: virtual ~Iterator() override {} 9642: # 44 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 9642: virtual Slice value() const = 0; 9642: # 53 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 9642: virtual const WideColumns& columns() const { 9642: 9642: # 54 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 3 4 9642: (static_cast ( 9642: # 54 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 9642: false 9642: # 54 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 54 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 9642: "false" 9642: # 54 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 54 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 9642: ; 9642: return kNoWideColumns; 9642: } 9642: # 66 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 9642: virtual Status Refresh() { return Refresh(nullptr); } 9642: 9642: 9642: 9642: virtual Status Refresh(const class Snapshot*) { 9642: return Status::NotSupported("Refresh() is not supported"); 9642: } 9642: # 106 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 9642: virtual Status GetProperty(std::string prop_name, std::string* prop); 9642: 9642: virtual Slice timestamp() const { 9642: 9642: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 3 4 9642: (static_cast ( 9642: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 9642: false 9642: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 9642: "false" 9642: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 9642: ; 9642: return Slice(); 9642: } 9642: }; 9642: 9642: 9642: Iterator* NewEmptyIterator(); 9642: 9642: 9642: Iterator* NewErrorIterator(const Status& status); 9642: 9642: } 9642: # 15 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/sstream" 1 3 9642: # 36 "/usr/include/c++/13/sstream" 3 9642: 9642: # 37 "/usr/include/c++/13/sstream" 3 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/istream" 1 3 9642: # 36 "/usr/include/c++/13/istream" 3 9642: 9642: # 37 "/usr/include/c++/13/istream" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 43 "/usr/include/c++/13/istream" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 59 "/usr/include/c++/13/istream" 3 9642: template 9642: class basic_istream : virtual public basic_ios<_CharT, _Traits> 9642: { 9642: public: 9642: 9642: typedef _CharT char_type; 9642: typedef typename _Traits::int_type int_type; 9642: typedef typename _Traits::pos_type pos_type; 9642: typedef typename _Traits::off_type off_type; 9642: typedef _Traits traits_type; 9642: 9642: 9642: typedef basic_streambuf<_CharT, _Traits> __streambuf_type; 9642: typedef basic_ios<_CharT, _Traits> __ios_type; 9642: typedef basic_istream<_CharT, _Traits> __istream_type; 9642: typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> > 9642: __num_get_type; 9642: typedef ctype<_CharT> __ctype_type; 9642: 9642: protected: 9642: 9642: 9642: 9642: 9642: 9642: streamsize _M_gcount; 9642: 9642: public: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: basic_istream(__streambuf_type* __sb) 9642: : _M_gcount(streamsize(0)) 9642: { this->init(__sb); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual 9642: ~basic_istream() 9642: { _M_gcount = streamsize(0); } 9642: 9642: 9642: class sentry; 9642: friend class sentry; 9642: # 121 "/usr/include/c++/13/istream" 3 9642: __istream_type& 9642: operator>>(__istream_type& (*__pf)(__istream_type&)) 9642: { return __pf(*this); } 9642: 9642: __istream_type& 9642: operator>>(__ios_type& (*__pf)(__ios_type&)) 9642: { 9642: __pf(*this); 9642: return *this; 9642: } 9642: 9642: __istream_type& 9642: operator>>(ios_base& (*__pf)(ios_base&)) 9642: { 9642: __pf(*this); 9642: return *this; 9642: } 9642: # 169 "/usr/include/c++/13/istream" 3 9642: __istream_type& 9642: operator>>(bool& __n) 9642: { return _M_extract(__n); } 9642: 9642: __istream_type& 9642: operator>>(short& __n); 9642: 9642: __istream_type& 9642: operator>>(unsigned short& __n) 9642: { return _M_extract(__n); } 9642: 9642: __istream_type& 9642: operator>>(int& __n); 9642: 9642: __istream_type& 9642: operator>>(unsigned int& __n) 9642: { return _M_extract(__n); } 9642: 9642: __istream_type& 9642: operator>>(long& __n) 9642: { return _M_extract(__n); } 9642: 9642: __istream_type& 9642: operator>>(unsigned long& __n) 9642: { return _M_extract(__n); } 9642: 9642: 9642: __istream_type& 9642: operator>>(long long& __n) 9642: { return _M_extract(__n); } 9642: 9642: __istream_type& 9642: operator>>(unsigned long long& __n) 9642: { return _M_extract(__n); } 9642: # 215 "/usr/include/c++/13/istream" 3 9642: __istream_type& 9642: operator>>(float& __f) 9642: { return _M_extract(__f); } 9642: 9642: __istream_type& 9642: operator>>(double& __f) 9642: { return _M_extract(__f); } 9642: 9642: __istream_type& 9642: operator>>(long double& __f) 9642: { return _M_extract(__f); } 9642: # 324 "/usr/include/c++/13/istream" 3 9642: __istream_type& 9642: operator>>(void*& __p) 9642: { return _M_extract(__p); } 9642: # 348 "/usr/include/c++/13/istream" 3 9642: __istream_type& 9642: operator>>(__streambuf_type* __sb); 9642: # 358 "/usr/include/c++/13/istream" 3 9642: streamsize 9642: gcount() const 9642: { return _M_gcount; } 9642: # 391 "/usr/include/c++/13/istream" 3 9642: int_type 9642: get(); 9642: # 405 "/usr/include/c++/13/istream" 3 9642: __istream_type& 9642: get(char_type& __c); 9642: # 432 "/usr/include/c++/13/istream" 3 9642: __istream_type& 9642: get(char_type* __s, streamsize __n, char_type __delim); 9642: # 443 "/usr/include/c++/13/istream" 3 9642: __istream_type& 9642: get(char_type* __s, streamsize __n) 9642: { return this->get(__s, __n, this->widen('\n')); } 9642: # 466 "/usr/include/c++/13/istream" 3 9642: __istream_type& 9642: get(__streambuf_type& __sb, char_type __delim); 9642: # 476 "/usr/include/c++/13/istream" 3 9642: __istream_type& 9642: get(__streambuf_type& __sb) 9642: { return this->get(__sb, this->widen('\n')); } 9642: # 505 "/usr/include/c++/13/istream" 3 9642: __istream_type& 9642: getline(char_type* __s, streamsize __n, char_type __delim); 9642: # 516 "/usr/include/c++/13/istream" 3 9642: __istream_type& 9642: getline(char_type* __s, streamsize __n) 9642: { return this->getline(__s, __n, this->widen('\n')); } 9642: # 540 "/usr/include/c++/13/istream" 3 9642: __istream_type& 9642: ignore(streamsize __n, int_type __delim); 9642: 9642: __istream_type& 9642: ignore(streamsize __n); 9642: 9642: __istream_type& 9642: ignore(); 9642: # 557 "/usr/include/c++/13/istream" 3 9642: int_type 9642: peek(); 9642: # 575 "/usr/include/c++/13/istream" 3 9642: __istream_type& 9642: read(char_type* __s, streamsize __n); 9642: # 594 "/usr/include/c++/13/istream" 3 9642: streamsize 9642: readsome(char_type* __s, streamsize __n); 9642: # 611 "/usr/include/c++/13/istream" 3 9642: __istream_type& 9642: putback(char_type __c); 9642: # 627 "/usr/include/c++/13/istream" 3 9642: __istream_type& 9642: unget(); 9642: # 645 "/usr/include/c++/13/istream" 3 9642: int 9642: sync(); 9642: # 660 "/usr/include/c++/13/istream" 3 9642: pos_type 9642: tellg(); 9642: # 675 "/usr/include/c++/13/istream" 3 9642: __istream_type& 9642: seekg(pos_type); 9642: # 691 "/usr/include/c++/13/istream" 3 9642: __istream_type& 9642: seekg(off_type, ios_base::seekdir); 9642: 9642: 9642: protected: 9642: basic_istream() 9642: : _M_gcount(streamsize(0)) 9642: { this->init(0); } 9642: 9642: 9642: basic_istream(const basic_istream&) = delete; 9642: 9642: basic_istream(basic_istream&& __rhs) 9642: : __ios_type(), _M_gcount(__rhs._M_gcount) 9642: { 9642: __ios_type::move(__rhs); 9642: __rhs._M_gcount = 0; 9642: } 9642: 9642: 9642: 9642: basic_istream& operator=(const basic_istream&) = delete; 9642: 9642: basic_istream& 9642: operator=(basic_istream&& __rhs) 9642: { 9642: swap(__rhs); 9642: return *this; 9642: } 9642: 9642: void 9642: swap(basic_istream& __rhs) 9642: { 9642: __ios_type::swap(__rhs); 9642: std::swap(_M_gcount, __rhs._M_gcount); 9642: } 9642: 9642: 9642: template 9642: __istream_type& 9642: _M_extract(_ValueT& __v); 9642: }; 9642: 9642: 9642: template<> 9642: basic_istream& 9642: basic_istream:: 9642: getline(char_type* __s, streamsize __n, char_type __delim); 9642: 9642: template<> 9642: basic_istream& 9642: basic_istream:: 9642: ignore(streamsize __n); 9642: 9642: template<> 9642: basic_istream& 9642: basic_istream:: 9642: ignore(streamsize __n, int_type __delim); 9642: 9642: 9642: template<> 9642: basic_istream& 9642: basic_istream:: 9642: getline(char_type* __s, streamsize __n, char_type __delim); 9642: 9642: template<> 9642: basic_istream& 9642: basic_istream:: 9642: ignore(streamsize __n); 9642: 9642: template<> 9642: basic_istream& 9642: basic_istream:: 9642: ignore(streamsize __n, int_type __delim); 9642: # 775 "/usr/include/c++/13/istream" 3 9642: template 9642: class basic_istream<_CharT, _Traits>::sentry 9642: { 9642: 9642: bool _M_ok; 9642: 9642: public: 9642: 9642: typedef _Traits traits_type; 9642: typedef basic_streambuf<_CharT, _Traits> __streambuf_type; 9642: typedef basic_istream<_CharT, _Traits> __istream_type; 9642: typedef typename __istream_type::__ctype_type __ctype_type; 9642: typedef typename _Traits::int_type __int_type; 9642: # 811 "/usr/include/c++/13/istream" 3 9642: explicit 9642: sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false); 9642: # 822 "/usr/include/c++/13/istream" 3 9642: explicit 9642: 9642: operator bool() const 9642: { return _M_ok; } 9642: }; 9642: # 840 "/usr/include/c++/13/istream" 3 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c); 9642: 9642: template 9642: inline basic_istream& 9642: operator>>(basic_istream& __in, unsigned char& __c) 9642: { return (__in >> reinterpret_cast(__c)); } 9642: 9642: template 9642: inline basic_istream& 9642: operator>>(basic_istream& __in, signed char& __c) 9642: { return (__in >> reinterpret_cast(__c)); } 9642: 9642: 9642: 9642: template 9642: void 9642: __istream_extract(basic_istream<_CharT, _Traits>&, _CharT*, streamsize); 9642: 9642: void __istream_extract(istream&, char*, streamsize); 9642: # 890 "/usr/include/c++/13/istream" 3 9642: template 9642: __attribute__((__nonnull__(2), __access__(__write_only__, 2))) 9642: inline basic_istream<_CharT, _Traits>& 9642: operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s) 9642: { 9642: 9642: 9642: 9642: size_t __n = __builtin_object_size(__s, 0); 9642: if (__n < sizeof(_CharT)) 9642: { 9642: 9642: do { if (std::__is_constant_evaluated() && !bool(__n >= sizeof(_CharT))) __builtin_unreachable(); } while (false); 9642: 9642: __in.width(0); 9642: __in.setstate(ios_base::failbit); 9642: } 9642: else if (__n != (size_t)-1) 9642: { 9642: __n /= sizeof(_CharT); 9642: streamsize __w = __in.width(); 9642: std::__istream_extract(__in, __s, __n); 9642: if (__in.good() && (__w <= 0 || __n < __w)) 9642: { 9642: 9642: 9642: const typename _Traits::int_type __c = __in.rdbuf()->sgetc(); 9642: const bool __eof = _Traits::eq_int_type(__c, _Traits::eof()); 9642: if (__builtin_expect(__eof, true)) 9642: __in.setstate(ios_base::eofbit); 9642: } 9642: } 9642: else 9642: 9642: { 9642: 9642: streamsize __n = __gnu_cxx::__numeric_traits::__max; 9642: __n /= sizeof(_CharT); 9642: std::__istream_extract(__in, __s, __n); 9642: } 9642: return __in; 9642: } 9642: 9642: template 9642: __attribute__((__nonnull__(2), __access__(__write_only__, 2))) 9642: inline basic_istream& 9642: operator>>(basic_istream& __in, unsigned char* __s) 9642: { return __in >> reinterpret_cast(__s); } 9642: 9642: template 9642: __attribute__((__nonnull__(2), __access__(__write_only__, 2))) 9642: inline basic_istream& 9642: operator>>(basic_istream& __in, signed char* __s) 9642: { return __in >> reinterpret_cast(__s); } 9642: # 979 "/usr/include/c++/13/istream" 3 9642: template 9642: class basic_iostream 9642: : public basic_istream<_CharT, _Traits>, 9642: public basic_ostream<_CharT, _Traits> 9642: { 9642: public: 9642: 9642: 9642: 9642: typedef _CharT char_type; 9642: typedef typename _Traits::int_type int_type; 9642: typedef typename _Traits::pos_type pos_type; 9642: typedef typename _Traits::off_type off_type; 9642: typedef _Traits traits_type; 9642: 9642: 9642: typedef basic_istream<_CharT, _Traits> __istream_type; 9642: typedef basic_ostream<_CharT, _Traits> __ostream_type; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: basic_iostream(basic_streambuf<_CharT, _Traits>* __sb) 9642: : __istream_type(__sb), __ostream_type(__sb) { } 9642: 9642: 9642: 9642: 9642: virtual 9642: ~basic_iostream() { } 9642: 9642: protected: 9642: basic_iostream() 9642: : __istream_type(), __ostream_type() { } 9642: 9642: 9642: basic_iostream(const basic_iostream&) = delete; 9642: 9642: basic_iostream(basic_iostream&& __rhs) 9642: : __istream_type(std::move(__rhs)), __ostream_type(*this) 9642: { } 9642: 9642: 9642: 9642: basic_iostream& operator=(const basic_iostream&) = delete; 9642: 9642: basic_iostream& 9642: operator=(basic_iostream&& __rhs) 9642: { 9642: swap(__rhs); 9642: return *this; 9642: } 9642: 9642: void 9642: swap(basic_iostream& __rhs) 9642: { __istream_type::swap(__rhs); } 9642: 9642: }; 9642: # 1062 "/usr/include/c++/13/istream" 3 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: ws(basic_istream<_CharT, _Traits>& __is); 9642: # 1078 "/usr/include/c++/13/istream" 3 9642: template, 9642: typename = decltype(std::declval<_Is&>() >> std::declval<_Tp>())> 9642: using __rvalue_stream_extraction_t = _Is&&; 9642: # 1094 "/usr/include/c++/13/istream" 3 9642: template 9642: inline __rvalue_stream_extraction_t<_Istream, _Tp> 9642: operator>>(_Istream&& __is, _Tp&& __x) 9642: { 9642: __is >> std::forward<_Tp>(__x); 9642: return std::move(__is); 9642: } 9642: 9642: 9642: 9642: } 9642: 9642: # 1 "/usr/include/c++/13/bits/istream.tcc" 1 3 9642: # 37 "/usr/include/c++/13/bits/istream.tcc" 3 9642: 9642: # 38 "/usr/include/c++/13/bits/istream.tcc" 3 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: template 9642: basic_istream<_CharT, _Traits>::sentry:: 9642: sentry(basic_istream<_CharT, _Traits>& __in, bool __noskip) : _M_ok(false) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: if (__in.good()) 9642: { 9642: try 9642: { 9642: if (__in.tie()) 9642: __in.tie()->flush(); 9642: if (!__noskip && bool(__in.flags() & ios_base::skipws)) 9642: { 9642: const __int_type __eof = traits_type::eof(); 9642: __streambuf_type* __sb = __in.rdbuf(); 9642: __int_type __c = __sb->sgetc(); 9642: 9642: const __ctype_type& __ct = __check_facet(__in._M_ctype); 9642: while (!traits_type::eq_int_type(__c, __eof) 9642: && __ct.is(ctype_base::space, 9642: traits_type::to_char_type(__c))) 9642: __c = __sb->snextc(); 9642: 9642: 9642: 9642: 9642: if (traits_type::eq_int_type(__c, __eof)) 9642: __err |= ios_base::eofbit; 9642: } 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: __in._M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { __in._M_setstate(ios_base::badbit); } 9642: } 9642: 9642: if (__in.good() && __err == ios_base::goodbit) 9642: _M_ok = true; 9642: else 9642: { 9642: __err |= ios_base::failbit; 9642: __in.setstate(__err); 9642: } 9642: } 9642: 9642: template 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: basic_istream<_CharT, _Traits>:: 9642: _M_extract(_ValueT& __v) 9642: { 9642: sentry __cerb(*this, false); 9642: if (__cerb) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: 9642: const __num_get_type& __ng = __check_facet(this->_M_num_get); 9642: 9642: 9642: 9642: 9642: __ng.get(*this, 0, *this, __err, __v); 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: if (__err) 9642: this->setstate(__err); 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: basic_istream<_CharT, _Traits>:: 9642: operator>>(short& __n) 9642: { 9642: 9642: 9642: sentry __cerb(*this, false); 9642: if (__cerb) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: long __l; 9642: 9642: const __num_get_type& __ng = __check_facet(this->_M_num_get); 9642: 9642: 9642: 9642: 9642: __ng.get(*this, 0, *this, __err, __l); 9642: 9642: 9642: 9642: if (__l < __gnu_cxx::__numeric_traits::__min) 9642: { 9642: __err |= ios_base::failbit; 9642: __n = __gnu_cxx::__numeric_traits::__min; 9642: } 9642: else if (__l > __gnu_cxx::__numeric_traits::__max) 9642: { 9642: __err |= ios_base::failbit; 9642: __n = __gnu_cxx::__numeric_traits::__max; 9642: } 9642: else 9642: __n = short(__l); 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: if (__err) 9642: this->setstate(__err); 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: basic_istream<_CharT, _Traits>:: 9642: operator>>(int& __n) 9642: { 9642: 9642: 9642: sentry __cerb(*this, false); 9642: if (__cerb) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: long __l; 9642: 9642: const __num_get_type& __ng = __check_facet(this->_M_num_get); 9642: 9642: 9642: 9642: 9642: __ng.get(*this, 0, *this, __err, __l); 9642: 9642: 9642: 9642: if (__l < __gnu_cxx::__numeric_traits::__min) 9642: { 9642: __err |= ios_base::failbit; 9642: __n = __gnu_cxx::__numeric_traits::__min; 9642: } 9642: else if (__l > __gnu_cxx::__numeric_traits::__max) 9642: { 9642: __err |= ios_base::failbit; 9642: __n = __gnu_cxx::__numeric_traits::__max; 9642: } 9642: else 9642: __n = int(__l); 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: if (__err) 9642: this->setstate(__err); 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: basic_istream<_CharT, _Traits>:: 9642: operator>>(__streambuf_type* __sbout) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: sentry __cerb(*this, false); 9642: if (__cerb && __sbout) 9642: { 9642: try 9642: { 9642: bool __ineof; 9642: if (!__copy_streambufs_eof(this->rdbuf(), __sbout, __ineof)) 9642: __err |= ios_base::failbit; 9642: if (__ineof) 9642: __err |= ios_base::eofbit; 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::failbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::failbit); } 9642: } 9642: else if (!__sbout) 9642: __err |= ios_base::failbit; 9642: if (__err) 9642: this->setstate(__err); 9642: return *this; 9642: } 9642: 9642: template 9642: typename basic_istream<_CharT, _Traits>::int_type 9642: basic_istream<_CharT, _Traits>:: 9642: get(void) 9642: { 9642: const int_type __eof = traits_type::eof(); 9642: int_type __c = __eof; 9642: _M_gcount = 0; 9642: ios_base::iostate __err = ios_base::goodbit; 9642: sentry __cerb(*this, true); 9642: if (__cerb) 9642: { 9642: try 9642: { 9642: __c = this->rdbuf()->sbumpc(); 9642: 9642: if (!traits_type::eq_int_type(__c, __eof)) 9642: _M_gcount = 1; 9642: else 9642: __err |= ios_base::eofbit; 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: } 9642: if (!_M_gcount) 9642: __err |= ios_base::failbit; 9642: if (__err) 9642: this->setstate(__err); 9642: return __c; 9642: } 9642: 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: basic_istream<_CharT, _Traits>:: 9642: get(char_type& __c) 9642: { 9642: _M_gcount = 0; 9642: ios_base::iostate __err = ios_base::goodbit; 9642: sentry __cerb(*this, true); 9642: if (__cerb) 9642: { 9642: try 9642: { 9642: const int_type __cb = this->rdbuf()->sbumpc(); 9642: 9642: if (!traits_type::eq_int_type(__cb, traits_type::eof())) 9642: { 9642: _M_gcount = 1; 9642: __c = traits_type::to_char_type(__cb); 9642: } 9642: else 9642: __err |= ios_base::eofbit; 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: } 9642: if (!_M_gcount) 9642: __err |= ios_base::failbit; 9642: if (__err) 9642: this->setstate(__err); 9642: return *this; 9642: } 9642: 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: basic_istream<_CharT, _Traits>:: 9642: get(char_type* __s, streamsize __n, char_type __delim) 9642: { 9642: _M_gcount = 0; 9642: ios_base::iostate __err = ios_base::goodbit; 9642: sentry __cerb(*this, true); 9642: if (__cerb) 9642: { 9642: try 9642: { 9642: const int_type __idelim = traits_type::to_int_type(__delim); 9642: const int_type __eof = traits_type::eof(); 9642: __streambuf_type* __sb = this->rdbuf(); 9642: int_type __c = __sb->sgetc(); 9642: 9642: while (_M_gcount + 1 < __n 9642: && !traits_type::eq_int_type(__c, __eof) 9642: && !traits_type::eq_int_type(__c, __idelim)) 9642: { 9642: *__s++ = traits_type::to_char_type(__c); 9642: ++_M_gcount; 9642: __c = __sb->snextc(); 9642: } 9642: if (traits_type::eq_int_type(__c, __eof)) 9642: __err |= ios_base::eofbit; 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: } 9642: 9642: 9642: if (__n > 0) 9642: *__s = char_type(); 9642: if (!_M_gcount) 9642: __err |= ios_base::failbit; 9642: if (__err) 9642: this->setstate(__err); 9642: return *this; 9642: } 9642: 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: basic_istream<_CharT, _Traits>:: 9642: get(__streambuf_type& __sb, char_type __delim) 9642: { 9642: _M_gcount = 0; 9642: ios_base::iostate __err = ios_base::goodbit; 9642: sentry __cerb(*this, true); 9642: if (__cerb) 9642: { 9642: try 9642: { 9642: const int_type __idelim = traits_type::to_int_type(__delim); 9642: const int_type __eof = traits_type::eof(); 9642: __streambuf_type* __this_sb = this->rdbuf(); 9642: int_type __c = __this_sb->sgetc(); 9642: char_type __c2 = traits_type::to_char_type(__c); 9642: unsigned long long __gcount = 0; 9642: 9642: while (!traits_type::eq_int_type(__c, __eof) 9642: && !traits_type::eq_int_type(__c, __idelim) 9642: && !traits_type::eq_int_type(__sb.sputc(__c2), __eof)) 9642: { 9642: ++__gcount; 9642: __c = __this_sb->snextc(); 9642: __c2 = traits_type::to_char_type(__c); 9642: } 9642: if (traits_type::eq_int_type(__c, __eof)) 9642: __err |= ios_base::eofbit; 9642: 9642: 9642: if (__gcount <= __gnu_cxx::__numeric_traits::__max) 9642: _M_gcount = __gcount; 9642: else 9642: _M_gcount = __gnu_cxx::__numeric_traits::__max; 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: } 9642: if (!_M_gcount) 9642: __err |= ios_base::failbit; 9642: if (__err) 9642: this->setstate(__err); 9642: return *this; 9642: } 9642: 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: basic_istream<_CharT, _Traits>:: 9642: getline(char_type* __s, streamsize __n, char_type __delim) 9642: { 9642: _M_gcount = 0; 9642: ios_base::iostate __err = ios_base::goodbit; 9642: sentry __cerb(*this, true); 9642: if (__cerb) 9642: { 9642: try 9642: { 9642: const int_type __idelim = traits_type::to_int_type(__delim); 9642: const int_type __eof = traits_type::eof(); 9642: __streambuf_type* __sb = this->rdbuf(); 9642: int_type __c = __sb->sgetc(); 9642: 9642: while (_M_gcount + 1 < __n 9642: && !traits_type::eq_int_type(__c, __eof) 9642: && !traits_type::eq_int_type(__c, __idelim)) 9642: { 9642: *__s++ = traits_type::to_char_type(__c); 9642: __c = __sb->snextc(); 9642: ++_M_gcount; 9642: } 9642: if (traits_type::eq_int_type(__c, __eof)) 9642: __err |= ios_base::eofbit; 9642: else 9642: { 9642: if (traits_type::eq_int_type(__c, __idelim)) 9642: { 9642: __sb->sbumpc(); 9642: ++_M_gcount; 9642: } 9642: else 9642: __err |= ios_base::failbit; 9642: } 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: } 9642: 9642: 9642: if (__n > 0) 9642: *__s = char_type(); 9642: if (!_M_gcount) 9642: __err |= ios_base::failbit; 9642: if (__err) 9642: this->setstate(__err); 9642: return *this; 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: basic_istream<_CharT, _Traits>:: 9642: ignore(void) 9642: { 9642: _M_gcount = 0; 9642: sentry __cerb(*this, true); 9642: if (__cerb) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: const int_type __eof = traits_type::eof(); 9642: __streambuf_type* __sb = this->rdbuf(); 9642: 9642: if (traits_type::eq_int_type(__sb->sbumpc(), __eof)) 9642: __err |= ios_base::eofbit; 9642: else 9642: _M_gcount = 1; 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: if (__err) 9642: this->setstate(__err); 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: basic_istream<_CharT, _Traits>:: 9642: ignore(streamsize __n) 9642: { 9642: _M_gcount = 0; 9642: sentry __cerb(*this, true); 9642: if (__cerb && __n > 0) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: const int_type __eof = traits_type::eof(); 9642: __streambuf_type* __sb = this->rdbuf(); 9642: int_type __c = __sb->sgetc(); 9642: # 545 "/usr/include/c++/13/bits/istream.tcc" 3 9642: bool __large_ignore = false; 9642: while (true) 9642: { 9642: while (_M_gcount < __n 9642: && !traits_type::eq_int_type(__c, __eof)) 9642: { 9642: ++_M_gcount; 9642: __c = __sb->snextc(); 9642: } 9642: if (__n == __gnu_cxx::__numeric_traits::__max 9642: && !traits_type::eq_int_type(__c, __eof)) 9642: { 9642: _M_gcount = 9642: __gnu_cxx::__numeric_traits::__min; 9642: __large_ignore = true; 9642: } 9642: else 9642: break; 9642: } 9642: 9642: if (__n == __gnu_cxx::__numeric_traits::__max) 9642: { 9642: if (__large_ignore) 9642: _M_gcount = __gnu_cxx::__numeric_traits::__max; 9642: 9642: if (traits_type::eq_int_type(__c, __eof)) 9642: __err |= ios_base::eofbit; 9642: } 9642: else if (_M_gcount < __n) 9642: { 9642: if (traits_type::eq_int_type(__c, __eof)) 9642: __err |= ios_base::eofbit; 9642: } 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: if (__err) 9642: this->setstate(__err); 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: basic_istream<_CharT, _Traits>:: 9642: ignore(streamsize __n, int_type __delim) 9642: { 9642: _M_gcount = 0; 9642: sentry __cerb(*this, true); 9642: if (__cerb && __n > 0) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: const int_type __eof = traits_type::eof(); 9642: __streambuf_type* __sb = this->rdbuf(); 9642: int_type __c = __sb->sgetc(); 9642: 9642: 9642: bool __large_ignore = false; 9642: while (true) 9642: { 9642: while (_M_gcount < __n 9642: && !traits_type::eq_int_type(__c, __eof) 9642: && !traits_type::eq_int_type(__c, __delim)) 9642: { 9642: ++_M_gcount; 9642: __c = __sb->snextc(); 9642: } 9642: if (__n == __gnu_cxx::__numeric_traits::__max 9642: && !traits_type::eq_int_type(__c, __eof) 9642: && !traits_type::eq_int_type(__c, __delim)) 9642: { 9642: _M_gcount = 9642: __gnu_cxx::__numeric_traits::__min; 9642: __large_ignore = true; 9642: } 9642: else 9642: break; 9642: } 9642: 9642: if (__n == __gnu_cxx::__numeric_traits::__max) 9642: { 9642: if (__large_ignore) 9642: _M_gcount = __gnu_cxx::__numeric_traits::__max; 9642: 9642: if (traits_type::eq_int_type(__c, __eof)) 9642: __err |= ios_base::eofbit; 9642: else 9642: { 9642: if (_M_gcount != __n) 9642: ++_M_gcount; 9642: __sb->sbumpc(); 9642: } 9642: } 9642: else if (_M_gcount < __n) 9642: { 9642: if (traits_type::eq_int_type(__c, __eof)) 9642: __err |= ios_base::eofbit; 9642: else 9642: { 9642: ++_M_gcount; 9642: __sb->sbumpc(); 9642: } 9642: } 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: if (__err) 9642: this->setstate(__err); 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: typename basic_istream<_CharT, _Traits>::int_type 9642: basic_istream<_CharT, _Traits>:: 9642: peek(void) 9642: { 9642: int_type __c = traits_type::eof(); 9642: _M_gcount = 0; 9642: sentry __cerb(*this, true); 9642: if (__cerb) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: __c = this->rdbuf()->sgetc(); 9642: if (traits_type::eq_int_type(__c, traits_type::eof())) 9642: __err |= ios_base::eofbit; 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: if (__err) 9642: this->setstate(__err); 9642: } 9642: return __c; 9642: } 9642: 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: basic_istream<_CharT, _Traits>:: 9642: read(char_type* __s, streamsize __n) 9642: { 9642: _M_gcount = 0; 9642: sentry __cerb(*this, true); 9642: if (__cerb) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: _M_gcount = this->rdbuf()->sgetn(__s, __n); 9642: if (_M_gcount != __n) 9642: __err |= (ios_base::eofbit | ios_base::failbit); 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: if (__err) 9642: this->setstate(__err); 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: streamsize 9642: basic_istream<_CharT, _Traits>:: 9642: readsome(char_type* __s, streamsize __n) 9642: { 9642: _M_gcount = 0; 9642: sentry __cerb(*this, true); 9642: if (__cerb) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: 9642: const streamsize __num = this->rdbuf()->in_avail(); 9642: if (__num > 0) 9642: _M_gcount = this->rdbuf()->sgetn(__s, std::min(__num, __n)); 9642: else if (__num == -1) 9642: __err |= ios_base::eofbit; 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: if (__err) 9642: this->setstate(__err); 9642: } 9642: return _M_gcount; 9642: } 9642: 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: basic_istream<_CharT, _Traits>:: 9642: putback(char_type __c) 9642: { 9642: 9642: 9642: _M_gcount = 0; 9642: 9642: this->clear(this->rdstate() & ~ios_base::eofbit); 9642: sentry __cerb(*this, true); 9642: if (__cerb) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: const int_type __eof = traits_type::eof(); 9642: __streambuf_type* __sb = this->rdbuf(); 9642: if (!__sb 9642: || traits_type::eq_int_type(__sb->sputbackc(__c), __eof)) 9642: __err |= ios_base::badbit; 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: if (__err) 9642: this->setstate(__err); 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: basic_istream<_CharT, _Traits>:: 9642: unget(void) 9642: { 9642: 9642: 9642: _M_gcount = 0; 9642: 9642: this->clear(this->rdstate() & ~ios_base::eofbit); 9642: sentry __cerb(*this, true); 9642: if (__cerb) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: const int_type __eof = traits_type::eof(); 9642: __streambuf_type* __sb = this->rdbuf(); 9642: if (!__sb 9642: || traits_type::eq_int_type(__sb->sungetc(), __eof)) 9642: __err |= ios_base::badbit; 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: if (__err) 9642: this->setstate(__err); 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: int 9642: basic_istream<_CharT, _Traits>:: 9642: sync(void) 9642: { 9642: 9642: 9642: int __ret = -1; 9642: sentry __cerb(*this, true); 9642: if (__cerb) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: __streambuf_type* __sb = this->rdbuf(); 9642: if (__sb) 9642: { 9642: if (__sb->pubsync() == -1) 9642: __err |= ios_base::badbit; 9642: else 9642: __ret = 0; 9642: } 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: if (__err) 9642: this->setstate(__err); 9642: } 9642: return __ret; 9642: } 9642: 9642: template 9642: typename basic_istream<_CharT, _Traits>::pos_type 9642: basic_istream<_CharT, _Traits>:: 9642: tellg(void) 9642: { 9642: 9642: 9642: pos_type __ret = pos_type(-1); 9642: sentry __cerb(*this, true); 9642: if (__cerb) 9642: { 9642: try 9642: { 9642: if (!this->fail()) 9642: __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, 9642: ios_base::in); 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: } 9642: return __ret; 9642: } 9642: 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: basic_istream<_CharT, _Traits>:: 9642: seekg(pos_type __pos) 9642: { 9642: 9642: 9642: 9642: this->clear(this->rdstate() & ~ios_base::eofbit); 9642: sentry __cerb(*this, true); 9642: if (__cerb) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: if (!this->fail()) 9642: { 9642: 9642: const pos_type __p = this->rdbuf()->pubseekpos(__pos, 9642: ios_base::in); 9642: 9642: 9642: if (__p == pos_type(off_type(-1))) 9642: __err |= ios_base::failbit; 9642: } 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: if (__err) 9642: this->setstate(__err); 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: basic_istream<_CharT, _Traits>:: 9642: seekg(off_type __off, ios_base::seekdir __dir) 9642: { 9642: 9642: 9642: 9642: this->clear(this->rdstate() & ~ios_base::eofbit); 9642: sentry __cerb(*this, true); 9642: if (__cerb) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: if (!this->fail()) 9642: { 9642: 9642: const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir, 9642: ios_base::in); 9642: 9642: 9642: if (__p == pos_type(off_type(-1))) 9642: __err |= ios_base::failbit; 9642: } 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: this->_M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { this->_M_setstate(ios_base::badbit); } 9642: if (__err) 9642: this->setstate(__err); 9642: } 9642: return *this; 9642: } 9642: 9642: 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c) 9642: { 9642: typedef basic_istream<_CharT, _Traits> __istream_type; 9642: typedef typename __istream_type::int_type __int_type; 9642: 9642: typename __istream_type::sentry __cerb(__in, false); 9642: if (__cerb) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: const __int_type __cb = __in.rdbuf()->sbumpc(); 9642: if (!_Traits::eq_int_type(__cb, _Traits::eof())) 9642: __c = _Traits::to_char_type(__cb); 9642: else 9642: __err |= (ios_base::eofbit | ios_base::failbit); 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: __in._M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { __in._M_setstate(ios_base::badbit); } 9642: if (__err) 9642: __in.setstate(__err); 9642: } 9642: return __in; 9642: } 9642: 9642: template 9642: void 9642: __istream_extract(basic_istream<_CharT, _Traits>& __in, _CharT* __s, 9642: streamsize __num) 9642: { 9642: typedef basic_istream<_CharT, _Traits> __istream_type; 9642: typedef basic_streambuf<_CharT, _Traits> __streambuf_type; 9642: typedef typename _Traits::int_type int_type; 9642: typedef _CharT char_type; 9642: typedef ctype<_CharT> __ctype_type; 9642: 9642: streamsize __extracted = 0; 9642: ios_base::iostate __err = ios_base::goodbit; 9642: typename __istream_type::sentry __cerb(__in, false); 9642: if (__cerb) 9642: { 9642: try 9642: { 9642: 9642: streamsize __width = __in.width(); 9642: if (0 < __width && __width < __num) 9642: __num = __width; 9642: 9642: const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); 9642: 9642: const int_type __eof = _Traits::eof(); 9642: __streambuf_type* __sb = __in.rdbuf(); 9642: int_type __c = __sb->sgetc(); 9642: 9642: while (__extracted < __num - 1 9642: && !_Traits::eq_int_type(__c, __eof) 9642: && !__ct.is(ctype_base::space, 9642: _Traits::to_char_type(__c))) 9642: { 9642: *__s++ = _Traits::to_char_type(__c); 9642: ++__extracted; 9642: __c = __sb->snextc(); 9642: } 9642: 9642: if (__extracted < __num - 1 9642: && _Traits::eq_int_type(__c, __eof)) 9642: __err |= ios_base::eofbit; 9642: 9642: 9642: 9642: *__s = char_type(); 9642: __in.width(0); 9642: } 9642: catch(__cxxabiv1::__forced_unwind&) 9642: { 9642: __in._M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { __in._M_setstate(ios_base::badbit); } 9642: } 9642: if (!__extracted) 9642: __err |= ios_base::failbit; 9642: if (__err) 9642: __in.setstate(__err); 9642: } 9642: 9642: 9642: template 9642: basic_istream<_CharT, _Traits>& 9642: ws(basic_istream<_CharT, _Traits>& __in) 9642: { 9642: typedef basic_istream<_CharT, _Traits> __istream_type; 9642: typedef basic_streambuf<_CharT, _Traits> __streambuf_type; 9642: typedef typename __istream_type::int_type __int_type; 9642: typedef ctype<_CharT> __ctype_type; 9642: 9642: 9642: 9642: typename __istream_type::sentry __cerb(__in, true); 9642: if (__cerb) 9642: { 9642: ios_base::iostate __err = ios_base::goodbit; 9642: try 9642: { 9642: const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); 9642: const __int_type __eof = _Traits::eof(); 9642: __streambuf_type* __sb = __in.rdbuf(); 9642: __int_type __c = __sb->sgetc(); 9642: 9642: while (true) 9642: { 9642: if (_Traits::eq_int_type(__c, __eof)) 9642: { 9642: __err = ios_base::eofbit; 9642: break; 9642: } 9642: if (!__ct.is(ctype_base::space, _Traits::to_char_type(__c))) 9642: break; 9642: __c = __sb->snextc(); 9642: } 9642: } 9642: catch(const __cxxabiv1::__forced_unwind&) 9642: { 9642: __in._M_setstate(ios_base::badbit); 9642: throw; 9642: } 9642: catch(...) 9642: { 9642: __in._M_setstate(ios_base::badbit); 9642: } 9642: if (__err) 9642: __in.setstate(__err); 9642: } 9642: return __in; 9642: } 9642: 9642: 9642: 9642: 9642: extern template class basic_istream; 9642: extern template istream& ws(istream&); 9642: extern template istream& operator>>(istream&, char&); 9642: extern template istream& operator>>(istream&, unsigned char&); 9642: extern template istream& operator>>(istream&, signed char&); 9642: 9642: extern template istream& istream::_M_extract(unsigned short&); 9642: extern template istream& istream::_M_extract(unsigned int&); 9642: extern template istream& istream::_M_extract(long&); 9642: extern template istream& istream::_M_extract(unsigned long&); 9642: extern template istream& istream::_M_extract(bool&); 9642: 9642: extern template istream& istream::_M_extract(long long&); 9642: extern template istream& istream::_M_extract(unsigned long long&); 9642: 9642: extern template istream& istream::_M_extract(float&); 9642: extern template istream& istream::_M_extract(double&); 9642: extern template istream& istream::_M_extract(long double&); 9642: extern template istream& istream::_M_extract(void*&); 9642: 9642: extern template class basic_iostream; 9642: 9642: 9642: extern template class basic_istream; 9642: extern template wistream& ws(wistream&); 9642: extern template wistream& operator>>(wistream&, wchar_t&); 9642: extern template void __istream_extract(wistream&, wchar_t*, streamsize); 9642: 9642: extern template wistream& wistream::_M_extract(unsigned short&); 9642: extern template wistream& wistream::_M_extract(unsigned int&); 9642: extern template wistream& wistream::_M_extract(long&); 9642: extern template wistream& wistream::_M_extract(unsigned long&); 9642: extern template wistream& wistream::_M_extract(bool&); 9642: 9642: extern template wistream& wistream::_M_extract(long long&); 9642: extern template wistream& wistream::_M_extract(unsigned long long&); 9642: 9642: extern template wistream& wistream::_M_extract(float&); 9642: extern template wistream& wistream::_M_extract(double&); 9642: extern template wistream& wistream::_M_extract(long double&); 9642: extern template wistream& wistream::_M_extract(void*&); 9642: 9642: extern template class basic_iostream; 9642: 9642: 9642: 9642: 9642: } 9642: # 1107 "/usr/include/c++/13/istream" 2 3 9642: # 41 "/usr/include/c++/13/sstream" 2 3 9642: # 55 "/usr/include/c++/13/sstream" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: namespace __cxx11 { 9642: # 78 "/usr/include/c++/13/sstream" 3 9642: template 9642: class basic_stringbuf : public basic_streambuf<_CharT, _Traits> 9642: { 9642: struct __xfer_bufptrs; 9642: 9642: 9642: using allocator_traits = std::allocator_traits<_Alloc>; 9642: using _Noexcept_swap 9642: = __or_; 9642: 9642: 9642: public: 9642: 9642: typedef _CharT char_type; 9642: typedef _Traits traits_type; 9642: 9642: 9642: typedef _Alloc allocator_type; 9642: typedef typename traits_type::int_type int_type; 9642: typedef typename traits_type::pos_type pos_type; 9642: typedef typename traits_type::off_type off_type; 9642: 9642: typedef basic_streambuf __streambuf_type; 9642: typedef basic_string __string_type; 9642: typedef typename __string_type::size_type __size_type; 9642: 9642: protected: 9642: 9642: ios_base::openmode _M_mode; 9642: 9642: 9642: __string_type _M_string; 9642: 9642: public: 9642: # 121 "/usr/include/c++/13/sstream" 3 9642: basic_stringbuf() 9642: : __streambuf_type(), _M_mode(ios_base::in | ios_base::out), _M_string() 9642: { } 9642: # 132 "/usr/include/c++/13/sstream" 3 9642: explicit 9642: basic_stringbuf(ios_base::openmode __mode) 9642: : __streambuf_type(), _M_mode(__mode), _M_string() 9642: { } 9642: # 145 "/usr/include/c++/13/sstream" 3 9642: explicit 9642: basic_stringbuf(const __string_type& __str, 9642: ios_base::openmode __mode = ios_base::in | ios_base::out) 9642: : __streambuf_type(), _M_mode(), 9642: _M_string(__str.data(), __str.size(), __str.get_allocator()) 9642: { _M_stringbuf_init(__mode); } 9642: 9642: 9642: basic_stringbuf(const basic_stringbuf&) = delete; 9642: 9642: basic_stringbuf(basic_stringbuf&& __rhs) 9642: : basic_stringbuf(std::move(__rhs), __xfer_bufptrs(__rhs, this)) 9642: { __rhs._M_sync(const_cast(__rhs._M_string.data()), 0, 0); } 9642: # 209 "/usr/include/c++/13/sstream" 3 9642: basic_stringbuf& 9642: operator=(const basic_stringbuf&) = delete; 9642: 9642: basic_stringbuf& 9642: operator=(basic_stringbuf&& __rhs) 9642: { 9642: __xfer_bufptrs __st{__rhs, this}; 9642: const __streambuf_type& __base = __rhs; 9642: __streambuf_type::operator=(__base); 9642: this->pubimbue(__rhs.getloc()); 9642: _M_mode = __rhs._M_mode; 9642: _M_string = std::move(__rhs._M_string); 9642: __rhs._M_sync(const_cast(__rhs._M_string.data()), 0, 0); 9642: return *this; 9642: } 9642: 9642: void 9642: swap(basic_stringbuf& __rhs) noexcept(_Noexcept_swap::value) 9642: { 9642: __xfer_bufptrs __l_st{*this, std::__addressof(__rhs)}; 9642: __xfer_bufptrs __r_st{__rhs, this}; 9642: __streambuf_type& __base = __rhs; 9642: __streambuf_type::swap(__base); 9642: __rhs.pubimbue(this->pubimbue(__rhs.getloc())); 9642: std::swap(_M_mode, __rhs._M_mode); 9642: std::swap(_M_string, __rhs._M_string); 9642: } 9642: # 248 "/usr/include/c++/13/sstream" 3 9642: __string_type 9642: str() const 9642: { 9642: __string_type __ret(_M_string.get_allocator()); 9642: if (char_type* __hi = _M_high_mark()) 9642: __ret.assign(this->pbase(), __hi); 9642: else 9642: __ret = _M_string; 9642: return __ret; 9642: } 9642: # 304 "/usr/include/c++/13/sstream" 3 9642: void 9642: str(const __string_type& __s) 9642: { 9642: 9642: 9642: _M_string.assign(__s.data(), __s.size()); 9642: _M_stringbuf_init(_M_mode); 9642: } 9642: # 333 "/usr/include/c++/13/sstream" 3 9642: protected: 9642: 9642: void 9642: _M_stringbuf_init(ios_base::openmode __mode) 9642: { 9642: _M_mode = __mode; 9642: __size_type __len = 0; 9642: if (_M_mode & (ios_base::ate | ios_base::app)) 9642: __len = _M_string.size(); 9642: _M_sync(const_cast(_M_string.data()), 0, __len); 9642: } 9642: 9642: virtual streamsize 9642: showmanyc() 9642: { 9642: streamsize __ret = -1; 9642: if (_M_mode & ios_base::in) 9642: { 9642: _M_update_egptr(); 9642: __ret = this->egptr() - this->gptr(); 9642: } 9642: return __ret; 9642: } 9642: 9642: virtual int_type 9642: underflow(); 9642: 9642: virtual int_type 9642: pbackfail(int_type __c = traits_type::eof()); 9642: 9642: virtual int_type 9642: overflow(int_type __c = traits_type::eof()); 9642: # 377 "/usr/include/c++/13/sstream" 3 9642: virtual __streambuf_type* 9642: setbuf(char_type* __s, streamsize __n) 9642: { 9642: if (__s && __n >= 0) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: _M_string.clear(); 9642: 9642: 9642: _M_sync(__s, __n, 0); 9642: } 9642: return this; 9642: } 9642: 9642: virtual pos_type 9642: seekoff(off_type __off, ios_base::seekdir __way, 9642: ios_base::openmode __mode = ios_base::in | ios_base::out); 9642: 9642: virtual pos_type 9642: seekpos(pos_type __sp, 9642: ios_base::openmode __mode = ios_base::in | ios_base::out); 9642: 9642: 9642: 9642: 9642: void 9642: _M_sync(char_type* __base, __size_type __i, __size_type __o); 9642: 9642: 9642: 9642: void 9642: _M_update_egptr() 9642: { 9642: if (char_type* __pptr = this->pptr()) 9642: { 9642: char_type* __egptr = this->egptr(); 9642: if (!__egptr || __pptr > __egptr) 9642: { 9642: if (_M_mode & ios_base::in) 9642: this->setg(this->eback(), this->gptr(), __pptr); 9642: else 9642: this->setg(__pptr, __pptr, __pptr); 9642: } 9642: } 9642: } 9642: 9642: 9642: 9642: void 9642: _M_pbump(char_type* __pbeg, char_type* __pend, off_type __off); 9642: 9642: private: 9642: 9642: 9642: 9642: 9642: __attribute__((__always_inline__)) 9642: char_type* 9642: _M_high_mark() const noexcept 9642: { 9642: if (char_type* __pptr = this->pptr()) 9642: { 9642: char_type* __egptr = this->egptr(); 9642: if (!__egptr || __pptr > __egptr) 9642: return __pptr; 9642: else 9642: return __egptr; 9642: } 9642: return 0; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: struct __xfer_bufptrs 9642: { 9642: __xfer_bufptrs(const basic_stringbuf& __from, basic_stringbuf* __to) 9642: : _M_to{__to}, _M_goff{-1, -1, -1}, _M_poff{-1, -1, -1} 9642: { 9642: const _CharT* const __str = __from._M_string.data(); 9642: const _CharT* __end = nullptr; 9642: if (__from.eback()) 9642: { 9642: _M_goff[0] = __from.eback() - __str; 9642: _M_goff[1] = __from.gptr() - __str; 9642: _M_goff[2] = __from.egptr() - __str; 9642: __end = __from.egptr(); 9642: } 9642: if (__from.pbase()) 9642: { 9642: _M_poff[0] = __from.pbase() - __str; 9642: _M_poff[1] = __from.pptr() - __from.pbase(); 9642: _M_poff[2] = __from.epptr() - __str; 9642: if (!__end || __from.pptr() > __end) 9642: __end = __from.pptr(); 9642: } 9642: 9642: 9642: if (__end) 9642: { 9642: 9642: 9642: auto& __mut_from = const_cast(__from); 9642: __mut_from._M_string._M_length(__end - __str); 9642: } 9642: } 9642: 9642: ~__xfer_bufptrs() 9642: { 9642: char_type* __str = const_cast(_M_to->_M_string.data()); 9642: if (_M_goff[0] != -1) 9642: _M_to->setg(__str+_M_goff[0], __str+_M_goff[1], __str+_M_goff[2]); 9642: if (_M_poff[0] != -1) 9642: _M_to->_M_pbump(__str+_M_poff[0], __str+_M_poff[2], _M_poff[1]); 9642: } 9642: 9642: basic_stringbuf* _M_to; 9642: off_type _M_goff[3]; 9642: off_type _M_poff[3]; 9642: }; 9642: # 513 "/usr/include/c++/13/sstream" 3 9642: basic_stringbuf(basic_stringbuf&& __rhs, __xfer_bufptrs&&) 9642: : __streambuf_type(static_cast(__rhs)), 9642: _M_mode(__rhs._M_mode), _M_string(std::move(__rhs._M_string)) 9642: { } 9642: # 528 "/usr/include/c++/13/sstream" 3 9642: }; 9642: # 546 "/usr/include/c++/13/sstream" 3 9642: template 9642: class basic_istringstream : public basic_istream<_CharT, _Traits> 9642: { 9642: public: 9642: 9642: typedef _CharT char_type; 9642: typedef _Traits traits_type; 9642: 9642: 9642: typedef _Alloc allocator_type; 9642: typedef typename traits_type::int_type int_type; 9642: typedef typename traits_type::pos_type pos_type; 9642: typedef typename traits_type::off_type off_type; 9642: 9642: 9642: typedef basic_string<_CharT, _Traits, _Alloc> __string_type; 9642: typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type; 9642: typedef basic_istream __istream_type; 9642: 9642: private: 9642: __stringbuf_type _M_stringbuf; 9642: 9642: public: 9642: # 580 "/usr/include/c++/13/sstream" 3 9642: basic_istringstream() 9642: : __istream_type(), _M_stringbuf(ios_base::in) 9642: { this->init(&_M_stringbuf); } 9642: # 596 "/usr/include/c++/13/sstream" 3 9642: explicit 9642: basic_istringstream(ios_base::openmode __mode) 9642: : __istream_type(), _M_stringbuf(__mode | ios_base::in) 9642: { this->init(&_M_stringbuf); } 9642: # 614 "/usr/include/c++/13/sstream" 3 9642: explicit 9642: basic_istringstream(const __string_type& __str, 9642: ios_base::openmode __mode = ios_base::in) 9642: : __istream_type(), _M_stringbuf(__str, __mode | ios_base::in) 9642: { this->init(&_M_stringbuf); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ~basic_istringstream() 9642: { } 9642: 9642: 9642: basic_istringstream(const basic_istringstream&) = delete; 9642: 9642: basic_istringstream(basic_istringstream&& __rhs) 9642: : __istream_type(std::move(__rhs)), 9642: _M_stringbuf(std::move(__rhs._M_stringbuf)) 9642: { __istream_type::set_rdbuf(&_M_stringbuf); } 9642: # 671 "/usr/include/c++/13/sstream" 3 9642: basic_istringstream& 9642: operator=(const basic_istringstream&) = delete; 9642: 9642: basic_istringstream& 9642: operator=(basic_istringstream&& __rhs) 9642: { 9642: __istream_type::operator=(std::move(__rhs)); 9642: _M_stringbuf = std::move(__rhs._M_stringbuf); 9642: return *this; 9642: } 9642: 9642: void 9642: swap(basic_istringstream& __rhs) 9642: { 9642: __istream_type::swap(__rhs); 9642: _M_stringbuf.swap(__rhs._M_stringbuf); 9642: } 9642: # 697 "/usr/include/c++/13/sstream" 3 9642: __stringbuf_type* 9642: rdbuf() const 9642: { return const_cast<__stringbuf_type*>(&_M_stringbuf); } 9642: 9642: 9642: 9642: 9642: 9642: __string_type 9642: str() const 9642: { return _M_stringbuf.str(); } 9642: # 735 "/usr/include/c++/13/sstream" 3 9642: void 9642: str(const __string_type& __s) 9642: { _M_stringbuf.str(__s); } 9642: # 752 "/usr/include/c++/13/sstream" 3 9642: }; 9642: # 770 "/usr/include/c++/13/sstream" 3 9642: template 9642: class basic_ostringstream : public basic_ostream<_CharT, _Traits> 9642: { 9642: public: 9642: 9642: typedef _CharT char_type; 9642: typedef _Traits traits_type; 9642: 9642: 9642: typedef _Alloc allocator_type; 9642: typedef typename traits_type::int_type int_type; 9642: typedef typename traits_type::pos_type pos_type; 9642: typedef typename traits_type::off_type off_type; 9642: 9642: 9642: typedef basic_string<_CharT, _Traits, _Alloc> __string_type; 9642: typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type; 9642: typedef basic_ostream __ostream_type; 9642: 9642: private: 9642: __stringbuf_type _M_stringbuf; 9642: 9642: public: 9642: # 804 "/usr/include/c++/13/sstream" 3 9642: basic_ostringstream() 9642: : __ostream_type(), _M_stringbuf(ios_base::out) 9642: { this->init(&_M_stringbuf); } 9642: # 820 "/usr/include/c++/13/sstream" 3 9642: explicit 9642: basic_ostringstream(ios_base::openmode __mode) 9642: : __ostream_type(), _M_stringbuf(__mode | ios_base::out) 9642: { this->init(&_M_stringbuf); } 9642: # 838 "/usr/include/c++/13/sstream" 3 9642: explicit 9642: basic_ostringstream(const __string_type& __str, 9642: ios_base::openmode __mode = ios_base::out) 9642: : __ostream_type(), _M_stringbuf(__str, __mode | ios_base::out) 9642: { this->init(&_M_stringbuf); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ~basic_ostringstream() 9642: { } 9642: 9642: 9642: basic_ostringstream(const basic_ostringstream&) = delete; 9642: 9642: basic_ostringstream(basic_ostringstream&& __rhs) 9642: : __ostream_type(std::move(__rhs)), 9642: _M_stringbuf(std::move(__rhs._M_stringbuf)) 9642: { __ostream_type::set_rdbuf(&_M_stringbuf); } 9642: # 895 "/usr/include/c++/13/sstream" 3 9642: basic_ostringstream& 9642: operator=(const basic_ostringstream&) = delete; 9642: 9642: basic_ostringstream& 9642: operator=(basic_ostringstream&& __rhs) 9642: { 9642: __ostream_type::operator=(std::move(__rhs)); 9642: _M_stringbuf = std::move(__rhs._M_stringbuf); 9642: return *this; 9642: } 9642: 9642: void 9642: swap(basic_ostringstream& __rhs) 9642: { 9642: __ostream_type::swap(__rhs); 9642: _M_stringbuf.swap(__rhs._M_stringbuf); 9642: } 9642: # 921 "/usr/include/c++/13/sstream" 3 9642: __stringbuf_type* 9642: rdbuf() const 9642: { return const_cast<__stringbuf_type*>(&_M_stringbuf); } 9642: 9642: 9642: 9642: 9642: 9642: __string_type 9642: str() const 9642: { return _M_stringbuf.str(); } 9642: # 959 "/usr/include/c++/13/sstream" 3 9642: void 9642: str(const __string_type& __s) 9642: { _M_stringbuf.str(__s); } 9642: # 976 "/usr/include/c++/13/sstream" 3 9642: }; 9642: # 994 "/usr/include/c++/13/sstream" 3 9642: template 9642: class basic_stringstream : public basic_iostream<_CharT, _Traits> 9642: { 9642: public: 9642: 9642: typedef _CharT char_type; 9642: typedef _Traits traits_type; 9642: 9642: 9642: typedef _Alloc allocator_type; 9642: typedef typename traits_type::int_type int_type; 9642: typedef typename traits_type::pos_type pos_type; 9642: typedef typename traits_type::off_type off_type; 9642: 9642: 9642: typedef basic_string<_CharT, _Traits, _Alloc> __string_type; 9642: typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type; 9642: typedef basic_iostream __iostream_type; 9642: 9642: private: 9642: __stringbuf_type _M_stringbuf; 9642: 9642: public: 9642: # 1028 "/usr/include/c++/13/sstream" 3 9642: basic_stringstream() 9642: : __iostream_type(), _M_stringbuf(ios_base::out | ios_base::in) 9642: { this->init(&_M_stringbuf); } 9642: # 1042 "/usr/include/c++/13/sstream" 3 9642: explicit 9642: basic_stringstream(ios_base::openmode __m) 9642: : __iostream_type(), _M_stringbuf(__m) 9642: { this->init(&_M_stringbuf); } 9642: # 1058 "/usr/include/c++/13/sstream" 3 9642: explicit 9642: basic_stringstream(const __string_type& __str, 9642: ios_base::openmode __m = ios_base::out | ios_base::in) 9642: : __iostream_type(), _M_stringbuf(__str, __m) 9642: { this->init(&_M_stringbuf); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ~basic_stringstream() 9642: { } 9642: 9642: 9642: basic_stringstream(const basic_stringstream&) = delete; 9642: 9642: basic_stringstream(basic_stringstream&& __rhs) 9642: : __iostream_type(std::move(__rhs)), 9642: _M_stringbuf(std::move(__rhs._M_stringbuf)) 9642: { __iostream_type::set_rdbuf(&_M_stringbuf); } 9642: # 1117 "/usr/include/c++/13/sstream" 3 9642: basic_stringstream& 9642: operator=(const basic_stringstream&) = delete; 9642: 9642: basic_stringstream& 9642: operator=(basic_stringstream&& __rhs) 9642: { 9642: __iostream_type::operator=(std::move(__rhs)); 9642: _M_stringbuf = std::move(__rhs._M_stringbuf); 9642: return *this; 9642: } 9642: 9642: void 9642: swap(basic_stringstream& __rhs) 9642: { 9642: __iostream_type::swap(__rhs); 9642: _M_stringbuf.swap(__rhs._M_stringbuf); 9642: } 9642: # 1143 "/usr/include/c++/13/sstream" 3 9642: __stringbuf_type* 9642: rdbuf() const 9642: { return const_cast<__stringbuf_type*>(&_M_stringbuf); } 9642: 9642: 9642: 9642: 9642: 9642: __string_type 9642: str() const 9642: { return _M_stringbuf.str(); } 9642: # 1181 "/usr/include/c++/13/sstream" 3 9642: void 9642: str(const __string_type& __s) 9642: { _M_stringbuf.str(__s); } 9642: # 1198 "/usr/include/c++/13/sstream" 3 9642: }; 9642: 9642: 9642: 9642: template 9642: inline void 9642: swap(basic_stringbuf<_CharT, _Traits, _Allocator>& __x, 9642: basic_stringbuf<_CharT, _Traits, _Allocator>& __y) 9642: noexcept(noexcept(__x.swap(__y))) 9642: { __x.swap(__y); } 9642: 9642: 9642: template 9642: inline void 9642: swap(basic_istringstream<_CharT, _Traits, _Allocator>& __x, 9642: basic_istringstream<_CharT, _Traits, _Allocator>& __y) 9642: { __x.swap(__y); } 9642: 9642: 9642: template 9642: inline void 9642: swap(basic_ostringstream<_CharT, _Traits, _Allocator>& __x, 9642: basic_ostringstream<_CharT, _Traits, _Allocator>& __y) 9642: { __x.swap(__y); } 9642: 9642: 9642: template 9642: inline void 9642: swap(basic_stringstream<_CharT, _Traits, _Allocator>& __x, 9642: basic_stringstream<_CharT, _Traits, _Allocator>& __y) 9642: { __x.swap(__y); } 9642: 9642: 9642: } 9642: 9642: } 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/sstream.tcc" 1 3 9642: # 37 "/usr/include/c++/13/bits/sstream.tcc" 3 9642: 9642: # 38 "/usr/include/c++/13/bits/sstream.tcc" 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: template 9642: typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type 9642: basic_stringbuf<_CharT, _Traits, _Alloc>:: 9642: pbackfail(int_type __c) 9642: { 9642: int_type __ret = traits_type::eof(); 9642: if (this->eback() < this->gptr()) 9642: { 9642: 9642: 9642: const bool __testeof = traits_type::eq_int_type(__c, __ret); 9642: if (!__testeof) 9642: { 9642: const bool __testeq = traits_type::eq(traits_type:: 9642: to_char_type(__c), 9642: this->gptr()[-1]); 9642: const bool __testout = this->_M_mode & ios_base::out; 9642: if (__testeq || __testout) 9642: { 9642: this->gbump(-1); 9642: if (!__testeq) 9642: *this->gptr() = traits_type::to_char_type(__c); 9642: __ret = __c; 9642: } 9642: } 9642: else 9642: { 9642: this->gbump(-1); 9642: __ret = traits_type::not_eof(__c); 9642: } 9642: } 9642: return __ret; 9642: } 9642: 9642: template 9642: typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type 9642: basic_stringbuf<_CharT, _Traits, _Alloc>:: 9642: overflow(int_type __c) 9642: { 9642: const bool __testout = this->_M_mode & ios_base::out; 9642: if (__builtin_expect(!__testout, false)) 9642: return traits_type::eof(); 9642: 9642: const bool __testeof = traits_type::eq_int_type(__c, traits_type::eof()); 9642: if (__builtin_expect(__testeof, false)) 9642: return traits_type::not_eof(__c); 9642: 9642: const __size_type __capacity = _M_string.capacity(); 9642: 9642: 9642: if (size_t(this->epptr() - this->pbase()) < __capacity) 9642: { 9642: 9642: char_type* __base = const_cast(_M_string.data()); 9642: _M_pbump(__base, __base + __capacity, this->pptr() - this->pbase()); 9642: if (_M_mode & ios_base::in) 9642: { 9642: const __size_type __nget = this->gptr() - this->eback(); 9642: const __size_type __eget = this->egptr() - this->eback(); 9642: this->setg(__base, __base + __nget, __base + __eget + 1); 9642: } 9642: *this->pptr() = traits_type::to_char_type(__c); 9642: this->pbump(1); 9642: return __c; 9642: } 9642: 9642: 9642: const __size_type __max_size = _M_string.max_size(); 9642: const bool __testput = this->pptr() < this->epptr(); 9642: if (__builtin_expect(!__testput && __capacity == __max_size, false)) 9642: return traits_type::eof(); 9642: 9642: 9642: 9642: const char_type __conv = traits_type::to_char_type(__c); 9642: if (!__testput) 9642: { 9642: # 129 "/usr/include/c++/13/bits/sstream.tcc" 3 9642: const __size_type __opt_len = std::max(__size_type(2 * __capacity), 9642: __size_type(512)); 9642: const __size_type __len = std::min(__opt_len, __max_size); 9642: __string_type __tmp(_M_string.get_allocator()); 9642: __tmp.reserve(__len); 9642: if (this->pbase()) 9642: __tmp.assign(this->pbase(), this->epptr() - this->pbase()); 9642: __tmp.push_back(__conv); 9642: _M_string.swap(__tmp); 9642: _M_sync(const_cast(_M_string.data()), 9642: this->gptr() - this->eback(), this->pptr() - this->pbase()); 9642: } 9642: else 9642: *this->pptr() = __conv; 9642: this->pbump(1); 9642: return __c; 9642: } 9642: 9642: template 9642: typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type 9642: basic_stringbuf<_CharT, _Traits, _Alloc>:: 9642: underflow() 9642: { 9642: int_type __ret = traits_type::eof(); 9642: const bool __testin = this->_M_mode & ios_base::in; 9642: if (__testin) 9642: { 9642: 9642: _M_update_egptr(); 9642: 9642: if (this->gptr() < this->egptr()) 9642: __ret = traits_type::to_int_type(*this->gptr()); 9642: } 9642: return __ret; 9642: } 9642: 9642: template 9642: typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type 9642: basic_stringbuf<_CharT, _Traits, _Alloc>:: 9642: seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __mode) 9642: { 9642: pos_type __ret = pos_type(off_type(-1)); 9642: bool __testin = (ios_base::in & this->_M_mode & __mode) != 0; 9642: bool __testout = (ios_base::out & this->_M_mode & __mode) != 0; 9642: const bool __testboth = __testin && __testout && __way != ios_base::cur; 9642: __testin &= !(__mode & ios_base::out); 9642: __testout &= !(__mode & ios_base::in); 9642: 9642: 9642: 9642: const char_type* __beg = __testin ? this->eback() : this->pbase(); 9642: if ((__beg || !__off) && (__testin || __testout || __testboth)) 9642: { 9642: _M_update_egptr(); 9642: 9642: off_type __newoffi = __off; 9642: off_type __newoffo = __newoffi; 9642: if (__way == ios_base::cur) 9642: { 9642: __newoffi += this->gptr() - __beg; 9642: __newoffo += this->pptr() - __beg; 9642: } 9642: else if (__way == ios_base::end) 9642: __newoffo = __newoffi += this->egptr() - __beg; 9642: 9642: if ((__testin || __testboth) 9642: && __newoffi >= 0 9642: && this->egptr() - __beg >= __newoffi) 9642: { 9642: this->setg(this->eback(), this->eback() + __newoffi, 9642: this->egptr()); 9642: __ret = pos_type(__newoffi); 9642: } 9642: if ((__testout || __testboth) 9642: && __newoffo >= 0 9642: && this->egptr() - __beg >= __newoffo) 9642: { 9642: _M_pbump(this->pbase(), this->epptr(), __newoffo); 9642: __ret = pos_type(__newoffo); 9642: } 9642: } 9642: return __ret; 9642: } 9642: 9642: template 9642: typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type 9642: basic_stringbuf<_CharT, _Traits, _Alloc>:: 9642: seekpos(pos_type __sp, ios_base::openmode __mode) 9642: { 9642: pos_type __ret = pos_type(off_type(-1)); 9642: const bool __testin = (ios_base::in & this->_M_mode & __mode) != 0; 9642: const bool __testout = (ios_base::out & this->_M_mode & __mode) != 0; 9642: 9642: const char_type* __beg = __testin ? this->eback() : this->pbase(); 9642: if ((__beg || !off_type(__sp)) && (__testin || __testout)) 9642: { 9642: _M_update_egptr(); 9642: 9642: const off_type __pos(__sp); 9642: const bool __testpos = (0 <= __pos 9642: && __pos <= this->egptr() - __beg); 9642: if (__testpos) 9642: { 9642: if (__testin) 9642: this->setg(this->eback(), this->eback() + __pos, 9642: this->egptr()); 9642: if (__testout) 9642: _M_pbump(this->pbase(), this->epptr(), __pos); 9642: __ret = __sp; 9642: } 9642: } 9642: return __ret; 9642: } 9642: 9642: template 9642: void 9642: basic_stringbuf<_CharT, _Traits, _Alloc>:: 9642: _M_sync(char_type* __base, __size_type __i, __size_type __o) 9642: { 9642: const bool __testin = _M_mode & ios_base::in; 9642: const bool __testout = _M_mode & ios_base::out; 9642: char_type* __endg = __base + _M_string.size(); 9642: char_type* __endp = __base + _M_string.capacity(); 9642: 9642: if (__base != _M_string.data()) 9642: { 9642: 9642: __endg += __i; 9642: __i = 0; 9642: __endp = __endg; 9642: } 9642: 9642: if (__testin) 9642: this->setg(__base, __base + __i, __endg); 9642: if (__testout) 9642: { 9642: _M_pbump(__base, __endp, __o); 9642: 9642: 9642: 9642: if (!__testin) 9642: this->setg(__endg, __endg, __endg); 9642: } 9642: } 9642: 9642: template 9642: void 9642: basic_stringbuf<_CharT, _Traits, _Alloc>:: 9642: _M_pbump(char_type* __pbeg, char_type* __pend, off_type __off) 9642: { 9642: this->setp(__pbeg, __pend); 9642: while (__off > __gnu_cxx::__numeric_traits::__max) 9642: { 9642: this->pbump(__gnu_cxx::__numeric_traits::__max); 9642: __off -= __gnu_cxx::__numeric_traits::__max; 9642: } 9642: this->pbump(__off); 9642: } 9642: 9642: 9642: 9642: 9642: extern template class basic_stringbuf; 9642: extern template class basic_istringstream; 9642: extern template class basic_ostringstream; 9642: extern template class basic_stringstream; 9642: 9642: 9642: extern template class basic_stringbuf; 9642: extern template class basic_istringstream; 9642: extern template class basic_ostringstream; 9642: extern template class basic_stringstream; 9642: 9642: 9642: 9642: 9642: } 9642: # 1239 "/usr/include/c++/13/sstream" 2 3 9642: # 16 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 2 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 1 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/cstdarg" 1 3 9642: # 39 "/usr/include/c++/13/cstdarg" 3 9642: 9642: # 40 "/usr/include/c++/13/cstdarg" 3 9642: 9642: 9642: 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stdarg.h" 1 3 4 9642: # 44 "/usr/include/c++/13/cstdarg" 2 3 9642: # 53 "/usr/include/c++/13/cstdarg" 3 9642: namespace std 9642: { 9642: using ::va_list; 9642: } 9642: # 22 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 2 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/functor_wrapper.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 14 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/functor_wrapper.h" 9642: namespace rocksdb { 9642: 9642: namespace detail { 9642: template 9642: struct IndexSequence {}; 9642: 9642: template 9642: struct IndexSequenceHelper 9642: : public IndexSequenceHelper {}; 9642: 9642: template 9642: struct IndexSequenceHelper<0U, Next...> { 9642: using type = IndexSequence; 9642: }; 9642: 9642: template 9642: using make_index_sequence = typename IndexSequenceHelper::type; 9642: 9642: template 9642: void call(Function f, Tuple t, IndexSequence) { 9642: f(std::get(t)...); 9642: } 9642: 9642: template 9642: void call(Function f, Tuple t) { 9642: static constexpr auto size = std::tuple_size::value; 9642: call(f, t, make_index_sequence{}); 9642: } 9642: } 9642: 9642: template 9642: class FunctorWrapper { 9642: public: 9642: explicit FunctorWrapper(std::function functor, Args &&...args) 9642: : functor_(std::move(functor)), args_(std::forward(args)...) {} 9642: 9642: void invoke() { detail::call(functor_, args_); } 9642: 9642: private: 9642: std::function functor_; 9642: std::tuple args_; 9642: }; 9642: } 9642: # 30 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 2 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/thread_status.h" 1 9642: # 14 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/thread_status.h" 9642: 9642: # 29 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/thread_status.h" 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: template 9642: struct constexpr_max { 9642: static const int result = (A > B) ? A : B; 9642: }; 9642: 9642: 9642: 9642: 9642: struct ThreadStatus { 9642: 9642: enum ThreadType : int { 9642: HIGH_PRIORITY = 0, 9642: LOW_PRIORITY, 9642: USER, 9642: BOTTOM_PRIORITY, 9642: NUM_THREAD_TYPES 9642: }; 9642: 9642: 9642: 9642: 9642: enum OperationType : int { 9642: OP_UNKNOWN = 0, 9642: OP_COMPACTION, 9642: OP_FLUSH, 9642: OP_DBOPEN, 9642: OP_GET, 9642: OP_MULTIGET, 9642: OP_DBITERATOR, 9642: OP_VERIFY_DB_CHECKSUM, 9642: OP_VERIFY_FILE_CHECKSUMS, 9642: OP_GETENTITY, 9642: OP_MULTIGETENTITY, 9642: NUM_OP_TYPES 9642: }; 9642: 9642: enum OperationStage : int { 9642: STAGE_UNKNOWN = 0, 9642: STAGE_FLUSH_RUN, 9642: STAGE_FLUSH_WRITE_L0, 9642: STAGE_COMPACTION_PREPARE, 9642: STAGE_COMPACTION_RUN, 9642: STAGE_COMPACTION_PROCESS_KV, 9642: STAGE_COMPACTION_INSTALL, 9642: STAGE_COMPACTION_SYNC_FILE, 9642: STAGE_PICK_MEMTABLES_TO_FLUSH, 9642: STAGE_MEMTABLE_ROLLBACK, 9642: STAGE_MEMTABLE_INSTALL_FLUSH_RESULTS, 9642: NUM_OP_STAGES 9642: }; 9642: 9642: enum CompactionPropertyType : int { 9642: COMPACTION_JOB_ID = 0, 9642: COMPACTION_INPUT_OUTPUT_LEVEL, 9642: COMPACTION_PROP_FLAGS, 9642: COMPACTION_TOTAL_INPUT_BYTES, 9642: COMPACTION_BYTES_READ, 9642: COMPACTION_BYTES_WRITTEN, 9642: NUM_COMPACTION_PROPERTIES 9642: }; 9642: 9642: enum FlushPropertyType : int { 9642: FLUSH_JOB_ID = 0, 9642: FLUSH_BYTES_MEMTABLES, 9642: FLUSH_BYTES_WRITTEN, 9642: NUM_FLUSH_PROPERTIES 9642: }; 9642: 9642: 9642: 9642: static const int kNumOperationProperties = 9642: constexpr_max::result; 9642: 9642: 9642: 9642: 9642: enum StateType : int { 9642: STATE_UNKNOWN = 0, 9642: STATE_MUTEX_WAIT = 1, 9642: NUM_STATE_TYPES 9642: }; 9642: 9642: ThreadStatus(const uint64_t _id, const ThreadType _thread_type, 9642: const std::string& _db_name, const std::string& _cf_name, 9642: const OperationType _operation_type, 9642: const uint64_t _op_elapsed_micros, 9642: const OperationStage _operation_stage, 9642: const uint64_t _op_props[], const StateType _state_type) 9642: : thread_id(_id), 9642: thread_type(_thread_type), 9642: db_name(_db_name), 9642: cf_name(_cf_name), 9642: operation_type(_operation_type), 9642: op_elapsed_micros(_op_elapsed_micros), 9642: operation_stage(_operation_stage), 9642: state_type(_state_type) { 9642: for (int i = 0; i < kNumOperationProperties; ++i) { 9642: op_properties[i] = _op_props[i]; 9642: } 9642: } 9642: 9642: 9642: const uint64_t thread_id; 9642: 9642: 9642: 9642: const ThreadType thread_type; 9642: 9642: 9642: 9642: 9642: const std::string db_name; 9642: 9642: 9642: 9642: 9642: const std::string cf_name; 9642: 9642: 9642: const OperationType operation_type; 9642: 9642: 9642: const uint64_t op_elapsed_micros; 9642: 9642: 9642: 9642: const OperationStage operation_stage; 9642: 9642: 9642: 9642: 9642: uint64_t op_properties[kNumOperationProperties]; 9642: 9642: 9642: const StateType state_type; 9642: 9642: 9642: 9642: 9642: static std::string GetThreadTypeName(ThreadType thread_type); 9642: 9642: 9642: static const std::string& GetOperationName(OperationType op_type); 9642: 9642: static const std::string MicrosToString(uint64_t op_elapsed_time); 9642: 9642: 9642: static const std::string& GetOperationStageName(OperationStage stage); 9642: 9642: 9642: 9642: static const std::string& GetOperationPropertyName(OperationType op_type, 9642: int i); 9642: 9642: 9642: 9642: static std::map InterpretOperationProperties( 9642: OperationType op_type, const uint64_t* op_properties); 9642: 9642: 9642: static const std::string& GetStateName(StateType state_type); 9642: }; 9642: 9642: } 9642: # 33 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 2 9642: # 48 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: namespace rocksdb { 9642: 9642: class DynamicLibrary; 9642: class FileLock; 9642: class Logger; 9642: class RandomAccessFile; 9642: class SequentialFile; 9642: class Slice; 9642: struct DataVerificationInfo; 9642: class WritableFile; 9642: class RandomRWFile; 9642: class MemoryMappedFileBuffer; 9642: class Directory; 9642: struct DBOptions; 9642: struct ImmutableDBOptions; 9642: struct MutableDBOptions; 9642: class RateLimiter; 9642: class ThreadStatusUpdater; 9642: struct ThreadStatus; 9642: class FileSystem; 9642: class SystemClock; 9642: struct ConfigOptions; 9642: struct IOOptions; 9642: 9642: const size_t kDefaultPageSize = 4 * 1024; 9642: 9642: 9642: struct EnvOptions { 9642: 9642: EnvOptions(); 9642: 9642: 9642: explicit EnvOptions(const DBOptions& options); 9642: 9642: 9642: 9642: bool use_mmap_reads = false; 9642: 9642: 9642: bool use_mmap_writes = true; 9642: 9642: 9642: bool use_direct_reads = false; 9642: 9642: 9642: bool use_direct_writes = false; 9642: 9642: 9642: bool allow_fallocate = true; 9642: 9642: 9642: bool set_fd_cloexec = true; 9642: 9642: 9642: 9642: 9642: 9642: uint64_t bytes_per_sync = 0; 9642: # 122 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: bool strict_bytes_per_sync = false; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool fallocate_with_keep_size = true; 9642: 9642: 9642: size_t compaction_readahead_size = 0; 9642: 9642: 9642: size_t random_access_max_buffer_size = 0; 9642: 9642: 9642: size_t writable_file_max_buffer_size = 1024 * 1024; 9642: 9642: 9642: RateLimiter* rate_limiter = nullptr; 9642: }; 9642: 9642: 9642: 9642: 9642: class Env : public Customizable { 9642: public: 9642: static const char* kDefaultName() { return "DefaultEnv"; } 9642: struct FileAttributes { 9642: 9642: std::string name; 9642: 9642: 9642: uint64_t size_bytes; 9642: }; 9642: 9642: Env(); 9642: 9642: 9642: explicit Env(const std::shared_ptr& fs); 9642: Env(const std::shared_ptr& fs, 9642: const std::shared_ptr& clock); 9642: 9642: Env(const Env&) = delete; 9642: void operator=(const Env&) = delete; 9642: 9642: ~Env() override; 9642: 9642: static const char* Type() { return "Environment"; } 9642: 9642: 9642: 9642: const char* Name() const override { return ""; } 9642: # 190 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: static Status CreateFromString(const ConfigOptions& config_options, 9642: const std::string& value, Env** result); 9642: static Status CreateFromString(const ConfigOptions& config_options, 9642: const std::string& value, Env** result, 9642: std::shared_ptr* guard); 9642: 9642: 9642: 9642: 9642: 9642: static Status CreateFromUri(const ConfigOptions& options, 9642: const std::string& env_uri, 9642: const std::string& fs_uri, Env** result, 9642: std::shared_ptr* guard); 9642: 9642: 9642: 9642: 9642: 9642: 9642: static Env* Default(); 9642: 9642: 9642: virtual Status RegisterDbPaths(const std::vector& ) { 9642: return Status::OK(); 9642: } 9642: 9642: virtual Status UnregisterDbPaths(const std::vector& ) { 9642: return Status::OK(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status NewSequentialFile(const std::string& fname, 9642: std::unique_ptr* result, 9642: const EnvOptions& options) = 0; 9642: # 238 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: virtual Status NewRandomAccessFile(const std::string& fname, 9642: std::unique_ptr* result, 9642: const EnvOptions& options) = 0; 9642: 9642: 9642: enum WriteLifeTimeHint { 9642: WLTH_NOT_SET = 0, 9642: WLTH_NONE, 9642: WLTH_SHORT, 9642: WLTH_MEDIUM, 9642: WLTH_LONG, 9642: WLTH_EXTREME, 9642: }; 9642: # 259 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: virtual Status NewWritableFile(const std::string& fname, 9642: std::unique_ptr* result, 9642: const EnvOptions& options) = 0; 9642: # 271 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: virtual Status ReopenWritableFile(const std::string& , 9642: std::unique_ptr* , 9642: const EnvOptions& ) { 9642: return Status::NotSupported("Env::ReopenWritableFile() not supported."); 9642: } 9642: 9642: 9642: virtual Status ReuseWritableFile(const std::string& fname, 9642: const std::string& old_fname, 9642: std::unique_ptr* result, 9642: const EnvOptions& options); 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status NewRandomRWFile(const std::string& , 9642: std::unique_ptr* , 9642: const EnvOptions& ) { 9642: return Status::NotSupported("RandomRWFile is not implemented in this Env"); 9642: } 9642: 9642: 9642: 9642: 9642: virtual Status NewMemoryMappedFileBuffer( 9642: const std::string& , 9642: std::unique_ptr* ) { 9642: return Status::NotSupported( 9642: "MemoryMappedFileBuffer is not implemented in this Env"); 9642: } 9642: # 311 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: virtual Status NewDirectory(const std::string& name, 9642: std::unique_ptr* result) = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status FileExists(const std::string& fname) = 0; 9642: # 329 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: virtual Status GetChildren(const std::string& dir, 9642: std::vector* result) = 0; 9642: # 343 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: virtual Status GetChildrenFileAttributes(const std::string& dir, 9642: std::vector* result); 9642: 9642: 9642: virtual Status DeleteFile(const std::string& fname) = 0; 9642: 9642: 9642: virtual Status Truncate(const std::string& , size_t ) { 9642: return Status::NotSupported("Truncate is not supported for this Env"); 9642: } 9642: 9642: 9642: virtual Status CreateDir(const std::string& dirname) = 0; 9642: 9642: 9642: 9642: virtual Status CreateDirIfMissing(const std::string& dirname) = 0; 9642: 9642: 9642: 9642: 9642: virtual Status DeleteDir(const std::string& dirname) = 0; 9642: 9642: 9642: virtual Status GetFileSize(const std::string& fname, uint64_t* file_size) = 0; 9642: 9642: 9642: virtual Status GetFileModificationTime(const std::string& fname, 9642: uint64_t* file_mtime) = 0; 9642: 9642: virtual Status RenameFile(const std::string& src, 9642: const std::string& target) = 0; 9642: 9642: 9642: virtual Status LinkFile(const std::string& , 9642: const std::string& ) { 9642: return Status::NotSupported("LinkFile is not supported for this Env"); 9642: } 9642: 9642: virtual Status NumFileLinks(const std::string& , 9642: uint64_t* ) { 9642: return Status::NotSupported( 9642: "Getting number of file links is not supported for this Env"); 9642: } 9642: 9642: virtual Status AreFilesSame(const std::string& , 9642: const std::string& , bool* ) { 9642: return Status::NotSupported("AreFilesSame is not supported for this Env"); 9642: } 9642: # 407 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: virtual Status LockFile(const std::string& fname, FileLock** lock) = 0; 9642: 9642: 9642: 9642: 9642: virtual Status UnlockFile(FileLock* lock) = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status LoadLibrary(const std::string& , 9642: const std::string& , 9642: std::shared_ptr* ) { 9642: return Status::NotSupported("LoadLibrary is not implemented in this Env"); 9642: } 9642: 9642: 9642: enum Priority { BOTTOM, LOW, HIGH, USER, TOTAL }; 9642: 9642: static std::string PriorityToString(Priority priority); 9642: 9642: 9642: enum IOPriority { 9642: IO_LOW = 0, 9642: IO_MID = 1, 9642: IO_HIGH = 2, 9642: IO_USER = 3, 9642: IO_TOTAL = 4 9642: }; 9642: 9642: 9642: enum class IOActivity : uint8_t { 9642: kFlush = 0, 9642: kCompaction = 1, 9642: kDBOpen = 2, 9642: kGet = 3, 9642: kMultiGet = 4, 9642: kDBIterator = 5, 9642: kVerifyDBChecksum = 6, 9642: kVerifyFileChecksums = 7, 9642: kGetEntity = 8, 9642: kMultiGetEntity = 9, 9642: kUnknown, 9642: }; 9642: # 465 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: virtual void Schedule(void (*function)(void* arg), void* arg, 9642: Priority pri = LOW, void* tag = nullptr, 9642: void (*unschedFunction)(void* arg) = nullptr) = 0; 9642: 9642: 9642: 9642: virtual int UnSchedule(void* , Priority ) { return 0; } 9642: 9642: 9642: 9642: virtual void StartThread(void (*function)(void* arg), void* arg) = 0; 9642: 9642: 9642: 9642: template 9642: void StartThreadTyped(FunctionT function, Args&&... args) { 9642: using FWType = FunctorWrapper; 9642: StartThread( 9642: [](void* arg) { 9642: auto* functor = static_cast(arg); 9642: functor->invoke(); 9642: delete functor; 9642: }, 9642: new FWType(std::function(function), 9642: std::forward(args)...)); 9642: } 9642: 9642: 9642: virtual void WaitForJoin() {} 9642: 9642: 9642: virtual int ReserveThreads(int , Priority ) { 9642: return 0; 9642: } 9642: 9642: 9642: 9642: virtual int ReleaseThreads(int , Priority ) { 9642: return 0; 9642: } 9642: 9642: 9642: virtual unsigned int GetThreadPoolQueueLen(Priority = LOW) const { 9642: return 0; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: virtual Status GetTestDirectory(std::string* path) = 0; 9642: 9642: 9642: 9642: 9642: virtual Status NewLogger(const std::string& fname, 9642: std::shared_ptr* result); 9642: 9642: 9642: 9642: 9642: virtual uint64_t NowMicros() = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual uint64_t NowNanos() { return NowMicros() * 1000; } 9642: 9642: 9642: virtual uint64_t NowCPUNanos() { return 0; } 9642: 9642: 9642: virtual void SleepForMicroseconds(int micros) = 0; 9642: 9642: 9642: 9642: virtual Status GetHostName(char* name, uint64_t len) = 0; 9642: 9642: 9642: 9642: 9642: virtual Status GetHostNameString(std::string* result); 9642: 9642: 9642: 9642: virtual Status GetCurrentTime(int64_t* unix_time) = 0; 9642: 9642: 9642: virtual Status GetAbsolutePath(const std::string& db_path, 9642: std::string* output_path) = 0; 9642: 9642: 9642: 9642: 9642: virtual void SetBackgroundThreads(int number, Priority pri = LOW) = 0; 9642: virtual int GetBackgroundThreads(Priority pri = LOW) = 0; 9642: 9642: virtual Status SetAllowNonOwnerAccess(bool ) { 9642: return Status::NotSupported("Env::SetAllowNonOwnerAccess() not supported."); 9642: } 9642: 9642: 9642: 9642: 9642: virtual void IncBackgroundThreadsIfNeeded(int number, Priority pri) = 0; 9642: 9642: 9642: virtual void LowerThreadPoolIOPriority(Priority = LOW) {} 9642: 9642: 9642: virtual Status LowerThreadPoolCPUPriority(Priority , 9642: CpuPriority ) { 9642: return Status::NotSupported( 9642: "Env::LowerThreadPoolCPUPriority(Priority, CpuPriority) not supported"); 9642: } 9642: 9642: 9642: virtual void LowerThreadPoolCPUPriority(Priority = LOW) {} 9642: 9642: 9642: virtual std::string TimeToString(uint64_t time) = 0; 9642: 9642: 9642: 9642: 9642: 9642: virtual std::string GenerateUniqueId(); 9642: 9642: 9642: 9642: virtual EnvOptions OptimizeForLogRead(const EnvOptions& env_options) const; 9642: 9642: 9642: 9642: 9642: virtual EnvOptions OptimizeForManifestRead( 9642: const EnvOptions& env_options) const; 9642: 9642: 9642: 9642: 9642: virtual EnvOptions OptimizeForLogWrite(const EnvOptions& env_options, 9642: const DBOptions& db_options) const; 9642: 9642: 9642: 9642: virtual EnvOptions OptimizeForManifestWrite( 9642: const EnvOptions& env_options) const; 9642: 9642: 9642: 9642: 9642: virtual EnvOptions OptimizeForCompactionTableWrite( 9642: const EnvOptions& env_options, 9642: const ImmutableDBOptions& immutable_ops) const; 9642: 9642: 9642: 9642: 9642: virtual EnvOptions OptimizeForCompactionTableRead( 9642: const EnvOptions& env_options, 9642: const ImmutableDBOptions& db_options) const; 9642: 9642: 9642: 9642: 9642: virtual EnvOptions OptimizeForBlobFileRead( 9642: const EnvOptions& env_options, 9642: const ImmutableDBOptions& db_options) const; 9642: 9642: 9642: virtual Status GetThreadList(std::vector* ) { 9642: return Status::NotSupported("Env::GetThreadList() not supported."); 9642: } 9642: 9642: 9642: 9642: 9642: virtual ThreadStatusUpdater* GetThreadStatusUpdater() const { 9642: return thread_status_updater_; 9642: } 9642: 9642: 9642: virtual uint64_t GetThreadID() const; 9642: 9642: 9642: 9642: 9642: 9642: virtual Status GetFreeSpace(const std::string& , 9642: uint64_t* ) { 9642: return Status::NotSupported("Env::GetFreeSpace() not supported."); 9642: } 9642: 9642: 9642: virtual Status IsDirectory(const std::string& , bool* ) { 9642: return Status::NotSupported("Env::IsDirectory() not supported."); 9642: } 9642: 9642: virtual void SanitizeEnvOptions(EnvOptions* ) const {} 9642: 9642: 9642: 9642: const std::shared_ptr& GetFileSystem() const; 9642: 9642: 9642: 9642: const std::shared_ptr& GetSystemClock() const; 9642: 9642: 9642: 9642: protected: 9642: 9642: 9642: ThreadStatusUpdater* thread_status_updater_; 9642: 9642: 9642: std::shared_ptr file_system_; 9642: 9642: 9642: std::shared_ptr system_clock_; 9642: 9642: private: 9642: static const size_t kMaxHostNameLen = 256; 9642: }; 9642: 9642: 9642: 9642: 9642: ThreadStatusUpdater* CreateThreadStatusUpdater(); 9642: 9642: 9642: class SequentialFile { 9642: public: 9642: SequentialFile() {} 9642: virtual ~SequentialFile(); 9642: # 716 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: virtual Status Read(size_t n, Slice* result, char* scratch) = 0; 9642: # 725 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: virtual Status Skip(uint64_t n) = 0; 9642: 9642: 9642: 9642: virtual bool use_direct_io() const { return false; } 9642: 9642: 9642: 9642: virtual size_t GetRequiredBufferAlignment() const { return kDefaultPageSize; } 9642: 9642: 9642: 9642: 9642: virtual Status InvalidateCache(size_t , size_t ) { 9642: return Status::NotSupported( 9642: "SequentialFile::InvalidateCache not supported."); 9642: } 9642: 9642: 9642: 9642: virtual Status PositionedRead(uint64_t , size_t , 9642: Slice* , char* ) { 9642: return Status::NotSupported( 9642: "SequentialFile::PositionedRead() not supported."); 9642: } 9642: 9642: 9642: 9642: }; 9642: 9642: 9642: struct ReadRequest { 9642: 9642: uint64_t offset; 9642: 9642: 9642: 9642: size_t len; 9642: 9642: 9642: 9642: char* scratch; 9642: 9642: 9642: 9642: Slice result; 9642: 9642: 9642: Status status; 9642: }; 9642: 9642: 9642: class RandomAccessFile { 9642: public: 9642: RandomAccessFile() {} 9642: virtual ~RandomAccessFile(); 9642: # 796 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: virtual Status Read(uint64_t offset, size_t n, Slice* result, 9642: char* scratch) const = 0; 9642: 9642: 9642: virtual Status Prefetch(uint64_t , size_t ) { 9642: return Status::OK(); 9642: } 9642: # 811 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: virtual Status MultiRead(ReadRequest* reqs, size_t num_reqs) { 9642: 9642: # 812 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 9642: (static_cast ( 9642: # 812 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: reqs != nullptr 9642: # 812 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 812 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: "reqs != nullptr" 9642: # 812 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 812 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: ; 9642: for (size_t i = 0; i < num_reqs; ++i) { 9642: ReadRequest& req = reqs[i]; 9642: req.status = Read(req.offset, req.len, &req.result, req.scratch); 9642: } 9642: return Status::OK(); 9642: } 9642: # 835 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: virtual size_t GetUniqueId(char* , size_t ) const { 9642: return 0; 9642: 9642: } 9642: 9642: enum AccessPattern { NORMAL, RANDOM, SEQUENTIAL, WILLNEED, DONTNEED }; 9642: 9642: virtual void Hint(AccessPattern ) {} 9642: 9642: 9642: 9642: virtual bool use_direct_io() const { return false; } 9642: 9642: 9642: 9642: virtual size_t GetRequiredBufferAlignment() const { return kDefaultPageSize; } 9642: 9642: 9642: 9642: 9642: virtual Status InvalidateCache(size_t , size_t ) { 9642: return Status::NotSupported( 9642: "RandomAccessFile::InvalidateCache not supported."); 9642: } 9642: 9642: 9642: 9642: }; 9642: 9642: 9642: 9642: 9642: class WritableFile { 9642: public: 9642: WritableFile() 9642: : last_preallocated_block_(0), 9642: preallocation_block_size_(0), 9642: io_priority_(Env::IO_TOTAL), 9642: write_hint_(Env::WLTH_NOT_SET), 9642: strict_bytes_per_sync_(false) {} 9642: 9642: explicit WritableFile(const EnvOptions& options) 9642: : last_preallocated_block_(0), 9642: preallocation_block_size_(0), 9642: io_priority_(Env::IO_TOTAL), 9642: write_hint_(Env::WLTH_NOT_SET), 9642: strict_bytes_per_sync_(options.strict_bytes_per_sync) {} 9642: 9642: WritableFile(const WritableFile&) = delete; 9642: void operator=(const WritableFile&) = delete; 9642: 9642: 9642: 9642: 9642: virtual ~WritableFile(); 9642: 9642: 9642: 9642: 9642: virtual Status Append(const Slice& data) = 0; 9642: # 903 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: virtual Status Append(const Slice& data, 9642: const DataVerificationInfo& ) { 9642: return Append(data); 9642: } 9642: # 928 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: virtual Status PositionedAppend(const Slice& , 9642: uint64_t ) { 9642: return Status::NotSupported( 9642: "WritableFile::PositionedAppend() not supported."); 9642: } 9642: # 941 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: virtual Status PositionedAppend( 9642: const Slice& , uint64_t , 9642: const DataVerificationInfo& ) { 9642: return Status::NotSupported("PositionedAppend"); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: virtual Status Truncate(uint64_t ) { return Status::OK(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status Close() = 0; 9642: virtual Status Flush() = 0; 9642: virtual Status Sync() = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status Fsync() { return Sync(); } 9642: 9642: 9642: 9642: virtual bool IsSyncThreadSafe() const { return false; } 9642: 9642: 9642: 9642: virtual bool use_direct_io() const { return false; } 9642: 9642: 9642: 9642: virtual size_t GetRequiredBufferAlignment() const { return kDefaultPageSize; } 9642: # 993 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: virtual void SetIOPriority(Env::IOPriority pri) { io_priority_ = pri; } 9642: 9642: virtual Env::IOPriority GetIOPriority() { return io_priority_; } 9642: 9642: virtual void SetWriteLifeTimeHint(Env::WriteLifeTimeHint hint) { 9642: write_hint_ = hint; 9642: } 9642: 9642: virtual Env::WriteLifeTimeHint GetWriteLifeTimeHint() { return write_hint_; } 9642: 9642: 9642: 9642: virtual uint64_t GetFileSize() = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void SetPreallocationBlockSize(size_t size) { 9642: preallocation_block_size_ = size; 9642: } 9642: 9642: virtual void GetPreallocationStatus(size_t* block_size, 9642: size_t* last_allocated_block) { 9642: *last_allocated_block = last_preallocated_block_; 9642: *block_size = preallocation_block_size_; 9642: } 9642: 9642: 9642: virtual size_t GetUniqueId(char* , size_t ) const { 9642: return 0; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: virtual Status InvalidateCache(size_t , size_t ) { 9642: return Status::NotSupported("WritableFile::InvalidateCache not supported."); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status RangeSync(uint64_t , uint64_t ) { 9642: if (strict_bytes_per_sync_) { 9642: return Sync(); 9642: } 9642: return Status::OK(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void PrepareWrite(size_t offset, size_t len) { 9642: if (preallocation_block_size_ == 0) { 9642: return; 9642: } 9642: 9642: 9642: 9642: const auto block_size = preallocation_block_size_; 9642: size_t new_last_preallocated_block = 9642: (offset + len + block_size - 1) / block_size; 9642: if (new_last_preallocated_block > last_preallocated_block_) { 9642: size_t num_spanned_blocks = 9642: new_last_preallocated_block - last_preallocated_block_; 9642: 9642: Allocate(block_size * last_preallocated_block_, 9642: block_size * num_spanned_blocks) 9642: .PermitUncheckedError(); 9642: last_preallocated_block_ = new_last_preallocated_block; 9642: } 9642: } 9642: 9642: 9642: virtual Status Allocate(uint64_t , uint64_t ) { 9642: return Status::OK(); 9642: } 9642: 9642: 9642: 9642: 9642: protected: 9642: size_t preallocation_block_size() { return preallocation_block_size_; } 9642: 9642: private: 9642: size_t last_preallocated_block_; 9642: size_t preallocation_block_size_; 9642: 9642: protected: 9642: Env::IOPriority io_priority_; 9642: Env::WriteLifeTimeHint write_hint_; 9642: const bool strict_bytes_per_sync_; 9642: }; 9642: 9642: 9642: class RandomRWFile { 9642: public: 9642: RandomRWFile() {} 9642: 9642: RandomRWFile(const RandomRWFile&) = delete; 9642: RandomRWFile& operator=(const RandomRWFile&) = delete; 9642: 9642: 9642: 9642: 9642: virtual ~RandomRWFile() {} 9642: 9642: 9642: 9642: virtual bool use_direct_io() const { return false; } 9642: 9642: 9642: 9642: virtual size_t GetRequiredBufferAlignment() const { return kDefaultPageSize; } 9642: 9642: 9642: 9642: virtual Status Write(uint64_t offset, const Slice& data) = 0; 9642: # 1129 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: virtual Status Read(uint64_t offset, size_t n, Slice* result, 9642: char* scratch) const = 0; 9642: 9642: virtual Status Flush() = 0; 9642: 9642: virtual Status Sync() = 0; 9642: 9642: virtual Status Fsync() { return Sync(); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status Close() = 0; 9642: 9642: 9642: 9642: }; 9642: 9642: 9642: 9642: class MemoryMappedFileBuffer { 9642: public: 9642: MemoryMappedFileBuffer(void* _base, size_t _length) 9642: : base_(_base), length_(_length) {} 9642: 9642: virtual ~MemoryMappedFileBuffer() = 0; 9642: 9642: 9642: 9642: MemoryMappedFileBuffer(const MemoryMappedFileBuffer&) = delete; 9642: MemoryMappedFileBuffer& operator=(const MemoryMappedFileBuffer&) = delete; 9642: 9642: void* GetBase() const { return base_; } 9642: size_t GetLen() const { return length_; } 9642: 9642: protected: 9642: void* base_; 9642: const size_t length_; 9642: }; 9642: 9642: 9642: 9642: class Directory { 9642: public: 9642: 9642: 9642: virtual ~Directory() {} 9642: 9642: virtual Status Fsync() = 0; 9642: 9642: 9642: 9642: virtual Status Close() { return Status::NotSupported("Close"); } 9642: 9642: virtual size_t GetUniqueId(char* , size_t ) const { 9642: return 0; 9642: } 9642: 9642: 9642: 9642: }; 9642: 9642: enum InfoLogLevel : unsigned char { 9642: DEBUG_LEVEL = 0, 9642: INFO_LEVEL, 9642: WARN_LEVEL, 9642: ERROR_LEVEL, 9642: FATAL_LEVEL, 9642: HEADER_LEVEL, 9642: NUM_INFO_LOG_LEVELS, 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: class Logger { 9642: public: 9642: static constexpr size_t kDoNotSupportGetLogFileSize = 9642: # 1210 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 9642: (4294967295U) 9642: # 1210 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: ; 9642: 9642: 9642: 9642: static const InfoLogLevel kDefaultLogLevel; 9642: 9642: explicit Logger(const InfoLogLevel log_level = InfoLogLevel::INFO_LEVEL) 9642: : closed_(false), log_level_(log_level) {} 9642: 9642: Logger(const Logger&) = delete; 9642: void operator=(const Logger&) = delete; 9642: 9642: virtual ~Logger(); 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status Close(); 9642: 9642: 9642: 9642: 9642: virtual void LogHeader(const char* format, va_list ap) { 9642: 9642: 9642: Logv(InfoLogLevel::INFO_LEVEL, format, ap); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void Logv(const char* , va_list ) { 9642: 9642: # 1246 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 9642: (static_cast ( 9642: # 1246 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: false 9642: # 1246 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1246 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: "false" 9642: # 1246 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1246 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: ; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: virtual void Logv(const InfoLogLevel log_level, const char* format, 9642: va_list ap); 9642: 9642: virtual size_t GetLogFileSize() const { return kDoNotSupportGetLogFileSize; } 9642: 9642: virtual void Flush() {} 9642: virtual InfoLogLevel GetInfoLogLevel() const { return log_level_; } 9642: virtual void SetInfoLogLevel(const InfoLogLevel log_level) { 9642: log_level_ = log_level; 9642: } 9642: 9642: 9642: 9642: protected: 9642: virtual Status CloseImpl(); 9642: bool closed_; 9642: 9642: private: 9642: InfoLogLevel log_level_; 9642: }; 9642: 9642: 9642: 9642: 9642: class FileLock { 9642: public: 9642: FileLock() {} 9642: virtual ~FileLock(); 9642: 9642: private: 9642: 9642: FileLock(const FileLock&) = delete; 9642: void operator=(const FileLock&) = delete; 9642: }; 9642: 9642: class DynamicLibrary { 9642: public: 9642: virtual ~DynamicLibrary() {} 9642: 9642: 9642: virtual const char* Name() const = 0; 9642: 9642: 9642: 9642: template 9642: Status LoadFunction(const std::string& sym_name, std::function* function) { 9642: 9642: # 1299 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 9642: (static_cast ( 9642: # 1299 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: nullptr != function 9642: # 1299 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1299 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: "nullptr != function" 9642: # 1299 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1299 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: ; 9642: void* ptr = nullptr; 9642: Status s = LoadSymbol(sym_name, &ptr); 9642: *function = reinterpret_cast(ptr); 9642: return s; 9642: } 9642: 9642: virtual Status LoadSymbol(const std::string& sym_name, void** func) = 0; 9642: }; 9642: 9642: void LogFlush(const std::shared_ptr& info_log); 9642: 9642: void Log(const InfoLogLevel log_level, const std::shared_ptr& info_log, 9642: const char* format, ...) __attribute__((__format__(__printf__, 3, 4))); 9642: 9642: 9642: void Header(const std::shared_ptr& info_log, const char* format, ...) 9642: __attribute__((__format__(__printf__, 2, 3))); 9642: void Debug(const std::shared_ptr& info_log, const char* format, ...) 9642: __attribute__((__format__(__printf__, 2, 3))); 9642: void Info(const std::shared_ptr& info_log, const char* format, ...) 9642: __attribute__((__format__(__printf__, 2, 3))); 9642: void Warn(const std::shared_ptr& info_log, const char* format, ...) 9642: __attribute__((__format__(__printf__, 2, 3))); 9642: void Error(const std::shared_ptr& info_log, const char* format, ...) 9642: __attribute__((__format__(__printf__, 2, 3))); 9642: void Fatal(const std::shared_ptr& info_log, const char* format, ...) 9642: __attribute__((__format__(__printf__, 2, 3))); 9642: 9642: 9642: 9642: void Log(const std::shared_ptr& info_log, const char* format, ...) 9642: __attribute__((__format__(__printf__, 2, 3))); 9642: 9642: void LogFlush(Logger* info_log); 9642: 9642: void Log(const InfoLogLevel log_level, Logger* info_log, const char* format, 9642: ...) __attribute__((__format__(__printf__, 3, 4))); 9642: 9642: 9642: void Log(Logger* info_log, const char* format, ...) 9642: __attribute__((__format__(__printf__, 2, 3))); 9642: 9642: 9642: void Header(Logger* info_log, const char* format, ...) 9642: __attribute__((__format__(__printf__, 2, 3))); 9642: void Debug(Logger* info_log, const char* format, ...) 9642: __attribute__((__format__(__printf__, 2, 3))); 9642: void Info(Logger* info_log, const char* format, ...) 9642: __attribute__((__format__(__printf__, 2, 3))); 9642: void Warn(Logger* info_log, const char* format, ...) 9642: __attribute__((__format__(__printf__, 2, 3))); 9642: void Error(Logger* info_log, const char* format, ...) 9642: __attribute__((__format__(__printf__, 2, 3))); 9642: void Fatal(Logger* info_log, const char* format, ...) 9642: __attribute__((__format__(__printf__, 2, 3))); 9642: 9642: 9642: Status WriteStringToFile(Env* env, const Slice& data, const std::string& fname, 9642: bool should_sync = false, 9642: const IOOptions* io_options = nullptr); 9642: 9642: 9642: Status ReadFileToString(Env* env, const std::string& fname, std::string* data); 9642: # 1392 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 9642: class EnvWrapper : public Env { 9642: public: 9642: 9642: 9642: 9642: 9642: 9642: struct Target { 9642: Env* env; 9642: std::shared_ptr guard; 9642: 9642: 9642: explicit Target(Env* t) : env(t) {} 9642: 9642: 9642: explicit Target(std::unique_ptr&& t) : guard(t.release()) { 9642: env = guard.get(); 9642: } 9642: 9642: 9642: explicit Target(const std::shared_ptr& t) : guard(t) { 9642: env = guard.get(); 9642: } 9642: 9642: 9642: void Prepare() { 9642: if (guard.get() != nullptr) { 9642: env = guard.get(); 9642: } else if (env == nullptr) { 9642: env = Env::Default(); 9642: } 9642: } 9642: }; 9642: 9642: 9642: explicit EnvWrapper(Env* t); 9642: explicit EnvWrapper(std::unique_ptr&& t); 9642: explicit EnvWrapper(const std::shared_ptr& t); 9642: ~EnvWrapper() override; 9642: 9642: 9642: Env* target() const { return target_.env; } 9642: 9642: 9642: 9642: const char* Name() const override { return target_.env->Name(); } 9642: 9642: 9642: Status RegisterDbPaths(const std::vector& paths) override { 9642: return target_.env->RegisterDbPaths(paths); 9642: } 9642: 9642: Status UnregisterDbPaths(const std::vector& paths) override { 9642: return target_.env->UnregisterDbPaths(paths); 9642: } 9642: 9642: Status NewSequentialFile(const std::string& f, 9642: std::unique_ptr* r, 9642: const EnvOptions& options) override { 9642: return target_.env->NewSequentialFile(f, r, options); 9642: } 9642: Status NewRandomAccessFile(const std::string& f, 9642: std::unique_ptr* r, 9642: const EnvOptions& options) override { 9642: return target_.env->NewRandomAccessFile(f, r, options); 9642: } 9642: Status NewWritableFile(const std::string& f, std::unique_ptr* r, 9642: const EnvOptions& options) override { 9642: return target_.env->NewWritableFile(f, r, options); 9642: } 9642: Status ReopenWritableFile(const std::string& fname, 9642: std::unique_ptr* result, 9642: const EnvOptions& options) override { 9642: return target_.env->ReopenWritableFile(fname, result, options); 9642: } 9642: Status ReuseWritableFile(const std::string& fname, 9642: const std::string& old_fname, 9642: std::unique_ptr* r, 9642: const EnvOptions& options) override { 9642: return target_.env->ReuseWritableFile(fname, old_fname, r, options); 9642: } 9642: Status NewRandomRWFile(const std::string& fname, 9642: std::unique_ptr* result, 9642: const EnvOptions& options) override { 9642: return target_.env->NewRandomRWFile(fname, result, options); 9642: } 9642: Status NewMemoryMappedFileBuffer( 9642: const std::string& fname, 9642: std::unique_ptr* result) override { 9642: return target_.env->NewMemoryMappedFileBuffer(fname, result); 9642: } 9642: Status NewDirectory(const std::string& name, 9642: std::unique_ptr* result) override { 9642: return target_.env->NewDirectory(name, result); 9642: } 9642: Status FileExists(const std::string& f) override { 9642: return target_.env->FileExists(f); 9642: } 9642: Status GetChildren(const std::string& dir, 9642: std::vector* r) override { 9642: return target_.env->GetChildren(dir, r); 9642: } 9642: Status GetChildrenFileAttributes( 9642: const std::string& dir, std::vector* result) override { 9642: return target_.env->GetChildrenFileAttributes(dir, result); 9642: } 9642: Status DeleteFile(const std::string& f) override { 9642: return target_.env->DeleteFile(f); 9642: } 9642: Status Truncate(const std::string& fname, size_t size) override { 9642: return target_.env->Truncate(fname, size); 9642: } 9642: Status CreateDir(const std::string& d) override { 9642: return target_.env->CreateDir(d); 9642: } 9642: Status CreateDirIfMissing(const std::string& d) override { 9642: return target_.env->CreateDirIfMissing(d); 9642: } 9642: Status DeleteDir(const std::string& d) override { 9642: return target_.env->DeleteDir(d); 9642: } 9642: Status GetFileSize(const std::string& f, uint64_t* s) override { 9642: return target_.env->GetFileSize(f, s); 9642: } 9642: 9642: Status GetFileModificationTime(const std::string& fname, 9642: uint64_t* file_mtime) override { 9642: return target_.env->GetFileModificationTime(fname, file_mtime); 9642: } 9642: 9642: Status RenameFile(const std::string& s, const std::string& t) override { 9642: return target_.env->RenameFile(s, t); 9642: } 9642: 9642: Status LinkFile(const std::string& s, const std::string& t) override { 9642: return target_.env->LinkFile(s, t); 9642: } 9642: 9642: Status NumFileLinks(const std::string& fname, uint64_t* count) override { 9642: return target_.env->NumFileLinks(fname, count); 9642: } 9642: 9642: Status AreFilesSame(const std::string& first, const std::string& second, 9642: bool* res) override { 9642: return target_.env->AreFilesSame(first, second, res); 9642: } 9642: 9642: Status LockFile(const std::string& f, FileLock** l) override { 9642: return target_.env->LockFile(f, l); 9642: } 9642: 9642: Status UnlockFile(FileLock* l) override { return target_.env->UnlockFile(l); } 9642: 9642: Status IsDirectory(const std::string& path, bool* is_dir) override { 9642: return target_.env->IsDirectory(path, is_dir); 9642: } 9642: 9642: Status LoadLibrary(const std::string& lib_name, 9642: const std::string& search_path, 9642: std::shared_ptr* result) override { 9642: return target_.env->LoadLibrary(lib_name, search_path, result); 9642: } 9642: 9642: void Schedule(void (*f)(void* arg), void* a, Priority pri, 9642: void* tag = nullptr, void (*u)(void* arg) = nullptr) override { 9642: return target_.env->Schedule(f, a, pri, tag, u); 9642: } 9642: 9642: int UnSchedule(void* tag, Priority pri) override { 9642: return target_.env->UnSchedule(tag, pri); 9642: } 9642: 9642: void StartThread(void (*f)(void*), void* a) override { 9642: return target_.env->StartThread(f, a); 9642: } 9642: void WaitForJoin() override { return target_.env->WaitForJoin(); } 9642: unsigned int GetThreadPoolQueueLen(Priority pri = LOW) const override { 9642: return target_.env->GetThreadPoolQueueLen(pri); 9642: } 9642: 9642: int ReserveThreads(int threads_to_be_reserved, Priority pri) override { 9642: return target_.env->ReserveThreads(threads_to_be_reserved, pri); 9642: } 9642: 9642: int ReleaseThreads(int threads_to_be_released, Priority pri) override { 9642: return target_.env->ReleaseThreads(threads_to_be_released, pri); 9642: } 9642: 9642: Status GetTestDirectory(std::string* path) override { 9642: return target_.env->GetTestDirectory(path); 9642: } 9642: Status NewLogger(const std::string& fname, 9642: std::shared_ptr* result) override { 9642: return target_.env->NewLogger(fname, result); 9642: } 9642: uint64_t NowMicros() override { return target_.env->NowMicros(); } 9642: uint64_t NowNanos() override { return target_.env->NowNanos(); } 9642: uint64_t NowCPUNanos() override { return target_.env->NowCPUNanos(); } 9642: 9642: void SleepForMicroseconds(int micros) override { 9642: target_.env->SleepForMicroseconds(micros); 9642: } 9642: Status GetHostName(char* name, uint64_t len) override { 9642: return target_.env->GetHostName(name, len); 9642: } 9642: Status GetCurrentTime(int64_t* unix_time) override { 9642: return target_.env->GetCurrentTime(unix_time); 9642: } 9642: Status GetAbsolutePath(const std::string& db_path, 9642: std::string* output_path) override { 9642: return target_.env->GetAbsolutePath(db_path, output_path); 9642: } 9642: void SetBackgroundThreads(int num, Priority pri) override { 9642: return target_.env->SetBackgroundThreads(num, pri); 9642: } 9642: int GetBackgroundThreads(Priority pri) override { 9642: return target_.env->GetBackgroundThreads(pri); 9642: } 9642: 9642: Status SetAllowNonOwnerAccess(bool allow_non_owner_access) override { 9642: return target_.env->SetAllowNonOwnerAccess(allow_non_owner_access); 9642: } 9642: 9642: void IncBackgroundThreadsIfNeeded(int num, Priority pri) override { 9642: return target_.env->IncBackgroundThreadsIfNeeded(num, pri); 9642: } 9642: 9642: void LowerThreadPoolIOPriority(Priority pool) override { 9642: target_.env->LowerThreadPoolIOPriority(pool); 9642: } 9642: 9642: void LowerThreadPoolCPUPriority(Priority pool) override { 9642: target_.env->LowerThreadPoolCPUPriority(pool); 9642: } 9642: 9642: Status LowerThreadPoolCPUPriority(Priority pool, CpuPriority pri) override { 9642: return target_.env->LowerThreadPoolCPUPriority(pool, pri); 9642: } 9642: 9642: std::string TimeToString(uint64_t time) override { 9642: return target_.env->TimeToString(time); 9642: } 9642: 9642: Status GetThreadList(std::vector* thread_list) override { 9642: return target_.env->GetThreadList(thread_list); 9642: } 9642: 9642: ThreadStatusUpdater* GetThreadStatusUpdater() const override { 9642: return target_.env->GetThreadStatusUpdater(); 9642: } 9642: 9642: uint64_t GetThreadID() const override { return target_.env->GetThreadID(); } 9642: 9642: std::string GenerateUniqueId() override { 9642: return target_.env->GenerateUniqueId(); 9642: } 9642: 9642: EnvOptions OptimizeForLogRead(const EnvOptions& env_options) const override { 9642: return target_.env->OptimizeForLogRead(env_options); 9642: } 9642: EnvOptions OptimizeForManifestRead( 9642: const EnvOptions& env_options) const override { 9642: return target_.env->OptimizeForManifestRead(env_options); 9642: } 9642: EnvOptions OptimizeForLogWrite(const EnvOptions& env_options, 9642: const DBOptions& db_options) const override { 9642: return target_.env->OptimizeForLogWrite(env_options, db_options); 9642: } 9642: EnvOptions OptimizeForManifestWrite( 9642: const EnvOptions& env_options) const override { 9642: return target_.env->OptimizeForManifestWrite(env_options); 9642: } 9642: EnvOptions OptimizeForCompactionTableWrite( 9642: const EnvOptions& env_options, 9642: const ImmutableDBOptions& immutable_ops) const override { 9642: return target_.env->OptimizeForCompactionTableWrite(env_options, 9642: immutable_ops); 9642: } 9642: EnvOptions OptimizeForCompactionTableRead( 9642: const EnvOptions& env_options, 9642: const ImmutableDBOptions& db_options) const override { 9642: return target_.env->OptimizeForCompactionTableRead(env_options, db_options); 9642: } 9642: EnvOptions OptimizeForBlobFileRead( 9642: const EnvOptions& env_options, 9642: const ImmutableDBOptions& db_options) const override { 9642: return target_.env->OptimizeForBlobFileRead(env_options, db_options); 9642: } 9642: Status GetFreeSpace(const std::string& path, uint64_t* diskfree) override { 9642: return target_.env->GetFreeSpace(path, diskfree); 9642: } 9642: void SanitizeEnvOptions(EnvOptions* env_opts) const override { 9642: target_.env->SanitizeEnvOptions(env_opts); 9642: } 9642: Status PrepareOptions(const ConfigOptions& options) override; 9642: std::string SerializeOptions(const ConfigOptions& config_options, 9642: const std::string& header) const override; 9642: 9642: private: 9642: Target target_; 9642: }; 9642: 9642: class SequentialFileWrapper : public SequentialFile { 9642: public: 9642: explicit SequentialFileWrapper(SequentialFile* target) : target_(target) {} 9642: 9642: Status Read(size_t n, Slice* result, char* scratch) override { 9642: return target_->Read(n, result, scratch); 9642: } 9642: Status Skip(uint64_t n) override { return target_->Skip(n); } 9642: bool use_direct_io() const override { return target_->use_direct_io(); } 9642: size_t GetRequiredBufferAlignment() const override { 9642: return target_->GetRequiredBufferAlignment(); 9642: } 9642: Status InvalidateCache(size_t offset, size_t length) override { 9642: return target_->InvalidateCache(offset, length); 9642: } 9642: Status PositionedRead(uint64_t offset, size_t n, Slice* result, 9642: char* scratch) override { 9642: return target_->PositionedRead(offset, n, result, scratch); 9642: } 9642: 9642: private: 9642: SequentialFile* target_; 9642: }; 9642: 9642: class RandomAccessFileWrapper : public RandomAccessFile { 9642: public: 9642: explicit RandomAccessFileWrapper(RandomAccessFile* target) 9642: : target_(target) {} 9642: 9642: Status Read(uint64_t offset, size_t n, Slice* result, 9642: char* scratch) const override { 9642: return target_->Read(offset, n, result, scratch); 9642: } 9642: Status MultiRead(ReadRequest* reqs, size_t num_reqs) override { 9642: return target_->MultiRead(reqs, num_reqs); 9642: } 9642: Status Prefetch(uint64_t offset, size_t n) override { 9642: return target_->Prefetch(offset, n); 9642: } 9642: size_t GetUniqueId(char* id, size_t max_size) const override { 9642: return target_->GetUniqueId(id, max_size); 9642: } 9642: void Hint(AccessPattern pattern) override { target_->Hint(pattern); } 9642: bool use_direct_io() const override { return target_->use_direct_io(); } 9642: size_t GetRequiredBufferAlignment() const override { 9642: return target_->GetRequiredBufferAlignment(); 9642: } 9642: Status InvalidateCache(size_t offset, size_t length) override { 9642: return target_->InvalidateCache(offset, length); 9642: } 9642: 9642: private: 9642: RandomAccessFile* target_; 9642: }; 9642: 9642: class WritableFileWrapper : public WritableFile { 9642: public: 9642: explicit WritableFileWrapper(WritableFile* t) : target_(t) {} 9642: 9642: Status Append(const Slice& data) override { return target_->Append(data); } 9642: Status Append(const Slice& data, 9642: const DataVerificationInfo& verification_info) override { 9642: return target_->Append(data, verification_info); 9642: } 9642: Status PositionedAppend(const Slice& data, uint64_t offset) override { 9642: return target_->PositionedAppend(data, offset); 9642: } 9642: Status PositionedAppend( 9642: const Slice& data, uint64_t offset, 9642: const DataVerificationInfo& verification_info) override { 9642: return target_->PositionedAppend(data, offset, verification_info); 9642: } 9642: Status Truncate(uint64_t size) override { return target_->Truncate(size); } 9642: Status Close() override { return target_->Close(); } 9642: Status Flush() override { return target_->Flush(); } 9642: Status Sync() override { return target_->Sync(); } 9642: Status Fsync() override { return target_->Fsync(); } 9642: bool IsSyncThreadSafe() const override { return target_->IsSyncThreadSafe(); } 9642: 9642: bool use_direct_io() const override { return target_->use_direct_io(); } 9642: 9642: size_t GetRequiredBufferAlignment() const override { 9642: return target_->GetRequiredBufferAlignment(); 9642: } 9642: 9642: void SetIOPriority(Env::IOPriority pri) override { 9642: target_->SetIOPriority(pri); 9642: } 9642: 9642: Env::IOPriority GetIOPriority() override { return target_->GetIOPriority(); } 9642: 9642: void SetWriteLifeTimeHint(Env::WriteLifeTimeHint hint) override { 9642: target_->SetWriteLifeTimeHint(hint); 9642: } 9642: 9642: Env::WriteLifeTimeHint GetWriteLifeTimeHint() override { 9642: return target_->GetWriteLifeTimeHint(); 9642: } 9642: 9642: uint64_t GetFileSize() override { return target_->GetFileSize(); } 9642: 9642: void SetPreallocationBlockSize(size_t size) override { 9642: target_->SetPreallocationBlockSize(size); 9642: } 9642: 9642: void GetPreallocationStatus(size_t* block_size, 9642: size_t* last_allocated_block) override { 9642: target_->GetPreallocationStatus(block_size, last_allocated_block); 9642: } 9642: 9642: size_t GetUniqueId(char* id, size_t max_size) const override { 9642: return target_->GetUniqueId(id, max_size); 9642: } 9642: 9642: Status InvalidateCache(size_t offset, size_t length) override { 9642: return target_->InvalidateCache(offset, length); 9642: } 9642: 9642: Status RangeSync(uint64_t offset, uint64_t nbytes) override { 9642: return target_->RangeSync(offset, nbytes); 9642: } 9642: 9642: void PrepareWrite(size_t offset, size_t len) override { 9642: target_->PrepareWrite(offset, len); 9642: } 9642: 9642: Status Allocate(uint64_t offset, uint64_t len) override { 9642: return target_->Allocate(offset, len); 9642: } 9642: 9642: private: 9642: WritableFile* target_; 9642: }; 9642: 9642: class RandomRWFileWrapper : public RandomRWFile { 9642: public: 9642: explicit RandomRWFileWrapper(RandomRWFile* target) : target_(target) {} 9642: 9642: bool use_direct_io() const override { return target_->use_direct_io(); } 9642: size_t GetRequiredBufferAlignment() const override { 9642: return target_->GetRequiredBufferAlignment(); 9642: } 9642: Status Write(uint64_t offset, const Slice& data) override { 9642: return target_->Write(offset, data); 9642: } 9642: Status Read(uint64_t offset, size_t n, Slice* result, 9642: char* scratch) const override { 9642: return target_->Read(offset, n, result, scratch); 9642: } 9642: Status Flush() override { return target_->Flush(); } 9642: Status Sync() override { return target_->Sync(); } 9642: Status Fsync() override { return target_->Fsync(); } 9642: Status Close() override { return target_->Close(); } 9642: 9642: private: 9642: RandomRWFile* target_; 9642: }; 9642: 9642: class DirectoryWrapper : public Directory { 9642: public: 9642: explicit DirectoryWrapper(Directory* target) : target_(target) {} 9642: 9642: Status Fsync() override { return target_->Fsync(); } 9642: Status Close() override { return target_->Close(); } 9642: size_t GetUniqueId(char* id, size_t max_size) const override { 9642: return target_->GetUniqueId(id, max_size); 9642: } 9642: 9642: private: 9642: Directory* target_; 9642: }; 9642: 9642: class LoggerWrapper : public Logger { 9642: public: 9642: explicit LoggerWrapper(Logger* target) : target_(target) {} 9642: 9642: Status Close() override { return target_->Close(); } 9642: void LogHeader(const char* format, va_list ap) override { 9642: return target_->LogHeader(format, ap); 9642: } 9642: void Logv(const char* format, va_list ap) override { 9642: return target_->Logv(format, ap); 9642: } 9642: void Logv(const InfoLogLevel log_level, const char* format, 9642: va_list ap) override { 9642: return target_->Logv(log_level, format, ap); 9642: } 9642: size_t GetLogFileSize() const override { return target_->GetLogFileSize(); } 9642: void Flush() override { return target_->Flush(); } 9642: InfoLogLevel GetInfoLogLevel() const override { 9642: return target_->GetInfoLogLevel(); 9642: } 9642: void SetInfoLogLevel(const InfoLogLevel log_level) override { 9642: return target_->SetInfoLogLevel(log_level); 9642: } 9642: 9642: private: 9642: Logger* target_; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: Env* NewMemEnv(Env* base_env); 9642: 9642: 9642: 9642: 9642: Env* NewTimedEnv(Env* base_env); 9642: 9642: 9642: 9642: 9642: Status NewEnvLogger(const std::string& fname, Env* env, 9642: std::shared_ptr* result); 9642: 9642: 9642: 9642: std::unique_ptr NewCompositeEnv(const std::shared_ptr& fs); 9642: 9642: } 9642: # 22 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 1 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/cstdarg" 1 3 9642: # 39 "/usr/include/c++/13/cstdarg" 3 9642: 9642: # 40 "/usr/include/c++/13/cstdarg" 3 9642: # 23 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 2 9642: # 33 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 1 9642: # 14 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/cstring" 1 3 9642: # 39 "/usr/include/c++/13/cstring" 3 9642: 9642: # 40 "/usr/include/c++/13/cstring" 3 9642: # 23 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 2 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class IOStatus : public Status { 9642: public: 9642: using Code = Status::Code; 9642: using SubCode = Status::SubCode; 9642: 9642: enum IOErrorScope : unsigned char { 9642: kIOErrorScopeFileSystem, 9642: kIOErrorScopeFile, 9642: kIOErrorScopeRange, 9642: kIOErrorScopeMax, 9642: }; 9642: 9642: 9642: IOStatus() : IOStatus(kOk, kNone) {} 9642: ~IOStatus() {} 9642: 9642: 9642: IOStatus(const IOStatus& s); 9642: IOStatus& operator=(const IOStatus& s); 9642: IOStatus(IOStatus&& s) noexcept; 9642: IOStatus& operator=(IOStatus&& s) noexcept; 9642: bool operator==(const IOStatus& rhs) const; 9642: bool operator!=(const IOStatus& rhs) const; 9642: 9642: void SetRetryable(bool retryable) { retryable_ = retryable; } 9642: void SetDataLoss(bool data_loss) { data_loss_ = data_loss; } 9642: void SetScope(IOErrorScope scope) { 9642: scope_ = static_cast(scope); 9642: } 9642: 9642: bool GetRetryable() const { return retryable_; } 9642: bool GetDataLoss() const { return data_loss_; } 9642: IOErrorScope GetScope() const { return static_cast(scope_); } 9642: 9642: 9642: static IOStatus OK() { return IOStatus(); } 9642: 9642: static IOStatus NotSupported(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return IOStatus(kNotSupported, msg, msg2); 9642: } 9642: static IOStatus NotSupported(SubCode msg = kNone) { 9642: return IOStatus(kNotSupported, msg); 9642: } 9642: 9642: 9642: static IOStatus NotFound(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return IOStatus(kNotFound, msg, msg2); 9642: } 9642: 9642: static IOStatus NotFound(SubCode msg = kNone) { 9642: return IOStatus(kNotFound, msg); 9642: } 9642: 9642: static IOStatus Corruption(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return IOStatus(kCorruption, msg, msg2); 9642: } 9642: static IOStatus Corruption(SubCode msg = kNone) { 9642: return IOStatus(kCorruption, msg); 9642: } 9642: 9642: static IOStatus InvalidArgument(const Slice& msg, 9642: const Slice& msg2 = Slice()) { 9642: return IOStatus(kInvalidArgument, msg, msg2); 9642: } 9642: static IOStatus InvalidArgument(SubCode msg = kNone) { 9642: return IOStatus(kInvalidArgument, msg); 9642: } 9642: 9642: static IOStatus IOError(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return IOStatus(kIOError, msg, msg2); 9642: } 9642: static IOStatus IOError(SubCode msg = kNone) { 9642: return IOStatus(kIOError, msg); 9642: } 9642: 9642: static IOStatus Busy(SubCode msg = kNone) { return IOStatus(kBusy, msg); } 9642: static IOStatus Busy(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return IOStatus(kBusy, msg, msg2); 9642: } 9642: 9642: static IOStatus TimedOut(SubCode msg = kNone) { 9642: return IOStatus(kTimedOut, msg); 9642: } 9642: static IOStatus TimedOut(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return IOStatus(kTimedOut, msg, msg2); 9642: } 9642: 9642: static IOStatus NoSpace() { return IOStatus(kIOError, kNoSpace); } 9642: static IOStatus NoSpace(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return IOStatus(kIOError, kNoSpace, msg, msg2); 9642: } 9642: 9642: static IOStatus PathNotFound() { return IOStatus(kIOError, kPathNotFound); } 9642: static IOStatus PathNotFound(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return IOStatus(kIOError, kPathNotFound, msg, msg2); 9642: } 9642: 9642: static IOStatus IOFenced() { return IOStatus(kIOError, kIOFenced); } 9642: static IOStatus IOFenced(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return IOStatus(kIOError, kIOFenced, msg, msg2); 9642: } 9642: 9642: static IOStatus Aborted(SubCode msg = kNone) { 9642: return IOStatus(kAborted, msg); 9642: } 9642: static IOStatus Aborted(const Slice& msg, const Slice& msg2 = Slice()) { 9642: return IOStatus(kAborted, msg, msg2); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: private: 9642: friend IOStatus status_to_io_status(Status&&); 9642: 9642: explicit IOStatus(Code _code, SubCode _subcode = kNone) 9642: : Status(_code, _subcode, false, false, kIOErrorScopeFileSystem) {} 9642: 9642: IOStatus(Code _code, SubCode _subcode, const Slice& msg, const Slice& msg2); 9642: IOStatus(Code _code, const Slice& msg, const Slice& msg2) 9642: : IOStatus(_code, kNone, msg, msg2) {} 9642: }; 9642: 9642: inline IOStatus::IOStatus(Code _code, SubCode _subcode, const Slice& msg, 9642: const Slice& msg2) 9642: : Status(_code, _subcode, false, false, kIOErrorScopeFileSystem) { 9642: 9642: # 155 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 3 4 9642: (static_cast ( 9642: # 155 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 9642: code_ != kOk 9642: # 155 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 155 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 9642: "code_ != kOk" 9642: # 155 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 155 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 9642: ; 9642: 9642: # 156 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 3 4 9642: (static_cast ( 9642: # 156 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 9642: subcode_ != kMaxSubCode 9642: # 156 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 156 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 9642: "subcode_ != kMaxSubCode" 9642: # 156 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 156 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 9642: ; 9642: const size_t len1 = msg.size(); 9642: const size_t len2 = msg2.size(); 9642: const size_t size = len1 + (len2 ? (2 + len2) : 0); 9642: char* const result = new char[size + 1]; 9642: memcpy(result, msg.data(), len1); 9642: if (len2) { 9642: result[len1] = ':'; 9642: result[len1 + 1] = ' '; 9642: memcpy(result + len1 + 2, msg2.data(), len2); 9642: } 9642: result[size] = '\0'; 9642: state_.reset(result); 9642: } 9642: 9642: inline IOStatus::IOStatus(const IOStatus& s) : Status(s.code_, s.subcode_) { 9642: 9642: 9642: 9642: retryable_ = s.retryable_; 9642: data_loss_ = s.data_loss_; 9642: scope_ = s.scope_; 9642: state_ = (s.state_ == nullptr) ? nullptr : CopyState(s.state_.get()); 9642: } 9642: inline IOStatus& IOStatus::operator=(const IOStatus& s) { 9642: 9642: 9642: if (this != &s) { 9642: 9642: 9642: 9642: 9642: code_ = s.code_; 9642: subcode_ = s.subcode_; 9642: retryable_ = s.retryable_; 9642: data_loss_ = s.data_loss_; 9642: scope_ = s.scope_; 9642: state_ = (s.state_ == nullptr) ? nullptr : CopyState(s.state_.get()); 9642: } 9642: return *this; 9642: } 9642: 9642: inline IOStatus::IOStatus(IOStatus&& s) noexcept : IOStatus() { 9642: *this = std::move(s); 9642: } 9642: 9642: inline IOStatus& IOStatus::operator=(IOStatus&& s) noexcept { 9642: if (this != &s) { 9642: 9642: 9642: 9642: 9642: code_ = std::move(s.code_); 9642: s.code_ = kOk; 9642: subcode_ = std::move(s.subcode_); 9642: s.subcode_ = kNone; 9642: retryable_ = s.retryable_; 9642: data_loss_ = s.data_loss_; 9642: scope_ = s.scope_; 9642: s.scope_ = kIOErrorScopeFileSystem; 9642: state_ = std::move(s.state_); 9642: } 9642: return *this; 9642: } 9642: 9642: inline bool IOStatus::operator==(const IOStatus& rhs) const { 9642: 9642: 9642: 9642: 9642: return (code_ == rhs.code_); 9642: } 9642: 9642: inline bool IOStatus::operator!=(const IOStatus& rhs) const { 9642: 9642: 9642: 9642: 9642: return !(*this == rhs); 9642: } 9642: 9642: inline IOStatus status_to_io_status(Status&& status) { 9642: IOStatus io_s; 9642: Status& s = io_s; 9642: s = std::move(status); 9642: return io_s; 9642: } 9642: 9642: } 9642: # 34 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 1 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: 9642: 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 12 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 2 9642: # 21 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 1 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 1 9642: # 12 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compression_type.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: 9642: 9642: enum CompressionType : unsigned char { 9642: 9642: 9642: kNoCompression = 0x0, 9642: kSnappyCompression = 0x1, 9642: kZlibCompression = 0x2, 9642: kBZip2Compression = 0x3, 9642: kLZ4Compression = 0x4, 9642: kLZ4HCCompression = 0x5, 9642: kXpressCompression = 0x6, 9642: kZSTD = 0x7, 9642: 9642: 9642: 9642: 9642: 9642: 9642: kZSTDNotFinalCompression = 0x40, 9642: 9642: 9642: kDisableCompressionOption = 0xff, 9642: }; 9642: 9642: 9642: struct CompressionOptions { 9642: # 53 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compression_type.h" 9642: static constexpr int kDefaultCompressionLevel = 32767; 9642: 9642: 9642: int window_bits = -14; 9642: # 68 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compression_type.h" 9642: int level = kDefaultCompressionLevel; 9642: 9642: 9642: int strategy = 0; 9642: # 93 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compression_type.h" 9642: uint32_t max_dict_bytes = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: uint32_t zstd_max_train_bytes = 0; 9642: # 113 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compression_type.h" 9642: uint32_t parallel_threads = 1; 9642: # 122 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compression_type.h" 9642: bool enabled = false; 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compression_type.h" 9642: uint64_t max_dict_buffer_bytes = 0; 9642: # 153 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compression_type.h" 9642: bool use_zstd_dict_trainer = true; 9642: # 168 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compression_type.h" 9642: int max_compressed_bytes_per_kb = 1024 * 7 / 8; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool checksum = false; 9642: 9642: 9642: 9642: 9642: void SetMinRatio(double min_ratio) { 9642: max_compressed_bytes_per_kb = static_cast(1024.0 / min_ratio + 0.5); 9642: } 9642: }; 9642: 9642: } 9642: # 20 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/assert.h" 1 3 4 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 2 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: namespace detail { 9642: int CountTrailingZeroBitsForSmallEnumSet(uint64_t); 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: class SmallEnumSet { 9642: private: 9642: using StateT = uint64_t; 9642: static constexpr int kStateBits = sizeof(StateT) * 8; 9642: static constexpr int kMaxMax = kStateBits - 1; 9642: static constexpr int kMaxValue = static_cast(MAX_ENUMERATOR); 9642: static_assert(kMaxValue >= 0); 9642: static_assert(kMaxValue <= kMaxMax); 9642: 9642: public: 9642: 9642: SmallEnumSet() : state_(0) {} 9642: 9642: template 9642: constexpr SmallEnumSet(const ENUM_TYPE e, TRest... rest) { 9642: *this = SmallEnumSet(rest...).With(e); 9642: } 9642: 9642: 9642: 9642: static constexpr SmallEnumSet All() { 9642: StateT tmp = StateT{1} << kMaxValue; 9642: return SmallEnumSet(RawStateMarker(), tmp | (tmp - 1)); 9642: } 9642: 9642: 9642: bool operator==(const SmallEnumSet& that) const { 9642: return this->state_ == that.state_; 9642: } 9642: bool operator!=(const SmallEnumSet& that) const { return !(*this == that); } 9642: 9642: 9642: 9642: 9642: bool Contains(const ENUM_TYPE e) const { 9642: int value = static_cast(e); 9642: 9642: # 62 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: (static_cast ( 9642: # 62 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: value >= 0 && value <= kMaxValue 9642: # 62 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 62 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: "value >= 0 && value <= kMaxValue" 9642: # 62 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 62 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: ; 9642: StateT tmp = 1; 9642: return state_ & (tmp << value); 9642: } 9642: 9642: bool empty() const { return state_ == 0; } 9642: 9642: 9642: class const_iterator { 9642: public: 9642: 9642: const_iterator(const const_iterator& that) = default; 9642: const_iterator& operator=(const const_iterator& that) = default; 9642: 9642: 9642: const_iterator(const_iterator&& that) noexcept = default; 9642: const_iterator& operator=(const_iterator&& that) noexcept = default; 9642: 9642: 9642: bool operator==(const const_iterator& that) const { 9642: 9642: # 82 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: (static_cast ( 9642: # 82 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: set_ == that.set_ 9642: # 82 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 82 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: "set_ == that.set_" 9642: # 82 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 82 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: ; 9642: return this->pos_ == that.pos_; 9642: } 9642: 9642: bool operator!=(const const_iterator& that) const { 9642: return !(*this == that); 9642: } 9642: 9642: 9642: const_iterator& operator++() { 9642: if (pos_ < kMaxValue) { 9642: pos_ = set_->SkipUnset(pos_ + 1); 9642: } else { 9642: pos_ = kStateBits; 9642: } 9642: return *this; 9642: } 9642: 9642: 9642: const_iterator operator++(int) { 9642: auto old = *this; 9642: ++*this; 9642: return old; 9642: } 9642: 9642: ENUM_TYPE operator*() const { 9642: 9642: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: (static_cast ( 9642: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: pos_ <= kMaxValue 9642: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: "pos_ <= kMaxValue" 9642: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: ; 9642: return static_cast(pos_); 9642: } 9642: 9642: private: 9642: friend class SmallEnumSet; 9642: const_iterator(const SmallEnumSet* set, int pos) : set_(set), pos_(pos) {} 9642: const SmallEnumSet* set_; 9642: int pos_; 9642: }; 9642: 9642: const_iterator begin() const { return const_iterator(this, SkipUnset(0)); } 9642: 9642: const_iterator end() const { return const_iterator(this, kStateBits); } 9642: 9642: 9642: 9642: 9642: 9642: bool Add(const ENUM_TYPE e) { 9642: int value = static_cast(e); 9642: 9642: # 129 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: (static_cast ( 9642: # 129 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: value >= 0 && value <= kMaxValue 9642: # 129 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 129 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: "value >= 0 && value <= kMaxValue" 9642: # 129 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 129 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: ; 9642: StateT old_state = state_; 9642: state_ |= (StateT{1} << value); 9642: return old_state != state_; 9642: } 9642: 9642: 9642: 9642: bool Remove(const ENUM_TYPE e) { 9642: int value = static_cast(e); 9642: 9642: # 139 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: (static_cast ( 9642: # 139 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: value >= 0 && value <= kMaxValue 9642: # 139 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 139 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: "value >= 0 && value <= kMaxValue" 9642: # 139 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 139 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: ; 9642: StateT old_state = state_; 9642: state_ &= ~(StateT{1} << value); 9642: return old_state != state_; 9642: } 9642: 9642: 9642: 9642: 9642: constexpr SmallEnumSet With(const ENUM_TYPE e) const { 9642: int value = static_cast(e); 9642: 9642: # 150 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: (static_cast ( 9642: # 150 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: value >= 0 && value <= kMaxValue 9642: # 150 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 150 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: "value >= 0 && value <= kMaxValue" 9642: # 150 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 150 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: ; 9642: return SmallEnumSet(RawStateMarker(), state_ | (StateT{1} << value)); 9642: } 9642: template 9642: constexpr SmallEnumSet With(const ENUM_TYPE e1, const ENUM_TYPE e2, 9642: TRest... rest) const { 9642: return With(e1).With(e2, rest...); 9642: } 9642: 9642: 9642: constexpr SmallEnumSet Without(const ENUM_TYPE e) const { 9642: int value = static_cast(e); 9642: 9642: # 162 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: (static_cast ( 9642: # 162 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: value >= 0 && value <= kMaxValue 9642: # 162 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 162 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: "value >= 0 && value <= kMaxValue" 9642: # 162 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 162 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 9642: ; 9642: return SmallEnumSet(RawStateMarker(), state_ & ~(StateT{1} << value)); 9642: } 9642: template 9642: constexpr SmallEnumSet Without(const ENUM_TYPE e1, const ENUM_TYPE e2, 9642: TRest... rest) const { 9642: return Without(e1).Without(e2, rest...); 9642: } 9642: 9642: private: 9642: int SkipUnset(int pos) const { 9642: StateT tmp = state_ >> pos; 9642: if (tmp == 0) { 9642: return kStateBits; 9642: } else { 9642: return pos + detail::CountTrailingZeroBitsForSmallEnumSet(tmp); 9642: } 9642: } 9642: struct RawStateMarker {}; 9642: explicit SmallEnumSet(RawStateMarker, StateT state) : state_(state) {} 9642: 9642: StateT state_; 9642: }; 9642: 9642: } 9642: # 21 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memory_allocator.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: 9642: class MemoryAllocator : public Customizable { 9642: public: 9642: static const char* Type() { return "MemoryAllocator"; } 9642: static Status CreateFromString(const ConfigOptions& options, 9642: const std::string& value, 9642: std::shared_ptr* result); 9642: 9642: 9642: virtual void* Allocate(size_t size) = 0; 9642: 9642: 9642: virtual void Deallocate(void* p) = 0; 9642: 9642: 9642: 9642: virtual size_t UsableSize(void* , size_t allocation_size) const { 9642: 9642: return allocation_size; 9642: } 9642: 9642: std::string GetId() const override { return GenerateIndividualId(); } 9642: }; 9642: 9642: struct JemallocAllocatorOptions { 9642: static const char* kName() { return "JemallocAllocatorOptions"; } 9642: 9642: 9642: 9642: 9642: 9642: bool limit_tcache_size = false; 9642: 9642: 9642: 9642: size_t tcache_size_lower_bound = 1024; 9642: 9642: 9642: 9642: size_t tcache_size_upper_bound = 16 * 1024; 9642: 9642: 9642: 9642: 9642: size_t num_arenas = 1; 9642: }; 9642: # 83 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memory_allocator.h" 9642: Status NewJemallocNodumpAllocator( 9642: const JemallocAllocatorOptions& options, 9642: std::shared_ptr* memory_allocator); 9642: 9642: } 9642: # 22 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: class Cache; 9642: struct ConfigOptions; 9642: class SecondaryCache; 9642: # 46 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 9642: using BlockCache = Cache; 9642: using RowCache = Cache; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: enum class CacheEntryRole { 9642: 9642: kDataBlock, 9642: 9642: kFilterBlock, 9642: 9642: kFilterMetaBlock, 9642: 9642: kDeprecatedFilterBlock, 9642: 9642: kIndexBlock, 9642: 9642: kOtherBlock, 9642: 9642: kWriteBuffer, 9642: 9642: 9642: kCompressionDictionaryBuildingBuffer, 9642: 9642: 9642: kFilterConstruction, 9642: 9642: kBlockBasedTableReader, 9642: 9642: kFileMetadata, 9642: 9642: kBlobValue, 9642: 9642: 9642: kBlobCache, 9642: 9642: 9642: kMisc, 9642: }; 9642: constexpr uint32_t kNumCacheEntryRoles = 9642: static_cast(CacheEntryRole::kMisc) + 1; 9642: 9642: 9642: const std::string& GetCacheEntryRoleName(CacheEntryRole); 9642: 9642: 9642: using CacheEntryRoleSet = SmallEnumSet; 9642: 9642: 9642: 9642: 9642: struct BlockCacheEntryStatsMapKeys { 9642: static const std::string& CacheId(); 9642: static const std::string& CacheCapacityBytes(); 9642: static const std::string& LastCollectionDurationSeconds(); 9642: static const std::string& LastCollectionAgeSeconds(); 9642: 9642: static std::string EntryCount(CacheEntryRole); 9642: static std::string UsedBytes(CacheEntryRole); 9642: static std::string UsedPercent(CacheEntryRole); 9642: }; 9642: 9642: extern const bool kDefaultToAdaptiveMutex; 9642: 9642: enum CacheMetadataChargePolicy { 9642: 9642: 9642: kDontChargeCacheMetadata, 9642: 9642: 9642: 9642: kFullChargeCacheMetadata 9642: }; 9642: const CacheMetadataChargePolicy kDefaultCacheMetadataChargePolicy = 9642: kFullChargeCacheMetadata; 9642: 9642: 9642: 9642: struct ShardedCacheOptions { 9642: 9642: 9642: 9642: size_t capacity = 0; 9642: 9642: 9642: 9642: 9642: 9642: int num_shard_bits = -1; 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool strict_capacity_limit = false; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: std::shared_ptr memory_allocator; 9642: 9642: 9642: CacheMetadataChargePolicy metadata_charge_policy = 9642: kDefaultCacheMetadataChargePolicy; 9642: 9642: 9642: 9642: std::shared_ptr secondary_cache; 9642: 9642: 9642: static constexpr int32_t kQuasiRandomHashSeed = -1; 9642: static constexpr int32_t kHostHashSeed = -2; 9642: # 190 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 9642: int32_t hash_seed = kHostHashSeed; 9642: 9642: ShardedCacheOptions() {} 9642: ShardedCacheOptions( 9642: size_t _capacity, int _num_shard_bits, bool _strict_capacity_limit, 9642: std::shared_ptr _memory_allocator = nullptr, 9642: CacheMetadataChargePolicy _metadata_charge_policy = 9642: kDefaultCacheMetadataChargePolicy) 9642: : capacity(_capacity), 9642: num_shard_bits(_num_shard_bits), 9642: strict_capacity_limit(_strict_capacity_limit), 9642: memory_allocator(std::move(_memory_allocator)), 9642: metadata_charge_policy(_metadata_charge_policy) {} 9642: 9642: virtual ~ShardedCacheOptions() = default; 9642: }; 9642: # 214 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 9642: struct LRUCacheOptions : public ShardedCacheOptions { 9642: # 237 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 9642: double high_pri_pool_ratio = 0.5; 9642: double low_pri_pool_ratio = 0.0; 9642: 9642: 9642: 9642: 9642: 9642: bool use_adaptive_mutex = kDefaultToAdaptiveMutex; 9642: 9642: LRUCacheOptions() {} 9642: LRUCacheOptions(size_t _capacity, int _num_shard_bits, 9642: bool _strict_capacity_limit, double _high_pri_pool_ratio, 9642: std::shared_ptr _memory_allocator = nullptr, 9642: bool _use_adaptive_mutex = kDefaultToAdaptiveMutex, 9642: CacheMetadataChargePolicy _metadata_charge_policy = 9642: kDefaultCacheMetadataChargePolicy, 9642: double _low_pri_pool_ratio = 0.0) 9642: : ShardedCacheOptions(_capacity, _num_shard_bits, _strict_capacity_limit, 9642: std::move(_memory_allocator), 9642: _metadata_charge_policy), 9642: high_pri_pool_ratio(_high_pri_pool_ratio), 9642: low_pri_pool_ratio(_low_pri_pool_ratio), 9642: use_adaptive_mutex(_use_adaptive_mutex) {} 9642: 9642: 9642: std::shared_ptr MakeSharedCache() const; 9642: 9642: 9642: 9642: std::shared_ptr MakeSharedRowCache() const; 9642: }; 9642: 9642: 9642: inline std::shared_ptr NewLRUCache( 9642: size_t capacity, int num_shard_bits = -1, 9642: bool strict_capacity_limit = false, double high_pri_pool_ratio = 0.5, 9642: std::shared_ptr memory_allocator = nullptr, 9642: bool use_adaptive_mutex = kDefaultToAdaptiveMutex, 9642: CacheMetadataChargePolicy metadata_charge_policy = 9642: kDefaultCacheMetadataChargePolicy, 9642: double low_pri_pool_ratio = 0.0) { 9642: return LRUCacheOptions(capacity, num_shard_bits, strict_capacity_limit, 9642: high_pri_pool_ratio, memory_allocator, 9642: use_adaptive_mutex, metadata_charge_policy, 9642: low_pri_pool_ratio) 9642: .MakeSharedCache(); 9642: } 9642: 9642: 9642: inline std::shared_ptr NewLRUCache(const LRUCacheOptions& cache_opts) { 9642: return cache_opts.MakeSharedCache(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: struct CompressedSecondaryCacheOptions : LRUCacheOptions { 9642: 9642: CompressionType compression_type = CompressionType::kLZ4Compression; 9642: 9642: 9642: CompressionOptions compression_opts; 9642: 9642: 9642: 9642: 9642: 9642: 9642: uint32_t compress_format_version = 2; 9642: 9642: 9642: 9642: bool enable_custom_split_merge = false; 9642: 9642: 9642: 9642: CacheEntryRoleSet do_not_compress_roles = {CacheEntryRole::kFilterBlock}; 9642: 9642: CompressedSecondaryCacheOptions() {} 9642: CompressedSecondaryCacheOptions( 9642: size_t _capacity, int _num_shard_bits, bool _strict_capacity_limit, 9642: double _high_pri_pool_ratio, double _low_pri_pool_ratio = 0.0, 9642: std::shared_ptr _memory_allocator = nullptr, 9642: bool _use_adaptive_mutex = kDefaultToAdaptiveMutex, 9642: CacheMetadataChargePolicy _metadata_charge_policy = 9642: kDefaultCacheMetadataChargePolicy, 9642: CompressionType _compression_type = CompressionType::kLZ4Compression, 9642: uint32_t _compress_format_version = 2, 9642: bool _enable_custom_split_merge = false, 9642: const CacheEntryRoleSet& _do_not_compress_roles = 9642: {CacheEntryRole::kFilterBlock}) 9642: : LRUCacheOptions(_capacity, _num_shard_bits, _strict_capacity_limit, 9642: _high_pri_pool_ratio, std::move(_memory_allocator), 9642: _use_adaptive_mutex, _metadata_charge_policy, 9642: _low_pri_pool_ratio), 9642: compression_type(_compression_type), 9642: compress_format_version(_compress_format_version), 9642: enable_custom_split_merge(_enable_custom_split_merge), 9642: do_not_compress_roles(_do_not_compress_roles) {} 9642: 9642: 9642: std::shared_ptr MakeSharedSecondaryCache() const; 9642: 9642: 9642: std::shared_ptr MakeSharedCache() const = delete; 9642: }; 9642: 9642: 9642: inline std::shared_ptr NewCompressedSecondaryCache( 9642: size_t capacity, int num_shard_bits = -1, 9642: bool strict_capacity_limit = false, double high_pri_pool_ratio = 0.5, 9642: double low_pri_pool_ratio = 0.0, 9642: std::shared_ptr memory_allocator = nullptr, 9642: bool use_adaptive_mutex = kDefaultToAdaptiveMutex, 9642: CacheMetadataChargePolicy metadata_charge_policy = 9642: kDefaultCacheMetadataChargePolicy, 9642: CompressionType compression_type = CompressionType::kLZ4Compression, 9642: uint32_t compress_format_version = 2, 9642: bool enable_custom_split_merge = false, 9642: const CacheEntryRoleSet& _do_not_compress_roles = { 9642: CacheEntryRole::kFilterBlock}) { 9642: return CompressedSecondaryCacheOptions( 9642: capacity, num_shard_bits, strict_capacity_limit, 9642: high_pri_pool_ratio, low_pri_pool_ratio, memory_allocator, 9642: use_adaptive_mutex, metadata_charge_policy, compression_type, 9642: compress_format_version, enable_custom_split_merge, 9642: _do_not_compress_roles) 9642: .MakeSharedSecondaryCache(); 9642: } 9642: 9642: 9642: inline std::shared_ptr NewCompressedSecondaryCache( 9642: const CompressedSecondaryCacheOptions& opts) { 9642: return opts.MakeSharedSecondaryCache(); 9642: } 9642: # 388 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 9642: struct HyperClockCacheOptions : public ShardedCacheOptions { 9642: # 425 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 9642: size_t estimated_entry_charge; 9642: # 442 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 9642: size_t min_avg_entry_charge = 450; 9642: # 479 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 9642: int eviction_effort_cap = 30; 9642: 9642: HyperClockCacheOptions( 9642: size_t _capacity, size_t _estimated_entry_charge, 9642: int _num_shard_bits = -1, bool _strict_capacity_limit = false, 9642: std::shared_ptr _memory_allocator = nullptr, 9642: CacheMetadataChargePolicy _metadata_charge_policy = 9642: kDefaultCacheMetadataChargePolicy) 9642: : ShardedCacheOptions(_capacity, _num_shard_bits, _strict_capacity_limit, 9642: std::move(_memory_allocator), 9642: _metadata_charge_policy), 9642: estimated_entry_charge(_estimated_entry_charge) {} 9642: 9642: 9642: std::shared_ptr MakeSharedCache() const; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: std::shared_ptr NewClockCache( 9642: size_t capacity, int num_shard_bits = -1, 9642: bool strict_capacity_limit = false, 9642: CacheMetadataChargePolicy metadata_charge_policy = 9642: kDefaultCacheMetadataChargePolicy); 9642: 9642: enum PrimaryCacheType { 9642: kCacheTypeLRU, 9642: kCacheTypeHCC, 9642: kCacheTypeMax, 9642: }; 9642: 9642: enum TieredAdmissionPolicy { 9642: 9642: kAdmPolicyAuto, 9642: 9642: 9642: 9642: kAdmPolicyPlaceholder, 9642: 9642: 9642: kAdmPolicyAllowCacheHits, 9642: 9642: 9642: 9642: kAdmPolicyThreeQueue, 9642: 9642: 9642: 9642: 9642: kAdmPolicyAllowAll, 9642: kAdmPolicyMax, 9642: }; 9642: # 543 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 9642: struct TieredCacheOptions { 9642: 9642: 9642: 9642: 9642: ShardedCacheOptions* cache_opts = nullptr; 9642: PrimaryCacheType cache_type = PrimaryCacheType::kCacheTypeLRU; 9642: TieredAdmissionPolicy adm_policy = TieredAdmissionPolicy::kAdmPolicyAuto; 9642: CompressedSecondaryCacheOptions comp_cache_opts; 9642: 9642: 9642: 9642: 9642: size_t total_capacity = 0; 9642: double compressed_secondary_ratio = 0.0; 9642: 9642: 9642: 9642: std::shared_ptr nvm_sec_cache; 9642: }; 9642: 9642: std::shared_ptr NewTieredCache(const TieredCacheOptions& cache_opts); 9642: # 575 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 9642: Status UpdateTieredCache( 9642: const std::shared_ptr& cache, int64_t total_capacity = -1, 9642: double compressed_secondary_ratio = std::numeric_limits::max(), 9642: TieredAdmissionPolicy adm_policy = TieredAdmissionPolicy::kAdmPolicyMax); 9642: } 9642: # 14 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 1 9642: # 36 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/stdlib.h" 1 3 9642: # 36 "/usr/include/c++/13/stdlib.h" 3 9642: # 1 "/usr/include/c++/13/cstdlib" 1 3 9642: # 39 "/usr/include/c++/13/cstdlib" 3 9642: 9642: # 40 "/usr/include/c++/13/cstdlib" 3 9642: # 37 "/usr/include/c++/13/stdlib.h" 2 3 9642: 9642: 9642: # 38 "/usr/include/c++/13/stdlib.h" 3 9642: using std::abort; 9642: using std::atexit; 9642: using std::exit; 9642: 9642: 9642: using std::at_quick_exit; 9642: 9642: 9642: using std::quick_exit; 9642: 9642: 9642: using std::_Exit; 9642: 9642: 9642: 9642: 9642: using std::div_t; 9642: using std::ldiv_t; 9642: 9642: using std::abs; 9642: using std::atof; 9642: using std::atoi; 9642: using std::atol; 9642: using std::bsearch; 9642: using std::calloc; 9642: using std::div; 9642: using std::free; 9642: using std::getenv; 9642: using std::labs; 9642: using std::ldiv; 9642: using std::malloc; 9642: 9642: using std::mblen; 9642: using std::mbstowcs; 9642: using std::mbtowc; 9642: 9642: using std::qsort; 9642: using std::rand; 9642: using std::realloc; 9642: using std::srand; 9642: using std::strtod; 9642: using std::strtol; 9642: using std::strtoul; 9642: using std::system; 9642: 9642: using std::wcstombs; 9642: using std::wctomb; 9642: # 40 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 2 9642: # 48 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 9642: 9642: # 48 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 9642: namespace rocksdb { 9642: 9642: class Arena; 9642: class Allocator; 9642: class LookupKey; 9642: class SliceTransform; 9642: class Logger; 9642: struct DBOptions; 9642: 9642: using KeyHandle = void*; 9642: 9642: Slice GetLengthPrefixedSlice(const char* data); 9642: 9642: class MemTableRep { 9642: public: 9642: 9642: 9642: class KeyComparator { 9642: public: 9642: using DecodedType = rocksdb::Slice; 9642: 9642: virtual DecodedType decode_key(const char* key) const { 9642: 9642: 9642: return GetLengthPrefixedSlice(key); 9642: } 9642: 9642: 9642: 9642: virtual int operator()(const char* prefix_len_key1, 9642: const char* prefix_len_key2) const = 0; 9642: 9642: virtual int operator()(const char* prefix_len_key, 9642: const Slice& key) const = 0; 9642: 9642: virtual ~KeyComparator() {} 9642: }; 9642: 9642: explicit MemTableRep(Allocator* allocator) : allocator_(allocator) {} 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual KeyHandle Allocate(const size_t len, char** buf); 9642: 9642: 9642: 9642: 9642: 9642: virtual void Insert(KeyHandle handle) = 0; 9642: 9642: 9642: 9642: 9642: virtual bool InsertKey(KeyHandle handle) { 9642: Insert(handle); 9642: return true; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void InsertWithHint(KeyHandle handle, void** ) { 9642: 9642: Insert(handle); 9642: } 9642: 9642: 9642: 9642: 9642: virtual bool InsertKeyWithHint(KeyHandle handle, void** hint) { 9642: InsertWithHint(handle, hint); 9642: return true; 9642: } 9642: # 137 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 9642: virtual void InsertWithHintConcurrently(KeyHandle handle, void** ) { 9642: 9642: InsertConcurrently(handle); 9642: } 9642: 9642: 9642: 9642: 9642: virtual bool InsertKeyWithHintConcurrently(KeyHandle handle, void** hint) { 9642: InsertWithHintConcurrently(handle, hint); 9642: return true; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void InsertConcurrently(KeyHandle handle); 9642: 9642: 9642: 9642: 9642: virtual bool InsertKeyConcurrently(KeyHandle handle) { 9642: InsertConcurrently(handle); 9642: return true; 9642: } 9642: 9642: 9642: virtual bool Contains(const char* key) const = 0; 9642: 9642: 9642: 9642: 9642: 9642: virtual void MarkReadOnly() {} 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void MarkFlushed() {} 9642: # 194 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 9642: virtual void Get(const LookupKey& k, void* callback_args, 9642: bool (*callback_func)(void* arg, const char* entry)); 9642: 9642: virtual uint64_t ApproximateNumEntries(const Slice& , 9642: const Slice& ) { 9642: return 0; 9642: } 9642: 9642: 9642: 9642: virtual void UniqueRandomSample(const uint64_t num_entries, 9642: const uint64_t target_sample_size, 9642: std::unordered_set* entries) { 9642: (void)num_entries; 9642: (void)target_sample_size; 9642: (void)entries; 9642: 9642: # 210 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 3 4 9642: (static_cast ( 9642: # 210 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 9642: false 9642: # 210 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 210 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 9642: "false" 9642: # 210 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 210 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 9642: ; 9642: } 9642: 9642: 9642: 9642: virtual size_t ApproximateMemoryUsage() = 0; 9642: 9642: virtual ~MemTableRep() {} 9642: 9642: 9642: class Iterator { 9642: public: 9642: 9642: 9642: 9642: virtual ~Iterator() {} 9642: 9642: 9642: virtual bool Valid() const = 0; 9642: 9642: 9642: 9642: virtual const char* key() const = 0; 9642: 9642: 9642: 9642: virtual void Next() = 0; 9642: 9642: 9642: 9642: virtual void Prev() = 0; 9642: 9642: 9642: virtual void Seek(const Slice& internal_key, const char* memtable_key) = 0; 9642: 9642: 9642: virtual void SeekForPrev(const Slice& internal_key, 9642: const char* memtable_key) = 0; 9642: 9642: virtual void RandomSeek() {} 9642: 9642: 9642: 9642: virtual void SeekToFirst() = 0; 9642: 9642: 9642: 9642: virtual void SeekToLast() = 0; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Iterator* GetIterator(Arena* arena = nullptr) = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Iterator* GetDynamicPrefixIterator(Arena* arena = nullptr) { 9642: return GetIterator(arena); 9642: } 9642: 9642: 9642: 9642: virtual bool IsMergeOperatorSupported() const { return true; } 9642: 9642: 9642: 9642: virtual bool IsSnapshotSupported() const { return true; } 9642: 9642: protected: 9642: 9642: 9642: virtual Slice UserKey(const char* key) const; 9642: 9642: Allocator* allocator_; 9642: }; 9642: 9642: 9642: 9642: class MemTableRepFactory : public Customizable { 9642: public: 9642: ~MemTableRepFactory() override {} 9642: 9642: static const char* Type() { return "MemTableRepFactory"; } 9642: static Status CreateFromString(const ConfigOptions& config_options, 9642: const std::string& id, 9642: std::unique_ptr* factory); 9642: static Status CreateFromString(const ConfigOptions& config_options, 9642: const std::string& id, 9642: std::shared_ptr* factory); 9642: 9642: virtual MemTableRep* CreateMemTableRep(const MemTableRep::KeyComparator&, 9642: Allocator*, const SliceTransform*, 9642: Logger* logger) = 0; 9642: virtual MemTableRep* CreateMemTableRep( 9642: const MemTableRep::KeyComparator& key_cmp, Allocator* allocator, 9642: const SliceTransform* slice_transform, Logger* logger, 9642: uint32_t ) { 9642: return CreateMemTableRep(key_cmp, allocator, slice_transform, logger); 9642: } 9642: 9642: const char* Name() const override = 0; 9642: 9642: 9642: 9642: virtual bool IsInsertConcurrentlySupported() const { return false; } 9642: 9642: 9642: 9642: 9642: 9642: virtual bool CanHandleDuplicatedKey() const { return false; } 9642: }; 9642: # 337 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 9642: class SkipListFactory : public MemTableRepFactory { 9642: public: 9642: explicit SkipListFactory(size_t lookahead = 0); 9642: 9642: 9642: static const char* kClassName() { return "SkipListFactory"; } 9642: static const char* kNickName() { return "skip_list"; } 9642: const char* Name() const override { return kClassName(); } 9642: const char* NickName() const override { return kNickName(); } 9642: std::string GetId() const override; 9642: 9642: 9642: using MemTableRepFactory::CreateMemTableRep; 9642: MemTableRep* CreateMemTableRep(const MemTableRep::KeyComparator&, Allocator*, 9642: const SliceTransform*, 9642: Logger* logger) override; 9642: 9642: bool IsInsertConcurrentlySupported() const override { return true; } 9642: 9642: bool CanHandleDuplicatedKey() const override { return true; } 9642: 9642: private: 9642: size_t lookahead_; 9642: }; 9642: # 370 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 9642: class VectorRepFactory : public MemTableRepFactory { 9642: size_t count_; 9642: 9642: public: 9642: explicit VectorRepFactory(size_t count = 0); 9642: 9642: 9642: static const char* kClassName() { return "VectorRepFactory"; } 9642: static const char* kNickName() { return "vector"; } 9642: const char* Name() const override { return kClassName(); } 9642: const char* NickName() const override { return kNickName(); } 9642: 9642: 9642: using MemTableRepFactory::CreateMemTableRep; 9642: MemTableRep* CreateMemTableRep(const MemTableRep::KeyComparator&, Allocator*, 9642: const SliceTransform*, 9642: Logger* logger) override; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: MemTableRepFactory* NewHashSkipListRepFactory( 9642: size_t bucket_count = 1000000, int32_t skiplist_height = 4, 9642: int32_t skiplist_branching_factor = 4); 9642: # 415 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 9642: MemTableRepFactory* NewHashLinkListRepFactory( 9642: size_t bucket_count = 50000, size_t huge_page_tlb_size = 0, 9642: int bucket_entries_logging_threshold = 4096, 9642: bool if_log_bucket_dist_when_flash = true, 9642: uint32_t threshold_use_skiplist = 256); 9642: 9642: } 9642: # 16 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/universal_compaction.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/climits" 1 3 9642: # 39 "/usr/include/c++/13/climits" 3 9642: 9642: # 40 "/usr/include/c++/13/climits" 3 9642: 9642: 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/limits.h" 1 3 4 9642: # 34 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/limits.h" 3 4 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/syslimits.h" 1 3 4 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/limits.h" 1 3 4 9642: # 205 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/limits.h" 3 4 9642: # 1 "/usr/include/limits.h" 1 3 4 9642: # 26 "/usr/include/limits.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 9642: # 27 "/usr/include/limits.h" 2 3 4 9642: # 195 "/usr/include/limits.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/posix1_lim.h" 1 3 4 9642: # 27 "/usr/include/arm-linux-gnueabihf/bits/posix1_lim.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 9642: # 28 "/usr/include/arm-linux-gnueabihf/bits/posix1_lim.h" 2 3 4 9642: # 161 "/usr/include/arm-linux-gnueabihf/bits/posix1_lim.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/local_lim.h" 1 3 4 9642: # 38 "/usr/include/arm-linux-gnueabihf/bits/local_lim.h" 3 4 9642: # 1 "/usr/include/linux/limits.h" 1 3 4 9642: # 39 "/usr/include/arm-linux-gnueabihf/bits/local_lim.h" 2 3 4 9642: # 162 "/usr/include/arm-linux-gnueabihf/bits/posix1_lim.h" 2 3 4 9642: # 196 "/usr/include/limits.h" 2 3 4 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/posix2_lim.h" 1 3 4 9642: # 200 "/usr/include/limits.h" 2 3 4 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/xopen_lim.h" 1 3 4 9642: # 64 "/usr/include/arm-linux-gnueabihf/bits/xopen_lim.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/uio_lim.h" 1 3 4 9642: # 65 "/usr/include/arm-linux-gnueabihf/bits/xopen_lim.h" 2 3 4 9642: # 204 "/usr/include/limits.h" 2 3 4 9642: # 206 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/limits.h" 2 3 4 9642: # 8 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/syslimits.h" 2 3 4 9642: # 35 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/limits.h" 2 3 4 9642: # 43 "/usr/include/c++/13/climits" 2 3 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/universal_compaction.h" 2 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: 9642: enum CompactionStopStyle { 9642: kCompactionStopStyleSimilarSize, 9642: kCompactionStopStyleTotalSize 9642: }; 9642: 9642: class CompactionOptionsUniversal { 9642: public: 9642: 9642: 9642: 9642: unsigned int size_ratio; 9642: 9642: 9642: unsigned int min_merge_width; 9642: 9642: 9642: unsigned int max_merge_width; 9642: # 48 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/universal_compaction.h" 9642: unsigned int max_size_amplification_percent; 9642: # 66 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/universal_compaction.h" 9642: int compression_size_percent; 9642: 9642: 9642: 9642: CompactionStopStyle stop_style; 9642: 9642: 9642: 9642: 9642: bool allow_trivial_move; 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool incremental; 9642: 9642: 9642: CompactionOptionsUniversal() 9642: : size_ratio(1), 9642: min_merge_width(2), 9642: max_merge_width( 9642: # 88 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/universal_compaction.h" 3 4 9642: (0x7fffffff * 2U + 1U) 9642: # 88 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/universal_compaction.h" 9642: ), 9642: max_size_amplification_percent(200), 9642: compression_size_percent(-1), 9642: stop_style(kCompactionStopStyleTotalSize), 9642: allow_trivial_move(false), 9642: incremental(false) {} 9642: }; 9642: 9642: } 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: class Slice; 9642: class SliceTransform; 9642: class TablePropertiesCollectorFactory; 9642: class TableFactory; 9642: struct Options; 9642: 9642: enum CompactionStyle : char { 9642: 9642: kCompactionStyleLevel = 0x0, 9642: 9642: kCompactionStyleUniversal = 0x1, 9642: 9642: kCompactionStyleFIFO = 0x2, 9642: 9642: 9642: kCompactionStyleNone = 0x3, 9642: }; 9642: 9642: 9642: 9642: 9642: enum CompactionPri : char { 9642: 9642: kByCompensatedSize = 0x0, 9642: 9642: 9642: kOldestLargestSeqFirst = 0x1, 9642: 9642: 9642: 9642: kOldestSmallestSeqFirst = 0x2, 9642: 9642: 9642: 9642: 9642: 9642: kMinOverlappingRatio = 0x3, 9642: 9642: 9642: 9642: 9642: kRoundRobin = 0x4, 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: enum class Temperature : uint8_t { 9642: kUnknown = 0, 9642: kHot = 0x04, 9642: kWarm = 0x08, 9642: kCold = 0x0C, 9642: kLastTemperature, 9642: }; 9642: 9642: struct FileTemperatureAge { 9642: Temperature temperature = Temperature::kUnknown; 9642: uint64_t age = 0; 9642: }; 9642: 9642: struct CompactionOptionsFIFO { 9642: 9642: 9642: 9642: uint64_t max_table_files_size; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool allow_compaction = false; 9642: 9642: 9642: 9642: 9642: uint64_t age_for_warm = 0; 9642: # 122 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: std::vector file_temperature_age_thresholds{}; 9642: 9642: CompactionOptionsFIFO() : max_table_files_size(1 * 1024 * 1024 * 1024) {} 9642: CompactionOptionsFIFO(uint64_t _max_table_files_size, bool _allow_compaction) 9642: : max_table_files_size(_max_table_files_size), 9642: allow_compaction(_allow_compaction) {} 9642: }; 9642: 9642: 9642: 9642: 9642: enum class CacheTier : uint8_t { 9642: kVolatileTier = 0, 9642: kVolatileCompressedTier = 0x01, 9642: kNonVolatileBlockTier = 0x02, 9642: }; 9642: 9642: enum UpdateStatus { 9642: UPDATE_FAILED = 0, 9642: UPDATED_INPLACE = 1, 9642: UPDATED = 2, 9642: }; 9642: 9642: enum class PrepopulateBlobCache : uint8_t { 9642: kDisable = 0x0, 9642: kFlushOnly = 0x1, 9642: }; 9642: 9642: struct AdvancedColumnFamilyOptions { 9642: # 162 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: int max_write_buffer_number = 2; 9642: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: int min_write_buffer_number_to_merge = 1; 9642: # 183 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: int max_write_buffer_number_to_maintain = 0; 9642: # 230 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: int64_t max_write_buffer_size_to_maintain = 0; 9642: # 251 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: bool inplace_update_support = false; 9642: 9642: 9642: 9642: 9642: 9642: size_t inplace_update_num_locks = 10000; 9642: # 274 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: double experimental_mempurge_threshold = 0.0; 9642: # 317 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: UpdateStatus (*inplace_callback)(char* existing_value, 9642: uint32_t* existing_value_size, 9642: Slice delta_value, 9642: std::string* merged_value) = nullptr; 9642: # 336 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: double memtable_prefix_bloom_size_ratio = 0.0; 9642: # 345 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: bool memtable_whole_key_filtering = false; 9642: # 357 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: size_t memtable_huge_page_size = 0; 9642: # 378 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: std::shared_ptr 9642: memtable_insert_with_hint_prefix_extractor = nullptr; 9642: 9642: 9642: 9642: 9642: 9642: 9642: uint32_t bloom_locality = 0; 9642: # 404 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: size_t arena_block_size = 0; 9642: # 435 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: std::vector compression_per_level; 9642: 9642: 9642: int num_levels = 7; 9642: # 447 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: int level0_slowdown_writes_trigger = 20; 9642: 9642: 9642: 9642: 9642: 9642: 9642: int level0_stop_writes_trigger = 36; 9642: # 468 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: uint64_t target_file_size_base = 64 * 1048576; 9642: 9642: 9642: 9642: 9642: 9642: int target_file_size_multiplier = 1; 9642: # 555 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: bool level_compaction_dynamic_level_bytes = true; 9642: 9642: 9642: 9642: 9642: double max_bytes_for_level_multiplier = 10; 9642: # 571 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: std::vector max_bytes_for_level_multiplier_additional = 9642: std::vector(static_cast(num_levels), 1); 9642: # 581 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: uint64_t max_compaction_bytes = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: uint64_t soft_pending_compaction_bytes_limit = 64 * 1073741824ull; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: uint64_t hard_pending_compaction_bytes_limit = 256 * 1073741824ull; 9642: 9642: 9642: CompactionStyle compaction_style = kCompactionStyleLevel; 9642: 9642: 9642: 9642: 9642: CompactionPri compaction_pri = kMinOverlappingRatio; 9642: 9642: 9642: 9642: 9642: 9642: 9642: CompactionOptionsUniversal compaction_options_universal; 9642: 9642: 9642: 9642: 9642: 9642: 9642: CompactionOptionsFIFO compaction_options_fifo; 9642: # 629 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: uint64_t max_sequential_skip_in_iterations = 8; 9642: 9642: 9642: 9642: 9642: std::shared_ptr memtable_factory = 9642: std::shared_ptr(new SkipListFactory); 9642: # 654 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: using TablePropertiesCollectorFactories = 9642: std::vector>; 9642: TablePropertiesCollectorFactories table_properties_collector_factories; 9642: # 670 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: size_t max_successive_merges = 0; 9642: # 680 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: bool strict_max_successive_merges = false; 9642: # 696 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: bool optimize_filters_for_hits = false; 9642: # 705 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: bool paranoid_file_checks = false; 9642: # 715 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: bool force_consistency_checks = true; 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool report_bg_io_stats = false; 9642: # 756 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: uint64_t ttl = 0xfffffffffffffffe; 9642: # 804 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: uint64_t periodic_compaction_seconds = 0xfffffffffffffffe; 9642: 9642: 9642: 9642: 9642: 9642: uint64_t sample_for_compression = 0; 9642: # 819 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: Temperature last_level_temperature = Temperature::kUnknown; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: Temperature default_write_temperature = Temperature::kUnknown; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: Temperature default_temperature = Temperature::kUnknown; 9642: # 852 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: uint64_t preclude_last_level_data_seconds = 0; 9642: # 875 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: uint64_t preserve_internal_time_seconds = 0; 9642: # 889 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: bool enable_blob_files = false; 9642: # 901 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: uint64_t min_blob_size = 0; 9642: # 910 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: uint64_t blob_file_size = 1ULL << 28; 9642: # 919 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: CompressionType blob_compression_type = kNoCompression; 9642: # 931 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: bool enable_blob_garbage_collection = false; 9642: # 942 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: double blob_garbage_collection_age_cutoff = 0.25; 9642: # 955 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: double blob_garbage_collection_force_threshold = 1.0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: uint64_t blob_compaction_readahead_size = 0; 9642: # 977 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: int blob_file_starting_level = 0; 9642: # 987 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: std::shared_ptr blob_cache = nullptr; 9642: # 998 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: PrepopulateBlobCache prepopulate_blob_cache = PrepopulateBlobCache::kDisable; 9642: # 1014 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: uint32_t memtable_protection_bytes_per_key = 0; 9642: # 1062 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: bool persist_user_defined_timestamps = true; 9642: # 1077 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: uint8_t block_protection_bytes_per_key = 0; 9642: # 1089 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 9642: uint32_t bottommost_file_compaction_delay = 0; 9642: 9642: 9642: AdvancedColumnFamilyOptions(); 9642: 9642: explicit AdvancedColumnFamilyOptions(const Options& options); 9642: 9642: 9642: }; 9642: 9642: } 9642: # 22 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 2 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_checksum.h" 1 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_checksum.h" 9642: 9642: 9642: # 1 "/usr/include/c++/13/cassert" 1 3 9642: # 41 "/usr/include/c++/13/cassert" 3 9642: 9642: # 42 "/usr/include/c++/13/cassert" 3 9642: 9642: 9642: # 1 "/usr/include/assert.h" 1 3 4 9642: # 45 "/usr/include/c++/13/cassert" 2 3 9642: # 12 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_checksum.h" 2 9642: # 20 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_checksum.h" 9642: namespace rocksdb { 9642: 9642: 9642: constexpr char kUnknownFileChecksum[] = ""; 9642: 9642: constexpr char kUnknownFileChecksumFuncName[] = "Unknown"; 9642: 9642: 9642: 9642: constexpr char kStandardDbFileChecksumFuncName[] = "FileChecksumCrc32c"; 9642: 9642: struct FileChecksumGenContext { 9642: std::string file_name; 9642: 9642: 9642: 9642: 9642: std::string requested_checksum_func_name; 9642: }; 9642: # 50 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_checksum.h" 9642: class FileChecksumGenerator { 9642: public: 9642: virtual ~FileChecksumGenerator() {} 9642: 9642: 9642: 9642: 9642: virtual void Update(const char* data, size_t n) = 0; 9642: 9642: 9642: virtual void Finalize() = 0; 9642: 9642: 9642: 9642: virtual std::string GetChecksum() const = 0; 9642: 9642: 9642: virtual const char* Name() const = 0; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: class FileChecksumGenFactory : public Customizable { 9642: public: 9642: ~FileChecksumGenFactory() override {} 9642: static const char* Type() { return "FileChecksumGenFactory"; } 9642: static Status CreateFromString( 9642: const ConfigOptions& options, const std::string& value, 9642: std::shared_ptr* result); 9642: 9642: 9642: virtual std::unique_ptr CreateFileChecksumGenerator( 9642: const FileChecksumGenContext& context) = 0; 9642: 9642: 9642: const char* Name() const override = 0; 9642: }; 9642: # 101 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_checksum.h" 9642: class FileChecksumList { 9642: public: 9642: virtual ~FileChecksumList() {} 9642: 9642: 9642: virtual void reset() = 0; 9642: 9642: 9642: virtual size_t size() const = 0; 9642: 9642: 9642: 9642: 9642: virtual Status GetAllFileChecksums( 9642: std::vector* file_numbers, std::vector* checksums, 9642: std::vector* checksum_func_names) = 0; 9642: 9642: 9642: 9642: virtual Status SearchOneFileChecksum(uint64_t file_number, 9642: std::string* checksum, 9642: std::string* checksum_func_name) = 0; 9642: 9642: 9642: virtual Status InsertOneFileChecksum( 9642: uint64_t file_number, const std::string& checksum, 9642: const std::string& checksum_func_name) = 0; 9642: 9642: 9642: virtual Status RemoveOneFileChecksum(uint64_t file_number) = 0; 9642: }; 9642: 9642: 9642: FileChecksumList* NewFileChecksumList(); 9642: # 143 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_checksum.h" 9642: extern std::shared_ptr 9642: GetFileChecksumGenCrc32cFactory(); 9642: 9642: } 9642: # 28 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 16 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_job_stats.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 8 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_job_stats.h" 2 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: struct CompactionJobStats { 9642: CompactionJobStats() { Reset(); } 9642: void Reset(); 9642: 9642: void Add(const CompactionJobStats& stats); 9642: 9642: 9642: uint64_t elapsed_micros; 9642: 9642: 9642: uint64_t cpu_micros; 9642: 9642: 9642: 9642: bool has_num_input_records; 9642: 9642: uint64_t num_input_records; 9642: 9642: uint64_t num_blobs_read; 9642: 9642: size_t num_input_files; 9642: 9642: size_t num_input_files_at_output_level; 9642: 9642: 9642: uint64_t num_output_records; 9642: 9642: size_t num_output_files; 9642: 9642: size_t num_output_files_blob; 9642: 9642: 9642: bool is_full_compaction; 9642: 9642: bool is_manual_compaction; 9642: 9642: 9642: uint64_t total_input_bytes; 9642: 9642: uint64_t total_blob_bytes_read; 9642: 9642: uint64_t total_output_bytes; 9642: 9642: uint64_t total_output_bytes_blob; 9642: 9642: 9642: 9642: 9642: uint64_t num_records_replaced; 9642: 9642: 9642: uint64_t total_input_raw_key_bytes; 9642: 9642: uint64_t total_input_raw_value_bytes; 9642: 9642: 9642: 9642: uint64_t num_input_deletion_records; 9642: 9642: 9642: 9642: uint64_t num_expired_deletion_records; 9642: 9642: 9642: 9642: uint64_t num_corrupt_keys; 9642: 9642: 9642: 9642: 9642: 9642: uint64_t file_write_nanos; 9642: 9642: 9642: uint64_t file_range_sync_nanos; 9642: 9642: 9642: uint64_t file_fsync_nanos; 9642: 9642: 9642: uint64_t file_prepare_write_nanos; 9642: 9642: 9642: 9642: static const size_t kMaxPrefixLength = 8; 9642: 9642: std::string smallest_output_key_prefix; 9642: std::string largest_output_key_prefix; 9642: 9642: 9642: uint64_t num_single_del_fallthru; 9642: 9642: 9642: uint64_t num_single_del_mismatch; 9642: 9642: 9642: }; 9642: } 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 2 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table_properties.h" 1 9642: 9642: 9642: 9642: 9642: 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table_properties.h" 9642: namespace rocksdb { 9642: 9642: class InternalTblPropColl; 9642: # 35 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table_properties.h" 9642: using UserCollectedProperties = std::map; 9642: 9642: 9642: struct TablePropertiesNames { 9642: static const std::string kDbId; 9642: static const std::string kDbSessionId; 9642: static const std::string kDbHostId; 9642: static const std::string kOriginalFileNumber; 9642: static const std::string kDataSize; 9642: static const std::string kIndexSize; 9642: static const std::string kIndexPartitions; 9642: static const std::string kTopLevelIndexSize; 9642: static const std::string kIndexKeyIsUserKey; 9642: static const std::string kIndexValueIsDeltaEncoded; 9642: static const std::string kFilterSize; 9642: static const std::string kRawKeySize; 9642: static const std::string kRawValueSize; 9642: static const std::string kNumDataBlocks; 9642: static const std::string kNumEntries; 9642: static const std::string kNumFilterEntries; 9642: static const std::string kDeletedKeys; 9642: static const std::string kMergeOperands; 9642: static const std::string kNumRangeDeletions; 9642: static const std::string kFormatVersion; 9642: static const std::string kFixedKeyLen; 9642: static const std::string kFilterPolicy; 9642: static const std::string kColumnFamilyName; 9642: static const std::string kColumnFamilyId; 9642: static const std::string kComparator; 9642: static const std::string kMergeOperator; 9642: static const std::string kPrefixExtractorName; 9642: static const std::string kPropertyCollectors; 9642: static const std::string kCompression; 9642: static const std::string kCompressionOptions; 9642: static const std::string kCreationTime; 9642: static const std::string kOldestKeyTime; 9642: static const std::string kFileCreationTime; 9642: static const std::string kSlowCompressionEstimatedDataSize; 9642: static const std::string kFastCompressionEstimatedDataSize; 9642: static const std::string kSequenceNumberTimeMapping; 9642: static const std::string kTailStartOffset; 9642: static const std::string kUserDefinedTimestampsPersisted; 9642: }; 9642: # 92 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table_properties.h" 9642: class TablePropertiesCollector { 9642: public: 9642: virtual ~TablePropertiesCollector() {} 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status Add(const Slice& , const Slice& ) { 9642: return Status::InvalidArgument( 9642: "TablePropertiesCollector::Add() deprecated."); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: virtual Status AddUserKey(const Slice& key, const Slice& value, 9642: EntryType , SequenceNumber , 9642: uint64_t ) { 9642: 9642: return Add(key, value); 9642: } 9642: 9642: 9642: virtual void BlockAdd(uint64_t , 9642: uint64_t , 9642: uint64_t ) { 9642: 9642: return; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status Finish(UserCollectedProperties* properties) = 0; 9642: 9642: 9642: 9642: 9642: virtual UserCollectedProperties GetReadableProperties() const = 0; 9642: 9642: 9642: virtual const char* Name() const = 0; 9642: 9642: 9642: virtual bool NeedCompact() const { return false; } 9642: 9642: 9642: virtual InternalTblPropColl* AsInternal() { return nullptr; } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: class TablePropertiesCollectorFactory : public Customizable { 9642: public: 9642: struct Context { 9642: uint32_t column_family_id; 9642: 9642: 9642: int level_at_creation = kUnknownLevelAtCreation; 9642: static const uint32_t kUnknownColumnFamily; 9642: static const int kUnknownLevelAtCreation = -1; 9642: }; 9642: 9642: ~TablePropertiesCollectorFactory() override {} 9642: static const char* Type() { return "TablePropertiesCollectorFactory"; } 9642: static Status CreateFromString( 9642: const ConfigOptions& options, const std::string& value, 9642: std::shared_ptr* result); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual TablePropertiesCollector* CreateTablePropertiesCollector( 9642: TablePropertiesCollectorFactory::Context context) = 0; 9642: 9642: 9642: const char* Name() const override = 0; 9642: 9642: 9642: 9642: 9642: virtual std::string ToString() const { return Name(); } 9642: }; 9642: 9642: 9642: 9642: struct TableProperties { 9642: public: 9642: 9642: 9642: uint64_t orig_file_number = 0; 9642: 9642: uint64_t data_size = 0; 9642: 9642: uint64_t index_size = 0; 9642: 9642: uint64_t index_partitions = 0; 9642: 9642: uint64_t top_level_index_size = 0; 9642: 9642: 9642: uint64_t index_key_is_user_key = 0; 9642: 9642: uint64_t index_value_is_delta_encoded = 0; 9642: 9642: uint64_t filter_size = 0; 9642: 9642: uint64_t raw_key_size = 0; 9642: 9642: uint64_t raw_value_size = 0; 9642: 9642: uint64_t num_data_blocks = 0; 9642: 9642: uint64_t num_entries = 0; 9642: 9642: uint64_t num_filter_entries = 0; 9642: 9642: uint64_t num_deletions = 0; 9642: 9642: uint64_t num_merge_operands = 0; 9642: 9642: uint64_t num_range_deletions = 0; 9642: 9642: uint64_t format_version = 0; 9642: 9642: uint64_t fixed_key_len = 0; 9642: 9642: 9642: uint64_t column_family_id = rocksdb:: 9642: TablePropertiesCollectorFactory::Context::kUnknownColumnFamily; 9642: # 248 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table_properties.h" 9642: uint64_t creation_time = 0; 9642: 9642: 9642: uint64_t oldest_key_time = 0; 9642: 9642: uint64_t file_creation_time = 0; 9642: 9642: 9642: 9642: uint64_t slow_compression_estimated_data_size = 0; 9642: 9642: 9642: 9642: uint64_t fast_compression_estimated_data_size = 0; 9642: 9642: 9642: 9642: uint64_t external_sst_file_global_seqno_offset = 0; 9642: 9642: 9642: 9642: uint64_t tail_start_offset = 0; 9642: 9642: 9642: 9642: 9642: uint64_t user_defined_timestamps_persisted = 1; 9642: 9642: 9642: 9642: 9642: std::string db_id; 9642: 9642: 9642: 9642: 9642: 9642: std::string db_session_id; 9642: 9642: 9642: 9642: 9642: 9642: std::string db_host_id; 9642: 9642: 9642: 9642: std::string column_family_name; 9642: 9642: 9642: 9642: std::string filter_policy_name; 9642: 9642: 9642: std::string comparator_name; 9642: 9642: 9642: 9642: std::string merge_operator_name; 9642: 9642: 9642: 9642: std::string prefix_extractor_name; 9642: 9642: 9642: 9642: 9642: std::string property_collectors_names; 9642: 9642: 9642: std::string compression_name; 9642: 9642: 9642: std::string compression_options; 9642: 9642: 9642: std::string seqno_to_time_mapping; 9642: 9642: 9642: UserCollectedProperties user_collected_properties; 9642: UserCollectedProperties readable_properties; 9642: 9642: 9642: 9642: std::string ToString(const std::string& prop_delim = "; ", 9642: const std::string& kv_delim = "=") const; 9642: 9642: 9642: 9642: void Add(const TableProperties& tp); 9642: 9642: 9642: 9642: 9642: std::map GetAggregatablePropertiesAsMap() const; 9642: 9642: 9642: 9642: std::size_t ApproximateMemoryUsage() const; 9642: }; 9642: # 357 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table_properties.h" 9642: uint64_t GetDeletedKeys(const UserCollectedProperties& props); 9642: uint64_t GetMergeOperands(const UserCollectedProperties& props, 9642: bool* property_present); 9642: 9642: } 9642: # 22 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 2 9642: 9642: 9642: namespace rocksdb { 9642: 9642: using TablePropertiesCollection = 9642: std::unordered_map>; 9642: 9642: class DB; 9642: class ColumnFamilyHandle; 9642: class Status; 9642: struct CompactionJobStats; 9642: 9642: struct FileCreationBriefInfo { 9642: FileCreationBriefInfo() = default; 9642: FileCreationBriefInfo(const std::string& _db_name, 9642: const std::string& _cf_name, 9642: const std::string& _file_path, int _job_id) 9642: : db_name(_db_name), 9642: cf_name(_cf_name), 9642: file_path(_file_path), 9642: job_id(_job_id) {} 9642: 9642: std::string db_name; 9642: 9642: std::string cf_name; 9642: 9642: std::string file_path; 9642: 9642: 9642: int job_id = 0; 9642: }; 9642: 9642: struct TableFileCreationBriefInfo : public FileCreationBriefInfo { 9642: 9642: TableFileCreationReason reason; 9642: }; 9642: 9642: struct TableFileCreationInfo : public TableFileCreationBriefInfo { 9642: TableFileCreationInfo() = default; 9642: explicit TableFileCreationInfo(TableProperties&& prop) 9642: : table_properties(prop) {} 9642: 9642: uint64_t file_size; 9642: 9642: TableProperties table_properties; 9642: 9642: Status status; 9642: 9642: std::string file_checksum; 9642: 9642: std::string file_checksum_func_name; 9642: }; 9642: 9642: struct BlobFileCreationBriefInfo : public FileCreationBriefInfo { 9642: BlobFileCreationBriefInfo(const std::string& _db_name, 9642: const std::string& _cf_name, 9642: const std::string& _file_path, int _job_id, 9642: BlobFileCreationReason _reason) 9642: : FileCreationBriefInfo(_db_name, _cf_name, _file_path, _job_id), 9642: reason(_reason) {} 9642: 9642: BlobFileCreationReason reason; 9642: }; 9642: 9642: struct BlobFileCreationInfo : public BlobFileCreationBriefInfo { 9642: BlobFileCreationInfo(const std::string& _db_name, const std::string& _cf_name, 9642: const std::string& _file_path, int _job_id, 9642: BlobFileCreationReason _reason, 9642: uint64_t _total_blob_count, uint64_t _total_blob_bytes, 9642: Status _status, const std::string& _file_checksum, 9642: const std::string& _file_checksum_func_name) 9642: : BlobFileCreationBriefInfo(_db_name, _cf_name, _file_path, _job_id, 9642: _reason), 9642: total_blob_count(_total_blob_count), 9642: total_blob_bytes(_total_blob_bytes), 9642: status(_status), 9642: file_checksum(_file_checksum), 9642: file_checksum_func_name(_file_checksum_func_name) {} 9642: 9642: 9642: uint64_t total_blob_count; 9642: 9642: uint64_t total_blob_bytes; 9642: 9642: Status status; 9642: 9642: std::string file_checksum; 9642: 9642: std::string file_checksum_func_name; 9642: }; 9642: 9642: enum class CompactionReason : int { 9642: kUnknown = 0, 9642: 9642: kLevelL0FilesNum, 9642: 9642: kLevelMaxLevelSize, 9642: 9642: kUniversalSizeAmplification, 9642: 9642: kUniversalSizeRatio, 9642: 9642: kUniversalSortedRunNum, 9642: 9642: kFIFOMaxSize, 9642: 9642: kFIFOReduceNumFiles, 9642: 9642: kFIFOTtl, 9642: 9642: kManualCompaction, 9642: 9642: kFilesMarkedForCompaction, 9642: 9642: 9642: kBottommostFiles, 9642: 9642: kTtl, 9642: 9642: 9642: kFlush, 9642: 9642: 9642: 9642: 9642: kExternalSstIngestion, 9642: 9642: kPeriodicCompaction, 9642: 9642: kChangeTemperature, 9642: 9642: kForcedBlobGC, 9642: 9642: 9642: kRoundRobinTtl, 9642: 9642: 9642: kRefitLevel, 9642: 9642: kNumOfReasons, 9642: }; 9642: 9642: const char* GetCompactionReasonString(CompactionReason compaction_reason); 9642: 9642: 9642: enum class FlushReason : int { 9642: kOthers = 0x00, 9642: kGetLiveFiles = 0x01, 9642: kShutDown = 0x02, 9642: kExternalFileIngestion = 0x03, 9642: kManualCompaction = 0x04, 9642: kWriteBufferManager = 0x05, 9642: kWriteBufferFull = 0x06, 9642: kTest = 0x07, 9642: kDeleteFiles = 0x08, 9642: kAutoCompaction = 0x09, 9642: kManualFlush = 0x0a, 9642: kErrorRecovery = 0xb, 9642: 9642: 9642: kErrorRecoveryRetryFlush = 0xc, 9642: kWalFull = 0xd, 9642: 9642: kCatchUpAfterErrorRecovery = 0xe, 9642: }; 9642: 9642: const char* GetFlushReasonString(FlushReason flush_reason); 9642: 9642: 9642: 9642: 9642: 9642: enum class BackgroundErrorReason { 9642: kFlush, 9642: kCompaction, 9642: kWriteCallback, 9642: kMemTable, 9642: kManifestWrite, 9642: kFlushNoWAL, 9642: kManifestWriteNoWAL, 9642: }; 9642: 9642: struct WriteStallInfo { 9642: 9642: std::string cf_name; 9642: 9642: struct { 9642: WriteStallCondition cur; 9642: WriteStallCondition prev; 9642: } condition; 9642: }; 9642: 9642: 9642: struct FileDeletionInfo { 9642: FileDeletionInfo() = default; 9642: 9642: FileDeletionInfo(const std::string& _db_name, const std::string& _file_path, 9642: int _job_id, Status _status) 9642: : db_name(_db_name), 9642: file_path(_file_path), 9642: job_id(_job_id), 9642: status(_status) {} 9642: 9642: std::string db_name; 9642: 9642: std::string file_path; 9642: 9642: int job_id = 0; 9642: 9642: Status status; 9642: }; 9642: 9642: struct TableFileDeletionInfo : public FileDeletionInfo {}; 9642: 9642: struct BlobFileDeletionInfo : public FileDeletionInfo { 9642: BlobFileDeletionInfo(const std::string& _db_name, 9642: const std::string& _file_path, int _job_id, 9642: Status _status) 9642: : FileDeletionInfo(_db_name, _file_path, _job_id, _status) {} 9642: }; 9642: 9642: enum class FileOperationType { 9642: kRead, 9642: kWrite, 9642: kTruncate, 9642: kClose, 9642: kFlush, 9642: kSync, 9642: kFsync, 9642: kRangeSync, 9642: kAppend, 9642: kPositionedAppend, 9642: kOpen, 9642: kVerify 9642: }; 9642: 9642: struct FileOperationInfo { 9642: using Duration = std::chrono::nanoseconds; 9642: using SteadyTimePoint = 9642: std::chrono::time_point; 9642: using SystemTimePoint = 9642: std::chrono::time_point; 9642: using StartTimePoint = std::pair; 9642: using FinishTimePoint = SteadyTimePoint; 9642: 9642: FileOperationType type; 9642: const std::string& path; 9642: 9642: 9642: Temperature temperature; 9642: uint64_t offset; 9642: size_t length; 9642: const Duration duration; 9642: const SystemTimePoint& start_ts; 9642: Status status; 9642: 9642: FileOperationInfo(const FileOperationType _type, const std::string& _path, 9642: const StartTimePoint& _start_ts, 9642: const FinishTimePoint& _finish_ts, const Status& _status, 9642: const Temperature _temperature = Temperature::kUnknown) 9642: : type(_type), 9642: path(_path), 9642: temperature(_temperature), 9642: duration(std::chrono::duration_cast( 9642: _finish_ts - _start_ts.second)), 9642: start_ts(_start_ts.first), 9642: status(_status) {} 9642: static StartTimePoint StartNow() { 9642: return std::make_pair( 9642: std::chrono::system_clock::now(), std::chrono::steady_clock::now()); 9642: } 9642: static FinishTimePoint FinishNow() { 9642: return std::chrono::steady_clock::now(); 9642: } 9642: }; 9642: 9642: struct BlobFileInfo { 9642: BlobFileInfo(const std::string& _blob_file_path, 9642: const uint64_t _blob_file_number) 9642: : blob_file_path(_blob_file_path), blob_file_number(_blob_file_number) {} 9642: 9642: std::string blob_file_path; 9642: uint64_t blob_file_number; 9642: }; 9642: 9642: struct BlobFileAdditionInfo : public BlobFileInfo { 9642: BlobFileAdditionInfo(const std::string& _blob_file_path, 9642: const uint64_t _blob_file_number, 9642: const uint64_t _total_blob_count, 9642: const uint64_t _total_blob_bytes) 9642: : BlobFileInfo(_blob_file_path, _blob_file_number), 9642: total_blob_count(_total_blob_count), 9642: total_blob_bytes(_total_blob_bytes) {} 9642: uint64_t total_blob_count; 9642: uint64_t total_blob_bytes; 9642: }; 9642: 9642: struct BlobFileGarbageInfo : public BlobFileInfo { 9642: BlobFileGarbageInfo(const std::string& _blob_file_path, 9642: const uint64_t _blob_file_number, 9642: const uint64_t _garbage_blob_count, 9642: const uint64_t _garbage_blob_bytes) 9642: : BlobFileInfo(_blob_file_path, _blob_file_number), 9642: garbage_blob_count(_garbage_blob_count), 9642: garbage_blob_bytes(_garbage_blob_bytes) {} 9642: uint64_t garbage_blob_count; 9642: uint64_t garbage_blob_bytes; 9642: }; 9642: 9642: struct FlushJobInfo { 9642: 9642: uint32_t cf_id; 9642: 9642: std::string cf_name; 9642: 9642: std::string file_path; 9642: 9642: uint64_t file_number; 9642: 9642: uint64_t oldest_blob_file_number; 9642: 9642: uint64_t thread_id; 9642: 9642: int job_id; 9642: 9642: 9642: 9642: 9642: bool triggered_writes_slowdown; 9642: 9642: 9642: 9642: 9642: bool triggered_writes_stop; 9642: 9642: SequenceNumber smallest_seqno; 9642: 9642: SequenceNumber largest_seqno; 9642: 9642: TableProperties table_properties; 9642: 9642: FlushReason flush_reason; 9642: 9642: 9642: CompressionType blob_compression_type; 9642: 9642: 9642: std::vector blob_file_addition_infos; 9642: }; 9642: 9642: struct CompactionFileInfo { 9642: 9642: int level; 9642: 9642: 9642: uint64_t file_number; 9642: 9642: 9642: uint64_t oldest_blob_file_number; 9642: }; 9642: 9642: struct SubcompactionJobInfo { 9642: ~SubcompactionJobInfo() { status.PermitUncheckedError(); } 9642: 9642: uint32_t cf_id; 9642: 9642: std::string cf_name; 9642: 9642: Status status; 9642: 9642: uint64_t thread_id; 9642: 9642: int job_id; 9642: 9642: 9642: 9642: 9642: 9642: int subcompaction_job_id; 9642: 9642: int base_input_level; 9642: 9642: int output_level; 9642: 9642: 9642: CompactionReason compaction_reason; 9642: 9642: 9642: CompressionType compression; 9642: 9642: 9642: CompactionJobStats stats; 9642: 9642: 9642: CompressionType blob_compression_type; 9642: }; 9642: 9642: struct CompactionJobInfo { 9642: ~CompactionJobInfo() { status.PermitUncheckedError(); } 9642: 9642: uint32_t cf_id; 9642: 9642: std::string cf_name; 9642: 9642: Status status; 9642: 9642: uint64_t thread_id; 9642: 9642: int job_id; 9642: 9642: 9642: int base_input_level; 9642: 9642: int output_level; 9642: # 444 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 9642: std::vector input_files; 9642: 9642: 9642: std::vector input_file_infos; 9642: 9642: 9642: std::vector output_files; 9642: 9642: 9642: std::vector output_file_infos; 9642: 9642: 9642: 9642: TablePropertiesCollection table_properties; 9642: 9642: 9642: CompactionReason compaction_reason; 9642: 9642: 9642: CompressionType compression; 9642: 9642: 9642: CompactionJobStats stats; 9642: 9642: 9642: CompressionType blob_compression_type; 9642: 9642: 9642: 9642: std::vector blob_file_addition_infos; 9642: 9642: 9642: 9642: std::vector blob_file_garbage_infos; 9642: }; 9642: 9642: struct MemTableInfo { 9642: 9642: std::string cf_name; 9642: 9642: 9642: SequenceNumber first_seqno; 9642: 9642: 9642: 9642: 9642: SequenceNumber earliest_seqno; 9642: 9642: uint64_t num_entries; 9642: 9642: uint64_t num_deletes; 9642: }; 9642: 9642: struct ExternalFileIngestionInfo { 9642: 9642: std::string cf_name; 9642: 9642: std::string external_file_path; 9642: 9642: std::string internal_file_path; 9642: 9642: SequenceNumber global_seqno; 9642: 9642: TableProperties table_properties; 9642: }; 9642: 9642: 9642: struct BackgroundErrorRecoveryInfo { 9642: 9642: Status old_bg_error; 9642: 9642: 9642: 9642: Status new_bg_error; 9642: }; 9642: 9642: struct IOErrorInfo { 9642: IOErrorInfo(const IOStatus& _io_status, FileOperationType _operation, 9642: const std::string& _file_path, size_t _length, uint64_t _offset) 9642: : io_status(_io_status), 9642: operation(_operation), 9642: file_path(_file_path), 9642: length(_length), 9642: offset(_offset) {} 9642: 9642: IOStatus io_status; 9642: FileOperationType operation; 9642: std::string file_path; 9642: size_t length; 9642: uint64_t offset; 9642: }; 9642: # 567 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 9642: class EventListener : public Customizable { 9642: public: 9642: static const char* Type() { return "EventListener"; } 9642: static Status CreateFromString(const ConfigOptions& options, 9642: const std::string& id, 9642: std::shared_ptr* result); 9642: const char* Name() const override { 9642: 9642: 9642: return ""; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void OnFlushCompleted(DB* , 9642: const FlushJobInfo& ) {} 9642: # 595 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 9642: virtual void OnFlushBegin(DB* , 9642: const FlushJobInfo& ) {} 9642: # 609 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 9642: virtual void OnTableFileDeleted(const TableFileDeletionInfo& ) {} 9642: # 618 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 9642: virtual void OnCompactionBegin(DB* , const CompactionJobInfo& ) {} 9642: # 633 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 9642: virtual void OnCompactionCompleted(DB* , 9642: const CompactionJobInfo& ) {} 9642: # 653 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 9642: virtual void OnSubcompactionBegin(const SubcompactionJobInfo& ) {} 9642: # 671 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 9642: virtual void OnSubcompactionCompleted(const SubcompactionJobInfo& ) {} 9642: # 688 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 9642: virtual void OnTableFileCreated(const TableFileCreationInfo& ) {} 9642: # 697 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 9642: virtual void OnTableFileCreationStarted( 9642: const TableFileCreationBriefInfo& ) {} 9642: # 710 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 9642: virtual void OnMemTableSealed(const MemTableInfo& ) {} 9642: # 720 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 9642: virtual void OnColumnFamilyHandleDeletionStarted( 9642: ColumnFamilyHandle* ) {} 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void OnExternalFileIngested( 9642: DB* , const ExternalFileIngestionInfo& ) {} 9642: # 743 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 9642: virtual void OnBackgroundError(BackgroundErrorReason , 9642: Status* ) {} 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void OnStallConditionsChanged(const WriteStallInfo& ) {} 9642: 9642: 9642: 9642: virtual void OnFileReadFinish(const FileOperationInfo& ) {} 9642: 9642: 9642: 9642: virtual void OnFileWriteFinish(const FileOperationInfo& ) {} 9642: 9642: 9642: 9642: virtual void OnFileFlushFinish(const FileOperationInfo& ) {} 9642: 9642: 9642: 9642: virtual void OnFileSyncFinish(const FileOperationInfo& ) {} 9642: 9642: 9642: 9642: virtual void OnFileRangeSyncFinish(const FileOperationInfo& ) {} 9642: 9642: 9642: 9642: virtual void OnFileTruncateFinish(const FileOperationInfo& ) {} 9642: 9642: 9642: 9642: virtual void OnFileCloseFinish(const FileOperationInfo& ) {} 9642: 9642: 9642: 9642: virtual bool ShouldBeNotifiedOnFileIO() { return false; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void OnErrorRecoveryBegin(BackgroundErrorReason , 9642: Status , 9642: bool* ) {} 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void OnErrorRecoveryCompleted(Status old_bg_error) { 9642: old_bg_error.PermitUncheckedError(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void OnErrorRecoveryEnd(const BackgroundErrorRecoveryInfo& ) { 9642: } 9642: # 819 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 9642: virtual void OnBlobFileCreationStarted( 9642: const BlobFileCreationBriefInfo& ) {} 9642: # 830 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 9642: virtual void OnBlobFileCreated(const BlobFileCreationInfo& ) {} 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void OnBlobFileDeleted(const BlobFileDeletionInfo& ) {} 9642: 9642: 9642: 9642: virtual void OnIOError(const IOErrorInfo& ) {} 9642: 9642: ~EventListener() override {} 9642: }; 9642: 9642: 9642: } 9642: # 29 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/sst_partitioner.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 16 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/sst_partitioner.h" 9642: namespace rocksdb { 9642: 9642: class Slice; 9642: 9642: enum PartitionerResult : char { 9642: 9642: kNotRequired = 0x0, 9642: 9642: kRequired = 0x1 9642: 9642: }; 9642: 9642: struct PartitionerRequest { 9642: PartitionerRequest(const Slice& prev_user_key_, 9642: const Slice& current_user_key_, 9642: uint64_t current_output_file_size_) 9642: : prev_user_key(&prev_user_key_), 9642: current_user_key(¤t_user_key_), 9642: current_output_file_size(current_output_file_size_) {} 9642: const Slice* prev_user_key; 9642: const Slice* current_user_key; 9642: uint64_t current_output_file_size; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: class SstPartitioner { 9642: public: 9642: virtual ~SstPartitioner() {} 9642: 9642: 9642: virtual const char* Name() const = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual PartitionerResult ShouldPartition( 9642: const PartitionerRequest& request) = 0; 9642: 9642: 9642: 9642: virtual bool CanDoTrivialMove(const Slice& smallest_user_key, 9642: const Slice& largest_user_key) = 0; 9642: 9642: 9642: struct Context { 9642: 9642: bool is_full_compaction; 9642: 9642: 9642: bool is_manual_compaction; 9642: 9642: int output_level; 9642: 9642: Slice smallest_user_key; 9642: 9642: Slice largest_user_key; 9642: }; 9642: }; 9642: 9642: 9642: 9642: 9642: class SstPartitionerFactory : public Customizable { 9642: public: 9642: ~SstPartitionerFactory() override {} 9642: static const char* Type() { return "SstPartitionerFactory"; } 9642: static Status CreateFromString( 9642: const ConfigOptions& options, const std::string& value, 9642: std::shared_ptr* result); 9642: 9642: virtual std::unique_ptr CreatePartitioner( 9642: const SstPartitioner::Context& context) const = 0; 9642: 9642: 9642: const char* Name() const override = 0; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: class SstPartitionerFixedPrefix : public SstPartitioner { 9642: public: 9642: explicit SstPartitionerFixedPrefix(size_t len) : len_(len) {} 9642: 9642: ~SstPartitionerFixedPrefix() override {} 9642: 9642: const char* Name() const override { return "SstPartitionerFixedPrefix"; } 9642: 9642: PartitionerResult ShouldPartition(const PartitionerRequest& request) override; 9642: 9642: bool CanDoTrivialMove(const Slice& smallest_user_key, 9642: const Slice& largest_user_key) override; 9642: 9642: private: 9642: size_t len_; 9642: }; 9642: 9642: 9642: 9642: 9642: class SstPartitionerFixedPrefixFactory : public SstPartitionerFactory { 9642: public: 9642: explicit SstPartitionerFixedPrefixFactory(size_t len); 9642: 9642: ~SstPartitionerFixedPrefixFactory() override {} 9642: 9642: static const char* kClassName() { return "SstPartitionerFixedPrefixFactory"; } 9642: const char* Name() const override { return kClassName(); } 9642: 9642: std::unique_ptr CreatePartitioner( 9642: const SstPartitioner::Context& ) const override; 9642: 9642: private: 9642: size_t len_; 9642: }; 9642: 9642: std::shared_ptr NewSstPartitionerFixedPrefixFactory( 9642: size_t prefix_len); 9642: 9642: } 9642: # 30 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 2 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/version.h" 1 9642: 9642: 9642: 9642: 9642: 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/version.h" 9642: namespace rocksdb { 9642: 9642: 9642: const std::unordered_map& GetRocksBuildProperties(); 9642: 9642: 9642: 9642: 9642: std::string GetRocksVersionAsString(bool with_patch = true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: std::string GetRocksBuildInfoAsString(const std::string& program, 9642: bool verbose = false); 9642: } 9642: # 33 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 1 9642: # 13 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/condition_variable" 1 3 9642: # 32 "/usr/include/c++/13/condition_variable" 3 9642: 9642: # 33 "/usr/include/c++/13/condition_variable" 3 9642: # 54 "/usr/include/c++/13/condition_variable" 3 9642: 9642: # 54 "/usr/include/c++/13/condition_variable" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: # 67 "/usr/include/c++/13/condition_variable" 3 9642: enum class cv_status { no_timeout, timeout }; 9642: 9642: 9642: class condition_variable 9642: { 9642: using steady_clock = chrono::steady_clock; 9642: using system_clock = chrono::system_clock; 9642: 9642: using __clock_t = steady_clock; 9642: 9642: 9642: 9642: 9642: __condvar _M_cond; 9642: 9642: public: 9642: typedef __gthread_cond_t* native_handle_type; 9642: 9642: condition_variable() noexcept; 9642: ~condition_variable() noexcept; 9642: 9642: condition_variable(const condition_variable&) = delete; 9642: condition_variable& operator=(const condition_variable&) = delete; 9642: 9642: void 9642: notify_one() noexcept; 9642: 9642: void 9642: notify_all() noexcept; 9642: 9642: void 9642: wait(unique_lock& __lock); 9642: 9642: template 9642: void 9642: wait(unique_lock& __lock, _Predicate __p) 9642: { 9642: while (!__p()) 9642: wait(__lock); 9642: } 9642: 9642: 9642: template 9642: cv_status 9642: wait_until(unique_lock& __lock, 9642: const chrono::time_point& __atime) 9642: { return __wait_until_impl(__lock, __atime); } 9642: 9642: 9642: template 9642: cv_status 9642: wait_until(unique_lock& __lock, 9642: const chrono::time_point& __atime) 9642: { return __wait_until_impl(__lock, __atime); } 9642: 9642: template 9642: cv_status 9642: wait_until(unique_lock& __lock, 9642: const chrono::time_point<_Clock, _Duration>& __atime) 9642: { 9642: 9642: 9642: 9642: using __s_dur = typename __clock_t::duration; 9642: const typename _Clock::time_point __c_entry = _Clock::now(); 9642: const __clock_t::time_point __s_entry = __clock_t::now(); 9642: const auto __delta = __atime - __c_entry; 9642: const auto __s_atime = __s_entry + 9642: chrono::__detail::ceil<__s_dur>(__delta); 9642: 9642: if (__wait_until_impl(__lock, __s_atime) == cv_status::no_timeout) 9642: return cv_status::no_timeout; 9642: 9642: 9642: 9642: if (_Clock::now() < __atime) 9642: return cv_status::no_timeout; 9642: return cv_status::timeout; 9642: } 9642: 9642: template 9642: bool 9642: wait_until(unique_lock& __lock, 9642: const chrono::time_point<_Clock, _Duration>& __atime, 9642: _Predicate __p) 9642: { 9642: while (!__p()) 9642: if (wait_until(__lock, __atime) == cv_status::timeout) 9642: return __p(); 9642: return true; 9642: } 9642: 9642: template 9642: cv_status 9642: wait_for(unique_lock& __lock, 9642: const chrono::duration<_Rep, _Period>& __rtime) 9642: { 9642: using __dur = typename steady_clock::duration; 9642: return wait_until(__lock, 9642: steady_clock::now() + 9642: chrono::__detail::ceil<__dur>(__rtime)); 9642: } 9642: 9642: template 9642: bool 9642: wait_for(unique_lock& __lock, 9642: const chrono::duration<_Rep, _Period>& __rtime, 9642: _Predicate __p) 9642: { 9642: using __dur = typename steady_clock::duration; 9642: return wait_until(__lock, 9642: steady_clock::now() + 9642: chrono::__detail::ceil<__dur>(__rtime), 9642: std::move(__p)); 9642: } 9642: 9642: native_handle_type 9642: native_handle() 9642: { return _M_cond.native_handle(); } 9642: 9642: private: 9642: 9642: template 9642: cv_status 9642: __wait_until_impl(unique_lock& __lock, 9642: const chrono::time_point& __atime) 9642: { 9642: auto __s = chrono::time_point_cast(__atime); 9642: auto __ns = chrono::duration_cast(__atime - __s); 9642: 9642: __gthread_time_t __ts = 9642: { 9642: static_cast(__s.time_since_epoch().count()), 9642: static_cast(__ns.count()) 9642: }; 9642: 9642: _M_cond.wait_until(*__lock.mutex(), 1, __ts); 9642: 9642: return (steady_clock::now() < __atime 9642: ? cv_status::no_timeout : cv_status::timeout); 9642: } 9642: 9642: 9642: template 9642: cv_status 9642: __wait_until_impl(unique_lock& __lock, 9642: const chrono::time_point& __atime) 9642: { 9642: auto __s = chrono::time_point_cast(__atime); 9642: auto __ns = chrono::duration_cast(__atime - __s); 9642: 9642: __gthread_time_t __ts = 9642: { 9642: static_cast(__s.time_since_epoch().count()), 9642: static_cast(__ns.count()) 9642: }; 9642: 9642: _M_cond.wait_until(*__lock.mutex(), __ts); 9642: 9642: return (system_clock::now() < __atime 9642: ? cv_status::no_timeout : cv_status::timeout); 9642: } 9642: }; 9642: 9642: void 9642: notify_all_at_thread_exit(condition_variable&, unique_lock); 9642: 9642: struct __at_thread_exit_elt 9642: { 9642: __at_thread_exit_elt* _M_next; 9642: void (*_M_cb)(void*); 9642: }; 9642: 9642: inline namespace _V2 { 9642: 9642: 9642: 9642: class condition_variable_any 9642: { 9642: 9642: using __clock_t = chrono::steady_clock; 9642: 9642: 9642: 9642: condition_variable _M_cond; 9642: shared_ptr _M_mutex; 9642: 9642: 9642: template 9642: struct _Unlock 9642: { 9642: explicit _Unlock(_Lock& __lk) : _M_lock(__lk) { __lk.unlock(); } 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: ~_Unlock() noexcept(false) 9642: { 9642: if (uncaught_exception()) 9642: { 9642: try 9642: { _M_lock.lock(); } 9642: catch(const __cxxabiv1::__forced_unwind&) 9642: { throw; } 9642: catch(...) 9642: { } 9642: } 9642: else 9642: _M_lock.lock(); 9642: } 9642: #pragma GCC diagnostic pop 9642: 9642: _Unlock(const _Unlock&) = delete; 9642: _Unlock& operator=(const _Unlock&) = delete; 9642: 9642: _Lock& _M_lock; 9642: }; 9642: 9642: public: 9642: condition_variable_any() : _M_mutex(std::make_shared()) { } 9642: ~condition_variable_any() = default; 9642: 9642: condition_variable_any(const condition_variable_any&) = delete; 9642: condition_variable_any& operator=(const condition_variable_any&) = delete; 9642: 9642: void 9642: notify_one() noexcept 9642: { 9642: lock_guard __lock(*_M_mutex); 9642: _M_cond.notify_one(); 9642: } 9642: 9642: void 9642: notify_all() noexcept 9642: { 9642: lock_guard __lock(*_M_mutex); 9642: _M_cond.notify_all(); 9642: } 9642: 9642: template 9642: void 9642: wait(_Lock& __lock) 9642: { 9642: shared_ptr __mutex = _M_mutex; 9642: unique_lock __my_lock(*__mutex); 9642: _Unlock<_Lock> __unlock(__lock); 9642: 9642: 9642: unique_lock __my_lock2(std::move(__my_lock)); 9642: _M_cond.wait(__my_lock2); 9642: } 9642: 9642: 9642: template 9642: void 9642: wait(_Lock& __lock, _Predicate __p) 9642: { 9642: while (!__p()) 9642: wait(__lock); 9642: } 9642: 9642: template 9642: cv_status 9642: wait_until(_Lock& __lock, 9642: const chrono::time_point<_Clock, _Duration>& __atime) 9642: { 9642: shared_ptr __mutex = _M_mutex; 9642: unique_lock __my_lock(*__mutex); 9642: _Unlock<_Lock> __unlock(__lock); 9642: 9642: 9642: unique_lock __my_lock2(std::move(__my_lock)); 9642: return _M_cond.wait_until(__my_lock2, __atime); 9642: } 9642: 9642: template 9642: bool 9642: wait_until(_Lock& __lock, 9642: const chrono::time_point<_Clock, _Duration>& __atime, 9642: _Predicate __p) 9642: { 9642: while (!__p()) 9642: if (wait_until(__lock, __atime) == cv_status::timeout) 9642: return __p(); 9642: return true; 9642: } 9642: 9642: template 9642: cv_status 9642: wait_for(_Lock& __lock, const chrono::duration<_Rep, _Period>& __rtime) 9642: { return wait_until(__lock, __clock_t::now() + __rtime); } 9642: 9642: template 9642: bool 9642: wait_for(_Lock& __lock, 9642: const chrono::duration<_Rep, _Period>& __rtime, _Predicate __p) 9642: { return wait_until(__lock, __clock_t::now() + __rtime, std::move(__p)); } 9642: # 443 "/usr/include/c++/13/condition_variable" 3 9642: }; 9642: 9642: } 9642: 9642: 9642: 9642: } 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 2 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 23 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 9642: namespace rocksdb { 9642: class CacheReservationManager; 9642: 9642: 9642: 9642: class StallInterface { 9642: public: 9642: virtual ~StallInterface() {} 9642: 9642: virtual void Block() = 0; 9642: 9642: virtual void Signal() = 0; 9642: }; 9642: 9642: class WriteBufferManager final { 9642: public: 9642: # 50 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 9642: explicit WriteBufferManager(size_t _buffer_size, 9642: std::shared_ptr cache = {}, 9642: bool allow_stall = false); 9642: 9642: WriteBufferManager(const WriteBufferManager&) = delete; 9642: WriteBufferManager& operator=(const WriteBufferManager&) = delete; 9642: 9642: ~WriteBufferManager(); 9642: 9642: 9642: 9642: bool enabled() const { return buffer_size() > 0; } 9642: 9642: 9642: bool cost_to_cache() const { return cache_res_mgr_ != nullptr; } 9642: 9642: 9642: 9642: size_t memory_usage() const { 9642: return memory_used_.load(std::memory_order_relaxed); 9642: } 9642: 9642: 9642: size_t mutable_memtable_memory_usage() const { 9642: return memory_active_.load(std::memory_order_relaxed); 9642: } 9642: 9642: size_t dummy_entries_in_cache_usage() const; 9642: 9642: 9642: size_t buffer_size() const { 9642: return buffer_size_.load(std::memory_order_relaxed); 9642: } 9642: 9642: 9642: void SetBufferSize(size_t new_size) { 9642: 9642: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 3 4 9642: (static_cast ( 9642: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 9642: new_size > 0 9642: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 9642: "new_size > 0" 9642: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 9642: ; 9642: buffer_size_.store(new_size, std::memory_order_relaxed); 9642: mutable_limit_.store(new_size * 7 / 8, std::memory_order_relaxed); 9642: 9642: MaybeEndWriteStall(); 9642: } 9642: 9642: void SetAllowStall(bool new_allow_stall) { 9642: allow_stall_.store(new_allow_stall, std::memory_order_relaxed); 9642: MaybeEndWriteStall(); 9642: } 9642: 9642: 9642: 9642: 9642: bool ShouldFlush() const { 9642: if (enabled()) { 9642: if (mutable_memtable_memory_usage() > 9642: mutable_limit_.load(std::memory_order_relaxed)) { 9642: return true; 9642: } 9642: size_t local_size = buffer_size(); 9642: if (memory_usage() >= local_size && 9642: mutable_memtable_memory_usage() >= local_size / 2) { 9642: 9642: 9642: 9642: return true; 9642: } 9642: } 9642: return false; 9642: } 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 9642: bool ShouldStall() const { 9642: if (!allow_stall_.load(std::memory_order_relaxed) || !enabled()) { 9642: return false; 9642: } 9642: 9642: return IsStallActive() || IsStallThresholdExceeded(); 9642: } 9642: 9642: 9642: bool IsStallActive() const { 9642: return stall_active_.load(std::memory_order_relaxed); 9642: } 9642: 9642: 9642: bool IsStallThresholdExceeded() const { 9642: return memory_usage() >= buffer_size_; 9642: } 9642: 9642: void ReserveMem(size_t mem); 9642: 9642: 9642: 9642: void ScheduleFreeMem(size_t mem); 9642: 9642: void FreeMem(size_t mem); 9642: 9642: 9642: 9642: void BeginWriteStall(StallInterface* wbm_stall); 9642: 9642: 9642: 9642: void MaybeEndWriteStall(); 9642: 9642: void RemoveDBFromQueue(StallInterface* wbm_stall); 9642: 9642: private: 9642: std::atomic buffer_size_; 9642: std::atomic mutable_limit_; 9642: std::atomic memory_used_; 9642: 9642: std::atomic memory_active_; 9642: std::shared_ptr cache_res_mgr_; 9642: 9642: std::mutex cache_res_mgr_mu_; 9642: 9642: std::list queue_; 9642: 9642: std::mutex mu_; 9642: std::atomic allow_stall_; 9642: 9642: 9642: std::atomic stall_active_; 9642: 9642: void ReserveMemWithCache(size_t mem); 9642: void FreeMemWithCache(size_t mem); 9642: }; 9642: } 9642: # 34 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 2 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class Cache; 9642: class CompactionFilter; 9642: class CompactionFilterFactory; 9642: class Comparator; 9642: class ConcurrentTaskLimiter; 9642: class Env; 9642: enum InfoLogLevel : unsigned char; 9642: class SstFileManager; 9642: class FilterPolicy; 9642: class Logger; 9642: class MergeOperator; 9642: class Snapshot; 9642: class MemTableRepFactory; 9642: class RateLimiter; 9642: class Slice; 9642: class Statistics; 9642: class InternalKeyComparator; 9642: class WalFilter; 9642: class FileSystem; 9642: 9642: struct Options; 9642: struct DbPath; 9642: 9642: using FileTypeSet = SmallEnumSet; 9642: 9642: struct ColumnFamilyOptions : public AdvancedColumnFamilyOptions { 9642: 9642: 9642: 9642: 9642: 9642: 9642: ColumnFamilyOptions* OldDefaults(int rocksdb_major_version = 4, 9642: int rocksdb_minor_version = 6); 9642: 9642: 9642: 9642: 9642: 9642: ColumnFamilyOptions* OptimizeForSmallDb( 9642: std::shared_ptr* cache = nullptr); 9642: 9642: 9642: 9642: 9642: ColumnFamilyOptions* OptimizeForPointLookup(uint64_t block_cache_size_mb); 9642: # 102 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: ColumnFamilyOptions* OptimizeLevelStyleCompaction( 9642: uint64_t memtable_memory_budget = 512 * 1024 * 1024); 9642: ColumnFamilyOptions* OptimizeUniversalStyleCompaction( 9642: uint64_t memtable_memory_budget = 512 * 1024 * 1024); 9642: # 116 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: const Comparator* comparator = BytewiseComparator(); 9642: # 128 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: std::shared_ptr merge_operator = nullptr; 9642: # 146 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: const CompactionFilter* compaction_filter = nullptr; 9642: # 165 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: std::shared_ptr compaction_filter_factory = nullptr; 9642: # 186 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: size_t write_buffer_size = 64 << 20; 9642: # 214 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: CompressionType compression; 9642: # 223 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: CompressionType bottommost_compression = kDisableCompressionOption; 9642: 9642: 9642: 9642: 9642: 9642: CompressionOptions bottommost_compression_opts; 9642: 9642: 9642: CompressionOptions compression_opts; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: int level0_file_num_compaction_trigger = 4; 9642: # 274 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: std::shared_ptr prefix_extractor = nullptr; 9642: # 288 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: uint64_t max_bytes_for_level_base = 256 * 1048576; 9642: 9642: 9642: uint64_t snap_refresh_nanos = 0; 9642: 9642: 9642: 9642: 9642: 9642: bool disable_auto_compactions = false; 9642: 9642: 9642: 9642: 9642: 9642: std::shared_ptr table_factory; 9642: # 317 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: std::vector cf_paths; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: std::shared_ptr compaction_thread_limiter = nullptr; 9642: # 334 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: std::shared_ptr sst_partitioner_factory = nullptr; 9642: # 345 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: uint32_t memtable_max_range_deletions = 0; 9642: 9642: 9642: ColumnFamilyOptions(); 9642: 9642: explicit ColumnFamilyOptions(const Options& options); 9642: 9642: void Dump(Logger* log) const; 9642: }; 9642: 9642: enum class WALRecoveryMode : char { 9642: # 375 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: kTolerateCorruptedTailRecords = 0x00, 9642: 9642: 9642: 9642: 9642: kAbsoluteConsistency = 0x01, 9642: 9642: 9642: 9642: 9642: kPointInTimeRecovery = 0x02, 9642: 9642: 9642: 9642: 9642: 9642: kSkipAnyCorruptedRecords = 0x03, 9642: }; 9642: 9642: struct DbPath { 9642: std::string path; 9642: uint64_t target_size; 9642: 9642: DbPath() : target_size(0) {} 9642: DbPath(const std::string& p, uint64_t t) : path(p), target_size(t) {} 9642: }; 9642: 9642: extern const char* kHostnameForDbHostId; 9642: 9642: enum class CompactionServiceJobStatus : char { 9642: kSuccess, 9642: kFailure, 9642: kUseLocal, 9642: }; 9642: 9642: struct CompactionServiceJobInfo { 9642: std::string db_name; 9642: std::string db_id; 9642: std::string db_session_id; 9642: uint64_t job_id; 9642: 9642: 9642: 9642: 9642: Env::Priority priority; 9642: 9642: CompactionServiceJobInfo(std::string db_name_, std::string db_id_, 9642: std::string db_session_id_, uint64_t job_id_, 9642: Env::Priority priority_) 9642: : db_name(std::move(db_name_)), 9642: db_id(std::move(db_id_)), 9642: db_session_id(std::move(db_session_id_)), 9642: job_id(job_id_), 9642: priority(priority_) {} 9642: }; 9642: 9642: struct CompactionServiceScheduleResponse { 9642: std::string scheduled_job_id; 9642: 9642: CompactionServiceJobStatus status; 9642: CompactionServiceScheduleResponse(std::string scheduled_job_id_, 9642: CompactionServiceJobStatus status_) 9642: : scheduled_job_id(scheduled_job_id_), status(status_) {} 9642: explicit CompactionServiceScheduleResponse(CompactionServiceJobStatus status_) 9642: : status(status_) {} 9642: }; 9642: 9642: 9642: 9642: 9642: class CompactionService : public Customizable { 9642: public: 9642: static const char* Type() { return "CompactionService"; } 9642: 9642: 9642: const char* Name() const override = 0; 9642: 9642: 9642: virtual CompactionServiceScheduleResponse Schedule( 9642: const CompactionServiceJobInfo& , 9642: const std::string& ) { 9642: CompactionServiceScheduleResponse response( 9642: CompactionServiceJobStatus::kUseLocal); 9642: return response; 9642: } 9642: 9642: 9642: virtual CompactionServiceJobStatus Wait( 9642: const std::string& , std::string* ) { 9642: return CompactionServiceJobStatus::kUseLocal; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual CompactionServiceJobStatus StartV2( 9642: const CompactionServiceJobInfo& , 9642: const std::string& ) { 9642: return CompactionServiceJobStatus::kUseLocal; 9642: } 9642: 9642: 9642: virtual CompactionServiceJobStatus WaitForCompleteV2( 9642: const CompactionServiceJobInfo& , 9642: std::string* ) { 9642: return CompactionServiceJobStatus::kUseLocal; 9642: } 9642: 9642: ~CompactionService() override = default; 9642: }; 9642: 9642: struct DBOptions { 9642: 9642: 9642: 9642: 9642: 9642: DBOptions* OldDefaults(int rocksdb_major_version = 4, 9642: int rocksdb_minor_version = 6); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: DBOptions* OptimizeForSmallDb(std::shared_ptr* cache = nullptr); 9642: 9642: 9642: 9642: 9642: 9642: 9642: DBOptions* IncreaseParallelism(int total_threads = 16); 9642: 9642: 9642: 9642: bool create_if_missing = false; 9642: 9642: 9642: 9642: 9642: bool create_missing_column_families = false; 9642: 9642: 9642: 9642: bool error_if_exists = false; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool paranoid_checks = true; 9642: # 544 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool flush_verify_memtable_count = true; 9642: # 561 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool compaction_verify_record_count = true; 9642: # 577 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool track_and_verify_wals_in_manifest = false; 9642: # 597 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool verify_sst_unique_id_in_manifest = true; 9642: 9642: 9642: 9642: 9642: 9642: 9642: Env* env = Env::Default(); 9642: # 622 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: std::shared_ptr rate_limiter = nullptr; 9642: # 638 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: std::shared_ptr sst_file_manager = nullptr; 9642: 9642: 9642: 9642: 9642: 9642: std::shared_ptr info_log = nullptr; 9642: 9642: 9642: 9642: 9642: InfoLogLevel info_log_level = Logger::kDefaultLogLevel; 9642: # 664 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: int max_open_files = -1; 9642: 9642: 9642: 9642: 9642: int max_file_opening_threads = 16; 9642: # 692 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: uint64_t max_total_wal_size = 0; 9642: 9642: 9642: std::shared_ptr statistics = nullptr; 9642: # 705 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool use_fsync = false; 9642: # 731 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: std::vector db_paths; 9642: 9642: 9642: 9642: 9642: 9642: 9642: std::string db_log_dir = ""; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: std::string wal_dir = ""; 9642: # 756 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: uint64_t delete_obsolete_files_period_micros = 6ULL * 60 * 60 * 1000000; 9642: 9642: 9642: 9642: 9642: 9642: 9642: int max_background_jobs = 2; 9642: # 781 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: int max_background_compactions = -1; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: uint32_t max_subcompactions = 1; 9642: # 811 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: int max_background_flushes = -1; 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_t max_log_file_size = 0; 9642: 9642: 9642: 9642: 9642: 9642: size_t log_file_time_to_roll = 0; 9642: 9642: 9642: 9642: size_t keep_log_file_num = 1000; 9642: # 838 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: size_t recycle_log_file_num = 0; 9642: 9642: 9642: 9642: 9642: 9642: uint64_t max_manifest_file_size = 1024 * 1024 * 1024; 9642: 9642: 9642: int table_cache_numshardbits = 6; 9642: # 866 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: uint64_t WAL_ttl_seconds = 0; 9642: uint64_t WAL_size_limit_MB = 0; 9642: 9642: 9642: 9642: 9642: 9642: size_t manifest_preallocation_size = 4 * 1024 * 1024; 9642: # 886 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool allow_mmap_reads = false; 9642: 9642: 9642: 9642: 9642: bool allow_mmap_writes = false; 9642: # 903 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool use_direct_reads = false; 9642: 9642: 9642: 9642: bool use_direct_io_for_flush_and_compaction = false; 9642: # 918 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool allow_fallocate = true; 9642: 9642: 9642: bool is_fd_close_on_exec = true; 9642: 9642: 9642: 9642: 9642: 9642: 9642: unsigned int stats_dump_period_sec = 600; 9642: 9642: 9642: 9642: unsigned int stats_persist_period_sec = 600; 9642: # 944 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool persist_stats_to_disk = false; 9642: 9642: 9642: 9642: 9642: size_t stats_history_buffer_size = 1024 * 1024; 9642: 9642: 9642: 9642: 9642: bool advise_random_on_open = true; 9642: # 966 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: size_t db_write_buffer_size = 0; 9642: # 983 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: std::shared_ptr write_buffer_manager = nullptr; 9642: # 992 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: size_t compaction_readahead_size = 2 * 1024 * 1024; 9642: # 1009 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: size_t random_access_max_buffer_size = 1024 * 1024; 9642: # 1020 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: size_t writable_file_max_buffer_size = 1024 * 1024; 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool use_adaptive_mutex = false; 9642: 9642: 9642: DBOptions(); 9642: 9642: explicit DBOptions(const Options& options); 9642: 9642: void Dump(Logger* log) const; 9642: # 1052 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: uint64_t bytes_per_sync = 0; 9642: # 1062 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: uint64_t wal_bytes_per_sync = 0; 9642: # 1083 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool strict_bytes_per_sync = false; 9642: 9642: 9642: 9642: std::vector> listeners; 9642: 9642: 9642: 9642: 9642: 9642: bool enable_thread_tracking = false; 9642: # 1111 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: uint64_t delayed_write_rate = 0; 9642: # 1126 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool enable_pipelined_write = false; 9642: # 1152 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool unordered_write = false; 9642: # 1162 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool allow_concurrent_memtable_write = true; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool enable_write_thread_adaptive_yield = true; 9642: 9642: 9642: 9642: 9642: 9642: 9642: uint64_t max_write_batch_group_size_bytes = 1 << 20; 9642: # 1186 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: uint64_t write_thread_max_yield_usec = 100; 9642: # 1196 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: uint64_t write_thread_slow_yield_usec = 3; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool skip_stats_update_on_db_open = false; 9642: # 1214 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool skip_checking_sst_file_sizes_on_db_open = false; 9642: 9642: 9642: 9642: WALRecoveryMode wal_recovery_mode = WALRecoveryMode::kPointInTimeRecovery; 9642: 9642: 9642: 9642: bool allow_2pc = false; 9642: 9642: 9642: 9642: 9642: 9642: std::shared_ptr row_cache = nullptr; 9642: 9642: 9642: 9642: 9642: 9642: 9642: WalFilter* wal_filter = nullptr; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool fail_if_options_file_error = true; 9642: 9642: 9642: 9642: 9642: bool dump_malloc_stats = false; 9642: # 1257 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool avoid_flush_during_recovery = false; 9642: # 1266 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool avoid_flush_during_shutdown = false; 9642: # 1281 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool allow_ingest_behind = false; 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool two_write_queues = false; 9642: 9642: 9642: 9642: 9642: bool manual_wal_flush = false; 9642: 9642: 9642: 9642: 9642: 9642: 9642: CompressionType wal_compression = kNoCompression; 9642: # 1314 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool atomic_flush = false; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool avoid_unnecessary_blocking_io = false; 9642: # 1333 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool write_dbid_to_manifest = false; 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_t log_readahead_size = 0; 9642: # 1349 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: std::shared_ptr file_checksum_gen_factory = nullptr; 9642: # 1388 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool best_efforts_recovery = false; 9642: # 1398 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: int max_bgerror_resume_count = 0x7fffffff 9642: # 1398 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: ; 9642: 9642: 9642: 9642: 9642: 9642: 9642: uint64_t bgerror_resume_retry_interval = 1000000; 9642: # 1414 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool allow_data_in_errors = false; 9642: # 1427 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: std::string db_host_id = kHostnameForDbHostId; 9642: # 1437 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: FileTypeSet checksum_handoff_file_types; 9642: # 1446 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: std::shared_ptr compaction_service = nullptr; 9642: # 1458 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: CacheTier lowest_used_cache_tier = CacheTier::kNonVolatileBlockTier; 9642: # 1473 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool enforce_single_del_contracts = true; 9642: # 1490 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: std::string daily_offpeak_time_utc = ""; 9642: # 1500 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: uint64_t follower_refresh_catchup_period_ms = 10000; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: uint64_t follower_catchup_retry_count = 10; 9642: 9642: 9642: 9642: uint64_t follower_catchup_retry_wait_ms = 100; 9642: 9642: 9642: }; 9642: 9642: 9642: struct Options : public DBOptions, public ColumnFamilyOptions { 9642: 9642: Options() : DBOptions(), ColumnFamilyOptions() {} 9642: 9642: Options(const DBOptions& db_options, 9642: const ColumnFamilyOptions& column_family_options) 9642: : DBOptions(db_options), ColumnFamilyOptions(column_family_options) {} 9642: 9642: 9642: 9642: 9642: 9642: 9642: Options* OldDefaults(int rocksdb_major_version = 4, 9642: int rocksdb_minor_version = 6); 9642: 9642: void Dump(Logger* log) const; 9642: 9642: void DumpCFOptions(Logger* log) const; 9642: # 1548 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: Options* PrepareForBulkLoad(); 9642: 9642: 9642: 9642: Options* OptimizeForSmallDb(); 9642: 9642: 9642: 9642: 9642: 9642: Options* DisableExtraChecks(); 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: enum ReadTier { 9642: kReadAllTier = 0x0, 9642: kBlockCacheTier = 0x1, 9642: kPersistedTier = 0x2, 9642: 9642: 9642: 9642: kMemtableTier = 0x3 9642: }; 9642: 9642: 9642: struct ReadOptions { 9642: 9642: 9642: 9642: 9642: 9642: 9642: const Snapshot* snapshot = nullptr; 9642: # 1597 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: const Slice* timestamp = nullptr; 9642: const Slice* iter_start_ts = nullptr; 9642: # 1609 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: std::chrono::microseconds deadline = std::chrono::microseconds::zero(); 9642: 9642: 9642: 9642: 9642: 9642: std::chrono::microseconds io_timeout = std::chrono::microseconds::zero(); 9642: 9642: 9642: 9642: 9642: ReadTier read_tier = kReadAllTier; 9642: # 1634 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: Env::IOPriority rate_limiter_priority = Env::IO_TOTAL; 9642: 9642: 9642: 9642: 9642: uint64_t value_size_soft_limit = std::numeric_limits::max(); 9642: 9642: 9642: 9642: 9642: 9642: std::optional merge_operand_count_threshold; 9642: 9642: 9642: 9642: bool verify_checksums = true; 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool fill_cache = true; 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool ignore_range_deletions = false; 9642: 9642: 9642: 9642: 9642: bool async_io = false; 9642: # 1677 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool optimize_multiget_for_io = true; 9642: # 1690 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: size_t readahead_size = 0; 9642: 9642: 9642: 9642: 9642: uint64_t max_skippable_internal_keys = 0; 9642: # 1708 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: const Slice* iterate_lower_bound = nullptr; 9642: # 1728 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: const Slice* iterate_upper_bound = nullptr; 9642: 9642: 9642: 9642: 9642: 9642: bool tailing = false; 9642: 9642: 9642: 9642: bool managed = false; 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool total_order_seek = false; 9642: # 1761 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool auto_prefix_mode = false; 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool prefix_same_as_start = false; 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool pin_data = false; 9642: # 1786 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool adaptive_readahead = false; 9642: 9642: 9642: 9642: 9642: bool background_purge_on_iterator_cleanup = false; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: std::function table_filter; 9642: # 1811 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool auto_readahead_size = true; 9642: 9642: 9642: 9642: 9642: 9642: 9642: Env::IOActivity io_activity = Env::IOActivity::kUnknown; 9642: 9642: 9642: 9642: ReadOptions() {} 9642: ReadOptions(bool _verify_checksums, bool _fill_cache); 9642: explicit ReadOptions(Env::IOActivity _io_activity); 9642: }; 9642: 9642: 9642: struct WriteOptions { 9642: # 1845 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool sync = false; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool disableWAL = false; 9642: 9642: 9642: 9642: 9642: 9642: bool ignore_missing_column_families = false; 9642: 9642: 9642: 9642: 9642: bool no_slowdown = false; 9642: # 1873 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool low_pri = false; 9642: # 1882 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool memtable_insert_hint_per_batch = false; 9642: # 1897 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: Env::IOPriority rate_limiter_priority = Env::IO_TOTAL; 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_t protection_bytes_per_key = 0; 9642: 9642: 9642: 9642: 9642: Env::IOActivity io_activity = Env::IOActivity::kUnknown; 9642: 9642: WriteOptions() {} 9642: explicit WriteOptions(Env::IOActivity _io_activity); 9642: explicit WriteOptions( 9642: Env::IOPriority _rate_limiter_priority, 9642: Env::IOActivity _io_activity = Env::IOActivity::kUnknown); 9642: }; 9642: 9642: 9642: struct FlushOptions { 9642: 9642: 9642: bool wait; 9642: 9642: 9642: 9642: 9642: 9642: bool allow_write_stall; 9642: FlushOptions() : wait(true), allow_write_stall(false) {} 9642: }; 9642: 9642: 9642: Status CreateLoggerFromOptions(const std::string& dbname, 9642: const DBOptions& options, 9642: std::shared_ptr* logger); 9642: 9642: 9642: struct CompactionOptions { 9642: # 1951 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: CompressionType compression; 9642: 9642: 9642: 9642: uint64_t output_file_size_limit; 9642: 9642: 9642: uint32_t max_subcompactions; 9642: 9642: CompactionOptions() 9642: : compression(kDisableCompressionOption), 9642: output_file_size_limit(std::numeric_limits::max()), 9642: max_subcompactions(0) {} 9642: }; 9642: 9642: 9642: 9642: enum class BottommostLevelCompaction { 9642: 9642: kSkip, 9642: 9642: 9642: 9642: 9642: 9642: kIfHaveCompactionFilter, 9642: 9642: kForce, 9642: 9642: 9642: kForceOptimized, 9642: }; 9642: 9642: 9642: 9642: enum class BlobGarbageCollectionPolicy { 9642: 9642: kForce, 9642: 9642: kDisable, 9642: 9642: kUseDefault, 9642: }; 9642: 9642: 9642: struct CompactRangeOptions { 9642: 9642: 9642: 9642: 9642: bool exclusive_manual_compaction = false; 9642: 9642: 9642: 9642: bool change_level = false; 9642: 9642: 9642: int target_level = -1; 9642: 9642: 9642: uint32_t target_path_id = 0; 9642: 9642: 9642: BottommostLevelCompaction bottommost_level_compaction = 9642: BottommostLevelCompaction::kIfHaveCompactionFilter; 9642: 9642: 9642: bool allow_write_stall = false; 9642: 9642: uint32_t max_subcompactions = 0; 9642: 9642: 9642: const Slice* full_history_ts_low = nullptr; 9642: 9642: 9642: 9642: 9642: 9642: std::atomic* canceled = nullptr; 9642: # 2042 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: BlobGarbageCollectionPolicy blob_garbage_collection_policy = 9642: BlobGarbageCollectionPolicy::kUseDefault; 9642: 9642: 9642: 9642: 9642: 9642: double blob_garbage_collection_age_cutoff = -1; 9642: }; 9642: 9642: 9642: struct IngestExternalFileOptions { 9642: 9642: bool move_files = false; 9642: 9642: bool failed_move_fall_back_to_copy = true; 9642: 9642: 9642: bool snapshot_consistency = true; 9642: 9642: 9642: 9642: 9642: bool allow_global_seqno = true; 9642: 9642: 9642: bool allow_blocking_flush = true; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool ingest_behind = false; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool write_global_seqno = false; 9642: 9642: 9642: 9642: 9642: bool verify_checksums_before_ingest = false; 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_t verify_checksums_readahead_size = 0; 9642: # 2116 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool verify_file_checksum = true; 9642: # 2126 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: bool fail_if_not_bottommost_level = false; 9642: }; 9642: 9642: enum TraceFilterType : uint64_t { 9642: 9642: kTraceFilterNone = 0x0, 9642: 9642: kTraceFilterGet = 0x1 << 0, 9642: 9642: kTraceFilterWrite = 0x1 << 1, 9642: 9642: kTraceFilterIteratorSeek = 0x1 << 2, 9642: 9642: kTraceFilterIteratorSeekForPrev = 0x1 << 3, 9642: 9642: kTraceFilterMultiGet = 0x1 << 4, 9642: }; 9642: 9642: 9642: struct TraceOptions { 9642: 9642: 9642: uint64_t max_trace_file_size = uint64_t{64} * 1024 * 1024 * 1024; 9642: 9642: 9642: uint64_t sampling_frequency = 1; 9642: 9642: uint64_t filter = kTraceFilterNone; 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool preserve_write_order = false; 9642: }; 9642: 9642: 9642: struct ImportColumnFamilyOptions { 9642: 9642: bool move_files = false; 9642: }; 9642: 9642: 9642: struct SizeApproximationOptions { 9642: 9642: 9642: bool include_memtables = false; 9642: 9642: 9642: bool include_files = true; 9642: # 2186 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 9642: double files_size_error_margin = -1.0; 9642: }; 9642: 9642: struct CompactionServiceOptionsOverride { 9642: 9642: 9642: 9642: Env* env = Env::Default(); 9642: std::shared_ptr file_checksum_gen_factory = nullptr; 9642: 9642: const Comparator* comparator = BytewiseComparator(); 9642: std::shared_ptr merge_operator = nullptr; 9642: const CompactionFilter* compaction_filter = nullptr; 9642: std::shared_ptr compaction_filter_factory = nullptr; 9642: std::shared_ptr prefix_extractor = nullptr; 9642: std::shared_ptr table_factory; 9642: std::shared_ptr sst_partitioner_factory = nullptr; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: std::vector> listeners; 9642: 9642: 9642: 9642: 9642: std::shared_ptr statistics = nullptr; 9642: 9642: 9642: 9642: std::vector> 9642: table_properties_collector_factories; 9642: }; 9642: 9642: struct OpenAndCompactOptions { 9642: 9642: std::atomic* canceled = nullptr; 9642: }; 9642: 9642: struct LiveFilesStorageInfoOptions { 9642: 9642: bool include_checksum_info = false; 9642: 9642: 9642: 9642: uint64_t wal_size_for_flush = 0; 9642: }; 9642: 9642: struct WaitForCompactOptions { 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool abort_on_pause = false; 9642: 9642: 9642: bool flush = false; 9642: 9642: 9642: bool wait_for_purge = false; 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool close_db = false; 9642: 9642: 9642: 9642: 9642: 9642: std::chrono::microseconds timeout = std::chrono::microseconds::zero(); 9642: }; 9642: 9642: } 9642: # 35 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 1 9642: # 19 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: 9642: # 31 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: namespace rocksdb { 9642: 9642: 9642: class Cache; 9642: class FilterPolicy; 9642: class FlushBlockPolicyFactory; 9642: class PersistentCache; 9642: class RandomAccessFile; 9642: struct TableReaderOptions; 9642: struct TableBuilderOptions; 9642: class TableBuilder; 9642: class TableFactory; 9642: class TableReader; 9642: class WritableFileWriter; 9642: struct ConfigOptions; 9642: struct EnvOptions; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: enum ChecksumType : char { 9642: kNoChecksum = 0x0, 9642: kCRC32c = 0x1, 9642: kxxHash = 0x2, 9642: kxxHash64 = 0x3, 9642: kXXH3 = 0x4, 9642: }; 9642: 9642: 9642: 9642: 9642: enum class PinningTier { 9642: 9642: 9642: 9642: 9642: kFallback, 9642: 9642: 9642: kNone, 9642: 9642: 9642: 9642: 9642: 9642: 9642: kFlushedAndSimilar, 9642: 9642: 9642: kAll, 9642: }; 9642: 9642: 9642: 9642: struct MetadataCacheOptions { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: PinningTier top_level_index_pinning = PinningTier::kFallback; 9642: 9642: 9642: 9642: PinningTier partition_pinning = PinningTier::kFallback; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: PinningTier unpartitioned_pinning = PinningTier::kFallback; 9642: }; 9642: 9642: struct CacheEntryRoleOptions { 9642: enum class Decision { 9642: kEnabled, 9642: kDisabled, 9642: kFallback, 9642: }; 9642: Decision charged = Decision::kFallback; 9642: bool operator==(const CacheEntryRoleOptions& other) const { 9642: return charged == other.charged; 9642: } 9642: }; 9642: 9642: struct CacheUsageOptions { 9642: CacheEntryRoleOptions options; 9642: std::map options_overrides; 9642: }; 9642: 9642: 9642: struct BlockBasedTableOptions { 9642: static const char* kName() { return "BlockTableOptions"; } 9642: 9642: 9642: 9642: 9642: 9642: std::shared_ptr flush_block_policy_factory; 9642: # 149 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: bool cache_index_and_filter_blocks = false; 9642: 9642: 9642: 9642: 9642: 9642: bool cache_index_and_filter_blocks_with_high_priority = true; 9642: # 178 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: bool pin_l0_filter_and_index_blocks_in_cache = false; 9642: # 200 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: bool pin_top_level_index_and_filter = true; 9642: 9642: 9642: 9642: 9642: 9642: MetadataCacheOptions metadata_cache_options; 9642: 9642: 9642: enum IndexType : char { 9642: 9642: 9642: kBinarySearch = 0x00, 9642: 9642: 9642: 9642: kHashSearch = 0x01, 9642: 9642: 9642: 9642: 9642: kTwoLevelIndexSearch = 0x02, 9642: # 234 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: kBinarySearchWithFirstKey = 0x03, 9642: }; 9642: 9642: IndexType index_type = kBinarySearch; 9642: 9642: 9642: enum DataBlockIndexType : char { 9642: kDataBlockBinarySearch = 0, 9642: kDataBlockBinaryAndHash = 1, 9642: }; 9642: 9642: DataBlockIndexType data_block_index_type = kDataBlockBinarySearch; 9642: 9642: 9642: 9642: double data_block_hash_table_util_ratio = 0.75; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ChecksumType checksum = kXXH3; 9642: 9642: 9642: 9642: 9642: bool no_block_cache = false; 9642: 9642: 9642: 9642: std::shared_ptr block_cache = nullptr; 9642: 9642: 9642: 9642: std::shared_ptr persistent_cache = nullptr; 9642: 9642: 9642: 9642: 9642: 9642: uint64_t block_size = 4 * 1024; 9642: 9642: 9642: 9642: 9642: 9642: 9642: int block_size_deviation = 10; 9642: 9642: 9642: 9642: 9642: 9642: int block_restart_interval = 16; 9642: 9642: 9642: int index_block_restart_interval = 1; 9642: # 303 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: uint64_t metadata_block_size = 4096; 9642: # 391 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: CacheUsageOptions cache_usage_options; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool partition_filters = false; 9642: # 434 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: bool optimize_filters_for_memory = true; 9642: 9642: 9642: 9642: 9642: 9642: bool use_delta_encoding = true; 9642: 9642: 9642: 9642: 9642: std::shared_ptr filter_policy = nullptr; 9642: 9642: 9642: 9642: bool whole_key_filtering = true; 9642: # 463 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: bool detect_filter_construct_corruption = false; 9642: 9642: 9642: 9642: 9642: bool verify_compression = false; 9642: # 491 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: uint32_t read_amp_bytes_per_bit = 0; 9642: # 529 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: uint32_t format_version = 6; 9642: 9642: 9642: 9642: 9642: bool enable_index_compression = true; 9642: 9642: 9642: bool block_align = false; 9642: # 561 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: enum class IndexShorteningMode : char { 9642: 9642: kNoShortening, 9642: 9642: 9642: kShortenSeparators, 9642: 9642: kShortenSeparatorsAndSuccessor, 9642: }; 9642: 9642: IndexShorteningMode index_shortening = 9642: IndexShorteningMode::kShortenSeparators; 9642: # 600 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: size_t max_auto_readahead_size = 256 * 1024; 9642: # 614 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: enum class PrepopulateBlockCache : char { 9642: 9642: kDisable, 9642: 9642: kFlushOnly, 9642: }; 9642: 9642: PrepopulateBlockCache prepopulate_block_cache = 9642: PrepopulateBlockCache::kDisable; 9642: # 651 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: size_t initial_auto_readahead_size = 8 * 1024; 9642: # 671 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: uint64_t num_file_reads_for_auto_readahead = 2; 9642: }; 9642: 9642: 9642: struct BlockBasedTablePropertyNames { 9642: 9642: static const std::string kIndexType; 9642: 9642: static const std::string kWholeKeyFiltering; 9642: 9642: static const std::string kPrefixFiltering; 9642: }; 9642: 9642: 9642: TableFactory* NewBlockBasedTableFactory( 9642: const BlockBasedTableOptions& table_options = BlockBasedTableOptions()); 9642: 9642: enum EncodingType : char { 9642: 9642: kPlain, 9642: # 702 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: kPrefix, 9642: }; 9642: 9642: 9642: struct PlainTablePropertyNames { 9642: static const std::string kEncodingType; 9642: static const std::string kBloomVersion; 9642: static const std::string kNumBloomBlocks; 9642: }; 9642: 9642: const uint32_t kPlainTableVariableLength = 0; 9642: 9642: struct PlainTableOptions { 9642: static const char* kName() { return "PlainTableOptions"; } 9642: 9642: 9642: 9642: 9642: uint32_t user_key_len = kPlainTableVariableLength; 9642: 9642: 9642: 9642: int bloom_bits_per_key = 10; 9642: 9642: 9642: 9642: 9642: 9642: double hash_table_ratio = 0.75; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_t index_sparseness = 16; 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_t huge_page_tlb_size = 0; 9642: # 755 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: EncodingType encoding_type = kPlain; 9642: 9642: 9642: 9642: bool full_scan_mode = false; 9642: 9642: 9642: 9642: 9642: bool store_index_in_file = false; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: TableFactory* NewPlainTableFactory( 9642: const PlainTableOptions& options = PlainTableOptions()); 9642: 9642: struct CuckooTablePropertyNames { 9642: 9642: static const std::string kEmptyKey; 9642: 9642: static const std::string kValueLength; 9642: 9642: static const std::string kNumHashFunc; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: static const std::string kCuckooBlockSize; 9642: 9642: 9642: 9642: 9642: 9642: static const std::string kHashTableSize; 9642: 9642: 9642: static const std::string kIsLastLevel; 9642: 9642: static const std::string kIdentityAsFirstHash; 9642: 9642: static const std::string kUseModuleHash; 9642: 9642: static const std::string kUserKeyLength; 9642: }; 9642: 9642: struct CuckooTableOptions { 9642: static const char* kName() { return "CuckooTableOptions"; } 9642: 9642: 9642: 9642: double hash_table_ratio = 0.9; 9642: 9642: 9642: 9642: 9642: 9642: uint32_t max_search_depth = 100; 9642: 9642: 9642: 9642: 9642: 9642: uint32_t cuckoo_block_size = 5; 9642: 9642: 9642: 9642: 9642: bool identity_as_first_hash = false; 9642: 9642: 9642: 9642: 9642: 9642: bool use_module_hash = true; 9642: }; 9642: 9642: 9642: TableFactory* NewCuckooTableFactory( 9642: const CuckooTableOptions& table_options = CuckooTableOptions()); 9642: 9642: class RandomAccessFileReader; 9642: 9642: 9642: class TableFactory : public Customizable { 9642: public: 9642: ~TableFactory() override {} 9642: 9642: static const char* kBlockCacheOpts() { return "BlockCache"; } 9642: static const char* kBlockBasedTableName() { return "BlockBasedTable"; } 9642: static const char* kPlainTableName() { return "PlainTable"; } 9642: static const char* kCuckooTableName() { return "CuckooTable"; } 9642: 9642: 9642: static Status CreateFromString(const ConfigOptions& config_options, 9642: const std::string& id, 9642: std::shared_ptr* factory); 9642: 9642: static const char* Type() { return "TableFactory"; } 9642: # 879 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: virtual Status NewTableReader( 9642: const TableReaderOptions& table_reader_options, 9642: std::unique_ptr&& file, uint64_t file_size, 9642: std::unique_ptr* table_reader, 9642: bool prefetch_index_and_filter_in_cache = true) const { 9642: ReadOptions ro; 9642: return NewTableReader(ro, table_reader_options, std::move(file), file_size, 9642: table_reader, prefetch_index_and_filter_in_cache); 9642: } 9642: 9642: 9642: 9642: virtual Status NewTableReader( 9642: const ReadOptions& ro, const TableReaderOptions& table_reader_options, 9642: std::unique_ptr&& file, uint64_t file_size, 9642: std::unique_ptr* table_reader, 9642: bool prefetch_index_and_filter_in_cache) const = 0; 9642: # 915 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: virtual TableBuilder* NewTableBuilder( 9642: const TableBuilderOptions& table_builder_options, 9642: WritableFileWriter* file) const = 0; 9642: 9642: 9642: virtual bool IsDeleteRangeSupported() const { return false; } 9642: }; 9642: # 932 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 9642: TableFactory* NewAdaptiveTableFactory( 9642: std::shared_ptr table_factory_to_write = nullptr, 9642: std::shared_ptr block_based_table_factory = nullptr, 9642: std::shared_ptr plain_table_factory = nullptr, 9642: std::shared_ptr cuckoo_table_factory = nullptr); 9642: 9642: } 9642: # 36 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 2 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class FileLock; 9642: class FSDirectory; 9642: class FSRandomAccessFile; 9642: class FSRandomRWFile; 9642: class FSSequentialFile; 9642: class FSWritableFile; 9642: class Logger; 9642: class Slice; 9642: struct ImmutableDBOptions; 9642: struct MutableDBOptions; 9642: class RateLimiter; 9642: struct ConfigOptions; 9642: 9642: using AccessPattern = RandomAccessFile::AccessPattern; 9642: using FileAttributes = Env::FileAttributes; 9642: 9642: 9642: 9642: 9642: 9642: 9642: enum class IOPriority : uint8_t { 9642: kIOLow, 9642: kIOHigh, 9642: kIOTotal, 9642: }; 9642: 9642: 9642: 9642: 9642: enum class IOType : uint8_t { 9642: kData, 9642: kFilter, 9642: kIndex, 9642: kMetadata, 9642: kWAL, 9642: kManifest, 9642: kLog, 9642: kUnknown, 9642: kInvalid, 9642: }; 9642: 9642: 9642: 9642: enum FSSupportedOps { 9642: kAsyncIO, 9642: kFSBuffer, 9642: 9642: kVerifyAndReconstructRead, 9642: 9642: 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: struct IOOptions { 9642: 9642: std::chrono::microseconds timeout; 9642: 9642: 9642: 9642: IOPriority prio; 9642: 9642: 9642: 9642: 9642: 9642: Env::IOPriority rate_limiter_priority; 9642: 9642: 9642: IOType type; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: std::unordered_map property_bag; 9642: 9642: 9642: 9642: bool force_dir_fsync; 9642: 9642: 9642: 9642: bool do_not_recurse; 9642: # 140 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: bool verify_and_reconstruct_read; 9642: 9642: 9642: Env::IOActivity io_activity = Env::IOActivity::kUnknown; 9642: 9642: IOOptions() : IOOptions(false) {} 9642: 9642: explicit IOOptions(bool force_dir_fsync_) 9642: : timeout(std::chrono::microseconds::zero()), 9642: prio(IOPriority::kIOLow), 9642: rate_limiter_priority(Env::IO_TOTAL), 9642: type(IOType::kUnknown), 9642: force_dir_fsync(force_dir_fsync_), 9642: do_not_recurse(false), 9642: verify_and_reconstruct_read(false) {} 9642: }; 9642: 9642: struct DirFsyncOptions { 9642: enum FsyncReason : uint8_t { 9642: kNewFileSynced, 9642: kFileRenamed, 9642: kDirRenamed, 9642: kFileDeleted, 9642: kDefault, 9642: } reason; 9642: 9642: std::string renamed_new_name; 9642: 9642: 9642: DirFsyncOptions(); 9642: 9642: explicit DirFsyncOptions(std::string file_renamed_new_name); 9642: 9642: explicit DirFsyncOptions(FsyncReason fsync_reason); 9642: }; 9642: 9642: 9642: 9642: 9642: struct FileOptions : EnvOptions { 9642: 9642: 9642: IOOptions io_options; 9642: 9642: 9642: 9642: 9642: 9642: 9642: Temperature temperature = Temperature::kUnknown; 9642: 9642: 9642: 9642: ChecksumType handoff_checksum_type; 9642: 9642: FileOptions() : EnvOptions(), handoff_checksum_type(ChecksumType::kCRC32c) {} 9642: 9642: FileOptions(const DBOptions& opts) 9642: : EnvOptions(opts), handoff_checksum_type(ChecksumType::kCRC32c) {} 9642: 9642: FileOptions(const EnvOptions& opts) 9642: : EnvOptions(opts), handoff_checksum_type(ChecksumType::kCRC32c) {} 9642: 9642: FileOptions(const FileOptions& opts) 9642: : EnvOptions(opts), 9642: io_options(opts.io_options), 9642: temperature(opts.temperature), 9642: handoff_checksum_type(opts.handoff_checksum_type) {} 9642: 9642: FileOptions& operator=(const FileOptions&) = default; 9642: }; 9642: 9642: 9642: 9642: struct IODebugContext { 9642: 9642: std::string file_path; 9642: 9642: 9642: std::map counters; 9642: 9642: 9642: std::string msg; 9642: 9642: 9642: std::string request_id; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: enum TraceData : char { 9642: 9642: 9642: 9642: kRequestID = 0, 9642: }; 9642: uint64_t trace_data = 0; 9642: 9642: IODebugContext() {} 9642: 9642: void AddCounter(std::string& name, uint64_t value) { 9642: counters.emplace(name, value); 9642: } 9642: 9642: 9642: 9642: void SetRequestId(const std::string& _request_id) { 9642: request_id = _request_id; 9642: trace_data |= (1 << TraceData::kRequestID); 9642: } 9642: 9642: std::string ToString() { 9642: std::ostringstream ss; 9642: ss << file_path << ", "; 9642: for (auto counter : counters) { 9642: ss << counter.first << " = " << counter.second << ","; 9642: } 9642: ss << msg; 9642: return ss.str(); 9642: } 9642: }; 9642: 9642: 9642: 9642: 9642: using IOHandleDeleter = std::function; 9642: # 290 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: class FileSystem : public Customizable { 9642: public: 9642: FileSystem(); 9642: 9642: 9642: FileSystem(const FileSystem&) = delete; 9642: 9642: virtual ~FileSystem(); 9642: 9642: static const char* Type() { return "FileSystem"; } 9642: static const char* kDefaultName() { return "DefaultFileSystem"; } 9642: # 311 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: static Status CreateFromString(const ConfigOptions& options, 9642: const std::string& value, 9642: std::shared_ptr* result); 9642: 9642: 9642: 9642: static std::shared_ptr Default(); 9642: # 334 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual Status RegisterDbPaths(const std::vector& ) { 9642: return Status::OK(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status UnregisterDbPaths(const std::vector& ) { 9642: return Status::OK(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual IOStatus NewSequentialFile(const std::string& fname, 9642: const FileOptions& file_opts, 9642: std::unique_ptr* result, 9642: IODebugContext* dbg) = 0; 9642: # 366 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual IOStatus NewRandomAccessFile( 9642: const std::string& fname, const FileOptions& file_opts, 9642: std::unique_ptr* result, IODebugContext* dbg) = 0; 9642: 9642: 9642: enum WriteLifeTimeHint { 9642: kWLTHNotSet = 0, 9642: kWLTHNone, 9642: kWLTHShort, 9642: kWLTHMedium, 9642: kWLTHLong, 9642: kWLTHExtreme, 9642: }; 9642: # 387 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual IOStatus NewWritableFile(const std::string& fname, 9642: const FileOptions& file_opts, 9642: std::unique_ptr* result, 9642: IODebugContext* dbg) = 0; 9642: # 400 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual IOStatus ReopenWritableFile( 9642: const std::string& , const FileOptions& , 9642: std::unique_ptr* , IODebugContext* ) { 9642: return IOStatus::NotSupported("ReopenWritableFile"); 9642: } 9642: 9642: 9642: virtual IOStatus ReuseWritableFile(const std::string& fname, 9642: const std::string& old_fname, 9642: const FileOptions& file_opts, 9642: std::unique_ptr* result, 9642: IODebugContext* dbg); 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual IOStatus NewRandomRWFile(const std::string& , 9642: const FileOptions& , 9642: std::unique_ptr* , 9642: IODebugContext* ) { 9642: return IOStatus::NotSupported( 9642: "RandomRWFile is not implemented in this FileSystem"); 9642: } 9642: 9642: 9642: 9642: 9642: virtual IOStatus NewMemoryMappedFileBuffer( 9642: const std::string& , 9642: std::unique_ptr* ) { 9642: return IOStatus::NotSupported( 9642: "MemoryMappedFileBuffer is not implemented in this FileSystem"); 9642: } 9642: # 443 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual IOStatus NewDirectory(const std::string& name, 9642: const IOOptions& io_opts, 9642: std::unique_ptr* result, 9642: IODebugContext* dbg) = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual IOStatus FileExists(const std::string& fname, 9642: const IOOptions& options, 9642: IODebugContext* dbg) = 0; 9642: # 464 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual IOStatus GetChildren(const std::string& dir, const IOOptions& options, 9642: std::vector* result, 9642: IODebugContext* dbg) = 0; 9642: # 478 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual IOStatus GetChildrenFileAttributes( 9642: const std::string& dir, const IOOptions& options, 9642: std::vector* result, IODebugContext* dbg) { 9642: 9642: # 481 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 3 4 9642: (static_cast ( 9642: # 481 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: result != nullptr 9642: # 481 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 481 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: "result != nullptr" 9642: # 481 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 481 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: ; 9642: std::vector child_fnames; 9642: IOStatus s = GetChildren(dir, options, &child_fnames, dbg); 9642: if (!s.ok()) { 9642: return s; 9642: } 9642: result->resize(child_fnames.size()); 9642: size_t result_size = 0; 9642: for (size_t i = 0; i < child_fnames.size(); ++i) { 9642: const std::string path = dir + "/" + child_fnames[i]; 9642: if (!(s = GetFileSize(path, options, &(*result)[result_size].size_bytes, 9642: dbg)) 9642: .ok()) { 9642: if (FileExists(path, options, dbg).IsNotFound()) { 9642: 9642: continue; 9642: } 9642: return s; 9642: } 9642: (*result)[result_size].name = std::move(child_fnames[i]); 9642: result_size++; 9642: } 9642: result->resize(result_size); 9642: return IOStatus::OK(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual IOStatus DeleteFile(const std::string& fname, 9642: const IOOptions& options, 9642: IODebugContext* dbg) = 0; 9642: 9642: 9642: virtual IOStatus Truncate(const std::string& , size_t , 9642: const IOOptions& , 9642: IODebugContext* ) { 9642: return IOStatus::NotSupported( 9642: "Truncate is not supported for this FileSystem"); 9642: } 9642: 9642: 9642: virtual IOStatus CreateDir(const std::string& dirname, 9642: const IOOptions& options, IODebugContext* dbg) = 0; 9642: 9642: 9642: 9642: virtual IOStatus CreateDirIfMissing(const std::string& dirname, 9642: const IOOptions& options, 9642: IODebugContext* dbg) = 0; 9642: 9642: 9642: virtual IOStatus DeleteDir(const std::string& dirname, 9642: const IOOptions& options, IODebugContext* dbg) = 0; 9642: 9642: 9642: virtual IOStatus GetFileSize(const std::string& fname, 9642: const IOOptions& options, uint64_t* file_size, 9642: IODebugContext* dbg) = 0; 9642: 9642: 9642: virtual IOStatus GetFileModificationTime(const std::string& fname, 9642: const IOOptions& options, 9642: uint64_t* file_mtime, 9642: IODebugContext* dbg) = 0; 9642: 9642: virtual IOStatus RenameFile(const std::string& src, const std::string& target, 9642: const IOOptions& options, 9642: IODebugContext* dbg) = 0; 9642: 9642: 9642: virtual IOStatus LinkFile(const std::string& , 9642: const std::string& , 9642: const IOOptions& , 9642: IODebugContext* ) { 9642: return IOStatus::NotSupported( 9642: "LinkFile is not supported for this FileSystem"); 9642: } 9642: 9642: virtual IOStatus NumFileLinks(const std::string& , 9642: const IOOptions& , 9642: uint64_t* , IODebugContext* ) { 9642: return IOStatus::NotSupported( 9642: "Getting number of file links is not supported for this FileSystem"); 9642: } 9642: 9642: virtual IOStatus AreFilesSame(const std::string& , 9642: const std::string& , 9642: const IOOptions& , bool* , 9642: IODebugContext* ) { 9642: return IOStatus::NotSupported( 9642: "AreFilesSame is not supported for this FileSystem"); 9642: } 9642: # 591 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual IOStatus LockFile(const std::string& fname, const IOOptions& options, 9642: FileLock** lock, IODebugContext* dbg) = 0; 9642: 9642: 9642: 9642: 9642: virtual IOStatus UnlockFile(FileLock* lock, const IOOptions& options, 9642: IODebugContext* dbg) = 0; 9642: 9642: 9642: 9642: 9642: 9642: virtual IOStatus GetTestDirectory(const IOOptions& options, std::string* path, 9642: IODebugContext* dbg) = 0; 9642: 9642: 9642: 9642: 9642: virtual IOStatus NewLogger(const std::string& fname, const IOOptions& io_opts, 9642: std::shared_ptr* result, 9642: IODebugContext* dbg); 9642: 9642: 9642: virtual IOStatus GetAbsolutePath(const std::string& db_path, 9642: const IOOptions& options, 9642: std::string* output_path, 9642: IODebugContext* dbg) = 0; 9642: 9642: 9642: 9642: virtual void SanitizeFileOptions(FileOptions* ) const {} 9642: 9642: 9642: 9642: virtual FileOptions OptimizeForLogRead(const FileOptions& file_options) const; 9642: 9642: 9642: 9642: 9642: virtual FileOptions OptimizeForManifestRead( 9642: const FileOptions& file_options) const; 9642: 9642: 9642: 9642: 9642: virtual FileOptions OptimizeForLogWrite(const FileOptions& file_options, 9642: const DBOptions& db_options) const; 9642: 9642: 9642: 9642: 9642: 9642: virtual FileOptions OptimizeForManifestWrite( 9642: const FileOptions& file_options) const; 9642: 9642: 9642: 9642: 9642: virtual FileOptions OptimizeForCompactionTableWrite( 9642: const FileOptions& file_options, 9642: const ImmutableDBOptions& immutable_ops) const; 9642: 9642: 9642: 9642: 9642: virtual FileOptions OptimizeForCompactionTableRead( 9642: const FileOptions& file_options, 9642: const ImmutableDBOptions& db_options) const; 9642: 9642: 9642: 9642: 9642: virtual FileOptions OptimizeForBlobFileRead( 9642: const FileOptions& file_options, 9642: const ImmutableDBOptions& db_options) const; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual IOStatus GetFreeSpace(const std::string& , 9642: const IOOptions& , 9642: uint64_t* , 9642: IODebugContext* ) { 9642: return IOStatus::NotSupported("GetFreeSpace"); 9642: } 9642: 9642: virtual IOStatus IsDirectory(const std::string& , 9642: const IOOptions& options, bool* is_dir, 9642: IODebugContext* ) = 0; 9642: # 692 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual IOStatus Poll(std::vector& , 9642: size_t ) { 9642: return IOStatus::OK(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: virtual IOStatus AbortIO(std::vector& ) { 9642: return IOStatus::OK(); 9642: } 9642: # 713 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual void DiscardCacheForDirectory(const std::string& ) {} 9642: # 725 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual void SupportedOps(int64_t& supported_ops) { 9642: supported_ops = 0; 9642: supported_ops |= (1 << FSSupportedOps::kAsyncIO); 9642: } 9642: 9642: 9642: 9642: private: 9642: void operator=(const FileSystem&); 9642: }; 9642: 9642: 9642: class FSSequentialFile { 9642: public: 9642: FSSequentialFile() {} 9642: 9642: virtual ~FSSequentialFile() {} 9642: # 755 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual IOStatus Read(size_t n, const IOOptions& options, Slice* result, 9642: char* scratch, IODebugContext* dbg) = 0; 9642: # 765 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual IOStatus Skip(uint64_t n) = 0; 9642: 9642: 9642: 9642: virtual bool use_direct_io() const { return false; } 9642: 9642: 9642: 9642: virtual size_t GetRequiredBufferAlignment() const { return kDefaultPageSize; } 9642: 9642: 9642: 9642: 9642: virtual IOStatus InvalidateCache(size_t , size_t ) { 9642: return IOStatus::NotSupported("InvalidateCache not supported."); 9642: } 9642: 9642: 9642: 9642: virtual IOStatus PositionedRead(uint64_t , size_t , 9642: const IOOptions& , 9642: Slice* , char* , 9642: IODebugContext* ) { 9642: return IOStatus::NotSupported("PositionedRead"); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Temperature GetTemperature() const { return Temperature::kUnknown; } 9642: 9642: 9642: 9642: }; 9642: 9642: using FSAllocationPtr = std::unique_ptr>; 9642: 9642: 9642: struct FSReadRequest { 9642: 9642: uint64_t offset; 9642: 9642: 9642: 9642: size_t len; 9642: # 820 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: char* scratch; 9642: # 830 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: Slice result; 9642: 9642: 9642: 9642: IOStatus status; 9642: # 870 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: FSAllocationPtr fs_scratch; 9642: }; 9642: 9642: 9642: class FSRandomAccessFile { 9642: public: 9642: FSRandomAccessFile() {} 9642: 9642: virtual ~FSRandomAccessFile() {} 9642: # 894 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual IOStatus Read(uint64_t offset, size_t n, const IOOptions& options, 9642: Slice* result, char* scratch, 9642: IODebugContext* dbg) const = 0; 9642: 9642: 9642: 9642: 9642: virtual IOStatus Prefetch(uint64_t , size_t , 9642: const IOOptions& , 9642: IODebugContext* ) { 9642: return IOStatus::NotSupported("Prefetch"); 9642: } 9642: # 915 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual IOStatus MultiRead(FSReadRequest* reqs, size_t num_reqs, 9642: const IOOptions& options, IODebugContext* dbg) { 9642: 9642: # 917 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 3 4 9642: (static_cast ( 9642: # 917 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: reqs != nullptr 9642: # 917 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 917 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: "reqs != nullptr" 9642: # 917 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 917 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: ; 9642: for (size_t i = 0; i < num_reqs; ++i) { 9642: FSReadRequest& req = reqs[i]; 9642: req.status = 9642: Read(req.offset, req.len, options, &req.result, req.scratch, dbg); 9642: } 9642: return IOStatus::OK(); 9642: } 9642: # 941 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual size_t GetUniqueId(char* , size_t ) const { 9642: return 0; 9642: 9642: } 9642: 9642: enum AccessPattern { kNormal, kRandom, kSequential, kWillNeed, kWontNeed }; 9642: 9642: virtual void Hint(AccessPattern ) {} 9642: 9642: 9642: 9642: virtual bool use_direct_io() const { return false; } 9642: 9642: 9642: 9642: virtual size_t GetRequiredBufferAlignment() const { return kDefaultPageSize; } 9642: 9642: 9642: 9642: 9642: virtual IOStatus InvalidateCache(size_t , size_t ) { 9642: return IOStatus::NotSupported("InvalidateCache not supported."); 9642: } 9642: # 997 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual IOStatus ReadAsync(FSReadRequest& req, const IOOptions& opts, 9642: std::function cb, 9642: void* cb_arg, void** , 9642: IOHandleDeleter* , IODebugContext* dbg) { 9642: req.status = 9642: Read(req.offset, req.len, opts, &(req.result), req.scratch, dbg); 9642: cb(req, cb_arg); 9642: return IOStatus::OK(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Temperature GetTemperature() const { return Temperature::kUnknown; } 9642: 9642: 9642: 9642: }; 9642: 9642: 9642: 9642: struct DataVerificationInfo { 9642: 9642: Slice checksum; 9642: }; 9642: 9642: 9642: 9642: 9642: class FSWritableFile { 9642: public: 9642: FSWritableFile() 9642: : last_preallocated_block_(0), 9642: preallocation_block_size_(0), 9642: io_priority_(Env::IO_TOTAL), 9642: write_hint_(Env::WLTH_NOT_SET), 9642: strict_bytes_per_sync_(false) {} 9642: 9642: explicit FSWritableFile(const FileOptions& options) 9642: : last_preallocated_block_(0), 9642: preallocation_block_size_(0), 9642: io_priority_(Env::IO_TOTAL), 9642: write_hint_(Env::WLTH_NOT_SET), 9642: strict_bytes_per_sync_(options.strict_bytes_per_sync) {} 9642: 9642: 9642: 9642: 9642: virtual ~FSWritableFile() {} 9642: 9642: 9642: 9642: 9642: virtual IOStatus Append(const Slice& data, const IOOptions& options, 9642: IODebugContext* dbg) = 0; 9642: # 1063 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual IOStatus Append(const Slice& data, const IOOptions& options, 9642: const DataVerificationInfo& , 9642: IODebugContext* dbg) { 9642: return Append(data, options, dbg); 9642: } 9642: # 1089 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual IOStatus PositionedAppend(const Slice& , 9642: uint64_t , 9642: const IOOptions& , 9642: IODebugContext* ) { 9642: return IOStatus::NotSupported("PositionedAppend"); 9642: } 9642: # 1104 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual IOStatus PositionedAppend( 9642: const Slice& , uint64_t , 9642: const IOOptions& , 9642: const DataVerificationInfo& , 9642: IODebugContext* ) { 9642: return IOStatus::NotSupported("PositionedAppend"); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: virtual IOStatus Truncate(uint64_t , const IOOptions& , 9642: IODebugContext* ) { 9642: return IOStatus::OK(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual IOStatus Close(const IOOptions& , 9642: IODebugContext* ) = 0; 9642: 9642: virtual IOStatus Flush(const IOOptions& options, IODebugContext* dbg) = 0; 9642: virtual IOStatus Sync(const IOOptions& options, 9642: IODebugContext* dbg) = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual IOStatus Fsync(const IOOptions& options, IODebugContext* dbg) { 9642: return Sync(options, dbg); 9642: } 9642: 9642: 9642: 9642: virtual bool IsSyncThreadSafe() const { return false; } 9642: 9642: 9642: 9642: virtual bool use_direct_io() const { return false; } 9642: 9642: 9642: 9642: virtual size_t GetRequiredBufferAlignment() const { return kDefaultPageSize; } 9642: 9642: virtual void SetWriteLifeTimeHint(Env::WriteLifeTimeHint hint) { 9642: write_hint_ = hint; 9642: } 9642: # 1170 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual void SetIOPriority(Env::IOPriority pri) { io_priority_ = pri; } 9642: 9642: virtual Env::IOPriority GetIOPriority() { return io_priority_; } 9642: 9642: virtual Env::WriteLifeTimeHint GetWriteLifeTimeHint() { return write_hint_; } 9642: 9642: 9642: 9642: virtual uint64_t GetFileSize(const IOOptions& , 9642: IODebugContext* ) = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void SetPreallocationBlockSize(size_t size) { 9642: preallocation_block_size_ = size; 9642: } 9642: 9642: virtual void GetPreallocationStatus(size_t* block_size, 9642: size_t* last_allocated_block) { 9642: *last_allocated_block = last_preallocated_block_; 9642: *block_size = preallocation_block_size_; 9642: } 9642: 9642: 9642: virtual size_t GetUniqueId(char* , size_t ) const { 9642: return 0; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: virtual IOStatus InvalidateCache(size_t , size_t ) { 9642: return IOStatus::NotSupported("InvalidateCache not supported."); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual IOStatus RangeSync(uint64_t , uint64_t , 9642: const IOOptions& options, IODebugContext* dbg) { 9642: if (strict_bytes_per_sync_) { 9642: return Sync(options, dbg); 9642: } 9642: return IOStatus::OK(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void PrepareWrite(size_t offset, size_t len, const IOOptions& options, 9642: IODebugContext* dbg) { 9642: if (preallocation_block_size_ == 0) { 9642: return; 9642: } 9642: 9642: 9642: 9642: const auto block_size = preallocation_block_size_; 9642: size_t new_last_preallocated_block = 9642: (offset + len + block_size - 1) / block_size; 9642: if (new_last_preallocated_block > last_preallocated_block_) { 9642: size_t num_spanned_blocks = 9642: new_last_preallocated_block - last_preallocated_block_; 9642: Allocate(block_size * last_preallocated_block_, 9642: block_size * num_spanned_blocks, options, dbg) 9642: .PermitUncheckedError(); 9642: last_preallocated_block_ = new_last_preallocated_block; 9642: } 9642: } 9642: 9642: 9642: virtual IOStatus Allocate(uint64_t , uint64_t , 9642: const IOOptions& , 9642: IODebugContext* ) { 9642: return IOStatus::OK(); 9642: } 9642: 9642: 9642: 9642: 9642: protected: 9642: size_t preallocation_block_size() { return preallocation_block_size_; } 9642: 9642: private: 9642: size_t last_preallocated_block_; 9642: size_t preallocation_block_size_; 9642: 9642: FSWritableFile(const FSWritableFile&); 9642: void operator=(const FSWritableFile&); 9642: 9642: protected: 9642: Env::IOPriority io_priority_; 9642: Env::WriteLifeTimeHint write_hint_; 9642: const bool strict_bytes_per_sync_; 9642: }; 9642: 9642: 9642: class FSRandomRWFile { 9642: public: 9642: FSRandomRWFile() {} 9642: 9642: 9642: 9642: 9642: virtual ~FSRandomRWFile() {} 9642: 9642: 9642: 9642: virtual bool use_direct_io() const { return false; } 9642: 9642: 9642: 9642: virtual size_t GetRequiredBufferAlignment() const { return kDefaultPageSize; } 9642: 9642: 9642: 9642: virtual IOStatus Write(uint64_t offset, const Slice& data, 9642: const IOOptions& options, IODebugContext* dbg) = 0; 9642: # 1307 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: virtual IOStatus Read(uint64_t offset, size_t n, const IOOptions& options, 9642: Slice* result, char* scratch, 9642: IODebugContext* dbg) const = 0; 9642: 9642: virtual IOStatus Flush(const IOOptions& options, IODebugContext* dbg) = 0; 9642: 9642: virtual IOStatus Sync(const IOOptions& options, IODebugContext* dbg) = 0; 9642: 9642: virtual IOStatus Fsync(const IOOptions& options, IODebugContext* dbg) { 9642: return Sync(options, dbg); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual IOStatus Close(const IOOptions& options, IODebugContext* dbg) = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Temperature GetTemperature() const { return Temperature::kUnknown; } 9642: 9642: 9642: 9642: 9642: 9642: FSRandomRWFile(const RandomRWFile&) = delete; 9642: FSRandomRWFile& operator=(const RandomRWFile&) = delete; 9642: }; 9642: 9642: 9642: 9642: class FSMemoryMappedFileBuffer { 9642: public: 9642: FSMemoryMappedFileBuffer(void* _base, size_t _length) 9642: : base_(_base), length_(_length) {} 9642: 9642: virtual ~FSMemoryMappedFileBuffer() = 0; 9642: 9642: 9642: 9642: FSMemoryMappedFileBuffer(const FSMemoryMappedFileBuffer&) = delete; 9642: FSMemoryMappedFileBuffer& operator=(const FSMemoryMappedFileBuffer&) = delete; 9642: 9642: void* GetBase() const { return base_; } 9642: size_t GetLen() const { return length_; } 9642: 9642: protected: 9642: void* base_; 9642: const size_t length_; 9642: }; 9642: 9642: 9642: 9642: class FSDirectory { 9642: public: 9642: 9642: 9642: 9642: virtual ~FSDirectory() {} 9642: 9642: virtual IOStatus Fsync(const IOOptions& options, IODebugContext* dbg) = 0; 9642: 9642: 9642: 9642: 9642: virtual IOStatus FsyncWithDirOptions( 9642: const IOOptions& options, IODebugContext* dbg, 9642: const DirFsyncOptions& ) { 9642: return Fsync(options, dbg); 9642: } 9642: 9642: 9642: 9642: 9642: virtual IOStatus Close(const IOOptions& , 9642: IODebugContext* ) { 9642: return IOStatus::NotSupported("Close"); 9642: } 9642: 9642: virtual size_t GetUniqueId(char* , size_t ) const { 9642: return 0; 9642: } 9642: 9642: 9642: 9642: }; 9642: # 1429 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 9642: class FileSystemWrapper : public FileSystem { 9642: public: 9642: 9642: explicit FileSystemWrapper(const std::shared_ptr& t); 9642: ~FileSystemWrapper() override {} 9642: 9642: 9642: FileSystem* target() const { return target_.get(); } 9642: 9642: 9642: IOStatus NewSequentialFile(const std::string& f, const FileOptions& file_opts, 9642: std::unique_ptr* r, 9642: IODebugContext* dbg) override { 9642: return target_->NewSequentialFile(f, file_opts, r, dbg); 9642: } 9642: IOStatus NewRandomAccessFile(const std::string& f, 9642: const FileOptions& file_opts, 9642: std::unique_ptr* r, 9642: IODebugContext* dbg) override { 9642: return target_->NewRandomAccessFile(f, file_opts, r, dbg); 9642: } 9642: IOStatus NewWritableFile(const std::string& f, const FileOptions& file_opts, 9642: std::unique_ptr* r, 9642: IODebugContext* dbg) override { 9642: return target_->NewWritableFile(f, file_opts, r, dbg); 9642: } 9642: IOStatus ReopenWritableFile(const std::string& fname, 9642: const FileOptions& file_opts, 9642: std::unique_ptr* result, 9642: IODebugContext* dbg) override { 9642: return target_->ReopenWritableFile(fname, file_opts, result, dbg); 9642: } 9642: IOStatus ReuseWritableFile(const std::string& fname, 9642: const std::string& old_fname, 9642: const FileOptions& file_opts, 9642: std::unique_ptr* r, 9642: IODebugContext* dbg) override { 9642: return target_->ReuseWritableFile(fname, old_fname, file_opts, r, dbg); 9642: } 9642: IOStatus NewRandomRWFile(const std::string& fname, 9642: const FileOptions& file_opts, 9642: std::unique_ptr* result, 9642: IODebugContext* dbg) override { 9642: return target_->NewRandomRWFile(fname, file_opts, result, dbg); 9642: } 9642: IOStatus NewMemoryMappedFileBuffer( 9642: const std::string& fname, 9642: std::unique_ptr* result) override { 9642: return target_->NewMemoryMappedFileBuffer(fname, result); 9642: } 9642: IOStatus NewDirectory(const std::string& name, const IOOptions& io_opts, 9642: std::unique_ptr* result, 9642: IODebugContext* dbg) override { 9642: return target_->NewDirectory(name, io_opts, result, dbg); 9642: } 9642: IOStatus FileExists(const std::string& f, const IOOptions& io_opts, 9642: IODebugContext* dbg) override { 9642: return target_->FileExists(f, io_opts, dbg); 9642: } 9642: IOStatus GetChildren(const std::string& dir, const IOOptions& io_opts, 9642: std::vector* r, 9642: IODebugContext* dbg) override { 9642: return target_->GetChildren(dir, io_opts, r, dbg); 9642: } 9642: IOStatus GetChildrenFileAttributes(const std::string& dir, 9642: const IOOptions& options, 9642: std::vector* result, 9642: IODebugContext* dbg) override { 9642: return target_->GetChildrenFileAttributes(dir, options, result, dbg); 9642: } 9642: IOStatus DeleteFile(const std::string& f, const IOOptions& options, 9642: IODebugContext* dbg) override { 9642: return target_->DeleteFile(f, options, dbg); 9642: } 9642: IOStatus Truncate(const std::string& fname, size_t size, 9642: const IOOptions& options, IODebugContext* dbg) override { 9642: return target_->Truncate(fname, size, options, dbg); 9642: } 9642: IOStatus CreateDir(const std::string& d, const IOOptions& options, 9642: IODebugContext* dbg) override { 9642: return target_->CreateDir(d, options, dbg); 9642: } 9642: IOStatus CreateDirIfMissing(const std::string& d, const IOOptions& options, 9642: IODebugContext* dbg) override { 9642: return target_->CreateDirIfMissing(d, options, dbg); 9642: } 9642: IOStatus DeleteDir(const std::string& d, const IOOptions& options, 9642: IODebugContext* dbg) override { 9642: return target_->DeleteDir(d, options, dbg); 9642: } 9642: IOStatus GetFileSize(const std::string& f, const IOOptions& options, 9642: uint64_t* s, IODebugContext* dbg) override { 9642: return target_->GetFileSize(f, options, s, dbg); 9642: } 9642: 9642: IOStatus GetFileModificationTime(const std::string& fname, 9642: const IOOptions& options, 9642: uint64_t* file_mtime, 9642: IODebugContext* dbg) override { 9642: return target_->GetFileModificationTime(fname, options, file_mtime, dbg); 9642: } 9642: 9642: IOStatus GetAbsolutePath(const std::string& db_path, const IOOptions& options, 9642: std::string* output_path, 9642: IODebugContext* dbg) override { 9642: return target_->GetAbsolutePath(db_path, options, output_path, dbg); 9642: } 9642: 9642: IOStatus RenameFile(const std::string& s, const std::string& t, 9642: const IOOptions& options, IODebugContext* dbg) override { 9642: return target_->RenameFile(s, t, options, dbg); 9642: } 9642: 9642: IOStatus LinkFile(const std::string& s, const std::string& t, 9642: const IOOptions& options, IODebugContext* dbg) override { 9642: return target_->LinkFile(s, t, options, dbg); 9642: } 9642: 9642: IOStatus NumFileLinks(const std::string& fname, const IOOptions& options, 9642: uint64_t* count, IODebugContext* dbg) override { 9642: return target_->NumFileLinks(fname, options, count, dbg); 9642: } 9642: 9642: IOStatus AreFilesSame(const std::string& first, const std::string& second, 9642: const IOOptions& options, bool* res, 9642: IODebugContext* dbg) override { 9642: return target_->AreFilesSame(first, second, options, res, dbg); 9642: } 9642: 9642: IOStatus LockFile(const std::string& f, const IOOptions& options, 9642: FileLock** l, IODebugContext* dbg) override { 9642: return target_->LockFile(f, options, l, dbg); 9642: } 9642: 9642: IOStatus UnlockFile(FileLock* l, const IOOptions& options, 9642: IODebugContext* dbg) override { 9642: return target_->UnlockFile(l, options, dbg); 9642: } 9642: 9642: IOStatus GetTestDirectory(const IOOptions& options, std::string* path, 9642: IODebugContext* dbg) override { 9642: return target_->GetTestDirectory(options, path, dbg); 9642: } 9642: IOStatus NewLogger(const std::string& fname, const IOOptions& options, 9642: std::shared_ptr* result, 9642: IODebugContext* dbg) override { 9642: return target_->NewLogger(fname, options, result, dbg); 9642: } 9642: 9642: void SanitizeFileOptions(FileOptions* opts) const override { 9642: target_->SanitizeFileOptions(opts); 9642: } 9642: 9642: FileOptions OptimizeForLogRead( 9642: const FileOptions& file_options) const override { 9642: return target_->OptimizeForLogRead(file_options); 9642: } 9642: FileOptions OptimizeForManifestRead( 9642: const FileOptions& file_options) const override { 9642: return target_->OptimizeForManifestRead(file_options); 9642: } 9642: FileOptions OptimizeForLogWrite(const FileOptions& file_options, 9642: const DBOptions& db_options) const override { 9642: return target_->OptimizeForLogWrite(file_options, db_options); 9642: } 9642: FileOptions OptimizeForManifestWrite( 9642: const FileOptions& file_options) const override { 9642: return target_->OptimizeForManifestWrite(file_options); 9642: } 9642: FileOptions OptimizeForCompactionTableWrite( 9642: const FileOptions& file_options, 9642: const ImmutableDBOptions& immutable_ops) const override { 9642: return target_->OptimizeForCompactionTableWrite(file_options, 9642: immutable_ops); 9642: } 9642: FileOptions OptimizeForCompactionTableRead( 9642: const FileOptions& file_options, 9642: const ImmutableDBOptions& db_options) const override { 9642: return target_->OptimizeForCompactionTableRead(file_options, db_options); 9642: } 9642: FileOptions OptimizeForBlobFileRead( 9642: const FileOptions& file_options, 9642: const ImmutableDBOptions& db_options) const override { 9642: return target_->OptimizeForBlobFileRead(file_options, db_options); 9642: } 9642: IOStatus GetFreeSpace(const std::string& path, const IOOptions& options, 9642: uint64_t* diskfree, IODebugContext* dbg) override { 9642: return target_->GetFreeSpace(path, options, diskfree, dbg); 9642: } 9642: IOStatus IsDirectory(const std::string& path, const IOOptions& options, 9642: bool* is_dir, IODebugContext* dbg) override { 9642: return target_->IsDirectory(path, options, is_dir, dbg); 9642: } 9642: 9642: const Customizable* Inner() const override { return target_.get(); } 9642: Status PrepareOptions(const ConfigOptions& options) override; 9642: std::string SerializeOptions(const ConfigOptions& config_options, 9642: const std::string& header) const override; 9642: 9642: IOStatus Poll(std::vector& io_handles, 9642: size_t min_completions) override { 9642: return target_->Poll(io_handles, min_completions); 9642: } 9642: 9642: IOStatus AbortIO(std::vector& io_handles) override { 9642: return target_->AbortIO(io_handles); 9642: } 9642: 9642: void DiscardCacheForDirectory(const std::string& path) override { 9642: target_->DiscardCacheForDirectory(path); 9642: } 9642: 9642: void SupportedOps(int64_t& supported_ops) override { 9642: return target_->SupportedOps(supported_ops); 9642: } 9642: 9642: protected: 9642: std::shared_ptr target_; 9642: }; 9642: 9642: class FSSequentialFileWrapper : public FSSequentialFile { 9642: public: 9642: 9642: 9642: explicit FSSequentialFileWrapper(FSSequentialFile* t) : target_(t) {} 9642: 9642: FSSequentialFile* target() const { return target_; } 9642: 9642: IOStatus Read(size_t n, const IOOptions& options, Slice* result, 9642: char* scratch, IODebugContext* dbg) override { 9642: return target_->Read(n, options, result, scratch, dbg); 9642: } 9642: IOStatus Skip(uint64_t n) override { return target_->Skip(n); } 9642: bool use_direct_io() const override { return target_->use_direct_io(); } 9642: size_t GetRequiredBufferAlignment() const override { 9642: return target_->GetRequiredBufferAlignment(); 9642: } 9642: IOStatus InvalidateCache(size_t offset, size_t length) override { 9642: return target_->InvalidateCache(offset, length); 9642: } 9642: IOStatus PositionedRead(uint64_t offset, size_t n, const IOOptions& options, 9642: Slice* result, char* scratch, 9642: IODebugContext* dbg) override { 9642: return target_->PositionedRead(offset, n, options, result, scratch, dbg); 9642: } 9642: Temperature GetTemperature() const override { 9642: return target_->GetTemperature(); 9642: } 9642: 9642: private: 9642: FSSequentialFile* target_; 9642: }; 9642: 9642: class FSSequentialFileOwnerWrapper : public FSSequentialFileWrapper { 9642: public: 9642: 9642: 9642: explicit FSSequentialFileOwnerWrapper(std::unique_ptr&& t) 9642: : FSSequentialFileWrapper(t.get()), guard_(std::move(t)) {} 9642: 9642: private: 9642: std::unique_ptr guard_; 9642: }; 9642: 9642: class FSRandomAccessFileWrapper : public FSRandomAccessFile { 9642: public: 9642: 9642: 9642: explicit FSRandomAccessFileWrapper(FSRandomAccessFile* t) : target_(t) {} 9642: 9642: FSRandomAccessFile* target() const { return target_; } 9642: 9642: IOStatus Read(uint64_t offset, size_t n, const IOOptions& options, 9642: Slice* result, char* scratch, 9642: IODebugContext* dbg) const override { 9642: return target_->Read(offset, n, options, result, scratch, dbg); 9642: } 9642: IOStatus MultiRead(FSReadRequest* reqs, size_t num_reqs, 9642: const IOOptions& options, IODebugContext* dbg) override { 9642: return target_->MultiRead(reqs, num_reqs, options, dbg); 9642: } 9642: IOStatus Prefetch(uint64_t offset, size_t n, const IOOptions& options, 9642: IODebugContext* dbg) override { 9642: return target_->Prefetch(offset, n, options, dbg); 9642: } 9642: size_t GetUniqueId(char* id, size_t max_size) const override { 9642: return target_->GetUniqueId(id, max_size); 9642: } 9642: void Hint(AccessPattern pattern) override { target_->Hint(pattern); } 9642: bool use_direct_io() const override { return target_->use_direct_io(); } 9642: size_t GetRequiredBufferAlignment() const override { 9642: return target_->GetRequiredBufferAlignment(); 9642: } 9642: IOStatus InvalidateCache(size_t offset, size_t length) override { 9642: return target_->InvalidateCache(offset, length); 9642: } 9642: IOStatus ReadAsync(FSReadRequest& req, const IOOptions& opts, 9642: std::function cb, 9642: void* cb_arg, void** io_handle, IOHandleDeleter* del_fn, 9642: IODebugContext* dbg) override { 9642: return target()->ReadAsync(req, opts, cb, cb_arg, io_handle, del_fn, dbg); 9642: } 9642: Temperature GetTemperature() const override { 9642: return target_->GetTemperature(); 9642: } 9642: 9642: private: 9642: std::unique_ptr guard_; 9642: FSRandomAccessFile* target_; 9642: }; 9642: 9642: class FSRandomAccessFileOwnerWrapper : public FSRandomAccessFileWrapper { 9642: public: 9642: 9642: 9642: explicit FSRandomAccessFileOwnerWrapper( 9642: std::unique_ptr&& t) 9642: : FSRandomAccessFileWrapper(t.get()), guard_(std::move(t)) {} 9642: 9642: private: 9642: std::unique_ptr guard_; 9642: }; 9642: 9642: class FSWritableFileWrapper : public FSWritableFile { 9642: public: 9642: 9642: 9642: explicit FSWritableFileWrapper(FSWritableFile* t) : target_(t) {} 9642: 9642: FSWritableFile* target() const { return target_; } 9642: 9642: IOStatus Append(const Slice& data, const IOOptions& options, 9642: IODebugContext* dbg) override { 9642: return target_->Append(data, options, dbg); 9642: } 9642: IOStatus Append(const Slice& data, const IOOptions& options, 9642: const DataVerificationInfo& verification_info, 9642: IODebugContext* dbg) override { 9642: return target_->Append(data, options, verification_info, dbg); 9642: } 9642: IOStatus PositionedAppend(const Slice& data, uint64_t offset, 9642: const IOOptions& options, 9642: IODebugContext* dbg) override { 9642: return target_->PositionedAppend(data, offset, options, dbg); 9642: } 9642: IOStatus PositionedAppend(const Slice& data, uint64_t offset, 9642: const IOOptions& options, 9642: const DataVerificationInfo& verification_info, 9642: IODebugContext* dbg) override { 9642: return target_->PositionedAppend(data, offset, options, verification_info, 9642: dbg); 9642: } 9642: IOStatus Truncate(uint64_t size, const IOOptions& options, 9642: IODebugContext* dbg) override { 9642: return target_->Truncate(size, options, dbg); 9642: } 9642: IOStatus Close(const IOOptions& options, IODebugContext* dbg) override { 9642: return target_->Close(options, dbg); 9642: } 9642: IOStatus Flush(const IOOptions& options, IODebugContext* dbg) override { 9642: return target_->Flush(options, dbg); 9642: } 9642: IOStatus Sync(const IOOptions& options, IODebugContext* dbg) override { 9642: return target_->Sync(options, dbg); 9642: } 9642: IOStatus Fsync(const IOOptions& options, IODebugContext* dbg) override { 9642: return target_->Fsync(options, dbg); 9642: } 9642: bool IsSyncThreadSafe() const override { return target_->IsSyncThreadSafe(); } 9642: 9642: bool use_direct_io() const override { return target_->use_direct_io(); } 9642: 9642: size_t GetRequiredBufferAlignment() const override { 9642: return target_->GetRequiredBufferAlignment(); 9642: } 9642: 9642: void SetWriteLifeTimeHint(Env::WriteLifeTimeHint hint) override { 9642: target_->SetWriteLifeTimeHint(hint); 9642: } 9642: 9642: Env::WriteLifeTimeHint GetWriteLifeTimeHint() override { 9642: return target_->GetWriteLifeTimeHint(); 9642: } 9642: 9642: uint64_t GetFileSize(const IOOptions& options, IODebugContext* dbg) override { 9642: return target_->GetFileSize(options, dbg); 9642: } 9642: 9642: void SetPreallocationBlockSize(size_t size) override { 9642: target_->SetPreallocationBlockSize(size); 9642: } 9642: 9642: void GetPreallocationStatus(size_t* block_size, 9642: size_t* last_allocated_block) override { 9642: target_->GetPreallocationStatus(block_size, last_allocated_block); 9642: } 9642: 9642: size_t GetUniqueId(char* id, size_t max_size) const override { 9642: return target_->GetUniqueId(id, max_size); 9642: } 9642: 9642: IOStatus InvalidateCache(size_t offset, size_t length) override { 9642: return target_->InvalidateCache(offset, length); 9642: } 9642: 9642: IOStatus RangeSync(uint64_t offset, uint64_t nbytes, const IOOptions& options, 9642: IODebugContext* dbg) override { 9642: return target_->RangeSync(offset, nbytes, options, dbg); 9642: } 9642: 9642: void PrepareWrite(size_t offset, size_t len, const IOOptions& options, 9642: IODebugContext* dbg) override { 9642: target_->PrepareWrite(offset, len, options, dbg); 9642: } 9642: 9642: IOStatus Allocate(uint64_t offset, uint64_t len, const IOOptions& options, 9642: IODebugContext* dbg) override { 9642: return target_->Allocate(offset, len, options, dbg); 9642: } 9642: 9642: private: 9642: FSWritableFile* target_; 9642: }; 9642: 9642: class FSWritableFileOwnerWrapper : public FSWritableFileWrapper { 9642: public: 9642: 9642: 9642: explicit FSWritableFileOwnerWrapper(std::unique_ptr&& t) 9642: : FSWritableFileWrapper(t.get()), guard_(std::move(t)) {} 9642: 9642: private: 9642: std::unique_ptr guard_; 9642: }; 9642: 9642: class FSRandomRWFileWrapper : public FSRandomRWFile { 9642: public: 9642: 9642: 9642: explicit FSRandomRWFileWrapper(FSRandomRWFile* t) : target_(t) {} 9642: 9642: FSRandomRWFile* target() const { return target_; } 9642: 9642: bool use_direct_io() const override { return target_->use_direct_io(); } 9642: size_t GetRequiredBufferAlignment() const override { 9642: return target_->GetRequiredBufferAlignment(); 9642: } 9642: IOStatus Write(uint64_t offset, const Slice& data, const IOOptions& options, 9642: IODebugContext* dbg) override { 9642: return target_->Write(offset, data, options, dbg); 9642: } 9642: IOStatus Read(uint64_t offset, size_t n, const IOOptions& options, 9642: Slice* result, char* scratch, 9642: IODebugContext* dbg) const override { 9642: return target_->Read(offset, n, options, result, scratch, dbg); 9642: } 9642: IOStatus Flush(const IOOptions& options, IODebugContext* dbg) override { 9642: return target_->Flush(options, dbg); 9642: } 9642: IOStatus Sync(const IOOptions& options, IODebugContext* dbg) override { 9642: return target_->Sync(options, dbg); 9642: } 9642: IOStatus Fsync(const IOOptions& options, IODebugContext* dbg) override { 9642: return target_->Fsync(options, dbg); 9642: } 9642: IOStatus Close(const IOOptions& options, IODebugContext* dbg) override { 9642: return target_->Close(options, dbg); 9642: } 9642: Temperature GetTemperature() const override { 9642: return target_->GetTemperature(); 9642: } 9642: 9642: private: 9642: FSRandomRWFile* target_; 9642: }; 9642: 9642: class FSRandomRWFileOwnerWrapper : public FSRandomRWFileWrapper { 9642: public: 9642: 9642: 9642: explicit FSRandomRWFileOwnerWrapper(std::unique_ptr&& t) 9642: : FSRandomRWFileWrapper(t.get()), guard_(std::move(t)) {} 9642: 9642: private: 9642: std::unique_ptr guard_; 9642: }; 9642: 9642: class FSDirectoryWrapper : public FSDirectory { 9642: public: 9642: 9642: 9642: explicit FSDirectoryWrapper(std::unique_ptr&& t) 9642: : guard_(std::move(t)) { 9642: target_ = guard_.get(); 9642: } 9642: 9642: 9642: 9642: explicit FSDirectoryWrapper(FSDirectory* t) : target_(t) {} 9642: 9642: IOStatus Fsync(const IOOptions& options, IODebugContext* dbg) override { 9642: return target_->Fsync(options, dbg); 9642: } 9642: 9642: IOStatus FsyncWithDirOptions( 9642: const IOOptions& options, IODebugContext* dbg, 9642: const DirFsyncOptions& dir_fsync_options) override { 9642: return target_->FsyncWithDirOptions(options, dbg, dir_fsync_options); 9642: } 9642: 9642: IOStatus Close(const IOOptions& options, IODebugContext* dbg) override { 9642: return target_->Close(options, dbg); 9642: } 9642: 9642: size_t GetUniqueId(char* id, size_t max_size) const override { 9642: return target_->GetUniqueId(id, max_size); 9642: } 9642: 9642: private: 9642: std::unique_ptr guard_; 9642: FSDirectory* target_; 9642: }; 9642: 9642: 9642: IOStatus WriteStringToFile(FileSystem* fs, const Slice& data, 9642: const std::string& fname, bool should_sync = false, 9642: const IOOptions& io_options = IOOptions()); 9642: 9642: 9642: IOStatus ReadFileToString(FileSystem* fs, const std::string& fname, 9642: std::string* data); 9642: 9642: } 9642: # 23 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 1 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/cassert" 1 3 9642: # 41 "/usr/include/c++/13/cassert" 3 9642: 9642: # 42 "/usr/include/c++/13/cassert" 3 9642: 9642: 9642: # 1 "/usr/include/assert.h" 1 3 4 9642: # 45 "/usr/include/c++/13/cassert" 2 3 9642: # 13 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 2 9642: 9642: 9642: 9642: namespace rocksdb { 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: inline size_t TruncateToPageBoundary(size_t page_size, size_t s) { 9642: s -= (s & (page_size - 1)); 9642: 9642: # 27 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: (static_cast ( 9642: # 27 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: (s % page_size) == 0 9642: # 27 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 27 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: "(s % page_size) == 0" 9642: # 27 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 27 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: ; 9642: return s; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: inline size_t Roundup(size_t x, size_t y) { return ((x + y - 1) / y) * y; } 9642: 9642: 9642: 9642: 9642: 9642: inline size_t Rounddown(size_t x, size_t y) { return (x / y) * y; } 9642: # 57 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: class AlignedBuffer { 9642: size_t alignment_; 9642: std::unique_ptr buf_; 9642: size_t capacity_; 9642: size_t cursize_; 9642: char* bufstart_; 9642: 9642: public: 9642: AlignedBuffer() 9642: : alignment_(), capacity_(0), cursize_(0), bufstart_(nullptr) {} 9642: 9642: AlignedBuffer(AlignedBuffer&& o) noexcept { *this = std::move(o); } 9642: 9642: AlignedBuffer& operator=(AlignedBuffer&& o) noexcept { 9642: alignment_ = std::move(o.alignment_); 9642: buf_ = std::move(o.buf_); 9642: capacity_ = std::move(o.capacity_); 9642: cursize_ = std::move(o.cursize_); 9642: bufstart_ = std::move(o.bufstart_); 9642: return *this; 9642: } 9642: 9642: AlignedBuffer(const AlignedBuffer&) = delete; 9642: 9642: AlignedBuffer& operator=(const AlignedBuffer&) = delete; 9642: 9642: static bool isAligned(const void* ptr, size_t alignment) { 9642: return reinterpret_cast(ptr) % alignment == 0; 9642: } 9642: 9642: static bool isAligned(size_t n, size_t alignment) { 9642: return n % alignment == 0; 9642: } 9642: 9642: size_t Alignment() const { return alignment_; } 9642: 9642: size_t Capacity() const { return capacity_; } 9642: 9642: size_t CurrentSize() const { return cursize_; } 9642: 9642: const char* BufferStart() const { return bufstart_; } 9642: 9642: char* BufferStart() { return bufstart_; } 9642: 9642: void Clear() { cursize_ = 0; } 9642: 9642: char* Release() { 9642: cursize_ = 0; 9642: capacity_ = 0; 9642: bufstart_ = nullptr; 9642: return buf_.release(); 9642: } 9642: 9642: void Alignment(size_t alignment) { 9642: 9642: # 111 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: (static_cast ( 9642: # 111 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: alignment > 0 9642: # 111 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 111 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: "alignment > 0" 9642: # 111 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 111 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: ; 9642: 9642: # 112 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: (static_cast ( 9642: # 112 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: (alignment & (alignment - 1)) == 0 9642: # 112 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 112 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: "(alignment & (alignment - 1)) == 0" 9642: # 112 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 112 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: ; 9642: alignment_ = alignment; 9642: } 9642: # 131 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: void AllocateNewBuffer(size_t requested_capacity, bool copy_data = false, 9642: uint64_t copy_offset = 0, size_t copy_len = 0) { 9642: 9642: # 133 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: (static_cast ( 9642: # 133 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: alignment_ > 0 9642: # 133 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 133 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: "alignment_ > 0" 9642: # 133 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 133 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: ; 9642: 9642: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: (static_cast ( 9642: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: (alignment_ & (alignment_ - 1)) == 0 9642: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: "(alignment_ & (alignment_ - 1)) == 0" 9642: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: ; 9642: 9642: copy_len = copy_len > 0 ? copy_len : cursize_; 9642: if (copy_data && requested_capacity < copy_len) { 9642: 9642: 9642: return; 9642: } 9642: 9642: size_t new_capacity = Roundup(requested_capacity, alignment_); 9642: char* new_buf = new char[new_capacity + alignment_]; 9642: char* new_bufstart = reinterpret_cast( 9642: (reinterpret_cast(new_buf) + (alignment_ - 1)) & 9642: ~static_cast(alignment_ - 1)); 9642: 9642: if (copy_data) { 9642: 9642: # 150 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: (static_cast ( 9642: # 150 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: bufstart_ + copy_offset + copy_len <= bufstart_ + cursize_ 9642: # 150 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 150 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: "bufstart_ + copy_offset + copy_len <= bufstart_ + cursize_" 9642: # 150 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 150 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: ; 9642: memcpy(new_bufstart, bufstart_ + copy_offset, copy_len); 9642: cursize_ = copy_len; 9642: } else { 9642: cursize_ = 0; 9642: } 9642: 9642: bufstart_ = new_bufstart; 9642: capacity_ = new_capacity; 9642: buf_.reset(new_buf); 9642: } 9642: # 170 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: size_t Append(const char* src, size_t append_size) { 9642: size_t buffer_remaining = capacity_ - cursize_; 9642: size_t to_copy = std::min(append_size, buffer_remaining); 9642: 9642: if (to_copy > 0) { 9642: memcpy(bufstart_ + cursize_, src, to_copy); 9642: cursize_ += to_copy; 9642: } 9642: return to_copy; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_t Read(char* dest, size_t offset, size_t read_size) const { 9642: 9642: # 188 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: (static_cast ( 9642: # 188 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: offset < cursize_ 9642: # 188 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 188 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: "offset < cursize_" 9642: # 188 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 188 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: ; 9642: 9642: size_t to_read = 0; 9642: if (offset < cursize_) { 9642: to_read = std::min(cursize_ - offset, read_size); 9642: } 9642: if (to_read > 0) { 9642: memcpy(dest, bufstart_ + offset, to_read); 9642: } 9642: return to_read; 9642: } 9642: 9642: 9642: void PadToAlignmentWith(int padding) { 9642: size_t total_size = Roundup(cursize_, alignment_); 9642: size_t pad_size = total_size - cursize_; 9642: 9642: if (pad_size > 0) { 9642: 9642: # 206 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: (static_cast ( 9642: # 206 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: (pad_size + cursize_) <= capacity_ 9642: # 206 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 206 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: "(pad_size + cursize_) <= capacity_" 9642: # 206 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 206 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: ; 9642: memset(bufstart_ + cursize_, padding, pad_size); 9642: cursize_ += pad_size; 9642: } 9642: } 9642: 9642: void PadWith(size_t pad_size, int padding) { 9642: 9642: # 213 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: (static_cast ( 9642: # 213 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: (pad_size + cursize_) <= capacity_ 9642: # 213 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 213 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: "(pad_size + cursize_) <= capacity_" 9642: # 213 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 213 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 9642: ; 9642: memset(bufstart_ + cursize_, padding, pad_size); 9642: cursize_ += pad_size; 9642: } 9642: 9642: 9642: void RefitTail(size_t tail_offset, size_t tail_size) { 9642: if (tail_size > 0) { 9642: memmove(bufstart_, bufstart_ + tail_offset, tail_size); 9642: } 9642: cursize_ = tail_size; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: char* Destination() { return bufstart_ + cursize_; } 9642: 9642: void Size(size_t cursize) { cursize_ = cursize; } 9642: }; 9642: } 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/cassert" 1 3 9642: # 41 "/usr/include/c++/13/cassert" 3 9642: 9642: # 42 "/usr/include/c++/13/cassert" 3 9642: 9642: 9642: # 1 "/usr/include/assert.h" 1 3 4 9642: # 45 "/usr/include/c++/13/cassert" 2 3 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 2 9642: 9642: # 1 "/usr/include/c++/13/iterator" 1 3 9642: # 58 "/usr/include/c++/13/iterator" 3 9642: 9642: # 59 "/usr/include/c++/13/iterator" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/stream_iterator.h" 1 3 9642: # 33 "/usr/include/c++/13/bits/stream_iterator.h" 3 9642: 9642: # 34 "/usr/include/c++/13/bits/stream_iterator.h" 3 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 40 "/usr/include/c++/13/bits/stream_iterator.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 50 "/usr/include/c++/13/bits/stream_iterator.h" 3 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 9642: 9642: 9642: template, typename _Dist = ptrdiff_t> 9642: class istream_iterator 9642: : public iterator 9642: { 9642: public: 9642: typedef _CharT char_type; 9642: typedef _Traits traits_type; 9642: typedef basic_istream<_CharT, _Traits> istream_type; 9642: 9642: private: 9642: istream_type* _M_stream; 9642: _Tp _M_value; 9642: 9642: 9642: 9642: bool _M_ok; 9642: 9642: public: 9642: 9642: constexpr istream_iterator() 9642: noexcept(is_nothrow_default_constructible<_Tp>::value) 9642: : _M_stream(0), _M_value(), _M_ok(false) {} 9642: 9642: 9642: istream_iterator(istream_type& __s) 9642: : _M_stream(std::__addressof(__s)), _M_ok(true) 9642: { _M_read(); } 9642: 9642: constexpr 9642: istream_iterator(const istream_iterator& __obj) 9642: noexcept(is_nothrow_copy_constructible<_Tp>::value) 9642: : _M_stream(__obj._M_stream), _M_value(__obj._M_value), 9642: _M_ok(__obj._M_ok) 9642: { } 9642: # 98 "/usr/include/c++/13/bits/stream_iterator.h" 3 9642: istream_iterator& operator=(const istream_iterator&) = default; 9642: ~istream_iterator() = default; 9642: 9642: 9642: [[__nodiscard__]] 9642: const _Tp& 9642: operator*() const noexcept 9642: { 9642: 9642: 9642: ; 9642: return _M_value; 9642: } 9642: 9642: [[__nodiscard__]] 9642: const _Tp* 9642: operator->() const noexcept 9642: { return std::__addressof((operator*())); } 9642: 9642: istream_iterator& 9642: operator++() 9642: { 9642: 9642: 9642: ; 9642: _M_read(); 9642: return *this; 9642: } 9642: 9642: istream_iterator 9642: operator++(int) 9642: { 9642: 9642: 9642: ; 9642: istream_iterator __tmp = *this; 9642: _M_read(); 9642: return __tmp; 9642: } 9642: 9642: private: 9642: bool 9642: _M_equal(const istream_iterator& __x) const noexcept 9642: { 9642: 9642: 9642: return (_M_ok == __x._M_ok) && (!_M_ok || _M_stream == __x._M_stream); 9642: } 9642: 9642: void 9642: _M_read() 9642: { 9642: if (_M_stream && !(*_M_stream >> _M_value)) 9642: { 9642: _M_stream = 0; 9642: _M_ok = false; 9642: } 9642: } 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: friend bool 9642: operator==(const istream_iterator& __x, const istream_iterator& __y) 9642: noexcept 9642: { return __x._M_equal(__y); } 9642: 9642: 9642: 9642: 9642: [[__nodiscard__]] 9642: friend bool 9642: operator!=(const istream_iterator& __x, const istream_iterator& __y) 9642: noexcept 9642: { return !__x._M_equal(__y); } 9642: # 181 "/usr/include/c++/13/bits/stream_iterator.h" 3 9642: }; 9642: # 194 "/usr/include/c++/13/bits/stream_iterator.h" 3 9642: template > 9642: class ostream_iterator 9642: : public iterator 9642: { 9642: public: 9642: 9642: 9642: 9642: 9642: 9642: typedef _CharT char_type; 9642: typedef _Traits traits_type; 9642: typedef basic_ostream<_CharT, _Traits> ostream_type; 9642: 9642: 9642: private: 9642: ostream_type* _M_stream; 9642: const _CharT* _M_string; 9642: 9642: public: 9642: 9642: ostream_iterator(ostream_type& __s) noexcept 9642: : _M_stream(std::__addressof(__s)), _M_string(0) {} 9642: # 229 "/usr/include/c++/13/bits/stream_iterator.h" 3 9642: ostream_iterator(ostream_type& __s, const _CharT* __c) noexcept 9642: : _M_stream(std::__addressof(__s)), _M_string(__c) { } 9642: 9642: 9642: ostream_iterator(const ostream_iterator& __obj) noexcept 9642: : _M_stream(__obj._M_stream), _M_string(__obj._M_string) { } 9642: 9642: 9642: ostream_iterator& operator=(const ostream_iterator&) = default; 9642: 9642: 9642: 9642: 9642: ostream_iterator& 9642: operator=(const _Tp& __value) 9642: { 9642: 9642: 9642: ; 9642: *_M_stream << __value; 9642: if (_M_string) 9642: *_M_stream << _M_string; 9642: return *this; 9642: } 9642: 9642: [[__nodiscard__]] 9642: ostream_iterator& 9642: operator*() noexcept 9642: { return *this; } 9642: 9642: ostream_iterator& 9642: operator++() noexcept 9642: { return *this; } 9642: 9642: ostream_iterator& 9642: operator++(int) noexcept 9642: { return *this; } 9642: }; 9642: #pragma GCC diagnostic pop 9642: 9642: 9642: 9642: 9642: } 9642: # 66 "/usr/include/c++/13/iterator" 2 3 9642: # 11 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 2 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: namespace rocksdb { 9642: # 39 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: template 9642: class autovector { 9642: public: 9642: 9642: using value_type = T; 9642: using difference_type = typename std::vector::difference_type; 9642: using size_type = typename std::vector::size_type; 9642: using reference = value_type&; 9642: using const_reference = const value_type&; 9642: using pointer = value_type*; 9642: using const_pointer = const value_type*; 9642: 9642: 9642: template 9642: class iterator_impl { 9642: public: 9642: 9642: using self_type = iterator_impl; 9642: using value_type = TValueType; 9642: using reference = TValueType&; 9642: using pointer = TValueType*; 9642: using difference_type = typename TAutoVector::difference_type; 9642: using iterator_category = std::random_access_iterator_tag; 9642: 9642: iterator_impl(TAutoVector* vect, size_t index) 9642: : vect_(vect), index_(index){} 9642: iterator_impl(const iterator_impl&) = default; 9642: ~iterator_impl() {} 9642: iterator_impl& operator=(const iterator_impl&) = default; 9642: 9642: 9642: 9642: self_type& operator++() { 9642: ++index_; 9642: return *this; 9642: } 9642: 9642: 9642: self_type operator++(int) { 9642: auto old = *this; 9642: ++index_; 9642: return old; 9642: } 9642: 9642: 9642: self_type& operator--() { 9642: --index_; 9642: return *this; 9642: } 9642: 9642: 9642: self_type operator--(int) { 9642: auto old = *this; 9642: --index_; 9642: return old; 9642: } 9642: 9642: self_type operator-(difference_type len) const { 9642: return self_type(vect_, index_ - len); 9642: } 9642: 9642: difference_type operator-(const self_type& other) const { 9642: 9642: # 101 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: (static_cast ( 9642: # 101 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: vect_ == other.vect_ 9642: # 101 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 101 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: "vect_ == other.vect_" 9642: # 101 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 101 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: ; 9642: return index_ - other.index_; 9642: } 9642: 9642: self_type operator+(difference_type len) const { 9642: return self_type(vect_, index_ + len); 9642: } 9642: 9642: self_type& operator+=(difference_type len) { 9642: index_ += len; 9642: return *this; 9642: } 9642: 9642: self_type& operator-=(difference_type len) { 9642: index_ -= len; 9642: return *this; 9642: } 9642: 9642: 9642: reference operator*() const { 9642: 9642: # 121 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: (static_cast ( 9642: # 121 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: vect_->size() >= index_ 9642: # 121 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 121 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: "vect_->size() >= index_" 9642: # 121 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 121 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: ; 9642: return (*vect_)[index_]; 9642: } 9642: 9642: pointer operator->() const { 9642: 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: (static_cast ( 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: vect_->size() >= index_ 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: "vect_->size() >= index_" 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: ; 9642: return &(*vect_)[index_]; 9642: } 9642: 9642: reference operator[](difference_type len) const { return *(*this + len); } 9642: 9642: 9642: bool operator==(const self_type& other) const { 9642: 9642: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: (static_cast ( 9642: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: vect_ == other.vect_ 9642: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: "vect_ == other.vect_" 9642: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: ; 9642: return index_ == other.index_; 9642: } 9642: 9642: bool operator!=(const self_type& other) const { return !(*this == other); } 9642: 9642: bool operator>(const self_type& other) const { 9642: 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: (static_cast ( 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: vect_ == other.vect_ 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: "vect_ == other.vect_" 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: ; 9642: return index_ > other.index_; 9642: } 9642: 9642: bool operator<(const self_type& other) const { 9642: 9642: # 146 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: (static_cast ( 9642: # 146 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: vect_ == other.vect_ 9642: # 146 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 146 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: "vect_ == other.vect_" 9642: # 146 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 146 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: ; 9642: return index_ < other.index_; 9642: } 9642: 9642: bool operator>=(const self_type& other) const { 9642: 9642: # 151 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: (static_cast ( 9642: # 151 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: vect_ == other.vect_ 9642: # 151 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 151 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: "vect_ == other.vect_" 9642: # 151 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 151 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: ; 9642: return index_ >= other.index_; 9642: } 9642: 9642: bool operator<=(const self_type& other) const { 9642: 9642: # 156 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: (static_cast ( 9642: # 156 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: vect_ == other.vect_ 9642: # 156 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 156 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: "vect_ == other.vect_" 9642: # 156 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 156 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: ; 9642: return index_ <= other.index_; 9642: } 9642: 9642: private: 9642: TAutoVector* vect_ = nullptr; 9642: size_t index_ = 0; 9642: }; 9642: 9642: using iterator = iterator_impl; 9642: using const_iterator = iterator_impl; 9642: using reverse_iterator = std::reverse_iterator; 9642: using const_reverse_iterator = std::reverse_iterator; 9642: 9642: autovector() : values_(reinterpret_cast(buf_)) {} 9642: 9642: autovector(std::initializer_list init_list) 9642: : values_(reinterpret_cast(buf_)) { 9642: for (const T& item : init_list) { 9642: push_back(item); 9642: } 9642: } 9642: 9642: ~autovector() { clear(); } 9642: 9642: 9642: 9642: bool only_in_stack() const { 9642: 9642: return vect_.capacity() == 0; 9642: } 9642: 9642: size_type size() const { return num_stack_items_ + vect_.size(); } 9642: 9642: 9642: 9642: void resize(size_type n) { 9642: if (n > kSize) { 9642: vect_.resize(n - kSize); 9642: while (num_stack_items_ < kSize) { 9642: new ((void*)(&values_[num_stack_items_++])) value_type(); 9642: } 9642: num_stack_items_ = kSize; 9642: } else { 9642: vect_.clear(); 9642: while (num_stack_items_ < n) { 9642: new ((void*)(&values_[num_stack_items_++])) value_type(); 9642: } 9642: while (num_stack_items_ > n) { 9642: values_[--num_stack_items_].~value_type(); 9642: } 9642: } 9642: } 9642: 9642: bool empty() const { return size() == 0; } 9642: 9642: size_type capacity() const { return kSize + vect_.capacity(); } 9642: 9642: void reserve(size_t cap) { 9642: if (cap > kSize) { 9642: vect_.reserve(cap - kSize); 9642: } 9642: 9642: 9642: # 219 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: (static_cast ( 9642: # 219 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: cap <= capacity() 9642: # 219 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 219 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: "cap <= capacity()" 9642: # 219 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 219 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: ; 9642: } 9642: 9642: const_reference operator[](size_type n) const { 9642: 9642: # 223 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: (static_cast ( 9642: # 223 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: n < size() 9642: # 223 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 223 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: "n < size()" 9642: # 223 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 223 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: ; 9642: if (n < kSize) { 9642: return values_[n]; 9642: } 9642: return vect_[n - kSize]; 9642: } 9642: 9642: reference operator[](size_type n) { 9642: 9642: # 231 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: (static_cast ( 9642: # 231 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: n < size() 9642: # 231 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 231 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: "n < size()" 9642: # 231 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 231 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: ; 9642: if (n < kSize) { 9642: return values_[n]; 9642: } 9642: return vect_[n - kSize]; 9642: } 9642: 9642: const_reference at(size_type n) const { 9642: 9642: # 239 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: (static_cast ( 9642: # 239 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: n < size() 9642: # 239 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 239 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: "n < size()" 9642: # 239 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 239 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: ; 9642: return (*this)[n]; 9642: } 9642: 9642: reference at(size_type n) { 9642: 9642: # 244 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: (static_cast ( 9642: # 244 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: n < size() 9642: # 244 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 244 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: "n < size()" 9642: # 244 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 244 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: ; 9642: return (*this)[n]; 9642: } 9642: 9642: reference front() { 9642: 9642: # 249 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: (static_cast ( 9642: # 249 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: !empty() 9642: # 249 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 249 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: "!empty()" 9642: # 249 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 249 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: ; 9642: return *begin(); 9642: } 9642: 9642: const_reference front() const { 9642: 9642: # 254 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: (static_cast ( 9642: # 254 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: !empty() 9642: # 254 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 254 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: "!empty()" 9642: # 254 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 254 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: ; 9642: return *begin(); 9642: } 9642: 9642: reference back() { 9642: 9642: # 259 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: (static_cast ( 9642: # 259 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: !empty() 9642: # 259 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 259 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: "!empty()" 9642: # 259 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 259 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: ; 9642: return *(end() - 1); 9642: } 9642: 9642: const_reference back() const { 9642: 9642: # 264 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: (static_cast ( 9642: # 264 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: !empty() 9642: # 264 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 264 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: "!empty()" 9642: # 264 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 264 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: ; 9642: return *(end() - 1); 9642: } 9642: 9642: 9642: void push_back(T&& item) { 9642: if (num_stack_items_ < kSize) { 9642: new ((void*)(&values_[num_stack_items_])) value_type(); 9642: values_[num_stack_items_++] = std::move(item); 9642: } else { 9642: vect_.push_back(item); 9642: } 9642: } 9642: 9642: void push_back(const T& item) { 9642: if (num_stack_items_ < kSize) { 9642: new ((void*)(&values_[num_stack_items_])) value_type(); 9642: values_[num_stack_items_++] = item; 9642: } else { 9642: vect_.push_back(item); 9642: } 9642: } 9642: 9642: template 9642: # 298 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: void emplace_back(Args&&... args) { 9642: if (num_stack_items_ < kSize) { 9642: new ((void*)(&values_[num_stack_items_++])) 9642: value_type(std::forward(args)...); 9642: } else { 9642: vect_.emplace_back(std::forward(args)...); 9642: } 9642: } 9642: 9642: 9642: void pop_back() { 9642: 9642: # 309 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: (static_cast ( 9642: # 309 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: !empty() 9642: # 309 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 309 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: "!empty()" 9642: # 309 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 309 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 9642: ; 9642: if (!vect_.empty()) { 9642: vect_.pop_back(); 9642: } else { 9642: values_[--num_stack_items_].~value_type(); 9642: } 9642: } 9642: 9642: void clear() { 9642: while (num_stack_items_ > 0) { 9642: values_[--num_stack_items_].~value_type(); 9642: } 9642: vect_.clear(); 9642: } 9642: 9642: 9642: autovector& assign(const autovector& other); 9642: 9642: autovector(const autovector& other) { assign(other); } 9642: 9642: autovector& operator=(const autovector& other) { return assign(other); } 9642: 9642: autovector(autovector&& other) noexcept { *this = std::move(other); } 9642: autovector& operator=(autovector&& other); 9642: 9642: 9642: iterator begin() { return iterator(this, 0); } 9642: 9642: const_iterator begin() const { return const_iterator(this, 0); } 9642: 9642: iterator end() { return iterator(this, this->size()); } 9642: 9642: const_iterator end() const { return const_iterator(this, this->size()); } 9642: 9642: reverse_iterator rbegin() { return reverse_iterator(end()); } 9642: 9642: const_reverse_iterator rbegin() const { 9642: return const_reverse_iterator(end()); 9642: } 9642: 9642: reverse_iterator rend() { return reverse_iterator(begin()); } 9642: 9642: const_reverse_iterator rend() const { 9642: return const_reverse_iterator(begin()); 9642: } 9642: 9642: private: 9642: size_type num_stack_items_ = 0; 9642: alignas(alignof( 9642: value_type)) char buf_[kSize * 9642: sizeof(value_type)]; 9642: pointer values_; 9642: 9642: std::vector vect_; 9642: }; 9642: 9642: template 9642: autovector& autovector::assign( 9642: const autovector& other) { 9642: values_ = reinterpret_cast(buf_); 9642: 9642: vect_.assign(other.vect_.begin(), other.vect_.end()); 9642: 9642: 9642: num_stack_items_ = other.num_stack_items_; 9642: for (size_t i = 0; i < num_stack_items_; ++i) { 9642: new ((void*)(&values_[i])) value_type(); 9642: } 9642: std::copy(other.values_, other.values_ + num_stack_items_, values_); 9642: 9642: return *this; 9642: } 9642: 9642: template 9642: autovector& autovector::operator=( 9642: autovector&& other) { 9642: values_ = reinterpret_cast(buf_); 9642: vect_ = std::move(other.vect_); 9642: size_t n = other.num_stack_items_; 9642: num_stack_items_ = n; 9642: other.num_stack_items_ = 0; 9642: for (size_t i = 0; i < n; ++i) { 9642: new ((void*)(&values_[i])) value_type(); 9642: values_[i] = std::move(other.values_[i]); 9642: } 9642: return *this; 9642: } 9642: 9642: } 9642: # 26 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 2 9642: 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: struct IOOptions; 9642: class RandomAccessFileReader; 9642: 9642: struct ReadaheadParams { 9642: ReadaheadParams() {} 9642: 9642: 9642: size_t initial_readahead_size = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_t max_readahead_size = 0; 9642: 9642: 9642: 9642: bool implicit_auto_readahead = false; 9642: 9642: 9642: uint64_t num_file_reads = 0; 9642: uint64_t num_file_reads_for_auto_readahead = 0; 9642: 9642: 9642: 9642: size_t num_buffers = 1; 9642: }; 9642: 9642: struct BufferInfo { 9642: void ClearBuffer() { 9642: buffer_.Clear(); 9642: initial_end_offset_ = 0; 9642: async_req_len_ = 0; 9642: } 9642: 9642: AlignedBuffer buffer_; 9642: 9642: uint64_t offset_ = 0; 9642: 9642: 9642: 9642: size_t async_req_len_ = 0; 9642: 9642: 9642: 9642: bool async_read_in_progress_ = false; 9642: 9642: 9642: 9642: void* io_handle_ = nullptr; 9642: 9642: IOHandleDeleter del_fn_ = nullptr; 9642: # 96 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: uint64_t initial_end_offset_ = 0; 9642: 9642: bool IsDataBlockInBuffer(uint64_t offset, size_t length) { 9642: 9642: # 99 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 9642: (static_cast ( 9642: # 99 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: async_read_in_progress_ == false 9642: # 99 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 99 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: "async_read_in_progress_ == false" 9642: # 99 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 99 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: ; 9642: return (offset >= offset_ && 9642: offset + length <= offset_ + buffer_.CurrentSize()); 9642: } 9642: 9642: bool IsOffsetInBuffer(uint64_t offset) { 9642: 9642: # 105 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 9642: (static_cast ( 9642: # 105 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: async_read_in_progress_ == false 9642: # 105 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 105 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: "async_read_in_progress_ == false" 9642: # 105 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 105 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: ; 9642: return (offset >= offset_ && offset < offset_ + buffer_.CurrentSize()); 9642: } 9642: 9642: bool DoesBufferContainData() { 9642: 9642: # 110 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 9642: (static_cast ( 9642: # 110 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: async_read_in_progress_ == false 9642: # 110 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 110 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: "async_read_in_progress_ == false" 9642: # 110 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 110 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: ; 9642: return buffer_.CurrentSize() > 0; 9642: } 9642: 9642: bool IsBufferOutdated(uint64_t offset) { 9642: return (!async_read_in_progress_ && DoesBufferContainData() && 9642: offset >= offset_ + buffer_.CurrentSize()); 9642: } 9642: 9642: bool IsBufferOutdatedWithAsyncProgress(uint64_t offset) { 9642: return (async_read_in_progress_ && io_handle_ != nullptr && 9642: offset >= offset_ + async_req_len_); 9642: } 9642: 9642: bool IsOffsetInBufferWithAsyncProgress(uint64_t offset) { 9642: return (async_read_in_progress_ && offset >= offset_ && 9642: offset < offset_ + async_req_len_); 9642: } 9642: 9642: size_t CurrentSize() { return buffer_.CurrentSize(); } 9642: }; 9642: 9642: enum class FilePrefetchBufferUsage { 9642: kTableOpenPrefetchTail, 9642: kUserScanPrefetch, 9642: kUnknown, 9642: }; 9642: # 161 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: class FilePrefetchBuffer { 9642: public: 9642: # 181 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: FilePrefetchBuffer( 9642: const ReadaheadParams& readahead_params = {}, bool enable = true, 9642: bool track_min_offset = false, FileSystem* fs = nullptr, 9642: SystemClock* clock = nullptr, Statistics* stats = nullptr, 9642: const std::function& cb = nullptr, 9642: FilePrefetchBufferUsage usage = FilePrefetchBufferUsage::kUnknown) 9642: : readahead_size_(readahead_params.initial_readahead_size), 9642: initial_auto_readahead_size_(readahead_params.initial_readahead_size), 9642: max_readahead_size_(readahead_params.max_readahead_size), 9642: min_offset_read_(std::numeric_limits::max()), 9642: enable_(enable), 9642: track_min_offset_(track_min_offset), 9642: implicit_auto_readahead_(readahead_params.implicit_auto_readahead), 9642: prev_offset_(0), 9642: prev_len_(0), 9642: num_file_reads_for_auto_readahead_( 9642: readahead_params.num_file_reads_for_auto_readahead), 9642: num_file_reads_(readahead_params.num_file_reads), 9642: explicit_prefetch_submitted_(false), 9642: fs_(fs), 9642: clock_(clock), 9642: stats_(stats), 9642: usage_(usage), 9642: readaheadsize_cb_(cb), 9642: num_buffers_(readahead_params.num_buffers) { 9642: 9642: # 206 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 9642: (static_cast ( 9642: # 206 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: (num_file_reads_ >= num_file_reads_for_auto_readahead_ + 1) || (num_file_reads_ == 0) 9642: # 206 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 206 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: "(num_file_reads_ >= num_file_reads_for_auto_readahead_ + 1) || (num_file_reads_ == 0)" 9642: # 206 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: 9642: # 207 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: ; 9642: 9642: 9642: 9642: 9642: if (num_buffers_ > 1) { 9642: overlap_buf_ = new BufferInfo(); 9642: } 9642: 9642: free_bufs_.resize(num_buffers_); 9642: for (uint32_t i = 0; i < num_buffers_; i++) { 9642: free_bufs_[i] = new BufferInfo(); 9642: } 9642: } 9642: 9642: ~FilePrefetchBuffer() { 9642: 9642: if (fs_ != nullptr) { 9642: std::vector handles; 9642: for (auto& buf : bufs_) { 9642: if (buf->async_read_in_progress_ && buf->io_handle_ != nullptr) { 9642: handles.emplace_back(buf->io_handle_); 9642: } 9642: } 9642: if (!handles.empty()) { 9642: StopWatch sw(clock_, stats_, ASYNC_PREFETCH_ABORT_MICROS); 9642: Status s = fs_->AbortIO(handles); 9642: 9642: # 234 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 9642: (static_cast ( 9642: # 234 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: s.ok() 9642: # 234 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 234 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: "s.ok()" 9642: # 234 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 234 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: ; 9642: } 9642: 9642: for (auto& buf : bufs_) { 9642: if (buf->io_handle_ != nullptr) { 9642: DestroyAndClearIOHandle(buf); 9642: buf->ClearBuffer(); 9642: } 9642: buf->async_read_in_progress_ = false; 9642: } 9642: } 9642: 9642: 9642: uint64_t bytes_discarded = 0; 9642: 9642: for (auto& buf : bufs_) { 9642: if (buf->DoesBufferContainData()) { 9642: 9642: if (prev_offset_ >= buf->offset_ && 9642: prev_offset_ + prev_len_ < buf->offset_ + buf->CurrentSize()) { 9642: bytes_discarded += 9642: buf->CurrentSize() - (prev_offset_ + prev_len_ - buf->offset_); 9642: } 9642: 9642: else if (prev_offset_ < buf->offset_ && 9642: prev_offset_ + prev_len_ <= buf->offset_) { 9642: bytes_discarded += buf->CurrentSize(); 9642: } 9642: } 9642: } 9642: 9642: RecordInHistogram(stats_, PREFETCHED_BYTES_DISCARDED, bytes_discarded); 9642: 9642: for (auto& buf : bufs_) { 9642: delete buf; 9642: buf = nullptr; 9642: } 9642: 9642: for (auto& buf : free_bufs_) { 9642: delete buf; 9642: buf = nullptr; 9642: } 9642: 9642: if (overlap_buf_ != nullptr) { 9642: delete overlap_buf_; 9642: overlap_buf_ = nullptr; 9642: } 9642: } 9642: 9642: bool Enabled() const { return enable_; } 9642: # 293 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: Status Prefetch(const IOOptions& opts, RandomAccessFileReader* reader, 9642: uint64_t offset, size_t n); 9642: # 306 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: Status PrefetchAsync(const IOOptions& opts, RandomAccessFileReader* reader, 9642: uint64_t offset, size_t n, Slice* result); 9642: # 322 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: bool TryReadFromCache(const IOOptions& opts, RandomAccessFileReader* reader, 9642: uint64_t offset, size_t n, Slice* result, Status* s, 9642: bool for_compaction = false); 9642: 9642: 9642: 9642: size_t min_offset_read() const { return min_offset_read_; } 9642: 9642: size_t GetPrefetchOffset() const { return bufs_.front()->offset_; } 9642: 9642: 9642: void UpdateReadPattern(const uint64_t& offset, const size_t& len, 9642: bool decrease_readaheadsize) { 9642: if (decrease_readaheadsize) { 9642: DecreaseReadAheadIfEligible(offset, len); 9642: } 9642: prev_offset_ = offset; 9642: prev_len_ = len; 9642: explicit_prefetch_submitted_ = false; 9642: } 9642: 9642: void GetReadaheadState(ReadaheadFileInfo::ReadaheadInfo* readahead_info) { 9642: readahead_info->readahead_size = readahead_size_; 9642: readahead_info->num_file_reads = num_file_reads_; 9642: } 9642: 9642: void DecreaseReadAheadIfEligible(uint64_t offset, size_t size, 9642: size_t value = 8 * 1024) { 9642: if (bufs_.empty()) { 9642: return; 9642: } 9642: # 364 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: size_t curr_size = bufs_.front()->async_read_in_progress_ 9642: ? bufs_.front()->async_req_len_ 9642: : bufs_.front()->CurrentSize(); 9642: if (implicit_auto_readahead_ && readahead_size_ > 0) { 9642: if ((offset + size > bufs_.front()->offset_ + curr_size) && 9642: IsBlockSequential(offset) && 9642: (num_file_reads_ + 1 > num_file_reads_for_auto_readahead_)) { 9642: readahead_size_ = 9642: std::max(initial_auto_readahead_size_, 9642: (readahead_size_ >= value ? readahead_size_ - value : 0)); 9642: } 9642: } 9642: } 9642: 9642: 9642: void PrefetchAsyncCallback(FSReadRequest& req, void* cb_arg); 9642: 9642: void TEST_GetBufferOffsetandSize( 9642: std::vector>& buffer_info) { 9642: for (size_t i = 0; i < bufs_.size(); i++) { 9642: buffer_info[i].first = bufs_[i]->offset_; 9642: buffer_info[i].second = bufs_[i]->async_read_in_progress_ 9642: ? bufs_[i]->async_req_len_ 9642: : bufs_[i]->CurrentSize(); 9642: } 9642: } 9642: 9642: private: 9642: 9642: 9642: 9642: void PrepareBufferForRead(BufferInfo* buf, size_t alignment, uint64_t offset, 9642: size_t roundup_len, bool refit_tail, 9642: uint64_t& aligned_useful_len); 9642: 9642: void AbortOutdatedIO(uint64_t offset); 9642: 9642: void AbortAllIOs(); 9642: 9642: void ClearOutdatedData(uint64_t offset, size_t len); 9642: 9642: 9642: void PollIfNeeded(uint64_t offset, size_t len); 9642: 9642: Status PrefetchInternal(const IOOptions& opts, RandomAccessFileReader* reader, 9642: uint64_t offset, size_t length, size_t readahead_size, 9642: bool& copy_to_third_buffer); 9642: 9642: Status Read(BufferInfo* buf, const IOOptions& opts, 9642: RandomAccessFileReader* reader, uint64_t read_len, 9642: uint64_t aligned_useful_len, uint64_t start_offset); 9642: 9642: Status ReadAsync(BufferInfo* buf, const IOOptions& opts, 9642: RandomAccessFileReader* reader, uint64_t read_len, 9642: uint64_t start_offset); 9642: 9642: 9642: void CopyDataToBuffer(BufferInfo* src, uint64_t& offset, size_t& length); 9642: 9642: bool IsBlockSequential(const size_t& offset) { 9642: return (prev_len_ == 0 || (prev_offset_ + prev_len_ == offset)); 9642: } 9642: 9642: 9642: void ResetValues() { 9642: num_file_reads_ = 1; 9642: readahead_size_ = initial_auto_readahead_size_; 9642: } 9642: 9642: 9642: bool IsEligibleForPrefetch(uint64_t offset, size_t n) { 9642: 9642: 9642: if (!IsBlockSequential(offset)) { 9642: UpdateReadPattern(offset, n, false ); 9642: ResetValues(); 9642: return false; 9642: } 9642: num_file_reads_++; 9642: 9642: 9642: 9642: 9642: if (explicit_prefetch_submitted_) { 9642: return true; 9642: } 9642: if (num_file_reads_ <= num_file_reads_for_auto_readahead_) { 9642: UpdateReadPattern(offset, n, false ); 9642: return false; 9642: } 9642: return true; 9642: } 9642: 9642: bool IsEligibleForFurtherPrefetching() { 9642: if (free_bufs_.empty()) { 9642: return false; 9642: } 9642: 9642: if (readahead_size_ == 0) { 9642: return false; 9642: } 9642: return true; 9642: } 9642: 9642: void DestroyAndClearIOHandle(BufferInfo* buf) { 9642: if (buf->io_handle_ != nullptr && buf->del_fn_ != nullptr) { 9642: buf->del_fn_(buf->io_handle_); 9642: buf->io_handle_ = nullptr; 9642: buf->del_fn_ = nullptr; 9642: } 9642: buf->async_read_in_progress_ = false; 9642: } 9642: 9642: Status HandleOverlappingData(const IOOptions& opts, 9642: RandomAccessFileReader* reader, uint64_t offset, 9642: size_t length, size_t readahead_size, 9642: bool& copy_to_third_buffer, uint64_t& tmp_offset, 9642: size_t& tmp_length); 9642: 9642: bool TryReadFromCacheUntracked(const IOOptions& opts, 9642: RandomAccessFileReader* reader, 9642: uint64_t offset, size_t n, Slice* result, 9642: Status* s, 9642: bool for_compaction = false); 9642: 9642: void ReadAheadSizeTuning(BufferInfo* buf, bool read_curr_block, 9642: bool refit_tail, uint64_t prev_buf_end_offset, 9642: size_t alignment, size_t length, 9642: size_t readahead_size, uint64_t& offset, 9642: uint64_t& end_offset, size_t& read_len, 9642: uint64_t& aligned_useful_len); 9642: 9642: void UpdateStats(bool found_in_buffer, size_t length_found) { 9642: if (found_in_buffer) { 9642: RecordTick(stats_, PREFETCH_HITS); 9642: } 9642: if (length_found > 0) { 9642: RecordTick(stats_, PREFETCH_BYTES_USEFUL, length_found); 9642: } 9642: } 9642: 9642: void UpdateReadAheadTrimmedStat(size_t initial_length, 9642: size_t updated_length) { 9642: if (initial_length != updated_length) { 9642: RecordTick(stats_, READAHEAD_TRIMMED); 9642: } 9642: } 9642: 9642: Status PrefetchRemBuffers(const IOOptions& opts, 9642: RandomAccessFileReader* reader, 9642: uint64_t end_offset1, size_t alignment, 9642: size_t readahead_size); 9642: 9642: 9642: bool IsBufferQueueEmpty() { return bufs_.empty(); } 9642: 9642: BufferInfo* GetFirstBuffer() { return bufs_.front(); } 9642: 9642: BufferInfo* GetLastBuffer() { return bufs_.back(); } 9642: 9642: size_t NumBuffersAllocated() { return bufs_.size(); } 9642: 9642: void AllocateBuffer() { 9642: 9642: # 527 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 9642: (static_cast ( 9642: # 527 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: !free_bufs_.empty() 9642: # 527 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 527 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: "!free_bufs_.empty()" 9642: # 527 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 527 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 9642: ; 9642: BufferInfo* buf = free_bufs_.front(); 9642: free_bufs_.pop_front(); 9642: bufs_.emplace_back(buf); 9642: } 9642: 9642: void AllocateBufferIfEmpty() { 9642: if (bufs_.empty()) { 9642: AllocateBuffer(); 9642: } 9642: } 9642: 9642: void FreeFrontBuffer() { 9642: BufferInfo* buf = bufs_.front(); 9642: buf->ClearBuffer(); 9642: bufs_.pop_front(); 9642: free_bufs_.emplace_back(buf); 9642: } 9642: 9642: void FreeLastBuffer() { 9642: BufferInfo* buf = bufs_.back(); 9642: buf->ClearBuffer(); 9642: bufs_.pop_back(); 9642: free_bufs_.emplace_back(buf); 9642: } 9642: 9642: void FreeAllBuffers() { 9642: while (!bufs_.empty()) { 9642: BufferInfo* buf = bufs_.front(); 9642: buf->ClearBuffer(); 9642: bufs_.pop_front(); 9642: free_bufs_.emplace_back(buf); 9642: } 9642: } 9642: 9642: void FreeEmptyBuffers() { 9642: if (bufs_.empty()) { 9642: return; 9642: } 9642: 9642: std::deque tmp_buf; 9642: while (!bufs_.empty()) { 9642: BufferInfo* buf = bufs_.front(); 9642: bufs_.pop_front(); 9642: if (buf->async_read_in_progress_ || buf->DoesBufferContainData()) { 9642: tmp_buf.emplace_back(buf); 9642: } else { 9642: free_bufs_.emplace_back(buf); 9642: } 9642: } 9642: bufs_ = tmp_buf; 9642: } 9642: 9642: 9642: 9642: std::deque bufs_; 9642: std::deque free_bufs_; 9642: BufferInfo* overlap_buf_ = nullptr; 9642: 9642: size_t readahead_size_; 9642: size_t initial_auto_readahead_size_; 9642: 9642: 9642: size_t max_readahead_size_; 9642: 9642: 9642: size_t min_offset_read_; 9642: 9642: 9642: bool enable_; 9642: 9642: 9642: bool track_min_offset_; 9642: 9642: 9642: 9642: bool implicit_auto_readahead_; 9642: uint64_t prev_offset_; 9642: size_t prev_len_; 9642: 9642: 9642: uint64_t num_file_reads_for_auto_readahead_; 9642: uint64_t num_file_reads_; 9642: 9642: 9642: 9642: 9642: 9642: bool explicit_prefetch_submitted_; 9642: 9642: FileSystem* fs_; 9642: SystemClock* clock_; 9642: Statistics* stats_; 9642: 9642: FilePrefetchBufferUsage usage_; 9642: 9642: std::function readaheadsize_cb_; 9642: 9642: 9642: 9642: size_t num_buffers_; 9642: }; 9642: } 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/file/random_access_file_reader.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/file/random_access_file_reader.h" 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/env/file_system_tracer.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/io_tracer.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/fstream" 1 3 9642: # 36 "/usr/include/c++/13/fstream" 3 9642: 9642: # 37 "/usr/include/c++/13/fstream" 3 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/bits/codecvt.h" 1 3 9642: # 39 "/usr/include/c++/13/bits/codecvt.h" 3 9642: 9642: # 40 "/usr/include/c++/13/bits/codecvt.h" 3 9642: 9642: 9642: 9642: 9642: 9642: # 44 "/usr/include/c++/13/bits/codecvt.h" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: class codecvt_base 9642: { 9642: public: 9642: enum result 9642: { 9642: ok, 9642: partial, 9642: error, 9642: noconv 9642: }; 9642: }; 9642: # 70 "/usr/include/c++/13/bits/codecvt.h" 3 9642: template 9642: class __codecvt_abstract_base 9642: : public locale::facet, public codecvt_base 9642: { 9642: public: 9642: 9642: typedef codecvt_base::result result; 9642: typedef _InternT intern_type; 9642: typedef _ExternT extern_type; 9642: typedef _StateT state_type; 9642: # 118 "/usr/include/c++/13/bits/codecvt.h" 3 9642: result 9642: out(state_type& __state, const intern_type* __from, 9642: const intern_type* __from_end, const intern_type*& __from_next, 9642: extern_type* __to, extern_type* __to_end, 9642: extern_type*& __to_next) const 9642: { 9642: return this->do_out(__state, __from, __from_end, __from_next, 9642: __to, __to_end, __to_next); 9642: } 9642: # 157 "/usr/include/c++/13/bits/codecvt.h" 3 9642: result 9642: unshift(state_type& __state, extern_type* __to, extern_type* __to_end, 9642: extern_type*& __to_next) const 9642: { return this->do_unshift(__state, __to,__to_end,__to_next); } 9642: # 198 "/usr/include/c++/13/bits/codecvt.h" 3 9642: result 9642: in(state_type& __state, const extern_type* __from, 9642: const extern_type* __from_end, const extern_type*& __from_next, 9642: intern_type* __to, intern_type* __to_end, 9642: intern_type*& __to_next) const 9642: { 9642: return this->do_in(__state, __from, __from_end, __from_next, 9642: __to, __to_end, __to_next); 9642: } 9642: 9642: int 9642: encoding() const throw() 9642: { return this->do_encoding(); } 9642: 9642: bool 9642: always_noconv() const throw() 9642: { return this->do_always_noconv(); } 9642: 9642: int 9642: length(state_type& __state, const extern_type* __from, 9642: const extern_type* __end, size_t __max) const 9642: { return this->do_length(__state, __from, __end, __max); } 9642: 9642: int 9642: max_length() const throw() 9642: { return this->do_max_length(); } 9642: 9642: protected: 9642: explicit 9642: __codecvt_abstract_base(size_t __refs = 0) : locale::facet(__refs) { } 9642: 9642: virtual 9642: ~__codecvt_abstract_base() { } 9642: # 239 "/usr/include/c++/13/bits/codecvt.h" 3 9642: virtual result 9642: do_out(state_type& __state, const intern_type* __from, 9642: const intern_type* __from_end, const intern_type*& __from_next, 9642: extern_type* __to, extern_type* __to_end, 9642: extern_type*& __to_next) const = 0; 9642: 9642: virtual result 9642: do_unshift(state_type& __state, extern_type* __to, 9642: extern_type* __to_end, extern_type*& __to_next) const = 0; 9642: 9642: virtual result 9642: do_in(state_type& __state, const extern_type* __from, 9642: const extern_type* __from_end, const extern_type*& __from_next, 9642: intern_type* __to, intern_type* __to_end, 9642: intern_type*& __to_next) const = 0; 9642: 9642: virtual int 9642: do_encoding() const throw() = 0; 9642: 9642: virtual bool 9642: do_always_noconv() const throw() = 0; 9642: 9642: virtual int 9642: do_length(state_type&, const extern_type* __from, 9642: const extern_type* __end, size_t __max) const = 0; 9642: 9642: virtual int 9642: do_max_length() const throw() = 0; 9642: }; 9642: # 276 "/usr/include/c++/13/bits/codecvt.h" 3 9642: template 9642: class codecvt 9642: : public __codecvt_abstract_base<_InternT, _ExternT, _StateT> 9642: { 9642: public: 9642: 9642: typedef codecvt_base::result result; 9642: typedef _InternT intern_type; 9642: typedef _ExternT extern_type; 9642: typedef _StateT state_type; 9642: 9642: protected: 9642: __c_locale _M_c_locale_codecvt; 9642: 9642: public: 9642: static locale::id id; 9642: 9642: explicit 9642: codecvt(size_t __refs = 0) 9642: : __codecvt_abstract_base<_InternT, _ExternT, _StateT> (__refs), 9642: _M_c_locale_codecvt(0) 9642: { } 9642: 9642: explicit 9642: codecvt(__c_locale __cloc, size_t __refs = 0); 9642: 9642: protected: 9642: virtual 9642: ~codecvt() { } 9642: 9642: virtual result 9642: do_out(state_type& __state, const intern_type* __from, 9642: const intern_type* __from_end, const intern_type*& __from_next, 9642: extern_type* __to, extern_type* __to_end, 9642: extern_type*& __to_next) const; 9642: 9642: virtual result 9642: do_unshift(state_type& __state, extern_type* __to, 9642: extern_type* __to_end, extern_type*& __to_next) const; 9642: 9642: virtual result 9642: do_in(state_type& __state, const extern_type* __from, 9642: const extern_type* __from_end, const extern_type*& __from_next, 9642: intern_type* __to, intern_type* __to_end, 9642: intern_type*& __to_next) const; 9642: 9642: virtual int 9642: do_encoding() const throw(); 9642: 9642: virtual bool 9642: do_always_noconv() const throw(); 9642: 9642: virtual int 9642: do_length(state_type&, const extern_type* __from, 9642: const extern_type* __end, size_t __max) const; 9642: 9642: virtual int 9642: do_max_length() const throw(); 9642: }; 9642: 9642: template 9642: locale::id codecvt<_InternT, _ExternT, _StateT>::id; 9642: 9642: 9642: template<> 9642: class codecvt 9642: : public __codecvt_abstract_base 9642: { 9642: friend class messages; 9642: 9642: public: 9642: 9642: typedef char intern_type; 9642: typedef char extern_type; 9642: typedef mbstate_t state_type; 9642: 9642: protected: 9642: __c_locale _M_c_locale_codecvt; 9642: 9642: public: 9642: static locale::id id; 9642: 9642: explicit 9642: codecvt(size_t __refs = 0); 9642: 9642: explicit 9642: codecvt(__c_locale __cloc, size_t __refs = 0); 9642: 9642: protected: 9642: virtual 9642: ~codecvt(); 9642: 9642: virtual result 9642: do_out(state_type& __state, const intern_type* __from, 9642: const intern_type* __from_end, const intern_type*& __from_next, 9642: extern_type* __to, extern_type* __to_end, 9642: extern_type*& __to_next) const; 9642: 9642: virtual result 9642: do_unshift(state_type& __state, extern_type* __to, 9642: extern_type* __to_end, extern_type*& __to_next) const; 9642: 9642: virtual result 9642: do_in(state_type& __state, const extern_type* __from, 9642: const extern_type* __from_end, const extern_type*& __from_next, 9642: intern_type* __to, intern_type* __to_end, 9642: intern_type*& __to_next) const; 9642: 9642: virtual int 9642: do_encoding() const throw(); 9642: 9642: virtual bool 9642: do_always_noconv() const throw(); 9642: 9642: virtual int 9642: do_length(state_type&, const extern_type* __from, 9642: const extern_type* __end, size_t __max) const; 9642: 9642: virtual int 9642: do_max_length() const throw(); 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template<> 9642: class codecvt 9642: : public __codecvt_abstract_base 9642: { 9642: friend class messages; 9642: 9642: public: 9642: 9642: typedef wchar_t intern_type; 9642: typedef char extern_type; 9642: typedef mbstate_t state_type; 9642: 9642: protected: 9642: __c_locale _M_c_locale_codecvt; 9642: 9642: public: 9642: static locale::id id; 9642: 9642: explicit 9642: codecvt(size_t __refs = 0); 9642: 9642: explicit 9642: codecvt(__c_locale __cloc, size_t __refs = 0); 9642: 9642: protected: 9642: virtual 9642: ~codecvt(); 9642: 9642: virtual result 9642: do_out(state_type& __state, const intern_type* __from, 9642: const intern_type* __from_end, const intern_type*& __from_next, 9642: extern_type* __to, extern_type* __to_end, 9642: extern_type*& __to_next) const; 9642: 9642: virtual result 9642: do_unshift(state_type& __state, 9642: extern_type* __to, extern_type* __to_end, 9642: extern_type*& __to_next) const; 9642: 9642: virtual result 9642: do_in(state_type& __state, 9642: const extern_type* __from, const extern_type* __from_end, 9642: const extern_type*& __from_next, 9642: intern_type* __to, intern_type* __to_end, 9642: intern_type*& __to_next) const; 9642: 9642: virtual 9642: int do_encoding() const throw(); 9642: 9642: virtual 9642: bool do_always_noconv() const throw(); 9642: 9642: virtual 9642: int do_length(state_type&, const extern_type* __from, 9642: const extern_type* __end, size_t __max) const; 9642: 9642: virtual int 9642: do_max_length() const throw(); 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template<> 9642: class codecvt 9642: : public __codecvt_abstract_base 9642: { 9642: public: 9642: 9642: typedef char16_t intern_type; 9642: typedef char extern_type; 9642: typedef mbstate_t state_type; 9642: 9642: public: 9642: static locale::id id; 9642: 9642: explicit 9642: codecvt(size_t __refs = 0) 9642: : __codecvt_abstract_base(__refs) { } 9642: 9642: protected: 9642: virtual 9642: ~codecvt(); 9642: 9642: virtual result 9642: do_out(state_type& __state, const intern_type* __from, 9642: const intern_type* __from_end, const intern_type*& __from_next, 9642: extern_type* __to, extern_type* __to_end, 9642: extern_type*& __to_next) const; 9642: 9642: virtual result 9642: do_unshift(state_type& __state, 9642: extern_type* __to, extern_type* __to_end, 9642: extern_type*& __to_next) const; 9642: 9642: virtual result 9642: do_in(state_type& __state, 9642: const extern_type* __from, const extern_type* __from_end, 9642: const extern_type*& __from_next, 9642: intern_type* __to, intern_type* __to_end, 9642: intern_type*& __to_next) const; 9642: 9642: virtual 9642: int do_encoding() const throw(); 9642: 9642: virtual 9642: bool do_always_noconv() const throw(); 9642: 9642: virtual 9642: int do_length(state_type&, const extern_type* __from, 9642: const extern_type* __end, size_t __max) const; 9642: 9642: virtual int 9642: do_max_length() const throw(); 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: template<> 9642: class codecvt 9642: : public __codecvt_abstract_base 9642: { 9642: public: 9642: 9642: typedef char32_t intern_type; 9642: typedef char extern_type; 9642: typedef mbstate_t state_type; 9642: 9642: public: 9642: static locale::id id; 9642: 9642: explicit 9642: codecvt(size_t __refs = 0) 9642: : __codecvt_abstract_base(__refs) { } 9642: 9642: protected: 9642: virtual 9642: ~codecvt(); 9642: 9642: virtual result 9642: do_out(state_type& __state, const intern_type* __from, 9642: const intern_type* __from_end, const intern_type*& __from_next, 9642: extern_type* __to, extern_type* __to_end, 9642: extern_type*& __to_next) const; 9642: 9642: virtual result 9642: do_unshift(state_type& __state, 9642: extern_type* __to, extern_type* __to_end, 9642: extern_type*& __to_next) const; 9642: 9642: virtual result 9642: do_in(state_type& __state, 9642: const extern_type* __from, const extern_type* __from_end, 9642: const extern_type*& __from_next, 9642: intern_type* __to, intern_type* __to_end, 9642: intern_type*& __to_next) const; 9642: 9642: virtual 9642: int do_encoding() const throw(); 9642: 9642: virtual 9642: bool do_always_noconv() const throw(); 9642: 9642: virtual 9642: int do_length(state_type&, const extern_type* __from, 9642: const extern_type* __end, size_t __max) const; 9642: 9642: virtual int 9642: do_max_length() const throw(); 9642: }; 9642: # 698 "/usr/include/c++/13/bits/codecvt.h" 3 9642: template 9642: class codecvt_byname : public codecvt<_InternT, _ExternT, _StateT> 9642: { 9642: public: 9642: explicit 9642: codecvt_byname(const char* __s, size_t __refs = 0) 9642: : codecvt<_InternT, _ExternT, _StateT>(__refs) 9642: { 9642: if (__builtin_strcmp(__s, "C") != 0 9642: && __builtin_strcmp(__s, "POSIX") != 0) 9642: { 9642: this->_S_destroy_c_locale(this->_M_c_locale_codecvt); 9642: this->_S_create_c_locale(this->_M_c_locale_codecvt, __s); 9642: } 9642: } 9642: 9642: 9642: explicit 9642: codecvt_byname(const string& __s, size_t __refs = 0) 9642: : codecvt_byname(__s.c_str(), __refs) { } 9642: 9642: 9642: protected: 9642: virtual 9642: ~codecvt_byname() { } 9642: }; 9642: 9642: 9642: template<> 9642: class codecvt_byname 9642: : public codecvt 9642: { 9642: public: 9642: explicit 9642: codecvt_byname(const char*, size_t __refs = 0) 9642: : codecvt(__refs) { } 9642: 9642: explicit 9642: codecvt_byname(const string& __s, size_t __refs = 0) 9642: : codecvt_byname(__s.c_str(), __refs) { } 9642: 9642: protected: 9642: virtual 9642: ~codecvt_byname() { } 9642: }; 9642: 9642: template<> 9642: class codecvt_byname 9642: : public codecvt 9642: { 9642: public: 9642: explicit 9642: codecvt_byname(const char*, size_t __refs = 0) 9642: : codecvt(__refs) { } 9642: 9642: explicit 9642: codecvt_byname(const string& __s, size_t __refs = 0) 9642: : codecvt_byname(__s.c_str(), __refs) { } 9642: 9642: protected: 9642: virtual 9642: ~codecvt_byname() { } 9642: }; 9642: # 805 "/usr/include/c++/13/bits/codecvt.h" 3 9642: extern template class codecvt_byname; 9642: 9642: extern template 9642: const codecvt& 9642: use_facet >(const locale&); 9642: 9642: extern template 9642: bool 9642: has_facet >(const locale&); 9642: 9642: 9642: extern template class codecvt_byname; 9642: 9642: extern template 9642: const codecvt& 9642: use_facet >(const locale&); 9642: 9642: extern template 9642: bool 9642: has_facet >(const locale&); 9642: 9642: 9642: 9642: extern template class codecvt_byname; 9642: extern template class codecvt_byname; 9642: # 840 "/usr/include/c++/13/bits/codecvt.h" 3 9642: 9642: } 9642: # 43 "/usr/include/c++/13/fstream" 2 3 9642: # 1 "/usr/include/c++/13/cstdio" 1 3 9642: # 39 "/usr/include/c++/13/cstdio" 3 9642: 9642: # 40 "/usr/include/c++/13/cstdio" 3 9642: # 44 "/usr/include/c++/13/fstream" 2 3 9642: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/basic_file.h" 1 3 9642: # 37 "/usr/include/arm-linux-gnueabihf/c++/13/bits/basic_file.h" 3 9642: 9642: # 38 "/usr/include/arm-linux-gnueabihf/c++/13/bits/basic_file.h" 3 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++io.h" 1 3 9642: # 35 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++io.h" 3 9642: # 1 "/usr/include/c++/13/cstdio" 1 3 9642: # 39 "/usr/include/c++/13/cstdio" 3 9642: 9642: # 40 "/usr/include/c++/13/cstdio" 3 9642: # 36 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++io.h" 2 3 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef __gthread_mutex_t __c_lock; 9642: 9642: 9642: 9642: typedef FILE __c_file; 9642: 9642: 9642: } 9642: # 41 "/usr/include/arm-linux-gnueabihf/c++/13/bits/basic_file.h" 2 3 9642: 9642: 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: template 9642: class __basic_file; 9642: 9642: 9642: template<> 9642: class __basic_file 9642: { 9642: 9642: __c_file* _M_cfile; 9642: 9642: 9642: bool _M_cfile_created; 9642: 9642: public: 9642: __basic_file(__c_lock* __lock = 0) throw (); 9642: 9642: 9642: __basic_file(__basic_file&& __rv, __c_lock* = 0) noexcept 9642: : _M_cfile(__rv._M_cfile), _M_cfile_created(__rv._M_cfile_created) 9642: { 9642: __rv._M_cfile = nullptr; 9642: __rv._M_cfile_created = false; 9642: } 9642: 9642: __basic_file& operator=(const __basic_file&) = delete; 9642: __basic_file& operator=(__basic_file&&) = delete; 9642: 9642: void 9642: swap(__basic_file& __f) noexcept 9642: { 9642: std::swap(_M_cfile, __f._M_cfile); 9642: std::swap(_M_cfile_created, __f._M_cfile_created); 9642: } 9642: 9642: 9642: __basic_file* 9642: open(const char* __name, ios_base::openmode __mode, int __prot = 0664); 9642: 9642: 9642: 9642: 9642: 9642: 9642: __basic_file* 9642: sys_open(__c_file* __file, ios_base::openmode); 9642: 9642: __basic_file* 9642: sys_open(int __fd, ios_base::openmode __mode) throw (); 9642: 9642: __basic_file* 9642: close(); 9642: 9642: __attribute__ ((__pure__)) bool 9642: is_open() const throw (); 9642: 9642: __attribute__ ((__pure__)) int 9642: fd() throw (); 9642: 9642: __attribute__ ((__pure__)) __c_file* 9642: file() throw (); 9642: 9642: ~__basic_file(); 9642: 9642: streamsize 9642: xsputn(const char* __s, streamsize __n); 9642: 9642: streamsize 9642: xsputn_2(const char* __s1, streamsize __n1, 9642: const char* __s2, streamsize __n2); 9642: 9642: streamsize 9642: xsgetn(char* __s, streamsize __n); 9642: 9642: streamoff 9642: seekoff(streamoff __off, ios_base::seekdir __way) throw (); 9642: 9642: int 9642: sync(); 9642: 9642: streamsize 9642: showmanyc(); 9642: }; 9642: 9642: 9642: } 9642: # 45 "/usr/include/c++/13/fstream" 2 3 9642: # 54 "/usr/include/c++/13/fstream" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: 9642: 9642: template().make_preferred().filename())> 9642: using _If_fs_path = enable_if_t, _Result>; 9642: # 86 "/usr/include/c++/13/fstream" 3 9642: template 9642: class basic_filebuf : public basic_streambuf<_CharT, _Traits> 9642: { 9642: 9642: template 9642: using __chk_state = __and_, 9642: is_copy_constructible<_Tp>, 9642: is_default_constructible<_Tp>>; 9642: 9642: static_assert(__chk_state::value, 9642: "state_type must be CopyAssignable, CopyConstructible" 9642: " and DefaultConstructible"); 9642: 9642: static_assert(is_same>::value, 9642: "pos_type must be fpos"); 9642: 9642: public: 9642: 9642: typedef _CharT char_type; 9642: typedef _Traits traits_type; 9642: typedef typename traits_type::int_type int_type; 9642: typedef typename traits_type::pos_type pos_type; 9642: typedef typename traits_type::off_type off_type; 9642: 9642: typedef basic_streambuf __streambuf_type; 9642: typedef basic_filebuf __filebuf_type; 9642: typedef __basic_file __file_type; 9642: typedef typename traits_type::state_type __state_type; 9642: typedef codecvt __codecvt_type; 9642: 9642: friend class ios_base; 9642: 9642: protected: 9642: 9642: 9642: __c_lock _M_lock; 9642: 9642: 9642: __file_type _M_file; 9642: 9642: 9642: ios_base::openmode _M_mode; 9642: 9642: 9642: __state_type _M_state_beg; 9642: 9642: 9642: 9642: 9642: __state_type _M_state_cur; 9642: 9642: 9642: 9642: __state_type _M_state_last; 9642: 9642: 9642: char_type* _M_buf; 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_t _M_buf_size; 9642: 9642: 9642: bool _M_buf_allocated; 9642: # 162 "/usr/include/c++/13/fstream" 3 9642: bool _M_reading; 9642: bool _M_writing; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: char_type _M_pback; 9642: char_type* _M_pback_cur_save; 9642: char_type* _M_pback_end_save; 9642: bool _M_pback_init; 9642: 9642: 9642: 9642: const __codecvt_type* _M_codecvt; 9642: 9642: 9642: 9642: 9642: 9642: 9642: char* _M_ext_buf; 9642: 9642: 9642: 9642: 9642: streamsize _M_ext_buf_size; 9642: 9642: 9642: 9642: 9642: 9642: 9642: const char* _M_ext_next; 9642: char* _M_ext_end; 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: _M_create_pback() 9642: { 9642: if (!_M_pback_init) 9642: { 9642: _M_pback_cur_save = this->gptr(); 9642: _M_pback_end_save = this->egptr(); 9642: this->setg(&_M_pback, &_M_pback, &_M_pback + 1); 9642: _M_pback_init = true; 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: void 9642: _M_destroy_pback() throw() 9642: { 9642: if (_M_pback_init) 9642: { 9642: 9642: _M_pback_cur_save += this->gptr() != this->eback(); 9642: this->setg(_M_buf, _M_pback_cur_save, _M_pback_end_save); 9642: _M_pback_init = false; 9642: } 9642: } 9642: 9642: public: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: basic_filebuf(); 9642: 9642: 9642: basic_filebuf(const basic_filebuf&) = delete; 9642: basic_filebuf(basic_filebuf&&); 9642: 9642: 9642: 9642: 9642: 9642: virtual 9642: ~basic_filebuf() 9642: { 9642: try 9642: { this->close(); } 9642: catch(...) 9642: { } 9642: } 9642: 9642: 9642: basic_filebuf& operator=(const basic_filebuf&) = delete; 9642: basic_filebuf& operator=(basic_filebuf&&); 9642: void swap(basic_filebuf&); 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool 9642: is_open() const throw() 9642: { return _M_file.is_open(); } 9642: # 316 "/usr/include/c++/13/fstream" 3 9642: __filebuf_type* 9642: open(const char* __s, ios_base::openmode __mode); 9642: # 337 "/usr/include/c++/13/fstream" 3 9642: __filebuf_type* 9642: open(const std::string& __s, ios_base::openmode __mode) 9642: { return open(__s.c_str(), __mode); } 9642: # 348 "/usr/include/c++/13/fstream" 3 9642: template 9642: _If_fs_path<_Path, __filebuf_type*> 9642: open(const _Path& __s, ios_base::openmode __mode) 9642: { return open(__s.c_str(), __mode); } 9642: # 367 "/usr/include/c++/13/fstream" 3 9642: __filebuf_type* 9642: close(); 9642: 9642: protected: 9642: void 9642: _M_allocate_internal_buffer(); 9642: 9642: void 9642: _M_destroy_internal_buffer() throw(); 9642: 9642: 9642: virtual streamsize 9642: showmanyc(); 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual int_type 9642: underflow(); 9642: 9642: virtual int_type 9642: pbackfail(int_type __c = _Traits::eof()); 9642: # 399 "/usr/include/c++/13/fstream" 3 9642: virtual int_type 9642: overflow(int_type __c = _Traits::eof()); 9642: 9642: 9642: 9642: bool 9642: _M_convert_to_external(char_type*, streamsize); 9642: # 419 "/usr/include/c++/13/fstream" 3 9642: virtual __streambuf_type* 9642: setbuf(char_type* __s, streamsize __n); 9642: 9642: virtual pos_type 9642: seekoff(off_type __off, ios_base::seekdir __way, 9642: ios_base::openmode __mode = ios_base::in | ios_base::out); 9642: 9642: virtual pos_type 9642: seekpos(pos_type __pos, 9642: ios_base::openmode __mode = ios_base::in | ios_base::out); 9642: 9642: 9642: pos_type 9642: _M_seek(off_type __off, ios_base::seekdir __way, __state_type __state); 9642: 9642: int 9642: _M_get_ext_pos(__state_type &__state); 9642: 9642: virtual int 9642: sync(); 9642: 9642: virtual void 9642: imbue(const locale& __loc); 9642: 9642: virtual streamsize 9642: xsgetn(char_type* __s, streamsize __n); 9642: 9642: virtual streamsize 9642: xsputn(const char_type* __s, streamsize __n); 9642: 9642: 9642: bool 9642: _M_terminate_output(); 9642: # 465 "/usr/include/c++/13/fstream" 3 9642: void 9642: _M_set_buffer(streamsize __off) 9642: { 9642: const bool __testin = _M_mode & ios_base::in; 9642: const bool __testout = (_M_mode & ios_base::out 9642: || _M_mode & ios_base::app); 9642: 9642: if (__testin && __off > 0) 9642: this->setg(_M_buf, _M_buf, _M_buf + __off); 9642: else 9642: this->setg(_M_buf, _M_buf, _M_buf); 9642: 9642: if (__testout && __off == 0 && _M_buf_size > 1 ) 9642: this->setp(_M_buf, _M_buf + _M_buf_size - 1); 9642: else 9642: this->setp(0, 0); 9642: } 9642: }; 9642: # 498 "/usr/include/c++/13/fstream" 3 9642: template 9642: class basic_ifstream : public basic_istream<_CharT, _Traits> 9642: { 9642: public: 9642: 9642: typedef _CharT char_type; 9642: typedef _Traits traits_type; 9642: typedef typename traits_type::int_type int_type; 9642: typedef typename traits_type::pos_type pos_type; 9642: typedef typename traits_type::off_type off_type; 9642: 9642: 9642: typedef basic_filebuf __filebuf_type; 9642: typedef basic_istream __istream_type; 9642: 9642: private: 9642: __filebuf_type _M_filebuf; 9642: 9642: public: 9642: # 525 "/usr/include/c++/13/fstream" 3 9642: basic_ifstream() : __istream_type(), _M_filebuf() 9642: { this->init(&_M_filebuf); } 9642: # 535 "/usr/include/c++/13/fstream" 3 9642: explicit 9642: basic_ifstream(const char* __s, ios_base::openmode __mode = ios_base::in) 9642: : __istream_type(), _M_filebuf() 9642: { 9642: this->init(&_M_filebuf); 9642: this->open(__s, __mode); 9642: } 9642: # 568 "/usr/include/c++/13/fstream" 3 9642: explicit 9642: basic_ifstream(const std::string& __s, 9642: ios_base::openmode __mode = ios_base::in) 9642: : __istream_type(), _M_filebuf() 9642: { 9642: this->init(&_M_filebuf); 9642: this->open(__s, __mode); 9642: } 9642: # 585 "/usr/include/c++/13/fstream" 3 9642: template> 9642: basic_ifstream(const _Path& __s, 9642: ios_base::openmode __mode = ios_base::in) 9642: : basic_ifstream(__s.c_str(), __mode) 9642: { } 9642: 9642: 9642: basic_ifstream(const basic_ifstream&) = delete; 9642: 9642: basic_ifstream(basic_ifstream&& __rhs) 9642: : __istream_type(std::move(__rhs)), 9642: _M_filebuf(std::move(__rhs._M_filebuf)) 9642: { __istream_type::set_rdbuf(&_M_filebuf); } 9642: # 606 "/usr/include/c++/13/fstream" 3 9642: ~basic_ifstream() 9642: { } 9642: 9642: 9642: 9642: 9642: basic_ifstream& 9642: operator=(const basic_ifstream&) = delete; 9642: 9642: basic_ifstream& 9642: operator=(basic_ifstream&& __rhs) 9642: { 9642: __istream_type::operator=(std::move(__rhs)); 9642: _M_filebuf = std::move(__rhs._M_filebuf); 9642: return *this; 9642: } 9642: 9642: void 9642: swap(basic_ifstream& __rhs) 9642: { 9642: __istream_type::swap(__rhs); 9642: _M_filebuf.swap(__rhs._M_filebuf); 9642: } 9642: # 638 "/usr/include/c++/13/fstream" 3 9642: __filebuf_type* 9642: rdbuf() const 9642: { return const_cast<__filebuf_type*>(&_M_filebuf); } 9642: 9642: 9642: 9642: 9642: 9642: bool 9642: is_open() 9642: { return _M_filebuf.is_open(); } 9642: 9642: 9642: 9642: bool 9642: is_open() const 9642: { return _M_filebuf.is_open(); } 9642: # 664 "/usr/include/c++/13/fstream" 3 9642: void 9642: open(const char* __s, ios_base::openmode __mode = ios_base::in) 9642: { 9642: if (!_M_filebuf.open(__s, __mode | ios_base::in)) 9642: this->setstate(ios_base::failbit); 9642: else 9642: 9642: 9642: this->clear(); 9642: } 9642: # 703 "/usr/include/c++/13/fstream" 3 9642: void 9642: open(const std::string& __s, ios_base::openmode __mode = ios_base::in) 9642: { 9642: if (!_M_filebuf.open(__s, __mode | ios_base::in)) 9642: this->setstate(ios_base::failbit); 9642: else 9642: 9642: 9642: this->clear(); 9642: } 9642: # 723 "/usr/include/c++/13/fstream" 3 9642: template 9642: _If_fs_path<_Path, void> 9642: open(const _Path& __s, ios_base::openmode __mode = ios_base::in) 9642: { open(__s.c_str(), __mode); } 9642: # 736 "/usr/include/c++/13/fstream" 3 9642: void 9642: close() 9642: { 9642: if (!_M_filebuf.close()) 9642: this->setstate(ios_base::failbit); 9642: } 9642: }; 9642: # 759 "/usr/include/c++/13/fstream" 3 9642: template 9642: class basic_ofstream : public basic_ostream<_CharT,_Traits> 9642: { 9642: public: 9642: 9642: typedef _CharT char_type; 9642: typedef _Traits traits_type; 9642: typedef typename traits_type::int_type int_type; 9642: typedef typename traits_type::pos_type pos_type; 9642: typedef typename traits_type::off_type off_type; 9642: 9642: 9642: typedef basic_filebuf __filebuf_type; 9642: typedef basic_ostream __ostream_type; 9642: 9642: private: 9642: __filebuf_type _M_filebuf; 9642: 9642: public: 9642: # 786 "/usr/include/c++/13/fstream" 3 9642: basic_ofstream(): __ostream_type(), _M_filebuf() 9642: { this->init(&_M_filebuf); } 9642: # 796 "/usr/include/c++/13/fstream" 3 9642: explicit 9642: basic_ofstream(const char* __s, 9642: ios_base::openmode __mode = ios_base::out) 9642: : __ostream_type(), _M_filebuf() 9642: { 9642: this->init(&_M_filebuf); 9642: this->open(__s, __mode); 9642: } 9642: # 831 "/usr/include/c++/13/fstream" 3 9642: explicit 9642: basic_ofstream(const std::string& __s, 9642: ios_base::openmode __mode = ios_base::out) 9642: : __ostream_type(), _M_filebuf() 9642: { 9642: this->init(&_M_filebuf); 9642: this->open(__s, __mode); 9642: } 9642: # 848 "/usr/include/c++/13/fstream" 3 9642: template> 9642: basic_ofstream(const _Path& __s, 9642: ios_base::openmode __mode = ios_base::out) 9642: : basic_ofstream(__s.c_str(), __mode) 9642: { } 9642: 9642: 9642: basic_ofstream(const basic_ofstream&) = delete; 9642: 9642: basic_ofstream(basic_ofstream&& __rhs) 9642: : __ostream_type(std::move(__rhs)), 9642: _M_filebuf(std::move(__rhs._M_filebuf)) 9642: { __ostream_type::set_rdbuf(&_M_filebuf); } 9642: # 869 "/usr/include/c++/13/fstream" 3 9642: ~basic_ofstream() 9642: { } 9642: 9642: 9642: 9642: 9642: basic_ofstream& 9642: operator=(const basic_ofstream&) = delete; 9642: 9642: basic_ofstream& 9642: operator=(basic_ofstream&& __rhs) 9642: { 9642: __ostream_type::operator=(std::move(__rhs)); 9642: _M_filebuf = std::move(__rhs._M_filebuf); 9642: return *this; 9642: } 9642: 9642: void 9642: swap(basic_ofstream& __rhs) 9642: { 9642: __ostream_type::swap(__rhs); 9642: _M_filebuf.swap(__rhs._M_filebuf); 9642: } 9642: # 901 "/usr/include/c++/13/fstream" 3 9642: __filebuf_type* 9642: rdbuf() const 9642: { return const_cast<__filebuf_type*>(&_M_filebuf); } 9642: 9642: 9642: 9642: 9642: 9642: bool 9642: is_open() 9642: { return _M_filebuf.is_open(); } 9642: 9642: 9642: 9642: bool 9642: is_open() const 9642: { return _M_filebuf.is_open(); } 9642: # 927 "/usr/include/c++/13/fstream" 3 9642: void 9642: open(const char* __s, ios_base::openmode __mode = ios_base::out) 9642: { 9642: if (!_M_filebuf.open(__s, __mode | ios_base::out)) 9642: this->setstate(ios_base::failbit); 9642: else 9642: 9642: 9642: this->clear(); 9642: } 9642: # 966 "/usr/include/c++/13/fstream" 3 9642: void 9642: open(const std::string& __s, ios_base::openmode __mode = ios_base::out) 9642: { 9642: if (!_M_filebuf.open(__s, __mode | ios_base::out)) 9642: this->setstate(ios_base::failbit); 9642: else 9642: 9642: 9642: this->clear(); 9642: } 9642: # 986 "/usr/include/c++/13/fstream" 3 9642: template 9642: _If_fs_path<_Path, void> 9642: open(const _Path& __s, ios_base::openmode __mode = ios_base::out) 9642: { open(__s.c_str(), __mode); } 9642: # 999 "/usr/include/c++/13/fstream" 3 9642: void 9642: close() 9642: { 9642: if (!_M_filebuf.close()) 9642: this->setstate(ios_base::failbit); 9642: } 9642: }; 9642: # 1022 "/usr/include/c++/13/fstream" 3 9642: template 9642: class basic_fstream : public basic_iostream<_CharT, _Traits> 9642: { 9642: public: 9642: 9642: typedef _CharT char_type; 9642: typedef _Traits traits_type; 9642: typedef typename traits_type::int_type int_type; 9642: typedef typename traits_type::pos_type pos_type; 9642: typedef typename traits_type::off_type off_type; 9642: 9642: 9642: typedef basic_filebuf __filebuf_type; 9642: typedef basic_ios __ios_type; 9642: typedef basic_iostream __iostream_type; 9642: 9642: private: 9642: __filebuf_type _M_filebuf; 9642: 9642: public: 9642: # 1050 "/usr/include/c++/13/fstream" 3 9642: basic_fstream() 9642: : __iostream_type(), _M_filebuf() 9642: { this->init(&_M_filebuf); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: explicit 9642: basic_fstream(const char* __s, 9642: ios_base::openmode __mode = ios_base::in | ios_base::out) 9642: : __iostream_type(0), _M_filebuf() 9642: { 9642: this->init(&_M_filebuf); 9642: this->open(__s, __mode); 9642: } 9642: # 1089 "/usr/include/c++/13/fstream" 3 9642: explicit 9642: basic_fstream(const std::string& __s, 9642: ios_base::openmode __mode = ios_base::in | ios_base::out) 9642: : __iostream_type(0), _M_filebuf() 9642: { 9642: this->init(&_M_filebuf); 9642: this->open(__s, __mode); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template> 9642: basic_fstream(const _Path& __s, 9642: ios_base::openmode __mode = ios_base::in | ios_base::out) 9642: : basic_fstream(__s.c_str(), __mode) 9642: { } 9642: 9642: 9642: basic_fstream(const basic_fstream&) = delete; 9642: 9642: basic_fstream(basic_fstream&& __rhs) 9642: : __iostream_type(std::move(__rhs)), 9642: _M_filebuf(std::move(__rhs._M_filebuf)) 9642: { __iostream_type::set_rdbuf(&_M_filebuf); } 9642: # 1125 "/usr/include/c++/13/fstream" 3 9642: ~basic_fstream() 9642: { } 9642: 9642: 9642: 9642: 9642: basic_fstream& 9642: operator=(const basic_fstream&) = delete; 9642: 9642: basic_fstream& 9642: operator=(basic_fstream&& __rhs) 9642: { 9642: __iostream_type::operator=(std::move(__rhs)); 9642: _M_filebuf = std::move(__rhs._M_filebuf); 9642: return *this; 9642: } 9642: 9642: void 9642: swap(basic_fstream& __rhs) 9642: { 9642: __iostream_type::swap(__rhs); 9642: _M_filebuf.swap(__rhs._M_filebuf); 9642: } 9642: # 1157 "/usr/include/c++/13/fstream" 3 9642: __filebuf_type* 9642: rdbuf() const 9642: { return const_cast<__filebuf_type*>(&_M_filebuf); } 9642: 9642: 9642: 9642: 9642: 9642: bool 9642: is_open() 9642: { return _M_filebuf.is_open(); } 9642: 9642: 9642: 9642: bool 9642: is_open() const 9642: { return _M_filebuf.is_open(); } 9642: # 1183 "/usr/include/c++/13/fstream" 3 9642: void 9642: open(const char* __s, 9642: ios_base::openmode __mode = ios_base::in | ios_base::out) 9642: { 9642: if (!_M_filebuf.open(__s, __mode)) 9642: this->setstate(ios_base::failbit); 9642: else 9642: 9642: 9642: this->clear(); 9642: } 9642: # 1224 "/usr/include/c++/13/fstream" 3 9642: void 9642: open(const std::string& __s, 9642: ios_base::openmode __mode = ios_base::in | ios_base::out) 9642: { 9642: if (!_M_filebuf.open(__s, __mode)) 9642: this->setstate(ios_base::failbit); 9642: else 9642: 9642: 9642: this->clear(); 9642: } 9642: # 1245 "/usr/include/c++/13/fstream" 3 9642: template 9642: _If_fs_path<_Path, void> 9642: open(const _Path& __s, 9642: ios_base::openmode __mode = ios_base::in | ios_base::out) 9642: { open(__s.c_str(), __mode); } 9642: # 1259 "/usr/include/c++/13/fstream" 3 9642: void 9642: close() 9642: { 9642: if (!_M_filebuf.close()) 9642: this->setstate(ios_base::failbit); 9642: } 9642: }; 9642: 9642: 9642: 9642: template 9642: inline void 9642: swap(basic_filebuf<_CharT, _Traits>& __x, 9642: basic_filebuf<_CharT, _Traits>& __y) 9642: { __x.swap(__y); } 9642: 9642: 9642: template 9642: inline void 9642: swap(basic_ifstream<_CharT, _Traits>& __x, 9642: basic_ifstream<_CharT, _Traits>& __y) 9642: { __x.swap(__y); } 9642: 9642: 9642: template 9642: inline void 9642: swap(basic_ofstream<_CharT, _Traits>& __x, 9642: basic_ofstream<_CharT, _Traits>& __y) 9642: { __x.swap(__y); } 9642: 9642: 9642: template 9642: inline void 9642: swap(basic_fstream<_CharT, _Traits>& __x, 9642: basic_fstream<_CharT, _Traits>& __y) 9642: { __x.swap(__y); } 9642: 9642: 9642: 9642: } 9642: 9642: # 1 "/usr/include/c++/13/bits/fstream.tcc" 1 3 9642: # 37 "/usr/include/c++/13/bits/fstream.tcc" 3 9642: 9642: # 38 "/usr/include/c++/13/bits/fstream.tcc" 3 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/cerrno" 1 3 9642: # 39 "/usr/include/c++/13/cerrno" 3 9642: 9642: # 40 "/usr/include/c++/13/cerrno" 3 9642: # 42 "/usr/include/c++/13/bits/fstream.tcc" 2 3 9642: 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: template 9642: void 9642: basic_filebuf<_CharT, _Traits>:: 9642: _M_allocate_internal_buffer() 9642: { 9642: 9642: 9642: if (!_M_buf_allocated && !_M_buf) 9642: { 9642: _M_buf = new char_type[_M_buf_size]; 9642: _M_buf_allocated = true; 9642: } 9642: } 9642: 9642: template 9642: void 9642: basic_filebuf<_CharT, _Traits>:: 9642: _M_destroy_internal_buffer() throw() 9642: { 9642: if (_M_buf_allocated) 9642: { 9642: delete [] _M_buf; 9642: _M_buf = 0; 9642: _M_buf_allocated = false; 9642: } 9642: delete [] _M_ext_buf; 9642: _M_ext_buf = 0; 9642: _M_ext_buf_size = 0; 9642: _M_ext_next = 0; 9642: _M_ext_end = 0; 9642: } 9642: 9642: template 9642: basic_filebuf<_CharT, _Traits>:: 9642: basic_filebuf() : __streambuf_type(), _M_lock(), _M_file(&_M_lock), 9642: _M_mode(ios_base::openmode(0)), _M_state_beg(), _M_state_cur(), 9642: _M_state_last(), _M_buf(0), _M_buf_size(8192), 9642: _M_buf_allocated(false), _M_reading(false), _M_writing(false), _M_pback(), 9642: _M_pback_cur_save(0), _M_pback_end_save(0), _M_pback_init(false), 9642: _M_codecvt(0), _M_ext_buf(0), _M_ext_buf_size(0), _M_ext_next(0), 9642: _M_ext_end(0) 9642: { 9642: _M_codecvt = std::__try_use_facet<__codecvt_type>(this->_M_buf_locale); 9642: } 9642: 9642: 9642: template 9642: basic_filebuf<_CharT, _Traits>:: 9642: basic_filebuf(basic_filebuf&& __rhs) 9642: : __streambuf_type(__rhs), 9642: _M_lock(), _M_file(std::move(__rhs._M_file), &_M_lock), 9642: _M_mode(std::__exchange(__rhs._M_mode, ios_base::openmode(0))), 9642: _M_state_beg(std::move(__rhs._M_state_beg)), 9642: _M_state_cur(std::move(__rhs._M_state_cur)), 9642: _M_state_last(std::move(__rhs._M_state_last)), 9642: _M_buf(std::__exchange(__rhs._M_buf, nullptr)), 9642: _M_buf_size(std::__exchange(__rhs._M_buf_size, 1)), 9642: _M_buf_allocated(std::__exchange(__rhs._M_buf_allocated, false)), 9642: _M_reading(std::__exchange(__rhs._M_reading, false)), 9642: _M_writing(std::__exchange(__rhs._M_writing, false)), 9642: _M_pback(__rhs._M_pback), 9642: _M_pback_cur_save(std::__exchange(__rhs._M_pback_cur_save, nullptr)), 9642: _M_pback_end_save(std::__exchange(__rhs._M_pback_end_save, nullptr)), 9642: _M_pback_init(std::__exchange(__rhs._M_pback_init, false)), 9642: _M_codecvt(__rhs._M_codecvt), 9642: _M_ext_buf(std::__exchange(__rhs._M_ext_buf, nullptr)), 9642: _M_ext_buf_size(std::__exchange(__rhs._M_ext_buf_size, 0)), 9642: _M_ext_next(std::__exchange(__rhs._M_ext_next, nullptr)), 9642: _M_ext_end(std::__exchange(__rhs._M_ext_end, nullptr)) 9642: { 9642: __rhs._M_set_buffer(-1); 9642: __rhs._M_state_last = __rhs._M_state_cur = __rhs._M_state_beg; 9642: } 9642: 9642: template 9642: basic_filebuf<_CharT, _Traits>& 9642: basic_filebuf<_CharT, _Traits>:: 9642: operator=(basic_filebuf&& __rhs) 9642: { 9642: this->close(); 9642: __streambuf_type::operator=(__rhs); 9642: _M_file.swap(__rhs._M_file); 9642: _M_mode = std::__exchange(__rhs._M_mode, ios_base::openmode(0)); 9642: _M_state_beg = std::move(__rhs._M_state_beg); 9642: _M_state_cur = std::move(__rhs._M_state_cur); 9642: _M_state_last = std::move(__rhs._M_state_last); 9642: _M_buf = std::__exchange(__rhs._M_buf, nullptr); 9642: _M_buf_size = std::__exchange(__rhs._M_buf_size, 1); 9642: _M_buf_allocated = std::__exchange(__rhs._M_buf_allocated, false); 9642: _M_ext_buf = std::__exchange(__rhs._M_ext_buf, nullptr); 9642: _M_ext_buf_size = std::__exchange(__rhs._M_ext_buf_size, 0); 9642: _M_ext_next = std::__exchange(__rhs._M_ext_next, nullptr); 9642: _M_ext_end = std::__exchange(__rhs._M_ext_end, nullptr); 9642: _M_reading = std::__exchange(__rhs._M_reading, false); 9642: _M_writing = std::__exchange(__rhs._M_writing, false); 9642: _M_pback_cur_save = std::__exchange(__rhs._M_pback_cur_save, nullptr); 9642: _M_pback_end_save = std::__exchange(__rhs._M_pback_end_save, nullptr); 9642: _M_pback_init = std::__exchange(__rhs._M_pback_init, false); 9642: __rhs._M_set_buffer(-1); 9642: __rhs._M_state_last = __rhs._M_state_cur = __rhs._M_state_beg; 9642: return *this; 9642: } 9642: 9642: template 9642: void 9642: basic_filebuf<_CharT, _Traits>:: 9642: swap(basic_filebuf& __rhs) 9642: { 9642: __streambuf_type::swap(__rhs); 9642: _M_file.swap(__rhs._M_file); 9642: std::swap(_M_mode, __rhs._M_mode); 9642: std::swap(_M_state_beg, __rhs._M_state_beg); 9642: std::swap(_M_state_cur, __rhs._M_state_cur); 9642: std::swap(_M_state_last, __rhs._M_state_last); 9642: std::swap(_M_buf, __rhs._M_buf); 9642: std::swap(_M_buf_size, __rhs._M_buf_size); 9642: std::swap(_M_buf_allocated, __rhs._M_buf_allocated); 9642: std::swap(_M_ext_buf, __rhs._M_ext_buf); 9642: std::swap(_M_ext_buf_size, __rhs._M_ext_buf_size); 9642: std::swap(_M_ext_next, __rhs._M_ext_next); 9642: std::swap(_M_ext_end, __rhs._M_ext_end); 9642: std::swap(_M_reading, __rhs._M_reading); 9642: std::swap(_M_writing, __rhs._M_writing); 9642: std::swap(_M_pback_cur_save, __rhs._M_pback_cur_save); 9642: std::swap(_M_pback_end_save, __rhs._M_pback_end_save); 9642: std::swap(_M_pback_init, __rhs._M_pback_init); 9642: } 9642: 9642: 9642: template 9642: typename basic_filebuf<_CharT, _Traits>::__filebuf_type* 9642: basic_filebuf<_CharT, _Traits>:: 9642: open(const char* __s, ios_base::openmode __mode) 9642: { 9642: __filebuf_type *__ret = 0; 9642: if (!this->is_open()) 9642: { 9642: _M_file.open(__s, __mode); 9642: if (this->is_open()) 9642: { 9642: _M_allocate_internal_buffer(); 9642: _M_mode = __mode; 9642: 9642: 9642: _M_reading = false; 9642: _M_writing = false; 9642: _M_set_buffer(-1); 9642: 9642: 9642: _M_state_last = _M_state_cur = _M_state_beg; 9642: 9642: 9642: if ((__mode & ios_base::ate) 9642: && this->seekoff(0, ios_base::end, __mode) 9642: == pos_type(off_type(-1))) 9642: this->close(); 9642: else 9642: __ret = this; 9642: } 9642: } 9642: return __ret; 9642: } 9642: # 246 "/usr/include/c++/13/bits/fstream.tcc" 3 9642: template 9642: typename basic_filebuf<_CharT, _Traits>::__filebuf_type* 9642: basic_filebuf<_CharT, _Traits>:: 9642: close() 9642: { 9642: if (!this->is_open()) 9642: return 0; 9642: 9642: bool __testfail = false; 9642: { 9642: 9642: struct __close_sentry 9642: { 9642: basic_filebuf *__fb; 9642: __close_sentry (basic_filebuf *__fbi): __fb(__fbi) { } 9642: ~__close_sentry () 9642: { 9642: __fb->_M_mode = ios_base::openmode(0); 9642: __fb->_M_pback_init = false; 9642: __fb->_M_destroy_internal_buffer(); 9642: __fb->_M_reading = false; 9642: __fb->_M_writing = false; 9642: __fb->_M_set_buffer(-1); 9642: __fb->_M_state_last = __fb->_M_state_cur = __fb->_M_state_beg; 9642: } 9642: } __cs (this); 9642: 9642: try 9642: { 9642: if (!_M_terminate_output()) 9642: __testfail = true; 9642: } 9642: catch(...) 9642: { 9642: _M_file.close(); 9642: throw; 9642: } 9642: } 9642: 9642: if (!_M_file.close()) 9642: __testfail = true; 9642: 9642: if (__testfail) 9642: return 0; 9642: else 9642: return this; 9642: } 9642: 9642: template 9642: streamsize 9642: basic_filebuf<_CharT, _Traits>:: 9642: showmanyc() 9642: { 9642: streamsize __ret = -1; 9642: const bool __testin = _M_mode & ios_base::in; 9642: if (__testin && this->is_open()) 9642: { 9642: 9642: 9642: __ret = this->egptr() - this->gptr(); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: if (__check_facet(_M_codecvt).encoding() >= 0) 9642: 9642: __ret += _M_file.showmanyc() / _M_codecvt->max_length(); 9642: } 9642: return __ret; 9642: } 9642: 9642: template 9642: typename basic_filebuf<_CharT, _Traits>::int_type 9642: basic_filebuf<_CharT, _Traits>:: 9642: underflow() 9642: { 9642: int_type __ret = traits_type::eof(); 9642: const bool __testin = _M_mode & ios_base::in; 9642: if (__testin) 9642: { 9642: if (_M_writing) 9642: { 9642: if (overflow() == traits_type::eof()) 9642: return __ret; 9642: _M_set_buffer(-1); 9642: _M_writing = false; 9642: } 9642: 9642: 9642: 9642: _M_destroy_pback(); 9642: 9642: if (this->gptr() < this->egptr()) 9642: return traits_type::to_int_type(*this->gptr()); 9642: 9642: 9642: const size_t __buflen = _M_buf_size > 1 ? _M_buf_size - 1 : 1; 9642: 9642: 9642: bool __got_eof = false; 9642: 9642: streamsize __ilen = 0; 9642: codecvt_base::result __r = codecvt_base::ok; 9642: if (__check_facet(_M_codecvt).always_noconv()) 9642: { 9642: __ilen = _M_file.xsgetn(reinterpret_cast(this->eback()), 9642: __buflen); 9642: if (__ilen == 0) 9642: __got_eof = true; 9642: } 9642: else 9642: { 9642: 9642: 9642: const int __enc = _M_codecvt->encoding(); 9642: streamsize __blen; 9642: streamsize __rlen; 9642: if (__enc > 0) 9642: __blen = __rlen = __buflen * __enc; 9642: else 9642: { 9642: __blen = __buflen + _M_codecvt->max_length() - 1; 9642: __rlen = __buflen; 9642: } 9642: const streamsize __remainder = _M_ext_end - _M_ext_next; 9642: __rlen = __rlen > __remainder ? __rlen - __remainder : 0; 9642: 9642: 9642: 9642: if (_M_reading && this->egptr() == this->eback() && __remainder) 9642: __rlen = 0; 9642: 9642: 9642: 9642: if (_M_ext_buf_size < __blen) 9642: { 9642: char* __buf = new char[__blen]; 9642: if (__remainder) 9642: __builtin_memcpy(__buf, _M_ext_next, __remainder); 9642: 9642: delete [] _M_ext_buf; 9642: _M_ext_buf = __buf; 9642: _M_ext_buf_size = __blen; 9642: } 9642: else if (__remainder) 9642: __builtin_memmove(_M_ext_buf, _M_ext_next, __remainder); 9642: 9642: _M_ext_next = _M_ext_buf; 9642: _M_ext_end = _M_ext_buf + __remainder; 9642: _M_state_last = _M_state_cur; 9642: 9642: do 9642: { 9642: if (__rlen > 0) 9642: { 9642: 9642: 9642: 9642: if (_M_ext_end - _M_ext_buf + __rlen > _M_ext_buf_size) 9642: { 9642: __throw_ios_failure(("basic_filebuf::underflow " "codecvt::max_length() " "is not valid") 9642: 9642: ); 9642: } 9642: streamsize __elen = _M_file.xsgetn(_M_ext_end, __rlen); 9642: if (__elen == 0) 9642: __got_eof = true; 9642: else if (__elen == -1) 9642: break; 9642: _M_ext_end += __elen; 9642: } 9642: 9642: char_type* __iend = this->eback(); 9642: if (_M_ext_next < _M_ext_end) 9642: __r = _M_codecvt->in(_M_state_cur, _M_ext_next, 9642: _M_ext_end, _M_ext_next, 9642: this->eback(), 9642: this->eback() + __buflen, __iend); 9642: if (__r == codecvt_base::noconv) 9642: { 9642: size_t __avail = _M_ext_end - _M_ext_buf; 9642: __ilen = std::min(__avail, __buflen); 9642: traits_type::copy(this->eback(), 9642: reinterpret_cast 9642: (_M_ext_buf), __ilen); 9642: _M_ext_next = _M_ext_buf + __ilen; 9642: } 9642: else 9642: __ilen = __iend - this->eback(); 9642: 9642: 9642: 9642: 9642: if (__r == codecvt_base::error) 9642: break; 9642: 9642: __rlen = 1; 9642: } 9642: while (__ilen == 0 && !__got_eof); 9642: } 9642: 9642: if (__ilen > 0) 9642: { 9642: _M_set_buffer(__ilen); 9642: _M_reading = true; 9642: __ret = traits_type::to_int_type(*this->gptr()); 9642: } 9642: else if (__got_eof) 9642: { 9642: 9642: 9642: 9642: _M_set_buffer(-1); 9642: _M_reading = false; 9642: 9642: 9642: if (__r == codecvt_base::partial) 9642: __throw_ios_failure(("basic_filebuf::underflow " "incomplete character in file") 9642: ); 9642: } 9642: else if (__r == codecvt_base::error) 9642: __throw_ios_failure(("basic_filebuf::underflow " "invalid byte sequence in file") 9642: ); 9642: else 9642: __throw_ios_failure(("basic_filebuf::underflow " "error reading the file") 9642: , (*__errno_location ())); 9642: } 9642: return __ret; 9642: } 9642: 9642: template 9642: typename basic_filebuf<_CharT, _Traits>::int_type 9642: basic_filebuf<_CharT, _Traits>:: 9642: pbackfail(int_type __i) 9642: { 9642: int_type __ret = traits_type::eof(); 9642: const bool __testin = _M_mode & ios_base::in; 9642: if (__testin) 9642: { 9642: if (_M_writing) 9642: { 9642: if (overflow() == traits_type::eof()) 9642: return __ret; 9642: _M_set_buffer(-1); 9642: _M_writing = false; 9642: } 9642: 9642: 9642: const bool __testpb = _M_pback_init; 9642: const bool __testeof = traits_type::eq_int_type(__i, __ret); 9642: int_type __tmp; 9642: if (this->eback() < this->gptr()) 9642: { 9642: this->gbump(-1); 9642: __tmp = traits_type::to_int_type(*this->gptr()); 9642: } 9642: else if (this->seekoff(-1, ios_base::cur) != pos_type(off_type(-1))) 9642: { 9642: __tmp = this->underflow(); 9642: if (traits_type::eq_int_type(__tmp, __ret)) 9642: return __ret; 9642: } 9642: else 9642: { 9642: 9642: 9642: 9642: 9642: 9642: return __ret; 9642: } 9642: 9642: 9642: 9642: if (!__testeof && traits_type::eq_int_type(__i, __tmp)) 9642: __ret = __i; 9642: else if (__testeof) 9642: __ret = traits_type::not_eof(__i); 9642: else if (!__testpb) 9642: { 9642: _M_create_pback(); 9642: _M_reading = true; 9642: *this->gptr() = traits_type::to_char_type(__i); 9642: __ret = __i; 9642: } 9642: } 9642: return __ret; 9642: } 9642: 9642: template 9642: typename basic_filebuf<_CharT, _Traits>::int_type 9642: basic_filebuf<_CharT, _Traits>:: 9642: overflow(int_type __c) 9642: { 9642: int_type __ret = traits_type::eof(); 9642: const bool __testeof = traits_type::eq_int_type(__c, __ret); 9642: const bool __testout = (_M_mode & ios_base::out 9642: || _M_mode & ios_base::app); 9642: if (__testout) 9642: { 9642: if (_M_reading) 9642: { 9642: _M_destroy_pback(); 9642: const int __gptr_off = _M_get_ext_pos(_M_state_last); 9642: if (_M_seek(__gptr_off, ios_base::cur, _M_state_last) 9642: == pos_type(off_type(-1))) 9642: return __ret; 9642: } 9642: if (this->pbase() < this->pptr()) 9642: { 9642: 9642: if (!__testeof) 9642: { 9642: *this->pptr() = traits_type::to_char_type(__c); 9642: this->pbump(1); 9642: } 9642: 9642: 9642: 9642: if (_M_convert_to_external(this->pbase(), 9642: this->pptr() - this->pbase())) 9642: { 9642: _M_set_buffer(0); 9642: __ret = traits_type::not_eof(__c); 9642: } 9642: } 9642: else if (_M_buf_size > 1) 9642: { 9642: 9642: 9642: 9642: _M_set_buffer(0); 9642: _M_writing = true; 9642: if (!__testeof) 9642: { 9642: *this->pptr() = traits_type::to_char_type(__c); 9642: this->pbump(1); 9642: } 9642: __ret = traits_type::not_eof(__c); 9642: } 9642: else 9642: { 9642: 9642: char_type __conv = traits_type::to_char_type(__c); 9642: if (__testeof || _M_convert_to_external(&__conv, 1)) 9642: { 9642: _M_writing = true; 9642: __ret = traits_type::not_eof(__c); 9642: } 9642: } 9642: } 9642: return __ret; 9642: } 9642: 9642: template 9642: bool 9642: basic_filebuf<_CharT, _Traits>:: 9642: _M_convert_to_external(_CharT* __ibuf, streamsize __ilen) 9642: { 9642: 9642: streamsize __elen; 9642: streamsize __plen; 9642: if (__check_facet(_M_codecvt).always_noconv()) 9642: { 9642: __elen = _M_file.xsputn(reinterpret_cast(__ibuf), __ilen); 9642: __plen = __ilen; 9642: } 9642: else 9642: { 9642: 9642: 9642: streamsize __blen = __ilen * _M_codecvt->max_length(); 9642: char* __buf = static_cast(__builtin_alloca(__blen)); 9642: 9642: char* __bend; 9642: const char_type* __iend; 9642: codecvt_base::result __r; 9642: __r = _M_codecvt->out(_M_state_cur, __ibuf, __ibuf + __ilen, 9642: __iend, __buf, __buf + __blen, __bend); 9642: 9642: if (__r == codecvt_base::ok || __r == codecvt_base::partial) 9642: __blen = __bend - __buf; 9642: else if (__r == codecvt_base::noconv) 9642: { 9642: 9642: __buf = reinterpret_cast(__ibuf); 9642: __blen = __ilen; 9642: } 9642: else 9642: __throw_ios_failure(("basic_filebuf::_M_convert_to_external " "conversion error") 9642: ); 9642: 9642: __elen = _M_file.xsputn(__buf, __blen); 9642: __plen = __blen; 9642: 9642: 9642: if (__r == codecvt_base::partial && __elen == __plen) 9642: { 9642: const char_type* __iresume = __iend; 9642: streamsize __rlen = this->pptr() - __iend; 9642: __r = _M_codecvt->out(_M_state_cur, __iresume, 9642: __iresume + __rlen, __iend, __buf, 9642: __buf + __blen, __bend); 9642: if (__r != codecvt_base::error) 9642: { 9642: __rlen = __bend - __buf; 9642: __elen = _M_file.xsputn(__buf, __rlen); 9642: __plen = __rlen; 9642: } 9642: else 9642: __throw_ios_failure(("basic_filebuf::_M_convert_to_external " "conversion error") 9642: ); 9642: } 9642: } 9642: return __elen == __plen; 9642: } 9642: 9642: template 9642: streamsize 9642: basic_filebuf<_CharT, _Traits>:: 9642: xsgetn(_CharT* __s, streamsize __n) 9642: { 9642: 9642: streamsize __ret = 0; 9642: if (_M_pback_init) 9642: { 9642: if (__n > 0 && this->gptr() == this->eback()) 9642: { 9642: *__s++ = *this->gptr(); 9642: this->gbump(1); 9642: __ret = 1; 9642: --__n; 9642: } 9642: _M_destroy_pback(); 9642: } 9642: else if (_M_writing) 9642: { 9642: if (overflow() == traits_type::eof()) 9642: return __ret; 9642: _M_set_buffer(-1); 9642: _M_writing = false; 9642: } 9642: 9642: 9642: 9642: 9642: const bool __testin = _M_mode & ios_base::in; 9642: const streamsize __buflen = _M_buf_size > 1 ? _M_buf_size - 1 : 1; 9642: 9642: if (__n > __buflen && __check_facet(_M_codecvt).always_noconv() 9642: && __testin) 9642: { 9642: 9642: const streamsize __avail = this->egptr() - this->gptr(); 9642: if (__avail != 0) 9642: { 9642: traits_type::copy(__s, this->gptr(), __avail); 9642: __s += __avail; 9642: this->setg(this->eback(), this->gptr() + __avail, this->egptr()); 9642: __ret += __avail; 9642: __n -= __avail; 9642: } 9642: 9642: 9642: 9642: streamsize __len; 9642: for (;;) 9642: { 9642: __len = _M_file.xsgetn(reinterpret_cast(__s), __n); 9642: if (__len == -1) 9642: __throw_ios_failure(("basic_filebuf::xsgetn " "error reading the file") 9642: , (*__errno_location ())); 9642: if (__len == 0) 9642: break; 9642: 9642: __n -= __len; 9642: __ret += __len; 9642: if (__n == 0) 9642: break; 9642: 9642: __s += __len; 9642: } 9642: 9642: if (__n == 0) 9642: { 9642: 9642: _M_reading = true; 9642: } 9642: else if (__len == 0) 9642: { 9642: 9642: 9642: 9642: _M_set_buffer(-1); 9642: _M_reading = false; 9642: } 9642: } 9642: else 9642: __ret += __streambuf_type::xsgetn(__s, __n); 9642: 9642: return __ret; 9642: } 9642: 9642: template 9642: streamsize 9642: basic_filebuf<_CharT, _Traits>:: 9642: xsputn(const _CharT* __s, streamsize __n) 9642: { 9642: streamsize __ret = 0; 9642: 9642: 9642: 9642: const bool __testout = (_M_mode & ios_base::out 9642: || _M_mode & ios_base::app); 9642: if (__check_facet(_M_codecvt).always_noconv() 9642: && __testout && !_M_reading) 9642: { 9642: streamsize __bufavail = this->epptr() - this->pptr(); 9642: 9642: 9642: if (!_M_writing && _M_buf_size > 1) 9642: __bufavail = _M_buf_size - 1; 9642: 9642: if (__n >= __bufavail) 9642: { 9642: const streamsize __buffill = this->pptr() - this->pbase(); 9642: const char* __buf = reinterpret_cast(this->pbase()); 9642: __ret = _M_file.xsputn_2(__buf, __buffill, 9642: reinterpret_cast(__s), 9642: __n); 9642: if (__ret == __buffill + __n) 9642: { 9642: _M_set_buffer(0); 9642: _M_writing = true; 9642: } 9642: if (__ret > __buffill) 9642: __ret -= __buffill; 9642: else 9642: __ret = 0; 9642: } 9642: else 9642: __ret = __streambuf_type::xsputn(__s, __n); 9642: } 9642: else 9642: __ret = __streambuf_type::xsputn(__s, __n); 9642: return __ret; 9642: } 9642: 9642: template 9642: typename basic_filebuf<_CharT, _Traits>::__streambuf_type* 9642: basic_filebuf<_CharT, _Traits>:: 9642: setbuf(char_type* __s, streamsize __n) 9642: { 9642: if (!this->is_open()) 9642: { 9642: if (__s == 0 && __n == 0) 9642: _M_buf_size = 1; 9642: else if (__s && __n > 0) 9642: { 9642: # 816 "/usr/include/c++/13/bits/fstream.tcc" 3 9642: _M_buf = __s; 9642: _M_buf_size = __n; 9642: } 9642: } 9642: return this; 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: typename basic_filebuf<_CharT, _Traits>::pos_type 9642: basic_filebuf<_CharT, _Traits>:: 9642: seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode) 9642: { 9642: int __width = 0; 9642: if (_M_codecvt) 9642: __width = _M_codecvt->encoding(); 9642: if (__width < 0) 9642: __width = 0; 9642: 9642: pos_type __ret = pos_type(off_type(-1)); 9642: const bool __testfail = __off != 0 && __width <= 0; 9642: if (this->is_open() && !__testfail) 9642: { 9642: 9642: 9642: 9642: 9642: bool __no_movement = __way == ios_base::cur && __off == 0 9642: && (!_M_writing || _M_codecvt->always_noconv()); 9642: 9642: 9642: if (!__no_movement) 9642: _M_destroy_pback(); 9642: 9642: 9642: 9642: 9642: 9642: 9642: __state_type __state = _M_state_beg; 9642: off_type __computed_off = __off * __width; 9642: if (_M_reading && __way == ios_base::cur) 9642: { 9642: __state = _M_state_last; 9642: __computed_off += _M_get_ext_pos(__state); 9642: } 9642: if (!__no_movement) 9642: __ret = _M_seek(__computed_off, __way, __state); 9642: else 9642: { 9642: if (_M_writing) 9642: __computed_off = this->pptr() - this->pbase(); 9642: 9642: off_type __file_off = _M_file.seekoff(0, ios_base::cur); 9642: if (__file_off != off_type(-1)) 9642: { 9642: __ret = __file_off + __computed_off; 9642: __ret.state(__state); 9642: } 9642: } 9642: } 9642: return __ret; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: typename basic_filebuf<_CharT, _Traits>::pos_type 9642: basic_filebuf<_CharT, _Traits>:: 9642: seekpos(pos_type __pos, ios_base::openmode) 9642: { 9642: pos_type __ret = pos_type(off_type(-1)); 9642: if (this->is_open()) 9642: { 9642: 9642: _M_destroy_pback(); 9642: __ret = _M_seek(off_type(__pos), ios_base::beg, __pos.state()); 9642: } 9642: return __ret; 9642: } 9642: 9642: template 9642: typename basic_filebuf<_CharT, _Traits>::pos_type 9642: basic_filebuf<_CharT, _Traits>:: 9642: _M_seek(off_type __off, ios_base::seekdir __way, __state_type __state) 9642: { 9642: pos_type __ret = pos_type(off_type(-1)); 9642: if (_M_terminate_output()) 9642: { 9642: off_type __file_off = _M_file.seekoff(__off, __way); 9642: if (__file_off != off_type(-1)) 9642: { 9642: _M_reading = false; 9642: _M_writing = false; 9642: _M_ext_next = _M_ext_end = _M_ext_buf; 9642: _M_set_buffer(-1); 9642: _M_state_cur = __state; 9642: __ret = __file_off; 9642: __ret.state(_M_state_cur); 9642: } 9642: } 9642: return __ret; 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: int basic_filebuf<_CharT, _Traits>:: 9642: _M_get_ext_pos(__state_type& __state) 9642: { 9642: if (_M_codecvt->always_noconv()) 9642: return this->gptr() - this->egptr(); 9642: else 9642: { 9642: 9642: 9642: 9642: const int __gptr_off = 9642: _M_codecvt->length(__state, _M_ext_buf, _M_ext_next, 9642: this->gptr() - this->eback()); 9642: return _M_ext_buf + __gptr_off - _M_ext_end; 9642: } 9642: } 9642: 9642: template 9642: bool 9642: basic_filebuf<_CharT, _Traits>:: 9642: _M_terminate_output() 9642: { 9642: 9642: bool __testvalid = true; 9642: if (this->pbase() < this->pptr()) 9642: { 9642: const int_type __tmp = this->overflow(); 9642: if (traits_type::eq_int_type(__tmp, traits_type::eof())) 9642: __testvalid = false; 9642: } 9642: 9642: 9642: if (_M_writing && !__check_facet(_M_codecvt).always_noconv() 9642: && __testvalid) 9642: { 9642: 9642: 9642: 9642: const size_t __blen = 128; 9642: char __buf[__blen]; 9642: codecvt_base::result __r; 9642: streamsize __ilen = 0; 9642: 9642: do 9642: { 9642: char* __next; 9642: __r = _M_codecvt->unshift(_M_state_cur, __buf, 9642: __buf + __blen, __next); 9642: if (__r == codecvt_base::error) 9642: __testvalid = false; 9642: else if (__r == codecvt_base::ok || 9642: __r == codecvt_base::partial) 9642: { 9642: __ilen = __next - __buf; 9642: if (__ilen > 0) 9642: { 9642: const streamsize __elen = _M_file.xsputn(__buf, __ilen); 9642: if (__elen != __ilen) 9642: __testvalid = false; 9642: } 9642: } 9642: } 9642: while (__r == codecvt_base::partial && __ilen > 0 && __testvalid); 9642: 9642: if (__testvalid) 9642: { 9642: 9642: 9642: 9642: 9642: const int_type __tmp = this->overflow(); 9642: if (traits_type::eq_int_type(__tmp, traits_type::eof())) 9642: __testvalid = false; 9642: } 9642: } 9642: return __testvalid; 9642: } 9642: 9642: template 9642: int 9642: basic_filebuf<_CharT, _Traits>:: 9642: sync() 9642: { 9642: 9642: 9642: int __ret = 0; 9642: if (this->pbase() < this->pptr()) 9642: { 9642: const int_type __tmp = this->overflow(); 9642: if (traits_type::eq_int_type(__tmp, traits_type::eof())) 9642: __ret = -1; 9642: } 9642: return __ret; 9642: } 9642: 9642: template 9642: void 9642: basic_filebuf<_CharT, _Traits>:: 9642: imbue(const locale& __loc) 9642: { 9642: bool __testvalid = true; 9642: 9642: const __codecvt_type* const _M_codecvt_tmp 9642: = __try_use_facet<__codecvt_type>(__loc); 9642: 9642: if (this->is_open()) 9642: { 9642: 9642: if ((_M_reading || _M_writing) 9642: && __check_facet(_M_codecvt).encoding() == -1) 9642: __testvalid = false; 9642: else 9642: { 9642: if (_M_reading) 9642: { 9642: if (__check_facet(_M_codecvt).always_noconv()) 9642: { 9642: if (_M_codecvt_tmp 9642: && !__check_facet(_M_codecvt_tmp).always_noconv()) 9642: __testvalid = this->seekoff(0, ios_base::cur, _M_mode) 9642: != pos_type(off_type(-1)); 9642: } 9642: else 9642: { 9642: 9642: _M_ext_next = _M_ext_buf 9642: + _M_codecvt->length(_M_state_last, _M_ext_buf, 9642: _M_ext_next, 9642: this->gptr() - this->eback()); 9642: const streamsize __remainder = _M_ext_end - _M_ext_next; 9642: if (__remainder) 9642: __builtin_memmove(_M_ext_buf, _M_ext_next, __remainder); 9642: 9642: _M_ext_next = _M_ext_buf; 9642: _M_ext_end = _M_ext_buf + __remainder; 9642: _M_set_buffer(-1); 9642: _M_state_last = _M_state_cur = _M_state_beg; 9642: } 9642: } 9642: else if (_M_writing && (__testvalid = _M_terminate_output())) 9642: _M_set_buffer(-1); 9642: } 9642: } 9642: 9642: if (__testvalid) 9642: _M_codecvt = _M_codecvt_tmp; 9642: else 9642: _M_codecvt = 0; 9642: } 9642: 9642: 9642: 9642: 9642: extern template class basic_filebuf; 9642: extern template class basic_ifstream; 9642: extern template class basic_ofstream; 9642: extern template class basic_fstream; 9642: 9642: 9642: extern template class basic_filebuf; 9642: extern template class basic_ifstream; 9642: extern template class basic_ofstream; 9642: extern template class basic_fstream; 9642: 9642: 9642: 9642: 9642: } 9642: # 1301 "/usr/include/c++/13/fstream" 2 3 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/io_tracer.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/monitoring/instrumented_mutex.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 15 "/build/reproducible-path/rocksdb-9.3.1/monitoring/instrumented_mutex.h" 9642: 9642: # 15 "/build/reproducible-path/rocksdb-9.3.1/monitoring/instrumented_mutex.h" 9642: namespace rocksdb { 9642: class InstrumentedCondVar; 9642: 9642: 9642: 9642: class InstrumentedMutex { 9642: public: 9642: explicit InstrumentedMutex(bool adaptive = false) 9642: : mutex_(adaptive), stats_(nullptr), clock_(nullptr), stats_code_(0) {} 9642: 9642: explicit InstrumentedMutex(SystemClock* clock, bool adaptive = false) 9642: : mutex_(adaptive), stats_(nullptr), clock_(clock), stats_code_(0) {} 9642: 9642: InstrumentedMutex(Statistics* stats, SystemClock* clock, int stats_code, 9642: bool adaptive = false) 9642: : mutex_(adaptive), 9642: stats_(stats), 9642: clock_(clock), 9642: stats_code_(stats_code) {} 9642: # 45 "/build/reproducible-path/rocksdb-9.3.1/monitoring/instrumented_mutex.h" 9642: void Lock(); 9642: 9642: void Unlock() { mutex_.Unlock(); } 9642: 9642: void AssertHeld() const { mutex_.AssertHeld(); } 9642: 9642: private: 9642: void LockInternal(); 9642: friend class InstrumentedCondVar; 9642: port::Mutex mutex_; 9642: Statistics* stats_; 9642: SystemClock* clock_; 9642: int stats_code_; 9642: 9642: 9642: 9642: }; 9642: 9642: class alignas(64U) CacheAlignedInstrumentedMutex 9642: : public InstrumentedMutex { 9642: using InstrumentedMutex::InstrumentedMutex; 9642: }; 9642: static_assert(alignof(CacheAlignedInstrumentedMutex) != 64U || 9642: sizeof(CacheAlignedInstrumentedMutex) % 64U == 0); 9642: 9642: 9642: class InstrumentedMutexLock { 9642: public: 9642: explicit InstrumentedMutexLock(InstrumentedMutex* mutex) : mutex_(mutex) { 9642: mutex_->Lock(); 9642: } 9642: 9642: ~InstrumentedMutexLock() { mutex_->Unlock(); } 9642: 9642: private: 9642: InstrumentedMutex* const mutex_; 9642: InstrumentedMutexLock(const InstrumentedMutexLock&) = delete; 9642: void operator=(const InstrumentedMutexLock&) = delete; 9642: }; 9642: 9642: 9642: 9642: class InstrumentedMutexUnlock { 9642: public: 9642: explicit InstrumentedMutexUnlock(InstrumentedMutex* mutex) : mutex_(mutex) { 9642: mutex_->Unlock(); 9642: } 9642: 9642: ~InstrumentedMutexUnlock() { mutex_->Lock(); } 9642: 9642: private: 9642: InstrumentedMutex* const mutex_; 9642: InstrumentedMutexUnlock(const InstrumentedMutexUnlock&) = delete; 9642: void operator=(const InstrumentedMutexUnlock&) = delete; 9642: }; 9642: 9642: class InstrumentedCondVar { 9642: public: 9642: explicit InstrumentedCondVar(InstrumentedMutex* instrumented_mutex) 9642: : cond_(&(instrumented_mutex->mutex_)), 9642: stats_(instrumented_mutex->stats_), 9642: clock_(instrumented_mutex->clock_), 9642: stats_code_(instrumented_mutex->stats_code_) {} 9642: 9642: void Wait(); 9642: 9642: bool TimedWait(uint64_t abs_time_us); 9642: 9642: void Signal() { cond_.Signal(); } 9642: 9642: void SignalAll() { cond_.SignalAll(); } 9642: 9642: private: 9642: void WaitInternal(); 9642: bool TimedWaitInternal(uint64_t abs_time_us); 9642: port::CondVar cond_; 9642: Statistics* stats_; 9642: SystemClock* clock_; 9642: int stats_code_; 9642: }; 9642: 9642: } 9642: # 12 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/io_tracer.h" 2 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/trace_record.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 16 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/trace_record.h" 9642: namespace rocksdb { 9642: 9642: class ColumnFamilyHandle; 9642: class DB; 9642: 9642: 9642: enum TraceType : char { 9642: kTraceNone = 0, 9642: kTraceBegin = 1, 9642: kTraceEnd = 2, 9642: 9642: kTraceWrite = 3, 9642: kTraceGet = 4, 9642: kTraceIteratorSeek = 5, 9642: kTraceIteratorSeekForPrev = 6, 9642: 9642: kBlockTraceIndexBlock = 7, 9642: 9642: kBlockTraceFilterBlock = 8, 9642: kBlockTraceDataBlock = 9, 9642: kBlockTraceUncompressionDictBlock = 10, 9642: kBlockTraceRangeDeletionBlock = 11, 9642: 9642: kIOTracer = 12, 9642: 9642: kTraceMultiGet = 13, 9642: 9642: kTraceMax, 9642: }; 9642: 9642: class GetQueryTraceRecord; 9642: class IteratorSeekQueryTraceRecord; 9642: class MultiGetQueryTraceRecord; 9642: class TraceRecordResult; 9642: class WriteQueryTraceRecord; 9642: 9642: 9642: class TraceRecord { 9642: public: 9642: explicit TraceRecord(uint64_t timestamp); 9642: 9642: virtual ~TraceRecord() = default; 9642: 9642: 9642: virtual TraceType GetTraceType() const = 0; 9642: 9642: 9642: virtual uint64_t GetTimestamp() const; 9642: 9642: class Handler { 9642: public: 9642: virtual ~Handler() = default; 9642: 9642: virtual Status Handle(const WriteQueryTraceRecord& record, 9642: std::unique_ptr* result) = 0; 9642: 9642: virtual Status Handle(const GetQueryTraceRecord& record, 9642: std::unique_ptr* result) = 0; 9642: 9642: virtual Status Handle(const IteratorSeekQueryTraceRecord& record, 9642: std::unique_ptr* result) = 0; 9642: 9642: virtual Status Handle(const MultiGetQueryTraceRecord& record, 9642: std::unique_ptr* result) = 0; 9642: }; 9642: 9642: 9642: virtual Status Accept(Handler* handler, 9642: std::unique_ptr* result) = 0; 9642: 9642: 9642: static Handler* NewExecutionHandler( 9642: DB* db, const std::vector& handles); 9642: 9642: private: 9642: uint64_t timestamp_; 9642: }; 9642: 9642: 9642: class QueryTraceRecord : public TraceRecord { 9642: public: 9642: explicit QueryTraceRecord(uint64_t timestamp); 9642: }; 9642: 9642: 9642: class WriteQueryTraceRecord : public QueryTraceRecord { 9642: public: 9642: WriteQueryTraceRecord(PinnableSlice&& write_batch_rep, uint64_t timestamp); 9642: 9642: WriteQueryTraceRecord(const std::string& write_batch_rep, uint64_t timestamp); 9642: 9642: ~WriteQueryTraceRecord() override; 9642: 9642: TraceType GetTraceType() const override { return kTraceWrite; } 9642: 9642: 9642: virtual Slice GetWriteBatchRep() const; 9642: 9642: Status Accept(Handler* handler, 9642: std::unique_ptr* result) override; 9642: 9642: private: 9642: PinnableSlice rep_; 9642: }; 9642: 9642: 9642: class GetQueryTraceRecord : public QueryTraceRecord { 9642: public: 9642: GetQueryTraceRecord(uint32_t column_family_id, PinnableSlice&& key, 9642: uint64_t timestamp); 9642: 9642: GetQueryTraceRecord(uint32_t column_family_id, const std::string& key, 9642: uint64_t timestamp); 9642: 9642: ~GetQueryTraceRecord() override; 9642: 9642: TraceType GetTraceType() const override { return kTraceGet; } 9642: 9642: 9642: virtual uint32_t GetColumnFamilyID() const; 9642: 9642: 9642: virtual Slice GetKey() const; 9642: 9642: Status Accept(Handler* handler, 9642: std::unique_ptr* result) override; 9642: 9642: private: 9642: uint32_t cf_id_; 9642: PinnableSlice key_; 9642: }; 9642: 9642: 9642: class IteratorQueryTraceRecord : public QueryTraceRecord { 9642: public: 9642: explicit IteratorQueryTraceRecord(uint64_t timestamp); 9642: 9642: IteratorQueryTraceRecord(PinnableSlice&& lower_bound, 9642: PinnableSlice&& upper_bound, uint64_t timestamp); 9642: 9642: IteratorQueryTraceRecord(const std::string& lower_bound, 9642: const std::string& upper_bound, uint64_t timestamp); 9642: 9642: ~IteratorQueryTraceRecord() override; 9642: 9642: 9642: 9642: virtual Slice GetLowerBound() const; 9642: virtual Slice GetUpperBound() const; 9642: 9642: private: 9642: PinnableSlice lower_; 9642: PinnableSlice upper_; 9642: }; 9642: 9642: 9642: class IteratorSeekQueryTraceRecord : public IteratorQueryTraceRecord { 9642: public: 9642: 9642: enum SeekType { 9642: kSeek = kTraceIteratorSeek, 9642: kSeekForPrev = kTraceIteratorSeekForPrev 9642: }; 9642: 9642: IteratorSeekQueryTraceRecord(SeekType seekType, uint32_t column_family_id, 9642: PinnableSlice&& key, uint64_t timestamp); 9642: 9642: IteratorSeekQueryTraceRecord(SeekType seekType, uint32_t column_family_id, 9642: const std::string& key, uint64_t timestamp); 9642: 9642: IteratorSeekQueryTraceRecord(SeekType seekType, uint32_t column_family_id, 9642: PinnableSlice&& key, PinnableSlice&& lower_bound, 9642: PinnableSlice&& upper_bound, uint64_t timestamp); 9642: 9642: IteratorSeekQueryTraceRecord(SeekType seekType, uint32_t column_family_id, 9642: const std::string& key, 9642: const std::string& lower_bound, 9642: const std::string& upper_bound, 9642: uint64_t timestamp); 9642: 9642: ~IteratorSeekQueryTraceRecord() override; 9642: 9642: 9642: TraceType GetTraceType() const override; 9642: 9642: 9642: virtual SeekType GetSeekType() const; 9642: 9642: 9642: virtual uint32_t GetColumnFamilyID() const; 9642: 9642: 9642: virtual Slice GetKey() const; 9642: 9642: Status Accept(Handler* handler, 9642: std::unique_ptr* result) override; 9642: 9642: private: 9642: SeekType type_; 9642: uint32_t cf_id_; 9642: PinnableSlice key_; 9642: }; 9642: 9642: 9642: class MultiGetQueryTraceRecord : public QueryTraceRecord { 9642: public: 9642: MultiGetQueryTraceRecord(std::vector column_family_ids, 9642: std::vector&& keys, 9642: uint64_t timestamp); 9642: 9642: MultiGetQueryTraceRecord(std::vector column_family_ids, 9642: const std::vector& keys, 9642: uint64_t timestamp); 9642: 9642: ~MultiGetQueryTraceRecord() override; 9642: 9642: TraceType GetTraceType() const override { return kTraceMultiGet; } 9642: 9642: 9642: virtual std::vector GetColumnFamilyIDs() const; 9642: 9642: 9642: virtual std::vector GetKeys() const; 9642: 9642: Status Accept(Handler* handler, 9642: std::unique_ptr* result) override; 9642: 9642: private: 9642: std::vector cf_ids_; 9642: std::vector keys_; 9642: }; 9642: 9642: } 9642: # 16 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/io_tracer.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/trace_replay.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 18 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/trace_replay.h" 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/utilities/replayer.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class TraceRecord; 9642: class TraceRecordResult; 9642: 9642: struct ReplayOptions { 9642: 9642: 9642: uint32_t num_threads; 9642: 9642: 9642: 9642: 9642: 9642: 9642: double fast_forward; 9642: 9642: ReplayOptions() : num_threads(1), fast_forward(1.0) {} 9642: 9642: ReplayOptions(uint32_t num_of_threads, double fast_forward_ratio) 9642: : num_threads(num_of_threads), fast_forward(fast_forward_ratio) {} 9642: }; 9642: 9642: 9642: 9642: 9642: class Replayer { 9642: public: 9642: virtual ~Replayer() = default; 9642: 9642: 9642: 9642: virtual Status Prepare() = 0; 9642: 9642: 9642: virtual uint64_t GetHeaderTimestamp() const = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status Next(std::unique_ptr* record) = 0; 9642: # 71 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/utilities/replayer.h" 9642: virtual Status Execute(const std::unique_ptr& record, 9642: std::unique_ptr* result) = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status Replay( 9642: const ReplayOptions& options, 9642: const std::function&&)>& 9642: result_callback) = 0; 9642: }; 9642: 9642: } 9642: # 19 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/trace_replay.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: class ColumnFamilyHandle; 9642: class ColumnFamilyData; 9642: class DB; 9642: class DBImpl; 9642: class Env; 9642: class Slice; 9642: class SystemClock; 9642: class TraceReader; 9642: class TraceWriter; 9642: class WriteBatch; 9642: 9642: struct ReadOptions; 9642: struct TraceOptions; 9642: struct WriteOptions; 9642: 9642: extern const std::string kTraceMagic; 9642: const unsigned int kTraceTimestampSize = 8; 9642: const unsigned int kTraceTypeSize = 1; 9642: const unsigned int kTracePayloadLengthSize = 4; 9642: const unsigned int kTraceMetadataSize = 9642: kTraceTimestampSize + kTraceTypeSize + kTracePayloadLengthSize; 9642: 9642: static const int kTraceFileMajorVersion = 0; 9642: static const int kTraceFileMinorVersion = 2; 9642: 9642: 9642: struct Trace { 9642: uint64_t ts; 9642: TraceType type; 9642: 9642: 9642: 9642: 9642: uint64_t payload_map = 0; 9642: 9642: 9642: std::string payload; 9642: 9642: void reset() { 9642: ts = 0; 9642: type = kTraceMax; 9642: payload_map = 0; 9642: payload.clear(); 9642: } 9642: }; 9642: 9642: enum TracePayloadType : char { 9642: 9642: 9642: kEmptyPayload = 0, 9642: kWriteBatchData = 1, 9642: kGetCFID = 2, 9642: kGetKey = 3, 9642: kIterCFID = 4, 9642: kIterKey = 5, 9642: kIterLowerBound = 6, 9642: kIterUpperBound = 7, 9642: kMultiGetSize = 8, 9642: kMultiGetCFIDs = 9, 9642: kMultiGetKeys = 10, 9642: }; 9642: 9642: class TracerHelper { 9642: public: 9642: 9642: static Status ParseVersionStr(std::string& v_string, int* v_num); 9642: 9642: 9642: static Status ParseTraceHeader(const Trace& header, int* trace_version, 9642: int* db_version); 9642: 9642: 9642: static void EncodeTrace(const Trace& trace, std::string* encoded_trace); 9642: 9642: 9642: static Status DecodeTrace(const std::string& encoded_trace, Trace* trace); 9642: 9642: 9642: static Status DecodeHeader(const std::string& encoded_trace, Trace* header); 9642: 9642: 9642: static bool SetPayloadMap(uint64_t& payload_map, 9642: const TracePayloadType payload_type); 9642: 9642: 9642: 9642: 9642: 9642: static Status DecodeTraceRecord(Trace* trace, int trace_file_version, 9642: std::unique_ptr* record); 9642: }; 9642: 9642: 9642: 9642: 9642: class Tracer { 9642: public: 9642: Tracer(SystemClock* clock, const TraceOptions& trace_options, 9642: std::unique_ptr&& trace_writer); 9642: ~Tracer(); 9642: 9642: 9642: Status Write(WriteBatch* write_batch); 9642: 9642: 9642: Status Get(ColumnFamilyHandle* cfname, const Slice& key); 9642: 9642: 9642: Status IteratorSeek(const uint32_t& cf_id, const Slice& key, 9642: const Slice& lower_bound, const Slice upper_bound); 9642: Status IteratorSeekForPrev(const uint32_t& cf_id, const Slice& key, 9642: const Slice& lower_bound, const Slice upper_bound); 9642: 9642: 9642: 9642: Status MultiGet(const size_t num_keys, ColumnFamilyHandle** column_families, 9642: const Slice* keys); 9642: 9642: Status MultiGet(const size_t num_keys, ColumnFamilyHandle* column_family, 9642: const Slice* keys); 9642: 9642: Status MultiGet(const std::vector& column_family, 9642: const std::vector& keys); 9642: 9642: 9642: 9642: bool IsTraceFileOverMax(); 9642: 9642: 9642: 9642: bool IsWriteOrderPreserved() { return trace_options_.preserve_write_order; } 9642: 9642: 9642: Status Close(); 9642: 9642: private: 9642: 9642: 9642: 9642: Status WriteHeader(); 9642: 9642: 9642: Status WriteFooter(); 9642: 9642: 9642: 9642: Status WriteTrace(const Trace& trace); 9642: 9642: 9642: 9642: bool ShouldSkipTrace(const TraceType& type); 9642: 9642: SystemClock* clock_; 9642: TraceOptions trace_options_; 9642: std::unique_ptr trace_writer_; 9642: uint64_t trace_request_count_; 9642: Status trace_write_status_; 9642: }; 9642: 9642: } 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/io_tracer.h" 2 9642: 9642: namespace rocksdb { 9642: class SystemClock; 9642: class TraceReader; 9642: class TraceWriter; 9642: # 32 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/io_tracer.h" 9642: enum IOTraceOp : char { 9642: 9642: 9642: kIOFileSize = 0, 9642: kIOLen = 1, 9642: kIOOffset = 2, 9642: }; 9642: 9642: struct IOTraceRecord { 9642: 9642: uint64_t access_timestamp = 0; 9642: TraceType trace_type = TraceType::kTraceMax; 9642: 9642: 9642: 9642: uint64_t io_op_data = 0; 9642: std::string file_operation; 9642: uint64_t latency = 0; 9642: std::string io_status; 9642: 9642: std::string file_name; 9642: 9642: 9642: uint64_t len = 0; 9642: uint64_t offset = 0; 9642: uint64_t file_size = 0; 9642: 9642: 9642: uint64_t trace_data = 0; 9642: std::string request_id; 9642: 9642: IOTraceRecord() {} 9642: 9642: IOTraceRecord(const uint64_t& _access_timestamp, const TraceType& _trace_type, 9642: const uint64_t& _io_op_data, const std::string& _file_operation, 9642: const uint64_t& _latency, const std::string& _io_status, 9642: const std::string& _file_name, const uint64_t& _file_size = 0) 9642: : access_timestamp(_access_timestamp), 9642: trace_type(_trace_type), 9642: io_op_data(_io_op_data), 9642: file_operation(_file_operation), 9642: latency(_latency), 9642: io_status(_io_status), 9642: file_name(_file_name), 9642: file_size(_file_size) {} 9642: 9642: IOTraceRecord(const uint64_t& _access_timestamp, const TraceType& _trace_type, 9642: const uint64_t& _io_op_data, const std::string& _file_operation, 9642: const uint64_t& _latency, const std::string& _io_status, 9642: const std::string& _file_name, const uint64_t& _len, 9642: const uint64_t& _offset) 9642: : access_timestamp(_access_timestamp), 9642: trace_type(_trace_type), 9642: io_op_data(_io_op_data), 9642: file_operation(_file_operation), 9642: latency(_latency), 9642: io_status(_io_status), 9642: file_name(_file_name), 9642: len(_len), 9642: offset(_offset) {} 9642: }; 9642: 9642: struct IOTraceHeader { 9642: uint64_t start_time; 9642: uint32_t rocksdb_major_version; 9642: uint32_t rocksdb_minor_version; 9642: }; 9642: 9642: 9642: 9642: class IOTraceWriter { 9642: public: 9642: IOTraceWriter(SystemClock* clock, const TraceOptions& trace_options, 9642: std::unique_ptr&& trace_writer); 9642: ~IOTraceWriter() = default; 9642: 9642: IOTraceWriter(const IOTraceWriter&) = delete; 9642: IOTraceWriter& operator=(const IOTraceWriter&) = delete; 9642: IOTraceWriter(IOTraceWriter&&) = delete; 9642: IOTraceWriter& operator=(IOTraceWriter&&) = delete; 9642: 9642: Status WriteIOOp(const IOTraceRecord& record, IODebugContext* dbg); 9642: 9642: 9642: 9642: Status WriteHeader(); 9642: 9642: private: 9642: SystemClock* clock_; 9642: TraceOptions trace_options_; 9642: std::unique_ptr trace_writer_; 9642: }; 9642: 9642: 9642: class IOTraceReader { 9642: public: 9642: explicit IOTraceReader(std::unique_ptr&& reader); 9642: ~IOTraceReader() = default; 9642: 9642: IOTraceReader(const IOTraceReader&) = delete; 9642: IOTraceReader& operator=(const IOTraceReader&) = delete; 9642: IOTraceReader(IOTraceReader&&) = delete; 9642: IOTraceReader& operator=(IOTraceReader&&) = delete; 9642: 9642: Status ReadHeader(IOTraceHeader* header); 9642: 9642: Status ReadIOOp(IOTraceRecord* record); 9642: 9642: private: 9642: std::unique_ptr trace_reader_; 9642: }; 9642: 9642: 9642: 9642: class IOTracer { 9642: public: 9642: IOTracer(); 9642: ~IOTracer(); 9642: 9642: IOTracer(const IOTracer&) = delete; 9642: IOTracer& operator=(const IOTracer&) = delete; 9642: IOTracer(IOTracer&&) = delete; 9642: IOTracer& operator=(IOTracer&&) = delete; 9642: # 163 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/io_tracer.h" 9642: Status 9642: StartIOTrace(SystemClock* clock, const TraceOptions& trace_options, 9642: std::unique_ptr&& trace_writer); 9642: 9642: 9642: void EndIOTrace(); 9642: 9642: bool is_tracing_enabled() const { return tracing_enabled; } 9642: 9642: void WriteIOOp(const IOTraceRecord& record, IODebugContext* dbg); 9642: 9642: private: 9642: TraceOptions trace_options_; 9642: 9642: InstrumentedMutex trace_writer_mutex_; 9642: std::atomic writer_; 9642: 9642: 9642: 9642: bool tracing_enabled; 9642: }; 9642: 9642: } 9642: # 11 "/build/reproducible-path/rocksdb-9.3.1/env/file_system_tracer.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: class FileSystemTracingWrapper : public FileSystemWrapper { 9642: public: 9642: FileSystemTracingWrapper(const std::shared_ptr& t, 9642: const std::shared_ptr& io_tracer) 9642: : FileSystemWrapper(t), 9642: io_tracer_(io_tracer), 9642: clock_(SystemClock::Default().get()) {} 9642: 9642: ~FileSystemTracingWrapper() override {} 9642: 9642: static const char* kClassName() { return "FileSystemTracing"; } 9642: const char* Name() const override { return kClassName(); } 9642: 9642: IOStatus NewSequentialFile(const std::string& fname, 9642: const FileOptions& file_opts, 9642: std::unique_ptr* result, 9642: IODebugContext* dbg) override; 9642: 9642: IOStatus NewRandomAccessFile(const std::string& fname, 9642: const FileOptions& file_opts, 9642: std::unique_ptr* result, 9642: IODebugContext* dbg) override; 9642: 9642: IOStatus NewWritableFile(const std::string& fname, 9642: const FileOptions& file_opts, 9642: std::unique_ptr* result, 9642: IODebugContext* dbg) override; 9642: 9642: IOStatus ReopenWritableFile(const std::string& fname, 9642: const FileOptions& file_opts, 9642: std::unique_ptr* result, 9642: IODebugContext* dbg) override; 9642: 9642: IOStatus ReuseWritableFile(const std::string& fname, 9642: const std::string& old_fname, 9642: const FileOptions& file_opts, 9642: std::unique_ptr* result, 9642: IODebugContext* dbg) override; 9642: 9642: IOStatus NewRandomRWFile(const std::string& fname, const FileOptions& options, 9642: std::unique_ptr* result, 9642: IODebugContext* dbg) override; 9642: 9642: IOStatus NewDirectory(const std::string& name, const IOOptions& io_opts, 9642: std::unique_ptr* result, 9642: IODebugContext* dbg) override; 9642: 9642: IOStatus GetChildren(const std::string& dir, const IOOptions& io_opts, 9642: std::vector* r, 9642: IODebugContext* dbg) override; 9642: 9642: IOStatus DeleteFile(const std::string& fname, const IOOptions& options, 9642: IODebugContext* dbg) override; 9642: 9642: IOStatus CreateDir(const std::string& dirname, const IOOptions& options, 9642: IODebugContext* dbg) override; 9642: 9642: IOStatus CreateDirIfMissing(const std::string& dirname, 9642: const IOOptions& options, 9642: IODebugContext* dbg) override; 9642: 9642: IOStatus DeleteDir(const std::string& dirname, const IOOptions& options, 9642: IODebugContext* dbg) override; 9642: 9642: IOStatus GetFileSize(const std::string& fname, const IOOptions& options, 9642: uint64_t* file_size, IODebugContext* dbg) override; 9642: 9642: IOStatus Truncate(const std::string& fname, size_t size, 9642: const IOOptions& options, IODebugContext* dbg) override; 9642: 9642: private: 9642: std::shared_ptr io_tracer_; 9642: SystemClock* clock_; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: class FileSystemPtr { 9642: public: 9642: FileSystemPtr(std::shared_ptr fs, 9642: const std::shared_ptr& io_tracer) 9642: : fs_(fs), io_tracer_(io_tracer) { 9642: fs_tracer_ = std::make_shared(fs_, io_tracer_); 9642: } 9642: 9642: std::shared_ptr operator->() const { 9642: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 9642: return fs_tracer_; 9642: } else { 9642: return fs_; 9642: } 9642: } 9642: 9642: 9642: FileSystem* get() const { 9642: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 9642: return fs_tracer_.get(); 9642: } else { 9642: return fs_.get(); 9642: } 9642: } 9642: 9642: private: 9642: std::shared_ptr fs_; 9642: std::shared_ptr io_tracer_; 9642: std::shared_ptr fs_tracer_; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: class FSSequentialFileTracingWrapper : public FSSequentialFileOwnerWrapper { 9642: public: 9642: FSSequentialFileTracingWrapper(std::unique_ptr&& t, 9642: std::shared_ptr io_tracer, 9642: const std::string& file_name) 9642: : FSSequentialFileOwnerWrapper(std::move(t)), 9642: io_tracer_(io_tracer), 9642: clock_(SystemClock::Default().get()), 9642: file_name_(file_name) {} 9642: 9642: ~FSSequentialFileTracingWrapper() override {} 9642: 9642: IOStatus Read(size_t n, const IOOptions& options, Slice* result, 9642: char* scratch, IODebugContext* dbg) override; 9642: 9642: IOStatus InvalidateCache(size_t offset, size_t length) override; 9642: 9642: IOStatus PositionedRead(uint64_t offset, size_t n, const IOOptions& options, 9642: Slice* result, char* scratch, 9642: IODebugContext* dbg) override; 9642: 9642: private: 9642: std::shared_ptr io_tracer_; 9642: SystemClock* clock_; 9642: std::string file_name_; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: class FSSequentialFilePtr { 9642: public: 9642: FSSequentialFilePtr() = delete; 9642: FSSequentialFilePtr(std::unique_ptr&& fs, 9642: const std::shared_ptr& io_tracer, 9642: const std::string& file_name) 9642: : io_tracer_(io_tracer), 9642: fs_tracer_(std::move(fs), io_tracer_, 9642: file_name.substr(file_name.find_last_of("/\\") + 9642: 1) ) {} 9642: 9642: FSSequentialFile* operator->() const { 9642: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 9642: return const_cast(&fs_tracer_); 9642: } else { 9642: return fs_tracer_.target(); 9642: } 9642: } 9642: 9642: FSSequentialFile* get() const { 9642: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 9642: return const_cast(&fs_tracer_); 9642: } else { 9642: return fs_tracer_.target(); 9642: } 9642: } 9642: 9642: private: 9642: std::shared_ptr io_tracer_; 9642: FSSequentialFileTracingWrapper fs_tracer_; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: class FSRandomAccessFileTracingWrapper : public FSRandomAccessFileOwnerWrapper { 9642: public: 9642: FSRandomAccessFileTracingWrapper(std::unique_ptr&& t, 9642: std::shared_ptr io_tracer, 9642: const std::string& file_name) 9642: : FSRandomAccessFileOwnerWrapper(std::move(t)), 9642: io_tracer_(io_tracer), 9642: clock_(SystemClock::Default().get()), 9642: file_name_(file_name) {} 9642: 9642: ~FSRandomAccessFileTracingWrapper() override {} 9642: 9642: IOStatus Read(uint64_t offset, size_t n, const IOOptions& options, 9642: Slice* result, char* scratch, 9642: IODebugContext* dbg) const override; 9642: 9642: IOStatus MultiRead(FSReadRequest* reqs, size_t num_reqs, 9642: const IOOptions& options, IODebugContext* dbg) override; 9642: 9642: IOStatus Prefetch(uint64_t offset, size_t n, const IOOptions& options, 9642: IODebugContext* dbg) override; 9642: 9642: IOStatus InvalidateCache(size_t offset, size_t length) override; 9642: 9642: IOStatus ReadAsync(FSReadRequest& req, const IOOptions& opts, 9642: std::function cb, 9642: void* cb_arg, void** io_handle, IOHandleDeleter* del_fn, 9642: IODebugContext* dbg) override; 9642: 9642: void ReadAsyncCallback(FSReadRequest& req, void* cb_arg); 9642: 9642: private: 9642: std::shared_ptr io_tracer_; 9642: SystemClock* clock_; 9642: 9642: std::string file_name_; 9642: 9642: struct ReadAsyncCallbackInfo { 9642: uint64_t start_time_; 9642: std::function cb_; 9642: void* cb_arg_; 9642: std::string file_op_; 9642: }; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: class FSRandomAccessFilePtr { 9642: public: 9642: FSRandomAccessFilePtr(std::unique_ptr&& fs, 9642: const std::shared_ptr& io_tracer, 9642: const std::string& file_name) 9642: : io_tracer_(io_tracer), 9642: fs_tracer_(std::move(fs), io_tracer_, 9642: file_name.substr(file_name.find_last_of("/\\") + 9642: 1) ) {} 9642: 9642: FSRandomAccessFile* operator->() const { 9642: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 9642: return const_cast(&fs_tracer_); 9642: } else { 9642: return fs_tracer_.target(); 9642: } 9642: } 9642: 9642: FSRandomAccessFile* get() const { 9642: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 9642: return const_cast(&fs_tracer_); 9642: } else { 9642: return fs_tracer_.target(); 9642: } 9642: } 9642: 9642: private: 9642: std::shared_ptr io_tracer_; 9642: FSRandomAccessFileTracingWrapper fs_tracer_; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: class FSWritableFileTracingWrapper : public FSWritableFileOwnerWrapper { 9642: public: 9642: FSWritableFileTracingWrapper(std::unique_ptr&& t, 9642: std::shared_ptr io_tracer, 9642: const std::string& file_name) 9642: : FSWritableFileOwnerWrapper(std::move(t)), 9642: io_tracer_(io_tracer), 9642: clock_(SystemClock::Default().get()), 9642: file_name_(file_name) {} 9642: 9642: ~FSWritableFileTracingWrapper() override {} 9642: 9642: IOStatus Append(const Slice& data, const IOOptions& options, 9642: IODebugContext* dbg) override; 9642: IOStatus Append(const Slice& data, const IOOptions& options, 9642: const DataVerificationInfo& , 9642: IODebugContext* dbg) override { 9642: return Append(data, options, dbg); 9642: } 9642: 9642: IOStatus PositionedAppend(const Slice& data, uint64_t offset, 9642: const IOOptions& options, 9642: IODebugContext* dbg) override; 9642: IOStatus PositionedAppend(const Slice& data, uint64_t offset, 9642: const IOOptions& options, 9642: const DataVerificationInfo& , 9642: IODebugContext* dbg) override { 9642: return PositionedAppend(data, offset, options, dbg); 9642: } 9642: 9642: IOStatus Truncate(uint64_t size, const IOOptions& options, 9642: IODebugContext* dbg) override; 9642: 9642: IOStatus Close(const IOOptions& options, IODebugContext* dbg) override; 9642: 9642: uint64_t GetFileSize(const IOOptions& options, IODebugContext* dbg) override; 9642: 9642: IOStatus InvalidateCache(size_t offset, size_t length) override; 9642: 9642: private: 9642: std::shared_ptr io_tracer_; 9642: SystemClock* clock_; 9642: 9642: std::string file_name_; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: class FSWritableFilePtr { 9642: public: 9642: FSWritableFilePtr(std::unique_ptr&& fs, 9642: const std::shared_ptr& io_tracer, 9642: const std::string& file_name) 9642: : io_tracer_(io_tracer) { 9642: fs_tracer_.reset(new FSWritableFileTracingWrapper( 9642: std::move(fs), io_tracer_, 9642: file_name.substr(file_name.find_last_of("/\\") + 9642: 1) )); 9642: } 9642: 9642: FSWritableFile* operator->() const { 9642: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 9642: return fs_tracer_.get(); 9642: } else { 9642: return fs_tracer_->target(); 9642: } 9642: } 9642: 9642: FSWritableFile* get() const { 9642: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 9642: return fs_tracer_.get(); 9642: } else if (fs_tracer_) { 9642: return fs_tracer_->target(); 9642: } else { 9642: return nullptr; 9642: } 9642: } 9642: 9642: void reset() { 9642: fs_tracer_.reset(); 9642: io_tracer_ = nullptr; 9642: } 9642: 9642: private: 9642: std::shared_ptr io_tracer_; 9642: std::unique_ptr fs_tracer_; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: class FSRandomRWFileTracingWrapper : public FSRandomRWFileOwnerWrapper { 9642: public: 9642: FSRandomRWFileTracingWrapper(std::unique_ptr&& t, 9642: std::shared_ptr io_tracer, 9642: const std::string& file_name) 9642: : FSRandomRWFileOwnerWrapper(std::move(t)), 9642: io_tracer_(io_tracer), 9642: clock_(SystemClock::Default().get()), 9642: file_name_(file_name) {} 9642: 9642: ~FSRandomRWFileTracingWrapper() override {} 9642: 9642: IOStatus Write(uint64_t offset, const Slice& data, const IOOptions& options, 9642: IODebugContext* dbg) override; 9642: 9642: IOStatus Read(uint64_t offset, size_t n, const IOOptions& options, 9642: Slice* result, char* scratch, 9642: IODebugContext* dbg) const override; 9642: 9642: IOStatus Flush(const IOOptions& options, IODebugContext* dbg) override; 9642: 9642: IOStatus Close(const IOOptions& options, IODebugContext* dbg) override; 9642: 9642: IOStatus Sync(const IOOptions& options, IODebugContext* dbg) override; 9642: 9642: IOStatus Fsync(const IOOptions& options, IODebugContext* dbg) override; 9642: 9642: private: 9642: std::shared_ptr io_tracer_; 9642: SystemClock* clock_; 9642: 9642: std::string file_name_; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: class FSRandomRWFilePtr { 9642: public: 9642: FSRandomRWFilePtr(std::unique_ptr&& fs, 9642: std::shared_ptr io_tracer, 9642: const std::string& file_name) 9642: : io_tracer_(io_tracer), 9642: fs_tracer_(std::move(fs), io_tracer_, 9642: file_name.substr(file_name.find_last_of("/\\") + 9642: 1) ) {} 9642: 9642: FSRandomRWFile* operator->() const { 9642: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 9642: return const_cast(&fs_tracer_); 9642: } else { 9642: return fs_tracer_.target(); 9642: } 9642: } 9642: 9642: FSRandomRWFile* get() const { 9642: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 9642: return const_cast(&fs_tracer_); 9642: } else { 9642: return fs_tracer_.target(); 9642: } 9642: } 9642: 9642: private: 9642: std::shared_ptr io_tracer_; 9642: FSRandomRWFileTracingWrapper fs_tracer_; 9642: }; 9642: 9642: } 9642: # 16 "/build/reproducible-path/rocksdb-9.3.1/file/random_access_file_reader.h" 2 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: class RateLimiter { 9642: public: 9642: enum class OpType { 9642: kRead, 9642: kWrite, 9642: }; 9642: 9642: enum class Mode { 9642: kReadsOnly = 0, 9642: kWritesOnly = 1, 9642: kAllIo = 2, 9642: }; 9642: 9642: 9642: explicit RateLimiter(Mode mode = Mode::kWritesOnly) : mode_(mode) {} 9642: 9642: virtual ~RateLimiter() {} 9642: 9642: 9642: 9642: virtual void SetBytesPerSecond(int64_t bytes_per_second) = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status SetSingleBurstBytes(int64_t ) { 9642: return Status::NotSupported(); 9642: } 9642: # 62 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 9642: virtual void Request(const int64_t , const Env::IOPriority ) { 9642: 9642: # 63 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 3 4 9642: (static_cast ( 9642: # 63 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 9642: false 9642: # 63 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 63 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 9642: "false" 9642: # 63 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 63 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 9642: ; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: virtual void Request(const int64_t bytes, const Env::IOPriority pri, 9642: Statistics* ) { 9642: 9642: 9642: Request(bytes, pri); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void Request(const int64_t bytes, const Env::IOPriority pri, 9642: Statistics* stats, OpType op_type) { 9642: if (IsRateLimited(op_type)) { 9642: Request(bytes, pri, stats); 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: virtual size_t RequestToken(size_t bytes, size_t alignment, 9642: Env::IOPriority io_priority, Statistics* stats, 9642: RateLimiter::OpType op_type); 9642: 9642: 9642: virtual int64_t GetSingleBurstBytes() const = 0; 9642: 9642: 9642: virtual int64_t GetTotalBytesThrough( 9642: const Env::IOPriority pri = Env::IO_TOTAL) const = 0; 9642: 9642: 9642: virtual int64_t GetTotalRequests( 9642: const Env::IOPriority pri = Env::IO_TOTAL) const = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status GetTotalPendingRequests( 9642: int64_t* total_pending_requests, 9642: const Env::IOPriority pri = Env::IO_TOTAL) const { 9642: 9642: # 116 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 3 4 9642: (static_cast ( 9642: # 116 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 9642: total_pending_requests != nullptr 9642: # 116 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 116 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 9642: "total_pending_requests != nullptr" 9642: # 116 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 116 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 9642: ; 9642: (void)total_pending_requests; 9642: (void)pri; 9642: return Status::NotSupported(); 9642: } 9642: 9642: virtual int64_t GetBytesPerSecond() const = 0; 9642: 9642: virtual bool IsRateLimited(OpType op_type) { 9642: if ((mode_ == RateLimiter::Mode::kWritesOnly && 9642: op_type == RateLimiter::OpType::kRead) || 9642: (mode_ == RateLimiter::Mode::kReadsOnly && 9642: op_type == RateLimiter::OpType::kWrite)) { 9642: return false; 9642: } 9642: return true; 9642: } 9642: 9642: protected: 9642: Mode GetMode() { return mode_; } 9642: 9642: private: 9642: const Mode mode_; 9642: }; 9642: # 166 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 9642: RateLimiter* NewGenericRateLimiter( 9642: int64_t rate_bytes_per_sec, int64_t refill_period_us = 100 * 1000, 9642: int32_t fairness = 10, 9642: RateLimiter::Mode mode = RateLimiter::Mode::kWritesOnly, 9642: bool auto_tuned = false, int64_t single_burst_bytes = 0); 9642: 9642: } 9642: # 21 "/build/reproducible-path/rocksdb-9.3.1/file/random_access_file_reader.h" 2 9642: 9642: 9642: namespace rocksdb { 9642: class Statistics; 9642: class HistogramImpl; 9642: class SystemClock; 9642: 9642: using AlignedBuf = std::unique_ptr; 9642: 9642: 9642: FSReadRequest Align(const FSReadRequest& r, size_t alignment); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool TryMerge(FSReadRequest* dest, const FSReadRequest& src); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: class RandomAccessFileReader { 9642: private: 9642: void NotifyOnFileReadFinish( 9642: uint64_t offset, size_t length, 9642: const FileOperationInfo::StartTimePoint& start_ts, 9642: const FileOperationInfo::FinishTimePoint& finish_ts, 9642: const Status& status) const { 9642: FileOperationInfo info(FileOperationType::kRead, file_name_, start_ts, 9642: finish_ts, status, file_temperature_); 9642: info.offset = offset; 9642: info.length = length; 9642: 9642: for (auto& listener : listeners_) { 9642: listener->OnFileReadFinish(info); 9642: } 9642: info.status.PermitUncheckedError(); 9642: } 9642: 9642: void NotifyOnIOError(const IOStatus& io_status, FileOperationType operation, 9642: const std::string& file_path, size_t length, 9642: uint64_t offset) const { 9642: if (listeners_.empty()) { 9642: return; 9642: } 9642: IOErrorInfo io_error_info(io_status, operation, file_path, length, offset); 9642: 9642: for (auto& listener : listeners_) { 9642: listener->OnIOError(io_error_info); 9642: } 9642: io_status.PermitUncheckedError(); 9642: } 9642: 9642: 9642: bool ShouldNotifyListeners() const { return !listeners_.empty(); } 9642: 9642: FSRandomAccessFilePtr file_; 9642: std::string file_name_; 9642: SystemClock* clock_; 9642: Statistics* stats_; 9642: uint32_t hist_type_; 9642: HistogramImpl* file_read_hist_; 9642: RateLimiter* rate_limiter_; 9642: std::vector> listeners_; 9642: const Temperature file_temperature_; 9642: const bool is_last_level_; 9642: 9642: struct ReadAsyncInfo { 9642: ReadAsyncInfo(std::function cb, void* cb_arg, 9642: uint64_t start_time) 9642: : cb_(cb), 9642: cb_arg_(cb_arg), 9642: start_time_(start_time), 9642: user_scratch_(nullptr), 9642: user_aligned_buf_(nullptr), 9642: user_offset_(0), 9642: user_len_(0), 9642: is_aligned_(false) {} 9642: 9642: std::function cb_; 9642: void* cb_arg_; 9642: uint64_t start_time_; 9642: FileOperationInfo::StartTimePoint fs_start_ts_; 9642: 9642: char* user_scratch_; 9642: AlignedBuf* user_aligned_buf_; 9642: uint64_t user_offset_; 9642: size_t user_len_; 9642: Slice user_result_; 9642: 9642: AlignedBuffer buf_; 9642: bool is_aligned_; 9642: }; 9642: 9642: public: 9642: explicit RandomAccessFileReader( 9642: std::unique_ptr&& raf, const std::string& _file_name, 9642: SystemClock* clock = nullptr, 9642: const std::shared_ptr& io_tracer = nullptr, 9642: Statistics* stats = nullptr, 9642: uint32_t hist_type = Histograms::HISTOGRAM_ENUM_MAX, 9642: HistogramImpl* file_read_hist = nullptr, 9642: RateLimiter* rate_limiter = nullptr, 9642: const std::vector>& listeners = {}, 9642: Temperature file_temperature = Temperature::kUnknown, 9642: bool is_last_level = false) 9642: : file_(std::move(raf), io_tracer, _file_name), 9642: file_name_(std::move(_file_name)), 9642: clock_(clock), 9642: stats_(stats), 9642: hist_type_(hist_type), 9642: file_read_hist_(file_read_hist), 9642: rate_limiter_(rate_limiter), 9642: listeners_(), 9642: file_temperature_(file_temperature), 9642: is_last_level_(is_last_level) { 9642: std::for_each(listeners.begin(), listeners.end(), 9642: [this](const std::shared_ptr& e) { 9642: if (e->ShouldBeNotifiedOnFileIO()) { 9642: listeners_.emplace_back(e); 9642: } 9642: }); 9642: } 9642: 9642: static IOStatus Create(const std::shared_ptr& fs, 9642: const std::string& fname, const FileOptions& file_opts, 9642: std::unique_ptr* reader, 9642: IODebugContext* dbg); 9642: RandomAccessFileReader(const RandomAccessFileReader&) = delete; 9642: RandomAccessFileReader& operator=(const RandomAccessFileReader&) = delete; 9642: # 167 "/build/reproducible-path/rocksdb-9.3.1/file/random_access_file_reader.h" 9642: IOStatus Read(const IOOptions& opts, uint64_t offset, size_t n, Slice* result, 9642: char* scratch, AlignedBuf* aligned_buf) const; 9642: 9642: 9642: 9642: 9642: 9642: 9642: IOStatus MultiRead(const IOOptions& opts, FSReadRequest* reqs, 9642: size_t num_reqs, AlignedBuf* aligned_buf) const; 9642: 9642: IOStatus Prefetch(const IOOptions& opts, uint64_t offset, size_t n) const { 9642: return file_->Prefetch(offset, n, opts, nullptr); 9642: } 9642: 9642: FSRandomAccessFile* file() { return file_.get(); } 9642: 9642: const std::string& file_name() const { return file_name_; } 9642: 9642: bool use_direct_io() const { return file_->use_direct_io(); } 9642: 9642: IOStatus PrepareIOOptions(const ReadOptions& ro, IOOptions& opts) const; 9642: 9642: IOStatus ReadAsync(FSReadRequest& req, const IOOptions& opts, 9642: std::function cb, 9642: void* cb_arg, void** io_handle, IOHandleDeleter* del_fn, 9642: AlignedBuf* aligned_buf); 9642: 9642: void ReadAsyncCallback(FSReadRequest& req, void* cb_arg); 9642: }; 9642: } 9642: # 18 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/memory/memory_allocator_impl.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: struct CustomDeleter { 9642: CustomDeleter(MemoryAllocator* a = nullptr) : allocator(a) {} 9642: 9642: void operator()(char* ptr) const { 9642: if (allocator) { 9642: allocator->Deallocate(ptr); 9642: } else { 9642: delete[] ptr; 9642: } 9642: } 9642: 9642: MemoryAllocator* allocator; 9642: }; 9642: 9642: using CacheAllocationPtr = std::unique_ptr; 9642: 9642: inline CacheAllocationPtr AllocateBlock(size_t size, 9642: MemoryAllocator* allocator) { 9642: if (allocator) { 9642: auto block = reinterpret_cast(allocator->Allocate(size)); 9642: return CacheAllocationPtr(block, allocator); 9642: } 9642: return CacheAllocationPtr(new char[size]); 9642: } 9642: 9642: inline CacheAllocationPtr AllocateAndCopyBlock(const Slice& data, 9642: MemoryAllocator* allocator) { 9642: CacheAllocationPtr cap = AllocateBlock(data.size(), allocator); 9642: std::copy_n(data.data(), data.size(), cap.get()); 9642: return cap; 9642: } 9642: 9642: } 9642: # 19 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/options/cf_options.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/options/db_options.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: class SystemClock; 9642: 9642: struct ImmutableDBOptions { 9642: static const char* kName() { return "ImmutableDBOptions"; } 9642: ImmutableDBOptions(); 9642: explicit ImmutableDBOptions(const DBOptions& options); 9642: 9642: void Dump(Logger* log) const; 9642: 9642: bool create_if_missing; 9642: bool create_missing_column_families; 9642: bool error_if_exists; 9642: bool paranoid_checks; 9642: bool flush_verify_memtable_count; 9642: bool compaction_verify_record_count; 9642: bool track_and_verify_wals_in_manifest; 9642: bool verify_sst_unique_id_in_manifest; 9642: Env* env; 9642: std::shared_ptr rate_limiter; 9642: std::shared_ptr sst_file_manager; 9642: std::shared_ptr info_log; 9642: InfoLogLevel info_log_level; 9642: int max_file_opening_threads; 9642: std::shared_ptr statistics; 9642: bool use_fsync; 9642: std::vector db_paths; 9642: std::string db_log_dir; 9642: 9642: 9642: 9642: std::string wal_dir; 9642: size_t max_log_file_size; 9642: size_t log_file_time_to_roll; 9642: size_t keep_log_file_num; 9642: size_t recycle_log_file_num; 9642: uint64_t max_manifest_file_size; 9642: int table_cache_numshardbits; 9642: uint64_t WAL_ttl_seconds; 9642: uint64_t WAL_size_limit_MB; 9642: uint64_t max_write_batch_group_size_bytes; 9642: size_t manifest_preallocation_size; 9642: bool allow_mmap_reads; 9642: bool allow_mmap_writes; 9642: bool use_direct_reads; 9642: bool use_direct_io_for_flush_and_compaction; 9642: bool allow_fallocate; 9642: bool is_fd_close_on_exec; 9642: bool advise_random_on_open; 9642: size_t db_write_buffer_size; 9642: std::shared_ptr write_buffer_manager; 9642: size_t random_access_max_buffer_size; 9642: bool use_adaptive_mutex; 9642: std::vector> listeners; 9642: bool enable_thread_tracking; 9642: bool enable_pipelined_write; 9642: bool unordered_write; 9642: bool allow_concurrent_memtable_write; 9642: bool enable_write_thread_adaptive_yield; 9642: uint64_t write_thread_max_yield_usec; 9642: uint64_t write_thread_slow_yield_usec; 9642: bool skip_stats_update_on_db_open; 9642: bool skip_checking_sst_file_sizes_on_db_open; 9642: WALRecoveryMode wal_recovery_mode; 9642: bool allow_2pc; 9642: std::shared_ptr row_cache; 9642: WalFilter* wal_filter; 9642: bool fail_if_options_file_error; 9642: bool dump_malloc_stats; 9642: bool avoid_flush_during_recovery; 9642: bool allow_ingest_behind; 9642: bool two_write_queues; 9642: bool manual_wal_flush; 9642: CompressionType wal_compression; 9642: bool atomic_flush; 9642: bool avoid_unnecessary_blocking_io; 9642: bool persist_stats_to_disk; 9642: bool write_dbid_to_manifest; 9642: size_t log_readahead_size; 9642: std::shared_ptr file_checksum_gen_factory; 9642: bool best_efforts_recovery; 9642: int max_bgerror_resume_count; 9642: uint64_t bgerror_resume_retry_interval; 9642: bool allow_data_in_errors; 9642: std::string db_host_id; 9642: FileTypeSet checksum_handoff_file_types; 9642: CacheTier lowest_used_cache_tier; 9642: 9642: std::shared_ptr fs; 9642: SystemClock* clock; 9642: Statistics* stats; 9642: Logger* logger; 9642: std::shared_ptr compaction_service; 9642: bool enforce_single_del_contracts; 9642: uint64_t follower_refresh_catchup_period_ms; 9642: uint64_t follower_catchup_retry_count; 9642: uint64_t follower_catchup_retry_wait_ms; 9642: 9642: bool IsWalDirSameAsDBPath() const; 9642: bool IsWalDirSameAsDBPath(const std::string& path) const; 9642: const std::string& GetWalDir() const; 9642: const std::string& GetWalDir(const std::string& path) const; 9642: }; 9642: 9642: struct MutableDBOptions { 9642: static const char* kName() { return "MutableDBOptions"; } 9642: MutableDBOptions(); 9642: explicit MutableDBOptions(const DBOptions& options); 9642: 9642: void Dump(Logger* log) const; 9642: 9642: int max_background_jobs; 9642: int max_background_compactions; 9642: uint32_t max_subcompactions; 9642: bool avoid_flush_during_shutdown; 9642: size_t writable_file_max_buffer_size; 9642: uint64_t delayed_write_rate; 9642: uint64_t max_total_wal_size; 9642: uint64_t delete_obsolete_files_period_micros; 9642: unsigned int stats_dump_period_sec; 9642: unsigned int stats_persist_period_sec; 9642: size_t stats_history_buffer_size; 9642: int max_open_files; 9642: uint64_t bytes_per_sync; 9642: uint64_t wal_bytes_per_sync; 9642: bool strict_bytes_per_sync; 9642: size_t compaction_readahead_size; 9642: int max_background_flushes; 9642: std::string daily_offpeak_time_utc; 9642: }; 9642: 9642: Status GetStringFromMutableDBOptions(const ConfigOptions& config_options, 9642: const MutableDBOptions& mutable_opts, 9642: std::string* opt_string); 9642: 9642: Status GetMutableDBOptionsFromStrings( 9642: const MutableDBOptions& base_options, 9642: const std::unordered_map& options_map, 9642: MutableDBOptions* new_options); 9642: 9642: bool MutableDBOptionsAreEqual(const MutableDBOptions& this_options, 9642: const MutableDBOptions& that_options); 9642: 9642: } 9642: # 13 "/build/reproducible-path/rocksdb-9.3.1/options/cf_options.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/malloc.h" 1 3 4 9642: # 24 "/usr/include/malloc.h" 3 4 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 25 "/usr/include/malloc.h" 2 3 4 9642: # 36 "/usr/include/malloc.h" 3 4 9642: 9642: # 36 "/usr/include/malloc.h" 3 4 9642: extern "C" { 9642: 9642: 9642: extern void *malloc (size_t __size) noexcept (true) __attribute__ ((__malloc__)) 9642: __attribute__ ((__alloc_size__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: extern void *calloc (size_t __nmemb, size_t __size) 9642: noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (1, 2))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern void *realloc (void *__ptr, size_t __size) 9642: noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__alloc_size__ (2))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size) 9642: noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__alloc_size__ (2, 3))) 9642: __attribute__ ((__malloc__ (__builtin_free, 1))); 9642: 9642: 9642: extern void free (void *__ptr) noexcept (true); 9642: 9642: 9642: extern void *memalign (size_t __alignment, size_t __size) 9642: noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__alloc_align__ (1))) 9642: __attribute__ ((__alloc_size__ (2))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__malloc__ (__builtin_free, 1))); 9642: 9642: 9642: extern void *valloc (size_t __size) noexcept (true) __attribute__ ((__malloc__)) 9642: __attribute__ ((__alloc_size__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__malloc__ (__builtin_free, 1))); 9642: 9642: 9642: 9642: extern void *pvalloc (size_t __size) noexcept (true) __attribute__ ((__malloc__)) 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__malloc__ (__builtin_free, 1))); 9642: 9642: 9642: 9642: struct mallinfo 9642: { 9642: int arena; 9642: int ordblks; 9642: int smblks; 9642: int hblks; 9642: int hblkhd; 9642: int usmblks; 9642: int fsmblks; 9642: int uordblks; 9642: int fordblks; 9642: int keepcost; 9642: }; 9642: 9642: 9642: 9642: 9642: struct mallinfo2 9642: { 9642: size_t arena; 9642: size_t ordblks; 9642: size_t smblks; 9642: size_t hblks; 9642: size_t hblkhd; 9642: size_t usmblks; 9642: size_t fsmblks; 9642: size_t uordblks; 9642: size_t fordblks; 9642: size_t keepcost; 9642: }; 9642: 9642: 9642: extern struct mallinfo mallinfo (void) noexcept (true) __attribute__ ((__deprecated__)); 9642: 9642: 9642: extern struct mallinfo2 mallinfo2 (void) noexcept (true); 9642: # 144 "/usr/include/malloc.h" 3 4 9642: extern int mallopt (int __param, int __val) noexcept (true); 9642: 9642: 9642: 9642: extern int malloc_trim (size_t __pad) noexcept (true); 9642: 9642: 9642: 9642: extern size_t malloc_usable_size (void *__ptr) noexcept (true); 9642: 9642: 9642: extern void malloc_stats (void) noexcept (true); 9642: 9642: 9642: extern int malloc_info (int __options, FILE *__fp) noexcept (true); 9642: 9642: } 9642: # 19 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/block_based/block_type.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 12 "/build/reproducible-path/rocksdb-9.3.1/table/block_based/block_type.h" 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: 9642: 9642: enum class BlockType : uint8_t { 9642: kData, 9642: kFilter, 9642: kFilterPartitionIndex, 9642: kProperties, 9642: kCompressionDictionary, 9642: kRangeDeletion, 9642: kHashIndexPrefixes, 9642: kHashIndexMetadata, 9642: kMetaIndex, 9642: kIndex, 9642: 9642: kInvalid 9642: }; 9642: 9642: } 9642: # 27 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/assert.h" 1 3 4 9642: # 8 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 2 9642: # 24 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct KillPoint { 9642: public: 9642: 9642: 9642: int rocksdb_kill_odds = 0; 9642: 9642: std::vector rocksdb_kill_exclude_prefixes; 9642: 9642: void TestKillRandom(std::string kill_point, int odds, 9642: const std::string& srcfile, int srcline); 9642: 9642: static KillPoint* GetInstance(); 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 63 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 9642: namespace rocksdb { 9642: # 74 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 9642: class SyncPoint { 9642: public: 9642: static SyncPoint* GetInstance(); 9642: 9642: SyncPoint(const SyncPoint&) = delete; 9642: SyncPoint& operator=(const SyncPoint&) = delete; 9642: ~SyncPoint(); 9642: 9642: struct SyncPointPair { 9642: std::string predecessor; 9642: std::string successor; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: void LoadDependency(const std::vector& dependencies); 9642: 9642: 9642: 9642: 9642: 9642: void LoadDependencyAndMarkers(const std::vector& dependencies, 9642: const std::vector& markers); 9642: 9642: 9642: 9642: 9642: void SetCallBack(const std::string& point, 9642: const std::function& callback); 9642: 9642: 9642: void ClearCallBack(const std::string& point); 9642: 9642: 9642: void ClearAllCallBacks(); 9642: 9642: 9642: void EnableProcessing(); 9642: 9642: 9642: void DisableProcessing(); 9642: 9642: 9642: void ClearTrace(); 9642: 9642: 9642: 9642: 9642: void Process(const Slice& point, void* cb_arg = nullptr); 9642: 9642: 9642: 9642: template 9642: void Process(const char (&point)[kLen], void* cb_arg = nullptr) { 9642: static_assert(kLen > 0, "Must not be empty"); 9642: 9642: # 131 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 3 4 9642: (static_cast ( 9642: # 131 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 9642: point[kLen - 1] == '\0' 9642: # 131 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 131 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 9642: "point[kLen - 1] == '\\0'" 9642: # 131 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 131 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 9642: ; 9642: Process(Slice(point, kLen - 1), cb_arg); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct Data; 9642: 9642: private: 9642: 9642: SyncPoint(); 9642: Data* impl_; 9642: }; 9642: 9642: 9642: 9642: void SetupSyncPointsToMockDirectIO(); 9642: } 9642: # 28 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/compression_context_cache.h" 1 9642: # 18 "/build/reproducible-path/rocksdb-9.3.1/util/compression_context_cache.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: class ZSTDUncompressCachedData; 9642: 9642: class CompressionContextCache { 9642: public: 9642: 9642: static CompressionContextCache* Instance(); 9642: static void InitSingleton(); 9642: CompressionContextCache(const CompressionContextCache&) = delete; 9642: CompressionContextCache& operator=(const CompressionContextCache&) = delete; 9642: 9642: ZSTDUncompressCachedData GetCachedZSTDUncompressData(); 9642: void ReturnCachedZSTDUncompressData(int64_t idx); 9642: 9642: private: 9642: 9642: CompressionContextCache(); 9642: ~CompressionContextCache(); 9642: 9642: class Rep; 9642: Rep* rep_; 9642: }; 9642: 9642: } 9642: # 30 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/string_util.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/util/string_util.h" 9642: namespace rocksdb { 9642: 9642: class Slice; 9642: 9642: std::vector StringSplit(const std::string& arg, char delim); 9642: 9642: 9642: void AppendNumberTo(std::string* str, uint64_t num); 9642: 9642: 9642: 9642: void AppendEscapedStringTo(std::string* str, const Slice& value); 9642: 9642: 9642: 9642: template 9642: inline void PutBaseChars(char** buf, size_t n, uint64_t v, bool uppercase) { 9642: const char* digitChars = uppercase ? "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" 9642: : "0123456789abcdefghijklmnopqrstuvwxyz"; 9642: for (size_t i = n; i > 0; --i) { 9642: (*buf)[i - 1] = digitChars[static_cast(v % kBase)]; 9642: v /= kBase; 9642: } 9642: *buf += n; 9642: } 9642: # 52 "/build/reproducible-path/rocksdb-9.3.1/util/string_util.h" 9642: template 9642: inline bool ParseBaseChars(const char** buf, size_t n, uint64_t* v) { 9642: while (n) { 9642: char c = **buf; 9642: *v *= static_cast(kBase); 9642: if (c >= '0' && (kBase >= 10 ? c <= '9' : c < '0' + kBase)) { 9642: *v += static_cast(c - '0'); 9642: } else if (kBase > 10 && c >= 'A' && c < 'A' + kBase - 10) { 9642: *v += static_cast(c - 'A' + 10); 9642: } else if (kBase > 10 && c >= 'a' && c < 'a' + kBase - 10) { 9642: *v += static_cast(c - 'a' + 10); 9642: } else { 9642: return false; 9642: } 9642: --n; 9642: ++*buf; 9642: } 9642: return true; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: std::string NumberToHumanString(int64_t num); 9642: 9642: 9642: 9642: std::string BytesToHumanString(uint64_t bytes); 9642: 9642: 9642: 9642: std::string TimeToHumanString(int unixtime); 9642: 9642: 9642: int AppendHumanMicros(uint64_t micros, char* output, int len, 9642: bool fixed_format); 9642: 9642: 9642: int AppendHumanBytes(uint64_t bytes, char* output, int len); 9642: 9642: 9642: 9642: std::string EscapeString(const Slice& value); 9642: 9642: 9642: 9642: 9642: 9642: bool ConsumeDecimalNumber(Slice* in, uint64_t* val); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool isSpecialChar(const char c); 9642: 9642: 9642: 9642: 9642: char UnescapeChar(const char c); 9642: 9642: 9642: 9642: 9642: char EscapeChar(const char c); 9642: # 130 "/build/reproducible-path/rocksdb-9.3.1/util/string_util.h" 9642: std::string EscapeOptionString(const std::string& raw_string); 9642: 9642: 9642: 9642: 9642: 9642: 9642: std::string UnescapeOptionString(const std::string& escaped_string); 9642: 9642: std::string trim(const std::string& str); 9642: 9642: 9642: bool EndsWith(const std::string& string, const std::string& pattern); 9642: 9642: 9642: bool StartsWith(const std::string& string, const std::string& pattern); 9642: 9642: bool ParseBoolean(const std::string& type, const std::string& value); 9642: 9642: uint8_t ParseUint8(const std::string& value); 9642: 9642: uint32_t ParseUint32(const std::string& value); 9642: 9642: int32_t ParseInt32(const std::string& value); 9642: 9642: uint64_t ParseUint64(const std::string& value); 9642: 9642: int ParseInt(const std::string& value); 9642: 9642: int64_t ParseInt64(const std::string& value); 9642: 9642: double ParseDouble(const std::string& value); 9642: 9642: size_t ParseSizeT(const std::string& value); 9642: 9642: std::vector ParseVectorInt(const std::string& value); 9642: 9642: bool SerializeIntVector(const std::vector& vec, std::string* value); 9642: 9642: 9642: 9642: int ParseTimeStringToSeconds(const std::string& value); 9642: 9642: 9642: 9642: 9642: bool TryParseTimeRangeString(const std::string& value, int& start_time, 9642: int& end_time); 9642: 9642: extern const std::string kNullptrString; 9642: 9642: 9642: 9642: std::string errnoStr(int err); 9642: 9642: } 9642: # 31 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 9642: 9642: 9642: # 1 "/usr/include/snappy.h" 1 3 4 9642: # 42 "/usr/include/snappy.h" 3 4 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 43 "/usr/include/snappy.h" 2 3 4 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/snappy-stubs-public.h" 1 3 4 9642: # 41 "/usr/include/snappy-stubs-public.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 1 3 4 9642: # 23 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_iovec.h" 1 3 4 9642: # 23 "/usr/include/arm-linux-gnueabihf/bits/types/struct_iovec.h" 3 4 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 24 "/usr/include/arm-linux-gnueabihf/bits/types/struct_iovec.h" 2 3 4 9642: 9642: 9642: 9642: # 26 "/usr/include/arm-linux-gnueabihf/bits/types/struct_iovec.h" 3 4 9642: struct iovec 9642: { 9642: void *iov_base; 9642: size_t iov_len; 9642: }; 9642: # 24 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 2 3 4 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern "C" { 9642: # 41 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 3 4 9642: extern ssize_t readv (int __fd, const struct iovec *__iovec, int __count) 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 9642: # 52 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 3 4 9642: extern ssize_t writev (int __fd, const struct iovec *__iovec, int __count) 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 9642: # 86 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 3 4 9642: extern ssize_t preadv (int __fd, const struct iovec *__iovec, int __count, __off64_t __offset) __asm__ ("" "preadv64") 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 9642: extern ssize_t pwritev (int __fd, const struct iovec *__iovec, int __count, __off64_t __offset) __asm__ ("" "pwritev64") 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 9642: # 110 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 3 4 9642: extern ssize_t preadv64 (int __fd, const struct iovec *__iovec, int __count, 9642: __off64_t __offset) 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 9642: # 123 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 3 4 9642: extern ssize_t pwritev64 (int __fd, const struct iovec *__iovec, int __count, 9642: __off64_t __offset) 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 9642: # 143 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 3 4 9642: extern ssize_t pwritev2 (int __fd, const struct iovec *__iovec, int __count, __off64_t __offset, int __flags) __asm__ ("" "pwritev64v2") 9642: 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 9642: extern ssize_t preadv2 (int __fd, const struct iovec *__iovec, int __count, __off64_t __offset, int __flags) __asm__ ("" "preadv64v2") 9642: 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 9642: # 161 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 3 4 9642: extern ssize_t preadv64v2 (int __fp, const struct iovec *__iovec, 9642: int __count, __off64_t __offset, 9642: int ___flags) 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 9642: 9642: 9642: extern ssize_t pwritev64v2 (int __fd, const struct iovec *__iodev, 9642: int __count, __off64_t __offset, 9642: int __flags) 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 9642: 9642: 9642: 9642: } 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/uio-ext.h" 1 3 4 9642: # 26 "/usr/include/arm-linux-gnueabihf/bits/uio-ext.h" 3 4 9642: extern "C" { 9642: 9642: 9642: extern ssize_t process_vm_readv (pid_t __pid, const struct iovec *__lvec, 9642: unsigned long int __liovcnt, 9642: const struct iovec *__rvec, 9642: unsigned long int __riovcnt, 9642: unsigned long int __flags) 9642: noexcept (true); 9642: 9642: 9642: extern ssize_t process_vm_writev (pid_t __pid, const struct iovec *__lvec, 9642: unsigned long int __liovcnt, 9642: const struct iovec *__rvec, 9642: unsigned long int __riovcnt, 9642: unsigned long int __flags) 9642: noexcept (true); 9642: # 52 "/usr/include/arm-linux-gnueabihf/bits/uio-ext.h" 3 4 9642: } 9642: # 180 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 2 3 4 9642: # 42 "/usr/include/snappy-stubs-public.h" 2 3 4 9642: # 50 "/usr/include/snappy-stubs-public.h" 3 4 9642: namespace snappy { 9642: # 61 "/usr/include/snappy-stubs-public.h" 3 4 9642: } 9642: # 48 "/usr/include/snappy.h" 2 3 4 9642: 9642: namespace snappy { 9642: class Source; 9642: class Sink; 9642: 9642: struct CompressionOptions { 9642: # 65 "/usr/include/snappy.h" 3 4 9642: int level = DefaultCompressionLevel(); 9642: 9642: constexpr CompressionOptions() = default; 9642: constexpr CompressionOptions(int compression_level) 9642: : level(compression_level) {} 9642: static constexpr int MinCompressionLevel() { return 1; } 9642: static constexpr int MaxCompressionLevel() { return 2; } 9642: static constexpr int DefaultCompressionLevel() { return 1; } 9642: }; 9642: # 82 "/usr/include/snappy.h" 3 4 9642: size_t Compress(Source* reader, Sink* writer); 9642: size_t Compress(Source* reader, Sink* writer, 9642: CompressionOptions options); 9642: # 93 "/usr/include/snappy.h" 3 4 9642: bool GetUncompressedLength(Source* source, uint32_t* result); 9642: # 104 "/usr/include/snappy.h" 3 4 9642: size_t Compress(const char* input, size_t input_length, 9642: std::string* compressed); 9642: size_t Compress(const char* input, size_t input_length, 9642: std::string* compressed, CompressionOptions options); 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_t CompressFromIOVec(const struct iovec* iov, size_t iov_cnt, 9642: std::string* compressed); 9642: size_t CompressFromIOVec(const struct iovec* iov, size_t iov_cnt, 9642: std::string* compressed, 9642: CompressionOptions options); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool Uncompress(const char* compressed, size_t compressed_length, 9642: std::string* uncompressed); 9642: 9642: 9642: 9642: 9642: bool Uncompress(Source* compressed, Sink* uncompressed); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_t UncompressAsMuchAsPossible(Source* compressed, Sink* uncompressed); 9642: # 161 "/usr/include/snappy.h" 3 4 9642: void RawCompress(const char* input, size_t input_length, char* compressed, 9642: size_t* compressed_length); 9642: void RawCompress(const char* input, size_t input_length, char* compressed, 9642: size_t* compressed_length, CompressionOptions options); 9642: 9642: 9642: 9642: 9642: void RawCompressFromIOVec(const struct iovec* iov, size_t uncompressed_length, 9642: char* compressed, size_t* compressed_length); 9642: void RawCompressFromIOVec(const struct iovec* iov, size_t uncompressed_length, 9642: char* compressed, size_t* compressed_length, 9642: CompressionOptions options); 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool RawUncompress(const char* compressed, size_t compressed_length, 9642: char* uncompressed); 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool RawUncompress(Source* compressed, char* uncompressed); 9642: # 198 "/usr/include/snappy.h" 3 4 9642: bool RawUncompressToIOVec(const char* compressed, size_t compressed_length, 9642: const struct iovec* iov, size_t iov_cnt); 9642: # 209 "/usr/include/snappy.h" 3 4 9642: bool RawUncompressToIOVec(Source* compressed, const struct iovec* iov, 9642: size_t iov_cnt); 9642: 9642: 9642: 9642: size_t MaxCompressedLength(size_t source_bytes); 9642: 9642: 9642: 9642: 9642: 9642: bool GetUncompressedLength(const char* compressed, size_t compressed_length, 9642: size_t* result); 9642: 9642: 9642: 9642: 9642: 9642: bool IsValidCompressedBuffer(const char* compressed, 9642: size_t compressed_length); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool IsValidCompressed(Source* compressed); 9642: # 247 "/usr/include/snappy.h" 3 4 9642: static constexpr int kBlockLog = 16; 9642: static constexpr size_t kBlockSize = 1 << kBlockLog; 9642: 9642: static constexpr int kMinHashTableBits = 8; 9642: static constexpr size_t kMinHashTableSize = 1 << kMinHashTableBits; 9642: 9642: static constexpr int kMaxHashTableBits = 15; 9642: static constexpr size_t kMaxHashTableSize = 1 << kMaxHashTableBits; 9642: } 9642: # 34 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 9642: 9642: 9642: 9642: # 1 "/usr/include/zlib.h" 1 3 4 9642: # 34 "/usr/include/zlib.h" 3 4 9642: # 1 "/usr/include/zconf.h" 1 3 4 9642: # 254 "/usr/include/zconf.h" 3 4 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 255 "/usr/include/zconf.h" 2 3 4 9642: typedef size_t z_size_t; 9642: # 393 "/usr/include/zconf.h" 3 4 9642: typedef unsigned char Byte; 9642: 9642: typedef unsigned int uInt; 9642: typedef unsigned long uLong; 9642: 9642: 9642: 9642: 9642: 9642: typedef Byte Bytef; 9642: 9642: typedef char charf; 9642: typedef int intf; 9642: typedef uInt uIntf; 9642: typedef uLong uLongf; 9642: 9642: 9642: typedef void const *voidpc; 9642: typedef void *voidpf; 9642: typedef void *voidp; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/limits.h" 1 3 4 9642: # 421 "/usr/include/zconf.h" 2 3 4 9642: # 431 "/usr/include/zconf.h" 3 4 9642: typedef unsigned z_crc_t; 9642: # 484 "/usr/include/zconf.h" 3 4 9642: # 1 "/usr/include/unistd.h" 1 3 4 9642: # 27 "/usr/include/unistd.h" 3 4 9642: extern "C" { 9642: # 202 "/usr/include/unistd.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/posix_opt.h" 1 3 4 9642: # 203 "/usr/include/unistd.h" 2 3 4 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/environments.h" 1 3 4 9642: # 22 "/usr/include/arm-linux-gnueabihf/bits/environments.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 9642: # 23 "/usr/include/arm-linux-gnueabihf/bits/environments.h" 2 3 4 9642: # 207 "/usr/include/unistd.h" 2 3 4 9642: # 226 "/usr/include/unistd.h" 3 4 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 227 "/usr/include/unistd.h" 2 3 4 9642: # 274 "/usr/include/unistd.h" 3 4 9642: typedef __socklen_t socklen_t; 9642: # 287 "/usr/include/unistd.h" 3 4 9642: extern int access (const char *__name, int __type) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: extern int euidaccess (const char *__name, int __type) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int eaccess (const char *__name, int __type) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern int execveat (int __fd, const char *__path, char *const __argv[], 9642: char *const __envp[], int __flags) 9642: noexcept (true) __attribute__ ((__nonnull__ (2, 3))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int faccessat (int __fd, const char *__file, int __type, int __flag) 9642: noexcept (true) __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__)); 9642: # 342 "/usr/include/unistd.h" 3 4 9642: extern __off64_t lseek (int __fd, __off64_t __offset, int __whence) noexcept (true) __asm__ ("" "lseek64") 9642: 9642: ; 9642: 9642: 9642: 9642: 9642: 9642: extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence) 9642: noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int close (int __fd); 9642: 9642: 9642: 9642: 9642: extern void closefrom (int __lowfd) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern ssize_t read (int __fd, void *__buf, size_t __nbytes) __attribute__ ((__warn_unused_result__)) 9642: __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: 9642: 9642: 9642: 9642: 9642: extern ssize_t write (int __fd, const void *__buf, size_t __n) __attribute__ ((__warn_unused_result__)) 9642: __attribute__ ((__access__ (__read_only__, 2, 3))); 9642: # 404 "/usr/include/unistd.h" 3 4 9642: extern ssize_t pread (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) __asm__ ("" "pread64") 9642: 9642: __attribute__ ((__warn_unused_result__)) 9642: __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: extern ssize_t pwrite (int __fd, const void *__buf, size_t __nbytes, __off64_t __offset) __asm__ ("" "pwrite64") 9642: 9642: __attribute__ ((__warn_unused_result__)) 9642: __attribute__ ((__access__ (__read_only__, 2, 3))); 9642: # 422 "/usr/include/unistd.h" 3 4 9642: extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes, 9642: __off64_t __offset) __attribute__ ((__warn_unused_result__)) 9642: __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: 9642: 9642: extern ssize_t pwrite64 (int __fd, const void *__buf, size_t __n, 9642: __off64_t __offset) __attribute__ ((__warn_unused_result__)) 9642: __attribute__ ((__access__ (__read_only__, 2, 3))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int pipe (int __pipedes[2]) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern int pipe2 (int __pipedes[2], int __flags) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: # 452 "/usr/include/unistd.h" 3 4 9642: extern unsigned int alarm (unsigned int __seconds) noexcept (true); 9642: # 464 "/usr/include/unistd.h" 3 4 9642: extern unsigned int sleep (unsigned int __seconds); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval) 9642: noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int usleep (__useconds_t __useconds); 9642: # 489 "/usr/include/unistd.h" 3 4 9642: extern int pause (void); 9642: 9642: 9642: 9642: extern int chown (const char *__file, __uid_t __owner, __gid_t __group) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: extern int fchown (int __fd, __uid_t __owner, __gid_t __group) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern int lchown (const char *__file, __uid_t __owner, __gid_t __group) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int fchownat (int __fd, const char *__file, __uid_t __owner, 9642: __gid_t __group, int __flag) 9642: noexcept (true) __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: extern int chdir (const char *__path) noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: extern int fchdir (int __fd) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: # 531 "/usr/include/unistd.h" 3 4 9642: extern char *getcwd (char *__buf, size_t __size) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: extern char *get_current_dir_name (void) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern char *getwd (char *__buf) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)) __attribute__ ((__warn_unused_result__)) 9642: __attribute__ ((__access__ (__write_only__, 1))); 9642: 9642: 9642: 9642: 9642: extern int dup (int __fd) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: extern int dup2 (int __fd, int __fd2) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int dup3 (int __fd, int __fd2, int __flags) noexcept (true); 9642: 9642: 9642: 9642: extern char **__environ; 9642: 9642: extern char **environ; 9642: 9642: 9642: 9642: 9642: 9642: extern int execve (const char *__path, char *const __argv[], 9642: char *const __envp[]) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: 9642: extern int fexecve (int __fd, char *const __argv[], char *const __envp[]) 9642: noexcept (true) __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: 9642: 9642: extern int execv (const char *__path, char *const __argv[]) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: extern int execle (const char *__path, const char *__arg, ...) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: extern int execl (const char *__path, const char *__arg, ...) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: extern int execvp (const char *__file, char *const __argv[]) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: 9642: extern int execlp (const char *__file, const char *__arg, ...) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: 9642: extern int execvpe (const char *__file, char *const __argv[], 9642: char *const __envp[]) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: 9642: 9642: extern int nice (int __inc) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern void _exit (int __status) __attribute__ ((__noreturn__)); 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/confname.h" 1 3 4 9642: # 24 "/usr/include/arm-linux-gnueabihf/bits/confname.h" 3 4 9642: enum 9642: { 9642: _PC_LINK_MAX, 9642: 9642: _PC_MAX_CANON, 9642: 9642: _PC_MAX_INPUT, 9642: 9642: _PC_NAME_MAX, 9642: 9642: _PC_PATH_MAX, 9642: 9642: _PC_PIPE_BUF, 9642: 9642: _PC_CHOWN_RESTRICTED, 9642: 9642: _PC_NO_TRUNC, 9642: 9642: _PC_VDISABLE, 9642: 9642: _PC_SYNC_IO, 9642: 9642: _PC_ASYNC_IO, 9642: 9642: _PC_PRIO_IO, 9642: 9642: _PC_SOCK_MAXBUF, 9642: 9642: _PC_FILESIZEBITS, 9642: 9642: _PC_REC_INCR_XFER_SIZE, 9642: 9642: _PC_REC_MAX_XFER_SIZE, 9642: 9642: _PC_REC_MIN_XFER_SIZE, 9642: 9642: _PC_REC_XFER_ALIGN, 9642: 9642: _PC_ALLOC_SIZE_MIN, 9642: 9642: _PC_SYMLINK_MAX, 9642: 9642: _PC_2_SYMLINKS 9642: 9642: }; 9642: 9642: 9642: enum 9642: { 9642: _SC_ARG_MAX, 9642: 9642: _SC_CHILD_MAX, 9642: 9642: _SC_CLK_TCK, 9642: 9642: _SC_NGROUPS_MAX, 9642: 9642: _SC_OPEN_MAX, 9642: 9642: _SC_STREAM_MAX, 9642: 9642: _SC_TZNAME_MAX, 9642: 9642: _SC_JOB_CONTROL, 9642: 9642: _SC_SAVED_IDS, 9642: 9642: _SC_REALTIME_SIGNALS, 9642: 9642: _SC_PRIORITY_SCHEDULING, 9642: 9642: _SC_TIMERS, 9642: 9642: _SC_ASYNCHRONOUS_IO, 9642: 9642: _SC_PRIORITIZED_IO, 9642: 9642: _SC_SYNCHRONIZED_IO, 9642: 9642: _SC_FSYNC, 9642: 9642: _SC_MAPPED_FILES, 9642: 9642: _SC_MEMLOCK, 9642: 9642: _SC_MEMLOCK_RANGE, 9642: 9642: _SC_MEMORY_PROTECTION, 9642: 9642: _SC_MESSAGE_PASSING, 9642: 9642: _SC_SEMAPHORES, 9642: 9642: _SC_SHARED_MEMORY_OBJECTS, 9642: 9642: _SC_AIO_LISTIO_MAX, 9642: 9642: _SC_AIO_MAX, 9642: 9642: _SC_AIO_PRIO_DELTA_MAX, 9642: 9642: _SC_DELAYTIMER_MAX, 9642: 9642: _SC_MQ_OPEN_MAX, 9642: 9642: _SC_MQ_PRIO_MAX, 9642: 9642: _SC_VERSION, 9642: 9642: _SC_PAGESIZE, 9642: 9642: 9642: _SC_RTSIG_MAX, 9642: 9642: _SC_SEM_NSEMS_MAX, 9642: 9642: _SC_SEM_VALUE_MAX, 9642: 9642: _SC_SIGQUEUE_MAX, 9642: 9642: _SC_TIMER_MAX, 9642: 9642: 9642: 9642: 9642: _SC_BC_BASE_MAX, 9642: 9642: _SC_BC_DIM_MAX, 9642: 9642: _SC_BC_SCALE_MAX, 9642: 9642: _SC_BC_STRING_MAX, 9642: 9642: _SC_COLL_WEIGHTS_MAX, 9642: 9642: _SC_EQUIV_CLASS_MAX, 9642: 9642: _SC_EXPR_NEST_MAX, 9642: 9642: _SC_LINE_MAX, 9642: 9642: _SC_RE_DUP_MAX, 9642: 9642: _SC_CHARCLASS_NAME_MAX, 9642: 9642: 9642: _SC_2_VERSION, 9642: 9642: _SC_2_C_BIND, 9642: 9642: _SC_2_C_DEV, 9642: 9642: _SC_2_FORT_DEV, 9642: 9642: _SC_2_FORT_RUN, 9642: 9642: _SC_2_SW_DEV, 9642: 9642: _SC_2_LOCALEDEF, 9642: 9642: 9642: _SC_PII, 9642: 9642: _SC_PII_XTI, 9642: 9642: _SC_PII_SOCKET, 9642: 9642: _SC_PII_INTERNET, 9642: 9642: _SC_PII_OSI, 9642: 9642: _SC_POLL, 9642: 9642: _SC_SELECT, 9642: 9642: _SC_UIO_MAXIOV, 9642: 9642: _SC_IOV_MAX = _SC_UIO_MAXIOV, 9642: 9642: _SC_PII_INTERNET_STREAM, 9642: 9642: _SC_PII_INTERNET_DGRAM, 9642: 9642: _SC_PII_OSI_COTS, 9642: 9642: _SC_PII_OSI_CLTS, 9642: 9642: _SC_PII_OSI_M, 9642: 9642: _SC_T_IOV_MAX, 9642: 9642: 9642: 9642: _SC_THREADS, 9642: 9642: _SC_THREAD_SAFE_FUNCTIONS, 9642: 9642: _SC_GETGR_R_SIZE_MAX, 9642: 9642: _SC_GETPW_R_SIZE_MAX, 9642: 9642: _SC_LOGIN_NAME_MAX, 9642: 9642: _SC_TTY_NAME_MAX, 9642: 9642: _SC_THREAD_DESTRUCTOR_ITERATIONS, 9642: 9642: _SC_THREAD_KEYS_MAX, 9642: 9642: _SC_THREAD_STACK_MIN, 9642: 9642: _SC_THREAD_THREADS_MAX, 9642: 9642: _SC_THREAD_ATTR_STACKADDR, 9642: 9642: _SC_THREAD_ATTR_STACKSIZE, 9642: 9642: _SC_THREAD_PRIORITY_SCHEDULING, 9642: 9642: _SC_THREAD_PRIO_INHERIT, 9642: 9642: _SC_THREAD_PRIO_PROTECT, 9642: 9642: _SC_THREAD_PROCESS_SHARED, 9642: 9642: 9642: _SC_NPROCESSORS_CONF, 9642: 9642: _SC_NPROCESSORS_ONLN, 9642: 9642: _SC_PHYS_PAGES, 9642: 9642: _SC_AVPHYS_PAGES, 9642: 9642: _SC_ATEXIT_MAX, 9642: 9642: _SC_PASS_MAX, 9642: 9642: 9642: _SC_XOPEN_VERSION, 9642: 9642: _SC_XOPEN_XCU_VERSION, 9642: 9642: _SC_XOPEN_UNIX, 9642: 9642: _SC_XOPEN_CRYPT, 9642: 9642: _SC_XOPEN_ENH_I18N, 9642: 9642: _SC_XOPEN_SHM, 9642: 9642: 9642: _SC_2_CHAR_TERM, 9642: 9642: _SC_2_C_VERSION, 9642: 9642: _SC_2_UPE, 9642: 9642: 9642: _SC_XOPEN_XPG2, 9642: 9642: _SC_XOPEN_XPG3, 9642: 9642: _SC_XOPEN_XPG4, 9642: 9642: 9642: _SC_CHAR_BIT, 9642: 9642: _SC_CHAR_MAX, 9642: 9642: _SC_CHAR_MIN, 9642: 9642: _SC_INT_MAX, 9642: 9642: _SC_INT_MIN, 9642: 9642: _SC_LONG_BIT, 9642: 9642: _SC_WORD_BIT, 9642: 9642: _SC_MB_LEN_MAX, 9642: 9642: _SC_NZERO, 9642: 9642: _SC_SSIZE_MAX, 9642: 9642: _SC_SCHAR_MAX, 9642: 9642: _SC_SCHAR_MIN, 9642: 9642: _SC_SHRT_MAX, 9642: 9642: _SC_SHRT_MIN, 9642: 9642: _SC_UCHAR_MAX, 9642: 9642: _SC_UINT_MAX, 9642: 9642: _SC_ULONG_MAX, 9642: 9642: _SC_USHRT_MAX, 9642: 9642: 9642: _SC_NL_ARGMAX, 9642: 9642: _SC_NL_LANGMAX, 9642: 9642: _SC_NL_MSGMAX, 9642: 9642: _SC_NL_NMAX, 9642: 9642: _SC_NL_SETMAX, 9642: 9642: _SC_NL_TEXTMAX, 9642: 9642: 9642: _SC_XBS5_ILP32_OFF32, 9642: 9642: _SC_XBS5_ILP32_OFFBIG, 9642: 9642: _SC_XBS5_LP64_OFF64, 9642: 9642: _SC_XBS5_LPBIG_OFFBIG, 9642: 9642: 9642: _SC_XOPEN_LEGACY, 9642: 9642: _SC_XOPEN_REALTIME, 9642: 9642: _SC_XOPEN_REALTIME_THREADS, 9642: 9642: 9642: _SC_ADVISORY_INFO, 9642: 9642: _SC_BARRIERS, 9642: 9642: _SC_BASE, 9642: 9642: _SC_C_LANG_SUPPORT, 9642: 9642: _SC_C_LANG_SUPPORT_R, 9642: 9642: _SC_CLOCK_SELECTION, 9642: 9642: _SC_CPUTIME, 9642: 9642: _SC_THREAD_CPUTIME, 9642: 9642: _SC_DEVICE_IO, 9642: 9642: _SC_DEVICE_SPECIFIC, 9642: 9642: _SC_DEVICE_SPECIFIC_R, 9642: 9642: _SC_FD_MGMT, 9642: 9642: _SC_FIFO, 9642: 9642: _SC_PIPE, 9642: 9642: _SC_FILE_ATTRIBUTES, 9642: 9642: _SC_FILE_LOCKING, 9642: 9642: _SC_FILE_SYSTEM, 9642: 9642: _SC_MONOTONIC_CLOCK, 9642: 9642: _SC_MULTI_PROCESS, 9642: 9642: _SC_SINGLE_PROCESS, 9642: 9642: _SC_NETWORKING, 9642: 9642: _SC_READER_WRITER_LOCKS, 9642: 9642: _SC_SPIN_LOCKS, 9642: 9642: _SC_REGEXP, 9642: 9642: _SC_REGEX_VERSION, 9642: 9642: _SC_SHELL, 9642: 9642: _SC_SIGNALS, 9642: 9642: _SC_SPAWN, 9642: 9642: _SC_SPORADIC_SERVER, 9642: 9642: _SC_THREAD_SPORADIC_SERVER, 9642: 9642: _SC_SYSTEM_DATABASE, 9642: 9642: _SC_SYSTEM_DATABASE_R, 9642: 9642: _SC_TIMEOUTS, 9642: 9642: _SC_TYPED_MEMORY_OBJECTS, 9642: 9642: _SC_USER_GROUPS, 9642: 9642: _SC_USER_GROUPS_R, 9642: 9642: _SC_2_PBS, 9642: 9642: _SC_2_PBS_ACCOUNTING, 9642: 9642: _SC_2_PBS_LOCATE, 9642: 9642: _SC_2_PBS_MESSAGE, 9642: 9642: _SC_2_PBS_TRACK, 9642: 9642: _SC_SYMLOOP_MAX, 9642: 9642: _SC_STREAMS, 9642: 9642: _SC_2_PBS_CHECKPOINT, 9642: 9642: 9642: _SC_V6_ILP32_OFF32, 9642: 9642: _SC_V6_ILP32_OFFBIG, 9642: 9642: _SC_V6_LP64_OFF64, 9642: 9642: _SC_V6_LPBIG_OFFBIG, 9642: 9642: 9642: _SC_HOST_NAME_MAX, 9642: 9642: _SC_TRACE, 9642: 9642: _SC_TRACE_EVENT_FILTER, 9642: 9642: _SC_TRACE_INHERIT, 9642: 9642: _SC_TRACE_LOG, 9642: 9642: 9642: _SC_LEVEL1_ICACHE_SIZE, 9642: 9642: _SC_LEVEL1_ICACHE_ASSOC, 9642: 9642: _SC_LEVEL1_ICACHE_LINESIZE, 9642: 9642: _SC_LEVEL1_DCACHE_SIZE, 9642: 9642: _SC_LEVEL1_DCACHE_ASSOC, 9642: 9642: _SC_LEVEL1_DCACHE_LINESIZE, 9642: 9642: _SC_LEVEL2_CACHE_SIZE, 9642: 9642: _SC_LEVEL2_CACHE_ASSOC, 9642: 9642: _SC_LEVEL2_CACHE_LINESIZE, 9642: 9642: _SC_LEVEL3_CACHE_SIZE, 9642: 9642: _SC_LEVEL3_CACHE_ASSOC, 9642: 9642: _SC_LEVEL3_CACHE_LINESIZE, 9642: 9642: _SC_LEVEL4_CACHE_SIZE, 9642: 9642: _SC_LEVEL4_CACHE_ASSOC, 9642: 9642: _SC_LEVEL4_CACHE_LINESIZE, 9642: 9642: 9642: 9642: _SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50, 9642: 9642: _SC_RAW_SOCKETS, 9642: 9642: 9642: _SC_V7_ILP32_OFF32, 9642: 9642: _SC_V7_ILP32_OFFBIG, 9642: 9642: _SC_V7_LP64_OFF64, 9642: 9642: _SC_V7_LPBIG_OFFBIG, 9642: 9642: 9642: _SC_SS_REPL_MAX, 9642: 9642: 9642: _SC_TRACE_EVENT_NAME_MAX, 9642: 9642: _SC_TRACE_NAME_MAX, 9642: 9642: _SC_TRACE_SYS_MAX, 9642: 9642: _SC_TRACE_USER_EVENT_MAX, 9642: 9642: 9642: _SC_XOPEN_STREAMS, 9642: 9642: 9642: _SC_THREAD_ROBUST_PRIO_INHERIT, 9642: 9642: _SC_THREAD_ROBUST_PRIO_PROTECT, 9642: 9642: 9642: _SC_MINSIGSTKSZ, 9642: 9642: 9642: _SC_SIGSTKSZ 9642: 9642: }; 9642: 9642: 9642: enum 9642: { 9642: _CS_PATH, 9642: 9642: 9642: _CS_V6_WIDTH_RESTRICTED_ENVS, 9642: 9642: 9642: 9642: _CS_GNU_LIBC_VERSION, 9642: 9642: _CS_GNU_LIBPTHREAD_VERSION, 9642: 9642: 9642: _CS_V5_WIDTH_RESTRICTED_ENVS, 9642: 9642: 9642: 9642: _CS_V7_WIDTH_RESTRICTED_ENVS, 9642: 9642: 9642: 9642: _CS_LFS_CFLAGS = 1000, 9642: 9642: _CS_LFS_LDFLAGS, 9642: 9642: _CS_LFS_LIBS, 9642: 9642: _CS_LFS_LINTFLAGS, 9642: 9642: _CS_LFS64_CFLAGS, 9642: 9642: _CS_LFS64_LDFLAGS, 9642: 9642: _CS_LFS64_LIBS, 9642: 9642: _CS_LFS64_LINTFLAGS, 9642: 9642: 9642: _CS_XBS5_ILP32_OFF32_CFLAGS = 1100, 9642: 9642: _CS_XBS5_ILP32_OFF32_LDFLAGS, 9642: 9642: _CS_XBS5_ILP32_OFF32_LIBS, 9642: 9642: _CS_XBS5_ILP32_OFF32_LINTFLAGS, 9642: 9642: _CS_XBS5_ILP32_OFFBIG_CFLAGS, 9642: 9642: _CS_XBS5_ILP32_OFFBIG_LDFLAGS, 9642: 9642: _CS_XBS5_ILP32_OFFBIG_LIBS, 9642: 9642: _CS_XBS5_ILP32_OFFBIG_LINTFLAGS, 9642: 9642: _CS_XBS5_LP64_OFF64_CFLAGS, 9642: 9642: _CS_XBS5_LP64_OFF64_LDFLAGS, 9642: 9642: _CS_XBS5_LP64_OFF64_LIBS, 9642: 9642: _CS_XBS5_LP64_OFF64_LINTFLAGS, 9642: 9642: _CS_XBS5_LPBIG_OFFBIG_CFLAGS, 9642: 9642: _CS_XBS5_LPBIG_OFFBIG_LDFLAGS, 9642: 9642: _CS_XBS5_LPBIG_OFFBIG_LIBS, 9642: 9642: _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS, 9642: 9642: 9642: _CS_POSIX_V6_ILP32_OFF32_CFLAGS, 9642: 9642: _CS_POSIX_V6_ILP32_OFF32_LDFLAGS, 9642: 9642: _CS_POSIX_V6_ILP32_OFF32_LIBS, 9642: 9642: _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS, 9642: 9642: _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS, 9642: 9642: _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS, 9642: 9642: _CS_POSIX_V6_ILP32_OFFBIG_LIBS, 9642: 9642: _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS, 9642: 9642: _CS_POSIX_V6_LP64_OFF64_CFLAGS, 9642: 9642: _CS_POSIX_V6_LP64_OFF64_LDFLAGS, 9642: 9642: _CS_POSIX_V6_LP64_OFF64_LIBS, 9642: 9642: _CS_POSIX_V6_LP64_OFF64_LINTFLAGS, 9642: 9642: _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS, 9642: 9642: _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS, 9642: 9642: _CS_POSIX_V6_LPBIG_OFFBIG_LIBS, 9642: 9642: _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS, 9642: 9642: 9642: _CS_POSIX_V7_ILP32_OFF32_CFLAGS, 9642: 9642: _CS_POSIX_V7_ILP32_OFF32_LDFLAGS, 9642: 9642: _CS_POSIX_V7_ILP32_OFF32_LIBS, 9642: 9642: _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS, 9642: 9642: _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS, 9642: 9642: _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS, 9642: 9642: _CS_POSIX_V7_ILP32_OFFBIG_LIBS, 9642: 9642: _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS, 9642: 9642: _CS_POSIX_V7_LP64_OFF64_CFLAGS, 9642: 9642: _CS_POSIX_V7_LP64_OFF64_LDFLAGS, 9642: 9642: _CS_POSIX_V7_LP64_OFF64_LIBS, 9642: 9642: _CS_POSIX_V7_LP64_OFF64_LINTFLAGS, 9642: 9642: _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS, 9642: 9642: _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS, 9642: 9642: _CS_POSIX_V7_LPBIG_OFFBIG_LIBS, 9642: 9642: _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS, 9642: 9642: 9642: _CS_V6_ENV, 9642: 9642: _CS_V7_ENV 9642: 9642: }; 9642: # 631 "/usr/include/unistd.h" 2 3 4 9642: 9642: 9642: extern long int pathconf (const char *__path, int __name) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: extern long int fpathconf (int __fd, int __name) noexcept (true); 9642: 9642: 9642: extern long int sysconf (int __name) noexcept (true); 9642: 9642: 9642: 9642: extern size_t confstr (int __name, char *__buf, size_t __len) noexcept (true) 9642: __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: 9642: 9642: 9642: 9642: extern __pid_t getpid (void) noexcept (true); 9642: 9642: 9642: extern __pid_t getppid (void) noexcept (true); 9642: 9642: 9642: extern __pid_t getpgrp (void) noexcept (true); 9642: 9642: 9642: extern __pid_t __getpgid (__pid_t __pid) noexcept (true); 9642: 9642: extern __pid_t getpgid (__pid_t __pid) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int setpgid (__pid_t __pid, __pid_t __pgid) noexcept (true); 9642: # 682 "/usr/include/unistd.h" 3 4 9642: extern int setpgrp (void) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern __pid_t setsid (void) noexcept (true); 9642: 9642: 9642: 9642: extern __pid_t getsid (__pid_t __pid) noexcept (true); 9642: 9642: 9642: 9642: extern __uid_t getuid (void) noexcept (true); 9642: 9642: 9642: extern __uid_t geteuid (void) noexcept (true); 9642: 9642: 9642: extern __gid_t getgid (void) noexcept (true); 9642: 9642: 9642: extern __gid_t getegid (void) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int getgroups (int __size, __gid_t __list[]) noexcept (true) __attribute__ ((__warn_unused_result__)) 9642: __attribute__ ((__access__ (__write_only__, 2, 1))); 9642: 9642: 9642: extern int group_member (__gid_t __gid) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int setuid (__uid_t __uid) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern int setreuid (__uid_t __ruid, __uid_t __euid) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern int seteuid (__uid_t __uid) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int setgid (__gid_t __gid) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern int setregid (__gid_t __rgid, __gid_t __egid) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern int setegid (__gid_t __gid) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: extern int getresuid (__uid_t *__ruid, __uid_t *__euid, __uid_t *__suid) 9642: noexcept (true); 9642: 9642: 9642: 9642: extern int getresgid (__gid_t *__rgid, __gid_t *__egid, __gid_t *__sgid) 9642: noexcept (true); 9642: 9642: 9642: 9642: extern int setresuid (__uid_t __ruid, __uid_t __euid, __uid_t __suid) 9642: noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: extern int setresgid (__gid_t __rgid, __gid_t __egid, __gid_t __sgid) 9642: noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern __pid_t fork (void) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern __pid_t vfork (void) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern __pid_t _Fork (void) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern char *ttyname (int __fd) noexcept (true); 9642: 9642: 9642: 9642: extern int ttyname_r (int __fd, char *__buf, size_t __buflen) 9642: noexcept (true) __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__)) 9642: __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: 9642: 9642: 9642: extern int isatty (int __fd) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int ttyslot (void) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int link (const char *__from, const char *__to) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern int linkat (int __fromfd, const char *__from, int __tofd, 9642: const char *__to, int __flags) 9642: noexcept (true) __attribute__ ((__nonnull__ (2, 4))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern int symlink (const char *__from, const char *__to) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: extern ssize_t readlink (const char *__restrict __path, 9642: char *__restrict __buf, size_t __len) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)) 9642: __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: 9642: 9642: 9642: 9642: 9642: extern int symlinkat (const char *__from, int __tofd, 9642: const char *__to) noexcept (true) __attribute__ ((__nonnull__ (1, 3))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: extern ssize_t readlinkat (int __fd, const char *__restrict __path, 9642: char *__restrict __buf, size_t __len) 9642: noexcept (true) __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__)) 9642: __attribute__ ((__access__ (__write_only__, 3, 4))); 9642: 9642: 9642: 9642: extern int unlink (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern int unlinkat (int __fd, const char *__name, int __flag) 9642: noexcept (true) __attribute__ ((__nonnull__ (2))); 9642: 9642: 9642: 9642: extern int rmdir (const char *__path) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: extern __pid_t tcgetpgrp (int __fd) noexcept (true); 9642: 9642: 9642: extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern char *getlogin (void); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int getlogin_r (char *__name, size_t __name_len) __attribute__ ((__nonnull__ (1))) 9642: __attribute__ ((__access__ (__write_only__, 1, 2))); 9642: 9642: 9642: 9642: 9642: extern int setlogin (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/getopt_posix.h" 1 3 4 9642: # 27 "/usr/include/arm-linux-gnueabihf/bits/getopt_posix.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/getopt_core.h" 1 3 4 9642: # 28 "/usr/include/arm-linux-gnueabihf/bits/getopt_core.h" 3 4 9642: extern "C" { 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern char *optarg; 9642: # 50 "/usr/include/arm-linux-gnueabihf/bits/getopt_core.h" 3 4 9642: extern int optind; 9642: 9642: 9642: 9642: 9642: extern int opterr; 9642: 9642: 9642: 9642: extern int optopt; 9642: # 91 "/usr/include/arm-linux-gnueabihf/bits/getopt_core.h" 3 4 9642: extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) 9642: noexcept (true) __attribute__ ((__nonnull__ (2, 3))); 9642: 9642: } 9642: # 28 "/usr/include/arm-linux-gnueabihf/bits/getopt_posix.h" 2 3 4 9642: 9642: extern "C" { 9642: # 49 "/usr/include/arm-linux-gnueabihf/bits/getopt_posix.h" 3 4 9642: } 9642: # 904 "/usr/include/unistd.h" 2 3 4 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int gethostname (char *__name, size_t __len) noexcept (true) __attribute__ ((__nonnull__ (1))) 9642: __attribute__ ((__access__ (__write_only__, 1, 2))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int sethostname (const char *__name, size_t __len) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 1, 2))); 9642: 9642: 9642: 9642: extern int sethostid (long int __id) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: extern int getdomainname (char *__name, size_t __len) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) 9642: __attribute__ ((__access__ (__write_only__, 1, 2))); 9642: extern int setdomainname (const char *__name, size_t __len) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 1, 2))); 9642: 9642: 9642: 9642: 9642: extern int vhangup (void) noexcept (true); 9642: 9642: 9642: extern int revoke (const char *__file) noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int profil (unsigned short int *__sample_buffer, size_t __size, 9642: size_t __offset, unsigned int __scale) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: extern int acct (const char *__name) noexcept (true); 9642: 9642: 9642: 9642: extern char *getusershell (void) noexcept (true); 9642: extern void endusershell (void) noexcept (true); 9642: extern void setusershell (void) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern int daemon (int __nochdir, int __noclose) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int chroot (const char *__path) noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: extern char *getpass (const char *__prompt) __attribute__ ((__nonnull__ (1))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int fsync (int __fd); 9642: 9642: 9642: 9642: 9642: 9642: extern int syncfs (int __fd) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern long int gethostid (void); 9642: 9642: 9642: extern void sync (void) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern int getpagesize (void) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: 9642: 9642: extern int getdtablesize (void) noexcept (true); 9642: # 1030 "/usr/include/unistd.h" 3 4 9642: extern int truncate (const char *__file, __off64_t __length) noexcept (true) __asm__ ("" "truncate64") 9642: 9642: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: extern int truncate64 (const char *__file, __off64_t __length) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 9642: # 1052 "/usr/include/unistd.h" 3 4 9642: extern int ftruncate (int __fd, __off64_t __length) noexcept (true) __asm__ ("" "ftruncate64") 9642: __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: extern int ftruncate64 (int __fd, __off64_t __length) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: # 1070 "/usr/include/unistd.h" 3 4 9642: extern int brk (void *__addr) noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: extern void *sbrk (intptr_t __delta) noexcept (true); 9642: # 1091 "/usr/include/unistd.h" 3 4 9642: extern long int syscall (long int __sysno, ...) noexcept (true); 9642: # 1117 "/usr/include/unistd.h" 3 4 9642: extern int lockf (int __fd, int __cmd, __off64_t __len) __asm__ ("" "lockf64") 9642: __attribute__ ((__warn_unused_result__)); 9642: 9642: 9642: 9642: 9642: 9642: extern int lockf64 (int __fd, int __cmd, __off64_t __len) __attribute__ ((__warn_unused_result__)); 9642: # 1142 "/usr/include/unistd.h" 3 4 9642: ssize_t copy_file_range (int __infd, __off64_t *__pinoff, 9642: int __outfd, __off64_t *__poutoff, 9642: size_t __length, unsigned int __flags); 9642: 9642: 9642: 9642: 9642: 9642: extern int fdatasync (int __fildes); 9642: # 1162 "/usr/include/unistd.h" 3 4 9642: extern char *crypt (const char *__key, const char *__salt) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern void swab (const void *__restrict __from, void *__restrict __to, 9642: ssize_t __n) noexcept (true) __attribute__ ((__nonnull__ (1, 2))) 9642: __attribute__ ((__access__ (__read_only__, 1, 3))) 9642: __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: # 1201 "/usr/include/unistd.h" 3 4 9642: int getentropy (void *__buffer, size_t __length) __attribute__ ((__warn_unused_result__)) 9642: __attribute__ ((__access__ (__write_only__, 1, 2))); 9642: # 1211 "/usr/include/unistd.h" 3 4 9642: extern int close_range (unsigned int __fd, unsigned int __max_fd, 9642: int __flags) noexcept (true); 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/unistd.h" 1 3 4 9642: # 23 "/usr/include/arm-linux-gnueabihf/bits/unistd.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/unistd-decl.h" 1 3 4 9642: # 26 "/usr/include/arm-linux-gnueabihf/bits/unistd-decl.h" 3 4 9642: extern ssize_t __read_chk (int __fd, void *__buf, size_t __nbytes, 9642: size_t __buflen) 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: extern ssize_t __read_alias (int __fd, void *__buf, size_t __nbytes) __asm__ ("" "read") 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: extern ssize_t __read_chk_warn (int __fd, void *__buf, size_t __nbytes, size_t __buflen) __asm__ ("" "__read_chk") 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("read called with bigger length than size of " "the destination buffer"))) 9642: ; 9642: 9642: 9642: extern ssize_t __pread_chk (int __fd, void *__buf, size_t __nbytes, 9642: __off_t __offset, size_t __bufsize) 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: extern ssize_t __pread64_chk (int __fd, void *__buf, size_t __nbytes, 9642: __off64_t __offset, size_t __bufsize) 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: extern ssize_t __pread_alias (int __fd, void *__buf, size_t __nbytes, __off_t __offset) __asm__ ("" "pread") 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: extern ssize_t __pread64_alias (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) __asm__ ("" "pread64") 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: extern ssize_t __pread_chk_warn (int __fd, void *__buf, size_t __nbytes, __off_t __offset, size_t __bufsize) __asm__ ("" "__pread_chk") 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("pread called with bigger length than size of " "the destination buffer"))) 9642: ; 9642: extern ssize_t __pread64_chk_warn (int __fd, void *__buf, size_t __nbytes, __off64_t __offset, size_t __bufsize) __asm__ ("" "__pread64_chk") 9642: 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("pread64 called with bigger length than size of " "the destination buffer"))) 9642: ; 9642: 9642: 9642: 9642: extern ssize_t __readlink_chk (const char *__restrict __path, 9642: char *__restrict __buf, size_t __len, 9642: size_t __buflen) 9642: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: extern ssize_t __readlink_alias (const char *__restrict __path, char *__restrict __buf, size_t __len) noexcept (true) __asm__ ("" "readlink") 9642: 9642: 9642: __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: extern ssize_t __readlink_chk_warn (const char *__restrict __path, char *__restrict __buf, size_t __len, size_t __buflen) noexcept (true) __asm__ ("" "__readlink_chk") 9642: 9642: 9642: 9642: __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("readlink called with bigger length " "than size of destination buffer"))) 9642: ; 9642: 9642: 9642: 9642: extern ssize_t __readlinkat_chk (int __fd, const char *__restrict __path, 9642: char *__restrict __buf, size_t __len, 9642: size_t __buflen) 9642: noexcept (true) __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 3, 4))); 9642: extern ssize_t __readlinkat_alias (int __fd, const char *__restrict __path, char *__restrict __buf, size_t __len) noexcept (true) __asm__ ("" "readlinkat") 9642: 9642: 9642: 9642: __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 3, 4))); 9642: extern ssize_t __readlinkat_chk_warn (int __fd, const char *__restrict __path, char *__restrict __buf, size_t __len, size_t __buflen) noexcept (true) __asm__ ("" "__readlinkat_chk") 9642: 9642: 9642: 9642: __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("readlinkat called with bigger " "length than size of destination " "buffer"))) 9642: 9642: ; 9642: 9642: 9642: extern char *__getcwd_chk (char *__buf, size_t __size, size_t __buflen) 9642: noexcept (true) __attribute__ ((__warn_unused_result__)); 9642: extern char *__getcwd_alias (char *__buf, size_t __size) noexcept (true) __asm__ ("" "getcwd") 9642: __attribute__ ((__warn_unused_result__)); 9642: extern char *__getcwd_chk_warn (char *__buf, size_t __size, size_t __buflen) noexcept (true) __asm__ ("" "__getcwd_chk") 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("getcwd caller with bigger length than size of " "destination buffer"))) 9642: ; 9642: 9642: 9642: extern char *__getwd_chk (char *__buf, size_t buflen) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))); 9642: extern char *__getwd_warn (char *__buf) noexcept (true) __asm__ ("" "getwd") 9642: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("please use getcwd instead, as getwd " "doesn't specify buffer size"))) 9642: ; 9642: 9642: 9642: extern size_t __confstr_chk (int __name, char *__buf, size_t __len, 9642: size_t __buflen) noexcept (true) 9642: __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: extern size_t __confstr_alias (int __name, char *__buf, size_t __len) noexcept (true) __asm__ ("" "confstr") 9642: 9642: __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: extern size_t __confstr_chk_warn (int __name, char *__buf, size_t __len, size_t __buflen) noexcept (true) __asm__ ("" "__confstr_chk") 9642: 9642: 9642: __attribute__((__warning__ ("confstr called with bigger length than size of destination " "buffer"))) 9642: ; 9642: 9642: 9642: extern int __getgroups_chk (int __size, __gid_t __list[], size_t __listlen) 9642: noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 1))); 9642: extern int __getgroups_alias (int __size, __gid_t __list[]) noexcept (true) __asm__ ("" "getgroups") 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 1))); 9642: extern int __getgroups_chk_warn (int __size, __gid_t __list[], size_t __listlen) noexcept (true) __asm__ ("" "__getgroups_chk") 9642: 9642: 9642: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("getgroups called with bigger group count than what " "can fit into destination buffer"))) 9642: ; 9642: 9642: 9642: extern int __ttyname_r_chk (int __fd, char *__buf, size_t __buflen, 9642: size_t __nreal) noexcept (true) __attribute__ ((__nonnull__ (2))) 9642: __attribute__ ((__access__ (__write_only__, 2, 3))); 9642: extern int __ttyname_r_alias (int __fd, char *__buf, size_t __buflen) noexcept (true) __asm__ ("" "ttyname_r") 9642: 9642: __attribute__ ((__nonnull__ (2))); 9642: extern int __ttyname_r_chk_warn (int __fd, char *__buf, size_t __buflen, size_t __nreal) noexcept (true) __asm__ ("" "__ttyname_r_chk") 9642: 9642: 9642: __attribute__ ((__nonnull__ (2))) __attribute__((__warning__ ("ttyname_r called with bigger buflen than " "size of destination buffer"))) 9642: ; 9642: 9642: 9642: 9642: extern int __getlogin_r_chk (char *__buf, size_t __buflen, size_t __nreal) 9642: __attribute__ ((__nonnull__ (1))) __attribute__ ((__access__ (__write_only__, 1, 2))); 9642: extern int __getlogin_r_alias (char *__buf, size_t __buflen) __asm__ ("" "getlogin_r") 9642: __attribute__ ((__nonnull__ (1))); 9642: extern int __getlogin_r_chk_warn (char *__buf, size_t __buflen, size_t __nreal) __asm__ ("" "__getlogin_r_chk") 9642: 9642: 9642: __attribute__ ((__nonnull__ (1))) __attribute__((__warning__ ("getlogin_r called with bigger buflen than " "size of destination buffer"))) 9642: ; 9642: 9642: 9642: 9642: 9642: extern int __gethostname_chk (char *__buf, size_t __buflen, size_t __nreal) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__access__ (__write_only__, 1, 2))); 9642: extern int __gethostname_alias (char *__buf, size_t __buflen) noexcept (true) __asm__ ("" "gethostname") 9642: 9642: __attribute__ ((__nonnull__ (1))) __attribute__ ((__access__ (__write_only__, 1, 2))); 9642: extern int __gethostname_chk_warn (char *__buf, size_t __buflen, size_t __nreal) noexcept (true) __asm__ ("" "__gethostname_chk") 9642: 9642: 9642: __attribute__ ((__nonnull__ (1))) __attribute__((__warning__ ("gethostname called with bigger buflen than " "size of destination buffer"))) 9642: ; 9642: 9642: 9642: 9642: 9642: extern int __getdomainname_chk (char *__buf, size_t __buflen, size_t __nreal) 9642: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))); 9642: extern int __getdomainname_alias (char *__buf, size_t __buflen) noexcept (true) __asm__ ("" "getdomainname") 9642: 9642: __attribute__ ((__nonnull__ (1))) 9642: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))); 9642: extern int __getdomainname_chk_warn (char *__buf, size_t __buflen, size_t __nreal) noexcept (true) __asm__ ("" "__getdomainname_chk") 9642: 9642: 9642: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("getdomainname called with bigger " "buflen than size of destination " "buffer"))) 9642: 9642: ; 9642: # 24 "/usr/include/arm-linux-gnueabihf/bits/unistd.h" 2 3 4 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) ssize_t 9642: read (int __fd, void *__buf, size_t __nbytes) 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__buf, 0)) && (__builtin_object_size (__buf, 0)) == (unsigned int) -1) || (((__typeof (__nbytes)) 0 < (__typeof (__nbytes)) -1 || (__builtin_constant_p (__nbytes) && (__nbytes) > 0)) && __builtin_constant_p ((((unsigned int) (__nbytes)) <= ((__builtin_object_size (__buf, 0))) / ((sizeof (char))))) && (((unsigned int) (__nbytes)) <= ((__builtin_object_size (__buf, 0))) / ((sizeof (char)))))) ? __read_alias (__fd, __buf, __nbytes) : ((((__typeof (__nbytes)) 0 < (__typeof (__nbytes)) -1 || (__builtin_constant_p (__nbytes) && (__nbytes) > 0)) && __builtin_constant_p ((((unsigned int) (__nbytes)) <= (__builtin_object_size (__buf, 0)) / (sizeof (char)))) && !(((unsigned int) (__nbytes)) <= (__builtin_object_size (__buf, 0)) / (sizeof (char)))) ? __read_chk_warn (__fd, __buf, __nbytes, __builtin_object_size (__buf, 0)) : __read_chk (__fd, __buf, __nbytes, __builtin_object_size (__buf, 0)))) 9642: 9642: ; 9642: } 9642: # 43 "/usr/include/arm-linux-gnueabihf/bits/unistd.h" 3 4 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) ssize_t 9642: pread (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__buf, 0)) && (__builtin_object_size (__buf, 0)) == (unsigned int) -1) || (((__typeof (__nbytes)) 0 < (__typeof (__nbytes)) -1 || (__builtin_constant_p (__nbytes) && (__nbytes) > 0)) && __builtin_constant_p ((((unsigned int) (__nbytes)) <= ((__builtin_object_size (__buf, 0))) / ((sizeof (char))))) && (((unsigned int) (__nbytes)) <= ((__builtin_object_size (__buf, 0))) / ((sizeof (char)))))) ? __pread64_alias (__fd, __buf, __nbytes, __offset) : ((((__typeof (__nbytes)) 0 < (__typeof (__nbytes)) -1 || (__builtin_constant_p (__nbytes) && (__nbytes) > 0)) && __builtin_constant_p ((((unsigned int) (__nbytes)) <= (__builtin_object_size (__buf, 0)) / (sizeof (char)))) && !(((unsigned int) (__nbytes)) <= (__builtin_object_size (__buf, 0)) / (sizeof (char)))) ? __pread64_chk_warn (__fd, __buf, __nbytes, __offset, __builtin_object_size (__buf, 0)) : __pread64_chk (__fd, __buf, __nbytes, __offset, __builtin_object_size (__buf, 0)))) 9642: 9642: ; 9642: } 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) ssize_t 9642: pread64 (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__buf, 0)) && (__builtin_object_size (__buf, 0)) == (unsigned int) -1) || (((__typeof (__nbytes)) 0 < (__typeof (__nbytes)) -1 || (__builtin_constant_p (__nbytes) && (__nbytes) > 0)) && __builtin_constant_p ((((unsigned int) (__nbytes)) <= ((__builtin_object_size (__buf, 0))) / ((sizeof (char))))) && (((unsigned int) (__nbytes)) <= ((__builtin_object_size (__buf, 0))) / ((sizeof (char)))))) ? __pread64_alias (__fd, __buf, __nbytes, __offset) : ((((__typeof (__nbytes)) 0 < (__typeof (__nbytes)) -1 || (__builtin_constant_p (__nbytes) && (__nbytes) > 0)) && __builtin_constant_p ((((unsigned int) (__nbytes)) <= (__builtin_object_size (__buf, 0)) / (sizeof (char)))) && !(((unsigned int) (__nbytes)) <= (__builtin_object_size (__buf, 0)) / (sizeof (char)))) ? __pread64_chk_warn (__fd, __buf, __nbytes, __offset, __builtin_object_size (__buf, 0)) : __pread64_chk (__fd, __buf, __nbytes, __offset, __builtin_object_size (__buf, 0)))) 9642: 9642: ; 9642: } 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)) ssize_t 9642: __attribute__ ((__leaf__)) readlink (const char *__restrict __path, char *__restrict __buf, size_t __len) noexcept (true) 9642: 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__buf, 2 > 1)) && (__builtin_object_size (__buf, 2 > 1)) == (unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__len)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char)))))) ? __readlink_alias (__path, __buf, __len) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__len)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) ? __readlink_chk_warn (__path, __buf, __len, __builtin_object_size (__buf, 2 > 1)) : __readlink_chk (__path, __buf, __len, __builtin_object_size (__buf, 2 > 1)))) 9642: 9642: ; 9642: } 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__)) ssize_t 9642: __attribute__ ((__leaf__)) readlinkat (int __fd, const char *__restrict __path, char *__restrict __buf, size_t __len) noexcept (true) 9642: 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__buf, 2 > 1)) && (__builtin_object_size (__buf, 2 > 1)) == (unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__len)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char)))))) ? __readlinkat_alias (__fd, __path, __buf, __len) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__len)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) ? __readlinkat_chk_warn (__fd, __path, __buf, __len, __builtin_object_size (__buf, 2 > 1)) : __readlinkat_chk (__fd, __path, __buf, __len, __builtin_object_size (__buf, 2 > 1)))) 9642: 9642: ; 9642: } 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char * 9642: __attribute__ ((__leaf__)) getcwd (char *__buf, size_t __size) noexcept (true) 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__buf, 2 > 1)) && (__builtin_object_size (__buf, 2 > 1)) == (unsigned int) -1) || (((__typeof (__size)) 0 < (__typeof (__size)) -1 || (__builtin_constant_p (__size) && (__size) > 0)) && __builtin_constant_p ((((unsigned int) (__size)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__size)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char)))))) ? __getcwd_alias (__buf, __size) : ((((__typeof (__size)) 0 < (__typeof (__size)) -1 || (__builtin_constant_p (__size) && (__size) > 0)) && __builtin_constant_p ((((unsigned int) (__size)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__size)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) ? __getcwd_chk_warn (__buf, __size, __builtin_object_size (__buf, 2 > 1)) : __getcwd_chk (__buf, __size, __builtin_object_size (__buf, 2 > 1)))) 9642: 9642: ; 9642: } 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)) __attribute__ ((__warn_unused_result__)) char * 9642: __attribute__ ((__leaf__)) getwd (char *__buf) noexcept (true) 9642: { 9642: if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1) 9642: return __getwd_chk (__buf, __builtin_object_size (__buf, 2 > 1)); 9642: return __getwd_warn (__buf); 9642: } 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 9642: __attribute__ ((__leaf__)) confstr (int __name, char *__buf, size_t __len) noexcept (true) 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__buf, 2 > 1)) && (__builtin_object_size (__buf, 2 > 1)) == (unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__len)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char)))))) ? __confstr_alias (__name, __buf, __len) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__len)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) ? __confstr_chk_warn (__name, __buf, __len, __builtin_object_size (__buf, 2 > 1)) : __confstr_chk (__name, __buf, __len, __builtin_object_size (__buf, 2 > 1)))) 9642: 9642: ; 9642: } 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: __attribute__ ((__leaf__)) getgroups (int __size, __gid_t __list[]) noexcept (true) 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__list, 2 > 1)) && (__builtin_object_size (__list, 2 > 1)) == (unsigned int) -1) || (((__typeof (__size)) 0 < (__typeof (__size)) -1 || (__builtin_constant_p (__size) && (__size) > 0)) && __builtin_constant_p ((((unsigned int) (__size)) <= ((__builtin_object_size (__list, 2 > 1))) / ((sizeof (__gid_t))))) && (((unsigned int) (__size)) <= ((__builtin_object_size (__list, 2 > 1))) / ((sizeof (__gid_t)))))) ? __getgroups_alias (__size, __list) : ((((__typeof (__size)) 0 < (__typeof (__size)) -1 || (__builtin_constant_p (__size) && (__size) > 0)) && __builtin_constant_p ((((unsigned int) (__size)) <= (__builtin_object_size (__list, 2 > 1)) / (sizeof (__gid_t)))) && !(((unsigned int) (__size)) <= (__builtin_object_size (__list, 2 > 1)) / (sizeof (__gid_t)))) ? __getgroups_chk_warn (__size, __list, __builtin_object_size (__list, 2 > 1)) : __getgroups_chk (__size, __list, __builtin_object_size (__list, 2 > 1)))) 9642: 9642: ; 9642: } 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: __attribute__ ((__leaf__)) ttyname_r (int __fd, char *__buf, size_t __buflen) noexcept (true) 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__buf, 2 > 1)) && (__builtin_object_size (__buf, 2 > 1)) == (unsigned int) -1) || (((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char)))))) ? __ttyname_r_alias (__fd, __buf, __buflen) : ((((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) ? __ttyname_r_chk_warn (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1)) : __ttyname_r_chk (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1)))) 9642: 9642: ; 9642: } 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: getlogin_r (char *__buf, size_t __buflen) 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__buf, 2 > 1)) && (__builtin_object_size (__buf, 2 > 1)) == (unsigned int) -1) || (((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char)))))) ? __getlogin_r_alias (__buf, __buflen) : ((((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) ? __getlogin_r_chk_warn (__buf, __buflen, __builtin_object_size (__buf, 2 > 1)) : __getlogin_r_chk (__buf, __buflen, __builtin_object_size (__buf, 2 > 1)))) 9642: 9642: ; 9642: } 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: __attribute__ ((__leaf__)) gethostname (char *__buf, size_t __buflen) noexcept (true) 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__buf, 2 > 1)) && (__builtin_object_size (__buf, 2 > 1)) == (unsigned int) -1) || (((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char)))))) ? __gethostname_alias (__buf, __buflen) : ((((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) ? __gethostname_chk_warn (__buf, __buflen, __builtin_object_size (__buf, 2 > 1)) : __gethostname_chk (__buf, __buflen, __builtin_object_size (__buf, 2 > 1)))) 9642: 9642: ; 9642: } 9642: 9642: 9642: 9642: 9642: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 9642: __attribute__ ((__leaf__)) getdomainname (char *__buf, size_t __buflen) noexcept (true) 9642: { 9642: return (((__builtin_constant_p (__builtin_object_size (__buf, 2 > 1)) && (__builtin_object_size (__buf, 2 > 1)) == (unsigned int) -1) || (((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char)))))) ? __getdomainname_alias (__buf, __buflen) : ((((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) ? __getdomainname_chk_warn (__buf, __buflen, __builtin_object_size (__buf, 2 > 1)) : __getdomainname_chk (__buf, __buflen, __builtin_object_size (__buf, 2 > 1)))) 9642: 9642: ; 9642: } 9642: # 1218 "/usr/include/unistd.h" 2 3 4 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/unistd_ext.h" 1 3 4 9642: # 34 "/usr/include/arm-linux-gnueabihf/bits/unistd_ext.h" 3 4 9642: extern __pid_t gettid (void) noexcept (true); 9642: 9642: 9642: 9642: # 1 "/usr/include/linux/close_range.h" 1 3 4 9642: # 39 "/usr/include/arm-linux-gnueabihf/bits/unistd_ext.h" 2 3 4 9642: # 1222 "/usr/include/unistd.h" 2 3 4 9642: 9642: } 9642: # 485 "/usr/include/zconf.h" 2 3 4 9642: # 35 "/usr/include/zlib.h" 2 3 4 9642: 9642: 9642: extern "C" { 9642: # 81 "/usr/include/zlib.h" 3 4 9642: typedef voidpf (*alloc_func)(voidpf opaque, uInt items, uInt size); 9642: typedef void (*free_func)(voidpf opaque, voidpf address); 9642: 9642: struct internal_state; 9642: 9642: typedef struct z_stream_s { 9642: Bytef *next_in; 9642: uInt avail_in; 9642: uLong total_in; 9642: 9642: Bytef *next_out; 9642: uInt avail_out; 9642: uLong total_out; 9642: 9642: char *msg; 9642: struct internal_state *state; 9642: 9642: alloc_func zalloc; 9642: free_func zfree; 9642: voidpf opaque; 9642: 9642: int data_type; 9642: 9642: uLong adler; 9642: uLong reserved; 9642: } z_stream; 9642: 9642: typedef z_stream *z_streamp; 9642: 9642: 9642: 9642: 9642: 9642: typedef struct gz_header_s { 9642: int text; 9642: uLong time; 9642: int xflags; 9642: int os; 9642: Bytef *extra; 9642: uInt extra_len; 9642: uInt extra_max; 9642: Bytef *name; 9642: uInt name_max; 9642: Bytef *comment; 9642: uInt comm_max; 9642: int hcrc; 9642: int done; 9642: 9642: } gz_header; 9642: 9642: typedef gz_header *gz_headerp; 9642: # 220 "/usr/include/zlib.h" 3 4 9642: extern const char * zlibVersion(void); 9642: # 250 "/usr/include/zlib.h" 3 4 9642: extern int deflate(z_streamp strm, int flush); 9642: # 363 "/usr/include/zlib.h" 3 4 9642: extern int deflateEnd(z_streamp strm); 9642: # 401 "/usr/include/zlib.h" 3 4 9642: extern int inflate(z_streamp strm, int flush); 9642: # 521 "/usr/include/zlib.h" 3 4 9642: extern int inflateEnd(z_streamp strm); 9642: # 611 "/usr/include/zlib.h" 3 4 9642: extern int deflateSetDictionary(z_streamp strm, 9642: const Bytef *dictionary, 9642: uInt dictLength); 9642: # 655 "/usr/include/zlib.h" 3 4 9642: extern int deflateGetDictionary(z_streamp strm, 9642: Bytef *dictionary, 9642: uInt *dictLength); 9642: # 677 "/usr/include/zlib.h" 3 4 9642: extern int deflateCopy(z_streamp dest, 9642: z_streamp source); 9642: # 695 "/usr/include/zlib.h" 3 4 9642: extern int deflateReset(z_streamp strm); 9642: # 706 "/usr/include/zlib.h" 3 4 9642: extern int deflateParams(z_streamp strm, 9642: int level, 9642: int strategy); 9642: # 744 "/usr/include/zlib.h" 3 4 9642: extern int deflateTune(z_streamp strm, 9642: int good_length, 9642: int max_lazy, 9642: int nice_length, 9642: int max_chain); 9642: # 761 "/usr/include/zlib.h" 3 4 9642: extern uLong deflateBound(z_streamp strm, 9642: uLong sourceLen); 9642: # 776 "/usr/include/zlib.h" 3 4 9642: extern int deflatePending(z_streamp strm, 9642: unsigned *pending, 9642: int *bits); 9642: # 791 "/usr/include/zlib.h" 3 4 9642: extern int deflatePrime(z_streamp strm, 9642: int bits, 9642: int value); 9642: # 808 "/usr/include/zlib.h" 3 4 9642: extern int deflateSetHeader(z_streamp strm, 9642: gz_headerp head); 9642: # 888 "/usr/include/zlib.h" 3 4 9642: extern int inflateSetDictionary(z_streamp strm, 9642: const Bytef *dictionary, 9642: uInt dictLength); 9642: # 911 "/usr/include/zlib.h" 3 4 9642: extern int inflateGetDictionary(z_streamp strm, 9642: Bytef *dictionary, 9642: uInt *dictLength); 9642: # 926 "/usr/include/zlib.h" 3 4 9642: extern int inflateSync(z_streamp strm); 9642: # 945 "/usr/include/zlib.h" 3 4 9642: extern int inflateCopy(z_streamp dest, 9642: z_streamp source); 9642: # 961 "/usr/include/zlib.h" 3 4 9642: extern int inflateReset(z_streamp strm); 9642: # 972 "/usr/include/zlib.h" 3 4 9642: extern int inflateReset2(z_streamp strm, 9642: int windowBits); 9642: # 986 "/usr/include/zlib.h" 3 4 9642: extern int inflatePrime(z_streamp strm, 9642: int bits, 9642: int value); 9642: # 1007 "/usr/include/zlib.h" 3 4 9642: extern long inflateMark(z_streamp strm); 9642: # 1035 "/usr/include/zlib.h" 3 4 9642: extern int inflateGetHeader(z_streamp strm, 9642: gz_headerp head); 9642: # 1097 "/usr/include/zlib.h" 3 4 9642: typedef unsigned (*in_func)(void *, 9642: unsigned char * *); 9642: typedef int (*out_func)(void *, unsigned char *, unsigned); 9642: 9642: extern int inflateBack(z_streamp strm, 9642: in_func in, void *in_desc, 9642: out_func out, void *out_desc); 9642: # 1171 "/usr/include/zlib.h" 3 4 9642: extern int inflateBackEnd(z_streamp strm); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern uLong zlibCompileFlags(void); 9642: # 1232 "/usr/include/zlib.h" 3 4 9642: extern int compress(Bytef *dest, uLongf *destLen, 9642: const Bytef *source, uLong sourceLen); 9642: # 1247 "/usr/include/zlib.h" 3 4 9642: extern int compress2(Bytef *dest, uLongf *destLen, 9642: const Bytef *source, uLong sourceLen, 9642: int level); 9642: # 1263 "/usr/include/zlib.h" 3 4 9642: extern uLong compressBound(uLong sourceLen); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int uncompress(Bytef *dest, uLongf *destLen, 9642: const Bytef *source, uLong sourceLen); 9642: # 1288 "/usr/include/zlib.h" 3 4 9642: extern int uncompress2(Bytef *dest, uLongf *destLen, 9642: const Bytef *source, uLong *sourceLen); 9642: # 1305 "/usr/include/zlib.h" 3 4 9642: typedef struct gzFile_s *gzFile; 9642: # 1345 "/usr/include/zlib.h" 3 4 9642: extern gzFile gzdopen(int fd, const char *mode); 9642: # 1368 "/usr/include/zlib.h" 3 4 9642: extern int gzbuffer(gzFile file, unsigned size); 9642: # 1384 "/usr/include/zlib.h" 3 4 9642: extern int gzsetparams(gzFile file, int level, int strategy); 9642: # 1395 "/usr/include/zlib.h" 3 4 9642: extern int gzread(gzFile file, voidp buf, unsigned len); 9642: # 1425 "/usr/include/zlib.h" 3 4 9642: extern z_size_t gzfread(voidp buf, z_size_t size, z_size_t nitems, 9642: gzFile file); 9642: # 1451 "/usr/include/zlib.h" 3 4 9642: extern int gzwrite(gzFile file, voidpc buf, unsigned len); 9642: 9642: 9642: 9642: 9642: 9642: extern z_size_t gzfwrite(voidpc buf, z_size_t size, 9642: z_size_t nitems, gzFile file); 9642: # 1471 "/usr/include/zlib.h" 3 4 9642: extern int gzprintf(gzFile file, const char *format, ...); 9642: # 1486 "/usr/include/zlib.h" 3 4 9642: extern int gzputs(gzFile file, const char *s); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern char * gzgets(gzFile file, char *buf, int len); 9642: # 1508 "/usr/include/zlib.h" 3 4 9642: extern int gzputc(gzFile file, int c); 9642: 9642: 9642: 9642: 9642: 9642: extern int gzgetc(gzFile file); 9642: # 1523 "/usr/include/zlib.h" 3 4 9642: extern int gzungetc(int c, gzFile file); 9642: # 1535 "/usr/include/zlib.h" 3 4 9642: extern int gzflush(gzFile file, int flush); 9642: # 1570 "/usr/include/zlib.h" 3 4 9642: extern int gzrewind(gzFile file); 9642: # 1598 "/usr/include/zlib.h" 3 4 9642: extern int gzeof(gzFile file); 9642: # 1613 "/usr/include/zlib.h" 3 4 9642: extern int gzdirect(gzFile file); 9642: # 1634 "/usr/include/zlib.h" 3 4 9642: extern int gzclose(gzFile file); 9642: # 1647 "/usr/include/zlib.h" 3 4 9642: extern int gzclose_r(gzFile file); 9642: extern int gzclose_w(gzFile file); 9642: # 1659 "/usr/include/zlib.h" 3 4 9642: extern const char * gzerror(gzFile file, int *errnum); 9642: # 1675 "/usr/include/zlib.h" 3 4 9642: extern void gzclearerr(gzFile file); 9642: # 1692 "/usr/include/zlib.h" 3 4 9642: extern uLong adler32(uLong adler, const Bytef *buf, uInt len); 9642: # 1712 "/usr/include/zlib.h" 3 4 9642: extern uLong adler32_z(uLong adler, const Bytef *buf, 9642: z_size_t len); 9642: # 1730 "/usr/include/zlib.h" 3 4 9642: extern uLong crc32(uLong crc, const Bytef *buf, uInt len); 9642: # 1748 "/usr/include/zlib.h" 3 4 9642: extern uLong crc32_z(uLong crc, const Bytef *buf, 9642: z_size_t len); 9642: # 1771 "/usr/include/zlib.h" 3 4 9642: extern uLong crc32_combine_op(uLong crc1, uLong crc2, uLong op); 9642: # 1784 "/usr/include/zlib.h" 3 4 9642: extern int deflateInit_(z_streamp strm, int level, 9642: const char *version, int stream_size); 9642: extern int inflateInit_(z_streamp strm, 9642: const char *version, int stream_size); 9642: extern int deflateInit2_(z_streamp strm, int level, int method, 9642: int windowBits, int memLevel, 9642: int strategy, const char *version, 9642: int stream_size); 9642: extern int inflateInit2_(z_streamp strm, int windowBits, 9642: const char *version, int stream_size); 9642: extern int inflateBackInit_(z_streamp strm, int windowBits, 9642: unsigned char *window, 9642: const char *version, 9642: int stream_size); 9642: # 1837 "/usr/include/zlib.h" 3 4 9642: struct gzFile_s { 9642: unsigned have; 9642: unsigned char *next; 9642: off64_t pos; 9642: }; 9642: extern int gzgetc_(gzFile file); 9642: # 1859 "/usr/include/zlib.h" 3 4 9642: extern gzFile gzopen64(const char *, const char *); 9642: extern off64_t gzseek64(gzFile, off64_t, int); 9642: extern off64_t gztell64(gzFile); 9642: extern off64_t gzoffset64(gzFile); 9642: extern uLong adler32_combine64(uLong, uLong, off64_t); 9642: extern uLong crc32_combine64(uLong, uLong, off64_t); 9642: extern uLong crc32_combine_gen64(off64_t); 9642: # 1914 "/usr/include/zlib.h" 3 4 9642: extern const char * zError(int); 9642: extern int inflateSyncPoint(z_streamp); 9642: extern const z_crc_t * get_crc_table(void); 9642: extern int inflateUndermine(z_streamp, int); 9642: extern int inflateValidate(z_streamp, int); 9642: extern unsigned long inflateCodesUsed(z_streamp); 9642: extern int inflateResetKeep(z_streamp); 9642: extern int deflateResetKeep(z_streamp); 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int gzvprintf(gzFile file, 9642: const char *format, 9642: va_list va); 9642: 9642: 9642: 9642: 9642: } 9642: # 38 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 9642: 9642: 9642: 9642: # 1 "/usr/include/bzlib.h" 1 3 4 9642: # 26 "/usr/include/bzlib.h" 3 4 9642: extern "C" { 9642: # 48 "/usr/include/bzlib.h" 3 4 9642: typedef 9642: struct { 9642: char *next_in; 9642: unsigned int avail_in; 9642: unsigned int total_in_lo32; 9642: unsigned int total_in_hi32; 9642: 9642: char *next_out; 9642: unsigned int avail_out; 9642: unsigned int total_out_lo32; 9642: unsigned int total_out_hi32; 9642: 9642: void *state; 9642: 9642: void *(*bzalloc)(void *,int,int); 9642: void (*bzfree)(void *,void *); 9642: void *opaque; 9642: } 9642: bz_stream; 9642: # 100 "/usr/include/bzlib.h" 3 4 9642: extern int BZ2_bzCompressInit ( 9642: bz_stream* strm, 9642: int blockSize100k, 9642: int verbosity, 9642: int workFactor 9642: ); 9642: 9642: extern int BZ2_bzCompress ( 9642: bz_stream* strm, 9642: int action 9642: ); 9642: 9642: extern int BZ2_bzCompressEnd ( 9642: bz_stream* strm 9642: ); 9642: 9642: extern int BZ2_bzDecompressInit ( 9642: bz_stream *strm, 9642: int verbosity, 9642: int small 9642: ); 9642: 9642: extern int BZ2_bzDecompress ( 9642: bz_stream* strm 9642: ); 9642: 9642: extern int BZ2_bzDecompressEnd ( 9642: bz_stream *strm 9642: ); 9642: # 137 "/usr/include/bzlib.h" 3 4 9642: typedef void BZFILE; 9642: 9642: extern BZFILE* BZ2_bzReadOpen ( 9642: int* bzerror, 9642: FILE* f, 9642: int verbosity, 9642: int small, 9642: void* unused, 9642: int nUnused 9642: ); 9642: 9642: extern void BZ2_bzReadClose ( 9642: int* bzerror, 9642: BZFILE* b 9642: ); 9642: 9642: extern void BZ2_bzReadGetUnused ( 9642: int* bzerror, 9642: BZFILE* b, 9642: void** unused, 9642: int* nUnused 9642: ); 9642: 9642: extern int BZ2_bzRead ( 9642: int* bzerror, 9642: BZFILE* b, 9642: void* buf, 9642: int len 9642: ); 9642: 9642: extern BZFILE* BZ2_bzWriteOpen ( 9642: int* bzerror, 9642: FILE* f, 9642: int blockSize100k, 9642: int verbosity, 9642: int workFactor 9642: ); 9642: 9642: extern void BZ2_bzWrite ( 9642: int* bzerror, 9642: BZFILE* b, 9642: void* buf, 9642: int len 9642: ); 9642: 9642: extern void BZ2_bzWriteClose ( 9642: int* bzerror, 9642: BZFILE* b, 9642: int abandon, 9642: unsigned int* nbytes_in, 9642: unsigned int* nbytes_out 9642: ); 9642: 9642: extern void BZ2_bzWriteClose64 ( 9642: int* bzerror, 9642: BZFILE* b, 9642: int abandon, 9642: unsigned int* nbytes_in_lo32, 9642: unsigned int* nbytes_in_hi32, 9642: unsigned int* nbytes_out_lo32, 9642: unsigned int* nbytes_out_hi32 9642: ); 9642: 9642: 9642: 9642: 9642: 9642: extern int BZ2_bzBuffToBuffCompress ( 9642: char* dest, 9642: unsigned int* destLen, 9642: char* source, 9642: unsigned int sourceLen, 9642: int blockSize100k, 9642: int verbosity, 9642: int workFactor 9642: ); 9642: 9642: extern int BZ2_bzBuffToBuffDecompress ( 9642: char* dest, 9642: unsigned int* destLen, 9642: char* source, 9642: unsigned int sourceLen, 9642: int small, 9642: int verbosity 9642: ); 9642: # 233 "/usr/include/bzlib.h" 3 4 9642: extern const char * BZ2_bzlibVersion ( 9642: void 9642: ); 9642: 9642: 9642: extern BZFILE * BZ2_bzopen ( 9642: const char *path, 9642: const char *mode 9642: ); 9642: 9642: extern BZFILE * BZ2_bzdopen ( 9642: int fd, 9642: const char *mode 9642: ); 9642: 9642: extern int BZ2_bzread ( 9642: BZFILE* b, 9642: void* buf, 9642: int len 9642: ); 9642: 9642: extern int BZ2_bzwrite ( 9642: BZFILE* b, 9642: void* buf, 9642: int len 9642: ); 9642: 9642: extern int BZ2_bzflush ( 9642: BZFILE* b 9642: ); 9642: 9642: extern void BZ2_bzclose ( 9642: BZFILE* b 9642: ); 9642: 9642: extern const char * BZ2_bzerror ( 9642: BZFILE *b, 9642: int *errnum 9642: ); 9642: 9642: 9642: 9642: } 9642: # 42 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 9642: 9642: 9642: 9642: # 1 "/usr/include/lz4.h" 1 3 4 9642: # 36 "/usr/include/lz4.h" 3 4 9642: extern "C" { 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 44 "/usr/include/lz4.h" 2 3 4 9642: # 142 "/usr/include/lz4.h" 3 4 9642: __attribute__ ((visibility ("default"))) int LZ4_versionNumber (void); 9642: __attribute__ ((visibility ("default"))) const char* LZ4_versionString (void); 9642: # 189 "/usr/include/lz4.h" 3 4 9642: __attribute__ ((visibility ("default"))) int LZ4_compress_default(const char* src, char* dst, int srcSize, int dstCapacity); 9642: # 205 "/usr/include/lz4.h" 3 4 9642: __attribute__ ((visibility ("default"))) int LZ4_decompress_safe (const char* src, char* dst, int compressedSize, int dstCapacity); 9642: # 223 "/usr/include/lz4.h" 3 4 9642: __attribute__ ((visibility ("default"))) int LZ4_compressBound(int inputSize); 9642: # 233 "/usr/include/lz4.h" 3 4 9642: __attribute__ ((visibility ("default"))) int LZ4_compress_fast (const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); 9642: # 242 "/usr/include/lz4.h" 3 4 9642: __attribute__ ((visibility ("default"))) int LZ4_sizeofState(void); 9642: __attribute__ ((visibility ("default"))) int LZ4_compress_fast_extState (void* state, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); 9642: # 269 "/usr/include/lz4.h" 3 4 9642: __attribute__ ((visibility ("default"))) int LZ4_compress_destSize (const char* src, char* dst, int* srcSizePtr, int targetDstSize); 9642: # 306 "/usr/include/lz4.h" 3 4 9642: __attribute__ ((visibility ("default"))) int LZ4_decompress_safe_partial (const char* src, char* dst, int srcSize, int targetOutputSize, int dstCapacity); 9642: 9642: 9642: 9642: 9642: 9642: typedef union LZ4_stream_u LZ4_stream_t; 9642: # 329 "/usr/include/lz4.h" 3 4 9642: __attribute__ ((visibility ("default"))) LZ4_stream_t* LZ4_createStream(void); 9642: __attribute__ ((visibility ("default"))) int LZ4_freeStream (LZ4_stream_t* streamPtr); 9642: # 356 "/usr/include/lz4.h" 3 4 9642: __attribute__ ((visibility ("default"))) void LZ4_resetStream_fast (LZ4_stream_t* streamPtr); 9642: # 369 "/usr/include/lz4.h" 3 4 9642: __attribute__ ((visibility ("default"))) int LZ4_loadDict (LZ4_stream_t* streamPtr, const char* dictionary, int dictSize); 9642: # 394 "/usr/include/lz4.h" 3 4 9642: __attribute__ ((visibility ("default"))) int LZ4_compress_fast_continue (LZ4_stream_t* streamPtr, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); 9642: # 403 "/usr/include/lz4.h" 3 4 9642: __attribute__ ((visibility ("default"))) int LZ4_saveDict (LZ4_stream_t* streamPtr, char* safeBuffer, int maxDictSize); 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef union LZ4_streamDecode_u LZ4_streamDecode_t; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: __attribute__ ((visibility ("default"))) LZ4_streamDecode_t* LZ4_createStreamDecode(void); 9642: __attribute__ ((visibility ("default"))) int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream); 9642: # 430 "/usr/include/lz4.h" 3 4 9642: __attribute__ ((visibility ("default"))) int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const char* dictionary, int dictSize); 9642: # 443 "/usr/include/lz4.h" 3 4 9642: __attribute__ ((visibility ("default"))) int LZ4_decoderRingBufferSize(int maxBlockSize); 9642: # 471 "/usr/include/lz4.h" 3 4 9642: __attribute__ ((visibility ("default"))) int 9642: LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, 9642: const char* src, char* dst, 9642: int srcSize, int dstCapacity); 9642: # 485 "/usr/include/lz4.h" 3 4 9642: __attribute__ ((visibility ("default"))) int 9642: LZ4_decompress_safe_usingDict(const char* src, char* dst, 9642: int srcSize, int dstCapacity, 9642: const char* dictStart, int dictSize); 9642: 9642: __attribute__ ((visibility ("default"))) int 9642: LZ4_decompress_safe_partial_usingDict(const char* src, char* dst, 9642: int compressedSize, 9642: int targetOutputSize, int maxOutputSize, 9642: const char* dictStart, int dictSize); 9642: # 660 "/usr/include/lz4.h" 3 4 9642: typedef int8_t LZ4_i8; 9642: typedef uint8_t LZ4_byte; 9642: typedef uint16_t LZ4_u16; 9642: typedef uint32_t LZ4_u32; 9642: # 677 "/usr/include/lz4.h" 3 4 9642: typedef struct LZ4_stream_t_internal LZ4_stream_t_internal; 9642: struct LZ4_stream_t_internal { 9642: LZ4_u32 hashTable[(1 << (14 -2))]; 9642: const LZ4_byte* dictionary; 9642: const LZ4_stream_t_internal* dictCtx; 9642: LZ4_u32 currentOffset; 9642: LZ4_u32 tableType; 9642: LZ4_u32 dictSize; 9642: 9642: }; 9642: 9642: 9642: union LZ4_stream_u { 9642: char minStateSize[((1UL << 14) + 32)]; 9642: LZ4_stream_t_internal internal_donotuse; 9642: }; 9642: # 709 "/usr/include/lz4.h" 3 4 9642: __attribute__ ((visibility ("default"))) LZ4_stream_t* LZ4_initStream (void* buffer, size_t size); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef struct { 9642: const LZ4_byte* externalDict; 9642: const LZ4_byte* prefixEnd; 9642: size_t extDictSize; 9642: size_t prefixSize; 9642: } LZ4_streamDecode_t_internal; 9642: 9642: 9642: union LZ4_streamDecode_u { 9642: char minStateSize[32]; 9642: LZ4_streamDecode_t_internal internal_donotuse; 9642: } ; 9642: # 765 "/usr/include/lz4.h" 3 4 9642: [[deprecated("use LZ4_compress_default() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compress (const char* src, char* dest, int srcSize); 9642: [[deprecated("use LZ4_compress_default() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compress_limitedOutput (const char* src, char* dest, int srcSize, int maxOutputSize); 9642: [[deprecated("use LZ4_compress_fast_extState() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compress_withState (void* state, const char* source, char* dest, int inputSize); 9642: [[deprecated("use LZ4_compress_fast_extState() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compress_limitedOutput_withState (void* state, const char* source, char* dest, int inputSize, int maxOutputSize); 9642: [[deprecated("use LZ4_compress_fast_continue() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compress_continue (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize); 9642: [[deprecated("use LZ4_compress_fast_continue() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compress_limitedOutput_continue (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize, int maxOutputSize); 9642: 9642: 9642: [[deprecated("use LZ4_decompress_fast() instead")]] __attribute__ ((visibility ("default"))) int LZ4_uncompress (const char* source, char* dest, int outputSize); 9642: [[deprecated("use LZ4_decompress_safe() instead")]] __attribute__ ((visibility ("default"))) int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize); 9642: # 786 "/usr/include/lz4.h" 3 4 9642: [[deprecated("Use LZ4_createStream() instead")]] __attribute__ ((visibility ("default"))) void* LZ4_create (char* inputBuffer); 9642: [[deprecated("Use LZ4_createStream() instead")]] __attribute__ ((visibility ("default"))) int LZ4_sizeofStreamState(void); 9642: [[deprecated("Use LZ4_resetStream() instead")]] __attribute__ ((visibility ("default"))) int LZ4_resetStreamState(void* state, char* inputBuffer); 9642: [[deprecated("Use LZ4_saveDict() instead")]] __attribute__ ((visibility ("default"))) char* LZ4_slideInputBuffer (void* state); 9642: 9642: 9642: [[deprecated("use LZ4_decompress_safe_usingDict() instead")]] __attribute__ ((visibility ("default"))) int LZ4_decompress_safe_withPrefix64k (const char* src, char* dst, int compressedSize, int maxDstSize); 9642: [[deprecated("use LZ4_decompress_fast_usingDict() instead")]] __attribute__ ((visibility ("default"))) int LZ4_decompress_fast_withPrefix64k (const char* src, char* dst, int originalSize); 9642: # 821 "/usr/include/lz4.h" 3 4 9642: [[deprecated("This function is deprecated and unsafe. Consider using LZ4_decompress_safe() instead")]] 9642: __attribute__ ((visibility ("default"))) int LZ4_decompress_fast (const char* src, char* dst, int originalSize); 9642: [[deprecated("This function is deprecated and unsafe. Consider using LZ4_decompress_safe_continue() instead")]] 9642: __attribute__ ((visibility ("default"))) int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* src, char* dst, int originalSize); 9642: [[deprecated("This function is deprecated and unsafe. Consider using LZ4_decompress_safe_usingDict() instead")]] 9642: __attribute__ ((visibility ("default"))) int LZ4_decompress_fast_usingDict (const char* src, char* dst, int originalSize, const char* dictStart, int dictSize); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: __attribute__ ((visibility ("default"))) void LZ4_resetStream (LZ4_stream_t* streamPtr); 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: # 46 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 9642: # 1 "/usr/include/lz4hc.h" 1 3 4 9642: # 38 "/usr/include/lz4hc.h" 3 4 9642: extern "C" { 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/lz4.h" 1 3 4 9642: # 36 "/usr/include/lz4.h" 3 4 9642: extern "C" { 9642: # 841 "/usr/include/lz4.h" 3 4 9642: } 9642: # 44 "/usr/include/lz4hc.h" 2 3 4 9642: # 66 "/usr/include/lz4hc.h" 3 4 9642: __attribute__ ((visibility ("default"))) int LZ4_compress_HC (const char* src, char* dst, int srcSize, int dstCapacity, int compressionLevel); 9642: # 79 "/usr/include/lz4hc.h" 3 4 9642: __attribute__ ((visibility ("default"))) int LZ4_sizeofStateHC(void); 9642: __attribute__ ((visibility ("default"))) int LZ4_compress_HC_extStateHC(void* stateHC, const char* src, char* dst, int srcSize, int maxDstSize, int compressionLevel); 9642: # 91 "/usr/include/lz4hc.h" 3 4 9642: __attribute__ ((visibility ("default"))) int LZ4_compress_HC_destSize(void* stateHC, 9642: const char* src, char* dst, 9642: int* srcSizePtr, int targetDstSize, 9642: int compressionLevel); 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef union LZ4_streamHC_u LZ4_streamHC_t; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: __attribute__ ((visibility ("default"))) LZ4_streamHC_t* LZ4_createStreamHC(void); 9642: __attribute__ ((visibility ("default"))) int LZ4_freeStreamHC (LZ4_streamHC_t* streamHCPtr); 9642: # 155 "/usr/include/lz4hc.h" 3 4 9642: __attribute__ ((visibility ("default"))) void LZ4_resetStreamHC_fast(LZ4_streamHC_t* streamHCPtr, int compressionLevel); 9642: __attribute__ ((visibility ("default"))) int LZ4_loadDictHC (LZ4_streamHC_t* streamHCPtr, const char* dictionary, int dictSize); 9642: 9642: __attribute__ ((visibility ("default"))) int LZ4_compress_HC_continue (LZ4_streamHC_t* streamHCPtr, 9642: const char* src, char* dst, 9642: int srcSize, int maxDstSize); 9642: # 172 "/usr/include/lz4hc.h" 3 4 9642: __attribute__ ((visibility ("default"))) int LZ4_compress_HC_continue_destSize(LZ4_streamHC_t* LZ4_streamHCPtr, 9642: const char* src, char* dst, 9642: int* srcSizePtr, int targetDstSize); 9642: 9642: __attribute__ ((visibility ("default"))) int LZ4_saveDictHC (LZ4_streamHC_t* streamHCPtr, char* safeBuffer, int maxDictSize); 9642: # 204 "/usr/include/lz4hc.h" 3 4 9642: typedef struct LZ4HC_CCtx_internal LZ4HC_CCtx_internal; 9642: struct LZ4HC_CCtx_internal 9642: { 9642: LZ4_u32 hashTable[(1 << 15)]; 9642: LZ4_u16 chainTable[(1<<16)]; 9642: const LZ4_byte* end; 9642: const LZ4_byte* prefixStart; 9642: const LZ4_byte* dictStart; 9642: LZ4_u32 dictLimit; 9642: LZ4_u32 lowLimit; 9642: LZ4_u32 nextToUpdate; 9642: short compressionLevel; 9642: LZ4_i8 favorDecSpeed; 9642: 9642: LZ4_i8 dirty; 9642: const LZ4HC_CCtx_internal* dictCtx; 9642: }; 9642: 9642: 9642: union LZ4_streamHC_u { 9642: char minStateSize[262200]; 9642: LZ4HC_CCtx_internal internal_donotuse; 9642: }; 9642: # 245 "/usr/include/lz4hc.h" 3 4 9642: __attribute__ ((visibility ("default"))) LZ4_streamHC_t* LZ4_initStreamHC(void* buffer, size_t size); 9642: # 254 "/usr/include/lz4hc.h" 3 4 9642: [[deprecated("use LZ4_compress_HC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC (const char* source, char* dest, int inputSize); 9642: [[deprecated("use LZ4_compress_HC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC_limitedOutput (const char* source, char* dest, int inputSize, int maxOutputSize); 9642: [[deprecated("use LZ4_compress_HC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC2 (const char* source, char* dest, int inputSize, int compressionLevel); 9642: [[deprecated("use LZ4_compress_HC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC2_limitedOutput(const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel); 9642: [[deprecated("use LZ4_compress_HC_extStateHC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC_withStateHC (void* state, const char* source, char* dest, int inputSize); 9642: [[deprecated("use LZ4_compress_HC_extStateHC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC_limitedOutput_withStateHC (void* state, const char* source, char* dest, int inputSize, int maxOutputSize); 9642: [[deprecated("use LZ4_compress_HC_extStateHC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC2_withStateHC (void* state, const char* source, char* dest, int inputSize, int compressionLevel); 9642: [[deprecated("use LZ4_compress_HC_extStateHC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC2_limitedOutput_withStateHC(void* state, const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel); 9642: [[deprecated("use LZ4_compress_HC_continue() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC_continue (LZ4_streamHC_t* LZ4_streamHCPtr, const char* source, char* dest, int inputSize); 9642: [[deprecated("use LZ4_compress_HC_continue() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC_limitedOutput_continue (LZ4_streamHC_t* LZ4_streamHCPtr, const char* source, char* dest, int inputSize, int maxOutputSize); 9642: # 274 "/usr/include/lz4hc.h" 3 4 9642: [[deprecated("use LZ4_createStreamHC() instead")]] __attribute__ ((visibility ("default"))) void* LZ4_createHC (const char* inputBuffer); 9642: [[deprecated("use LZ4_freeStreamHC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_freeHC (void* LZ4HC_Data); 9642: 9642: [[deprecated("use LZ4_saveDictHC() instead")]] __attribute__ ((visibility ("default"))) char* LZ4_slideInputBufferHC (void* LZ4HC_Data); 9642: [[deprecated("use LZ4_compress_HC_continue() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC2_continue (void* LZ4HC_Data, const char* source, char* dest, int inputSize, int compressionLevel); 9642: [[deprecated("use LZ4_compress_HC_continue() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC2_limitedOutput_continue (void* LZ4HC_Data, const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel); 9642: [[deprecated("use LZ4_createStreamHC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_sizeofStreamStateHC(void); 9642: [[deprecated("use LZ4_initStreamHC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_resetStreamStateHC(void* state, char* inputBuffer); 9642: # 292 "/usr/include/lz4hc.h" 3 4 9642: __attribute__ ((visibility ("default"))) void LZ4_resetStreamHC (LZ4_streamHC_t* streamHCPtr, int compressionLevel); 9642: 9642: 9642: 9642: } 9642: # 47 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 9642: 9642: 9642: 9642: # 1 "/usr/include/zstd.h" 1 3 4 9642: # 11 "/usr/include/zstd.h" 3 4 9642: extern "C" { 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/limits.h" 1 3 4 9642: # 19 "/usr/include/zstd.h" 2 3 4 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 20 "/usr/include/zstd.h" 2 3 4 9642: # 114 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) unsigned ZSTD_versionNumber(void); 9642: # 123 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) const char* ZSTD_versionString(void); 9642: # 155 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_compress( void* dst, size_t dstCapacity, 9642: const void* src, size_t srcSize, 9642: int compressionLevel); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_decompress( void* dst, size_t dstCapacity, 9642: const void* src, size_t compressedSize); 9642: # 193 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) unsigned long long ZSTD_getFrameContentSize(const void *src, size_t srcSize); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: [[deprecated("Replaced by ZSTD_getFrameContentSize")]] 9642: __attribute__ ((visibility ("default"))) 9642: unsigned long long ZSTD_getDecompressedSize(const void* src, size_t srcSize); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_findFrameCompressedSize(const void* src, size_t srcSize); 9642: # 233 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_compressBound(size_t srcSize); 9642: 9642: 9642: 9642: 9642: 9642: __attribute__ ((visibility ("default"))) unsigned ZSTD_isError(size_t code); 9642: __attribute__ ((visibility ("default"))) const char* ZSTD_getErrorName(size_t code); 9642: __attribute__ ((visibility ("default"))) int ZSTD_minCLevel(void); 9642: __attribute__ ((visibility ("default"))) int ZSTD_maxCLevel(void); 9642: __attribute__ ((visibility ("default"))) int ZSTD_defaultCLevel(void); 9642: # 259 "/usr/include/zstd.h" 3 4 9642: typedef struct ZSTD_CCtx_s ZSTD_CCtx; 9642: __attribute__ ((visibility ("default"))) ZSTD_CCtx* ZSTD_createCCtx(void); 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_freeCCtx(ZSTD_CCtx* cctx); 9642: # 271 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_compressCCtx(ZSTD_CCtx* cctx, 9642: void* dst, size_t dstCapacity, 9642: const void* src, size_t srcSize, 9642: int compressionLevel); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef struct ZSTD_DCtx_s ZSTD_DCtx; 9642: __attribute__ ((visibility ("default"))) ZSTD_DCtx* ZSTD_createDCtx(void); 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_freeDCtx(ZSTD_DCtx* dctx); 9642: 9642: 9642: 9642: 9642: 9642: 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_decompressDCtx(ZSTD_DCtx* dctx, 9642: void* dst, size_t dstCapacity, 9642: const void* src, size_t srcSize); 9642: # 315 "/usr/include/zstd.h" 3 4 9642: typedef enum { ZSTD_fast=1, 9642: ZSTD_dfast=2, 9642: ZSTD_greedy=3, 9642: ZSTD_lazy=4, 9642: ZSTD_lazy2=5, 9642: ZSTD_btlazy2=6, 9642: ZSTD_btopt=7, 9642: ZSTD_btultra=8, 9642: ZSTD_btultra2=9 9642: 9642: 9642: } ZSTD_strategy; 9642: 9642: typedef enum { 9642: 9642: 9642: 9642: 9642: 9642: ZSTD_c_compressionLevel=100, 9642: # 347 "/usr/include/zstd.h" 3 4 9642: ZSTD_c_windowLog=101, 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ZSTD_c_hashLog=102, 9642: 9642: 9642: 9642: 9642: 9642: ZSTD_c_chainLog=103, 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ZSTD_c_searchLog=104, 9642: 9642: 9642: 9642: ZSTD_c_minMatch=105, 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ZSTD_c_targetLength=106, 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ZSTD_c_strategy=107, 9642: 9642: 9642: 9642: 9642: ZSTD_c_targetCBlockSize=130, 9642: # 407 "/usr/include/zstd.h" 3 4 9642: ZSTD_c_enableLongDistanceMatching=160, 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ZSTD_c_ldmHashLog=161, 9642: 9642: 9642: 9642: 9642: 9642: ZSTD_c_ldmMinMatch=162, 9642: 9642: 9642: 9642: ZSTD_c_ldmBucketSizeLog=163, 9642: 9642: 9642: 9642: ZSTD_c_ldmHashRateLog=164, 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ZSTD_c_contentSizeFlag=200, 9642: 9642: 9642: 9642: ZSTD_c_checksumFlag=201, 9642: ZSTD_c_dictIDFlag=202, 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: ZSTD_c_nbWorkers=400, 9642: # 459 "/usr/include/zstd.h" 3 4 9642: ZSTD_c_jobSize=401, 9642: 9642: 9642: 9642: 9642: ZSTD_c_overlapLog=402, 9642: # 500 "/usr/include/zstd.h" 3 4 9642: ZSTD_c_experimentalParam1=500, 9642: ZSTD_c_experimentalParam2=10, 9642: ZSTD_c_experimentalParam3=1000, 9642: ZSTD_c_experimentalParam4=1001, 9642: ZSTD_c_experimentalParam5=1002, 9642: 9642: ZSTD_c_experimentalParam7=1004, 9642: ZSTD_c_experimentalParam8=1005, 9642: ZSTD_c_experimentalParam9=1006, 9642: ZSTD_c_experimentalParam10=1007, 9642: ZSTD_c_experimentalParam11=1008, 9642: ZSTD_c_experimentalParam12=1009, 9642: ZSTD_c_experimentalParam13=1010, 9642: ZSTD_c_experimentalParam14=1011, 9642: ZSTD_c_experimentalParam15=1012, 9642: ZSTD_c_experimentalParam16=1013, 9642: ZSTD_c_experimentalParam17=1014, 9642: ZSTD_c_experimentalParam18=1015, 9642: ZSTD_c_experimentalParam19=1016 9642: } ZSTD_cParameter; 9642: 9642: typedef struct { 9642: size_t error; 9642: int lowerBound; 9642: int upperBound; 9642: } ZSTD_bounds; 9642: # 534 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter cParam); 9642: # 547 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_CCtx_setParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int value); 9642: # 564 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_CCtx_setPledgedSrcSize(ZSTD_CCtx* cctx, unsigned long long pledgedSrcSize); 9642: 9642: typedef enum { 9642: ZSTD_reset_session_only = 1, 9642: ZSTD_reset_parameters = 2, 9642: ZSTD_reset_session_and_parameters = 3 9642: } ZSTD_ResetDirective; 9642: # 586 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_CCtx_reset(ZSTD_CCtx* cctx, ZSTD_ResetDirective reset); 9642: # 600 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_compress2( ZSTD_CCtx* cctx, 9642: void* dst, size_t dstCapacity, 9642: const void* src, size_t srcSize); 9642: # 617 "/usr/include/zstd.h" 3 4 9642: typedef enum { 9642: 9642: ZSTD_d_windowLogMax=100, 9642: # 638 "/usr/include/zstd.h" 3 4 9642: ZSTD_d_experimentalParam1=1000, 9642: ZSTD_d_experimentalParam2=1001, 9642: ZSTD_d_experimentalParam3=1002, 9642: ZSTD_d_experimentalParam4=1003, 9642: ZSTD_d_experimentalParam5=1004, 9642: ZSTD_d_experimentalParam6=1005 9642: 9642: } ZSTD_dParameter; 9642: # 654 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) ZSTD_bounds ZSTD_dParam_getBounds(ZSTD_dParameter dParam); 9642: # 663 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_DCtx_setParameter(ZSTD_DCtx* dctx, ZSTD_dParameter param, int value); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_DCtx_reset(ZSTD_DCtx* dctx, ZSTD_ResetDirective reset); 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef struct ZSTD_inBuffer_s { 9642: const void* src; 9642: size_t size; 9642: size_t pos; 9642: } ZSTD_inBuffer; 9642: 9642: typedef struct ZSTD_outBuffer_s { 9642: void* dst; 9642: size_t size; 9642: size_t pos; 9642: } ZSTD_outBuffer; 9642: # 753 "/usr/include/zstd.h" 3 4 9642: typedef ZSTD_CCtx ZSTD_CStream; 9642: 9642: 9642: __attribute__ ((visibility ("default"))) ZSTD_CStream* ZSTD_createCStream(void); 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_freeCStream(ZSTD_CStream* zcs); 9642: 9642: 9642: typedef enum { 9642: ZSTD_e_continue=0, 9642: ZSTD_e_flush=1, 9642: 9642: 9642: 9642: ZSTD_e_end=2 9642: 9642: 9642: 9642: 9642: } ZSTD_EndDirective; 9642: # 800 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_compressStream2( ZSTD_CCtx* cctx, 9642: ZSTD_outBuffer* output, 9642: ZSTD_inBuffer* input, 9642: ZSTD_EndDirective endOp); 9642: # 819 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_CStreamInSize(void); 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_CStreamOutSize(void); 9642: # 839 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_initCStream(ZSTD_CStream* zcs, int compressionLevel); 9642: 9642: 9642: 9642: 9642: 9642: 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_compressStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output, ZSTD_inBuffer* input); 9642: 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_flushStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output); 9642: 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_endStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output); 9642: # 880 "/usr/include/zstd.h" 3 4 9642: typedef ZSTD_DCtx ZSTD_DStream; 9642: 9642: 9642: __attribute__ ((visibility ("default"))) ZSTD_DStream* ZSTD_createDStream(void); 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_freeDStream(ZSTD_DStream* zds); 9642: # 896 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_initDStream(ZSTD_DStream* zds); 9642: # 919 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inBuffer* input); 9642: 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_DStreamInSize(void); 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_DStreamOutSize(void); 9642: # 935 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_compress_usingDict(ZSTD_CCtx* ctx, 9642: void* dst, size_t dstCapacity, 9642: const void* src, size_t srcSize, 9642: const void* dict,size_t dictSize, 9642: int compressionLevel); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_decompress_usingDict(ZSTD_DCtx* dctx, 9642: void* dst, size_t dstCapacity, 9642: const void* src, size_t srcSize, 9642: const void* dict,size_t dictSize); 9642: 9642: 9642: 9642: 9642: 9642: typedef struct ZSTD_CDict_s ZSTD_CDict; 9642: # 970 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) ZSTD_CDict* ZSTD_createCDict(const void* dictBuffer, size_t dictSize, 9642: int compressionLevel); 9642: 9642: 9642: 9642: 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_freeCDict(ZSTD_CDict* CDict); 9642: 9642: 9642: 9642: 9642: 9642: 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_compress_usingCDict(ZSTD_CCtx* cctx, 9642: void* dst, size_t dstCapacity, 9642: const void* src, size_t srcSize, 9642: const ZSTD_CDict* cdict); 9642: 9642: 9642: typedef struct ZSTD_DDict_s ZSTD_DDict; 9642: 9642: 9642: 9642: 9642: __attribute__ ((visibility ("default"))) ZSTD_DDict* ZSTD_createDDict(const void* dictBuffer, size_t dictSize); 9642: 9642: 9642: 9642: 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_freeDDict(ZSTD_DDict* ddict); 9642: 9642: 9642: 9642: 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_decompress_usingDDict(ZSTD_DCtx* dctx, 9642: void* dst, size_t dstCapacity, 9642: const void* src, size_t srcSize, 9642: const ZSTD_DDict* ddict); 9642: # 1018 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) unsigned ZSTD_getDictID_fromDict(const void* dict, size_t dictSize); 9642: 9642: 9642: 9642: 9642: 9642: __attribute__ ((visibility ("default"))) unsigned ZSTD_getDictID_fromCDict(const ZSTD_CDict* cdict); 9642: 9642: 9642: 9642: 9642: 9642: __attribute__ ((visibility ("default"))) unsigned ZSTD_getDictID_fromDDict(const ZSTD_DDict* ddict); 9642: # 1042 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) unsigned ZSTD_getDictID_fromFrame(const void* src, size_t srcSize); 9642: # 1079 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_CCtx_loadDictionary(ZSTD_CCtx* cctx, const void* dict, size_t dictSize); 9642: # 1093 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_CCtx_refCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict); 9642: # 1114 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_CCtx_refPrefix(ZSTD_CCtx* cctx, 9642: const void* prefix, size_t prefixSize); 9642: # 1132 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_DCtx_loadDictionary(ZSTD_DCtx* dctx, const void* dict, size_t dictSize); 9642: # 1151 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_DCtx_refDDict(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict); 9642: # 1169 "/usr/include/zstd.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_DCtx_refPrefix(ZSTD_DCtx* dctx, 9642: const void* prefix, size_t prefixSize); 9642: 9642: 9642: 9642: 9642: 9642: 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_sizeof_CCtx(const ZSTD_CCtx* cctx); 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_sizeof_DCtx(const ZSTD_DCtx* dctx); 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_sizeof_CStream(const ZSTD_CStream* zcs); 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_sizeof_DStream(const ZSTD_DStream* zds); 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_sizeof_CDict(const ZSTD_CDict* cdict); 9642: __attribute__ ((visibility ("default"))) size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict); 9642: # 3088 "/usr/include/zstd.h" 3 4 9642: } 9642: # 51 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 9642: 9642: 9642: # 1 "/usr/include/zdict.h" 1 3 4 9642: # 12 "/usr/include/zdict.h" 3 4 9642: extern "C" { 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 20 "/usr/include/zdict.h" 2 3 4 9642: # 210 "/usr/include/zdict.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZDICT_trainFromBuffer(void* dictBuffer, size_t dictBufferCapacity, 9642: const void* samplesBuffer, 9642: const size_t* samplesSizes, unsigned nbSamples); 9642: 9642: typedef struct { 9642: int compressionLevel; 9642: unsigned notificationLevel; 9642: unsigned dictID; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: } ZDICT_params_t; 9642: # 262 "/usr/include/zdict.h" 3 4 9642: __attribute__ ((visibility ("default"))) size_t ZDICT_finalizeDictionary(void* dstDictBuffer, size_t maxDictSize, 9642: const void* dictContent, size_t dictContentSize, 9642: const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples, 9642: ZDICT_params_t parameters); 9642: 9642: 9642: 9642: __attribute__ ((visibility ("default"))) unsigned ZDICT_getDictID(const void* dictBuffer, size_t dictSize); 9642: __attribute__ ((visibility ("default"))) size_t ZDICT_getDictHeaderSize(const void* dictBuffer, size_t dictSize); 9642: __attribute__ ((visibility ("default"))) unsigned ZDICT_isError(size_t errorCode); 9642: __attribute__ ((visibility ("default"))) const char* ZDICT_getErrorName(size_t errorCode); 9642: # 473 "/usr/include/zdict.h" 3 4 9642: } 9642: # 54 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 9642: # 62 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: 9642: # 62 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: namespace rocksdb { 9642: # 88 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: class ZSTDUncompressCachedData { 9642: public: 9642: using ZSTDNativeContext = ZSTD_DCtx*; 9642: ZSTDUncompressCachedData() {} 9642: 9642: ZSTDUncompressCachedData(const ZSTDUncompressCachedData& o) = delete; 9642: ZSTDUncompressCachedData& operator=(const ZSTDUncompressCachedData&) = delete; 9642: ZSTDUncompressCachedData(ZSTDUncompressCachedData&& o) noexcept 9642: : ZSTDUncompressCachedData() { 9642: *this = std::move(o); 9642: } 9642: ZSTDUncompressCachedData& operator=(ZSTDUncompressCachedData&& o) noexcept { 9642: 9642: # 100 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 100 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: zstd_ctx_ == nullptr 9642: # 100 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 100 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "zstd_ctx_ == nullptr" 9642: # 100 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 100 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: std::swap(zstd_ctx_, o.zstd_ctx_); 9642: std::swap(cache_idx_, o.cache_idx_); 9642: return *this; 9642: } 9642: ZSTDNativeContext Get() const { return zstd_ctx_; } 9642: int64_t GetCacheIndex() const { return cache_idx_; } 9642: void CreateIfNeeded() { 9642: if (zstd_ctx_ == nullptr) { 9642: 9642: 9642: 9642: 9642: zstd_ctx_ = ZSTD_createDCtx(); 9642: 9642: cache_idx_ = -1; 9642: } 9642: } 9642: void InitFromCache(const ZSTDUncompressCachedData& o, int64_t idx) { 9642: zstd_ctx_ = o.zstd_ctx_; 9642: cache_idx_ = idx; 9642: } 9642: ~ZSTDUncompressCachedData() { 9642: if (zstd_ctx_ != nullptr && cache_idx_ == -1) { 9642: ZSTD_freeDCtx(zstd_ctx_); 9642: } 9642: } 9642: 9642: private: 9642: ZSTDNativeContext zstd_ctx_ = nullptr; 9642: int64_t cache_idx_ = -1; 9642: }; 9642: 9642: } 9642: # 163 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: namespace rocksdb { 9642: 9642: 9642: 9642: struct CompressionDict { 9642: 9642: ZSTD_CDict* zstd_cdict_ = nullptr; 9642: 9642: std::string dict_; 9642: 9642: public: 9642: 9642: CompressionDict(std::string dict, CompressionType type, int level) { 9642: 9642: 9642: 9642: dict_ = std::move(dict); 9642: 9642: zstd_cdict_ = nullptr; 9642: if (!dict_.empty() && (type == kZSTD || type == kZSTDNotFinalCompression)) { 9642: if (level == CompressionOptions::kDefaultCompressionLevel) { 9642: 9642: 9642: 9642: 9642: 9642: level = 3; 9642: } 9642: 9642: 9642: zstd_cdict_ = ZSTD_createCDict(dict_.data(), dict_.size(), level); 9642: 9642: # 194 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 194 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: zstd_cdict_ != nullptr 9642: # 194 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 194 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "zstd_cdict_ != nullptr" 9642: # 194 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 194 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: } 9642: 9642: } 9642: 9642: ~CompressionDict() { 9642: 9642: size_t res = 0; 9642: if (zstd_cdict_ != nullptr) { 9642: res = ZSTD_freeCDict(zstd_cdict_); 9642: } 9642: 9642: # 205 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 205 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: res == 0 9642: # 205 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 205 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "res == 0" 9642: # 205 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 205 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: (void)res; 9642: 9642: } 9642: 9642: 9642: const ZSTD_CDict* GetDigestedZstdCDict() const { return zstd_cdict_; } 9642: 9642: 9642: Slice GetRawDict() const { return dict_; } 9642: 9642: static const CompressionDict& GetEmptyDict() { 9642: static CompressionDict empty_dict{}; 9642: return empty_dict; 9642: } 9642: 9642: CompressionDict() = default; 9642: 9642: CompressionDict(const CompressionDict&) = delete; 9642: CompressionDict& operator=(const CompressionDict&) = delete; 9642: CompressionDict(CompressionDict&&) = delete; 9642: CompressionDict& operator=(CompressionDict&&) = delete; 9642: }; 9642: 9642: 9642: 9642: struct UncompressionDict { 9642: 9642: 9642: std::string dict_; 9642: 9642: 9642: 9642: 9642: CacheAllocationPtr allocation_; 9642: 9642: 9642: 9642: 9642: Slice slice_; 9642: # 254 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: UncompressionDict(std::string dict, bool ) 9642: 9642: : dict_(std::move(dict)), slice_(dict_) { 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: 9642: 9642: 9642: 9642: 9642: UncompressionDict(Slice slice, CacheAllocationPtr&& allocation, 9642: bool ) 9642: 9642: : allocation_(std::move(allocation)), slice_(std::move(slice)) { 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: 9642: UncompressionDict(UncompressionDict&& rhs) 9642: : dict_(std::move(rhs.dict_)), 9642: allocation_(std::move(rhs.allocation_)), 9642: slice_(std::move(rhs.slice_)) 9642: 9642: 9642: 9642: 9642: { 9642: 9642: 9642: 9642: } 9642: 9642: ~UncompressionDict() { 9642: # 304 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: } 9642: 9642: UncompressionDict& operator=(UncompressionDict&& rhs) { 9642: if (this == &rhs) { 9642: return *this; 9642: } 9642: 9642: dict_ = std::move(rhs.dict_); 9642: allocation_ = std::move(rhs.allocation_); 9642: slice_ = std::move(rhs.slice_); 9642: 9642: 9642: 9642: 9642: 9642: 9642: return *this; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: bool own_bytes() const { return !dict_.empty() || allocation_; } 9642: 9642: const Slice& GetRawDict() const { return slice_; } 9642: 9642: 9642: const Slice& ContentSlice() const { return slice_; } 9642: static constexpr CacheEntryRole kCacheEntryRole = CacheEntryRole::kOtherBlock; 9642: static constexpr BlockType kBlockType = BlockType::kCompressionDictionary; 9642: 9642: 9642: 9642: 9642: 9642: static const UncompressionDict& GetEmptyDict() { 9642: static UncompressionDict empty_dict{}; 9642: return empty_dict; 9642: } 9642: 9642: size_t ApproximateMemoryUsage() const { 9642: size_t usage = sizeof(struct UncompressionDict); 9642: usage += dict_.size(); 9642: if (allocation_) { 9642: auto allocator = allocation_.get_deleter().allocator; 9642: if (allocator) { 9642: usage += allocator->UsableSize(allocation_.get(), slice_.size()); 9642: } else { 9642: usage += slice_.size(); 9642: } 9642: } 9642: 9642: 9642: 9642: return usage; 9642: } 9642: 9642: UncompressionDict() = default; 9642: 9642: UncompressionDict(const CompressionDict&) = delete; 9642: UncompressionDict& operator=(const CompressionDict&) = delete; 9642: }; 9642: 9642: class CompressionContext { 9642: private: 9642: 9642: ZSTD_CCtx* zstd_ctx_ = nullptr; 9642: 9642: ZSTD_CCtx* CreateZSTDContext() { 9642: 9642: 9642: 9642: return ZSTD_createCCtx(); 9642: 9642: } 9642: 9642: void CreateNativeContext(CompressionType type, int level, bool checksum) { 9642: if (type == kZSTD || type == kZSTDNotFinalCompression) { 9642: zstd_ctx_ = CreateZSTDContext(); 9642: 9642: if (level == CompressionOptions::kDefaultCompressionLevel) { 9642: 9642: 9642: level = 3; 9642: } 9642: size_t err = 9642: ZSTD_CCtx_setParameter(zstd_ctx_, ZSTD_c_compressionLevel, level); 9642: if (ZSTD_isError(err)) { 9642: 9642: # 393 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 393 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: false 9642: # 393 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 393 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "false" 9642: # 393 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 393 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: ZSTD_freeCCtx(zstd_ctx_); 9642: zstd_ctx_ = CreateZSTDContext(); 9642: } 9642: if (checksum) { 9642: err = ZSTD_CCtx_setParameter(zstd_ctx_, ZSTD_c_checksumFlag, 1); 9642: if (ZSTD_isError(err)) { 9642: 9642: # 400 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 400 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: false 9642: # 400 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 400 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "false" 9642: # 400 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 400 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: ZSTD_freeCCtx(zstd_ctx_); 9642: zstd_ctx_ = CreateZSTDContext(); 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: } 9642: } 9642: void DestroyNativeContext() { 9642: if (zstd_ctx_ != nullptr) { 9642: ZSTD_freeCCtx(zstd_ctx_); 9642: } 9642: } 9642: 9642: public: 9642: 9642: ZSTD_CCtx* ZSTDPreallocCtx() const { 9642: 9642: # 420 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 420 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: zstd_ctx_ != nullptr 9642: # 420 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 420 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "zstd_ctx_ != nullptr" 9642: # 420 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 420 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: return zstd_ctx_; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: public: 9642: explicit CompressionContext(CompressionType type, 9642: const CompressionOptions& options) { 9642: CreateNativeContext(type, options.level, options.checksum); 9642: } 9642: ~CompressionContext() { DestroyNativeContext(); } 9642: CompressionContext(const CompressionContext&) = delete; 9642: CompressionContext& operator=(const CompressionContext&) = delete; 9642: }; 9642: 9642: class CompressionInfo { 9642: const CompressionOptions& opts_; 9642: const CompressionContext& context_; 9642: const CompressionDict& dict_; 9642: const CompressionType type_; 9642: const uint64_t sample_for_compression_; 9642: 9642: public: 9642: CompressionInfo(const CompressionOptions& _opts, 9642: const CompressionContext& _context, 9642: const CompressionDict& _dict, CompressionType _type, 9642: uint64_t _sample_for_compression) 9642: : opts_(_opts), 9642: context_(_context), 9642: dict_(_dict), 9642: type_(_type), 9642: sample_for_compression_(_sample_for_compression) {} 9642: 9642: const CompressionOptions& options() const { return opts_; } 9642: const CompressionContext& context() const { return context_; } 9642: const CompressionDict& dict() const { return dict_; } 9642: CompressionType type() const { return type_; } 9642: uint64_t SampleForCompression() const { return sample_for_compression_; } 9642: }; 9642: 9642: class UncompressionContext { 9642: private: 9642: CompressionContextCache* ctx_cache_ = nullptr; 9642: ZSTDUncompressCachedData uncomp_cached_data_; 9642: 9642: public: 9642: explicit UncompressionContext(CompressionType type) { 9642: if (type == kZSTD || type == kZSTDNotFinalCompression) { 9642: ctx_cache_ = CompressionContextCache::Instance(); 9642: uncomp_cached_data_ = ctx_cache_->GetCachedZSTDUncompressData(); 9642: } 9642: } 9642: ~UncompressionContext() { 9642: if (uncomp_cached_data_.GetCacheIndex() != -1) { 9642: 9642: # 479 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 479 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ctx_cache_ != nullptr 9642: # 479 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 479 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "ctx_cache_ != nullptr" 9642: # 479 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 479 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: ctx_cache_->ReturnCachedZSTDUncompressData( 9642: uncomp_cached_data_.GetCacheIndex()); 9642: } 9642: } 9642: UncompressionContext(const UncompressionContext&) = delete; 9642: UncompressionContext& operator=(const UncompressionContext&) = delete; 9642: 9642: ZSTDUncompressCachedData::ZSTDNativeContext GetZSTDContext() const { 9642: return uncomp_cached_data_.Get(); 9642: } 9642: }; 9642: 9642: class UncompressionInfo { 9642: const UncompressionContext& context_; 9642: const UncompressionDict& dict_; 9642: const CompressionType type_; 9642: 9642: public: 9642: UncompressionInfo(const UncompressionContext& _context, 9642: const UncompressionDict& _dict, CompressionType _type) 9642: : context_(_context), dict_(_dict), type_(_type) {} 9642: 9642: const UncompressionContext& context() const { return context_; } 9642: const UncompressionDict& dict() const { return dict_; } 9642: CompressionType type() const { return type_; } 9642: }; 9642: 9642: inline bool Snappy_Supported() { 9642: 9642: return true; 9642: 9642: 9642: 9642: } 9642: 9642: inline bool Zlib_Supported() { 9642: 9642: return true; 9642: 9642: 9642: 9642: } 9642: 9642: inline bool BZip2_Supported() { 9642: 9642: return true; 9642: 9642: 9642: 9642: } 9642: 9642: inline bool LZ4_Supported() { 9642: 9642: return true; 9642: 9642: 9642: 9642: } 9642: 9642: inline bool XPRESS_Supported() { 9642: 9642: 9642: 9642: return false; 9642: 9642: } 9642: 9642: inline bool ZSTD_Supported() { 9642: 9642: 9642: return (ZSTD_versionNumber() >= 800); 9642: 9642: 9642: 9642: } 9642: 9642: inline bool ZSTDNotFinal_Supported() { 9642: 9642: return true; 9642: 9642: 9642: 9642: } 9642: 9642: inline bool ZSTD_Streaming_Supported() { 9642: 9642: return true; 9642: 9642: 9642: 9642: } 9642: 9642: inline bool StreamingCompressionTypeSupported( 9642: CompressionType compression_type) { 9642: switch (compression_type) { 9642: case kNoCompression: 9642: return true; 9642: case kZSTD: 9642: return ZSTD_Streaming_Supported(); 9642: default: 9642: return false; 9642: } 9642: } 9642: 9642: inline bool CompressionTypeSupported(CompressionType compression_type) { 9642: switch (compression_type) { 9642: case kNoCompression: 9642: return true; 9642: case kSnappyCompression: 9642: return Snappy_Supported(); 9642: case kZlibCompression: 9642: return Zlib_Supported(); 9642: case kBZip2Compression: 9642: return BZip2_Supported(); 9642: case kLZ4Compression: 9642: return LZ4_Supported(); 9642: case kLZ4HCCompression: 9642: return LZ4_Supported(); 9642: case kXpressCompression: 9642: return XPRESS_Supported(); 9642: case kZSTDNotFinalCompression: 9642: return ZSTDNotFinal_Supported(); 9642: case kZSTD: 9642: return ZSTD_Supported(); 9642: default: 9642: 9642: # 605 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 605 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: false 9642: # 605 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 605 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "false" 9642: # 605 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 605 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: return false; 9642: } 9642: } 9642: 9642: inline bool DictCompressionTypeSupported(CompressionType compression_type) { 9642: switch (compression_type) { 9642: case kNoCompression: 9642: return false; 9642: case kSnappyCompression: 9642: return false; 9642: case kZlibCompression: 9642: return Zlib_Supported(); 9642: case kBZip2Compression: 9642: return false; 9642: case kLZ4Compression: 9642: case kLZ4HCCompression: 9642: 9642: return LZ4_Supported(); 9642: 9642: 9642: 9642: case kXpressCompression: 9642: return false; 9642: case kZSTDNotFinalCompression: 9642: 9642: return ZSTDNotFinal_Supported(); 9642: 9642: 9642: 9642: case kZSTD: 9642: 9642: return ZSTD_Supported(); 9642: 9642: 9642: 9642: default: 9642: 9642: # 642 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 642 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: false 9642: # 642 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 642 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "false" 9642: # 642 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 642 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: return false; 9642: } 9642: } 9642: 9642: inline std::string CompressionTypeToString(CompressionType compression_type) { 9642: switch (compression_type) { 9642: case kNoCompression: 9642: return "NoCompression"; 9642: case kSnappyCompression: 9642: return "Snappy"; 9642: case kZlibCompression: 9642: return "Zlib"; 9642: case kBZip2Compression: 9642: return "BZip2"; 9642: case kLZ4Compression: 9642: return "LZ4"; 9642: case kLZ4HCCompression: 9642: return "LZ4HC"; 9642: case kXpressCompression: 9642: return "Xpress"; 9642: case kZSTD: 9642: return "ZSTD"; 9642: case kZSTDNotFinalCompression: 9642: return "ZSTDNotFinal"; 9642: case kDisableCompressionOption: 9642: return "DisableOption"; 9642: default: 9642: 9642: # 670 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 670 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: false 9642: # 670 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 670 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "false" 9642: # 670 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 670 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: return ""; 9642: } 9642: } 9642: 9642: inline std::string CompressionOptionsToString( 9642: CompressionOptions& compression_options) { 9642: std::string result; 9642: result.reserve(512); 9642: result.append("window_bits=") 9642: .append(std::to_string(compression_options.window_bits)) 9642: .append("; "); 9642: result.append("level=") 9642: .append(std::to_string(compression_options.level)) 9642: .append("; "); 9642: result.append("strategy=") 9642: .append(std::to_string(compression_options.strategy)) 9642: .append("; "); 9642: result.append("max_dict_bytes=") 9642: .append(std::to_string(compression_options.max_dict_bytes)) 9642: .append("; "); 9642: result.append("zstd_max_train_bytes=") 9642: .append(std::to_string(compression_options.zstd_max_train_bytes)) 9642: .append("; "); 9642: result.append("enabled=") 9642: .append(std::to_string(compression_options.enabled)) 9642: .append("; "); 9642: result.append("max_dict_buffer_bytes=") 9642: .append(std::to_string(compression_options.max_dict_buffer_bytes)) 9642: .append("; "); 9642: result.append("use_zstd_dict_trainer=") 9642: .append(std::to_string(compression_options.use_zstd_dict_trainer)) 9642: .append("; "); 9642: return result; 9642: } 9642: # 713 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: inline bool Snappy_Compress(const CompressionInfo& , const char* input, 9642: size_t length, ::std::string* output) { 9642: 9642: output->resize(snappy::MaxCompressedLength(length)); 9642: size_t outlen; 9642: snappy::RawCompress(input, length, &(*output)[0], &outlen); 9642: output->resize(outlen); 9642: return true; 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: 9642: inline CacheAllocationPtr Snappy_Uncompress( 9642: const char* input, size_t length, size_t* uncompressed_size, 9642: MemoryAllocator* allocator = nullptr) { 9642: 9642: size_t uncompressed_length = 0; 9642: if (!snappy::GetUncompressedLength(input, length, &uncompressed_length)) { 9642: return nullptr; 9642: } 9642: 9642: CacheAllocationPtr output = AllocateBlock(uncompressed_length, allocator); 9642: 9642: if (!snappy::RawUncompress(input, length, output.get())) { 9642: return nullptr; 9642: } 9642: 9642: *uncompressed_size = uncompressed_length; 9642: 9642: return output; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: 9642: namespace compression { 9642: 9642: inline size_t PutDecompressedSizeInfo(std::string* output, uint32_t length) { 9642: PutVarint32(output, length); 9642: return output->size(); 9642: } 9642: 9642: inline bool GetDecompressedSizeInfo(const char** input_data, 9642: size_t* input_length, 9642: uint32_t* output_len) { 9642: auto new_input_data = 9642: GetVarint32Ptr(*input_data, *input_data + *input_length, output_len); 9642: if (new_input_data == nullptr) { 9642: return false; 9642: } 9642: *input_length -= (new_input_data - *input_data); 9642: *input_data = new_input_data; 9642: return true; 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline bool Zlib_Compress(const CompressionInfo& info, 9642: uint32_t compress_format_version, const char* input, 9642: size_t length, ::std::string* output) { 9642: 9642: if (length > std::numeric_limits::max()) { 9642: 9642: return false; 9642: } 9642: 9642: size_t output_header_len = 0; 9642: if (compress_format_version == 2) { 9642: output_header_len = compression::PutDecompressedSizeInfo( 9642: output, static_cast(length)); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: static const int memLevel = 8; 9642: int level; 9642: if (info.options().level == CompressionOptions::kDefaultCompressionLevel) { 9642: level = 9642: # 806 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (-1) 9642: # 806 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: } else { 9642: level = info.options().level; 9642: } 9642: z_stream _stream; 9642: memset(&_stream, 0, sizeof(z_stream)); 9642: int st = 9642: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: deflateInit2_(( 9642: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: &_stream 9642: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ),( 9642: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: level 9642: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ),(8),( 9642: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: info.options().window_bits 9642: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ),( 9642: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: memLevel 9642: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ), ( 9642: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: info.options().strategy 9642: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ), "1.3.1", (int)sizeof(z_stream)) 9642: 9642: # 813 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: if (st != 9642: # 814 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: 0 9642: # 814 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ) { 9642: return false; 9642: } 9642: 9642: Slice compression_dict = info.dict().GetRawDict(); 9642: if (compression_dict.size()) { 9642: 9642: st = deflateSetDictionary( 9642: &_stream, reinterpret_cast(compression_dict.data()), 9642: static_cast(compression_dict.size())); 9642: if (st != 9642: # 824 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: 0 9642: # 824 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ) { 9642: deflateEnd(&_stream); 9642: return false; 9642: } 9642: } 9642: 9642: 9642: size_t upper_bound = 9642: deflateBound(&_stream, static_cast(length)); 9642: output->resize(output_header_len + upper_bound); 9642: 9642: 9642: _stream.next_in = (Bytef*)input; 9642: _stream.avail_in = static_cast(length); 9642: 9642: 9642: _stream.avail_out = static_cast(upper_bound); 9642: _stream.next_out = reinterpret_cast(&(*output)[output_header_len]); 9642: 9642: bool compressed = false; 9642: st = deflate(&_stream, 9642: # 844 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: 4 9642: # 844 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ); 9642: if (st == 9642: # 845 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: 1 9642: # 845 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ) { 9642: compressed = true; 9642: output->resize(output->size() - _stream.avail_out); 9642: } 9642: 9642: 9642: 9642: 9642: deflateEnd(&_stream); 9642: return compressed; 9642: # 863 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline CacheAllocationPtr Zlib_Uncompress( 9642: const UncompressionInfo& info, const char* input_data, size_t input_length, 9642: size_t* uncompressed_size, uint32_t compress_format_version, 9642: MemoryAllocator* allocator = nullptr, int windowBits = -14) { 9642: 9642: uint32_t output_len = 0; 9642: if (compress_format_version == 2) { 9642: if (!compression::GetDecompressedSizeInfo(&input_data, &input_length, 9642: &output_len)) { 9642: return nullptr; 9642: } 9642: } else { 9642: 9642: 9642: size_t proposed_output_len = ((input_length * 5) & (~(4096 - 1))) + 4096; 9642: output_len = static_cast( 9642: std::min(proposed_output_len, 9642: static_cast(std::numeric_limits::max()))); 9642: } 9642: 9642: z_stream _stream; 9642: memset(&_stream, 0, sizeof(z_stream)); 9642: 9642: 9642: 9642: 9642: int st = 9642: 9642: # 898 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: inflateInit2_(( 9642: # 898 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: &_stream 9642: # 898 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ), ( 9642: # 898 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: windowBits > 0 ? windowBits + 32 : windowBits 9642: # 898 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ), "1.3.1", (int)sizeof(z_stream)) 9642: # 898 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: if (st != 9642: # 899 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: 0 9642: # 899 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ) { 9642: return nullptr; 9642: } 9642: 9642: const Slice& compression_dict = info.dict().GetRawDict(); 9642: if (compression_dict.size()) { 9642: 9642: st = inflateSetDictionary( 9642: &_stream, reinterpret_cast(compression_dict.data()), 9642: static_cast(compression_dict.size())); 9642: if (st != 9642: # 909 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: 0 9642: # 909 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ) { 9642: return nullptr; 9642: } 9642: } 9642: 9642: _stream.next_in = (Bytef*)input_data; 9642: _stream.avail_in = static_cast(input_length); 9642: 9642: auto output = AllocateBlock(output_len, allocator); 9642: 9642: _stream.next_out = (Bytef*)output.get(); 9642: _stream.avail_out = static_cast(output_len); 9642: 9642: bool done = false; 9642: while (!done) { 9642: st = inflate(&_stream, 9642: # 924 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: 2 9642: # 924 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ); 9642: switch (st) { 9642: case 9642: # 926 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: 1 9642: # 926 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: : 9642: done = true; 9642: break; 9642: case 9642: # 929 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: 0 9642: # 929 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: : { 9642: 9642: 9642: 9642: 9642: # 933 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 933 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: compress_format_version != 2 9642: # 933 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 933 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "compress_format_version != 2" 9642: # 933 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 933 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: size_t old_sz = output_len; 9642: uint32_t output_len_delta = output_len / 5; 9642: output_len += output_len_delta < 10 ? 10 : output_len_delta; 9642: auto tmp = AllocateBlock(output_len, allocator); 9642: memcpy(tmp.get(), output.get(), old_sz); 9642: output = std::move(tmp); 9642: 9642: 9642: _stream.next_out = (Bytef*)(output.get() + old_sz); 9642: _stream.avail_out = static_cast(output_len - old_sz); 9642: break; 9642: } 9642: case 9642: # 946 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (-5) 9642: # 946 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: : 9642: default: 9642: inflateEnd(&_stream); 9642: return nullptr; 9642: } 9642: } 9642: 9642: 9642: 9642: # 954 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 954 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: compress_format_version != 2 || _stream.avail_out == 0 9642: # 954 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 954 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "compress_format_version != 2 || _stream.avail_out == 0" 9642: # 954 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 954 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: 9642: # 955 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 955 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: output_len >= _stream.avail_out 9642: # 955 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 955 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "output_len >= _stream.avail_out" 9642: # 955 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 955 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: *uncompressed_size = output_len - _stream.avail_out; 9642: inflateEnd(&_stream); 9642: return output; 9642: # 969 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: } 9642: 9642: 9642: 9642: 9642: 9642: inline bool BZip2_Compress(const CompressionInfo& , 9642: uint32_t compress_format_version, const char* input, 9642: size_t length, ::std::string* output) { 9642: 9642: if (length > std::numeric_limits::max()) { 9642: 9642: return false; 9642: } 9642: size_t output_header_len = 0; 9642: if (compress_format_version == 2) { 9642: output_header_len = compression::PutDecompressedSizeInfo( 9642: output, static_cast(length)); 9642: } 9642: 9642: 9642: output->resize(output_header_len + length); 9642: 9642: bz_stream _stream; 9642: memset(&_stream, 0, sizeof(bz_stream)); 9642: 9642: 9642: 9642: 9642: int st = BZ2_bzCompressInit(&_stream, 1, 0, 30); 9642: if (st != 9642: # 999 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: 0 9642: # 999 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ) { 9642: return false; 9642: } 9642: 9642: 9642: _stream.next_in = (char*)input; 9642: _stream.avail_in = static_cast(length); 9642: 9642: 9642: _stream.avail_out = static_cast(length); 9642: _stream.next_out = reinterpret_cast(&(*output)[output_header_len]); 9642: 9642: bool compressed = false; 9642: st = BZ2_bzCompress(&_stream, 9642: # 1012 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: 2 9642: # 1012 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ); 9642: if (st == 9642: # 1013 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: 4 9642: # 1013 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ) { 9642: compressed = true; 9642: output->resize(output->size() - _stream.avail_out); 9642: } 9642: 9642: 9642: 9642: 9642: BZ2_bzCompressEnd(&_stream); 9642: return compressed; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: 9642: 9642: 9642: 9642: 9642: inline CacheAllocationPtr BZip2_Uncompress( 9642: const char* input_data, size_t input_length, size_t* uncompressed_size, 9642: uint32_t compress_format_version, MemoryAllocator* allocator = nullptr) { 9642: 9642: uint32_t output_len = 0; 9642: if (compress_format_version == 2) { 9642: if (!compression::GetDecompressedSizeInfo(&input_data, &input_length, 9642: &output_len)) { 9642: return nullptr; 9642: } 9642: } else { 9642: 9642: 9642: size_t proposed_output_len = ((input_length * 5) & (~(4096 - 1))) + 4096; 9642: output_len = static_cast( 9642: std::min(proposed_output_len, 9642: static_cast(std::numeric_limits::max()))); 9642: } 9642: 9642: bz_stream _stream; 9642: memset(&_stream, 0, sizeof(bz_stream)); 9642: 9642: int st = BZ2_bzDecompressInit(&_stream, 0, 0); 9642: if (st != 9642: # 1059 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: 0 9642: # 1059 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ) { 9642: return nullptr; 9642: } 9642: 9642: _stream.next_in = (char*)input_data; 9642: _stream.avail_in = static_cast(input_length); 9642: 9642: auto output = AllocateBlock(output_len, allocator); 9642: 9642: _stream.next_out = (char*)output.get(); 9642: _stream.avail_out = static_cast(output_len); 9642: 9642: bool done = false; 9642: while (!done) { 9642: st = BZ2_bzDecompress(&_stream); 9642: switch (st) { 9642: case 9642: # 1075 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: 4 9642: # 1075 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: : 9642: done = true; 9642: break; 9642: case 9642: # 1078 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: 0 9642: # 1078 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: : { 9642: 9642: 9642: 9642: 9642: # 1082 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 1082 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: compress_format_version != 2 9642: # 1082 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1082 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "compress_format_version != 2" 9642: # 1082 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1082 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: uint32_t old_sz = output_len; 9642: output_len = output_len * 1.2; 9642: auto tmp = AllocateBlock(output_len, allocator); 9642: memcpy(tmp.get(), output.get(), old_sz); 9642: output = std::move(tmp); 9642: 9642: 9642: _stream.next_out = (char*)(output.get() + old_sz); 9642: _stream.avail_out = static_cast(output_len - old_sz); 9642: break; 9642: } 9642: default: 9642: BZ2_bzDecompressEnd(&_stream); 9642: return nullptr; 9642: } 9642: } 9642: 9642: 9642: 9642: # 1101 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 1101 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: compress_format_version != 2 || _stream.avail_out == 0 9642: # 1101 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1101 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "compress_format_version != 2 || _stream.avail_out == 0" 9642: # 1101 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1101 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: 9642: # 1102 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 1102 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: output_len >= _stream.avail_out 9642: # 1102 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1102 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "output_len >= _stream.avail_out" 9642: # 1102 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1102 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: *uncompressed_size = output_len - _stream.avail_out; 9642: BZ2_bzDecompressEnd(&_stream); 9642: return output; 9642: # 1114 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline bool LZ4_Compress(const CompressionInfo& info, 9642: uint32_t compress_format_version, const char* input, 9642: size_t length, ::std::string* output) { 9642: 9642: if (length > std::numeric_limits::max()) { 9642: 9642: return false; 9642: } 9642: 9642: size_t output_header_len = 0; 9642: if (compress_format_version == 2) { 9642: 9642: output_header_len = compression::PutDecompressedSizeInfo( 9642: output, static_cast(length)); 9642: } else { 9642: 9642: 9642: output_header_len = 8; 9642: output->resize(output_header_len); 9642: char* p = const_cast(output->c_str()); 9642: memcpy(p, &length, sizeof(length)); 9642: } 9642: int compress_bound = LZ4_compressBound(static_cast(length)); 9642: output->resize(static_cast(output_header_len + compress_bound)); 9642: 9642: int outlen; 9642: 9642: LZ4_stream_t* stream = LZ4_createStream(); 9642: Slice compression_dict = info.dict().GetRawDict(); 9642: if (compression_dict.size()) { 9642: LZ4_loadDict(stream, compression_dict.data(), 9642: static_cast(compression_dict.size())); 9642: } 9642: 9642: int acceleration; 9642: if (info.options().level < 0) { 9642: acceleration = -info.options().level; 9642: } else { 9642: acceleration = 1; 9642: } 9642: outlen = LZ4_compress_fast_continue( 9642: stream, input, &(*output)[output_header_len], static_cast(length), 9642: compress_bound, acceleration); 9642: 9642: 9642: 9642: 9642: 9642: LZ4_freeStream(stream); 9642: 9642: 9642: 9642: 9642: 9642: if (outlen == 0) { 9642: return false; 9642: } 9642: output->resize(static_cast(output_header_len + outlen)); 9642: return true; 9642: # 1189 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline CacheAllocationPtr LZ4_Uncompress(const UncompressionInfo& info, 9642: const char* input_data, 9642: size_t input_length, 9642: size_t* uncompressed_size, 9642: uint32_t compress_format_version, 9642: MemoryAllocator* allocator = nullptr) { 9642: 9642: uint32_t output_len = 0; 9642: if (compress_format_version == 2) { 9642: 9642: if (!compression::GetDecompressedSizeInfo(&input_data, &input_length, 9642: &output_len)) { 9642: return nullptr; 9642: } 9642: } else { 9642: 9642: 9642: if (input_length < 8) { 9642: return nullptr; 9642: } 9642: if (port::kLittleEndian) { 9642: memcpy(&output_len, input_data, sizeof(output_len)); 9642: } else { 9642: memcpy(&output_len, input_data + 4, sizeof(output_len)); 9642: } 9642: input_length -= 8; 9642: input_data += 8; 9642: } 9642: 9642: auto output = AllocateBlock(output_len, allocator); 9642: 9642: int decompress_bytes = 0; 9642: 9642: 9642: LZ4_streamDecode_t* stream = LZ4_createStreamDecode(); 9642: const Slice& compression_dict = info.dict().GetRawDict(); 9642: if (compression_dict.size()) { 9642: LZ4_setStreamDecode(stream, compression_dict.data(), 9642: static_cast(compression_dict.size())); 9642: } 9642: decompress_bytes = LZ4_decompress_safe_continue( 9642: stream, input_data, output.get(), static_cast(input_length), 9642: static_cast(output_len)); 9642: LZ4_freeStreamDecode(stream); 9642: 9642: 9642: 9642: 9642: 9642: 9642: if (decompress_bytes < 0) { 9642: return nullptr; 9642: } 9642: 9642: # 1250 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 1250 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: decompress_bytes == static_cast(output_len) 9642: # 1250 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1250 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "decompress_bytes == static_cast(output_len)" 9642: # 1250 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1250 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: *uncompressed_size = decompress_bytes; 9642: return output; 9642: # 1262 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline bool LZ4HC_Compress(const CompressionInfo& info, 9642: uint32_t compress_format_version, const char* input, 9642: size_t length, ::std::string* output) { 9642: 9642: if (length > std::numeric_limits::max()) { 9642: 9642: return false; 9642: } 9642: 9642: size_t output_header_len = 0; 9642: if (compress_format_version == 2) { 9642: 9642: output_header_len = compression::PutDecompressedSizeInfo( 9642: output, static_cast(length)); 9642: } else { 9642: 9642: 9642: output_header_len = 8; 9642: output->resize(output_header_len); 9642: char* p = const_cast(output->c_str()); 9642: memcpy(p, &length, sizeof(length)); 9642: } 9642: int compress_bound = LZ4_compressBound(static_cast(length)); 9642: output->resize(static_cast(output_header_len + compress_bound)); 9642: 9642: int outlen; 9642: int level; 9642: if (info.options().level == CompressionOptions::kDefaultCompressionLevel) { 9642: level = 0; 9642: } else { 9642: level = info.options().level; 9642: } 9642: 9642: LZ4_streamHC_t* stream = LZ4_createStreamHC(); 9642: LZ4_resetStreamHC(stream, level); 9642: Slice compression_dict = info.dict().GetRawDict(); 9642: const char* compression_dict_data = 9642: compression_dict.size() > 0 ? compression_dict.data() : nullptr; 9642: size_t compression_dict_size = compression_dict.size(); 9642: if (compression_dict_data != nullptr) { 9642: LZ4_loadDictHC(stream, compression_dict_data, 9642: static_cast(compression_dict_size)); 9642: } 9642: 9642: 9642: outlen = 9642: LZ4_compress_HC_continue(stream, input, &(*output)[output_header_len], 9642: static_cast(length), compress_bound); 9642: 9642: 9642: 9642: 9642: 9642: LZ4_freeStreamHC(stream); 9642: # 1335 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: if (outlen == 0) { 9642: return false; 9642: } 9642: output->resize(static_cast(output_header_len + outlen)); 9642: return true; 9642: # 1348 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline bool XPRESS_Compress(const char* , size_t , 9642: std::string* ) { 9642: return false; 9642: } 9642: # 1368 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: inline char* XPRESS_Uncompress(const char* , 9642: size_t , 9642: size_t* ) { 9642: return nullptr; 9642: } 9642: 9642: 9642: inline bool ZSTD_Compress(const CompressionInfo& info, const char* input, 9642: size_t length, ::std::string* output) { 9642: 9642: if (length > std::numeric_limits::max()) { 9642: 9642: return false; 9642: } 9642: 9642: size_t output_header_len = compression::PutDecompressedSizeInfo( 9642: output, static_cast(length)); 9642: 9642: size_t compressBound = ZSTD_compressBound(length); 9642: output->resize(static_cast(output_header_len + compressBound)); 9642: size_t outlen = 0; 9642: 9642: ZSTD_CCtx* context = info.context().ZSTDPreallocCtx(); 9642: 9642: # 1391 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 1391 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: context != nullptr 9642: # 1391 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1391 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "context != nullptr" 9642: # 1391 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1391 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: 9642: if (info.dict().GetDigestedZstdCDict() != nullptr) { 9642: ZSTD_CCtx_refCDict(context, info.dict().GetDigestedZstdCDict()); 9642: } else { 9642: ZSTD_CCtx_loadDictionary(context, info.dict().GetRawDict().data(), 9642: info.dict().GetRawDict().size()); 9642: } 9642: 9642: 9642: outlen = ZSTD_compress2(context, &(*output)[output_header_len], compressBound, 9642: input, length); 9642: # 1431 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: if (outlen == 0) { 9642: return false; 9642: } 9642: output->resize(output_header_len + outlen); 9642: return true; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline CacheAllocationPtr ZSTD_Uncompress( 9642: const UncompressionInfo& info, const char* input_data, size_t input_length, 9642: size_t* uncompressed_size, MemoryAllocator* allocator = nullptr, 9642: const char** error_message = nullptr) { 9642: 9642: static const char* const kErrorDecodeOutputSize = 9642: "Cannot decode output size."; 9642: static const char* const kErrorOutputLenMismatch = 9642: "Decompressed size does not match header."; 9642: uint32_t output_len = 0; 9642: if (!compression::GetDecompressedSizeInfo(&input_data, &input_length, 9642: &output_len)) { 9642: if (error_message) { 9642: *error_message = kErrorDecodeOutputSize; 9642: } 9642: return nullptr; 9642: } 9642: 9642: CacheAllocationPtr output = AllocateBlock(output_len, allocator); 9642: size_t actual_output_length = 0; 9642: 9642: ZSTD_DCtx* context = info.context().GetZSTDContext(); 9642: 9642: # 1472 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 1472 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: context != nullptr 9642: # 1472 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1472 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "context != nullptr" 9642: # 1472 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1472 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: actual_output_length = ZSTD_decompress_usingDict( 9642: context, output.get(), output_len, input_data, input_length, 9642: info.dict().GetRawDict().data(), info.dict().GetRawDict().size()); 9642: # 1491 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: if (ZSTD_isError(actual_output_length)) { 9642: if (error_message) { 9642: *error_message = ZSTD_getErrorName(actual_output_length); 9642: } 9642: return nullptr; 9642: } else if (actual_output_length != output_len) { 9642: if (error_message) { 9642: *error_message = kErrorOutputLenMismatch; 9642: } 9642: return nullptr; 9642: } 9642: 9642: *uncompressed_size = actual_output_length; 9642: return output; 9642: # 1514 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: } 9642: 9642: inline bool ZSTD_TrainDictionarySupported() { 9642: 9642: 9642: 9642: 9642: return (ZSTD_versionNumber() >= 10103); 9642: 9642: 9642: 9642: } 9642: 9642: inline std::string ZSTD_TrainDictionary(const std::string& samples, 9642: const std::vector& sample_lens, 9642: size_t max_dict_bytes) { 9642: 9642: 9642: 9642: 9642: 9642: # 1534 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 1534 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: samples.empty() == sample_lens.empty() 9642: # 1534 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1534 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "samples.empty() == sample_lens.empty()" 9642: # 1534 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1534 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: if (samples.empty()) { 9642: return ""; 9642: } 9642: std::string dict_data(max_dict_bytes, '\0'); 9642: size_t dict_len = ZDICT_trainFromBuffer( 9642: &dict_data[0], max_dict_bytes, &samples[0], &sample_lens[0], 9642: static_cast(sample_lens.size())); 9642: if (ZDICT_isError(dict_len)) { 9642: return ""; 9642: } 9642: 9642: # 1545 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 1545 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: dict_len <= max_dict_bytes 9642: # 1545 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1545 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "dict_len <= max_dict_bytes" 9642: # 1545 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1545 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: dict_data.resize(dict_len); 9642: return dict_data; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: 9642: inline std::string ZSTD_TrainDictionary(const std::string& samples, 9642: size_t sample_len_shift, 9642: size_t max_dict_bytes) { 9642: 9642: 9642: 9642: 9642: size_t num_samples = samples.size() >> sample_len_shift; 9642: std::vector sample_lens(num_samples, size_t(1) << sample_len_shift); 9642: return ZSTD_TrainDictionary(samples, sample_lens, max_dict_bytes); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: } 9642: 9642: inline bool ZSTD_FinalizeDictionarySupported() { 9642: 9642: 9642: return (ZSTD_versionNumber() >= 10405); 9642: 9642: 9642: 9642: } 9642: 9642: inline std::string ZSTD_FinalizeDictionary( 9642: const std::string& samples, const std::vector& sample_lens, 9642: size_t max_dict_bytes, int level) { 9642: 9642: 9642: 9642: # 1590 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 1590 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: samples.empty() == sample_lens.empty() 9642: # 1590 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1590 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "samples.empty() == sample_lens.empty()" 9642: # 1590 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1590 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: if (samples.empty()) { 9642: return ""; 9642: } 9642: if (level == CompressionOptions::kDefaultCompressionLevel) { 9642: 9642: 9642: level = 3; 9642: } 9642: std::string dict_data(max_dict_bytes, '\0'); 9642: size_t dict_len = ZDICT_finalizeDictionary( 9642: dict_data.data(), max_dict_bytes, samples.data(), 9642: std::min(static_cast(samples.size()), max_dict_bytes), 9642: samples.data(), sample_lens.data(), 9642: static_cast(sample_lens.size()), 9642: {level, 0 , 0 }); 9642: if (ZDICT_isError(dict_len)) { 9642: return ""; 9642: } else { 9642: 9642: # 1609 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 1609 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: dict_len <= max_dict_bytes 9642: # 1609 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1609 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "dict_len <= max_dict_bytes" 9642: # 1609 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1609 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: dict_data.resize(dict_len); 9642: return dict_data; 9642: } 9642: # 1621 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: } 9642: 9642: inline bool CompressData(const Slice& raw, 9642: const CompressionInfo& compression_info, 9642: uint32_t compress_format_version, 9642: std::string* compressed_output) { 9642: bool ret = false; 9642: 9642: 9642: 9642: switch (compression_info.type()) { 9642: case kSnappyCompression: 9642: ret = Snappy_Compress(compression_info, raw.data(), raw.size(), 9642: compressed_output); 9642: break; 9642: case kZlibCompression: 9642: ret = Zlib_Compress(compression_info, compress_format_version, raw.data(), 9642: raw.size(), compressed_output); 9642: break; 9642: case kBZip2Compression: 9642: ret = BZip2_Compress(compression_info, compress_format_version, 9642: raw.data(), raw.size(), compressed_output); 9642: break; 9642: case kLZ4Compression: 9642: ret = LZ4_Compress(compression_info, compress_format_version, raw.data(), 9642: raw.size(), compressed_output); 9642: break; 9642: case kLZ4HCCompression: 9642: ret = LZ4HC_Compress(compression_info, compress_format_version, 9642: raw.data(), raw.size(), compressed_output); 9642: break; 9642: case kXpressCompression: 9642: ret = XPRESS_Compress(raw.data(), raw.size(), compressed_output); 9642: break; 9642: case kZSTD: 9642: case kZSTDNotFinalCompression: 9642: ret = ZSTD_Compress(compression_info, raw.data(), raw.size(), 9642: compressed_output); 9642: break; 9642: default: 9642: 9642: break; 9642: } 9642: 9642: rocksdb::SyncPoint::GetInstance()->Process("CompressData:TamperWithReturnValue", static_cast(&ret)) 9642: ; 9642: 9642: return ret; 9642: } 9642: 9642: inline CacheAllocationPtr UncompressData( 9642: const UncompressionInfo& uncompression_info, const char* data, size_t n, 9642: size_t* uncompressed_size, uint32_t compress_format_version, 9642: MemoryAllocator* allocator = nullptr, 9642: const char** error_message = nullptr) { 9642: switch (uncompression_info.type()) { 9642: case kSnappyCompression: 9642: return Snappy_Uncompress(data, n, uncompressed_size, allocator); 9642: case kZlibCompression: 9642: return Zlib_Uncompress(uncompression_info, data, n, uncompressed_size, 9642: compress_format_version, allocator); 9642: case kBZip2Compression: 9642: return BZip2_Uncompress(data, n, uncompressed_size, 9642: compress_format_version, allocator); 9642: case kLZ4Compression: 9642: case kLZ4HCCompression: 9642: return LZ4_Uncompress(uncompression_info, data, n, uncompressed_size, 9642: compress_format_version, allocator); 9642: case kXpressCompression: 9642: 9642: 9642: return CacheAllocationPtr(XPRESS_Uncompress(data, n, uncompressed_size)); 9642: case kZSTD: 9642: case kZSTDNotFinalCompression: 9642: 9642: return ZSTD_Uncompress(uncompression_info, data, n, uncompressed_size, 9642: allocator, error_message); 9642: default: 9642: return CacheAllocationPtr(); 9642: } 9642: } 9642: 9642: 9642: class CompressionTypeRecord { 9642: public: 9642: explicit CompressionTypeRecord(CompressionType compression_type) 9642: : compression_type_(compression_type) {} 9642: 9642: CompressionType GetCompressionType() const { return compression_type_; } 9642: 9642: inline void EncodeTo(std::string* dst) const { 9642: 9642: # 1712 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 1712 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: dst != nullptr 9642: # 1712 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1712 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "dst != nullptr" 9642: # 1712 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1712 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: PutFixed32(dst, compression_type_); 9642: } 9642: 9642: inline Status DecodeFrom(Slice* src) { 9642: constexpr char class_name[] = "CompressionTypeRecord"; 9642: 9642: uint32_t val; 9642: if (!GetFixed32(src, &val)) { 9642: return Status::Corruption(class_name, 9642: "Error decoding WAL compression type"); 9642: } 9642: CompressionType compression_type = static_cast(val); 9642: if (!StreamingCompressionTypeSupported(compression_type)) { 9642: return Status::Corruption(class_name, 9642: "WAL compression type not supported"); 9642: } 9642: compression_type_ = compression_type; 9642: return Status::OK(); 9642: } 9642: 9642: inline std::string DebugString() const { 9642: return "compression_type: " + CompressionTypeToString(compression_type_); 9642: } 9642: 9642: private: 9642: CompressionType compression_type_; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: class StreamingCompress { 9642: public: 9642: StreamingCompress(CompressionType compression_type, 9642: const CompressionOptions& opts, 9642: uint32_t compress_format_version, size_t max_output_len) 9642: : compression_type_(compression_type), 9642: opts_(opts), 9642: compress_format_version_(compress_format_version), 9642: max_output_len_(max_output_len) {} 9642: virtual ~StreamingCompress() = default; 9642: # 1767 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: virtual int Compress(const char* input, size_t input_size, char* output, 9642: size_t* output_pos) = 0; 9642: 9642: 9642: static StreamingCompress* Create(CompressionType compression_type, 9642: const CompressionOptions& opts, 9642: uint32_t compress_format_version, 9642: size_t max_output_len); 9642: virtual void Reset() = 0; 9642: 9642: protected: 9642: const CompressionType compression_type_; 9642: const CompressionOptions opts_; 9642: const uint32_t compress_format_version_; 9642: const size_t max_output_len_; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: class StreamingUncompress { 9642: public: 9642: StreamingUncompress(CompressionType compression_type, 9642: uint32_t compress_format_version, size_t max_output_len) 9642: : compression_type_(compression_type), 9642: compress_format_version_(compress_format_version), 9642: max_output_len_(max_output_len) {} 9642: virtual ~StreamingUncompress() = default; 9642: # 1810 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: virtual int Uncompress(const char* input, size_t input_size, char* output, 9642: size_t* output_pos) = 0; 9642: static StreamingUncompress* Create(CompressionType compression_type, 9642: uint32_t compress_format_version, 9642: size_t max_output_len); 9642: virtual void Reset() = 0; 9642: 9642: protected: 9642: CompressionType compression_type_; 9642: uint32_t compress_format_version_; 9642: size_t max_output_len_; 9642: }; 9642: 9642: class ZSTDStreamingCompress final : public StreamingCompress { 9642: public: 9642: explicit ZSTDStreamingCompress(const CompressionOptions& opts, 9642: uint32_t compress_format_version, 9642: size_t max_output_len) 9642: : StreamingCompress(kZSTD, opts, compress_format_version, 9642: max_output_len) { 9642: 9642: cctx_ = ZSTD_createCCtx(); 9642: 9642: ZSTD_CCtx_setParameter(cctx_, ZSTD_c_checksumFlag, 1); 9642: 9642: # 1834 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 1834 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: cctx_ != nullptr 9642: # 1834 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1834 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "cctx_ != nullptr" 9642: # 1834 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1834 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: input_buffer_ = { nullptr, 0, 0}; 9642: 9642: } 9642: ~ZSTDStreamingCompress() override { 9642: 9642: ZSTD_freeCCtx(cctx_); 9642: 9642: } 9642: int Compress(const char* input, size_t input_size, char* output, 9642: size_t* output_pos) override; 9642: void Reset() override; 9642: 9642: ZSTD_CCtx* cctx_; 9642: ZSTD_inBuffer input_buffer_; 9642: 9642: }; 9642: 9642: class ZSTDStreamingUncompress final : public StreamingUncompress { 9642: public: 9642: explicit ZSTDStreamingUncompress(uint32_t compress_format_version, 9642: size_t max_output_len) 9642: : StreamingUncompress(kZSTD, compress_format_version, max_output_len) { 9642: 9642: dctx_ = ZSTD_createDCtx(); 9642: 9642: # 1859 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: (static_cast ( 9642: # 1859 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: dctx_ != nullptr 9642: # 1859 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1859 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: "dctx_ != nullptr" 9642: # 1859 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1859 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 9642: ; 9642: input_buffer_ = { nullptr, 0, 0}; 9642: 9642: } 9642: ~ZSTDStreamingUncompress() override { 9642: 9642: ZSTD_freeDCtx(dctx_); 9642: 9642: } 9642: int Uncompress(const char* input, size_t input_size, char* output, 9642: size_t* output_size) override; 9642: void Reset() override; 9642: 9642: private: 9642: 9642: ZSTD_DCtx* dctx_; 9642: ZSTD_inBuffer input_buffer_; 9642: 9642: }; 9642: 9642: } 9642: # 15 "/build/reproducible-path/rocksdb-9.3.1/options/cf_options.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: 9642: struct ImmutableCFOptions { 9642: public: 9642: static const char* kName() { return "ImmutableCFOptions"; } 9642: explicit ImmutableCFOptions(); 9642: explicit ImmutableCFOptions(const ColumnFamilyOptions& cf_options); 9642: 9642: CompactionStyle compaction_style; 9642: 9642: CompactionPri compaction_pri; 9642: 9642: const Comparator* user_comparator; 9642: InternalKeyComparator internal_comparator; 9642: 9642: std::shared_ptr merge_operator; 9642: 9642: const CompactionFilter* compaction_filter; 9642: 9642: std::shared_ptr compaction_filter_factory; 9642: 9642: int min_write_buffer_number_to_merge; 9642: 9642: int max_write_buffer_number_to_maintain; 9642: 9642: int64_t max_write_buffer_size_to_maintain; 9642: 9642: bool inplace_update_support; 9642: 9642: UpdateStatus (*inplace_callback)(char* existing_value, 9642: uint32_t* existing_value_size, 9642: Slice delta_value, 9642: std::string* merged_value); 9642: 9642: std::shared_ptr memtable_factory; 9642: 9642: std::shared_ptr table_factory; 9642: 9642: Options::TablePropertiesCollectorFactories 9642: table_properties_collector_factories; 9642: 9642: 9642: 9642: uint32_t bloom_locality; 9642: 9642: bool level_compaction_dynamic_level_bytes; 9642: 9642: int num_levels; 9642: 9642: bool optimize_filters_for_hits; 9642: 9642: bool force_consistency_checks; 9642: 9642: Temperature default_temperature; 9642: 9642: uint64_t preclude_last_level_data_seconds; 9642: 9642: uint64_t preserve_internal_time_seconds; 9642: 9642: std::shared_ptr 9642: memtable_insert_with_hint_prefix_extractor; 9642: 9642: std::vector cf_paths; 9642: 9642: std::shared_ptr compaction_thread_limiter; 9642: 9642: std::shared_ptr sst_partitioner_factory; 9642: 9642: std::shared_ptr blob_cache; 9642: 9642: bool persist_user_defined_timestamps; 9642: }; 9642: 9642: struct ImmutableOptions : public ImmutableDBOptions, public ImmutableCFOptions { 9642: explicit ImmutableOptions(); 9642: explicit ImmutableOptions(const Options& options); 9642: 9642: ImmutableOptions(const DBOptions& db_options, 9642: const ColumnFamilyOptions& cf_options); 9642: 9642: ImmutableOptions(const ImmutableDBOptions& db_options, 9642: const ImmutableCFOptions& cf_options); 9642: 9642: ImmutableOptions(const DBOptions& db_options, 9642: const ImmutableCFOptions& cf_options); 9642: 9642: ImmutableOptions(const ImmutableDBOptions& db_options, 9642: const ColumnFamilyOptions& cf_options); 9642: }; 9642: 9642: struct MutableCFOptions { 9642: static const char* kName() { return "MutableCFOptions"; } 9642: explicit MutableCFOptions(const ColumnFamilyOptions& options) 9642: : write_buffer_size(options.write_buffer_size), 9642: max_write_buffer_number(options.max_write_buffer_number), 9642: arena_block_size(options.arena_block_size), 9642: memtable_prefix_bloom_size_ratio( 9642: options.memtable_prefix_bloom_size_ratio), 9642: memtable_whole_key_filtering(options.memtable_whole_key_filtering), 9642: memtable_huge_page_size(options.memtable_huge_page_size), 9642: max_successive_merges(options.max_successive_merges), 9642: strict_max_successive_merges(options.strict_max_successive_merges), 9642: inplace_update_num_locks(options.inplace_update_num_locks), 9642: prefix_extractor(options.prefix_extractor), 9642: experimental_mempurge_threshold( 9642: options.experimental_mempurge_threshold), 9642: disable_auto_compactions(options.disable_auto_compactions), 9642: soft_pending_compaction_bytes_limit( 9642: options.soft_pending_compaction_bytes_limit), 9642: hard_pending_compaction_bytes_limit( 9642: options.hard_pending_compaction_bytes_limit), 9642: level0_file_num_compaction_trigger( 9642: options.level0_file_num_compaction_trigger), 9642: level0_slowdown_writes_trigger(options.level0_slowdown_writes_trigger), 9642: level0_stop_writes_trigger(options.level0_stop_writes_trigger), 9642: max_compaction_bytes(options.max_compaction_bytes), 9642: target_file_size_base(options.target_file_size_base), 9642: target_file_size_multiplier(options.target_file_size_multiplier), 9642: max_bytes_for_level_base(options.max_bytes_for_level_base), 9642: max_bytes_for_level_multiplier(options.max_bytes_for_level_multiplier), 9642: ttl(options.ttl), 9642: periodic_compaction_seconds(options.periodic_compaction_seconds), 9642: max_bytes_for_level_multiplier_additional( 9642: options.max_bytes_for_level_multiplier_additional), 9642: compaction_options_fifo(options.compaction_options_fifo), 9642: compaction_options_universal(options.compaction_options_universal), 9642: enable_blob_files(options.enable_blob_files), 9642: min_blob_size(options.min_blob_size), 9642: blob_file_size(options.blob_file_size), 9642: blob_compression_type(options.blob_compression_type), 9642: enable_blob_garbage_collection(options.enable_blob_garbage_collection), 9642: blob_garbage_collection_age_cutoff( 9642: options.blob_garbage_collection_age_cutoff), 9642: blob_garbage_collection_force_threshold( 9642: options.blob_garbage_collection_force_threshold), 9642: blob_compaction_readahead_size(options.blob_compaction_readahead_size), 9642: blob_file_starting_level(options.blob_file_starting_level), 9642: prepopulate_blob_cache(options.prepopulate_blob_cache), 9642: max_sequential_skip_in_iterations( 9642: options.max_sequential_skip_in_iterations), 9642: paranoid_file_checks(options.paranoid_file_checks), 9642: report_bg_io_stats(options.report_bg_io_stats), 9642: compression(options.compression), 9642: bottommost_compression(options.bottommost_compression), 9642: compression_opts(options.compression_opts), 9642: bottommost_compression_opts(options.bottommost_compression_opts), 9642: last_level_temperature(options.last_level_temperature), 9642: default_write_temperature(options.default_write_temperature), 9642: memtable_protection_bytes_per_key( 9642: options.memtable_protection_bytes_per_key), 9642: block_protection_bytes_per_key(options.block_protection_bytes_per_key), 9642: sample_for_compression( 9642: options.sample_for_compression), 9642: compression_per_level(options.compression_per_level), 9642: memtable_max_range_deletions(options.memtable_max_range_deletions), 9642: bottommost_file_compaction_delay( 9642: options.bottommost_file_compaction_delay) { 9642: RefreshDerivedOptions(options.num_levels, options.compaction_style); 9642: } 9642: 9642: MutableCFOptions() 9642: : write_buffer_size(0), 9642: max_write_buffer_number(0), 9642: arena_block_size(0), 9642: memtable_prefix_bloom_size_ratio(0), 9642: memtable_whole_key_filtering(false), 9642: memtable_huge_page_size(0), 9642: max_successive_merges(0), 9642: strict_max_successive_merges(false), 9642: inplace_update_num_locks(0), 9642: prefix_extractor(nullptr), 9642: experimental_mempurge_threshold(0.0), 9642: disable_auto_compactions(false), 9642: soft_pending_compaction_bytes_limit(0), 9642: hard_pending_compaction_bytes_limit(0), 9642: level0_file_num_compaction_trigger(0), 9642: level0_slowdown_writes_trigger(0), 9642: level0_stop_writes_trigger(0), 9642: max_compaction_bytes(0), 9642: target_file_size_base(0), 9642: target_file_size_multiplier(0), 9642: max_bytes_for_level_base(0), 9642: max_bytes_for_level_multiplier(0), 9642: ttl(0), 9642: periodic_compaction_seconds(0), 9642: compaction_options_fifo(), 9642: enable_blob_files(false), 9642: min_blob_size(0), 9642: blob_file_size(0), 9642: blob_compression_type(kNoCompression), 9642: enable_blob_garbage_collection(false), 9642: blob_garbage_collection_age_cutoff(0.0), 9642: blob_garbage_collection_force_threshold(0.0), 9642: blob_compaction_readahead_size(0), 9642: blob_file_starting_level(0), 9642: prepopulate_blob_cache(PrepopulateBlobCache::kDisable), 9642: max_sequential_skip_in_iterations(0), 9642: paranoid_file_checks(false), 9642: report_bg_io_stats(false), 9642: compression(Snappy_Supported() ? kSnappyCompression : kNoCompression), 9642: bottommost_compression(kDisableCompressionOption), 9642: last_level_temperature(Temperature::kUnknown), 9642: default_write_temperature(Temperature::kUnknown), 9642: memtable_protection_bytes_per_key(0), 9642: block_protection_bytes_per_key(0), 9642: sample_for_compression(0), 9642: memtable_max_range_deletions(0) {} 9642: 9642: explicit MutableCFOptions(const Options& options); 9642: 9642: 9642: void RefreshDerivedOptions(int num_levels, CompactionStyle compaction_style); 9642: 9642: void RefreshDerivedOptions(const ImmutableCFOptions& ioptions) { 9642: RefreshDerivedOptions(ioptions.num_levels, ioptions.compaction_style); 9642: } 9642: 9642: int MaxBytesMultiplerAdditional(int level) const { 9642: if (level >= 9642: static_cast(max_bytes_for_level_multiplier_additional.size())) { 9642: return 1; 9642: } 9642: return max_bytes_for_level_multiplier_additional[level]; 9642: } 9642: 9642: void Dump(Logger* log) const; 9642: 9642: 9642: size_t write_buffer_size; 9642: int max_write_buffer_number; 9642: size_t arena_block_size; 9642: double memtable_prefix_bloom_size_ratio; 9642: bool memtable_whole_key_filtering; 9642: size_t memtable_huge_page_size; 9642: size_t max_successive_merges; 9642: bool strict_max_successive_merges; 9642: size_t inplace_update_num_locks; 9642: std::shared_ptr prefix_extractor; 9642: # 273 "/build/reproducible-path/rocksdb-9.3.1/options/cf_options.h" 9642: double experimental_mempurge_threshold; 9642: 9642: 9642: bool disable_auto_compactions; 9642: uint64_t soft_pending_compaction_bytes_limit; 9642: uint64_t hard_pending_compaction_bytes_limit; 9642: int level0_file_num_compaction_trigger; 9642: int level0_slowdown_writes_trigger; 9642: int level0_stop_writes_trigger; 9642: uint64_t max_compaction_bytes; 9642: uint64_t target_file_size_base; 9642: int target_file_size_multiplier; 9642: uint64_t max_bytes_for_level_base; 9642: double max_bytes_for_level_multiplier; 9642: uint64_t ttl; 9642: uint64_t periodic_compaction_seconds; 9642: std::vector max_bytes_for_level_multiplier_additional; 9642: CompactionOptionsFIFO compaction_options_fifo; 9642: CompactionOptionsUniversal compaction_options_universal; 9642: 9642: 9642: bool enable_blob_files; 9642: uint64_t min_blob_size; 9642: uint64_t blob_file_size; 9642: CompressionType blob_compression_type; 9642: bool enable_blob_garbage_collection; 9642: double blob_garbage_collection_age_cutoff; 9642: double blob_garbage_collection_force_threshold; 9642: uint64_t blob_compaction_readahead_size; 9642: int blob_file_starting_level; 9642: PrepopulateBlobCache prepopulate_blob_cache; 9642: 9642: 9642: uint64_t max_sequential_skip_in_iterations; 9642: bool paranoid_file_checks; 9642: bool report_bg_io_stats; 9642: CompressionType compression; 9642: CompressionType bottommost_compression; 9642: CompressionOptions compression_opts; 9642: CompressionOptions bottommost_compression_opts; 9642: Temperature last_level_temperature; 9642: Temperature default_write_temperature; 9642: uint32_t memtable_protection_bytes_per_key; 9642: uint8_t block_protection_bytes_per_key; 9642: 9642: uint64_t sample_for_compression; 9642: std::vector compression_per_level; 9642: uint32_t memtable_max_range_deletions; 9642: uint32_t bottommost_file_compaction_delay; 9642: 9642: 9642: 9642: std::vector max_file_size; 9642: }; 9642: 9642: uint64_t MultiplyCheckOverflow(uint64_t op1, double op2); 9642: 9642: 9642: uint64_t MaxFileSizeForLevel(const MutableCFOptions& cf_options, 9642: int level, CompactionStyle compaction_style, int base_level = 1, 9642: bool level_compaction_dynamic_level_bytes = false); 9642: 9642: 9642: 9642: size_t MaxFileSizeForL0MetaPin(const MutableCFOptions& cf_options); 9642: 9642: Status GetStringFromMutableCFOptions(const ConfigOptions& config_options, 9642: const MutableCFOptions& mutable_opts, 9642: std::string* opt_string); 9642: 9642: Status GetMutableOptionsFromStrings( 9642: const MutableCFOptions& base_options, 9642: const std::unordered_map& options_map, 9642: Logger* info_log, MutableCFOptions* new_options); 9642: 9642: } 9642: # 20 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/port/malloc.h" 1 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/port/malloc.h" 9642: 9642: # 21 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 2 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class RandomAccessFile; 9642: struct ReadOptions; 9642: 9642: bool ShouldReportDetailedTime(Env* env, Statistics* stats); 9642: 9642: 9642: constexpr uint32_t kMagicNumberLengthByte = 8; 9642: 9642: extern const uint64_t kLegacyBlockBasedTableMagicNumber; 9642: extern const uint64_t kBlockBasedTableMagicNumber; 9642: 9642: extern const uint64_t kLegacyPlainTableMagicNumber; 9642: extern const uint64_t kPlainTableMagicNumber; 9642: 9642: extern const uint64_t kCuckooTableMagicNumber; 9642: 9642: 9642: 9642: class BlockHandle { 9642: public: 9642: 9642: 9642: BlockHandle(); 9642: BlockHandle(uint64_t offset, uint64_t size); 9642: 9642: 9642: uint64_t offset() const { return offset_; } 9642: void set_offset(uint64_t _offset) { offset_ = _offset; } 9642: 9642: 9642: uint64_t size() const { return size_; } 9642: void set_size(uint64_t _size) { size_ = _size; } 9642: 9642: void EncodeTo(std::string* dst) const; 9642: char* EncodeTo(char* dst) const; 9642: Status DecodeFrom(Slice* input); 9642: Status DecodeSizeFrom(uint64_t offset, Slice* input); 9642: 9642: 9642: std::string ToString(bool hex = true) const; 9642: 9642: 9642: 9642: bool IsNull() const { return offset_ == 0 && size_ == 0; } 9642: 9642: static const BlockHandle& NullBlockHandle() { return kNullBlockHandle; } 9642: 9642: 9642: static constexpr uint32_t kMaxEncodedLength = 2 * kMaxVarint64Length; 9642: 9642: inline bool operator==(const BlockHandle& rhs) const { 9642: return offset_ == rhs.offset_ && size_ == rhs.size_; 9642: } 9642: inline bool operator!=(const BlockHandle& rhs) const { 9642: return !(*this == rhs); 9642: } 9642: 9642: private: 9642: uint64_t offset_; 9642: uint64_t size_; 9642: 9642: static const BlockHandle kNullBlockHandle; 9642: }; 9642: # 100 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 9642: struct IndexValue { 9642: BlockHandle handle; 9642: 9642: Slice first_internal_key; 9642: 9642: IndexValue() = default; 9642: IndexValue(BlockHandle _handle, Slice _first_internal_key) 9642: : handle(_handle), first_internal_key(_first_internal_key) {} 9642: 9642: 9642: 9642: 9642: 9642: 9642: void EncodeTo(std::string* dst, bool have_first_key, 9642: const BlockHandle* previous_handle) const; 9642: Status DecodeFrom(Slice* input, bool have_first_key, 9642: const BlockHandle* previous_handle); 9642: 9642: std::string ToString(bool hex, bool have_first_key) const; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline uint32_t ChecksumModifierForContext(uint32_t base_context_checksum, 9642: uint64_t offset) { 9642: 9642: 9642: 9642: 9642: 9642: uint32_t all_or_nothing = uint32_t{0} - (base_context_checksum != 0); 9642: # 150 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 9642: uint32_t modifier = 9642: base_context_checksum ^ (Lower32of64(offset) + Upper32of64(offset)); 9642: 9642: return modifier & all_or_nothing; 9642: } 9642: 9642: inline uint32_t GetCompressFormatForVersion(uint32_t format_version) { 9642: 9642: 9642: 9642: return format_version >= 2 ? 2 : 1; 9642: } 9642: 9642: constexpr uint32_t kLatestFormatVersion = 6; 9642: 9642: inline bool IsSupportedFormatVersion(uint32_t version) { 9642: return version <= kLatestFormatVersion; 9642: } 9642: 9642: 9642: inline bool FormatVersionUsesContextChecksum(uint32_t version) { 9642: return version >= 6; 9642: } 9642: 9642: inline bool FormatVersionUsesIndexHandleInFooter(uint32_t version) { 9642: return version < 6; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: class Footer { 9642: public: 9642: 9642: Footer() {} 9642: 9642: 9642: 9642: 9642: 9642: 9642: Status DecodeFrom(Slice input, uint64_t input_offset, 9642: uint64_t enforce_table_magic_number = 0); 9642: 9642: 9642: 9642: uint64_t table_magic_number() const { return table_magic_number_; } 9642: 9642: 9642: 9642: 9642: uint32_t format_version() const { return format_version_; } 9642: 9642: 9642: uint32_t base_context_checksum() const { return base_context_checksum_; } 9642: 9642: 9642: const BlockHandle& metaindex_handle() const { return metaindex_handle_; } 9642: 9642: 9642: 9642: const BlockHandle& index_handle() const { return index_handle_; } 9642: 9642: 9642: ChecksumType checksum_type() const { 9642: return static_cast(checksum_type_); 9642: } 9642: 9642: 9642: 9642: 9642: inline size_t GetBlockTrailerSize() const { return block_trailer_size_; } 9642: 9642: 9642: std::string ToString() const; 9642: 9642: 9642: 9642: 9642: 9642: 9642: static constexpr uint32_t kVersion0EncodedLength = 9642: 2 * BlockHandle::kMaxEncodedLength + kMagicNumberLengthByte; 9642: static constexpr uint32_t kMinEncodedLength = kVersion0EncodedLength; 9642: 9642: 9642: 9642: 9642: 9642: static constexpr uint32_t kNewVersionsEncodedLength = 9642: 1 + 2 * BlockHandle::kMaxEncodedLength + 4 + kMagicNumberLengthByte; 9642: static constexpr uint32_t kMaxEncodedLength = kNewVersionsEncodedLength; 9642: 9642: static constexpr uint64_t kNullTableMagicNumber = 0; 9642: 9642: static constexpr uint32_t kInvalidFormatVersion = 0xffffffffU; 9642: 9642: private: 9642: static constexpr int kInvalidChecksumType = 9642: (1 << (sizeof(ChecksumType) * 8)) | kNoChecksum; 9642: 9642: uint64_t table_magic_number_ = kNullTableMagicNumber; 9642: uint32_t format_version_ = kInvalidFormatVersion; 9642: uint32_t base_context_checksum_ = 0; 9642: BlockHandle metaindex_handle_; 9642: BlockHandle index_handle_; 9642: int checksum_type_ = kInvalidChecksumType; 9642: uint8_t block_trailer_size_ = 0; 9642: }; 9642: 9642: 9642: class FooterBuilder { 9642: public: 9642: # 283 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 9642: Status Build(uint64_t table_magic_number, uint32_t format_version, 9642: uint64_t footer_offset, ChecksumType checksum_type, 9642: const BlockHandle& metaindex_handle, 9642: const BlockHandle& index_handle = BlockHandle::NullBlockHandle(), 9642: uint32_t base_context_checksum = 0); 9642: 9642: 9642: 9642: const Slice& GetSlice() const { 9642: 9642: # 292 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 3 4 9642: (static_cast ( 9642: # 292 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 9642: slice_.size() 9642: # 292 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 292 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 9642: "slice_.size()" 9642: # 292 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 292 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 9642: ; 9642: return slice_; 9642: } 9642: 9642: private: 9642: Slice slice_; 9642: std::array data_; 9642: }; 9642: 9642: 9642: 9642: 9642: Status ReadFooterFromFile(const IOOptions& opts, RandomAccessFileReader* file, 9642: FileSystem& fs, FilePrefetchBuffer* prefetch_buffer, 9642: uint64_t file_size, Footer* footer, 9642: uint64_t enforce_table_magic_number = 0); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: uint32_t ComputeBuiltinChecksum(ChecksumType type, const char* data, 9642: size_t size); 9642: uint32_t ComputeBuiltinChecksumWithLastByte(ChecksumType type, const char* data, 9642: size_t size, char last_byte); 9642: # 343 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 9642: struct BlockContents { 9642: 9642: Slice data; 9642: CacheAllocationPtr allocation; 9642: 9642: 9642: 9642: 9642: bool has_trailer = false; 9642: 9642: 9642: BlockContents() {} 9642: 9642: 9642: BlockContents(const Slice& _data) : data(_data) {} 9642: 9642: 9642: BlockContents(CacheAllocationPtr&& _data, size_t _size) 9642: : data(_data.get(), _size), allocation(std::move(_data)) {} 9642: 9642: 9642: BlockContents(std::unique_ptr&& _data, size_t _size) 9642: : data(_data.get(), _size) { 9642: allocation.reset(_data.release()); 9642: } 9642: 9642: 9642: bool own_bytes() const { return allocation.get() != nullptr; } 9642: 9642: 9642: size_t usable_size() const { 9642: if (allocation.get() != nullptr) { 9642: auto allocator = allocation.get_deleter().allocator; 9642: if (allocator) { 9642: return allocator->UsableSize(allocation.get(), data.size()); 9642: } 9642: 9642: return malloc_usable_size(allocation.get()); 9642: 9642: 9642: 9642: } else { 9642: return 0; 9642: } 9642: } 9642: 9642: size_t ApproximateMemoryUsage() const { 9642: return usable_size() + sizeof(*this); 9642: } 9642: 9642: BlockContents(BlockContents&& other) noexcept { *this = std::move(other); } 9642: 9642: BlockContents& operator=(BlockContents&& other) { 9642: data = std::move(other.data); 9642: allocation = std::move(other.allocation); 9642: 9642: has_trailer = other.has_trailer; 9642: 9642: return *this; 9642: } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: Status UncompressSerializedBlock(const UncompressionInfo& info, 9642: const char* data, size_t size, 9642: BlockContents* out_contents, 9642: uint32_t format_version, 9642: const ImmutableOptions& ioptions, 9642: MemoryAllocator* allocator = nullptr); 9642: 9642: 9642: 9642: Status UncompressBlockData(const UncompressionInfo& info, const char* data, 9642: size_t size, BlockContents* out_contents, 9642: uint32_t format_version, 9642: const ImmutableOptions& ioptions, 9642: MemoryAllocator* allocator = nullptr); 9642: 9642: 9642: Status ReifyDbHostIdProperty(Env* env, std::string* db_host_id); 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline BlockHandle::BlockHandle() : BlockHandle(~uint64_t{0}, ~uint64_t{0}) {} 9642: 9642: inline BlockHandle::BlockHandle(uint64_t _offset, uint64_t _size) 9642: : offset_(_offset), size_(_size) {} 9642: 9642: } 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: class PinnedIteratorsManager; 9642: 9642: enum class IterBoundCheck : char { 9642: kUnknown = 0, 9642: kOutOfBound, 9642: kInbound, 9642: }; 9642: 9642: struct IterateResult { 9642: Slice key; 9642: IterBoundCheck bound_check_result = IterBoundCheck::kUnknown; 9642: 9642: bool value_prepared = true; 9642: }; 9642: 9642: template 9642: class InternalIteratorBase : public Cleanable { 9642: public: 9642: InternalIteratorBase() {} 9642: 9642: 9642: InternalIteratorBase(const InternalIteratorBase&) = delete; 9642: InternalIteratorBase& operator=(const InternalIteratorBase&) = delete; 9642: 9642: virtual ~InternalIteratorBase() {} 9642: # 55 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 9642: virtual void SetRangeDelReadSeqno(SequenceNumber ) {} 9642: 9642: 9642: 9642: 9642: virtual bool Valid() const = 0; 9642: 9642: 9642: 9642: virtual void SeekToFirst() = 0; 9642: 9642: 9642: 9642: virtual void SeekToLast() = 0; 9642: # 77 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 9642: virtual void Seek(const Slice& target) = 0; 9642: 9642: 9642: 9642: 9642: virtual void SeekForPrev(const Slice& target) = 0; 9642: 9642: 9642: 9642: 9642: virtual void Next() = 0; 9642: 9642: 9642: 9642: 9642: 9642: virtual bool NextAndGetResult(IterateResult* result) { 9642: Next(); 9642: bool is_valid = Valid(); 9642: if (is_valid) { 9642: result->key = key(); 9642: 9642: 9642: 9642: result->bound_check_result = IterBoundCheck::kUnknown; 9642: result->value_prepared = false; 9642: 9642: # 103 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 3 4 9642: (static_cast ( 9642: # 103 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 9642: UpperBoundCheckResult() != IterBoundCheck::kOutOfBound 9642: # 103 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 103 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 9642: "UpperBoundCheckResult() != IterBoundCheck::kOutOfBound" 9642: # 103 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 103 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 9642: ; 9642: } 9642: return is_valid; 9642: } 9642: 9642: 9642: 9642: 9642: virtual void Prev() = 0; 9642: 9642: 9642: 9642: 9642: 9642: virtual Slice key() const = 0; 9642: 9642: 9642: 9642: 9642: 9642: virtual uint64_t write_unix_time() const { 9642: return std::numeric_limits::max(); 9642: } 9642: 9642: 9642: 9642: virtual Slice user_key() const { return ExtractUserKey(key()); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual TValue value() const = 0; 9642: 9642: 9642: 9642: 9642: virtual Status status() const = 0; 9642: # 154 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 9642: virtual bool PrepareValue() { return true; } 9642: 9642: 9642: virtual bool MayBeOutOfLowerBound() { return true; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual IterBoundCheck UpperBoundCheckResult() { 9642: return IterBoundCheck::kUnknown; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void SetPinnedItersMgr(PinnedIteratorsManager* ) { 9642: } 9642: # 184 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 9642: virtual bool IsKeyPinned() const { return false; } 9642: 9642: 9642: 9642: 9642: 9642: virtual bool IsValuePinned() const { return false; } 9642: 9642: virtual Status GetProperty(std::string , std::string* ) { 9642: return Status::NotSupported(""); 9642: } 9642: # 203 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 9642: virtual void GetReadaheadState(ReadaheadFileInfo* ) {} 9642: 9642: 9642: virtual void SetReadaheadState(ReadaheadFileInfo* ) {} 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual bool IsDeleteRangeSentinelKey() const { return false; } 9642: 9642: protected: 9642: void SeekForPrevImpl(const Slice& target, const CompareInterface* cmp) { 9642: Seek(target); 9642: if (!Valid()) { 9642: SeekToLast(); 9642: } 9642: while (Valid() && cmp->Compare(target, key()) < 0) { 9642: Prev(); 9642: } 9642: } 9642: }; 9642: 9642: using InternalIterator = InternalIteratorBase; 9642: 9642: 9642: template 9642: InternalIteratorBase* NewEmptyInternalIterator(); 9642: 9642: 9642: template 9642: InternalIteratorBase* NewErrorInternalIterator(const Status& status); 9642: 9642: 9642: template 9642: InternalIteratorBase* NewErrorInternalIterator(const Status& status, 9642: Arena* arena); 9642: 9642: } 9642: # 13 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: class PinnedIteratorsManager : public Cleanable { 9642: public: 9642: PinnedIteratorsManager() : pinning_enabled(false) {} 9642: ~PinnedIteratorsManager() { 9642: if (pinning_enabled) { 9642: ReleasePinnedData(); 9642: } 9642: } 9642: 9642: 9642: PinnedIteratorsManager(PinnedIteratorsManager&& other) noexcept = default; 9642: PinnedIteratorsManager& operator=(PinnedIteratorsManager&& other) noexcept = 9642: default; 9642: 9642: 9642: void StartPinning() { 9642: 9642: # 35 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 3 4 9642: (static_cast ( 9642: # 35 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 9642: pinning_enabled == false 9642: # 35 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 35 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 9642: "pinning_enabled == false" 9642: # 35 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 35 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 9642: ; 9642: pinning_enabled = true; 9642: } 9642: 9642: 9642: bool PinningEnabled() { return pinning_enabled; } 9642: 9642: 9642: void PinIterator(InternalIterator* iter, bool arena = false) { 9642: if (arena) { 9642: PinPtr(iter, &PinnedIteratorsManager::ReleaseArenaInternalIterator); 9642: } else { 9642: PinPtr(iter, &PinnedIteratorsManager::ReleaseInternalIterator); 9642: } 9642: } 9642: 9642: using ReleaseFunction = void (*)(void* arg1); 9642: void PinPtr(void* ptr, ReleaseFunction release_func) { 9642: 9642: # 53 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 3 4 9642: (static_cast ( 9642: # 53 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 9642: pinning_enabled 9642: # 53 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 53 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 9642: "pinning_enabled" 9642: # 53 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 53 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 9642: ; 9642: if (ptr == nullptr) { 9642: return; 9642: } 9642: pinned_ptrs_.emplace_back(ptr, release_func); 9642: } 9642: 9642: 9642: inline void ReleasePinnedData() { 9642: 9642: # 62 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 3 4 9642: (static_cast ( 9642: # 62 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 9642: pinning_enabled == true 9642: # 62 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 62 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 9642: "pinning_enabled == true" 9642: # 62 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 62 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 9642: ; 9642: pinning_enabled = false; 9642: 9642: 9642: std::sort(pinned_ptrs_.begin(), pinned_ptrs_.end()); 9642: auto unique_end = std::unique(pinned_ptrs_.begin(), pinned_ptrs_.end()); 9642: 9642: for (auto i = pinned_ptrs_.begin(); i != unique_end; ++i) { 9642: void* ptr = i->first; 9642: ReleaseFunction release_func = i->second; 9642: release_func(ptr); 9642: } 9642: pinned_ptrs_.clear(); 9642: 9642: Cleanable::Reset(); 9642: } 9642: 9642: private: 9642: static void ReleaseInternalIterator(void* ptr) { 9642: delete static_cast(ptr); 9642: } 9642: 9642: static void ReleaseArenaInternalIterator(void* ptr) { 9642: static_cast(ptr)->~InternalIterator(); 9642: } 9642: 9642: bool pinning_enabled; 9642: std::vector> pinned_ptrs_; 9642: }; 9642: 9642: } 9642: # 16 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 2 9642: 9642: 9642: 9642: namespace rocksdb { 9642: struct FragmentedRangeTombstoneList; 9642: 9642: struct FragmentedRangeTombstoneListCache { 9642: 9642: std::mutex reader_mutex; 9642: std::unique_ptr tombstones = nullptr; 9642: 9642: std::atomic initialized = false; 9642: }; 9642: 9642: struct FragmentedRangeTombstoneList { 9642: public: 9642: # 40 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 9642: struct RangeTombstoneStack { 9642: RangeTombstoneStack(const Slice& start, const Slice& end, size_t start_idx, 9642: size_t end_idx) 9642: : start_key(start), 9642: end_key(end), 9642: seq_start_idx(start_idx), 9642: seq_end_idx(end_idx) {} 9642: Slice start_key; 9642: Slice end_key; 9642: size_t seq_start_idx; 9642: size_t seq_end_idx; 9642: }; 9642: 9642: 9642: FragmentedRangeTombstoneList( 9642: std::unique_ptr unfragmented_tombstones, 9642: const InternalKeyComparator& icmp, bool for_compaction = false, 9642: const std::vector& snapshots = {}, 9642: const bool tombstone_end_include_ts = true); 9642: 9642: std::vector::const_iterator begin() const { 9642: return tombstones_.begin(); 9642: } 9642: 9642: std::vector::const_iterator end() const { 9642: return tombstones_.end(); 9642: } 9642: 9642: std::vector::const_iterator seq_iter(size_t idx) const { 9642: return std::next(tombstone_seqs_.begin(), idx); 9642: } 9642: 9642: std::vector::const_iterator ts_iter(size_t idx) const { 9642: return std::next(tombstone_timestamps_.begin(), idx); 9642: } 9642: 9642: std::vector::const_iterator seq_begin() const { 9642: return tombstone_seqs_.begin(); 9642: } 9642: 9642: std::vector::const_iterator seq_end() const { 9642: return tombstone_seqs_.end(); 9642: } 9642: 9642: bool empty() const { return tombstones_.empty(); } 9642: 9642: 9642: 9642: 9642: 9642: bool ContainsRange(SequenceNumber lower, SequenceNumber upper); 9642: 9642: uint64_t num_unfragmented_tombstones() const { 9642: return num_unfragmented_tombstones_; 9642: } 9642: 9642: uint64_t total_tombstone_payload_bytes() const { 9642: return total_tombstone_payload_bytes_; 9642: } 9642: 9642: private: 9642: # 111 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 9642: void FragmentTombstones( 9642: std::unique_ptr unfragmented_tombstones, 9642: const InternalKeyComparator& icmp, bool for_compaction, 9642: const std::vector& snapshots); 9642: 9642: std::vector tombstones_; 9642: std::vector tombstone_seqs_; 9642: std::vector tombstone_timestamps_; 9642: std::once_flag seq_set_init_once_flag_; 9642: std::set seq_set_; 9642: std::list pinned_slices_; 9642: PinnedIteratorsManager pinned_iters_mgr_; 9642: uint64_t num_unfragmented_tombstones_; 9642: uint64_t total_tombstone_payload_bytes_; 9642: }; 9642: # 136 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 9642: class FragmentedRangeTombstoneIterator : public InternalIterator { 9642: public: 9642: FragmentedRangeTombstoneIterator(FragmentedRangeTombstoneList* tombstones, 9642: const InternalKeyComparator& icmp, 9642: SequenceNumber upper_bound, 9642: const Slice* ts_upper_bound = nullptr, 9642: SequenceNumber lower_bound = 0); 9642: FragmentedRangeTombstoneIterator( 9642: const std::shared_ptr& tombstones, 9642: const InternalKeyComparator& icmp, SequenceNumber upper_bound, 9642: const Slice* ts_upper_bound = nullptr, SequenceNumber lower_bound = 0); 9642: FragmentedRangeTombstoneIterator( 9642: const std::shared_ptr& tombstones, 9642: const InternalKeyComparator& icmp, SequenceNumber upper_bound, 9642: const Slice* ts_upper_bound = nullptr, SequenceNumber lower_bound = 0); 9642: 9642: void SetRangeDelReadSeqno(SequenceNumber read_seqno) override { 9642: upper_bound_ = read_seqno; 9642: } 9642: 9642: void SeekToFirst() override; 9642: void SeekToLast() override; 9642: 9642: void SeekToTopFirst(); 9642: void SeekToTopLast(); 9642: # 170 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 9642: void Seek(const Slice& target) override; 9642: 9642: 9642: 9642: void SeekForPrev(const Slice& target) override; 9642: 9642: void Next() override; 9642: void Prev() override; 9642: 9642: void TopNext(); 9642: void TopPrev(); 9642: 9642: bool Valid() const override; 9642: 9642: 9642: Slice key() const override { 9642: MaybePinKey(); 9642: return current_start_key_.Encode(); 9642: } 9642: Slice value() const override { return pos_->end_key; } 9642: bool IsKeyPinned() const override { return false; } 9642: bool IsValuePinned() const override { return true; } 9642: Status status() const override { return Status::OK(); } 9642: 9642: bool empty() const { return tombstones_->empty(); } 9642: void Invalidate() { 9642: pos_ = tombstones_->end(); 9642: seq_pos_ = tombstones_->seq_end(); 9642: pinned_pos_ = tombstones_->end(); 9642: pinned_seq_pos_ = tombstones_->seq_end(); 9642: } 9642: 9642: RangeTombstone Tombstone(bool logical_strip_timestamp = false) const { 9642: 9642: # 203 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 3 4 9642: (static_cast ( 9642: # 203 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 9642: Valid() 9642: # 203 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 203 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 9642: "Valid()" 9642: # 203 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 203 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 9642: ; 9642: if (icmp_->user_comparator()->timestamp_size()) { 9642: return RangeTombstone(start_key(), end_key(), seq(), timestamp(), 9642: logical_strip_timestamp); 9642: } 9642: return RangeTombstone(start_key(), end_key(), seq()); 9642: } 9642: 9642: 9642: 9642: 9642: Slice start_key() const { return pos_->start_key; } 9642: Slice end_key() const { return pos_->end_key; } 9642: SequenceNumber seq() const { return *seq_pos_; } 9642: Slice timestamp() const { 9642: 9642: return *tombstones_->ts_iter(seq_pos_ - tombstones_->seq_begin()); 9642: } 9642: 9642: 9642: void SetTimestampUpperBound(const Slice* ts_upper_bound) { 9642: ts_upper_bound_ = ts_upper_bound; 9642: } 9642: 9642: ParsedInternalKey parsed_start_key() const { 9642: return ParsedInternalKey(pos_->start_key, seq(), kTypeRangeDeletion); 9642: } 9642: ParsedInternalKey parsed_end_key() const { 9642: return ParsedInternalKey(pos_->end_key, kMaxSequenceNumber, 9642: kTypeRangeDeletion); 9642: } 9642: 9642: 9642: 9642: 9642: SequenceNumber MaxCoveringTombstoneSeqnum(const Slice& user_key); 9642: # 249 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 9642: std::map> 9642: SplitBySnapshot(const std::vector& snapshots); 9642: 9642: SequenceNumber upper_bound() const { return upper_bound_; } 9642: SequenceNumber lower_bound() const { return lower_bound_; } 9642: 9642: uint64_t num_unfragmented_tombstones() const { 9642: return tombstones_->num_unfragmented_tombstones(); 9642: } 9642: uint64_t total_tombstone_payload_bytes() const { 9642: return tombstones_->total_tombstone_payload_bytes(); 9642: } 9642: 9642: private: 9642: using RangeTombstoneStack = FragmentedRangeTombstoneList::RangeTombstoneStack; 9642: 9642: struct RangeTombstoneStackStartComparator { 9642: explicit RangeTombstoneStackStartComparator(const Comparator* c) : cmp(c) {} 9642: 9642: bool operator()(const RangeTombstoneStack& a, 9642: const RangeTombstoneStack& b) const { 9642: return cmp->CompareWithoutTimestamp(a.start_key, b.start_key) < 0; 9642: } 9642: 9642: bool operator()(const RangeTombstoneStack& a, const Slice& b) const { 9642: return cmp->CompareWithoutTimestamp(a.start_key, b) < 0; 9642: } 9642: 9642: bool operator()(const Slice& a, const RangeTombstoneStack& b) const { 9642: return cmp->CompareWithoutTimestamp(a, b.start_key) < 0; 9642: } 9642: 9642: const Comparator* cmp; 9642: }; 9642: 9642: struct RangeTombstoneStackEndComparator { 9642: explicit RangeTombstoneStackEndComparator(const Comparator* c) : cmp(c) {} 9642: 9642: bool operator()(const RangeTombstoneStack& a, 9642: const RangeTombstoneStack& b) const { 9642: return cmp->CompareWithoutTimestamp(a.end_key, b.end_key) < 0; 9642: } 9642: 9642: bool operator()(const RangeTombstoneStack& a, const Slice& b) const { 9642: return cmp->CompareWithoutTimestamp(a.end_key, b) < 0; 9642: } 9642: 9642: bool operator()(const Slice& a, const RangeTombstoneStack& b) const { 9642: return cmp->CompareWithoutTimestamp(a, b.end_key) < 0; 9642: } 9642: 9642: const Comparator* cmp; 9642: }; 9642: 9642: void MaybePinKey() const { 9642: if (pos_ != tombstones_->end() && seq_pos_ != tombstones_->seq_end() && 9642: (pinned_pos_ != pos_ || pinned_seq_pos_ != seq_pos_)) { 9642: current_start_key_.Set(pos_->start_key, *seq_pos_, kTypeRangeDeletion); 9642: pinned_pos_ = pos_; 9642: pinned_seq_pos_ = seq_pos_; 9642: } 9642: } 9642: 9642: void SeekToCoveringTombstone(const Slice& key); 9642: void SeekForPrevToCoveringTombstone(const Slice& key); 9642: void ScanForwardToVisibleTombstone(); 9642: void ScanBackwardToVisibleTombstone(); 9642: bool ValidPos() const { 9642: return Valid() && seq_pos_ != tombstones_->seq_iter(pos_->seq_end_idx); 9642: } 9642: 9642: const RangeTombstoneStackStartComparator tombstone_start_cmp_; 9642: const RangeTombstoneStackEndComparator tombstone_end_cmp_; 9642: const InternalKeyComparator* icmp_; 9642: const Comparator* ucmp_; 9642: std::shared_ptr tombstones_ref_; 9642: std::shared_ptr tombstones_cache_ref_; 9642: FragmentedRangeTombstoneList* tombstones_; 9642: SequenceNumber upper_bound_; 9642: SequenceNumber lower_bound_; 9642: 9642: const Slice* ts_upper_bound_; 9642: std::vector::const_iterator pos_; 9642: std::vector::const_iterator seq_pos_; 9642: mutable std::vector::const_iterator pinned_pos_; 9642: mutable std::vector::const_iterator pinned_seq_pos_; 9642: mutable InternalKey current_start_key_; 9642: 9642: 9642: 9642: 9642: 9642: void SetMaxVisibleSeqAndTimestamp() { 9642: seq_pos_ = std::lower_bound(tombstones_->seq_iter(pos_->seq_start_idx), 9642: tombstones_->seq_iter(pos_->seq_end_idx), 9642: upper_bound_, std::greater()); 9642: if (ts_upper_bound_ && !ts_upper_bound_->empty()) { 9642: auto ts_pos = std::lower_bound( 9642: tombstones_->ts_iter(pos_->seq_start_idx), 9642: tombstones_->ts_iter(pos_->seq_end_idx), *ts_upper_bound_, 9642: [this](const Slice& s1, const Slice& s2) { 9642: return ucmp_->CompareTimestamp(s1, s2) > 0; 9642: }); 9642: auto ts_idx = ts_pos - tombstones_->ts_iter(pos_->seq_start_idx); 9642: auto seq_idx = seq_pos_ - tombstones_->seq_iter(pos_->seq_start_idx); 9642: if (seq_idx < ts_idx) { 9642: 9642: 9642: seq_pos_ = tombstones_->seq_iter(pos_->seq_start_idx + ts_idx); 9642: } 9642: } 9642: } 9642: }; 9642: 9642: } 9642: # 22 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class ReadCallback { 9642: public: 9642: explicit ReadCallback(SequenceNumber last_visible_seq) 9642: : max_visible_seq_(last_visible_seq) {} 9642: ReadCallback(SequenceNumber last_visible_seq, SequenceNumber min_uncommitted) 9642: : max_visible_seq_(last_visible_seq), min_uncommitted_(min_uncommitted) {} 9642: 9642: virtual ~ReadCallback() {} 9642: 9642: 9642: 9642: virtual bool IsVisibleFullCheck(SequenceNumber seq) = 0; 9642: 9642: inline bool IsVisible(SequenceNumber seq) { 9642: 9642: # 27 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 9642: (static_cast ( 9642: # 27 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 9642: min_uncommitted_ > 0 9642: # 27 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 27 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 9642: "min_uncommitted_ > 0" 9642: # 27 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 27 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 9642: ; 9642: 9642: # 28 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 9642: (static_cast ( 9642: # 28 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 9642: min_uncommitted_ >= kMinUnCommittedSeq 9642: # 28 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 28 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 9642: "min_uncommitted_ >= kMinUnCommittedSeq" 9642: # 28 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 28 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 9642: ; 9642: if (seq < min_uncommitted_) { 9642: 9642: # 30 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 9642: (static_cast ( 9642: # 30 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 9642: seq <= max_visible_seq_ 9642: # 30 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 30 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 9642: "seq <= max_visible_seq_" 9642: # 30 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 30 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 9642: ; 9642: return true; 9642: } else if (max_visible_seq_ < seq) { 9642: 9642: # 33 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 9642: (static_cast ( 9642: # 33 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 9642: seq != 0 9642: # 33 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 33 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 9642: "seq != 0" 9642: # 33 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 33 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 9642: ; 9642: return false; 9642: } else { 9642: 9642: # 36 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 9642: (static_cast ( 9642: # 36 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 9642: seq != 0 9642: # 36 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 36 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 9642: "seq != 0" 9642: # 36 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 36 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 9642: ; 9642: return IsVisibleFullCheck(seq); 9642: } 9642: } 9642: 9642: inline SequenceNumber max_visible_seq() { return max_visible_seq_; } 9642: 9642: 9642: virtual void Refresh(SequenceNumber seq) { max_visible_seq_ = seq; } 9642: 9642: protected: 9642: 9642: 9642: SequenceNumber max_visible_seq_ = kMaxSequenceNumber; 9642: 9642: const SequenceNumber min_uncommitted_ = kMinUnCommittedSeq; 9642: }; 9642: 9642: } 9642: # 23 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/cinttypes" 1 3 9642: # 32 "/usr/include/c++/13/cinttypes" 3 9642: 9642: # 33 "/usr/include/c++/13/cinttypes" 3 9642: # 46 "/usr/include/c++/13/cinttypes" 3 9642: # 1 "/usr/include/inttypes.h" 1 3 4 9642: # 327 "/usr/include/inttypes.h" 3 4 9642: 9642: # 327 "/usr/include/inttypes.h" 3 4 9642: extern "C" { 9642: # 341 "/usr/include/inttypes.h" 3 4 9642: typedef struct 9642: { 9642: __extension__ long long int quot; 9642: __extension__ long long int rem; 9642: } imaxdiv_t; 9642: 9642: 9642: 9642: 9642: 9642: extern intmax_t imaxabs (intmax_t __n) noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern imaxdiv_t imaxdiv (intmax_t __numer, intmax_t __denom) 9642: noexcept (true) __attribute__ ((__const__)); 9642: 9642: 9642: extern intmax_t strtoimax (const char *__restrict __nptr, 9642: char **__restrict __endptr, int __base) noexcept (true); 9642: 9642: 9642: extern uintmax_t strtoumax (const char *__restrict __nptr, 9642: char ** __restrict __endptr, int __base) noexcept (true); 9642: 9642: 9642: extern intmax_t wcstoimax (const wchar_t *__restrict __nptr, 9642: wchar_t **__restrict __endptr, int __base) 9642: noexcept (true); 9642: 9642: 9642: extern uintmax_t wcstoumax (const wchar_t *__restrict __nptr, 9642: wchar_t ** __restrict __endptr, int __base) 9642: noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: extern intmax_t strtoimax (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoimax") 9642: 9642: ; 9642: extern uintmax_t strtoumax (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoumax") 9642: 9642: ; 9642: extern intmax_t wcstoimax (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_wcstoimax") 9642: 9642: 9642: ; 9642: extern uintmax_t wcstoumax (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_wcstoumax") 9642: 9642: 9642: ; 9642: # 415 "/usr/include/inttypes.h" 3 4 9642: } 9642: # 47 "/usr/include/c++/13/cinttypes" 2 3 9642: # 55 "/usr/include/c++/13/cinttypes" 3 9642: namespace std 9642: { 9642: 9642: using ::imaxdiv_t; 9642: 9642: 9642: using ::imaxabs; 9642: using ::imaxdiv; 9642: 9642: 9642: 9642: 9642: 9642: using ::strtoimax; 9642: using ::strtoumax; 9642: 9642: 9642: using ::wcstoimax; 9642: using ::wcstoumax; 9642: 9642: } 9642: # 11 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 2 9642: # 21 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 9642: 9642: # 21 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 9642: namespace rocksdb { 9642: 9642: constexpr uint64_t kUnknownTimeBeforeAll = 0; 9642: constexpr SequenceNumber kUnknownSeqnoBeforeAll = 0; 9642: 9642: 9642: 9642: constexpr uint64_t kMaxSeqnoTimePairsPerSST = 100; 9642: # 38 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 9642: constexpr uint64_t kMaxSeqnoTimePairsPerCF = 100; 9642: 9642: constexpr uint64_t kMaxSeqnoToTimeEntries = kMaxSeqnoTimePairsPerCF * 10; 9642: # 68 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 9642: class SeqnoToTimeMapping { 9642: public: 9642: 9642: struct SeqnoTimePair { 9642: SequenceNumber seqno = 0; 9642: uint64_t time = 0; 9642: 9642: SeqnoTimePair() = default; 9642: SeqnoTimePair(SequenceNumber _seqno, uint64_t _time) 9642: : seqno(_seqno), time(_time) {} 9642: 9642: 9642: void Encode(std::string& dest) const; 9642: 9642: 9642: Status Decode(Slice& input); 9642: 9642: 9642: SeqnoTimePair ComputeDelta(const SeqnoTimePair& base) const { 9642: return {seqno - base.seqno, time - base.time}; 9642: } 9642: 9642: 9642: void ApplyDelta(const SeqnoTimePair& delta_or_base) { 9642: seqno += delta_or_base.seqno; 9642: time += delta_or_base.time; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: bool Merge(const SeqnoTimePair& other); 9642: 9642: 9642: bool operator<(const SeqnoTimePair& other) const { 9642: return std::tie(seqno, time) < std::tie(other.seqno, other.time); 9642: } 9642: 9642: bool operator==(const SeqnoTimePair& other) const { 9642: return std::tie(seqno, time) == std::tie(other.seqno, other.time); 9642: } 9642: 9642: static bool SeqnoLess(const SeqnoTimePair& a, const SeqnoTimePair& b) { 9642: return a.seqno < b.seqno; 9642: } 9642: 9642: static bool TimeLess(const SeqnoTimePair& a, const SeqnoTimePair& b) { 9642: return a.time < b.time; 9642: } 9642: }; 9642: 9642: 9642: SeqnoToTimeMapping() {} 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: SeqnoToTimeMapping& SetMaxTimeSpan(uint64_t max_time_span); 9642: 9642: 9642: 9642: 9642: 9642: SeqnoToTimeMapping& SetCapacity(uint64_t capacity); 9642: 9642: 9642: 9642: 9642: 9642: bool PrePopulate(SequenceNumber from_seqno, SequenceNumber to_seqno, 9642: uint64_t from_time, uint64_t to_time); 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool Append(SequenceNumber seqno, uint64_t time); 9642: 9642: 9642: 9642: void Clear() { 9642: pairs_.clear(); 9642: enforced_ = true; 9642: } 9642: # 166 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 9642: SeqnoToTimeMapping& Enforce(uint64_t now = 0); 9642: 9642: 9642: 9642: 9642: void AddUnenforced(SequenceNumber seqno, uint64_t time); 9642: 9642: 9642: 9642: 9642: Status DecodeFrom(const std::string& pairs_str); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void CopyFromSeqnoRange(const SeqnoToTimeMapping& src, 9642: SequenceNumber from_seqno, 9642: SequenceNumber to_seqno = kMaxSequenceNumber); 9642: void CopyFrom(const SeqnoToTimeMapping& src) { 9642: CopyFromSeqnoRange(src, kUnknownSeqnoBeforeAll, kMaxSequenceNumber); 9642: } 9642: # 202 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 9642: uint64_t GetProximalTimeBeforeSeqno(SequenceNumber seqno) const; 9642: # 214 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 9642: SequenceNumber GetProximalSeqnoBeforeTime(uint64_t time) const; 9642: 9642: 9642: 9642: 9642: void EncodeTo(std::string& dest) const; 9642: 9642: 9642: size_t Size() const { return pairs_.size(); } 9642: 9642: uint64_t GetCapacity() const { return capacity_; } 9642: 9642: 9642: bool Empty() const { return pairs_.empty(); } 9642: 9642: 9642: 9642: std::string ToHumanString() const; 9642: 9642: 9642: const SeqnoTimePair& TEST_GetLastEntry() const { return pairs_.back(); } 9642: const std::deque& TEST_GetInternalMapping() const { 9642: return pairs_; 9642: } 9642: bool TEST_IsEnforced() const { return enforced_; } 9642: 9642: 9642: private: 9642: uint64_t max_time_span_ = 9642: # 242 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 3 4 9642: (18446744073709551615ULL) 9642: # 242 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 9642: ; 9642: uint64_t capacity_ = 9642: # 243 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 3 4 9642: (18446744073709551615ULL) 9642: # 243 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 9642: ; 9642: 9642: std::deque pairs_; 9642: # 255 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 9642: bool enforced_ = true; 9642: 9642: void EnforceMaxTimeSpan(uint64_t now = 0); 9642: void EnforceCapacity(bool strict); 9642: void SortAndMerge(); 9642: 9642: using pair_const_iterator = 9642: std::deque::const_iterator; 9642: pair_const_iterator FindGreaterTime(uint64_t time) const; 9642: pair_const_iterator FindGreaterSeqno(SequenceNumber seqno) const; 9642: pair_const_iterator FindGreaterEqSeqno(SequenceNumber seqno) const; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: Slice PackValueAndWriteTime(const Slice& value, uint64_t unix_write_time, 9642: std::string* buf); 9642: 9642: 9642: 9642: Slice PackValueAndSeqno(const Slice& value, SequenceNumber seqno, 9642: std::string* buf); 9642: 9642: 9642: uint64_t ParsePackedValueForWriteTime(const Slice& value); 9642: 9642: 9642: 9642: std::tuple ParsePackedValueWithWriteTime(const Slice& value); 9642: 9642: 9642: SequenceNumber ParsePackedValueForSeqno(const Slice& value); 9642: 9642: 9642: 9642: std::tuple ParsePackedValueWithSeqno(const Slice& value); 9642: 9642: 9642: 9642: Slice ParsePackedValueForValue(const Slice& value); 9642: 9642: } 9642: # 24 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/cassert" 1 3 9642: # 41 "/usr/include/c++/13/cassert" 3 9642: 9642: # 42 "/usr/include/c++/13/cassert" 3 9642: 9642: 9642: # 1 "/usr/include/assert.h" 1 3 4 9642: # 45 "/usr/include/c++/13/cassert" 2 3 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.h" 2 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_constants.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: constexpr uint64_t kInvalidBlobFileNumber = 0; 9642: 9642: } 9642: # 14 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.h" 2 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class JSONWriter; 9642: class Slice; 9642: class Status; 9642: 9642: class BlobFileAddition { 9642: public: 9642: BlobFileAddition() = default; 9642: 9642: BlobFileAddition(uint64_t blob_file_number, uint64_t total_blob_count, 9642: uint64_t total_blob_bytes, std::string checksum_method, 9642: std::string checksum_value) 9642: : blob_file_number_(blob_file_number), 9642: total_blob_count_(total_blob_count), 9642: total_blob_bytes_(total_blob_bytes), 9642: checksum_method_(std::move(checksum_method)), 9642: checksum_value_(std::move(checksum_value)) { 9642: 9642: # 34 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.h" 3 4 9642: (static_cast ( 9642: # 34 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.h" 9642: checksum_method_.empty() == checksum_value_.empty() 9642: # 34 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 34 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.h" 9642: "checksum_method_.empty() == checksum_value_.empty()" 9642: # 34 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 34 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.h" 9642: ; 9642: } 9642: 9642: uint64_t GetBlobFileNumber() const { return blob_file_number_; } 9642: uint64_t GetTotalBlobCount() const { return total_blob_count_; } 9642: uint64_t GetTotalBlobBytes() const { return total_blob_bytes_; } 9642: const std::string& GetChecksumMethod() const { return checksum_method_; } 9642: const std::string& GetChecksumValue() const { return checksum_value_; } 9642: 9642: void EncodeTo(std::string* output) const; 9642: Status DecodeFrom(Slice* input); 9642: 9642: std::string DebugString() const; 9642: std::string DebugJSON() const; 9642: 9642: private: 9642: enum CustomFieldTags : uint32_t; 9642: 9642: uint64_t blob_file_number_ = kInvalidBlobFileNumber; 9642: uint64_t total_blob_count_ = 0; 9642: uint64_t total_blob_bytes_ = 0; 9642: std::string checksum_method_; 9642: std::string checksum_value_; 9642: }; 9642: 9642: bool operator==(const BlobFileAddition& lhs, const BlobFileAddition& rhs); 9642: bool operator!=(const BlobFileAddition& lhs, const BlobFileAddition& rhs); 9642: 9642: std::ostream& operator<<(std::ostream& os, 9642: const BlobFileAddition& blob_file_addition); 9642: JSONWriter& operator<<(JSONWriter& jw, 9642: const BlobFileAddition& blob_file_addition); 9642: 9642: } 9642: # 19 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_garbage.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 15 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_garbage.h" 9642: namespace rocksdb { 9642: 9642: class JSONWriter; 9642: class Slice; 9642: class Status; 9642: 9642: class BlobFileGarbage { 9642: public: 9642: BlobFileGarbage() = default; 9642: 9642: BlobFileGarbage(uint64_t blob_file_number, uint64_t garbage_blob_count, 9642: uint64_t garbage_blob_bytes) 9642: : blob_file_number_(blob_file_number), 9642: garbage_blob_count_(garbage_blob_count), 9642: garbage_blob_bytes_(garbage_blob_bytes) {} 9642: 9642: uint64_t GetBlobFileNumber() const { return blob_file_number_; } 9642: uint64_t GetGarbageBlobCount() const { return garbage_blob_count_; } 9642: uint64_t GetGarbageBlobBytes() const { return garbage_blob_bytes_; } 9642: 9642: void EncodeTo(std::string* output) const; 9642: Status DecodeFrom(Slice* input); 9642: 9642: std::string DebugString() const; 9642: std::string DebugJSON() const; 9642: 9642: private: 9642: enum CustomFieldTags : uint32_t; 9642: 9642: uint64_t blob_file_number_ = kInvalidBlobFileNumber; 9642: uint64_t garbage_blob_count_ = 0; 9642: uint64_t garbage_blob_bytes_ = 0; 9642: }; 9642: 9642: bool operator==(const BlobFileGarbage& lhs, const BlobFileGarbage& rhs); 9642: bool operator!=(const BlobFileGarbage& lhs, const BlobFileGarbage& rhs); 9642: 9642: std::ostream& operator<<(std::ostream& os, 9642: const BlobFileGarbage& blob_file_garbage); 9642: JSONWriter& operator<<(JSONWriter& jw, 9642: const BlobFileGarbage& blob_file_garbage); 9642: 9642: } 9642: # 20 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/wal_edit.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/db/wal_edit.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/logging/log_buffer.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/ctime" 1 3 9642: # 39 "/usr/include/c++/13/ctime" 3 9642: 9642: # 40 "/usr/include/c++/13/ctime" 3 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/logging/log_buffer.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 1 9642: # 14 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/memory/allocator.h" 1 9642: # 13 "/build/reproducible-path/rocksdb-9.3.1/memory/allocator.h" 9642: 9642: # 1 "/usr/include/c++/13/cerrno" 1 3 9642: # 39 "/usr/include/c++/13/cerrno" 3 9642: 9642: # 40 "/usr/include/c++/13/cerrno" 3 9642: # 15 "/build/reproducible-path/rocksdb-9.3.1/memory/allocator.h" 2 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class Logger; 9642: 9642: class Allocator { 9642: public: 9642: virtual ~Allocator() {} 9642: 9642: virtual char* Allocate(size_t bytes) = 0; 9642: virtual char* AllocateAligned(size_t bytes, size_t huge_page_size = 0, 9642: Logger* logger = nullptr) = 0; 9642: 9642: virtual size_t BlockSize() const = 0; 9642: }; 9642: 9642: class AllocTracker { 9642: public: 9642: explicit AllocTracker(WriteBufferManager* write_buffer_manager); 9642: 9642: AllocTracker(const AllocTracker&) = delete; 9642: void operator=(const AllocTracker&) = delete; 9642: 9642: ~AllocTracker(); 9642: void Allocate(size_t bytes); 9642: 9642: 9642: void DoneAllocating(); 9642: 9642: void FreeMem(); 9642: 9642: bool is_freed() const { return write_buffer_manager_ == nullptr || freed_; } 9642: 9642: private: 9642: WriteBufferManager* write_buffer_manager_; 9642: std::atomic bytes_allocated_; 9642: bool done_allocating_; 9642: bool freed_; 9642: }; 9642: 9642: } 9642: # 20 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/port/mmap.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/sys/mman.h" 1 3 4 9642: # 25 "/usr/include/arm-linux-gnueabihf/sys/mman.h" 3 4 9642: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 9642: # 26 "/usr/include/arm-linux-gnueabihf/sys/mman.h" 2 3 4 9642: # 41 "/usr/include/arm-linux-gnueabihf/sys/mman.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mman.h" 1 3 4 9642: # 29 "/usr/include/arm-linux-gnueabihf/bits/mman.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mman-map-flags-generic.h" 1 3 4 9642: # 30 "/usr/include/arm-linux-gnueabihf/bits/mman.h" 2 3 4 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mman-linux.h" 1 3 4 9642: # 116 "/usr/include/arm-linux-gnueabihf/bits/mman-linux.h" 3 4 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mman-shared.h" 1 3 4 9642: # 51 "/usr/include/arm-linux-gnueabihf/bits/mman-shared.h" 3 4 9642: 9642: # 51 "/usr/include/arm-linux-gnueabihf/bits/mman-shared.h" 3 4 9642: extern "C" { 9642: 9642: 9642: 9642: int memfd_create (const char *__name, unsigned int __flags) noexcept (true); 9642: 9642: 9642: 9642: int mlock2 (const void *__addr, size_t __length, unsigned int __flags) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: int pkey_alloc (unsigned int __flags, unsigned int __access_rights) noexcept (true); 9642: 9642: 9642: 9642: int pkey_set (int __key, unsigned int __access_rights) noexcept (true); 9642: 9642: 9642: 9642: int pkey_get (int __key) noexcept (true); 9642: 9642: 9642: 9642: int pkey_free (int __key) noexcept (true); 9642: 9642: 9642: 9642: int pkey_mprotect (void *__addr, size_t __len, int __prot, int __pkey) noexcept (true); 9642: 9642: } 9642: # 117 "/usr/include/arm-linux-gnueabihf/bits/mman-linux.h" 2 3 4 9642: # 33 "/usr/include/arm-linux-gnueabihf/bits/mman.h" 2 3 4 9642: # 42 "/usr/include/arm-linux-gnueabihf/sys/mman.h" 2 3 4 9642: 9642: 9642: 9642: 9642: extern "C" { 9642: # 61 "/usr/include/arm-linux-gnueabihf/sys/mman.h" 3 4 9642: extern void * mmap (void *__addr, size_t __len, int __prot, int __flags, int __fd, __off64_t __offset) noexcept (true) __asm__ ("" "mmap64") 9642: 9642: 9642: ; 9642: 9642: 9642: 9642: 9642: 9642: extern void *mmap64 (void *__addr, size_t __len, int __prot, 9642: int __flags, int __fd, __off64_t __offset) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int munmap (void *__addr, size_t __len) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int mprotect (void *__addr, size_t __len, int __prot) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int msync (void *__addr, size_t __len, int __flags); 9642: 9642: 9642: 9642: 9642: extern int madvise (void *__addr, size_t __len, int __advice) noexcept (true); 9642: 9642: 9642: 9642: extern int posix_madvise (void *__addr, size_t __len, int __advice) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int mlock (const void *__addr, size_t __len) noexcept (true); 9642: 9642: 9642: extern int munlock (const void *__addr, size_t __len) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int mlockall (int __flags) noexcept (true); 9642: 9642: 9642: 9642: extern int munlockall (void) noexcept (true); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: extern int mincore (void *__start, size_t __len, unsigned char *__vec) 9642: noexcept (true); 9642: # 133 "/usr/include/arm-linux-gnueabihf/sys/mman.h" 3 4 9642: extern void *mremap (void *__addr, size_t __old_len, size_t __new_len, 9642: int __flags, ...) noexcept (true); 9642: 9642: 9642: 9642: extern int remap_file_pages (void *__start, size_t __size, int __prot, 9642: size_t __pgoff, int __flags) noexcept (true); 9642: 9642: 9642: 9642: 9642: extern int shm_open (const char *__name, int __oflag, mode_t __mode); 9642: 9642: 9642: extern int shm_unlink (const char *__name); 9642: 9642: 9642: # 1 "/usr/include/arm-linux-gnueabihf/bits/mman_ext.h" 1 3 4 9642: # 24 "/usr/include/arm-linux-gnueabihf/bits/mman_ext.h" 3 4 9642: struct iovec; 9642: extern __ssize_t process_madvise (int __pid_fd, const struct iovec *__iov, 9642: size_t __count, int __advice, 9642: unsigned __flags) 9642: noexcept (true); 9642: 9642: extern int process_mrelease (int pidfd, unsigned int flags) noexcept (true); 9642: # 151 "/usr/include/arm-linux-gnueabihf/sys/mman.h" 2 3 4 9642: 9642: } 9642: # 14 "/build/reproducible-path/rocksdb-9.3.1/port/mmap.h" 2 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 21 "/build/reproducible-path/rocksdb-9.3.1/port/mmap.h" 9642: namespace rocksdb { 9642: 9642: 9642: class MemMapping { 9642: public: 9642: static constexpr bool kHugePageSupported = 9642: 9642: true; 9642: 9642: 9642: 9642: 9642: 9642: static MemMapping AllocateHuge(size_t length); 9642: 9642: 9642: 9642: 9642: 9642: 9642: static MemMapping AllocateLazyZeroed(size_t length); 9642: 9642: 9642: MemMapping(const MemMapping&) = delete; 9642: MemMapping& operator=(const MemMapping&) = delete; 9642: 9642: MemMapping(MemMapping&&) noexcept; 9642: MemMapping& operator=(MemMapping&&) noexcept; 9642: 9642: 9642: ~MemMapping(); 9642: 9642: inline void* Get() const { return addr_; } 9642: inline size_t Length() const { return length_; } 9642: 9642: private: 9642: MemMapping() {} 9642: 9642: 9642: void* addr_ = nullptr; 9642: 9642: size_t length_ = 0; 9642: 9642: 9642: 9642: 9642: 9642: static MemMapping AllocateAnonymous(size_t length, bool huge); 9642: }; 9642: 9642: 9642: 9642: 9642: template 9642: class TypedMemMapping : public MemMapping { 9642: public: 9642: TypedMemMapping(MemMapping&& v) noexcept 9642: : MemMapping(std::move(v)) {} 9642: TypedMemMapping& operator=(MemMapping&& v) noexcept { 9642: MemMapping& base = *this; 9642: base = std::move(v); 9642: } 9642: 9642: inline T* Get() const { return static_cast(MemMapping::Get()); } 9642: inline size_t Count() const { return MemMapping::Length() / sizeof(T); } 9642: 9642: inline T& operator[](size_t index) const { return Get()[index]; } 9642: }; 9642: 9642: } 9642: # 21 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 2 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class Arena : public Allocator { 9642: public: 9642: 9642: Arena(const Arena&) = delete; 9642: void operator=(const Arena&) = delete; 9642: 9642: static constexpr size_t kInlineSize = 2048; 9642: static constexpr size_t kMinBlockSize = 4096; 9642: static constexpr size_t kMaxBlockSize = 2u << 30; 9642: 9642: static constexpr unsigned kAlignUnit = alignof(std::max_align_t); 9642: static_assert((kAlignUnit & (kAlignUnit - 1)) == 0, 9642: "Pointer size should be power of 2"); 9642: 9642: 9642: 9642: 9642: explicit Arena(size_t block_size = kMinBlockSize, 9642: AllocTracker* tracker = nullptr, size_t huge_page_size = 0); 9642: ~Arena(); 9642: 9642: char* Allocate(size_t bytes) override; 9642: # 60 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 9642: char* AllocateAligned(size_t bytes, size_t huge_page_size = 0, 9642: Logger* logger = nullptr) override; 9642: 9642: 9642: 9642: 9642: size_t ApproximateMemoryUsage() const { 9642: return blocks_memory_ + blocks_.size() * sizeof(char*) - 9642: alloc_bytes_remaining_; 9642: } 9642: 9642: size_t MemoryAllocatedBytes() const { return blocks_memory_; } 9642: 9642: size_t AllocatedAndUnused() const { return alloc_bytes_remaining_; } 9642: 9642: 9642: 9642: size_t IrregularBlockNum() const { return irregular_block_num; } 9642: 9642: size_t BlockSize() const override { return kBlockSize; } 9642: 9642: bool IsInInlineBlock() const { 9642: return blocks_.empty() && huge_blocks_.empty(); 9642: } 9642: 9642: 9642: 9642: 9642: static size_t OptimizeBlockSize(size_t block_size); 9642: 9642: private: 9642: alignas(std::max_align_t) char inline_block_[kInlineSize]; 9642: 9642: const size_t kBlockSize; 9642: 9642: std::deque> blocks_; 9642: 9642: std::deque huge_blocks_; 9642: size_t irregular_block_num = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: char* unaligned_alloc_ptr_ = nullptr; 9642: char* aligned_alloc_ptr_ = nullptr; 9642: 9642: size_t alloc_bytes_remaining_ = 0; 9642: 9642: size_t hugetlb_size_ = 0; 9642: 9642: char* AllocateFromHugePage(size_t bytes); 9642: char* AllocateFallback(size_t bytes, bool aligned); 9642: char* AllocateNewBlock(size_t block_bytes); 9642: 9642: 9642: size_t blocks_memory_ = 0; 9642: 9642: AllocTracker* tracker_; 9642: }; 9642: 9642: inline char* Arena::Allocate(size_t bytes) { 9642: 9642: 9642: 9642: 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 3 4 9642: (static_cast ( 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 9642: bytes > 0 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 9642: "bytes > 0" 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 9642: ; 9642: if (bytes <= alloc_bytes_remaining_) { 9642: unaligned_alloc_ptr_ -= bytes; 9642: alloc_bytes_remaining_ -= bytes; 9642: return unaligned_alloc_ptr_; 9642: } 9642: return AllocateFallback(bytes, false ); 9642: } 9642: 9642: 9642: template 9642: struct Destroyer { 9642: void operator()(T* ptr) { ptr->~T(); } 9642: }; 9642: 9642: 9642: 9642: template 9642: using ScopedArenaPtr = std::unique_ptr>; 9642: 9642: } 9642: # 11 "/build/reproducible-path/rocksdb-9.3.1/logging/log_buffer.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/port/sys_time.h" 1 9642: # 13 "/build/reproducible-path/rocksdb-9.3.1/port/sys_time.h" 9642: 9642: # 42 "/build/reproducible-path/rocksdb-9.3.1/port/sys_time.h" 9642: # 1 "/usr/include/arm-linux-gnueabihf/sys/time.h" 1 3 4 9642: # 34 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 9642: 9642: # 34 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 9642: extern "C" { 9642: # 52 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 9642: struct timezone 9642: { 9642: int tz_minuteswest; 9642: int tz_dsttime; 9642: }; 9642: # 71 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 9642: extern int gettimeofday (struct timeval *__restrict __tv, void *__restrict __tz) noexcept (true) __asm__ ("" "__gettimeofday64") 9642: 9642: __attribute__ ((__nonnull__ (1))); 9642: # 98 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 9642: extern int settimeofday (const struct timeval *__tv, const struct timezone *__tz) noexcept (true) __asm__ ("" "__settimeofday64") 9642: 9642: ; 9642: 9642: extern int adjtime (const struct timeval *__delta, struct timeval *__olddelta) noexcept (true) __asm__ ("" "__adjtime64") 9642: 9642: ; 9642: # 114 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 9642: enum __itimer_which 9642: { 9642: 9642: ITIMER_REAL = 0, 9642: 9642: 9642: ITIMER_VIRTUAL = 1, 9642: 9642: 9642: 9642: ITIMER_PROF = 2 9642: 9642: }; 9642: 9642: 9642: 9642: struct itimerval 9642: { 9642: 9642: struct timeval it_interval; 9642: 9642: struct timeval it_value; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: typedef int __itimer_which_t; 9642: # 167 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 9642: extern int getitimer (__itimer_which_t __which, struct itimerval *__value) noexcept (true) __asm__ ("" "__getitimer64") 9642: 9642: ; 9642: 9642: extern int setitimer (__itimer_which_t __which, const struct itimerval *__restrict __new, struct itimerval *__restrict __old) noexcept (true) __asm__ ("" "__setitimer64") 9642: 9642: 9642: ; 9642: 9642: extern int utimes (const char *__file, const struct timeval __tvp[2]) noexcept (true) __asm__ ("" "__utimes64") 9642: 9642: __attribute__ ((__nonnull__ (1))); 9642: # 196 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 9642: extern int lutimes (const char *__file, const struct timeval __tvp[2]) noexcept (true) __asm__ ("" "__lutimes64") 9642: 9642: __attribute__ ((__nonnull__ (1))); 9642: 9642: extern int futimes (int __fd, const struct timeval __tvp[2]) noexcept (true) __asm__ ("" "__futimes64") 9642: ; 9642: # 218 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 9642: extern int futimesat (int __fd, const char *__file, const struct timeval __tvp[2]) noexcept (true) __asm__ ("" "__futimesat64") 9642: 9642: ; 9642: # 258 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 9642: } 9642: # 43 "/build/reproducible-path/rocksdb-9.3.1/port/sys_time.h" 2 9642: 9642: 9642: 9642: # 45 "/build/reproducible-path/rocksdb-9.3.1/port/sys_time.h" 9642: namespace rocksdb { 9642: 9642: namespace port { 9642: 9642: using TimeVal = struct timeval; 9642: 9642: inline void GetTimeOfDay(TimeVal* tv, struct timezone* tz) { 9642: gettimeofday(tv, tz); 9642: } 9642: 9642: inline struct tm* LocalTimeR(const time_t* timep, struct tm* result) { 9642: return localtime_r(timep, result); 9642: } 9642: 9642: } 9642: 9642: } 9642: # 12 "/build/reproducible-path/rocksdb-9.3.1/logging/log_buffer.h" 2 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class Logger; 9642: 9642: 9642: class LogBuffer { 9642: public: 9642: 9642: 9642: LogBuffer(const InfoLogLevel log_level, Logger* info_log); 9642: 9642: 9642: 9642: void AddLogToBuffer(size_t max_log_size, const char* format, va_list ap); 9642: 9642: size_t IsEmpty() const { return logs_.empty(); } 9642: 9642: 9642: void FlushBufferToLog(); 9642: static const size_t kDefaultMaxLogSize = 512; 9642: 9642: private: 9642: 9642: struct BufferedLog { 9642: port::TimeVal now_tv; 9642: char message[1]; 9642: }; 9642: 9642: const InfoLogLevel log_level_; 9642: Logger* info_log_; 9642: Arena arena_; 9642: autovector logs_; 9642: }; 9642: 9642: 9642: 9642: 9642: void LogToBuffer(LogBuffer* log_buffer, size_t max_log_size, const char* format, 9642: ...); 9642: 9642: void LogToBuffer(LogBuffer* log_buffer, const char* format, ...); 9642: 9642: } 9642: # 14 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 2 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class JSONWriter { 9642: public: 9642: JSONWriter() : state_(kExpectKey), first_element_(true), in_array_(false) { 9642: stream_ << "{"; 9642: } 9642: 9642: void AddKey(const std::string& key) { 9642: 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: (static_cast ( 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: state_ == kExpectKey 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: "state_ == kExpectKey" 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: ; 9642: if (!first_element_) { 9642: stream_ << ", "; 9642: } 9642: stream_ << "\"" << key << "\": "; 9642: state_ = kExpectValue; 9642: first_element_ = false; 9642: } 9642: 9642: void AddValue(const char* value) { 9642: 9642: # 35 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: (static_cast ( 9642: # 35 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: state_ == kExpectValue || state_ == kInArray 9642: # 35 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 35 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: "state_ == kExpectValue || state_ == kInArray" 9642: # 35 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 35 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: ; 9642: if (state_ == kInArray && !first_element_) { 9642: stream_ << ", "; 9642: } 9642: stream_ << "\"" << value << "\""; 9642: if (state_ != kInArray) { 9642: state_ = kExpectKey; 9642: } 9642: first_element_ = false; 9642: } 9642: 9642: template 9642: void AddValue(const T& value) { 9642: 9642: # 48 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: (static_cast ( 9642: # 48 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: state_ == kExpectValue || state_ == kInArray 9642: # 48 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 48 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: "state_ == kExpectValue || state_ == kInArray" 9642: # 48 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 48 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: ; 9642: if (state_ == kInArray && !first_element_) { 9642: stream_ << ", "; 9642: } 9642: stream_ << value; 9642: if (state_ != kInArray) { 9642: state_ = kExpectKey; 9642: } 9642: first_element_ = false; 9642: } 9642: 9642: void StartArray() { 9642: 9642: # 60 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: (static_cast ( 9642: # 60 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: state_ == kExpectValue 9642: # 60 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 60 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: "state_ == kExpectValue" 9642: # 60 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 60 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: ; 9642: state_ = kInArray; 9642: in_array_ = true; 9642: stream_ << "["; 9642: first_element_ = true; 9642: } 9642: 9642: void EndArray() { 9642: 9642: # 68 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: (static_cast ( 9642: # 68 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: state_ == kInArray 9642: # 68 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 68 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: "state_ == kInArray" 9642: # 68 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 68 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: ; 9642: state_ = kExpectKey; 9642: in_array_ = false; 9642: stream_ << "]"; 9642: first_element_ = false; 9642: } 9642: 9642: void StartObject() { 9642: 9642: # 76 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: (static_cast ( 9642: # 76 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: state_ == kExpectValue 9642: # 76 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 76 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: "state_ == kExpectValue" 9642: # 76 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 76 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: ; 9642: state_ = kExpectKey; 9642: stream_ << "{"; 9642: first_element_ = true; 9642: } 9642: 9642: void EndObject() { 9642: 9642: # 83 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: (static_cast ( 9642: # 83 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: state_ == kExpectKey 9642: # 83 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 83 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: "state_ == kExpectKey" 9642: # 83 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 83 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: ; 9642: stream_ << "}"; 9642: first_element_ = false; 9642: } 9642: 9642: void StartArrayedObject() { 9642: 9642: # 89 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: (static_cast ( 9642: # 89 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: state_ == kInArray && in_array_ 9642: # 89 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 89 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: "state_ == kInArray && in_array_" 9642: # 89 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 89 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: ; 9642: state_ = kExpectValue; 9642: if (!first_element_) { 9642: stream_ << ", "; 9642: } 9642: StartObject(); 9642: } 9642: 9642: void EndArrayedObject() { 9642: 9642: # 98 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: (static_cast ( 9642: # 98 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: in_array_ 9642: # 98 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 98 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: "in_array_" 9642: # 98 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 98 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: ; 9642: EndObject(); 9642: state_ = kInArray; 9642: } 9642: 9642: std::string Get() const { return stream_.str(); } 9642: 9642: JSONWriter& operator<<(const char* val) { 9642: if (state_ == kExpectKey) { 9642: AddKey(val); 9642: } else { 9642: AddValue(val); 9642: } 9642: return *this; 9642: } 9642: 9642: JSONWriter& operator<<(const std::string& val) { 9642: return *this << val.c_str(); 9642: } 9642: 9642: template 9642: JSONWriter& operator<<(const T& val) { 9642: 9642: # 120 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: (static_cast ( 9642: # 120 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: state_ != kExpectKey 9642: # 120 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 120 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: "state_ != kExpectKey" 9642: # 120 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 120 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 9642: ; 9642: AddValue(val); 9642: return *this; 9642: } 9642: 9642: private: 9642: enum JSONWriterState { 9642: kExpectKey, 9642: kExpectValue, 9642: kInArray, 9642: kInArrayedObject, 9642: }; 9642: JSONWriterState state_; 9642: bool first_element_; 9642: bool in_array_; 9642: std::ostringstream stream_; 9642: }; 9642: 9642: class EventLoggerStream { 9642: public: 9642: template 9642: EventLoggerStream& operator<<(const T& val) { 9642: MakeStream(); 9642: *json_writer_ << val; 9642: return *this; 9642: } 9642: 9642: void StartArray() { json_writer_->StartArray(); } 9642: void EndArray() { json_writer_->EndArray(); } 9642: void StartObject() { json_writer_->StartObject(); } 9642: void EndObject() { json_writer_->EndObject(); } 9642: 9642: ~EventLoggerStream(); 9642: 9642: private: 9642: void MakeStream() { 9642: if (!json_writer_) { 9642: json_writer_ = new JSONWriter(); 9642: *this << "time_micros" 9642: << std::chrono::duration_cast( 9642: std::chrono::system_clock::now().time_since_epoch()) 9642: .count(); 9642: } 9642: } 9642: friend class EventLogger; 9642: explicit EventLoggerStream(Logger* logger); 9642: explicit EventLoggerStream(LogBuffer* log_buffer, const size_t max_log_size); 9642: 9642: Logger* const logger_; 9642: LogBuffer* const log_buffer_; 9642: const size_t max_log_size_; 9642: 9642: JSONWriter* json_writer_; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: class EventLogger { 9642: public: 9642: static const char* Prefix() { return "EVENT_LOG_v1"; } 9642: 9642: explicit EventLogger(Logger* logger) : logger_(logger) {} 9642: EventLoggerStream Log() { return EventLoggerStream(logger_); } 9642: EventLoggerStream LogToBuffer(LogBuffer* log_buffer) { 9642: return EventLoggerStream(log_buffer, LogBuffer::kDefaultMaxLogSize); 9642: } 9642: EventLoggerStream LogToBuffer(LogBuffer* log_buffer, 9642: const size_t max_log_size) { 9642: return EventLoggerStream(log_buffer, max_log_size); 9642: } 9642: void Log(const JSONWriter& jwriter); 9642: static void Log(Logger* logger, const JSONWriter& jwriter); 9642: static void LogToBuffer( 9642: LogBuffer* log_buffer, const JSONWriter& jwriter, 9642: const size_t max_log_size = LogBuffer::kDefaultMaxLogSize); 9642: 9642: private: 9642: Logger* logger_; 9642: }; 9642: 9642: } 9642: # 19 "/build/reproducible-path/rocksdb-9.3.1/db/wal_edit.h" 2 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class JSONWriter; 9642: class Slice; 9642: class Status; 9642: 9642: using WalNumber = uint64_t; 9642: 9642: 9642: class WalMetadata { 9642: public: 9642: WalMetadata() = default; 9642: 9642: explicit WalMetadata(uint64_t synced_size_bytes) 9642: : synced_size_bytes_(synced_size_bytes) {} 9642: 9642: bool HasSyncedSize() const { return synced_size_bytes_ != kUnknownWalSize; } 9642: 9642: void SetSyncedSizeInBytes(uint64_t bytes) { synced_size_bytes_ = bytes; } 9642: 9642: uint64_t GetSyncedSizeInBytes() const { return synced_size_bytes_; } 9642: 9642: private: 9642: friend bool operator==(const WalMetadata& lhs, const WalMetadata& rhs); 9642: friend bool operator!=(const WalMetadata& lhs, const WalMetadata& rhs); 9642: 9642: 9642: constexpr static uint64_t kUnknownWalSize = 9642: std::numeric_limits::max(); 9642: 9642: 9642: uint64_t synced_size_bytes_ = kUnknownWalSize; 9642: }; 9642: 9642: inline bool operator==(const WalMetadata& lhs, const WalMetadata& rhs) { 9642: return lhs.synced_size_bytes_ == rhs.synced_size_bytes_; 9642: } 9642: 9642: inline bool operator!=(const WalMetadata& lhs, const WalMetadata& rhs) { 9642: return !(lhs == rhs); 9642: } 9642: 9642: 9642: enum class WalAdditionTag : uint32_t { 9642: 9642: kTerminate = 1, 9642: 9642: kSyncedSize = 2, 9642: 9642: }; 9642: 9642: 9642: class WalAddition { 9642: public: 9642: WalAddition() : number_(0), metadata_() {} 9642: 9642: explicit WalAddition(WalNumber number) : number_(number), metadata_() {} 9642: 9642: WalAddition(WalNumber number, WalMetadata meta) 9642: : number_(number), metadata_(std::move(meta)) {} 9642: 9642: WalNumber GetLogNumber() const { return number_; } 9642: 9642: const WalMetadata& GetMetadata() const { return metadata_; } 9642: 9642: void EncodeTo(std::string* dst) const; 9642: 9642: Status DecodeFrom(Slice* src); 9642: 9642: std::string DebugString() const; 9642: 9642: private: 9642: WalNumber number_; 9642: WalMetadata metadata_; 9642: }; 9642: 9642: std::ostream& operator<<(std::ostream& os, const WalAddition& wal); 9642: JSONWriter& operator<<(JSONWriter& jw, const WalAddition& wal); 9642: 9642: using WalAdditions = std::vector; 9642: 9642: 9642: class WalDeletion { 9642: public: 9642: WalDeletion() : number_(kEmpty) {} 9642: 9642: explicit WalDeletion(WalNumber number) : number_(number) {} 9642: 9642: WalNumber GetLogNumber() const { return number_; } 9642: 9642: void EncodeTo(std::string* dst) const; 9642: 9642: Status DecodeFrom(Slice* src); 9642: 9642: std::string DebugString() const; 9642: 9642: bool IsEmpty() const { return number_ == kEmpty; } 9642: 9642: void Reset() { number_ = kEmpty; } 9642: 9642: private: 9642: static constexpr WalNumber kEmpty = 0; 9642: 9642: WalNumber number_; 9642: }; 9642: 9642: std::ostream& operator<<(std::ostream& os, const WalDeletion& wal); 9642: JSONWriter& operator<<(JSONWriter& jw, const WalDeletion& wal); 9642: # 138 "/build/reproducible-path/rocksdb-9.3.1/db/wal_edit.h" 9642: class WalSet { 9642: public: 9642: 9642: 9642: 9642: 9642: 9642: Status AddWal(const WalAddition& wal); 9642: Status AddWals(const WalAdditions& wals); 9642: 9642: 9642: 9642: Status DeleteWalsBefore(WalNumber wal); 9642: 9642: 9642: void Reset(); 9642: 9642: 9642: WalNumber GetMinWalNumberToKeep() const { return min_wal_number_to_keep_; } 9642: 9642: const std::map& GetWals() const { return wals_; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: Status CheckWals( 9642: Env* env, 9642: const std::unordered_map& logs_on_disk) const; 9642: 9642: private: 9642: std::map wals_; 9642: 9642: 9642: WalNumber min_wal_number_to_keep_ = 0; 9642: }; 9642: 9642: } 9642: # 22 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 2 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 22 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: namespace rocksdb { 9642: 9642: class Logger; 9642: class SecondaryCacheResultHandle; 9642: class Statistics; 9642: # 44 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: class Cache { 9642: public: 9642: 9642: struct Handle {}; 9642: 9642: public: 9642: 9642: 9642: using ObjectPtr = void*; 9642: 9642: 9642: 9642: struct CreateContext {}; 9642: 9642: public: 9642: # 68 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: enum class Priority { HIGH, LOW, BOTTOM }; 9642: # 97 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: using SizeCallback = size_t (*)(ObjectPtr obj); 9642: 9642: 9642: 9642: 9642: 9642: using SaveToCallback = Status (*)(ObjectPtr from_obj, size_t from_offset, 9642: size_t length, char* out_buf); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: using DeleterFn = void (*)(ObjectPtr obj, MemoryAllocator* allocator); 9642: # 124 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: using CreateCallback = Status (*)(const Slice& data, CompressionType type, 9642: CacheTier source, CreateContext* context, 9642: MemoryAllocator* allocator, 9642: ObjectPtr* out_obj, size_t* out_charge); 9642: 9642: 9642: 9642: 9642: struct CacheItemHelper { 9642: 9642: 9642: 9642: DeleterFn del_cb; 9642: 9642: 9642: 9642: SizeCallback size_cb; 9642: SaveToCallback saveto_cb; 9642: CreateCallback create_cb; 9642: 9642: CacheEntryRole role; 9642: 9642: 9642: 9642: 9642: const CacheItemHelper* without_secondary_compat; 9642: 9642: CacheItemHelper() : CacheItemHelper(CacheEntryRole::kMisc) {} 9642: 9642: 9642: explicit CacheItemHelper(CacheEntryRole _role, DeleterFn _del_cb = nullptr) 9642: : CacheItemHelper(_role, _del_cb, nullptr, nullptr, nullptr, this) {} 9642: 9642: 9642: explicit CacheItemHelper(CacheEntryRole _role, DeleterFn _del_cb, 9642: SizeCallback _size_cb, SaveToCallback _saveto_cb, 9642: CreateCallback _create_cb, 9642: const CacheItemHelper* _without_secondary_compat) 9642: : del_cb(_del_cb), 9642: size_cb(_size_cb), 9642: saveto_cb(_saveto_cb), 9642: create_cb(_create_cb), 9642: role(_role), 9642: without_secondary_compat(_without_secondary_compat) { 9642: 9642: 9642: 9642: # 170 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 9642: (static_cast ( 9642: # 170 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: (size_cb != nullptr) == (saveto_cb != nullptr) 9642: # 170 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 170 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: "(size_cb != nullptr) == (saveto_cb != nullptr)" 9642: # 170 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 170 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: ; 9642: 9642: # 171 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 9642: (static_cast ( 9642: # 171 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: (size_cb != nullptr) == (create_cb != nullptr) 9642: # 171 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 171 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: "(size_cb != nullptr) == (create_cb != nullptr)" 9642: # 171 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 171 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: ; 9642: 9642: 9642: 9642: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 9642: (static_cast ( 9642: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: role == without_secondary_compat->role 9642: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: "role == without_secondary_compat->role" 9642: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: ; 9642: 9642: # 175 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 9642: (static_cast ( 9642: # 175 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: del_cb == without_secondary_compat->del_cb 9642: # 175 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 175 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: "del_cb == without_secondary_compat->del_cb" 9642: # 175 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 175 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: ; 9642: 9642: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 9642: (static_cast ( 9642: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: !without_secondary_compat->IsSecondaryCacheCompatible() 9642: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: "!without_secondary_compat->IsSecondaryCacheCompatible()" 9642: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: ; 9642: } 9642: inline bool IsSecondaryCacheCompatible() const { 9642: return size_cb != nullptr; 9642: } 9642: }; 9642: 9642: public: 9642: Cache(std::shared_ptr allocator = nullptr) 9642: : memory_allocator_(std::move(allocator)) {} 9642: 9642: Cache(const Cache&) = delete; 9642: Cache& operator=(const Cache&) = delete; 9642: 9642: 9642: virtual ~Cache() {} 9642: # 204 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: static Status CreateFromString(const ConfigOptions& config_options, 9642: const std::string& value, 9642: std::shared_ptr* result); 9642: 9642: public: 9642: 9642: virtual const char* Name() const = 0; 9642: # 260 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: virtual Status Insert( 9642: const Slice& key, ObjectPtr obj, const CacheItemHelper* helper, 9642: size_t charge, Handle** handle = nullptr, 9642: Priority priority = Priority::LOW, const Slice& compressed = Slice(), 9642: CompressionType type = CompressionType::kNoCompression) = 0; 9642: # 275 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: virtual Handle* CreateStandalone(const Slice& key, ObjectPtr obj, 9642: const CacheItemHelper* helper, size_t charge, 9642: bool allow_uncharged) = 0; 9642: # 289 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: virtual Handle* Lookup(const Slice& key, 9642: const CacheItemHelper* helper = nullptr, 9642: CreateContext* create_context = nullptr, 9642: Priority priority = Priority::LOW, 9642: Statistics* stats = nullptr) = 0; 9642: 9642: 9642: inline Handle* BasicLookup(const Slice& key, Statistics* stats) { 9642: return Lookup(key, nullptr, nullptr, Priority::LOW, stats); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: virtual bool Ref(Handle* handle) = 0; 9642: # 317 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: virtual bool Release(Handle* handle, bool erase_if_last_ref = false) = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual ObjectPtr Value(Handle* handle) = 0; 9642: 9642: 9642: 9642: 9642: virtual void Erase(const Slice& key) = 0; 9642: 9642: 9642: 9642: 9642: virtual uint64_t NewId() = 0; 9642: 9642: 9642: 9642: 9642: 9642: virtual void SetCapacity(size_t capacity) = 0; 9642: 9642: 9642: 9642: virtual void SetStrictCapacityLimit(bool strict_capacity_limit) = 0; 9642: 9642: 9642: 9642: virtual bool HasStrictCapacityLimit() const = 0; 9642: 9642: 9642: virtual size_t GetCapacity() const = 0; 9642: 9642: 9642: virtual size_t GetUsage() const = 0; 9642: 9642: 9642: 9642: 9642: virtual size_t GetOccupancyCount() const { return 9642: # 359 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 9642: (4294967295U) 9642: # 359 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: ; } 9642: 9642: 9642: 9642: 9642: virtual size_t GetTableAddressCount() const { return 0; } 9642: 9642: 9642: virtual size_t GetUsage(Handle* handle) const = 0; 9642: 9642: 9642: virtual size_t GetPinnedUsage() const = 0; 9642: 9642: 9642: virtual size_t GetCharge(Handle* handle) const = 0; 9642: 9642: 9642: virtual const CacheItemHelper* GetCacheItemHelper(Handle* handle) const = 0; 9642: 9642: virtual Status GetSecondaryCacheCapacity(size_t& ) const { 9642: return Status::NotSupported(); 9642: } 9642: 9642: virtual Status GetSecondaryCachePinnedUsage(size_t& ) const { 9642: return Status::NotSupported(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void DisownData() { 9642: 9642: } 9642: 9642: struct ApplyToAllEntriesOptions { 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_t average_entries_per_lock = 256; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: virtual void ApplyToAllEntries( 9642: const std::function& callback, 9642: const ApplyToAllEntriesOptions& opts) = 0; 9642: 9642: 9642: 9642: virtual void EraseUnRefEntries() = 0; 9642: 9642: virtual std::string GetPrintableOptions() const { return ""; } 9642: 9642: 9642: 9642: 9642: 9642: virtual void ReportProblems( 9642: const std::shared_ptr& ) const {} 9642: 9642: MemoryAllocator* memory_allocator() const { return memory_allocator_.get(); } 9642: 9642: 9642: virtual uint32_t GetHashSeed() const { return 0; } 9642: # 440 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: virtual bool Release(Handle* handle, bool , 9642: bool erase_if_last_ref) { 9642: return Release(handle, erase_if_last_ref); 9642: } 9642: 9642: 9642: 9642: 9642: struct AsyncLookupHandle { 9642: 9642: 9642: 9642: Slice key; 9642: const CacheItemHelper* helper = nullptr; 9642: CreateContext* create_context = nullptr; 9642: Priority priority = Priority::LOW; 9642: Statistics* stats = nullptr; 9642: 9642: AsyncLookupHandle() {} 9642: AsyncLookupHandle(const Slice& _key, const CacheItemHelper* _helper, 9642: CreateContext* _create_context, 9642: Priority _priority = Priority::LOW, 9642: Statistics* _stats = nullptr) 9642: : key(_key), 9642: helper(_helper), 9642: create_context(_create_context), 9642: priority(_priority), 9642: stats(_stats) {} 9642: 9642: 9642: ~AsyncLookupHandle() { 9642: # 470 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 9642: (static_cast ( 9642: # 470 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: !IsPending() 9642: # 470 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 470 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: "!IsPending()" 9642: # 470 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 470 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: ; } 9642: 9642: 9642: AsyncLookupHandle(const AsyncLookupHandle&) = delete; 9642: AsyncLookupHandle operator=(const AsyncLookupHandle&) = delete; 9642: AsyncLookupHandle(AsyncLookupHandle&&) = delete; 9642: AsyncLookupHandle operator=(AsyncLookupHandle&&) = delete; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool IsReady(); 9642: 9642: 9642: bool IsPending(); 9642: 9642: 9642: 9642: 9642: 9642: Handle* Result(); 9642: 9642: 9642: Handle* result_handle = nullptr; 9642: SecondaryCacheResultHandle* pending_handle = nullptr; 9642: SecondaryCache* pending_cache = nullptr; 9642: bool found_dummy_entry = false; 9642: bool kept_in_sec_cache = false; 9642: }; 9642: # 521 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 9642: virtual void StartAsyncLookup(AsyncLookupHandle& async_handle); 9642: 9642: 9642: 9642: Handle* Wait(AsyncLookupHandle& async_handle); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual void WaitAll(AsyncLookupHandle* , size_t ); 9642: 9642: 9642: 9642: 9642: 9642: using EvictionCallback = 9642: std::function; 9642: 9642: 9642: 9642: void SetEvictionCallback(EvictionCallback&& fn); 9642: 9642: protected: 9642: std::shared_ptr memory_allocator_; 9642: EvictionCallback eviction_callback_; 9642: }; 9642: 9642: 9642: 9642: class CacheWrapper : public Cache { 9642: public: 9642: explicit CacheWrapper(std::shared_ptr target) 9642: : target_(std::move(target)) {} 9642: 9642: 9642: 9642: 9642: Status Insert( 9642: const Slice& key, ObjectPtr value, const CacheItemHelper* helper, 9642: size_t charge, Handle** handle = nullptr, 9642: Priority priority = Priority::LOW, 9642: const Slice& compressed_value = Slice(), 9642: CompressionType type = CompressionType::kNoCompression) override { 9642: return target_->Insert(key, value, helper, charge, handle, priority, 9642: compressed_value, type); 9642: } 9642: 9642: Handle* CreateStandalone(const Slice& key, ObjectPtr obj, 9642: const CacheItemHelper* helper, size_t charge, 9642: bool allow_uncharged) override { 9642: return target_->CreateStandalone(key, obj, helper, charge, allow_uncharged); 9642: } 9642: 9642: Handle* Lookup(const Slice& key, const CacheItemHelper* helper, 9642: CreateContext* create_context, 9642: Priority priority = Priority::LOW, 9642: Statistics* stats = nullptr) override { 9642: return target_->Lookup(key, helper, create_context, priority, stats); 9642: } 9642: 9642: bool Ref(Handle* handle) override { return target_->Ref(handle); } 9642: 9642: using Cache::Release; 9642: bool Release(Handle* handle, bool erase_if_last_ref = false) override { 9642: return target_->Release(handle, erase_if_last_ref); 9642: } 9642: 9642: ObjectPtr Value(Handle* handle) override { return target_->Value(handle); } 9642: 9642: void Erase(const Slice& key) override { target_->Erase(key); } 9642: uint64_t NewId() override { return target_->NewId(); } 9642: 9642: void SetCapacity(size_t capacity) override { target_->SetCapacity(capacity); } 9642: 9642: void SetStrictCapacityLimit(bool strict_capacity_limit) override { 9642: target_->SetStrictCapacityLimit(strict_capacity_limit); 9642: } 9642: 9642: bool HasStrictCapacityLimit() const override { 9642: return target_->HasStrictCapacityLimit(); 9642: } 9642: 9642: size_t GetOccupancyCount() const override { 9642: return target_->GetOccupancyCount(); 9642: } 9642: 9642: size_t GetTableAddressCount() const override { 9642: return target_->GetTableAddressCount(); 9642: } 9642: 9642: size_t GetCapacity() const override { return target_->GetCapacity(); } 9642: 9642: size_t GetUsage() const override { return target_->GetUsage(); } 9642: 9642: size_t GetUsage(Handle* handle) const override { 9642: return target_->GetUsage(handle); 9642: } 9642: 9642: size_t GetPinnedUsage() const override { return target_->GetPinnedUsage(); } 9642: 9642: size_t GetCharge(Handle* handle) const override { 9642: return target_->GetCharge(handle); 9642: } 9642: 9642: const CacheItemHelper* GetCacheItemHelper(Handle* handle) const override { 9642: return target_->GetCacheItemHelper(handle); 9642: } 9642: 9642: void ApplyToAllEntries( 9642: const std::function& callback, 9642: const ApplyToAllEntriesOptions& opts) override { 9642: target_->ApplyToAllEntries(callback, opts); 9642: } 9642: 9642: void EraseUnRefEntries() override { target_->EraseUnRefEntries(); } 9642: 9642: void StartAsyncLookup(AsyncLookupHandle& async_handle) override { 9642: target_->StartAsyncLookup(async_handle); 9642: } 9642: 9642: void WaitAll(AsyncLookupHandle* async_handles, size_t count) override { 9642: target_->WaitAll(async_handles, count); 9642: } 9642: 9642: uint32_t GetHashSeed() const override { return target_->GetHashSeed(); } 9642: 9642: void ReportProblems(const std::shared_ptr& info_log) const override { 9642: target_->ReportProblems(info_log); 9642: } 9642: 9642: const std::shared_ptr& GetTarget() { return target_; } 9642: 9642: protected: 9642: std::shared_ptr target_; 9642: }; 9642: 9642: 9642: 9642: extern const Cache::CacheItemHelper kNoopCacheItemHelper; 9642: 9642: } 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 9642: 9642: # 19 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table_reader_caller.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: 9642: enum TableReaderCaller : char { 9642: kUserGet = 1, 9642: kUserMultiGet = 2, 9642: kUserIterator = 3, 9642: kUserApproximateSize = 4, 9642: kUserVerifyChecksum = 5, 9642: kSSTDumpTool = 6, 9642: kExternalSSTIngestion = 7, 9642: kRepair = 8, 9642: kPrefetch = 9, 9642: kCompaction = 10, 9642: 9642: 9642: kCompactionRefill = 11, 9642: 9642: 9642: kFlush = 12, 9642: 9642: kSSTFileReader = 13, 9642: 9642: 9642: kUncategorized = 14, 9642: 9642: kMaxBlockCacheLookupCaller 9642: }; 9642: } 9642: # 20 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: class BlobFetcher; 9642: class Comparator; 9642: class Logger; 9642: class MergeContext; 9642: class MergeOperator; 9642: class PinnableWideColumns; 9642: class PinnedIteratorsManager; 9642: class Statistics; 9642: class SystemClock; 9642: struct ParsedInternalKey; 9642: 9642: 9642: 9642: 9642: struct GetContextStats { 9642: uint64_t num_cache_hit = 0; 9642: uint64_t num_cache_index_hit = 0; 9642: uint64_t num_cache_data_hit = 0; 9642: uint64_t num_cache_filter_hit = 0; 9642: uint64_t num_cache_compression_dict_hit = 0; 9642: uint64_t num_cache_index_miss = 0; 9642: uint64_t num_cache_filter_miss = 0; 9642: uint64_t num_cache_data_miss = 0; 9642: uint64_t num_cache_compression_dict_miss = 0; 9642: uint64_t num_cache_bytes_read = 0; 9642: uint64_t num_cache_miss = 0; 9642: uint64_t num_cache_add = 0; 9642: uint64_t num_cache_add_redundant = 0; 9642: uint64_t num_cache_bytes_write = 0; 9642: uint64_t num_cache_index_add = 0; 9642: uint64_t num_cache_index_add_redundant = 0; 9642: uint64_t num_cache_index_bytes_insert = 0; 9642: uint64_t num_cache_data_add = 0; 9642: uint64_t num_cache_data_add_redundant = 0; 9642: uint64_t num_cache_data_bytes_insert = 0; 9642: uint64_t num_cache_filter_add = 0; 9642: uint64_t num_cache_filter_add_redundant = 0; 9642: uint64_t num_cache_filter_bytes_insert = 0; 9642: uint64_t num_cache_compression_dict_add = 0; 9642: uint64_t num_cache_compression_dict_add_redundant = 0; 9642: uint64_t num_cache_compression_dict_bytes_insert = 0; 9642: 9642: uint64_t num_filter_read = 0; 9642: uint64_t num_index_read = 0; 9642: uint64_t num_sst_read = 0; 9642: }; 9642: # 67 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 9642: class GetContext { 9642: public: 9642: 9642: 9642: enum GetState { 9642: kNotFound, 9642: kFound, 9642: kDeleted, 9642: kCorrupt, 9642: kMerge, 9642: kUnexpectedBlobIndex, 9642: kMergeOperatorFailed, 9642: }; 9642: GetContextStats get_context_stats_; 9642: # 102 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 9642: GetContext(const Comparator* ucmp, const MergeOperator* merge_operator, 9642: Logger* logger, Statistics* statistics, GetState init_state, 9642: const Slice& user_key, PinnableSlice* value, 9642: PinnableWideColumns* columns, bool* value_found, 9642: MergeContext* merge_context, bool do_merge, 9642: SequenceNumber* max_covering_tombstone_seq, SystemClock* clock, 9642: SequenceNumber* seq = nullptr, 9642: PinnedIteratorsManager* _pinned_iters_mgr = nullptr, 9642: ReadCallback* callback = nullptr, bool* is_blob_index = nullptr, 9642: uint64_t tracing_get_id = 0, BlobFetcher* blob_fetcher = nullptr); 9642: GetContext(const Comparator* ucmp, const MergeOperator* merge_operator, 9642: Logger* logger, Statistics* statistics, GetState init_state, 9642: const Slice& user_key, PinnableSlice* value, 9642: PinnableWideColumns* columns, std::string* timestamp, 9642: bool* value_found, MergeContext* merge_context, bool do_merge, 9642: SequenceNumber* max_covering_tombstone_seq, SystemClock* clock, 9642: SequenceNumber* seq = nullptr, 9642: PinnedIteratorsManager* _pinned_iters_mgr = nullptr, 9642: ReadCallback* callback = nullptr, bool* is_blob_index = nullptr, 9642: uint64_t tracing_get_id = 0, BlobFetcher* blob_fetcher = nullptr); 9642: 9642: GetContext() = delete; 9642: 9642: 9642: 9642: void MarkKeyMayExist(); 9642: # 137 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 9642: bool SaveValue(const ParsedInternalKey& parsed_key, const Slice& value, 9642: bool* matched, Status* read_status, 9642: Cleanable* value_pinner = nullptr); 9642: 9642: 9642: 9642: void SaveValue(const Slice& value, SequenceNumber seq); 9642: 9642: GetState State() const { return state_; } 9642: 9642: SequenceNumber* max_covering_tombstone_seq() { 9642: return max_covering_tombstone_seq_; 9642: } 9642: 9642: bool NeedTimestamp() { return timestamp_ != nullptr; } 9642: 9642: inline size_t TimestampSize() { return ucmp_->timestamp_size(); } 9642: 9642: void SetTimestampFromRangeTombstone(const Slice& timestamp) { 9642: 9642: # 156 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 3 4 9642: (static_cast ( 9642: # 156 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 9642: timestamp_ 9642: # 156 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 156 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 9642: "timestamp_" 9642: # 156 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 156 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 9642: ; 9642: timestamp_->assign(timestamp.data(), timestamp.size()); 9642: ts_from_rangetombstone_ = true; 9642: } 9642: 9642: PinnedIteratorsManager* pinned_iters_mgr() { return pinned_iters_mgr_; } 9642: 9642: 9642: 9642: 9642: void SetReplayLog(std::string* replay_log) { replay_log_ = replay_log; } 9642: 9642: 9642: bool NeedToReadSequence() const { return (seq_ != nullptr); } 9642: 9642: bool sample() const { return sample_; } 9642: 9642: bool CheckCallback(SequenceNumber seq) { 9642: if (callback_) { 9642: return callback_->IsVisible(seq); 9642: } 9642: return true; 9642: } 9642: 9642: void ReportCounters(); 9642: 9642: bool has_callback() const { return callback_ != nullptr; } 9642: 9642: const Slice& ukey_to_get_blob_value() const { 9642: if (!ukey_with_ts_found_.empty()) { 9642: return ukey_with_ts_found_; 9642: } else { 9642: return user_key_; 9642: } 9642: } 9642: 9642: uint64_t get_tracing_get_id() const { return tracing_get_id_; } 9642: 9642: void push_operand(const Slice& value, Cleanable* value_pinner); 9642: 9642: private: 9642: 9642: 9642: void PostprocessMerge(const Status& merge_status); 9642: 9642: 9642: 9642: void MergeWithNoBaseValue(); 9642: void MergeWithPlainBaseValue(const Slice& value); 9642: void MergeWithWideColumnBaseValue(const Slice& entity); 9642: 9642: bool GetBlobValue(const Slice& user_key, const Slice& blob_index, 9642: PinnableSlice* blob_value, Status* read_status); 9642: 9642: void appendToReplayLog(ValueType type, Slice value, Slice ts); 9642: 9642: const Comparator* ucmp_; 9642: const MergeOperator* merge_operator_; 9642: 9642: Logger* logger_; 9642: Statistics* statistics_; 9642: 9642: GetState state_; 9642: Slice user_key_; 9642: 9642: 9642: 9642: PinnableSlice ukey_with_ts_found_; 9642: PinnableSlice* pinnable_val_; 9642: PinnableWideColumns* columns_; 9642: std::string* timestamp_; 9642: bool ts_from_rangetombstone_{false}; 9642: bool* value_found_; 9642: MergeContext* merge_context_; 9642: SequenceNumber* max_covering_tombstone_seq_; 9642: SystemClock* clock_; 9642: 9642: 9642: SequenceNumber* seq_; 9642: std::string* replay_log_; 9642: 9642: PinnedIteratorsManager* pinned_iters_mgr_; 9642: ReadCallback* callback_; 9642: bool sample_; 9642: 9642: 9642: 9642: bool do_merge_; 9642: bool* is_blob_index_; 9642: 9642: 9642: const uint64_t tracing_get_id_; 9642: BlobFetcher* blob_fetcher_; 9642: }; 9642: 9642: 9642: 9642: 9642: Status replayGetContextLog(const Slice& replay_log, const Slice& user_key, 9642: GetContext* get_context, 9642: Cleanable* value_pinner = nullptr, 9642: SequenceNumber seq_no = kMaxSequenceNumber); 9642: 9642: } 9642: # 21 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/lookup_key.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/db/lookup_key.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: 9642: class LookupKey { 9642: public: 9642: 9642: 9642: LookupKey(const Slice& _user_key, SequenceNumber sequence, 9642: const Slice* ts = nullptr); 9642: 9642: ~LookupKey(); 9642: 9642: 9642: Slice memtable_key() const { 9642: return Slice(start_, static_cast(end_ - start_)); 9642: } 9642: 9642: 9642: Slice internal_key() const { 9642: return Slice(kstart_, static_cast(end_ - kstart_)); 9642: } 9642: 9642: 9642: 9642: 9642: Slice user_key() const { 9642: return Slice(kstart_, static_cast(end_ - kstart_ - 8)); 9642: } 9642: 9642: private: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: const char* start_; 9642: const char* kstart_; 9642: const char* end_; 9642: char space_[200]; 9642: 9642: 9642: LookupKey(const LookupKey&); 9642: void operator=(const LookupKey&); 9642: }; 9642: 9642: inline LookupKey::~LookupKey() { 9642: if (start_ != space_) delete[] start_; 9642: } 9642: 9642: } 9642: # 13 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/merge_context.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 1 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: 9642: # 20 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/attribute_groups.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class ColumnFamilyHandle; 9642: 9642: 9642: 9642: 9642: class AttributeGroup { 9642: public: 9642: explicit AttributeGroup(ColumnFamilyHandle* column_family, 9642: const WideColumns& columns) 9642: : column_family_(column_family), columns_(columns) {} 9642: 9642: ColumnFamilyHandle* column_family() const { return column_family_; } 9642: const WideColumns& columns() const { return columns_; } 9642: WideColumns& columns() { return columns_; } 9642: 9642: private: 9642: ColumnFamilyHandle* column_family_; 9642: WideColumns columns_; 9642: }; 9642: 9642: inline bool operator==(const AttributeGroup& lhs, const AttributeGroup& rhs) { 9642: return lhs.column_family() == rhs.column_family() && 9642: lhs.columns() == rhs.columns(); 9642: } 9642: 9642: 9642: using AttributeGroups = std::vector; 9642: 9642: 9642: extern const AttributeGroups kNoAttributeGroups; 9642: 9642: 9642: class PinnableAttributeGroup { 9642: public: 9642: explicit PinnableAttributeGroup(ColumnFamilyHandle* column_family) 9642: : column_family_(column_family), status_(Status::OK()) {} 9642: 9642: ColumnFamilyHandle* column_family() const { return column_family_; } 9642: const Status& status() const { return status_; } 9642: const WideColumns& columns() const { return columns_.columns(); } 9642: 9642: void SetStatus(const Status& status); 9642: void SetColumns(PinnableWideColumns&& columns); 9642: 9642: void Reset(); 9642: 9642: private: 9642: ColumnFamilyHandle* column_family_; 9642: Status status_; 9642: PinnableWideColumns columns_; 9642: }; 9642: 9642: inline void PinnableAttributeGroup::SetStatus(const Status& status) { 9642: status_ = status; 9642: } 9642: inline void PinnableAttributeGroup::SetColumns(PinnableWideColumns&& columns) { 9642: columns_ = std::move(columns); 9642: } 9642: 9642: inline void PinnableAttributeGroup::Reset() { 9642: SetStatus(Status::OK()); 9642: columns_.Reset(); 9642: } 9642: 9642: 9642: using PinnableAttributeGroups = std::vector; 9642: 9642: 9642: 9642: class IteratorAttributeGroup { 9642: public: 9642: explicit IteratorAttributeGroup(ColumnFamilyHandle* column_family, 9642: const WideColumns* columns) 9642: : column_family_(column_family), columns_(columns) {} 9642: ColumnFamilyHandle* column_family() const { return column_family_; } 9642: const WideColumns& columns() const { return *columns_; } 9642: 9642: private: 9642: ColumnFamilyHandle* column_family_; 9642: const WideColumns* columns_; 9642: }; 9642: 9642: using IteratorAttributeGroups = std::vector; 9642: 9642: extern const IteratorAttributeGroups kNoIteratorAttributeGroups; 9642: 9642: 9642: 9642: 9642: class AttributeGroupIterator : public IteratorBase { 9642: public: 9642: AttributeGroupIterator() {} 9642: ~AttributeGroupIterator() override {} 9642: 9642: 9642: AttributeGroupIterator(const AttributeGroupIterator&) = delete; 9642: AttributeGroupIterator& operator=(const AttributeGroupIterator&) = delete; 9642: 9642: virtual const IteratorAttributeGroups& attribute_groups() const = 0; 9642: }; 9642: 9642: } 9642: # 21 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/block_cache_trace_writer.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/trace_reader_writer.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: # 20 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/trace_reader_writer.h" 9642: class TraceWriter { 9642: public: 9642: virtual ~TraceWriter() = default; 9642: 9642: virtual Status Write(const Slice& data) = 0; 9642: virtual Status Close() = 0; 9642: virtual uint64_t GetFileSize() = 0; 9642: }; 9642: 9642: 9642: 9642: class TraceReader { 9642: public: 9642: virtual ~TraceReader() = default; 9642: 9642: virtual Status Read(std::string* data) = 0; 9642: virtual Status Close() = 0; 9642: 9642: 9642: 9642: virtual Status Reset() = 0; 9642: }; 9642: 9642: 9642: 9642: Status NewFileTraceWriter(Env* env, const EnvOptions& env_options, 9642: const std::string& trace_filename, 9642: std::unique_ptr* trace_writer); 9642: Status NewFileTraceReader(Env* env, const EnvOptions& env_options, 9642: const std::string& trace_filename, 9642: std::unique_ptr* trace_reader); 9642: 9642: } 9642: # 12 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/block_cache_trace_writer.h" 2 9642: 9642: 9642: namespace rocksdb { 9642: 9642: 9642: struct BlockCacheTraceRecord { 9642: 9642: uint64_t access_timestamp = 0; 9642: 9642: 9642: 9642: 9642: std::string block_key; 9642: 9642: 9642: TraceType block_type = TraceType::kTraceMax; 9642: 9642: 9642: uint64_t block_size = 0; 9642: 9642: 9642: 9642: 9642: uint64_t cf_id = 0; 9642: 9642: 9642: std::string cf_name; 9642: 9642: 9642: uint32_t level = 0; 9642: 9642: 9642: uint64_t sst_fd_number = 0; 9642: 9642: 9642: 9642: 9642: TableReaderCaller caller = TableReaderCaller::kMaxBlockCacheLookupCaller; 9642: 9642: 9642: bool is_cache_hit = false; 9642: 9642: 9642: bool no_insert = false; 9642: 9642: 9642: 9642: 9642: uint64_t get_id = kReservedGetId; 9642: 9642: 9642: bool get_from_user_specified_snapshot = false; 9642: 9642: 9642: std::string referenced_key; 9642: 9642: 9642: 9642: 9642: uint64_t referenced_data_size = 0; 9642: 9642: 9642: uint64_t num_keys_in_block = 0; 9642: 9642: 9642: bool referenced_key_exist_in_block = false; 9642: 9642: static const uint64_t kReservedGetId; 9642: 9642: BlockCacheTraceRecord() {} 9642: 9642: BlockCacheTraceRecord(uint64_t _access_timestamp, std::string _block_key, 9642: TraceType _block_type, uint64_t _block_size, 9642: uint64_t _cf_id, std::string _cf_name, uint32_t _level, 9642: uint64_t _sst_fd_number, TableReaderCaller _caller, 9642: bool _is_cache_hit, bool _no_insert, uint64_t _get_id, 9642: bool _get_from_user_specified_snapshot = false, 9642: std::string _referenced_key = "", 9642: uint64_t _referenced_data_size = 0, 9642: uint64_t _num_keys_in_block = 0, 9642: bool _referenced_key_exist_in_block = false) 9642: : access_timestamp(_access_timestamp), 9642: block_key(_block_key), 9642: block_type(_block_type), 9642: block_size(_block_size), 9642: cf_id(_cf_id), 9642: cf_name(_cf_name), 9642: level(_level), 9642: sst_fd_number(_sst_fd_number), 9642: caller(_caller), 9642: is_cache_hit(_is_cache_hit), 9642: no_insert(_no_insert), 9642: get_id(_get_id), 9642: get_from_user_specified_snapshot(_get_from_user_specified_snapshot), 9642: referenced_key(_referenced_key), 9642: referenced_data_size(_referenced_data_size), 9642: num_keys_in_block(_num_keys_in_block), 9642: referenced_key_exist_in_block(_referenced_key_exist_in_block) {} 9642: }; 9642: 9642: 9642: struct BlockCacheTraceOptions { 9642: 9642: 9642: uint64_t sampling_frequency = 1; 9642: }; 9642: 9642: 9642: struct BlockCacheTraceWriterOptions { 9642: uint64_t max_trace_file_size = uint64_t{64} * 1024 * 1024 * 1024; 9642: }; 9642: 9642: 9642: 9642: 9642: class BlockCacheTraceWriter { 9642: public: 9642: virtual ~BlockCacheTraceWriter() {} 9642: 9642: 9642: virtual Status WriteBlockAccess(const BlockCacheTraceRecord& record, 9642: const Slice& block_key, const Slice& cf_name, 9642: const Slice& referenced_key) = 0; 9642: 9642: 9642: 9642: virtual Status WriteHeader() = 0; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: std::unique_ptr NewBlockCacheTraceWriter( 9642: SystemClock* clock, const BlockCacheTraceWriterOptions& trace_options, 9642: std::unique_ptr&& trace_writer); 9642: 9642: } 9642: # 22 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 2 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct FileStorageInfo { 9642: 9642: std::string relative_filename; 9642: 9642: 9642: std::string directory; 9642: 9642: 9642: 9642: uint64_t file_number = 0; 9642: 9642: FileType file_type = kTempFile; 9642: 9642: 9642: uint64_t size = 0; 9642: 9642: 9642: Temperature temperature = Temperature::kUnknown; 9642: 9642: 9642: 9642: 9642: 9642: std::string file_checksum; 9642: 9642: 9642: 9642: 9642: 9642: std::string file_checksum_func_name; 9642: }; 9642: 9642: 9642: 9642: struct LiveFileStorageInfo : public FileStorageInfo { 9642: 9642: 9642: 9642: 9642: 9642: std::string replacement_contents; 9642: 9642: 9642: 9642: 9642: bool trim_to_size = false; 9642: }; 9642: 9642: 9642: 9642: struct SstFileMetaData : public FileStorageInfo { 9642: SstFileMetaData() { file_type = kTableFile; } 9642: 9642: SstFileMetaData(const std::string& _file_name, uint64_t _file_number, 9642: const std::string& _directory, uint64_t _size, 9642: SequenceNumber _smallest_seqno, SequenceNumber _largest_seqno, 9642: const std::string& _smallestkey, 9642: const std::string& _largestkey, uint64_t _num_reads_sampled, 9642: bool _being_compacted, Temperature _temperature, 9642: uint64_t _oldest_blob_file_number, 9642: uint64_t _oldest_ancester_time, uint64_t _file_creation_time, 9642: uint64_t _epoch_number, std::string& _file_checksum, 9642: std::string& _file_checksum_func_name) 9642: : smallest_seqno(_smallest_seqno), 9642: largest_seqno(_largest_seqno), 9642: smallestkey(_smallestkey), 9642: largestkey(_largestkey), 9642: num_reads_sampled(_num_reads_sampled), 9642: being_compacted(_being_compacted), 9642: num_entries(0), 9642: num_deletions(0), 9642: oldest_blob_file_number(_oldest_blob_file_number), 9642: oldest_ancester_time(_oldest_ancester_time), 9642: file_creation_time(_file_creation_time), 9642: epoch_number(_epoch_number) { 9642: if (!_file_name.empty()) { 9642: if (_file_name[0] == '/') { 9642: relative_filename = _file_name.substr(1); 9642: name = _file_name; 9642: } else { 9642: relative_filename = _file_name; 9642: name = std::string("/") + _file_name; 9642: } 9642: 9642: # 107 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 3 4 9642: (static_cast ( 9642: # 107 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 9642: relative_filename.size() + 1 == name.size() 9642: # 107 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 107 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 9642: "relative_filename.size() + 1 == name.size()" 9642: # 107 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 107 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 9642: ; 9642: 9642: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 3 4 9642: (static_cast ( 9642: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 9642: relative_filename[0] != '/' 9642: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 9642: "relative_filename[0] != '/'" 9642: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 9642: ; 9642: 9642: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 3 4 9642: (static_cast ( 9642: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 9642: name[0] == '/' 9642: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 9642: "name[0] == '/'" 9642: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 9642: ; 9642: } 9642: directory = _directory; 9642: db_path = _directory; 9642: file_number = _file_number; 9642: file_type = kTableFile; 9642: size = _size; 9642: temperature = _temperature; 9642: file_checksum = _file_checksum; 9642: file_checksum_func_name = _file_checksum_func_name; 9642: } 9642: 9642: SequenceNumber smallest_seqno = 0; 9642: SequenceNumber largest_seqno = 0; 9642: std::string smallestkey; 9642: std::string largestkey; 9642: uint64_t num_reads_sampled = 0; 9642: bool being_compacted = 9642: false; 9642: 9642: uint64_t num_entries = 0; 9642: uint64_t num_deletions = 0; 9642: 9642: uint64_t oldest_blob_file_number = 0; 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 9642: uint64_t oldest_ancester_time = 0; 9642: 9642: 9642: uint64_t file_creation_time = 0; 9642: 9642: 9642: 9642: 9642: 9642: uint64_t epoch_number = 0; 9642: 9642: 9642: 9642: 9642: std::string smallest{}; 9642: std::string largest{}; 9642: 9642: 9642: 9642: 9642: std::string name; 9642: 9642: 9642: std::string db_path; 9642: }; 9642: 9642: 9642: struct LiveFileMetaData : SstFileMetaData { 9642: std::string column_family_name; 9642: int level; 9642: LiveFileMetaData() : column_family_name(), level(0) {} 9642: }; 9642: 9642: 9642: struct BlobMetaData { 9642: BlobMetaData() 9642: : blob_file_number(0), 9642: blob_file_size(0), 9642: total_blob_count(0), 9642: total_blob_bytes(0), 9642: garbage_blob_count(0), 9642: garbage_blob_bytes(0) {} 9642: 9642: BlobMetaData(uint64_t _file_number, const std::string& _file_name, 9642: const std::string& _file_path, uint64_t _file_size, 9642: uint64_t _total_blob_count, uint64_t _total_blob_bytes, 9642: uint64_t _garbage_blob_count, uint64_t _garbage_blob_bytes, 9642: const std::string& _file_checksum, 9642: const std::string& _file_checksum_func_name) 9642: : blob_file_number(_file_number), 9642: blob_file_name(_file_name), 9642: blob_file_path(_file_path), 9642: blob_file_size(_file_size), 9642: total_blob_count(_total_blob_count), 9642: total_blob_bytes(_total_blob_bytes), 9642: garbage_blob_count(_garbage_blob_count), 9642: garbage_blob_bytes(_garbage_blob_bytes), 9642: checksum_method(_file_checksum), 9642: checksum_value(_file_checksum_func_name) {} 9642: uint64_t blob_file_number; 9642: std::string blob_file_name; 9642: std::string blob_file_path; 9642: uint64_t blob_file_size; 9642: uint64_t total_blob_count; 9642: uint64_t total_blob_bytes; 9642: uint64_t garbage_blob_count; 9642: uint64_t garbage_blob_bytes; 9642: std::string checksum_method; 9642: std::string checksum_value; 9642: }; 9642: 9642: 9642: struct LevelMetaData { 9642: LevelMetaData(int _level, uint64_t _size, 9642: const std::vector&& _files) 9642: : level(_level), size(_size), files(_files) {} 9642: 9642: 9642: const int level; 9642: 9642: 9642: const uint64_t size; 9642: 9642: const std::vector files; 9642: }; 9642: 9642: 9642: struct ColumnFamilyMetaData { 9642: ColumnFamilyMetaData() : size(0), file_count(0), name("") {} 9642: ColumnFamilyMetaData(const std::string& _name, uint64_t _size, 9642: const std::vector&& _levels) 9642: : size(_size), name(_name), levels(_levels) {} 9642: 9642: 9642: 9642: uint64_t size; 9642: 9642: size_t file_count; 9642: 9642: std::string name; 9642: 9642: std::vector levels; 9642: 9642: 9642: uint64_t blob_file_size = 0; 9642: 9642: size_t blob_file_count = 0; 9642: 9642: std::vector blob_files; 9642: }; 9642: 9642: 9642: 9642: struct ExportImportFilesMetaData { 9642: std::string db_comparator_name; 9642: std::vector files; 9642: }; 9642: } 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/snapshot.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class DB; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: class Snapshot { 9642: public: 9642: virtual SequenceNumber GetSequenceNumber() const = 0; 9642: 9642: 9642: 9642: virtual int64_t GetUnixTime() const = 0; 9642: 9642: virtual uint64_t GetTimestamp() const = 0; 9642: 9642: protected: 9642: virtual ~Snapshot(); 9642: }; 9642: 9642: 9642: 9642: 9642: class ManagedSnapshot { 9642: public: 9642: explicit ManagedSnapshot(DB* db); 9642: 9642: 9642: ManagedSnapshot(DB* db, const Snapshot* _snapshot); 9642: 9642: ~ManagedSnapshot(); 9642: 9642: const Snapshot* snapshot(); 9642: 9642: private: 9642: DB* db_; 9642: const Snapshot* snapshot_; 9642: }; 9642: 9642: } 9642: # 27 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/sst_file_writer.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/sst_file_writer.h" 9642: namespace rocksdb { 9642: 9642: class Comparator; 9642: 9642: 9642: 9642: struct ExternalSstFileInfo { 9642: ExternalSstFileInfo() 9642: : file_path(""), 9642: smallest_key(""), 9642: largest_key(""), 9642: smallest_range_del_key(""), 9642: largest_range_del_key(""), 9642: file_checksum(""), 9642: file_checksum_func_name(""), 9642: sequence_number(0), 9642: file_size(0), 9642: num_entries(0), 9642: num_range_del_entries(0), 9642: version(0) {} 9642: 9642: ExternalSstFileInfo(const std::string& _file_path, 9642: const std::string& _smallest_key, 9642: const std::string& _largest_key, 9642: SequenceNumber _sequence_number, uint64_t _file_size, 9642: uint64_t _num_entries, int32_t _version) 9642: : file_path(_file_path), 9642: smallest_key(_smallest_key), 9642: largest_key(_largest_key), 9642: smallest_range_del_key(""), 9642: largest_range_del_key(""), 9642: file_checksum(""), 9642: file_checksum_func_name(""), 9642: sequence_number(_sequence_number), 9642: file_size(_file_size), 9642: num_entries(_num_entries), 9642: num_range_del_entries(0), 9642: version(_version) {} 9642: 9642: std::string file_path; 9642: std::string smallest_key; 9642: std::string largest_key; 9642: std::string 9642: smallest_range_del_key; 9642: std::string largest_range_del_key; 9642: std::string file_checksum; 9642: std::string file_checksum_func_name; 9642: SequenceNumber sequence_number; 9642: uint64_t file_size; 9642: uint64_t num_entries; 9642: uint64_t num_range_del_entries; 9642: int32_t version; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: class SstFileWriter { 9642: public: 9642: # 95 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/sst_file_writer.h" 9642: SstFileWriter(const EnvOptions& env_options, const Options& options, 9642: ColumnFamilyHandle* column_family = nullptr, 9642: bool invalidate_page_cache = true, 9642: Env::IOPriority io_priority = Env::IOPriority::IO_TOTAL, 9642: bool skip_filters = false) 9642: : SstFileWriter(env_options, options, options.comparator, column_family, 9642: invalidate_page_cache, io_priority, skip_filters) {} 9642: 9642: 9642: SstFileWriter(const EnvOptions& env_options, const Options& options, 9642: const Comparator* user_comparator, 9642: ColumnFamilyHandle* column_family = nullptr, 9642: bool invalidate_page_cache = true, 9642: Env::IOPriority io_priority = Env::IOPriority::IO_TOTAL, 9642: bool skip_filters = false); 9642: 9642: ~SstFileWriter(); 9642: 9642: 9642: Status Open(const std::string& file_path, 9642: Temperature temp = Temperature::kUnknown); 9642: 9642: 9642: 9642: 9642: 9642: __attribute__((__deprecated__)) Status Add(const Slice& user_key, const Slice& value); 9642: 9642: 9642: 9642: 9642: 9642: Status Put(const Slice& user_key, const Slice& value); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: Status Put(const Slice& user_key, const Slice& timestamp, const Slice& value); 9642: 9642: 9642: 9642: Status PutEntity(const Slice& user_key, const WideColumns& columns); 9642: 9642: 9642: 9642: 9642: 9642: Status Merge(const Slice& user_key, const Slice& value); 9642: 9642: 9642: 9642: 9642: 9642: Status Delete(const Slice& user_key); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: Status Delete(const Slice& user_key, const Slice& timestamp); 9642: # 171 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/sst_file_writer.h" 9642: Status DeleteRange(const Slice& begin_key, const Slice& end_key); 9642: # 186 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/sst_file_writer.h" 9642: Status DeleteRange(const Slice& begin_key, const Slice& end_key, 9642: const Slice& timestamp); 9642: 9642: 9642: 9642: 9642: 9642: Status Finish(ExternalSstFileInfo* file_info = nullptr); 9642: 9642: 9642: uint64_t FileSize(); 9642: 9642: private: 9642: void InvalidatePageCache(bool closing); 9642: struct Rep; 9642: std::unique_ptr rep_; 9642: }; 9642: } 9642: # 28 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/transaction_log.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch.h" 1 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch.h" 9642: 9642: # 36 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch.h" 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch_base.h" 1 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch_base.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class Slice; 9642: class Status; 9642: class ColumnFamilyHandle; 9642: class WriteBatch; 9642: struct SliceParts; 9642: 9642: 9642: 9642: 9642: class WriteBatchBase { 9642: public: 9642: virtual ~WriteBatchBase() {} 9642: 9642: 9642: virtual Status Put(ColumnFamilyHandle* column_family, const Slice& key, 9642: const Slice& value) = 0; 9642: virtual Status Put(const Slice& key, const Slice& value) = 0; 9642: virtual Status Put(ColumnFamilyHandle* column_family, const Slice& key, 9642: const Slice& ts, const Slice& value) = 0; 9642: 9642: 9642: 9642: 9642: virtual Status Put(ColumnFamilyHandle* column_family, const SliceParts& key, 9642: const SliceParts& value); 9642: virtual Status Put(const SliceParts& key, const SliceParts& value); 9642: # 58 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch_base.h" 9642: virtual Status TimedPut(ColumnFamilyHandle* column_family, const Slice& key, 9642: const Slice& value, uint64_t write_unix_time) = 0; 9642: 9642: 9642: 9642: virtual Status PutEntity(ColumnFamilyHandle* column_family, const Slice& key, 9642: const WideColumns& columns) = 0; 9642: 9642: 9642: 9642: virtual Status PutEntity(const Slice& key, 9642: const AttributeGroups& attribute_groups) = 0; 9642: 9642: 9642: 9642: virtual Status Merge(ColumnFamilyHandle* column_family, const Slice& key, 9642: const Slice& value) = 0; 9642: virtual Status Merge(const Slice& key, const Slice& value) = 0; 9642: virtual Status Merge(ColumnFamilyHandle* column_family, const Slice& key, 9642: const Slice& ts, const Slice& value) = 0; 9642: 9642: 9642: virtual Status Merge(ColumnFamilyHandle* column_family, const SliceParts& key, 9642: const SliceParts& value); 9642: virtual Status Merge(const SliceParts& key, const SliceParts& value); 9642: 9642: 9642: virtual Status Delete(ColumnFamilyHandle* column_family, 9642: const Slice& key) = 0; 9642: virtual Status Delete(const Slice& key) = 0; 9642: virtual Status Delete(ColumnFamilyHandle* column_family, const Slice& key, 9642: const Slice& ts) = 0; 9642: 9642: 9642: virtual Status Delete(ColumnFamilyHandle* column_family, 9642: const SliceParts& key); 9642: virtual Status Delete(const SliceParts& key); 9642: 9642: 9642: 9642: virtual Status SingleDelete(ColumnFamilyHandle* column_family, 9642: const Slice& key) = 0; 9642: virtual Status SingleDelete(const Slice& key) = 0; 9642: virtual Status SingleDelete(ColumnFamilyHandle* column_family, 9642: const Slice& key, const Slice& ts) = 0; 9642: 9642: 9642: virtual Status SingleDelete(ColumnFamilyHandle* column_family, 9642: const SliceParts& key); 9642: virtual Status SingleDelete(const SliceParts& key); 9642: 9642: 9642: 9642: virtual Status DeleteRange(ColumnFamilyHandle* column_family, 9642: const Slice& begin_key, const Slice& end_key) = 0; 9642: virtual Status DeleteRange(const Slice& begin_key, const Slice& end_key) = 0; 9642: virtual Status DeleteRange(ColumnFamilyHandle* column_family, 9642: const Slice& begin_key, const Slice& end_key, 9642: const Slice& ts) = 0; 9642: 9642: 9642: virtual Status DeleteRange(ColumnFamilyHandle* column_family, 9642: const SliceParts& begin_key, 9642: const SliceParts& end_key); 9642: virtual Status DeleteRange(const SliceParts& begin_key, 9642: const SliceParts& end_key); 9642: # 135 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch_base.h" 9642: virtual Status PutLogData(const Slice& blob) = 0; 9642: 9642: 9642: virtual void Clear() = 0; 9642: 9642: 9642: 9642: 9642: virtual WriteBatch* GetWriteBatch() = 0; 9642: 9642: 9642: 9642: virtual void SetSavePoint() = 0; 9642: 9642: 9642: 9642: 9642: 9642: virtual Status RollbackToSavePoint() = 0; 9642: 9642: 9642: 9642: 9642: 9642: virtual Status PopSavePoint() = 0; 9642: 9642: 9642: virtual void SetMaxBytes(size_t max_bytes) = 0; 9642: }; 9642: 9642: } 9642: # 37 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: class Slice; 9642: class ColumnFamilyHandle; 9642: struct SavePoints; 9642: struct SliceParts; 9642: 9642: struct SavePoint { 9642: size_t size; 9642: uint32_t count; 9642: uint32_t content_flags; 9642: 9642: SavePoint() : size(0), count(0), content_flags(0) {} 9642: 9642: SavePoint(size_t _size, uint32_t _count, uint32_t _flags) 9642: : size(_size), count(_count), content_flags(_flags) {} 9642: 9642: void clear() { 9642: size = 0; 9642: count = 0; 9642: content_flags = 0; 9642: } 9642: 9642: bool is_cleared() const { return (size | count | content_flags) == 0; } 9642: }; 9642: 9642: class WriteBatch : public WriteBatchBase { 9642: public: 9642: explicit WriteBatch(size_t reserved_bytes = 0, size_t max_bytes = 0) 9642: : WriteBatch(reserved_bytes, max_bytes, 0, 0) {} 9642: 9642: 9642: 9642: 9642: explicit WriteBatch(size_t reserved_bytes, size_t max_bytes, 9642: size_t protection_bytes_per_key, size_t default_cf_ts_sz); 9642: ~WriteBatch() override; 9642: 9642: using WriteBatchBase::Put; 9642: 9642: 9642: 9642: 9642: 9642: Status Put(ColumnFamilyHandle* column_family, const Slice& key, 9642: const Slice& value) override; 9642: Status Put(const Slice& key, const Slice& value) override { 9642: return Put(nullptr, key, value); 9642: } 9642: Status Put(ColumnFamilyHandle* column_family, const Slice& key, 9642: const Slice& ts, const Slice& value) override; 9642: # 97 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch.h" 9642: Status Put(ColumnFamilyHandle* column_family, const SliceParts& key, 9642: const SliceParts& value) override; 9642: Status Put(const SliceParts& key, const SliceParts& value) override { 9642: return Put(nullptr, key, value); 9642: } 9642: 9642: using WriteBatchBase::TimedPut; 9642: 9642: 9642: 9642: 9642: Status TimedPut(ColumnFamilyHandle* column_family, const Slice& key, 9642: const Slice& value, uint64_t write_unix_time) override; 9642: 9642: 9642: 9642: using WriteBatchBase::PutEntity; 9642: Status PutEntity(ColumnFamilyHandle* column_family, const Slice& key, 9642: const WideColumns& columns) override; 9642: 9642: 9642: 9642: Status PutEntity(const Slice& key, 9642: const AttributeGroups& attribute_groups) override; 9642: 9642: using WriteBatchBase::Delete; 9642: 9642: 9642: 9642: 9642: 9642: Status Delete(ColumnFamilyHandle* column_family, const Slice& key) override; 9642: Status Delete(const Slice& key) override { return Delete(nullptr, key); } 9642: Status Delete(ColumnFamilyHandle* column_family, const Slice& key, 9642: const Slice& ts) override; 9642: 9642: 9642: 9642: 9642: 9642: 9642: Status Delete(ColumnFamilyHandle* column_family, 9642: const SliceParts& key) override; 9642: Status Delete(const SliceParts& key) override { return Delete(nullptr, key); } 9642: 9642: using WriteBatchBase::SingleDelete; 9642: 9642: Status SingleDelete(ColumnFamilyHandle* column_family, 9642: const Slice& key) override; 9642: Status SingleDelete(const Slice& key) override { 9642: return SingleDelete(nullptr, key); 9642: } 9642: Status SingleDelete(ColumnFamilyHandle* column_family, const Slice& key, 9642: const Slice& ts) override; 9642: 9642: 9642: Status SingleDelete(ColumnFamilyHandle* column_family, 9642: const SliceParts& key) override; 9642: Status SingleDelete(const SliceParts& key) override { 9642: return SingleDelete(nullptr, key); 9642: } 9642: 9642: using WriteBatchBase::DeleteRange; 9642: 9642: Status DeleteRange(ColumnFamilyHandle* column_family, const Slice& begin_key, 9642: const Slice& end_key) override; 9642: Status DeleteRange(const Slice& begin_key, const Slice& end_key) override { 9642: return DeleteRange(nullptr, begin_key, end_key); 9642: } 9642: 9642: Status DeleteRange(ColumnFamilyHandle* column_family, const Slice& begin_key, 9642: const Slice& end_key, const Slice& ts) override; 9642: 9642: 9642: Status DeleteRange(ColumnFamilyHandle* column_family, 9642: const SliceParts& begin_key, 9642: const SliceParts& end_key) override; 9642: Status DeleteRange(const SliceParts& begin_key, 9642: const SliceParts& end_key) override { 9642: return DeleteRange(nullptr, begin_key, end_key); 9642: } 9642: 9642: using WriteBatchBase::Merge; 9642: 9642: 9642: Status Merge(ColumnFamilyHandle* column_family, const Slice& key, 9642: const Slice& value) override; 9642: Status Merge(const Slice& key, const Slice& value) override { 9642: return Merge(nullptr, key, value); 9642: } 9642: Status Merge(ColumnFamilyHandle* , const Slice& , 9642: const Slice& , const Slice& ) override; 9642: 9642: 9642: Status Merge(ColumnFamilyHandle* column_family, const SliceParts& key, 9642: const SliceParts& value) override; 9642: Status Merge(const SliceParts& key, const SliceParts& value) override { 9642: return Merge(nullptr, key, value); 9642: } 9642: 9642: using WriteBatchBase::PutLogData; 9642: # 208 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch.h" 9642: Status PutLogData(const Slice& blob) override; 9642: 9642: using WriteBatchBase::Clear; 9642: 9642: void Clear() override; 9642: 9642: 9642: 9642: void SetSavePoint() override; 9642: 9642: 9642: 9642: 9642: 9642: 9642: Status RollbackToSavePoint() override; 9642: 9642: 9642: 9642: 9642: 9642: Status PopSavePoint() override; 9642: 9642: 9642: 9642: class Handler { 9642: public: 9642: virtual ~Handler(); 9642: # 244 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch.h" 9642: virtual Status PutCF(uint32_t column_family_id, const Slice& key, 9642: const Slice& value) { 9642: if (column_family_id == 0) { 9642: 9642: 9642: 9642: Put(key, value); 9642: return Status::OK(); 9642: } 9642: return Status::InvalidArgument( 9642: "non-default column family and PutCF not implemented"); 9642: } 9642: 9642: virtual void Put(const Slice& , const Slice& ) {} 9642: 9642: 9642: virtual Status TimedPutCF(uint32_t , 9642: const Slice& , const Slice& , 9642: uint64_t ) { 9642: return Status::InvalidArgument("TimedPutCF not implemented"); 9642: } 9642: 9642: 9642: virtual Status PutEntityCF(uint32_t , 9642: const Slice& , 9642: const Slice& ) { 9642: return Status::NotSupported("PutEntityCF not implemented"); 9642: } 9642: 9642: 9642: virtual Status DeleteCF(uint32_t column_family_id, const Slice& key) { 9642: if (column_family_id == 0) { 9642: Delete(key); 9642: return Status::OK(); 9642: } 9642: return Status::InvalidArgument( 9642: "non-default column family and DeleteCF not implemented"); 9642: } 9642: 9642: virtual void Delete(const Slice& ) {} 9642: 9642: 9642: virtual Status SingleDeleteCF(uint32_t column_family_id, const Slice& key) { 9642: if (column_family_id == 0) { 9642: SingleDelete(key); 9642: return Status::OK(); 9642: } 9642: return Status::InvalidArgument( 9642: "non-default column family and SingleDeleteCF not implemented"); 9642: } 9642: 9642: virtual void SingleDelete(const Slice& ) {} 9642: 9642: 9642: 9642: virtual Status DeleteRangeCF(uint32_t , 9642: const Slice& , 9642: const Slice& ) { 9642: return Status::InvalidArgument("DeleteRangeCF not implemented"); 9642: } 9642: 9642: 9642: virtual Status MergeCF(uint32_t column_family_id, const Slice& key, 9642: const Slice& value) { 9642: if (column_family_id == 0) { 9642: Merge(key, value); 9642: return Status::OK(); 9642: } 9642: return Status::InvalidArgument( 9642: "non-default column family and MergeCF not implemented"); 9642: } 9642: 9642: virtual void Merge(const Slice& , const Slice& ) {} 9642: 9642: 9642: virtual Status PutBlobIndexCF(uint32_t , 9642: const Slice& , 9642: const Slice& ) { 9642: return Status::InvalidArgument("PutBlobIndexCF not implemented"); 9642: } 9642: 9642: 9642: virtual void LogData(const Slice& blob); 9642: 9642: virtual Status MarkBeginPrepare(bool = false) { 9642: return Status::InvalidArgument("MarkBeginPrepare() handler not defined."); 9642: } 9642: 9642: virtual Status MarkEndPrepare(const Slice& ) { 9642: return Status::InvalidArgument("MarkEndPrepare() handler not defined."); 9642: } 9642: 9642: virtual Status MarkNoop(bool ) { 9642: return Status::InvalidArgument("MarkNoop() handler not defined."); 9642: } 9642: 9642: virtual Status MarkRollback(const Slice& ) { 9642: return Status::InvalidArgument( 9642: "MarkRollbackPrepare() handler not defined."); 9642: } 9642: 9642: virtual Status MarkCommit(const Slice& ) { 9642: return Status::InvalidArgument("MarkCommit() handler not defined."); 9642: } 9642: 9642: virtual Status MarkCommitWithTimestamp(const Slice& , 9642: const Slice& ) { 9642: return Status::InvalidArgument( 9642: "MarkCommitWithTimestamp() handler not defined."); 9642: } 9642: 9642: 9642: 9642: 9642: virtual bool Continue(); 9642: 9642: protected: 9642: friend class WriteBatchInternal; 9642: enum class OptionState { 9642: kUnknown, 9642: kDisabled, 9642: kEnabled, 9642: }; 9642: virtual OptionState WriteAfterCommit() const { 9642: return OptionState::kUnknown; 9642: } 9642: virtual OptionState WriteBeforePrepare() const { 9642: return OptionState::kUnknown; 9642: } 9642: }; 9642: Status Iterate(Handler* handler) const; 9642: 9642: 9642: const std::string& Data() const { return rep_; } 9642: 9642: 9642: std::string Release(); 9642: 9642: 9642: size_t GetDataSize() const { return rep_.size(); } 9642: 9642: 9642: uint32_t Count() const; 9642: 9642: 9642: bool HasPut() const; 9642: 9642: 9642: bool HasTimedPut() const; 9642: 9642: 9642: bool HasPutEntity() const; 9642: 9642: 9642: bool HasDelete() const; 9642: 9642: 9642: bool HasSingleDelete() const; 9642: 9642: 9642: bool HasDeleteRange() const; 9642: 9642: 9642: bool HasMerge() const; 9642: 9642: 9642: bool HasBeginPrepare() const; 9642: 9642: 9642: bool HasEndPrepare() const; 9642: 9642: 9642: bool HasCommit() const; 9642: 9642: 9642: bool HasRollback() const; 9642: # 437 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch.h" 9642: Status UpdateTimestamps(const Slice& ts, 9642: std::function ts_sz_func); 9642: 9642: 9642: 9642: 9642: 9642: Status VerifyChecksum() const; 9642: 9642: using WriteBatchBase::GetWriteBatch; 9642: WriteBatch* GetWriteBatch() override { return this; } 9642: 9642: 9642: explicit WriteBatch(const std::string& rep); 9642: explicit WriteBatch(std::string&& rep); 9642: 9642: WriteBatch(const WriteBatch& src); 9642: WriteBatch(WriteBatch&& src) noexcept; 9642: WriteBatch& operator=(const WriteBatch& src); 9642: WriteBatch& operator=(WriteBatch&& src); 9642: 9642: 9642: 9642: void MarkWalTerminationPoint(); 9642: const SavePoint& GetWalTerminationPoint() const { return wal_term_point_; } 9642: 9642: void SetMaxBytes(size_t max_bytes) override { max_bytes_ = max_bytes; } 9642: 9642: struct ProtectionInfo; 9642: size_t GetProtectionBytesPerKey() const; 9642: 9642: private: 9642: friend class WriteBatchInternal; 9642: friend class LocalSavePoint; 9642: 9642: 9642: 9642: friend class WriteBatchWithIndex; 9642: std::unique_ptr save_points_; 9642: 9642: 9642: 9642: 9642: SavePoint wal_term_point_; 9642: 9642: 9642: 9642: 9642: 9642: bool is_latest_persistent_state_ = false; 9642: # 495 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch.h" 9642: bool needs_in_place_update_ts_ = false; 9642: 9642: 9642: 9642: bool has_key_with_ts_ = false; 9642: 9642: 9642: mutable std::atomic content_flags_; 9642: 9642: 9642: uint32_t ComputeContentFlags() const; 9642: 9642: 9642: size_t max_bytes_; 9642: 9642: std::unique_ptr prot_info_; 9642: 9642: size_t default_cf_ts_sz_ = 0; 9642: 9642: protected: 9642: std::string rep_; 9642: }; 9642: 9642: } 9642: # 14 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/transaction_log.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: class LogFile; 9642: using VectorLogPtr = std::vector>; 9642: 9642: enum WalFileType { 9642: 9642: 9642: 9642: 9642: 9642: 9642: kArchivedLogFile = 0, 9642: 9642: 9642: kAliveLogFile = 1 9642: }; 9642: 9642: class LogFile { 9642: public: 9642: LogFile() {} 9642: virtual ~LogFile() {} 9642: 9642: 9642: 9642: 9642: virtual std::string PathName() const = 0; 9642: 9642: 9642: 9642: virtual uint64_t LogNumber() const = 0; 9642: 9642: 9642: virtual WalFileType Type() const = 0; 9642: 9642: 9642: virtual SequenceNumber StartSequence() const = 0; 9642: 9642: 9642: virtual uint64_t SizeFileBytes() const = 0; 9642: }; 9642: 9642: struct BatchResult { 9642: SequenceNumber sequence = 0; 9642: std::unique_ptr writeBatchPtr; 9642: 9642: 9642: 9642: 9642: BatchResult() {} 9642: 9642: ~BatchResult() {} 9642: 9642: BatchResult(const BatchResult&) = delete; 9642: 9642: BatchResult& operator=(const BatchResult&) = delete; 9642: 9642: BatchResult(BatchResult&& bResult) 9642: : sequence(std::move(bResult.sequence)), 9642: writeBatchPtr(std::move(bResult.writeBatchPtr)) {} 9642: 9642: BatchResult& operator=(BatchResult&& bResult) { 9642: sequence = std::move(bResult.sequence); 9642: writeBatchPtr = std::move(bResult.writeBatchPtr); 9642: return *this; 9642: } 9642: }; 9642: 9642: 9642: 9642: 9642: class TransactionLogIterator { 9642: public: 9642: TransactionLogIterator() {} 9642: virtual ~TransactionLogIterator() {} 9642: 9642: 9642: 9642: 9642: virtual bool Valid() = 0; 9642: 9642: 9642: 9642: virtual void Next() = 0; 9642: 9642: 9642: 9642: virtual Status status() = 0; 9642: 9642: 9642: 9642: 9642: virtual BatchResult GetBatch() = 0; 9642: 9642: 9642: struct ReadOptions { 9642: 9642: 9642: 9642: bool verify_checksums_; 9642: 9642: ReadOptions() : verify_checksums_(true) {} 9642: 9642: explicit ReadOptions(bool verify_checksums) 9642: : verify_checksums_(verify_checksums) {} 9642: }; 9642: }; 9642: } 9642: # 30 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 2 9642: # 45 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: namespace rocksdb { 9642: 9642: struct ColumnFamilyOptions; 9642: struct CompactionOptions; 9642: struct CompactRangeOptions; 9642: struct DBOptions; 9642: struct ExternalSstFileInfo; 9642: struct FlushOptions; 9642: struct Options; 9642: struct ReadOptions; 9642: struct TableProperties; 9642: struct WriteOptions; 9642: struct WaitForCompactOptions; 9642: class Env; 9642: class EventListener; 9642: class FileSystem; 9642: class Replayer; 9642: class StatsHistoryIterator; 9642: class TraceReader; 9642: class TraceWriter; 9642: class WriteBatch; 9642: 9642: extern const std::string kDefaultColumnFamilyName; 9642: extern const std::string kPersistentStatsColumnFamilyName; 9642: struct ColumnFamilyDescriptor { 9642: std::string name; 9642: ColumnFamilyOptions options; 9642: ColumnFamilyDescriptor() 9642: : name(kDefaultColumnFamilyName), options(ColumnFamilyOptions()) {} 9642: ColumnFamilyDescriptor(const std::string& _name, 9642: const ColumnFamilyOptions& _options) 9642: : name(_name), options(_options) {} 9642: }; 9642: 9642: class ColumnFamilyHandle { 9642: public: 9642: virtual ~ColumnFamilyHandle() {} 9642: 9642: virtual const std::string& GetName() const = 0; 9642: 9642: virtual uint32_t GetID() const = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status GetDescriptor(ColumnFamilyDescriptor* desc) = 0; 9642: 9642: 9642: virtual const Comparator* GetComparator() const = 0; 9642: }; 9642: 9642: static const int kMajorVersion = 9; 9642: static const int kMinorVersion = 3; 9642: 9642: 9642: struct Range { 9642: 9642: 9642: Slice start; 9642: Slice limit; 9642: 9642: Range() {} 9642: Range(const Slice& s, const Slice& l) : start(s), limit(l) {} 9642: }; 9642: 9642: struct RangePtr { 9642: 9642: 9642: const Slice* start; 9642: const Slice* limit; 9642: 9642: RangePtr() : start(nullptr), limit(nullptr) {} 9642: RangePtr(const Slice* s, const Slice* l) : start(s), limit(l) {} 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct IngestExternalFileArg { 9642: ColumnFamilyHandle* column_family = nullptr; 9642: std::vector external_files; 9642: IngestExternalFileOptions options; 9642: std::vector files_checksums; 9642: std::vector files_checksum_func_names; 9642: 9642: Temperature file_temperature = Temperature::kUnknown; 9642: }; 9642: 9642: struct GetMergeOperandsOptions { 9642: using ContinueCallback = std::function; 9642: 9642: 9642: 9642: 9642: 9642: 9642: int expected_max_number_of_operands = 0; 9642: # 159 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: ContinueCallback continue_cb; 9642: }; 9642: 9642: 9642: 9642: 9642: using TablePropertiesCollection = 9642: std::unordered_map>; 9642: 9642: 9642: 9642: 9642: 9642: 9642: class DB { 9642: public: 9642: # 184 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: static Status Open(const Options& options, const std::string& name, 9642: DB** dbptr); 9642: # 201 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: static Status Open(const DBOptions& db_options, const std::string& name, 9642: const std::vector& column_families, 9642: std::vector* handles, DB** dbptr); 9642: # 219 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: static Status OpenForReadOnly(const Options& options, const std::string& name, 9642: DB** dbptr, 9642: bool error_if_wal_file_exists = false); 9642: # 230 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: static Status OpenForReadOnly( 9642: const DBOptions& db_options, const std::string& name, 9642: const std::vector& column_families, 9642: std::vector* handles, DB** dbptr, 9642: bool error_if_wal_file_exists = false); 9642: # 260 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: static Status OpenAsSecondary(const Options& options, const std::string& name, 9642: const std::string& secondary_path, DB** dbptr); 9642: # 295 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: static Status OpenAsSecondary( 9642: const DBOptions& db_options, const std::string& name, 9642: const std::string& secondary_path, 9642: const std::vector& column_families, 9642: std::vector* handles, DB** dbptr); 9642: # 312 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: static Status OpenAsFollower(const Options& options, const std::string& name, 9642: const std::string& leader_path, 9642: std::unique_ptr* dbptr); 9642: 9642: 9642: static Status OpenAsFollower( 9642: const DBOptions& db_options, const std::string& name, 9642: const std::string& leader_path, 9642: const std::vector& column_families, 9642: std::vector* handles, std::unique_ptr* dbptr); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: static Status OpenAndCompact( 9642: const std::string& name, const std::string& output_directory, 9642: const std::string& input, std::string* output, 9642: const CompactionServiceOptionsOverride& override_options); 9642: 9642: static Status OpenAndCompact( 9642: const OpenAndCompactOptions& options, const std::string& name, 9642: const std::string& output_directory, const std::string& input, 9642: std::string* output, 9642: const CompactionServiceOptionsOverride& override_options); 9642: # 347 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: static Status OpenAndTrimHistory( 9642: const DBOptions& db_options, const std::string& dbname, 9642: const std::vector& column_families, 9642: std::vector* handles, DB** dbptr, 9642: std::string trim_ts); 9642: # 365 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status Resume() { return Status::NotSupported(); } 9642: # 384 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status Close() { return Status::NotSupported(); } 9642: 9642: 9642: 9642: 9642: 9642: static Status ListColumnFamilies(const DBOptions& db_options, 9642: const std::string& name, 9642: std::vector* column_families); 9642: 9642: 9642: DB() {} 9642: 9642: DB(const DB&) = delete; 9642: void operator=(const DB&) = delete; 9642: 9642: virtual ~DB(); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status CreateColumnFamily(const ColumnFamilyOptions& options, 9642: const std::string& column_family_name, 9642: ColumnFamilyHandle** handle); 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status CreateColumnFamilies( 9642: const ColumnFamilyOptions& options, 9642: const std::vector& column_family_names, 9642: std::vector* handles); 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status CreateColumnFamilies( 9642: const std::vector& column_families, 9642: std::vector* handles); 9642: 9642: 9642: 9642: 9642: virtual Status DropColumnFamily(ColumnFamilyHandle* column_family); 9642: 9642: 9642: 9642: 9642: 9642: virtual Status DropColumnFamilies( 9642: const std::vector& column_families); 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status DestroyColumnFamilyHandle(ColumnFamilyHandle* column_family); 9642: 9642: 9642: 9642: 9642: 9642: virtual Status Put(const WriteOptions& options, 9642: ColumnFamilyHandle* column_family, const Slice& key, 9642: const Slice& value) = 0; 9642: virtual Status Put(const WriteOptions& options, 9642: ColumnFamilyHandle* column_family, const Slice& key, 9642: const Slice& ts, const Slice& value) = 0; 9642: virtual Status Put(const WriteOptions& options, const Slice& key, 9642: const Slice& value) { 9642: return Put(options, DefaultColumnFamily(), key, value); 9642: } 9642: virtual Status Put(const WriteOptions& options, const Slice& key, 9642: const Slice& ts, const Slice& value) { 9642: return Put(options, DefaultColumnFamily(), key, ts, value); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status PutEntity(const WriteOptions& options, 9642: ColumnFamilyHandle* column_family, const Slice& key, 9642: const WideColumns& columns); 9642: 9642: 9642: virtual Status PutEntity(const WriteOptions& options, const Slice& key, 9642: const AttributeGroups& attribute_groups); 9642: 9642: 9642: 9642: 9642: 9642: virtual Status Delete(const WriteOptions& options, 9642: ColumnFamilyHandle* column_family, 9642: const Slice& key) = 0; 9642: virtual Status Delete(const WriteOptions& options, 9642: ColumnFamilyHandle* column_family, const Slice& key, 9642: const Slice& ts) = 0; 9642: virtual Status Delete(const WriteOptions& options, const Slice& key) { 9642: return Delete(options, DefaultColumnFamily(), key); 9642: } 9642: virtual Status Delete(const WriteOptions& options, const Slice& key, 9642: const Slice& ts) { 9642: return Delete(options, DefaultColumnFamily(), key, ts); 9642: } 9642: # 516 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status SingleDelete(const WriteOptions& options, 9642: ColumnFamilyHandle* column_family, 9642: const Slice& key) = 0; 9642: virtual Status SingleDelete(const WriteOptions& options, 9642: ColumnFamilyHandle* column_family, 9642: const Slice& key, const Slice& ts) = 0; 9642: virtual Status SingleDelete(const WriteOptions& options, const Slice& key) { 9642: return SingleDelete(options, DefaultColumnFamily(), key); 9642: } 9642: virtual Status SingleDelete(const WriteOptions& options, const Slice& key, 9642: const Slice& ts) { 9642: return SingleDelete(options, DefaultColumnFamily(), key, ts); 9642: } 9642: # 546 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status DeleteRange(const WriteOptions& options, 9642: ColumnFamilyHandle* column_family, 9642: const Slice& begin_key, const Slice& end_key); 9642: virtual Status DeleteRange(const WriteOptions& options, 9642: ColumnFamilyHandle* column_family, 9642: const Slice& begin_key, const Slice& end_key, 9642: const Slice& ts); 9642: virtual Status DeleteRange(const WriteOptions& options, 9642: const Slice& begin_key, const Slice& end_key) { 9642: return DeleteRange(options, DefaultColumnFamily(), begin_key, end_key); 9642: } 9642: virtual Status DeleteRange(const WriteOptions& options, 9642: const Slice& begin_key, const Slice& end_key, 9642: const Slice& ts) { 9642: return DeleteRange(options, DefaultColumnFamily(), begin_key, end_key, ts); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: virtual Status Merge(const WriteOptions& options, 9642: ColumnFamilyHandle* column_family, const Slice& key, 9642: const Slice& value) = 0; 9642: virtual Status Merge(const WriteOptions& options, const Slice& key, 9642: const Slice& value) { 9642: return Merge(options, DefaultColumnFamily(), key, value); 9642: } 9642: virtual Status Merge(const WriteOptions& , 9642: ColumnFamilyHandle* , 9642: const Slice& , const Slice& , 9642: const Slice& ); 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status Write(const WriteOptions& options, WriteBatch* updates) = 0; 9642: # 600 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status Get(const ReadOptions& options, 9642: ColumnFamilyHandle* column_family, const Slice& key, 9642: PinnableSlice* value, std::string* timestamp) = 0; 9642: 9642: 9642: 9642: 9642: virtual inline Status Get(const ReadOptions& options, 9642: ColumnFamilyHandle* column_family, const Slice& key, 9642: std::string* value, std::string* timestamp) final { 9642: 9642: # 610 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 9642: (static_cast ( 9642: # 610 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: value != nullptr 9642: # 610 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 610 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: "value != nullptr" 9642: # 610 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 610 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: ; 9642: PinnableSlice pinnable_val(value); 9642: 9642: # 612 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 9642: (static_cast ( 9642: # 612 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: !pinnable_val.IsPinned() 9642: # 612 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 612 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: "!pinnable_val.IsPinned()" 9642: # 612 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 612 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: ; 9642: auto s = Get(options, column_family, key, &pinnable_val, timestamp); 9642: if (s.ok() && pinnable_val.IsPinned()) { 9642: value->assign(pinnable_val.data(), pinnable_val.size()); 9642: } 9642: return s; 9642: } 9642: 9642: 9642: 9642: virtual Status Get(const ReadOptions& options, 9642: ColumnFamilyHandle* column_family, const Slice& key, 9642: PinnableSlice* value) final { 9642: return Get(options, column_family, key, value, nullptr); 9642: } 9642: 9642: 9642: 9642: virtual inline Status Get(const ReadOptions& options, 9642: ColumnFamilyHandle* column_family, const Slice& key, 9642: std::string* value) final { 9642: 9642: # 633 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 9642: (static_cast ( 9642: # 633 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: value != nullptr 9642: # 633 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 633 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: "value != nullptr" 9642: # 633 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 633 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: ; 9642: PinnableSlice pinnable_val(value); 9642: 9642: # 635 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 9642: (static_cast ( 9642: # 635 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: !pinnable_val.IsPinned() 9642: # 635 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 635 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: "!pinnable_val.IsPinned()" 9642: # 635 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 635 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: ; 9642: auto s = Get(options, column_family, key, &pinnable_val); 9642: if (s.ok() && pinnable_val.IsPinned()) { 9642: value->assign(pinnable_val.data(), pinnable_val.size()); 9642: } 9642: return s; 9642: } 9642: 9642: 9642: 9642: 9642: virtual Status Get(const ReadOptions& options, const Slice& key, 9642: std::string* value) final { 9642: return Get(options, DefaultColumnFamily(), key, value); 9642: } 9642: 9642: 9642: 9642: 9642: virtual Status Get(const ReadOptions& options, const Slice& key, 9642: std::string* value, std::string* timestamp) final { 9642: return Get(options, DefaultColumnFamily(), key, value, timestamp); 9642: } 9642: # 668 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status GetEntity(const ReadOptions& , 9642: ColumnFamilyHandle* , 9642: const Slice& , 9642: PinnableWideColumns* ) { 9642: return Status::NotSupported("GetEntity not supported"); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: virtual Status GetEntity(const ReadOptions& , 9642: const Slice& , 9642: PinnableAttributeGroups* ) { 9642: return Status::NotSupported("GetEntity not supported"); 9642: } 9642: # 704 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status GetMergeOperands( 9642: const ReadOptions& options, ColumnFamilyHandle* column_family, 9642: const Slice& key, PinnableSlice* merge_operands, 9642: GetMergeOperandsOptions* get_merge_operands_options, 9642: int* number_of_operands) = 0; 9642: # 730 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual std::vector MultiGet( 9642: const ReadOptions& options, 9642: const std::vector& column_families, 9642: const std::vector& keys, std::vector* values, 9642: std::vector* timestamps) final { 9642: size_t num_keys = keys.size(); 9642: std::vector statuses(num_keys); 9642: std::vector pin_values(num_keys); 9642: 9642: values->resize(num_keys); 9642: if (timestamps) { 9642: timestamps->resize(num_keys); 9642: } 9642: MultiGet(options, num_keys, 9642: const_cast(column_families.data()), 9642: keys.data(), pin_values.data(), 9642: timestamps ? timestamps->data() : nullptr, statuses.data(), 9642: false); 9642: for (size_t i = 0; i < num_keys; ++i) { 9642: if (statuses[i].ok()) { 9642: (*values)[i].assign(pin_values[i].data(), pin_values[i].size()); 9642: } 9642: } 9642: return statuses; 9642: } 9642: 9642: 9642: 9642: virtual std::vector MultiGet( 9642: const ReadOptions& options, 9642: const std::vector& column_family, 9642: const std::vector& keys, std::vector* values) final { 9642: values->resize(keys.size()); 9642: return MultiGet(options, column_family, keys, values, nullptr); 9642: } 9642: 9642: 9642: 9642: virtual std::vector MultiGet(const ReadOptions& options, 9642: const std::vector& keys, 9642: std::vector* values) final { 9642: values->resize(keys.size()); 9642: return MultiGet( 9642: options, 9642: std::vector(keys.size(), DefaultColumnFamily()), 9642: keys, values); 9642: } 9642: 9642: 9642: 9642: virtual std::vector MultiGet( 9642: const ReadOptions& options, const std::vector& keys, 9642: std::vector* values, 9642: std::vector* timestamps) final { 9642: values->resize(keys.size()); 9642: return MultiGet( 9642: options, 9642: std::vector(keys.size(), DefaultColumnFamily()), 9642: keys, values, timestamps); 9642: } 9642: # 819 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual void MultiGet(const ReadOptions& options, const size_t num_keys, 9642: ColumnFamilyHandle** column_families, const Slice* keys, 9642: PinnableSlice* values, std::string* timestamps, 9642: Status* statuses, const bool sorted_input = false) = 0; 9642: 9642: 9642: 9642: virtual void MultiGet(const ReadOptions& options, 9642: ColumnFamilyHandle* column_family, 9642: const size_t num_keys, const Slice* keys, 9642: PinnableSlice* values, std::string* timestamps, 9642: Status* statuses, 9642: const bool sorted_input = false) final; 9642: 9642: 9642: 9642: virtual void MultiGet(const ReadOptions& options, 9642: ColumnFamilyHandle* column_family, 9642: const size_t num_keys, const Slice* keys, 9642: PinnableSlice* values, Status* statuses, 9642: const bool sorted_input = false) final { 9642: MultiGet(options, column_family, num_keys, keys, values, nullptr, statuses, 9642: sorted_input); 9642: } 9642: 9642: 9642: 9642: virtual void MultiGet(const ReadOptions& options, const size_t num_keys, 9642: ColumnFamilyHandle** column_families, const Slice* keys, 9642: PinnableSlice* values, Status* statuses, 9642: const bool sorted_input = false) final { 9642: MultiGet(options, num_keys, column_families, keys, values, nullptr, 9642: statuses, sorted_input); 9642: } 9642: # 873 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual void MultiGetEntity(const ReadOptions& , 9642: ColumnFamilyHandle* , 9642: size_t num_keys, const Slice* , 9642: PinnableWideColumns* , 9642: Status* statuses, 9642: bool = false) { 9642: for (size_t i = 0; i < num_keys; ++i) { 9642: statuses[i] = Status::NotSupported("MultiGetEntity not supported"); 9642: } 9642: } 9642: # 905 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual void MultiGetEntity(const ReadOptions& , size_t num_keys, 9642: ColumnFamilyHandle** , 9642: const Slice* , 9642: PinnableWideColumns* , 9642: Status* statuses, 9642: bool = false) { 9642: for (size_t i = 0; i < num_keys; ++i) { 9642: statuses[i] = Status::NotSupported("MultiGetEntity not supported"); 9642: } 9642: } 9642: # 933 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual void MultiGetEntity(const ReadOptions& , size_t num_keys, 9642: const Slice* , 9642: PinnableAttributeGroups* results) { 9642: for (size_t i = 0; i < num_keys; ++i) { 9642: for (size_t j = 0; j < results[i].size(); ++j) { 9642: results[i][j].SetStatus( 9642: Status::NotSupported("MultiGetEntity not supported")); 9642: } 9642: } 9642: } 9642: # 951 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual bool KeyMayExist(const ReadOptions& , 9642: ColumnFamilyHandle* , 9642: const Slice& , std::string* , 9642: std::string* , 9642: bool* value_found = nullptr) { 9642: if (value_found != nullptr) { 9642: *value_found = false; 9642: } 9642: return true; 9642: } 9642: 9642: virtual bool KeyMayExist(const ReadOptions& options, 9642: ColumnFamilyHandle* column_family, const Slice& key, 9642: std::string* value, bool* value_found = nullptr) { 9642: return KeyMayExist(options, column_family, key, value, 9642: nullptr, value_found); 9642: } 9642: 9642: virtual bool KeyMayExist(const ReadOptions& options, const Slice& key, 9642: std::string* value, bool* value_found = nullptr) { 9642: return KeyMayExist(options, DefaultColumnFamily(), key, value, value_found); 9642: } 9642: 9642: virtual bool KeyMayExist(const ReadOptions& options, const Slice& key, 9642: std::string* value, std::string* timestamp, 9642: bool* value_found = nullptr) { 9642: return KeyMayExist(options, DefaultColumnFamily(), key, value, timestamp, 9642: value_found); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Iterator* NewIterator(const ReadOptions& options, 9642: ColumnFamilyHandle* column_family) = 0; 9642: virtual Iterator* NewIterator(const ReadOptions& options) { 9642: return NewIterator(options, DefaultColumnFamily()); 9642: } 9642: 9642: 9642: 9642: virtual Status NewIterators( 9642: const ReadOptions& options, 9642: const std::vector& column_families, 9642: std::vector* iterators) = 0; 9642: # 1014 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual std::unique_ptr NewCoalescingIterator( 9642: const ReadOptions& options, 9642: const std::vector& column_families) = 0; 9642: 9642: 9642: 9642: 9642: virtual std::unique_ptr NewAttributeGroupIterator( 9642: const ReadOptions& options, 9642: const std::vector& column_families) = 0; 9642: # 1032 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual const Snapshot* GetSnapshot() = 0; 9642: 9642: 9642: 9642: virtual void ReleaseSnapshot(const Snapshot* snapshot) = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct Properties { 9642: 9642: 9642: 9642: static const std::string kNumFilesAtLevelPrefix; 9642: 9642: 9642: 9642: 9642: 9642: 9642: static const std::string kCompressionRatioAtLevelPrefix; 9642: 9642: 9642: 9642: static const std::string kStats; 9642: 9642: 9642: 9642: static const std::string kSSTables; 9642: 9642: 9642: 9642: static const std::string kCFStats; 9642: 9642: 9642: 9642: 9642: 9642: static const std::string kCFStatsNoFileHistogram; 9642: 9642: 9642: 9642: static const std::string kCFFileHistogram; 9642: 9642: 9642: 9642: 9642: 9642: static const std::string kCFWriteStallStats; 9642: 9642: 9642: 9642: 9642: 9642: static const std::string kDBWriteStallStats; 9642: 9642: 9642: 9642: 9642: 9642: 9642: static const std::string kDBStats; 9642: 9642: 9642: 9642: static const std::string kLevelStats; 9642: 9642: 9642: 9642: 9642: 9642: static const std::string kBlockCacheEntryStats; 9642: 9642: 9642: 9642: static const std::string kFastBlockCacheEntryStats; 9642: 9642: 9642: 9642: static const std::string kNumImmutableMemTable; 9642: 9642: 9642: 9642: static const std::string kNumImmutableMemTableFlushed; 9642: 9642: 9642: 9642: static const std::string kMemTableFlushPending; 9642: 9642: 9642: 9642: static const std::string kNumRunningFlushes; 9642: 9642: 9642: 9642: static const std::string kCompactionPending; 9642: 9642: 9642: 9642: static const std::string kNumRunningCompactions; 9642: 9642: 9642: 9642: static const std::string kBackgroundErrors; 9642: 9642: 9642: 9642: static const std::string kCurSizeActiveMemTable; 9642: 9642: 9642: 9642: static const std::string kCurSizeAllMemTables; 9642: 9642: 9642: 9642: static const std::string kSizeAllMemTables; 9642: 9642: 9642: 9642: static const std::string kNumEntriesActiveMemTable; 9642: 9642: 9642: 9642: static const std::string kNumEntriesImmMemTables; 9642: 9642: 9642: 9642: static const std::string kNumDeletesActiveMemTable; 9642: 9642: 9642: 9642: static const std::string kNumDeletesImmMemTables; 9642: 9642: 9642: 9642: static const std::string kEstimateNumKeys; 9642: 9642: 9642: 9642: 9642: static const std::string kEstimateTableReadersMem; 9642: 9642: 9642: 9642: 9642: 9642: static const std::string kIsFileDeletionsEnabled; 9642: 9642: 9642: 9642: static const std::string kNumSnapshots; 9642: 9642: 9642: 9642: static const std::string kOldestSnapshotTime; 9642: 9642: 9642: 9642: static const std::string kOldestSnapshotSequence; 9642: 9642: 9642: 9642: 9642: 9642: static const std::string kNumLiveVersions; 9642: 9642: 9642: 9642: 9642: 9642: static const std::string kCurrentSuperVersionNumber; 9642: 9642: 9642: 9642: 9642: static const std::string kEstimateLiveDataSize; 9642: 9642: 9642: 9642: static const std::string kMinLogNumberToKeep; 9642: 9642: 9642: 9642: 9642: static const std::string kMinObsoleteSstNumberToKeep; 9642: 9642: 9642: 9642: 9642: static const std::string kTotalSstFilesSize; 9642: 9642: 9642: 9642: static const std::string kLiveSstFilesSize; 9642: # 1237 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: static const std::string kObsoleteSstFilesSize; 9642: 9642: 9642: 9642: static const std::string kLiveSstFilesSizeAtTemperature; 9642: 9642: 9642: 9642: static const std::string kBaseLevel; 9642: 9642: 9642: 9642: 9642: 9642: static const std::string kEstimatePendingCompactionBytes; 9642: 9642: 9642: 9642: 9642: 9642: static const std::string kAggregatedTableProperties; 9642: 9642: 9642: 9642: 9642: static const std::string kAggregatedTablePropertiesAtLevel; 9642: 9642: 9642: 9642: static const std::string kActualDelayedWriteRate; 9642: 9642: 9642: static const std::string kIsWriteStopped; 9642: 9642: 9642: 9642: 9642: 9642: static const std::string kEstimateOldestKeyTime; 9642: 9642: 9642: static const std::string kBlockCacheCapacity; 9642: 9642: 9642: 9642: static const std::string kBlockCacheUsage; 9642: 9642: 9642: 9642: static const std::string kBlockCachePinnedUsage; 9642: 9642: 9642: 9642: static const std::string kOptionsStatistics; 9642: 9642: 9642: 9642: static const std::string kNumBlobFiles; 9642: 9642: 9642: 9642: 9642: static const std::string kBlobStats; 9642: 9642: 9642: 9642: static const std::string kTotalBlobFileSize; 9642: 9642: 9642: 9642: static const std::string kLiveBlobFileSize; 9642: 9642: 9642: 9642: static const std::string kLiveBlobFileGarbageSize; 9642: 9642: 9642: static const std::string kBlobCacheCapacity; 9642: 9642: 9642: 9642: static const std::string kBlobCacheUsage; 9642: 9642: 9642: 9642: static const std::string kBlobCachePinnedUsage; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual bool GetProperty(ColumnFamilyHandle* column_family, 9642: const Slice& property, std::string* value) = 0; 9642: virtual bool GetProperty(const Slice& property, std::string* value) { 9642: return GetProperty(DefaultColumnFamily(), property, value); 9642: } 9642: 9642: 9642: 9642: virtual bool GetMapProperty(ColumnFamilyHandle* column_family, 9642: const Slice& property, 9642: std::map* value) = 0; 9642: virtual bool GetMapProperty(const Slice& property, 9642: std::map* value) { 9642: return GetMapProperty(DefaultColumnFamily(), property, value); 9642: } 9642: # 1391 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual bool GetIntProperty(ColumnFamilyHandle* column_family, 9642: const Slice& property, uint64_t* value) = 0; 9642: virtual bool GetIntProperty(const Slice& property, uint64_t* value) { 9642: return GetIntProperty(DefaultColumnFamily(), property, value); 9642: } 9642: 9642: 9642: 9642: 9642: virtual Status ResetStats() { 9642: return Status::NotSupported("Not implemented"); 9642: } 9642: 9642: 9642: 9642: virtual bool GetAggregatedIntProperty(const Slice& property, 9642: uint64_t* value) = 0; 9642: 9642: 9642: 9642: enum class SizeApproximationFlags : uint8_t { 9642: NONE = 0, 9642: INCLUDE_MEMTABLES = 1 << 0, 9642: INCLUDE_FILES = 1 << 1 9642: }; 9642: # 1424 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status GetApproximateSizes(const SizeApproximationOptions& options, 9642: ColumnFamilyHandle* column_family, 9642: const Range* ranges, int n, 9642: uint64_t* sizes) = 0; 9642: 9642: 9642: 9642: 9642: virtual Status GetApproximateSizes(ColumnFamilyHandle* column_family, 9642: const Range* ranges, int n, 9642: uint64_t* sizes, 9642: SizeApproximationFlags include_flags = 9642: SizeApproximationFlags::INCLUDE_FILES); 9642: 9642: virtual Status GetApproximateSizes( 9642: const Range* ranges, int n, uint64_t* sizes, 9642: SizeApproximationFlags include_flags = 9642: SizeApproximationFlags::INCLUDE_FILES) { 9642: return GetApproximateSizes(DefaultColumnFamily(), ranges, n, sizes, 9642: include_flags); 9642: } 9642: 9642: 9642: 9642: virtual void GetApproximateMemTableStats(ColumnFamilyHandle* column_family, 9642: const Range& range, 9642: uint64_t* const count, 9642: uint64_t* const size) = 0; 9642: virtual void GetApproximateMemTableStats(const Range& range, 9642: uint64_t* const count, 9642: uint64_t* const size) { 9642: GetApproximateMemTableStats(DefaultColumnFamily(), range, count, size); 9642: } 9642: # 1483 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status CompactRange(const CompactRangeOptions& options, 9642: ColumnFamilyHandle* column_family, 9642: const Slice* begin, const Slice* end) = 0; 9642: virtual Status CompactRange(const CompactRangeOptions& options, 9642: const Slice* begin, const Slice* end) { 9642: return CompactRange(options, DefaultColumnFamily(), begin, end); 9642: } 9642: # 1509 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status SetOptions( 9642: ColumnFamilyHandle* , 9642: const std::unordered_map& ) { 9642: return Status::NotSupported("Not implemented"); 9642: } 9642: 9642: virtual Status SetOptions( 9642: const std::unordered_map& new_options) { 9642: return SetOptions(DefaultColumnFamily(), new_options); 9642: } 9642: # 1529 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status SetDBOptions( 9642: const std::unordered_map& new_options) = 0; 9642: # 1539 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status CompactFiles( 9642: const CompactionOptions& compact_options, 9642: ColumnFamilyHandle* column_family, 9642: const std::vector& input_file_names, const int output_level, 9642: const int output_path_id = -1, 9642: std::vector* const output_file_names = nullptr, 9642: CompactionJobInfo* compaction_job_info = nullptr) = 0; 9642: 9642: virtual Status CompactFiles( 9642: const CompactionOptions& compact_options, 9642: const std::vector& input_file_names, const int output_level, 9642: const int output_path_id = -1, 9642: std::vector* const output_file_names = nullptr, 9642: CompactionJobInfo* compaction_job_info = nullptr) { 9642: return CompactFiles(compact_options, DefaultColumnFamily(), 9642: input_file_names, output_level, output_path_id, 9642: output_file_names, compaction_job_info); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: virtual Status PauseBackgroundWork() = 0; 9642: virtual Status ContinueBackgroundWork() = 0; 9642: # 1574 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status EnableAutoCompaction( 9642: const std::vector& column_family_handles) = 0; 9642: 9642: 9642: 9642: 9642: 9642: virtual void DisableManualCompaction() = 0; 9642: 9642: 9642: 9642: 9642: 9642: virtual void EnableManualCompaction() = 0; 9642: # 1598 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status WaitForCompact( 9642: const WaitForCompactOptions& ) = 0; 9642: 9642: 9642: virtual int NumberLevels(ColumnFamilyHandle* column_family) = 0; 9642: virtual int NumberLevels() { return NumberLevels(DefaultColumnFamily()); } 9642: 9642: 9642: 9642: virtual int MaxMemCompactionLevel(ColumnFamilyHandle* column_family) = 0; 9642: virtual int MaxMemCompactionLevel() { 9642: return MaxMemCompactionLevel(DefaultColumnFamily()); 9642: } 9642: 9642: 9642: virtual int Level0StopWriteTrigger(ColumnFamilyHandle* column_family) = 0; 9642: virtual int Level0StopWriteTrigger() { 9642: return Level0StopWriteTrigger(DefaultColumnFamily()); 9642: } 9642: 9642: 9642: 9642: virtual const std::string& GetName() const = 0; 9642: 9642: 9642: virtual Env* GetEnv() const = 0; 9642: 9642: 9642: 9642: virtual FileSystem* GetFileSystem() const; 9642: 9642: 9642: 9642: 9642: 9642: virtual Options GetOptions(ColumnFamilyHandle* column_family) const = 0; 9642: virtual Options GetOptions() const { 9642: return GetOptions(DefaultColumnFamily()); 9642: } 9642: 9642: virtual DBOptions GetDBOptions() const = 0; 9642: 9642: 9642: 9642: 9642: virtual Status Flush(const FlushOptions& options, 9642: ColumnFamilyHandle* column_family) = 0; 9642: virtual Status Flush(const FlushOptions& options) { 9642: return Flush(options, DefaultColumnFamily()); 9642: } 9642: # 1656 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status Flush( 9642: const FlushOptions& options, 9642: const std::vector& column_families) = 0; 9642: 9642: 9642: 9642: 9642: 9642: virtual Status FlushWAL(bool ) { 9642: return Status::NotSupported("FlushWAL not implemented"); 9642: } 9642: # 1677 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status SyncWAL() = 0; 9642: # 1688 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status LockWAL() { 9642: return Status::NotSupported("LockWAL not implemented"); 9642: } 9642: 9642: 9642: 9642: 9642: virtual Status UnlockWAL() { 9642: return Status::NotSupported("UnlockWAL not implemented"); 9642: } 9642: 9642: 9642: virtual SequenceNumber GetLatestSequenceNumber() const = 0; 9642: 9642: 9642: 9642: 9642: 9642: virtual Status IncreaseFullHistoryTsLow(ColumnFamilyHandle* column_family, 9642: std::string ts_low) = 0; 9642: 9642: 9642: virtual Status GetFullHistoryTsLow(ColumnFamilyHandle* column_family, 9642: std::string* ts_low) = 0; 9642: 9642: 9642: 9642: 9642: 9642: virtual Status DisableFileDeletions() = 0; 9642: # 1730 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status EnableFileDeletions() = 0; 9642: # 1742 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status GetCreationTimeOfOldestFile(uint64_t* creation_time) = 0; 9642: # 1756 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status GetUpdatesSince( 9642: SequenceNumber seq_number, std::unique_ptr* iter, 9642: const TransactionLogIterator::ReadOptions& read_options = 9642: TransactionLogIterator::ReadOptions()) = 0; 9642: # 1774 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status DeleteFile(std::string name) = 0; 9642: 9642: 9642: 9642: 9642: 9642: virtual void GetLiveFilesMetaData( 9642: std::vector* ) {} 9642: 9642: 9642: 9642: 9642: 9642: virtual Status GetLiveFilesChecksumInfo(FileChecksumList* checksum_list) = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status GetLiveFilesStorageInfo( 9642: const LiveFilesStorageInfoOptions& opts, 9642: std::vector* files) = 0; 9642: 9642: 9642: 9642: virtual void GetColumnFamilyMetaData(ColumnFamilyHandle* , 9642: ColumnFamilyMetaData* ) {} 9642: 9642: 9642: void GetColumnFamilyMetaData(ColumnFamilyMetaData* metadata) { 9642: GetColumnFamilyMetaData(DefaultColumnFamily(), metadata); 9642: } 9642: 9642: 9642: 9642: virtual void GetAllColumnFamilyMetaData( 9642: std::vector* ) {} 9642: # 1829 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status GetLiveFiles(std::vector&, 9642: uint64_t* manifest_file_size, 9642: bool flush_memtable = true) = 0; 9642: 9642: 9642: virtual Status GetSortedWalFiles(VectorLogPtr& files) = 0; 9642: # 1843 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status GetCurrentWalFile( 9642: std::unique_ptr* current_log_file) = 0; 9642: # 1887 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status IngestExternalFile( 9642: ColumnFamilyHandle* column_family, 9642: const std::vector& external_files, 9642: const IngestExternalFileOptions& options) = 0; 9642: 9642: virtual Status IngestExternalFile( 9642: const std::vector& external_files, 9642: const IngestExternalFileOptions& options) { 9642: return IngestExternalFile(DefaultColumnFamily(), external_files, options); 9642: } 9642: # 1913 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status IngestExternalFiles( 9642: const std::vector& args) = 0; 9642: # 1933 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status CreateColumnFamilyWithImport( 9642: const ColumnFamilyOptions& options, const std::string& column_family_name, 9642: const ImportColumnFamilyOptions& import_options, 9642: const ExportImportFilesMetaData& metadata, ColumnFamilyHandle** handle) { 9642: const std::vector& metadatas{&metadata}; 9642: return CreateColumnFamilyWithImport(options, column_family_name, 9642: import_options, metadatas, handle); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status CreateColumnFamilyWithImport( 9642: const ColumnFamilyOptions& options, const std::string& column_family_name, 9642: const ImportColumnFamilyOptions& import_options, 9642: const std::vector& metadatas, 9642: ColumnFamilyHandle** handle) = 0; 9642: # 1966 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status ClipColumnFamily(ColumnFamilyHandle* column_family, 9642: const Slice& begin_key, 9642: const Slice& end_key) = 0; 9642: 9642: 9642: 9642: virtual Status VerifyFileChecksums(const ReadOptions& ) { 9642: return Status::NotSupported("File verification not supported"); 9642: } 9642: 9642: 9642: 9642: virtual Status VerifyChecksum(const ReadOptions& read_options) = 0; 9642: 9642: virtual Status VerifyChecksum() { return VerifyChecksum(ReadOptions()); } 9642: 9642: 9642: 9642: 9642: virtual Status GetDbIdentity(std::string& identity) const = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual Status GetDbSessionId(std::string& session_id) const = 0; 9642: 9642: 9642: virtual ColumnFamilyHandle* DefaultColumnFamily() const = 0; 9642: 9642: virtual Status GetPropertiesOfAllTables(ColumnFamilyHandle* column_family, 9642: TablePropertiesCollection* props) = 0; 9642: virtual Status GetPropertiesOfAllTables(TablePropertiesCollection* props) { 9642: return GetPropertiesOfAllTables(DefaultColumnFamily(), props); 9642: } 9642: virtual Status GetPropertiesOfTablesInRange( 9642: ColumnFamilyHandle* column_family, const Range* range, std::size_t n, 9642: TablePropertiesCollection* props) = 0; 9642: 9642: virtual Status SuggestCompactRange(ColumnFamilyHandle* , 9642: const Slice* , 9642: const Slice* ) { 9642: return Status::NotSupported("SuggestCompactRange() is not implemented."); 9642: } 9642: 9642: 9642: 9642: virtual Status PromoteL0(ColumnFamilyHandle* , 9642: int ) { 9642: return Status::NotSupported("PromoteL0() is not implemented."); 9642: } 9642: 9642: 9642: virtual Status StartTrace(const TraceOptions& , 9642: std::unique_ptr&& ) { 9642: return Status::NotSupported("StartTrace() is not implemented."); 9642: } 9642: 9642: virtual Status EndTrace() { 9642: return Status::NotSupported("EndTrace() is not implemented."); 9642: } 9642: 9642: 9642: virtual Status StartIOTrace(const TraceOptions& , 9642: std::unique_ptr&& ) { 9642: return Status::NotSupported("StartIOTrace() is not implemented."); 9642: } 9642: 9642: virtual Status EndIOTrace() { 9642: return Status::NotSupported("EndIOTrace() is not implemented."); 9642: } 9642: 9642: 9642: virtual Status StartBlockCacheTrace( 9642: const TraceOptions& , 9642: std::unique_ptr&& ) { 9642: return Status::NotSupported("StartBlockCacheTrace() is not implemented."); 9642: } 9642: 9642: virtual Status StartBlockCacheTrace( 9642: const BlockCacheTraceOptions& , 9642: std::unique_ptr&& ) { 9642: return Status::NotSupported("StartBlockCacheTrace() is not implemented."); 9642: } 9642: 9642: virtual Status EndBlockCacheTrace() { 9642: return Status::NotSupported("EndBlockCacheTrace() is not implemented."); 9642: } 9642: 9642: 9642: virtual Status NewDefaultReplayer( 9642: const std::vector& , 9642: std::unique_ptr&& , 9642: std::unique_ptr* ) { 9642: return Status::NotSupported("NewDefaultReplayer() is not implemented."); 9642: } 9642: 9642: 9642: virtual DB* GetRootDB() { return this; } 9642: 9642: 9642: 9642: 9642: virtual Status GetStatsHistory( 9642: uint64_t , uint64_t , 9642: std::unique_ptr* ) { 9642: return Status::NotSupported("GetStatsHistory() is not implemented."); 9642: } 9642: # 2086 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: virtual Status TryCatchUpWithPrimary() { 9642: return Status::NotSupported("Supported only by secondary instance"); 9642: } 9642: }; 9642: 9642: struct WriteStallStatsMapKeys { 9642: static const std::string& TotalStops(); 9642: static const std::string& TotalDelays(); 9642: 9642: static const std::string& CFL0FileCountLimitDelaysWithOngoingCompaction(); 9642: static const std::string& CFL0FileCountLimitStopsWithOngoingCompaction(); 9642: # 2105 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: static std::string CauseConditionCount(WriteStallCause cause, 9642: WriteStallCondition condition); 9642: }; 9642: 9642: 9642: inline DB::SizeApproximationFlags operator&(DB::SizeApproximationFlags lhs, 9642: DB::SizeApproximationFlags rhs) { 9642: return static_cast(static_cast(lhs) & 9642: static_cast(rhs)); 9642: } 9642: inline DB::SizeApproximationFlags operator|(DB::SizeApproximationFlags lhs, 9642: DB::SizeApproximationFlags rhs) { 9642: return static_cast(static_cast(lhs) | 9642: static_cast(rhs)); 9642: } 9642: 9642: inline Status DB::GetApproximateSizes(ColumnFamilyHandle* column_family, 9642: const Range* ranges, int n, 9642: uint64_t* sizes, 9642: SizeApproximationFlags include_flags) { 9642: SizeApproximationOptions options; 9642: options.include_memtables = 9642: ((include_flags & SizeApproximationFlags::INCLUDE_MEMTABLES) != 9642: SizeApproximationFlags::NONE); 9642: options.include_files = 9642: ((include_flags & SizeApproximationFlags::INCLUDE_FILES) != 9642: SizeApproximationFlags::NONE); 9642: return GetApproximateSizes(options, column_family, ranges, n, sizes); 9642: } 9642: 9642: 9642: 9642: Status DestroyDB(const std::string& name, const Options& options, 9642: const std::vector& column_families = 9642: std::vector()); 9642: # 2150 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 9642: Status RepairDB(const std::string& dbname, const DBOptions& db_options, 9642: const std::vector& column_families); 9642: 9642: 9642: 9642: Status RepairDB(const std::string& dbname, const DBOptions& db_options, 9642: const std::vector& column_families, 9642: const ColumnFamilyOptions& unknown_cf_opts); 9642: 9642: 9642: 9642: Status RepairDB(const std::string& dbname, const Options& options); 9642: 9642: } 9642: # 13 "/build/reproducible-path/rocksdb-9.3.1/db/merge_context.h" 2 9642: 9642: 9642: namespace rocksdb { 9642: 9642: const std::vector empty_operand_list; 9642: 9642: 9642: 9642: 9642: 9642: class MergeContext { 9642: public: 9642: GetMergeOperandsOptions* get_merge_operands_options = nullptr; 9642: 9642: 9642: void Clear() { 9642: if (operand_list_) { 9642: operand_list_->clear(); 9642: copied_operands_->clear(); 9642: } 9642: } 9642: 9642: 9642: void PushOperand(const Slice& operand_slice, bool operand_pinned = false) { 9642: Initialize(); 9642: SetDirectionBackward(); 9642: 9642: if (operand_pinned) { 9642: operand_list_->push_back(operand_slice); 9642: } else { 9642: 9642: copied_operands_->emplace_back( 9642: new std::string(operand_slice.data(), operand_slice.size())); 9642: operand_list_->push_back(*copied_operands_->back()); 9642: } 9642: } 9642: 9642: 9642: void PushOperandBack(const Slice& operand_slice, 9642: bool operand_pinned = false) { 9642: Initialize(); 9642: SetDirectionForward(); 9642: 9642: if (operand_pinned) { 9642: operand_list_->push_back(operand_slice); 9642: } else { 9642: 9642: copied_operands_->emplace_back( 9642: new std::string(operand_slice.data(), operand_slice.size())); 9642: operand_list_->push_back(*copied_operands_->back()); 9642: } 9642: } 9642: 9642: 9642: size_t GetNumOperands() const { 9642: if (!operand_list_) { 9642: return 0; 9642: } 9642: return operand_list_->size(); 9642: } 9642: 9642: 9642: Slice GetOperand(int index) const { 9642: 9642: # 76 "/build/reproducible-path/rocksdb-9.3.1/db/merge_context.h" 3 4 9642: (static_cast ( 9642: # 76 "/build/reproducible-path/rocksdb-9.3.1/db/merge_context.h" 9642: operand_list_ 9642: # 76 "/build/reproducible-path/rocksdb-9.3.1/db/merge_context.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 76 "/build/reproducible-path/rocksdb-9.3.1/db/merge_context.h" 9642: "operand_list_" 9642: # 76 "/build/reproducible-path/rocksdb-9.3.1/db/merge_context.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 76 "/build/reproducible-path/rocksdb-9.3.1/db/merge_context.h" 9642: ; 9642: 9642: SetDirectionForward(); 9642: return (*operand_list_)[index]; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: const std::vector& GetOperands() const { 9642: return GetOperandsDirectionForward(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: const std::vector& GetOperandsDirectionForward() const { 9642: if (!operand_list_) { 9642: return empty_operand_list; 9642: } 9642: 9642: SetDirectionForward(); 9642: return *operand_list_; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: const std::vector& GetOperandsDirectionBackward() const { 9642: if (!operand_list_) { 9642: return empty_operand_list; 9642: } 9642: 9642: SetDirectionBackward(); 9642: return *operand_list_; 9642: } 9642: 9642: private: 9642: void Initialize() { 9642: if (!operand_list_) { 9642: operand_list_.reset(new std::vector()); 9642: copied_operands_.reset(new std::vector>()); 9642: } 9642: } 9642: 9642: void SetDirectionForward() const { 9642: if (operands_reversed_ == true) { 9642: std::reverse(operand_list_->begin(), operand_list_->end()); 9642: operands_reversed_ = false; 9642: } 9642: } 9642: 9642: void SetDirectionBackward() const { 9642: if (operands_reversed_ == false) { 9642: std::reverse(operand_list_->begin(), operand_list_->end()); 9642: operands_reversed_ = true; 9642: } 9642: } 9642: 9642: 9642: mutable std::unique_ptr> operand_list_; 9642: 9642: std::unique_ptr>> copied_operands_; 9642: mutable bool operands_reversed_ = true; 9642: }; 9642: 9642: } 9642: # 14 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 2 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/async_file_reader.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 19 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 2 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/single_thread_executor.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 22 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 2 9642: 9642: namespace rocksdb { 9642: class GetContext; 9642: class PinnableWideColumns; 9642: 9642: struct KeyContext { 9642: const Slice* key; 9642: LookupKey* lkey; 9642: Slice ukey_with_ts; 9642: Slice ukey_without_ts; 9642: Slice ikey; 9642: ColumnFamilyHandle* column_family; 9642: Status* s; 9642: MergeContext merge_context; 9642: SequenceNumber max_covering_tombstone_seq; 9642: bool key_exists; 9642: bool is_blob_index; 9642: void* cb_arg; 9642: PinnableSlice* value; 9642: PinnableWideColumns* columns; 9642: std::string* timestamp; 9642: GetContext* get_context; 9642: 9642: KeyContext(ColumnFamilyHandle* col_family, const Slice& user_key, 9642: PinnableSlice* val, PinnableWideColumns* cols, std::string* ts, 9642: Status* stat) 9642: : key(&user_key), 9642: lkey(nullptr), 9642: column_family(col_family), 9642: s(stat), 9642: max_covering_tombstone_seq(0), 9642: key_exists(false), 9642: is_blob_index(false), 9642: cb_arg(nullptr), 9642: value(val), 9642: columns(cols), 9642: timestamp(ts), 9642: get_context(nullptr) {} 9642: }; 9642: # 97 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: class MultiGetContext { 9642: public: 9642: 9642: 9642: 9642: 9642: static const int MAX_BATCH_SIZE = 32; 9642: 9642: 9642: 9642: using Mask = uint64_t; 9642: static_assert(MAX_BATCH_SIZE < sizeof(Mask) * 8); 9642: 9642: MultiGetContext(autovector* sorted_keys, 9642: size_t begin, size_t num_keys, SequenceNumber snapshot, 9642: const ReadOptions& read_opts, FileSystem* fs, 9642: Statistics* stats) 9642: : num_keys_(num_keys), 9642: value_mask_(0), 9642: value_size_(0), 9642: lookup_key_ptr_(reinterpret_cast(lookup_key_stack_buf)) 9642: 9642: 9642: 9642: 9642: 9642: { 9642: (void)fs; 9642: (void)stats; 9642: 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: (static_cast ( 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: num_keys <= MAX_BATCH_SIZE 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: "num_keys <= MAX_BATCH_SIZE" 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 126 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: ; 9642: if (num_keys > MAX_LOOKUP_KEYS_ON_STACK) { 9642: lookup_key_heap_buf.reset(new char[sizeof(LookupKey) * num_keys]); 9642: lookup_key_ptr_ = reinterpret_cast(lookup_key_heap_buf.get()); 9642: } 9642: 9642: for (size_t iter = 0; iter != num_keys_; ++iter) { 9642: 9642: sorted_keys_[iter] = (*sorted_keys)[begin + iter]; 9642: sorted_keys_[iter]->lkey = new (&lookup_key_ptr_[iter]) 9642: LookupKey(*sorted_keys_[iter]->key, snapshot, read_opts.timestamp); 9642: sorted_keys_[iter]->ukey_with_ts = sorted_keys_[iter]->lkey->user_key(); 9642: sorted_keys_[iter]->ukey_without_ts = StripTimestampFromUserKey( 9642: sorted_keys_[iter]->lkey->user_key(), 9642: read_opts.timestamp == nullptr ? 0 : read_opts.timestamp->size()); 9642: sorted_keys_[iter]->ikey = sorted_keys_[iter]->lkey->internal_key(); 9642: sorted_keys_[iter]->timestamp = (*sorted_keys)[begin + iter]->timestamp; 9642: sorted_keys_[iter]->get_context = 9642: (*sorted_keys)[begin + iter]->get_context; 9642: } 9642: } 9642: 9642: ~MultiGetContext() { 9642: for (size_t i = 0; i < num_keys_; ++i) { 9642: lookup_key_ptr_[i].~LookupKey(); 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: private: 9642: static const int MAX_LOOKUP_KEYS_ON_STACK = 16; 9642: alignas( 9642: alignof(LookupKey)) char lookup_key_stack_buf[sizeof(LookupKey) * 9642: MAX_LOOKUP_KEYS_ON_STACK]; 9642: std::array sorted_keys_; 9642: size_t num_keys_; 9642: Mask value_mask_; 9642: uint64_t value_size_; 9642: std::unique_ptr lookup_key_heap_buf; 9642: LookupKey* lookup_key_ptr_; 9642: 9642: 9642: 9642: 9642: 9642: public: 9642: # 186 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: class Range { 9642: public: 9642: 9642: 9642: 9642: class Iterator { 9642: public: 9642: 9642: using self_type = Iterator; 9642: using value_type = KeyContext; 9642: using reference = KeyContext&; 9642: using pointer = KeyContext*; 9642: using difference_type = int; 9642: using iterator_category = std::forward_iterator_tag; 9642: 9642: Iterator(const Range* range, size_t idx) 9642: : range_(range), ctx_(range->ctx_), index_(idx) { 9642: while (index_ < range_->end_ && 9642: (Mask{1} << index_) & 9642: (range_->ctx_->value_mask_ | range_->skip_mask_ | 9642: range_->invalid_mask_)) 9642: index_++; 9642: } 9642: 9642: Iterator(const Iterator&) = default; 9642: 9642: Iterator(const Iterator& other, const Range* range) 9642: : range_(range), ctx_(other.ctx_), index_(other.index_) { 9642: 9642: # 214 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: (static_cast ( 9642: # 214 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: range->ctx_ == other.ctx_ 9642: # 214 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 214 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: "range->ctx_ == other.ctx_" 9642: # 214 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 214 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: ; 9642: } 9642: Iterator& operator=(const Iterator&) = default; 9642: 9642: Iterator& operator++() { 9642: while (++index_ < range_->end_ && 9642: (Mask{1} << index_) & 9642: (range_->ctx_->value_mask_ | range_->skip_mask_ | 9642: range_->invalid_mask_)) 9642: ; 9642: return *this; 9642: } 9642: 9642: bool operator==(Iterator other) const { 9642: 9642: # 228 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: (static_cast ( 9642: # 228 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: range_->ctx_ == other.range_->ctx_ 9642: # 228 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 228 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: "range_->ctx_ == other.range_->ctx_" 9642: # 228 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 228 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: ; 9642: return index_ == other.index_; 9642: } 9642: 9642: bool operator!=(Iterator other) const { 9642: 9642: # 233 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: (static_cast ( 9642: # 233 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: range_->ctx_ == other.range_->ctx_ 9642: # 233 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 233 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: "range_->ctx_ == other.range_->ctx_" 9642: # 233 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 233 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: ; 9642: return index_ != other.index_; 9642: } 9642: 9642: KeyContext& operator*() { 9642: 9642: # 238 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: (static_cast ( 9642: # 238 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: index_ < range_->end_ && index_ >= range_->start_ 9642: # 238 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 238 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: "index_ < range_->end_ && index_ >= range_->start_" 9642: # 238 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 238 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: ; 9642: return *(ctx_->sorted_keys_[index_]); 9642: } 9642: 9642: KeyContext* operator->() { 9642: 9642: # 243 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: (static_cast ( 9642: # 243 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: index_ < range_->end_ && index_ >= range_->start_ 9642: # 243 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 243 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: "index_ < range_->end_ && index_ >= range_->start_" 9642: # 243 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 243 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: ; 9642: return ctx_->sorted_keys_[index_]; 9642: } 9642: 9642: size_t index() { return index_; } 9642: 9642: private: 9642: friend Range; 9642: const Range* range_; 9642: const MultiGetContext* ctx_; 9642: size_t index_; 9642: }; 9642: 9642: Range(const Range& mget_range, const Iterator& first, 9642: const Iterator& last) { 9642: ctx_ = mget_range.ctx_; 9642: if (first == last) { 9642: 9642: 9642: start_ = mget_range.start_; 9642: end_ = start_; 9642: } else { 9642: start_ = first.index_; 9642: end_ = last.index_; 9642: } 9642: skip_mask_ = mget_range.skip_mask_; 9642: invalid_mask_ = mget_range.invalid_mask_; 9642: 9642: # 270 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: (static_cast ( 9642: # 270 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: start_ < 64 9642: # 270 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 270 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: "start_ < 64" 9642: # 270 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 270 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: ; 9642: 9642: # 271 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: (static_cast ( 9642: # 271 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: end_ < 64 9642: # 271 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 271 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: "end_ < 64" 9642: # 271 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 271 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: ; 9642: } 9642: 9642: Range() = default; 9642: 9642: Iterator begin() const { return Iterator(this, start_); } 9642: 9642: Iterator end() const { return Iterator(this, end_); } 9642: 9642: bool empty() const { return RemainingMask() == 0; } 9642: 9642: void SkipIndex(size_t index) { skip_mask_ |= Mask{1} << index; } 9642: 9642: void SkipKey(const Iterator& iter) { SkipIndex(iter.index_); } 9642: 9642: bool IsKeySkipped(const Iterator& iter) const { 9642: return skip_mask_ & (Mask{1} << iter.index_); 9642: } 9642: 9642: 9642: 9642: void MarkKeyDone(Iterator& iter) { 9642: ctx_->value_mask_ |= (Mask{1} << iter.index_); 9642: } 9642: 9642: bool CheckKeyDone(Iterator& iter) const { 9642: return ctx_->value_mask_ & (Mask{1} << iter.index_); 9642: } 9642: 9642: uint64_t KeysLeft() const { return BitsSetToOne(RemainingMask()); } 9642: 9642: void AddSkipsFrom(const Range& other) { 9642: 9642: # 303 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: (static_cast ( 9642: # 303 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: ctx_ == other.ctx_ 9642: # 303 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 303 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: "ctx_ == other.ctx_" 9642: # 303 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 303 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: ; 9642: skip_mask_ |= other.skip_mask_; 9642: } 9642: 9642: uint64_t GetValueSize() { return ctx_->value_size_; } 9642: 9642: void AddValueSize(uint64_t value_size) { ctx_->value_size_ += value_size; } 9642: 9642: MultiGetContext* context() const { return ctx_; } 9642: 9642: Range Suffix(const Range& other) const { 9642: size_t other_last = other.FindLastRemaining(); 9642: size_t my_last = FindLastRemaining(); 9642: 9642: if (my_last > other_last) { 9642: return Range(*this, Iterator(this, other_last), 9642: Iterator(this, my_last)); 9642: } else { 9642: return Range(*this, begin(), begin()); 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: Range& operator+=(const Range& rhs) { 9642: 9642: # 330 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: (static_cast ( 9642: # 330 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: rhs.start_ >= end_ 9642: # 330 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 330 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: "rhs.start_ >= end_" 9642: # 330 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 330 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: ; 9642: 9642: if (end_ < rhs.start_) { 9642: invalid_mask_ |= RangeMask(end_, rhs.start_); 9642: skip_mask_ |= RangeMask(end_, rhs.start_); 9642: } 9642: start_ = std::min(start_, rhs.start_); 9642: end_ = std::max(end_, rhs.end_); 9642: skip_mask_ |= rhs.skip_mask_ & RangeMask(rhs.start_, rhs.end_); 9642: invalid_mask_ |= (rhs.invalid_mask_ | rhs.skip_mask_) & 9642: RangeMask(rhs.start_, rhs.end_); 9642: 9642: # 341 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: (static_cast ( 9642: # 341 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: start_ < 64 9642: # 341 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 341 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: "start_ < 64" 9642: # 341 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 341 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: ; 9642: 9642: # 342 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: (static_cast ( 9642: # 342 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: end_ < 64 9642: # 342 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 342 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: "end_ < 64" 9642: # 342 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 342 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: ; 9642: return *this; 9642: } 9642: 9642: 9642: 9642: 9642: Range& operator-=(const Range& rhs) { 9642: 9642: # 350 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: (static_cast ( 9642: # 350 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: start_ <= rhs.start_ && end_ >= rhs.end_ 9642: # 350 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 350 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: "start_ <= rhs.start_ && end_ >= rhs.end_" 9642: # 350 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 350 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: ; 9642: skip_mask_ |= (~rhs.skip_mask_ | rhs.invalid_mask_) & 9642: RangeMask(rhs.start_, rhs.end_); 9642: invalid_mask_ |= (~rhs.skip_mask_ | rhs.invalid_mask_) & 9642: RangeMask(rhs.start_, rhs.end_); 9642: return *this; 9642: } 9642: 9642: 9642: Range operator~() { 9642: Range res = *this; 9642: res.skip_mask_ = ~skip_mask_ & RangeMask(start_, end_); 9642: return res; 9642: } 9642: 9642: private: 9642: friend MultiGetContext; 9642: MultiGetContext* ctx_; 9642: size_t start_; 9642: size_t end_; 9642: Mask skip_mask_; 9642: Mask invalid_mask_; 9642: 9642: Range(MultiGetContext* ctx, size_t num_keys) 9642: : ctx_(ctx), 9642: start_(0), 9642: end_(num_keys), 9642: skip_mask_(0), 9642: invalid_mask_(0) { 9642: 9642: # 379 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: (static_cast ( 9642: # 379 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: num_keys < 64 9642: # 379 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 379 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: "num_keys < 64" 9642: # 379 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 379 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 9642: ; 9642: } 9642: 9642: static Mask RangeMask(size_t start, size_t end) { 9642: return (((Mask{1} << (end - start)) - 1) << start); 9642: } 9642: 9642: Mask RemainingMask() const { 9642: return (((Mask{1} << end_) - 1) & ~((Mask{1} << start_) - 1) & 9642: ~(ctx_->value_mask_ | skip_mask_)); 9642: } 9642: 9642: size_t FindLastRemaining() const { 9642: Mask mask = RemainingMask(); 9642: size_t index = (mask >>= start_) ? start_ : 0; 9642: while (mask >>= 1) { 9642: index++; 9642: } 9642: return index; 9642: } 9642: }; 9642: 9642: 9642: Range GetMultiGetRange() { return Range(this, num_keys_); } 9642: }; 9642: 9642: } 9642: # 23 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: class Iterator; 9642: struct ParsedInternalKey; 9642: class Slice; 9642: class Arena; 9642: struct ReadOptions; 9642: struct TableProperties; 9642: class GetContext; 9642: class MultiGetContext; 9642: 9642: 9642: 9642: 9642: 9642: 9642: class TableReader { 9642: public: 9642: virtual ~TableReader() {} 9642: # 57 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 9642: virtual InternalIterator* NewIterator( 9642: const ReadOptions& read_options, const SliceTransform* prefix_extractor, 9642: Arena* arena, bool skip_filters, TableReaderCaller caller, 9642: size_t compaction_readahead_size = 0, 9642: bool allow_unprepared_value = false) = 0; 9642: 9642: 9642: virtual FragmentedRangeTombstoneIterator* NewRangeTombstoneIterator( 9642: const ReadOptions& ) { 9642: return nullptr; 9642: } 9642: 9642: virtual FragmentedRangeTombstoneIterator* NewRangeTombstoneIterator( 9642: SequenceNumber , const Slice* ) { 9642: return nullptr; 9642: } 9642: # 85 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 9642: virtual uint64_t ApproximateOffsetOf(const ReadOptions& read_options, 9642: const Slice& key, 9642: TableReaderCaller caller) = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual uint64_t ApproximateSize(const ReadOptions& read_options, 9642: const Slice& start, const Slice& end, 9642: TableReaderCaller caller) = 0; 9642: 9642: struct Anchor { 9642: Anchor(const Slice& _user_key, size_t _range_size) 9642: : user_key(_user_key.ToStringView()), range_size(_range_size) {} 9642: std::string user_key; 9642: size_t range_size; 9642: }; 9642: 9642: 9642: 9642: virtual Status ApproximateKeyAnchors(const ReadOptions& , 9642: std::vector& ) { 9642: return Status::NotSupported("ApproximateKeyAnchors() not supported."); 9642: } 9642: 9642: 9642: 9642: virtual void SetupForCompaction() = 0; 9642: 9642: virtual std::shared_ptr GetTableProperties() const = 0; 9642: 9642: 9642: virtual void Prepare(const Slice& ) {} 9642: 9642: 9642: virtual size_t ApproximateMemoryUsage() const = 0; 9642: # 135 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 9642: virtual Status Get(const ReadOptions& readOptions, const Slice& key, 9642: GetContext* get_context, 9642: const SliceTransform* prefix_extractor, 9642: bool skip_filters = false) = 0; 9642: 9642: 9642: 9642: 9642: virtual Status MultiGetFilter(const ReadOptions& , 9642: const SliceTransform* , 9642: MultiGetContext::Range* ) { 9642: return Status::NotSupported(); 9642: } 9642: 9642: virtual void MultiGet(const ReadOptions& readOptions, 9642: const MultiGetContext::Range* mget_range, 9642: const SliceTransform* prefix_extractor, 9642: bool skip_filters = false) { 9642: for (auto iter = mget_range->begin(); iter != mget_range->end(); ++iter) { 9642: *iter->s = Get(readOptions, iter->ikey, iter->get_context, 9642: prefix_extractor, skip_filters); 9642: } 9642: } 9642: # 171 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 9642: virtual Status Prefetch(const ReadOptions& , 9642: const Slice* begin = nullptr, 9642: const Slice* end = nullptr) { 9642: (void)begin; 9642: (void)end; 9642: 9642: 9642: return Status::OK(); 9642: } 9642: 9642: 9642: virtual Status DumpTable(WritableFile* ) { 9642: return Status::NotSupported("DumpTable() not supported"); 9642: } 9642: 9642: 9642: virtual Status VerifyChecksum(const ReadOptions& , 9642: TableReaderCaller ) { 9642: return Status::NotSupported("VerifyChecksum() not supported"); 9642: } 9642: }; 9642: 9642: } 9642: # 27 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/unique_id_impl.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/unique_id.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: # 36 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/unique_id.h" 9642: Status GetUniqueIdFromTableProperties(const TableProperties &props, 9642: std::string *out_id); 9642: # 47 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/unique_id.h" 9642: Status GetExtendedUniqueIdFromTableProperties(const TableProperties &props, 9642: std::string *out_id); 9642: 9642: 9642: 9642: 9642: std::string UniqueIdToHumanString(const std::string &id); 9642: 9642: } 9642: # 11 "/build/reproducible-path/rocksdb-9.3.1/table/unique_id_impl.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: 9642: using UniqueId64x2 = std::array; 9642: 9642: 9642: constexpr UniqueId64x2 kNullUniqueId64x2 = {}; 9642: 9642: 9642: 9642: using UniqueId64x3 = std::array; 9642: 9642: 9642: constexpr UniqueId64x3 kNullUniqueId64x3 = {}; 9642: 9642: 9642: struct UniqueIdPtr { 9642: uint64_t *ptr = nullptr; 9642: bool extended = false; 9642: 9642: UniqueIdPtr(UniqueId64x2 *id) { 9642: ptr = (*id).data(); 9642: extended = false; 9642: } 9642: UniqueIdPtr(UniqueId64x3 *id) { 9642: ptr = (*id).data(); 9642: extended = true; 9642: } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: Status GetSstInternalUniqueId(const std::string &db_id, 9642: const std::string &db_session_id, 9642: uint64_t file_number, UniqueIdPtr out, 9642: bool force = false); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: void InternalUniqueIdToExternal(UniqueIdPtr in_out); 9642: 9642: 9642: 9642: void ExternalUniqueIdToInternal(UniqueIdPtr in_out); 9642: 9642: 9642: std::string EncodeUniqueIdBytes(UniqueIdPtr in); 9642: 9642: 9642: Status DecodeUniqueIdBytes(const std::string &unique_id, UniqueIdPtr out); 9642: 9642: 9642: 9642: std::string InternalUniqueIdToHumanString(UniqueIdPtr in); 9642: # 85 "/build/reproducible-path/rocksdb-9.3.1/table/unique_id_impl.h" 9642: std::string EncodeSessionId(uint64_t upper, uint64_t lower); 9642: 9642: 9642: 9642: 9642: Status DecodeSessionId(const std::string &db_session_id, uint64_t *upper, 9642: uint64_t *lower); 9642: 9642: } 9642: # 28 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 2 9642: 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: 9642: enum Tag : uint32_t { 9642: kComparator = 1, 9642: kLogNumber = 2, 9642: kNextFileNumber = 3, 9642: kLastSequence = 4, 9642: kCompactCursor = 5, 9642: kDeletedFile = 6, 9642: kNewFile = 7, 9642: 9642: kPrevLogNumber = 9, 9642: kMinLogNumberToKeep = 10, 9642: 9642: 9642: kNewFile2 = 100, 9642: kNewFile3 = 102, 9642: kNewFile4 = 103, 9642: kColumnFamily = 200, 9642: kColumnFamilyAdd = 201, 9642: kColumnFamilyDrop = 202, 9642: kMaxColumnFamily = 203, 9642: 9642: kInAtomicGroup = 300, 9642: 9642: kBlobFileAddition = 400, 9642: kBlobFileGarbage, 9642: 9642: 9642: kTagSafeIgnoreMask = 1 << 13, 9642: 9642: 9642: kDbId, 9642: kBlobFileAddition_DEPRECATED, 9642: kBlobFileGarbage_DEPRECATED, 9642: kWalAddition, 9642: kWalDeletion, 9642: kFullHistoryTsLow, 9642: kWalAddition2, 9642: kWalDeletion2, 9642: kPersistUserDefinedTimestamps, 9642: }; 9642: 9642: enum NewFileCustomTag : uint32_t { 9642: kTerminate = 1, 9642: kNeedCompaction = 2, 9642: 9642: 9642: 9642: kMinLogNumberToKeepHack = 3, 9642: kOldestBlobFileNumber = 4, 9642: kOldestAncesterTime = 5, 9642: kFileCreationTime = 6, 9642: kFileChecksum = 7, 9642: kFileChecksumFuncName = 8, 9642: kTemperature = 9, 9642: kMinTimestamp = 10, 9642: kMaxTimestamp = 11, 9642: kUniqueId = 12, 9642: kEpochNumber = 13, 9642: kCompensatedRangeDeletionSize = 14, 9642: kTailSize = 15, 9642: kUserDefinedTimestampsPersisted = 16, 9642: 9642: 9642: 9642: kCustomTagNonSafeIgnoreMask = 1 << 6, 9642: 9642: 9642: kPathId, 9642: }; 9642: 9642: class VersionSet; 9642: 9642: constexpr uint64_t kFileNumberMask = 0x3FFFFFFFFFFFFFFF; 9642: constexpr uint64_t kUnknownOldestAncesterTime = 0; 9642: constexpr uint64_t kUnknownFileCreationTime = 0; 9642: constexpr uint64_t kUnknownEpochNumber = 0; 9642: 9642: 9642: constexpr uint64_t kReservedEpochNumberForFileIngestedBehind = 1; 9642: 9642: uint64_t PackFileNumberAndPathId(uint64_t number, uint64_t path_id); 9642: 9642: 9642: 9642: 9642: 9642: 9642: struct FileDescriptor { 9642: 9642: TableReader* table_reader; 9642: uint64_t packed_number_and_path_id; 9642: uint64_t file_size; 9642: SequenceNumber smallest_seqno; 9642: SequenceNumber largest_seqno; 9642: 9642: FileDescriptor() : FileDescriptor(0, 0, 0) {} 9642: 9642: FileDescriptor(uint64_t number, uint32_t path_id, uint64_t _file_size) 9642: : FileDescriptor(number, path_id, _file_size, kMaxSequenceNumber, 0) {} 9642: 9642: FileDescriptor(uint64_t number, uint32_t path_id, uint64_t _file_size, 9642: SequenceNumber _smallest_seqno, SequenceNumber _largest_seqno) 9642: : table_reader(nullptr), 9642: packed_number_and_path_id(PackFileNumberAndPathId(number, path_id)), 9642: file_size(_file_size), 9642: smallest_seqno(_smallest_seqno), 9642: largest_seqno(_largest_seqno) {} 9642: 9642: FileDescriptor(const FileDescriptor& fd) { *this = fd; } 9642: 9642: FileDescriptor& operator=(const FileDescriptor& fd) { 9642: table_reader = fd.table_reader; 9642: packed_number_and_path_id = fd.packed_number_and_path_id; 9642: file_size = fd.file_size; 9642: smallest_seqno = fd.smallest_seqno; 9642: largest_seqno = fd.largest_seqno; 9642: return *this; 9642: } 9642: 9642: uint64_t GetNumber() const { 9642: return packed_number_and_path_id & kFileNumberMask; 9642: } 9642: uint32_t GetPathId() const { 9642: return static_cast(packed_number_and_path_id / 9642: (kFileNumberMask + 1)); 9642: } 9642: uint64_t GetFileSize() const { return file_size; } 9642: }; 9642: 9642: struct FileSampledStats { 9642: FileSampledStats() : num_reads_sampled(0) {} 9642: FileSampledStats(const FileSampledStats& other) { *this = other; } 9642: FileSampledStats& operator=(const FileSampledStats& other) { 9642: num_reads_sampled = other.num_reads_sampled.load(); 9642: return *this; 9642: } 9642: 9642: 9642: mutable std::atomic num_reads_sampled; 9642: }; 9642: 9642: struct FileMetaData { 9642: FileDescriptor fd; 9642: InternalKey smallest; 9642: InternalKey largest; 9642: 9642: 9642: Cache::Handle* table_reader_handle = nullptr; 9642: 9642: FileSampledStats stats; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: uint64_t compensated_file_size = 0; 9642: 9642: 9642: uint64_t num_entries = 9642: 0; 9642: 9642: uint64_t num_deletions = 0; 9642: uint64_t raw_key_size = 0; 9642: uint64_t raw_value_size = 0; 9642: uint64_t num_range_deletions = 0; 9642: 9642: 9642: 9642: uint64_t compensated_range_deletion_size = 0; 9642: 9642: int refs = 0; 9642: 9642: bool being_compacted = false; 9642: bool init_stats_from_file = false; 9642: 9642: 9642: bool marked_for_compaction = false; 9642: 9642: Temperature temperature = Temperature::kUnknown; 9642: 9642: 9642: 9642: uint64_t oldest_blob_file_number = kInvalidBlobFileNumber; 9642: # 232 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: uint64_t oldest_ancester_time = kUnknownOldestAncesterTime; 9642: 9642: 9642: uint64_t file_creation_time = kUnknownFileCreationTime; 9642: 9642: 9642: 9642: 9642: 9642: uint64_t epoch_number = kUnknownEpochNumber; 9642: 9642: 9642: std::string file_checksum = kUnknownFileChecksum; 9642: 9642: 9642: std::string file_checksum_func_name = kUnknownFileChecksumFuncName; 9642: 9642: 9642: UniqueId64x2 unique_id{}; 9642: 9642: 9642: 9642: uint64_t tail_size = 0; 9642: 9642: 9642: 9642: 9642: bool user_defined_timestamps_persisted = true; 9642: 9642: FileMetaData() = default; 9642: 9642: FileMetaData(uint64_t file, uint32_t file_path_id, uint64_t file_size, 9642: const InternalKey& smallest_key, const InternalKey& largest_key, 9642: const SequenceNumber& smallest_seq, 9642: const SequenceNumber& largest_seq, bool marked_for_compact, 9642: Temperature _temperature, uint64_t oldest_blob_file, 9642: uint64_t _oldest_ancester_time, uint64_t _file_creation_time, 9642: uint64_t _epoch_number, const std::string& _file_checksum, 9642: const std::string& _file_checksum_func_name, 9642: UniqueId64x2 _unique_id, 9642: const uint64_t _compensated_range_deletion_size, 9642: uint64_t _tail_size, bool _user_defined_timestamps_persisted) 9642: : fd(file, file_path_id, file_size, smallest_seq, largest_seq), 9642: smallest(smallest_key), 9642: largest(largest_key), 9642: compensated_range_deletion_size(_compensated_range_deletion_size), 9642: marked_for_compaction(marked_for_compact), 9642: temperature(_temperature), 9642: oldest_blob_file_number(oldest_blob_file), 9642: oldest_ancester_time(_oldest_ancester_time), 9642: file_creation_time(_file_creation_time), 9642: epoch_number(_epoch_number), 9642: file_checksum(_file_checksum), 9642: file_checksum_func_name(_file_checksum_func_name), 9642: unique_id(std::move(_unique_id)), 9642: tail_size(_tail_size), 9642: user_defined_timestamps_persisted(_user_defined_timestamps_persisted) { 9642: rocksdb::SyncPoint::GetInstance()->Process("FileMetaData::FileMetaData", this); 9642: } 9642: 9642: 9642: 9642: Status UpdateBoundaries(const Slice& key, const Slice& value, 9642: SequenceNumber seqno, ValueType value_type); 9642: 9642: 9642: 9642: void UpdateBoundariesForRange(const InternalKey& start, 9642: const InternalKey& end, SequenceNumber seqno, 9642: const InternalKeyComparator& icmp) { 9642: if (smallest.size() == 0 || icmp.Compare(start, smallest) < 0) { 9642: smallest = start; 9642: } 9642: if (largest.size() == 0 || icmp.Compare(largest, end) < 0) { 9642: largest = end; 9642: } 9642: 9642: # 308 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: (static_cast ( 9642: # 308 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: icmp.Compare(smallest, largest) <= 0 9642: # 308 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 308 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: "icmp.Compare(smallest, largest) <= 0" 9642: # 308 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 308 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: ; 9642: fd.smallest_seqno = std::min(fd.smallest_seqno, seqno); 9642: fd.largest_seqno = std::max(fd.largest_seqno, seqno); 9642: } 9642: 9642: 9642: 9642: 9642: uint64_t TryGetOldestAncesterTime() { 9642: if (oldest_ancester_time != kUnknownOldestAncesterTime) { 9642: return oldest_ancester_time; 9642: } else if (fd.table_reader != nullptr && 9642: fd.table_reader->GetTableProperties() != nullptr) { 9642: return fd.table_reader->GetTableProperties()->creation_time; 9642: } 9642: return kUnknownOldestAncesterTime; 9642: } 9642: 9642: uint64_t TryGetFileCreationTime() { 9642: if (file_creation_time != kUnknownFileCreationTime) { 9642: return file_creation_time; 9642: } else if (fd.table_reader != nullptr && 9642: fd.table_reader->GetTableProperties() != nullptr) { 9642: return fd.table_reader->GetTableProperties()->file_creation_time; 9642: } 9642: return kUnknownFileCreationTime; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_t ApproximateMemoryUsage() const { 9642: size_t usage = 0; 9642: 9642: usage += malloc_usable_size(const_cast(this)); 9642: 9642: 9642: 9642: usage += smallest.size() + largest.size() + file_checksum.size() + 9642: file_checksum_func_name.size(); 9642: return usage; 9642: } 9642: }; 9642: 9642: 9642: 9642: 9642: struct FdWithKeyRange { 9642: FileDescriptor fd; 9642: FileMetaData* file_metadata; 9642: Slice smallest_key; 9642: Slice largest_key; 9642: 9642: FdWithKeyRange() 9642: : fd(), file_metadata(nullptr), smallest_key(), largest_key() {} 9642: 9642: FdWithKeyRange(FileDescriptor _fd, Slice _smallest_key, Slice _largest_key, 9642: FileMetaData* _file_metadata) 9642: : fd(_fd), 9642: file_metadata(_file_metadata), 9642: smallest_key(_smallest_key), 9642: largest_key(_largest_key) {} 9642: }; 9642: 9642: 9642: 9642: struct LevelFilesBrief { 9642: size_t num_files; 9642: FdWithKeyRange* files; 9642: LevelFilesBrief() { 9642: num_files = 0; 9642: files = nullptr; 9642: } 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: class VersionEdit { 9642: public: 9642: void Clear(); 9642: 9642: void SetDBId(const std::string& db_id) { 9642: has_db_id_ = true; 9642: db_id_ = db_id; 9642: } 9642: bool HasDbId() const { return has_db_id_; } 9642: const std::string& GetDbId() const { return db_id_; } 9642: 9642: void SetComparatorName(const Slice& name) { 9642: has_comparator_ = true; 9642: comparator_ = name.ToString(); 9642: } 9642: bool HasComparatorName() const { return has_comparator_; } 9642: const std::string& GetComparatorName() const { return comparator_; } 9642: 9642: void SetPersistUserDefinedTimestamps(bool persist_user_defined_timestamps) { 9642: has_persist_user_defined_timestamps_ = true; 9642: persist_user_defined_timestamps_ = persist_user_defined_timestamps; 9642: } 9642: bool HasPersistUserDefinedTimestamps() const { 9642: return has_persist_user_defined_timestamps_; 9642: } 9642: bool GetPersistUserDefinedTimestamps() const { 9642: return persist_user_defined_timestamps_; 9642: } 9642: 9642: void SetLogNumber(uint64_t num) { 9642: has_log_number_ = true; 9642: log_number_ = num; 9642: } 9642: bool HasLogNumber() const { return has_log_number_; } 9642: uint64_t GetLogNumber() const { return log_number_; } 9642: 9642: void SetPrevLogNumber(uint64_t num) { 9642: has_prev_log_number_ = true; 9642: prev_log_number_ = num; 9642: } 9642: bool HasPrevLogNumber() const { return has_prev_log_number_; } 9642: uint64_t GetPrevLogNumber() const { return prev_log_number_; } 9642: 9642: void SetNextFile(uint64_t num) { 9642: has_next_file_number_ = true; 9642: next_file_number_ = num; 9642: } 9642: bool HasNextFile() const { return has_next_file_number_; } 9642: uint64_t GetNextFile() const { return next_file_number_; } 9642: 9642: void SetMaxColumnFamily(uint32_t max_column_family) { 9642: has_max_column_family_ = true; 9642: max_column_family_ = max_column_family; 9642: } 9642: bool HasMaxColumnFamily() const { return has_max_column_family_; } 9642: uint32_t GetMaxColumnFamily() const { return max_column_family_; } 9642: 9642: void SetMinLogNumberToKeep(uint64_t num) { 9642: has_min_log_number_to_keep_ = true; 9642: min_log_number_to_keep_ = num; 9642: } 9642: bool HasMinLogNumberToKeep() const { return has_min_log_number_to_keep_; } 9642: uint64_t GetMinLogNumberToKeep() const { return min_log_number_to_keep_; } 9642: 9642: void SetLastSequence(SequenceNumber seq) { 9642: has_last_sequence_ = true; 9642: last_sequence_ = seq; 9642: } 9642: bool HasLastSequence() const { return has_last_sequence_; } 9642: SequenceNumber GetLastSequence() const { return last_sequence_; } 9642: 9642: 9642: void DeleteFile(int level, uint64_t file) { 9642: deleted_files_.emplace(level, file); 9642: } 9642: 9642: 9642: using DeletedFiles = std::set>; 9642: const DeletedFiles& GetDeletedFiles() const { return deleted_files_; } 9642: 9642: 9642: 9642: 9642: 9642: void AddFile(int level, uint64_t file, uint32_t file_path_id, 9642: uint64_t file_size, const InternalKey& smallest, 9642: const InternalKey& largest, const SequenceNumber& smallest_seqno, 9642: const SequenceNumber& largest_seqno, bool marked_for_compaction, 9642: Temperature temperature, uint64_t oldest_blob_file_number, 9642: uint64_t oldest_ancester_time, uint64_t file_creation_time, 9642: uint64_t epoch_number, const std::string& file_checksum, 9642: const std::string& file_checksum_func_name, 9642: const UniqueId64x2& unique_id, 9642: const uint64_t compensated_range_deletion_size, 9642: uint64_t tail_size, bool user_defined_timestamps_persisted) { 9642: 9642: # 485 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: (static_cast ( 9642: # 485 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: smallest_seqno <= largest_seqno 9642: # 485 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 485 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: "smallest_seqno <= largest_seqno" 9642: # 485 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 485 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: ; 9642: new_files_.emplace_back( 9642: level, 9642: FileMetaData(file, file_path_id, file_size, smallest, largest, 9642: smallest_seqno, largest_seqno, marked_for_compaction, 9642: temperature, oldest_blob_file_number, oldest_ancester_time, 9642: file_creation_time, epoch_number, file_checksum, 9642: file_checksum_func_name, unique_id, 9642: compensated_range_deletion_size, tail_size, 9642: user_defined_timestamps_persisted)); 9642: files_to_quarantine_.push_back(file); 9642: if (!HasLastSequence() || largest_seqno > GetLastSequence()) { 9642: SetLastSequence(largest_seqno); 9642: } 9642: } 9642: 9642: void AddFile(int level, const FileMetaData& f) { 9642: 9642: # 502 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: (static_cast ( 9642: # 502 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: f.fd.smallest_seqno <= f.fd.largest_seqno 9642: # 502 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 502 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: "f.fd.smallest_seqno <= f.fd.largest_seqno" 9642: # 502 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 502 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: ; 9642: new_files_.emplace_back(level, f); 9642: files_to_quarantine_.push_back(f.fd.GetNumber()); 9642: if (!HasLastSequence() || f.fd.largest_seqno > GetLastSequence()) { 9642: SetLastSequence(f.fd.largest_seqno); 9642: } 9642: } 9642: 9642: 9642: using NewFiles = std::vector>; 9642: const NewFiles& GetNewFiles() const { return new_files_; } 9642: 9642: NewFiles& GetMutableNewFiles() { return new_files_; } 9642: 9642: 9642: using CompactCursors = std::vector>; 9642: const CompactCursors& GetCompactCursors() const { return compact_cursors_; } 9642: void AddCompactCursor(int level, const InternalKey& cursor) { 9642: compact_cursors_.push_back(std::make_pair(level, cursor)); 9642: } 9642: void SetCompactCursors( 9642: const std::vector& compact_cursors_by_level) { 9642: compact_cursors_.clear(); 9642: compact_cursors_.reserve(compact_cursors_by_level.size()); 9642: for (int i = 0; i < (int)compact_cursors_by_level.size(); i++) { 9642: if (compact_cursors_by_level[i].Valid()) { 9642: compact_cursors_.push_back( 9642: std::make_pair(i, compact_cursors_by_level[i])); 9642: } 9642: } 9642: } 9642: 9642: 9642: void AddBlobFile(uint64_t blob_file_number, uint64_t total_blob_count, 9642: uint64_t total_blob_bytes, std::string checksum_method, 9642: std::string checksum_value) { 9642: blob_file_additions_.emplace_back( 9642: blob_file_number, total_blob_count, total_blob_bytes, 9642: std::move(checksum_method), std::move(checksum_value)); 9642: files_to_quarantine_.push_back(blob_file_number); 9642: } 9642: 9642: void AddBlobFile(BlobFileAddition blob_file_addition) { 9642: blob_file_additions_.emplace_back(std::move(blob_file_addition)); 9642: files_to_quarantine_.push_back( 9642: blob_file_additions_.back().GetBlobFileNumber()); 9642: } 9642: 9642: 9642: using BlobFileAdditions = std::vector; 9642: const BlobFileAdditions& GetBlobFileAdditions() const { 9642: return blob_file_additions_; 9642: } 9642: 9642: void SetBlobFileAdditions(BlobFileAdditions blob_file_additions) { 9642: 9642: # 557 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: (static_cast ( 9642: # 557 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: blob_file_additions_.empty() 9642: # 557 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 557 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: "blob_file_additions_.empty()" 9642: # 557 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 557 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: ; 9642: blob_file_additions_ = std::move(blob_file_additions); 9642: std::for_each( 9642: blob_file_additions_.begin(), blob_file_additions_.end(), 9642: [&](const BlobFileAddition& blob_file) { 9642: files_to_quarantine_.push_back(blob_file.GetBlobFileNumber()); 9642: }); 9642: } 9642: 9642: 9642: 9642: void AddBlobFileGarbage(uint64_t blob_file_number, 9642: uint64_t garbage_blob_count, 9642: uint64_t garbage_blob_bytes) { 9642: blob_file_garbages_.emplace_back(blob_file_number, garbage_blob_count, 9642: garbage_blob_bytes); 9642: } 9642: 9642: void AddBlobFileGarbage(BlobFileGarbage blob_file_garbage) { 9642: blob_file_garbages_.emplace_back(std::move(blob_file_garbage)); 9642: } 9642: 9642: 9642: using BlobFileGarbages = std::vector; 9642: const BlobFileGarbages& GetBlobFileGarbages() const { 9642: return blob_file_garbages_; 9642: } 9642: 9642: void SetBlobFileGarbages(BlobFileGarbages blob_file_garbages) { 9642: 9642: # 586 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: (static_cast ( 9642: # 586 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: blob_file_garbages_.empty() 9642: # 586 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 586 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: "blob_file_garbages_.empty()" 9642: # 586 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 586 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: ; 9642: blob_file_garbages_ = std::move(blob_file_garbages); 9642: } 9642: 9642: 9642: 9642: void AddWal(WalNumber number, WalMetadata metadata = WalMetadata()) { 9642: 9642: # 593 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: (static_cast ( 9642: # 593 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: NumEntries() == wal_additions_.size() 9642: # 593 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 593 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: "NumEntries() == wal_additions_.size()" 9642: # 593 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 593 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: ; 9642: wal_additions_.emplace_back(number, std::move(metadata)); 9642: } 9642: 9642: 9642: const WalAdditions& GetWalAdditions() const { return wal_additions_; } 9642: 9642: bool IsWalAddition() const { return !wal_additions_.empty(); } 9642: 9642: 9642: 9642: void DeleteWalsBefore(WalNumber number) { 9642: 9642: # 605 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: (static_cast ( 9642: # 605 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: (NumEntries() == 1) == !wal_deletion_.IsEmpty() 9642: # 605 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 605 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: "(NumEntries() == 1) == !wal_deletion_.IsEmpty()" 9642: # 605 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 605 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: ; 9642: wal_deletion_ = WalDeletion(number); 9642: } 9642: 9642: const WalDeletion& GetWalDeletion() const { return wal_deletion_; } 9642: 9642: bool IsWalDeletion() const { return !wal_deletion_.IsEmpty(); } 9642: 9642: bool IsWalManipulation() const { 9642: size_t entries = NumEntries(); 9642: return (entries > 0) && ((entries == wal_additions_.size()) || 9642: (entries == !wal_deletion_.IsEmpty())); 9642: } 9642: 9642: 9642: size_t NumEntries() const { 9642: return new_files_.size() + deleted_files_.size() + 9642: blob_file_additions_.size() + blob_file_garbages_.size() + 9642: wal_additions_.size() + !wal_deletion_.IsEmpty(); 9642: } 9642: 9642: void SetColumnFamily(uint32_t column_family_id) { 9642: column_family_ = column_family_id; 9642: } 9642: uint32_t GetColumnFamily() const { return column_family_; } 9642: 9642: const std::string& GetColumnFamilyName() const { return column_family_name_; } 9642: 9642: 9642: void AddColumnFamily(const std::string& name) { 9642: 9642: # 635 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: (static_cast ( 9642: # 635 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: !is_column_family_drop_ 9642: # 635 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 635 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: "!is_column_family_drop_" 9642: # 635 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 635 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: ; 9642: 9642: # 636 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: (static_cast ( 9642: # 636 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: !is_column_family_add_ 9642: # 636 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 636 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: "!is_column_family_add_" 9642: # 636 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 636 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: ; 9642: 9642: # 637 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: (static_cast ( 9642: # 637 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: NumEntries() == 0 9642: # 637 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 637 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: "NumEntries() == 0" 9642: # 637 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 637 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: ; 9642: is_column_family_add_ = true; 9642: column_family_name_ = name; 9642: } 9642: 9642: 9642: void DropColumnFamily() { 9642: 9642: # 644 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: (static_cast ( 9642: # 644 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: !is_column_family_drop_ 9642: # 644 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 644 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: "!is_column_family_drop_" 9642: # 644 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 644 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: ; 9642: 9642: # 645 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: (static_cast ( 9642: # 645 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: !is_column_family_add_ 9642: # 645 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 645 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: "!is_column_family_add_" 9642: # 645 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 645 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: ; 9642: 9642: # 646 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: (static_cast ( 9642: # 646 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: NumEntries() == 0 9642: # 646 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 646 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: "NumEntries() == 0" 9642: # 646 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 646 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: ; 9642: is_column_family_drop_ = true; 9642: } 9642: 9642: bool IsColumnFamilyManipulation() const { 9642: return is_column_family_add_ || is_column_family_drop_; 9642: } 9642: 9642: bool IsColumnFamilyAdd() const { return is_column_family_add_; } 9642: 9642: bool IsColumnFamilyDrop() const { return is_column_family_drop_; } 9642: 9642: void MarkAtomicGroup(uint32_t remaining_entries) { 9642: is_in_atomic_group_ = true; 9642: remaining_entries_ = remaining_entries; 9642: } 9642: bool IsInAtomicGroup() const { return is_in_atomic_group_; } 9642: void SetRemainingEntries(uint32_t remaining_entries) { 9642: remaining_entries_ = remaining_entries; 9642: } 9642: uint32_t GetRemainingEntries() const { return remaining_entries_; } 9642: 9642: bool HasFullHistoryTsLow() const { return !full_history_ts_low_.empty(); } 9642: const std::string& GetFullHistoryTsLow() const { 9642: 9642: # 670 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: (static_cast ( 9642: # 670 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: HasFullHistoryTsLow() 9642: # 670 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 670 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: "HasFullHistoryTsLow()" 9642: # 670 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 670 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: ; 9642: return full_history_ts_low_; 9642: } 9642: void SetFullHistoryTsLow(std::string full_history_ts_low) { 9642: 9642: # 674 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: (static_cast ( 9642: # 674 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: !full_history_ts_low.empty() 9642: # 674 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 674 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: "!full_history_ts_low.empty()" 9642: # 674 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 674 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: ; 9642: full_history_ts_low_ = std::move(full_history_ts_low); 9642: } 9642: # 688 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: bool EncodeTo(std::string* dst, 9642: std::optional ts_sz = std::nullopt) const; 9642: Status DecodeFrom(const Slice& src); 9642: 9642: const autovector* GetFilesToQuarantineIfCommitFail() const { 9642: return &files_to_quarantine_; 9642: } 9642: 9642: std::string DebugString(bool hex_key = false) const; 9642: std::string DebugJSON(int edit_num, bool hex_key = false) const; 9642: 9642: private: 9642: bool GetLevel(Slice* input, int* level, const char** msg); 9642: 9642: const char* DecodeNewFile4From(Slice* input); 9642: 9642: 9642: 9642: 9642: void EncodeFileBoundaries(std::string* dst, const FileMetaData& meta, 9642: size_t ts_sz) const; 9642: 9642: int max_level_ = 0; 9642: std::string db_id_; 9642: std::string comparator_; 9642: uint64_t log_number_ = 0; 9642: uint64_t prev_log_number_ = 0; 9642: uint64_t next_file_number_ = 0; 9642: uint32_t max_column_family_ = 0; 9642: 9642: uint64_t min_log_number_to_keep_ = 0; 9642: SequenceNumber last_sequence_ = 0; 9642: bool has_db_id_ = false; 9642: bool has_comparator_ = false; 9642: bool has_log_number_ = false; 9642: bool has_prev_log_number_ = false; 9642: bool has_next_file_number_ = false; 9642: bool has_max_column_family_ = false; 9642: bool has_min_log_number_to_keep_ = false; 9642: bool has_last_sequence_ = false; 9642: bool has_persist_user_defined_timestamps_ = false; 9642: 9642: 9642: CompactCursors compact_cursors_; 9642: 9642: DeletedFiles deleted_files_; 9642: NewFiles new_files_; 9642: 9642: BlobFileAdditions blob_file_additions_; 9642: BlobFileGarbages blob_file_garbages_; 9642: 9642: WalAdditions wal_additions_; 9642: WalDeletion wal_deletion_; 9642: 9642: 9642: 9642: uint32_t column_family_ = 0; 9642: 9642: 9642: 9642: bool is_column_family_drop_ = false; 9642: bool is_column_family_add_ = false; 9642: std::string column_family_name_; 9642: 9642: bool is_in_atomic_group_ = false; 9642: uint32_t remaining_entries_ = 0; 9642: 9642: std::string full_history_ts_low_; 9642: bool persist_user_defined_timestamps_ = true; 9642: # 766 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 9642: autovector files_to_quarantine_; 9642: }; 9642: 9642: } 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 9642: 9642: # 21 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/thread_local.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/util/thread_local.h" 9642: 9642: # 21 "/build/reproducible-path/rocksdb-9.3.1/util/thread_local.h" 9642: namespace rocksdb { 9642: # 34 "/build/reproducible-path/rocksdb-9.3.1/util/thread_local.h" 9642: using UnrefHandler = void (*)(void* ptr); 9642: # 44 "/build/reproducible-path/rocksdb-9.3.1/util/thread_local.h" 9642: class ThreadLocalPtr { 9642: public: 9642: explicit ThreadLocalPtr(UnrefHandler handler = nullptr); 9642: 9642: ThreadLocalPtr(const ThreadLocalPtr&) = delete; 9642: ThreadLocalPtr& operator=(const ThreadLocalPtr&) = delete; 9642: 9642: ~ThreadLocalPtr(); 9642: 9642: 9642: void* Get() const; 9642: 9642: 9642: void Reset(void* ptr); 9642: 9642: 9642: void* Swap(void* ptr); 9642: 9642: 9642: 9642: 9642: 9642: bool CompareAndSwap(void* ptr, void*& expected); 9642: 9642: 9642: 9642: void Scrape(autovector* ptrs, void* const replacement); 9642: 9642: using FoldFunc = std::function; 9642: 9642: 9642: 9642: 9642: void Fold(FoldFunc func, void* res); 9642: 9642: 9642: 9642: static uint32_t TEST_PeekId(); 9642: # 90 "/build/reproducible-path/rocksdb-9.3.1/util/thread_local.h" 9642: static void InitSingletons(); 9642: 9642: class StaticMeta; 9642: 9642: private: 9642: static StaticMeta* Instance(); 9642: 9642: const uint32_t id_; 9642: }; 9642: 9642: } 9642: # 22 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 2 9642: # 31 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 9642: namespace rocksdb { 9642: 9642: class Logger; 9642: # 42 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 9642: class ConcurrentArena : public Allocator { 9642: public: 9642: 9642: 9642: 9642: 9642: explicit ConcurrentArena(size_t block_size = Arena::kMinBlockSize, 9642: AllocTracker* tracker = nullptr, 9642: size_t huge_page_size = 0); 9642: 9642: char* Allocate(size_t bytes) override { 9642: return AllocateImpl(bytes, false , 9642: [this, bytes]() { return arena_.Allocate(bytes); }); 9642: } 9642: 9642: char* AllocateAligned(size_t bytes, size_t huge_page_size = 0, 9642: Logger* logger = nullptr) override { 9642: size_t rounded_up = ((bytes - 1) | (sizeof(void*) - 1)) + 1; 9642: 9642: # 60 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 3 4 9642: (static_cast ( 9642: # 60 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 9642: rounded_up >= bytes && rounded_up < bytes + sizeof(void*) && (rounded_up % sizeof(void*)) == 0 9642: # 60 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 60 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 9642: "rounded_up >= bytes && rounded_up < bytes + sizeof(void*) && (rounded_up % sizeof(void*)) == 0" 9642: # 60 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: 9642: # 61 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 9642: ; 9642: 9642: return AllocateImpl(rounded_up, huge_page_size != 0 , 9642: [this, rounded_up, huge_page_size, logger]() { 9642: return arena_.AllocateAligned(rounded_up, 9642: huge_page_size, logger); 9642: }); 9642: } 9642: 9642: size_t ApproximateMemoryUsage() const { 9642: std::unique_lock lock(arena_mutex_, std::defer_lock); 9642: lock.lock(); 9642: return arena_.ApproximateMemoryUsage() - ShardAllocatedAndUnused(); 9642: } 9642: 9642: size_t MemoryAllocatedBytes() const { 9642: return memory_allocated_bytes_.load(std::memory_order_relaxed); 9642: } 9642: 9642: size_t AllocatedAndUnused() const { 9642: return arena_allocated_and_unused_.load(std::memory_order_relaxed) + 9642: ShardAllocatedAndUnused(); 9642: } 9642: 9642: size_t IrregularBlockNum() const { 9642: return irregular_block_num_.load(std::memory_order_relaxed); 9642: } 9642: 9642: size_t BlockSize() const override { return arena_.BlockSize(); } 9642: 9642: private: 9642: struct Shard { 9642: char padding[40] ; 9642: mutable SpinMutex mutex; 9642: char* free_begin_; 9642: std::atomic allocated_and_unused_; 9642: 9642: Shard() : free_begin_(nullptr), allocated_and_unused_(0) {} 9642: }; 9642: 9642: static thread_local size_t tls_cpuid; 9642: 9642: char padding0[56] ; 9642: 9642: size_t shard_block_size_; 9642: 9642: CoreLocalArray shards_; 9642: 9642: Arena arena_; 9642: mutable SpinMutex arena_mutex_; 9642: std::atomic arena_allocated_and_unused_; 9642: std::atomic memory_allocated_bytes_; 9642: std::atomic irregular_block_num_; 9642: 9642: char padding1[56] ; 9642: 9642: Shard* Repick(); 9642: 9642: size_t ShardAllocatedAndUnused() const { 9642: size_t total = 0; 9642: for (size_t i = 0; i < shards_.Size(); ++i) { 9642: total += shards_.AccessAtCore(i)->allocated_and_unused_.load( 9642: std::memory_order_relaxed); 9642: } 9642: return total; 9642: } 9642: 9642: template 9642: char* AllocateImpl(size_t bytes, bool force_arena, const Func& func) { 9642: size_t cpu; 9642: 9642: 9642: 9642: 9642: 9642: std::unique_lock arena_lock(arena_mutex_, std::defer_lock); 9642: if (bytes > shard_block_size_ / 4 || force_arena || 9642: ((cpu = tls_cpuid) == 0 && 9642: !shards_.AccessAtCore(0)->allocated_and_unused_.load( 9642: std::memory_order_relaxed) && 9642: arena_lock.try_lock())) { 9642: if (!arena_lock.owns_lock()) { 9642: arena_lock.lock(); 9642: } 9642: auto rv = func(); 9642: Fixup(); 9642: return rv; 9642: } 9642: 9642: 9642: Shard* s = shards_.AccessAtCore(cpu & (shards_.Size() - 1)); 9642: if (!s->mutex.try_lock()) { 9642: s = Repick(); 9642: s->mutex.lock(); 9642: } 9642: std::unique_lock lock(s->mutex, std::adopt_lock); 9642: 9642: size_t avail = s->allocated_and_unused_.load(std::memory_order_relaxed); 9642: if (avail < bytes) { 9642: 9642: std::lock_guard reload_lock(arena_mutex_); 9642: 9642: 9642: 9642: auto exact = arena_allocated_and_unused_.load(std::memory_order_relaxed); 9642: 9642: # 166 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 3 4 9642: (static_cast ( 9642: # 166 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 9642: exact == arena_.AllocatedAndUnused() 9642: # 166 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 166 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 9642: "exact == arena_.AllocatedAndUnused()" 9642: # 166 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 166 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 9642: ; 9642: 9642: if (exact >= bytes && arena_.IsInInlineBlock()) { 9642: # 177 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 9642: auto rv = func(); 9642: Fixup(); 9642: return rv; 9642: } 9642: 9642: avail = exact >= shard_block_size_ / 2 && exact < shard_block_size_ * 2 9642: ? exact 9642: : shard_block_size_; 9642: s->free_begin_ = arena_.AllocateAligned(avail); 9642: Fixup(); 9642: } 9642: s->allocated_and_unused_.store(avail - bytes, std::memory_order_relaxed); 9642: 9642: char* rv; 9642: if ((bytes % sizeof(void*)) == 0) { 9642: 9642: rv = s->free_begin_; 9642: s->free_begin_ += bytes; 9642: } else { 9642: 9642: rv = s->free_begin_ + avail - bytes; 9642: } 9642: return rv; 9642: } 9642: 9642: void Fixup() { 9642: arena_allocated_and_unused_.store(arena_.AllocatedAndUnused(), 9642: std::memory_order_relaxed); 9642: memory_allocated_bytes_.store(arena_.MemoryAllocatedBytes(), 9642: std::memory_order_relaxed); 9642: irregular_block_num_.store(arena_.IrregularBlockNum(), 9642: std::memory_order_relaxed); 9642: } 9642: 9642: ConcurrentArena(const ConcurrentArena&) = delete; 9642: ConcurrentArena& operator=(const ConcurrentArena&) = delete; 9642: }; 9642: 9642: } 9642: # 27 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/cast_util.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: template 9642: inline DestClass* static_cast_with_check(SrcClass* x) { 9642: DestClass* ret = static_cast(x); 9642: 9642: 9642: 9642: return ret; 9642: } 9642: 9642: template 9642: inline std::shared_ptr static_cast_with_check( 9642: std::shared_ptr&& x) { 9642: 9642: 9642: 9642: auto ret = std::static_pointer_cast(std::move(x)); 9642: 9642: 9642: 9642: return ret; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: template 9642: inline To lossless_cast(From x) { 9642: using FromValue = typename std::remove_reference::type; 9642: static_assert( 9642: std::is_integral::value || std::is_enum::value, 9642: "Only works on integral types"); 9642: static_assert(std::is_integral::value || std::is_enum::value, 9642: "Only works on integral types"); 9642: static_assert(sizeof(To) >= sizeof(FromValue), "Must be lossless"); 9642: return static_cast(x); 9642: } 9642: 9642: 9642: 9642: 9642: template 9642: inline const std::initializer_list& List( 9642: const std::initializer_list& list) { 9642: return list; 9642: } 9642: 9642: 9642: 9642: template 9642: class UnownedPtr { 9642: public: 9642: UnownedPtr() = default; 9642: UnownedPtr(std::nullptr_t) {} 9642: UnownedPtr(T* ptr) : ptr_(ptr) {} 9642: UnownedPtr(const UnownedPtr&) = default; 9642: UnownedPtr(UnownedPtr&&) = default; 9642: UnownedPtr& operator=(const UnownedPtr&) = default; 9642: UnownedPtr& operator=(UnownedPtr&&) = default; 9642: 9642: T* get() const { return ptr_; } 9642: T* operator->() const { return ptr_; } 9642: T& operator*() const { return *ptr_; } 9642: operator bool() const { return ptr_ != nullptr; } 9642: 9642: private: 9642: T* ptr_ = nullptr; 9642: }; 9642: 9642: } 9642: # 33 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/dynamic_bloom.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 18 "/build/reproducible-path/rocksdb-9.3.1/util/dynamic_bloom.h" 9642: namespace rocksdb { 9642: 9642: class Slice; 9642: class Allocator; 9642: class Logger; 9642: # 36 "/build/reproducible-path/rocksdb-9.3.1/util/dynamic_bloom.h" 9642: class DynamicBloom { 9642: public: 9642: # 47 "/build/reproducible-path/rocksdb-9.3.1/util/dynamic_bloom.h" 9642: explicit DynamicBloom(Allocator* allocator, uint32_t total_bits, 9642: uint32_t num_probes = 6, size_t huge_page_tlb_size = 0, 9642: Logger* logger = nullptr); 9642: 9642: ~DynamicBloom() {} 9642: 9642: 9642: void Add(const Slice& key); 9642: 9642: 9642: void AddConcurrently(const Slice& key); 9642: 9642: 9642: void AddHash(uint32_t hash); 9642: 9642: 9642: void AddHashConcurrently(uint32_t hash); 9642: 9642: 9642: bool MayContain(const Slice& key) const; 9642: 9642: void MayContain(int num_keys, Slice* keys, bool* may_match) const; 9642: 9642: 9642: bool MayContainHash(uint32_t hash) const; 9642: 9642: void Prefetch(uint32_t h); 9642: 9642: private: 9642: 9642: 9642: uint32_t kLen; 9642: 9642: 9642: const uint32_t kNumDoubleProbes; 9642: 9642: std::atomic* data_; 9642: 9642: 9642: 9642: template 9642: void AddHash(uint32_t hash, const OrFunc& or_func); 9642: 9642: bool DoubleProbe(uint32_t h32, size_t a) const; 9642: }; 9642: 9642: inline void DynamicBloom::Add(const Slice& key) { AddHash(BloomHash(key)); } 9642: 9642: inline void DynamicBloom::AddConcurrently(const Slice& key) { 9642: AddHashConcurrently(BloomHash(key)); 9642: } 9642: 9642: inline void DynamicBloom::AddHash(uint32_t hash) { 9642: AddHash(hash, [](std::atomic* ptr, uint64_t mask) { 9642: ptr->store(ptr->load(std::memory_order_relaxed) | mask, 9642: std::memory_order_relaxed); 9642: }); 9642: } 9642: 9642: inline void DynamicBloom::AddHashConcurrently(uint32_t hash) { 9642: AddHash(hash, [](std::atomic* ptr, uint64_t mask) { 9642: 9642: 9642: 9642: 9642: 9642: if ((mask & ptr->load(std::memory_order_relaxed)) != mask) { 9642: ptr->fetch_or(mask, std::memory_order_relaxed); 9642: } 9642: }); 9642: } 9642: 9642: inline bool DynamicBloom::MayContain(const Slice& key) const { 9642: return (MayContainHash(BloomHash(key))); 9642: } 9642: 9642: inline void DynamicBloom::MayContain(int num_keys, Slice* keys, 9642: bool* may_match) const { 9642: std::array hashes; 9642: std::array byte_offsets; 9642: for (int i = 0; i < num_keys; ++i) { 9642: hashes[i] = BloomHash(keys[i]); 9642: size_t a = FastRange32(hashes[i], kLen); 9642: __builtin_prefetch(data_ + a, 0, 3); 9642: byte_offsets[i] = a; 9642: } 9642: 9642: for (int i = 0; i < num_keys; i++) { 9642: may_match[i] = DoubleProbe(hashes[i], byte_offsets[i]); 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline void DynamicBloom::Prefetch(uint32_t h32) { 9642: size_t a = FastRange32(h32, kLen); 9642: __builtin_prefetch(data_ + a, 0, 3); 9642: } 9642: # 173 "/build/reproducible-path/rocksdb-9.3.1/util/dynamic_bloom.h" 9642: inline bool DynamicBloom::MayContainHash(uint32_t h32) const { 9642: size_t a = FastRange32(h32, kLen); 9642: __builtin_prefetch(data_ + a, 0, 3); 9642: return DoubleProbe(h32, a); 9642: } 9642: 9642: inline bool DynamicBloom::DoubleProbe(uint32_t h32, size_t byte_offset) const { 9642: 9642: uint64_t h = 0x9e3779b97f4a7c13ULL * h32; 9642: for (unsigned i = 0;; ++i) { 9642: 9642: uint64_t mask = 9642: ((uint64_t)1 << (h & 63)) | ((uint64_t)1 << ((h >> 6) & 63)); 9642: uint64_t val = data_[byte_offset ^ i].load(std::memory_order_relaxed); 9642: if (i + 1 >= kNumDoubleProbes) { 9642: return (val & mask) == mask; 9642: } else if ((val & mask) != mask) { 9642: return false; 9642: } 9642: h = (h >> 12) | (h << 52); 9642: } 9642: } 9642: 9642: template 9642: inline void DynamicBloom::AddHash(uint32_t h32, const OrFunc& or_func) { 9642: size_t a = FastRange32(h32, kLen); 9642: __builtin_prefetch(data_ + a, 0, 3); 9642: 9642: uint64_t h = 0x9e3779b97f4a7c13ULL * h32; 9642: for (unsigned i = 0;; ++i) { 9642: 9642: uint64_t mask = 9642: ((uint64_t)1 << (h & 63)) | ((uint64_t)1 << ((h >> 6) & 63)); 9642: or_func(&data_[a ^ i], mask); 9642: if (i + 1 >= kNumDoubleProbes) { 9642: return; 9642: } 9642: h = (h >> 12) | (h << 52); 9642: } 9642: } 9642: 9642: } 9642: # 34 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/hash_containers.h" 1 9642: # 11 "/build/reproducible-path/rocksdb-9.3.1/util/hash_containers.h" 9642: 9642: # 38 "/build/reproducible-path/rocksdb-9.3.1/util/hash_containers.h" 9642: namespace rocksdb { 9642: 9642: template 9642: using UnorderedMap = std::unordered_map; 9642: 9642: template 9642: using UnorderedMapH = std::unordered_map; 9642: 9642: template 9642: using UnorderedSet = std::unordered_set; 9642: 9642: } 9642: # 36 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: struct FlushJobInfo; 9642: class Mutex; 9642: class MemTableIterator; 9642: class MergeContext; 9642: class SystemClock; 9642: 9642: struct ImmutableMemTableOptions { 9642: explicit ImmutableMemTableOptions(const ImmutableOptions& ioptions, 9642: const MutableCFOptions& mutable_cf_options); 9642: size_t arena_block_size; 9642: uint32_t memtable_prefix_bloom_bits; 9642: size_t memtable_huge_page_size; 9642: bool memtable_whole_key_filtering; 9642: bool inplace_update_support; 9642: size_t inplace_update_num_locks; 9642: UpdateStatus (*inplace_callback)(char* existing_value, 9642: uint32_t* existing_value_size, 9642: Slice delta_value, 9642: std::string* merged_value); 9642: size_t max_successive_merges; 9642: bool strict_max_successive_merges; 9642: Statistics* statistics; 9642: MergeOperator* merge_operator; 9642: Logger* info_log; 9642: bool allow_data_in_errors; 9642: uint32_t protection_bytes_per_key; 9642: }; 9642: 9642: 9642: 9642: 9642: struct MemTablePostProcessInfo { 9642: uint64_t data_size = 0; 9642: uint64_t num_entries = 0; 9642: uint64_t num_deletes = 0; 9642: uint64_t num_range_deletes = 0; 9642: }; 9642: 9642: using MultiGetRange = MultiGetContext::Range; 9642: # 91 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 9642: class MemTable { 9642: public: 9642: struct KeyComparator : public MemTableRep::KeyComparator { 9642: const InternalKeyComparator comparator; 9642: explicit KeyComparator(const InternalKeyComparator& c) : comparator(c) {} 9642: int operator()(const char* prefix_len_key1, 9642: const char* prefix_len_key2) const override; 9642: int operator()(const char* prefix_len_key, 9642: const DecodedType& key) const override; 9642: }; 9642: # 111 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 9642: explicit MemTable(const InternalKeyComparator& comparator, 9642: const ImmutableOptions& ioptions, 9642: const MutableCFOptions& mutable_cf_options, 9642: WriteBufferManager* write_buffer_manager, 9642: SequenceNumber earliest_seq, uint32_t column_family_id); 9642: 9642: MemTable(const MemTable&) = delete; 9642: MemTable& operator=(const MemTable&) = delete; 9642: 9642: 9642: ~MemTable(); 9642: 9642: 9642: 9642: 9642: void Ref() { ++refs_; } 9642: 9642: 9642: 9642: 9642: 9642: MemTable* Unref() { 9642: --refs_; 9642: 9642: # 134 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 3 4 9642: (static_cast ( 9642: # 134 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 9642: refs_ >= 0 9642: # 134 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 134 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 9642: "refs_ >= 0" 9642: # 134 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 134 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 9642: ; 9642: if (refs_ <= 0) { 9642: return this; 9642: } 9642: return nullptr; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: size_t ApproximateMemoryUsage(); 9642: 9642: 9642: 9642: size_t ApproximateMemoryUsageFast() const { 9642: return approximate_memory_usage_.load(std::memory_order_relaxed); 9642: } 9642: 9642: 9642: size_t MemoryAllocatedBytes() const { 9642: return table_->ApproximateMemoryUsage() + 9642: range_del_table_->ApproximateMemoryUsage() + 9642: arena_.MemoryAllocatedBytes(); 9642: } 9642: # 174 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 9642: void UniqueRandomSample(const uint64_t& target_sample_size, 9642: std::unordered_set* entries) { 9642: 9642: 9642: table_->UniqueRandomSample(num_entries(), target_sample_size, entries); 9642: } 9642: 9642: 9642: 9642: bool ShouldScheduleFlush() const { 9642: return flush_state_.load(std::memory_order_relaxed) == FLUSH_REQUESTED; 9642: } 9642: 9642: 9642: 9642: bool MarkFlushScheduled() { 9642: auto before = FLUSH_REQUESTED; 9642: return flush_state_.compare_exchange_strong(before, FLUSH_SCHEDULED, 9642: std::memory_order_relaxed, 9642: std::memory_order_relaxed); 9642: } 9642: # 210 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 9642: InternalIterator* NewIterator( 9642: const ReadOptions& read_options, 9642: UnownedPtr seqno_to_time_mapping, Arena* arena); 9642: # 224 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 9642: FragmentedRangeTombstoneIterator* NewRangeTombstoneIterator( 9642: const ReadOptions& read_options, SequenceNumber read_seq, 9642: bool immutable_memtable); 9642: 9642: Status VerifyEncodedEntry(Slice encoded, 9642: const ProtectionInfoKVOS64& kv_prot_info); 9642: # 241 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 9642: Status Add(SequenceNumber seq, ValueType type, const Slice& key, 9642: const Slice& value, const ProtectionInfoKVOS64* kv_prot_info, 9642: bool allow_concurrent = false, 9642: MemTablePostProcessInfo* post_process_info = nullptr, 9642: void** hint = nullptr); 9642: # 270 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 9642: bool Get(const LookupKey& key, std::string* value, 9642: PinnableWideColumns* columns, std::string* timestamp, Status* s, 9642: MergeContext* merge_context, 9642: SequenceNumber* max_covering_tombstone_seq, SequenceNumber* seq, 9642: const ReadOptions& read_opts, bool immutable_memtable, 9642: ReadCallback* callback = nullptr, bool* is_blob_index = nullptr, 9642: bool do_merge = true); 9642: 9642: bool Get(const LookupKey& key, std::string* value, 9642: PinnableWideColumns* columns, std::string* timestamp, Status* s, 9642: MergeContext* merge_context, 9642: SequenceNumber* max_covering_tombstone_seq, 9642: const ReadOptions& read_opts, bool immutable_memtable, 9642: ReadCallback* callback = nullptr, bool* is_blob_index = nullptr, 9642: bool do_merge = true) { 9642: SequenceNumber seq; 9642: return Get(key, value, columns, timestamp, s, merge_context, 9642: max_covering_tombstone_seq, &seq, read_opts, immutable_memtable, 9642: callback, is_blob_index, do_merge); 9642: } 9642: 9642: 9642: 9642: 9642: void MultiGet(const ReadOptions& read_options, MultiGetRange* range, 9642: ReadCallback* callback, bool immutable_memtable); 9642: # 307 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 9642: Status Update(SequenceNumber seq, ValueType value_type, const Slice& key, 9642: const Slice& value, const ProtectionInfoKVOS64* kv_prot_info); 9642: # 324 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 9642: Status UpdateCallback(SequenceNumber seq, const Slice& key, 9642: const Slice& delta, 9642: const ProtectionInfoKVOS64* kv_prot_info); 9642: 9642: 9642: 9642: 9642: 9642: size_t CountSuccessiveMergeEntries(const LookupKey& key, size_t limit); 9642: 9642: 9642: 9642: void BatchPostProcess(const MemTablePostProcessInfo& update_counters) { 9642: num_entries_.fetch_add(update_counters.num_entries, 9642: std::memory_order_relaxed); 9642: data_size_.fetch_add(update_counters.data_size, std::memory_order_relaxed); 9642: if (update_counters.num_deletes != 0) { 9642: num_deletes_.fetch_add(update_counters.num_deletes, 9642: std::memory_order_relaxed); 9642: } 9642: if (update_counters.num_range_deletes > 0) { 9642: num_range_deletes_.fetch_add(update_counters.num_range_deletes, 9642: std::memory_order_relaxed); 9642: } 9642: UpdateFlushState(); 9642: } 9642: 9642: 9642: 9642: 9642: uint64_t num_entries() const { 9642: return num_entries_.load(std::memory_order_relaxed); 9642: } 9642: 9642: 9642: 9642: 9642: uint64_t num_deletes() const { 9642: return num_deletes_.load(std::memory_order_relaxed); 9642: } 9642: 9642: 9642: 9642: 9642: uint64_t num_range_deletes() const { 9642: return num_range_deletes_.load(std::memory_order_relaxed); 9642: } 9642: 9642: uint64_t get_data_size() const { 9642: return data_size_.load(std::memory_order_relaxed); 9642: } 9642: 9642: size_t write_buffer_size() const { 9642: return write_buffer_size_.load(std::memory_order_relaxed); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: void UpdateWriteBufferSize(size_t new_write_buffer_size) { 9642: if (bloom_filter_ == nullptr || 9642: new_write_buffer_size < write_buffer_size_) { 9642: write_buffer_size_.store(new_write_buffer_size, 9642: std::memory_order_relaxed); 9642: } 9642: } 9642: 9642: 9642: VersionEdit* GetEdits() { return &edit_; } 9642: 9642: 9642: 9642: 9642: bool IsEmpty() const { return first_seqno_ == 0; } 9642: 9642: 9642: 9642: 9642: 9642: SequenceNumber GetFirstSequenceNumber() { 9642: return first_seqno_.load(std::memory_order_relaxed); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: void SetFirstSequenceNumber(SequenceNumber first_seqno) { 9642: return first_seqno_.store(first_seqno, std::memory_order_relaxed); 9642: } 9642: # 423 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 9642: SequenceNumber GetEarliestSequenceNumber() { 9642: return earliest_seqno_.load(std::memory_order_relaxed); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: void SetEarliestSequenceNumber(SequenceNumber earliest_seqno) { 9642: return earliest_seqno_.store(earliest_seqno, std::memory_order_relaxed); 9642: } 9642: 9642: 9642: 9642: SequenceNumber GetCreationSeq() const { return creation_seq_; } 9642: 9642: void SetCreationSeq(SequenceNumber sn) { creation_seq_ = sn; } 9642: 9642: 9642: 9642: 9642: 9642: uint64_t GetNextLogNumber() { return mem_next_logfile_number_; } 9642: 9642: 9642: 9642: 9642: 9642: void SetNextLogNumber(uint64_t num) { mem_next_logfile_number_ = num; } 9642: 9642: 9642: 9642: 9642: 9642: void RefLogContainingPrepSection(uint64_t log); 9642: uint64_t GetMinLogContainingPrepSection(); 9642: 9642: 9642: 9642: 9642: 9642: 9642: void MarkImmutable() { 9642: table_->MarkReadOnly(); 9642: mem_tracker_.DoneAllocating(); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: void MarkFlushed() { table_->MarkFlushed(); } 9642: 9642: 9642: bool IsMergeOperatorSupported() const { 9642: return table_->IsMergeOperatorSupported(); 9642: } 9642: 9642: 9642: 9642: bool IsSnapshotSupported() const { 9642: return table_->IsSnapshotSupported() && !moptions_.inplace_update_support; 9642: } 9642: 9642: struct MemTableStats { 9642: uint64_t size; 9642: uint64_t count; 9642: }; 9642: 9642: MemTableStats ApproximateStats(const Slice& start_ikey, 9642: const Slice& end_ikey); 9642: 9642: 9642: port::RWMutex* GetLock(const Slice& key); 9642: 9642: const InternalKeyComparator& GetInternalKeyComparator() const { 9642: return comparator_.comparator; 9642: } 9642: 9642: const ImmutableMemTableOptions* GetImmutableMemTableOptions() const { 9642: return &moptions_; 9642: } 9642: 9642: uint64_t ApproximateOldestKeyTime() const { 9642: return oldest_key_time_.load(std::memory_order_relaxed); 9642: } 9642: 9642: 9642: void SetID(uint64_t id) { id_ = id; } 9642: 9642: uint64_t GetID() const { return id_; } 9642: 9642: void SetFlushCompleted(bool completed) { flush_completed_ = completed; } 9642: 9642: uint64_t GetFileNumber() const { return file_number_; } 9642: 9642: void SetFileNumber(uint64_t file_num) { file_number_ = file_num; } 9642: 9642: void SetFlushInProgress(bool in_progress) { 9642: flush_in_progress_ = in_progress; 9642: } 9642: 9642: void SetFlushJobInfo(std::unique_ptr&& info) { 9642: flush_job_info_ = std::move(info); 9642: } 9642: 9642: std::unique_ptr ReleaseFlushJobInfo() { 9642: return std::move(flush_job_info_); 9642: } 9642: 9642: 9642: bool ShouldFlushNow(); 9642: 9642: void ConstructFragmentedRangeTombstones(); 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: bool IsFragmentedRangeTombstonesConstructed(bool allow_empty = true) const { 9642: if (allow_empty) { 9642: return fragmented_range_tombstone_list_.get() != nullptr || 9642: is_range_del_table_empty_; 9642: } else { 9642: return fragmented_range_tombstone_list_.get() != nullptr; 9642: } 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: const Slice& GetNewestUDT() const; 9642: 9642: 9642: static Status VerifyEntryChecksum(const char* entry, 9642: uint32_t protection_bytes_per_key, 9642: bool allow_data_in_errors = false); 9642: 9642: private: 9642: enum FlushStateEnum { FLUSH_NOT_REQUESTED, FLUSH_REQUESTED, FLUSH_SCHEDULED }; 9642: 9642: friend class MemTableIterator; 9642: friend class MemTableBackwardIterator; 9642: friend class MemTableList; 9642: 9642: KeyComparator comparator_; 9642: const ImmutableMemTableOptions moptions_; 9642: int refs_; 9642: const size_t kArenaBlockSize; 9642: AllocTracker mem_tracker_; 9642: ConcurrentArena arena_; 9642: std::unique_ptr table_; 9642: std::unique_ptr range_del_table_; 9642: std::atomic_bool is_range_del_table_empty_; 9642: 9642: 9642: std::atomic data_size_; 9642: std::atomic num_entries_; 9642: std::atomic num_deletes_; 9642: std::atomic num_range_deletes_; 9642: 9642: 9642: std::atomic write_buffer_size_; 9642: 9642: 9642: bool flush_in_progress_; 9642: bool flush_completed_; 9642: uint64_t file_number_; 9642: 9642: 9642: 9642: VersionEdit edit_; 9642: 9642: 9642: std::atomic first_seqno_; 9642: 9642: 9642: 9642: std::atomic earliest_seqno_; 9642: 9642: SequenceNumber creation_seq_; 9642: 9642: 9642: uint64_t mem_next_logfile_number_; 9642: 9642: 9642: 9642: std::atomic min_prep_log_referenced_; 9642: 9642: 9642: std::vector locks_; 9642: 9642: const SliceTransform* const prefix_extractor_; 9642: std::unique_ptr bloom_filter_; 9642: 9642: std::atomic flush_state_; 9642: 9642: SystemClock* clock_; 9642: 9642: 9642: const SliceTransform* insert_with_hint_prefix_extractor_; 9642: 9642: 9642: UnorderedMapH insert_hints_; 9642: 9642: 9642: std::atomic oldest_key_time_; 9642: 9642: 9642: uint64_t id_ = 0; 9642: 9642: 9642: 9642: 9642: 9642: SequenceNumber atomic_flush_seqno_; 9642: 9642: 9642: 9642: std::atomic approximate_memory_usage_; 9642: 9642: 9642: 9642: uint32_t memtable_max_range_deletions_ = 0; 9642: 9642: 9642: std::unique_ptr flush_job_info_; 9642: 9642: 9642: size_t ts_sz_; 9642: 9642: 9642: bool persist_user_defined_timestamps_; 9642: 9642: 9642: 9642: 9642: 9642: 9642: Slice newest_udt_; 9642: 9642: 9642: void UpdateFlushState(); 9642: 9642: void UpdateOldestKeyTime(); 9642: 9642: void GetFromTable(const LookupKey& key, 9642: SequenceNumber max_covering_tombstone_seq, bool do_merge, 9642: ReadCallback* callback, bool* is_blob_index, 9642: std::string* value, PinnableWideColumns* columns, 9642: std::string* timestamp, Status* s, 9642: MergeContext* merge_context, SequenceNumber* seq, 9642: bool* found_final_value, bool* merge_in_progress); 9642: 9642: 9642: 9642: 9642: 9642: 9642: FragmentedRangeTombstoneIterator* NewRangeTombstoneIteratorInternal( 9642: const ReadOptions& read_options, SequenceNumber read_seq, 9642: bool immutable_memtable); 9642: 9642: 9642: 9642: 9642: std::unique_ptr 9642: fragmented_range_tombstone_list_; 9642: 9642: 9642: std::mutex range_del_mutex_; 9642: CoreLocalArray> 9642: cached_range_tombstone_; 9642: 9642: void UpdateEntryChecksum(const ProtectionInfoKVOS64* kv_prot_info, 9642: const Slice& key, const Slice& value, ValueType type, 9642: SequenceNumber s, char* checksum_ptr); 9642: 9642: void MaybeUpdateNewestUDT(const Slice& user_key); 9642: }; 9642: 9642: const char* EncodeKey(std::string* scratch, const Slice& target); 9642: 9642: } 9642: # 11 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 2 9642: # 20 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 16 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_iteration_stats.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: struct CompactionIterationStats { 9642: 9642: 9642: 9642: 9642: int64_t num_record_drop_user = 0; 9642: 9642: int64_t num_record_drop_hidden = 0; 9642: int64_t num_record_drop_obsolete = 0; 9642: int64_t num_record_drop_range_del = 0; 9642: int64_t num_range_del_drop_obsolete = 0; 9642: 9642: int64_t num_optimized_del_drop_obsolete = 0; 9642: uint64_t total_filter_time = 0; 9642: 9642: 9642: 9642: 9642: uint64_t num_input_records = 0; 9642: uint64_t num_input_deletion_records = 0; 9642: uint64_t num_input_corrupt_records = 0; 9642: uint64_t total_input_raw_key_bytes = 0; 9642: uint64_t total_input_raw_value_bytes = 0; 9642: 9642: 9642: uint64_t num_single_del_fallthru = 0; 9642: uint64_t num_single_del_mismatch = 0; 9642: 9642: 9642: uint64_t num_blobs_read = 0; 9642: uint64_t total_blob_bytes_read = 0; 9642: uint64_t num_blobs_relocated = 0; 9642: uint64_t total_blob_bytes_relocated = 0; 9642: 9642: 9642: 9642: uint64_t num_input_timed_put_records = 0; 9642: 9642: 9642: uint64_t num_timed_put_swap_preferred_seqno = 0; 9642: }; 9642: 9642: } 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 2 9642: # 25 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/table_builder.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/table/table_builder.h" 9642: 9642: # 20 "/build/reproducible-path/rocksdb-9.3.1/table/table_builder.h" 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 9642: namespace rocksdb { 9642: 9642: 9642: class InternalTblPropColl { 9642: public: 9642: virtual ~InternalTblPropColl() {} 9642: virtual Status Finish(UserCollectedProperties* properties) = 0; 9642: 9642: virtual const char* Name() const = 0; 9642: 9642: 9642: 9642: virtual Status InternalAdd(const Slice& key, const Slice& value, 9642: uint64_t file_size) = 0; 9642: 9642: virtual void BlockAdd(uint64_t block_uncomp_bytes, 9642: uint64_t block_compressed_bytes_fast, 9642: uint64_t block_compressed_bytes_slow) = 0; 9642: 9642: virtual UserCollectedProperties GetReadableProperties() const = 0; 9642: 9642: virtual bool NeedCompact() const { return false; } 9642: }; 9642: 9642: 9642: class InternalTblPropCollFactory { 9642: public: 9642: virtual ~InternalTblPropCollFactory() {} 9642: 9642: virtual InternalTblPropColl* CreateInternalTblPropColl( 9642: uint32_t column_family_id, int level_at_creation) = 0; 9642: 9642: 9642: virtual const char* Name() const = 0; 9642: }; 9642: 9642: using InternalTblPropCollFactories = 9642: std::vector>; 9642: 9642: 9642: 9642: 9642: 9642: 9642: class UserKeyTablePropertiesCollector : public InternalTblPropColl { 9642: public: 9642: 9642: explicit UserKeyTablePropertiesCollector(TablePropertiesCollector* collector) 9642: : collector_(collector) {} 9642: 9642: virtual ~UserKeyTablePropertiesCollector() {} 9642: 9642: Status InternalAdd(const Slice& key, const Slice& value, 9642: uint64_t file_size) override; 9642: 9642: void BlockAdd(uint64_t block_uncomp_bytes, 9642: uint64_t block_compressed_bytes_fast, 9642: uint64_t block_compressed_bytes_slow) override; 9642: 9642: Status Finish(UserCollectedProperties* properties) override; 9642: 9642: const char* Name() const override { return collector_->Name(); } 9642: 9642: UserCollectedProperties GetReadableProperties() const override; 9642: 9642: bool NeedCompact() const override { return collector_->NeedCompact(); } 9642: 9642: protected: 9642: std::unique_ptr collector_; 9642: }; 9642: 9642: class UserKeyTablePropertiesCollectorFactory 9642: : public InternalTblPropCollFactory { 9642: public: 9642: explicit UserKeyTablePropertiesCollectorFactory( 9642: std::shared_ptr user_collector_factory) 9642: : user_collector_factory_(user_collector_factory) {} 9642: InternalTblPropColl* CreateInternalTblPropColl( 9642: uint32_t column_family_id, int level_at_creation) override { 9642: TablePropertiesCollectorFactory::Context context; 9642: context.column_family_id = column_family_id; 9642: context.level_at_creation = level_at_creation; 9642: TablePropertiesCollector* collector = 9642: user_collector_factory_->CreateTablePropertiesCollector(context); 9642: if (collector) { 9642: return new UserKeyTablePropertiesCollector(collector); 9642: } else { 9642: return nullptr; 9642: } 9642: } 9642: 9642: const char* Name() const override { return user_collector_factory_->Name(); } 9642: 9642: private: 9642: std::shared_ptr user_collector_factory_; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: class TimestampTablePropertiesCollector : public InternalTblPropColl { 9642: public: 9642: explicit TimestampTablePropertiesCollector(const Comparator* cmp) 9642: : cmp_(cmp), 9642: timestamp_min_(kDisableUserTimestamp), 9642: timestamp_max_(kDisableUserTimestamp) {} 9642: 9642: Status InternalAdd(const Slice& key, const Slice& , 9642: uint64_t ) override { 9642: auto user_key = ExtractUserKey(key); 9642: 9642: # 129 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 3 4 9642: (static_cast ( 9642: # 129 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 9642: cmp_ && cmp_->timestamp_size() > 0 9642: # 129 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 129 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 9642: "cmp_ && cmp_->timestamp_size() > 0" 9642: # 129 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 129 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 9642: ; 9642: if (user_key.size() < cmp_->timestamp_size()) { 9642: return Status::Corruption( 9642: "User key size mismatch when comparing to timestamp size."); 9642: } 9642: auto timestamp_in_key = 9642: ExtractTimestampFromUserKey(user_key, cmp_->timestamp_size()); 9642: if (timestamp_max_ == kDisableUserTimestamp || 9642: cmp_->CompareTimestamp(timestamp_in_key, timestamp_max_) > 0) { 9642: timestamp_max_.assign(timestamp_in_key.data(), timestamp_in_key.size()); 9642: } 9642: if (timestamp_min_ == kDisableUserTimestamp || 9642: cmp_->CompareTimestamp(timestamp_min_, timestamp_in_key) > 0) { 9642: timestamp_min_.assign(timestamp_in_key.data(), timestamp_in_key.size()); 9642: } 9642: return Status::OK(); 9642: } 9642: 9642: void BlockAdd(uint64_t , 9642: uint64_t , 9642: uint64_t ) override { 9642: return; 9642: } 9642: 9642: Status Finish(UserCollectedProperties* properties) override { 9642: 9642: 9642: # 155 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 3 4 9642: (static_cast ( 9642: # 155 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 9642: timestamp_min_.size() == timestamp_max_.size() && (timestamp_min_.empty() || timestamp_max_.size() == cmp_->timestamp_size()) 9642: # 155 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 155 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 9642: "timestamp_min_.size() == timestamp_max_.size() && (timestamp_min_.empty() || timestamp_max_.size() == cmp_->timestamp_size())" 9642: # 155 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: 9642: 9642: # 157 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 9642: ; 9642: properties->insert({"rocksdb.timestamp_min", timestamp_min_}); 9642: properties->insert({"rocksdb.timestamp_max", timestamp_max_}); 9642: return Status::OK(); 9642: } 9642: 9642: const char* Name() const override { 9642: return "TimestampTablePropertiesCollector"; 9642: } 9642: 9642: UserCollectedProperties GetReadableProperties() const override { 9642: return {{"rocksdb.timestamp_min", Slice(timestamp_min_).ToString(true)}, 9642: {"rocksdb.timestamp_max", Slice(timestamp_max_).ToString(true)}}; 9642: } 9642: 9642: protected: 9642: const Comparator* const cmp_; 9642: std::string timestamp_min_; 9642: std::string timestamp_max_; 9642: }; 9642: 9642: } 9642: # 21 "/build/reproducible-path/rocksdb-9.3.1/table/table_builder.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_util.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_updater.h" 1 9642: # 29 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_updater.h" 9642: 9642: # 42 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_updater.h" 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/thread_operation.h" 1 9642: # 14 "/build/reproducible-path/rocksdb-9.3.1/util/thread_operation.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: struct OperationInfo { 9642: const ThreadStatus::OperationType type; 9642: const std::string name; 9642: }; 9642: # 38 "/build/reproducible-path/rocksdb-9.3.1/util/thread_operation.h" 9642: static OperationInfo global_operation_table[] = { 9642: {ThreadStatus::OP_UNKNOWN, ""}, 9642: {ThreadStatus::OP_COMPACTION, "Compaction"}, 9642: {ThreadStatus::OP_FLUSH, "Flush"}, 9642: {ThreadStatus::OP_DBOPEN, "DBOpen"}, 9642: {ThreadStatus::OP_GET, "Get"}, 9642: {ThreadStatus::OP_MULTIGET, "MultiGet"}, 9642: {ThreadStatus::OP_DBITERATOR, "DBIterator"}, 9642: {ThreadStatus::OP_VERIFY_DB_CHECKSUM, "VerifyDBChecksum"}, 9642: {ThreadStatus::OP_VERIFY_FILE_CHECKSUMS, "VerifyFileChecksums"}, 9642: {ThreadStatus::OP_GETENTITY, "GetEntity"}, 9642: {ThreadStatus::OP_MULTIGETENTITY, "MultiGetEntity"}, 9642: 9642: }; 9642: 9642: struct OperationStageInfo { 9642: const ThreadStatus::OperationStage stage; 9642: const std::string name; 9642: }; 9642: 9642: 9642: 9642: 9642: static OperationStageInfo global_op_stage_table[] = { 9642: {ThreadStatus::STAGE_UNKNOWN, ""}, 9642: {ThreadStatus::STAGE_FLUSH_RUN, "FlushJob::Run"}, 9642: {ThreadStatus::STAGE_FLUSH_WRITE_L0, "FlushJob::WriteLevel0Table"}, 9642: {ThreadStatus::STAGE_COMPACTION_PREPARE, "CompactionJob::Prepare"}, 9642: {ThreadStatus::STAGE_COMPACTION_RUN, "CompactionJob::Run"}, 9642: {ThreadStatus::STAGE_COMPACTION_PROCESS_KV, 9642: "CompactionJob::ProcessKeyValueCompaction"}, 9642: {ThreadStatus::STAGE_COMPACTION_INSTALL, "CompactionJob::Install"}, 9642: {ThreadStatus::STAGE_COMPACTION_SYNC_FILE, 9642: "CompactionJob::FinishCompactionOutputFile"}, 9642: {ThreadStatus::STAGE_PICK_MEMTABLES_TO_FLUSH, 9642: "MemTableList::PickMemtablesToFlush"}, 9642: {ThreadStatus::STAGE_MEMTABLE_ROLLBACK, 9642: "MemTableList::RollbackMemtableFlush"}, 9642: {ThreadStatus::STAGE_MEMTABLE_INSTALL_FLUSH_RESULTS, 9642: "MemTableList::TryInstallMemtableFlushResults"}, 9642: }; 9642: 9642: 9642: struct StateInfo { 9642: const ThreadStatus::StateType type; 9642: const std::string name; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: static StateInfo global_state_table[] = { 9642: {ThreadStatus::STATE_UNKNOWN, ""}, 9642: {ThreadStatus::STATE_MUTEX_WAIT, "Mutex Wait"}, 9642: }; 9642: 9642: struct OperationProperty { 9642: int code; 9642: std::string name; 9642: }; 9642: 9642: static OperationProperty compaction_operation_properties[] = { 9642: {ThreadStatus::COMPACTION_JOB_ID, "JobID"}, 9642: {ThreadStatus::COMPACTION_INPUT_OUTPUT_LEVEL, "InputOutputLevel"}, 9642: {ThreadStatus::COMPACTION_PROP_FLAGS, "Manual/Deletion/Trivial"}, 9642: {ThreadStatus::COMPACTION_TOTAL_INPUT_BYTES, "TotalInputBytes"}, 9642: {ThreadStatus::COMPACTION_BYTES_READ, "BytesRead"}, 9642: {ThreadStatus::COMPACTION_BYTES_WRITTEN, "BytesWritten"}, 9642: }; 9642: 9642: static OperationProperty flush_operation_properties[] = { 9642: {ThreadStatus::FLUSH_JOB_ID, "JobID"}, 9642: {ThreadStatus::FLUSH_BYTES_MEMTABLES, "BytesMemtables"}, 9642: {ThreadStatus::FLUSH_BYTES_WRITTEN, "BytesWritten"}}; 9642: # 122 "/build/reproducible-path/rocksdb-9.3.1/util/thread_operation.h" 9642: } 9642: # 43 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_updater.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: class ColumnFamilyHandle; 9642: 9642: 9642: struct ConstantColumnFamilyInfo { 9642: 9642: public: 9642: ConstantColumnFamilyInfo(const void* _db_key, const std::string& _db_name, 9642: const std::string& _cf_name) 9642: : db_key(_db_key), db_name(_db_name), cf_name(_cf_name) {} 9642: const void* db_key; 9642: const std::string db_name; 9642: const std::string cf_name; 9642: 9642: }; 9642: 9642: 9642: 9642: struct ThreadStatusData { 9642: 9642: explicit ThreadStatusData() { 9642: enable_tracking.store(false); 9642: thread_id.store(0); 9642: thread_type.store(ThreadStatus::USER); 9642: cf_key.store(nullptr); 9642: operation_type.store(ThreadStatus::OP_UNKNOWN); 9642: op_start_time.store(0); 9642: state_type.store(ThreadStatus::STATE_UNKNOWN); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: std::atomic enable_tracking; 9642: 9642: std::atomic thread_id; 9642: std::atomic thread_type; 9642: std::atomic cf_key; 9642: std::atomic operation_type; 9642: std::atomic op_start_time; 9642: std::atomic operation_stage; 9642: std::atomic op_properties[ThreadStatus::kNumOperationProperties]; 9642: std::atomic state_type; 9642: 9642: }; 9642: # 100 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_updater.h" 9642: class ThreadStatusUpdater { 9642: public: 9642: ThreadStatusUpdater() {} 9642: 9642: 9642: virtual ~ThreadStatusUpdater() {} 9642: 9642: 9642: void UnregisterThread(); 9642: 9642: 9642: 9642: void ResetThreadStatus(); 9642: 9642: 9642: void SetThreadID(uint64_t thread_id); 9642: 9642: 9642: void RegisterThread(ThreadStatus::ThreadType ttype, uint64_t thread_id); 9642: 9642: void SetEnableTracking(bool enable_tracking); 9642: 9642: 9642: 9642: void SetColumnFamilyInfoKey(const void* cf_key); 9642: 9642: 9642: const void* GetColumnFamilyInfoKey(); 9642: 9642: 9642: void SetThreadOperation(const ThreadStatus::OperationType type); 9642: 9642: 9642: ThreadStatus::OperationType GetThreadOperation(); 9642: 9642: 9642: 9642: void SetOperationStartTime(const uint64_t start_time); 9642: # 146 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_updater.h" 9642: void SetThreadOperationProperty(int i, uint64_t value); 9642: 9642: 9642: 9642: void IncreaseThreadOperationProperty(int i, uint64_t delta); 9642: 9642: 9642: ThreadStatus::OperationStage SetThreadOperationStage( 9642: const ThreadStatus::OperationStage stage); 9642: 9642: 9642: void ClearThreadOperation(); 9642: 9642: 9642: void ClearThreadOperationProperties(); 9642: 9642: 9642: void SetThreadState(const ThreadStatus::StateType type); 9642: 9642: 9642: void ClearThreadState(); 9642: 9642: 9642: Status GetThreadList(std::vector* thread_list); 9642: 9642: 9642: 9642: 9642: void NewColumnFamilyInfo(const void* db_key, const std::string& db_name, 9642: const void* cf_key, const std::string& cf_name); 9642: 9642: 9642: 9642: 9642: void EraseDatabaseInfo(const void* db_key); 9642: 9642: 9642: 9642: 9642: void EraseColumnFamilyInfo(const void* cf_key); 9642: 9642: 9642: 9642: void TEST_VerifyColumnFamilyInfoMap( 9642: const std::vector& handles, bool check_exist); 9642: 9642: protected: 9642: 9642: 9642: static thread_local ThreadStatusData* thread_status_data_; 9642: 9642: 9642: 9642: ThreadStatusData* GetLocalThreadStatus(); 9642: 9642: 9642: 9642: ThreadStatusData* Get() { return thread_status_data_; } 9642: 9642: 9642: std::mutex thread_list_mutex_; 9642: 9642: 9642: std::unordered_set thread_data_set_; 9642: 9642: 9642: 9642: 9642: 9642: std::unordered_map cf_info_map_; 9642: 9642: 9642: 9642: std::unordered_map> db_key_map_; 9642: 9642: 9642: 9642: 9642: }; 9642: 9642: } 9642: # 11 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_util.h" 2 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class ColumnFamilyData; 9642: # 30 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_util.h" 9642: class ThreadStatusUtil { 9642: public: 9642: 9642: static void RegisterThread(const Env* env, 9642: ThreadStatus::ThreadType thread_type); 9642: 9642: 9642: static void UnregisterThread(); 9642: 9642: 9642: 9642: 9642: static void NewColumnFamilyInfo(const DB* db, const ColumnFamilyData* cfd, 9642: const std::string& cf_name, const Env* env); 9642: 9642: 9642: 9642: 9642: static void EraseColumnFamilyInfo(const ColumnFamilyData* cfd); 9642: 9642: 9642: 9642: 9642: static void EraseDatabaseInfo(const DB* db); 9642: 9642: static void SetEnableTracking(bool enable_tracking); 9642: 9642: 9642: 9642: 9642: 9642: static void SetColumnFamily(const ColumnFamilyData* cfd); 9642: 9642: static void SetThreadOperation(ThreadStatus::OperationType type); 9642: 9642: static ThreadStatus::OperationType GetThreadOperation(); 9642: 9642: static ThreadStatus::OperationStage SetThreadOperationStage( 9642: ThreadStatus::OperationStage stage); 9642: 9642: static void SetThreadOperationProperty(int code, uint64_t value); 9642: 9642: static void IncreaseThreadOperationProperty(int code, uint64_t delta); 9642: 9642: static void SetThreadState(ThreadStatus::StateType type); 9642: 9642: static void ResetThreadStatus(); 9642: 9642: 9642: static void TEST_SetStateDelay(const ThreadStatus::StateType state, 9642: int micro); 9642: static void TEST_StateDelay(const ThreadStatus::StateType state); 9642: 9642: static Env::IOActivity TEST_GetExpectedIOActivity( 9642: ThreadStatus::OperationType thread_op); 9642: 9642: 9642: protected: 9642: 9642: 9642: 9642: static bool MaybeInitThreadLocalUpdater(const Env* env); 9642: # 103 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_util.h" 9642: static thread_local bool thread_updater_initialized_; 9642: # 118 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_util.h" 9642: static thread_local ThreadStatusUpdater* thread_updater_local_cache_; 9642: 9642: 9642: 9642: 9642: }; 9642: 9642: 9642: 9642: 9642: class AutoThreadOperationStageUpdater { 9642: public: 9642: explicit AutoThreadOperationStageUpdater(ThreadStatus::OperationStage stage); 9642: ~AutoThreadOperationStageUpdater(); 9642: 9642: 9642: private: 9642: ThreadStatus::OperationStage prev_stage_; 9642: 9642: }; 9642: 9642: } 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 2 9642: # 26 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 9642: namespace rocksdb { 9642: class Statistics; 9642: class SystemClock; 9642: # 37 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 9642: class WritableFileWriter { 9642: private: 9642: void NotifyOnFileWriteFinish( 9642: uint64_t offset, size_t length, 9642: const FileOperationInfo::StartTimePoint& start_ts, 9642: const FileOperationInfo::FinishTimePoint& finish_ts, 9642: const IOStatus& io_status) { 9642: FileOperationInfo info(FileOperationType::kWrite, file_name_, start_ts, 9642: finish_ts, io_status, temperature_); 9642: info.offset = offset; 9642: info.length = length; 9642: 9642: for (auto& listener : listeners_) { 9642: listener->OnFileWriteFinish(info); 9642: } 9642: info.status.PermitUncheckedError(); 9642: } 9642: void NotifyOnFileFlushFinish( 9642: const FileOperationInfo::StartTimePoint& start_ts, 9642: const FileOperationInfo::FinishTimePoint& finish_ts, 9642: const IOStatus& io_status) { 9642: FileOperationInfo info(FileOperationType::kFlush, file_name_, start_ts, 9642: finish_ts, io_status, temperature_); 9642: 9642: for (auto& listener : listeners_) { 9642: listener->OnFileFlushFinish(info); 9642: } 9642: info.status.PermitUncheckedError(); 9642: } 9642: void NotifyOnFileSyncFinish( 9642: const FileOperationInfo::StartTimePoint& start_ts, 9642: const FileOperationInfo::FinishTimePoint& finish_ts, 9642: const IOStatus& io_status, 9642: FileOperationType type = FileOperationType::kSync) { 9642: FileOperationInfo info(type, file_name_, start_ts, finish_ts, io_status, 9642: temperature_); 9642: 9642: for (auto& listener : listeners_) { 9642: listener->OnFileSyncFinish(info); 9642: } 9642: info.status.PermitUncheckedError(); 9642: } 9642: void NotifyOnFileRangeSyncFinish( 9642: uint64_t offset, size_t length, 9642: const FileOperationInfo::StartTimePoint& start_ts, 9642: const FileOperationInfo::FinishTimePoint& finish_ts, 9642: const IOStatus& io_status) { 9642: FileOperationInfo info(FileOperationType::kRangeSync, file_name_, start_ts, 9642: finish_ts, io_status, temperature_); 9642: info.offset = offset; 9642: info.length = length; 9642: 9642: for (auto& listener : listeners_) { 9642: listener->OnFileRangeSyncFinish(info); 9642: } 9642: info.status.PermitUncheckedError(); 9642: } 9642: void NotifyOnFileTruncateFinish( 9642: const FileOperationInfo::StartTimePoint& start_ts, 9642: const FileOperationInfo::FinishTimePoint& finish_ts, 9642: const IOStatus& io_status) { 9642: FileOperationInfo info(FileOperationType::kTruncate, file_name_, start_ts, 9642: finish_ts, io_status, temperature_); 9642: 9642: for (auto& listener : listeners_) { 9642: listener->OnFileTruncateFinish(info); 9642: } 9642: info.status.PermitUncheckedError(); 9642: } 9642: void NotifyOnFileCloseFinish( 9642: const FileOperationInfo::StartTimePoint& start_ts, 9642: const FileOperationInfo::FinishTimePoint& finish_ts, 9642: const IOStatus& io_status) { 9642: FileOperationInfo info(FileOperationType::kClose, file_name_, start_ts, 9642: finish_ts, io_status, temperature_); 9642: 9642: for (auto& listener : listeners_) { 9642: listener->OnFileCloseFinish(info); 9642: } 9642: info.status.PermitUncheckedError(); 9642: } 9642: 9642: void NotifyOnIOError(const IOStatus& io_status, FileOperationType operation, 9642: const std::string& file_path, size_t length = 0, 9642: uint64_t offset = 0) { 9642: if (listeners_.empty()) { 9642: return; 9642: } 9642: IOErrorInfo io_error_info(io_status, operation, file_path, length, offset); 9642: for (auto& listener : listeners_) { 9642: listener->OnIOError(io_error_info); 9642: } 9642: io_error_info.io_status.PermitUncheckedError(); 9642: } 9642: 9642: bool ShouldNotifyListeners() const { return !listeners_.empty(); } 9642: void UpdateFileChecksum(const Slice& data); 9642: void Crc32cHandoffChecksumCalculation(const char* data, size_t size, 9642: char* buf); 9642: 9642: std::string file_name_; 9642: FSWritableFilePtr writable_file_; 9642: SystemClock* clock_; 9642: AlignedBuffer buf_; 9642: size_t max_buffer_size_; 9642: 9642: 9642: std::atomic filesize_; 9642: std::atomic flushed_size_; 9642: 9642: 9642: 9642: uint64_t next_write_offset_; 9642: bool pending_sync_; 9642: std::atomic seen_error_; 9642: 9642: 9642: 9642: 9642: 9642: std::atomic sync_without_flush_called_ = false; 9642: 9642: uint64_t last_sync_size_; 9642: uint64_t bytes_per_sync_; 9642: RateLimiter* rate_limiter_; 9642: Statistics* stats_; 9642: Histograms hist_type_; 9642: std::vector> listeners_; 9642: std::unique_ptr checksum_generator_; 9642: bool checksum_finalized_; 9642: bool perform_data_verification_; 9642: uint32_t buffered_data_crc32c_checksum_; 9642: bool buffered_data_with_checksum_; 9642: Temperature temperature_; 9642: 9642: public: 9642: WritableFileWriter( 9642: std::unique_ptr&& file, const std::string& _file_name, 9642: const FileOptions& options, SystemClock* clock = nullptr, 9642: const std::shared_ptr& io_tracer = nullptr, 9642: Statistics* stats = nullptr, 9642: Histograms hist_type = Histograms::HISTOGRAM_ENUM_MAX, 9642: const std::vector>& listeners = {}, 9642: FileChecksumGenFactory* file_checksum_gen_factory = nullptr, 9642: bool perform_data_verification = false, 9642: bool buffered_data_with_checksum = false) 9642: : file_name_(_file_name), 9642: writable_file_(std::move(file), io_tracer, _file_name), 9642: clock_(clock), 9642: buf_(), 9642: max_buffer_size_(options.writable_file_max_buffer_size), 9642: filesize_(0), 9642: flushed_size_(0), 9642: next_write_offset_(0), 9642: pending_sync_(false), 9642: seen_error_(false), 9642: last_sync_size_(0), 9642: bytes_per_sync_(options.bytes_per_sync), 9642: rate_limiter_(options.rate_limiter), 9642: stats_(stats), 9642: hist_type_(hist_type), 9642: listeners_(), 9642: checksum_generator_(nullptr), 9642: checksum_finalized_(false), 9642: perform_data_verification_(perform_data_verification), 9642: buffered_data_crc32c_checksum_(0), 9642: buffered_data_with_checksum_(buffered_data_with_checksum) { 9642: temperature_ = options.temperature; 9642: 9642: # 205 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 3 4 9642: (static_cast ( 9642: # 205 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 9642: !use_direct_io() || max_buffer_size_ > 0 9642: # 205 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 205 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 9642: "!use_direct_io() || max_buffer_size_ > 0" 9642: # 205 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 205 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 9642: ; 9642: rocksdb::SyncPoint::GetInstance()->Process("WritableFileWriter::WritableFileWriter:0", reinterpret_cast(max_buffer_size_)) 9642: ; 9642: buf_.Alignment(writable_file_->GetRequiredBufferAlignment()); 9642: buf_.AllocateNewBuffer(std::min((size_t)65536, max_buffer_size_)); 9642: std::for_each(listeners.begin(), listeners.end(), 9642: [this](const std::shared_ptr& e) { 9642: if (e->ShouldBeNotifiedOnFileIO()) { 9642: listeners_.emplace_back(e); 9642: } 9642: }); 9642: if (file_checksum_gen_factory != nullptr) { 9642: FileChecksumGenContext checksum_gen_context; 9642: checksum_gen_context.file_name = _file_name; 9642: checksum_generator_ = 9642: file_checksum_gen_factory->CreateFileChecksumGenerator( 9642: checksum_gen_context); 9642: } 9642: } 9642: 9642: static IOStatus Create(const std::shared_ptr& fs, 9642: const std::string& fname, const FileOptions& file_opts, 9642: std::unique_ptr* writer, 9642: IODebugContext* dbg); 9642: 9642: static IOStatus PrepareIOOptions(const WriteOptions& wo, IOOptions& opts); 9642: 9642: WritableFileWriter(const WritableFileWriter&) = delete; 9642: 9642: WritableFileWriter& operator=(const WritableFileWriter&) = delete; 9642: 9642: ~WritableFileWriter() { 9642: ThreadStatus::OperationType cur_op_type = 9642: ThreadStatusUtil::GetThreadOperation(); 9642: ThreadStatusUtil::SetThreadOperation( 9642: ThreadStatus::OperationType::OP_UNKNOWN); 9642: auto s = Close(IOOptions()); 9642: s.PermitUncheckedError(); 9642: ThreadStatusUtil::SetThreadOperation(cur_op_type); 9642: } 9642: 9642: std::string file_name() const { return file_name_; } 9642: 9642: 9642: 9642: IOStatus Append(const IOOptions& opts, const Slice& data, 9642: uint32_t crc32c_checksum = 0); 9642: 9642: IOStatus Pad(const IOOptions& opts, const size_t pad_bytes); 9642: 9642: IOStatus Flush(const IOOptions& opts); 9642: 9642: IOStatus Close(const IOOptions& opts); 9642: 9642: IOStatus Sync(const IOOptions& opts, bool use_fsync); 9642: 9642: 9642: 9642: 9642: IOStatus SyncWithoutFlush(const IOOptions& opts, bool use_fsync); 9642: 9642: uint64_t GetFileSize() const { 9642: return filesize_.load(std::memory_order_acquire); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: uint64_t GetFlushedSize() const { 9642: return flushed_size_.load(std::memory_order_acquire); 9642: } 9642: 9642: IOStatus InvalidateCache(size_t offset, size_t length) { 9642: return writable_file_->InvalidateCache(offset, length); 9642: } 9642: 9642: FSWritableFile* writable_file() const { return writable_file_.get(); } 9642: 9642: bool use_direct_io() { return writable_file_->use_direct_io(); } 9642: 9642: bool BufferIsEmpty() { return buf_.CurrentSize() == 0; } 9642: 9642: void TEST_SetFileChecksumGenerator( 9642: FileChecksumGenerator* checksum_generator) { 9642: checksum_generator_.reset(checksum_generator); 9642: } 9642: 9642: std::string GetFileChecksum(); 9642: 9642: const char* GetFileChecksumFuncName() const; 9642: 9642: bool seen_error() const { 9642: return seen_error_.load(std::memory_order_relaxed); 9642: } 9642: 9642: 9642: void reset_seen_error() { 9642: seen_error_.store(false, std::memory_order_relaxed); 9642: } 9642: void set_seen_error() { seen_error_.store(true, std::memory_order_relaxed); } 9642: 9642: IOStatus AssertFalseAndGetStatusForPrevError() { 9642: 9642: 9642: # 309 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 3 4 9642: (static_cast ( 9642: # 309 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 9642: sync_without_flush_called_ 9642: # 309 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 309 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 9642: "sync_without_flush_called_" 9642: # 309 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 309 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 9642: ; 9642: return IOStatus::IOError("Writer has previous error."); 9642: } 9642: 9642: private: 9642: 9642: static Env::IOPriority DecideRateLimiterPriority( 9642: Env::IOPriority writable_file_io_priority, 9642: Env::IOPriority op_rate_limiter_priority); 9642: 9642: 9642: 9642: 9642: IOStatus WriteDirect(const IOOptions& opts); 9642: 9642: IOStatus WriteDirectWithChecksum(const IOOptions& opts); 9642: 9642: 9642: IOStatus WriteBuffered(const IOOptions& opts, const char* data, size_t size); 9642: 9642: IOStatus WriteBufferedWithChecksum(const IOOptions& opts, const char* data, 9642: size_t size); 9642: 9642: IOStatus RangeSync(const IOOptions& opts, uint64_t offset, uint64_t nbytes); 9642: 9642: IOStatus SyncInternal(const IOOptions& opts, bool use_fsync); 9642: IOOptions FinalizeIOOptions(const IOOptions& opts) const; 9642: }; 9642: } 9642: # 22 "/build/reproducible-path/rocksdb-9.3.1/table/table_builder.h" 2 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/block_cache_tracer.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 18 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/block_cache_tracer.h" 9642: namespace rocksdb { 9642: class Env; 9642: class SystemClock; 9642: 9642: extern const uint64_t kMicrosInSecond; 9642: extern const uint64_t kSecondInMinute; 9642: extern const uint64_t kSecondInHour; 9642: 9642: struct BlockCacheTraceRecord; 9642: 9642: class BlockCacheTraceHelper { 9642: public: 9642: static bool IsGetOrMultiGetOnDataBlock(TraceType block_type, 9642: TableReaderCaller caller); 9642: static bool IsGetOrMultiGet(TableReaderCaller caller); 9642: static bool IsUserAccess(TableReaderCaller caller); 9642: 9642: 9642: static std::string ComputeRowKey(const BlockCacheTraceRecord& access); 9642: 9642: 9642: static uint64_t GetTableId(const BlockCacheTraceRecord& access); 9642: 9642: 9642: static uint64_t GetSequenceNumber(const BlockCacheTraceRecord& access); 9642: 9642: static uint64_t GetBlockOffsetInFile(const BlockCacheTraceRecord& access); 9642: 9642: static const std::string kUnknownColumnFamilyName; 9642: static const uint64_t kReservedGetId; 9642: }; 9642: # 69 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/block_cache_tracer.h" 9642: struct BlockCacheLookupContext { 9642: BlockCacheLookupContext(const TableReaderCaller& _caller) : caller(_caller) {} 9642: BlockCacheLookupContext(const TableReaderCaller& _caller, uint64_t _get_id, 9642: bool _get_from_user_specified_snapshot) 9642: : caller(_caller), 9642: get_id(_get_id), 9642: get_from_user_specified_snapshot(_get_from_user_specified_snapshot) {} 9642: const TableReaderCaller caller; 9642: 9642: 9642: 9642: bool is_cache_hit = false; 9642: bool no_insert = false; 9642: TraceType block_type = TraceType::kTraceMax; 9642: uint64_t block_size = 0; 9642: std::string block_key; 9642: uint64_t num_keys_in_block = 0; 9642: 9642: 9642: 9642: uint64_t get_id = 0; 9642: std::string referenced_key; 9642: bool get_from_user_specified_snapshot = false; 9642: 9642: void FillLookupContext(bool _is_cache_hit, bool _no_insert, 9642: TraceType _block_type, uint64_t _block_size, 9642: const std::string& _block_key, 9642: uint64_t _num_keys_in_block) { 9642: is_cache_hit = _is_cache_hit; 9642: no_insert = _no_insert; 9642: block_type = _block_type; 9642: block_size = _block_size; 9642: block_key = _block_key; 9642: num_keys_in_block = _num_keys_in_block; 9642: } 9642: }; 9642: 9642: struct BlockCacheTraceHeader { 9642: uint64_t start_time; 9642: uint32_t rocksdb_major_version; 9642: uint32_t rocksdb_minor_version; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: class BlockCacheTraceWriterImpl : public BlockCacheTraceWriter { 9642: public: 9642: BlockCacheTraceWriterImpl(SystemClock* clock, 9642: const BlockCacheTraceWriterOptions& trace_options, 9642: std::unique_ptr&& trace_writer); 9642: ~BlockCacheTraceWriterImpl() = default; 9642: 9642: BlockCacheTraceWriterImpl(const BlockCacheTraceWriterImpl&) = delete; 9642: BlockCacheTraceWriterImpl& operator=(const BlockCacheTraceWriterImpl&) = 9642: delete; 9642: BlockCacheTraceWriterImpl(BlockCacheTraceWriterImpl&&) = delete; 9642: BlockCacheTraceWriterImpl& operator=(BlockCacheTraceWriterImpl&&) = delete; 9642: 9642: 9642: Status WriteBlockAccess(const BlockCacheTraceRecord& record, 9642: const Slice& block_key, const Slice& cf_name, 9642: const Slice& referenced_key) override; 9642: 9642: 9642: 9642: Status WriteHeader() override; 9642: 9642: private: 9642: SystemClock* clock_; 9642: BlockCacheTraceWriterOptions trace_options_; 9642: std::unique_ptr trace_writer_; 9642: }; 9642: 9642: 9642: 9642: 9642: class BlockCacheHumanReadableTraceWriter { 9642: public: 9642: ~BlockCacheHumanReadableTraceWriter(); 9642: 9642: Status NewWritableFile(const std::string& human_readable_trace_file_path, 9642: rocksdb::Env* env); 9642: 9642: Status WriteHumanReadableTraceRecord(const BlockCacheTraceRecord& access, 9642: uint64_t block_id, uint64_t get_key_id); 9642: 9642: private: 9642: char trace_record_buffer_[1024 * 1024]; 9642: std::unique_ptr 9642: human_readable_trace_file_writer_; 9642: }; 9642: 9642: 9642: 9642: class BlockCacheTraceReader { 9642: public: 9642: BlockCacheTraceReader(std::unique_ptr&& reader); 9642: virtual ~BlockCacheTraceReader() = default; 9642: 9642: BlockCacheTraceReader(const BlockCacheTraceReader&) = delete; 9642: BlockCacheTraceReader& operator=(const BlockCacheTraceReader&) = delete; 9642: BlockCacheTraceReader(BlockCacheTraceReader&&) = delete; 9642: BlockCacheTraceReader& operator=(BlockCacheTraceReader&&) = delete; 9642: 9642: Status ReadHeader(BlockCacheTraceHeader* header); 9642: 9642: Status ReadAccess(BlockCacheTraceRecord* record); 9642: 9642: private: 9642: std::unique_ptr trace_reader_; 9642: }; 9642: 9642: 9642: 9642: 9642: class BlockCacheHumanReadableTraceReader : public BlockCacheTraceReader { 9642: public: 9642: BlockCacheHumanReadableTraceReader(const std::string& trace_file_path); 9642: 9642: ~BlockCacheHumanReadableTraceReader(); 9642: 9642: Status ReadHeader(BlockCacheTraceHeader* header); 9642: 9642: Status ReadAccess(BlockCacheTraceRecord* record); 9642: 9642: private: 9642: std::ifstream human_readable_trace_reader_; 9642: }; 9642: 9642: 9642: 9642: 9642: class BlockCacheTracer { 9642: public: 9642: BlockCacheTracer(); 9642: ~BlockCacheTracer(); 9642: 9642: BlockCacheTracer(const BlockCacheTracer&) = delete; 9642: BlockCacheTracer& operator=(const BlockCacheTracer&) = delete; 9642: BlockCacheTracer(BlockCacheTracer&&) = delete; 9642: BlockCacheTracer& operator=(BlockCacheTracer&&) = delete; 9642: 9642: 9642: Status StartTrace(const BlockCacheTraceOptions& trace_options, 9642: std::unique_ptr&& trace_writer); 9642: 9642: 9642: void EndTrace(); 9642: 9642: bool is_tracing_enabled() const { 9642: return writer_.load(std::memory_order_relaxed); 9642: } 9642: 9642: Status WriteBlockAccess(const BlockCacheTraceRecord& record, 9642: const Slice& block_key, const Slice& cf_name, 9642: const Slice& referenced_key); 9642: 9642: 9642: uint64_t NextGetId(); 9642: 9642: private: 9642: BlockCacheTraceOptions trace_options_; 9642: 9642: InstrumentedMutex trace_writer_mutex_; 9642: std::atomic writer_; 9642: std::atomic get_id_counter_; 9642: }; 9642: 9642: } 9642: # 27 "/build/reproducible-path/rocksdb-9.3.1/table/table_builder.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: class Slice; 9642: class Status; 9642: 9642: struct TableReaderOptions { 9642: 9642: TableReaderOptions( 9642: const ImmutableOptions& _ioptions, 9642: const std::shared_ptr& _prefix_extractor, 9642: const EnvOptions& _env_options, 9642: const InternalKeyComparator& _internal_comparator, 9642: uint8_t _block_protection_bytes_per_key, bool _skip_filters = false, 9642: bool _immortal = false, bool _force_direct_prefetch = false, 9642: int _level = -1, BlockCacheTracer* const _block_cache_tracer = nullptr, 9642: size_t _max_file_size_for_l0_meta_pin = 0, 9642: const std::string& _cur_db_session_id = "", uint64_t _cur_file_num = 0, 9642: UniqueId64x2 _unique_id = {}, SequenceNumber _largest_seqno = 0, 9642: uint64_t _tail_size = 0, bool _user_defined_timestamps_persisted = true) 9642: : ioptions(_ioptions), 9642: prefix_extractor(_prefix_extractor), 9642: env_options(_env_options), 9642: internal_comparator(_internal_comparator), 9642: skip_filters(_skip_filters), 9642: immortal(_immortal), 9642: force_direct_prefetch(_force_direct_prefetch), 9642: level(_level), 9642: largest_seqno(_largest_seqno), 9642: block_cache_tracer(_block_cache_tracer), 9642: max_file_size_for_l0_meta_pin(_max_file_size_for_l0_meta_pin), 9642: cur_db_session_id(_cur_db_session_id), 9642: cur_file_num(_cur_file_num), 9642: unique_id(_unique_id), 9642: block_protection_bytes_per_key(_block_protection_bytes_per_key), 9642: tail_size(_tail_size), 9642: user_defined_timestamps_persisted(_user_defined_timestamps_persisted) {} 9642: 9642: const ImmutableOptions& ioptions; 9642: const std::shared_ptr& prefix_extractor; 9642: const EnvOptions& env_options; 9642: const InternalKeyComparator& internal_comparator; 9642: 9642: bool skip_filters; 9642: 9642: bool immortal; 9642: 9642: 9642: 9642: bool force_direct_prefetch; 9642: 9642: 9642: int level; 9642: 9642: SequenceNumber largest_seqno; 9642: BlockCacheTracer* const block_cache_tracer; 9642: 9642: 9642: const size_t max_file_size_for_l0_meta_pin; 9642: 9642: std::string cur_db_session_id; 9642: 9642: uint64_t cur_file_num; 9642: 9642: 9642: UniqueId64x2 unique_id; 9642: 9642: uint8_t block_protection_bytes_per_key; 9642: 9642: uint64_t tail_size; 9642: 9642: 9642: bool user_defined_timestamps_persisted; 9642: }; 9642: 9642: struct TableBuilderOptions { 9642: TableBuilderOptions( 9642: const ImmutableOptions& _ioptions, const MutableCFOptions& _moptions, 9642: const ReadOptions& _read_options, const WriteOptions& _write_options, 9642: const InternalKeyComparator& _internal_comparator, 9642: const InternalTblPropCollFactories* _internal_tbl_prop_coll_factories, 9642: CompressionType _compression_type, 9642: const CompressionOptions& _compression_opts, uint32_t _column_family_id, 9642: const std::string& _column_family_name, int _level, 9642: bool _is_bottommost = false, 9642: TableFileCreationReason _reason = TableFileCreationReason::kMisc, 9642: const int64_t _oldest_key_time = 0, 9642: const uint64_t _file_creation_time = 0, const std::string& _db_id = "", 9642: const std::string& _db_session_id = "", 9642: const uint64_t _target_file_size = 0, const uint64_t _cur_file_num = 0) 9642: : ioptions(_ioptions), 9642: moptions(_moptions), 9642: read_options(_read_options), 9642: write_options(_write_options), 9642: internal_comparator(_internal_comparator), 9642: internal_tbl_prop_coll_factories(_internal_tbl_prop_coll_factories), 9642: compression_type(_compression_type), 9642: compression_opts(_compression_opts), 9642: column_family_id(_column_family_id), 9642: column_family_name(_column_family_name), 9642: oldest_key_time(_oldest_key_time), 9642: target_file_size(_target_file_size), 9642: file_creation_time(_file_creation_time), 9642: db_id(_db_id), 9642: db_session_id(_db_session_id), 9642: level_at_creation(_level), 9642: is_bottommost(_is_bottommost), 9642: reason(_reason), 9642: cur_file_num(_cur_file_num) {} 9642: 9642: const ImmutableOptions& ioptions; 9642: const MutableCFOptions& moptions; 9642: const ReadOptions& read_options; 9642: const WriteOptions& write_options; 9642: const InternalKeyComparator& internal_comparator; 9642: const InternalTblPropCollFactories* internal_tbl_prop_coll_factories; 9642: const CompressionType compression_type; 9642: const CompressionOptions& compression_opts; 9642: const uint32_t column_family_id; 9642: const std::string& column_family_name; 9642: const int64_t oldest_key_time; 9642: const uint64_t target_file_size; 9642: const uint64_t file_creation_time; 9642: const std::string db_id; 9642: const std::string db_session_id; 9642: 9642: const int level_at_creation; 9642: const bool is_bottommost; 9642: const TableFileCreationReason reason; 9642: 9642: 9642: 9642: 9642: 9642: bool skip_filters = false; 9642: const uint64_t cur_file_num; 9642: }; 9642: # 172 "/build/reproducible-path/rocksdb-9.3.1/table/table_builder.h" 9642: class TableBuilder { 9642: public: 9642: 9642: virtual ~TableBuilder() {} 9642: 9642: 9642: 9642: 9642: virtual void Add(const Slice& key, const Slice& value) = 0; 9642: 9642: 9642: virtual Status status() const = 0; 9642: 9642: 9642: virtual IOStatus io_status() const = 0; 9642: 9642: 9642: 9642: virtual Status Finish() = 0; 9642: 9642: 9642: 9642: 9642: 9642: virtual void Abandon() = 0; 9642: 9642: 9642: virtual uint64_t NumEntries() const = 0; 9642: 9642: 9642: 9642: virtual bool IsEmpty() const { 9642: return NumEntries() == 0 && GetTableProperties().num_range_deletions == 0; 9642: } 9642: 9642: 9642: 9642: virtual uint64_t FileSize() const = 0; 9642: 9642: 9642: 9642: 9642: virtual uint64_t EstimatedFileSize() const { return FileSize(); } 9642: 9642: virtual uint64_t GetTailSize() const { return 0; } 9642: 9642: 9642: 9642: virtual bool NeedCompact() const { return false; } 9642: 9642: 9642: virtual TableProperties GetTableProperties() const = 0; 9642: 9642: 9642: virtual std::string GetFileChecksum() const = 0; 9642: 9642: 9642: virtual const char* GetFileChecksumFuncName() const = 0; 9642: 9642: 9642: 9642: virtual void SetSeqnoTimeTableProperties( 9642: const SeqnoToTimeMapping& , 9642: uint64_t ){} 9642: }; 9642: 9642: } 9642: # 26 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 15 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 9642: namespace rocksdb { 9642: # 41 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 9642: template > 9642: class BinaryHeap { 9642: public: 9642: BinaryHeap() {} 9642: explicit BinaryHeap(Compare cmp) : cmp_(std::move(cmp)) {} 9642: 9642: void push(const T& value) { 9642: data_.push_back(value); 9642: upheap(data_.size() - 1); 9642: } 9642: 9642: void push(T&& value) { 9642: data_.push_back(std::move(value)); 9642: upheap(data_.size() - 1); 9642: } 9642: 9642: const T& top() const { 9642: 9642: # 58 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 9642: (static_cast ( 9642: # 58 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 9642: !empty() 9642: # 58 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 58 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 9642: "!empty()" 9642: # 58 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 58 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 9642: ; 9642: return data_.front(); 9642: } 9642: 9642: void replace_top(const T& value) { 9642: 9642: # 63 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 9642: (static_cast ( 9642: # 63 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 9642: !empty() 9642: # 63 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 63 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 9642: "!empty()" 9642: # 63 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 63 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 9642: ; 9642: data_.front() = value; 9642: downheap(get_root()); 9642: } 9642: 9642: void replace_top(T&& value) { 9642: 9642: # 69 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 9642: (static_cast ( 9642: # 69 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 9642: !empty() 9642: # 69 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 69 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 9642: "!empty()" 9642: # 69 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 69 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 9642: ; 9642: data_.front() = std::move(value); 9642: downheap(get_root()); 9642: } 9642: 9642: void pop() { 9642: 9642: # 75 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 9642: (static_cast ( 9642: # 75 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 9642: !empty() 9642: # 75 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 75 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 9642: "!empty()" 9642: # 75 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 75 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 9642: ; 9642: if (data_.size() > 1) { 9642: 9642: 9642: 9642: data_.front() = std::move(data_.back()); 9642: } 9642: data_.pop_back(); 9642: if (!empty()) { 9642: downheap(get_root()); 9642: } else { 9642: reset_root_cmp_cache(); 9642: } 9642: } 9642: 9642: void swap(BinaryHeap& other) { 9642: std::swap(cmp_, other.cmp_); 9642: data_.swap(other.data_); 9642: std::swap(root_cmp_cache_, other.root_cmp_cache_); 9642: } 9642: 9642: void clear() { 9642: data_.clear(); 9642: reset_root_cmp_cache(); 9642: } 9642: 9642: bool empty() const { return data_.empty(); } 9642: 9642: size_t size() const { return data_.size(); } 9642: 9642: void reset_root_cmp_cache() { 9642: root_cmp_cache_ = std::numeric_limits::max(); 9642: } 9642: 9642: private: 9642: static inline size_t get_root() { return 0; } 9642: static inline size_t get_parent(size_t index) { return (index - 1) / 2; } 9642: static inline size_t get_left(size_t index) { return 2 * index + 1; } 9642: static inline size_t get_right(size_t index) { return 2 * index + 2; } 9642: 9642: void upheap(size_t index) { 9642: T v = std::move(data_[index]); 9642: while (index > get_root()) { 9642: const size_t parent = get_parent(index); 9642: if (!cmp_(data_[parent], v)) { 9642: break; 9642: } 9642: data_[index] = std::move(data_[parent]); 9642: index = parent; 9642: } 9642: data_[index] = std::move(v); 9642: reset_root_cmp_cache(); 9642: } 9642: 9642: void downheap(size_t index) { 9642: T v = std::move(data_[index]); 9642: 9642: size_t picked_child = std::numeric_limits::max(); 9642: while (1) { 9642: const size_t left_child = get_left(index); 9642: if (get_left(index) >= data_.size()) { 9642: break; 9642: } 9642: const size_t right_child = left_child + 1; 9642: 9642: # 139 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 9642: (static_cast ( 9642: # 139 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 9642: right_child == get_right(index) 9642: # 139 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 139 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 9642: "right_child == get_right(index)" 9642: # 139 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 139 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 9642: ; 9642: picked_child = left_child; 9642: if (index == 0 && root_cmp_cache_ < data_.size()) { 9642: picked_child = root_cmp_cache_; 9642: } else if (right_child < data_.size() && 9642: cmp_(data_[left_child], data_[right_child])) { 9642: picked_child = right_child; 9642: } 9642: if (!cmp_(v, data_[picked_child])) { 9642: break; 9642: } 9642: data_[index] = std::move(data_[picked_child]); 9642: index = picked_child; 9642: } 9642: 9642: if (index == 0) { 9642: 9642: 9642: 9642: 9642: root_cmp_cache_ = picked_child; 9642: } else { 9642: 9642: reset_root_cmp_cache(); 9642: } 9642: 9642: data_[index] = std::move(v); 9642: } 9642: 9642: Compare cmp_; 9642: autovector data_; 9642: 9642: size_t root_cmp_cache_ = std::numeric_limits::max(); 9642: }; 9642: 9642: } 9642: # 27 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/kv_map.h" 1 9642: 9642: 9642: 9642: 9642: 9642: # 14 "/build/reproducible-path/rocksdb-9.3.1/util/kv_map.h" 9642: namespace rocksdb { 9642: namespace stl_wrappers { 9642: 9642: struct LessOfComparator { 9642: explicit LessOfComparator(const Comparator* c = BytewiseComparator()) 9642: : cmp(c) {} 9642: 9642: bool operator()(const std::string& a, const std::string& b) const { 9642: return cmp->Compare(Slice(a), Slice(b)) < 0; 9642: } 9642: bool operator()(const Slice& a, const Slice& b) const { 9642: return cmp->Compare(a, b) < 0; 9642: } 9642: 9642: const Comparator* cmp; 9642: }; 9642: 9642: using KVMap = std::map; 9642: } 9642: } 9642: # 28 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 2 9642: 9642: namespace rocksdb { 9642: 9642: class TruncatedRangeDelIterator { 9642: public: 9642: TruncatedRangeDelIterator( 9642: std::unique_ptr iter, 9642: const InternalKeyComparator* icmp, const InternalKey* smallest, 9642: const InternalKey* largest); 9642: 9642: void SetRangeDelReadSeqno(SequenceNumber read_seqno) { 9642: iter_->SetRangeDelReadSeqno(read_seqno); 9642: } 9642: 9642: bool Valid() const; 9642: 9642: void Next() { iter_->TopNext(); } 9642: void Prev() { iter_->TopPrev(); } 9642: 9642: void InternalNext() { iter_->Next(); } 9642: 9642: 9642: 9642: 9642: 9642: void Seek(const Slice& target); 9642: 9642: 9642: void SeekInternalKey(const Slice& target); 9642: 9642: 9642: 9642: 9642: void SeekForPrev(const Slice& target); 9642: 9642: void SeekToFirst(); 9642: void SeekToLast(); 9642: 9642: ParsedInternalKey start_key() const { 9642: return (smallest_ == nullptr || 9642: icmp_->Compare(*smallest_, iter_->parsed_start_key()) <= 0) 9642: ? iter_->parsed_start_key() 9642: : *smallest_; 9642: } 9642: 9642: ParsedInternalKey end_key() const { 9642: return (largest_ == nullptr || 9642: icmp_->Compare(iter_->parsed_end_key(), *largest_) <= 0) 9642: ? iter_->parsed_end_key() 9642: : *largest_; 9642: } 9642: 9642: SequenceNumber seq() const { return iter_->seq(); } 9642: Slice timestamp() const { 9642: 9642: # 82 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 9642: (static_cast ( 9642: # 82 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 9642: icmp_->user_comparator()->timestamp_size() 9642: # 82 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 82 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 9642: "icmp_->user_comparator()->timestamp_size()" 9642: # 82 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 82 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 9642: ; 9642: return iter_->timestamp(); 9642: } 9642: void SetTimestampUpperBound(const Slice* ts_upper_bound) { 9642: iter_->SetTimestampUpperBound(ts_upper_bound); 9642: } 9642: 9642: std::map> 9642: SplitBySnapshot(const std::vector& snapshots); 9642: 9642: SequenceNumber upper_bound() const { return iter_->upper_bound(); } 9642: 9642: SequenceNumber lower_bound() const { return iter_->lower_bound(); } 9642: 9642: private: 9642: std::unique_ptr iter_; 9642: const InternalKeyComparator* icmp_; 9642: const ParsedInternalKey* smallest_ = nullptr; 9642: const ParsedInternalKey* largest_ = nullptr; 9642: std::list pinned_bounds_; 9642: 9642: const InternalKey* smallest_ikey_; 9642: const InternalKey* largest_ikey_; 9642: }; 9642: 9642: struct SeqMaxComparator { 9642: bool operator()(const TruncatedRangeDelIterator* a, 9642: const TruncatedRangeDelIterator* b) const { 9642: return a->seq() > b->seq(); 9642: } 9642: }; 9642: 9642: struct StartKeyMinComparator { 9642: explicit StartKeyMinComparator(const InternalKeyComparator* c) : icmp(c) {} 9642: 9642: bool operator()(const TruncatedRangeDelIterator* a, 9642: const TruncatedRangeDelIterator* b) const { 9642: return icmp->Compare(a->start_key(), b->start_key()) > 0; 9642: } 9642: 9642: const InternalKeyComparator* icmp; 9642: }; 9642: 9642: class ForwardRangeDelIterator { 9642: public: 9642: explicit ForwardRangeDelIterator(const InternalKeyComparator* icmp); 9642: 9642: bool ShouldDelete(const ParsedInternalKey& parsed); 9642: void Invalidate(); 9642: 9642: void AddNewIter(TruncatedRangeDelIterator* iter, 9642: const ParsedInternalKey& parsed) { 9642: iter->Seek(parsed.user_key); 9642: PushIter(iter, parsed); 9642: 9642: # 136 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 9642: (static_cast ( 9642: # 136 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 9642: active_iters_.size() == active_seqnums_.size() 9642: # 136 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 136 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 9642: "active_iters_.size() == active_seqnums_.size()" 9642: # 136 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 136 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 9642: ; 9642: } 9642: 9642: size_t UnusedIdx() const { return unused_idx_; } 9642: void IncUnusedIdx() { unused_idx_++; } 9642: 9642: private: 9642: using ActiveSeqSet = 9642: std::multiset; 9642: 9642: struct EndKeyMinComparator { 9642: explicit EndKeyMinComparator(const InternalKeyComparator* c) : icmp(c) {} 9642: 9642: bool operator()(const ActiveSeqSet::const_iterator& a, 9642: const ActiveSeqSet::const_iterator& b) const { 9642: return icmp->Compare((*a)->end_key(), (*b)->end_key()) > 0; 9642: } 9642: 9642: const InternalKeyComparator* icmp; 9642: }; 9642: 9642: void PushIter(TruncatedRangeDelIterator* iter, 9642: const ParsedInternalKey& parsed) { 9642: if (!iter->Valid()) { 9642: 9642: 9642: return; 9642: } 9642: int cmp = icmp_->Compare(parsed, iter->start_key()); 9642: if (cmp < 0) { 9642: PushInactiveIter(iter); 9642: } else { 9642: PushActiveIter(iter); 9642: } 9642: } 9642: 9642: void PushActiveIter(TruncatedRangeDelIterator* iter) { 9642: auto seq_pos = active_seqnums_.insert(iter); 9642: active_iters_.push(seq_pos); 9642: } 9642: 9642: TruncatedRangeDelIterator* PopActiveIter() { 9642: auto active_top = active_iters_.top(); 9642: auto iter = *active_top; 9642: active_iters_.pop(); 9642: active_seqnums_.erase(active_top); 9642: return iter; 9642: } 9642: 9642: void PushInactiveIter(TruncatedRangeDelIterator* iter) { 9642: inactive_iters_.push(iter); 9642: } 9642: 9642: TruncatedRangeDelIterator* PopInactiveIter() { 9642: auto* iter = inactive_iters_.top(); 9642: inactive_iters_.pop(); 9642: return iter; 9642: } 9642: 9642: const InternalKeyComparator* icmp_; 9642: size_t unused_idx_; 9642: ActiveSeqSet active_seqnums_; 9642: BinaryHeap active_iters_; 9642: BinaryHeap inactive_iters_; 9642: }; 9642: 9642: class ReverseRangeDelIterator { 9642: public: 9642: explicit ReverseRangeDelIterator(const InternalKeyComparator* icmp); 9642: 9642: bool ShouldDelete(const ParsedInternalKey& parsed); 9642: void Invalidate(); 9642: 9642: void AddNewIter(TruncatedRangeDelIterator* iter, 9642: const ParsedInternalKey& parsed) { 9642: iter->SeekForPrev(parsed.user_key); 9642: PushIter(iter, parsed); 9642: 9642: # 213 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 9642: (static_cast ( 9642: # 213 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 9642: active_iters_.size() == active_seqnums_.size() 9642: # 213 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 213 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 9642: "active_iters_.size() == active_seqnums_.size()" 9642: # 213 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 213 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 9642: ; 9642: } 9642: 9642: size_t UnusedIdx() const { return unused_idx_; } 9642: void IncUnusedIdx() { unused_idx_++; } 9642: 9642: private: 9642: using ActiveSeqSet = 9642: std::multiset; 9642: 9642: struct EndKeyMaxComparator { 9642: explicit EndKeyMaxComparator(const InternalKeyComparator* c) : icmp(c) {} 9642: 9642: bool operator()(const TruncatedRangeDelIterator* a, 9642: const TruncatedRangeDelIterator* b) const { 9642: return icmp->Compare(a->end_key(), b->end_key()) < 0; 9642: } 9642: 9642: const InternalKeyComparator* icmp; 9642: }; 9642: struct StartKeyMaxComparator { 9642: explicit StartKeyMaxComparator(const InternalKeyComparator* c) : icmp(c) {} 9642: 9642: bool operator()(const ActiveSeqSet::const_iterator& a, 9642: const ActiveSeqSet::const_iterator& b) const { 9642: return icmp->Compare((*a)->start_key(), (*b)->start_key()) < 0; 9642: } 9642: 9642: const InternalKeyComparator* icmp; 9642: }; 9642: 9642: void PushIter(TruncatedRangeDelIterator* iter, 9642: const ParsedInternalKey& parsed) { 9642: if (!iter->Valid()) { 9642: 9642: 9642: } else if (icmp_->Compare(iter->end_key(), parsed) <= 0) { 9642: PushInactiveIter(iter); 9642: } else { 9642: PushActiveIter(iter); 9642: } 9642: } 9642: 9642: void PushActiveIter(TruncatedRangeDelIterator* iter) { 9642: auto seq_pos = active_seqnums_.insert(iter); 9642: active_iters_.push(seq_pos); 9642: } 9642: 9642: TruncatedRangeDelIterator* PopActiveIter() { 9642: auto active_top = active_iters_.top(); 9642: auto iter = *active_top; 9642: active_iters_.pop(); 9642: active_seqnums_.erase(active_top); 9642: return iter; 9642: } 9642: 9642: void PushInactiveIter(TruncatedRangeDelIterator* iter) { 9642: inactive_iters_.push(iter); 9642: } 9642: 9642: TruncatedRangeDelIterator* PopInactiveIter() { 9642: auto* iter = inactive_iters_.top(); 9642: inactive_iters_.pop(); 9642: return iter; 9642: } 9642: 9642: const InternalKeyComparator* icmp_; 9642: size_t unused_idx_; 9642: ActiveSeqSet active_seqnums_; 9642: BinaryHeap active_iters_; 9642: BinaryHeap inactive_iters_; 9642: }; 9642: 9642: enum class RangeDelPositioningMode { kForwardTraversal, kBackwardTraversal }; 9642: class RangeDelAggregator { 9642: public: 9642: explicit RangeDelAggregator(const InternalKeyComparator* icmp) 9642: : icmp_(icmp) {} 9642: virtual ~RangeDelAggregator() {} 9642: 9642: virtual void AddTombstones( 9642: std::unique_ptr input_iter, 9642: const InternalKey* smallest = nullptr, 9642: const InternalKey* largest = nullptr) = 0; 9642: 9642: bool ShouldDelete(const Slice& ikey, RangeDelPositioningMode mode) { 9642: ParsedInternalKey parsed; 9642: 9642: Status pik_status = 9642: ParseInternalKey(ikey, &parsed, false ); 9642: 9642: # 303 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 9642: (static_cast ( 9642: # 303 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 9642: pik_status.ok() 9642: # 303 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 303 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 9642: "pik_status.ok()" 9642: # 303 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 303 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 9642: ; 9642: if (!pik_status.ok()) { 9642: return false; 9642: } 9642: 9642: return ShouldDelete(parsed, mode); 9642: } 9642: virtual bool ShouldDelete(const ParsedInternalKey& parsed, 9642: RangeDelPositioningMode mode) = 0; 9642: 9642: virtual void InvalidateRangeDelMapPositions() = 0; 9642: 9642: virtual bool IsEmpty() const = 0; 9642: 9642: bool AddFile(uint64_t file_number) { 9642: return files_seen_.insert(file_number).second; 9642: } 9642: 9642: protected: 9642: class StripeRep { 9642: public: 9642: StripeRep(const InternalKeyComparator* icmp, SequenceNumber upper_bound, 9642: SequenceNumber lower_bound) 9642: : icmp_(icmp), 9642: forward_iter_(icmp), 9642: reverse_iter_(icmp), 9642: upper_bound_(upper_bound), 9642: lower_bound_(lower_bound) {} 9642: 9642: void AddTombstones(std::unique_ptr input_iter) { 9642: iters_.push_back(std::move(input_iter)); 9642: } 9642: 9642: bool IsEmpty() const { return iters_.empty(); } 9642: 9642: bool ShouldDelete(const ParsedInternalKey& parsed, 9642: RangeDelPositioningMode mode); 9642: 9642: void Invalidate() { 9642: if (!IsEmpty()) { 9642: InvalidateForwardIter(); 9642: InvalidateReverseIter(); 9642: } 9642: } 9642: 9642: 9642: 9642: bool IsRangeOverlapped(const Slice& start, const Slice& end); 9642: 9642: private: 9642: bool InStripe(SequenceNumber seq) const { 9642: return lower_bound_ <= seq && seq <= upper_bound_; 9642: } 9642: 9642: void InvalidateForwardIter() { forward_iter_.Invalidate(); } 9642: 9642: void InvalidateReverseIter() { reverse_iter_.Invalidate(); } 9642: 9642: const InternalKeyComparator* icmp_; 9642: std::vector> iters_; 9642: ForwardRangeDelIterator forward_iter_; 9642: ReverseRangeDelIterator reverse_iter_; 9642: SequenceNumber upper_bound_; 9642: SequenceNumber lower_bound_; 9642: }; 9642: 9642: const InternalKeyComparator* icmp_; 9642: 9642: private: 9642: std::set files_seen_; 9642: }; 9642: 9642: class ReadRangeDelAggregator final : public RangeDelAggregator { 9642: public: 9642: ReadRangeDelAggregator(const InternalKeyComparator* icmp, 9642: SequenceNumber upper_bound) 9642: : RangeDelAggregator(icmp), 9642: rep_(icmp, upper_bound, 0 ) {} 9642: ~ReadRangeDelAggregator() override {} 9642: 9642: using RangeDelAggregator::ShouldDelete; 9642: void AddTombstones( 9642: std::unique_ptr input_iter, 9642: const InternalKey* smallest = nullptr, 9642: const InternalKey* largest = nullptr) override; 9642: 9642: bool ShouldDelete(const ParsedInternalKey& parsed, 9642: RangeDelPositioningMode mode) final override { 9642: if (rep_.IsEmpty()) { 9642: return false; 9642: } 9642: return ShouldDeleteImpl(parsed, mode); 9642: } 9642: 9642: bool IsRangeOverlapped(const Slice& start, const Slice& end); 9642: 9642: void InvalidateRangeDelMapPositions() override { rep_.Invalidate(); } 9642: 9642: bool IsEmpty() const override { return rep_.IsEmpty(); } 9642: 9642: private: 9642: StripeRep rep_; 9642: 9642: bool ShouldDeleteImpl(const ParsedInternalKey& parsed, 9642: RangeDelPositioningMode mode); 9642: }; 9642: 9642: class CompactionRangeDelAggregator : public RangeDelAggregator { 9642: public: 9642: CompactionRangeDelAggregator(const InternalKeyComparator* icmp, 9642: const std::vector& snapshots, 9642: const std::string* full_history_ts_low = nullptr, 9642: const std::string* trim_ts = nullptr) 9642: : RangeDelAggregator(icmp), snapshots_(&snapshots) { 9642: if (full_history_ts_low) { 9642: ts_upper_bound_ = *full_history_ts_low; 9642: } 9642: if (trim_ts) { 9642: trim_ts_ = *trim_ts; 9642: 9642: 9642: if (ts_upper_bound_.empty()) { 9642: ts_upper_bound_ = trim_ts_; 9642: } else if (!trim_ts_.empty() && icmp->user_comparator()->CompareTimestamp( 9642: trim_ts_, ts_upper_bound_) < 0) { 9642: ts_upper_bound_ = trim_ts_; 9642: } 9642: } 9642: } 9642: ~CompactionRangeDelAggregator() override {} 9642: 9642: void AddTombstones( 9642: std::unique_ptr input_iter, 9642: const InternalKey* smallest = nullptr, 9642: const InternalKey* largest = nullptr) override; 9642: 9642: using RangeDelAggregator::ShouldDelete; 9642: bool ShouldDelete(const ParsedInternalKey& parsed, 9642: RangeDelPositioningMode mode) override; 9642: 9642: bool IsRangeOverlapped(const Slice& start, const Slice& end); 9642: 9642: void InvalidateRangeDelMapPositions() override { 9642: for (auto& rep : reps_) { 9642: rep.second.Invalidate(); 9642: } 9642: } 9642: 9642: bool IsEmpty() const override { 9642: for (const auto& rep : reps_) { 9642: if (!rep.second.IsEmpty()) { 9642: return false; 9642: } 9642: } 9642: return true; 9642: } 9642: # 468 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 9642: std::unique_ptr NewIterator( 9642: const Slice* lower_bound = nullptr, const Slice* upper_bound = nullptr); 9642: 9642: private: 9642: std::vector> parent_iters_; 9642: std::map reps_; 9642: 9642: const std::vector* snapshots_; 9642: 9642: Slice ts_upper_bound_{}; 9642: Slice trim_ts_{}; 9642: }; 9642: 9642: } 9642: # 14 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/snapshot_checker.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: enum class SnapshotCheckerResult : int { 9642: kInSnapshot = 0, 9642: kNotInSnapshot = 1, 9642: 9642: 9642: kSnapshotReleased = 2, 9642: }; 9642: 9642: 9642: class SnapshotChecker { 9642: public: 9642: virtual ~SnapshotChecker() {} 9642: virtual SnapshotCheckerResult CheckInSnapshot( 9642: SequenceNumber sequence, SequenceNumber snapshot_sequence) const = 0; 9642: }; 9642: 9642: class DisableGCSnapshotChecker : public SnapshotChecker { 9642: public: 9642: virtual ~DisableGCSnapshotChecker() {} 9642: SnapshotCheckerResult CheckInSnapshot( 9642: SequenceNumber , 9642: SequenceNumber ) const override { 9642: 9642: return SnapshotCheckerResult::kNotInSnapshot; 9642: } 9642: static DisableGCSnapshotChecker* Instance(); 9642: 9642: protected: 9642: explicit DisableGCSnapshotChecker() {} 9642: }; 9642: 9642: class WritePreparedTxnDB; 9642: 9642: 9642: 9642: class WritePreparedSnapshotChecker : public SnapshotChecker { 9642: public: 9642: explicit WritePreparedSnapshotChecker(WritePreparedTxnDB* txn_db); 9642: virtual ~WritePreparedSnapshotChecker() {} 9642: 9642: SnapshotCheckerResult CheckInSnapshot( 9642: SequenceNumber sequence, SequenceNumber snapshot_sequence) const override; 9642: 9642: private: 9642: const WritePreparedTxnDB* const txn_db_; 9642: }; 9642: 9642: } 9642: # 15 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/wide/wide_column_serialization.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 15 "/build/reproducible-path/rocksdb-9.3.1/db/wide/wide_column_serialization.h" 9642: namespace rocksdb { 9642: 9642: class Slice; 9642: # 44 "/build/reproducible-path/rocksdb-9.3.1/db/wide/wide_column_serialization.h" 9642: class WideColumnSerialization { 9642: public: 9642: static Status Serialize(const WideColumns& columns, std::string& output); 9642: 9642: static Status Deserialize(Slice& input, WideColumns& columns); 9642: 9642: static WideColumns::const_iterator Find(const WideColumns& columns, 9642: const Slice& column_name); 9642: static Status GetValueOfDefaultColumn(Slice& input, Slice& value); 9642: 9642: static constexpr uint32_t kCurrentVersion = 1; 9642: }; 9642: 9642: } 9642: # 16 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 1 9642: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: 9642: 9642: # 1 "/usr/include/c++/13/cassert" 1 3 9642: # 41 "/usr/include/c++/13/cassert" 3 9642: 9642: # 42 "/usr/include/c++/13/cassert" 3 9642: 9642: 9642: # 1 "/usr/include/assert.h" 1 3 4 9642: # 45 "/usr/include/c++/13/cassert" 2 3 9642: # 12 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 2 9642: # 23 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: namespace rocksdb { 9642: 9642: class Slice; 9642: class SliceTransform; 9642: # 54 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: class CompactionFilter : public Customizable { 9642: public: 9642: 9642: 9642: enum ValueType { 9642: 9642: kValue, 9642: 9642: kMergeOperand, 9642: 9642: 9642: 9642: 9642: kBlobIndex, 9642: 9642: kWideColumnEntity, 9642: }; 9642: 9642: 9642: 9642: 9642: enum class Decision { 9642: 9642: kKeep, 9642: # 89 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: kRemove, 9642: 9642: 9642: 9642: 9642: 9642: kChangeValue, 9642: # 119 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: kRemoveAndSkipUntil, 9642: 9642: 9642: 9642: kChangeBlobIndex, 9642: 9642: 9642: 9642: kIOError, 9642: 9642: 9642: 9642: 9642: 9642: kPurge, 9642: 9642: 9642: 9642: 9642: 9642: 9642: kChangeWideColumnEntity, 9642: # 150 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: kUndetermined, 9642: }; 9642: 9642: 9642: enum class BlobDecision { kKeep, kChangeValue, kCorruption, kIOError }; 9642: 9642: 9642: struct Context { 9642: 9642: 9642: bool is_full_compaction; 9642: 9642: 9642: bool is_manual_compaction; 9642: 9642: 9642: int input_start_level = kUnknownStartLevel; 9642: 9642: uint32_t column_family_id; 9642: 9642: TableFileCreationReason reason; 9642: 9642: 9642: 9642: 9642: TablePropertiesCollection input_table_properties; 9642: 9642: static const int kUnknownStartLevel = -1; 9642: }; 9642: 9642: virtual ~CompactionFilter() {} 9642: static const char* Type() { return "CompactionFilter"; } 9642: static Status CreateFromString(const ConfigOptions& config_options, 9642: const std::string& name, 9642: const CompactionFilter** result); 9642: # 201 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: virtual bool Filter(int , const Slice& , 9642: const Slice& , 9642: std::string* , 9642: bool* ) const { 9642: return false; 9642: } 9642: # 217 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: virtual bool FilterMergeOperand(int , const Slice& , 9642: const Slice& ) const { 9642: return false; 9642: } 9642: # 234 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: virtual Decision FilterV2(int level, const Slice& key, ValueType value_type, 9642: const Slice& existing_value, std::string* new_value, 9642: std::string* ) const { 9642: switch (value_type) { 9642: case ValueType::kValue: { 9642: bool value_changed = false; 9642: bool rv = Filter(level, key, existing_value, new_value, &value_changed); 9642: if (rv) { 9642: return Decision::kRemove; 9642: } 9642: return value_changed ? Decision::kChangeValue : Decision::kKeep; 9642: } 9642: 9642: case ValueType::kMergeOperand: { 9642: bool rv = FilterMergeOperand(level, key, existing_value); 9642: return rv ? Decision::kRemove : Decision::kKeep; 9642: } 9642: 9642: case ValueType::kBlobIndex: 9642: return Decision::kKeep; 9642: 9642: default: 9642: 9642: # 256 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 9642: (static_cast ( 9642: # 256 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: false 9642: # 256 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 256 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: "false" 9642: # 256 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 256 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: ; 9642: return Decision::kKeep; 9642: } 9642: } 9642: # 281 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: virtual Decision FilterV3( 9642: int level, const Slice& key, ValueType value_type, 9642: const Slice* existing_value, const WideColumns* existing_columns, 9642: std::string* new_value, 9642: std::vector>* , 9642: std::string* skip_until) const { 9642: 9642: 9642: 9642: 9642: 9642: # 291 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 9642: (static_cast ( 9642: # 291 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: !existing_value || !existing_columns 9642: # 291 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 291 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: "!existing_value || !existing_columns" 9642: # 291 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 291 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: ; 9642: 9642: # 292 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 9642: (static_cast ( 9642: # 292 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: value_type == ValueType::kWideColumnEntity || existing_value 9642: # 292 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 292 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: "value_type == ValueType::kWideColumnEntity || existing_value" 9642: # 292 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 292 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: ; 9642: 9642: # 293 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 9642: (static_cast ( 9642: # 293 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: value_type != ValueType::kWideColumnEntity || existing_columns 9642: # 293 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 293 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: "value_type != ValueType::kWideColumnEntity || existing_columns" 9642: # 293 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 293 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: ; 9642: 9642: if (value_type == ValueType::kWideColumnEntity) { 9642: return Decision::kKeep; 9642: } 9642: 9642: return FilterV2(level, key, value_type, *existing_value, new_value, 9642: skip_until); 9642: } 9642: 9642: 9642: virtual BlobDecision PrepareBlobOutput(const Slice& , 9642: const Slice& , 9642: std::string* ) const { 9642: return BlobDecision::kKeep; 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual bool IgnoreSnapshots() const { return true; } 9642: 9642: 9642: 9642: const char* Name() const override = 0; 9642: 9642: 9642: virtual bool IsStackedBlobDbInternalCompactionFilter() const { return false; } 9642: # 334 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: virtual Decision FilterBlobByKey(int , const Slice& , 9642: std::string* , 9642: std::string* ) const { 9642: return Decision::kUndetermined; 9642: } 9642: }; 9642: # 349 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 9642: class CompactionFilterFactory : public Customizable { 9642: public: 9642: virtual ~CompactionFilterFactory() {} 9642: static const char* Type() { return "CompactionFilterFactory"; } 9642: static Status CreateFromString( 9642: const ConfigOptions& config_options, const std::string& name, 9642: std::shared_ptr* result); 9642: 9642: 9642: 9642: 9642: virtual bool ShouldFilterTableFileCreation( 9642: TableFileCreationReason reason) const { 9642: 9642: 9642: return reason == TableFileCreationReason::kCompaction; 9642: } 9642: 9642: virtual std::unique_ptr CreateCompactionFilter( 9642: const CompactionFilter::Context& context) = 0; 9642: 9642: 9642: const char* Name() const override = 0; 9642: }; 9642: 9642: } 9642: # 17 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 1 "/usr/include/c++/13/variant" 1 3 9642: # 32 "/usr/include/c++/13/variant" 3 9642: 9642: # 33 "/usr/include/c++/13/variant" 3 9642: # 58 "/usr/include/c++/13/variant" 3 9642: 9642: # 58 "/usr/include/c++/13/variant" 3 9642: namespace std __attribute__ ((__visibility__ ("default"))) 9642: { 9642: 9642: 9642: template class tuple; 9642: template class variant; 9642: template struct hash; 9642: 9642: template 9642: struct variant_size; 9642: 9642: template 9642: struct variant_size : variant_size<_Variant> {}; 9642: 9642: template 9642: struct variant_size : variant_size<_Variant> {}; 9642: 9642: template 9642: struct variant_size : variant_size<_Variant> {}; 9642: 9642: template 9642: struct variant_size> 9642: : std::integral_constant {}; 9642: 9642: template 9642: inline constexpr size_t variant_size_v = variant_size<_Variant>::value; 9642: 9642: template 9642: inline constexpr size_t 9642: variant_size_v> = sizeof...(_Types); 9642: 9642: template 9642: inline constexpr size_t 9642: variant_size_v> = sizeof...(_Types); 9642: 9642: template 9642: struct variant_alternative; 9642: 9642: template 9642: struct variant_alternative<_Np, variant<_Types...>> 9642: { 9642: static_assert(_Np < sizeof...(_Types)); 9642: 9642: using type = typename _Nth_type<_Np, _Types...>::type; 9642: }; 9642: 9642: template 9642: using variant_alternative_t = 9642: typename variant_alternative<_Np, _Variant>::type; 9642: 9642: template 9642: struct variant_alternative<_Np, const _Variant> 9642: { using type = const variant_alternative_t<_Np, _Variant>; }; 9642: 9642: template 9642: struct variant_alternative<_Np, volatile _Variant> 9642: { using type = volatile variant_alternative_t<_Np, _Variant>; }; 9642: 9642: template 9642: struct variant_alternative<_Np, const volatile _Variant> 9642: { using type = const volatile variant_alternative_t<_Np, _Variant>; }; 9642: 9642: inline constexpr size_t variant_npos = -1; 9642: 9642: template 9642: constexpr variant_alternative_t<_Np, variant<_Types...>>& 9642: get(variant<_Types...>&); 9642: 9642: template 9642: constexpr variant_alternative_t<_Np, variant<_Types...>>&& 9642: get(variant<_Types...>&&); 9642: 9642: template 9642: constexpr variant_alternative_t<_Np, variant<_Types...>> const& 9642: get(const variant<_Types...>&); 9642: 9642: template 9642: constexpr variant_alternative_t<_Np, variant<_Types...>> const&& 9642: get(const variant<_Types...>&&); 9642: 9642: template 9642: constexpr decltype(auto) 9642: __do_visit(_Visitor&& __visitor, _Variants&&... __variants); 9642: 9642: template 9642: 9642: decltype(auto) 9642: __variant_cast(_Tp&& __rhs) 9642: { 9642: if constexpr (is_lvalue_reference_v<_Tp>) 9642: { 9642: if constexpr (is_const_v>) 9642: return static_cast&>(__rhs); 9642: else 9642: return static_cast&>(__rhs); 9642: } 9642: else 9642: return static_cast&&>(__rhs); 9642: } 9642: 9642: namespace __detail 9642: { 9642: namespace __variant 9642: { 9642: 9642: struct __variant_cookie {}; 9642: 9642: struct __variant_idx_cookie { using type = __variant_idx_cookie; }; 9642: 9642: template struct __deduce_visit_result { using type = _Tp; }; 9642: 9642: 9642: template 9642: constexpr void 9642: __raw_visit(_Visitor&& __visitor, _Variants&&... __variants) 9642: { 9642: std::__do_visit<__variant_cookie>(std::forward<_Visitor>(__visitor), 9642: std::forward<_Variants>(__variants)...); 9642: } 9642: 9642: 9642: template 9642: constexpr void 9642: __raw_idx_visit(_Visitor&& __visitor, _Variants&&... __variants) 9642: { 9642: std::__do_visit<__variant_idx_cookie>(std::forward<_Visitor>(__visitor), 9642: std::forward<_Variants>(__variants)...); 9642: } 9642: 9642: 9642: 9642: template 9642: constexpr std::variant<_Types...>& 9642: __as(std::variant<_Types...>& __v) noexcept 9642: { return __v; } 9642: 9642: template 9642: constexpr const std::variant<_Types...>& 9642: __as(const std::variant<_Types...>& __v) noexcept 9642: { return __v; } 9642: 9642: template 9642: constexpr std::variant<_Types...>&& 9642: __as(std::variant<_Types...>&& __v) noexcept 9642: { return std::move(__v); } 9642: 9642: template 9642: constexpr const std::variant<_Types...>&& 9642: __as(const std::variant<_Types...>&& __v) noexcept 9642: { return std::move(__v); } 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template> 9642: struct _Uninitialized; 9642: 9642: template 9642: struct _Uninitialized<_Type, true> 9642: { 9642: template 9642: constexpr 9642: _Uninitialized(in_place_index_t<0>, _Args&&... __args) 9642: : _M_storage(std::forward<_Args>(__args)...) 9642: { } 9642: 9642: constexpr const _Type& _M_get() const & noexcept 9642: { return _M_storage; } 9642: 9642: constexpr _Type& _M_get() & noexcept 9642: { return _M_storage; } 9642: 9642: constexpr const _Type&& _M_get() const && noexcept 9642: { return std::move(_M_storage); } 9642: 9642: constexpr _Type&& _M_get() && noexcept 9642: { return std::move(_M_storage); } 9642: 9642: _Type _M_storage; 9642: }; 9642: 9642: template 9642: struct _Uninitialized<_Type, false> 9642: { 9642: # 278 "/usr/include/c++/13/variant" 3 9642: template 9642: constexpr 9642: _Uninitialized(in_place_index_t<0>, _Args&&... __args) 9642: { 9642: ::new ((void*)std::addressof(_M_storage)) 9642: _Type(std::forward<_Args>(__args)...); 9642: } 9642: 9642: const _Type& _M_get() const & noexcept 9642: { return *_M_storage._M_ptr(); } 9642: 9642: _Type& _M_get() & noexcept 9642: { return *_M_storage._M_ptr(); } 9642: 9642: const _Type&& _M_get() const && noexcept 9642: { return std::move(*_M_storage._M_ptr()); } 9642: 9642: _Type&& _M_get() && noexcept 9642: { return std::move(*_M_storage._M_ptr()); } 9642: 9642: __gnu_cxx::__aligned_membuf<_Type> _M_storage; 9642: 9642: }; 9642: 9642: template 9642: constexpr decltype(auto) 9642: __get_n(_Union&& __u) noexcept 9642: { 9642: if constexpr (_Np == 0) 9642: return std::forward<_Union>(__u)._M_first._M_get(); 9642: else if constexpr (_Np == 1) 9642: return std::forward<_Union>(__u)._M_rest._M_first._M_get(); 9642: else if constexpr (_Np == 2) 9642: return std::forward<_Union>(__u)._M_rest._M_rest._M_first._M_get(); 9642: else 9642: return __variant::__get_n<_Np - 3>( 9642: std::forward<_Union>(__u)._M_rest._M_rest._M_rest); 9642: } 9642: 9642: 9642: template 9642: constexpr decltype(auto) 9642: __get(_Variant&& __v) noexcept 9642: { return __variant::__get_n<_Np>(std::forward<_Variant>(__v)._M_u); } 9642: 9642: 9642: template 9642: constexpr decltype(auto) 9642: __construct_n(_Union& __u) noexcept 9642: { 9642: if constexpr (_Np == 0) 9642: return &__u._M_first; 9642: else if constexpr (_Np == 1) 9642: { 9642: std::_Construct(&__u._M_rest); 9642: return &__u._M_rest._M_first; 9642: } 9642: else if constexpr (_Np == 2) 9642: { 9642: std::_Construct(&__u._M_rest); 9642: std::_Construct(&__u._M_rest._M_rest); 9642: return &__u._M_rest._M_rest._M_first; 9642: } 9642: else 9642: { 9642: std::_Construct(&__u._M_rest); 9642: std::_Construct(&__u._M_rest._M_rest); 9642: std::_Construct(&__u._M_rest._M_rest._M_rest); 9642: return __variant::__construct_n<_Np - 3>(__u._M_rest._M_rest._M_rest); 9642: } 9642: } 9642: 9642: template 9642: struct _Traits 9642: { 9642: static constexpr bool _S_default_ctor = 9642: is_default_constructible_v::type>; 9642: static constexpr bool _S_copy_ctor = 9642: (is_copy_constructible_v<_Types> && ...); 9642: static constexpr bool _S_move_ctor = 9642: (is_move_constructible_v<_Types> && ...); 9642: static constexpr bool _S_copy_assign = 9642: _S_copy_ctor 9642: && (is_copy_assignable_v<_Types> && ...); 9642: static constexpr bool _S_move_assign = 9642: _S_move_ctor 9642: && (is_move_assignable_v<_Types> && ...); 9642: 9642: static constexpr bool _S_trivial_dtor = 9642: (is_trivially_destructible_v<_Types> && ...); 9642: static constexpr bool _S_trivial_copy_ctor = 9642: (is_trivially_copy_constructible_v<_Types> && ...); 9642: static constexpr bool _S_trivial_move_ctor = 9642: (is_trivially_move_constructible_v<_Types> && ...); 9642: static constexpr bool _S_trivial_copy_assign = 9642: _S_trivial_dtor && _S_trivial_copy_ctor 9642: && (is_trivially_copy_assignable_v<_Types> && ...); 9642: static constexpr bool _S_trivial_move_assign = 9642: _S_trivial_dtor && _S_trivial_move_ctor 9642: && (is_trivially_move_assignable_v<_Types> && ...); 9642: 9642: 9642: 9642: static constexpr bool _S_nothrow_default_ctor = 9642: is_nothrow_default_constructible_v< 9642: typename _Nth_type<0, _Types...>::type>; 9642: static constexpr bool _S_nothrow_copy_ctor = false; 9642: static constexpr bool _S_nothrow_move_ctor = 9642: (is_nothrow_move_constructible_v<_Types> && ...); 9642: static constexpr bool _S_nothrow_copy_assign = false; 9642: static constexpr bool _S_nothrow_move_assign = 9642: _S_nothrow_move_ctor 9642: && (is_nothrow_move_assignable_v<_Types> && ...); 9642: }; 9642: 9642: 9642: template 9642: union _Variadic_union 9642: { 9642: _Variadic_union() = default; 9642: 9642: template 9642: _Variadic_union(in_place_index_t<_Np>, _Args&&...) = delete; 9642: }; 9642: 9642: template 9642: union _Variadic_union<_First, _Rest...> 9642: { 9642: constexpr _Variadic_union() : _M_rest() { } 9642: 9642: template 9642: constexpr 9642: _Variadic_union(in_place_index_t<0>, _Args&&... __args) 9642: : _M_first(in_place_index<0>, std::forward<_Args>(__args)...) 9642: { } 9642: 9642: template 9642: constexpr 9642: _Variadic_union(in_place_index_t<_Np>, _Args&&... __args) 9642: : _M_rest(in_place_index<_Np-1>, std::forward<_Args>(__args)...) 9642: { } 9642: # 434 "/usr/include/c++/13/variant" 3 9642: _Uninitialized<_First> _M_first; 9642: _Variadic_union<_Rest...> _M_rest; 9642: }; 9642: 9642: 9642: 9642: 9642: 9642: 9642: template 9642: struct _Never_valueless_alt 9642: : __and_, is_trivially_copyable<_Tp>> 9642: { }; 9642: # 458 "/usr/include/c++/13/variant" 3 9642: template 9642: constexpr bool __never_valueless() 9642: { 9642: return _Traits<_Types...>::_S_move_assign 9642: && (_Never_valueless_alt<_Types>::value && ...); 9642: } 9642: 9642: 9642: template 9642: struct _Variant_storage; 9642: 9642: template 9642: using __select_index = 9642: typename __select_int::_Select_int_base::type::value_type; 9642: 9642: template 9642: struct _Variant_storage 9642: { 9642: constexpr 9642: _Variant_storage() 9642: : _M_index(static_cast<__index_type>(variant_npos)) 9642: { } 9642: 9642: template 9642: constexpr 9642: _Variant_storage(in_place_index_t<_Np>, _Args&&... __args) 9642: : _M_u(in_place_index<_Np>, std::forward<_Args>(__args)...), 9642: _M_index{_Np} 9642: { } 9642: 9642: constexpr void 9642: _M_reset() 9642: { 9642: if (!_M_valid()) [[unlikely]] 9642: return; 9642: 9642: std::__do_visit([](auto&& __this_mem) mutable 9642: { 9642: std::_Destroy(std::__addressof(__this_mem)); 9642: }, __variant_cast<_Types...>(*this)); 9642: 9642: _M_index = static_cast<__index_type>(variant_npos); 9642: } 9642: 9642: 9642: ~_Variant_storage() 9642: { _M_reset(); } 9642: 9642: constexpr bool 9642: _M_valid() const noexcept 9642: { 9642: if constexpr (__variant::__never_valueless<_Types...>()) 9642: return true; 9642: return this->_M_index != __index_type(variant_npos); 9642: } 9642: 9642: _Variadic_union<_Types...> _M_u; 9642: using __index_type = __select_index<_Types...>; 9642: __index_type _M_index; 9642: }; 9642: 9642: template 9642: struct _Variant_storage 9642: { 9642: constexpr 9642: _Variant_storage() 9642: : _M_index(static_cast<__index_type>(variant_npos)) 9642: { } 9642: 9642: template 9642: constexpr 9642: _Variant_storage(in_place_index_t<_Np>, _Args&&... __args) 9642: : _M_u(in_place_index<_Np>, std::forward<_Args>(__args)...), 9642: _M_index{_Np} 9642: { } 9642: 9642: constexpr void 9642: _M_reset() noexcept 9642: { _M_index = static_cast<__index_type>(variant_npos); } 9642: 9642: constexpr bool 9642: _M_valid() const noexcept 9642: { 9642: if constexpr (__variant::__never_valueless<_Types...>()) 9642: return true; 9642: 9642: 9642: 9642: 9642: 9642: 9642: return this->_M_index != static_cast<__index_type>(variant_npos); 9642: } 9642: 9642: _Variadic_union<_Types...> _M_u; 9642: using __index_type = __select_index<_Types...>; 9642: __index_type _M_index; 9642: }; 9642: 9642: 9642: template 9642: 9642: inline void 9642: __emplace(_Variant_storage<_Triv, _Types...>& __v, _Args&&... __args) 9642: { 9642: __v._M_reset(); 9642: auto* __addr = __variant::__construct_n<_Np>(__v._M_u); 9642: std::_Construct(__addr, in_place_index<0>, 9642: std::forward<_Args>(__args)...); 9642: 9642: __v._M_index = _Np; 9642: } 9642: 9642: template 9642: using _Variant_storage_alias = 9642: _Variant_storage<_Traits<_Types...>::_S_trivial_dtor, _Types...>; 9642: 9642: 9642: 9642: 9642: template 9642: struct _Copy_ctor_base : _Variant_storage_alias<_Types...> 9642: { 9642: using _Base = _Variant_storage_alias<_Types...>; 9642: using _Base::_Base; 9642: 9642: 9642: _Copy_ctor_base(const _Copy_ctor_base& __rhs) 9642: noexcept(_Traits<_Types...>::_S_nothrow_copy_ctor) 9642: { 9642: __variant::__raw_idx_visit( 9642: [this](auto&& __rhs_mem, auto __rhs_index) mutable 9642: { 9642: constexpr size_t __j = __rhs_index; 9642: if constexpr (__j != variant_npos) 9642: std::_Construct(std::__addressof(this->_M_u), 9642: in_place_index<__j>, __rhs_mem); 9642: }, __variant_cast<_Types...>(__rhs)); 9642: this->_M_index = __rhs._M_index; 9642: } 9642: 9642: _Copy_ctor_base(_Copy_ctor_base&&) = default; 9642: _Copy_ctor_base& operator=(const _Copy_ctor_base&) = default; 9642: _Copy_ctor_base& operator=(_Copy_ctor_base&&) = default; 9642: }; 9642: 9642: template 9642: struct _Copy_ctor_base : _Variant_storage_alias<_Types...> 9642: { 9642: using _Base = _Variant_storage_alias<_Types...>; 9642: using _Base::_Base; 9642: }; 9642: 9642: template 9642: using _Copy_ctor_alias = 9642: _Copy_ctor_base<_Traits<_Types...>::_S_trivial_copy_ctor, _Types...>; 9642: 9642: template 9642: struct _Move_ctor_base : _Copy_ctor_alias<_Types...> 9642: { 9642: using _Base = _Copy_ctor_alias<_Types...>; 9642: using _Base::_Base; 9642: 9642: 9642: _Move_ctor_base(_Move_ctor_base&& __rhs) 9642: noexcept(_Traits<_Types...>::_S_nothrow_move_ctor) 9642: { 9642: __variant::__raw_idx_visit( 9642: [this](auto&& __rhs_mem, auto __rhs_index) mutable 9642: { 9642: constexpr size_t __j = __rhs_index; 9642: if constexpr (__j != variant_npos) 9642: std::_Construct(std::__addressof(this->_M_u), 9642: in_place_index<__j>, 9642: std::forward(__rhs_mem)); 9642: }, __variant_cast<_Types...>(std::move(__rhs))); 9642: this->_M_index = __rhs._M_index; 9642: } 9642: 9642: _Move_ctor_base(const _Move_ctor_base&) = default; 9642: _Move_ctor_base& operator=(const _Move_ctor_base&) = default; 9642: _Move_ctor_base& operator=(_Move_ctor_base&&) = default; 9642: }; 9642: 9642: template 9642: struct _Move_ctor_base : _Copy_ctor_alias<_Types...> 9642: { 9642: using _Base = _Copy_ctor_alias<_Types...>; 9642: using _Base::_Base; 9642: }; 9642: 9642: template 9642: using _Move_ctor_alias = 9642: _Move_ctor_base<_Traits<_Types...>::_S_trivial_move_ctor, _Types...>; 9642: 9642: template 9642: struct _Copy_assign_base : _Move_ctor_alias<_Types...> 9642: { 9642: using _Base = _Move_ctor_alias<_Types...>; 9642: using _Base::_Base; 9642: 9642: 9642: _Copy_assign_base& 9642: operator=(const _Copy_assign_base& __rhs) 9642: noexcept(_Traits<_Types...>::_S_nothrow_copy_assign) 9642: { 9642: __variant::__raw_idx_visit( 9642: [this](auto&& __rhs_mem, auto __rhs_index) mutable 9642: { 9642: constexpr size_t __j = __rhs_index; 9642: if constexpr (__j == variant_npos) 9642: this->_M_reset(); 9642: else if (this->_M_index == __j) 9642: __variant::__get<__j>(*this) = __rhs_mem; 9642: else 9642: { 9642: using _Tj = typename _Nth_type<__j, _Types...>::type; 9642: if constexpr (is_nothrow_copy_constructible_v<_Tj> 9642: || !is_nothrow_move_constructible_v<_Tj>) 9642: __variant::__emplace<__j>(*this, __rhs_mem); 9642: else 9642: { 9642: using _Variant = variant<_Types...>; 9642: _Variant& __self = __variant_cast<_Types...>(*this); 9642: __self = _Variant(in_place_index<__j>, __rhs_mem); 9642: } 9642: } 9642: }, __variant_cast<_Types...>(__rhs)); 9642: return *this; 9642: } 9642: 9642: _Copy_assign_base(const _Copy_assign_base&) = default; 9642: _Copy_assign_base(_Copy_assign_base&&) = default; 9642: _Copy_assign_base& operator=(_Copy_assign_base&&) = default; 9642: }; 9642: 9642: template 9642: struct _Copy_assign_base : _Move_ctor_alias<_Types...> 9642: { 9642: using _Base = _Move_ctor_alias<_Types...>; 9642: using _Base::_Base; 9642: }; 9642: 9642: template 9642: using _Copy_assign_alias = 9642: _Copy_assign_base<_Traits<_Types...>::_S_trivial_copy_assign, _Types...>; 9642: 9642: template 9642: struct _Move_assign_base : _Copy_assign_alias<_Types...> 9642: { 9642: using _Base = _Copy_assign_alias<_Types...>; 9642: using _Base::_Base; 9642: 9642: 9642: _Move_assign_base& 9642: operator=(_Move_assign_base&& __rhs) 9642: noexcept(_Traits<_Types...>::_S_nothrow_move_assign) 9642: { 9642: __variant::__raw_idx_visit( 9642: [this](auto&& __rhs_mem, auto __rhs_index) mutable 9642: { 9642: constexpr size_t __j = __rhs_index; 9642: if constexpr (__j != variant_npos) 9642: { 9642: if (this->_M_index == __j) 9642: __variant::__get<__j>(*this) = std::move(__rhs_mem); 9642: else 9642: { 9642: using _Tj = typename _Nth_type<__j, _Types...>::type; 9642: if constexpr (is_nothrow_move_constructible_v<_Tj>) 9642: __variant::__emplace<__j>(*this, std::move(__rhs_mem)); 9642: else 9642: { 9642: using _Variant = variant<_Types...>; 9642: _Variant& __self = __variant_cast<_Types...>(*this); 9642: __self.template emplace<__j>(std::move(__rhs_mem)); 9642: } 9642: } 9642: } 9642: else 9642: this->_M_reset(); 9642: }, __variant_cast<_Types...>(__rhs)); 9642: return *this; 9642: } 9642: 9642: _Move_assign_base(const _Move_assign_base&) = default; 9642: _Move_assign_base(_Move_assign_base&&) = default; 9642: _Move_assign_base& operator=(const _Move_assign_base&) = default; 9642: }; 9642: 9642: template 9642: struct _Move_assign_base : _Copy_assign_alias<_Types...> 9642: { 9642: using _Base = _Copy_assign_alias<_Types...>; 9642: using _Base::_Base; 9642: }; 9642: 9642: template 9642: using _Move_assign_alias = 9642: _Move_assign_base<_Traits<_Types...>::_S_trivial_move_assign, _Types...>; 9642: 9642: template 9642: struct _Variant_base : _Move_assign_alias<_Types...> 9642: { 9642: using _Base = _Move_assign_alias<_Types...>; 9642: 9642: constexpr 9642: _Variant_base() noexcept(_Traits<_Types...>::_S_nothrow_default_ctor) 9642: : _Variant_base(in_place_index<0>) { } 9642: 9642: template 9642: constexpr explicit 9642: _Variant_base(in_place_index_t<_Np> __i, _Args&&... __args) 9642: : _Base(__i, std::forward<_Args>(__args)...) 9642: { } 9642: 9642: _Variant_base(const _Variant_base&) = default; 9642: _Variant_base(_Variant_base&&) = default; 9642: _Variant_base& operator=(const _Variant_base&) = default; 9642: _Variant_base& operator=(_Variant_base&&) = default; 9642: }; 9642: 9642: template 9642: inline constexpr bool __exactly_once 9642: = std::__find_uniq_type_in_pack<_Tp, _Types...>() < sizeof...(_Types); 9642: 9642: 9642: template struct _Arr { _Ti _M_x[1]; }; 9642: 9642: 9642: template 9642: struct _Build_FUN 9642: { 9642: 9642: 9642: void _S_fun() = delete; 9642: }; 9642: 9642: 9642: template 9642: struct _Build_FUN<_Ind, _Tp, _Ti, 9642: void_t{{std::declval<_Tp>()}})>> 9642: { 9642: 9642: static integral_constant _S_fun(_Ti); 9642: }; 9642: 9642: template>> 9642: struct _Build_FUNs; 9642: 9642: template 9642: struct _Build_FUNs<_Tp, variant<_Ti...>, index_sequence<_Ind...>> 9642: : _Build_FUN<_Ind, _Tp, _Ti>... 9642: { 9642: using _Build_FUN<_Ind, _Tp, _Ti>::_S_fun...; 9642: }; 9642: 9642: 9642: 9642: template 9642: using _FUN_type 9642: = decltype(_Build_FUNs<_Tp, _Variant>::_S_fun(std::declval<_Tp>())); 9642: 9642: 9642: template 9642: inline constexpr size_t 9642: __accepted_index = variant_npos; 9642: 9642: template 9642: inline constexpr size_t 9642: __accepted_index<_Tp, _Variant, void_t<_FUN_type<_Tp, _Variant>>> 9642: = _FUN_type<_Tp, _Variant>::value; 9642: 9642: template> 9642: inline constexpr bool 9642: __extra_visit_slot_needed = false; 9642: 9642: template 9642: inline constexpr bool 9642: __extra_visit_slot_needed<__variant_cookie, _Var, variant<_Types...>> 9642: = !__variant::__never_valueless<_Types...>(); 9642: 9642: template 9642: inline constexpr bool 9642: __extra_visit_slot_needed<__variant_idx_cookie, _Var, variant<_Types...>> 9642: = !__variant::__never_valueless<_Types...>(); 9642: 9642: 9642: template 9642: struct _Multi_array; 9642: 9642: 9642: template 9642: struct _Multi_array<_Tp> 9642: { 9642: template 9642: struct __untag_result 9642: : false_type 9642: { using element_type = _Tp; }; 9642: 9642: #pragma GCC diagnostic push 9642: #pragma GCC diagnostic ignored "-Wignored-qualifiers" 9642: template 9642: struct __untag_result 9642: : false_type 9642: { using element_type = void(*)(_Args...); }; 9642: #pragma GCC diagnostic pop 9642: 9642: template 9642: struct __untag_result<__variant_cookie(*)(_Args...)> 9642: : false_type 9642: { using element_type = void(*)(_Args...); }; 9642: 9642: template 9642: struct __untag_result<__variant_idx_cookie(*)(_Args...)> 9642: : false_type 9642: { using element_type = void(*)(_Args...); }; 9642: 9642: template 9642: struct __untag_result<__deduce_visit_result<_Res>(*)(_Args...)> 9642: : true_type 9642: { using element_type = _Res(*)(_Args...); }; 9642: 9642: using __result_is_deduced = __untag_result<_Tp>; 9642: 9642: constexpr const typename __untag_result<_Tp>::element_type& 9642: _M_access() const 9642: { return _M_data; } 9642: 9642: typename __untag_result<_Tp>::element_type _M_data; 9642: }; 9642: 9642: 9642: template 9642: struct _Multi_array<_Ret(*)(_Visitor, _Variants...), __first, __rest...> 9642: { 9642: static constexpr size_t __index = 9642: sizeof...(_Variants) - sizeof...(__rest) - 1; 9642: 9642: using _Variant = typename _Nth_type<__index, _Variants...>::type; 9642: 9642: static constexpr int __do_cookie = 9642: __extra_visit_slot_needed<_Ret, _Variant> ? 1 : 0; 9642: 9642: using _Tp = _Ret(*)(_Visitor, _Variants...); 9642: 9642: template 9642: constexpr decltype(auto) 9642: _M_access(size_t __first_index, _Args... __rest_indices) const 9642: { 9642: return _M_arr[__first_index + __do_cookie] 9642: ._M_access(__rest_indices...); 9642: } 9642: 9642: _Multi_array<_Tp, __rest...> _M_arr[__first + __do_cookie]; 9642: }; 9642: # 949 "/usr/include/c++/13/variant" 3 9642: template 9642: struct __gen_vtable_impl; 9642: # 959 "/usr/include/c++/13/variant" 3 9642: template 9642: struct __gen_vtable_impl< 9642: _Multi_array<_Result_type (*)(_Visitor, _Variants...), __dimensions...>, 9642: std::index_sequence<__indices...>> 9642: { 9642: using _Next = 9642: remove_reference_t::type>; 9642: using _Array_type = 9642: _Multi_array<_Result_type (*)(_Visitor, _Variants...), 9642: __dimensions...>; 9642: 9642: static constexpr _Array_type 9642: _S_apply() 9642: { 9642: _Array_type __vtable{}; 9642: _S_apply_all_alts( 9642: __vtable, make_index_sequence>()); 9642: return __vtable; 9642: } 9642: 9642: template 9642: static constexpr void 9642: _S_apply_all_alts(_Array_type& __vtable, 9642: std::index_sequence<__var_indices...>) 9642: { 9642: if constexpr (__extra_visit_slot_needed<_Result_type, _Next>) 9642: (_S_apply_single_alt( 9642: __vtable._M_arr[__var_indices + 1], 9642: &(__vtable._M_arr[0])), ...); 9642: else 9642: (_S_apply_single_alt( 9642: __vtable._M_arr[__var_indices]), ...); 9642: } 9642: 9642: template 9642: static constexpr void 9642: _S_apply_single_alt(_Tp& __element, _Tp* __cookie_element = nullptr) 9642: { 9642: if constexpr (__do_cookie) 9642: { 9642: __element = __gen_vtable_impl< 9642: _Tp, 9642: std::index_sequence<__indices..., __index>>::_S_apply(); 9642: *__cookie_element = __gen_vtable_impl< 9642: _Tp, 9642: std::index_sequence<__indices..., variant_npos>>::_S_apply(); 9642: } 9642: else 9642: { 9642: auto __tmp_element = __gen_vtable_impl< 9642: remove_reference_t, 9642: std::index_sequence<__indices..., __index>>::_S_apply(); 9642: static_assert(is_same_v<_Tp, decltype(__tmp_element)>, 9642: "std::visit requires the visitor to have the same " 9642: "return type for all alternatives of a variant"); 9642: __element = __tmp_element; 9642: } 9642: } 9642: }; 9642: 9642: 9642: 9642: 9642: template 9642: struct __gen_vtable_impl< 9642: _Multi_array<_Result_type (*)(_Visitor, _Variants...)>, 9642: std::index_sequence<__indices...>> 9642: { 9642: using _Array_type = 9642: _Multi_array<_Result_type (*)(_Visitor, _Variants...)>; 9642: 9642: template 9642: static constexpr decltype(auto) 9642: __element_by_index_or_cookie(_Variant&& __var) noexcept 9642: { 9642: if constexpr (__index != variant_npos) 9642: return __variant::__get<__index>(std::forward<_Variant>(__var)); 9642: else 9642: return __variant_cookie{}; 9642: } 9642: 9642: static constexpr decltype(auto) 9642: __visit_invoke(_Visitor&& __visitor, _Variants... __vars) 9642: { 9642: if constexpr (is_same_v<_Result_type, __variant_idx_cookie>) 9642: 9642: 9642: std::__invoke(std::forward<_Visitor>(__visitor), 9642: __element_by_index_or_cookie<__indices>( 9642: std::forward<_Variants>(__vars))..., 9642: integral_constant()...); 9642: else if constexpr (is_same_v<_Result_type, __variant_cookie>) 9642: 9642: std::__invoke(std::forward<_Visitor>(__visitor), 9642: __element_by_index_or_cookie<__indices>( 9642: std::forward<_Variants>(__vars))...); 9642: else if constexpr (_Array_type::__result_is_deduced::value) 9642: 9642: return std::__invoke(std::forward<_Visitor>(__visitor), 9642: __element_by_index_or_cookie<__indices>( 9642: std::forward<_Variants>(__vars))...); 9642: else 9642: return std::__invoke_r<_Result_type>( 9642: std::forward<_Visitor>(__visitor), 9642: __variant::__get<__indices>(std::forward<_Variants>(__vars))...); 9642: } 9642: 9642: static constexpr auto 9642: _S_apply() 9642: { 9642: if constexpr (_Array_type::__result_is_deduced::value) 9642: { 9642: constexpr bool __visit_ret_type_mismatch = 9642: !is_same_v(), 9642: std::declval<_Variants>()...))>; 9642: if constexpr (__visit_ret_type_mismatch) 9642: { 9642: struct __cannot_match {}; 9642: return __cannot_match{}; 9642: } 9642: else 9642: return _Array_type{&__visit_invoke}; 9642: } 9642: else 9642: return _Array_type{&__visit_invoke}; 9642: } 9642: }; 9642: 9642: template 9642: struct __gen_vtable 9642: { 9642: using _Array_type = 9642: _Multi_array<_Result_type (*)(_Visitor, _Variants...), 9642: variant_size_v>...>; 9642: 9642: static constexpr _Array_type _S_vtable 9642: = __gen_vtable_impl<_Array_type, std::index_sequence<>>::_S_apply(); 9642: }; 9642: 9642: template 9642: struct _Base_dedup : public _Tp { }; 9642: 9642: template 9642: struct _Variant_hash_base; 9642: 9642: template 9642: struct _Variant_hash_base, 9642: std::index_sequence<__indices...>> 9642: : _Base_dedup<__indices, __poison_hash>>... { }; 9642: 9642: 9642: template())), 9642: typename _Tp = variant_alternative_t<_Np, remove_reference_t<_AsV>>> 9642: using __get_t 9642: = __conditional_t, _Tp&, _Tp&&>; 9642: 9642: 9642: template 9642: using __visit_result_t 9642: = invoke_result_t<_Visitor, __get_t<0, _Variants>...>; 9642: 9642: template 9642: constexpr inline bool __same_types = (is_same_v<_Tp, _Types> && ...); 9642: 9642: template 9642: constexpr bool __check_visitor_results(std::index_sequence<_Idxs...>) 9642: { 9642: return __same_types< 9642: invoke_result_t<_Visitor, __get_t<_Idxs, _Variant>>... 9642: >; 9642: } 9642: 9642: } 9642: } 9642: 9642: template 9642: constexpr bool 9642: holds_alternative(const variant<_Types...>& __v) noexcept 9642: { 9642: static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, 9642: "T must occur exactly once in alternatives"); 9642: return __v.index() == std::__find_uniq_type_in_pack<_Tp, _Types...>(); 9642: } 9642: 9642: template 9642: constexpr _Tp& 9642: get(variant<_Types...>& __v) 9642: { 9642: static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, 9642: "T must occur exactly once in alternatives"); 9642: constexpr size_t __n = std::__find_uniq_type_in_pack<_Tp, _Types...>(); 9642: return std::get<__n>(__v); 9642: } 9642: 9642: template 9642: constexpr _Tp&& 9642: get(variant<_Types...>&& __v) 9642: { 9642: static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, 9642: "T must occur exactly once in alternatives"); 9642: constexpr size_t __n = std::__find_uniq_type_in_pack<_Tp, _Types...>(); 9642: return std::get<__n>(std::move(__v)); 9642: } 9642: 9642: template 9642: constexpr const _Tp& 9642: get(const variant<_Types...>& __v) 9642: { 9642: static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, 9642: "T must occur exactly once in alternatives"); 9642: constexpr size_t __n = std::__find_uniq_type_in_pack<_Tp, _Types...>(); 9642: return std::get<__n>(__v); 9642: } 9642: 9642: template 9642: constexpr const _Tp&& 9642: get(const variant<_Types...>&& __v) 9642: { 9642: static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, 9642: "T must occur exactly once in alternatives"); 9642: constexpr size_t __n = std::__find_uniq_type_in_pack<_Tp, _Types...>(); 9642: return std::get<__n>(std::move(__v)); 9642: } 9642: 9642: template 9642: constexpr add_pointer_t>> 9642: get_if(variant<_Types...>* __ptr) noexcept 9642: { 9642: using _Alternative_type = variant_alternative_t<_Np, variant<_Types...>>; 9642: static_assert(_Np < sizeof...(_Types), 9642: "The index must be in [0, number of alternatives)"); 9642: static_assert(!is_void_v<_Alternative_type>, "_Tp must not be void"); 9642: if (__ptr && __ptr->index() == _Np) 9642: return std::addressof(__detail::__variant::__get<_Np>(*__ptr)); 9642: return nullptr; 9642: } 9642: 9642: template 9642: constexpr 9642: add_pointer_t>> 9642: get_if(const variant<_Types...>* __ptr) noexcept 9642: { 9642: using _Alternative_type = variant_alternative_t<_Np, variant<_Types...>>; 9642: static_assert(_Np < sizeof...(_Types), 9642: "The index must be in [0, number of alternatives)"); 9642: static_assert(!is_void_v<_Alternative_type>, "_Tp must not be void"); 9642: if (__ptr && __ptr->index() == _Np) 9642: return std::addressof(__detail::__variant::__get<_Np>(*__ptr)); 9642: return nullptr; 9642: } 9642: 9642: template 9642: constexpr add_pointer_t<_Tp> 9642: get_if(variant<_Types...>* __ptr) noexcept 9642: { 9642: static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, 9642: "T must occur exactly once in alternatives"); 9642: static_assert(!is_void_v<_Tp>, "_Tp must not be void"); 9642: constexpr size_t __n = std::__find_uniq_type_in_pack<_Tp, _Types...>(); 9642: return std::get_if<__n>(__ptr); 9642: } 9642: 9642: template 9642: constexpr add_pointer_t 9642: get_if(const variant<_Types...>* __ptr) noexcept 9642: { 9642: static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, 9642: "T must occur exactly once in alternatives"); 9642: static_assert(!is_void_v<_Tp>, "_Tp must not be void"); 9642: constexpr size_t __n = std::__find_uniq_type_in_pack<_Tp, _Types...>(); 9642: return std::get_if<__n>(__ptr); 9642: } 9642: 9642: struct monostate { }; 9642: # 1264 "/usr/include/c++/13/variant" 3 9642: template constexpr bool operator <(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) { bool __ret = true; __detail::__variant::__raw_idx_visit( [&__ret, &__lhs] (auto&& __rhs_mem, auto __rhs_index) mutable { if constexpr (__rhs_index != variant_npos) { if (__lhs.index() == __rhs_index) { auto& __this_mem = std::get<__rhs_index>(__lhs); __ret = __this_mem < __rhs_mem; } else __ret = (__lhs.index() + 1) < (__rhs_index + 1); } else __ret = (__lhs.index() + 1) < (__rhs_index + 1); }, __rhs); return __ret; } 9642: template constexpr bool operator <=(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) { bool __ret = true; __detail::__variant::__raw_idx_visit( [&__ret, &__lhs] (auto&& __rhs_mem, auto __rhs_index) mutable { if constexpr (__rhs_index != variant_npos) { if (__lhs.index() == __rhs_index) { auto& __this_mem = std::get<__rhs_index>(__lhs); __ret = __this_mem <= __rhs_mem; } else __ret = (__lhs.index() + 1) <= (__rhs_index + 1); } else __ret = (__lhs.index() + 1) <= (__rhs_index + 1); }, __rhs); return __ret; } 9642: template constexpr bool operator ==(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) { bool __ret = true; __detail::__variant::__raw_idx_visit( [&__ret, &__lhs] (auto&& __rhs_mem, auto __rhs_index) mutable { if constexpr (__rhs_index != variant_npos) { if (__lhs.index() == __rhs_index) { auto& __this_mem = std::get<__rhs_index>(__lhs); __ret = __this_mem == __rhs_mem; } else __ret = (__lhs.index() + 1) == (__rhs_index + 1); } else __ret = (__lhs.index() + 1) == (__rhs_index + 1); }, __rhs); return __ret; } 9642: template constexpr bool operator !=(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) { bool __ret = true; __detail::__variant::__raw_idx_visit( [&__ret, &__lhs] (auto&& __rhs_mem, auto __rhs_index) mutable { if constexpr (__rhs_index != variant_npos) { if (__lhs.index() == __rhs_index) { auto& __this_mem = std::get<__rhs_index>(__lhs); __ret = __this_mem != __rhs_mem; } else __ret = (__lhs.index() + 1) != (__rhs_index + 1); } else __ret = (__lhs.index() + 1) != (__rhs_index + 1); }, __rhs); return __ret; } 9642: template constexpr bool operator >=(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) { bool __ret = true; __detail::__variant::__raw_idx_visit( [&__ret, &__lhs] (auto&& __rhs_mem, auto __rhs_index) mutable { if constexpr (__rhs_index != variant_npos) { if (__lhs.index() == __rhs_index) { auto& __this_mem = std::get<__rhs_index>(__lhs); __ret = __this_mem >= __rhs_mem; } else __ret = (__lhs.index() + 1) >= (__rhs_index + 1); } else __ret = (__lhs.index() + 1) >= (__rhs_index + 1); }, __rhs); return __ret; } 9642: template constexpr bool operator >(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) { bool __ret = true; __detail::__variant::__raw_idx_visit( [&__ret, &__lhs] (auto&& __rhs_mem, auto __rhs_index) mutable { if constexpr (__rhs_index != variant_npos) { if (__lhs.index() == __rhs_index) { auto& __this_mem = std::get<__rhs_index>(__lhs); __ret = __this_mem > __rhs_mem; } else __ret = (__lhs.index() + 1) > (__rhs_index + 1); } else __ret = (__lhs.index() + 1) > (__rhs_index + 1); }, __rhs); return __ret; } 9642: 9642: 9642: 9642: constexpr bool operator==(monostate, monostate) noexcept { return true; } 9642: # 1305 "/usr/include/c++/13/variant" 3 9642: constexpr bool operator!=(monostate, monostate) noexcept { return false; } 9642: constexpr bool operator<(monostate, monostate) noexcept { return false; } 9642: constexpr bool operator>(monostate, monostate) noexcept { return false; } 9642: constexpr bool operator<=(monostate, monostate) noexcept { return true; } 9642: constexpr bool operator>=(monostate, monostate) noexcept { return true; } 9642: 9642: 9642: template 9642: constexpr __detail::__variant::__visit_result_t<_Visitor, _Variants...> 9642: visit(_Visitor&&, _Variants&&...); 9642: 9642: template 9642: 9642: inline enable_if_t<(is_move_constructible_v<_Types> && ...) 9642: && (is_swappable_v<_Types> && ...)> 9642: swap(variant<_Types...>& __lhs, variant<_Types...>& __rhs) 9642: noexcept(noexcept(__lhs.swap(__rhs))) 9642: { __lhs.swap(__rhs); } 9642: 9642: template 9642: enable_if_t && ...) 9642: && (is_swappable_v<_Types> && ...))> 9642: swap(variant<_Types...>&, variant<_Types...>&) = delete; 9642: 9642: class bad_variant_access : public exception 9642: { 9642: public: 9642: bad_variant_access() noexcept { } 9642: 9642: const char* what() const noexcept override 9642: { return _M_reason; } 9642: 9642: private: 9642: bad_variant_access(const char* __reason) noexcept : _M_reason(__reason) { } 9642: 9642: 9642: const char* _M_reason = "bad variant access"; 9642: 9642: friend void __throw_bad_variant_access(const char* __what); 9642: }; 9642: 9642: 9642: inline void 9642: __throw_bad_variant_access(const char* __what) 9642: { (throw (bad_variant_access(__what))); } 9642: 9642: inline void 9642: __throw_bad_variant_access(bool __valueless) 9642: { 9642: if (__valueless) [[__unlikely__]] 9642: __throw_bad_variant_access("std::get: variant is valueless"); 9642: else 9642: __throw_bad_variant_access("std::get: wrong index for variant"); 9642: } 9642: 9642: template 9642: class variant 9642: : private __detail::__variant::_Variant_base<_Types...>, 9642: private _Enable_default_constructor< 9642: __detail::__variant::_Traits<_Types...>::_S_default_ctor, 9642: variant<_Types...>>, 9642: private _Enable_copy_move< 9642: __detail::__variant::_Traits<_Types...>::_S_copy_ctor, 9642: __detail::__variant::_Traits<_Types...>::_S_copy_assign, 9642: __detail::__variant::_Traits<_Types...>::_S_move_ctor, 9642: __detail::__variant::_Traits<_Types...>::_S_move_assign, 9642: variant<_Types...>> 9642: { 9642: private: 9642: template 9642: friend decltype(auto) 9642: __variant_cast(_Tp&&); 9642: 9642: static_assert(sizeof...(_Types) > 0, 9642: "variant must have at least one alternative"); 9642: static_assert(!(std::is_reference_v<_Types> || ...), 9642: "variant must have no reference alternative"); 9642: static_assert(!(std::is_void_v<_Types> || ...), 9642: "variant must have no void alternative"); 9642: 9642: using _Base = __detail::__variant::_Variant_base<_Types...>; 9642: using _Default_ctor_enabler = 9642: _Enable_default_constructor< 9642: __detail::__variant::_Traits<_Types...>::_S_default_ctor, 9642: variant<_Types...>>; 9642: 9642: template 9642: static constexpr bool __not_self 9642: = !is_same_v<__remove_cvref_t<_Tp>, variant>; 9642: 9642: template 9642: static constexpr bool 9642: __exactly_once = __detail::__variant::__exactly_once<_Tp, _Types...>; 9642: 9642: template 9642: static constexpr size_t __accepted_index 9642: = __detail::__variant::__accepted_index<_Tp, variant>; 9642: 9642: template> 9642: using __to_type = typename _Nth_type<_Np, _Types...>::type; 9642: 9642: template>> 9642: using __accepted_type = __to_type<__accepted_index<_Tp>>; 9642: 9642: template 9642: static constexpr size_t __index_of 9642: = std::__find_uniq_type_in_pack<_Tp, _Types...>(); 9642: 9642: using _Traits = __detail::__variant::_Traits<_Types...>; 9642: 9642: template 9642: struct __is_in_place_tag : false_type { }; 9642: template 9642: struct __is_in_place_tag> : true_type { }; 9642: template 9642: struct __is_in_place_tag> : true_type { }; 9642: 9642: template 9642: static constexpr bool __not_in_place_tag 9642: = !__is_in_place_tag<__remove_cvref_t<_Tp>>::value; 9642: 9642: public: 9642: variant() = default; 9642: variant(const variant& __rhs) = default; 9642: variant(variant&&) = default; 9642: variant& operator=(const variant&) = default; 9642: variant& operator=(variant&&) = default; 9642: ~variant() = default; 9642: 9642: template, 9642: typename = enable_if_t<__not_in_place_tag<_Tp>>, 9642: typename _Tj = __accepted_type<_Tp&&>, 9642: typename = enable_if_t<__exactly_once<_Tj> 9642: && is_constructible_v<_Tj, _Tp>>> 9642: constexpr 9642: variant(_Tp&& __t) 9642: noexcept(is_nothrow_constructible_v<_Tj, _Tp>) 9642: : variant(in_place_index<__accepted_index<_Tp>>, 9642: std::forward<_Tp>(__t)) 9642: { } 9642: 9642: template 9642: && is_constructible_v<_Tp, _Args...>>> 9642: constexpr explicit 9642: variant(in_place_type_t<_Tp>, _Args&&... __args) 9642: : variant(in_place_index<__index_of<_Tp>>, 9642: std::forward<_Args>(__args)...) 9642: { } 9642: 9642: template 9642: && is_constructible_v<_Tp, 9642: initializer_list<_Up>&, _Args...>>> 9642: constexpr explicit 9642: variant(in_place_type_t<_Tp>, initializer_list<_Up> __il, 9642: _Args&&... __args) 9642: : variant(in_place_index<__index_of<_Tp>>, __il, 9642: std::forward<_Args>(__args)...) 9642: { } 9642: 9642: template, 9642: typename = enable_if_t>> 9642: constexpr explicit 9642: variant(in_place_index_t<_Np>, _Args&&... __args) 9642: : _Base(in_place_index<_Np>, std::forward<_Args>(__args)...), 9642: _Default_ctor_enabler(_Enable_default_constructor_tag{}) 9642: { } 9642: 9642: template, 9642: typename = enable_if_t&, 9642: _Args...>>> 9642: constexpr explicit 9642: variant(in_place_index_t<_Np>, initializer_list<_Up> __il, 9642: _Args&&... __args) 9642: : _Base(in_place_index<_Np>, __il, std::forward<_Args>(__args)...), 9642: _Default_ctor_enabler(_Enable_default_constructor_tag{}) 9642: { } 9642: 9642: template 9642: 9642: enable_if_t<__exactly_once<__accepted_type<_Tp&&>> 9642: && is_constructible_v<__accepted_type<_Tp&&>, _Tp> 9642: && is_assignable_v<__accepted_type<_Tp&&>&, _Tp>, 9642: variant&> 9642: operator=(_Tp&& __rhs) 9642: noexcept(is_nothrow_assignable_v<__accepted_type<_Tp&&>&, _Tp> 9642: && is_nothrow_constructible_v<__accepted_type<_Tp&&>, _Tp>) 9642: { 9642: constexpr auto __index = __accepted_index<_Tp>; 9642: if (index() == __index) 9642: std::get<__index>(*this) = std::forward<_Tp>(__rhs); 9642: else 9642: { 9642: using _Tj = __accepted_type<_Tp&&>; 9642: if constexpr (is_nothrow_constructible_v<_Tj, _Tp> 9642: || !is_nothrow_move_constructible_v<_Tj>) 9642: this->emplace<__index>(std::forward<_Tp>(__rhs)); 9642: else 9642: 9642: 9642: this->emplace<__index>(_Tj(std::forward<_Tp>(__rhs))); 9642: } 9642: return *this; 9642: } 9642: 9642: template 9642: 9642: enable_if_t && __exactly_once<_Tp>, 9642: _Tp&> 9642: emplace(_Args&&... __args) 9642: { 9642: constexpr size_t __index = __index_of<_Tp>; 9642: return this->emplace<__index>(std::forward<_Args>(__args)...); 9642: } 9642: 9642: template 9642: 9642: enable_if_t&, _Args...> 9642: && __exactly_once<_Tp>, 9642: _Tp&> 9642: emplace(initializer_list<_Up> __il, _Args&&... __args) 9642: { 9642: constexpr size_t __index = __index_of<_Tp>; 9642: return this->emplace<__index>(__il, std::forward<_Args>(__args)...); 9642: } 9642: 9642: template 9642: 9642: enable_if_t, _Args...>, 9642: __to_type<_Np>&> 9642: emplace(_Args&&... __args) 9642: { 9642: namespace __variant = std::__detail::__variant; 9642: using type = typename _Nth_type<_Np, _Types...>::type; 9642: 9642: 9642: if constexpr (is_nothrow_constructible_v) 9642: { 9642: __variant::__emplace<_Np>(*this, std::forward<_Args>(__args)...); 9642: } 9642: else if constexpr (is_scalar_v) 9642: { 9642: 9642: const type __tmp(std::forward<_Args>(__args)...); 9642: 9642: __variant::__emplace<_Np>(*this, __tmp); 9642: } 9642: else if constexpr (__variant::_Never_valueless_alt() 9642: && _Traits::_S_move_assign) 9642: { 9642: 9642: variant __tmp(in_place_index<_Np>, 9642: std::forward<_Args>(__args)...); 9642: 9642: *this = std::move(__tmp); 9642: } 9642: else 9642: { 9642: 9642: 9642: __variant::__emplace<_Np>(*this, std::forward<_Args>(__args)...); 9642: } 9642: return std::get<_Np>(*this); 9642: } 9642: 9642: template 9642: 9642: enable_if_t, 9642: initializer_list<_Up>&, _Args...>, 9642: __to_type<_Np>&> 9642: emplace(initializer_list<_Up> __il, _Args&&... __args) 9642: { 9642: namespace __variant = std::__detail::__variant; 9642: using type = typename _Nth_type<_Np, _Types...>::type; 9642: 9642: 9642: if constexpr (is_nothrow_constructible_v&, 9642: _Args...>) 9642: { 9642: __variant::__emplace<_Np>(*this, __il, 9642: std::forward<_Args>(__args)...); 9642: } 9642: else if constexpr (__variant::_Never_valueless_alt() 9642: && _Traits::_S_move_assign) 9642: { 9642: 9642: variant __tmp(in_place_index<_Np>, __il, 9642: std::forward<_Args>(__args)...); 9642: 9642: *this = std::move(__tmp); 9642: } 9642: else 9642: { 9642: 9642: 9642: __variant::__emplace<_Np>(*this, __il, 9642: std::forward<_Args>(__args)...); 9642: } 9642: return std::get<_Np>(*this); 9642: } 9642: 9642: template 9642: enable_if_t emplace(_Args&&...) = delete; 9642: 9642: template 9642: enable_if_t> emplace(_Args&&...) = delete; 9642: 9642: constexpr bool valueless_by_exception() const noexcept 9642: { return !this->_M_valid(); } 9642: 9642: constexpr size_t index() const noexcept 9642: { 9642: using __index_type = typename _Base::__index_type; 9642: if constexpr (__detail::__variant::__never_valueless<_Types...>()) 9642: return this->_M_index; 9642: else if constexpr (sizeof...(_Types) <= __index_type(-1) / 2) 9642: return make_signed_t<__index_type>(this->_M_index); 9642: else 9642: return size_t(__index_type(this->_M_index + 1)) - 1; 9642: } 9642: 9642: 9642: void 9642: swap(variant& __rhs) 9642: noexcept((__is_nothrow_swappable<_Types>::value && ...) 9642: && is_nothrow_move_constructible_v) 9642: { 9642: static_assert((is_move_constructible_v<_Types> && ...)); 9642: 9642: 9642: if (__rhs.valueless_by_exception()) [[__unlikely__]] 9642: { 9642: if (!this->valueless_by_exception()) [[__likely__]] 9642: __rhs.swap(*this); 9642: return; 9642: } 9642: 9642: namespace __variant = __detail::__variant; 9642: 9642: __variant::__raw_idx_visit( 9642: [this, &__rhs](auto&& __rhs_mem, auto __rhs_index) mutable 9642: { 9642: constexpr size_t __j = __rhs_index; 9642: if constexpr (__j != variant_npos) 9642: { 9642: if (this->index() == __j) 9642: { 9642: using std::swap; 9642: swap(std::get<__j>(*this), __rhs_mem); 9642: } 9642: else 9642: { 9642: auto __tmp(std::move(__rhs_mem)); 9642: 9642: if constexpr (_Traits::_S_trivial_move_assign) 9642: __rhs = std::move(*this); 9642: else 9642: __variant::__raw_idx_visit( 9642: [&__rhs](auto&& __this_mem, auto __this_index) mutable 9642: { 9642: constexpr size_t __k = __this_index; 9642: if constexpr (__k != variant_npos) 9642: __variant::__emplace<__k>(__rhs, 9642: std::move(__this_mem)); 9642: }, *this); 9642: 9642: __variant::__emplace<__j>(*this, std::move(__tmp)); 9642: } 9642: } 9642: }, __rhs); 9642: } 9642: 9642: 9642: 9642: 9642: 9642: 9642: private: 9642: template 9642: friend constexpr decltype(auto) 9642: __detail::__variant::__get(_Vp&& __v) noexcept; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: template friend constexpr bool operator <(const variant<_Tp...>& __lhs, const variant<_Tp...>& __rhs); 9642: template friend constexpr bool operator <=(const variant<_Tp...>& __lhs, const variant<_Tp...>& __rhs); 9642: template friend constexpr bool operator ==(const variant<_Tp...>& __lhs, const variant<_Tp...>& __rhs); 9642: template friend constexpr bool operator !=(const variant<_Tp...>& __lhs, const variant<_Tp...>& __rhs); 9642: template friend constexpr bool operator >=(const variant<_Tp...>& __lhs, const variant<_Tp...>& __rhs); 9642: template friend constexpr bool operator >(const variant<_Tp...>& __lhs, const variant<_Tp...>& __rhs); 9642: 9642: 9642: }; 9642: 9642: template 9642: constexpr variant_alternative_t<_Np, variant<_Types...>>& 9642: get(variant<_Types...>& __v) 9642: { 9642: static_assert(_Np < sizeof...(_Types), 9642: "The index must be in [0, number of alternatives)"); 9642: if (__v.index() != _Np) 9642: __throw_bad_variant_access(__v.valueless_by_exception()); 9642: return __detail::__variant::__get<_Np>(__v); 9642: } 9642: 9642: template 9642: constexpr variant_alternative_t<_Np, variant<_Types...>>&& 9642: get(variant<_Types...>&& __v) 9642: { 9642: static_assert(_Np < sizeof...(_Types), 9642: "The index must be in [0, number of alternatives)"); 9642: if (__v.index() != _Np) 9642: __throw_bad_variant_access(__v.valueless_by_exception()); 9642: return __detail::__variant::__get<_Np>(std::move(__v)); 9642: } 9642: 9642: template 9642: constexpr const variant_alternative_t<_Np, variant<_Types...>>& 9642: get(const variant<_Types...>& __v) 9642: { 9642: static_assert(_Np < sizeof...(_Types), 9642: "The index must be in [0, number of alternatives)"); 9642: if (__v.index() != _Np) 9642: __throw_bad_variant_access(__v.valueless_by_exception()); 9642: return __detail::__variant::__get<_Np>(__v); 9642: } 9642: 9642: template 9642: constexpr const variant_alternative_t<_Np, variant<_Types...>>&& 9642: get(const variant<_Types...>&& __v) 9642: { 9642: static_assert(_Np < sizeof...(_Types), 9642: "The index must be in [0, number of alternatives)"); 9642: if (__v.index() != _Np) 9642: __throw_bad_variant_access(__v.valueless_by_exception()); 9642: return __detail::__variant::__get<_Np>(std::move(__v)); 9642: } 9642: 9642: 9642: template 9642: constexpr decltype(auto) 9642: __do_visit(_Visitor&& __visitor, _Variants&&... __variants) 9642: { 9642: 9642: if constexpr (sizeof...(_Variants) == 0) 9642: { 9642: if constexpr (is_void_v<_Result_type>) 9642: return (void) std::forward<_Visitor>(__visitor)(); 9642: else 9642: return std::forward<_Visitor>(__visitor)(); 9642: } 9642: else 9642: { 9642: constexpr size_t __max = 11; 9642: 9642: 9642: using _V0 = typename _Nth_type<0, _Variants...>::type; 9642: 9642: constexpr auto __n = variant_size_v>; 9642: 9642: if constexpr (sizeof...(_Variants) > 1 || __n > __max) 9642: { 9642: 9642: constexpr auto& __vtable = __detail::__variant::__gen_vtable< 9642: _Result_type, _Visitor&&, _Variants&&...>::_S_vtable; 9642: 9642: auto __func_ptr = __vtable._M_access(__variants.index()...); 9642: return (*__func_ptr)(std::forward<_Visitor>(__visitor), 9642: std::forward<_Variants>(__variants)...); 9642: } 9642: else 9642: { 9642: 9642: _V0& __v0 9642: = [](_V0& __v, ...) -> _V0& { return __v; }(__variants...); 9642: 9642: using __detail::__variant::_Multi_array; 9642: using __detail::__variant::__gen_vtable_impl; 9642: using _Ma = _Multi_array<_Result_type (*)(_Visitor&&, _V0&&)>; 9642: # 1813 "/usr/include/c++/13/variant" 3 9642: switch (__v0.index()) 9642: { 9642: case 0: { if constexpr (0 < __n) { return __gen_vtable_impl<_Ma, index_sequence<0>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 9642: case 1: { if constexpr (1 < __n) { return __gen_vtable_impl<_Ma, index_sequence<1>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 9642: case 2: { if constexpr (2 < __n) { return __gen_vtable_impl<_Ma, index_sequence<2>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 9642: case 3: { if constexpr (3 < __n) { return __gen_vtable_impl<_Ma, index_sequence<3>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 9642: case 4: { if constexpr (4 < __n) { return __gen_vtable_impl<_Ma, index_sequence<4>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 9642: case 5: { if constexpr (5 < __n) { return __gen_vtable_impl<_Ma, index_sequence<5>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 9642: case 6: { if constexpr (6 < __n) { return __gen_vtable_impl<_Ma, index_sequence<6>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 9642: case 7: { if constexpr (7 < __n) { return __gen_vtable_impl<_Ma, index_sequence<7>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 9642: case 8: { if constexpr (8 < __n) { return __gen_vtable_impl<_Ma, index_sequence<8>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 9642: case 9: { if constexpr (9 < __n) { return __gen_vtable_impl<_Ma, index_sequence<9>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 9642: case 10: { if constexpr (10 < __n) { return __gen_vtable_impl<_Ma, index_sequence<10>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 9642: case variant_npos: 9642: using __detail::__variant::__variant_idx_cookie; 9642: using __detail::__variant::__variant_cookie; 9642: if constexpr (is_same_v<_Result_type, __variant_idx_cookie> 9642: || is_same_v<_Result_type, __variant_cookie>) 9642: { 9642: using _Npos = index_sequence; 9642: return __gen_vtable_impl<_Ma, _Npos>:: 9642: __visit_invoke(std::forward<_Visitor>(__visitor), 9642: std::forward<_V0>(__v0)); 9642: } 9642: else 9642: __builtin_unreachable(); 9642: default: 9642: __builtin_unreachable(); 9642: } 9642: 9642: 9642: } 9642: } 9642: } 9642: 9642: 9642: template 9642: constexpr __detail::__variant::__visit_result_t<_Visitor, _Variants...> 9642: visit(_Visitor&& __visitor, _Variants&&... __variants) 9642: { 9642: namespace __variant = std::__detail::__variant; 9642: 9642: if ((__variant::__as(__variants).valueless_by_exception() || ...)) 9642: __throw_bad_variant_access("std::visit: variant is valueless"); 9642: 9642: using _Result_type 9642: = __detail::__variant::__visit_result_t<_Visitor, _Variants...>; 9642: 9642: using _Tag = __detail::__variant::__deduce_visit_result<_Result_type>; 9642: 9642: if constexpr (sizeof...(_Variants) == 1) 9642: { 9642: using _Vp = decltype(__variant::__as(std::declval<_Variants>()...)); 9642: 9642: constexpr bool __visit_rettypes_match = __detail::__variant:: 9642: __check_visitor_results<_Visitor, _Vp>( 9642: make_index_sequence>>()); 9642: if constexpr (!__visit_rettypes_match) 9642: { 9642: static_assert(__visit_rettypes_match, 9642: "std::visit requires the visitor to have the same " 9642: "return type for all alternatives of a variant"); 9642: return; 9642: } 9642: else 9642: return std::__do_visit<_Tag>( 9642: std::forward<_Visitor>(__visitor), 9642: static_cast<_Vp>(__variants)...); 9642: } 9642: else 9642: return std::__do_visit<_Tag>( 9642: std::forward<_Visitor>(__visitor), 9642: __variant::__as(std::forward<_Variants>(__variants))...); 9642: } 9642: # 1904 "/usr/include/c++/13/variant" 3 9642: template 9642: struct __variant_hash_call_base_impl 9642: { 9642: size_t 9642: operator()(const variant<_Types...>& __t) const 9642: noexcept((is_nothrow_invocable_v>, _Types> && ...)) 9642: { 9642: size_t __ret; 9642: __detail::__variant::__raw_visit( 9642: [&__t, &__ret](auto&& __t_mem) mutable 9642: { 9642: using _Type = __remove_cvref_t; 9642: if constexpr (!is_same_v<_Type, 9642: __detail::__variant::__variant_cookie>) 9642: __ret = std::hash{}(__t.index()) 9642: + std::hash<_Type>{}(__t_mem); 9642: else 9642: __ret = std::hash{}(__t.index()); 9642: }, __t); 9642: return __ret; 9642: } 9642: }; 9642: 9642: template 9642: struct __variant_hash_call_base_impl {}; 9642: 9642: template 9642: using __variant_hash_call_base = 9642: __variant_hash_call_base_impl<(__poison_hash>:: 9642: __enable_hash_call &&...), _Types...>; 9642: 9642: 9642: template 9642: struct hash> 9642: : private __detail::__variant::_Variant_hash_base< 9642: variant<_Types...>, std::index_sequence_for<_Types...>>, 9642: public __variant_hash_call_base<_Types...> 9642: { 9642: using result_type [[__deprecated__]] = size_t; 9642: using argument_type [[__deprecated__]] = variant<_Types...>; 9642: }; 9642: 9642: template<> 9642: struct hash 9642: { 9642: using result_type [[__deprecated__]] = size_t; 9642: using argument_type [[__deprecated__]] = monostate; 9642: 9642: size_t 9642: operator()(const monostate&) const noexcept 9642: { 9642: constexpr size_t __magic_monostate_hash = -7777; 9642: return __magic_monostate_hash; 9642: } 9642: }; 9642: 9642: template 9642: struct __is_fast_hash>> 9642: : bool_constant<(__is_fast_hash<_Types>::value && ...)> 9642: { }; 9642: 9642: 9642: } 9642: # 13 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 2 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 19 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 9642: namespace rocksdb { 9642: 9642: class Slice; 9642: class Logger; 9642: # 53 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 9642: class MergeOperator : public Customizable { 9642: public: 9642: virtual ~MergeOperator() {} 9642: static const char* Type() { return "MergeOperator"; } 9642: static Status CreateFromString(const ConfigOptions& opts, 9642: const std::string& id, 9642: std::shared_ptr* result); 9642: # 79 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 9642: virtual bool FullMerge(const Slice& , const Slice* , 9642: const std::deque& , 9642: std::string* , Logger* ) const { 9642: 9642: 9642: # 83 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 3 4 9642: (static_cast ( 9642: # 83 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 9642: false 9642: # 83 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 83 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 9642: "false" 9642: # 83 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 83 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 9642: ; 9642: return false; 9642: } 9642: 9642: struct MergeOperationInput { 9642: 9642: explicit MergeOperationInput(const Slice& _key, 9642: const Slice* _existing_value, 9642: const std::vector& _operand_list, 9642: Logger* _logger) 9642: : key(_key), 9642: existing_value(_existing_value), 9642: operand_list(_operand_list), 9642: logger(_logger) {} 9642: 9642: 9642: const Slice& key; 9642: 9642: 9642: const Slice* existing_value; 9642: 9642: const std::vector& operand_list; 9642: 9642: 9642: Logger* logger; 9642: }; 9642: 9642: enum class OpFailureScope { 9642: kDefault, 9642: kTryMerge, 9642: kMustMerge, 9642: kOpFailureScopeMax, 9642: }; 9642: 9642: struct MergeOperationOutput { 9642: explicit MergeOperationOutput(std::string& _new_value, 9642: Slice& _existing_operand) 9642: : new_value(_new_value), existing_operand(_existing_operand) {} 9642: 9642: 9642: std::string& new_value; 9642: 9642: 9642: 9642: Slice& existing_operand; 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 9642: OpFailureScope op_failure_scope = OpFailureScope::kDefault; 9642: }; 9642: # 161 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 9642: virtual bool FullMergeV2(const MergeOperationInput& merge_in, 9642: MergeOperationOutput* merge_out) const; 9642: 9642: struct MergeOperationInputV3 { 9642: using ExistingValue = std::variant; 9642: using OperandList = std::vector; 9642: 9642: explicit MergeOperationInputV3(const Slice& _key, 9642: ExistingValue&& _existing_value, 9642: const OperandList& _operand_list, 9642: Logger* _logger) 9642: : key(_key), 9642: existing_value(std::move(_existing_value)), 9642: operand_list(_operand_list), 9642: logger(_logger) {} 9642: 9642: 9642: const Slice& key; 9642: 9642: 9642: 9642: ExistingValue existing_value; 9642: 9642: const OperandList& operand_list; 9642: 9642: Logger* logger; 9642: }; 9642: 9642: struct MergeOperationOutputV3 { 9642: using NewColumns = std::vector>; 9642: using NewValue = std::variant; 9642: 9642: 9642: 9642: 9642: NewValue new_value; 9642: 9642: OpFailureScope op_failure_scope = OpFailureScope::kDefault; 9642: }; 9642: # 209 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 9642: virtual bool FullMergeV3(const MergeOperationInputV3& merge_in, 9642: MergeOperationOutputV3* merge_out) const; 9642: # 243 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 9642: virtual bool PartialMerge(const Slice& , const Slice& , 9642: const Slice& , 9642: std::string* , 9642: Logger* ) const { 9642: return false; 9642: } 9642: # 271 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 9642: virtual bool PartialMergeMulti(const Slice& key, 9642: const std::deque& operand_list, 9642: std::string* new_value, Logger* logger) const; 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: const char* Name() const override = 0; 9642: 9642: 9642: 9642: 9642: 9642: 9642: virtual bool AllowSingleOperand() const { return false; } 9642: # 300 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 9642: virtual bool ShouldMerge(const std::vector& ) const { 9642: return false; 9642: } 9642: }; 9642: 9642: 9642: class AssociativeMergeOperator : public MergeOperator { 9642: public: 9642: ~AssociativeMergeOperator() override {} 9642: # 323 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 9642: virtual bool Merge(const Slice& key, const Slice* existing_value, 9642: const Slice& value, std::string* new_value, 9642: Logger* logger) const = 0; 9642: 9642: private: 9642: 9642: bool FullMergeV2(const MergeOperationInput& merge_in, 9642: MergeOperationOutput* merge_out) const override; 9642: 9642: bool PartialMerge(const Slice& key, const Slice& left_operand, 9642: const Slice& right_operand, std::string* new_value, 9642: Logger* logger) const override; 9642: }; 9642: 9642: } 9642: # 19 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 2 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class Comparator; 9642: class Iterator; 9642: class Logger; 9642: class MergeOperator; 9642: class Statistics; 9642: class SystemClock; 9642: class BlobFetcher; 9642: class PrefetchBufferCollection; 9642: struct CompactionIterationStats; 9642: 9642: class MergeHelper { 9642: public: 9642: MergeHelper(Env* env, const Comparator* user_comparator, 9642: const MergeOperator* user_merge_operator, 9642: const CompactionFilter* compaction_filter, Logger* logger, 9642: bool assert_valid_internal_key, SequenceNumber latest_snapshot, 9642: const SnapshotChecker* snapshot_checker = nullptr, int level = 0, 9642: Statistics* stats = nullptr, 9642: const std::atomic* shutting_down = nullptr); 9642: # 55 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 9642: struct NoBaseValueTag {}; 9642: static constexpr NoBaseValueTag kNoBaseValue{}; 9642: 9642: struct PlainBaseValueTag {}; 9642: static constexpr PlainBaseValueTag kPlainBaseValue{}; 9642: 9642: struct WideBaseValueTag {}; 9642: static constexpr WideBaseValueTag kWideBaseValue{}; 9642: 9642: template 9642: static Status TimedFullMerge(const MergeOperator* merge_operator, 9642: const Slice& key, NoBaseValueTag, 9642: const std::vector& operands, 9642: Logger* logger, Statistics* statistics, 9642: SystemClock* clock, bool update_num_ops_stats, 9642: MergeOperator::OpFailureScope* op_failure_scope, 9642: ResultTs... results) { 9642: MergeOperator::MergeOperationInputV3::ExistingValue existing_value; 9642: 9642: return TimedFullMergeImpl( 9642: merge_operator, key, std::move(existing_value), operands, logger, 9642: statistics, clock, update_num_ops_stats, op_failure_scope, results...); 9642: } 9642: 9642: template 9642: static Status TimedFullMerge( 9642: const MergeOperator* merge_operator, const Slice& key, PlainBaseValueTag, 9642: const Slice& value, const std::vector& operands, Logger* logger, 9642: Statistics* statistics, SystemClock* clock, bool update_num_ops_stats, 9642: MergeOperator::OpFailureScope* op_failure_scope, ResultTs... results) { 9642: MergeOperator::MergeOperationInputV3::ExistingValue existing_value(value); 9642: 9642: return TimedFullMergeImpl( 9642: merge_operator, key, std::move(existing_value), operands, logger, 9642: statistics, clock, update_num_ops_stats, op_failure_scope, results...); 9642: } 9642: 9642: template 9642: static Status TimedFullMerge( 9642: const MergeOperator* merge_operator, const Slice& key, WideBaseValueTag, 9642: const Slice& entity, const std::vector& operands, Logger* logger, 9642: Statistics* statistics, SystemClock* clock, bool update_num_ops_stats, 9642: MergeOperator::OpFailureScope* op_failure_scope, ResultTs... results) { 9642: MergeOperator::MergeOperationInputV3::ExistingValue existing_value; 9642: 9642: Slice entity_copy(entity); 9642: WideColumns existing_columns; 9642: 9642: const Status s = 9642: WideColumnSerialization::Deserialize(entity_copy, existing_columns); 9642: if (!s.ok()) { 9642: return s; 9642: } 9642: 9642: existing_value = std::move(existing_columns); 9642: 9642: return TimedFullMergeImpl( 9642: merge_operator, key, std::move(existing_value), operands, logger, 9642: statistics, clock, update_num_ops_stats, op_failure_scope, results...); 9642: } 9642: 9642: template 9642: static Status TimedFullMerge(const MergeOperator* merge_operator, 9642: const Slice& key, WideBaseValueTag, 9642: const WideColumns& columns, 9642: const std::vector& operands, 9642: Logger* logger, Statistics* statistics, 9642: SystemClock* clock, bool update_num_ops_stats, 9642: MergeOperator::OpFailureScope* op_failure_scope, 9642: ResultTs... results) { 9642: MergeOperator::MergeOperationInputV3::ExistingValue existing_value(columns); 9642: 9642: return TimedFullMergeImpl( 9642: merge_operator, key, std::move(existing_value), operands, logger, 9642: statistics, clock, update_num_ops_stats, op_failure_scope, results...); 9642: } 9642: # 168 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 9642: Status MergeUntil(InternalIterator* iter, 9642: CompactionRangeDelAggregator* range_del_agg, 9642: const SequenceNumber stop_before, const bool at_bottom, 9642: const bool allow_data_in_errors, 9642: const BlobFetcher* blob_fetcher, 9642: const std::string* const full_history_ts_low, 9642: PrefetchBufferCollection* prefetch_buffers, 9642: CompactionIterationStats* c_iter_stats); 9642: 9642: 9642: 9642: 9642: 9642: 9642: CompactionFilter::Decision FilterMerge(const Slice& user_key, 9642: const Slice& value_slice); 9642: # 210 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 9642: const std::deque& keys() const { return keys_; } 9642: const std::vector& values() const { 9642: return merge_context_.GetOperands(); 9642: } 9642: uint64_t TotalFilterTime() const { return total_filter_time_; } 9642: bool HasOperator() const { return user_merge_operator_ != nullptr; } 9642: 9642: 9642: 9642: 9642: bool FilteredUntil(Slice* skip_until) const { 9642: if (!has_compaction_filter_skip_until_) { 9642: return false; 9642: } 9642: 9642: # 224 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 3 4 9642: (static_cast ( 9642: # 224 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 9642: compaction_filter_ != nullptr 9642: # 224 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 224 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 9642: "compaction_filter_ != nullptr" 9642: # 224 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 224 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 9642: ; 9642: 9642: # 225 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 3 4 9642: (static_cast ( 9642: # 225 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 9642: skip_until != nullptr 9642: # 225 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 225 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 9642: "skip_until != nullptr" 9642: # 225 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 225 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 9642: ; 9642: 9642: # 226 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 3 4 9642: (static_cast ( 9642: # 226 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 9642: compaction_filter_skip_until_.Valid() 9642: # 226 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 226 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 9642: "compaction_filter_skip_until_.Valid()" 9642: # 226 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 226 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 9642: ; 9642: *skip_until = compaction_filter_skip_until_.Encode(); 9642: return true; 9642: } 9642: 9642: private: 9642: Env* env_; 9642: SystemClock* clock_; 9642: const Comparator* user_comparator_; 9642: const MergeOperator* user_merge_operator_; 9642: const CompactionFilter* compaction_filter_; 9642: const std::atomic* shutting_down_; 9642: Logger* logger_; 9642: bool assert_valid_internal_key_; 9642: bool allow_single_operand_; 9642: SequenceNumber latest_snapshot_; 9642: const SnapshotChecker* const snapshot_checker_; 9642: int level_; 9642: 9642: 9642: 9642: 9642: 9642: std::deque keys_; 9642: 9642: mutable MergeContext merge_context_; 9642: 9642: StopWatchNano filter_timer_; 9642: uint64_t total_filter_time_; 9642: Statistics* stats_; 9642: 9642: bool has_compaction_filter_skip_until_ = false; 9642: std::string compaction_filter_value_; 9642: InternalKey compaction_filter_skip_until_; 9642: 9642: bool IsShuttingDown() { 9642: 9642: return shutting_down_ && shutting_down_->load(std::memory_order_relaxed); 9642: } 9642: 9642: template 9642: static Status TimedFullMergeCommonImpl( 9642: const MergeOperator* merge_operator, const Slice& key, 9642: MergeOperator::MergeOperationInputV3::ExistingValue&& existing_value, 9642: const std::vector& operands, Logger* logger, 9642: Statistics* statistics, SystemClock* clock, bool update_num_ops_stats, 9642: MergeOperator::OpFailureScope* op_failure_scope, Visitor&& visitor); 9642: 9642: 9642: 9642: static Status TimedFullMergeImpl( 9642: const MergeOperator* merge_operator, const Slice& key, 9642: MergeOperator::MergeOperationInputV3::ExistingValue&& existing_value, 9642: const std::vector& operands, Logger* logger, 9642: Statistics* statistics, SystemClock* clock, bool update_num_ops_stats, 9642: MergeOperator::OpFailureScope* op_failure_scope, std::string* result, 9642: Slice* result_operand, ValueType* result_type); 9642: 9642: 9642: 9642: 9642: 9642: static Status TimedFullMergeImpl( 9642: const MergeOperator* merge_operator, const Slice& key, 9642: MergeOperator::MergeOperationInputV3::ExistingValue&& existing_value, 9642: const std::vector& operands, Logger* logger, 9642: Statistics* statistics, SystemClock* clock, bool update_num_ops_stats, 9642: MergeOperator::OpFailureScope* op_failure_scope, 9642: std::string* result_value, PinnableWideColumns* result_entity); 9642: }; 9642: 9642: 9642: class MergeOutputIterator { 9642: public: 9642: 9642: explicit MergeOutputIterator(const MergeHelper* merge_helper); 9642: 9642: 9642: void SeekToFirst(); 9642: 9642: void Next(); 9642: 9642: Slice key() { return Slice(*it_keys_); } 9642: Slice value() { return Slice(*it_values_); } 9642: bool Valid() { return it_keys_ != merge_helper_->keys().rend(); } 9642: 9642: private: 9642: const MergeHelper* merge_helper_; 9642: std::deque::const_reverse_iterator it_keys_; 9642: std::vector::const_reverse_iterator it_values_; 9642: }; 9642: 9642: } 9642: # 21 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 2 9642: 9642: 9642: 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/logging/logging.h" 1 9642: # 13 "/build/reproducible-path/rocksdb-9.3.1/logging/logging.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: inline const char* RocksLogShorterFileName(const char* file) { 9642: 9642: 9642: return file + (sizeof("./logging/logging.h") > 18 ? sizeof("./logging/logging.h") - 18 : 0); 9642: } 9642: # 26 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 2 9642: 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/memory/memory_usage.h" 1 9642: 9642: 9642: 9642: 9642: 9642: 9642: # 16 "/build/reproducible-path/rocksdb-9.3.1/memory/memory_usage.h" 9642: namespace rocksdb { 9642: 9642: 9642: 9642: template 9642: size_t ApproximateMemoryUsage( 9642: const std::unordered_map& umap) { 9642: using Map = std::unordered_map; 9642: return sizeof(umap) + 9642: 9642: (sizeof(typename Map::value_type) + sizeof(void*)) * umap.size() + 9642: 9642: umap.bucket_count() * sizeof(void*); 9642: } 9642: # 38 "/build/reproducible-path/rocksdb-9.3.1/memory/memory_usage.h" 9642: } 9642: # 28 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 2 9642: # 40 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: 9642: 9642: 9642: 9642: template 9642: class IteratorWrapperBase { 9642: public: 9642: IteratorWrapperBase() : iter_(nullptr), valid_(false) {} 9642: explicit IteratorWrapperBase(InternalIteratorBase* _iter) 9642: : iter_(nullptr) { 9642: Set(_iter); 9642: } 9642: ~IteratorWrapperBase() {} 9642: InternalIteratorBase* iter() const { return iter_; } 9642: void SetRangeDelReadSeqno(SequenceNumber read_seqno) { 9642: if (iter_) { 9642: iter_->SetRangeDelReadSeqno(read_seqno); 9642: } 9642: } 9642: 9642: 9642: 9642: InternalIteratorBase* Set(InternalIteratorBase* _iter) { 9642: InternalIteratorBase* old_iter = iter_; 9642: 9642: iter_ = _iter; 9642: if (iter_ == nullptr) { 9642: valid_ = false; 9642: } else { 9642: Update(); 9642: } 9642: return old_iter; 9642: } 9642: 9642: void DeleteIter(bool is_arena_mode) { 9642: if (iter_) { 9642: # 66 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: if (!is_arena_mode) { 9642: delete iter_; 9642: } else { 9642: iter_->~InternalIteratorBase(); 9642: } 9642: } 9642: } 9642: 9642: 9642: bool Valid() const { 9642: 9642: 9642: 9642: return valid_; 9642: } 9642: Slice key() const { 9642: 9642: # 82 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 82 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: Valid() 9642: # 82 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 82 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "Valid()" 9642: # 82 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 82 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: return result_.key; 9642: } 9642: 9642: uint64_t write_unix_time() const { 9642: 9642: # 87 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 87 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: Valid() 9642: # 87 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 87 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "Valid()" 9642: # 87 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 87 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: return iter_->write_unix_time(); 9642: } 9642: 9642: TValue value() const { 9642: 9642: # 92 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 92 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: Valid() 9642: # 92 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 92 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "Valid()" 9642: # 92 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 92 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: return iter_->value(); 9642: } 9642: 9642: Status status() const { 9642: 9642: 9642: 9642: 9642: # 100 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 100 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: iter_ 9642: # 100 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 100 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "iter_" 9642: # 100 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 100 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: return iter_->status(); 9642: } 9642: bool PrepareValue() { 9642: 9642: # 104 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 104 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: Valid() 9642: # 104 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 104 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "Valid()" 9642: # 104 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 104 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: if (result_.value_prepared) { 9642: return true; 9642: } 9642: if (iter_->PrepareValue()) { 9642: result_.value_prepared = true; 9642: result_.key = iter_->key(); 9642: return true; 9642: } 9642: 9642: 9642: # 114 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 114 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: !iter_->Valid() 9642: # 114 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 114 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "!iter_->Valid()" 9642: # 114 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 114 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: valid_ = false; 9642: return false; 9642: } 9642: void Next() { 9642: 9642: # 119 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 119 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: iter_ 9642: # 119 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 119 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "iter_" 9642: # 119 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 119 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: valid_ = iter_->NextAndGetResult(&result_); 9642: 9642: # 121 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 121 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: !valid_ || iter_->status().ok() 9642: # 121 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 121 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "!valid_ || iter_->status().ok()" 9642: # 121 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 121 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: } 9642: bool NextAndGetResult(IterateResult* result) { 9642: 9642: # 124 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 124 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: iter_ 9642: # 124 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 124 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "iter_" 9642: # 124 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 124 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: valid_ = iter_->NextAndGetResult(&result_); 9642: *result = result_; 9642: 9642: # 127 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 127 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: !valid_ || iter_->status().ok() 9642: # 127 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 127 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "!valid_ || iter_->status().ok()" 9642: # 127 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 127 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: return valid_; 9642: } 9642: void Prev() { 9642: 9642: # 131 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 131 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: iter_ 9642: # 131 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 131 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "iter_" 9642: # 131 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 131 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: iter_->Prev(); 9642: Update(); 9642: } 9642: void Seek(const Slice& k) { 9642: 9642: # 136 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 136 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: iter_ 9642: # 136 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 136 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "iter_" 9642: # 136 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 136 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: iter_->Seek(k); 9642: Update(); 9642: } 9642: void SeekForPrev(const Slice& k) { 9642: 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: iter_ 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "iter_" 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 141 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: iter_->SeekForPrev(k); 9642: Update(); 9642: } 9642: void SeekToFirst() { 9642: 9642: # 146 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 146 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: iter_ 9642: # 146 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 146 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "iter_" 9642: # 146 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 146 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: iter_->SeekToFirst(); 9642: Update(); 9642: } 9642: void SeekToLast() { 9642: 9642: # 151 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 151 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: iter_ 9642: # 151 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 151 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "iter_" 9642: # 151 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 151 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: iter_->SeekToLast(); 9642: Update(); 9642: } 9642: 9642: bool MayBeOutOfLowerBound() { 9642: 9642: # 157 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 157 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: Valid() 9642: # 157 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 157 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "Valid()" 9642: # 157 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 157 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: return iter_->MayBeOutOfLowerBound(); 9642: } 9642: 9642: IterBoundCheck UpperBoundCheckResult() { 9642: 9642: # 162 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 162 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: Valid() 9642: # 162 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 162 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "Valid()" 9642: # 162 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 162 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: return result_.bound_check_result; 9642: } 9642: 9642: void SetPinnedItersMgr(PinnedIteratorsManager* pinned_iters_mgr) { 9642: 9642: # 167 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 167 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: iter_ 9642: # 167 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 167 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "iter_" 9642: # 167 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 167 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: iter_->SetPinnedItersMgr(pinned_iters_mgr); 9642: } 9642: bool IsKeyPinned() const { 9642: 9642: # 171 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 171 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: Valid() 9642: # 171 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 171 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "Valid()" 9642: # 171 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 171 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: return iter_->IsKeyPinned(); 9642: } 9642: bool IsValuePinned() const { 9642: 9642: # 175 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 175 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: Valid() 9642: # 175 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 175 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "Valid()" 9642: # 175 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 175 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: return iter_->IsValuePinned(); 9642: } 9642: 9642: bool IsValuePrepared() const { return result_.value_prepared; } 9642: 9642: Slice user_key() const { 9642: 9642: # 182 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 182 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: Valid() 9642: # 182 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 182 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "Valid()" 9642: # 182 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 182 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: return iter_->user_key(); 9642: } 9642: 9642: void UpdateReadaheadState(InternalIteratorBase* old_iter) { 9642: if (old_iter && iter_) { 9642: ReadaheadFileInfo readahead_file_info; 9642: old_iter->GetReadaheadState(&readahead_file_info); 9642: iter_->SetReadaheadState(&readahead_file_info); 9642: } 9642: } 9642: 9642: bool IsDeleteRangeSentinelKey() const { 9642: return iter_->IsDeleteRangeSentinelKey(); 9642: } 9642: 9642: private: 9642: void Update() { 9642: valid_ = iter_->Valid(); 9642: if (valid_) { 9642: 9642: # 202 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: (static_cast ( 9642: # 202 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: iter_->status().ok() 9642: # 202 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 202 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: "iter_->status().ok()" 9642: # 202 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 202 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 9642: ; 9642: result_.key = iter_->key(); 9642: result_.bound_check_result = IterBoundCheck::kUnknown; 9642: result_.value_prepared = false; 9642: } 9642: } 9642: 9642: InternalIteratorBase* iter_; 9642: IterateResult result_; 9642: bool valid_; 9642: 9642: 9642: 9642: 9642: }; 9642: 9642: using IteratorWrapper = IteratorWrapperBase; 9642: 9642: class Arena; 9642: 9642: template 9642: InternalIteratorBase* NewEmptyInternalIterator(Arena* arena); 9642: 9642: } 9642: # 41 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 2 9642: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/merging_iterator.h" 1 9642: # 10 "/build/reproducible-path/rocksdb-9.3.1/table/merging_iterator.h" 9642: 9642: 9642: 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: class Arena; 9642: class ArenaWrappedDBIter; 9642: class InternalKeyComparator; 9642: 9642: template 9642: class InternalIteratorBase; 9642: using InternalIterator = InternalIteratorBase; 9642: # 35 "/build/reproducible-path/rocksdb-9.3.1/table/merging_iterator.h" 9642: InternalIterator* NewMergingIterator(const InternalKeyComparator* comparator, 9642: InternalIterator** children, int n, 9642: Arena* arena = nullptr, 9642: bool prefix_seek_mode = false); 9642: 9642: 9642: 9642: 9642: class MergingIterator; 9642: 9642: 9642: 9642: 9642: 9642: class MergeIteratorBuilder { 9642: public: 9642: 9642: 9642: explicit MergeIteratorBuilder(const InternalKeyComparator* comparator, 9642: Arena* arena, bool prefix_seek_mode = false, 9642: const Slice* iterate_upper_bound = nullptr); 9642: ~MergeIteratorBuilder(); 9642: 9642: 9642: void AddIterator(InternalIterator* iter); 9642: # 72 "/build/reproducible-path/rocksdb-9.3.1/table/merging_iterator.h" 9642: void AddPointAndTombstoneIterator( 9642: InternalIterator* point_iter, TruncatedRangeDelIterator* tombstone_iter, 9642: TruncatedRangeDelIterator*** tombstone_iter_ptr = nullptr); 9642: 9642: 9642: 9642: Arena* GetArena() { return arena; } 9642: 9642: 9642: 9642: 9642: 9642: 9642: InternalIterator* Finish(ArenaWrappedDBIter* db_iter = nullptr); 9642: 9642: private: 9642: MergingIterator* merge_iter; 9642: InternalIterator* first_iter; 9642: bool use_merging_iter; 9642: Arena* arena; 9642: 9642: 9642: std::vector> 9642: range_del_iter_ptrs_; 9642: }; 9642: 9642: } 9642: # 42 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 2 9642: 9642: 9642: 9642: 9642: namespace rocksdb { 9642: 9642: ImmutableMemTableOptions::ImmutableMemTableOptions( 9642: const ImmutableOptions& ioptions, 9642: const MutableCFOptions& mutable_cf_options) 9642: : arena_block_size(mutable_cf_options.arena_block_size), 9642: memtable_prefix_bloom_bits( 9642: static_cast( 9642: static_cast(mutable_cf_options.write_buffer_size) * 9642: mutable_cf_options.memtable_prefix_bloom_size_ratio) * 9642: 8u), 9642: memtable_huge_page_size(mutable_cf_options.memtable_huge_page_size), 9642: memtable_whole_key_filtering( 9642: mutable_cf_options.memtable_whole_key_filtering), 9642: inplace_update_support(ioptions.inplace_update_support), 9642: inplace_update_num_locks(mutable_cf_options.inplace_update_num_locks), 9642: inplace_callback(ioptions.inplace_callback), 9642: max_successive_merges(mutable_cf_options.max_successive_merges), 9642: strict_max_successive_merges( 9642: mutable_cf_options.strict_max_successive_merges), 9642: statistics(ioptions.stats), 9642: merge_operator(ioptions.merge_operator.get()), 9642: info_log(ioptions.logger), 9642: allow_data_in_errors(ioptions.allow_data_in_errors), 9642: protection_bytes_per_key( 9642: mutable_cf_options.memtable_protection_bytes_per_key) {} 9642: 9642: MemTable::MemTable(const InternalKeyComparator& cmp, 9642: const ImmutableOptions& ioptions, 9642: const MutableCFOptions& mutable_cf_options, 9642: WriteBufferManager* write_buffer_manager, 9642: SequenceNumber latest_seq, uint32_t column_family_id) 9642: : comparator_(cmp), 9642: moptions_(ioptions, mutable_cf_options), 9642: refs_(0), 9642: kArenaBlockSize(Arena::OptimizeBlockSize(moptions_.arena_block_size)), 9642: mem_tracker_(write_buffer_manager), 9642: arena_(moptions_.arena_block_size, 9642: (write_buffer_manager != nullptr && 9642: (write_buffer_manager->enabled() || 9642: write_buffer_manager->cost_to_cache())) 9642: ? &mem_tracker_ 9642: : nullptr, 9642: mutable_cf_options.memtable_huge_page_size), 9642: table_(ioptions.memtable_factory->CreateMemTableRep( 9642: comparator_, &arena_, mutable_cf_options.prefix_extractor.get(), 9642: ioptions.logger, column_family_id)), 9642: range_del_table_(SkipListFactory().CreateMemTableRep( 9642: comparator_, &arena_, nullptr , ioptions.logger, 9642: column_family_id)), 9642: is_range_del_table_empty_(true), 9642: data_size_(0), 9642: num_entries_(0), 9642: num_deletes_(0), 9642: num_range_deletes_(0), 9642: write_buffer_size_(mutable_cf_options.write_buffer_size), 9642: flush_in_progress_(false), 9642: flush_completed_(false), 9642: file_number_(0), 9642: first_seqno_(0), 9642: earliest_seqno_(latest_seq), 9642: creation_seq_(latest_seq), 9642: mem_next_logfile_number_(0), 9642: min_prep_log_referenced_(0), 9642: locks_(moptions_.inplace_update_support 9642: ? moptions_.inplace_update_num_locks 9642: : 0), 9642: prefix_extractor_(mutable_cf_options.prefix_extractor.get()), 9642: flush_state_(FLUSH_NOT_REQUESTED), 9642: clock_(ioptions.clock), 9642: insert_with_hint_prefix_extractor_( 9642: ioptions.memtable_insert_with_hint_prefix_extractor.get()), 9642: oldest_key_time_(std::numeric_limits::max()), 9642: atomic_flush_seqno_(kMaxSequenceNumber), 9642: approximate_memory_usage_(0), 9642: memtable_max_range_deletions_( 9642: mutable_cf_options.memtable_max_range_deletions) { 9642: UpdateFlushState(); 9642: 9642: 9642: # 125 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 125 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: !ShouldScheduleFlush() 9642: # 125 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 125 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "!ShouldScheduleFlush()" 9642: # 125 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 125 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: 9642: 9642: if ((prefix_extractor_ || moptions_.memtable_whole_key_filtering) && 9642: moptions_.memtable_prefix_bloom_bits > 0) { 9642: bloom_filter_.reset( 9642: new DynamicBloom(&arena_, moptions_.memtable_prefix_bloom_bits, 9642: 6 , 9642: moptions_.memtable_huge_page_size, ioptions.logger)); 9642: } 9642: 9642: 9642: 9642: auto new_cache = std::make_shared(); 9642: size_t size = cached_range_tombstone_.Size(); 9642: for (size_t i = 0; i < size; ++i) { 9642: std::shared_ptr* local_cache_ref_ptr = 9642: cached_range_tombstone_.AccessAtCore(i); 9642: auto new_local_cache_ref = std::make_shared< 9642: const std::shared_ptr>(new_cache); 9642: std::atomic_store_explicit( 9642: local_cache_ref_ptr, 9642: std::shared_ptr(new_local_cache_ref, 9642: new_cache.get()), 9642: std::memory_order_relaxed); 9642: } 9642: const Comparator* ucmp = cmp.user_comparator(); 9642: 9642: # 152 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 152 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ucmp 9642: # 152 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 152 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "ucmp" 9642: # 152 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 152 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: ts_sz_ = ucmp->timestamp_size(); 9642: persist_user_defined_timestamps_ = ioptions.persist_user_defined_timestamps; 9642: } 9642: 9642: MemTable::~MemTable() { 9642: mem_tracker_.FreeMem(); 9642: 9642: # 159 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 159 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: refs_ == 0 9642: # 159 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 159 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "refs_ == 0" 9642: # 159 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 159 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: } 9642: 9642: size_t MemTable::ApproximateMemoryUsage() { 9642: autovector usages = { 9642: arena_.ApproximateMemoryUsage(), table_->ApproximateMemoryUsage(), 9642: range_del_table_->ApproximateMemoryUsage(), 9642: rocksdb::ApproximateMemoryUsage(insert_hints_)}; 9642: size_t total_usage = 0; 9642: for (size_t usage : usages) { 9642: 9642: 9642: if (usage >= std::numeric_limits::max() - total_usage) { 9642: return std::numeric_limits::max(); 9642: } 9642: total_usage += usage; 9642: } 9642: approximate_memory_usage_.store(total_usage, std::memory_order_relaxed); 9642: 9642: return total_usage; 9642: } 9642: 9642: bool MemTable::ShouldFlushNow() { 9642: 9642: 9642: if (memtable_max_range_deletions_ > 0 && 9642: num_range_deletes_.load(std::memory_order_relaxed) >= 9642: static_cast(memtable_max_range_deletions_)) { 9642: return true; 9642: } 9642: 9642: size_t write_buffer_size = write_buffer_size_.load(std::memory_order_relaxed); 9642: 9642: 9642: 9642: 9642: 9642: 9642: const double kAllowOverAllocationRatio = 0.6; 9642: 9642: 9642: 9642: auto allocated_memory = table_->ApproximateMemoryUsage() + 9642: range_del_table_->ApproximateMemoryUsage() + 9642: arena_.MemoryAllocatedBytes(); 9642: 9642: approximate_memory_usage_.store(allocated_memory, std::memory_order_relaxed); 9642: 9642: 9642: 9642: if (allocated_memory + kArenaBlockSize < 9642: write_buffer_size + kArenaBlockSize * kAllowOverAllocationRatio) { 9642: return false; 9642: } 9642: 9642: 9642: 9642: if (allocated_memory > 9642: write_buffer_size + kArenaBlockSize * kAllowOverAllocationRatio) { 9642: return true; 9642: } 9642: # 246 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: return arena_.AllocatedAndUnused() < kArenaBlockSize / 4; 9642: } 9642: 9642: void MemTable::UpdateFlushState() { 9642: auto state = flush_state_.load(std::memory_order_relaxed); 9642: if (state == FLUSH_NOT_REQUESTED && ShouldFlushNow()) { 9642: 9642: 9642: flush_state_.compare_exchange_strong(state, FLUSH_REQUESTED, 9642: std::memory_order_relaxed, 9642: std::memory_order_relaxed); 9642: } 9642: } 9642: 9642: void MemTable::UpdateOldestKeyTime() { 9642: uint64_t oldest_key_time = oldest_key_time_.load(std::memory_order_relaxed); 9642: if (oldest_key_time == std::numeric_limits::max()) { 9642: int64_t current_time = 0; 9642: auto s = clock_->GetCurrentTime(¤t_time); 9642: if (s.ok()) { 9642: 9642: # 266 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 266 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: current_time >= 0 9642: # 266 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 266 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "current_time >= 0" 9642: # 266 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 266 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: 9642: oldest_key_time_.compare_exchange_strong( 9642: oldest_key_time, static_cast(current_time), 9642: std::memory_order_relaxed, std::memory_order_relaxed); 9642: } 9642: } 9642: } 9642: 9642: Status MemTable::VerifyEntryChecksum(const char* entry, 9642: uint32_t protection_bytes_per_key, 9642: bool allow_data_in_errors) { 9642: if (protection_bytes_per_key == 0) { 9642: return Status::OK(); 9642: } 9642: uint32_t key_length; 9642: const char* key_ptr = GetVarint32Ptr(entry, entry + 5, &key_length); 9642: if (key_ptr == nullptr) { 9642: return Status::Corruption("Unable to parse internal key length"); 9642: } 9642: if (key_length < 8) { 9642: return Status::Corruption("Memtable entry internal key length too short."); 9642: } 9642: Slice user_key = Slice(key_ptr, key_length - 8); 9642: 9642: const uint64_t tag = DecodeFixed64(key_ptr + key_length - 8); 9642: ValueType type; 9642: SequenceNumber seq; 9642: UnPackSequenceAndType(tag, &seq, &type); 9642: 9642: uint32_t value_length = 0; 9642: const char* value_ptr = GetVarint32Ptr( 9642: key_ptr + key_length, key_ptr + key_length + 5, &value_length); 9642: if (value_ptr == nullptr) { 9642: return Status::Corruption("Unable to parse internal key value"); 9642: } 9642: Slice value = Slice(value_ptr, value_length); 9642: 9642: const char* checksum_ptr = value_ptr + value_length; 9642: bool match = 9642: ProtectionInfo64() 9642: .ProtectKVO(user_key, value, type) 9642: .ProtectS(seq) 9642: .Verify(static_cast(protection_bytes_per_key), checksum_ptr); 9642: if (!match) { 9642: std::string msg( 9642: "Corrupted memtable entry, per key-value checksum verification " 9642: "failed."); 9642: if (allow_data_in_errors) { 9642: msg.append("Unrecognized value type: " + 9642: std::to_string(static_cast(type)) + ". "); 9642: msg.append("User key: " + user_key.ToString( true) + ". "); 9642: msg.append("seq: " + std::to_string(seq) + "."); 9642: } 9642: return Status::Corruption(msg.c_str()); 9642: } 9642: return Status::OK(); 9642: } 9642: 9642: int MemTable::KeyComparator::operator()(const char* prefix_len_key1, 9642: const char* prefix_len_key2) const { 9642: 9642: Slice k1 = GetLengthPrefixedSlice(prefix_len_key1); 9642: Slice k2 = GetLengthPrefixedSlice(prefix_len_key2); 9642: return comparator.CompareKeySeq(k1, k2); 9642: } 9642: 9642: int MemTable::KeyComparator::operator()( 9642: const char* prefix_len_key, const KeyComparator::DecodedType& key) const { 9642: 9642: Slice a = GetLengthPrefixedSlice(prefix_len_key); 9642: return comparator.CompareKeySeq(a, key); 9642: } 9642: 9642: void MemTableRep::InsertConcurrently(KeyHandle ) { 9642: throw std::runtime_error("concurrent insert not supported"); 9642: } 9642: 9642: Slice MemTableRep::UserKey(const char* key) const { 9642: Slice slice = GetLengthPrefixedSlice(key); 9642: return Slice(slice.data(), slice.size() - 8); 9642: } 9642: 9642: KeyHandle MemTableRep::Allocate(const size_t len, char** buf) { 9642: *buf = allocator_->Allocate(len); 9642: return static_cast(*buf); 9642: } 9642: 9642: 9642: 9642: 9642: const char* EncodeKey(std::string* scratch, const Slice& target) { 9642: scratch->clear(); 9642: PutVarint32(scratch, static_cast(target.size())); 9642: scratch->append(target.data(), target.size()); 9642: return scratch->data(); 9642: } 9642: 9642: class MemTableIterator : public InternalIterator { 9642: public: 9642: MemTableIterator(const MemTable& mem, const ReadOptions& read_options, 9642: UnownedPtr seqno_to_time_mapping, 9642: Arena* arena, bool use_range_del_table = false) 9642: : bloom_(nullptr), 9642: prefix_extractor_(mem.prefix_extractor_), 9642: comparator_(mem.comparator_), 9642: valid_(false), 9642: seqno_to_time_mapping_(seqno_to_time_mapping), 9642: arena_mode_(arena != nullptr), 9642: value_pinned_( 9642: !mem.GetImmutableMemTableOptions()->inplace_update_support), 9642: protection_bytes_per_key_(mem.moptions_.protection_bytes_per_key), 9642: status_(Status::OK()), 9642: logger_(mem.moptions_.info_log), 9642: ts_sz_(mem.ts_sz_) { 9642: if (use_range_del_table) { 9642: iter_ = mem.range_del_table_->GetIterator(arena); 9642: } else if (prefix_extractor_ != nullptr && !read_options.total_order_seek && 9642: !read_options.auto_prefix_mode) { 9642: 9642: bloom_ = mem.bloom_filter_.get(); 9642: iter_ = mem.table_->GetDynamicPrefixIterator(arena); 9642: } else { 9642: iter_ = mem.table_->GetIterator(arena); 9642: } 9642: status_.PermitUncheckedError(); 9642: } 9642: 9642: MemTableIterator(const MemTableIterator&) = delete; 9642: void operator=(const MemTableIterator&) = delete; 9642: 9642: ~MemTableIterator() override { 9642: 9642: 9642: 9642: 9642: # 401 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 401 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: !pinned_iters_mgr_ || !pinned_iters_mgr_->PinningEnabled() 9642: # 401 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 401 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "!pinned_iters_mgr_ || !pinned_iters_mgr_->PinningEnabled()" 9642: # 401 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 401 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: 9642: if (arena_mode_) { 9642: iter_->~Iterator(); 9642: } else { 9642: delete iter_; 9642: } 9642: } 9642: 9642: 9642: void SetPinnedItersMgr(PinnedIteratorsManager* pinned_iters_mgr) override { 9642: pinned_iters_mgr_ = pinned_iters_mgr; 9642: } 9642: PinnedIteratorsManager* pinned_iters_mgr_ = nullptr; 9642: 9642: 9642: bool Valid() const override { return valid_ && status_.ok(); } 9642: void Seek(const Slice& k) override { 9642: PerfStepTimer perf_step_timer_seek_on_memtable_time(&(perf_context.seek_on_memtable_time)); perf_step_timer_seek_on_memtable_time.Start();; 9642: if (perf_level >= PerfLevel::kEnableCount) { perf_context.seek_on_memtable_count += 1; } static_assert(true, "semicolon required"); 9642: if (bloom_) { 9642: 9642: Slice user_k_without_ts(ExtractUserKeyAndStripTimestamp(k, ts_sz_)); 9642: if (prefix_extractor_->InDomain(user_k_without_ts)) { 9642: if (!bloom_->MayContain( 9642: prefix_extractor_->Transform(user_k_without_ts))) { 9642: if (perf_level >= PerfLevel::kEnableCount) { perf_context.bloom_memtable_miss_count += 1; } static_assert(true, "semicolon required"); 9642: valid_ = false; 9642: return; 9642: } else { 9642: if (perf_level >= PerfLevel::kEnableCount) { perf_context.bloom_memtable_hit_count += 1; } static_assert(true, "semicolon required"); 9642: } 9642: } 9642: } 9642: iter_->Seek(k, nullptr); 9642: valid_ = iter_->Valid(); 9642: VerifyEntryChecksum(); 9642: } 9642: void SeekForPrev(const Slice& k) override { 9642: PerfStepTimer perf_step_timer_seek_on_memtable_time(&(perf_context.seek_on_memtable_time)); perf_step_timer_seek_on_memtable_time.Start();; 9642: if (perf_level >= PerfLevel::kEnableCount) { perf_context.seek_on_memtable_count += 1; } static_assert(true, "semicolon required"); 9642: if (bloom_) { 9642: Slice user_k_without_ts(ExtractUserKeyAndStripTimestamp(k, ts_sz_)); 9642: if (prefix_extractor_->InDomain(user_k_without_ts)) { 9642: if (!bloom_->MayContain( 9642: prefix_extractor_->Transform(user_k_without_ts))) { 9642: if (perf_level >= PerfLevel::kEnableCount) { perf_context.bloom_memtable_miss_count += 1; } static_assert(true, "semicolon required"); 9642: valid_ = false; 9642: return; 9642: } else { 9642: if (perf_level >= PerfLevel::kEnableCount) { perf_context.bloom_memtable_hit_count += 1; } static_assert(true, "semicolon required"); 9642: } 9642: } 9642: } 9642: iter_->Seek(k, nullptr); 9642: valid_ = iter_->Valid(); 9642: VerifyEntryChecksum(); 9642: if (!Valid() && status().ok()) { 9642: SeekToLast(); 9642: } 9642: while (Valid() && comparator_.comparator.Compare(k, key()) < 0) { 9642: Prev(); 9642: } 9642: } 9642: void SeekToFirst() override { 9642: iter_->SeekToFirst(); 9642: valid_ = iter_->Valid(); 9642: VerifyEntryChecksum(); 9642: } 9642: void SeekToLast() override { 9642: iter_->SeekToLast(); 9642: valid_ = iter_->Valid(); 9642: VerifyEntryChecksum(); 9642: } 9642: void Next() override { 9642: if (perf_level >= PerfLevel::kEnableCount) { perf_context.next_on_memtable_count += 1; } static_assert(true, "semicolon required"); 9642: 9642: # 477 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 477 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: Valid() 9642: # 477 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 477 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "Valid()" 9642: # 477 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 477 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: iter_->Next(); 9642: rocksdb::SyncPoint::GetInstance()->Process("MemTableIterator::Next:0", iter_); 9642: valid_ = iter_->Valid(); 9642: VerifyEntryChecksum(); 9642: } 9642: bool NextAndGetResult(IterateResult* result) override { 9642: Next(); 9642: bool is_valid = Valid(); 9642: if (is_valid) { 9642: result->key = key(); 9642: result->bound_check_result = IterBoundCheck::kUnknown; 9642: result->value_prepared = true; 9642: } 9642: return is_valid; 9642: } 9642: void Prev() override { 9642: if (perf_level >= PerfLevel::kEnableCount) { perf_context.prev_on_memtable_count += 1; } static_assert(true, "semicolon required"); 9642: 9642: # 495 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 495 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: Valid() 9642: # 495 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 495 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "Valid()" 9642: # 495 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 495 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: iter_->Prev(); 9642: valid_ = iter_->Valid(); 9642: VerifyEntryChecksum(); 9642: } 9642: Slice key() const override { 9642: 9642: # 501 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 501 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: Valid() 9642: # 501 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 501 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "Valid()" 9642: # 501 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 501 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: return GetLengthPrefixedSlice(iter_->key()); 9642: } 9642: 9642: uint64_t write_unix_time() const override { 9642: 9642: # 506 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 506 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: Valid() 9642: # 506 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 506 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "Valid()" 9642: # 506 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 506 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: ParsedInternalKey pikey; 9642: Status s = ParseInternalKey(key(), &pikey, false); 9642: if (!s.ok()) { 9642: return std::numeric_limits::max(); 9642: } else if (kTypeValuePreferredSeqno == pikey.type) { 9642: return ParsePackedValueForWriteTime(value()); 9642: } else if (!seqno_to_time_mapping_ || seqno_to_time_mapping_->Empty()) { 9642: return std::numeric_limits::max(); 9642: } 9642: return seqno_to_time_mapping_->GetProximalTimeBeforeSeqno(pikey.sequence); 9642: } 9642: 9642: Slice value() const override { 9642: 9642: # 520 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 520 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: Valid() 9642: # 520 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 520 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "Valid()" 9642: # 520 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 520 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: Slice key_slice = GetLengthPrefixedSlice(iter_->key()); 9642: return GetLengthPrefixedSlice(key_slice.data() + key_slice.size()); 9642: } 9642: 9642: Status status() const override { return status_; } 9642: 9642: bool IsKeyPinned() const override { 9642: 9642: return true; 9642: } 9642: 9642: bool IsValuePinned() const override { 9642: 9642: return value_pinned_; 9642: } 9642: 9642: private: 9642: DynamicBloom* bloom_; 9642: const SliceTransform* const prefix_extractor_; 9642: const MemTable::KeyComparator comparator_; 9642: MemTableRep::Iterator* iter_; 9642: bool valid_; 9642: 9642: UnownedPtr seqno_to_time_mapping_; 9642: bool arena_mode_; 9642: bool value_pinned_; 9642: uint32_t protection_bytes_per_key_; 9642: Status status_; 9642: Logger* logger_; 9642: size_t ts_sz_; 9642: 9642: void VerifyEntryChecksum() { 9642: if (protection_bytes_per_key_ > 0 && Valid()) { 9642: status_ = MemTable::VerifyEntryChecksum(iter_->key(), 9642: protection_bytes_per_key_); 9642: if (!status_.ok()) { 9642: rocksdb::Log((InfoLogLevel::ERROR_LEVEL), ((logger_)), ("[%s:" "557" "] " "In MemtableIterator: %s"), RocksLogShorterFileName("./db/memtable.cc"), status_.getState()); 9642: } 9642: } 9642: } 9642: }; 9642: 9642: InternalIterator* MemTable::NewIterator( 9642: const ReadOptions& read_options, 9642: UnownedPtr seqno_to_time_mapping, Arena* arena) { 9642: 9642: # 566 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 566 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: arena != nullptr 9642: # 566 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 566 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "arena != nullptr" 9642: # 566 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 566 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: auto mem = arena->AllocateAligned(sizeof(MemTableIterator)); 9642: return new (mem) 9642: MemTableIterator(*this, read_options, seqno_to_time_mapping, arena); 9642: } 9642: 9642: FragmentedRangeTombstoneIterator* MemTable::NewRangeTombstoneIterator( 9642: const ReadOptions& read_options, SequenceNumber read_seq, 9642: bool immutable_memtable) { 9642: if (read_options.ignore_range_deletions || 9642: is_range_del_table_empty_.load(std::memory_order_relaxed)) { 9642: return nullptr; 9642: } 9642: return NewRangeTombstoneIteratorInternal(read_options, read_seq, 9642: immutable_memtable); 9642: } 9642: 9642: FragmentedRangeTombstoneIterator* MemTable::NewRangeTombstoneIteratorInternal( 9642: const ReadOptions& read_options, SequenceNumber read_seq, 9642: bool immutable_memtable) { 9642: if (immutable_memtable) { 9642: 9642: 9642: 9642: # 589 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 589 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: IsFragmentedRangeTombstonesConstructed() 9642: # 589 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 589 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "IsFragmentedRangeTombstonesConstructed()" 9642: # 589 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 589 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: return new FragmentedRangeTombstoneIterator( 9642: fragmented_range_tombstone_list_.get(), comparator_.comparator, 9642: read_seq, read_options.timestamp); 9642: } 9642: 9642: 9642: std::shared_ptr cache = 9642: std::atomic_load_explicit(cached_range_tombstone_.Access(), 9642: std::memory_order_relaxed); 9642: 9642: if (!cache->initialized.load(std::memory_order_acquire)) { 9642: cache->reader_mutex.lock(); 9642: if (!cache->tombstones) { 9642: auto* unfragmented_iter = new MemTableIterator( 9642: *this, read_options, nullptr , 9642: nullptr , true ); 9642: cache->tombstones.reset(new FragmentedRangeTombstoneList( 9642: std::unique_ptr(unfragmented_iter), 9642: comparator_.comparator)); 9642: cache->initialized.store(true, std::memory_order_release); 9642: } 9642: cache->reader_mutex.unlock(); 9642: } 9642: 9642: auto* fragmented_iter = new FragmentedRangeTombstoneIterator( 9642: cache, comparator_.comparator, read_seq, read_options.timestamp); 9642: return fragmented_iter; 9642: } 9642: 9642: void MemTable::ConstructFragmentedRangeTombstones() { 9642: 9642: # 620 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 620 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: !IsFragmentedRangeTombstonesConstructed(false) 9642: # 620 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 620 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "!IsFragmentedRangeTombstonesConstructed(false)" 9642: # 620 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 620 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: 9642: if (!is_range_del_table_empty_.load(std::memory_order_relaxed)) { 9642: 9642: auto* unfragmented_iter = new MemTableIterator( 9642: *this, ReadOptions(), nullptr , 9642: nullptr , true ); 9642: 9642: fragmented_range_tombstone_list_ = 9642: std::make_unique( 9642: std::unique_ptr(unfragmented_iter), 9642: comparator_.comparator); 9642: } 9642: } 9642: 9642: port::RWMutex* MemTable::GetLock(const Slice& key) { 9642: return &locks_[GetSliceRangedNPHash(key, locks_.size())]; 9642: } 9642: 9642: MemTable::MemTableStats MemTable::ApproximateStats(const Slice& start_ikey, 9642: const Slice& end_ikey) { 9642: uint64_t entry_count = table_->ApproximateNumEntries(start_ikey, end_ikey); 9642: entry_count += range_del_table_->ApproximateNumEntries(start_ikey, end_ikey); 9642: if (entry_count == 0) { 9642: return {0, 0}; 9642: } 9642: uint64_t n = num_entries_.load(std::memory_order_relaxed); 9642: if (n == 0) { 9642: return {0, 0}; 9642: } 9642: if (entry_count > n) { 9642: 9642: 9642: 9642: entry_count = n; 9642: } 9642: uint64_t data_size = data_size_.load(std::memory_order_relaxed); 9642: return {entry_count * (data_size / n), entry_count}; 9642: } 9642: 9642: Status MemTable::VerifyEncodedEntry(Slice encoded, 9642: const ProtectionInfoKVOS64& kv_prot_info) { 9642: uint32_t ikey_len = 0; 9642: if (!GetVarint32(&encoded, &ikey_len)) { 9642: return Status::Corruption("Unable to parse internal key length"); 9642: } 9642: if (ikey_len < 8 + ts_sz_) { 9642: return Status::Corruption("Internal key length too short"); 9642: } 9642: if (ikey_len > encoded.size()) { 9642: return Status::Corruption("Internal key length too long"); 9642: } 9642: uint32_t value_len = 0; 9642: const size_t user_key_len = ikey_len - 8; 9642: Slice key(encoded.data(), user_key_len); 9642: encoded.remove_prefix(user_key_len); 9642: 9642: uint64_t packed = DecodeFixed64(encoded.data()); 9642: ValueType value_type = kMaxValue; 9642: SequenceNumber sequence_number = kMaxSequenceNumber; 9642: UnPackSequenceAndType(packed, &sequence_number, &value_type); 9642: encoded.remove_prefix(8); 9642: 9642: if (!GetVarint32(&encoded, &value_len)) { 9642: return Status::Corruption("Unable to parse value length"); 9642: } 9642: if (value_len < encoded.size()) { 9642: return Status::Corruption("Value length too short"); 9642: } 9642: if (value_len > encoded.size()) { 9642: return Status::Corruption("Value length too long"); 9642: } 9642: Slice value(encoded.data(), value_len); 9642: 9642: return kv_prot_info.StripS(sequence_number) 9642: .StripKVO(key, value, value_type) 9642: .GetStatus(); 9642: } 9642: 9642: void MemTable::UpdateEntryChecksum(const ProtectionInfoKVOS64* kv_prot_info, 9642: const Slice& key, const Slice& value, 9642: ValueType type, SequenceNumber s, 9642: char* checksum_ptr) { 9642: if (moptions_.protection_bytes_per_key == 0) { 9642: return; 9642: } 9642: 9642: if (kv_prot_info == nullptr) { 9642: ProtectionInfo64() 9642: .ProtectKVO(key, value, type) 9642: .ProtectS(s) 9642: .Encode(static_cast(moptions_.protection_bytes_per_key), 9642: checksum_ptr); 9642: } else { 9642: kv_prot_info->Encode( 9642: static_cast(moptions_.protection_bytes_per_key), checksum_ptr); 9642: } 9642: } 9642: 9642: Status MemTable::Add(SequenceNumber s, ValueType type, 9642: const Slice& key, 9642: const Slice& value, 9642: const ProtectionInfoKVOS64* kv_prot_info, 9642: bool allow_concurrent, 9642: MemTablePostProcessInfo* post_process_info, void** hint) { 9642: 9642: 9642: 9642: 9642: 9642: 9642: uint32_t key_size = static_cast(key.size()); 9642: uint32_t val_size = static_cast(value.size()); 9642: uint32_t internal_key_size = key_size + 8; 9642: const uint32_t encoded_len = VarintLength(internal_key_size) + 9642: internal_key_size + VarintLength(val_size) + 9642: val_size + moptions_.protection_bytes_per_key; 9642: char* buf = nullptr; 9642: std::unique_ptr& table = 9642: type == kTypeRangeDeletion ? range_del_table_ : table_; 9642: KeyHandle handle = table->Allocate(encoded_len, &buf); 9642: 9642: char* p = EncodeVarint32(buf, internal_key_size); 9642: memcpy(p, key.data(), key_size); 9642: Slice key_slice(p, key_size); 9642: p += key_size; 9642: uint64_t packed = PackSequenceAndType(s, type); 9642: EncodeFixed64(p, packed); 9642: p += 8; 9642: p = EncodeVarint32(p, val_size); 9642: memcpy(p, value.data(), val_size); 9642: 9642: # 751 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 751 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: (unsigned)(p + val_size - buf + moptions_.protection_bytes_per_key) == (unsigned)encoded_len 9642: # 751 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 751 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "(unsigned)(p + val_size - buf + moptions_.protection_bytes_per_key) == (unsigned)encoded_len" 9642: # 751 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: 9642: # 752 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: 9642: UpdateEntryChecksum(kv_prot_info, key, value, type, s, 9642: buf + encoded_len - moptions_.protection_bytes_per_key); 9642: Slice encoded(buf, encoded_len - moptions_.protection_bytes_per_key); 9642: if (kv_prot_info != nullptr) { 9642: rocksdb::SyncPoint::GetInstance()->Process("MemTable::Add:Encoded", &encoded); 9642: Status status = VerifyEncodedEntry(encoded, *kv_prot_info); 9642: if (!status.ok()) { 9642: return status; 9642: } 9642: } 9642: 9642: Slice key_without_ts = StripTimestampFromUserKey(key, ts_sz_); 9642: 9642: if (!allow_concurrent) { 9642: 9642: 9642: if (table == table_ && insert_with_hint_prefix_extractor_ != nullptr && 9642: insert_with_hint_prefix_extractor_->InDomain(key_slice)) { 9642: Slice prefix = insert_with_hint_prefix_extractor_->Transform(key_slice); 9642: bool res = table->InsertKeyWithHint(handle, &insert_hints_[prefix]); 9642: if ((__builtin_expect((!res), 0))) { 9642: return Status::TryAgain("key+seq exists"); 9642: } 9642: } else { 9642: bool res = table->InsertKey(handle); 9642: if ((__builtin_expect((!res), 0))) { 9642: return Status::TryAgain("key+seq exists"); 9642: } 9642: } 9642: 9642: 9642: 9642: num_entries_.store(num_entries_.load(std::memory_order_relaxed) + 1, 9642: std::memory_order_relaxed); 9642: data_size_.store(data_size_.load(std::memory_order_relaxed) + encoded_len, 9642: std::memory_order_relaxed); 9642: if (type == kTypeDeletion || type == kTypeSingleDeletion || 9642: type == kTypeDeletionWithTimestamp) { 9642: num_deletes_.store(num_deletes_.load(std::memory_order_relaxed) + 1, 9642: std::memory_order_relaxed); 9642: } else if (type == kTypeRangeDeletion) { 9642: uint64_t val = num_range_deletes_.load(std::memory_order_relaxed) + 1; 9642: num_range_deletes_.store(val, std::memory_order_relaxed); 9642: } 9642: 9642: if (bloom_filter_ && prefix_extractor_ && 9642: prefix_extractor_->InDomain(key_without_ts)) { 9642: bloom_filter_->Add(prefix_extractor_->Transform(key_without_ts)); 9642: } 9642: if (bloom_filter_ && moptions_.memtable_whole_key_filtering) { 9642: bloom_filter_->Add(key_without_ts); 9642: } 9642: 9642: 9642: 9642: # 808 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 808 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: first_seqno_ == 0 || s >= first_seqno_ 9642: # 808 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 808 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "first_seqno_ == 0 || s >= first_seqno_" 9642: # 808 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 808 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: if (first_seqno_ == 0) { 9642: first_seqno_.store(s, std::memory_order_relaxed); 9642: 9642: if (earliest_seqno_ == kMaxSequenceNumber) { 9642: earliest_seqno_.store(GetFirstSequenceNumber(), 9642: std::memory_order_relaxed); 9642: } 9642: 9642: # 816 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 816 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: first_seqno_.load() >= earliest_seqno_.load() 9642: # 816 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 816 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "first_seqno_.load() >= earliest_seqno_.load()" 9642: # 816 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 816 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: } 9642: 9642: # 818 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 818 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: post_process_info == nullptr 9642: # 818 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 818 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "post_process_info == nullptr" 9642: # 818 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 818 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: 9642: 9642: MaybeUpdateNewestUDT(key_slice); 9642: UpdateFlushState(); 9642: } else { 9642: bool res = (hint == nullptr) 9642: ? table->InsertKeyConcurrently(handle) 9642: : table->InsertKeyWithHintConcurrently(handle, hint); 9642: if ((__builtin_expect((!res), 0))) { 9642: return Status::TryAgain("key+seq exists"); 9642: } 9642: 9642: 9642: # 831 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 831 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: post_process_info != nullptr 9642: # 831 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 831 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "post_process_info != nullptr" 9642: # 831 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 831 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: post_process_info->num_entries++; 9642: post_process_info->data_size += encoded_len; 9642: if (type == kTypeDeletion) { 9642: post_process_info->num_deletes++; 9642: } 9642: 9642: if (bloom_filter_ && prefix_extractor_ && 9642: prefix_extractor_->InDomain(key_without_ts)) { 9642: bloom_filter_->AddConcurrently( 9642: prefix_extractor_->Transform(key_without_ts)); 9642: } 9642: if (bloom_filter_ && moptions_.memtable_whole_key_filtering) { 9642: bloom_filter_->AddConcurrently(key_without_ts); 9642: } 9642: 9642: 9642: uint64_t cur_seq_num = first_seqno_.load(std::memory_order_relaxed); 9642: while ((cur_seq_num == 0 || s < cur_seq_num) && 9642: !first_seqno_.compare_exchange_weak(cur_seq_num, s)) { 9642: } 9642: uint64_t cur_earliest_seqno = 9642: earliest_seqno_.load(std::memory_order_relaxed); 9642: while ( 9642: (cur_earliest_seqno == kMaxSequenceNumber || s < cur_earliest_seqno) && 9642: !earliest_seqno_.compare_exchange_weak(cur_earliest_seqno, s)) { 9642: } 9642: } 9642: if (type == kTypeRangeDeletion) { 9642: auto new_cache = std::make_shared(); 9642: size_t size = cached_range_tombstone_.Size(); 9642: if (allow_concurrent) { 9642: post_process_info->num_range_deletes++; 9642: range_del_mutex_.lock(); 9642: } 9642: for (size_t i = 0; i < size; ++i) { 9642: std::shared_ptr* local_cache_ref_ptr = 9642: cached_range_tombstone_.AccessAtCore(i); 9642: auto new_local_cache_ref = std::make_shared< 9642: const std::shared_ptr>(new_cache); 9642: 9642: 9642: 9642: 9642: 9642: std::atomic_store_explicit( 9642: local_cache_ref_ptr, 9642: std::shared_ptr( 9642: new_local_cache_ref, new_cache.get()), 9642: std::memory_order_relaxed); 9642: } 9642: 9642: if (allow_concurrent) { 9642: range_del_mutex_.unlock(); 9642: } 9642: is_range_del_table_empty_.store(false, std::memory_order_relaxed); 9642: } 9642: UpdateOldestKeyTime(); 9642: 9642: rocksdb::SyncPoint::GetInstance()->Process("MemTable::Add:BeforeReturn:Encoded", &encoded); 9642: return Status::OK(); 9642: } 9642: 9642: 9642: namespace { 9642: 9642: struct Saver { 9642: Status* status; 9642: const LookupKey* key; 9642: bool* found_final_value; 9642: bool* merge_in_progress; 9642: std::string* value; 9642: PinnableWideColumns* columns; 9642: SequenceNumber seq; 9642: std::string* timestamp; 9642: const MergeOperator* merge_operator; 9642: 9642: MergeContext* merge_context; 9642: SequenceNumber max_covering_tombstone_seq; 9642: MemTable* mem; 9642: Logger* logger; 9642: Statistics* statistics; 9642: bool inplace_update_support; 9642: bool do_merge; 9642: SystemClock* clock; 9642: 9642: ReadCallback* callback_; 9642: bool* is_blob_index; 9642: bool allow_data_in_errors; 9642: uint32_t protection_bytes_per_key; 9642: bool CheckCallback(SequenceNumber _seq) { 9642: if (callback_) { 9642: return callback_->IsVisible(_seq); 9642: } 9642: return true; 9642: } 9642: }; 9642: } 9642: 9642: static bool SaveValue(void* arg, const char* entry) { 9642: Saver* s = static_cast(arg); 9642: 9642: # 932 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 932 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: s != nullptr 9642: # 932 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 932 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "s != nullptr" 9642: # 932 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 932 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: 9642: # 933 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 933 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: !s->value || !s->columns 9642: # 933 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 933 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "!s->value || !s->columns" 9642: # 933 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 933 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: 9642: MergeContext* merge_context = s->merge_context; 9642: SequenceNumber max_covering_tombstone_seq = s->max_covering_tombstone_seq; 9642: const MergeOperator* merge_operator = s->merge_operator; 9642: 9642: 9642: # 939 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 939 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: merge_context != nullptr 9642: # 939 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 939 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "merge_context != nullptr" 9642: # 939 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 939 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: 9642: 9642: 9642: uint32_t key_length = 0; 9642: const char* key_ptr = GetVarint32Ptr(entry, entry + 5, &key_length); 9642: 9642: # 945 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 945 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: key_length >= 8 9642: # 945 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 945 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "key_length >= 8" 9642: # 945 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 945 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: Slice user_key_slice = Slice(key_ptr, key_length - 8); 9642: const Comparator* user_comparator = 9642: s->mem->GetInternalKeyComparator().user_comparator(); 9642: size_t ts_sz = user_comparator->timestamp_size(); 9642: if (ts_sz && s->timestamp && max_covering_tombstone_seq > 0) { 9642: 9642: 9642: # 952 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 952 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: s->timestamp->size() == ts_sz 9642: # 952 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 952 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "s->timestamp->size() == ts_sz" 9642: # 952 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 952 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: } 9642: if (user_comparator->EqualWithoutTimestamp(user_key_slice, 9642: s->key->user_key())) { 9642: 9642: rocksdb::SyncPoint::GetInstance()->Process("Memtable::SaveValue:Found:entry", &entry); 9642: std::unique_ptr read_lock; 9642: if (s->inplace_update_support) { 9642: read_lock.reset(new ReadLock(s->mem->GetLock(s->key->user_key()))); 9642: } 9642: 9642: if (s->protection_bytes_per_key > 0) { 9642: *(s->status) = MemTable::VerifyEntryChecksum( 9642: entry, s->protection_bytes_per_key, s->allow_data_in_errors); 9642: if (!s->status->ok()) { 9642: rocksdb::Log((InfoLogLevel::ERROR_LEVEL), ((s->logger)), ("[%s:" "967" "] " "In SaveValue: %s"), RocksLogShorterFileName("./db/memtable.cc"), s->status->getState()); 9642: 9642: return false; 9642: } 9642: } 9642: 9642: const uint64_t tag = DecodeFixed64(key_ptr + key_length - 8); 9642: ValueType type; 9642: SequenceNumber seq; 9642: UnPackSequenceAndType(tag, &seq, &type); 9642: 9642: if (!s->CheckCallback(seq)) { 9642: return true; 9642: } 9642: 9642: if (s->seq == kMaxSequenceNumber) { 9642: s->seq = seq; 9642: if (s->seq > max_covering_tombstone_seq) { 9642: if (ts_sz && s->timestamp != nullptr) { 9642: 9642: 9642: 9642: 9642: Slice ts = ExtractTimestampFromUserKey(user_key_slice, ts_sz); 9642: s->timestamp->assign(ts.data(), ts_sz); 9642: } 9642: } else { 9642: s->seq = max_covering_tombstone_seq; 9642: } 9642: } 9642: 9642: if (ts_sz > 0 && s->timestamp != nullptr) { 9642: if (!s->timestamp->empty()) { 9642: 9642: # 1000 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 1000 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ts_sz == s->timestamp->size() 9642: # 1000 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1000 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "ts_sz == s->timestamp->size()" 9642: # 1000 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1000 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: } 9642: 9642: const std::string kMaxTs(ts_sz, '\xff'); 9642: if (s->timestamp->empty() || 9642: user_comparator->CompareTimestamp(*(s->timestamp), kMaxTs) == 0) { 9642: Slice ts = ExtractTimestampFromUserKey(user_key_slice, ts_sz); 9642: s->timestamp->assign(ts.data(), ts_sz); 9642: } 9642: } 9642: 9642: if ((type == kTypeValue || type == kTypeMerge || type == kTypeBlobIndex || 9642: type == kTypeWideColumnEntity || type == kTypeDeletion || 9642: type == kTypeSingleDeletion || type == kTypeDeletionWithTimestamp || 9642: type == kTypeValuePreferredSeqno) && 9642: max_covering_tombstone_seq > seq) { 9642: type = kTypeRangeDeletion; 9642: } 9642: switch (type) { 9642: case kTypeBlobIndex: { 9642: if (!s->do_merge) { 9642: *(s->status) = Status::NotSupported( 9642: "GetMergeOperands not supported by stacked BlobDB"); 9642: *(s->found_final_value) = true; 9642: return false; 9642: } 9642: 9642: if (*(s->merge_in_progress)) { 9642: *(s->status) = Status::NotSupported( 9642: "Merge operator not supported by stacked BlobDB"); 9642: *(s->found_final_value) = true; 9642: return false; 9642: } 9642: 9642: if (s->is_blob_index == nullptr) { 9642: rocksdb::Log((InfoLogLevel::ERROR_LEVEL), ((s->logger)), ("[%s:" "1035" "] " "Encountered unexpected blob index."), RocksLogShorterFileName("./db/memtable.cc")); 9642: *(s->status) = Status::NotSupported( 9642: "Encountered unexpected blob index. Please open DB with " 9642: "ROCKSDB_NAMESPACE::blob_db::BlobDB."); 9642: *(s->found_final_value) = true; 9642: return false; 9642: } 9642: 9642: Slice v = GetLengthPrefixedSlice(key_ptr + key_length); 9642: 9642: *(s->status) = Status::OK(); 9642: 9642: if (s->value) { 9642: s->value->assign(v.data(), v.size()); 9642: } else if (s->columns) { 9642: s->columns->SetPlainValue(v); 9642: } 9642: 9642: *(s->found_final_value) = true; 9642: *(s->is_blob_index) = true; 9642: 9642: return false; 9642: } 9642: case kTypeValue: 9642: case kTypeValuePreferredSeqno: { 9642: Slice v = GetLengthPrefixedSlice(key_ptr + key_length); 9642: 9642: if (type == kTypeValuePreferredSeqno) { 9642: v = ParsePackedValueForValue(v); 9642: } 9642: 9642: *(s->status) = Status::OK(); 9642: 9642: if (!s->do_merge) { 9642: 9642: 9642: 9642: 9642: 9642: merge_context->PushOperand( 9642: v, s->inplace_update_support == false ); 9642: } else if (*(s->merge_in_progress)) { 9642: 9642: # 1077 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 1077 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: s->do_merge 9642: # 1077 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1077 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "s->do_merge" 9642: # 1077 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1077 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: 9642: if (s->value || s->columns) { 9642: 9642: 9642: 9642: *(s->status) = MergeHelper::TimedFullMerge( 9642: merge_operator, s->key->user_key(), 9642: MergeHelper::kPlainBaseValue, v, merge_context->GetOperands(), 9642: s->logger, s->statistics, s->clock, 9642: true, nullptr, 9642: s->value, s->columns); 9642: } 9642: } else if (s->value) { 9642: s->value->assign(v.data(), v.size()); 9642: } else if (s->columns) { 9642: s->columns->SetPlainValue(v); 9642: } 9642: 9642: *(s->found_final_value) = true; 9642: 9642: if (s->is_blob_index != nullptr) { 9642: *(s->is_blob_index) = false; 9642: } 9642: 9642: return false; 9642: } 9642: case kTypeWideColumnEntity: { 9642: Slice v = GetLengthPrefixedSlice(key_ptr + key_length); 9642: 9642: *(s->status) = Status::OK(); 9642: 9642: if (!s->do_merge) { 9642: 9642: 9642: 9642: Slice value_of_default; 9642: *(s->status) = WideColumnSerialization::GetValueOfDefaultColumn( 9642: v, value_of_default); 9642: 9642: if (s->status->ok()) { 9642: merge_context->PushOperand( 9642: value_of_default, 9642: s->inplace_update_support == false ); 9642: } 9642: } else if (*(s->merge_in_progress)) { 9642: 9642: # 1123 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 1123 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: s->do_merge 9642: # 1123 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1123 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "s->do_merge" 9642: # 1123 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1123 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: 9642: if (s->value || s->columns) { 9642: 9642: 9642: 9642: *(s->status) = MergeHelper::TimedFullMerge( 9642: merge_operator, s->key->user_key(), MergeHelper::kWideBaseValue, 9642: v, merge_context->GetOperands(), s->logger, s->statistics, 9642: s->clock, true, 9642: nullptr, s->value, s->columns); 9642: } 9642: } else if (s->value) { 9642: Slice value_of_default; 9642: *(s->status) = WideColumnSerialization::GetValueOfDefaultColumn( 9642: v, value_of_default); 9642: if (s->status->ok()) { 9642: s->value->assign(value_of_default.data(), value_of_default.size()); 9642: } 9642: } else if (s->columns) { 9642: *(s->status) = s->columns->SetWideColumnValue(v); 9642: } 9642: 9642: *(s->found_final_value) = true; 9642: 9642: if (s->is_blob_index != nullptr) { 9642: *(s->is_blob_index) = false; 9642: } 9642: 9642: return false; 9642: } 9642: case kTypeDeletion: 9642: case kTypeDeletionWithTimestamp: 9642: case kTypeSingleDeletion: 9642: case kTypeRangeDeletion: { 9642: if (*(s->merge_in_progress)) { 9642: if (s->value || s->columns) { 9642: 9642: 9642: 9642: *(s->status) = MergeHelper::TimedFullMerge( 9642: merge_operator, s->key->user_key(), MergeHelper::kNoBaseValue, 9642: merge_context->GetOperands(), s->logger, s->statistics, 9642: s->clock, true, 9642: nullptr, s->value, s->columns); 9642: } else { 9642: 9642: 9642: 9642: *(s->status) = Status::OK(); 9642: } 9642: } else { 9642: *(s->status) = Status::NotFound(); 9642: } 9642: *(s->found_final_value) = true; 9642: return false; 9642: } 9642: case kTypeMerge: { 9642: if (!merge_operator) { 9642: *(s->status) = Status::InvalidArgument( 9642: "merge_operator is not properly initialized."); 9642: 9642: 9642: 9642: 9642: *(s->found_final_value) = true; 9642: return false; 9642: } 9642: Slice v = GetLengthPrefixedSlice(key_ptr + key_length); 9642: *(s->merge_in_progress) = true; 9642: merge_context->PushOperand( 9642: v, s->inplace_update_support == false ); 9642: if (perf_level >= PerfLevel::kEnableCount) { perf_context.internal_merge_point_lookup_count += 1; } static_assert(true, "semicolon required"); 9642: 9642: if (s->do_merge && merge_operator->ShouldMerge( 9642: merge_context->GetOperandsDirectionBackward())) { 9642: if (s->value || s->columns) { 9642: 9642: 9642: 9642: *(s->status) = MergeHelper::TimedFullMerge( 9642: merge_operator, s->key->user_key(), MergeHelper::kNoBaseValue, 9642: merge_context->GetOperands(), s->logger, s->statistics, 9642: s->clock, true, 9642: nullptr, s->value, s->columns); 9642: } 9642: 9642: *(s->found_final_value) = true; 9642: return false; 9642: } 9642: if (merge_context->get_merge_operands_options != nullptr && 9642: merge_context->get_merge_operands_options->continue_cb != nullptr && 9642: !merge_context->get_merge_operands_options->continue_cb(v)) { 9642: 9642: *(s->found_final_value) = true; 9642: return false; 9642: } 9642: 9642: return true; 9642: } 9642: default: { 9642: std::string msg("Corrupted value not expected."); 9642: if (s->allow_data_in_errors) { 9642: msg.append("Unrecognized value type: " + 9642: std::to_string(static_cast(type)) + ". "); 9642: msg.append("User key: " + user_key_slice.ToString( true) + 9642: ". "); 9642: msg.append("seq: " + std::to_string(seq) + "."); 9642: } 9642: *(s->status) = Status::Corruption(msg.c_str()); 9642: return false; 9642: } 9642: } 9642: } 9642: 9642: 9642: return false; 9642: } 9642: 9642: bool MemTable::Get(const LookupKey& key, std::string* value, 9642: PinnableWideColumns* columns, std::string* timestamp, 9642: Status* s, MergeContext* merge_context, 9642: SequenceNumber* max_covering_tombstone_seq, 9642: SequenceNumber* seq, const ReadOptions& read_opts, 9642: bool immutable_memtable, ReadCallback* callback, 9642: bool* is_blob_index, bool do_merge) { 9642: 9642: if (IsEmpty()) { 9642: 9642: return false; 9642: } 9642: 9642: PerfStepTimer perf_step_timer_get_from_memtable_time(&(perf_context.get_from_memtable_time)); perf_step_timer_get_from_memtable_time.Start();; 9642: 9642: std::unique_ptr range_del_iter( 9642: NewRangeTombstoneIterator(read_opts, 9642: GetInternalKeySeqno(key.internal_key()), 9642: immutable_memtable)); 9642: if (range_del_iter != nullptr) { 9642: SequenceNumber covering_seq = 9642: range_del_iter->MaxCoveringTombstoneSeqnum(key.user_key()); 9642: if (covering_seq > *max_covering_tombstone_seq) { 9642: *max_covering_tombstone_seq = covering_seq; 9642: if (timestamp) { 9642: 9642: 9642: timestamp->assign(range_del_iter->timestamp().data(), 9642: range_del_iter->timestamp().size()); 9642: } 9642: } 9642: } 9642: 9642: bool found_final_value = false; 9642: bool merge_in_progress = s->IsMergeInProgress(); 9642: bool may_contain = true; 9642: Slice user_key_without_ts = StripTimestampFromUserKey(key.user_key(), ts_sz_); 9642: bool bloom_checked = false; 9642: if (bloom_filter_) { 9642: 9642: 9642: if (moptions_.memtable_whole_key_filtering) { 9642: may_contain = bloom_filter_->MayContain(user_key_without_ts); 9642: bloom_checked = true; 9642: } else { 9642: 9642: # 1287 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 1287 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: prefix_extractor_ 9642: # 1287 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1287 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "prefix_extractor_" 9642: # 1287 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1287 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: if (prefix_extractor_->InDomain(user_key_without_ts)) { 9642: may_contain = bloom_filter_->MayContain( 9642: prefix_extractor_->Transform(user_key_without_ts)); 9642: bloom_checked = true; 9642: } 9642: } 9642: } 9642: 9642: if (bloom_filter_ && !may_contain) { 9642: 9642: if (perf_level >= PerfLevel::kEnableCount) { perf_context.bloom_memtable_miss_count += 1; } static_assert(true, "semicolon required"); 9642: *seq = kMaxSequenceNumber; 9642: } else { 9642: if (bloom_checked) { 9642: if (perf_level >= PerfLevel::kEnableCount) { perf_context.bloom_memtable_hit_count += 1; } static_assert(true, "semicolon required"); 9642: } 9642: GetFromTable(key, *max_covering_tombstone_seq, do_merge, callback, 9642: is_blob_index, value, columns, timestamp, s, merge_context, 9642: seq, &found_final_value, &merge_in_progress); 9642: } 9642: 9642: 9642: 9642: if (!found_final_value && merge_in_progress && !s->IsCorruption()) { 9642: *s = Status::MergeInProgress(); 9642: } 9642: if (perf_level >= PerfLevel::kEnableCount) { perf_context.get_from_memtable_count += 1; } static_assert(true, "semicolon required"); 9642: return found_final_value; 9642: } 9642: 9642: void MemTable::GetFromTable(const LookupKey& key, 9642: SequenceNumber max_covering_tombstone_seq, 9642: bool do_merge, ReadCallback* callback, 9642: bool* is_blob_index, std::string* value, 9642: PinnableWideColumns* columns, 9642: std::string* timestamp, Status* s, 9642: MergeContext* merge_context, SequenceNumber* seq, 9642: bool* found_final_value, bool* merge_in_progress) { 9642: Saver saver; 9642: saver.status = s; 9642: saver.found_final_value = found_final_value; 9642: saver.merge_in_progress = merge_in_progress; 9642: saver.key = &key; 9642: saver.value = value; 9642: saver.columns = columns; 9642: saver.timestamp = timestamp; 9642: saver.seq = kMaxSequenceNumber; 9642: saver.mem = this; 9642: saver.merge_context = merge_context; 9642: saver.max_covering_tombstone_seq = max_covering_tombstone_seq; 9642: saver.merge_operator = moptions_.merge_operator; 9642: saver.logger = moptions_.info_log; 9642: saver.inplace_update_support = moptions_.inplace_update_support; 9642: saver.statistics = moptions_.statistics; 9642: saver.clock = clock_; 9642: saver.callback_ = callback; 9642: saver.is_blob_index = is_blob_index; 9642: saver.do_merge = do_merge; 9642: saver.allow_data_in_errors = moptions_.allow_data_in_errors; 9642: saver.protection_bytes_per_key = moptions_.protection_bytes_per_key; 9642: table_->Get(key, &saver, SaveValue); 9642: *seq = saver.seq; 9642: } 9642: 9642: void MemTable::MultiGet(const ReadOptions& read_options, MultiGetRange* range, 9642: ReadCallback* callback, bool immutable_memtable) { 9642: 9642: if (IsEmpty()) { 9642: 9642: return; 9642: } 9642: PerfStepTimer perf_step_timer_get_from_memtable_time(&(perf_context.get_from_memtable_time)); perf_step_timer_get_from_memtable_time.Start();; 9642: 9642: 9642: 9642: 9642: bool no_range_del = read_options.ignore_range_deletions || 9642: is_range_del_table_empty_.load(std::memory_order_relaxed); 9642: MultiGetRange temp_range(*range, range->begin(), range->end()); 9642: if (bloom_filter_ && no_range_del) { 9642: bool whole_key = 9642: !prefix_extractor_ || moptions_.memtable_whole_key_filtering; 9642: std::array bloom_keys; 9642: std::array may_match; 9642: std::array range_indexes; 9642: int num_keys = 0; 9642: for (auto iter = temp_range.begin(); iter != temp_range.end(); ++iter) { 9642: if (whole_key) { 9642: bloom_keys[num_keys] = iter->ukey_without_ts; 9642: range_indexes[num_keys++] = iter.index(); 9642: } else if (prefix_extractor_->InDomain(iter->ukey_without_ts)) { 9642: bloom_keys[num_keys] = 9642: prefix_extractor_->Transform(iter->ukey_without_ts); 9642: range_indexes[num_keys++] = iter.index(); 9642: } 9642: } 9642: bloom_filter_->MayContain(num_keys, bloom_keys.data(), may_match.data()); 9642: for (int i = 0; i < num_keys; ++i) { 9642: if (!may_match[i]) { 9642: temp_range.SkipIndex(range_indexes[i]); 9642: if (perf_level >= PerfLevel::kEnableCount) { perf_context.bloom_memtable_miss_count += 1; } static_assert(true, "semicolon required"); 9642: } else { 9642: if (perf_level >= PerfLevel::kEnableCount) { perf_context.bloom_memtable_hit_count += 1; } static_assert(true, "semicolon required"); 9642: } 9642: } 9642: } 9642: for (auto iter = temp_range.begin(); iter != temp_range.end(); ++iter) { 9642: bool found_final_value{false}; 9642: bool merge_in_progress = iter->s->IsMergeInProgress(); 9642: if (!no_range_del) { 9642: std::unique_ptr range_del_iter( 9642: NewRangeTombstoneIteratorInternal( 9642: read_options, GetInternalKeySeqno(iter->lkey->internal_key()), 9642: immutable_memtable)); 9642: SequenceNumber covering_seq = 9642: range_del_iter->MaxCoveringTombstoneSeqnum(iter->lkey->user_key()); 9642: if (covering_seq > iter->max_covering_tombstone_seq) { 9642: iter->max_covering_tombstone_seq = covering_seq; 9642: if (iter->timestamp) { 9642: 9642: 9642: iter->timestamp->assign(range_del_iter->timestamp().data(), 9642: range_del_iter->timestamp().size()); 9642: } 9642: } 9642: } 9642: SequenceNumber dummy_seq; 9642: GetFromTable(*(iter->lkey), iter->max_covering_tombstone_seq, true, 9642: callback, &iter->is_blob_index, 9642: iter->value ? iter->value->GetSelf() : nullptr, iter->columns, 9642: iter->timestamp, iter->s, &(iter->merge_context), &dummy_seq, 9642: &found_final_value, &merge_in_progress); 9642: 9642: if (!found_final_value && merge_in_progress) { 9642: *(iter->s) = Status::MergeInProgress(); 9642: } 9642: 9642: if (found_final_value) { 9642: if (iter->value) { 9642: iter->value->PinSelf(); 9642: range->AddValueSize(iter->value->size()); 9642: } else { 9642: 9642: # 1430 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 1430 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: iter->columns 9642: # 1430 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1430 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "iter->columns" 9642: # 1430 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1430 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: range->AddValueSize(iter->columns->serialized_size()); 9642: } 9642: 9642: range->MarkKeyDone(iter); 9642: RecordTick(moptions_.statistics, MEMTABLE_HIT); 9642: if (range->GetValueSize() > read_options.value_size_soft_limit) { 9642: 9642: for (auto range_iter = range->begin(); range_iter != range->end(); 9642: ++range_iter) { 9642: range->MarkKeyDone(range_iter); 9642: *(range_iter->s) = Status::Aborted(); 9642: } 9642: break; 9642: } 9642: } 9642: } 9642: if (perf_level >= PerfLevel::kEnableCount) { perf_context.get_from_memtable_count += 1; } static_assert(true, "semicolon required"); 9642: } 9642: 9642: Status MemTable::Update(SequenceNumber seq, ValueType value_type, 9642: const Slice& key, const Slice& value, 9642: const ProtectionInfoKVOS64* kv_prot_info) { 9642: LookupKey lkey(key, seq); 9642: Slice mem_key = lkey.memtable_key(); 9642: 9642: std::unique_ptr iter( 9642: table_->GetDynamicPrefixIterator()); 9642: iter->Seek(lkey.internal_key(), mem_key.data()); 9642: 9642: if (iter->Valid()) { 9642: 9642: 9642: 9642: 9642: const char* entry = iter->key(); 9642: uint32_t key_length = 0; 9642: const char* key_ptr = GetVarint32Ptr(entry, entry + 5, &key_length); 9642: if (comparator_.comparator.user_comparator()->Equal( 9642: Slice(key_ptr, key_length - 8), lkey.user_key())) { 9642: 9642: const uint64_t tag = DecodeFixed64(key_ptr + key_length - 8); 9642: ValueType type; 9642: SequenceNumber existing_seq; 9642: UnPackSequenceAndType(tag, &existing_seq, &type); 9642: 9642: # 1475 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 1475 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: existing_seq != seq 9642: # 1475 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1475 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "existing_seq != seq" 9642: # 1475 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1475 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: if (type == value_type) { 9642: Slice prev_value = GetLengthPrefixedSlice(key_ptr + key_length); 9642: uint32_t prev_size = static_cast(prev_value.size()); 9642: uint32_t new_size = static_cast(value.size()); 9642: 9642: 9642: if (new_size <= prev_size) { 9642: WriteLock wl(GetLock(lkey.user_key())); 9642: char* p = 9642: EncodeVarint32(const_cast(key_ptr) + key_length, new_size); 9642: memcpy(p, value.data(), value.size()); 9642: 9642: # 1487 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 1487 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: (unsigned)((p + value.size()) - entry) == (unsigned)(VarintLength(key_length) + key_length + VarintLength(value.size()) + value.size()) 9642: # 1487 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1487 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "(unsigned)((p + value.size()) - entry) == (unsigned)(VarintLength(key_length) + key_length + VarintLength(value.size()) + value.size())" 9642: # 1487 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: 9642: 9642: # 1489 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: RecordTick(moptions_.statistics, NUMBER_KEYS_UPDATED); 9642: if (kv_prot_info != nullptr) { 9642: ProtectionInfoKVOS64 updated_kv_prot_info(*kv_prot_info); 9642: 9642: updated_kv_prot_info.UpdateS(seq, existing_seq); 9642: UpdateEntryChecksum(&updated_kv_prot_info, key, value, type, 9642: existing_seq, p + value.size()); 9642: Slice encoded(entry, p + value.size() - entry); 9642: return VerifyEncodedEntry(encoded, updated_kv_prot_info); 9642: } else { 9642: UpdateEntryChecksum(nullptr, key, value, type, existing_seq, 9642: p + value.size()); 9642: } 9642: return Status::OK(); 9642: } 9642: } 9642: } 9642: } 9642: 9642: 9642: return Add(seq, value_type, key, value, kv_prot_info); 9642: } 9642: 9642: Status MemTable::UpdateCallback(SequenceNumber seq, const Slice& key, 9642: const Slice& delta, 9642: const ProtectionInfoKVOS64* kv_prot_info) { 9642: LookupKey lkey(key, seq); 9642: Slice memkey = lkey.memtable_key(); 9642: 9642: std::unique_ptr iter( 9642: table_->GetDynamicPrefixIterator()); 9642: iter->Seek(lkey.internal_key(), memkey.data()); 9642: 9642: if (iter->Valid()) { 9642: 9642: 9642: 9642: 9642: const char* entry = iter->key(); 9642: uint32_t key_length = 0; 9642: const char* key_ptr = GetVarint32Ptr(entry, entry + 5, &key_length); 9642: if (comparator_.comparator.user_comparator()->Equal( 9642: Slice(key_ptr, key_length - 8), lkey.user_key())) { 9642: 9642: const uint64_t tag = DecodeFixed64(key_ptr + key_length - 8); 9642: ValueType type; 9642: uint64_t existing_seq; 9642: UnPackSequenceAndType(tag, &existing_seq, &type); 9642: if (type == kTypeValue) { 9642: Slice prev_value = GetLengthPrefixedSlice(key_ptr + key_length); 9642: uint32_t prev_size = static_cast(prev_value.size()); 9642: 9642: char* prev_buffer = const_cast(prev_value.data()); 9642: uint32_t new_prev_size = prev_size; 9642: 9642: std::string str_value; 9642: WriteLock wl(GetLock(lkey.user_key())); 9642: auto status = moptions_.inplace_callback(prev_buffer, &new_prev_size, 9642: delta, &str_value); 9642: if (status == UpdateStatus::UPDATED_INPLACE) { 9642: 9642: 9642: # 1551 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 1551 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: new_prev_size <= prev_size 9642: # 1551 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1551 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "new_prev_size <= prev_size" 9642: # 1551 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1551 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: if (new_prev_size < prev_size) { 9642: 9642: char* p = EncodeVarint32(const_cast(key_ptr) + key_length, 9642: new_prev_size); 9642: if (VarintLength(new_prev_size) < VarintLength(prev_size)) { 9642: 9642: memcpy(p, prev_buffer, new_prev_size); 9642: prev_buffer = p; 9642: } 9642: } 9642: RecordTick(moptions_.statistics, NUMBER_KEYS_UPDATED); 9642: UpdateFlushState(); 9642: Slice new_value(prev_buffer, new_prev_size); 9642: if (kv_prot_info != nullptr) { 9642: ProtectionInfoKVOS64 updated_kv_prot_info(*kv_prot_info); 9642: 9642: updated_kv_prot_info.UpdateS(seq, existing_seq); 9642: updated_kv_prot_info.UpdateV(delta, new_value); 9642: Slice encoded(entry, prev_buffer + new_prev_size - entry); 9642: UpdateEntryChecksum(&updated_kv_prot_info, key, new_value, type, 9642: existing_seq, prev_buffer + new_prev_size); 9642: return VerifyEncodedEntry(encoded, updated_kv_prot_info); 9642: } else { 9642: UpdateEntryChecksum(nullptr, key, new_value, type, existing_seq, 9642: prev_buffer + new_prev_size); 9642: } 9642: return Status::OK(); 9642: } else if (status == UpdateStatus::UPDATED) { 9642: Status s; 9642: if (kv_prot_info != nullptr) { 9642: ProtectionInfoKVOS64 updated_kv_prot_info(*kv_prot_info); 9642: updated_kv_prot_info.UpdateV(delta, str_value); 9642: s = Add(seq, kTypeValue, key, Slice(str_value), 9642: &updated_kv_prot_info); 9642: } else { 9642: s = Add(seq, kTypeValue, key, Slice(str_value), 9642: nullptr ); 9642: } 9642: RecordTick(moptions_.statistics, NUMBER_KEYS_WRITTEN); 9642: UpdateFlushState(); 9642: return s; 9642: } else if (status == UpdateStatus::UPDATE_FAILED) { 9642: 9642: 9642: UpdateFlushState(); 9642: return Status::OK(); 9642: } 9642: } 9642: } 9642: } 9642: 9642: return Status::NotFound(); 9642: } 9642: 9642: size_t MemTable::CountSuccessiveMergeEntries(const LookupKey& key, 9642: size_t limit) { 9642: Slice memkey = key.memtable_key(); 9642: 9642: 9642: 9642: 9642: std::unique_ptr iter( 9642: table_->GetDynamicPrefixIterator()); 9642: iter->Seek(key.internal_key(), memkey.data()); 9642: 9642: size_t num_successive_merges = 0; 9642: 9642: for (; iter->Valid() && num_successive_merges < limit; iter->Next()) { 9642: const char* entry = iter->key(); 9642: uint32_t key_length = 0; 9642: const char* iter_key_ptr = GetVarint32Ptr(entry, entry + 5, &key_length); 9642: if (!comparator_.comparator.user_comparator()->Equal( 9642: Slice(iter_key_ptr, key_length - 8), key.user_key())) { 9642: break; 9642: } 9642: 9642: const uint64_t tag = DecodeFixed64(iter_key_ptr + key_length - 8); 9642: ValueType type; 9642: uint64_t unused; 9642: UnPackSequenceAndType(tag, &unused, &type); 9642: if (type != kTypeMerge) { 9642: break; 9642: } 9642: 9642: ++num_successive_merges; 9642: } 9642: 9642: return num_successive_merges; 9642: } 9642: 9642: void MemTableRep::Get(const LookupKey& k, void* callback_args, 9642: bool (*callback_func)(void* arg, const char* entry)) { 9642: auto iter = GetDynamicPrefixIterator(); 9642: for (iter->Seek(k.internal_key(), k.memtable_key().data()); 9642: iter->Valid() && callback_func(callback_args, iter->key()); 9642: iter->Next()) { 9642: } 9642: } 9642: 9642: void MemTable::RefLogContainingPrepSection(uint64_t log) { 9642: 9642: # 1652 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 1652 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: log > 0 9642: # 1652 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1652 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "log > 0" 9642: # 1652 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1652 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: auto cur = min_prep_log_referenced_.load(); 9642: while ((log < cur || cur == 0) && 9642: !min_prep_log_referenced_.compare_exchange_strong(cur, log)) { 9642: cur = min_prep_log_referenced_.load(); 9642: } 9642: } 9642: 9642: uint64_t MemTable::GetMinLogContainingPrepSection() { 9642: return min_prep_log_referenced_.load(); 9642: } 9642: 9642: void MemTable::MaybeUpdateNewestUDT(const Slice& user_key) { 9642: if (ts_sz_ == 0 || persist_user_defined_timestamps_) { 9642: return; 9642: } 9642: const Comparator* ucmp = GetInternalKeyComparator().user_comparator(); 9642: Slice udt = ExtractTimestampFromUserKey(user_key, ts_sz_); 9642: if (newest_udt_.empty() || ucmp->CompareTimestamp(udt, newest_udt_) > 0) { 9642: newest_udt_ = udt; 9642: } 9642: } 9642: 9642: const Slice& MemTable::GetNewestUDT() const { 9642: 9642: 9642: 9642: # 1678 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: (static_cast ( 9642: # 1678 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ts_sz_ > 0 && !persist_user_defined_timestamps_ 9642: # 1678 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: ) ? void (0) : __assert_fail ( 9642: # 1678 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: "ts_sz_ > 0 && !persist_user_defined_timestamps_" 9642: # 1678 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 9642: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 9642: # 1678 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 9642: ; 9642: return newest_udt_; 9642: } 9642: 9642: } === END GCC DUMP === make[3]: *** [CMakeFiles/rocksdb.dir/build.make:1115: CMakeFiles/rocksdb.dir/db/memtable.cc.o] Error 1 make[3]: Leaving directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' make[2]: *** [CMakeFiles/Makefile2:176: CMakeFiles/rocksdb.dir/all] Error 2 make[2]: *** Waiting for unfinished jobs.... [ 19%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/dbformat.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/dbformat.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/dbformat.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/dbformat.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/dbformat.cc [ 19%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/error_handler.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/error_handler.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/error_handler.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/error_handler.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/error_handler.cc In file included from /usr/include/c++/13/vector:65, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_readonly.h:10, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_readonly.cc:6: /usr/include/c++/13/bits/stl_uninitialized.h: In function '_ForwardIterator std::__do_uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]': /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 113 | __do_uninit_copy(_InputIterator __first, _InputIterator __last, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; _Tp = rocksdb::DbPath]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:606:31, inlined from 'rocksdb::ColumnFamilyOptions::ColumnFamilyOptions(const rocksdb::ColumnFamilyOptions&)' at /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h:66:8: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:72: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, rocksdb::ColumnFamilyOptions&}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, rocksdb::ColumnFamilyOptions&}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]', inlined from 'static rocksdb::Status rocksdb::DB::OpenForReadOnly(const rocksdb::Options&, const std::string&, rocksdb::DB**, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_readonly.cc:296:31: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 20%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/event_helpers.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/event_helpers.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/event_helpers.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/event_helpers.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/event_helpers.cc [ 20%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/experimental.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/experimental.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/experimental.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/experimental.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/experimental.cc In file included from /usr/include/c++/13/bits/stl_algo.h:61, from /usr/include/c++/13/functional:67, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.h:13, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.h:12, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:6: /usr/include/c++/13/bits/stl_heap.h: In function 'void std::__adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Distance = int; _Tp = long long unsigned int; _Compare = __gnu_cxx::__ops::_Iter_less_iter]': /usr/include/c++/13/bits/stl_heap.h:224:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 224 | __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex, | ^~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h: In function 'void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Size = int; _Compare = __gnu_cxx::__ops::_Iter_less_iter]': /usr/include/c++/13/bits/stl_algo.h:1918:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1918 | __introsort_loop(_RandomAccessIterator __first, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:1918:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 /usr/include/c++/13/bits/stl_algo.h:1932:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1932 | std::__introsort_loop(__cut, __last, __depth_limit, __comp); | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h: In function 'void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]': /usr/include/c++/13/bits/stl_algo.h:1812:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1812 | __insertion_sort(_RandomAccessIterator __first, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:1812:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.h:10: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/monitoring/statistics_impl.h:10, from /build/reproducible-path/rocksdb-9.3.1/monitoring/instrumented_mutex.h:8, from /build/reproducible-path/rocksdb-9.3.1/db/error_handler.h:9, from /build/reproducible-path/rocksdb-9.3.1/db/error_handler.cc:6: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'rocksdb::Status rocksdb::DBImplSecondary::FindNewLogNumbers(std::vector*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:127:22: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In function 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]', inlined from 'void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator >]' at /usr/include/c++/13/bits/stl_algo.h:4861:18, inlined from 'rocksdb::Status rocksdb::DBImplSecondary::FindNewLogNumbers(std::vector*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:132:14: /usr/include/c++/13/bits/stl_algo.h:1947:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1947 | std::__introsort_loop(__first, __last, | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ 1948 | std::__lg(__last - __first) * 2, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1949 | __comp); | ~~~~~~~ In function 'void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]', inlined from 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]' at /usr/include/c++/13/bits/stl_algo.h:1950:31, inlined from 'void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator >]' at /usr/include/c++/13/bits/stl_algo.h:4861:18, inlined from 'rocksdb::Status rocksdb::DBImplSecondary::FindNewLogNumbers(std::vector*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:132:14: /usr/include/c++/13/bits/stl_algo.h:1859:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1859 | std::__insertion_sort(__first, __first + int(_S_threshold), __comp); | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:1864:30: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1864 | std::__insertion_sort(__first, __last, __comp); | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'void rocksdb::ErrorHandler::AddFilesToQuarantine(rocksdb::autovector*>)' at /build/reproducible-path/rocksdb-9.3.1/db/error_handler.cc:486:37: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In file included from /usr/include/c++/13/map:62, from /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl.h:16: /usr/include/c++/13/bits/stl_tree.h: In member function 'void std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_erase_aux(const_iterator) [with _Key = long long unsigned int; _Val = std::pair >; _KeyOfValue = std::_Select1st > >; _Compare = std::less; _Alloc = std::allocator > >]': /usr/include/c++/13/bits/stl_tree.h:2489:5: note: parameter passing for argument of type 'std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::const_iterator' changed in GCC 7.1 2489 | _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_tree.h: In member function 'std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_emplace_hint_unique(const_iterator, _Args&& ...) [with _Args = {std::pair > >}; _Key = long long unsigned int; _Val = std::pair >; _KeyOfValue = std::_Select1st > >; _Compare = std::less; _Alloc = std::allocator > >]': /usr/include/c++/13/bits/stl_tree.h:2458:7: note: parameter passing for argument of type 'std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::const_iterator' changed in GCC 7.1 2458 | _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::erase(iterator) [with _Key = long long unsigned int; _Val = std::pair >; _KeyOfValue = std::_Select1st > >; _Compare = std::less; _Alloc = std::allocator > >]', inlined from 'std::map<_Key, _Tp, _Compare, _Alloc>::iterator std::map<_Key, _Tp, _Compare, _Alloc>::erase(iterator) [with _Key = long long unsigned int; _Tp = std::unique_ptr; _Compare = std::less; _Alloc = std::allocator > >]' at /usr/include/c++/13/bits/stl_map.h:1088:26, inlined from 'rocksdb::Status rocksdb::DBImplSecondary::MaybeInitLogReader(uint64_t, rocksdb::log::FragmentBufferedReader**)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:145:25: /usr/include/c++/13/bits/stl_tree.h:1210:21: note: parameter passing for argument of type 'std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::const_iterator' changed in GCC 7.1 1210 | _M_erase_aux(__position); | ~~~~~~~~~~~~^~~~~~~~~~~~ In file included from /usr/include/c++/13/map:63: In member function 'std::map<_Key, _Tp, _Compare, _Alloc>::iterator std::map<_Key, _Tp, _Compare, _Alloc>::emplace_hint(const_iterator, _Args&& ...) [with _Args = {std::pair > >}; _Key = long long unsigned int; _Tp = std::unique_ptr; _Compare = std::less; _Alloc = std::allocator > >]', inlined from 'std::__enable_if_t, _Pair>::value, std::pair, std::_Select1st >, _Compare, typename __gnu_cxx::__alloc_traits<_Allocator>::rebind >::other>::iterator, bool> > std::map<_Key, _Tp, _Compare, _Alloc>::insert(_Pair&&) [with _Pair = std::pair >; _Key = long long unsigned int; _Tp = std::unique_ptr; _Compare = std::less; _Alloc = std::allocator > >]' at /usr/include/c++/13/bits/stl_map.h:860:27, inlined from 'rocksdb::Status rocksdb::DBImplSecondary::MaybeInitLogReader(uint64_t, rocksdb::log::FragmentBufferedReader**)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:174:24: /usr/include/c++/13/bits/stl_map.h:640:45: note: parameter passing for argument of type 'std::map >::const_iterator' {aka 'std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::const_iterator'} changed in GCC 7.1 640 | return _M_t._M_emplace_hint_unique(__pos, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~ 641 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_tree.h: In member function 'void std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_erase_aux(const_iterator, const_iterator) [with _Key = long long unsigned int; _Val = std::pair >; _KeyOfValue = std::_Select1st > >; _Compare = std::less; _Alloc = std::allocator > >]': /usr/include/c++/13/bits/stl_tree.h:2503:5: note: parameter passing for argument of type 'std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::const_iterator' changed in GCC 7.1 2503 | _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_tree.h:2503:5: note: parameter passing for argument of type 'std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::const_iterator' changed in GCC 7.1 [ 20%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/external_sst_file_ingestion_job.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/external_sst_file_ingestion_job.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/external_sst_file_ingestion_job.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/external_sst_file_ingestion_job.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/external_sst_file_ingestion_job.cc /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, rocksdb::ColumnFamilyOptions&}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, rocksdb::ColumnFamilyOptions&}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]', inlined from 'static rocksdb::Status rocksdb::DB::OpenAsSecondary(const rocksdb::Options&, const std::string&, const std::string&, rocksdb::DB**)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:746:31: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const rocksdb::ColumnFamilyDescriptor&}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::erase(const_iterator, const_iterator) [with _Key = long long unsigned int; _Val = std::pair >; _KeyOfValue = std::_Select1st > >; _Compare = std::less; _Alloc = std::allocator > >]', inlined from 'std::map<_Key, _Tp, _Compare, _Alloc>::iterator std::map<_Key, _Tp, _Compare, _Alloc>::erase(const_iterator, const_iterator) [with _Key = long long unsigned int; _Tp = std::unique_ptr; _Compare = std::less; _Alloc = std::allocator > >]' at /usr/include/c++/13/bits/stl_map.h:1139:26, inlined from 'rocksdb::Status rocksdb::DBImplSecondary::RecoverLogFiles(const std::vector&, rocksdb::SequenceNumber*, std::unordered_set*, rocksdb::JobContext*)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:338:23: /usr/include/c++/13/bits/stl_tree.h:1239:21: note: parameter passing for argument of type 'std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::const_iterator' changed in GCC 7.1 1239 | _M_erase_aux(__first, __last); | ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ [ 20%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/file_indexer.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/file_indexer.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/file_indexer.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/file_indexer.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/file_indexer.cc [ 20%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/flush_job.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/flush_job.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/flush_job.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/flush_job.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/flush_job.cc In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]', inlined from 'static rocksdb::Status rocksdb::DB::OpenAndCompact(const rocksdb::OpenAndCompactOptions&, const std::string&, const std::string&, const std::string&, std::string*, const rocksdb::CompactionServiceOptionsOverride&)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:978:28: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, rocksdb::ColumnFamilyOptions&}; _Tp = rocksdb::ColumnFamilyDescriptor; _Alloc = std::allocator]', inlined from 'static rocksdb::Status rocksdb::DB::OpenAndCompact(const rocksdb::OpenAndCompactOptions&, const std::string&, const std::string&, const std::string&, std::string*, const rocksdb::CompactionServiceOptionsOverride&)' at /build/reproducible-path/rocksdb-9.3.1/db/db_impl/db_impl_secondary.cc:983:33: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 20%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/flush_scheduler.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/flush_scheduler.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/flush_scheduler.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/flush_scheduler.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/flush_scheduler.cc In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h:12, from /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/experimental.h:12, from /build/reproducible-path/rocksdb-9.3.1/db/experimental.cc:6: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, int}; _Tp = rocksdb::DbPath; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {const std::__cxx11::basic_string, std::allocator >&, int}; _Tp = rocksdb::DbPath; _Alloc = std::allocator]', inlined from 'static rocksdb::ImmutableDBOptions rocksdb::OfflineManifestWriter::WithDbPath(const rocksdb::DBOptions&, const std::string&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_util.h:71:31, inlined from 'rocksdb::OfflineManifestWriter::OfflineManifestWriter(const rocksdb::DBOptions&, const std::string&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_util.h:23:9: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 20%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/forward_iterator.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/forward_iterator.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/forward_iterator.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/forward_iterator.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/forward_iterator.cc /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:486:28, inlined from 'rocksdb::Status rocksdb::experimental::UpdateManifestForFilesState(const rocksdb::DBOptions&, const std::string&, const std::vector&, const UpdateManifestForFilesStateOptions&)' at /build/reproducible-path/rocksdb-9.3.1/db/experimental.cc:105:27: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:495:35, inlined from 'rocksdb::Status rocksdb::experimental::UpdateManifestForFilesState(const rocksdb::DBOptions&, const std::string&, const std::vector&, const UpdateManifestForFilesStateOptions&)' at /build/reproducible-path/rocksdb-9.3.1/db/experimental.cc:105:27: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ [ 21%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/import_column_family_job.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/import_column_family_job.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/import_column_family_job.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/import_column_family_job.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/import_column_family_job.cc [ 21%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/internal_stats.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/internal_stats.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/internal_stats.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/internal_stats.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/internal_stats.cc In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/external_sst_file_ingestion_job.h:9, from /build/reproducible-path/rocksdb-9.3.1/db/external_sst_file_ingestion_job.cc:6: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/flush_job.h:18, from /build/reproducible-path/rocksdb-9.3.1/db/flush_job.cc:10: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, const rocksdb::FileMetaData&}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::IngestedFileInfo}; _Tp = rocksdb::IngestedFileInfo; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::BlobFileAdditionInfo}; _Tp = rocksdb::BlobFileAdditionInfo; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::IngestedFileInfo}; _Tp = rocksdb::IngestedFileInfo; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::emplace_back(Args&& ...) [with Args = {rocksdb::IngestedFileInfo}; T = rocksdb::IngestedFileInfo; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:303:25, inlined from 'rocksdb::Status rocksdb::ExternalSstFileIngestionJob::Prepare(const std::vector >&, const std::vector >&, const std::vector >&, const rocksdb::Temperature&, uint64_t, rocksdb::SuperVersion*)' at /build/reproducible-path/rocksdb-9.3.1/db/external_sst_file_ingestion_job.cc:64:34: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::BlobFileAdditionInfo}; _Tp = rocksdb::BlobFileAdditionInfo; _Alloc = std::allocator]', inlined from 'std::unique_ptr rocksdb::FlushJob::GetFlushJobInfo() const' at /build/reproducible-path/rocksdb-9.3.1/db/flush_job.cc:1128:48: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, const rocksdb::FileMetaData&}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, const rocksdb::FileMetaData&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:503:28, inlined from 'rocksdb::Status rocksdb::ExternalSstFileIngestionJob::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/external_sst_file_ingestion_job.cc:480:18: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(T&&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:274:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, const rocksdb::FileMetaData&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:504:35, inlined from 'rocksdb::Status rocksdb::ExternalSstFileIngestionJob::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/external_sst_file_ingestion_job.cc:480:18: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:486:28: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:495:35: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(T&&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:274:22, inlined from 'rocksdb::VersionEdit::SetBlobFileAdditions(BlobFileAdditions)::' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:562:41, inlined from '_Funct std::for_each(_IIter, _IIter, _Funct) [with _IIter = __gnu_cxx::__normal_iterator >; _Funct = rocksdb::VersionEdit::SetBlobFileAdditions(BlobFileAdditions)::]' at /usr/include/c++/13/bits/stl_algo.h:3833:5, inlined from 'void rocksdb::VersionEdit::SetBlobFileAdditions(BlobFileAdditions)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:559:18, inlined from 'rocksdb::Status rocksdb::FlushJob::WriteLevel0Table()' at /build/reproducible-path/rocksdb-9.3.1/db/flush_job.cc:1049:32: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ [ 21%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/logs_with_prep_tracker.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/logs_with_prep_tracker.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/logs_with_prep_tracker.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/logs_with_prep_tracker.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/logs_with_prep_tracker.cc In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/logs_with_prep_tracker.h:13, from /build/reproducible-path/rocksdb-9.3.1/db/logs_with_prep_tracker.cc:6: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {rocksdb::LogsWithPrepTracker::LogCnt}; _Tp = rocksdb::LogsWithPrepTracker::LogCnt; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::_M_insert_rval(const_iterator, value_type&&) [with _Tp = rocksdb::LogsWithPrepTracker::LogCnt; _Alloc = std::allocator]', inlined from 'std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::insert(const_iterator, value_type&&) [with _Tp = rocksdb::LogsWithPrepTracker::LogCnt; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:1394:30, inlined from 'void rocksdb::LogsWithPrepTracker::MarkLogAsContainingPrepSection(uint64_t)' at /build/reproducible-path/rocksdb-9.3.1/db/logs_with_prep_tracker.cc:39:27: /usr/include/c++/13/bits/vector.tcc:372:26: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 372 | _M_realloc_insert(begin() + __n, std::move(__v)); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 21%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/log_reader.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/log_reader.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/log_reader.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/log_reader.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/log_reader.cc [ 21%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/log_writer.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/log_writer.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/log_writer.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/log_writer.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/log_writer.cc [ 21%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/malloc_stats.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/malloc_stats.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/malloc_stats.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/malloc_stats.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/malloc_stats.cc [ 21%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/memtable.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/memtable.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/memtable.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/memtable.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/memtable.cc In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:16, from /build/reproducible-path/rocksdb-9.3.1/db/version_builder.h:14, from /build/reproducible-path/rocksdb-9.3.1/db/import_column_family_job.cc:7: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, const rocksdb::FileMetaData&}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:486:28, inlined from 'rocksdb::Status rocksdb::ImportColumnFamilyJob::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/import_column_family_job.cc:216:33: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:495:35, inlined from 'rocksdb::Status rocksdb::ImportColumnFamilyJob::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/import_column_family_job.cc:216:33: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, const rocksdb::FileMetaData&}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, const rocksdb::FileMetaData&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:503:28, inlined from 'rocksdb::Status rocksdb::ImportColumnFamilyJob::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/import_column_family_job.cc:239:24: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(T&&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:274:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, const rocksdb::FileMetaData&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:504:35, inlined from 'rocksdb::Status rocksdb::ImportColumnFamilyJob::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/import_column_family_job.cc:239:24: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const rocksdb::IngestedFileInfo&}; _Tp = rocksdb::IngestedFileInfo; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ [ 21%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/memtable_list.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/memtable_list.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/memtable_list.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/memtable_list.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/memtable_list.cc In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = rocksdb::IngestedFileInfo; _Alloc = std::allocator]', inlined from 'rocksdb::Status rocksdb::ImportColumnFamilyJob::Prepare(uint64_t, rocksdb::SuperVersion*)' at /build/reproducible-path/rocksdb-9.3.1/db/import_column_family_job.cc:59:39: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator > >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ [ 22%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/merge_helper.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/merge_helper.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/merge_helper.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/merge_helper.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/merge_helper.cc [ 22%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/merge_operator.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/merge_operator.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/merge_operator.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/merge_operator.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/merge_operator.cc /build/reproducible-path/rocksdb-9.3.1/db/memtable.cc: In member function 'void rocksdb::MemTable::UpdateOldestKeyTime()': /build/reproducible-path/rocksdb-9.3.1/db/memtable.cc:273:1: error: insn does not satisfy its constraints: 273 | } | ^ (insn 275 274 276 13 (set (reg:CC_DNE 100 cc) (compare:CC_DNE (ior:SI (ne:SI (reg:SI 0 r0 [164]) (const_int -1 [0xffffffffffffffff])) (ne:SI (reg:SI 1 r1 [+4 ]) (const_int -1 [0xffffffffffffffff]))) (const_int 0 [0]))) "/usr/include/c++/13/bits/atomic_base.h":577:36 343 {*cmp_ior} (expr_list:REG_DEAD (reg:SI 1 r1 [+4 ]) (expr_list:REG_DEAD (reg:SI 0 r0 [164]) (nil)))) during RTL pass: cprop_hardreg /build/reproducible-path/rocksdb-9.3.1/db/memtable.cc:273:1: internal compiler error: in extract_constrain_insn, at recog.cc:2692 0x5cb837 internal_error(char const*, ...) ???:0 0x5cb8ed fancy_abort(char const*, int, char const*) ???:0 0x3699f9 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*) ???:0 0x369a2b _fatal_insn_not_found(rtx_def const*, char const*, int, char const*) ???:0 0x7ef881 extract_constrain_insn(rtx_insn*) ???:0 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See for instructions. [ 22%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/output_validator.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/output_validator.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/output_validator.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/output_validator.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/output_validator.cc [ 22%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/periodic_task_scheduler.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/periodic_task_scheduler.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/periodic_task_scheduler.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/periodic_task_scheduler.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/periodic_task_scheduler.cc [ 22%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/range_del_aggregator.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/range_del_aggregator.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/range_del_aggregator.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/range_del_aggregator.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.cc [ 22%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/range_tombstone_fragmenter.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/range_tombstone_fragmenter.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/range_tombstone_fragmenter.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/range_tombstone_fragmenter.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.cc [ 22%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/repair.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/repair.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/repair.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/repair.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/repair.cc [ 23%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/seqno_to_time_mapping.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/seqno_to_time_mapping.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/seqno_to_time_mapping.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/seqno_to_time_mapping.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.cc In file included from /usr/include/c++/13/map:62, from /build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h:11, from /build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.cc:6: /usr/include/c++/13/bits/stl_tree.h: In member function 'std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_emplace_hint_unique(const_iterator, _Args&& ...) [with _Args = {const long long unsigned int&, rocksdb::RangeDelAggregator::StripeRep}; _Key = long long unsigned int; _Val = std::pair; _KeyOfValue = std::_Select1st >; _Compare = std::less; _Alloc = std::allocator >]': /usr/include/c++/13/bits/stl_tree.h:2458:7: note: parameter passing for argument of type 'std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::const_iterator' changed in GCC 7.1 2458 | _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/map:63: In member function 'std::map<_Key, _Tp, _Compare, _Alloc>::iterator std::map<_Key, _Tp, _Compare, _Alloc>::emplace_hint(const_iterator, _Args&& ...) [with _Args = {const long long unsigned int&, rocksdb::RangeDelAggregator::StripeRep}; _Key = long long unsigned int; _Tp = rocksdb::RangeDelAggregator::StripeRep; _Compare = std::less; _Alloc = std::allocator >]', inlined from 'std::pair, std::_Select1st >, _Compare, typename __gnu_cxx::__alloc_traits<_Alloc>::rebind >::other>::iterator, bool> std::map<_Key, _Tp, _Compare, _Alloc>::emplace(_Args&& ...) [with _Args = {const long long unsigned int&, rocksdb::RangeDelAggregator::StripeRep}; _Key = long long unsigned int; _Tp = rocksdb::RangeDelAggregator::StripeRep; _Compare = std::less; _Alloc = std::allocator >]' at /usr/include/c++/13/bits/stl_map.h:601:22, inlined from 'virtual void rocksdb::CompactionRangeDelAggregator::AddTombstones(std::unique_ptr, const rocksdb::InternalKey*, const rocksdb::InternalKey*)' at /build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.cc:386:45: /usr/include/c++/13/bits/stl_map.h:640:45: note: parameter passing for argument of type 'std::map::const_iterator' {aka 'std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::const_iterator'} changed in GCC 7.1 640 | return _M_t._M_emplace_hint_unique(__pos, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~ 641 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h:12, from /build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.cc:6: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/set:62, from /build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h:10: /usr/include/c++/13/bits/stl_tree.h: In member function 'std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_emplace_hint_unique(const_iterator, _Args&& ...) [with _Args = {long long unsigned int&, std::unique_ptr >}; _Key = long long unsigned int; _Val = std::pair >; _KeyOfValue = std::_Select1st > >; _Compare = std::less; _Alloc = std::allocator > >]': /usr/include/c++/13/bits/stl_tree.h:2458:7: note: parameter passing for argument of type 'std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::const_iterator' changed in GCC 7.1 2458 | _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/map:63, from /build/reproducible-path/rocksdb-9.3.1/monitoring/statistics_impl.h:8, from /build/reproducible-path/rocksdb-9.3.1/monitoring/perf_step_timer.h:8, from /build/reproducible-path/rocksdb-9.3.1/monitoring/perf_context_imp.h:7, from /build/reproducible-path/rocksdb-9.3.1/util/user_comparator_wrapper.h:11, from /build/reproducible-path/rocksdb-9.3.1/db/dbformat.h:23, from /build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h:14: In member function 'std::map<_Key, _Tp, _Compare, _Alloc>::iterator std::map<_Key, _Tp, _Compare, _Alloc>::emplace_hint(const_iterator, _Args&& ...) [with _Args = {long long unsigned int&, std::unique_ptr >}; _Key = long long unsigned int; _Tp = std::unique_ptr; _Compare = std::less; _Alloc = std::allocator > >]', inlined from 'std::pair, std::_Select1st >, _Compare, typename __gnu_cxx::__alloc_traits<_Allocator>::rebind >::other>::iterator, bool> std::map<_Key, _Tp, _Compare, _Alloc>::emplace(_Args&& ...) [with _Args = {long long unsigned int&, std::unique_ptr >}; _Key = long long unsigned int; _Tp = std::unique_ptr; _Compare = std::less; _Alloc = std::allocator > >]' at /usr/include/c++/13/bits/stl_map.h:601:22, inlined from 'std::map > rocksdb::FragmentedRangeTombstoneIterator::SplitBySnapshot(const std::vector&)' at /build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.cc:506:21: /usr/include/c++/13/bits/stl_map.h:640:45: note: parameter passing for argument of type 'std::map >::const_iterator' {aka 'std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::const_iterator'} changed in GCC 7.1 640 | return _M_t._M_emplace_hint_unique(__pos, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~ 641 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/bits/stl_algo.h:61, from /usr/include/c++/13/algorithm:61, from /build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h:9, from /build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.cc:7: /usr/include/c++/13/bits/stl_heap.h: In function 'void std::__push_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare&) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Distance = int; _Tp = rocksdb::SeqnoToTimeMapping::EnforceCapacity(bool)::RemovalCandidate; _Compare = __gnu_cxx::__ops::_Iter_comp_val >]': /usr/include/c++/13/bits/stl_heap.h:135:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 135 | __push_heap(_RandomAccessIterator __first, | ^~~~~~~~~~~ [ 23%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/snapshot_impl.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/snapshot_impl.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/snapshot_impl.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/snapshot_impl.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/snapshot_impl.cc In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'rocksdb::FragmentedRangeTombstoneList::FragmentTombstones(std::unique_ptr >, const rocksdb::InternalKeyComparator&, bool, const std::vector&)::' at /build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.cc:142:35: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'rocksdb::FragmentedRangeTombstoneList::FragmentTombstones(std::unique_ptr >, const rocksdb::InternalKeyComparator&, bool, const std::vector&)::' at /build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.cc:171:38: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ [ 23%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/table_cache.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/table_cache.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/table_cache.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/table_cache.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/table_cache.cc [ 23%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/table_properties_collector.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/table_properties_collector.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/table_properties_collector.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/table_properties_collector.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.cc [ 23%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/transaction_log_impl.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/transaction_log_impl.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/transaction_log_impl.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/transaction_log_impl.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/transaction_log_impl.cc [ 23%] Building CXX object CMakeFiles/rocksdb-shared.dir/db/trim_history_scheduler.cc.o /usr/bin/c++ -DBZIP2 -DGFLAGS=1 -DGFLAGS_IS_A_DLL=0 -DLZ4 -DOS_LINUX -DROCKSDB_AUXV_GETAUXVAL_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DROCKSDB_LIB_IO_POSIX -DROCKSDB_MALLOC_USABLE_SIZE -DROCKSDB_NO_DYNAMIC_EXTENSION -DROCKSDB_PLATFORM_POSIX -DROCKSDB_PTHREAD_ADAPTIVE_MUTEX -DROCKSDB_RANGESYNC_PRESENT -DROCKSDB_SCHED_GETCPU_PRESENT -DSNAPPY -DZLIB -DZSTD -Drocksdb_shared_EXPORTS -I/build/reproducible-path/rocksdb-9.3.1 -I/build/reproducible-path/rocksdb-9.3.1/include -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src -g -O2 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wextra -Wall -pthread -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -fno-omit-frame-pointer -march=armv8-a+crc+crypto -Wno-unused-function -fno-builtin-memcmp -std=gnu++17 -fPIC -MD -MT CMakeFiles/rocksdb-shared.dir/db/trim_history_scheduler.cc.o -MF CMakeFiles/rocksdb-shared.dir/db/trim_history_scheduler.cc.o.d -o CMakeFiles/rocksdb-shared.dir/db/trim_history_scheduler.cc.o -c /build/reproducible-path/rocksdb-9.3.1/db/trim_history_scheduler.cc In file included from /usr/include/c++/13/vector:72, from /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:16, from /build/reproducible-path/rocksdb-9.3.1/db/version_builder.h:14, from /build/reproducible-path/rocksdb-9.3.1/db/repair.cc:62: /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const long long unsigned int&}; _Tp = long long unsigned int; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/13/memory:69, from /build/reproducible-path/rocksdb-9.3.1/db/version_builder.h:12: /usr/include/c++/13/bits/stl_uninitialized.h: In function '_ForwardIterator std::__do_uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]': /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 113 | __do_uninit_copy(_InputIterator __first, _InputIterator __last, | ^~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; _Tp = rocksdb::DbPath]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::pointer std::vector<_Tp, _Alloc>::_M_allocate_and_copy(size_type, _ForwardIterator, _ForwardIterator) [with _ForwardIterator = __gnu_cxx::__normal_iterator >; _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:1622:35, inlined from 'std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/vector.tcc:238:44: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; _Tp = rocksdb::DbPath]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:606:31, inlined from 'rocksdb::DBOptions::DBOptions(const rocksdb::DBOptions&)' at /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h:489:8: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ In static member function 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; bool _TrivialValueTypes = false]', inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*]' at /usr/include/c++/13/bits/stl_uninitialized.h:185:15, inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator >; _ForwardIterator = rocksdb::DbPath*; _Tp = rocksdb::DbPath]' at /usr/include/c++/13/bits/stl_uninitialized.h:373:37, inlined from 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = rocksdb::DbPath; _Alloc = std::allocator]' at /usr/include/c++/13/bits/stl_vector.h:606:31, inlined from 'rocksdb::ColumnFamilyOptions::ColumnFamilyOptions(const rocksdb::ColumnFamilyOptions&)' at /build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h:66:8: /usr/include/c++/13/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 445 | vector<_Tp, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~ /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {int&, const rocksdb::FileMetaData&}; _Tp = std::pair; _Alloc = std::allocator >]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {long long unsigned int&, unsigned int, int}; _Tp = rocksdb::FileDescriptor; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 /usr/include/c++/13/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {const rocksdb::FileDescriptor&}; _Tp = rocksdb::FileDescriptor; _Alloc = std::allocator]': /usr/include/c++/13/bits/vector.tcc:445:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1 In file included from /usr/include/c++/13/vector:66: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = rocksdb::FileDescriptor; _Alloc = std::allocator]', inlined from 'rocksdb::Status rocksdb::{anonymous}::Repairer::ConvertLogToTable(const std::string&, uint64_t)' at /build/reproducible-path/rocksdb-9.3.1/db/repair.cc:494:31: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'rocksdb::Status rocksdb::{anonymous}::Repairer::FindFiles()' at /build/reproducible-path/rocksdb-9.3.1/db/repair.cc:321:30, inlined from 'rocksdb::Status rocksdb::{anonymous}::Repairer::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/repair.cc:201:23: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {long long unsigned int&, unsigned int, int}; _Tp = rocksdb::FileDescriptor; _Alloc = std::allocator]', inlined from 'rocksdb::Status rocksdb::{anonymous}::Repairer::FindFiles()' at /build/reproducible-path/rocksdb-9.3.1/db/repair.cc:323:38, inlined from 'rocksdb::Status rocksdb::{anonymous}::Repairer::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/repair.cc:201:23: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, rocksdb::FileMetaData}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:486:28, inlined from 'rocksdb::Status rocksdb::{anonymous}::Repairer::AddTables()' at /build/reproducible-path/rocksdb-9.3.1/db/repair.cc:708:27, inlined from 'rocksdb::Status rocksdb::{anonymous}::Repairer::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/repair.cc:230:25: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(const T&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:283:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, uint64_t, uint32_t, uint64_t, const rocksdb::InternalKey&, const rocksdb::InternalKey&, const rocksdb::SequenceNumber&, const rocksdb::SequenceNumber&, bool, rocksdb::Temperature, uint64_t, uint64_t, uint64_t, uint64_t, const std::string&, const std::string&, const rocksdb::UniqueId64x2&, uint64_t, uint64_t, bool)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:495:35, inlined from 'rocksdb::Status rocksdb::{anonymous}::Repairer::AddTables()' at /build/reproducible-path/rocksdb-9.3.1/db/repair.cc:708:27, inlined from 'rocksdb::Status rocksdb::{anonymous}::Repairer::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/repair.cc:230:25: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, const rocksdb::FileMetaData&}; _Tp = std::pair; _Alloc = std::allocator >]', inlined from 'void rocksdb::VersionEdit::AddFile(int, const rocksdb::FileMetaData&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:503:28, inlined from 'rocksdb::Status rocksdb::{anonymous}::Repairer::AddTables()' at /build/reproducible-path/rocksdb-9.3.1/db/repair.cc:739:25, inlined from 'rocksdb::Status rocksdb::{anonymous}::Repairer::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/repair.cc:230:25: /usr/include/c++/13/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator]', inlined from 'void rocksdb::autovector::push_back(T&&) [with T = long long unsigned int; unsigned int kSize = 8]' at /build/reproducible-path/rocksdb-9.3.1/util/autovector.h:274:22, inlined from 'void rocksdb::VersionEdit::AddFile(int, const rocksdb::FileMetaData&)' at /build/reproducible-path/rocksdb-9.3.1/db/version_edit.h:504:35, inlined from 'rocksdb::Status rocksdb::{anonymous}::Repairer::AddTables()' at /build/reproducible-path/rocksdb-9.3.1/db/repair.cc:739:25, inlined from 'rocksdb::Status rocksdb::{anonymous}::Repairer::Run()' at /build/reproducible-path/rocksdb-9.3.1/db/repair.cc:230:25: /usr/include/c++/13/bits/stl_vector.h:1292:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1 1292 | _M_realloc_insert(end(), __x); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ Preprocessed source stored into /tmp/ccJoH6iZ.out file, please attach this to your bugreport. === BEGIN GCC DUMP === 15726: // Target: arm-linux-gnueabihf 15726: // Configured with: ../src/configure -v --with-pkgversion='Debian 13.3.0-3' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=arm-linux-gnueabihf- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-sjlj-exceptions --with-arch=armv7-a+fp --with-float=hard --with-mode=thumb --disable-werror --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf 15726: // Thread model: posix 15726: // Supported LTO compression algorithms: zlib zstd 15726: // gcc version 13.3.0 (Debian 13.3.0-3) 15726: // 15726: // /build/reproducible-path/rocksdb-9.3.1/db/memtable.cc: In member function 'void rocksdb::MemTable::UpdateOldestKeyTime()': 15726: // /build/reproducible-path/rocksdb-9.3.1/db/memtable.cc:273:1: error: insn does not satisfy its constraints: 15726: // 273 | } 15726: // | ^ 15726: // (insn 275 274 276 13 (set (reg:CC_DNE 100 cc) 15726: // (compare:CC_DNE (ior:SI (ne:SI (reg:SI 0 r0 [164]) 15726: // (const_int -1 [0xffffffffffffffff])) 15726: // (ne:SI (reg:SI 1 r1 [+4 ]) 15726: // (const_int -1 [0xffffffffffffffff]))) 15726: // (const_int 0 [0]))) "/usr/include/c++/13/bits/atomic_base.h":577:36 343 {*cmp_ior} 15726: // (expr_list:REG_DEAD (reg:SI 1 r1 [+4 ]) 15726: // (expr_list:REG_DEAD (reg:SI 0 r0 [164]) 15726: // (nil)))) 15726: // during RTL pass: cprop_hardreg 15726: // /build/reproducible-path/rocksdb-9.3.1/db/memtable.cc:273:1: internal compiler error: in extract_constrain_insn, at recog.cc:2692 15726: // 0x5cb837 internal_error(char const*, ...) 15726: // ???:0 15726: // 0x5cb8ed fancy_abort(char const*, int, char const*) 15726: // ???:0 15726: // 0x3699f9 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*) 15726: // ???:0 15726: // 0x369a2b _fatal_insn_not_found(rtx_def const*, char const*, int, char const*) 15726: // ???:0 15726: // 0x7ef881 extract_constrain_insn(rtx_insn*) 15726: // ???:0 15726: // Please submit a full bug report, with preprocessed source (by using -freport-bug). 15726: // Please include the complete backtrace with any bug report. 15726: // See for instructions. 15726: 15726: // /usr/libexec/gcc/arm-linux-gnueabihf/13/cc1plus -quiet -I /build/reproducible-path/rocksdb-9.3.1 -I /build/reproducible-path/rocksdb-9.3.1/include -imultilib . -imultiarch arm-linux-gnueabihf -MD CMakeFiles/rocksdb-shared.dir/db/memtable.cc.d -MF CMakeFiles/rocksdb-shared.dir/db/memtable.cc.o.d -MT CMakeFiles/rocksdb-shared.dir/db/memtable.cc.o -D_GNU_SOURCE -D_REENTRANT -D BZIP2 -D GFLAGS=1 -D GFLAGS_IS_A_DLL=0 -D LZ4 -D OS_LINUX -D ROCKSDB_AUXV_GETAUXVAL_PRESENT -D ROCKSDB_FALLOCATE_PRESENT -D ROCKSDB_LIB_IO_POSIX -D ROCKSDB_MALLOC_USABLE_SIZE -D ROCKSDB_NO_DYNAMIC_EXTENSION -D ROCKSDB_PLATFORM_POSIX -D ROCKSDB_PTHREAD_ADAPTIVE_MUTEX -D ROCKSDB_RANGESYNC_PRESENT -D ROCKSDB_SCHED_GETCPU_PRESENT -D SNAPPY -D ZLIB -D ZSTD -D rocksdb_shared_EXPORTS -D _LARGEFILE_SOURCE -D _FILE_OFFSET_BITS=64 -D _TIME_BITS=64 -D _FORTIFY_SOURCE=2 -isystem /build/reproducible-path/rocksdb-9.3.1/third-party/gtest-1.8.1/fused-src /build/reproducible-path/rocksdb-9.3.1/db/memtable.cc -quiet -dumpdir CMakeFiles/rocksdb-shared.dir/db/ -dumpbase memtable.cc.cc -dumpbase-ext .cc -mfloat-abi=hard -mtls-dialect=gnu -mthumb -mlibarch=armv8-a+crc+crypto -march=armv8-a+crc+crypto -g -O2 -Wformat=1 -Werror=format-security -Wdate-time -Wextra -Wall -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual=2 -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof -Wno-unused-function -std=gnu++17 -ffile-prefix-map=/build/reproducible-path/rocksdb-9.3.1=. -fstack-protector-strong -fstack-clash-protection -fno-omit-frame-pointer -fno-builtin-memcmp -fPIC -o - -frandom-seed=0 -fdump-noaddr 15726: 15726: # 0 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf//" 15726: # 0 "" 15726: # 0 "" 15726: # 1 "/usr/include/stdc-predef.h" 1 3 4 15726: # 0 "" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 15726: 15726: # 1 "/usr/include/c++/13/atomic" 1 3 15726: # 35 "/usr/include/c++/13/atomic" 3 15726: 15726: # 36 "/usr/include/c++/13/atomic" 3 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/atomic_base.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/atomic_base.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/atomic_base.h" 3 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 1 3 15726: # 306 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 3 15726: 15726: # 306 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 3 15726: namespace std 15726: { 15726: typedef unsigned int size_t; 15726: typedef int ptrdiff_t; 15726: 15726: 15726: typedef decltype(nullptr) nullptr_t; 15726: 15726: 15726: #pragma GCC visibility push(default) 15726: 15726: 15726: extern "C++" __attribute__ ((__noreturn__, __always_inline__)) 15726: inline void __terminate() noexcept 15726: { 15726: void terminate() noexcept __attribute__ ((__noreturn__)); 15726: terminate(); 15726: } 15726: #pragma GCC visibility pop 15726: } 15726: # 339 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 3 15726: namespace std 15726: { 15726: inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } 15726: } 15726: namespace __gnu_cxx 15726: { 15726: inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } 15726: } 15726: # 532 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 3 15726: namespace std 15726: { 15726: #pragma GCC visibility push(default) 15726: 15726: 15726: 15726: 15726: constexpr inline bool 15726: __is_constant_evaluated() noexcept 15726: { 15726: 15726: 15726: 15726: 15726: 15726: return __builtin_is_constant_evaluated(); 15726: 15726: 15726: 15726: } 15726: #pragma GCC visibility pop 15726: } 15726: # 679 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 3 15726: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/os_defines.h" 1 3 15726: # 39 "/usr/include/arm-linux-gnueabihf/c++/13/bits/os_defines.h" 3 15726: # 1 "/usr/include/features.h" 1 3 4 15726: # 394 "/usr/include/features.h" 3 4 15726: # 1 "/usr/include/features-time64.h" 1 3 4 15726: # 20 "/usr/include/features-time64.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 15726: # 21 "/usr/include/features-time64.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/timesize.h" 1 3 4 15726: # 22 "/usr/include/features-time64.h" 2 3 4 15726: # 395 "/usr/include/features.h" 2 3 4 15726: # 502 "/usr/include/features.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/sys/cdefs.h" 1 3 4 15726: # 576 "/usr/include/arm-linux-gnueabihf/sys/cdefs.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 15726: # 577 "/usr/include/arm-linux-gnueabihf/sys/cdefs.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/long-double.h" 1 3 4 15726: # 578 "/usr/include/arm-linux-gnueabihf/sys/cdefs.h" 2 3 4 15726: # 503 "/usr/include/features.h" 2 3 4 15726: # 526 "/usr/include/features.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/gnu/stubs.h" 1 3 4 15726: # 10 "/usr/include/arm-linux-gnueabihf/gnu/stubs.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/gnu/stubs-hard.h" 1 3 4 15726: # 11 "/usr/include/arm-linux-gnueabihf/gnu/stubs.h" 2 3 4 15726: # 527 "/usr/include/features.h" 2 3 4 15726: # 40 "/usr/include/arm-linux-gnueabihf/c++/13/bits/os_defines.h" 2 3 15726: # 680 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 2 3 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/cpu_defines.h" 1 3 15726: # 683 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 2 3 15726: # 882 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 3 15726: # 1 "/usr/include/c++/13/pstl/pstl_config.h" 1 3 15726: # 883 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++config.h" 2 3 15726: # 36 "/usr/include/c++/13/bits/atomic_base.h" 2 3 15726: # 1 "/usr/include/c++/13/new" 1 3 15726: # 38 "/usr/include/c++/13/new" 3 15726: 15726: # 39 "/usr/include/c++/13/new" 3 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/exception.h" 1 3 15726: # 34 "/usr/include/c++/13/bits/exception.h" 3 15726: 15726: # 35 "/usr/include/c++/13/bits/exception.h" 3 15726: 15726: 15726: 15726: extern "C++" { 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: # 59 "/usr/include/c++/13/bits/exception.h" 3 15726: class exception 15726: { 15726: public: 15726: exception() noexcept { } 15726: virtual ~exception() noexcept; 15726: 15726: exception(const exception&) = default; 15726: exception& operator=(const exception&) = default; 15726: exception(exception&&) = default; 15726: exception& operator=(exception&&) = default; 15726: 15726: 15726: 15726: 15726: virtual const char* 15726: what() const noexcept; 15726: }; 15726: 15726: 15726: 15726: } 15726: 15726: } 15726: # 42 "/usr/include/c++/13/new" 2 3 15726: 15726: #pragma GCC visibility push(default) 15726: 15726: extern "C++" { 15726: 15726: namespace std 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: class bad_alloc : public exception 15726: { 15726: public: 15726: bad_alloc() throw() { } 15726: 15726: 15726: bad_alloc(const bad_alloc&) = default; 15726: bad_alloc& operator=(const bad_alloc&) = default; 15726: 15726: 15726: 15726: 15726: virtual ~bad_alloc() throw(); 15726: 15726: 15726: virtual const char* what() const throw(); 15726: }; 15726: 15726: 15726: class bad_array_new_length : public bad_alloc 15726: { 15726: public: 15726: bad_array_new_length() throw() { } 15726: 15726: 15726: 15726: virtual ~bad_array_new_length() throw(); 15726: 15726: 15726: virtual const char* what() const throw(); 15726: }; 15726: 15726: 15726: 15726: enum class align_val_t: size_t {}; 15726: 15726: 15726: struct nothrow_t 15726: { 15726: 15726: explicit nothrow_t() = default; 15726: 15726: }; 15726: 15726: extern const nothrow_t nothrow; 15726: 15726: 15726: 15726: typedef void (*new_handler)(); 15726: 15726: 15726: 15726: new_handler set_new_handler(new_handler) throw(); 15726: 15726: 15726: 15726: new_handler get_new_handler() noexcept; 15726: 15726: } 15726: # 126 "/usr/include/c++/13/new" 3 15726: [[__nodiscard__]] void* operator new(std::size_t) 15726: __attribute__((__externally_visible__)); 15726: [[__nodiscard__]] void* operator new[](std::size_t) 15726: __attribute__((__externally_visible__)); 15726: void operator delete(void*) noexcept 15726: __attribute__((__externally_visible__)); 15726: void operator delete[](void*) noexcept 15726: __attribute__((__externally_visible__)); 15726: 15726: void operator delete(void*, std::size_t) noexcept 15726: __attribute__((__externally_visible__)); 15726: void operator delete[](void*, std::size_t) noexcept 15726: __attribute__((__externally_visible__)); 15726: 15726: [[__nodiscard__]] void* operator new(std::size_t, const std::nothrow_t&) noexcept 15726: __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); 15726: [[__nodiscard__]] void* operator new[](std::size_t, const std::nothrow_t&) noexcept 15726: __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); 15726: void operator delete(void*, const std::nothrow_t&) noexcept 15726: __attribute__((__externally_visible__)); 15726: void operator delete[](void*, const std::nothrow_t&) noexcept 15726: __attribute__((__externally_visible__)); 15726: 15726: [[__nodiscard__]] void* operator new(std::size_t, std::align_val_t) 15726: __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); 15726: [[__nodiscard__]] void* operator new(std::size_t, std::align_val_t, const std::nothrow_t&) 15726: noexcept __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); 15726: void operator delete(void*, std::align_val_t) 15726: noexcept __attribute__((__externally_visible__)); 15726: void operator delete(void*, std::align_val_t, const std::nothrow_t&) 15726: noexcept __attribute__((__externally_visible__)); 15726: [[__nodiscard__]] void* operator new[](std::size_t, std::align_val_t) 15726: __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); 15726: [[__nodiscard__]] void* operator new[](std::size_t, std::align_val_t, const std::nothrow_t&) 15726: noexcept __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__)); 15726: void operator delete[](void*, std::align_val_t) 15726: noexcept __attribute__((__externally_visible__)); 15726: void operator delete[](void*, std::align_val_t, const std::nothrow_t&) 15726: noexcept __attribute__((__externally_visible__)); 15726: 15726: void operator delete(void*, std::size_t, std::align_val_t) 15726: noexcept __attribute__((__externally_visible__)); 15726: void operator delete[](void*, std::size_t, std::align_val_t) 15726: noexcept __attribute__((__externally_visible__)); 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] inline void* operator new(std::size_t, void* __p) noexcept 15726: { return __p; } 15726: [[__nodiscard__]] inline void* operator new[](std::size_t, void* __p) noexcept 15726: { return __p; } 15726: 15726: 15726: inline void operator delete (void*, void*) noexcept { } 15726: inline void operator delete[](void*, void*) noexcept { } 15726: 15726: } 15726: 15726: 15726: namespace std 15726: { 15726: 15726: 15726: 15726: template 15726: [[nodiscard]] constexpr _Tp* 15726: launder(_Tp* __p) noexcept 15726: { return __builtin_launder(__p); } 15726: 15726: 15726: 15726: 15726: template 15726: void launder(_Ret (*)(_Args...) noexcept (_NE)) = delete; 15726: template 15726: void launder(_Ret (*)(_Args......) noexcept (_NE)) = delete; 15726: 15726: void launder(void*) = delete; 15726: void launder(const void*) = delete; 15726: void launder(volatile void*) = delete; 15726: void launder(const volatile void*) = delete; 15726: 15726: 15726: 15726: 15726: inline constexpr size_t hardware_destructive_interference_size = 64; 15726: inline constexpr size_t hardware_constructive_interference_size = 64; 15726: 15726: } 15726: # 236 "/usr/include/c++/13/new" 3 15726: #pragma GCC visibility pop 15726: # 37 "/usr/include/c++/13/bits/atomic_base.h" 2 3 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stdint.h" 1 3 4 15726: # 9 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stdint.h" 3 4 15726: # 1 "/usr/include/stdint.h" 1 3 4 15726: # 26 "/usr/include/stdint.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 15726: # 27 "/usr/include/stdint.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types.h" 1 3 4 15726: # 27 "/usr/include/arm-linux-gnueabihf/bits/types.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 15726: # 28 "/usr/include/arm-linux-gnueabihf/bits/types.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/timesize.h" 1 3 4 15726: # 29 "/usr/include/arm-linux-gnueabihf/bits/types.h" 2 3 4 15726: 15726: 15726: typedef unsigned char __u_char; 15726: typedef unsigned short int __u_short; 15726: typedef unsigned int __u_int; 15726: typedef unsigned long int __u_long; 15726: 15726: 15726: typedef signed char __int8_t; 15726: typedef unsigned char __uint8_t; 15726: typedef signed short int __int16_t; 15726: typedef unsigned short int __uint16_t; 15726: typedef signed int __int32_t; 15726: typedef unsigned int __uint32_t; 15726: 15726: 15726: 15726: 15726: __extension__ typedef signed long long int __int64_t; 15726: __extension__ typedef unsigned long long int __uint64_t; 15726: 15726: 15726: 15726: typedef __int8_t __int_least8_t; 15726: typedef __uint8_t __uint_least8_t; 15726: typedef __int16_t __int_least16_t; 15726: typedef __uint16_t __uint_least16_t; 15726: typedef __int32_t __int_least32_t; 15726: typedef __uint32_t __uint_least32_t; 15726: typedef __int64_t __int_least64_t; 15726: typedef __uint64_t __uint_least64_t; 15726: 15726: 15726: 15726: 15726: 15726: 15726: __extension__ typedef long long int __quad_t; 15726: __extension__ typedef unsigned long long int __u_quad_t; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: __extension__ typedef long long int __intmax_t; 15726: __extension__ typedef unsigned long long int __uintmax_t; 15726: # 141 "/usr/include/arm-linux-gnueabihf/bits/types.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/typesizes.h" 1 3 4 15726: # 142 "/usr/include/arm-linux-gnueabihf/bits/types.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/time64.h" 1 3 4 15726: # 143 "/usr/include/arm-linux-gnueabihf/bits/types.h" 2 3 4 15726: 15726: 15726: __extension__ typedef __uint64_t __dev_t; 15726: __extension__ typedef unsigned int __uid_t; 15726: __extension__ typedef unsigned int __gid_t; 15726: __extension__ typedef unsigned long int __ino_t; 15726: __extension__ typedef __uint64_t __ino64_t; 15726: __extension__ typedef unsigned int __mode_t; 15726: __extension__ typedef unsigned int __nlink_t; 15726: __extension__ typedef long int __off_t; 15726: __extension__ typedef __int64_t __off64_t; 15726: __extension__ typedef int __pid_t; 15726: __extension__ typedef struct { int __val[2]; } __fsid_t; 15726: __extension__ typedef long int __clock_t; 15726: __extension__ typedef unsigned long int __rlim_t; 15726: __extension__ typedef __uint64_t __rlim64_t; 15726: __extension__ typedef unsigned int __id_t; 15726: __extension__ typedef long int __time_t; 15726: __extension__ typedef unsigned int __useconds_t; 15726: __extension__ typedef long int __suseconds_t; 15726: __extension__ typedef __int64_t __suseconds64_t; 15726: 15726: __extension__ typedef int __daddr_t; 15726: __extension__ typedef int __key_t; 15726: 15726: 15726: __extension__ typedef int __clockid_t; 15726: 15726: 15726: __extension__ typedef void * __timer_t; 15726: 15726: 15726: __extension__ typedef long int __blksize_t; 15726: 15726: 15726: 15726: 15726: __extension__ typedef long int __blkcnt_t; 15726: __extension__ typedef __int64_t __blkcnt64_t; 15726: 15726: 15726: __extension__ typedef unsigned long int __fsblkcnt_t; 15726: __extension__ typedef __uint64_t __fsblkcnt64_t; 15726: 15726: 15726: __extension__ typedef unsigned long int __fsfilcnt_t; 15726: __extension__ typedef __uint64_t __fsfilcnt64_t; 15726: 15726: 15726: __extension__ typedef int __fsword_t; 15726: 15726: __extension__ typedef int __ssize_t; 15726: 15726: 15726: __extension__ typedef long int __syscall_slong_t; 15726: 15726: __extension__ typedef unsigned long int __syscall_ulong_t; 15726: 15726: 15726: 15726: typedef __off64_t __loff_t; 15726: typedef char *__caddr_t; 15726: 15726: 15726: __extension__ typedef int __intptr_t; 15726: 15726: 15726: __extension__ typedef unsigned int __socklen_t; 15726: 15726: 15726: 15726: 15726: typedef int __sig_atomic_t; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: __extension__ typedef __int64_t __time64_t; 15726: # 28 "/usr/include/stdint.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/wchar.h" 1 3 4 15726: # 29 "/usr/include/stdint.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 15726: # 30 "/usr/include/stdint.h" 2 3 4 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdint-intn.h" 1 3 4 15726: # 24 "/usr/include/arm-linux-gnueabihf/bits/stdint-intn.h" 3 4 15726: typedef __int8_t int8_t; 15726: typedef __int16_t int16_t; 15726: typedef __int32_t int32_t; 15726: typedef __int64_t int64_t; 15726: # 35 "/usr/include/stdint.h" 2 3 4 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdint-uintn.h" 1 3 4 15726: # 24 "/usr/include/arm-linux-gnueabihf/bits/stdint-uintn.h" 3 4 15726: typedef __uint8_t uint8_t; 15726: typedef __uint16_t uint16_t; 15726: typedef __uint32_t uint32_t; 15726: typedef __uint64_t uint64_t; 15726: # 38 "/usr/include/stdint.h" 2 3 4 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdint-least.h" 1 3 4 15726: # 25 "/usr/include/arm-linux-gnueabihf/bits/stdint-least.h" 3 4 15726: typedef __int_least8_t int_least8_t; 15726: typedef __int_least16_t int_least16_t; 15726: typedef __int_least32_t int_least32_t; 15726: typedef __int_least64_t int_least64_t; 15726: 15726: 15726: typedef __uint_least8_t uint_least8_t; 15726: typedef __uint_least16_t uint_least16_t; 15726: typedef __uint_least32_t uint_least32_t; 15726: typedef __uint_least64_t uint_least64_t; 15726: # 42 "/usr/include/stdint.h" 2 3 4 15726: 15726: 15726: 15726: 15726: 15726: typedef signed char int_fast8_t; 15726: 15726: 15726: 15726: 15726: 15726: typedef int int_fast16_t; 15726: typedef int int_fast32_t; 15726: __extension__ 15726: typedef long long int int_fast64_t; 15726: 15726: 15726: 15726: typedef unsigned char uint_fast8_t; 15726: 15726: 15726: 15726: 15726: 15726: typedef unsigned int uint_fast16_t; 15726: typedef unsigned int uint_fast32_t; 15726: __extension__ 15726: typedef unsigned long long int uint_fast64_t; 15726: # 82 "/usr/include/stdint.h" 3 4 15726: typedef int intptr_t; 15726: 15726: 15726: typedef unsigned int uintptr_t; 15726: 15726: 15726: 15726: 15726: typedef __intmax_t intmax_t; 15726: typedef __uintmax_t uintmax_t; 15726: # 10 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stdint.h" 2 3 4 15726: # 38 "/usr/include/c++/13/bits/atomic_base.h" 2 3 15726: # 1 "/usr/include/c++/13/bits/atomic_lockfree_defines.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/atomic_lockfree_defines.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/atomic_lockfree_defines.h" 3 15726: # 39 "/usr/include/c++/13/bits/atomic_base.h" 2 3 15726: # 1 "/usr/include/c++/13/bits/move.h" 1 3 15726: # 37 "/usr/include/c++/13/bits/move.h" 3 15726: # 1 "/usr/include/c++/13/type_traits" 1 3 15726: # 32 "/usr/include/c++/13/type_traits" 3 15726: 15726: # 33 "/usr/include/c++/13/type_traits" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: template 15726: class reference_wrapper; 15726: # 61 "/usr/include/c++/13/type_traits" 3 15726: template 15726: struct integral_constant 15726: { 15726: static constexpr _Tp value = __v; 15726: typedef _Tp value_type; 15726: typedef integral_constant<_Tp, __v> type; 15726: constexpr operator value_type() const noexcept { return value; } 15726: 15726: 15726: 15726: 15726: constexpr value_type operator()() const noexcept { return value; } 15726: 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: using true_type = integral_constant; 15726: 15726: 15726: using false_type = integral_constant; 15726: 15726: 15726: 15726: template 15726: using __bool_constant = integral_constant; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: using bool_constant = integral_constant; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct enable_if 15726: { }; 15726: 15726: 15726: template 15726: struct enable_if 15726: { typedef _Tp type; }; 15726: 15726: 15726: template 15726: using __enable_if_t = typename enable_if<_Cond, _Tp>::type; 15726: 15726: template 15726: struct __conditional 15726: { 15726: template 15726: using type = _Tp; 15726: }; 15726: 15726: template<> 15726: struct __conditional 15726: { 15726: template 15726: using type = _Up; 15726: }; 15726: 15726: 15726: template 15726: using __conditional_t 15726: = typename __conditional<_Cond>::template type<_If, _Else>; 15726: 15726: 15726: template 15726: struct __type_identity 15726: { using type = _Type; }; 15726: 15726: template 15726: using __type_identity_t = typename __type_identity<_Tp>::type; 15726: 15726: namespace __detail 15726: { 15726: 15726: template 15726: using __first_t = _Tp; 15726: 15726: 15726: template 15726: auto __or_fn(int) -> __first_t...>; 15726: 15726: template 15726: auto __or_fn(...) -> true_type; 15726: 15726: template 15726: auto __and_fn(int) -> __first_t...>; 15726: 15726: template 15726: auto __and_fn(...) -> false_type; 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: struct __or_ 15726: : decltype(__detail::__or_fn<_Bn...>(0)) 15726: { }; 15726: 15726: template 15726: struct __and_ 15726: : decltype(__detail::__and_fn<_Bn...>(0)) 15726: { }; 15726: 15726: template 15726: struct __not_ 15726: : __bool_constant 15726: { }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline constexpr bool __or_v = __or_<_Bn...>::value; 15726: template 15726: inline constexpr bool __and_v = __and_<_Bn...>::value; 15726: 15726: namespace __detail 15726: { 15726: template 15726: struct __disjunction_impl 15726: { using type = _B1; }; 15726: 15726: template 15726: struct __disjunction_impl<__enable_if_t, _B1, _B2, _Bn...> 15726: { using type = typename __disjunction_impl::type; }; 15726: 15726: template 15726: struct __conjunction_impl 15726: { using type = _B1; }; 15726: 15726: template 15726: struct __conjunction_impl<__enable_if_t, _B1, _B2, _Bn...> 15726: { using type = typename __conjunction_impl::type; }; 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: struct conjunction 15726: : __detail::__conjunction_impl::type 15726: { }; 15726: 15726: template<> 15726: struct conjunction<> 15726: : true_type 15726: { }; 15726: 15726: template 15726: struct disjunction 15726: : __detail::__disjunction_impl::type 15726: { }; 15726: 15726: template<> 15726: struct disjunction<> 15726: : false_type 15726: { }; 15726: 15726: template 15726: struct negation 15726: : __not_<_Pp>::type 15726: { }; 15726: 15726: 15726: 15726: 15726: template 15726: inline constexpr bool conjunction_v = conjunction<_Bn...>::value; 15726: 15726: template 15726: inline constexpr bool disjunction_v = disjunction<_Bn...>::value; 15726: 15726: template 15726: inline constexpr bool negation_v = negation<_Pp>::value; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct is_reference; 15726: template 15726: struct is_function; 15726: template 15726: struct is_void; 15726: template 15726: struct remove_cv; 15726: template 15726: struct is_const; 15726: 15726: 15726: template 15726: struct __is_array_unknown_bounds; 15726: 15726: 15726: 15726: 15726: template 15726: constexpr true_type __is_complete_or_unbounded(__type_identity<_Tp>) 15726: { return {}; } 15726: 15726: template 15726: constexpr typename __or_< 15726: is_reference<_NestedType>, 15726: is_function<_NestedType>, 15726: is_void<_NestedType>, 15726: __is_array_unknown_bounds<_NestedType> 15726: >::type __is_complete_or_unbounded(_TypeIdentity) 15726: { return {}; } 15726: 15726: 15726: template 15726: using __remove_cv_t = typename remove_cv<_Tp>::type; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct is_void 15726: : public false_type { }; 15726: 15726: template<> 15726: struct is_void 15726: : public true_type { }; 15726: 15726: template<> 15726: struct is_void 15726: : public true_type { }; 15726: 15726: template<> 15726: struct is_void 15726: : public true_type { }; 15726: 15726: template<> 15726: struct is_void 15726: : public true_type { }; 15726: 15726: 15726: template 15726: struct __is_integral_helper 15726: : public false_type { }; 15726: 15726: template<> 15726: struct __is_integral_helper 15726: : public true_type { }; 15726: 15726: template<> 15726: struct __is_integral_helper 15726: : public true_type { }; 15726: 15726: template<> 15726: struct __is_integral_helper 15726: : public true_type { }; 15726: 15726: template<> 15726: struct __is_integral_helper 15726: : public true_type { }; 15726: 15726: 15726: 15726: 15726: template<> 15726: struct __is_integral_helper 15726: : public true_type { }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template<> 15726: struct __is_integral_helper 15726: : public true_type { }; 15726: 15726: template<> 15726: struct __is_integral_helper 15726: : public true_type { }; 15726: 15726: template<> 15726: struct __is_integral_helper 15726: : public true_type { }; 15726: 15726: template<> 15726: struct __is_integral_helper 15726: : public true_type { }; 15726: 15726: template<> 15726: struct __is_integral_helper 15726: : public true_type { }; 15726: 15726: template<> 15726: struct __is_integral_helper 15726: : public true_type { }; 15726: 15726: template<> 15726: struct __is_integral_helper 15726: : public true_type { }; 15726: 15726: template<> 15726: struct __is_integral_helper 15726: : public true_type { }; 15726: 15726: template<> 15726: struct __is_integral_helper 15726: : public true_type { }; 15726: 15726: template<> 15726: struct __is_integral_helper 15726: : public true_type { }; 15726: # 440 "/usr/include/c++/13/type_traits" 3 15726: template 15726: struct is_integral 15726: : public __is_integral_helper<__remove_cv_t<_Tp>>::type 15726: { }; 15726: 15726: 15726: template 15726: struct __is_floating_point_helper 15726: : public false_type { }; 15726: 15726: template<> 15726: struct __is_floating_point_helper 15726: : public true_type { }; 15726: 15726: template<> 15726: struct __is_floating_point_helper 15726: : public true_type { }; 15726: 15726: template<> 15726: struct __is_floating_point_helper 15726: : public true_type { }; 15726: # 500 "/usr/include/c++/13/type_traits" 3 15726: template 15726: struct is_floating_point 15726: : public __is_floating_point_helper<__remove_cv_t<_Tp>>::type 15726: { }; 15726: 15726: 15726: template 15726: struct is_array 15726: : public false_type { }; 15726: 15726: template 15726: struct is_array<_Tp[_Size]> 15726: : public true_type { }; 15726: 15726: template 15726: struct is_array<_Tp[]> 15726: : public true_type { }; 15726: 15726: template 15726: struct __is_pointer_helper 15726: : public false_type { }; 15726: 15726: template 15726: struct __is_pointer_helper<_Tp*> 15726: : public true_type { }; 15726: 15726: 15726: template 15726: struct is_pointer 15726: : public __is_pointer_helper<__remove_cv_t<_Tp>>::type 15726: { }; 15726: 15726: 15726: template 15726: struct is_lvalue_reference 15726: : public false_type { }; 15726: 15726: template 15726: struct is_lvalue_reference<_Tp&> 15726: : public true_type { }; 15726: 15726: 15726: template 15726: struct is_rvalue_reference 15726: : public false_type { }; 15726: 15726: template 15726: struct is_rvalue_reference<_Tp&&> 15726: : public true_type { }; 15726: 15726: template 15726: struct __is_member_object_pointer_helper 15726: : public false_type { }; 15726: 15726: template 15726: struct __is_member_object_pointer_helper<_Tp _Cp::*> 15726: : public __not_>::type { }; 15726: 15726: 15726: template 15726: struct is_member_object_pointer 15726: : public __is_member_object_pointer_helper<__remove_cv_t<_Tp>>::type 15726: { }; 15726: 15726: template 15726: struct __is_member_function_pointer_helper 15726: : public false_type { }; 15726: 15726: template 15726: struct __is_member_function_pointer_helper<_Tp _Cp::*> 15726: : public is_function<_Tp>::type { }; 15726: 15726: 15726: template 15726: struct is_member_function_pointer 15726: : public __is_member_function_pointer_helper<__remove_cv_t<_Tp>>::type 15726: { }; 15726: 15726: 15726: template 15726: struct is_enum 15726: : public integral_constant 15726: { }; 15726: 15726: 15726: template 15726: struct is_union 15726: : public integral_constant 15726: { }; 15726: 15726: 15726: template 15726: struct is_class 15726: : public integral_constant 15726: { }; 15726: 15726: 15726: template 15726: struct is_function 15726: : public __bool_constant::value> { }; 15726: 15726: template 15726: struct is_function<_Tp&> 15726: : public false_type { }; 15726: 15726: template 15726: struct is_function<_Tp&&> 15726: : public false_type { }; 15726: 15726: 15726: 15726: 15726: template 15726: struct is_null_pointer 15726: : public false_type { }; 15726: 15726: template<> 15726: struct is_null_pointer 15726: : public true_type { }; 15726: 15726: template<> 15726: struct is_null_pointer 15726: : public true_type { }; 15726: 15726: template<> 15726: struct is_null_pointer 15726: : public true_type { }; 15726: 15726: template<> 15726: struct is_null_pointer 15726: : public true_type { }; 15726: 15726: 15726: 15726: template 15726: struct __is_nullptr_t 15726: : public is_null_pointer<_Tp> 15726: { } __attribute__ ((__deprecated__ ("use '" "std::is_null_pointer" "' instead"))); 15726: 15726: 15726: 15726: 15726: template 15726: struct is_reference 15726: : public false_type 15726: { }; 15726: 15726: template 15726: struct is_reference<_Tp&> 15726: : public true_type 15726: { }; 15726: 15726: template 15726: struct is_reference<_Tp&&> 15726: : public true_type 15726: { }; 15726: 15726: 15726: template 15726: struct is_arithmetic 15726: : public __or_, is_floating_point<_Tp>>::type 15726: { }; 15726: 15726: 15726: template 15726: struct is_fundamental 15726: : public __or_, is_void<_Tp>, 15726: is_null_pointer<_Tp>>::type 15726: { }; 15726: 15726: 15726: template 15726: struct is_object 15726: : public __not_<__or_, is_reference<_Tp>, 15726: is_void<_Tp>>>::type 15726: { }; 15726: 15726: template 15726: struct is_member_pointer; 15726: 15726: 15726: template 15726: struct is_scalar 15726: : public __or_, is_enum<_Tp>, is_pointer<_Tp>, 15726: is_member_pointer<_Tp>, is_null_pointer<_Tp>>::type 15726: { }; 15726: 15726: 15726: template 15726: struct is_compound 15726: : public __not_>::type { }; 15726: 15726: 15726: template 15726: struct __is_member_pointer_helper 15726: : public false_type { }; 15726: 15726: template 15726: struct __is_member_pointer_helper<_Tp _Cp::*> 15726: : public true_type { }; 15726: 15726: 15726: 15726: template 15726: struct is_member_pointer 15726: : public __is_member_pointer_helper<__remove_cv_t<_Tp>>::type 15726: { }; 15726: 15726: template 15726: struct is_same; 15726: 15726: 15726: template 15726: using __is_one_of = __or_...>; 15726: 15726: 15726: __extension__ 15726: template 15726: using __is_signed_integer = __is_one_of<__remove_cv_t<_Tp>, 15726: signed char, signed short, signed int, signed long, 15726: signed long long 15726: # 733 "/usr/include/c++/13/type_traits" 3 15726: >; 15726: 15726: 15726: __extension__ 15726: template 15726: using __is_unsigned_integer = __is_one_of<__remove_cv_t<_Tp>, 15726: unsigned char, unsigned short, unsigned int, unsigned long, 15726: unsigned long long 15726: # 753 "/usr/include/c++/13/type_traits" 3 15726: >; 15726: 15726: 15726: template 15726: using __is_standard_integer 15726: = __or_<__is_signed_integer<_Tp>, __is_unsigned_integer<_Tp>>; 15726: 15726: 15726: template using __void_t = void; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct is_const 15726: : public false_type { }; 15726: 15726: template 15726: struct is_const<_Tp const> 15726: : public true_type { }; 15726: 15726: 15726: template 15726: struct is_volatile 15726: : public false_type { }; 15726: 15726: template 15726: struct is_volatile<_Tp volatile> 15726: : public true_type { }; 15726: 15726: 15726: template 15726: struct is_trivial 15726: : public integral_constant 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_trivially_copyable 15726: : public integral_constant 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_standard_layout 15726: : public integral_constant 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct 15726: 15726: is_pod 15726: : public integral_constant 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct 15726: [[__deprecated__]] 15726: is_literal_type 15726: : public integral_constant 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_empty 15726: : public integral_constant 15726: { }; 15726: 15726: 15726: template 15726: struct is_polymorphic 15726: : public integral_constant 15726: { }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct is_final 15726: : public integral_constant 15726: { }; 15726: 15726: 15726: 15726: template 15726: struct is_abstract 15726: : public integral_constant 15726: { }; 15726: 15726: 15726: template::value> 15726: struct __is_signed_helper 15726: : public false_type { }; 15726: 15726: template 15726: struct __is_signed_helper<_Tp, true> 15726: : public integral_constant 15726: { }; 15726: 15726: 15726: 15726: template 15726: struct is_signed 15726: : public __is_signed_helper<_Tp>::type 15726: { }; 15726: 15726: 15726: template 15726: struct is_unsigned 15726: : public __and_, __not_>>::type 15726: { }; 15726: 15726: 15726: template 15726: _Up 15726: __declval(int); 15726: 15726: template 15726: _Tp 15726: __declval(long); 15726: 15726: 15726: template 15726: auto declval() noexcept -> decltype(__declval<_Tp>(0)); 15726: 15726: template 15726: struct remove_all_extents; 15726: 15726: 15726: template 15726: struct __is_array_known_bounds 15726: : public false_type 15726: { }; 15726: 15726: template 15726: struct __is_array_known_bounds<_Tp[_Size]> 15726: : public true_type 15726: { }; 15726: 15726: template 15726: struct __is_array_unknown_bounds 15726: : public false_type 15726: { }; 15726: 15726: template 15726: struct __is_array_unknown_bounds<_Tp[]> 15726: : public true_type 15726: { }; 15726: # 936 "/usr/include/c++/13/type_traits" 3 15726: struct __do_is_destructible_impl 15726: { 15726: template().~_Tp())> 15726: static true_type __test(int); 15726: 15726: template 15726: static false_type __test(...); 15726: }; 15726: 15726: template 15726: struct __is_destructible_impl 15726: : public __do_is_destructible_impl 15726: { 15726: typedef decltype(__test<_Tp>(0)) type; 15726: }; 15726: 15726: template, 15726: __is_array_unknown_bounds<_Tp>, 15726: is_function<_Tp>>::value, 15726: bool = __or_, is_scalar<_Tp>>::value> 15726: struct __is_destructible_safe; 15726: 15726: template 15726: struct __is_destructible_safe<_Tp, false, false> 15726: : public __is_destructible_impl::type>::type 15726: { }; 15726: 15726: template 15726: struct __is_destructible_safe<_Tp, true, false> 15726: : public false_type { }; 15726: 15726: template 15726: struct __is_destructible_safe<_Tp, false, true> 15726: : public true_type { }; 15726: 15726: 15726: 15726: template 15726: struct is_destructible 15726: : public __is_destructible_safe<_Tp>::type 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct __do_is_nt_destructible_impl 15726: { 15726: template 15726: static __bool_constant().~_Tp())> 15726: __test(int); 15726: 15726: template 15726: static false_type __test(...); 15726: }; 15726: 15726: template 15726: struct __is_nt_destructible_impl 15726: : public __do_is_nt_destructible_impl 15726: { 15726: typedef decltype(__test<_Tp>(0)) type; 15726: }; 15726: 15726: template, 15726: __is_array_unknown_bounds<_Tp>, 15726: is_function<_Tp>>::value, 15726: bool = __or_, is_scalar<_Tp>>::value> 15726: struct __is_nt_destructible_safe; 15726: 15726: template 15726: struct __is_nt_destructible_safe<_Tp, false, false> 15726: : public __is_nt_destructible_impl::type>::type 15726: { }; 15726: 15726: template 15726: struct __is_nt_destructible_safe<_Tp, true, false> 15726: : public false_type { }; 15726: 15726: template 15726: struct __is_nt_destructible_safe<_Tp, false, true> 15726: : public true_type { }; 15726: 15726: 15726: 15726: template 15726: struct is_nothrow_destructible 15726: : public __is_nt_destructible_safe<_Tp>::type 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: using __is_constructible_impl 15726: = __bool_constant<__is_constructible(_Tp, _Args...)>; 15726: 15726: 15726: 15726: template 15726: struct is_constructible 15726: : public __is_constructible_impl<_Tp, _Args...> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_default_constructible 15726: : public __is_constructible_impl<_Tp> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct __add_lvalue_reference_helper 15726: { using type = _Tp; }; 15726: 15726: template 15726: struct __add_lvalue_reference_helper<_Tp, __void_t<_Tp&>> 15726: { using type = _Tp&; }; 15726: 15726: template 15726: using __add_lval_ref_t = typename __add_lvalue_reference_helper<_Tp>::type; 15726: 15726: 15726: 15726: template 15726: struct is_copy_constructible 15726: : public __is_constructible_impl<_Tp, __add_lval_ref_t> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct __add_rvalue_reference_helper 15726: { using type = _Tp; }; 15726: 15726: template 15726: struct __add_rvalue_reference_helper<_Tp, __void_t<_Tp&&>> 15726: { using type = _Tp&&; }; 15726: 15726: template 15726: using __add_rval_ref_t = typename __add_rvalue_reference_helper<_Tp>::type; 15726: 15726: 15726: 15726: template 15726: struct is_move_constructible 15726: : public __is_constructible_impl<_Tp, __add_rval_ref_t<_Tp>> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: using __is_nothrow_constructible_impl 15726: = __bool_constant<__is_nothrow_constructible(_Tp, _Args...)>; 15726: 15726: 15726: 15726: template 15726: struct is_nothrow_constructible 15726: : public __is_nothrow_constructible_impl<_Tp, _Args...> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_nothrow_default_constructible 15726: : public __is_nothrow_constructible_impl<_Tp> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_nothrow_copy_constructible 15726: : public __is_nothrow_constructible_impl<_Tp, __add_lval_ref_t> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_nothrow_move_constructible 15726: : public __is_nothrow_constructible_impl<_Tp, __add_rval_ref_t<_Tp>> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: using __is_assignable_impl = __bool_constant<__is_assignable(_Tp, _Up)>; 15726: 15726: 15726: 15726: template 15726: struct is_assignable 15726: : public __is_assignable_impl<_Tp, _Up> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_copy_assignable 15726: : public __is_assignable_impl<__add_lval_ref_t<_Tp>, 15726: __add_lval_ref_t> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_move_assignable 15726: : public __is_assignable_impl<__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: using __is_nothrow_assignable_impl 15726: = __bool_constant<__is_nothrow_assignable(_Tp, _Up)>; 15726: 15726: 15726: 15726: template 15726: struct is_nothrow_assignable 15726: : public __is_nothrow_assignable_impl<_Tp, _Up> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_nothrow_copy_assignable 15726: : public __is_nothrow_assignable_impl<__add_lval_ref_t<_Tp>, 15726: __add_lval_ref_t> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_nothrow_move_assignable 15726: : public __is_nothrow_assignable_impl<__add_lval_ref_t<_Tp>, 15726: __add_rval_ref_t<_Tp>> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: using __is_trivially_constructible_impl 15726: = __bool_constant<__is_trivially_constructible(_Tp, _Args...)>; 15726: 15726: 15726: 15726: template 15726: struct is_trivially_constructible 15726: : public __is_trivially_constructible_impl<_Tp, _Args...> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_trivially_default_constructible 15726: : public __is_trivially_constructible_impl<_Tp> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: struct __do_is_implicitly_default_constructible_impl 15726: { 15726: template 15726: static void __helper(const _Tp&); 15726: 15726: template 15726: static true_type __test(const _Tp&, 15726: decltype(__helper({}))* = 0); 15726: 15726: static false_type __test(...); 15726: }; 15726: 15726: template 15726: struct __is_implicitly_default_constructible_impl 15726: : public __do_is_implicitly_default_constructible_impl 15726: { 15726: typedef decltype(__test(declval<_Tp>())) type; 15726: }; 15726: 15726: template 15726: struct __is_implicitly_default_constructible_safe 15726: : public __is_implicitly_default_constructible_impl<_Tp>::type 15726: { }; 15726: 15726: template 15726: struct __is_implicitly_default_constructible 15726: : public __and_<__is_constructible_impl<_Tp>, 15726: __is_implicitly_default_constructible_safe<_Tp>>::type 15726: { }; 15726: 15726: 15726: template 15726: struct is_trivially_copy_constructible 15726: : public __is_trivially_constructible_impl<_Tp, __add_lval_ref_t> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_trivially_move_constructible 15726: : public __is_trivially_constructible_impl<_Tp, __add_rval_ref_t<_Tp>> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: using __is_trivially_assignable_impl 15726: = __bool_constant<__is_trivially_assignable(_Tp, _Up)>; 15726: 15726: 15726: 15726: template 15726: struct is_trivially_assignable 15726: : public __is_trivially_assignable_impl<_Tp, _Up> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_trivially_copy_assignable 15726: : public __is_trivially_assignable_impl<__add_lval_ref_t<_Tp>, 15726: __add_lval_ref_t> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_trivially_move_assignable 15726: : public __is_trivially_assignable_impl<__add_lval_ref_t<_Tp>, 15726: __add_rval_ref_t<_Tp>> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_trivially_destructible 15726: : public __and_<__is_destructible_safe<_Tp>, 15726: __bool_constant<__has_trivial_destructor(_Tp)>>::type 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: 15726: template 15726: struct has_virtual_destructor 15726: : public integral_constant 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct alignment_of 15726: : public integral_constant 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct rank 15726: : public integral_constant { }; 15726: 15726: template 15726: struct rank<_Tp[_Size]> 15726: : public integral_constant::value> { }; 15726: 15726: template 15726: struct rank<_Tp[]> 15726: : public integral_constant::value> { }; 15726: 15726: 15726: template 15726: struct extent 15726: : public integral_constant { }; 15726: 15726: template 15726: struct extent<_Tp[_Size], 0> 15726: : public integral_constant { }; 15726: 15726: template 15726: struct extent<_Tp[_Size], _Uint> 15726: : public extent<_Tp, _Uint - 1>::type { }; 15726: 15726: template 15726: struct extent<_Tp[], 0> 15726: : public integral_constant { }; 15726: 15726: template 15726: struct extent<_Tp[], _Uint> 15726: : public extent<_Tp, _Uint - 1>::type { }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct is_same 15726: 15726: : public integral_constant 15726: 15726: 15726: 15726: { }; 15726: # 1409 "/usr/include/c++/13/type_traits" 3 15726: template 15726: struct is_base_of 15726: : public integral_constant 15726: { }; 15726: 15726: 15726: template 15726: struct is_convertible 15726: : public __bool_constant<__is_convertible(_From, _To)> 15726: { }; 15726: # 1458 "/usr/include/c++/13/type_traits" 3 15726: template 15726: using __is_array_convertible 15726: = is_convertible<_FromElementType(*)[], _ToElementType(*)[]>; 15726: # 1522 "/usr/include/c++/13/type_traits" 3 15726: template 15726: struct remove_const 15726: { typedef _Tp type; }; 15726: 15726: template 15726: struct remove_const<_Tp const> 15726: { typedef _Tp type; }; 15726: 15726: 15726: template 15726: struct remove_volatile 15726: { typedef _Tp type; }; 15726: 15726: template 15726: struct remove_volatile<_Tp volatile> 15726: { typedef _Tp type; }; 15726: 15726: 15726: 15726: template 15726: struct remove_cv 15726: { using type = __remove_cv(_Tp); }; 15726: # 1563 "/usr/include/c++/13/type_traits" 3 15726: template 15726: struct add_const 15726: { using type = _Tp const; }; 15726: 15726: 15726: template 15726: struct add_volatile 15726: { using type = _Tp volatile; }; 15726: 15726: 15726: template 15726: struct add_cv 15726: { using type = _Tp const volatile; }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: using remove_const_t = typename remove_const<_Tp>::type; 15726: 15726: 15726: template 15726: using remove_volatile_t = typename remove_volatile<_Tp>::type; 15726: 15726: 15726: template 15726: using remove_cv_t = typename remove_cv<_Tp>::type; 15726: 15726: 15726: template 15726: using add_const_t = typename add_const<_Tp>::type; 15726: 15726: 15726: template 15726: using add_volatile_t = typename add_volatile<_Tp>::type; 15726: 15726: 15726: template 15726: using add_cv_t = typename add_cv<_Tp>::type; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct remove_reference 15726: { using type = __remove_reference(_Tp); }; 15726: # 1628 "/usr/include/c++/13/type_traits" 3 15726: template 15726: struct add_lvalue_reference 15726: { using type = __add_lval_ref_t<_Tp>; }; 15726: 15726: 15726: template 15726: struct add_rvalue_reference 15726: { using type = __add_rval_ref_t<_Tp>; }; 15726: 15726: 15726: 15726: template 15726: using remove_reference_t = typename remove_reference<_Tp>::type; 15726: 15726: 15726: template 15726: using add_lvalue_reference_t = typename add_lvalue_reference<_Tp>::type; 15726: 15726: 15726: template 15726: using add_rvalue_reference_t = typename add_rvalue_reference<_Tp>::type; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct __cv_selector; 15726: 15726: template 15726: struct __cv_selector<_Unqualified, false, false> 15726: { typedef _Unqualified __type; }; 15726: 15726: template 15726: struct __cv_selector<_Unqualified, false, true> 15726: { typedef volatile _Unqualified __type; }; 15726: 15726: template 15726: struct __cv_selector<_Unqualified, true, false> 15726: { typedef const _Unqualified __type; }; 15726: 15726: template 15726: struct __cv_selector<_Unqualified, true, true> 15726: { typedef const volatile _Unqualified __type; }; 15726: 15726: template::value, 15726: bool _IsVol = is_volatile<_Qualified>::value> 15726: class __match_cv_qualifiers 15726: { 15726: typedef __cv_selector<_Unqualified, _IsConst, _IsVol> __match; 15726: 15726: public: 15726: typedef typename __match::__type __type; 15726: }; 15726: 15726: 15726: template 15726: struct __make_unsigned 15726: { typedef _Tp __type; }; 15726: 15726: template<> 15726: struct __make_unsigned 15726: { typedef unsigned char __type; }; 15726: 15726: template<> 15726: struct __make_unsigned 15726: { typedef unsigned char __type; }; 15726: 15726: template<> 15726: struct __make_unsigned 15726: { typedef unsigned short __type; }; 15726: 15726: template<> 15726: struct __make_unsigned 15726: { typedef unsigned int __type; }; 15726: 15726: template<> 15726: struct __make_unsigned 15726: { typedef unsigned long __type; }; 15726: 15726: template<> 15726: struct __make_unsigned 15726: { typedef unsigned long long __type; }; 15726: # 1741 "/usr/include/c++/13/type_traits" 3 15726: template::value, 15726: bool _IsEnum = is_enum<_Tp>::value> 15726: class __make_unsigned_selector; 15726: 15726: template 15726: class __make_unsigned_selector<_Tp, true, false> 15726: { 15726: using __unsigned_type 15726: = typename __make_unsigned<__remove_cv_t<_Tp>>::__type; 15726: 15726: public: 15726: using __type 15726: = typename __match_cv_qualifiers<_Tp, __unsigned_type>::__type; 15726: }; 15726: 15726: class __make_unsigned_selector_base 15726: { 15726: protected: 15726: template struct _List { }; 15726: 15726: template 15726: struct _List<_Tp, _Up...> : _List<_Up...> 15726: { static constexpr size_t __size = sizeof(_Tp); }; 15726: 15726: template 15726: struct __select; 15726: 15726: template 15726: struct __select<_Sz, _List<_Uint, _UInts...>, true> 15726: { using __type = _Uint; }; 15726: 15726: template 15726: struct __select<_Sz, _List<_Uint, _UInts...>, false> 15726: : __select<_Sz, _List<_UInts...>> 15726: { }; 15726: }; 15726: 15726: 15726: template 15726: class __make_unsigned_selector<_Tp, false, true> 15726: : __make_unsigned_selector_base 15726: { 15726: 15726: using _UInts = _List; 15726: 15726: using __unsigned_type = typename __select::__type; 15726: 15726: public: 15726: using __type 15726: = typename __match_cv_qualifiers<_Tp, __unsigned_type>::__type; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template<> 15726: struct __make_unsigned 15726: { 15726: using __type 15726: = typename __make_unsigned_selector::__type; 15726: }; 15726: # 1815 "/usr/include/c++/13/type_traits" 3 15726: template<> 15726: struct __make_unsigned 15726: { 15726: using __type 15726: = typename __make_unsigned_selector::__type; 15726: }; 15726: 15726: template<> 15726: struct __make_unsigned 15726: { 15726: using __type 15726: = typename __make_unsigned_selector::__type; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct make_unsigned 15726: { typedef typename __make_unsigned_selector<_Tp>::__type type; }; 15726: 15726: 15726: template<> struct make_unsigned; 15726: template<> struct make_unsigned; 15726: template<> struct make_unsigned; 15726: template<> struct make_unsigned; 15726: 15726: 15726: 15726: 15726: template 15726: struct __make_signed 15726: { typedef _Tp __type; }; 15726: 15726: template<> 15726: struct __make_signed 15726: { typedef signed char __type; }; 15726: 15726: template<> 15726: struct __make_signed 15726: { typedef signed char __type; }; 15726: 15726: template<> 15726: struct __make_signed 15726: { typedef signed short __type; }; 15726: 15726: template<> 15726: struct __make_signed 15726: { typedef signed int __type; }; 15726: 15726: template<> 15726: struct __make_signed 15726: { typedef signed long __type; }; 15726: 15726: template<> 15726: struct __make_signed 15726: { typedef signed long long __type; }; 15726: # 1901 "/usr/include/c++/13/type_traits" 3 15726: template::value, 15726: bool _IsEnum = is_enum<_Tp>::value> 15726: class __make_signed_selector; 15726: 15726: template 15726: class __make_signed_selector<_Tp, true, false> 15726: { 15726: using __signed_type 15726: = typename __make_signed<__remove_cv_t<_Tp>>::__type; 15726: 15726: public: 15726: using __type 15726: = typename __match_cv_qualifiers<_Tp, __signed_type>::__type; 15726: }; 15726: 15726: 15726: template 15726: class __make_signed_selector<_Tp, false, true> 15726: { 15726: typedef typename __make_unsigned_selector<_Tp>::__type __unsigned_type; 15726: 15726: public: 15726: typedef typename __make_signed_selector<__unsigned_type>::__type __type; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template<> 15726: struct __make_signed 15726: { 15726: using __type 15726: = typename __make_signed_selector::__type; 15726: }; 15726: # 1947 "/usr/include/c++/13/type_traits" 3 15726: template<> 15726: struct __make_signed 15726: { 15726: using __type 15726: = typename __make_signed_selector::__type; 15726: }; 15726: 15726: template<> 15726: struct __make_signed 15726: { 15726: using __type 15726: = typename __make_signed_selector::__type; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct make_signed 15726: { typedef typename __make_signed_selector<_Tp>::__type type; }; 15726: 15726: 15726: template<> struct make_signed; 15726: template<> struct make_signed; 15726: template<> struct make_signed; 15726: template<> struct make_signed; 15726: 15726: 15726: 15726: template 15726: using make_signed_t = typename make_signed<_Tp>::type; 15726: 15726: 15726: template 15726: using make_unsigned_t = typename make_unsigned<_Tp>::type; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct remove_extent 15726: { typedef _Tp type; }; 15726: 15726: template 15726: struct remove_extent<_Tp[_Size]> 15726: { typedef _Tp type; }; 15726: 15726: template 15726: struct remove_extent<_Tp[]> 15726: { typedef _Tp type; }; 15726: 15726: 15726: template 15726: struct remove_all_extents 15726: { typedef _Tp type; }; 15726: 15726: template 15726: struct remove_all_extents<_Tp[_Size]> 15726: { typedef typename remove_all_extents<_Tp>::type type; }; 15726: 15726: template 15726: struct remove_all_extents<_Tp[]> 15726: { typedef typename remove_all_extents<_Tp>::type type; }; 15726: 15726: 15726: 15726: template 15726: using remove_extent_t = typename remove_extent<_Tp>::type; 15726: 15726: 15726: template 15726: using remove_all_extents_t = typename remove_all_extents<_Tp>::type; 15726: 15726: 15726: 15726: 15726: template 15726: struct __remove_pointer_helper 15726: { typedef _Tp type; }; 15726: 15726: template 15726: struct __remove_pointer_helper<_Tp, _Up*> 15726: { typedef _Up type; }; 15726: 15726: 15726: template 15726: struct remove_pointer 15726: : public __remove_pointer_helper<_Tp, __remove_cv_t<_Tp>> 15726: { }; 15726: 15726: template 15726: struct __add_pointer_helper 15726: { using type = _Tp; }; 15726: 15726: template 15726: struct __add_pointer_helper<_Tp, __void_t<_Tp*>> 15726: { using type = _Tp*; }; 15726: 15726: 15726: template 15726: struct add_pointer 15726: : public __add_pointer_helper<_Tp> 15726: { }; 15726: 15726: template 15726: struct add_pointer<_Tp&> 15726: { using type = _Tp*; }; 15726: 15726: template 15726: struct add_pointer<_Tp&&> 15726: { using type = _Tp*; }; 15726: 15726: 15726: 15726: template 15726: using remove_pointer_t = typename remove_pointer<_Tp>::type; 15726: 15726: 15726: template 15726: using add_pointer_t = typename add_pointer<_Tp>::type; 15726: 15726: 15726: template 15726: struct __aligned_storage_msa 15726: { 15726: union __type 15726: { 15726: unsigned char __data[_Len]; 15726: struct __attribute__((__aligned__)) { } __align; 15726: }; 15726: }; 15726: # 2095 "/usr/include/c++/13/type_traits" 3 15726: template::__type)> 15726: struct 15726: 15726: aligned_storage 15726: { 15726: union type 15726: { 15726: unsigned char __data[_Len]; 15726: struct __attribute__((__aligned__((_Align)))) { } __align; 15726: }; 15726: }; 15726: 15726: template 15726: struct __strictest_alignment 15726: { 15726: static const size_t _S_alignment = 0; 15726: static const size_t _S_size = 0; 15726: }; 15726: 15726: template 15726: struct __strictest_alignment<_Tp, _Types...> 15726: { 15726: static const size_t _S_alignment = 15726: alignof(_Tp) > __strictest_alignment<_Types...>::_S_alignment 15726: ? alignof(_Tp) : __strictest_alignment<_Types...>::_S_alignment; 15726: static const size_t _S_size = 15726: sizeof(_Tp) > __strictest_alignment<_Types...>::_S_size 15726: ? sizeof(_Tp) : __strictest_alignment<_Types...>::_S_size; 15726: }; 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: # 2141 "/usr/include/c++/13/type_traits" 3 15726: template 15726: struct 15726: 15726: aligned_union 15726: { 15726: private: 15726: static_assert(sizeof...(_Types) != 0, "At least one type is required"); 15726: 15726: using __strictest = __strictest_alignment<_Types...>; 15726: static const size_t _S_len = _Len > __strictest::_S_size 15726: ? _Len : __strictest::_S_size; 15726: public: 15726: 15726: static const size_t alignment_value = __strictest::_S_alignment; 15726: 15726: typedef typename aligned_storage<_S_len, alignment_value>::type type; 15726: }; 15726: 15726: template 15726: const size_t aligned_union<_Len, _Types...>::alignment_value; 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct __decay_selector 15726: : __conditional_t::value, 15726: remove_cv<_Up>, 15726: add_pointer<_Up>> 15726: { }; 15726: 15726: template 15726: struct __decay_selector<_Up[_Nm]> 15726: { using type = _Up*; }; 15726: 15726: template 15726: struct __decay_selector<_Up[]> 15726: { using type = _Up*; }; 15726: 15726: 15726: 15726: 15726: template 15726: struct decay 15726: { using type = typename __decay_selector<_Tp>::type; }; 15726: 15726: template 15726: struct decay<_Tp&> 15726: { using type = typename __decay_selector<_Tp>::type; }; 15726: 15726: template 15726: struct decay<_Tp&&> 15726: { using type = typename __decay_selector<_Tp>::type; }; 15726: 15726: 15726: 15726: 15726: template 15726: struct __strip_reference_wrapper 15726: { 15726: typedef _Tp __type; 15726: }; 15726: 15726: template 15726: struct __strip_reference_wrapper > 15726: { 15726: typedef _Tp& __type; 15726: }; 15726: 15726: 15726: template 15726: using __decay_t = typename decay<_Tp>::type; 15726: 15726: template 15726: using __decay_and_strip = __strip_reference_wrapper<__decay_t<_Tp>>; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: using _Require = __enable_if_t<__and_<_Cond...>::value>; 15726: 15726: 15726: template 15726: using __remove_cvref_t 15726: = typename remove_cv::type>::type; 15726: 15726: 15726: 15726: 15726: template 15726: struct conditional 15726: { typedef _Iftrue type; }; 15726: 15726: 15726: template 15726: struct conditional 15726: { typedef _Iffalse type; }; 15726: 15726: 15726: template 15726: struct common_type; 15726: # 2256 "/usr/include/c++/13/type_traits" 3 15726: template 15726: struct __success_type 15726: { typedef _Tp type; }; 15726: 15726: struct __failure_type 15726: { }; 15726: 15726: struct __do_common_type_impl 15726: { 15726: template 15726: using __cond_t 15726: = decltype(true ? std::declval<_Tp>() : std::declval<_Up>()); 15726: 15726: 15726: 15726: template 15726: static __success_type<__decay_t<__cond_t<_Tp, _Up>>> 15726: _S_test(int); 15726: # 2283 "/usr/include/c++/13/type_traits" 3 15726: template 15726: static __failure_type 15726: _S_test_2(...); 15726: 15726: template 15726: static decltype(_S_test_2<_Tp, _Up>(0)) 15726: _S_test(...); 15726: }; 15726: 15726: 15726: template<> 15726: struct common_type<> 15726: { }; 15726: 15726: 15726: template 15726: struct common_type<_Tp0> 15726: : public common_type<_Tp0, _Tp0> 15726: { }; 15726: 15726: 15726: template, typename _Dp2 = __decay_t<_Tp2>> 15726: struct __common_type_impl 15726: { 15726: 15726: 15726: using type = common_type<_Dp1, _Dp2>; 15726: }; 15726: 15726: template 15726: struct __common_type_impl<_Tp1, _Tp2, _Tp1, _Tp2> 15726: : private __do_common_type_impl 15726: { 15726: 15726: 15726: using type = decltype(_S_test<_Tp1, _Tp2>(0)); 15726: }; 15726: 15726: 15726: template 15726: struct common_type<_Tp1, _Tp2> 15726: : public __common_type_impl<_Tp1, _Tp2>::type 15726: { }; 15726: 15726: template 15726: struct __common_type_pack 15726: { }; 15726: 15726: template 15726: struct __common_type_fold; 15726: 15726: 15726: template 15726: struct common_type<_Tp1, _Tp2, _Rp...> 15726: : public __common_type_fold, 15726: __common_type_pack<_Rp...>> 15726: { }; 15726: 15726: 15726: 15726: 15726: template 15726: struct __common_type_fold<_CTp, __common_type_pack<_Rp...>, 15726: __void_t> 15726: : public common_type 15726: { }; 15726: 15726: 15726: template 15726: struct __common_type_fold<_CTp, _Rp, void> 15726: { }; 15726: 15726: template::value> 15726: struct __underlying_type_impl 15726: { 15726: using type = __underlying_type(_Tp); 15726: }; 15726: 15726: template 15726: struct __underlying_type_impl<_Tp, false> 15726: { }; 15726: 15726: 15726: 15726: template 15726: struct underlying_type 15726: : public __underlying_type_impl<_Tp> 15726: { }; 15726: 15726: 15726: template 15726: struct __declval_protector 15726: { 15726: static const bool __stop = false; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: auto declval() noexcept -> decltype(__declval<_Tp>(0)) 15726: { 15726: static_assert(__declval_protector<_Tp>::__stop, 15726: "declval() must not be used!"); 15726: return __declval<_Tp>(0); 15726: } 15726: 15726: 15726: template 15726: struct result_of; 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct __invoke_memfun_ref { }; 15726: struct __invoke_memfun_deref { }; 15726: struct __invoke_memobj_ref { }; 15726: struct __invoke_memobj_deref { }; 15726: struct __invoke_other { }; 15726: 15726: 15726: template 15726: struct __result_of_success : __success_type<_Tp> 15726: { using __invoke_type = _Tag; }; 15726: 15726: 15726: struct __result_of_memfun_ref_impl 15726: { 15726: template 15726: static __result_of_success().*std::declval<_Fp>())(std::declval<_Args>()...) 15726: ), __invoke_memfun_ref> _S_test(int); 15726: 15726: template 15726: static __failure_type _S_test(...); 15726: }; 15726: 15726: template 15726: struct __result_of_memfun_ref 15726: : private __result_of_memfun_ref_impl 15726: { 15726: typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type; 15726: }; 15726: 15726: 15726: struct __result_of_memfun_deref_impl 15726: { 15726: template 15726: static __result_of_success()).*std::declval<_Fp>())(std::declval<_Args>()...) 15726: ), __invoke_memfun_deref> _S_test(int); 15726: 15726: template 15726: static __failure_type _S_test(...); 15726: }; 15726: 15726: template 15726: struct __result_of_memfun_deref 15726: : private __result_of_memfun_deref_impl 15726: { 15726: typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type; 15726: }; 15726: 15726: 15726: struct __result_of_memobj_ref_impl 15726: { 15726: template 15726: static __result_of_success().*std::declval<_Fp>() 15726: ), __invoke_memobj_ref> _S_test(int); 15726: 15726: template 15726: static __failure_type _S_test(...); 15726: }; 15726: 15726: template 15726: struct __result_of_memobj_ref 15726: : private __result_of_memobj_ref_impl 15726: { 15726: typedef decltype(_S_test<_MemPtr, _Arg>(0)) type; 15726: }; 15726: 15726: 15726: struct __result_of_memobj_deref_impl 15726: { 15726: template 15726: static __result_of_success()).*std::declval<_Fp>() 15726: ), __invoke_memobj_deref> _S_test(int); 15726: 15726: template 15726: static __failure_type _S_test(...); 15726: }; 15726: 15726: template 15726: struct __result_of_memobj_deref 15726: : private __result_of_memobj_deref_impl 15726: { 15726: typedef decltype(_S_test<_MemPtr, _Arg>(0)) type; 15726: }; 15726: 15726: template 15726: struct __result_of_memobj; 15726: 15726: template 15726: struct __result_of_memobj<_Res _Class::*, _Arg> 15726: { 15726: typedef __remove_cvref_t<_Arg> _Argval; 15726: typedef _Res _Class::* _MemPtr; 15726: typedef typename __conditional_t<__or_, 15726: is_base_of<_Class, _Argval>>::value, 15726: __result_of_memobj_ref<_MemPtr, _Arg>, 15726: __result_of_memobj_deref<_MemPtr, _Arg> 15726: >::type type; 15726: }; 15726: 15726: template 15726: struct __result_of_memfun; 15726: 15726: template 15726: struct __result_of_memfun<_Res _Class::*, _Arg, _Args...> 15726: { 15726: typedef typename remove_reference<_Arg>::type _Argval; 15726: typedef _Res _Class::* _MemPtr; 15726: typedef typename __conditional_t::value, 15726: __result_of_memfun_ref<_MemPtr, _Arg, _Args...>, 15726: __result_of_memfun_deref<_MemPtr, _Arg, _Args...> 15726: >::type type; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template> 15726: struct __inv_unwrap 15726: { 15726: using type = _Tp; 15726: }; 15726: 15726: template 15726: struct __inv_unwrap<_Tp, reference_wrapper<_Up>> 15726: { 15726: using type = _Up&; 15726: }; 15726: 15726: template 15726: struct __result_of_impl 15726: { 15726: typedef __failure_type type; 15726: }; 15726: 15726: template 15726: struct __result_of_impl 15726: : public __result_of_memobj<__decay_t<_MemPtr>, 15726: typename __inv_unwrap<_Arg>::type> 15726: { }; 15726: 15726: template 15726: struct __result_of_impl 15726: : public __result_of_memfun<__decay_t<_MemPtr>, 15726: typename __inv_unwrap<_Arg>::type, _Args...> 15726: { }; 15726: 15726: 15726: struct __result_of_other_impl 15726: { 15726: template 15726: static __result_of_success()(std::declval<_Args>()...) 15726: ), __invoke_other> _S_test(int); 15726: 15726: template 15726: static __failure_type _S_test(...); 15726: }; 15726: 15726: template 15726: struct __result_of_impl 15726: : private __result_of_other_impl 15726: { 15726: typedef decltype(_S_test<_Functor, _ArgTypes...>(0)) type; 15726: }; 15726: 15726: 15726: template 15726: struct __invoke_result 15726: : public __result_of_impl< 15726: is_member_object_pointer< 15726: typename remove_reference<_Functor>::type 15726: >::value, 15726: is_member_function_pointer< 15726: typename remove_reference<_Functor>::type 15726: >::value, 15726: _Functor, _ArgTypes... 15726: >::type 15726: { }; 15726: 15726: 15726: template 15726: struct result_of<_Functor(_ArgTypes...)> 15726: : public __invoke_result<_Functor, _ArgTypes...> 15726: { } __attribute__ ((__deprecated__ ("use '" "std::invoke_result" "' instead"))); 15726: 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: 15726: template::__type)> 15726: using aligned_storage_t = typename aligned_storage<_Len, _Align>::type; 15726: 15726: template 15726: using aligned_union_t = typename aligned_union<_Len, _Types...>::type; 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: template 15726: using decay_t = typename decay<_Tp>::type; 15726: 15726: 15726: template 15726: using enable_if_t = typename enable_if<_Cond, _Tp>::type; 15726: 15726: 15726: template 15726: using conditional_t = typename conditional<_Cond, _Iftrue, _Iffalse>::type; 15726: 15726: 15726: template 15726: using common_type_t = typename common_type<_Tp...>::type; 15726: 15726: 15726: template 15726: using underlying_type_t = typename underlying_type<_Tp>::type; 15726: 15726: 15726: template 15726: using result_of_t = typename result_of<_Tp>::type; 15726: 15726: 15726: 15726: 15726: 15726: template using void_t = void; 15726: # 2659 "/usr/include/c++/13/type_traits" 3 15726: template class _Op, typename... _Args> 15726: struct __detector 15726: { 15726: using type = _Default; 15726: using __is_detected = false_type; 15726: }; 15726: 15726: 15726: template class _Op, 15726: typename... _Args> 15726: struct __detector<_Default, __void_t<_Op<_Args...>>, _Op, _Args...> 15726: { 15726: using type = _Op<_Args...>; 15726: using __is_detected = true_type; 15726: }; 15726: 15726: template class _Op, 15726: typename... _Args> 15726: using __detected_or = __detector<_Default, void, _Op, _Args...>; 15726: 15726: 15726: 15726: template class _Op, 15726: typename... _Args> 15726: using __detected_or_t 15726: = typename __detected_or<_Default, _Op, _Args...>::type; 15726: # 2701 "/usr/include/c++/13/type_traits" 3 15726: template 15726: struct __is_swappable; 15726: 15726: template 15726: struct __is_nothrow_swappable; 15726: 15726: template 15726: struct __is_tuple_like_impl : false_type 15726: { }; 15726: 15726: 15726: template 15726: struct __is_tuple_like 15726: : public __is_tuple_like_impl<__remove_cvref_t<_Tp>>::type 15726: { }; 15726: 15726: 15726: template 15726: 15726: inline 15726: _Require<__not_<__is_tuple_like<_Tp>>, 15726: is_move_constructible<_Tp>, 15726: is_move_assignable<_Tp>> 15726: swap(_Tp&, _Tp&) 15726: noexcept(__and_, 15726: is_nothrow_move_assignable<_Tp>>::value); 15726: 15726: template 15726: 15726: inline 15726: __enable_if_t<__is_swappable<_Tp>::value> 15726: swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) 15726: noexcept(__is_nothrow_swappable<_Tp>::value); 15726: 15726: 15726: namespace __swappable_details { 15726: using std::swap; 15726: 15726: struct __do_is_swappable_impl 15726: { 15726: template(), std::declval<_Tp&>()))> 15726: static true_type __test(int); 15726: 15726: template 15726: static false_type __test(...); 15726: }; 15726: 15726: struct __do_is_nothrow_swappable_impl 15726: { 15726: template 15726: static __bool_constant< 15726: noexcept(swap(std::declval<_Tp&>(), std::declval<_Tp&>())) 15726: > __test(int); 15726: 15726: template 15726: static false_type __test(...); 15726: }; 15726: 15726: } 15726: 15726: template 15726: struct __is_swappable_impl 15726: : public __swappable_details::__do_is_swappable_impl 15726: { 15726: typedef decltype(__test<_Tp>(0)) type; 15726: }; 15726: 15726: template 15726: struct __is_nothrow_swappable_impl 15726: : public __swappable_details::__do_is_nothrow_swappable_impl 15726: { 15726: typedef decltype(__test<_Tp>(0)) type; 15726: }; 15726: 15726: template 15726: struct __is_swappable 15726: : public __is_swappable_impl<_Tp>::type 15726: { }; 15726: 15726: template 15726: struct __is_nothrow_swappable 15726: : public __is_nothrow_swappable_impl<_Tp>::type 15726: { }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct is_swappable 15726: : public __is_swappable_impl<_Tp>::type 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_nothrow_swappable 15726: : public __is_nothrow_swappable_impl<_Tp>::type 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: 15726: template 15726: inline constexpr bool is_swappable_v = 15726: is_swappable<_Tp>::value; 15726: 15726: 15726: template 15726: inline constexpr bool is_nothrow_swappable_v = 15726: is_nothrow_swappable<_Tp>::value; 15726: 15726: 15726: 15726: namespace __swappable_with_details { 15726: using std::swap; 15726: 15726: struct __do_is_swappable_with_impl 15726: { 15726: template(), std::declval<_Up>())), 15726: typename 15726: = decltype(swap(std::declval<_Up>(), std::declval<_Tp>()))> 15726: static true_type __test(int); 15726: 15726: template 15726: static false_type __test(...); 15726: }; 15726: 15726: struct __do_is_nothrow_swappable_with_impl 15726: { 15726: template 15726: static __bool_constant< 15726: noexcept(swap(std::declval<_Tp>(), std::declval<_Up>())) 15726: && 15726: noexcept(swap(std::declval<_Up>(), std::declval<_Tp>())) 15726: > __test(int); 15726: 15726: template 15726: static false_type __test(...); 15726: }; 15726: 15726: } 15726: 15726: template 15726: struct __is_swappable_with_impl 15726: : public __swappable_with_details::__do_is_swappable_with_impl 15726: { 15726: typedef decltype(__test<_Tp, _Up>(0)) type; 15726: }; 15726: 15726: 15726: template 15726: struct __is_swappable_with_impl<_Tp&, _Tp&> 15726: : public __swappable_details::__do_is_swappable_impl 15726: { 15726: typedef decltype(__test<_Tp&>(0)) type; 15726: }; 15726: 15726: template 15726: struct __is_nothrow_swappable_with_impl 15726: : public __swappable_with_details::__do_is_nothrow_swappable_with_impl 15726: { 15726: typedef decltype(__test<_Tp, _Up>(0)) type; 15726: }; 15726: 15726: 15726: template 15726: struct __is_nothrow_swappable_with_impl<_Tp&, _Tp&> 15726: : public __swappable_details::__do_is_nothrow_swappable_impl 15726: { 15726: typedef decltype(__test<_Tp&>(0)) type; 15726: }; 15726: 15726: 15726: 15726: template 15726: struct is_swappable_with 15726: : public __is_swappable_with_impl<_Tp, _Up>::type 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "first template argument must be a complete class or an unbounded array"); 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Up>{}), 15726: "second template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_nothrow_swappable_with 15726: : public __is_nothrow_swappable_with_impl<_Tp, _Up>::type 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "first template argument must be a complete class or an unbounded array"); 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Up>{}), 15726: "second template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: 15726: template 15726: inline constexpr bool is_swappable_with_v = 15726: is_swappable_with<_Tp, _Up>::value; 15726: 15726: 15726: template 15726: inline constexpr bool is_nothrow_swappable_with_v = 15726: is_nothrow_swappable_with<_Tp, _Up>::value; 15726: # 2924 "/usr/include/c++/13/type_traits" 3 15726: template::value, typename = void> 15726: struct __is_invocable_impl 15726: : false_type 15726: { 15726: using __nothrow_conv = false_type; 15726: }; 15726: 15726: 15726: template 15726: struct __is_invocable_impl<_Result, _Ret, 15726: true, 15726: __void_t> 15726: : true_type 15726: { 15726: using __nothrow_conv = true_type; 15726: }; 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wctor-dtor-privacy" 15726: 15726: template 15726: struct __is_invocable_impl<_Result, _Ret, 15726: false, 15726: __void_t> 15726: { 15726: private: 15726: 15726: using _Res_t = typename _Result::type; 15726: 15726: 15726: 15726: static _Res_t _S_get() noexcept; 15726: 15726: 15726: template 15726: static void _S_conv(__type_identity_t<_Tp>) noexcept; 15726: 15726: 15726: template(_S_get())), 15726: typename = decltype(_S_conv<_Tp>(_S_get())), 15726: 15726: bool _Dangle = __reference_converts_from_temporary(_Tp, _Res_t) 15726: 15726: 15726: 15726: > 15726: static __bool_constant<_Nothrow && !_Dangle> 15726: _S_test(int); 15726: 15726: template 15726: static false_type 15726: _S_test(...); 15726: 15726: public: 15726: 15726: using type = decltype(_S_test<_Ret, true>(1)); 15726: 15726: 15726: using __nothrow_conv = decltype(_S_test<_Ret>(1)); 15726: }; 15726: #pragma GCC diagnostic pop 15726: 15726: template 15726: struct __is_invocable 15726: : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type 15726: { }; 15726: 15726: template 15726: constexpr bool __call_is_nt(__invoke_memfun_ref) 15726: { 15726: using _Up = typename __inv_unwrap<_Tp>::type; 15726: return noexcept((std::declval<_Up>().*std::declval<_Fn>())( 15726: std::declval<_Args>()...)); 15726: } 15726: 15726: template 15726: constexpr bool __call_is_nt(__invoke_memfun_deref) 15726: { 15726: return noexcept(((*std::declval<_Tp>()).*std::declval<_Fn>())( 15726: std::declval<_Args>()...)); 15726: } 15726: 15726: template 15726: constexpr bool __call_is_nt(__invoke_memobj_ref) 15726: { 15726: using _Up = typename __inv_unwrap<_Tp>::type; 15726: return noexcept(std::declval<_Up>().*std::declval<_Fn>()); 15726: } 15726: 15726: template 15726: constexpr bool __call_is_nt(__invoke_memobj_deref) 15726: { 15726: return noexcept((*std::declval<_Tp>()).*std::declval<_Fn>()); 15726: } 15726: 15726: template 15726: constexpr bool __call_is_nt(__invoke_other) 15726: { 15726: return noexcept(std::declval<_Fn>()(std::declval<_Args>()...)); 15726: } 15726: 15726: template 15726: struct __call_is_nothrow 15726: : __bool_constant< 15726: std::__call_is_nt<_Fn, _Args...>(typename _Result::__invoke_type{}) 15726: > 15726: { }; 15726: 15726: template 15726: using __call_is_nothrow_ 15726: = __call_is_nothrow<__invoke_result<_Fn, _Args...>, _Fn, _Args...>; 15726: 15726: 15726: template 15726: struct __is_nothrow_invocable 15726: : __and_<__is_invocable<_Fn, _Args...>, 15726: __call_is_nothrow_<_Fn, _Args...>>::type 15726: { }; 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wctor-dtor-privacy" 15726: struct __nonesuchbase {}; 15726: struct __nonesuch : private __nonesuchbase { 15726: ~__nonesuch() = delete; 15726: __nonesuch(__nonesuch const&) = delete; 15726: void operator=(__nonesuch const&) = delete; 15726: }; 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct invoke_result 15726: : public __invoke_result<_Functor, _ArgTypes...> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Functor>{}), 15726: "_Functor must be a complete class or an unbounded array"); 15726: static_assert((std::__is_complete_or_unbounded( 15726: __type_identity<_ArgTypes>{}) && ...), 15726: "each argument type must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: using invoke_result_t = typename invoke_result<_Fn, _Args...>::type; 15726: 15726: 15726: template 15726: struct is_invocable 15726: : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}), 15726: "_Fn must be a complete class or an unbounded array"); 15726: static_assert((std::__is_complete_or_unbounded( 15726: __type_identity<_ArgTypes>{}) && ...), 15726: "each argument type must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_invocable_r 15726: : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, _Ret>::type 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}), 15726: "_Fn must be a complete class or an unbounded array"); 15726: static_assert((std::__is_complete_or_unbounded( 15726: __type_identity<_ArgTypes>{}) && ...), 15726: "each argument type must be a complete class or an unbounded array"); 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Ret>{}), 15726: "_Ret must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: struct is_nothrow_invocable 15726: : __and_<__is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>, 15726: __call_is_nothrow_<_Fn, _ArgTypes...>>::type 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}), 15726: "_Fn must be a complete class or an unbounded array"); 15726: static_assert((std::__is_complete_or_unbounded( 15726: __type_identity<_ArgTypes>{}) && ...), 15726: "each argument type must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: using __is_nt_invocable_impl 15726: = typename __is_invocable_impl<_Result, _Ret>::__nothrow_conv; 15726: 15726: 15726: 15726: template 15726: struct is_nothrow_invocable_r 15726: : __and_<__is_nt_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, _Ret>, 15726: __call_is_nothrow_<_Fn, _ArgTypes...>>::type 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}), 15726: "_Fn must be a complete class or an unbounded array"); 15726: static_assert((std::__is_complete_or_unbounded( 15726: __type_identity<_ArgTypes>{}) && ...), 15726: "each argument type must be a complete class or an unbounded array"); 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Ret>{}), 15726: "_Ret must be a complete class or an unbounded array"); 15726: }; 15726: # 3155 "/usr/include/c++/13/type_traits" 3 15726: template 15726: inline constexpr bool is_void_v = is_void<_Tp>::value; 15726: template 15726: inline constexpr bool is_null_pointer_v = is_null_pointer<_Tp>::value; 15726: template 15726: inline constexpr bool is_integral_v = is_integral<_Tp>::value; 15726: template 15726: inline constexpr bool is_floating_point_v = is_floating_point<_Tp>::value; 15726: 15726: template 15726: inline constexpr bool is_array_v = false; 15726: template 15726: inline constexpr bool is_array_v<_Tp[]> = true; 15726: template 15726: inline constexpr bool is_array_v<_Tp[_Num]> = true; 15726: 15726: template 15726: inline constexpr bool is_pointer_v = is_pointer<_Tp>::value; 15726: template 15726: inline constexpr bool is_lvalue_reference_v = false; 15726: template 15726: inline constexpr bool is_lvalue_reference_v<_Tp&> = true; 15726: template 15726: inline constexpr bool is_rvalue_reference_v = false; 15726: template 15726: inline constexpr bool is_rvalue_reference_v<_Tp&&> = true; 15726: template 15726: inline constexpr bool is_member_object_pointer_v = 15726: is_member_object_pointer<_Tp>::value; 15726: template 15726: inline constexpr bool is_member_function_pointer_v = 15726: is_member_function_pointer<_Tp>::value; 15726: template 15726: inline constexpr bool is_enum_v = __is_enum(_Tp); 15726: template 15726: inline constexpr bool is_union_v = __is_union(_Tp); 15726: template 15726: inline constexpr bool is_class_v = __is_class(_Tp); 15726: template 15726: inline constexpr bool is_function_v = is_function<_Tp>::value; 15726: template 15726: inline constexpr bool is_reference_v = false; 15726: template 15726: inline constexpr bool is_reference_v<_Tp&> = true; 15726: template 15726: inline constexpr bool is_reference_v<_Tp&&> = true; 15726: template 15726: inline constexpr bool is_arithmetic_v = is_arithmetic<_Tp>::value; 15726: template 15726: inline constexpr bool is_fundamental_v = is_fundamental<_Tp>::value; 15726: template 15726: inline constexpr bool is_object_v = is_object<_Tp>::value; 15726: template 15726: inline constexpr bool is_scalar_v = is_scalar<_Tp>::value; 15726: template 15726: inline constexpr bool is_compound_v = is_compound<_Tp>::value; 15726: template 15726: inline constexpr bool is_member_pointer_v = is_member_pointer<_Tp>::value; 15726: template 15726: inline constexpr bool is_const_v = false; 15726: template 15726: inline constexpr bool is_const_v = true; 15726: template 15726: inline constexpr bool is_volatile_v = false; 15726: template 15726: inline constexpr bool is_volatile_v = true; 15726: 15726: template 15726: inline constexpr bool is_trivial_v = __is_trivial(_Tp); 15726: template 15726: inline constexpr bool is_trivially_copyable_v = __is_trivially_copyable(_Tp); 15726: template 15726: inline constexpr bool is_standard_layout_v = __is_standard_layout(_Tp); 15726: template 15726: 15726: inline constexpr bool is_pod_v = __is_pod(_Tp); 15726: template 15726: [[__deprecated__]] 15726: inline constexpr bool is_literal_type_v = __is_literal_type(_Tp); 15726: template 15726: inline constexpr bool is_empty_v = __is_empty(_Tp); 15726: template 15726: inline constexpr bool is_polymorphic_v = __is_polymorphic(_Tp); 15726: template 15726: inline constexpr bool is_abstract_v = __is_abstract(_Tp); 15726: template 15726: inline constexpr bool is_final_v = __is_final(_Tp); 15726: 15726: template 15726: inline constexpr bool is_signed_v = is_signed<_Tp>::value; 15726: template 15726: inline constexpr bool is_unsigned_v = is_unsigned<_Tp>::value; 15726: 15726: template 15726: inline constexpr bool is_constructible_v = __is_constructible(_Tp, _Args...); 15726: template 15726: inline constexpr bool is_default_constructible_v = __is_constructible(_Tp); 15726: template 15726: inline constexpr bool is_copy_constructible_v 15726: = __is_constructible(_Tp, __add_lval_ref_t); 15726: template 15726: inline constexpr bool is_move_constructible_v 15726: = __is_constructible(_Tp, __add_rval_ref_t<_Tp>); 15726: 15726: template 15726: inline constexpr bool is_assignable_v = __is_assignable(_Tp, _Up); 15726: template 15726: inline constexpr bool is_copy_assignable_v 15726: = __is_assignable(__add_lval_ref_t<_Tp>, __add_lval_ref_t); 15726: template 15726: inline constexpr bool is_move_assignable_v 15726: = __is_assignable(__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>); 15726: 15726: template 15726: inline constexpr bool is_destructible_v = is_destructible<_Tp>::value; 15726: 15726: template 15726: inline constexpr bool is_trivially_constructible_v 15726: = __is_trivially_constructible(_Tp, _Args...); 15726: template 15726: inline constexpr bool is_trivially_default_constructible_v 15726: = __is_trivially_constructible(_Tp); 15726: template 15726: inline constexpr bool is_trivially_copy_constructible_v 15726: = __is_trivially_constructible(_Tp, __add_lval_ref_t); 15726: template 15726: inline constexpr bool is_trivially_move_constructible_v 15726: = __is_trivially_constructible(_Tp, __add_rval_ref_t<_Tp>); 15726: 15726: template 15726: inline constexpr bool is_trivially_assignable_v 15726: = __is_trivially_assignable(_Tp, _Up); 15726: template 15726: inline constexpr bool is_trivially_copy_assignable_v 15726: = __is_trivially_assignable(__add_lval_ref_t<_Tp>, 15726: __add_lval_ref_t); 15726: template 15726: inline constexpr bool is_trivially_move_assignable_v 15726: = __is_trivially_assignable(__add_lval_ref_t<_Tp>, 15726: __add_rval_ref_t<_Tp>); 15726: template 15726: inline constexpr bool is_trivially_destructible_v = 15726: is_trivially_destructible<_Tp>::value; 15726: template 15726: inline constexpr bool is_nothrow_constructible_v 15726: = __is_nothrow_constructible(_Tp, _Args...); 15726: template 15726: inline constexpr bool is_nothrow_default_constructible_v 15726: = __is_nothrow_constructible(_Tp); 15726: template 15726: inline constexpr bool is_nothrow_copy_constructible_v 15726: = __is_nothrow_constructible(_Tp, __add_lval_ref_t); 15726: template 15726: inline constexpr bool is_nothrow_move_constructible_v 15726: = __is_nothrow_constructible(_Tp, __add_rval_ref_t<_Tp>); 15726: 15726: template 15726: inline constexpr bool is_nothrow_assignable_v 15726: = __is_nothrow_assignable(_Tp, _Up); 15726: template 15726: inline constexpr bool is_nothrow_copy_assignable_v 15726: = __is_nothrow_assignable(__add_lval_ref_t<_Tp>, 15726: __add_lval_ref_t); 15726: template 15726: inline constexpr bool is_nothrow_move_assignable_v 15726: = __is_nothrow_assignable(__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>); 15726: 15726: template 15726: inline constexpr bool is_nothrow_destructible_v = 15726: is_nothrow_destructible<_Tp>::value; 15726: 15726: template 15726: inline constexpr bool has_virtual_destructor_v 15726: = __has_virtual_destructor(_Tp); 15726: 15726: template 15726: inline constexpr size_t alignment_of_v = alignment_of<_Tp>::value; 15726: 15726: template 15726: inline constexpr size_t rank_v = 0; 15726: template 15726: inline constexpr size_t rank_v<_Tp[_Size]> = 1 + rank_v<_Tp>; 15726: template 15726: inline constexpr size_t rank_v<_Tp[]> = 1 + rank_v<_Tp>; 15726: 15726: template 15726: inline constexpr size_t extent_v = 0; 15726: template 15726: inline constexpr size_t extent_v<_Tp[_Size], 0> = _Size; 15726: template 15726: inline constexpr size_t extent_v<_Tp[_Size], _Idx> = extent_v<_Tp, _Idx - 1>; 15726: template 15726: inline constexpr size_t extent_v<_Tp[], 0> = 0; 15726: template 15726: inline constexpr size_t extent_v<_Tp[], _Idx> = extent_v<_Tp, _Idx - 1>; 15726: 15726: 15726: template 15726: inline constexpr bool is_same_v = __is_same(_Tp, _Up); 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline constexpr bool is_base_of_v = __is_base_of(_Base, _Derived); 15726: 15726: template 15726: inline constexpr bool is_convertible_v = __is_convertible(_From, _To); 15726: 15726: 15726: 15726: 15726: template 15726: inline constexpr bool is_invocable_v = is_invocable<_Fn, _Args...>::value; 15726: template 15726: inline constexpr bool is_nothrow_invocable_v 15726: = is_nothrow_invocable<_Fn, _Args...>::value; 15726: template 15726: inline constexpr bool is_invocable_r_v 15726: = is_invocable_r<_Ret, _Fn, _Args...>::value; 15726: template 15726: inline constexpr bool is_nothrow_invocable_r_v 15726: = is_nothrow_invocable_r<_Ret, _Fn, _Args...>::value; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct has_unique_object_representations 15726: : bool_constant<__has_unique_object_representations( 15726: remove_cv_t> 15726: )> 15726: { 15726: static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), 15726: "template argument must be a complete class or an unbounded array"); 15726: }; 15726: 15726: 15726: template 15726: inline constexpr bool has_unique_object_representations_v 15726: = has_unique_object_representations<_Tp>::value; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct is_aggregate 15726: : bool_constant<__is_aggregate(remove_cv_t<_Tp>)> 15726: { }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline constexpr bool is_aggregate_v = __is_aggregate(remove_cv_t<_Tp>); 15726: # 3833 "/usr/include/c++/13/type_traits" 3 15726: 15726: } 15726: # 38 "/usr/include/c++/13/bits/move.h" 2 3 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline constexpr _Tp* 15726: __addressof(_Tp& __r) noexcept 15726: { return __builtin_addressof(__r); } 15726: # 67 "/usr/include/c++/13/bits/move.h" 3 15726: template 15726: [[__nodiscard__]] 15726: constexpr _Tp&& 15726: forward(typename std::remove_reference<_Tp>::type& __t) noexcept 15726: { return static_cast<_Tp&&>(__t); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: constexpr _Tp&& 15726: forward(typename std::remove_reference<_Tp>::type&& __t) noexcept 15726: { 15726: static_assert(!std::is_lvalue_reference<_Tp>::value, 15726: "std::forward must not be used to convert an rvalue to an lvalue"); 15726: return static_cast<_Tp&&>(__t); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: constexpr typename std::remove_reference<_Tp>::type&& 15726: move(_Tp&& __t) noexcept 15726: { return static_cast::type&&>(__t); } 15726: 15726: 15726: template 15726: struct __move_if_noexcept_cond 15726: : public __and_<__not_>, 15726: is_copy_constructible<_Tp>>::type { }; 15726: # 114 "/usr/include/c++/13/bits/move.h" 3 15726: template 15726: [[__nodiscard__]] 15726: constexpr 15726: __conditional_t<__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&> 15726: move_if_noexcept(_Tp& __x) noexcept 15726: { return std::move(__x); } 15726: # 135 "/usr/include/c++/13/bits/move.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr _Tp* 15726: addressof(_Tp& __r) noexcept 15726: { return std::__addressof(__r); } 15726: 15726: 15726: 15726: template 15726: const _Tp* addressof(const _Tp&&) = delete; 15726: 15726: 15726: template 15726: 15726: inline _Tp 15726: __exchange(_Tp& __obj, _Up&& __new_val) 15726: { 15726: _Tp __old_val = std::move(__obj); 15726: __obj = std::forward<_Up>(__new_val); 15726: return __old_val; 15726: } 15726: # 179 "/usr/include/c++/13/bits/move.h" 3 15726: template 15726: 15726: inline 15726: 15726: typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>, 15726: is_move_constructible<_Tp>, 15726: is_move_assignable<_Tp>>::value>::type 15726: 15726: 15726: 15726: swap(_Tp& __a, _Tp& __b) 15726: noexcept(__and_, is_nothrow_move_assignable<_Tp>>::value) 15726: 15726: { 15726: 15726: 15726: 15726: 15726: _Tp __tmp = std::move(__a); 15726: __a = std::move(__b); 15726: __b = std::move(__tmp); 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: 15726: inline 15726: 15726: typename enable_if<__is_swappable<_Tp>::value>::type 15726: 15726: 15726: 15726: swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) 15726: noexcept(__is_nothrow_swappable<_Tp>::value) 15726: { 15726: for (size_t __n = 0; __n < _Nm; ++__n) 15726: swap(__a[__n], __b[__n]); 15726: } 15726: 15726: 15726: 15726: } 15726: # 40 "/usr/include/c++/13/bits/atomic_base.h" 2 3 15726: # 49 "/usr/include/c++/13/bits/atomic_base.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 79 "/usr/include/c++/13/bits/atomic_base.h" 3 15726: typedef enum memory_order 15726: { 15726: memory_order_relaxed, 15726: memory_order_consume, 15726: memory_order_acquire, 15726: memory_order_release, 15726: memory_order_acq_rel, 15726: memory_order_seq_cst 15726: } memory_order; 15726: 15726: 15726: 15726: enum __memory_order_modifier 15726: { 15726: __memory_order_mask = 0x0ffff, 15726: __memory_order_modifier_mask = 0xffff0000, 15726: __memory_order_hle_acquire = 0x10000, 15726: __memory_order_hle_release = 0x20000 15726: }; 15726: 15726: 15726: constexpr memory_order 15726: operator|(memory_order __m, __memory_order_modifier __mod) 15726: { 15726: return memory_order(int(__m) | int(__mod)); 15726: } 15726: 15726: constexpr memory_order 15726: operator&(memory_order __m, __memory_order_modifier __mod) 15726: { 15726: return memory_order(int(__m) & int(__mod)); 15726: } 15726: 15726: 15726: 15726: 15726: constexpr memory_order 15726: __cmpexch_failure_order2(memory_order __m) noexcept 15726: { 15726: return __m == memory_order_acq_rel ? memory_order_acquire 15726: : __m == memory_order_release ? memory_order_relaxed : __m; 15726: } 15726: 15726: constexpr memory_order 15726: __cmpexch_failure_order(memory_order __m) noexcept 15726: { 15726: return memory_order(__cmpexch_failure_order2(__m & __memory_order_mask) 15726: | __memory_order_modifier(__m & __memory_order_modifier_mask)); 15726: } 15726: 15726: constexpr bool 15726: __is_valid_cmpexch_failure_order(memory_order __m) noexcept 15726: { 15726: return (__m & __memory_order_mask) != memory_order_release 15726: && (__m & __memory_order_mask) != memory_order_acq_rel; 15726: } 15726: 15726: 15726: template 15726: struct __atomic_base; 15726: 15726: 15726: 15726: inline __attribute__((__always_inline__)) void 15726: atomic_thread_fence(memory_order __m) noexcept 15726: { __atomic_thread_fence(int(__m)); } 15726: 15726: inline __attribute__((__always_inline__)) void 15726: atomic_signal_fence(memory_order __m) noexcept 15726: { __atomic_signal_fence(int(__m)); } 15726: 15726: 15726: template 15726: inline _Tp 15726: kill_dependency(_Tp __y) noexcept 15726: { 15726: _Tp __ret(__y); 15726: return __ret; 15726: } 15726: # 173 "/usr/include/c++/13/bits/atomic_base.h" 3 15726: template 15726: struct atomic; 15726: 15726: template 15726: struct atomic<_Tp*>; 15726: 15726: 15726: 15726: typedef bool __atomic_flag_data_type; 15726: # 198 "/usr/include/c++/13/bits/atomic_base.h" 3 15726: extern "C" { 15726: 15726: struct __atomic_flag_base 15726: { 15726: __atomic_flag_data_type _M_i ; 15726: }; 15726: 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct atomic_flag : public __atomic_flag_base 15726: { 15726: atomic_flag() noexcept = default; 15726: ~atomic_flag() noexcept = default; 15726: atomic_flag(const atomic_flag&) = delete; 15726: atomic_flag& operator=(const atomic_flag&) = delete; 15726: atomic_flag& operator=(const atomic_flag&) volatile = delete; 15726: 15726: 15726: constexpr atomic_flag(bool __i) noexcept 15726: : __atomic_flag_base{ _S_init(__i) } 15726: { } 15726: 15726: inline __attribute__((__always_inline__)) bool 15726: test_and_set(memory_order __m = memory_order_seq_cst) noexcept 15726: { 15726: return __atomic_test_and_set (&_M_i, int(__m)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) bool 15726: test_and_set(memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { 15726: return __atomic_test_and_set (&_M_i, int(__m)); 15726: } 15726: # 284 "/usr/include/c++/13/bits/atomic_base.h" 3 15726: inline __attribute__((__always_inline__)) void 15726: clear(memory_order __m = memory_order_seq_cst) noexcept 15726: { 15726: memory_order __b __attribute__ ((__unused__)) 15726: = __m & __memory_order_mask; 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_consume)) __builtin_unreachable(); } while (false); 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acquire)) __builtin_unreachable(); } while (false); 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 15726: 15726: __atomic_clear (&_M_i, int(__m)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) void 15726: clear(memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { 15726: memory_order __b __attribute__ ((__unused__)) 15726: = __m & __memory_order_mask; 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_consume)) __builtin_unreachable(); } while (false); 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acquire)) __builtin_unreachable(); } while (false); 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 15726: 15726: __atomic_clear (&_M_i, int(__m)); 15726: } 15726: 15726: private: 15726: static constexpr __atomic_flag_data_type 15726: _S_init(bool __i) 15726: { return __i ? 1 : 0; } 15726: }; 15726: # 340 "/usr/include/c++/13/bits/atomic_base.h" 3 15726: template 15726: struct __atomic_base 15726: { 15726: using value_type = _ITp; 15726: using difference_type = value_type; 15726: 15726: private: 15726: typedef _ITp __int_type; 15726: 15726: static constexpr int _S_alignment = 15726: sizeof(_ITp) > alignof(_ITp) ? sizeof(_ITp) : alignof(_ITp); 15726: 15726: alignas(_S_alignment) __int_type _M_i ; 15726: 15726: public: 15726: __atomic_base() noexcept = default; 15726: ~__atomic_base() noexcept = default; 15726: __atomic_base(const __atomic_base&) = delete; 15726: __atomic_base& operator=(const __atomic_base&) = delete; 15726: __atomic_base& operator=(const __atomic_base&) volatile = delete; 15726: 15726: 15726: constexpr __atomic_base(__int_type __i) noexcept : _M_i (__i) { } 15726: 15726: operator __int_type() const noexcept 15726: { return load(); } 15726: 15726: operator __int_type() const volatile noexcept 15726: { return load(); } 15726: 15726: __int_type 15726: operator=(__int_type __i) noexcept 15726: { 15726: store(__i); 15726: return __i; 15726: } 15726: 15726: __int_type 15726: operator=(__int_type __i) volatile noexcept 15726: { 15726: store(__i); 15726: return __i; 15726: } 15726: 15726: __int_type 15726: operator++(int) noexcept 15726: { return fetch_add(1); } 15726: 15726: __int_type 15726: operator++(int) volatile noexcept 15726: { return fetch_add(1); } 15726: 15726: __int_type 15726: operator--(int) noexcept 15726: { return fetch_sub(1); } 15726: 15726: __int_type 15726: operator--(int) volatile noexcept 15726: { return fetch_sub(1); } 15726: 15726: __int_type 15726: operator++() noexcept 15726: { return __atomic_add_fetch(&_M_i, 1, int(memory_order_seq_cst)); } 15726: 15726: __int_type 15726: operator++() volatile noexcept 15726: { return __atomic_add_fetch(&_M_i, 1, int(memory_order_seq_cst)); } 15726: 15726: __int_type 15726: operator--() noexcept 15726: { return __atomic_sub_fetch(&_M_i, 1, int(memory_order_seq_cst)); } 15726: 15726: __int_type 15726: operator--() volatile noexcept 15726: { return __atomic_sub_fetch(&_M_i, 1, int(memory_order_seq_cst)); } 15726: 15726: __int_type 15726: operator+=(__int_type __i) noexcept 15726: { return __atomic_add_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 15726: 15726: __int_type 15726: operator+=(__int_type __i) volatile noexcept 15726: { return __atomic_add_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 15726: 15726: __int_type 15726: operator-=(__int_type __i) noexcept 15726: { return __atomic_sub_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 15726: 15726: __int_type 15726: operator-=(__int_type __i) volatile noexcept 15726: { return __atomic_sub_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 15726: 15726: __int_type 15726: operator&=(__int_type __i) noexcept 15726: { return __atomic_and_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 15726: 15726: __int_type 15726: operator&=(__int_type __i) volatile noexcept 15726: { return __atomic_and_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 15726: 15726: __int_type 15726: operator|=(__int_type __i) noexcept 15726: { return __atomic_or_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 15726: 15726: __int_type 15726: operator|=(__int_type __i) volatile noexcept 15726: { return __atomic_or_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 15726: 15726: __int_type 15726: operator^=(__int_type __i) noexcept 15726: { return __atomic_xor_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 15726: 15726: __int_type 15726: operator^=(__int_type __i) volatile noexcept 15726: { return __atomic_xor_fetch(&_M_i, __i, int(memory_order_seq_cst)); } 15726: 15726: bool 15726: is_lock_free() const noexcept 15726: { 15726: 15726: return __atomic_is_lock_free(sizeof(_M_i), 15726: reinterpret_cast(-_S_alignment)); 15726: } 15726: 15726: bool 15726: is_lock_free() const volatile noexcept 15726: { 15726: 15726: return __atomic_is_lock_free(sizeof(_M_i), 15726: reinterpret_cast(-_S_alignment)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) void 15726: store(__int_type __i, memory_order __m = memory_order_seq_cst) noexcept 15726: { 15726: memory_order __b __attribute__ ((__unused__)) 15726: = __m & __memory_order_mask; 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acquire)) __builtin_unreachable(); } while (false); 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_consume)) __builtin_unreachable(); } while (false); 15726: 15726: __atomic_store_n(&_M_i, __i, int(__m)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) void 15726: store(__int_type __i, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { 15726: memory_order __b __attribute__ ((__unused__)) 15726: = __m & __memory_order_mask; 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acquire)) __builtin_unreachable(); } while (false); 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_consume)) __builtin_unreachable(); } while (false); 15726: 15726: __atomic_store_n(&_M_i, __i, int(__m)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) __int_type 15726: load(memory_order __m = memory_order_seq_cst) const noexcept 15726: { 15726: memory_order __b __attribute__ ((__unused__)) 15726: = __m & __memory_order_mask; 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_release)) __builtin_unreachable(); } while (false); 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 15726: 15726: return __atomic_load_n(&_M_i, int(__m)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) __int_type 15726: load(memory_order __m = memory_order_seq_cst) const volatile noexcept 15726: { 15726: memory_order __b __attribute__ ((__unused__)) 15726: = __m & __memory_order_mask; 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_release)) __builtin_unreachable(); } while (false); 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 15726: 15726: return __atomic_load_n(&_M_i, int(__m)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) __int_type 15726: exchange(__int_type __i, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { 15726: return __atomic_exchange_n(&_M_i, __i, int(__m)); 15726: } 15726: 15726: 15726: inline __attribute__((__always_inline__)) __int_type 15726: exchange(__int_type __i, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { 15726: return __atomic_exchange_n(&_M_i, __i, int(__m)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) bool 15726: compare_exchange_weak(__int_type& __i1, __int_type __i2, 15726: memory_order __m1, memory_order __m2) noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false); 15726: 15726: return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, 15726: int(__m1), int(__m2)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) bool 15726: compare_exchange_weak(__int_type& __i1, __int_type __i2, 15726: memory_order __m1, 15726: memory_order __m2) volatile noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false); 15726: 15726: return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, 15726: int(__m1), int(__m2)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) bool 15726: compare_exchange_weak(__int_type& __i1, __int_type __i2, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { 15726: return compare_exchange_weak(__i1, __i2, __m, 15726: __cmpexch_failure_order(__m)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) bool 15726: compare_exchange_weak(__int_type& __i1, __int_type __i2, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { 15726: return compare_exchange_weak(__i1, __i2, __m, 15726: __cmpexch_failure_order(__m)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) bool 15726: compare_exchange_strong(__int_type& __i1, __int_type __i2, 15726: memory_order __m1, memory_order __m2) noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false); 15726: 15726: return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, 15726: int(__m1), int(__m2)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) bool 15726: compare_exchange_strong(__int_type& __i1, __int_type __i2, 15726: memory_order __m1, 15726: memory_order __m2) volatile noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false); 15726: 15726: return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, 15726: int(__m1), int(__m2)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) bool 15726: compare_exchange_strong(__int_type& __i1, __int_type __i2, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { 15726: return compare_exchange_strong(__i1, __i2, __m, 15726: __cmpexch_failure_order(__m)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) bool 15726: compare_exchange_strong(__int_type& __i1, __int_type __i2, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { 15726: return compare_exchange_strong(__i1, __i2, __m, 15726: __cmpexch_failure_order(__m)); 15726: } 15726: # 632 "/usr/include/c++/13/bits/atomic_base.h" 3 15726: inline __attribute__((__always_inline__)) __int_type 15726: fetch_add(__int_type __i, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { return __atomic_fetch_add(&_M_i, __i, int(__m)); } 15726: 15726: inline __attribute__((__always_inline__)) __int_type 15726: fetch_add(__int_type __i, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { return __atomic_fetch_add(&_M_i, __i, int(__m)); } 15726: 15726: inline __attribute__((__always_inline__)) __int_type 15726: fetch_sub(__int_type __i, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { return __atomic_fetch_sub(&_M_i, __i, int(__m)); } 15726: 15726: inline __attribute__((__always_inline__)) __int_type 15726: fetch_sub(__int_type __i, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { return __atomic_fetch_sub(&_M_i, __i, int(__m)); } 15726: 15726: inline __attribute__((__always_inline__)) __int_type 15726: fetch_and(__int_type __i, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { return __atomic_fetch_and(&_M_i, __i, int(__m)); } 15726: 15726: inline __attribute__((__always_inline__)) __int_type 15726: fetch_and(__int_type __i, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { return __atomic_fetch_and(&_M_i, __i, int(__m)); } 15726: 15726: inline __attribute__((__always_inline__)) __int_type 15726: fetch_or(__int_type __i, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { return __atomic_fetch_or(&_M_i, __i, int(__m)); } 15726: 15726: inline __attribute__((__always_inline__)) __int_type 15726: fetch_or(__int_type __i, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { return __atomic_fetch_or(&_M_i, __i, int(__m)); } 15726: 15726: inline __attribute__((__always_inline__)) __int_type 15726: fetch_xor(__int_type __i, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { return __atomic_fetch_xor(&_M_i, __i, int(__m)); } 15726: 15726: inline __attribute__((__always_inline__)) __int_type 15726: fetch_xor(__int_type __i, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { return __atomic_fetch_xor(&_M_i, __i, int(__m)); } 15726: }; 15726: 15726: 15726: 15726: template 15726: struct __atomic_base<_PTp*> 15726: { 15726: private: 15726: typedef _PTp* __pointer_type; 15726: 15726: __pointer_type _M_p ; 15726: 15726: 15726: constexpr ptrdiff_t 15726: _M_type_size(ptrdiff_t __d) const { return __d * sizeof(_PTp); } 15726: 15726: constexpr ptrdiff_t 15726: _M_type_size(ptrdiff_t __d) const volatile { return __d * sizeof(_PTp); } 15726: 15726: public: 15726: __atomic_base() noexcept = default; 15726: ~__atomic_base() noexcept = default; 15726: __atomic_base(const __atomic_base&) = delete; 15726: __atomic_base& operator=(const __atomic_base&) = delete; 15726: __atomic_base& operator=(const __atomic_base&) volatile = delete; 15726: 15726: 15726: constexpr __atomic_base(__pointer_type __p) noexcept : _M_p (__p) { } 15726: 15726: operator __pointer_type() const noexcept 15726: { return load(); } 15726: 15726: operator __pointer_type() const volatile noexcept 15726: { return load(); } 15726: 15726: __pointer_type 15726: operator=(__pointer_type __p) noexcept 15726: { 15726: store(__p); 15726: return __p; 15726: } 15726: 15726: __pointer_type 15726: operator=(__pointer_type __p) volatile noexcept 15726: { 15726: store(__p); 15726: return __p; 15726: } 15726: 15726: __pointer_type 15726: operator++(int) noexcept 15726: { return fetch_add(1); } 15726: 15726: __pointer_type 15726: operator++(int) volatile noexcept 15726: { return fetch_add(1); } 15726: 15726: __pointer_type 15726: operator--(int) noexcept 15726: { return fetch_sub(1); } 15726: 15726: __pointer_type 15726: operator--(int) volatile noexcept 15726: { return fetch_sub(1); } 15726: 15726: __pointer_type 15726: operator++() noexcept 15726: { return __atomic_add_fetch(&_M_p, _M_type_size(1), 15726: int(memory_order_seq_cst)); } 15726: 15726: __pointer_type 15726: operator++() volatile noexcept 15726: { return __atomic_add_fetch(&_M_p, _M_type_size(1), 15726: int(memory_order_seq_cst)); } 15726: 15726: __pointer_type 15726: operator--() noexcept 15726: { return __atomic_sub_fetch(&_M_p, _M_type_size(1), 15726: int(memory_order_seq_cst)); } 15726: 15726: __pointer_type 15726: operator--() volatile noexcept 15726: { return __atomic_sub_fetch(&_M_p, _M_type_size(1), 15726: int(memory_order_seq_cst)); } 15726: 15726: __pointer_type 15726: operator+=(ptrdiff_t __d) noexcept 15726: { return __atomic_add_fetch(&_M_p, _M_type_size(__d), 15726: int(memory_order_seq_cst)); } 15726: 15726: __pointer_type 15726: operator+=(ptrdiff_t __d) volatile noexcept 15726: { return __atomic_add_fetch(&_M_p, _M_type_size(__d), 15726: int(memory_order_seq_cst)); } 15726: 15726: __pointer_type 15726: operator-=(ptrdiff_t __d) noexcept 15726: { return __atomic_sub_fetch(&_M_p, _M_type_size(__d), 15726: int(memory_order_seq_cst)); } 15726: 15726: __pointer_type 15726: operator-=(ptrdiff_t __d) volatile noexcept 15726: { return __atomic_sub_fetch(&_M_p, _M_type_size(__d), 15726: int(memory_order_seq_cst)); } 15726: 15726: bool 15726: is_lock_free() const noexcept 15726: { 15726: 15726: return __atomic_is_lock_free(sizeof(_M_p), 15726: reinterpret_cast(-__alignof(_M_p))); 15726: } 15726: 15726: bool 15726: is_lock_free() const volatile noexcept 15726: { 15726: 15726: return __atomic_is_lock_free(sizeof(_M_p), 15726: reinterpret_cast(-__alignof(_M_p))); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) void 15726: store(__pointer_type __p, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { 15726: memory_order __b __attribute__ ((__unused__)) 15726: = __m & __memory_order_mask; 15726: 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acquire)) __builtin_unreachable(); } while (false); 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_consume)) __builtin_unreachable(); } while (false); 15726: 15726: __atomic_store_n(&_M_p, __p, int(__m)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) void 15726: store(__pointer_type __p, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { 15726: memory_order __b __attribute__ ((__unused__)) 15726: = __m & __memory_order_mask; 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acquire)) __builtin_unreachable(); } while (false); 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_consume)) __builtin_unreachable(); } while (false); 15726: 15726: __atomic_store_n(&_M_p, __p, int(__m)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) __pointer_type 15726: load(memory_order __m = memory_order_seq_cst) const noexcept 15726: { 15726: memory_order __b __attribute__ ((__unused__)) 15726: = __m & __memory_order_mask; 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_release)) __builtin_unreachable(); } while (false); 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 15726: 15726: return __atomic_load_n(&_M_p, int(__m)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) __pointer_type 15726: load(memory_order __m = memory_order_seq_cst) const volatile noexcept 15726: { 15726: memory_order __b __attribute__ ((__unused__)) 15726: = __m & __memory_order_mask; 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_release)) __builtin_unreachable(); } while (false); 15726: do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false); 15726: 15726: return __atomic_load_n(&_M_p, int(__m)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) __pointer_type 15726: exchange(__pointer_type __p, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { 15726: return __atomic_exchange_n(&_M_p, __p, int(__m)); 15726: } 15726: 15726: 15726: inline __attribute__((__always_inline__)) __pointer_type 15726: exchange(__pointer_type __p, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { 15726: return __atomic_exchange_n(&_M_p, __p, int(__m)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) bool 15726: compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2, 15726: memory_order __m1, 15726: memory_order __m2) noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false); 15726: 15726: return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 1, 15726: int(__m1), int(__m2)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) bool 15726: compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2, 15726: memory_order __m1, 15726: memory_order __m2) volatile noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false); 15726: 15726: return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 1, 15726: int(__m1), int(__m2)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) bool 15726: compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, 15726: memory_order __m1, 15726: memory_order __m2) noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false); 15726: 15726: return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, 15726: int(__m1), int(__m2)); 15726: } 15726: 15726: inline __attribute__((__always_inline__)) bool 15726: compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, 15726: memory_order __m1, 15726: memory_order __m2) volatile noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false); 15726: 15726: return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, 15726: int(__m1), int(__m2)); 15726: } 15726: # 935 "/usr/include/c++/13/bits/atomic_base.h" 3 15726: inline __attribute__((__always_inline__)) __pointer_type 15726: fetch_add(ptrdiff_t __d, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { return __atomic_fetch_add(&_M_p, _M_type_size(__d), int(__m)); } 15726: 15726: inline __attribute__((__always_inline__)) __pointer_type 15726: fetch_add(ptrdiff_t __d, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { return __atomic_fetch_add(&_M_p, _M_type_size(__d), int(__m)); } 15726: 15726: inline __attribute__((__always_inline__)) __pointer_type 15726: fetch_sub(ptrdiff_t __d, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), int(__m)); } 15726: 15726: inline __attribute__((__always_inline__)) __pointer_type 15726: fetch_sub(ptrdiff_t __d, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), int(__m)); } 15726: }; 15726: 15726: namespace __atomic_impl 15726: { 15726: 15726: 15726: template 15726: constexpr bool 15726: __maybe_has_padding() 15726: { 15726: 15726: 15726: 15726: return !__has_unique_object_representations(_Tp) 15726: && !is_same<_Tp, float>::value && !is_same<_Tp, double>::value; 15726: 15726: 15726: 15726: } 15726: 15726: template 15726: inline __attribute__((__always_inline__)) _Tp* 15726: __clear_padding(_Tp& __val) noexcept 15726: { 15726: auto* __ptr = std::__addressof(__val); 15726: 15726: if constexpr (__atomic_impl::__maybe_has_padding<_Tp>()) 15726: __builtin_clear_padding(__ptr); 15726: 15726: return __ptr; 15726: } 15726: 15726: 15726: template 15726: using _Val = typename remove_volatile<_Tp>::type; 15726: 15726: template 15726: inline __attribute__((__always_inline__)) bool 15726: __compare_exchange(_Tp& __val, _Val<_Tp>& __e, _Val<_Tp>& __i, 15726: bool __is_weak, 15726: memory_order __s, memory_order __f) noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__f))) __builtin_unreachable(); } while (false); 15726: 15726: using _Vp = _Val<_Tp>; 15726: 15726: if constexpr (__atomic_impl::__maybe_has_padding<_Vp>()) 15726: { 15726: 15726: 15726: alignas(_Vp) unsigned char __buf[sizeof(_Vp)]; 15726: _Vp* __exp = ::new((void*)__buf) _Vp(__e); 15726: __atomic_impl::__clear_padding(*__exp); 15726: if (__atomic_compare_exchange(std::__addressof(__val), __exp, 15726: __atomic_impl::__clear_padding(__i), 15726: __is_weak, int(__s), int(__f))) 15726: return true; 15726: __builtin_memcpy(std::__addressof(__e), __exp, sizeof(_Vp)); 15726: return false; 15726: } 15726: else 15726: return __atomic_compare_exchange(std::__addressof(__val), 15726: std::__addressof(__e), 15726: std::__addressof(__i), 15726: __is_weak, int(__s), int(__f)); 15726: } 15726: } 15726: # 2020 "/usr/include/c++/13/bits/atomic_base.h" 3 15726: 15726: } 15726: # 42 "/usr/include/c++/13/atomic" 2 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 56 "/usr/include/c++/13/atomic" 3 15726: template 15726: struct atomic; 15726: 15726: 15726: 15726: template<> 15726: struct atomic 15726: { 15726: using value_type = bool; 15726: 15726: private: 15726: __atomic_base _M_base; 15726: 15726: public: 15726: atomic() noexcept = default; 15726: ~atomic() noexcept = default; 15726: atomic(const atomic&) = delete; 15726: atomic& operator=(const atomic&) = delete; 15726: atomic& operator=(const atomic&) volatile = delete; 15726: 15726: constexpr atomic(bool __i) noexcept : _M_base(__i) { } 15726: 15726: bool 15726: operator=(bool __i) noexcept 15726: { return _M_base.operator=(__i); } 15726: 15726: bool 15726: operator=(bool __i) volatile noexcept 15726: { return _M_base.operator=(__i); } 15726: 15726: operator bool() const noexcept 15726: { return _M_base.load(); } 15726: 15726: operator bool() const volatile noexcept 15726: { return _M_base.load(); } 15726: 15726: bool 15726: is_lock_free() const noexcept { return _M_base.is_lock_free(); } 15726: 15726: bool 15726: is_lock_free() const volatile noexcept { return _M_base.is_lock_free(); } 15726: 15726: 15726: static constexpr bool is_always_lock_free = 2 == 2; 15726: 15726: 15726: void 15726: store(bool __i, memory_order __m = memory_order_seq_cst) noexcept 15726: { _M_base.store(__i, __m); } 15726: 15726: void 15726: store(bool __i, memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { _M_base.store(__i, __m); } 15726: 15726: bool 15726: load(memory_order __m = memory_order_seq_cst) const noexcept 15726: { return _M_base.load(__m); } 15726: 15726: bool 15726: load(memory_order __m = memory_order_seq_cst) const volatile noexcept 15726: { return _M_base.load(__m); } 15726: 15726: bool 15726: exchange(bool __i, memory_order __m = memory_order_seq_cst) noexcept 15726: { return _M_base.exchange(__i, __m); } 15726: 15726: bool 15726: exchange(bool __i, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { return _M_base.exchange(__i, __m); } 15726: 15726: bool 15726: compare_exchange_weak(bool& __i1, bool __i2, memory_order __m1, 15726: memory_order __m2) noexcept 15726: { return _M_base.compare_exchange_weak(__i1, __i2, __m1, __m2); } 15726: 15726: bool 15726: compare_exchange_weak(bool& __i1, bool __i2, memory_order __m1, 15726: memory_order __m2) volatile noexcept 15726: { return _M_base.compare_exchange_weak(__i1, __i2, __m1, __m2); } 15726: 15726: bool 15726: compare_exchange_weak(bool& __i1, bool __i2, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { return _M_base.compare_exchange_weak(__i1, __i2, __m); } 15726: 15726: bool 15726: compare_exchange_weak(bool& __i1, bool __i2, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { return _M_base.compare_exchange_weak(__i1, __i2, __m); } 15726: 15726: bool 15726: compare_exchange_strong(bool& __i1, bool __i2, memory_order __m1, 15726: memory_order __m2) noexcept 15726: { return _M_base.compare_exchange_strong(__i1, __i2, __m1, __m2); } 15726: 15726: bool 15726: compare_exchange_strong(bool& __i1, bool __i2, memory_order __m1, 15726: memory_order __m2) volatile noexcept 15726: { return _M_base.compare_exchange_strong(__i1, __i2, __m1, __m2); } 15726: 15726: bool 15726: compare_exchange_strong(bool& __i1, bool __i2, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { return _M_base.compare_exchange_strong(__i1, __i2, __m); } 15726: 15726: bool 15726: compare_exchange_strong(bool& __i1, bool __i2, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { return _M_base.compare_exchange_strong(__i1, __i2, __m); } 15726: # 182 "/usr/include/c++/13/atomic" 3 15726: }; 15726: # 197 "/usr/include/c++/13/atomic" 3 15726: template 15726: struct atomic 15726: { 15726: using value_type = _Tp; 15726: 15726: private: 15726: 15726: static constexpr int _S_min_alignment 15726: = (sizeof(_Tp) & (sizeof(_Tp) - 1)) || sizeof(_Tp) > 16 15726: ? 0 : sizeof(_Tp); 15726: 15726: static constexpr int _S_alignment 15726: = _S_min_alignment > alignof(_Tp) ? _S_min_alignment : alignof(_Tp); 15726: 15726: alignas(_S_alignment) _Tp _M_i ; 15726: 15726: static_assert(__is_trivially_copyable(_Tp), 15726: "std::atomic requires a trivially copyable type"); 15726: 15726: static_assert(sizeof(_Tp) > 0, 15726: "Incomplete or zero-sized types are not supported"); 15726: # 226 "/usr/include/c++/13/atomic" 3 15726: public: 15726: atomic() = default; 15726: ~atomic() noexcept = default; 15726: atomic(const atomic&) = delete; 15726: atomic& operator=(const atomic&) = delete; 15726: atomic& operator=(const atomic&) volatile = delete; 15726: 15726: constexpr atomic(_Tp __i) noexcept : _M_i(__i) 15726: { 15726: 15726: if constexpr (__atomic_impl::__maybe_has_padding<_Tp>()) 15726: __builtin_clear_padding(std::__addressof(_M_i)); 15726: 15726: } 15726: 15726: operator _Tp() const noexcept 15726: { return load(); } 15726: 15726: operator _Tp() const volatile noexcept 15726: { return load(); } 15726: 15726: _Tp 15726: operator=(_Tp __i) noexcept 15726: { store(__i); return __i; } 15726: 15726: _Tp 15726: operator=(_Tp __i) volatile noexcept 15726: { store(__i); return __i; } 15726: 15726: bool 15726: is_lock_free() const noexcept 15726: { 15726: 15726: return __atomic_is_lock_free(sizeof(_M_i), 15726: reinterpret_cast(-_S_alignment)); 15726: } 15726: 15726: bool 15726: is_lock_free() const volatile noexcept 15726: { 15726: 15726: return __atomic_is_lock_free(sizeof(_M_i), 15726: reinterpret_cast(-_S_alignment)); 15726: } 15726: 15726: 15726: static constexpr bool is_always_lock_free 15726: = __atomic_always_lock_free(sizeof(_M_i), 0); 15726: 15726: 15726: void 15726: store(_Tp __i, memory_order __m = memory_order_seq_cst) noexcept 15726: { 15726: __atomic_store(std::__addressof(_M_i), 15726: __atomic_impl::__clear_padding(__i), 15726: int(__m)); 15726: } 15726: 15726: void 15726: store(_Tp __i, memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { 15726: __atomic_store(std::__addressof(_M_i), 15726: __atomic_impl::__clear_padding(__i), 15726: int(__m)); 15726: } 15726: 15726: _Tp 15726: load(memory_order __m = memory_order_seq_cst) const noexcept 15726: { 15726: alignas(_Tp) unsigned char __buf[sizeof(_Tp)]; 15726: _Tp* __ptr = reinterpret_cast<_Tp*>(__buf); 15726: __atomic_load(std::__addressof(_M_i), __ptr, int(__m)); 15726: return *__ptr; 15726: } 15726: 15726: _Tp 15726: load(memory_order __m = memory_order_seq_cst) const volatile noexcept 15726: { 15726: alignas(_Tp) unsigned char __buf[sizeof(_Tp)]; 15726: _Tp* __ptr = reinterpret_cast<_Tp*>(__buf); 15726: __atomic_load(std::__addressof(_M_i), __ptr, int(__m)); 15726: return *__ptr; 15726: } 15726: 15726: _Tp 15726: exchange(_Tp __i, memory_order __m = memory_order_seq_cst) noexcept 15726: { 15726: alignas(_Tp) unsigned char __buf[sizeof(_Tp)]; 15726: _Tp* __ptr = reinterpret_cast<_Tp*>(__buf); 15726: __atomic_exchange(std::__addressof(_M_i), 15726: __atomic_impl::__clear_padding(__i), 15726: __ptr, int(__m)); 15726: return *__ptr; 15726: } 15726: 15726: _Tp 15726: exchange(_Tp __i, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { 15726: alignas(_Tp) unsigned char __buf[sizeof(_Tp)]; 15726: _Tp* __ptr = reinterpret_cast<_Tp*>(__buf); 15726: __atomic_exchange(std::__addressof(_M_i), 15726: __atomic_impl::__clear_padding(__i), 15726: __ptr, int(__m)); 15726: return *__ptr; 15726: } 15726: 15726: bool 15726: compare_exchange_weak(_Tp& __e, _Tp __i, memory_order __s, 15726: memory_order __f) noexcept 15726: { 15726: return __atomic_impl::__compare_exchange(_M_i, __e, __i, true, 15726: __s, __f); 15726: } 15726: 15726: bool 15726: compare_exchange_weak(_Tp& __e, _Tp __i, memory_order __s, 15726: memory_order __f) volatile noexcept 15726: { 15726: return __atomic_impl::__compare_exchange(_M_i, __e, __i, true, 15726: __s, __f); 15726: } 15726: 15726: bool 15726: compare_exchange_weak(_Tp& __e, _Tp __i, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { return compare_exchange_weak(__e, __i, __m, 15726: __cmpexch_failure_order(__m)); } 15726: 15726: bool 15726: compare_exchange_weak(_Tp& __e, _Tp __i, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { return compare_exchange_weak(__e, __i, __m, 15726: __cmpexch_failure_order(__m)); } 15726: 15726: bool 15726: compare_exchange_strong(_Tp& __e, _Tp __i, memory_order __s, 15726: memory_order __f) noexcept 15726: { 15726: return __atomic_impl::__compare_exchange(_M_i, __e, __i, false, 15726: __s, __f); 15726: } 15726: 15726: bool 15726: compare_exchange_strong(_Tp& __e, _Tp __i, memory_order __s, 15726: memory_order __f) volatile noexcept 15726: { 15726: return __atomic_impl::__compare_exchange(_M_i, __e, __i, false, 15726: __s, __f); 15726: } 15726: 15726: bool 15726: compare_exchange_strong(_Tp& __e, _Tp __i, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { return compare_exchange_strong(__e, __i, __m, 15726: __cmpexch_failure_order(__m)); } 15726: 15726: bool 15726: compare_exchange_strong(_Tp& __e, _Tp __i, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { return compare_exchange_strong(__e, __i, __m, 15726: __cmpexch_failure_order(__m)); } 15726: # 408 "/usr/include/c++/13/atomic" 3 15726: }; 15726: 15726: 15726: 15726: template 15726: struct atomic<_Tp*> 15726: { 15726: using value_type = _Tp*; 15726: using difference_type = ptrdiff_t; 15726: 15726: typedef _Tp* __pointer_type; 15726: typedef __atomic_base<_Tp*> __base_type; 15726: __base_type _M_b; 15726: 15726: atomic() noexcept = default; 15726: ~atomic() noexcept = default; 15726: atomic(const atomic&) = delete; 15726: atomic& operator=(const atomic&) = delete; 15726: atomic& operator=(const atomic&) volatile = delete; 15726: 15726: constexpr atomic(__pointer_type __p) noexcept : _M_b(__p) { } 15726: 15726: operator __pointer_type() const noexcept 15726: { return __pointer_type(_M_b); } 15726: 15726: operator __pointer_type() const volatile noexcept 15726: { return __pointer_type(_M_b); } 15726: 15726: __pointer_type 15726: operator=(__pointer_type __p) noexcept 15726: { return _M_b.operator=(__p); } 15726: 15726: __pointer_type 15726: operator=(__pointer_type __p) volatile noexcept 15726: { return _M_b.operator=(__p); } 15726: 15726: __pointer_type 15726: operator++(int) noexcept 15726: { 15726: 15726: static_assert( is_object<_Tp>::value, "pointer to object type" ); 15726: 15726: return _M_b++; 15726: } 15726: 15726: __pointer_type 15726: operator++(int) volatile noexcept 15726: { 15726: 15726: static_assert( is_object<_Tp>::value, "pointer to object type" ); 15726: 15726: return _M_b++; 15726: } 15726: 15726: __pointer_type 15726: operator--(int) noexcept 15726: { 15726: 15726: static_assert( is_object<_Tp>::value, "pointer to object type" ); 15726: 15726: return _M_b--; 15726: } 15726: 15726: __pointer_type 15726: operator--(int) volatile noexcept 15726: { 15726: 15726: static_assert( is_object<_Tp>::value, "pointer to object type" ); 15726: 15726: return _M_b--; 15726: } 15726: 15726: __pointer_type 15726: operator++() noexcept 15726: { 15726: 15726: static_assert( is_object<_Tp>::value, "pointer to object type" ); 15726: 15726: return ++_M_b; 15726: } 15726: 15726: __pointer_type 15726: operator++() volatile noexcept 15726: { 15726: 15726: static_assert( is_object<_Tp>::value, "pointer to object type" ); 15726: 15726: return ++_M_b; 15726: } 15726: 15726: __pointer_type 15726: operator--() noexcept 15726: { 15726: 15726: static_assert( is_object<_Tp>::value, "pointer to object type" ); 15726: 15726: return --_M_b; 15726: } 15726: 15726: __pointer_type 15726: operator--() volatile noexcept 15726: { 15726: 15726: static_assert( is_object<_Tp>::value, "pointer to object type" ); 15726: 15726: return --_M_b; 15726: } 15726: 15726: __pointer_type 15726: operator+=(ptrdiff_t __d) noexcept 15726: { 15726: 15726: static_assert( is_object<_Tp>::value, "pointer to object type" ); 15726: 15726: return _M_b.operator+=(__d); 15726: } 15726: 15726: __pointer_type 15726: operator+=(ptrdiff_t __d) volatile noexcept 15726: { 15726: 15726: static_assert( is_object<_Tp>::value, "pointer to object type" ); 15726: 15726: return _M_b.operator+=(__d); 15726: } 15726: 15726: __pointer_type 15726: operator-=(ptrdiff_t __d) noexcept 15726: { 15726: 15726: static_assert( is_object<_Tp>::value, "pointer to object type" ); 15726: 15726: return _M_b.operator-=(__d); 15726: } 15726: 15726: __pointer_type 15726: operator-=(ptrdiff_t __d) volatile noexcept 15726: { 15726: 15726: static_assert( is_object<_Tp>::value, "pointer to object type" ); 15726: 15726: return _M_b.operator-=(__d); 15726: } 15726: 15726: bool 15726: is_lock_free() const noexcept 15726: { return _M_b.is_lock_free(); } 15726: 15726: bool 15726: is_lock_free() const volatile noexcept 15726: { return _M_b.is_lock_free(); } 15726: 15726: 15726: static constexpr bool is_always_lock_free 15726: = 2 == 2; 15726: 15726: 15726: void 15726: store(__pointer_type __p, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { return _M_b.store(__p, __m); } 15726: 15726: void 15726: store(__pointer_type __p, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { return _M_b.store(__p, __m); } 15726: 15726: __pointer_type 15726: load(memory_order __m = memory_order_seq_cst) const noexcept 15726: { return _M_b.load(__m); } 15726: 15726: __pointer_type 15726: load(memory_order __m = memory_order_seq_cst) const volatile noexcept 15726: { return _M_b.load(__m); } 15726: 15726: __pointer_type 15726: exchange(__pointer_type __p, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { return _M_b.exchange(__p, __m); } 15726: 15726: __pointer_type 15726: exchange(__pointer_type __p, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { return _M_b.exchange(__p, __m); } 15726: 15726: bool 15726: compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2, 15726: memory_order __m1, memory_order __m2) noexcept 15726: { return _M_b.compare_exchange_weak(__p1, __p2, __m1, __m2); } 15726: 15726: bool 15726: compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2, 15726: memory_order __m1, 15726: memory_order __m2) volatile noexcept 15726: { return _M_b.compare_exchange_weak(__p1, __p2, __m1, __m2); } 15726: 15726: bool 15726: compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { 15726: return compare_exchange_weak(__p1, __p2, __m, 15726: __cmpexch_failure_order(__m)); 15726: } 15726: 15726: bool 15726: compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { 15726: return compare_exchange_weak(__p1, __p2, __m, 15726: __cmpexch_failure_order(__m)); 15726: } 15726: 15726: bool 15726: compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, 15726: memory_order __m1, memory_order __m2) noexcept 15726: { return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); } 15726: 15726: bool 15726: compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, 15726: memory_order __m1, 15726: memory_order __m2) volatile noexcept 15726: { return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); } 15726: 15726: bool 15726: compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { 15726: return _M_b.compare_exchange_strong(__p1, __p2, __m, 15726: __cmpexch_failure_order(__m)); 15726: } 15726: 15726: bool 15726: compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { 15726: return _M_b.compare_exchange_strong(__p1, __p2, __m, 15726: __cmpexch_failure_order(__m)); 15726: } 15726: # 663 "/usr/include/c++/13/atomic" 3 15726: __pointer_type 15726: fetch_add(ptrdiff_t __d, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { 15726: 15726: static_assert( is_object<_Tp>::value, "pointer to object type" ); 15726: 15726: return _M_b.fetch_add(__d, __m); 15726: } 15726: 15726: __pointer_type 15726: fetch_add(ptrdiff_t __d, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { 15726: 15726: static_assert( is_object<_Tp>::value, "pointer to object type" ); 15726: 15726: return _M_b.fetch_add(__d, __m); 15726: } 15726: 15726: __pointer_type 15726: fetch_sub(ptrdiff_t __d, 15726: memory_order __m = memory_order_seq_cst) noexcept 15726: { 15726: 15726: static_assert( is_object<_Tp>::value, "pointer to object type" ); 15726: 15726: return _M_b.fetch_sub(__d, __m); 15726: } 15726: 15726: __pointer_type 15726: fetch_sub(ptrdiff_t __d, 15726: memory_order __m = memory_order_seq_cst) volatile noexcept 15726: { 15726: 15726: static_assert( is_object<_Tp>::value, "pointer to object type" ); 15726: 15726: return _M_b.fetch_sub(__d, __m); 15726: } 15726: }; 15726: 15726: 15726: 15726: template<> 15726: struct atomic : __atomic_base 15726: { 15726: typedef char __integral_type; 15726: typedef __atomic_base __base_type; 15726: 15726: atomic() noexcept = default; 15726: ~atomic() noexcept = default; 15726: atomic(const atomic&) = delete; 15726: atomic& operator=(const atomic&) = delete; 15726: atomic& operator=(const atomic&) volatile = delete; 15726: 15726: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 15726: 15726: using __base_type::operator __integral_type; 15726: using __base_type::operator=; 15726: 15726: 15726: static constexpr bool is_always_lock_free = 2 == 2; 15726: 15726: }; 15726: 15726: 15726: template<> 15726: struct atomic : __atomic_base 15726: { 15726: typedef signed char __integral_type; 15726: typedef __atomic_base __base_type; 15726: 15726: atomic() noexcept= default; 15726: ~atomic() noexcept = default; 15726: atomic(const atomic&) = delete; 15726: atomic& operator=(const atomic&) = delete; 15726: atomic& operator=(const atomic&) volatile = delete; 15726: 15726: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 15726: 15726: using __base_type::operator __integral_type; 15726: using __base_type::operator=; 15726: 15726: 15726: static constexpr bool is_always_lock_free = 2 == 2; 15726: 15726: }; 15726: 15726: 15726: template<> 15726: struct atomic : __atomic_base 15726: { 15726: typedef unsigned char __integral_type; 15726: typedef __atomic_base __base_type; 15726: 15726: atomic() noexcept= default; 15726: ~atomic() noexcept = default; 15726: atomic(const atomic&) = delete; 15726: atomic& operator=(const atomic&) = delete; 15726: atomic& operator=(const atomic&) volatile = delete; 15726: 15726: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 15726: 15726: using __base_type::operator __integral_type; 15726: using __base_type::operator=; 15726: 15726: 15726: static constexpr bool is_always_lock_free = 2 == 2; 15726: 15726: }; 15726: 15726: 15726: template<> 15726: struct atomic : __atomic_base 15726: { 15726: typedef short __integral_type; 15726: typedef __atomic_base __base_type; 15726: 15726: atomic() noexcept = default; 15726: ~atomic() noexcept = default; 15726: atomic(const atomic&) = delete; 15726: atomic& operator=(const atomic&) = delete; 15726: atomic& operator=(const atomic&) volatile = delete; 15726: 15726: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 15726: 15726: using __base_type::operator __integral_type; 15726: using __base_type::operator=; 15726: 15726: 15726: static constexpr bool is_always_lock_free = 2 == 2; 15726: 15726: }; 15726: 15726: 15726: template<> 15726: struct atomic : __atomic_base 15726: { 15726: typedef unsigned short __integral_type; 15726: typedef __atomic_base __base_type; 15726: 15726: atomic() noexcept = default; 15726: ~atomic() noexcept = default; 15726: atomic(const atomic&) = delete; 15726: atomic& operator=(const atomic&) = delete; 15726: atomic& operator=(const atomic&) volatile = delete; 15726: 15726: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 15726: 15726: using __base_type::operator __integral_type; 15726: using __base_type::operator=; 15726: 15726: 15726: static constexpr bool is_always_lock_free = 2 == 2; 15726: 15726: }; 15726: 15726: 15726: template<> 15726: struct atomic : __atomic_base 15726: { 15726: typedef int __integral_type; 15726: typedef __atomic_base __base_type; 15726: 15726: atomic() noexcept = default; 15726: ~atomic() noexcept = default; 15726: atomic(const atomic&) = delete; 15726: atomic& operator=(const atomic&) = delete; 15726: atomic& operator=(const atomic&) volatile = delete; 15726: 15726: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 15726: 15726: using __base_type::operator __integral_type; 15726: using __base_type::operator=; 15726: 15726: 15726: static constexpr bool is_always_lock_free = 2 == 2; 15726: 15726: }; 15726: 15726: 15726: template<> 15726: struct atomic : __atomic_base 15726: { 15726: typedef unsigned int __integral_type; 15726: typedef __atomic_base __base_type; 15726: 15726: atomic() noexcept = default; 15726: ~atomic() noexcept = default; 15726: atomic(const atomic&) = delete; 15726: atomic& operator=(const atomic&) = delete; 15726: atomic& operator=(const atomic&) volatile = delete; 15726: 15726: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 15726: 15726: using __base_type::operator __integral_type; 15726: using __base_type::operator=; 15726: 15726: 15726: static constexpr bool is_always_lock_free = 2 == 2; 15726: 15726: }; 15726: 15726: 15726: template<> 15726: struct atomic : __atomic_base 15726: { 15726: typedef long __integral_type; 15726: typedef __atomic_base __base_type; 15726: 15726: atomic() noexcept = default; 15726: ~atomic() noexcept = default; 15726: atomic(const atomic&) = delete; 15726: atomic& operator=(const atomic&) = delete; 15726: atomic& operator=(const atomic&) volatile = delete; 15726: 15726: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 15726: 15726: using __base_type::operator __integral_type; 15726: using __base_type::operator=; 15726: 15726: 15726: static constexpr bool is_always_lock_free = 2 == 2; 15726: 15726: }; 15726: 15726: 15726: template<> 15726: struct atomic : __atomic_base 15726: { 15726: typedef unsigned long __integral_type; 15726: typedef __atomic_base __base_type; 15726: 15726: atomic() noexcept = default; 15726: ~atomic() noexcept = default; 15726: atomic(const atomic&) = delete; 15726: atomic& operator=(const atomic&) = delete; 15726: atomic& operator=(const atomic&) volatile = delete; 15726: 15726: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 15726: 15726: using __base_type::operator __integral_type; 15726: using __base_type::operator=; 15726: 15726: 15726: static constexpr bool is_always_lock_free = 2 == 2; 15726: 15726: }; 15726: 15726: 15726: template<> 15726: struct atomic : __atomic_base 15726: { 15726: typedef long long __integral_type; 15726: typedef __atomic_base __base_type; 15726: 15726: atomic() noexcept = default; 15726: ~atomic() noexcept = default; 15726: atomic(const atomic&) = delete; 15726: atomic& operator=(const atomic&) = delete; 15726: atomic& operator=(const atomic&) volatile = delete; 15726: 15726: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 15726: 15726: using __base_type::operator __integral_type; 15726: using __base_type::operator=; 15726: 15726: 15726: static constexpr bool is_always_lock_free = 2 == 2; 15726: 15726: }; 15726: 15726: 15726: template<> 15726: struct atomic : __atomic_base 15726: { 15726: typedef unsigned long long __integral_type; 15726: typedef __atomic_base __base_type; 15726: 15726: atomic() noexcept = default; 15726: ~atomic() noexcept = default; 15726: atomic(const atomic&) = delete; 15726: atomic& operator=(const atomic&) = delete; 15726: atomic& operator=(const atomic&) volatile = delete; 15726: 15726: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 15726: 15726: using __base_type::operator __integral_type; 15726: using __base_type::operator=; 15726: 15726: 15726: static constexpr bool is_always_lock_free = 2 == 2; 15726: 15726: }; 15726: 15726: 15726: template<> 15726: struct atomic : __atomic_base 15726: { 15726: typedef wchar_t __integral_type; 15726: typedef __atomic_base __base_type; 15726: 15726: atomic() noexcept = default; 15726: ~atomic() noexcept = default; 15726: atomic(const atomic&) = delete; 15726: atomic& operator=(const atomic&) = delete; 15726: atomic& operator=(const atomic&) volatile = delete; 15726: 15726: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 15726: 15726: using __base_type::operator __integral_type; 15726: using __base_type::operator=; 15726: 15726: 15726: static constexpr bool is_always_lock_free = 2 == 2; 15726: 15726: }; 15726: # 1008 "/usr/include/c++/13/atomic" 3 15726: template<> 15726: struct atomic : __atomic_base 15726: { 15726: typedef char16_t __integral_type; 15726: typedef __atomic_base __base_type; 15726: 15726: atomic() noexcept = default; 15726: ~atomic() noexcept = default; 15726: atomic(const atomic&) = delete; 15726: atomic& operator=(const atomic&) = delete; 15726: atomic& operator=(const atomic&) volatile = delete; 15726: 15726: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 15726: 15726: using __base_type::operator __integral_type; 15726: using __base_type::operator=; 15726: 15726: 15726: static constexpr bool is_always_lock_free 15726: = 2 == 2; 15726: 15726: }; 15726: 15726: 15726: template<> 15726: struct atomic : __atomic_base 15726: { 15726: typedef char32_t __integral_type; 15726: typedef __atomic_base __base_type; 15726: 15726: atomic() noexcept = default; 15726: ~atomic() noexcept = default; 15726: atomic(const atomic&) = delete; 15726: atomic& operator=(const atomic&) = delete; 15726: atomic& operator=(const atomic&) volatile = delete; 15726: 15726: constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } 15726: 15726: using __base_type::operator __integral_type; 15726: using __base_type::operator=; 15726: 15726: 15726: static constexpr bool is_always_lock_free 15726: = 2 == 2; 15726: 15726: }; 15726: 15726: 15726: 15726: typedef atomic atomic_bool; 15726: 15726: 15726: typedef atomic atomic_char; 15726: 15726: 15726: typedef atomic atomic_schar; 15726: 15726: 15726: typedef atomic atomic_uchar; 15726: 15726: 15726: typedef atomic atomic_short; 15726: 15726: 15726: typedef atomic atomic_ushort; 15726: 15726: 15726: typedef atomic atomic_int; 15726: 15726: 15726: typedef atomic atomic_uint; 15726: 15726: 15726: typedef atomic atomic_long; 15726: 15726: 15726: typedef atomic atomic_ulong; 15726: 15726: 15726: typedef atomic atomic_llong; 15726: 15726: 15726: typedef atomic atomic_ullong; 15726: 15726: 15726: typedef atomic atomic_wchar_t; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef atomic atomic_char16_t; 15726: 15726: 15726: typedef atomic atomic_char32_t; 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef atomic atomic_int8_t; 15726: 15726: 15726: typedef atomic atomic_uint8_t; 15726: 15726: 15726: typedef atomic atomic_int16_t; 15726: 15726: 15726: typedef atomic atomic_uint16_t; 15726: 15726: 15726: typedef atomic atomic_int32_t; 15726: 15726: 15726: typedef atomic atomic_uint32_t; 15726: 15726: 15726: typedef atomic atomic_int64_t; 15726: 15726: 15726: typedef atomic atomic_uint64_t; 15726: 15726: 15726: 15726: typedef atomic atomic_int_least8_t; 15726: 15726: 15726: typedef atomic atomic_uint_least8_t; 15726: 15726: 15726: typedef atomic atomic_int_least16_t; 15726: 15726: 15726: typedef atomic atomic_uint_least16_t; 15726: 15726: 15726: typedef atomic atomic_int_least32_t; 15726: 15726: 15726: typedef atomic atomic_uint_least32_t; 15726: 15726: 15726: typedef atomic atomic_int_least64_t; 15726: 15726: 15726: typedef atomic atomic_uint_least64_t; 15726: 15726: 15726: 15726: typedef atomic atomic_int_fast8_t; 15726: 15726: 15726: typedef atomic atomic_uint_fast8_t; 15726: 15726: 15726: typedef atomic atomic_int_fast16_t; 15726: 15726: 15726: typedef atomic atomic_uint_fast16_t; 15726: 15726: 15726: typedef atomic atomic_int_fast32_t; 15726: 15726: 15726: typedef atomic atomic_uint_fast32_t; 15726: 15726: 15726: typedef atomic atomic_int_fast64_t; 15726: 15726: 15726: typedef atomic atomic_uint_fast64_t; 15726: 15726: 15726: 15726: 15726: typedef atomic atomic_intptr_t; 15726: 15726: 15726: typedef atomic atomic_uintptr_t; 15726: 15726: 15726: typedef atomic atomic_size_t; 15726: 15726: 15726: typedef atomic atomic_ptrdiff_t; 15726: 15726: 15726: 15726: typedef atomic atomic_intmax_t; 15726: 15726: 15726: typedef atomic atomic_uintmax_t; 15726: 15726: 15726: 15726: inline bool 15726: atomic_flag_test_and_set_explicit(atomic_flag* __a, 15726: memory_order __m) noexcept 15726: { return __a->test_and_set(__m); } 15726: 15726: inline bool 15726: atomic_flag_test_and_set_explicit(volatile atomic_flag* __a, 15726: memory_order __m) noexcept 15726: { return __a->test_and_set(__m); } 15726: # 1237 "/usr/include/c++/13/atomic" 3 15726: inline void 15726: atomic_flag_clear_explicit(atomic_flag* __a, memory_order __m) noexcept 15726: { __a->clear(__m); } 15726: 15726: inline void 15726: atomic_flag_clear_explicit(volatile atomic_flag* __a, 15726: memory_order __m) noexcept 15726: { __a->clear(__m); } 15726: 15726: inline bool 15726: atomic_flag_test_and_set(atomic_flag* __a) noexcept 15726: { return atomic_flag_test_and_set_explicit(__a, memory_order_seq_cst); } 15726: 15726: inline bool 15726: atomic_flag_test_and_set(volatile atomic_flag* __a) noexcept 15726: { return atomic_flag_test_and_set_explicit(__a, memory_order_seq_cst); } 15726: 15726: inline void 15726: atomic_flag_clear(atomic_flag* __a) noexcept 15726: { atomic_flag_clear_explicit(__a, memory_order_seq_cst); } 15726: 15726: inline void 15726: atomic_flag_clear(volatile atomic_flag* __a) noexcept 15726: { atomic_flag_clear_explicit(__a, memory_order_seq_cst); } 15726: # 1284 "/usr/include/c++/13/atomic" 3 15726: template 15726: using __atomic_val_t = __type_identity_t<_Tp>; 15726: template 15726: using __atomic_diff_t = typename atomic<_Tp>::difference_type; 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: atomic_is_lock_free(const atomic<_ITp>* __a) noexcept 15726: { return __a->is_lock_free(); } 15726: 15726: template 15726: inline bool 15726: atomic_is_lock_free(const volatile atomic<_ITp>* __a) noexcept 15726: { return __a->is_lock_free(); } 15726: 15726: template 15726: inline void 15726: atomic_init(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept 15726: { __a->store(__i, memory_order_relaxed); } 15726: 15726: template 15726: inline void 15726: atomic_init(volatile atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept 15726: { __a->store(__i, memory_order_relaxed); } 15726: 15726: template 15726: inline void 15726: atomic_store_explicit(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i, 15726: memory_order __m) noexcept 15726: { __a->store(__i, __m); } 15726: 15726: template 15726: inline void 15726: atomic_store_explicit(volatile atomic<_ITp>* __a, __atomic_val_t<_ITp> __i, 15726: memory_order __m) noexcept 15726: { __a->store(__i, __m); } 15726: 15726: template 15726: inline _ITp 15726: atomic_load_explicit(const atomic<_ITp>* __a, memory_order __m) noexcept 15726: { return __a->load(__m); } 15726: 15726: template 15726: inline _ITp 15726: atomic_load_explicit(const volatile atomic<_ITp>* __a, 15726: memory_order __m) noexcept 15726: { return __a->load(__m); } 15726: 15726: template 15726: inline _ITp 15726: atomic_exchange_explicit(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i, 15726: memory_order __m) noexcept 15726: { return __a->exchange(__i, __m); } 15726: 15726: template 15726: inline _ITp 15726: atomic_exchange_explicit(volatile atomic<_ITp>* __a, 15726: __atomic_val_t<_ITp> __i, 15726: memory_order __m) noexcept 15726: { return __a->exchange(__i, __m); } 15726: 15726: template 15726: inline bool 15726: atomic_compare_exchange_weak_explicit(atomic<_ITp>* __a, 15726: __atomic_val_t<_ITp>* __i1, 15726: __atomic_val_t<_ITp> __i2, 15726: memory_order __m1, 15726: memory_order __m2) noexcept 15726: { return __a->compare_exchange_weak(*__i1, __i2, __m1, __m2); } 15726: 15726: template 15726: inline bool 15726: atomic_compare_exchange_weak_explicit(volatile atomic<_ITp>* __a, 15726: __atomic_val_t<_ITp>* __i1, 15726: __atomic_val_t<_ITp> __i2, 15726: memory_order __m1, 15726: memory_order __m2) noexcept 15726: { return __a->compare_exchange_weak(*__i1, __i2, __m1, __m2); } 15726: 15726: template 15726: inline bool 15726: atomic_compare_exchange_strong_explicit(atomic<_ITp>* __a, 15726: __atomic_val_t<_ITp>* __i1, 15726: __atomic_val_t<_ITp> __i2, 15726: memory_order __m1, 15726: memory_order __m2) noexcept 15726: { return __a->compare_exchange_strong(*__i1, __i2, __m1, __m2); } 15726: 15726: template 15726: inline bool 15726: atomic_compare_exchange_strong_explicit(volatile atomic<_ITp>* __a, 15726: __atomic_val_t<_ITp>* __i1, 15726: __atomic_val_t<_ITp> __i2, 15726: memory_order __m1, 15726: memory_order __m2) noexcept 15726: { return __a->compare_exchange_strong(*__i1, __i2, __m1, __m2); } 15726: 15726: 15726: template 15726: inline void 15726: atomic_store(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept 15726: { atomic_store_explicit(__a, __i, memory_order_seq_cst); } 15726: 15726: template 15726: inline void 15726: atomic_store(volatile atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept 15726: { atomic_store_explicit(__a, __i, memory_order_seq_cst); } 15726: 15726: template 15726: inline _ITp 15726: atomic_load(const atomic<_ITp>* __a) noexcept 15726: { return atomic_load_explicit(__a, memory_order_seq_cst); } 15726: 15726: template 15726: inline _ITp 15726: atomic_load(const volatile atomic<_ITp>* __a) noexcept 15726: { return atomic_load_explicit(__a, memory_order_seq_cst); } 15726: 15726: template 15726: inline _ITp 15726: atomic_exchange(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept 15726: { return atomic_exchange_explicit(__a, __i, memory_order_seq_cst); } 15726: 15726: template 15726: inline _ITp 15726: atomic_exchange(volatile atomic<_ITp>* __a, 15726: __atomic_val_t<_ITp> __i) noexcept 15726: { return atomic_exchange_explicit(__a, __i, memory_order_seq_cst); } 15726: 15726: template 15726: inline bool 15726: atomic_compare_exchange_weak(atomic<_ITp>* __a, 15726: __atomic_val_t<_ITp>* __i1, 15726: __atomic_val_t<_ITp> __i2) noexcept 15726: { 15726: return atomic_compare_exchange_weak_explicit(__a, __i1, __i2, 15726: memory_order_seq_cst, 15726: memory_order_seq_cst); 15726: } 15726: 15726: template 15726: inline bool 15726: atomic_compare_exchange_weak(volatile atomic<_ITp>* __a, 15726: __atomic_val_t<_ITp>* __i1, 15726: __atomic_val_t<_ITp> __i2) noexcept 15726: { 15726: return atomic_compare_exchange_weak_explicit(__a, __i1, __i2, 15726: memory_order_seq_cst, 15726: memory_order_seq_cst); 15726: } 15726: 15726: template 15726: inline bool 15726: atomic_compare_exchange_strong(atomic<_ITp>* __a, 15726: __atomic_val_t<_ITp>* __i1, 15726: __atomic_val_t<_ITp> __i2) noexcept 15726: { 15726: return atomic_compare_exchange_strong_explicit(__a, __i1, __i2, 15726: memory_order_seq_cst, 15726: memory_order_seq_cst); 15726: } 15726: 15726: template 15726: inline bool 15726: atomic_compare_exchange_strong(volatile atomic<_ITp>* __a, 15726: __atomic_val_t<_ITp>* __i1, 15726: __atomic_val_t<_ITp> __i2) noexcept 15726: { 15726: return atomic_compare_exchange_strong_explicit(__a, __i1, __i2, 15726: memory_order_seq_cst, 15726: memory_order_seq_cst); 15726: } 15726: # 1490 "/usr/include/c++/13/atomic" 3 15726: template 15726: inline _ITp 15726: atomic_fetch_add_explicit(atomic<_ITp>* __a, 15726: __atomic_diff_t<_ITp> __i, 15726: memory_order __m) noexcept 15726: { return __a->fetch_add(__i, __m); } 15726: 15726: template 15726: inline _ITp 15726: atomic_fetch_add_explicit(volatile atomic<_ITp>* __a, 15726: __atomic_diff_t<_ITp> __i, 15726: memory_order __m) noexcept 15726: { return __a->fetch_add(__i, __m); } 15726: 15726: template 15726: inline _ITp 15726: atomic_fetch_sub_explicit(atomic<_ITp>* __a, 15726: __atomic_diff_t<_ITp> __i, 15726: memory_order __m) noexcept 15726: { return __a->fetch_sub(__i, __m); } 15726: 15726: template 15726: inline _ITp 15726: atomic_fetch_sub_explicit(volatile atomic<_ITp>* __a, 15726: __atomic_diff_t<_ITp> __i, 15726: memory_order __m) noexcept 15726: { return __a->fetch_sub(__i, __m); } 15726: 15726: template 15726: inline _ITp 15726: atomic_fetch_and_explicit(__atomic_base<_ITp>* __a, 15726: __atomic_val_t<_ITp> __i, 15726: memory_order __m) noexcept 15726: { return __a->fetch_and(__i, __m); } 15726: 15726: template 15726: inline _ITp 15726: atomic_fetch_and_explicit(volatile __atomic_base<_ITp>* __a, 15726: __atomic_val_t<_ITp> __i, 15726: memory_order __m) noexcept 15726: { return __a->fetch_and(__i, __m); } 15726: 15726: template 15726: inline _ITp 15726: atomic_fetch_or_explicit(__atomic_base<_ITp>* __a, 15726: __atomic_val_t<_ITp> __i, 15726: memory_order __m) noexcept 15726: { return __a->fetch_or(__i, __m); } 15726: 15726: template 15726: inline _ITp 15726: atomic_fetch_or_explicit(volatile __atomic_base<_ITp>* __a, 15726: __atomic_val_t<_ITp> __i, 15726: memory_order __m) noexcept 15726: { return __a->fetch_or(__i, __m); } 15726: 15726: template 15726: inline _ITp 15726: atomic_fetch_xor_explicit(__atomic_base<_ITp>* __a, 15726: __atomic_val_t<_ITp> __i, 15726: memory_order __m) noexcept 15726: { return __a->fetch_xor(__i, __m); } 15726: 15726: template 15726: inline _ITp 15726: atomic_fetch_xor_explicit(volatile __atomic_base<_ITp>* __a, 15726: __atomic_val_t<_ITp> __i, 15726: memory_order __m) noexcept 15726: { return __a->fetch_xor(__i, __m); } 15726: 15726: template 15726: inline _ITp 15726: atomic_fetch_add(atomic<_ITp>* __a, 15726: __atomic_diff_t<_ITp> __i) noexcept 15726: { return atomic_fetch_add_explicit(__a, __i, memory_order_seq_cst); } 15726: 15726: template 15726: inline _ITp 15726: atomic_fetch_add(volatile atomic<_ITp>* __a, 15726: __atomic_diff_t<_ITp> __i) noexcept 15726: { return atomic_fetch_add_explicit(__a, __i, memory_order_seq_cst); } 15726: 15726: template 15726: inline _ITp 15726: atomic_fetch_sub(atomic<_ITp>* __a, 15726: __atomic_diff_t<_ITp> __i) noexcept 15726: { return atomic_fetch_sub_explicit(__a, __i, memory_order_seq_cst); } 15726: 15726: template 15726: inline _ITp 15726: atomic_fetch_sub(volatile atomic<_ITp>* __a, 15726: __atomic_diff_t<_ITp> __i) noexcept 15726: { return atomic_fetch_sub_explicit(__a, __i, memory_order_seq_cst); } 15726: 15726: template 15726: inline _ITp 15726: atomic_fetch_and(__atomic_base<_ITp>* __a, 15726: __atomic_val_t<_ITp> __i) noexcept 15726: { return atomic_fetch_and_explicit(__a, __i, memory_order_seq_cst); } 15726: 15726: template 15726: inline _ITp 15726: atomic_fetch_and(volatile __atomic_base<_ITp>* __a, 15726: __atomic_val_t<_ITp> __i) noexcept 15726: { return atomic_fetch_and_explicit(__a, __i, memory_order_seq_cst); } 15726: 15726: template 15726: inline _ITp 15726: atomic_fetch_or(__atomic_base<_ITp>* __a, 15726: __atomic_val_t<_ITp> __i) noexcept 15726: { return atomic_fetch_or_explicit(__a, __i, memory_order_seq_cst); } 15726: 15726: template 15726: inline _ITp 15726: atomic_fetch_or(volatile __atomic_base<_ITp>* __a, 15726: __atomic_val_t<_ITp> __i) noexcept 15726: { return atomic_fetch_or_explicit(__a, __i, memory_order_seq_cst); } 15726: 15726: template 15726: inline _ITp 15726: atomic_fetch_xor(__atomic_base<_ITp>* __a, 15726: __atomic_val_t<_ITp> __i) noexcept 15726: { return atomic_fetch_xor_explicit(__a, __i, memory_order_seq_cst); } 15726: 15726: template 15726: inline _ITp 15726: atomic_fetch_xor(volatile __atomic_base<_ITp>* __a, 15726: __atomic_val_t<_ITp> __i) noexcept 15726: { return atomic_fetch_xor_explicit(__a, __i, memory_order_seq_cst); } 15726: # 1790 "/usr/include/c++/13/atomic" 3 15726: 15726: } 15726: # 12 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 15726: # 1 "/usr/include/c++/13/deque" 1 3 15726: # 58 "/usr/include/c++/13/deque" 3 15726: 15726: # 59 "/usr/include/c++/13/deque" 3 15726: 15726: # 1 "/usr/include/c++/13/bits/requires_hosted.h" 1 3 15726: # 61 "/usr/include/c++/13/deque" 2 3 15726: 15726: # 1 "/usr/include/c++/13/bits/stl_algobase.h" 1 3 15726: # 60 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: # 1 "/usr/include/c++/13/bits/functexcept.h" 1 3 15726: # 40 "/usr/include/c++/13/bits/functexcept.h" 3 15726: # 1 "/usr/include/c++/13/bits/exception_defines.h" 1 3 15726: # 41 "/usr/include/c++/13/bits/functexcept.h" 2 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: void 15726: __throw_bad_exception(void) __attribute__((__noreturn__)); 15726: 15726: 15726: void 15726: __throw_bad_alloc(void) __attribute__((__noreturn__)); 15726: 15726: void 15726: __throw_bad_array_new_length(void) __attribute__((__noreturn__)); 15726: 15726: 15726: void 15726: __throw_bad_cast(void) __attribute__((__noreturn__)); 15726: 15726: void 15726: __throw_bad_typeid(void) __attribute__((__noreturn__)); 15726: 15726: 15726: void 15726: __throw_logic_error(const char*) __attribute__((__noreturn__)); 15726: 15726: void 15726: __throw_domain_error(const char*) __attribute__((__noreturn__)); 15726: 15726: void 15726: __throw_invalid_argument(const char*) __attribute__((__noreturn__)); 15726: 15726: void 15726: __throw_length_error(const char*) __attribute__((__noreturn__)); 15726: 15726: void 15726: __throw_out_of_range(const char*) __attribute__((__noreturn__)); 15726: 15726: void 15726: __throw_out_of_range_fmt(const char*, ...) __attribute__((__noreturn__)) 15726: __attribute__((__format__(__gnu_printf__, 1, 2))); 15726: 15726: void 15726: __throw_runtime_error(const char*) __attribute__((__noreturn__)); 15726: 15726: void 15726: __throw_range_error(const char*) __attribute__((__noreturn__)); 15726: 15726: void 15726: __throw_overflow_error(const char*) __attribute__((__noreturn__)); 15726: 15726: void 15726: __throw_underflow_error(const char*) __attribute__((__noreturn__)); 15726: 15726: 15726: void 15726: __throw_ios_failure(const char*) __attribute__((__noreturn__)); 15726: 15726: void 15726: __throw_ios_failure(const char*, int) __attribute__((__noreturn__)); 15726: 15726: 15726: void 15726: __throw_system_error(int) __attribute__((__noreturn__)); 15726: 15726: 15726: void 15726: __throw_future_error(int) __attribute__((__noreturn__)); 15726: 15726: 15726: void 15726: __throw_bad_function_call() __attribute__((__noreturn__)); 15726: # 140 "/usr/include/c++/13/bits/functexcept.h" 3 15726: 15726: } 15726: # 61 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 15726: # 1 "/usr/include/c++/13/bits/cpp_type_traits.h" 1 3 15726: # 35 "/usr/include/c++/13/bits/cpp_type_traits.h" 3 15726: 15726: # 36 "/usr/include/c++/13/bits/cpp_type_traits.h" 3 15726: # 67 "/usr/include/c++/13/bits/cpp_type_traits.h" 3 15726: extern "C++" { 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: struct __true_type { }; 15726: struct __false_type { }; 15726: 15726: template 15726: struct __truth_type 15726: { typedef __false_type __type; }; 15726: 15726: template<> 15726: struct __truth_type 15726: { typedef __true_type __type; }; 15726: 15726: 15726: 15726: template 15726: struct __traitor 15726: { 15726: enum { __value = bool(_Sp::__value) || bool(_Tp::__value) }; 15726: typedef typename __truth_type<__value>::__type __type; 15726: }; 15726: 15726: 15726: template 15726: struct __are_same 15726: { 15726: enum { __value = 0 }; 15726: typedef __false_type __type; 15726: }; 15726: 15726: template 15726: struct __are_same<_Tp, _Tp> 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: 15726: template 15726: struct __is_void 15726: { 15726: enum { __value = 0 }; 15726: typedef __false_type __type; 15726: }; 15726: 15726: template<> 15726: struct __is_void 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: 15726: 15726: 15726: template 15726: struct __is_integer 15726: { 15726: enum { __value = 0 }; 15726: typedef __false_type __type; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template<> 15726: struct __is_integer 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: template<> 15726: struct __is_integer 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: template<> 15726: struct __is_integer 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: template<> 15726: struct __is_integer 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: 15726: template<> 15726: struct __is_integer 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: # 184 "/usr/include/c++/13/bits/cpp_type_traits.h" 3 15726: template<> 15726: struct __is_integer 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: template<> 15726: struct __is_integer 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: 15726: template<> 15726: struct __is_integer 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: template<> 15726: struct __is_integer 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: template<> 15726: struct __is_integer 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: template<> 15726: struct __is_integer 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: template<> 15726: struct __is_integer 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: template<> 15726: struct __is_integer 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: template<> 15726: struct __is_integer 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: template<> 15726: struct __is_integer 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: # 289 "/usr/include/c++/13/bits/cpp_type_traits.h" 3 15726: template 15726: struct __is_floating 15726: { 15726: enum { __value = 0 }; 15726: typedef __false_type __type; 15726: }; 15726: 15726: 15726: template<> 15726: struct __is_floating 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: template<> 15726: struct __is_floating 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: template<> 15726: struct __is_floating 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: # 366 "/usr/include/c++/13/bits/cpp_type_traits.h" 3 15726: template 15726: struct __is_pointer 15726: { 15726: enum { __value = 0 }; 15726: typedef __false_type __type; 15726: }; 15726: 15726: template 15726: struct __is_pointer<_Tp*> 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: 15726: 15726: 15726: template 15726: struct __is_arithmetic 15726: : public __traitor<__is_integer<_Tp>, __is_floating<_Tp> > 15726: { }; 15726: 15726: 15726: 15726: 15726: template 15726: struct __is_scalar 15726: : public __traitor<__is_arithmetic<_Tp>, __is_pointer<_Tp> > 15726: { }; 15726: 15726: 15726: 15726: 15726: template 15726: struct __is_char 15726: { 15726: enum { __value = 0 }; 15726: typedef __false_type __type; 15726: }; 15726: 15726: template<> 15726: struct __is_char 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: 15726: template<> 15726: struct __is_char 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: 15726: template 15726: struct __is_byte 15726: { 15726: enum { __value = 0 }; 15726: typedef __false_type __type; 15726: }; 15726: 15726: template<> 15726: struct __is_byte 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: template<> 15726: struct __is_byte 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: template<> 15726: struct __is_byte 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: 15726: enum class byte : unsigned char; 15726: 15726: template<> 15726: struct __is_byte 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: # 470 "/usr/include/c++/13/bits/cpp_type_traits.h" 3 15726: template struct iterator_traits; 15726: 15726: 15726: template 15726: struct __is_nonvolatile_trivially_copyable 15726: { 15726: enum { __value = __is_trivially_copyable(_Tp) }; 15726: }; 15726: 15726: 15726: 15726: 15726: template 15726: struct __is_nonvolatile_trivially_copyable 15726: { 15726: enum { __value = 0 }; 15726: }; 15726: 15726: 15726: template 15726: struct __memcpyable 15726: { 15726: enum { __value = 0 }; 15726: }; 15726: 15726: template 15726: struct __memcpyable<_Tp*, _Tp*> 15726: : __is_nonvolatile_trivially_copyable<_Tp> 15726: { }; 15726: 15726: template 15726: struct __memcpyable<_Tp*, const _Tp*> 15726: : __is_nonvolatile_trivially_copyable<_Tp> 15726: { }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct __memcmpable 15726: { 15726: enum { __value = 0 }; 15726: }; 15726: 15726: 15726: template 15726: struct __memcmpable<_Tp*, _Tp*> 15726: : __is_nonvolatile_trivially_copyable<_Tp> 15726: { }; 15726: 15726: template 15726: struct __memcmpable 15726: : __is_nonvolatile_trivially_copyable<_Tp> 15726: { }; 15726: 15726: template 15726: struct __memcmpable<_Tp*, const _Tp*> 15726: : __is_nonvolatile_trivially_copyable<_Tp> 15726: { }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template::__value 15726: 15726: > 15726: struct __is_memcmp_ordered 15726: { 15726: static const bool __value = _Tp(-1) > _Tp(1); 15726: }; 15726: 15726: template 15726: struct __is_memcmp_ordered<_Tp, false> 15726: { 15726: static const bool __value = false; 15726: }; 15726: 15726: 15726: template 15726: struct __is_memcmp_ordered_with 15726: { 15726: static const bool __value = __is_memcmp_ordered<_Tp>::__value 15726: && __is_memcmp_ordered<_Up>::__value; 15726: }; 15726: 15726: template 15726: struct __is_memcmp_ordered_with<_Tp, _Up, false> 15726: { 15726: static const bool __value = false; 15726: }; 15726: # 579 "/usr/include/c++/13/bits/cpp_type_traits.h" 3 15726: template<> 15726: struct __is_memcmp_ordered_with 15726: { static constexpr bool __value = true; }; 15726: 15726: template 15726: struct __is_memcmp_ordered_with<_Tp, std::byte, _SameSize> 15726: { static constexpr bool __value = false; }; 15726: 15726: template 15726: struct __is_memcmp_ordered_with 15726: { static constexpr bool __value = false; }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct __is_move_iterator 15726: { 15726: enum { __value = 0 }; 15726: typedef __false_type __type; 15726: }; 15726: 15726: 15726: 15726: template 15726: 15726: inline _Iterator 15726: __miter_base(_Iterator __it) 15726: { return __it; } 15726: 15726: 15726: } 15726: } 15726: # 62 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 15726: # 1 "/usr/include/c++/13/ext/type_traits.h" 1 3 15726: # 32 "/usr/include/c++/13/ext/type_traits.h" 3 15726: 15726: # 33 "/usr/include/c++/13/ext/type_traits.h" 3 15726: 15726: 15726: 15726: 15726: extern "C++" { 15726: 15726: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: template 15726: struct __enable_if 15726: { }; 15726: 15726: template 15726: struct __enable_if 15726: { typedef _Tp __type; }; 15726: 15726: 15726: 15726: template 15726: struct __conditional_type 15726: { typedef _Iftrue __type; }; 15726: 15726: template 15726: struct __conditional_type 15726: { typedef _Iffalse __type; }; 15726: 15726: 15726: 15726: template 15726: struct __add_unsigned 15726: { 15726: private: 15726: typedef __enable_if::__value, _Tp> __if_type; 15726: 15726: public: 15726: typedef typename __if_type::__type __type; 15726: }; 15726: 15726: template<> 15726: struct __add_unsigned 15726: { typedef unsigned char __type; }; 15726: 15726: template<> 15726: struct __add_unsigned 15726: { typedef unsigned char __type; }; 15726: 15726: template<> 15726: struct __add_unsigned 15726: { typedef unsigned short __type; }; 15726: 15726: template<> 15726: struct __add_unsigned 15726: { typedef unsigned int __type; }; 15726: 15726: template<> 15726: struct __add_unsigned 15726: { typedef unsigned long __type; }; 15726: 15726: template<> 15726: struct __add_unsigned 15726: { typedef unsigned long long __type; }; 15726: 15726: 15726: template<> 15726: struct __add_unsigned; 15726: 15726: template<> 15726: struct __add_unsigned; 15726: 15726: 15726: 15726: template 15726: struct __remove_unsigned 15726: { 15726: private: 15726: typedef __enable_if::__value, _Tp> __if_type; 15726: 15726: public: 15726: typedef typename __if_type::__type __type; 15726: }; 15726: 15726: template<> 15726: struct __remove_unsigned 15726: { typedef signed char __type; }; 15726: 15726: template<> 15726: struct __remove_unsigned 15726: { typedef signed char __type; }; 15726: 15726: template<> 15726: struct __remove_unsigned 15726: { typedef short __type; }; 15726: 15726: template<> 15726: struct __remove_unsigned 15726: { typedef int __type; }; 15726: 15726: template<> 15726: struct __remove_unsigned 15726: { typedef long __type; }; 15726: 15726: template<> 15726: struct __remove_unsigned 15726: { typedef long long __type; }; 15726: 15726: 15726: template<> 15726: struct __remove_unsigned; 15726: 15726: template<> 15726: struct __remove_unsigned; 15726: 15726: 15726: 15726: template 15726: constexpr 15726: inline bool 15726: __is_null_pointer(_Type* __ptr) 15726: { return __ptr == 0; } 15726: 15726: template 15726: constexpr 15726: inline bool 15726: __is_null_pointer(_Type) 15726: { return false; } 15726: 15726: 15726: constexpr bool 15726: __is_null_pointer(std::nullptr_t) 15726: { return true; } 15726: 15726: 15726: 15726: 15726: template::__value> 15726: struct __promote 15726: { typedef double __type; }; 15726: 15726: 15726: 15726: 15726: template 15726: struct __promote<_Tp, false> 15726: { }; 15726: 15726: template<> 15726: struct __promote 15726: { typedef long double __type; }; 15726: 15726: template<> 15726: struct __promote 15726: { typedef double __type; }; 15726: 15726: template<> 15726: struct __promote 15726: { typedef float __type; }; 15726: # 225 "/usr/include/c++/13/ext/type_traits.h" 3 15726: template 15726: using __promoted_t = decltype((typename __promote<_Tp>::__type(0) + ...)); 15726: 15726: 15726: 15726: template 15726: using __promote_2 = __promote<__promoted_t<_Tp, _Up>>; 15726: 15726: template 15726: using __promote_3 = __promote<__promoted_t<_Tp, _Up, _Vp>>; 15726: 15726: template 15726: using __promote_4 = __promote<__promoted_t<_Tp, _Up, _Vp, _Wp>>; 15726: # 269 "/usr/include/c++/13/ext/type_traits.h" 3 15726: 15726: } 15726: } 15726: # 63 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 15726: # 1 "/usr/include/c++/13/ext/numeric_traits.h" 1 3 15726: # 32 "/usr/include/c++/13/ext/numeric_traits.h" 3 15726: 15726: # 33 "/usr/include/c++/13/ext/numeric_traits.h" 3 15726: 15726: 15726: 15726: 15726: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 50 "/usr/include/c++/13/ext/numeric_traits.h" 3 15726: template 15726: struct __is_integer_nonstrict 15726: : public std::__is_integer<_Tp> 15726: { 15726: using std::__is_integer<_Tp>::__value; 15726: 15726: 15726: enum { __width = __value ? sizeof(_Tp) * 8 : 0 }; 15726: }; 15726: 15726: template 15726: struct __numeric_traits_integer 15726: { 15726: 15726: static_assert(__is_integer_nonstrict<_Value>::__value, 15726: "invalid specialization"); 15726: 15726: 15726: 15726: 15726: static const bool __is_signed = (_Value)(-1) < 0; 15726: static const int __digits 15726: = __is_integer_nonstrict<_Value>::__width - __is_signed; 15726: 15726: 15726: static const _Value __max = __is_signed 15726: ? (((((_Value)1 << (__digits - 1)) - 1) << 1) + 1) 15726: : ~(_Value)0; 15726: static const _Value __min = __is_signed ? -__max - 1 : (_Value)0; 15726: }; 15726: 15726: template 15726: const _Value __numeric_traits_integer<_Value>::__min; 15726: 15726: template 15726: const _Value __numeric_traits_integer<_Value>::__max; 15726: 15726: template 15726: const bool __numeric_traits_integer<_Value>::__is_signed; 15726: 15726: template 15726: const int __numeric_traits_integer<_Value>::__digits; 15726: # 137 "/usr/include/c++/13/ext/numeric_traits.h" 3 15726: template 15726: using __int_traits = __numeric_traits_integer<_Tp>; 15726: # 157 "/usr/include/c++/13/ext/numeric_traits.h" 3 15726: template 15726: struct __numeric_traits_floating 15726: { 15726: 15726: static const int __max_digits10 = (2 + (std::__are_same<_Value, float>::__value ? 24 : std::__are_same<_Value, double>::__value ? 53 : 53) * 643L / 2136); 15726: 15726: 15726: static const bool __is_signed = true; 15726: static const int __digits10 = (std::__are_same<_Value, float>::__value ? 6 : std::__are_same<_Value, double>::__value ? 15 : 15); 15726: static const int __max_exponent10 = (std::__are_same<_Value, float>::__value ? 38 : std::__are_same<_Value, double>::__value ? 308 : 308); 15726: }; 15726: 15726: template 15726: const int __numeric_traits_floating<_Value>::__max_digits10; 15726: 15726: template 15726: const bool __numeric_traits_floating<_Value>::__is_signed; 15726: 15726: template 15726: const int __numeric_traits_floating<_Value>::__digits10; 15726: 15726: template 15726: const int __numeric_traits_floating<_Value>::__max_exponent10; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct __numeric_traits 15726: : public __numeric_traits_integer<_Value> 15726: { }; 15726: 15726: template<> 15726: struct __numeric_traits 15726: : public __numeric_traits_floating 15726: { }; 15726: 15726: template<> 15726: struct __numeric_traits 15726: : public __numeric_traits_floating 15726: { }; 15726: 15726: template<> 15726: struct __numeric_traits 15726: : public __numeric_traits_floating 15726: { }; 15726: # 238 "/usr/include/c++/13/ext/numeric_traits.h" 3 15726: 15726: } 15726: # 64 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 15726: # 1 "/usr/include/c++/13/bits/stl_pair.h" 1 3 15726: # 62 "/usr/include/c++/13/bits/stl_pair.h" 3 15726: # 1 "/usr/include/c++/13/bits/utility.h" 1 3 15726: # 36 "/usr/include/c++/13/bits/utility.h" 3 15726: 15726: # 37 "/usr/include/c++/13/bits/utility.h" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: template 15726: struct tuple_size; 15726: 15726: 15726: 15726: 15726: 15726: template::type, 15726: typename = typename enable_if::value>::type, 15726: size_t = tuple_size<_Tp>::value> 15726: using __enable_if_has_tuple_size = _Tp; 15726: 15726: template 15726: struct tuple_size> 15726: : public tuple_size<_Tp> { }; 15726: 15726: template 15726: struct tuple_size> 15726: : public tuple_size<_Tp> { }; 15726: 15726: template 15726: struct tuple_size> 15726: : public tuple_size<_Tp> { }; 15726: 15726: 15726: template 15726: inline constexpr size_t tuple_size_v = tuple_size<_Tp>::value; 15726: 15726: 15726: 15726: template 15726: struct tuple_element; 15726: 15726: 15726: template 15726: using __tuple_element_t = typename tuple_element<__i, _Tp>::type; 15726: 15726: template 15726: struct tuple_element<__i, const _Tp> 15726: { 15726: using type = const __tuple_element_t<__i, _Tp>; 15726: }; 15726: 15726: template 15726: struct tuple_element<__i, volatile _Tp> 15726: { 15726: using type = volatile __tuple_element_t<__i, _Tp>; 15726: }; 15726: 15726: template 15726: struct tuple_element<__i, const volatile _Tp> 15726: { 15726: using type = const volatile __tuple_element_t<__i, _Tp>; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: constexpr size_t 15726: __find_uniq_type_in_pack() 15726: { 15726: constexpr size_t __sz = sizeof...(_Types); 15726: constexpr bool __found[__sz] = { __is_same(_Tp, _Types) ... }; 15726: size_t __n = __sz; 15726: for (size_t __i = 0; __i < __sz; ++__i) 15726: { 15726: if (__found[__i]) 15726: { 15726: if (__n < __sz) 15726: return __sz; 15726: __n = __i; 15726: } 15726: } 15726: return __n; 15726: } 15726: # 134 "/usr/include/c++/13/bits/utility.h" 3 15726: template 15726: using tuple_element_t = typename tuple_element<__i, _Tp>::type; 15726: 15726: 15726: 15726: 15726: template struct _Index_tuple { }; 15726: 15726: 15726: template 15726: struct _Build_index_tuple 15726: { 15726: # 154 "/usr/include/c++/13/bits/utility.h" 3 15726: using __type = _Index_tuple<__integer_pack(_Num)...>; 15726: 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct integer_sequence 15726: { 15726: 15726: 15726: 15726: typedef _Tp value_type; 15726: static constexpr size_t size() noexcept { return sizeof...(_Idx); } 15726: }; 15726: 15726: 15726: template 15726: using make_integer_sequence 15726: 15726: 15726: 15726: = integer_sequence<_Tp, __integer_pack(_Tp(_Num))...>; 15726: 15726: 15726: 15726: template 15726: using index_sequence = integer_sequence; 15726: 15726: 15726: template 15726: using make_index_sequence = make_integer_sequence; 15726: 15726: 15726: template 15726: using index_sequence_for = make_index_sequence; 15726: 15726: 15726: 15726: struct in_place_t { 15726: explicit in_place_t() = default; 15726: }; 15726: 15726: inline constexpr in_place_t in_place{}; 15726: 15726: template struct in_place_type_t 15726: { 15726: explicit in_place_type_t() = default; 15726: }; 15726: 15726: template 15726: inline constexpr in_place_type_t<_Tp> in_place_type{}; 15726: 15726: template struct in_place_index_t 15726: { 15726: explicit in_place_index_t() = default; 15726: }; 15726: 15726: template 15726: inline constexpr in_place_index_t<_Idx> in_place_index{}; 15726: 15726: template 15726: inline constexpr bool __is_in_place_type_v = false; 15726: 15726: template 15726: inline constexpr bool __is_in_place_type_v> = true; 15726: 15726: template 15726: using __is_in_place_type = bool_constant<__is_in_place_type_v<_Tp>>; 15726: 15726: 15726: 15726: 15726: template 15726: struct _Nth_type 15726: { }; 15726: 15726: template 15726: struct _Nth_type<0, _Tp0, _Rest...> 15726: { using type = _Tp0; }; 15726: 15726: template 15726: struct _Nth_type<1, _Tp0, _Tp1, _Rest...> 15726: { using type = _Tp1; }; 15726: 15726: template 15726: struct _Nth_type<2, _Tp0, _Tp1, _Tp2, _Rest...> 15726: { using type = _Tp2; }; 15726: 15726: template 15726: 15726: 15726: 15726: struct _Nth_type<_Np, _Tp0, _Tp1, _Tp2, _Rest...> 15726: : _Nth_type<_Np - 3, _Rest...> 15726: { }; 15726: 15726: 15726: template 15726: struct _Nth_type<0, _Tp0, _Tp1, _Tp2, _Rest...> 15726: { using type = _Tp0; }; 15726: 15726: template 15726: struct _Nth_type<1, _Tp0, _Tp1, _Tp2, _Rest...> 15726: { using type = _Tp1; }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 63 "/usr/include/c++/13/bits/stl_pair.h" 2 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 80 "/usr/include/c++/13/bits/stl_pair.h" 3 15726: struct piecewise_construct_t { explicit piecewise_construct_t() = default; }; 15726: 15726: 15726: inline constexpr piecewise_construct_t piecewise_construct = 15726: piecewise_construct_t(); 15726: 15726: 15726: 15726: 15726: template 15726: class tuple; 15726: 15726: template 15726: struct _Index_tuple; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _PCC 15726: { 15726: template 15726: static constexpr bool _ConstructiblePair() 15726: { 15726: return __and_, 15726: is_constructible<_T2, const _U2&>>::value; 15726: } 15726: 15726: template 15726: static constexpr bool _ImplicitlyConvertiblePair() 15726: { 15726: return __and_, 15726: is_convertible>::value; 15726: } 15726: 15726: template 15726: static constexpr bool _MoveConstructiblePair() 15726: { 15726: return __and_, 15726: is_constructible<_T2, _U2&&>>::value; 15726: } 15726: 15726: template 15726: static constexpr bool _ImplicitlyMoveConvertiblePair() 15726: { 15726: return __and_, 15726: is_convertible<_U2&&, _T2>>::value; 15726: } 15726: }; 15726: 15726: template 15726: struct _PCC 15726: { 15726: template 15726: static constexpr bool _ConstructiblePair() 15726: { 15726: return false; 15726: } 15726: 15726: template 15726: static constexpr bool _ImplicitlyConvertiblePair() 15726: { 15726: return false; 15726: } 15726: 15726: template 15726: static constexpr bool _MoveConstructiblePair() 15726: { 15726: return false; 15726: } 15726: 15726: template 15726: static constexpr bool _ImplicitlyMoveConvertiblePair() 15726: { 15726: return false; 15726: } 15726: }; 15726: 15726: 15726: 15726: template class __pair_base 15726: { 15726: 15726: template friend struct pair; 15726: __pair_base() = default; 15726: ~__pair_base() = default; 15726: __pair_base(const __pair_base&) = default; 15726: __pair_base& operator=(const __pair_base&) = delete; 15726: 15726: }; 15726: # 186 "/usr/include/c++/13/bits/stl_pair.h" 3 15726: template 15726: struct pair 15726: : public __pair_base<_T1, _T2> 15726: { 15726: typedef _T1 first_type; 15726: typedef _T2 second_type; 15726: 15726: _T1 first; 15726: _T2 second; 15726: 15726: 15726: constexpr pair(const pair&) = default; 15726: constexpr pair(pair&&) = default; 15726: 15726: template 15726: 15726: pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>); 15726: 15726: 15726: void 15726: swap(pair& __p) 15726: noexcept(__and_<__is_nothrow_swappable<_T1>, 15726: __is_nothrow_swappable<_T2>>::value) 15726: { 15726: using std::swap; 15726: swap(first, __p.first); 15726: swap(second, __p.second); 15726: } 15726: # 234 "/usr/include/c++/13/bits/stl_pair.h" 3 15726: private: 15726: template 15726: 15726: pair(tuple<_Args1...>&, tuple<_Args2...>&, 15726: _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>); 15726: public: 15726: # 525 "/usr/include/c++/13/bits/stl_pair.h" 3 15726: template , 15726: __is_implicitly_default_constructible<_U2>> 15726: ::value, bool>::type = true> 15726: constexpr pair() 15726: : first(), second() { } 15726: 15726: template , 15726: is_default_constructible<_U2>, 15726: __not_< 15726: __and_<__is_implicitly_default_constructible<_U1>, 15726: __is_implicitly_default_constructible<_U2>>>> 15726: ::value, bool>::type = false> 15726: explicit constexpr pair() 15726: : first(), second() { } 15726: 15726: 15726: 15726: using _PCCP = _PCC; 15726: 15726: 15726: 15726: template() 15726: && _PCCP::template 15726: _ImplicitlyConvertiblePair<_U1, _U2>(), 15726: bool>::type=true> 15726: constexpr pair(const _T1& __a, const _T2& __b) 15726: : first(__a), second(__b) { } 15726: 15726: 15726: template() 15726: && !_PCCP::template 15726: _ImplicitlyConvertiblePair<_U1, _U2>(), 15726: bool>::type=false> 15726: explicit constexpr pair(const _T1& __a, const _T2& __b) 15726: : first(__a), second(__b) { } 15726: 15726: 15726: 15726: template 15726: using _PCCFP = _PCC::value 15726: || !is_same<_T2, _U2>::value, 15726: _T1, _T2>; 15726: 15726: 15726: template::template 15726: _ConstructiblePair<_U1, _U2>() 15726: && _PCCFP<_U1, _U2>::template 15726: _ImplicitlyConvertiblePair<_U1, _U2>(), 15726: bool>::type=true> 15726: constexpr pair(const pair<_U1, _U2>& __p) 15726: : first(__p.first), second(__p.second) 15726: { ; } 15726: 15726: template::template 15726: _ConstructiblePair<_U1, _U2>() 15726: && !_PCCFP<_U1, _U2>::template 15726: _ImplicitlyConvertiblePair<_U1, _U2>(), 15726: bool>::type=false> 15726: explicit constexpr pair(const pair<_U1, _U2>& __p) 15726: : first(__p.first), second(__p.second) 15726: { ; } 15726: # 609 "/usr/include/c++/13/bits/stl_pair.h" 3 15726: private: 15726: 15726: 15726: 15726: struct __zero_as_null_pointer_constant 15726: { 15726: __zero_as_null_pointer_constant(int __zero_as_null_pointer_constant::*) 15726: { } 15726: template::value>> 15726: __zero_as_null_pointer_constant(_Tp) = delete; 15726: }; 15726: 15726: public: 15726: 15726: 15726: 15726: 15726: template>, 15726: is_pointer<_T2>, 15726: is_constructible<_T1, _U1>, 15726: __not_>, 15726: is_convertible<_U1, _T1>>::value, 15726: bool> = true> 15726: __attribute__ ((__deprecated__ ("use 'nullptr' instead of '0' to " "initialize std::pair of move-only " "type and pointer"))) 15726: constexpr 15726: pair(_U1&& __x, __zero_as_null_pointer_constant, ...) 15726: : first(std::forward<_U1>(__x)), second(nullptr) 15726: { ; } 15726: 15726: template>, 15726: is_pointer<_T2>, 15726: is_constructible<_T1, _U1>, 15726: __not_>, 15726: __not_>>::value, 15726: bool> = false> 15726: __attribute__ ((__deprecated__ ("use 'nullptr' instead of '0' to " "initialize std::pair of move-only " "type and pointer"))) 15726: explicit constexpr 15726: pair(_U1&& __x, __zero_as_null_pointer_constant, ...) 15726: : first(std::forward<_U1>(__x)), second(nullptr) 15726: { ; } 15726: 15726: template, 15726: __not_>, 15726: is_constructible<_T2, _U2>, 15726: __not_>, 15726: is_convertible<_U2, _T2>>::value, 15726: bool> = true> 15726: __attribute__ ((__deprecated__ ("use 'nullptr' instead of '0' to " "initialize std::pair of move-only " "type and pointer"))) 15726: constexpr 15726: pair(__zero_as_null_pointer_constant, _U2&& __y, ...) 15726: : first(nullptr), second(std::forward<_U2>(__y)) 15726: { ; } 15726: 15726: template, 15726: __not_>, 15726: is_constructible<_T2, _U2>, 15726: __not_>, 15726: __not_>>::value, 15726: bool> = false> 15726: __attribute__ ((__deprecated__ ("use 'nullptr' instead of '0' to " "initialize std::pair of move-only " "type and pointer"))) 15726: explicit constexpr 15726: pair(__zero_as_null_pointer_constant, _U2&& __y, ...) 15726: : first(nullptr), second(std::forward<_U2>(__y)) 15726: { ; } 15726: 15726: 15726: 15726: template() 15726: && _PCCP::template 15726: _ImplicitlyMoveConvertiblePair<_U1, _U2>(), 15726: bool>::type=true> 15726: constexpr pair(_U1&& __x, _U2&& __y) 15726: : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) 15726: { ; } 15726: 15726: template() 15726: && !_PCCP::template 15726: _ImplicitlyMoveConvertiblePair<_U1, _U2>(), 15726: bool>::type=false> 15726: explicit constexpr pair(_U1&& __x, _U2&& __y) 15726: : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) 15726: { ; } 15726: 15726: 15726: template::template 15726: _MoveConstructiblePair<_U1, _U2>() 15726: && _PCCFP<_U1, _U2>::template 15726: _ImplicitlyMoveConvertiblePair<_U1, _U2>(), 15726: bool>::type=true> 15726: constexpr pair(pair<_U1, _U2>&& __p) 15726: : first(std::forward<_U1>(__p.first)), 15726: second(std::forward<_U2>(__p.second)) 15726: { ; } 15726: 15726: template::template 15726: _MoveConstructiblePair<_U1, _U2>() 15726: && !_PCCFP<_U1, _U2>::template 15726: _ImplicitlyMoveConvertiblePair<_U1, _U2>(), 15726: bool>::type=false> 15726: explicit constexpr pair(pair<_U1, _U2>&& __p) 15726: : first(std::forward<_U1>(__p.first)), 15726: second(std::forward<_U2>(__p.second)) 15726: { ; } 15726: 15726: 15726: 15726: pair& 15726: operator=(__conditional_t<__and_, 15726: is_copy_assignable<_T2>>::value, 15726: const pair&, const __nonesuch&> __p) 15726: { 15726: first = __p.first; 15726: second = __p.second; 15726: return *this; 15726: } 15726: 15726: pair& 15726: operator=(__conditional_t<__and_, 15726: is_move_assignable<_T2>>::value, 15726: pair&&, __nonesuch&&> __p) 15726: noexcept(__and_, 15726: is_nothrow_move_assignable<_T2>>::value) 15726: { 15726: first = std::forward(__p.first); 15726: second = std::forward(__p.second); 15726: return *this; 15726: } 15726: 15726: template 15726: typename enable_if<__and_, 15726: is_assignable<_T2&, const _U2&>>::value, 15726: pair&>::type 15726: operator=(const pair<_U1, _U2>& __p) 15726: { 15726: first = __p.first; 15726: second = __p.second; 15726: return *this; 15726: } 15726: 15726: template 15726: typename enable_if<__and_, 15726: is_assignable<_T2&, _U2&&>>::value, 15726: pair&>::type 15726: operator=(pair<_U1, _U2>&& __p) 15726: { 15726: first = std::forward<_U1>(__p.first); 15726: second = std::forward<_U2>(__p.second); 15726: return *this; 15726: } 15726: # 801 "/usr/include/c++/13/bits/stl_pair.h" 3 15726: }; 15726: 15726: 15726: 15726: 15726: template pair(_T1, _T2) -> pair<_T1, _T2>; 15726: 15726: 15726: 15726: template 15726: inline constexpr bool 15726: operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) 15726: { return __x.first == __y.first && __x.second == __y.second; } 15726: # 833 "/usr/include/c++/13/bits/stl_pair.h" 3 15726: template 15726: inline constexpr bool 15726: operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) 15726: { return __x.first < __y.first 15726: || (!(__y.first < __x.first) && __x.second < __y.second); } 15726: 15726: 15726: template 15726: inline constexpr bool 15726: operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) 15726: { return !(__x == __y); } 15726: 15726: 15726: template 15726: inline constexpr bool 15726: operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) 15726: { return __y < __x; } 15726: 15726: 15726: template 15726: inline constexpr bool 15726: operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) 15726: { return !(__y < __x); } 15726: 15726: 15726: template 15726: inline constexpr bool 15726: operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) 15726: { return !(__x < __y); } 15726: # 870 "/usr/include/c++/13/bits/stl_pair.h" 3 15726: template 15726: inline 15726: 15726: 15726: typename enable_if<__and_<__is_swappable<_T1>, 15726: __is_swappable<_T2>>::value>::type 15726: 15726: 15726: 15726: swap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y) 15726: noexcept(noexcept(__x.swap(__y))) 15726: { __x.swap(__y); } 15726: # 893 "/usr/include/c++/13/bits/stl_pair.h" 3 15726: template 15726: typename enable_if, 15726: __is_swappable<_T2>>::value>::type 15726: swap(pair<_T1, _T2>&, pair<_T1, _T2>&) = delete; 15726: # 919 "/usr/include/c++/13/bits/stl_pair.h" 3 15726: template 15726: constexpr pair::__type, 15726: typename __decay_and_strip<_T2>::__type> 15726: make_pair(_T1&& __x, _T2&& __y) 15726: { 15726: typedef typename __decay_and_strip<_T1>::__type __ds_type1; 15726: typedef typename __decay_and_strip<_T2>::__type __ds_type2; 15726: typedef pair<__ds_type1, __ds_type2> __pair_type; 15726: return __pair_type(std::forward<_T1>(__x), std::forward<_T2>(__y)); 15726: } 15726: # 942 "/usr/include/c++/13/bits/stl_pair.h" 3 15726: template 15726: struct __is_tuple_like_impl> : true_type 15726: { }; 15726: 15726: 15726: 15726: template 15726: struct tuple_size> 15726: : public integral_constant { }; 15726: 15726: 15726: template 15726: struct tuple_element<0, pair<_Tp1, _Tp2>> 15726: { typedef _Tp1 type; }; 15726: 15726: 15726: template 15726: struct tuple_element<1, pair<_Tp1, _Tp2>> 15726: { typedef _Tp2 type; }; 15726: 15726: 15726: template 15726: inline constexpr size_t tuple_size_v> = 2; 15726: 15726: template 15726: inline constexpr size_t tuple_size_v> = 2; 15726: 15726: template 15726: inline constexpr bool __is_pair = false; 15726: 15726: template 15726: inline constexpr bool __is_pair> = true; 15726: 15726: 15726: 15726: template 15726: struct __pair_get; 15726: 15726: template<> 15726: struct __pair_get<0> 15726: { 15726: template 15726: static constexpr _Tp1& 15726: __get(pair<_Tp1, _Tp2>& __pair) noexcept 15726: { return __pair.first; } 15726: 15726: template 15726: static constexpr _Tp1&& 15726: __move_get(pair<_Tp1, _Tp2>&& __pair) noexcept 15726: { return std::forward<_Tp1>(__pair.first); } 15726: 15726: template 15726: static constexpr const _Tp1& 15726: __const_get(const pair<_Tp1, _Tp2>& __pair) noexcept 15726: { return __pair.first; } 15726: 15726: template 15726: static constexpr const _Tp1&& 15726: __const_move_get(const pair<_Tp1, _Tp2>&& __pair) noexcept 15726: { return std::forward(__pair.first); } 15726: }; 15726: 15726: template<> 15726: struct __pair_get<1> 15726: { 15726: template 15726: static constexpr _Tp2& 15726: __get(pair<_Tp1, _Tp2>& __pair) noexcept 15726: { return __pair.second; } 15726: 15726: template 15726: static constexpr _Tp2&& 15726: __move_get(pair<_Tp1, _Tp2>&& __pair) noexcept 15726: { return std::forward<_Tp2>(__pair.second); } 15726: 15726: template 15726: static constexpr const _Tp2& 15726: __const_get(const pair<_Tp1, _Tp2>& __pair) noexcept 15726: { return __pair.second; } 15726: 15726: template 15726: static constexpr const _Tp2&& 15726: __const_move_get(const pair<_Tp1, _Tp2>&& __pair) noexcept 15726: { return std::forward(__pair.second); } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type& 15726: get(pair<_Tp1, _Tp2>& __in) noexcept 15726: { return __pair_get<_Int>::__get(__in); } 15726: 15726: template 15726: constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&& 15726: get(pair<_Tp1, _Tp2>&& __in) noexcept 15726: { return __pair_get<_Int>::__move_get(std::move(__in)); } 15726: 15726: template 15726: constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type& 15726: get(const pair<_Tp1, _Tp2>& __in) noexcept 15726: { return __pair_get<_Int>::__const_get(__in); } 15726: 15726: template 15726: constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&& 15726: get(const pair<_Tp1, _Tp2>&& __in) noexcept 15726: { return __pair_get<_Int>::__const_move_get(std::move(__in)); } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: constexpr _Tp& 15726: get(pair<_Tp, _Up>& __p) noexcept 15726: { return __p.first; } 15726: 15726: template 15726: constexpr const _Tp& 15726: get(const pair<_Tp, _Up>& __p) noexcept 15726: { return __p.first; } 15726: 15726: template 15726: constexpr _Tp&& 15726: get(pair<_Tp, _Up>&& __p) noexcept 15726: { return std::move(__p.first); } 15726: 15726: template 15726: constexpr const _Tp&& 15726: get(const pair<_Tp, _Up>&& __p) noexcept 15726: { return std::move(__p.first); } 15726: 15726: template 15726: constexpr _Tp& 15726: get(pair<_Up, _Tp>& __p) noexcept 15726: { return __p.second; } 15726: 15726: template 15726: constexpr const _Tp& 15726: get(const pair<_Up, _Tp>& __p) noexcept 15726: { return __p.second; } 15726: 15726: template 15726: constexpr _Tp&& 15726: get(pair<_Up, _Tp>&& __p) noexcept 15726: { return std::move(__p.second); } 15726: 15726: template 15726: constexpr const _Tp&& 15726: get(const pair<_Up, _Tp>&& __p) noexcept 15726: { return std::move(__p.second); } 15726: # 1118 "/usr/include/c++/13/bits/stl_pair.h" 3 15726: 15726: } 15726: # 65 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 15726: # 1 "/usr/include/c++/13/bits/stl_iterator_base_types.h" 1 3 15726: # 62 "/usr/include/c++/13/bits/stl_iterator_base_types.h" 3 15726: 15726: # 63 "/usr/include/c++/13/bits/stl_iterator_base_types.h" 3 15726: # 74 "/usr/include/c++/13/bits/stl_iterator_base_types.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 93 "/usr/include/c++/13/bits/stl_iterator_base_types.h" 3 15726: struct input_iterator_tag { }; 15726: 15726: 15726: struct output_iterator_tag { }; 15726: 15726: 15726: struct forward_iterator_tag : public input_iterator_tag { }; 15726: 15726: 15726: 15726: struct bidirectional_iterator_tag : public forward_iterator_tag { }; 15726: 15726: 15726: 15726: struct random_access_iterator_tag : public bidirectional_iterator_tag { }; 15726: # 125 "/usr/include/c++/13/bits/stl_iterator_base_types.h" 3 15726: template 15726: struct [[__deprecated__]] iterator 15726: { 15726: 15726: typedef _Category iterator_category; 15726: 15726: typedef _Tp value_type; 15726: 15726: typedef _Distance difference_type; 15726: 15726: typedef _Pointer pointer; 15726: 15726: typedef _Reference reference; 15726: }; 15726: # 149 "/usr/include/c++/13/bits/stl_iterator_base_types.h" 3 15726: template 15726: struct iterator_traits; 15726: 15726: 15726: 15726: 15726: template> 15726: struct __iterator_traits { }; 15726: 15726: 15726: 15726: template 15726: struct __iterator_traits<_Iterator, 15726: __void_t> 15726: { 15726: typedef typename _Iterator::iterator_category iterator_category; 15726: typedef typename _Iterator::value_type value_type; 15726: typedef typename _Iterator::difference_type difference_type; 15726: typedef typename _Iterator::pointer pointer; 15726: typedef typename _Iterator::reference reference; 15726: }; 15726: 15726: 15726: template 15726: struct iterator_traits 15726: : public __iterator_traits<_Iterator> { }; 15726: # 209 "/usr/include/c++/13/bits/stl_iterator_base_types.h" 3 15726: template 15726: struct iterator_traits<_Tp*> 15726: { 15726: typedef random_access_iterator_tag iterator_category; 15726: typedef _Tp value_type; 15726: typedef ptrdiff_t difference_type; 15726: typedef _Tp* pointer; 15726: typedef _Tp& reference; 15726: }; 15726: 15726: 15726: template 15726: struct iterator_traits 15726: { 15726: typedef random_access_iterator_tag iterator_category; 15726: typedef _Tp value_type; 15726: typedef ptrdiff_t difference_type; 15726: typedef const _Tp* pointer; 15726: typedef const _Tp& reference; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: __attribute__((__always_inline__)) 15726: inline constexpr 15726: typename iterator_traits<_Iter>::iterator_category 15726: __iterator_category(const _Iter&) 15726: { return typename iterator_traits<_Iter>::iterator_category(); } 15726: 15726: 15726: 15726: 15726: template 15726: using __iter_category_t 15726: = typename iterator_traits<_Iter>::iterator_category; 15726: 15726: template 15726: using _RequireInputIter = 15726: __enable_if_t, 15726: input_iterator_tag>::value>; 15726: 15726: template> 15726: struct __is_random_access_iter 15726: : is_base_of 15726: { 15726: typedef is_base_of _Base; 15726: enum { __value = _Base::value }; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 66 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 15726: # 1 "/usr/include/c++/13/bits/stl_iterator_base_funcs.h" 1 3 15726: # 62 "/usr/include/c++/13/bits/stl_iterator_base_funcs.h" 3 15726: 15726: # 63 "/usr/include/c++/13/bits/stl_iterator_base_funcs.h" 3 15726: 15726: # 1 "/usr/include/c++/13/bits/concept_check.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/concept_check.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/concept_check.h" 3 15726: # 65 "/usr/include/c++/13/bits/stl_iterator_base_funcs.h" 2 3 15726: # 1 "/usr/include/c++/13/debug/assertions.h" 1 3 15726: # 66 "/usr/include/c++/13/bits/stl_iterator_base_funcs.h" 2 3 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: template struct _List_iterator; 15726: template struct _List_const_iterator; 15726: 15726: 15726: template 15726: inline constexpr 15726: typename iterator_traits<_InputIterator>::difference_type 15726: __distance(_InputIterator __first, _InputIterator __last, 15726: input_iterator_tag) 15726: { 15726: 15726: 15726: 15726: typename iterator_traits<_InputIterator>::difference_type __n = 0; 15726: while (__first != __last) 15726: { 15726: ++__first; 15726: ++__n; 15726: } 15726: return __n; 15726: } 15726: 15726: template 15726: __attribute__((__always_inline__)) 15726: inline constexpr 15726: typename iterator_traits<_RandomAccessIterator>::difference_type 15726: __distance(_RandomAccessIterator __first, _RandomAccessIterator __last, 15726: random_access_iterator_tag) 15726: { 15726: 15726: 15726: 15726: return __last - __first; 15726: } 15726: 15726: 15726: 15726: template 15726: ptrdiff_t 15726: __distance(std::_List_iterator<_Tp>, 15726: std::_List_iterator<_Tp>, 15726: input_iterator_tag); 15726: 15726: template 15726: ptrdiff_t 15726: __distance(std::_List_const_iterator<_Tp>, 15726: std::_List_const_iterator<_Tp>, 15726: input_iterator_tag); 15726: 15726: 15726: 15726: 15726: template 15726: void 15726: __distance(_OutputIterator, _OutputIterator, output_iterator_tag) = delete; 15726: # 144 "/usr/include/c++/13/bits/stl_iterator_base_funcs.h" 3 15726: template 15726: [[__nodiscard__]] __attribute__((__always_inline__)) 15726: inline constexpr 15726: typename iterator_traits<_InputIterator>::difference_type 15726: distance(_InputIterator __first, _InputIterator __last) 15726: { 15726: 15726: return std::__distance(__first, __last, 15726: std::__iterator_category(__first)); 15726: } 15726: 15726: template 15726: inline constexpr void 15726: __advance(_InputIterator& __i, _Distance __n, input_iterator_tag) 15726: { 15726: 15726: 15726: do { if (std::__is_constant_evaluated() && !bool(__n >= 0)) __builtin_unreachable(); } while (false); 15726: while (__n--) 15726: ++__i; 15726: } 15726: 15726: template 15726: inline constexpr void 15726: __advance(_BidirectionalIterator& __i, _Distance __n, 15726: bidirectional_iterator_tag) 15726: { 15726: 15726: 15726: 15726: if (__n > 0) 15726: while (__n--) 15726: ++__i; 15726: else 15726: while (__n++) 15726: --__i; 15726: } 15726: 15726: template 15726: inline constexpr void 15726: __advance(_RandomAccessIterator& __i, _Distance __n, 15726: random_access_iterator_tag) 15726: { 15726: 15726: 15726: 15726: if (__builtin_constant_p(__n) && __n == 1) 15726: ++__i; 15726: else if (__builtin_constant_p(__n) && __n == -1) 15726: --__i; 15726: else 15726: __i += __n; 15726: } 15726: 15726: 15726: 15726: template 15726: void 15726: __advance(_OutputIterator&, _Distance, output_iterator_tag) = delete; 15726: # 217 "/usr/include/c++/13/bits/stl_iterator_base_funcs.h" 3 15726: template 15726: __attribute__((__always_inline__)) 15726: inline constexpr void 15726: advance(_InputIterator& __i, _Distance __n) 15726: { 15726: 15726: typename iterator_traits<_InputIterator>::difference_type __d = __n; 15726: std::__advance(__i, __d, std::__iterator_category(__i)); 15726: } 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] [[__gnu__::__always_inline__]] 15726: inline constexpr _InputIterator 15726: next(_InputIterator __x, typename 15726: iterator_traits<_InputIterator>::difference_type __n = 1) 15726: { 15726: 15726: 15726: std::advance(__x, __n); 15726: return __x; 15726: } 15726: 15726: template 15726: [[__nodiscard__]] [[__gnu__::__always_inline__]] 15726: inline constexpr _BidirectionalIterator 15726: prev(_BidirectionalIterator __x, typename 15726: iterator_traits<_BidirectionalIterator>::difference_type __n = 1) 15726: { 15726: 15726: 15726: 15726: std::advance(__x, -__n); 15726: return __x; 15726: } 15726: 15726: 15726: 15726: 15726: } 15726: # 67 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 15726: # 1 "/usr/include/c++/13/bits/stl_iterator.h" 1 3 15726: # 67 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: # 1 "/usr/include/c++/13/bits/ptr_traits.h" 1 3 15726: # 49 "/usr/include/c++/13/bits/ptr_traits.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: class __undefined; 15726: 15726: 15726: 15726: template 15726: struct __get_first_arg 15726: { using type = __undefined; }; 15726: 15726: template class _SomeTemplate, typename _Tp, 15726: typename... _Types> 15726: struct __get_first_arg<_SomeTemplate<_Tp, _Types...>> 15726: { using type = _Tp; }; 15726: 15726: 15726: 15726: template 15726: struct __replace_first_arg 15726: { }; 15726: 15726: template class _SomeTemplate, typename _Up, 15726: typename _Tp, typename... _Types> 15726: struct __replace_first_arg<_SomeTemplate<_Tp, _Types...>, _Up> 15726: { using type = _SomeTemplate<_Up, _Types...>; }; 15726: 15726: 15726: template 15726: struct __ptr_traits_elem : __get_first_arg<_Ptr> 15726: { }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct __ptr_traits_elem<_Ptr, __void_t> 15726: { using type = typename _Ptr::element_type; }; 15726: 15726: 15726: template 15726: using __ptr_traits_elem_t = typename __ptr_traits_elem<_Ptr>::type; 15726: 15726: 15726: 15726: 15726: template::value> 15726: struct __ptr_traits_ptr_to 15726: { 15726: using pointer = _Ptr; 15726: using element_type = _Elt; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: static pointer 15726: pointer_to(element_type& __r) 15726: 15726: 15726: 15726: 15726: 15726: { return pointer::pointer_to(__r); } 15726: }; 15726: 15726: 15726: template 15726: struct __ptr_traits_ptr_to<_Ptr, _Elt, true> 15726: { }; 15726: 15726: 15726: template 15726: struct __ptr_traits_ptr_to<_Tp*, _Tp, false> 15726: { 15726: using pointer = _Tp*; 15726: using element_type = _Tp; 15726: 15726: 15726: 15726: 15726: 15726: 15726: static pointer 15726: pointer_to(element_type& __r) noexcept 15726: { return std::addressof(__r); } 15726: }; 15726: 15726: template 15726: struct __ptr_traits_impl : __ptr_traits_ptr_to<_Ptr, _Elt> 15726: { 15726: private: 15726: template 15726: using __diff_t = typename _Tp::difference_type; 15726: 15726: template 15726: using __rebind = __type_identity>; 15726: 15726: public: 15726: 15726: using pointer = _Ptr; 15726: 15726: 15726: using element_type = _Elt; 15726: 15726: 15726: using difference_type = __detected_or_t; 15726: 15726: 15726: template 15726: using rebind = typename __detected_or_t<__replace_first_arg<_Ptr, _Up>, 15726: __rebind, _Ptr, _Up>::type; 15726: }; 15726: 15726: 15726: 15726: template 15726: struct __ptr_traits_impl<_Ptr, __undefined> 15726: { }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct pointer_traits : __ptr_traits_impl<_Ptr, __ptr_traits_elem_t<_Ptr>> 15726: { }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct pointer_traits<_Tp*> : __ptr_traits_ptr_to<_Tp*, _Tp> 15726: { 15726: 15726: typedef _Tp* pointer; 15726: 15726: typedef _Tp element_type; 15726: 15726: typedef ptrdiff_t difference_type; 15726: 15726: template using rebind = _Up*; 15726: }; 15726: 15726: 15726: template 15726: using __ptr_rebind = typename pointer_traits<_Ptr>::template rebind<_Tp>; 15726: 15726: template 15726: constexpr _Tp* 15726: __to_address(_Tp* __ptr) noexcept 15726: { 15726: static_assert(!std::is_function<_Tp>::value, "not a function pointer"); 15726: return __ptr; 15726: } 15726: 15726: 15726: template 15726: constexpr typename std::pointer_traits<_Ptr>::element_type* 15726: __to_address(const _Ptr& __ptr) 15726: { return std::__to_address(__ptr.operator->()); } 15726: # 266 "/usr/include/c++/13/bits/ptr_traits.h" 3 15726: 15726: } 15726: # 68 "/usr/include/c++/13/bits/stl_iterator.h" 2 3 15726: # 88 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 113 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: 15726: # 113 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: # 135 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: template 15726: class reverse_iterator 15726: : public iterator::iterator_category, 15726: typename iterator_traits<_Iterator>::value_type, 15726: typename iterator_traits<_Iterator>::difference_type, 15726: typename iterator_traits<_Iterator>::pointer, 15726: typename iterator_traits<_Iterator>::reference> 15726: { 15726: template 15726: friend class reverse_iterator; 15726: # 154 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: protected: 15726: _Iterator current; 15726: 15726: typedef iterator_traits<_Iterator> __traits_type; 15726: 15726: public: 15726: typedef _Iterator iterator_type; 15726: typedef typename __traits_type::pointer pointer; 15726: 15726: typedef typename __traits_type::difference_type difference_type; 15726: typedef typename __traits_type::reference reference; 15726: # 185 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: constexpr 15726: reverse_iterator() 15726: noexcept(noexcept(_Iterator())) 15726: : current() 15726: { } 15726: 15726: 15726: 15726: 15726: explicit constexpr 15726: reverse_iterator(iterator_type __x) 15726: noexcept(noexcept(_Iterator(__x))) 15726: : current(__x) 15726: { } 15726: 15726: 15726: 15726: 15726: constexpr 15726: reverse_iterator(const reverse_iterator& __x) 15726: noexcept(noexcept(_Iterator(__x.current))) 15726: : current(__x.current) 15726: { } 15726: 15726: 15726: reverse_iterator& operator=(const reverse_iterator&) = default; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: 15726: 15726: constexpr 15726: reverse_iterator(const reverse_iterator<_Iter>& __x) 15726: noexcept(noexcept(_Iterator(__x.current))) 15726: : current(__x.current) 15726: { } 15726: 15726: 15726: template 15726: 15726: 15726: 15726: 15726: constexpr 15726: reverse_iterator& 15726: operator=(const reverse_iterator<_Iter>& __x) 15726: noexcept(noexcept(current = __x.current)) 15726: { 15726: current = __x.current; 15726: return *this; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: constexpr iterator_type 15726: base() const 15726: noexcept(noexcept(_Iterator(current))) 15726: { return current; } 15726: # 262 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: [[__nodiscard__]] 15726: constexpr reference 15726: operator*() const 15726: { 15726: _Iterator __tmp = current; 15726: return *--__tmp; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: constexpr pointer 15726: operator->() const 15726: 15726: 15726: 15726: 15726: { 15726: 15726: 15726: _Iterator __tmp = current; 15726: --__tmp; 15726: return _S_to_pointer(__tmp); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: constexpr reverse_iterator& 15726: operator++() 15726: { 15726: --current; 15726: return *this; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: constexpr reverse_iterator 15726: operator++(int) 15726: { 15726: reverse_iterator __tmp = *this; 15726: --current; 15726: return __tmp; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: constexpr reverse_iterator& 15726: operator--() 15726: { 15726: ++current; 15726: return *this; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: constexpr reverse_iterator 15726: operator--(int) 15726: { 15726: reverse_iterator __tmp = *this; 15726: ++current; 15726: return __tmp; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: constexpr reverse_iterator 15726: operator+(difference_type __n) const 15726: { return reverse_iterator(current - __n); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: constexpr reverse_iterator& 15726: operator+=(difference_type __n) 15726: { 15726: current -= __n; 15726: return *this; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: constexpr reverse_iterator 15726: operator-(difference_type __n) const 15726: { return reverse_iterator(current + __n); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: constexpr reverse_iterator& 15726: operator-=(difference_type __n) 15726: { 15726: current += __n; 15726: return *this; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: constexpr reference 15726: operator[](difference_type __n) const 15726: { return *(*this + __n); } 15726: # 422 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: private: 15726: template 15726: static constexpr _Tp* 15726: _S_to_pointer(_Tp* __p) 15726: { return __p; } 15726: 15726: template 15726: static constexpr pointer 15726: _S_to_pointer(_Tp __t) 15726: { return __t.operator->(); } 15726: }; 15726: # 445 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator==(const reverse_iterator<_Iterator>& __x, 15726: const reverse_iterator<_Iterator>& __y) 15726: { return __x.base() == __y.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator<(const reverse_iterator<_Iterator>& __x, 15726: const reverse_iterator<_Iterator>& __y) 15726: { return __y.base() < __x.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator!=(const reverse_iterator<_Iterator>& __x, 15726: const reverse_iterator<_Iterator>& __y) 15726: { return !(__x == __y); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator>(const reverse_iterator<_Iterator>& __x, 15726: const reverse_iterator<_Iterator>& __y) 15726: { return __y < __x; } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator<=(const reverse_iterator<_Iterator>& __x, 15726: const reverse_iterator<_Iterator>& __y) 15726: { return !(__y < __x); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator>=(const reverse_iterator<_Iterator>& __x, 15726: const reverse_iterator<_Iterator>& __y) 15726: { return !(__x < __y); } 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator==(const reverse_iterator<_IteratorL>& __x, 15726: const reverse_iterator<_IteratorR>& __y) 15726: { return __x.base() == __y.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator<(const reverse_iterator<_IteratorL>& __x, 15726: const reverse_iterator<_IteratorR>& __y) 15726: { return __x.base() > __y.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator!=(const reverse_iterator<_IteratorL>& __x, 15726: const reverse_iterator<_IteratorR>& __y) 15726: { return __x.base() != __y.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator>(const reverse_iterator<_IteratorL>& __x, 15726: const reverse_iterator<_IteratorR>& __y) 15726: { return __x.base() < __y.base(); } 15726: 15726: template 15726: inline constexpr bool 15726: operator<=(const reverse_iterator<_IteratorL>& __x, 15726: const reverse_iterator<_IteratorR>& __y) 15726: { return __x.base() >= __y.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator>=(const reverse_iterator<_IteratorL>& __x, 15726: const reverse_iterator<_IteratorR>& __y) 15726: { return __x.base() <= __y.base(); } 15726: # 622 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr auto 15726: operator-(const reverse_iterator<_IteratorL>& __x, 15726: const reverse_iterator<_IteratorR>& __y) 15726: -> decltype(__y.base() - __x.base()) 15726: { return __y.base() - __x.base(); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr reverse_iterator<_Iterator> 15726: operator+(typename reverse_iterator<_Iterator>::difference_type __n, 15726: const reverse_iterator<_Iterator>& __x) 15726: { return reverse_iterator<_Iterator>(__x.base() - __n); } 15726: 15726: 15726: 15726: template 15726: inline constexpr reverse_iterator<_Iterator> 15726: __make_reverse_iterator(_Iterator __i) 15726: { return reverse_iterator<_Iterator>(__i); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr reverse_iterator<_Iterator> 15726: make_reverse_iterator(_Iterator __i) 15726: { return reverse_iterator<_Iterator>(__i); } 15726: # 666 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: template 15726: 15726: auto 15726: __niter_base(reverse_iterator<_Iterator> __it) 15726: -> decltype(__make_reverse_iterator(__niter_base(__it.base()))) 15726: { return __make_reverse_iterator(__niter_base(__it.base())); } 15726: 15726: template 15726: struct __is_move_iterator > 15726: : __is_move_iterator<_Iterator> 15726: { }; 15726: 15726: template 15726: 15726: auto 15726: __miter_base(reverse_iterator<_Iterator> __it) 15726: -> decltype(__make_reverse_iterator(__miter_base(__it.base()))) 15726: { return __make_reverse_iterator(__miter_base(__it.base())); } 15726: # 697 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: template 15726: class back_insert_iterator 15726: : public iterator 15726: { 15726: protected: 15726: _Container* container; 15726: 15726: public: 15726: 15726: typedef _Container container_type; 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: back_insert_iterator(_Container& __x) 15726: : container(std::__addressof(__x)) { } 15726: # 735 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: 15726: back_insert_iterator& 15726: operator=(const typename _Container::value_type& __value) 15726: { 15726: container->push_back(__value); 15726: return *this; 15726: } 15726: 15726: 15726: back_insert_iterator& 15726: operator=(typename _Container::value_type&& __value) 15726: { 15726: container->push_back(std::move(__value)); 15726: return *this; 15726: } 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: back_insert_iterator& 15726: operator*() 15726: { return *this; } 15726: 15726: 15726: 15726: back_insert_iterator& 15726: operator++() 15726: { return *this; } 15726: 15726: 15726: 15726: back_insert_iterator 15726: operator++(int) 15726: { return *this; } 15726: }; 15726: # 782 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline back_insert_iterator<_Container> 15726: back_inserter(_Container& __x) 15726: { return back_insert_iterator<_Container>(__x); } 15726: # 798 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: template 15726: class front_insert_iterator 15726: : public iterator 15726: { 15726: protected: 15726: _Container* container; 15726: 15726: public: 15726: 15726: typedef _Container container_type; 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: front_insert_iterator(_Container& __x) 15726: : container(std::__addressof(__x)) { } 15726: # 836 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: 15726: front_insert_iterator& 15726: operator=(const typename _Container::value_type& __value) 15726: { 15726: container->push_front(__value); 15726: return *this; 15726: } 15726: 15726: 15726: front_insert_iterator& 15726: operator=(typename _Container::value_type&& __value) 15726: { 15726: container->push_front(std::move(__value)); 15726: return *this; 15726: } 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: front_insert_iterator& 15726: operator*() 15726: { return *this; } 15726: 15726: 15726: 15726: front_insert_iterator& 15726: operator++() 15726: { return *this; } 15726: 15726: 15726: 15726: front_insert_iterator 15726: operator++(int) 15726: { return *this; } 15726: }; 15726: # 883 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline front_insert_iterator<_Container> 15726: front_inserter(_Container& __x) 15726: { return front_insert_iterator<_Container>(__x); } 15726: # 903 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: template 15726: class insert_iterator 15726: : public iterator 15726: { 15726: 15726: 15726: 15726: typedef typename _Container::iterator _Iter; 15726: 15726: protected: 15726: _Container* container; 15726: _Iter iter; 15726: 15726: public: 15726: 15726: typedef _Container container_type; 15726: # 928 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: 15726: insert_iterator(_Container& __x, _Iter __i) 15726: : container(std::__addressof(__x)), iter(__i) {} 15726: # 964 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: 15726: insert_iterator& 15726: operator=(const typename _Container::value_type& __value) 15726: { 15726: iter = container->insert(iter, __value); 15726: ++iter; 15726: return *this; 15726: } 15726: 15726: 15726: insert_iterator& 15726: operator=(typename _Container::value_type&& __value) 15726: { 15726: iter = container->insert(iter, std::move(__value)); 15726: ++iter; 15726: return *this; 15726: } 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: insert_iterator& 15726: operator*() 15726: { return *this; } 15726: 15726: 15726: 15726: insert_iterator& 15726: operator++() 15726: { return *this; } 15726: 15726: 15726: 15726: insert_iterator& 15726: operator++(int) 15726: { return *this; } 15726: }; 15726: 15726: #pragma GCC diagnostic pop 15726: # 1023 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline insert_iterator<_Container> 15726: inserter(_Container& __x, typename _Container::iterator __i) 15726: { return insert_iterator<_Container>(__x, __i); } 15726: 15726: 15726: 15726: 15726: 15726: } 15726: 15726: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 1046 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: template 15726: class __normal_iterator 15726: { 15726: protected: 15726: _Iterator _M_current; 15726: 15726: typedef std::iterator_traits<_Iterator> __traits_type; 15726: 15726: 15726: template 15726: using __convertible_from 15726: = std::__enable_if_t::value>; 15726: 15726: 15726: public: 15726: typedef _Iterator iterator_type; 15726: typedef typename __traits_type::iterator_category iterator_category; 15726: typedef typename __traits_type::value_type value_type; 15726: typedef typename __traits_type::difference_type difference_type; 15726: typedef typename __traits_type::reference reference; 15726: typedef typename __traits_type::pointer pointer; 15726: 15726: 15726: 15726: 15726: 15726: constexpr __normal_iterator() noexcept 15726: : _M_current(_Iterator()) { } 15726: 15726: explicit 15726: __normal_iterator(const _Iterator& __i) noexcept 15726: : _M_current(__i) { } 15726: 15726: 15726: 15726: template> 15726: 15726: __normal_iterator(const __normal_iterator<_Iter, _Container>& __i) 15726: noexcept 15726: # 1094 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: : _M_current(__i.base()) { } 15726: 15726: 15726: 15726: reference 15726: operator*() const noexcept 15726: { return *_M_current; } 15726: 15726: 15726: pointer 15726: operator->() const noexcept 15726: { return _M_current; } 15726: 15726: 15726: __normal_iterator& 15726: operator++() noexcept 15726: { 15726: ++_M_current; 15726: return *this; 15726: } 15726: 15726: 15726: __normal_iterator 15726: operator++(int) noexcept 15726: { return __normal_iterator(_M_current++); } 15726: 15726: 15726: 15726: __normal_iterator& 15726: operator--() noexcept 15726: { 15726: --_M_current; 15726: return *this; 15726: } 15726: 15726: 15726: __normal_iterator 15726: operator--(int) noexcept 15726: { return __normal_iterator(_M_current--); } 15726: 15726: 15726: 15726: reference 15726: operator[](difference_type __n) const noexcept 15726: { return _M_current[__n]; } 15726: 15726: 15726: __normal_iterator& 15726: operator+=(difference_type __n) noexcept 15726: { _M_current += __n; return *this; } 15726: 15726: 15726: __normal_iterator 15726: operator+(difference_type __n) const noexcept 15726: { return __normal_iterator(_M_current + __n); } 15726: 15726: 15726: __normal_iterator& 15726: operator-=(difference_type __n) noexcept 15726: { _M_current -= __n; return *this; } 15726: 15726: 15726: __normal_iterator 15726: operator-(difference_type __n) const noexcept 15726: { return __normal_iterator(_M_current - __n); } 15726: 15726: 15726: const _Iterator& 15726: base() const noexcept 15726: { return _M_current; } 15726: }; 15726: # 1214 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator==(const __normal_iterator<_IteratorL, _Container>& __lhs, 15726: const __normal_iterator<_IteratorR, _Container>& __rhs) 15726: noexcept 15726: { return __lhs.base() == __rhs.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator==(const __normal_iterator<_Iterator, _Container>& __lhs, 15726: const __normal_iterator<_Iterator, _Container>& __rhs) 15726: noexcept 15726: { return __lhs.base() == __rhs.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs, 15726: const __normal_iterator<_IteratorR, _Container>& __rhs) 15726: noexcept 15726: { return __lhs.base() != __rhs.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator!=(const __normal_iterator<_Iterator, _Container>& __lhs, 15726: const __normal_iterator<_Iterator, _Container>& __rhs) 15726: noexcept 15726: { return __lhs.base() != __rhs.base(); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<(const __normal_iterator<_IteratorL, _Container>& __lhs, 15726: const __normal_iterator<_IteratorR, _Container>& __rhs) 15726: noexcept 15726: { return __lhs.base() < __rhs.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<(const __normal_iterator<_Iterator, _Container>& __lhs, 15726: const __normal_iterator<_Iterator, _Container>& __rhs) 15726: noexcept 15726: { return __lhs.base() < __rhs.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator>(const __normal_iterator<_IteratorL, _Container>& __lhs, 15726: const __normal_iterator<_IteratorR, _Container>& __rhs) 15726: noexcept 15726: { return __lhs.base() > __rhs.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator>(const __normal_iterator<_Iterator, _Container>& __lhs, 15726: const __normal_iterator<_Iterator, _Container>& __rhs) 15726: noexcept 15726: { return __lhs.base() > __rhs.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs, 15726: const __normal_iterator<_IteratorR, _Container>& __rhs) 15726: noexcept 15726: { return __lhs.base() <= __rhs.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<=(const __normal_iterator<_Iterator, _Container>& __lhs, 15726: const __normal_iterator<_Iterator, _Container>& __rhs) 15726: noexcept 15726: { return __lhs.base() <= __rhs.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs, 15726: const __normal_iterator<_IteratorR, _Container>& __rhs) 15726: noexcept 15726: { return __lhs.base() >= __rhs.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator>=(const __normal_iterator<_Iterator, _Container>& __lhs, 15726: const __normal_iterator<_Iterator, _Container>& __rhs) 15726: noexcept 15726: { return __lhs.base() >= __rhs.base(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: 15726: [[__nodiscard__]] 15726: inline auto 15726: operator-(const __normal_iterator<_IteratorL, _Container>& __lhs, 15726: const __normal_iterator<_IteratorR, _Container>& __rhs) noexcept 15726: -> decltype(__lhs.base() - __rhs.base()) 15726: 15726: 15726: 15726: 15726: 15726: { return __lhs.base() - __rhs.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline typename __normal_iterator<_Iterator, _Container>::difference_type 15726: operator-(const __normal_iterator<_Iterator, _Container>& __lhs, 15726: const __normal_iterator<_Iterator, _Container>& __rhs) 15726: noexcept 15726: { return __lhs.base() - __rhs.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline __normal_iterator<_Iterator, _Container> 15726: operator+(typename __normal_iterator<_Iterator, _Container>::difference_type 15726: __n, const __normal_iterator<_Iterator, _Container>& __i) 15726: noexcept 15726: { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); } 15726: 15726: 15726: } 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: template 15726: 15726: _Iterator 15726: __niter_base(__gnu_cxx::__normal_iterator<_Iterator, _Container> __it) 15726: noexcept(std::is_nothrow_copy_constructible<_Iterator>::value) 15726: { return __it.base(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: constexpr auto 15726: __to_address(const __gnu_cxx::__normal_iterator<_Iterator, 15726: _Container>& __it) noexcept 15726: -> decltype(std::__to_address(__it.base())) 15726: { return std::__to_address(__it.base()); } 15726: # 1421 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: namespace __detail 15726: { 15726: # 1437 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: } 15726: # 1448 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: template 15726: class move_iterator 15726: 15726: 15726: 15726: { 15726: _Iterator _M_current; 15726: 15726: using __traits_type = iterator_traits<_Iterator>; 15726: 15726: using __base_ref = typename __traits_type::reference; 15726: 15726: 15726: template 15726: friend class move_iterator; 15726: # 1487 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: public: 15726: using iterator_type = _Iterator; 15726: # 1501 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: typedef typename __traits_type::iterator_category iterator_category; 15726: typedef typename __traits_type::value_type value_type; 15726: typedef typename __traits_type::difference_type difference_type; 15726: 15726: typedef _Iterator pointer; 15726: 15726: 15726: using reference 15726: = __conditional_t::value, 15726: typename remove_reference<__base_ref>::type&&, 15726: __base_ref>; 15726: 15726: 15726: constexpr 15726: move_iterator() 15726: : _M_current() { } 15726: 15726: explicit constexpr 15726: move_iterator(iterator_type __i) 15726: : _M_current(std::move(__i)) { } 15726: 15726: template 15726: 15726: 15726: 15726: constexpr 15726: move_iterator(const move_iterator<_Iter>& __i) 15726: : _M_current(__i._M_current) { } 15726: 15726: template 15726: 15726: 15726: 15726: 15726: constexpr 15726: move_iterator& operator=(const move_iterator<_Iter>& __i) 15726: { 15726: _M_current = __i._M_current; 15726: return *this; 15726: } 15726: 15726: 15726: [[__nodiscard__]] 15726: constexpr iterator_type 15726: base() const 15726: { return _M_current; } 15726: # 1559 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: [[__nodiscard__]] 15726: constexpr reference 15726: operator*() const 15726: 15726: 15726: 15726: { return static_cast(*_M_current); } 15726: 15726: 15726: [[__nodiscard__]] 15726: constexpr pointer 15726: operator->() const 15726: { return _M_current; } 15726: 15726: constexpr move_iterator& 15726: operator++() 15726: { 15726: ++_M_current; 15726: return *this; 15726: } 15726: 15726: constexpr move_iterator 15726: operator++(int) 15726: { 15726: move_iterator __tmp = *this; 15726: ++_M_current; 15726: return __tmp; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: constexpr move_iterator& 15726: operator--() 15726: { 15726: --_M_current; 15726: return *this; 15726: } 15726: 15726: constexpr move_iterator 15726: operator--(int) 15726: { 15726: move_iterator __tmp = *this; 15726: --_M_current; 15726: return __tmp; 15726: } 15726: 15726: [[__nodiscard__]] 15726: constexpr move_iterator 15726: operator+(difference_type __n) const 15726: { return move_iterator(_M_current + __n); } 15726: 15726: constexpr move_iterator& 15726: operator+=(difference_type __n) 15726: { 15726: _M_current += __n; 15726: return *this; 15726: } 15726: 15726: [[__nodiscard__]] 15726: constexpr move_iterator 15726: operator-(difference_type __n) const 15726: { return move_iterator(_M_current - __n); } 15726: 15726: constexpr move_iterator& 15726: operator-=(difference_type __n) 15726: { 15726: _M_current -= __n; 15726: return *this; 15726: } 15726: 15726: [[__nodiscard__]] 15726: constexpr reference 15726: operator[](difference_type __n) const 15726: 15726: 15726: 15726: { return std::move(_M_current[__n]); } 15726: # 1673 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: }; 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator==(const move_iterator<_IteratorL>& __x, 15726: const move_iterator<_IteratorR>& __y) 15726: 15726: 15726: 15726: { return __x.base() == __y.base(); } 15726: # 1694 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator!=(const move_iterator<_IteratorL>& __x, 15726: const move_iterator<_IteratorR>& __y) 15726: { return !(__x == __y); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator<(const move_iterator<_IteratorL>& __x, 15726: const move_iterator<_IteratorR>& __y) 15726: 15726: 15726: 15726: { return __x.base() < __y.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator<=(const move_iterator<_IteratorL>& __x, 15726: const move_iterator<_IteratorR>& __y) 15726: 15726: 15726: 15726: { return !(__y < __x); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator>(const move_iterator<_IteratorL>& __x, 15726: const move_iterator<_IteratorR>& __y) 15726: 15726: 15726: 15726: { return __y < __x; } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator>=(const move_iterator<_IteratorL>& __x, 15726: const move_iterator<_IteratorR>& __y) 15726: 15726: 15726: 15726: { return !(__x < __y); } 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator==(const move_iterator<_Iterator>& __x, 15726: const move_iterator<_Iterator>& __y) 15726: { return __x.base() == __y.base(); } 15726: # 1760 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator!=(const move_iterator<_Iterator>& __x, 15726: const move_iterator<_Iterator>& __y) 15726: { return !(__x == __y); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator<(const move_iterator<_Iterator>& __x, 15726: const move_iterator<_Iterator>& __y) 15726: { return __x.base() < __y.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator<=(const move_iterator<_Iterator>& __x, 15726: const move_iterator<_Iterator>& __y) 15726: { return !(__y < __x); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator>(const move_iterator<_Iterator>& __x, 15726: const move_iterator<_Iterator>& __y) 15726: { return __y < __x; } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr bool 15726: operator>=(const move_iterator<_Iterator>& __x, 15726: const move_iterator<_Iterator>& __y) 15726: { return !(__x < __y); } 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr auto 15726: operator-(const move_iterator<_IteratorL>& __x, 15726: const move_iterator<_IteratorR>& __y) 15726: -> decltype(__x.base() - __y.base()) 15726: { return __x.base() - __y.base(); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr move_iterator<_Iterator> 15726: operator+(typename move_iterator<_Iterator>::difference_type __n, 15726: const move_iterator<_Iterator>& __x) 15726: { return __x + __n; } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr move_iterator<_Iterator> 15726: make_move_iterator(_Iterator __i) 15726: { return move_iterator<_Iterator>(std::move(__i)); } 15726: 15726: template::value_type>::value, 15726: _Iterator, move_iterator<_Iterator>>> 15726: inline constexpr _ReturnType 15726: __make_move_if_noexcept_iterator(_Iterator __i) 15726: { return _ReturnType(__i); } 15726: 15726: 15726: 15726: template::value, 15726: const _Tp*, move_iterator<_Tp*>>> 15726: inline constexpr _ReturnType 15726: __make_move_if_noexcept_iterator(_Tp* __i) 15726: { return _ReturnType(__i); } 15726: # 2951 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: template 15726: 15726: auto 15726: __niter_base(move_iterator<_Iterator> __it) 15726: -> decltype(make_move_iterator(__niter_base(__it.base()))) 15726: { return make_move_iterator(__niter_base(__it.base())); } 15726: 15726: template 15726: struct __is_move_iterator > 15726: { 15726: enum { __value = 1 }; 15726: typedef __true_type __type; 15726: }; 15726: 15726: template 15726: 15726: auto 15726: __miter_base(move_iterator<_Iterator> __it) 15726: -> decltype(__miter_base(__it.base())) 15726: { return __miter_base(__it.base()); } 15726: # 2983 "/usr/include/c++/13/bits/stl_iterator.h" 3 15726: template 15726: using __iter_key_t = remove_const_t< 15726: typename iterator_traits<_InputIterator>::value_type::first_type>; 15726: 15726: template 15726: using __iter_val_t 15726: = typename iterator_traits<_InputIterator>::value_type::second_type; 15726: 15726: template 15726: struct pair; 15726: 15726: template 15726: using __iter_to_alloc_t 15726: = pair, __iter_val_t<_InputIterator>>; 15726: 15726: 15726: 15726: } 15726: # 68 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 15726: 15726: # 1 "/usr/include/c++/13/debug/debug.h" 1 3 15726: # 48 "/usr/include/c++/13/debug/debug.h" 3 15726: namespace std 15726: { 15726: namespace __debug { } 15726: } 15726: 15726: 15726: 15726: 15726: namespace __gnu_debug 15726: { 15726: using namespace std::__debug; 15726: 15726: template 15726: struct _Safe_iterator; 15726: } 15726: # 70 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 15726: 15726: # 1 "/usr/include/c++/13/bits/predefined_ops.h" 1 3 15726: # 35 "/usr/include/c++/13/bits/predefined_ops.h" 3 15726: namespace __gnu_cxx 15726: { 15726: namespace __ops 15726: { 15726: struct _Iter_less_iter 15726: { 15726: template 15726: constexpr 15726: bool 15726: operator()(_Iterator1 __it1, _Iterator2 __it2) const 15726: { return *__it1 < *__it2; } 15726: }; 15726: 15726: constexpr 15726: inline _Iter_less_iter 15726: __iter_less_iter() 15726: { return _Iter_less_iter(); } 15726: 15726: struct _Iter_less_val 15726: { 15726: 15726: constexpr _Iter_less_val() = default; 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: _Iter_less_val(_Iter_less_iter) { } 15726: 15726: template 15726: 15726: bool 15726: operator()(_Iterator __it, _Value& __val) const 15726: { return *__it < __val; } 15726: }; 15726: 15726: 15726: inline _Iter_less_val 15726: __iter_less_val() 15726: { return _Iter_less_val(); } 15726: 15726: 15726: inline _Iter_less_val 15726: __iter_comp_val(_Iter_less_iter) 15726: { return _Iter_less_val(); } 15726: 15726: struct _Val_less_iter 15726: { 15726: 15726: constexpr _Val_less_iter() = default; 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: _Val_less_iter(_Iter_less_iter) { } 15726: 15726: template 15726: 15726: bool 15726: operator()(_Value& __val, _Iterator __it) const 15726: { return __val < *__it; } 15726: }; 15726: 15726: 15726: inline _Val_less_iter 15726: __val_less_iter() 15726: { return _Val_less_iter(); } 15726: 15726: 15726: inline _Val_less_iter 15726: __val_comp_iter(_Iter_less_iter) 15726: { return _Val_less_iter(); } 15726: 15726: struct _Iter_equal_to_iter 15726: { 15726: template 15726: 15726: bool 15726: operator()(_Iterator1 __it1, _Iterator2 __it2) const 15726: { return *__it1 == *__it2; } 15726: }; 15726: 15726: 15726: inline _Iter_equal_to_iter 15726: __iter_equal_to_iter() 15726: { return _Iter_equal_to_iter(); } 15726: 15726: struct _Iter_equal_to_val 15726: { 15726: template 15726: 15726: bool 15726: operator()(_Iterator __it, _Value& __val) const 15726: { return *__it == __val; } 15726: }; 15726: 15726: 15726: inline _Iter_equal_to_val 15726: __iter_equal_to_val() 15726: { return _Iter_equal_to_val(); } 15726: 15726: 15726: inline _Iter_equal_to_val 15726: __iter_comp_val(_Iter_equal_to_iter) 15726: { return _Iter_equal_to_val(); } 15726: 15726: template 15726: struct _Iter_comp_iter 15726: { 15726: _Compare _M_comp; 15726: 15726: explicit constexpr 15726: _Iter_comp_iter(_Compare __comp) 15726: : _M_comp(std::move(__comp)) 15726: { } 15726: 15726: template 15726: constexpr 15726: bool 15726: operator()(_Iterator1 __it1, _Iterator2 __it2) 15726: { return bool(_M_comp(*__it1, *__it2)); } 15726: }; 15726: 15726: template 15726: constexpr 15726: inline _Iter_comp_iter<_Compare> 15726: __iter_comp_iter(_Compare __comp) 15726: { return _Iter_comp_iter<_Compare>(std::move(__comp)); } 15726: 15726: template 15726: struct _Iter_comp_val 15726: { 15726: _Compare _M_comp; 15726: 15726: 15726: explicit 15726: _Iter_comp_val(_Compare __comp) 15726: : _M_comp(std::move(__comp)) 15726: { } 15726: 15726: 15726: explicit 15726: _Iter_comp_val(const _Iter_comp_iter<_Compare>& __comp) 15726: : _M_comp(__comp._M_comp) 15726: { } 15726: 15726: 15726: 15726: explicit 15726: _Iter_comp_val(_Iter_comp_iter<_Compare>&& __comp) 15726: : _M_comp(std::move(__comp._M_comp)) 15726: { } 15726: 15726: 15726: template 15726: 15726: bool 15726: operator()(_Iterator __it, _Value& __val) 15726: { return bool(_M_comp(*__it, __val)); } 15726: }; 15726: 15726: template 15726: 15726: inline _Iter_comp_val<_Compare> 15726: __iter_comp_val(_Compare __comp) 15726: { return _Iter_comp_val<_Compare>(std::move(__comp)); } 15726: 15726: template 15726: 15726: inline _Iter_comp_val<_Compare> 15726: __iter_comp_val(_Iter_comp_iter<_Compare> __comp) 15726: { return _Iter_comp_val<_Compare>(std::move(__comp)); } 15726: 15726: template 15726: struct _Val_comp_iter 15726: { 15726: _Compare _M_comp; 15726: 15726: 15726: explicit 15726: _Val_comp_iter(_Compare __comp) 15726: : _M_comp(std::move(__comp)) 15726: { } 15726: 15726: 15726: explicit 15726: _Val_comp_iter(const _Iter_comp_iter<_Compare>& __comp) 15726: : _M_comp(__comp._M_comp) 15726: { } 15726: 15726: 15726: 15726: explicit 15726: _Val_comp_iter(_Iter_comp_iter<_Compare>&& __comp) 15726: : _M_comp(std::move(__comp._M_comp)) 15726: { } 15726: 15726: 15726: template 15726: 15726: bool 15726: operator()(_Value& __val, _Iterator __it) 15726: { return bool(_M_comp(__val, *__it)); } 15726: }; 15726: 15726: template 15726: 15726: inline _Val_comp_iter<_Compare> 15726: __val_comp_iter(_Compare __comp) 15726: { return _Val_comp_iter<_Compare>(std::move(__comp)); } 15726: 15726: template 15726: 15726: inline _Val_comp_iter<_Compare> 15726: __val_comp_iter(_Iter_comp_iter<_Compare> __comp) 15726: { return _Val_comp_iter<_Compare>(std::move(__comp)); } 15726: 15726: template 15726: struct _Iter_equals_val 15726: { 15726: _Value& _M_value; 15726: 15726: 15726: explicit 15726: _Iter_equals_val(_Value& __value) 15726: : _M_value(__value) 15726: { } 15726: 15726: template 15726: 15726: bool 15726: operator()(_Iterator __it) 15726: { return *__it == _M_value; } 15726: }; 15726: 15726: template 15726: 15726: inline _Iter_equals_val<_Value> 15726: __iter_equals_val(_Value& __val) 15726: { return _Iter_equals_val<_Value>(__val); } 15726: 15726: template 15726: struct _Iter_equals_iter 15726: { 15726: _Iterator1 _M_it1; 15726: 15726: 15726: explicit 15726: _Iter_equals_iter(_Iterator1 __it1) 15726: : _M_it1(__it1) 15726: { } 15726: 15726: template 15726: 15726: bool 15726: operator()(_Iterator2 __it2) 15726: { return *__it2 == *_M_it1; } 15726: }; 15726: 15726: template 15726: 15726: inline _Iter_equals_iter<_Iterator> 15726: __iter_comp_iter(_Iter_equal_to_iter, _Iterator __it) 15726: { return _Iter_equals_iter<_Iterator>(__it); } 15726: 15726: template 15726: struct _Iter_pred 15726: { 15726: _Predicate _M_pred; 15726: 15726: 15726: explicit 15726: _Iter_pred(_Predicate __pred) 15726: : _M_pred(std::move(__pred)) 15726: { } 15726: 15726: template 15726: 15726: bool 15726: operator()(_Iterator __it) 15726: { return bool(_M_pred(*__it)); } 15726: }; 15726: 15726: template 15726: 15726: inline _Iter_pred<_Predicate> 15726: __pred_iter(_Predicate __pred) 15726: { return _Iter_pred<_Predicate>(std::move(__pred)); } 15726: 15726: template 15726: struct _Iter_comp_to_val 15726: { 15726: _Compare _M_comp; 15726: _Value& _M_value; 15726: 15726: 15726: _Iter_comp_to_val(_Compare __comp, _Value& __value) 15726: : _M_comp(std::move(__comp)), _M_value(__value) 15726: { } 15726: 15726: template 15726: 15726: bool 15726: operator()(_Iterator __it) 15726: { return bool(_M_comp(*__it, _M_value)); } 15726: }; 15726: 15726: template 15726: _Iter_comp_to_val<_Compare, _Value> 15726: 15726: __iter_comp_val(_Compare __comp, _Value &__val) 15726: { 15726: return _Iter_comp_to_val<_Compare, _Value>(std::move(__comp), __val); 15726: } 15726: 15726: template 15726: struct _Iter_comp_to_iter 15726: { 15726: _Compare _M_comp; 15726: _Iterator1 _M_it1; 15726: 15726: 15726: _Iter_comp_to_iter(_Compare __comp, _Iterator1 __it1) 15726: : _M_comp(std::move(__comp)), _M_it1(__it1) 15726: { } 15726: 15726: template 15726: 15726: bool 15726: operator()(_Iterator2 __it2) 15726: { return bool(_M_comp(*__it2, *_M_it1)); } 15726: }; 15726: 15726: template 15726: 15726: inline _Iter_comp_to_iter<_Compare, _Iterator> 15726: __iter_comp_iter(_Iter_comp_iter<_Compare> __comp, _Iterator __it) 15726: { 15726: return _Iter_comp_to_iter<_Compare, _Iterator>( 15726: std::move(__comp._M_comp), __it); 15726: } 15726: 15726: template 15726: struct _Iter_negate 15726: { 15726: _Predicate _M_pred; 15726: 15726: 15726: explicit 15726: _Iter_negate(_Predicate __pred) 15726: : _M_pred(std::move(__pred)) 15726: { } 15726: 15726: template 15726: 15726: bool 15726: operator()(_Iterator __it) 15726: { return !bool(_M_pred(*__it)); } 15726: }; 15726: 15726: template 15726: 15726: inline _Iter_negate<_Predicate> 15726: __negate(_Iter_pred<_Predicate> __pred) 15726: { return _Iter_negate<_Predicate>(std::move(__pred._M_pred)); } 15726: 15726: } 15726: } 15726: # 72 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bit" 1 3 15726: # 32 "/usr/include/c++/13/bit" 3 15726: 15726: # 33 "/usr/include/c++/13/bit" 3 15726: # 55 "/usr/include/c++/13/bit" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 149 "/usr/include/c++/13/bit" 3 15726: template 15726: constexpr _Tp 15726: __rotl(_Tp __x, int __s) noexcept 15726: { 15726: constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits; 15726: if constexpr ((_Nd & (_Nd - 1)) == 0) 15726: { 15726: 15726: 15726: constexpr unsigned __uNd = _Nd; 15726: const unsigned __r = __s; 15726: return (__x << (__r % __uNd)) | (__x >> ((-__r) % __uNd)); 15726: } 15726: const int __r = __s % _Nd; 15726: if (__r == 0) 15726: return __x; 15726: else if (__r > 0) 15726: return (__x << __r) | (__x >> ((_Nd - __r) % _Nd)); 15726: else 15726: return (__x >> -__r) | (__x << ((_Nd + __r) % _Nd)); 15726: } 15726: 15726: template 15726: constexpr _Tp 15726: __rotr(_Tp __x, int __s) noexcept 15726: { 15726: constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits; 15726: if constexpr ((_Nd & (_Nd - 1)) == 0) 15726: { 15726: 15726: 15726: constexpr unsigned __uNd = _Nd; 15726: const unsigned __r = __s; 15726: return (__x >> (__r % __uNd)) | (__x << ((-__r) % __uNd)); 15726: } 15726: const int __r = __s % _Nd; 15726: if (__r == 0) 15726: return __x; 15726: else if (__r > 0) 15726: return (__x >> __r) | (__x << ((_Nd - __r) % _Nd)); 15726: else 15726: return (__x << -__r) | (__x >> ((_Nd + __r) % _Nd)); 15726: } 15726: 15726: template 15726: constexpr int 15726: __countl_zero(_Tp __x) noexcept 15726: { 15726: using __gnu_cxx::__int_traits; 15726: constexpr auto _Nd = __int_traits<_Tp>::__digits; 15726: 15726: if (__x == 0) 15726: return _Nd; 15726: 15726: constexpr auto _Nd_ull = __int_traits::__digits; 15726: constexpr auto _Nd_ul = __int_traits::__digits; 15726: constexpr auto _Nd_u = __int_traits::__digits; 15726: 15726: if constexpr (_Nd <= _Nd_u) 15726: { 15726: constexpr int __diff = _Nd_u - _Nd; 15726: return __builtin_clz(__x) - __diff; 15726: } 15726: else if constexpr (_Nd <= _Nd_ul) 15726: { 15726: constexpr int __diff = _Nd_ul - _Nd; 15726: return __builtin_clzl(__x) - __diff; 15726: } 15726: else if constexpr (_Nd <= _Nd_ull) 15726: { 15726: constexpr int __diff = _Nd_ull - _Nd; 15726: return __builtin_clzll(__x) - __diff; 15726: } 15726: else 15726: { 15726: static_assert(_Nd <= (2 * _Nd_ull), 15726: "Maximum supported integer size is 128-bit"); 15726: 15726: unsigned long long __high = __x >> _Nd_ull; 15726: if (__high != 0) 15726: { 15726: constexpr int __diff = (2 * _Nd_ull) - _Nd; 15726: return __builtin_clzll(__high) - __diff; 15726: } 15726: constexpr auto __max_ull = __int_traits::__max; 15726: unsigned long long __low = __x & __max_ull; 15726: return (_Nd - _Nd_ull) + __builtin_clzll(__low); 15726: } 15726: } 15726: 15726: template 15726: constexpr int 15726: __countl_one(_Tp __x) noexcept 15726: { 15726: return std::__countl_zero<_Tp>((_Tp)~__x); 15726: } 15726: 15726: template 15726: constexpr int 15726: __countr_zero(_Tp __x) noexcept 15726: { 15726: using __gnu_cxx::__int_traits; 15726: constexpr auto _Nd = __int_traits<_Tp>::__digits; 15726: 15726: if (__x == 0) 15726: return _Nd; 15726: 15726: constexpr auto _Nd_ull = __int_traits::__digits; 15726: constexpr auto _Nd_ul = __int_traits::__digits; 15726: constexpr auto _Nd_u = __int_traits::__digits; 15726: 15726: if constexpr (_Nd <= _Nd_u) 15726: return __builtin_ctz(__x); 15726: else if constexpr (_Nd <= _Nd_ul) 15726: return __builtin_ctzl(__x); 15726: else if constexpr (_Nd <= _Nd_ull) 15726: return __builtin_ctzll(__x); 15726: else 15726: { 15726: static_assert(_Nd <= (2 * _Nd_ull), 15726: "Maximum supported integer size is 128-bit"); 15726: 15726: constexpr auto __max_ull = __int_traits::__max; 15726: unsigned long long __low = __x & __max_ull; 15726: if (__low != 0) 15726: return __builtin_ctzll(__low); 15726: unsigned long long __high = __x >> _Nd_ull; 15726: return __builtin_ctzll(__high) + _Nd_ull; 15726: } 15726: } 15726: 15726: template 15726: constexpr int 15726: __countr_one(_Tp __x) noexcept 15726: { 15726: return std::__countr_zero((_Tp)~__x); 15726: } 15726: 15726: template 15726: constexpr int 15726: __popcount(_Tp __x) noexcept 15726: { 15726: using __gnu_cxx::__int_traits; 15726: constexpr auto _Nd = __int_traits<_Tp>::__digits; 15726: 15726: constexpr auto _Nd_ull = __int_traits::__digits; 15726: constexpr auto _Nd_ul = __int_traits::__digits; 15726: constexpr auto _Nd_u = __int_traits::__digits; 15726: 15726: if constexpr (_Nd <= _Nd_u) 15726: return __builtin_popcount(__x); 15726: else if constexpr (_Nd <= _Nd_ul) 15726: return __builtin_popcountl(__x); 15726: else if constexpr (_Nd <= _Nd_ull) 15726: return __builtin_popcountll(__x); 15726: else 15726: { 15726: static_assert(_Nd <= (2 * _Nd_ull), 15726: "Maximum supported integer size is 128-bit"); 15726: 15726: constexpr auto __max_ull = __int_traits::__max; 15726: unsigned long long __low = __x & __max_ull; 15726: unsigned long long __high = __x >> _Nd_ull; 15726: return __builtin_popcountll(__low) + __builtin_popcountll(__high); 15726: } 15726: } 15726: 15726: template 15726: constexpr bool 15726: __has_single_bit(_Tp __x) noexcept 15726: { return std::__popcount(__x) == 1; } 15726: 15726: template 15726: constexpr _Tp 15726: __bit_ceil(_Tp __x) noexcept 15726: { 15726: using __gnu_cxx::__int_traits; 15726: constexpr auto _Nd = __int_traits<_Tp>::__digits; 15726: if (__x == 0 || __x == 1) 15726: return 1; 15726: auto __shift_exponent = _Nd - std::__countl_zero((_Tp)(__x - 1u)); 15726: 15726: 15726: 15726: 15726: if (!std::__is_constant_evaluated()) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__shift_exponent != __int_traits<_Tp>::__digits)) __builtin_unreachable(); } while (false); 15726: } 15726: 15726: using __promoted_type = decltype(__x << 1); 15726: if constexpr (!is_same<__promoted_type, _Tp>::value) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: const int __extra_exp = sizeof(__promoted_type) / sizeof(_Tp) / 2; 15726: __shift_exponent |= (__shift_exponent & _Nd) << __extra_exp; 15726: } 15726: return (_Tp)1u << __shift_exponent; 15726: } 15726: 15726: template 15726: constexpr _Tp 15726: __bit_floor(_Tp __x) noexcept 15726: { 15726: constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits; 15726: if (__x == 0) 15726: return 0; 15726: return (_Tp)1u << (_Nd - std::__countl_zero((_Tp)(__x >> 1))); 15726: } 15726: 15726: template 15726: constexpr int 15726: __bit_width(_Tp __x) noexcept 15726: { 15726: constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits; 15726: return _Nd - std::__countl_zero(__x); 15726: } 15726: # 478 "/usr/include/c++/13/bit" 3 15726: 15726: } 15726: # 77 "/usr/include/c++/13/bits/stl_algobase.h" 2 3 15726: 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: constexpr 15726: inline int 15726: __memcmp(const _Tp* __first1, const _Up* __first2, size_t __num) 15726: { 15726: 15726: static_assert(sizeof(_Tp) == sizeof(_Up), "can be compared with memcmp"); 15726: # 108 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: return __builtin_memcmp(__first1, __first2, sizeof(_Tp) * __num); 15726: } 15726: # 152 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: inline void 15726: iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) 15726: { 15726: 15726: 15726: 15726: 15726: # 185 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: swap(*__a, *__b); 15726: 15726: } 15726: # 201 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: _ForwardIterator2 15726: swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: for (; __first1 != __last1; ++__first1, (void)++__first2) 15726: std::iter_swap(__first1, __first2); 15726: return __first2; 15726: } 15726: # 230 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: constexpr 15726: inline const _Tp& 15726: min(const _Tp& __a, const _Tp& __b) 15726: { 15726: 15726: 15726: 15726: if (__b < __a) 15726: return __b; 15726: return __a; 15726: } 15726: # 254 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: constexpr 15726: inline const _Tp& 15726: max(const _Tp& __a, const _Tp& __b) 15726: { 15726: 15726: 15726: 15726: if (__a < __b) 15726: return __b; 15726: return __a; 15726: } 15726: # 278 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: constexpr 15726: inline const _Tp& 15726: min(const _Tp& __a, const _Tp& __b, _Compare __comp) 15726: { 15726: 15726: if (__comp(__b, __a)) 15726: return __b; 15726: return __a; 15726: } 15726: # 300 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: constexpr 15726: inline const _Tp& 15726: max(const _Tp& __a, const _Tp& __b, _Compare __comp) 15726: { 15726: 15726: if (__comp(__a, __b)) 15726: return __b; 15726: return __a; 15726: } 15726: 15726: 15726: 15726: template 15726: 15726: inline _Iterator 15726: __niter_base(_Iterator __it) 15726: noexcept(std::is_nothrow_copy_constructible<_Iterator>::value) 15726: { return __it; } 15726: 15726: template 15726: _Ite 15726: __niter_base(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, 15726: std::random_access_iterator_tag>&); 15726: 15726: 15726: 15726: 15726: template 15726: 15726: inline _From 15726: __niter_wrap(_From __from, _To __res) 15726: { return __from + (__res - std::__niter_base(__from)); } 15726: 15726: 15726: template 15726: 15726: inline _Iterator 15726: __niter_wrap(const _Iterator&, _Iterator __res) 15726: { return __res; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct __copy_move 15726: { 15726: template 15726: 15726: static _OI 15726: __copy_m(_II __first, _II __last, _OI __result) 15726: { 15726: for (; __first != __last; ++__result, (void)++__first) 15726: *__result = *__first; 15726: return __result; 15726: } 15726: }; 15726: 15726: 15726: template 15726: struct __copy_move 15726: { 15726: template 15726: 15726: static _OI 15726: __copy_m(_II __first, _II __last, _OI __result) 15726: { 15726: for (; __first != __last; ++__result, (void)++__first) 15726: *__result = std::move(*__first); 15726: return __result; 15726: } 15726: }; 15726: 15726: 15726: template<> 15726: struct __copy_move 15726: { 15726: template 15726: 15726: static _OI 15726: __copy_m(_II __first, _II __last, _OI __result) 15726: { 15726: typedef typename iterator_traits<_II>::difference_type _Distance; 15726: for(_Distance __n = __last - __first; __n > 0; --__n) 15726: { 15726: *__result = *__first; 15726: ++__first; 15726: ++__result; 15726: } 15726: return __result; 15726: } 15726: 15726: template 15726: static void 15726: __assign_one(_Tp* __to, _Up* __from) 15726: { *__to = *__from; } 15726: }; 15726: 15726: 15726: template<> 15726: struct __copy_move 15726: { 15726: template 15726: 15726: static _OI 15726: __copy_m(_II __first, _II __last, _OI __result) 15726: { 15726: typedef typename iterator_traits<_II>::difference_type _Distance; 15726: for(_Distance __n = __last - __first; __n > 0; --__n) 15726: { 15726: *__result = std::move(*__first); 15726: ++__first; 15726: ++__result; 15726: } 15726: return __result; 15726: } 15726: 15726: template 15726: static void 15726: __assign_one(_Tp* __to, _Up* __from) 15726: { *__to = std::move(*__from); } 15726: }; 15726: 15726: 15726: template 15726: struct __copy_move<_IsMove, true, random_access_iterator_tag> 15726: { 15726: template 15726: 15726: static _Up* 15726: __copy_m(_Tp* __first, _Tp* __last, _Up* __result) 15726: { 15726: const ptrdiff_t _Num = __last - __first; 15726: if (__builtin_expect(_Num > 1, true)) 15726: __builtin_memmove(__result, __first, sizeof(_Tp) * _Num); 15726: else if (_Num == 1) 15726: std::__copy_move<_IsMove, false, random_access_iterator_tag>:: 15726: __assign_one(__result, __first); 15726: return __result + _Num; 15726: } 15726: }; 15726: 15726: 15726: 15726: template 15726: struct _Deque_iterator; 15726: 15726: struct _Bit_iterator; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct char_traits; 15726: 15726: template 15726: class istreambuf_iterator; 15726: 15726: template 15726: class ostreambuf_iterator; 15726: 15726: template 15726: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 15726: ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type 15726: __copy_move_a2(_CharT*, _CharT*, 15726: ostreambuf_iterator<_CharT, char_traits<_CharT> >); 15726: 15726: template 15726: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 15726: ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type 15726: __copy_move_a2(const _CharT*, const _CharT*, 15726: ostreambuf_iterator<_CharT, char_traits<_CharT> >); 15726: 15726: template 15726: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 15726: _CharT*>::__type 15726: __copy_move_a2(istreambuf_iterator<_CharT, char_traits<_CharT> >, 15726: istreambuf_iterator<_CharT, char_traits<_CharT> >, _CharT*); 15726: 15726: template 15726: typename __gnu_cxx::__enable_if< 15726: __is_char<_CharT>::__value, 15726: std::_Deque_iterator<_CharT, _CharT&, _CharT*> >::__type 15726: __copy_move_a2( 15726: istreambuf_iterator<_CharT, char_traits<_CharT> >, 15726: istreambuf_iterator<_CharT, char_traits<_CharT> >, 15726: std::_Deque_iterator<_CharT, _CharT&, _CharT*>); 15726: 15726: 15726: template 15726: 15726: inline _OI 15726: __copy_move_a2(_II __first, _II __last, _OI __result) 15726: { 15726: typedef typename iterator_traits<_II>::iterator_category _Category; 15726: 15726: 15726: 15726: 15726: 15726: return std::__copy_move<_IsMove, __memcpyable<_OI, _II>::__value, 15726: _Category>::__copy_m(__first, __last, __result); 15726: } 15726: 15726: template 15726: _OI 15726: __copy_move_a1(std::_Deque_iterator<_Tp, _Ref, _Ptr>, 15726: std::_Deque_iterator<_Tp, _Ref, _Ptr>, 15726: _OI); 15726: 15726: template 15726: std::_Deque_iterator<_OTp, _OTp&, _OTp*> 15726: __copy_move_a1(std::_Deque_iterator<_ITp, _IRef, _IPtr>, 15726: std::_Deque_iterator<_ITp, _IRef, _IPtr>, 15726: std::_Deque_iterator<_OTp, _OTp&, _OTp*>); 15726: 15726: template 15726: typename __gnu_cxx::__enable_if< 15726: __is_random_access_iter<_II>::__value, 15726: std::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type 15726: __copy_move_a1(_II, _II, std::_Deque_iterator<_Tp, _Tp&, _Tp*>); 15726: 15726: template 15726: 15726: inline _OI 15726: __copy_move_a1(_II __first, _II __last, _OI __result) 15726: { return std::__copy_move_a2<_IsMove>(__first, __last, __result); } 15726: 15726: template 15726: 15726: inline _OI 15726: __copy_move_a(_II __first, _II __last, _OI __result) 15726: { 15726: return std::__niter_wrap(__result, 15726: std::__copy_move_a1<_IsMove>(std::__niter_base(__first), 15726: std::__niter_base(__last), 15726: std::__niter_base(__result))); 15726: } 15726: 15726: template 15726: _OI 15726: __copy_move_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, 15726: const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, 15726: _OI); 15726: 15726: template 15726: __gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat> 15726: __copy_move_a(_II, _II, 15726: const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&); 15726: 15726: template 15726: ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat> 15726: __copy_move_a(const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, 15726: const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, 15726: const ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat>&); 15726: 15726: template 15726: 15726: _OutputIterator 15726: __copy_n_a(_InputIterator __first, _Size __n, _OutputIterator __result, 15726: bool) 15726: { 15726: if (__n > 0) 15726: { 15726: while (true) 15726: { 15726: *__result = *__first; 15726: ++__result; 15726: if (--__n > 0) 15726: ++__first; 15726: else 15726: break; 15726: } 15726: } 15726: return __result; 15726: } 15726: 15726: 15726: template 15726: typename __gnu_cxx::__enable_if< 15726: __is_char<_CharT>::__value, _CharT*>::__type 15726: __copy_n_a(istreambuf_iterator<_CharT, char_traits<_CharT> >, 15726: _Size, _CharT*, bool); 15726: 15726: template 15726: typename __gnu_cxx::__enable_if< 15726: __is_char<_CharT>::__value, 15726: std::_Deque_iterator<_CharT, _CharT&, _CharT*> >::__type 15726: __copy_n_a(istreambuf_iterator<_CharT, char_traits<_CharT> >, _Size, 15726: std::_Deque_iterator<_CharT, _CharT&, _CharT*>, 15726: bool); 15726: # 621 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: inline _OI 15726: copy(_II __first, _II __last, _OI __result) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__copy_move_a<__is_move_iterator<_II>::__value> 15726: (std::__miter_base(__first), std::__miter_base(__last), __result); 15726: } 15726: # 654 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: inline _OI 15726: move(_II __first, _II __last, _OI __result) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__copy_move_a(std::__miter_base(__first), 15726: std::__miter_base(__last), __result); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct __copy_move_backward 15726: { 15726: template 15726: 15726: static _BI2 15726: __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) 15726: { 15726: while (__first != __last) 15726: *--__result = *--__last; 15726: return __result; 15726: } 15726: }; 15726: 15726: 15726: template 15726: struct __copy_move_backward 15726: { 15726: template 15726: 15726: static _BI2 15726: __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) 15726: { 15726: while (__first != __last) 15726: *--__result = std::move(*--__last); 15726: return __result; 15726: } 15726: }; 15726: 15726: 15726: template<> 15726: struct __copy_move_backward 15726: { 15726: template 15726: 15726: static _BI2 15726: __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) 15726: { 15726: typename iterator_traits<_BI1>::difference_type 15726: __n = __last - __first; 15726: for (; __n > 0; --__n) 15726: *--__result = *--__last; 15726: return __result; 15726: } 15726: }; 15726: 15726: 15726: template<> 15726: struct __copy_move_backward 15726: { 15726: template 15726: 15726: static _BI2 15726: __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) 15726: { 15726: typename iterator_traits<_BI1>::difference_type 15726: __n = __last - __first; 15726: for (; __n > 0; --__n) 15726: *--__result = std::move(*--__last); 15726: return __result; 15726: } 15726: }; 15726: 15726: 15726: template 15726: struct __copy_move_backward<_IsMove, true, random_access_iterator_tag> 15726: { 15726: template 15726: 15726: static _Up* 15726: __copy_move_b(_Tp* __first, _Tp* __last, _Up* __result) 15726: { 15726: const ptrdiff_t _Num = __last - __first; 15726: if (__builtin_expect(_Num > 1, true)) 15726: __builtin_memmove(__result - _Num, __first, sizeof(_Tp) * _Num); 15726: else if (_Num == 1) 15726: std::__copy_move<_IsMove, false, random_access_iterator_tag>:: 15726: __assign_one(__result - 1, __first); 15726: return __result - _Num; 15726: } 15726: }; 15726: 15726: template 15726: 15726: inline _BI2 15726: __copy_move_backward_a2(_BI1 __first, _BI1 __last, _BI2 __result) 15726: { 15726: typedef typename iterator_traits<_BI1>::iterator_category _Category; 15726: 15726: 15726: 15726: 15726: 15726: return std::__copy_move_backward<_IsMove, 15726: __memcpyable<_BI2, _BI1>::__value, 15726: _Category>::__copy_move_b(__first, 15726: __last, 15726: __result); 15726: } 15726: 15726: template 15726: 15726: inline _BI2 15726: __copy_move_backward_a1(_BI1 __first, _BI1 __last, _BI2 __result) 15726: { return std::__copy_move_backward_a2<_IsMove>(__first, __last, __result); } 15726: 15726: template 15726: _OI 15726: __copy_move_backward_a1(std::_Deque_iterator<_Tp, _Ref, _Ptr>, 15726: std::_Deque_iterator<_Tp, _Ref, _Ptr>, 15726: _OI); 15726: 15726: template 15726: std::_Deque_iterator<_OTp, _OTp&, _OTp*> 15726: __copy_move_backward_a1( 15726: std::_Deque_iterator<_ITp, _IRef, _IPtr>, 15726: std::_Deque_iterator<_ITp, _IRef, _IPtr>, 15726: std::_Deque_iterator<_OTp, _OTp&, _OTp*>); 15726: 15726: template 15726: typename __gnu_cxx::__enable_if< 15726: __is_random_access_iter<_II>::__value, 15726: std::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type 15726: __copy_move_backward_a1(_II, _II, 15726: std::_Deque_iterator<_Tp, _Tp&, _Tp*>); 15726: 15726: template 15726: 15726: inline _OI 15726: __copy_move_backward_a(_II __first, _II __last, _OI __result) 15726: { 15726: return std::__niter_wrap(__result, 15726: std::__copy_move_backward_a1<_IsMove> 15726: (std::__niter_base(__first), std::__niter_base(__last), 15726: std::__niter_base(__result))); 15726: } 15726: 15726: template 15726: _OI 15726: __copy_move_backward_a( 15726: const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, 15726: const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, 15726: _OI); 15726: 15726: template 15726: __gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat> 15726: __copy_move_backward_a(_II, _II, 15726: const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&); 15726: 15726: template 15726: ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat> 15726: __copy_move_backward_a( 15726: const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, 15726: const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, 15726: const ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat>&); 15726: # 854 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: inline _BI2 15726: copy_backward(_BI1 __first, _BI1 __last, _BI2 __result) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__copy_move_backward_a<__is_move_iterator<_BI1>::__value> 15726: (std::__miter_base(__first), std::__miter_base(__last), __result); 15726: } 15726: # 889 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: inline _BI2 15726: move_backward(_BI1 __first, _BI1 __last, _BI2 __result) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__copy_move_backward_a(std::__miter_base(__first), 15726: std::__miter_base(__last), 15726: __result); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: inline typename 15726: __gnu_cxx::__enable_if::__value, void>::__type 15726: __fill_a1(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __value) 15726: { 15726: for (; __first != __last; ++__first) 15726: *__first = __value; 15726: } 15726: 15726: template 15726: 15726: inline typename 15726: __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, void>::__type 15726: __fill_a1(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __value) 15726: { 15726: const _Tp __tmp = __value; 15726: for (; __first != __last; ++__first) 15726: *__first = __tmp; 15726: } 15726: 15726: 15726: template 15726: 15726: inline typename 15726: __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, void>::__type 15726: __fill_a1(_Tp* __first, _Tp* __last, const _Tp& __c) 15726: { 15726: const _Tp __tmp = __c; 15726: # 950 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: if (const size_t __len = __last - __first) 15726: __builtin_memset(__first, static_cast(__tmp), __len); 15726: } 15726: 15726: template 15726: 15726: inline void 15726: __fill_a1(::__gnu_cxx::__normal_iterator<_Ite, _Cont> __first, 15726: ::__gnu_cxx::__normal_iterator<_Ite, _Cont> __last, 15726: const _Tp& __value) 15726: { std::__fill_a1(__first.base(), __last.base(), __value); } 15726: 15726: template 15726: void 15726: __fill_a1(const std::_Deque_iterator<_Tp, _Tp&, _Tp*>&, 15726: const std::_Deque_iterator<_Tp, _Tp&, _Tp*>&, 15726: const _VTp&); 15726: 15726: 15726: void 15726: __fill_a1(std::_Bit_iterator, std::_Bit_iterator, 15726: const bool&); 15726: 15726: template 15726: 15726: inline void 15726: __fill_a(_FIte __first, _FIte __last, const _Tp& __value) 15726: { std::__fill_a1(__first, __last, __value); } 15726: 15726: template 15726: void 15726: __fill_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, 15726: const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, 15726: const _Tp&); 15726: # 997 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: inline void 15726: fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) 15726: { 15726: 15726: 15726: 15726: ; 15726: 15726: std::__fill_a(__first, __last, __value); 15726: } 15726: 15726: 15726: inline constexpr int 15726: __size_to_integer(int __n) { return __n; } 15726: inline constexpr unsigned 15726: __size_to_integer(unsigned __n) { return __n; } 15726: inline constexpr long 15726: __size_to_integer(long __n) { return __n; } 15726: inline constexpr unsigned long 15726: __size_to_integer(unsigned long __n) { return __n; } 15726: inline constexpr long long 15726: __size_to_integer(long long __n) { return __n; } 15726: inline constexpr unsigned long long 15726: __size_to_integer(unsigned long long __n) { return __n; } 15726: # 1049 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: inline constexpr long long 15726: __size_to_integer(float __n) { return (long long)__n; } 15726: inline constexpr long long 15726: __size_to_integer(double __n) { return (long long)__n; } 15726: inline constexpr long long 15726: __size_to_integer(long double __n) { return (long long)__n; } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: inline typename 15726: __gnu_cxx::__enable_if::__value, _OutputIterator>::__type 15726: __fill_n_a1(_OutputIterator __first, _Size __n, const _Tp& __value) 15726: { 15726: for (; __n > 0; --__n, (void) ++__first) 15726: *__first = __value; 15726: return __first; 15726: } 15726: 15726: template 15726: 15726: inline typename 15726: __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, _OutputIterator>::__type 15726: __fill_n_a1(_OutputIterator __first, _Size __n, const _Tp& __value) 15726: { 15726: const _Tp __tmp = __value; 15726: for (; __n > 0; --__n, (void) ++__first) 15726: *__first = __tmp; 15726: return __first; 15726: } 15726: 15726: template 15726: ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat> 15726: __fill_n_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>& __first, 15726: _Size __n, const _Tp& __value, 15726: std::input_iterator_tag); 15726: 15726: template 15726: 15726: inline _OutputIterator 15726: __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value, 15726: std::output_iterator_tag) 15726: { 15726: 15726: static_assert(is_integral<_Size>{}, "fill_n must pass integral size"); 15726: 15726: return __fill_n_a1(__first, __n, __value); 15726: } 15726: 15726: template 15726: 15726: inline _OutputIterator 15726: __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value, 15726: std::input_iterator_tag) 15726: { 15726: 15726: static_assert(is_integral<_Size>{}, "fill_n must pass integral size"); 15726: 15726: return __fill_n_a1(__first, __n, __value); 15726: } 15726: 15726: template 15726: 15726: inline _OutputIterator 15726: __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value, 15726: std::random_access_iterator_tag) 15726: { 15726: 15726: static_assert(is_integral<_Size>{}, "fill_n must pass integral size"); 15726: 15726: if (__n <= 0) 15726: return __first; 15726: 15726: ; 15726: 15726: std::__fill_a(__first, __first + __n, __value); 15726: return __first + __n; 15726: } 15726: # 1149 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: inline _OI 15726: fill_n(_OI __first, _Size __n, const _Tp& __value) 15726: { 15726: 15726: 15726: 15726: return std::__fill_n_a(__first, std::__size_to_integer(__n), __value, 15726: std::__iterator_category(__first)); 15726: } 15726: 15726: template 15726: struct __equal 15726: { 15726: template 15726: 15726: static bool 15726: equal(_II1 __first1, _II1 __last1, _II2 __first2) 15726: { 15726: for (; __first1 != __last1; ++__first1, (void) ++__first2) 15726: if (!(*__first1 == *__first2)) 15726: return false; 15726: return true; 15726: } 15726: }; 15726: 15726: template<> 15726: struct __equal 15726: { 15726: template 15726: 15726: static bool 15726: equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2) 15726: { 15726: if (const size_t __len = (__last1 - __first1)) 15726: return !std::__memcmp(__first1, __first2, __len); 15726: return true; 15726: } 15726: }; 15726: 15726: template 15726: typename __gnu_cxx::__enable_if< 15726: __is_random_access_iter<_II>::__value, bool>::__type 15726: __equal_aux1(std::_Deque_iterator<_Tp, _Ref, _Ptr>, 15726: std::_Deque_iterator<_Tp, _Ref, _Ptr>, 15726: _II); 15726: 15726: template 15726: bool 15726: __equal_aux1(std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, 15726: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, 15726: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>); 15726: 15726: template 15726: typename __gnu_cxx::__enable_if< 15726: __is_random_access_iter<_II>::__value, bool>::__type 15726: __equal_aux1(_II, _II, 15726: std::_Deque_iterator<_Tp, _Ref, _Ptr>); 15726: 15726: template 15726: 15726: inline bool 15726: __equal_aux1(_II1 __first1, _II1 __last1, _II2 __first2) 15726: { 15726: typedef typename iterator_traits<_II1>::value_type _ValueType1; 15726: const bool __simple = ((__is_integer<_ValueType1>::__value 15726: || __is_pointer<_ValueType1>::__value) 15726: && __memcmpable<_II1, _II2>::__value); 15726: return std::__equal<__simple>::equal(__first1, __last1, __first2); 15726: } 15726: 15726: template 15726: 15726: inline bool 15726: __equal_aux(_II1 __first1, _II1 __last1, _II2 __first2) 15726: { 15726: return std::__equal_aux1(std::__niter_base(__first1), 15726: std::__niter_base(__last1), 15726: std::__niter_base(__first2)); 15726: } 15726: 15726: template 15726: bool 15726: __equal_aux(const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, 15726: const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, 15726: _II2); 15726: 15726: template 15726: bool 15726: __equal_aux(_II1, _II1, 15726: const ::__gnu_debug::_Safe_iterator<_II2, _Seq2, _Cat2>&); 15726: 15726: template 15726: bool 15726: __equal_aux(const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, 15726: const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, 15726: const ::__gnu_debug::_Safe_iterator<_II2, _Seq2, _Cat2>&); 15726: 15726: template 15726: struct __lc_rai 15726: { 15726: template 15726: 15726: static _II1 15726: __newlast1(_II1, _II1 __last1, _II2, _II2) 15726: { return __last1; } 15726: 15726: template 15726: 15726: static bool 15726: __cnd2(_II __first, _II __last) 15726: { return __first != __last; } 15726: }; 15726: 15726: template<> 15726: struct __lc_rai 15726: { 15726: template 15726: 15726: static _RAI1 15726: __newlast1(_RAI1 __first1, _RAI1 __last1, 15726: _RAI2 __first2, _RAI2 __last2) 15726: { 15726: const typename iterator_traits<_RAI1>::difference_type 15726: __diff1 = __last1 - __first1; 15726: const typename iterator_traits<_RAI2>::difference_type 15726: __diff2 = __last2 - __first2; 15726: return __diff2 < __diff1 ? __first1 + __diff2 : __last1; 15726: } 15726: 15726: template 15726: static bool 15726: __cnd2(_RAI, _RAI) 15726: { return true; } 15726: }; 15726: 15726: template 15726: 15726: bool 15726: __lexicographical_compare_impl(_II1 __first1, _II1 __last1, 15726: _II2 __first2, _II2 __last2, 15726: _Compare __comp) 15726: { 15726: typedef typename iterator_traits<_II1>::iterator_category _Category1; 15726: typedef typename iterator_traits<_II2>::iterator_category _Category2; 15726: typedef std::__lc_rai<_Category1, _Category2> __rai_type; 15726: 15726: __last1 = __rai_type::__newlast1(__first1, __last1, __first2, __last2); 15726: for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2); 15726: ++__first1, (void)++__first2) 15726: { 15726: if (__comp(__first1, __first2)) 15726: return true; 15726: if (__comp(__first2, __first1)) 15726: return false; 15726: } 15726: return __first1 == __last1 && __first2 != __last2; 15726: } 15726: 15726: template 15726: struct __lexicographical_compare 15726: { 15726: template 15726: 15726: static bool 15726: __lc(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) 15726: { 15726: using __gnu_cxx::__ops::__iter_less_iter; 15726: return std::__lexicographical_compare_impl(__first1, __last1, 15726: __first2, __last2, 15726: __iter_less_iter()); 15726: } 15726: 15726: template 15726: 15726: static int 15726: __3way(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) 15726: { 15726: while (__first1 != __last1) 15726: { 15726: if (__first2 == __last2) 15726: return +1; 15726: if (*__first1 < *__first2) 15726: return -1; 15726: if (*__first2 < *__first1) 15726: return +1; 15726: ++__first1; 15726: ++__first2; 15726: } 15726: return int(__first2 == __last2) - 1; 15726: } 15726: }; 15726: 15726: template<> 15726: struct __lexicographical_compare 15726: { 15726: template 15726: 15726: static bool 15726: __lc(const _Tp* __first1, const _Tp* __last1, 15726: const _Up* __first2, const _Up* __last2) 15726: { return __3way(__first1, __last1, __first2, __last2) < 0; } 15726: 15726: template 15726: 15726: static ptrdiff_t 15726: __3way(const _Tp* __first1, const _Tp* __last1, 15726: const _Up* __first2, const _Up* __last2) 15726: { 15726: const size_t __len1 = __last1 - __first1; 15726: const size_t __len2 = __last2 - __first2; 15726: if (const size_t __len = std::min(__len1, __len2)) 15726: if (int __result = std::__memcmp(__first1, __first2, __len)) 15726: return __result; 15726: return ptrdiff_t(__len1 - __len2); 15726: } 15726: }; 15726: 15726: template 15726: 15726: inline bool 15726: __lexicographical_compare_aux1(_II1 __first1, _II1 __last1, 15726: _II2 __first2, _II2 __last2) 15726: { 15726: typedef typename iterator_traits<_II1>::value_type _ValueType1; 15726: typedef typename iterator_traits<_II2>::value_type _ValueType2; 15726: const bool __simple = 15726: (__is_memcmp_ordered_with<_ValueType1, _ValueType2>::__value 15726: && __is_pointer<_II1>::__value 15726: && __is_pointer<_II2>::__value 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ); 15726: 15726: return std::__lexicographical_compare<__simple>::__lc(__first1, __last1, 15726: __first2, __last2); 15726: } 15726: 15726: template 15726: bool 15726: __lexicographical_compare_aux1( 15726: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, 15726: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, 15726: _Tp2*, _Tp2*); 15726: 15726: template 15726: bool 15726: __lexicographical_compare_aux1(_Tp1*, _Tp1*, 15726: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>, 15726: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>); 15726: 15726: template 15726: bool 15726: __lexicographical_compare_aux1( 15726: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, 15726: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, 15726: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>, 15726: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>); 15726: 15726: template 15726: 15726: inline bool 15726: __lexicographical_compare_aux(_II1 __first1, _II1 __last1, 15726: _II2 __first2, _II2 __last2) 15726: { 15726: return std::__lexicographical_compare_aux1(std::__niter_base(__first1), 15726: std::__niter_base(__last1), 15726: std::__niter_base(__first2), 15726: std::__niter_base(__last2)); 15726: } 15726: 15726: template 15726: bool 15726: __lexicographical_compare_aux( 15726: const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&, 15726: const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&, 15726: _II2, _II2); 15726: 15726: template 15726: bool 15726: __lexicographical_compare_aux( 15726: _II1, _II1, 15726: const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&, 15726: const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&); 15726: 15726: template 15726: bool 15726: __lexicographical_compare_aux( 15726: const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&, 15726: const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&, 15726: const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&, 15726: const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&); 15726: 15726: template 15726: 15726: _ForwardIterator 15726: __lower_bound(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __val, _Compare __comp) 15726: { 15726: typedef typename iterator_traits<_ForwardIterator>::difference_type 15726: _DistanceType; 15726: 15726: _DistanceType __len = std::distance(__first, __last); 15726: 15726: while (__len > 0) 15726: { 15726: _DistanceType __half = __len >> 1; 15726: _ForwardIterator __middle = __first; 15726: std::advance(__middle, __half); 15726: if (__comp(__middle, __val)) 15726: { 15726: __first = __middle; 15726: ++__first; 15726: __len = __len - __half - 1; 15726: } 15726: else 15726: __len = __half; 15726: } 15726: return __first; 15726: } 15726: # 1495 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: inline _ForwardIterator 15726: lower_bound(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __val) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__lower_bound(__first, __last, __val, 15726: __gnu_cxx::__ops::__iter_less_val()); 15726: } 15726: 15726: 15726: 15726: template 15726: inline constexpr _Tp 15726: __lg(_Tp __n) 15726: { 15726: 15726: return std::__bit_width(make_unsigned_t<_Tp>(__n)) - 1; 15726: # 1528 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: } 15726: 15726: 15726: # 1544 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: inline bool 15726: equal(_II1 __first1, _II1 __last1, _II2 __first2) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__equal_aux(__first1, __last1, __first2); 15726: } 15726: # 1575 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: inline bool 15726: equal(_IIter1 __first1, _IIter1 __last1, 15726: _IIter2 __first2, _BinaryPredicate __binary_pred) 15726: { 15726: 15726: 15726: 15726: ; 15726: 15726: for (; __first1 != __last1; ++__first1, (void)++__first2) 15726: if (!bool(__binary_pred(*__first1, *__first2))) 15726: return false; 15726: return true; 15726: } 15726: 15726: 15726: 15726: template 15726: 15726: inline bool 15726: __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) 15726: { 15726: using _RATag = random_access_iterator_tag; 15726: using _Cat1 = typename iterator_traits<_II1>::iterator_category; 15726: using _Cat2 = typename iterator_traits<_II2>::iterator_category; 15726: using _RAIters = __and_, is_same<_Cat2, _RATag>>; 15726: if (_RAIters()) 15726: { 15726: auto __d1 = std::distance(__first1, __last1); 15726: auto __d2 = std::distance(__first2, __last2); 15726: if (__d1 != __d2) 15726: return false; 15726: return std::equal(__first1, __last1, __first2); 15726: } 15726: 15726: for (; __first1 != __last1 && __first2 != __last2; 15726: ++__first1, (void)++__first2) 15726: if (!(*__first1 == *__first2)) 15726: return false; 15726: return __first1 == __last1 && __first2 == __last2; 15726: } 15726: 15726: 15726: template 15726: 15726: inline bool 15726: __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2, 15726: _BinaryPredicate __binary_pred) 15726: { 15726: using _RATag = random_access_iterator_tag; 15726: using _Cat1 = typename iterator_traits<_II1>::iterator_category; 15726: using _Cat2 = typename iterator_traits<_II2>::iterator_category; 15726: using _RAIters = __and_, is_same<_Cat2, _RATag>>; 15726: if (_RAIters()) 15726: { 15726: auto __d1 = std::distance(__first1, __last1); 15726: auto __d2 = std::distance(__first2, __last2); 15726: if (__d1 != __d2) 15726: return false; 15726: return std::equal(__first1, __last1, __first2, 15726: __binary_pred); 15726: } 15726: 15726: for (; __first1 != __last1 && __first2 != __last2; 15726: ++__first1, (void)++__first2) 15726: if (!bool(__binary_pred(*__first1, *__first2))) 15726: return false; 15726: return __first1 == __last1 && __first2 == __last2; 15726: } 15726: # 1665 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: inline bool 15726: equal(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__equal4(__first1, __last1, __first2, __last2); 15726: } 15726: # 1698 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: inline bool 15726: equal(_IIter1 __first1, _IIter1 __last1, 15726: _IIter2 __first2, _IIter2 __last2, _BinaryPredicate __binary_pred) 15726: { 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__equal4(__first1, __last1, __first2, __last2, 15726: __binary_pred); 15726: } 15726: # 1730 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: inline bool 15726: lexicographical_compare(_II1 __first1, _II1 __last1, 15726: _II2 __first2, _II2 __last2) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__lexicographical_compare_aux(__first1, __last1, 15726: __first2, __last2); 15726: } 15726: # 1765 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: inline bool 15726: lexicographical_compare(_II1 __first1, _II1 __last1, 15726: _II2 __first2, _II2 __last2, _Compare __comp) 15726: { 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__lexicographical_compare_impl 15726: (__first1, __last1, __first2, __last2, 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: # 1880 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: pair<_InputIterator1, _InputIterator2> 15726: __mismatch(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _BinaryPredicate __binary_pred) 15726: { 15726: while (__first1 != __last1 && __binary_pred(__first1, __first2)) 15726: { 15726: ++__first1; 15726: ++__first2; 15726: } 15726: return pair<_InputIterator1, _InputIterator2>(__first1, __first2); 15726: } 15726: # 1908 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: inline pair<_InputIterator1, _InputIterator2> 15726: mismatch(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__mismatch(__first1, __last1, __first2, 15726: __gnu_cxx::__ops::__iter_equal_to_iter()); 15726: } 15726: # 1942 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: inline pair<_InputIterator1, _InputIterator2> 15726: mismatch(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _BinaryPredicate __binary_pred) 15726: { 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__mismatch(__first1, __last1, __first2, 15726: __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); 15726: } 15726: 15726: 15726: 15726: template 15726: 15726: pair<_InputIterator1, _InputIterator2> 15726: __mismatch(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2, 15726: _BinaryPredicate __binary_pred) 15726: { 15726: while (__first1 != __last1 && __first2 != __last2 15726: && __binary_pred(__first1, __first2)) 15726: { 15726: ++__first1; 15726: ++__first2; 15726: } 15726: return pair<_InputIterator1, _InputIterator2>(__first1, __first2); 15726: } 15726: # 1991 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: inline pair<_InputIterator1, _InputIterator2> 15726: mismatch(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__mismatch(__first1, __last1, __first2, __last2, 15726: __gnu_cxx::__ops::__iter_equal_to_iter()); 15726: } 15726: # 2027 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: inline pair<_InputIterator1, _InputIterator2> 15726: mismatch(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2, 15726: _BinaryPredicate __binary_pred) 15726: { 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__mismatch(__first1, __last1, __first2, __last2, 15726: __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: inline _InputIterator 15726: __find_if(_InputIterator __first, _InputIterator __last, 15726: _Predicate __pred, input_iterator_tag) 15726: { 15726: while (__first != __last && !__pred(__first)) 15726: ++__first; 15726: return __first; 15726: } 15726: 15726: 15726: template 15726: 15726: _RandomAccessIterator 15726: __find_if(_RandomAccessIterator __first, _RandomAccessIterator __last, 15726: _Predicate __pred, random_access_iterator_tag) 15726: { 15726: typename iterator_traits<_RandomAccessIterator>::difference_type 15726: __trip_count = (__last - __first) >> 2; 15726: 15726: for (; __trip_count > 0; --__trip_count) 15726: { 15726: if (__pred(__first)) 15726: return __first; 15726: ++__first; 15726: 15726: if (__pred(__first)) 15726: return __first; 15726: ++__first; 15726: 15726: if (__pred(__first)) 15726: return __first; 15726: ++__first; 15726: 15726: if (__pred(__first)) 15726: return __first; 15726: ++__first; 15726: } 15726: 15726: switch (__last - __first) 15726: { 15726: case 3: 15726: if (__pred(__first)) 15726: return __first; 15726: ++__first; 15726: 15726: case 2: 15726: if (__pred(__first)) 15726: return __first; 15726: ++__first; 15726: 15726: case 1: 15726: if (__pred(__first)) 15726: return __first; 15726: ++__first; 15726: 15726: case 0: 15726: default: 15726: return __last; 15726: } 15726: } 15726: 15726: template 15726: 15726: inline _Iterator 15726: __find_if(_Iterator __first, _Iterator __last, _Predicate __pred) 15726: { 15726: return __find_if(__first, __last, __pred, 15726: std::__iterator_category(__first)); 15726: } 15726: 15726: template 15726: 15726: typename iterator_traits<_InputIterator>::difference_type 15726: __count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred) 15726: { 15726: typename iterator_traits<_InputIterator>::difference_type __n = 0; 15726: for (; __first != __last; ++__first) 15726: if (__pred(__first)) 15726: ++__n; 15726: return __n; 15726: } 15726: 15726: template 15726: 15726: _ForwardIterator 15726: __remove_if(_ForwardIterator __first, _ForwardIterator __last, 15726: _Predicate __pred) 15726: { 15726: __first = std::__find_if(__first, __last, __pred); 15726: if (__first == __last) 15726: return __first; 15726: _ForwardIterator __result = __first; 15726: ++__first; 15726: for (; __first != __last; ++__first) 15726: if (!__pred(__first)) 15726: { 15726: *__result = std::move(*__first); 15726: ++__result; 15726: } 15726: return __result; 15726: } 15726: 15726: 15726: template 15726: 15726: bool 15726: __is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _BinaryPredicate __pred) 15726: { 15726: 15726: 15726: for (; __first1 != __last1; ++__first1, (void)++__first2) 15726: if (!__pred(__first1, __first2)) 15726: break; 15726: 15726: if (__first1 == __last1) 15726: return true; 15726: 15726: 15726: 15726: _ForwardIterator2 __last2 = __first2; 15726: std::advance(__last2, std::distance(__first1, __last1)); 15726: for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan) 15726: { 15726: if (__scan != std::__find_if(__first1, __scan, 15726: __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))) 15726: continue; 15726: 15726: auto __matches 15726: = std::__count_if(__first2, __last2, 15726: __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)); 15726: if (0 == __matches || 15726: std::__count_if(__scan, __last1, 15726: __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)) 15726: != __matches) 15726: return false; 15726: } 15726: return true; 15726: } 15726: # 2204 "/usr/include/c++/13/bits/stl_algobase.h" 3 15726: template 15726: 15726: inline bool 15726: is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__is_permutation(__first1, __last1, __first2, 15726: __gnu_cxx::__ops::__iter_equal_to_iter()); 15726: } 15726: 15726: 15726: 15726: } 15726: # 63 "/usr/include/c++/13/deque" 2 3 15726: # 1 "/usr/include/c++/13/bits/allocator.h" 1 3 15726: # 46 "/usr/include/c++/13/bits/allocator.h" 3 15726: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++allocator.h" 1 3 15726: # 33 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++allocator.h" 3 15726: # 1 "/usr/include/c++/13/bits/new_allocator.h" 1 3 15726: # 41 "/usr/include/c++/13/bits/new_allocator.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 62 "/usr/include/c++/13/bits/new_allocator.h" 3 15726: template 15726: class __new_allocator 15726: { 15726: public: 15726: typedef _Tp value_type; 15726: typedef std::size_t size_type; 15726: typedef std::ptrdiff_t difference_type; 15726: 15726: typedef _Tp* pointer; 15726: typedef const _Tp* const_pointer; 15726: typedef _Tp& reference; 15726: typedef const _Tp& const_reference; 15726: 15726: template 15726: struct rebind 15726: { typedef __new_allocator<_Tp1> other; }; 15726: 15726: 15726: 15726: 15726: 15726: typedef std::true_type propagate_on_container_move_assignment; 15726: 15726: 15726: __attribute__((__always_inline__)) 15726: 15726: __new_allocator() noexcept { } 15726: 15726: __attribute__((__always_inline__)) 15726: 15726: __new_allocator(const __new_allocator&) noexcept { } 15726: 15726: template 15726: __attribute__((__always_inline__)) 15726: 15726: __new_allocator(const __new_allocator<_Tp1>&) noexcept { } 15726: 15726: 15726: __new_allocator& operator=(const __new_allocator&) = default; 15726: 15726: 15726: 15726: ~__new_allocator() noexcept { } 15726: 15726: pointer 15726: address(reference __x) const noexcept 15726: { return std::__addressof(__x); } 15726: 15726: const_pointer 15726: address(const_reference __x) const noexcept 15726: { return std::__addressof(__x); } 15726: # 125 "/usr/include/c++/13/bits/new_allocator.h" 3 15726: [[__nodiscard__]] _Tp* 15726: allocate(size_type __n, const void* = static_cast(0)) 15726: { 15726: 15726: 15726: 15726: static_assert(sizeof(_Tp) != 0, "cannot allocate incomplete types"); 15726: 15726: 15726: if (__builtin_expect(__n > this->_M_max_size(), false)) 15726: { 15726: 15726: 15726: if (__n > (std::size_t(-1) / sizeof(_Tp))) 15726: std::__throw_bad_array_new_length(); 15726: std::__throw_bad_alloc(); 15726: } 15726: 15726: 15726: if (alignof(_Tp) > 8) 15726: { 15726: std::align_val_t __al = std::align_val_t(alignof(_Tp)); 15726: return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp), 15726: __al)); 15726: } 15726: 15726: return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp))); 15726: } 15726: 15726: 15726: void 15726: deallocate(_Tp* __p, size_type __n __attribute__ ((__unused__))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: if (alignof(_Tp) > 8) 15726: { 15726: ::operator delete((__p), (__n) * sizeof(_Tp), 15726: std::align_val_t(alignof(_Tp))); 15726: return; 15726: } 15726: 15726: ::operator delete((__p), (__n) * sizeof(_Tp)); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: __attribute__((__always_inline__)) 15726: size_type 15726: max_size() const noexcept 15726: { return _M_max_size(); } 15726: 15726: 15726: template 15726: __attribute__((__always_inline__)) 15726: void 15726: construct(_Up* __p, _Args&&... __args) 15726: noexcept(std::is_nothrow_constructible<_Up, _Args...>::value) 15726: { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); } 15726: 15726: template 15726: __attribute__((__always_inline__)) 15726: void 15726: destroy(_Up* __p) 15726: noexcept(std::is_nothrow_destructible<_Up>::value) 15726: { __p->~_Up(); } 15726: # 213 "/usr/include/c++/13/bits/new_allocator.h" 3 15726: template 15726: friend __attribute__((__always_inline__)) bool 15726: operator==(const __new_allocator&, const __new_allocator<_Up>&) 15726: noexcept 15726: { return true; } 15726: 15726: 15726: template 15726: friend __attribute__((__always_inline__)) bool 15726: operator!=(const __new_allocator&, const __new_allocator<_Up>&) 15726: noexcept 15726: { return false; } 15726: 15726: 15726: private: 15726: __attribute__((__always_inline__)) 15726: constexpr size_type 15726: _M_max_size() const noexcept 15726: { 15726: 15726: return std::size_t(0x7fffffff) / sizeof(_Tp); 15726: 15726: 15726: 15726: } 15726: }; 15726: 15726: 15726: } 15726: # 34 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++allocator.h" 2 3 15726: 15726: 15726: namespace std 15726: { 15726: # 46 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++allocator.h" 3 15726: template 15726: using __allocator_base = __new_allocator<_Tp>; 15726: } 15726: # 47 "/usr/include/c++/13/bits/allocator.h" 2 3 15726: # 1 "/usr/include/c++/13/bits/memoryfwd.h" 1 3 15726: # 46 "/usr/include/c++/13/bits/memoryfwd.h" 3 15726: 15726: # 47 "/usr/include/c++/13/bits/memoryfwd.h" 3 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 64 "/usr/include/c++/13/bits/memoryfwd.h" 3 15726: template 15726: class allocator; 15726: 15726: template<> 15726: class allocator; 15726: 15726: 15726: 15726: 15726: template 15726: struct uses_allocator; 15726: 15726: template 15726: struct allocator_traits; 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 48 "/usr/include/c++/13/bits/allocator.h" 2 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 74 "/usr/include/c++/13/bits/allocator.h" 3 15726: template<> 15726: class allocator 15726: { 15726: public: 15726: typedef void value_type; 15726: typedef size_t size_type; 15726: typedef ptrdiff_t difference_type; 15726: 15726: 15726: 15726: typedef void* pointer; 15726: typedef const void* const_pointer; 15726: 15726: template 15726: struct rebind 15726: { typedef allocator<_Tp1> other; }; 15726: 15726: 15726: 15726: 15726: 15726: using propagate_on_container_move_assignment = true_type; 15726: 15726: using is_always_equal 15726: 15726: = true_type; 15726: # 117 "/usr/include/c++/13/bits/allocator.h" 3 15726: }; 15726: # 129 "/usr/include/c++/13/bits/allocator.h" 3 15726: template 15726: class allocator : public __allocator_base<_Tp> 15726: { 15726: public: 15726: typedef _Tp value_type; 15726: typedef size_t size_type; 15726: typedef ptrdiff_t difference_type; 15726: 15726: 15726: 15726: typedef _Tp* pointer; 15726: typedef const _Tp* const_pointer; 15726: typedef _Tp& reference; 15726: typedef const _Tp& const_reference; 15726: 15726: template 15726: struct rebind 15726: { typedef allocator<_Tp1> other; }; 15726: 15726: 15726: 15726: 15726: 15726: using propagate_on_container_move_assignment = true_type; 15726: 15726: using is_always_equal 15726: 15726: = true_type; 15726: 15726: 15726: 15726: 15726: __attribute__((__always_inline__)) 15726: 15726: allocator() noexcept { } 15726: 15726: __attribute__((__always_inline__)) 15726: 15726: allocator(const allocator& __a) noexcept 15726: : __allocator_base<_Tp>(__a) { } 15726: 15726: 15726: 15726: allocator& operator=(const allocator&) = default; 15726: 15726: 15726: template 15726: __attribute__((__always_inline__)) 15726: 15726: allocator(const allocator<_Tp1>&) noexcept { } 15726: 15726: __attribute__((__always_inline__)) 15726: 15726: 15726: 15726: ~allocator() noexcept { } 15726: # 214 "/usr/include/c++/13/bits/allocator.h" 3 15726: friend __attribute__((__always_inline__)) 15726: bool 15726: operator==(const allocator&, const allocator&) noexcept 15726: { return true; } 15726: 15726: 15726: friend __attribute__((__always_inline__)) 15726: bool 15726: operator!=(const allocator&, const allocator&) noexcept 15726: { return false; } 15726: 15726: 15726: 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: __attribute__((__always_inline__)) 15726: inline bool 15726: operator==(const allocator<_T1>&, const allocator<_T2>&) 15726: noexcept 15726: { return true; } 15726: 15726: 15726: template 15726: __attribute__((__always_inline__)) 15726: inline bool 15726: operator!=(const allocator<_T1>&, const allocator<_T2>&) 15726: noexcept 15726: { return false; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: class allocator 15726: { 15726: public: 15726: typedef _Tp value_type; 15726: allocator() { } 15726: template allocator(const allocator<_Up>&) { } 15726: }; 15726: 15726: template 15726: class allocator 15726: { 15726: public: 15726: typedef _Tp value_type; 15726: allocator() { } 15726: template allocator(const allocator<_Up>&) { } 15726: }; 15726: 15726: template 15726: class allocator 15726: { 15726: public: 15726: typedef _Tp value_type; 15726: allocator() { } 15726: template allocator(const allocator<_Up>&) { } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern template class allocator; 15726: extern template class allocator; 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 64 "/usr/include/c++/13/deque" 2 3 15726: # 1 "/usr/include/c++/13/bits/stl_construct.h" 1 3 15726: # 73 "/usr/include/c++/13/bits/stl_construct.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: template 15726: inline void 15726: destroy_at(_Tp* __location) 15726: { 15726: if constexpr (201703L > 201703L && is_array_v<_Tp>) 15726: { 15726: for (auto& __x : *__location) 15726: std::destroy_at(std::__addressof(__x)); 15726: } 15726: else 15726: __location->~_Tp(); 15726: } 15726: # 106 "/usr/include/c++/13/bits/stl_construct.h" 3 15726: template 15726: 15726: inline void 15726: _Construct(_Tp* __p, _Args&&... __args) 15726: { 15726: # 119 "/usr/include/c++/13/bits/stl_construct.h" 3 15726: ::new((void*)__p) _Tp(std::forward<_Args>(__args)...); 15726: } 15726: # 132 "/usr/include/c++/13/bits/stl_construct.h" 3 15726: template 15726: inline void 15726: _Construct_novalue(_T1* __p) 15726: { ::new((void*)__p) _T1; } 15726: 15726: template 15726: void 15726: _Destroy(_ForwardIterator __first, _ForwardIterator __last); 15726: 15726: 15726: 15726: 15726: template 15726: constexpr inline void 15726: _Destroy(_Tp* __pointer) 15726: { 15726: 15726: 15726: 15726: __pointer->~_Tp(); 15726: 15726: } 15726: 15726: template 15726: struct _Destroy_aux 15726: { 15726: template 15726: static void 15726: __destroy(_ForwardIterator __first, _ForwardIterator __last) 15726: { 15726: for (; __first != __last; ++__first) 15726: std::_Destroy(std::__addressof(*__first)); 15726: } 15726: }; 15726: 15726: template<> 15726: struct _Destroy_aux 15726: { 15726: template 15726: static void 15726: __destroy(_ForwardIterator, _ForwardIterator) { } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline void 15726: _Destroy(_ForwardIterator __first, _ForwardIterator __last) 15726: { 15726: typedef typename iterator_traits<_ForwardIterator>::value_type 15726: _Value_type; 15726: 15726: 15726: static_assert(is_destructible<_Value_type>::value, 15726: "value type is destructible"); 15726: 15726: 15726: 15726: 15726: 15726: std::_Destroy_aux<__has_trivial_destructor(_Value_type)>:: 15726: __destroy(__first, __last); 15726: } 15726: 15726: template 15726: struct _Destroy_n_aux 15726: { 15726: template 15726: static _ForwardIterator 15726: __destroy_n(_ForwardIterator __first, _Size __count) 15726: { 15726: for (; __count > 0; (void)++__first, --__count) 15726: std::_Destroy(std::__addressof(*__first)); 15726: return __first; 15726: } 15726: }; 15726: 15726: template<> 15726: struct _Destroy_n_aux 15726: { 15726: template 15726: static _ForwardIterator 15726: __destroy_n(_ForwardIterator __first, _Size __count) 15726: { 15726: std::advance(__first, __count); 15726: return __first; 15726: } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline _ForwardIterator 15726: _Destroy_n(_ForwardIterator __first, _Size __count) 15726: { 15726: typedef typename iterator_traits<_ForwardIterator>::value_type 15726: _Value_type; 15726: 15726: 15726: static_assert(is_destructible<_Value_type>::value, 15726: "value type is destructible"); 15726: 15726: 15726: 15726: 15726: 15726: return std::_Destroy_n_aux<__has_trivial_destructor(_Value_type)>:: 15726: __destroy_n(__first, __count); 15726: } 15726: 15726: 15726: template 15726: inline void 15726: destroy(_ForwardIterator __first, _ForwardIterator __last) 15726: { 15726: std::_Destroy(__first, __last); 15726: } 15726: 15726: template 15726: inline _ForwardIterator 15726: destroy_n(_ForwardIterator __first, _Size __count) 15726: { 15726: return std::_Destroy_n(__first, __count); 15726: } 15726: 15726: 15726: 15726: } 15726: # 65 "/usr/include/c++/13/deque" 2 3 15726: # 1 "/usr/include/c++/13/bits/stl_uninitialized.h" 1 3 15726: # 64 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 15726: # 1 "/usr/include/c++/13/ext/alloc_traits.h" 1 3 15726: # 32 "/usr/include/c++/13/ext/alloc_traits.h" 3 15726: 15726: # 33 "/usr/include/c++/13/ext/alloc_traits.h" 3 15726: 15726: # 1 "/usr/include/c++/13/bits/alloc_traits.h" 1 3 15726: # 43 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct __allocator_traits_base 15726: { 15726: template 15726: struct __rebind : __replace_first_arg<_Tp, _Up> 15726: { 15726: static_assert(is_same< 15726: typename __replace_first_arg<_Tp, typename _Tp::value_type>::type, 15726: _Tp>::value, 15726: "allocator_traits::rebind_alloc must be A"); 15726: }; 15726: 15726: template 15726: struct __rebind<_Tp, _Up, 15726: __void_t::other>> 15726: { 15726: using type = typename _Tp::template rebind<_Up>::other; 15726: 15726: static_assert(is_same< 15726: typename _Tp::template rebind::other, 15726: _Tp>::value, 15726: "allocator_traits::rebind_alloc must be A"); 15726: }; 15726: 15726: protected: 15726: template 15726: using __pointer = typename _Tp::pointer; 15726: template 15726: using __c_pointer = typename _Tp::const_pointer; 15726: template 15726: using __v_pointer = typename _Tp::void_pointer; 15726: template 15726: using __cv_pointer = typename _Tp::const_void_pointer; 15726: template 15726: using __pocca = typename _Tp::propagate_on_container_copy_assignment; 15726: template 15726: using __pocma = typename _Tp::propagate_on_container_move_assignment; 15726: template 15726: using __pocs = typename _Tp::propagate_on_container_swap; 15726: template 15726: using __equal = __type_identity; 15726: }; 15726: 15726: template 15726: using __alloc_rebind 15726: = typename __allocator_traits_base::template __rebind<_Alloc, _Up>::type; 15726: # 104 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: template 15726: struct allocator_traits : __allocator_traits_base 15726: { 15726: 15726: typedef _Alloc allocator_type; 15726: 15726: typedef typename _Alloc::value_type value_type; 15726: 15726: 15726: 15726: 15726: 15726: 15726: using pointer = __detected_or_t; 15726: 15726: private: 15726: 15726: template class _Func, typename _Tp, typename = void> 15726: struct _Ptr 15726: { 15726: using type = typename pointer_traits::template rebind<_Tp>; 15726: }; 15726: 15726: template class _Func, typename _Tp> 15726: struct _Ptr<_Func, _Tp, __void_t<_Func<_Alloc>>> 15726: { 15726: using type = _Func<_Alloc>; 15726: }; 15726: 15726: 15726: template 15726: struct _Diff 15726: { using type = typename pointer_traits<_PtrT>::difference_type; }; 15726: 15726: template 15726: struct _Diff<_A2, _PtrT, __void_t> 15726: { using type = typename _A2::difference_type; }; 15726: 15726: 15726: template 15726: struct _Size : make_unsigned<_DiffT> { }; 15726: 15726: template 15726: struct _Size<_A2, _DiffT, __void_t> 15726: { using type = typename _A2::size_type; }; 15726: 15726: public: 15726: 15726: 15726: 15726: 15726: 15726: 15726: using const_pointer = typename _Ptr<__c_pointer, const value_type>::type; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: using void_pointer = typename _Ptr<__v_pointer, void>::type; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: using const_void_pointer = typename _Ptr<__cv_pointer, const void>::type; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: using difference_type = typename _Diff<_Alloc, pointer>::type; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: using size_type = typename _Size<_Alloc, difference_type>::type; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: using propagate_on_container_copy_assignment 15726: = __detected_or_t; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: using propagate_on_container_move_assignment 15726: = __detected_or_t; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: using propagate_on_container_swap 15726: = __detected_or_t; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: using is_always_equal 15726: = typename __detected_or_t, __equal, _Alloc>::type; 15726: 15726: template 15726: using rebind_alloc = __alloc_rebind<_Alloc, _Tp>; 15726: template 15726: using rebind_traits = allocator_traits>; 15726: 15726: private: 15726: template 15726: static constexpr auto 15726: _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer __hint, int) 15726: -> decltype(__a.allocate(__n, __hint)) 15726: { return __a.allocate(__n, __hint); } 15726: 15726: template 15726: static constexpr pointer 15726: _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer, ...) 15726: { return __a.allocate(__n); } 15726: 15726: template 15726: struct __construct_helper 15726: { 15726: template()->construct( 15726: std::declval<_Tp*>(), std::declval<_Args>()...))> 15726: static true_type __test(int); 15726: 15726: template 15726: static false_type __test(...); 15726: 15726: using type = decltype(__test<_Alloc>(0)); 15726: }; 15726: 15726: template 15726: using __has_construct 15726: = typename __construct_helper<_Tp, _Args...>::type; 15726: 15726: template 15726: static constexpr _Require<__has_construct<_Tp, _Args...>> 15726: _S_construct(_Alloc& __a, _Tp* __p, _Args&&... __args) 15726: noexcept(noexcept(__a.construct(__p, std::forward<_Args>(__args)...))) 15726: { __a.construct(__p, std::forward<_Args>(__args)...); } 15726: 15726: template 15726: static constexpr 15726: _Require<__and_<__not_<__has_construct<_Tp, _Args...>>, 15726: is_constructible<_Tp, _Args...>>> 15726: _S_construct(_Alloc&, _Tp* __p, _Args&&... __args) 15726: noexcept(std::is_nothrow_constructible<_Tp, _Args...>::value) 15726: { 15726: 15726: ::new((void*)__p) _Tp(std::forward<_Args>(__args)...); 15726: 15726: 15726: 15726: } 15726: 15726: template 15726: static constexpr auto 15726: _S_destroy(_Alloc2& __a, _Tp* __p, int) 15726: noexcept(noexcept(__a.destroy(__p))) 15726: -> decltype(__a.destroy(__p)) 15726: { __a.destroy(__p); } 15726: 15726: template 15726: static constexpr void 15726: _S_destroy(_Alloc2&, _Tp* __p, ...) 15726: noexcept(std::is_nothrow_destructible<_Tp>::value) 15726: { std::_Destroy(__p); } 15726: 15726: template 15726: static constexpr auto 15726: _S_max_size(_Alloc2& __a, int) 15726: -> decltype(__a.max_size()) 15726: { return __a.max_size(); } 15726: 15726: template 15726: static constexpr size_type 15726: _S_max_size(_Alloc2&, ...) 15726: { 15726: 15726: 15726: return __gnu_cxx::__numeric_traits::__max 15726: / sizeof(value_type); 15726: } 15726: 15726: template 15726: static constexpr auto 15726: _S_select(_Alloc2& __a, int) 15726: -> decltype(__a.select_on_container_copy_construction()) 15726: { return __a.select_on_container_copy_construction(); } 15726: 15726: template 15726: static constexpr _Alloc2 15726: _S_select(_Alloc2& __a, ...) 15726: { return __a; } 15726: 15726: public: 15726: # 331 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: [[__nodiscard__]] static pointer 15726: allocate(_Alloc& __a, size_type __n) 15726: { return __a.allocate(__n); } 15726: # 346 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: [[__nodiscard__]] static pointer 15726: allocate(_Alloc& __a, size_type __n, const_void_pointer __hint) 15726: { return _S_allocate(__a, __n, __hint, 0); } 15726: # 358 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: static void 15726: deallocate(_Alloc& __a, pointer __p, size_type __n) 15726: { __a.deallocate(__p, __n); } 15726: # 373 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: template 15726: static auto 15726: construct(_Alloc& __a, _Tp* __p, _Args&&... __args) 15726: noexcept(noexcept(_S_construct(__a, __p, 15726: std::forward<_Args>(__args)...))) 15726: -> decltype(_S_construct(__a, __p, std::forward<_Args>(__args)...)) 15726: { _S_construct(__a, __p, std::forward<_Args>(__args)...); } 15726: # 389 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: template 15726: static void 15726: destroy(_Alloc& __a, _Tp* __p) 15726: noexcept(noexcept(_S_destroy(__a, __p, 0))) 15726: { _S_destroy(__a, __p, 0); } 15726: # 403 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: static size_type 15726: max_size(const _Alloc& __a) noexcept 15726: { return _S_max_size(__a, 0); } 15726: # 415 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: static _Alloc 15726: select_on_container_copy_construction(const _Alloc& __rhs) 15726: { return _S_select(__rhs, 0); } 15726: }; 15726: # 427 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: template 15726: struct allocator_traits> 15726: { 15726: 15726: using allocator_type = allocator<_Tp>; 15726: 15726: 15726: using value_type = _Tp; 15726: 15726: 15726: using pointer = _Tp*; 15726: 15726: 15726: using const_pointer = const _Tp*; 15726: 15726: 15726: using void_pointer = void*; 15726: 15726: 15726: using const_void_pointer = const void*; 15726: 15726: 15726: using difference_type = std::ptrdiff_t; 15726: 15726: 15726: using size_type = std::size_t; 15726: 15726: 15726: using propagate_on_container_copy_assignment = false_type; 15726: 15726: 15726: using propagate_on_container_move_assignment = true_type; 15726: 15726: 15726: using propagate_on_container_swap = false_type; 15726: 15726: 15726: using is_always_equal = true_type; 15726: 15726: template 15726: using rebind_alloc = allocator<_Up>; 15726: 15726: template 15726: using rebind_traits = allocator_traits>; 15726: # 479 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: [[__nodiscard__,__gnu__::__always_inline__]] 15726: static pointer 15726: allocate(allocator_type& __a, size_type __n) 15726: { return __a.allocate(__n); } 15726: # 494 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: [[__nodiscard__,__gnu__::__always_inline__]] 15726: static pointer 15726: allocate(allocator_type& __a, size_type __n, 15726: [[maybe_unused]] const_void_pointer __hint) 15726: { 15726: 15726: return __a.allocate(__n, __hint); 15726: 15726: 15726: 15726: } 15726: # 514 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: [[__gnu__::__always_inline__]] 15726: static void 15726: deallocate(allocator_type& __a, pointer __p, size_type __n) 15726: { __a.deallocate(__p, __n); } 15726: # 530 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: template 15726: [[__gnu__::__always_inline__]] 15726: static void 15726: construct(allocator_type& __a __attribute__((__unused__)), _Up* __p, 15726: _Args&&... __args) 15726: noexcept(std::is_nothrow_constructible<_Up, _Args...>::value) 15726: { 15726: 15726: __a.construct(__p, std::forward<_Args>(__args)...); 15726: 15726: 15726: 15726: } 15726: # 551 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: template 15726: [[__gnu__::__always_inline__]] 15726: static void 15726: destroy(allocator_type& __a __attribute__((__unused__)), _Up* __p) 15726: noexcept(is_nothrow_destructible<_Up>::value) 15726: { 15726: 15726: __a.destroy(__p); 15726: 15726: 15726: 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__gnu__::__always_inline__]] 15726: static size_type 15726: max_size(const allocator_type& __a __attribute__((__unused__))) noexcept 15726: { 15726: 15726: return __a.max_size(); 15726: 15726: 15726: 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__gnu__::__always_inline__]] 15726: static allocator_type 15726: select_on_container_copy_construction(const allocator_type& __rhs) 15726: { return __rhs; } 15726: }; 15726: 15726: 15726: template<> 15726: struct allocator_traits> 15726: { 15726: 15726: using allocator_type = allocator; 15726: 15726: 15726: using value_type = void; 15726: 15726: 15726: using pointer = void*; 15726: 15726: 15726: using const_pointer = const void*; 15726: 15726: 15726: using void_pointer = void*; 15726: 15726: 15726: using const_void_pointer = const void*; 15726: 15726: 15726: using difference_type = std::ptrdiff_t; 15726: 15726: 15726: using size_type = std::size_t; 15726: 15726: 15726: using propagate_on_container_copy_assignment = false_type; 15726: 15726: 15726: using propagate_on_container_move_assignment = true_type; 15726: 15726: 15726: using propagate_on_container_swap = false_type; 15726: 15726: 15726: using is_always_equal = true_type; 15726: 15726: template 15726: using rebind_alloc = allocator<_Up>; 15726: 15726: template 15726: using rebind_traits = allocator_traits>; 15726: 15726: 15726: static void* 15726: allocate(allocator_type&, size_type, const void* = nullptr) = delete; 15726: 15726: 15726: static void 15726: deallocate(allocator_type&, void*, size_type) = delete; 15726: # 656 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: template 15726: [[__gnu__::__always_inline__]] 15726: static void 15726: construct(allocator_type&, _Up* __p, _Args&&... __args) 15726: noexcept(std::is_nothrow_constructible<_Up, _Args...>::value) 15726: { std::_Construct(__p, std::forward<_Args>(__args)...); } 15726: # 670 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: template 15726: [[__gnu__::__always_inline__]] 15726: static void 15726: destroy(allocator_type&, _Up* __p) 15726: noexcept(is_nothrow_destructible<_Up>::value) 15726: { std::_Destroy(__p); } 15726: 15726: 15726: static size_type 15726: max_size(const allocator_type&) = delete; 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__gnu__::__always_inline__]] 15726: static allocator_type 15726: select_on_container_copy_construction(const allocator_type& __rhs) 15726: { return __rhs; } 15726: }; 15726: # 708 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: template 15726: [[__gnu__::__always_inline__]] 15726: constexpr inline void 15726: __alloc_on_copy(_Alloc& __one, const _Alloc& __two) 15726: { 15726: using __traits = allocator_traits<_Alloc>; 15726: using __pocca = 15726: typename __traits::propagate_on_container_copy_assignment::type; 15726: 15726: if constexpr (__pocca::value) 15726: __one = __two; 15726: 15726: 15726: 15726: } 15726: 15726: template 15726: [[__gnu__::__always_inline__]] 15726: constexpr _Alloc 15726: __alloc_on_copy(const _Alloc& __a) 15726: { 15726: typedef allocator_traits<_Alloc> __traits; 15726: return __traits::select_on_container_copy_construction(__a); 15726: } 15726: # 745 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: template 15726: [[__gnu__::__always_inline__]] 15726: constexpr inline void 15726: __alloc_on_move(_Alloc& __one, _Alloc& __two) 15726: { 15726: using __traits = allocator_traits<_Alloc>; 15726: using __pocma 15726: = typename __traits::propagate_on_container_move_assignment::type; 15726: 15726: if constexpr (__pocma::value) 15726: __one = std::move(__two); 15726: 15726: 15726: 15726: } 15726: # 776 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: template 15726: [[__gnu__::__always_inline__]] 15726: constexpr inline void 15726: __alloc_on_swap(_Alloc& __one, _Alloc& __two) 15726: { 15726: using __traits = allocator_traits<_Alloc>; 15726: using __pocs = typename __traits::propagate_on_container_swap::type; 15726: 15726: if constexpr (__pocs::value) 15726: { 15726: using std::swap; 15726: swap(__one, __two); 15726: } 15726: 15726: 15726: 15726: } 15726: 15726: template, 15726: typename = void> 15726: struct __is_alloc_insertable_impl 15726: : false_type 15726: { }; 15726: 15726: template 15726: struct __is_alloc_insertable_impl<_Alloc, _Tp, _ValueT, 15726: __void_t::construct( 15726: std::declval<_Alloc&>(), std::declval<_ValueT*>(), 15726: std::declval<_Tp>()))>> 15726: : true_type 15726: { }; 15726: 15726: 15726: 15726: 15726: template 15726: struct __is_copy_insertable 15726: : __is_alloc_insertable_impl<_Alloc, 15726: typename _Alloc::value_type const&>::type 15726: { }; 15726: 15726: 15726: 15726: template 15726: struct __is_copy_insertable> 15726: : is_copy_constructible<_Tp> 15726: { }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct __is_move_insertable 15726: : __is_alloc_insertable_impl<_Alloc, typename _Alloc::value_type>::type 15726: { }; 15726: 15726: 15726: 15726: template 15726: struct __is_move_insertable> 15726: : is_move_constructible<_Tp> 15726: { }; 15726: 15726: 15726: 15726: template 15726: struct __is_allocator : false_type { }; 15726: 15726: template 15726: struct __is_allocator<_Alloc, 15726: __void_t().allocate(size_t{}))>> 15726: : true_type { }; 15726: 15726: template 15726: using _RequireAllocator 15726: = typename enable_if<__is_allocator<_Alloc>::value, _Alloc>::type; 15726: 15726: template 15726: using _RequireNotAllocator 15726: = typename enable_if::value, _Alloc>::type; 15726: # 873 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: template 15726: struct __alloc_swap 15726: { static void _S_do_it(_Alloc&, _Alloc&) noexcept { } }; 15726: 15726: template 15726: struct __alloc_swap<_Alloc, false> 15726: { 15726: static void 15726: _S_do_it(_Alloc& __one, _Alloc& __two) noexcept 15726: { 15726: 15726: if (__one != __two) 15726: swap(__one, __two); 15726: } 15726: }; 15726: 15726: 15726: template, 15726: is_nothrow_move_constructible>::value> 15726: struct __shrink_to_fit_aux 15726: { static bool _S_do_it(_Tp&) noexcept { return false; } }; 15726: 15726: template 15726: struct __shrink_to_fit_aux<_Tp, true> 15726: { 15726: 15726: static bool 15726: _S_do_it(_Tp& __c) noexcept 15726: { 15726: 15726: try 15726: { 15726: _Tp(__make_move_if_noexcept_iterator(__c.begin()), 15726: __make_move_if_noexcept_iterator(__c.end()), 15726: __c.get_allocator()).swap(__c); 15726: return true; 15726: } 15726: catch(...) 15726: { return false; } 15726: 15726: 15726: 15726: } 15726: }; 15726: # 926 "/usr/include/c++/13/bits/alloc_traits.h" 3 15726: template 15726: 15726: void 15726: _Destroy(_ForwardIterator __first, _ForwardIterator __last, 15726: _Allocator& __alloc) 15726: { 15726: for (; __first != __last; ++__first) 15726: 15726: 15726: 15726: allocator_traits<_Allocator>::destroy(__alloc, 15726: std::__addressof(*__first)); 15726: 15726: } 15726: 15726: 15726: template 15726: __attribute__((__always_inline__)) 15726: inline void 15726: _Destroy(_ForwardIterator __first, _ForwardIterator __last, 15726: allocator<_Tp>&) 15726: { 15726: std::_Destroy(__first, __last); 15726: } 15726: 15726: 15726: 15726: 15726: } 15726: # 35 "/usr/include/c++/13/ext/alloc_traits.h" 2 3 15726: 15726: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct __alloc_traits 15726: 15726: : std::allocator_traits<_Alloc> 15726: 15726: { 15726: typedef _Alloc allocator_type; 15726: 15726: typedef std::allocator_traits<_Alloc> _Base_type; 15726: typedef typename _Base_type::value_type value_type; 15726: typedef typename _Base_type::pointer pointer; 15726: typedef typename _Base_type::const_pointer const_pointer; 15726: typedef typename _Base_type::size_type size_type; 15726: typedef typename _Base_type::difference_type difference_type; 15726: 15726: typedef value_type& reference; 15726: typedef const value_type& const_reference; 15726: using _Base_type::allocate; 15726: using _Base_type::deallocate; 15726: using _Base_type::construct; 15726: using _Base_type::destroy; 15726: using _Base_type::max_size; 15726: 15726: private: 15726: template 15726: using __is_custom_pointer 15726: = std::__and_, 15726: std::__not_>>; 15726: 15726: public: 15726: 15726: template 15726: [[__gnu__::__always_inline__]] 15726: static constexpr 15726: std::__enable_if_t<__is_custom_pointer<_Ptr>::value> 15726: construct(_Alloc& __a, _Ptr __p, _Args&&... __args) 15726: noexcept(noexcept(_Base_type::construct(__a, std::__to_address(__p), 15726: std::forward<_Args>(__args)...))) 15726: { 15726: _Base_type::construct(__a, std::__to_address(__p), 15726: std::forward<_Args>(__args)...); 15726: } 15726: 15726: 15726: template 15726: [[__gnu__::__always_inline__]] 15726: static constexpr 15726: std::__enable_if_t<__is_custom_pointer<_Ptr>::value> 15726: destroy(_Alloc& __a, _Ptr __p) 15726: noexcept(noexcept(_Base_type::destroy(__a, std::__to_address(__p)))) 15726: { _Base_type::destroy(__a, std::__to_address(__p)); } 15726: 15726: [[__gnu__::__always_inline__]] 15726: static constexpr _Alloc _S_select_on_copy(const _Alloc& __a) 15726: { return _Base_type::select_on_container_copy_construction(__a); } 15726: 15726: [[__gnu__::__always_inline__]] 15726: static constexpr void _S_on_swap(_Alloc& __a, _Alloc& __b) 15726: { std::__alloc_on_swap(__a, __b); } 15726: 15726: [[__gnu__::__always_inline__]] 15726: static constexpr bool _S_propagate_on_copy_assign() 15726: { return _Base_type::propagate_on_container_copy_assignment::value; } 15726: 15726: [[__gnu__::__always_inline__]] 15726: static constexpr bool _S_propagate_on_move_assign() 15726: { return _Base_type::propagate_on_container_move_assignment::value; } 15726: 15726: [[__gnu__::__always_inline__]] 15726: static constexpr bool _S_propagate_on_swap() 15726: { return _Base_type::propagate_on_container_swap::value; } 15726: 15726: [[__gnu__::__always_inline__]] 15726: static constexpr bool _S_always_equal() 15726: { return _Base_type::is_always_equal::value; } 15726: 15726: __attribute__((__always_inline__)) 15726: static constexpr bool _S_nothrow_move() 15726: { return _S_propagate_on_move_assign() || _S_always_equal(); } 15726: 15726: template 15726: struct rebind 15726: { typedef typename _Base_type::template rebind_alloc<_Tp> other; }; 15726: # 180 "/usr/include/c++/13/ext/alloc_traits.h" 3 15726: }; 15726: 15726: 15726: } 15726: # 65 "/usr/include/c++/13/bits/stl_uninitialized.h" 2 3 15726: 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 81 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 15726: template 15726: constexpr bool 15726: __check_constructible() 15726: { 15726: 15726: 15726: 15726: 15726: 15726: static_assert(is_constructible<_ValueType, _Tp>::value, 15726: "result type must be constructible from input type"); 15726: 15726: return true; 15726: } 15726: # 110 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 15726: template 15726: 15726: _ForwardIterator 15726: __do_uninit_copy(_InputIterator __first, _InputIterator __last, 15726: _ForwardIterator __result) 15726: { 15726: _ForwardIterator __cur = __result; 15726: try 15726: { 15726: for (; __first != __last; ++__first, (void)++__cur) 15726: std::_Construct(std::__addressof(*__cur), *__first); 15726: return __cur; 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__result, __cur); 15726: throw; 15726: } 15726: } 15726: 15726: template 15726: struct __uninitialized_copy 15726: { 15726: template 15726: static _ForwardIterator 15726: __uninit_copy(_InputIterator __first, _InputIterator __last, 15726: _ForwardIterator __result) 15726: { return std::__do_uninit_copy(__first, __last, __result); } 15726: }; 15726: 15726: template<> 15726: struct __uninitialized_copy 15726: { 15726: template 15726: static _ForwardIterator 15726: __uninit_copy(_InputIterator __first, _InputIterator __last, 15726: _ForwardIterator __result) 15726: { return std::copy(__first, __last, __result); } 15726: }; 15726: # 161 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 15726: template 15726: inline _ForwardIterator 15726: uninitialized_copy(_InputIterator __first, _InputIterator __last, 15726: _ForwardIterator __result) 15726: { 15726: typedef typename iterator_traits<_InputIterator>::value_type 15726: _ValueType1; 15726: typedef typename iterator_traits<_ForwardIterator>::value_type 15726: _ValueType2; 15726: 15726: 15726: 15726: 15726: const bool __can_memmove = __is_trivial(_ValueType1); 15726: 15726: 15726: 15726: 15726: using _From = decltype(*__first); 15726: 15726: const bool __assignable 15726: = __is_trivial(_ValueType2) && __is_assignable(_ValueType2&, _From) && std::__check_constructible<_ValueType2, _From>(); 15726: 15726: return std::__uninitialized_copy<__can_memmove && __assignable>:: 15726: __uninit_copy(__first, __last, __result); 15726: } 15726: 15726: 15726: 15726: template 15726: void 15726: __do_uninit_fill(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __x) 15726: { 15726: _ForwardIterator __cur = __first; 15726: try 15726: { 15726: for (; __cur != __last; ++__cur) 15726: std::_Construct(std::__addressof(*__cur), __x); 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__first, __cur); 15726: throw; 15726: } 15726: } 15726: 15726: template 15726: struct __uninitialized_fill 15726: { 15726: template 15726: static void 15726: __uninit_fill(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __x) 15726: { std::__do_uninit_fill(__first, __last, __x); } 15726: }; 15726: 15726: template<> 15726: struct __uninitialized_fill 15726: { 15726: template 15726: static void 15726: __uninit_fill(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __x) 15726: { std::fill(__first, __last, __x); } 15726: }; 15726: # 239 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 15726: template 15726: inline void 15726: uninitialized_fill(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __x) 15726: { 15726: typedef typename iterator_traits<_ForwardIterator>::value_type 15726: _ValueType; 15726: 15726: 15726: 15726: const bool __can_fill 15726: = __is_trivial(_ValueType) && __is_assignable(_ValueType&, const _Tp&) && std::__check_constructible<_ValueType, const _Tp&>(); 15726: 15726: std::__uninitialized_fill<__can_fill>:: 15726: __uninit_fill(__first, __last, __x); 15726: } 15726: 15726: 15726: 15726: template 15726: 15726: _ForwardIterator 15726: __do_uninit_fill_n(_ForwardIterator __first, _Size __n, const _Tp& __x) 15726: { 15726: _ForwardIterator __cur = __first; 15726: try 15726: { 15726: for (; __n > 0; --__n, (void) ++__cur) 15726: std::_Construct(std::__addressof(*__cur), __x); 15726: return __cur; 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__first, __cur); 15726: throw; 15726: } 15726: } 15726: 15726: template 15726: struct __uninitialized_fill_n 15726: { 15726: template 15726: static _ForwardIterator 15726: __uninit_fill_n(_ForwardIterator __first, _Size __n, 15726: const _Tp& __x) 15726: { return std::__do_uninit_fill_n(__first, __n, __x); } 15726: }; 15726: 15726: template<> 15726: struct __uninitialized_fill_n 15726: { 15726: template 15726: static _ForwardIterator 15726: __uninit_fill_n(_ForwardIterator __first, _Size __n, 15726: const _Tp& __x) 15726: { return std::fill_n(__first, __n, __x); } 15726: }; 15726: # 310 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 15726: template 15726: inline _ForwardIterator 15726: uninitialized_fill_n(_ForwardIterator __first, _Size __n, const _Tp& __x) 15726: { 15726: typedef typename iterator_traits<_ForwardIterator>::value_type 15726: _ValueType; 15726: 15726: 15726: 15726: const bool __can_fill 15726: = __is_trivial(_ValueType) && __is_assignable(_ValueType&, const _Tp&) && std::__check_constructible<_ValueType, const _Tp&>() 15726: 15726: 15726: 15726: && __is_integer<_Size>::__value; 15726: 15726: return __uninitialized_fill_n<__can_fill>:: 15726: __uninit_fill_n(__first, __n, __x); 15726: } 15726: # 340 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 15726: template 15726: 15726: _ForwardIterator 15726: __uninitialized_copy_a(_InputIterator __first, _InputIterator __last, 15726: _ForwardIterator __result, _Allocator& __alloc) 15726: { 15726: _ForwardIterator __cur = __result; 15726: try 15726: { 15726: typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; 15726: for (; __first != __last; ++__first, (void)++__cur) 15726: __traits::construct(__alloc, std::__addressof(*__cur), *__first); 15726: return __cur; 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__result, __cur, __alloc); 15726: throw; 15726: } 15726: } 15726: 15726: 15726: template 15726: 15726: inline _ForwardIterator 15726: __uninitialized_copy_a(_InputIterator __first, _InputIterator __last, 15726: _ForwardIterator __result, allocator<_Tp>&) 15726: { 15726: 15726: 15726: 15726: 15726: return std::uninitialized_copy(__first, __last, __result); 15726: } 15726: 15726: 15726: template 15726: 15726: inline _ForwardIterator 15726: __uninitialized_move_a(_InputIterator __first, _InputIterator __last, 15726: _ForwardIterator __result, _Allocator& __alloc) 15726: { 15726: return std::__uninitialized_copy_a(std::make_move_iterator(__first), 15726: std::make_move_iterator(__last), 15726: __result, __alloc); 15726: } 15726: 15726: template 15726: 15726: inline _ForwardIterator 15726: __uninitialized_move_if_noexcept_a(_InputIterator __first, 15726: _InputIterator __last, 15726: _ForwardIterator __result, 15726: _Allocator& __alloc) 15726: { 15726: return std::__uninitialized_copy_a 15726: (std::__make_move_if_noexcept_iterator(__first), 15726: std::__make_move_if_noexcept_iterator(__last), __result, __alloc); 15726: } 15726: 15726: template 15726: 15726: void 15726: __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __x, _Allocator& __alloc) 15726: { 15726: _ForwardIterator __cur = __first; 15726: try 15726: { 15726: typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; 15726: for (; __cur != __last; ++__cur) 15726: __traits::construct(__alloc, std::__addressof(*__cur), __x); 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__first, __cur, __alloc); 15726: throw; 15726: } 15726: } 15726: 15726: 15726: template 15726: 15726: inline void 15726: __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __x, allocator<_Tp2>&) 15726: { 15726: 15726: 15726: 15726: 15726: std::uninitialized_fill(__first, __last, __x); 15726: } 15726: 15726: 15726: template 15726: 15726: _ForwardIterator 15726: __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n, 15726: const _Tp& __x, _Allocator& __alloc) 15726: { 15726: _ForwardIterator __cur = __first; 15726: try 15726: { 15726: typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; 15726: for (; __n > 0; --__n, (void) ++__cur) 15726: __traits::construct(__alloc, std::__addressof(*__cur), __x); 15726: return __cur; 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__first, __cur, __alloc); 15726: throw; 15726: } 15726: } 15726: 15726: 15726: template 15726: 15726: inline _ForwardIterator 15726: __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n, 15726: const _Tp& __x, allocator<_Tp2>&) 15726: { 15726: 15726: 15726: 15726: 15726: return std::uninitialized_fill_n(__first, __n, __x); 15726: } 15726: # 485 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 15726: template 15726: inline _ForwardIterator 15726: __uninitialized_copy_move(_InputIterator1 __first1, 15726: _InputIterator1 __last1, 15726: _InputIterator2 __first2, 15726: _InputIterator2 __last2, 15726: _ForwardIterator __result, 15726: _Allocator& __alloc) 15726: { 15726: _ForwardIterator __mid = std::__uninitialized_copy_a(__first1, __last1, 15726: __result, 15726: __alloc); 15726: try 15726: { 15726: return std::__uninitialized_move_a(__first2, __last2, __mid, __alloc); 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__result, __mid, __alloc); 15726: throw; 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline _ForwardIterator 15726: __uninitialized_move_copy(_InputIterator1 __first1, 15726: _InputIterator1 __last1, 15726: _InputIterator2 __first2, 15726: _InputIterator2 __last2, 15726: _ForwardIterator __result, 15726: _Allocator& __alloc) 15726: { 15726: _ForwardIterator __mid = std::__uninitialized_move_a(__first1, __last1, 15726: __result, 15726: __alloc); 15726: try 15726: { 15726: return std::__uninitialized_copy_a(__first2, __last2, __mid, __alloc); 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__result, __mid, __alloc); 15726: throw; 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: inline _ForwardIterator 15726: __uninitialized_fill_move(_ForwardIterator __result, _ForwardIterator __mid, 15726: const _Tp& __x, _InputIterator __first, 15726: _InputIterator __last, _Allocator& __alloc) 15726: { 15726: std::__uninitialized_fill_a(__result, __mid, __x, __alloc); 15726: try 15726: { 15726: return std::__uninitialized_move_a(__first, __last, __mid, __alloc); 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__result, __mid, __alloc); 15726: throw; 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: inline void 15726: __uninitialized_move_fill(_InputIterator __first1, _InputIterator __last1, 15726: _ForwardIterator __first2, 15726: _ForwardIterator __last2, const _Tp& __x, 15726: _Allocator& __alloc) 15726: { 15726: _ForwardIterator __mid2 = std::__uninitialized_move_a(__first1, __last1, 15726: __first2, 15726: __alloc); 15726: try 15726: { 15726: std::__uninitialized_fill_a(__mid2, __last2, __x, __alloc); 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__first2, __mid2, __alloc); 15726: throw; 15726: } 15726: } 15726: # 592 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 15726: template 15726: struct __uninitialized_default_1 15726: { 15726: template 15726: static void 15726: __uninit_default(_ForwardIterator __first, _ForwardIterator __last) 15726: { 15726: _ForwardIterator __cur = __first; 15726: try 15726: { 15726: for (; __cur != __last; ++__cur) 15726: std::_Construct(std::__addressof(*__cur)); 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__first, __cur); 15726: throw; 15726: } 15726: } 15726: }; 15726: 15726: template<> 15726: struct __uninitialized_default_1 15726: { 15726: template 15726: static void 15726: __uninit_default(_ForwardIterator __first, _ForwardIterator __last) 15726: { 15726: if (__first == __last) 15726: return; 15726: 15726: typename iterator_traits<_ForwardIterator>::value_type* __val 15726: = std::__addressof(*__first); 15726: std::_Construct(__val); 15726: if (++__first != __last) 15726: std::fill(__first, __last, *__val); 15726: } 15726: }; 15726: 15726: template 15726: struct __uninitialized_default_n_1 15726: { 15726: template 15726: 15726: static _ForwardIterator 15726: __uninit_default_n(_ForwardIterator __first, _Size __n) 15726: { 15726: _ForwardIterator __cur = __first; 15726: try 15726: { 15726: for (; __n > 0; --__n, (void) ++__cur) 15726: std::_Construct(std::__addressof(*__cur)); 15726: return __cur; 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__first, __cur); 15726: throw; 15726: } 15726: } 15726: }; 15726: 15726: template<> 15726: struct __uninitialized_default_n_1 15726: { 15726: template 15726: 15726: static _ForwardIterator 15726: __uninit_default_n(_ForwardIterator __first, _Size __n) 15726: { 15726: if (__n > 0) 15726: { 15726: typename iterator_traits<_ForwardIterator>::value_type* __val 15726: = std::__addressof(*__first); 15726: std::_Construct(__val); 15726: ++__first; 15726: __first = std::fill_n(__first, __n - 1, *__val); 15726: } 15726: return __first; 15726: } 15726: }; 15726: 15726: 15726: 15726: template 15726: inline void 15726: __uninitialized_default(_ForwardIterator __first, 15726: _ForwardIterator __last) 15726: { 15726: typedef typename iterator_traits<_ForwardIterator>::value_type 15726: _ValueType; 15726: 15726: const bool __assignable = is_copy_assignable<_ValueType>::value; 15726: 15726: std::__uninitialized_default_1<__is_trivial(_ValueType) 15726: && __assignable>:: 15726: __uninit_default(__first, __last); 15726: } 15726: 15726: 15726: 15726: template 15726: 15726: inline _ForwardIterator 15726: __uninitialized_default_n(_ForwardIterator __first, _Size __n) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef typename iterator_traits<_ForwardIterator>::value_type 15726: _ValueType; 15726: 15726: constexpr bool __can_fill 15726: = __and_, is_copy_assignable<_ValueType>>::value; 15726: 15726: return __uninitialized_default_n_1<__is_trivial(_ValueType) 15726: && __can_fill>:: 15726: __uninit_default_n(__first, __n); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: void 15726: __uninitialized_default_a(_ForwardIterator __first, 15726: _ForwardIterator __last, 15726: _Allocator& __alloc) 15726: { 15726: _ForwardIterator __cur = __first; 15726: try 15726: { 15726: typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; 15726: for (; __cur != __last; ++__cur) 15726: __traits::construct(__alloc, std::__addressof(*__cur)); 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__first, __cur, __alloc); 15726: throw; 15726: } 15726: } 15726: 15726: 15726: template 15726: inline void 15726: __uninitialized_default_a(_ForwardIterator __first, 15726: _ForwardIterator __last, 15726: allocator<_Tp>&) 15726: { std::__uninitialized_default(__first, __last); } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: _ForwardIterator 15726: __uninitialized_default_n_a(_ForwardIterator __first, _Size __n, 15726: _Allocator& __alloc) 15726: { 15726: _ForwardIterator __cur = __first; 15726: try 15726: { 15726: typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; 15726: for (; __n > 0; --__n, (void) ++__cur) 15726: __traits::construct(__alloc, std::__addressof(*__cur)); 15726: return __cur; 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__first, __cur, __alloc); 15726: throw; 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: 15726: inline _ForwardIterator 15726: __uninitialized_default_n_a(_ForwardIterator __first, _Size __n, 15726: allocator<_Tp>&) 15726: { return std::__uninitialized_default_n(__first, __n); } 15726: 15726: 15726: template 15726: struct __uninitialized_default_novalue_1 15726: { 15726: template 15726: static void 15726: __uninit_default_novalue(_ForwardIterator __first, 15726: _ForwardIterator __last) 15726: { 15726: _ForwardIterator __cur = __first; 15726: try 15726: { 15726: for (; __cur != __last; ++__cur) 15726: std::_Construct_novalue(std::__addressof(*__cur)); 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__first, __cur); 15726: throw; 15726: } 15726: } 15726: }; 15726: 15726: template<> 15726: struct __uninitialized_default_novalue_1 15726: { 15726: template 15726: static void 15726: __uninit_default_novalue(_ForwardIterator, _ForwardIterator) 15726: { 15726: } 15726: }; 15726: 15726: template 15726: struct __uninitialized_default_novalue_n_1 15726: { 15726: template 15726: static _ForwardIterator 15726: __uninit_default_novalue_n(_ForwardIterator __first, _Size __n) 15726: { 15726: _ForwardIterator __cur = __first; 15726: try 15726: { 15726: for (; __n > 0; --__n, (void) ++__cur) 15726: std::_Construct_novalue(std::__addressof(*__cur)); 15726: return __cur; 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__first, __cur); 15726: throw; 15726: } 15726: } 15726: }; 15726: 15726: template<> 15726: struct __uninitialized_default_novalue_n_1 15726: { 15726: template 15726: static _ForwardIterator 15726: __uninit_default_novalue_n(_ForwardIterator __first, _Size __n) 15726: { return std::next(__first, __n); } 15726: }; 15726: 15726: 15726: 15726: template 15726: inline void 15726: __uninitialized_default_novalue(_ForwardIterator __first, 15726: _ForwardIterator __last) 15726: { 15726: typedef typename iterator_traits<_ForwardIterator>::value_type 15726: _ValueType; 15726: 15726: std::__uninitialized_default_novalue_1< 15726: is_trivially_default_constructible<_ValueType>::value>:: 15726: __uninit_default_novalue(__first, __last); 15726: } 15726: 15726: 15726: 15726: template 15726: inline _ForwardIterator 15726: __uninitialized_default_novalue_n(_ForwardIterator __first, _Size __n) 15726: { 15726: typedef typename iterator_traits<_ForwardIterator>::value_type 15726: _ValueType; 15726: 15726: return __uninitialized_default_novalue_n_1< 15726: is_trivially_default_constructible<_ValueType>::value>:: 15726: __uninit_default_novalue_n(__first, __n); 15726: } 15726: 15726: template 15726: _ForwardIterator 15726: __uninitialized_copy_n(_InputIterator __first, _Size __n, 15726: _ForwardIterator __result, input_iterator_tag) 15726: { 15726: _ForwardIterator __cur = __result; 15726: try 15726: { 15726: for (; __n > 0; --__n, (void) ++__first, ++__cur) 15726: std::_Construct(std::__addressof(*__cur), *__first); 15726: return __cur; 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__result, __cur); 15726: throw; 15726: } 15726: } 15726: 15726: template 15726: inline _ForwardIterator 15726: __uninitialized_copy_n(_RandomAccessIterator __first, _Size __n, 15726: _ForwardIterator __result, 15726: random_access_iterator_tag) 15726: { return std::uninitialized_copy(__first, __first + __n, __result); } 15726: 15726: template 15726: pair<_InputIterator, _ForwardIterator> 15726: __uninitialized_copy_n_pair(_InputIterator __first, _Size __n, 15726: _ForwardIterator __result, input_iterator_tag) 15726: { 15726: _ForwardIterator __cur = __result; 15726: try 15726: { 15726: for (; __n > 0; --__n, (void) ++__first, ++__cur) 15726: std::_Construct(std::__addressof(*__cur), *__first); 15726: return {__first, __cur}; 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__result, __cur); 15726: throw; 15726: } 15726: } 15726: 15726: template 15726: inline pair<_RandomAccessIterator, _ForwardIterator> 15726: __uninitialized_copy_n_pair(_RandomAccessIterator __first, _Size __n, 15726: _ForwardIterator __result, 15726: random_access_iterator_tag) 15726: { 15726: auto __second_res = uninitialized_copy(__first, __first + __n, __result); 15726: auto __first_res = std::next(__first, __n); 15726: return {__first_res, __second_res}; 15726: } 15726: # 946 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 15726: template 15726: inline _ForwardIterator 15726: uninitialized_copy_n(_InputIterator __first, _Size __n, 15726: _ForwardIterator __result) 15726: { return std::__uninitialized_copy_n(__first, __n, __result, 15726: std::__iterator_category(__first)); } 15726: 15726: 15726: template 15726: inline pair<_InputIterator, _ForwardIterator> 15726: __uninitialized_copy_n_pair(_InputIterator __first, _Size __n, 15726: _ForwardIterator __result) 15726: { 15726: return 15726: std::__uninitialized_copy_n_pair(__first, __n, __result, 15726: std::__iterator_category(__first)); 15726: } 15726: # 975 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 15726: template 15726: inline void 15726: uninitialized_default_construct(_ForwardIterator __first, 15726: _ForwardIterator __last) 15726: { 15726: __uninitialized_default_novalue(__first, __last); 15726: } 15726: # 990 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 15726: template 15726: inline _ForwardIterator 15726: uninitialized_default_construct_n(_ForwardIterator __first, _Size __count) 15726: { 15726: return __uninitialized_default_novalue_n(__first, __count); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline void 15726: uninitialized_value_construct(_ForwardIterator __first, 15726: _ForwardIterator __last) 15726: { 15726: return __uninitialized_default(__first, __last); 15726: } 15726: # 1018 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 15726: template 15726: inline _ForwardIterator 15726: uninitialized_value_construct_n(_ForwardIterator __first, _Size __count) 15726: { 15726: return __uninitialized_default_n(__first, __count); 15726: } 15726: # 1033 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 15726: template 15726: inline _ForwardIterator 15726: uninitialized_move(_InputIterator __first, _InputIterator __last, 15726: _ForwardIterator __result) 15726: { 15726: return std::uninitialized_copy 15726: (std::make_move_iterator(__first), 15726: std::make_move_iterator(__last), __result); 15726: } 15726: # 1051 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 15726: template 15726: inline pair<_InputIterator, _ForwardIterator> 15726: uninitialized_move_n(_InputIterator __first, _Size __count, 15726: _ForwardIterator __result) 15726: { 15726: auto __res = std::__uninitialized_copy_n_pair 15726: (std::make_move_iterator(__first), 15726: __count, __result); 15726: return {__res.first.base(), __res.second}; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: inline void 15726: __relocate_object_a(_Tp* __restrict __dest, _Up* __restrict __orig, 15726: _Allocator& __alloc) 15726: noexcept(noexcept(std::allocator_traits<_Allocator>::construct(__alloc, 15726: __dest, std::move(*__orig))) 15726: && noexcept(std::allocator_traits<_Allocator>::destroy( 15726: __alloc, std::__addressof(*__orig)))) 15726: { 15726: typedef std::allocator_traits<_Allocator> __traits; 15726: __traits::construct(__alloc, __dest, std::move(*__orig)); 15726: __traits::destroy(__alloc, std::__addressof(*__orig)); 15726: } 15726: 15726: 15726: 15726: template 15726: struct __is_bitwise_relocatable 15726: : is_trivial<_Tp> { }; 15726: 15726: template 15726: 15726: inline _ForwardIterator 15726: __relocate_a_1(_InputIterator __first, _InputIterator __last, 15726: _ForwardIterator __result, _Allocator& __alloc) 15726: noexcept(noexcept(std::__relocate_object_a(std::addressof(*__result), 15726: std::addressof(*__first), 15726: __alloc))) 15726: { 15726: typedef typename iterator_traits<_InputIterator>::value_type 15726: _ValueType; 15726: typedef typename iterator_traits<_ForwardIterator>::value_type 15726: _ValueType2; 15726: static_assert(std::is_same<_ValueType, _ValueType2>::value, 15726: "relocation is only possible for values of the same type"); 15726: _ForwardIterator __cur = __result; 15726: for (; __first != __last; ++__first, (void)++__cur) 15726: std::__relocate_object_a(std::__addressof(*__cur), 15726: std::__addressof(*__first), __alloc); 15726: return __cur; 15726: } 15726: 15726: 15726: template 15726: 15726: inline __enable_if_t::value, _Tp*> 15726: __relocate_a_1(_Tp* __first, _Tp* __last, 15726: _Tp* __result, 15726: [[__maybe_unused__]] allocator<_Up>& __alloc) noexcept 15726: { 15726: ptrdiff_t __count = __last - __first; 15726: if (__count > 0) 15726: { 15726: # 1131 "/usr/include/c++/13/bits/stl_uninitialized.h" 3 15726: __builtin_memmove(__result, __first, __count * sizeof(_Tp)); 15726: } 15726: return __result + __count; 15726: } 15726: 15726: 15726: template 15726: 15726: inline _ForwardIterator 15726: __relocate_a(_InputIterator __first, _InputIterator __last, 15726: _ForwardIterator __result, _Allocator& __alloc) 15726: noexcept(noexcept(__relocate_a_1(std::__niter_base(__first), 15726: std::__niter_base(__last), 15726: std::__niter_base(__result), __alloc))) 15726: { 15726: return std::__relocate_a_1(std::__niter_base(__first), 15726: std::__niter_base(__last), 15726: std::__niter_base(__result), __alloc); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 66 "/usr/include/c++/13/deque" 2 3 15726: # 1 "/usr/include/c++/13/bits/stl_deque.h" 1 3 15726: # 63 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: # 1 "/usr/include/c++/13/initializer_list" 1 3 15726: # 33 "/usr/include/c++/13/initializer_list" 3 15726: 15726: # 34 "/usr/include/c++/13/initializer_list" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: template 15726: class initializer_list 15726: { 15726: public: 15726: typedef _E value_type; 15726: typedef const _E& reference; 15726: typedef const _E& const_reference; 15726: typedef size_t size_type; 15726: typedef const _E* iterator; 15726: typedef const _E* const_iterator; 15726: 15726: private: 15726: iterator _M_array; 15726: size_type _M_len; 15726: 15726: 15726: constexpr initializer_list(const_iterator __a, size_type __l) 15726: : _M_array(__a), _M_len(__l) { } 15726: 15726: public: 15726: constexpr initializer_list() noexcept 15726: : _M_array(0), _M_len(0) { } 15726: 15726: 15726: constexpr size_type 15726: size() const noexcept { return _M_len; } 15726: 15726: 15726: constexpr const_iterator 15726: begin() const noexcept { return _M_array; } 15726: 15726: 15726: constexpr const_iterator 15726: end() const noexcept { return begin() + size(); } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: constexpr const _Tp* 15726: begin(initializer_list<_Tp> __ils) noexcept 15726: { return __ils.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: constexpr const _Tp* 15726: end(initializer_list<_Tp> __ils) noexcept 15726: { return __ils.end(); } 15726: } 15726: # 64 "/usr/include/c++/13/bits/stl_deque.h" 2 3 15726: # 72 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: # 95 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: constexpr inline size_t 15726: __deque_buf_size(size_t __size) 15726: { return (__size < 512 15726: ? size_t(512 / __size) : size_t(1)); } 15726: # 112 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: template 15726: struct _Deque_iterator 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: private: 15726: template 15726: using __iter = _Deque_iterator<_Tp, _CvTp&, __ptr_rebind<_Ptr, _CvTp>>; 15726: public: 15726: typedef __iter<_Tp> iterator; 15726: typedef __iter const_iterator; 15726: typedef __ptr_rebind<_Ptr, _Tp> _Elt_pointer; 15726: typedef __ptr_rebind<_Ptr, _Elt_pointer> _Map_pointer; 15726: 15726: 15726: static size_t _S_buffer_size() noexcept 15726: { return __deque_buf_size(sizeof(_Tp)); } 15726: 15726: typedef std::random_access_iterator_tag iterator_category; 15726: typedef _Tp value_type; 15726: typedef _Ptr pointer; 15726: typedef _Ref reference; 15726: typedef size_t size_type; 15726: typedef ptrdiff_t difference_type; 15726: typedef _Deque_iterator _Self; 15726: 15726: _Elt_pointer _M_cur; 15726: _Elt_pointer _M_first; 15726: _Elt_pointer _M_last; 15726: _Map_pointer _M_node; 15726: 15726: _Deque_iterator(_Elt_pointer __x, _Map_pointer __y) noexcept 15726: : _M_cur(__x), _M_first(*__y), 15726: _M_last(*__y + _S_buffer_size()), _M_node(__y) { } 15726: 15726: _Deque_iterator() noexcept 15726: : _M_cur(), _M_first(), _M_last(), _M_node() { } 15726: # 161 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: template, 15726: is_same<_Iter, iterator>>> 15726: _Deque_iterator(const _Iter& __x) noexcept 15726: : _M_cur(__x._M_cur), _M_first(__x._M_first), 15726: _M_last(__x._M_last), _M_node(__x._M_node) { } 15726: 15726: _Deque_iterator(const _Deque_iterator& __x) noexcept 15726: : _M_cur(__x._M_cur), _M_first(__x._M_first), 15726: _M_last(__x._M_last), _M_node(__x._M_node) { } 15726: 15726: _Deque_iterator& operator=(const _Deque_iterator&) = default; 15726: 15726: 15726: iterator 15726: _M_const_cast() const noexcept 15726: { return iterator(_M_cur, _M_node); } 15726: 15726: [[__nodiscard__]] 15726: reference 15726: operator*() const noexcept 15726: { return *_M_cur; } 15726: 15726: [[__nodiscard__]] 15726: pointer 15726: operator->() const noexcept 15726: { return _M_cur; } 15726: 15726: _Self& 15726: operator++() noexcept 15726: { 15726: ++_M_cur; 15726: if (_M_cur == _M_last) 15726: { 15726: _M_set_node(_M_node + 1); 15726: _M_cur = _M_first; 15726: } 15726: return *this; 15726: } 15726: 15726: _Self 15726: operator++(int) noexcept 15726: { 15726: _Self __tmp = *this; 15726: ++*this; 15726: return __tmp; 15726: } 15726: 15726: _Self& 15726: operator--() noexcept 15726: { 15726: if (_M_cur == _M_first) 15726: { 15726: _M_set_node(_M_node - 1); 15726: _M_cur = _M_last; 15726: } 15726: --_M_cur; 15726: return *this; 15726: } 15726: 15726: _Self 15726: operator--(int) noexcept 15726: { 15726: _Self __tmp = *this; 15726: --*this; 15726: return __tmp; 15726: } 15726: 15726: _Self& 15726: operator+=(difference_type __n) noexcept 15726: { 15726: const difference_type __offset = __n + (_M_cur - _M_first); 15726: if (__offset >= 0 && __offset < difference_type(_S_buffer_size())) 15726: _M_cur += __n; 15726: else 15726: { 15726: const difference_type __node_offset = 15726: __offset > 0 ? __offset / difference_type(_S_buffer_size()) 15726: : -difference_type((-__offset - 1) 15726: / _S_buffer_size()) - 1; 15726: _M_set_node(_M_node + __node_offset); 15726: _M_cur = _M_first + (__offset - __node_offset 15726: * difference_type(_S_buffer_size())); 15726: } 15726: return *this; 15726: } 15726: 15726: _Self& 15726: operator-=(difference_type __n) noexcept 15726: { return *this += -__n; } 15726: 15726: [[__nodiscard__]] 15726: reference 15726: operator[](difference_type __n) const noexcept 15726: { return *(*this + __n); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: _M_set_node(_Map_pointer __new_node) noexcept 15726: { 15726: _M_node = __new_node; 15726: _M_first = *__new_node; 15726: _M_last = _M_first + difference_type(_S_buffer_size()); 15726: } 15726: 15726: [[__nodiscard__]] 15726: friend bool 15726: operator==(const _Self& __x, const _Self& __y) noexcept 15726: { return __x._M_cur == __y._M_cur; } 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: friend bool 15726: operator==(const _Self& __x, 15726: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) 15726: noexcept 15726: { return __x._M_cur == __y._M_cur; } 15726: # 296 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: [[__nodiscard__]] 15726: friend bool 15726: operator!=(const _Self& __x, const _Self& __y) noexcept 15726: { return !(__x == __y); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: friend bool 15726: operator!=(const _Self& __x, 15726: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) 15726: noexcept 15726: { return !(__x == __y); } 15726: 15726: [[__nodiscard__]] 15726: friend bool 15726: operator<(const _Self& __x, const _Self& __y) noexcept 15726: { 15726: return (__x._M_node == __y._M_node) 15726: ? (__x._M_cur < __y._M_cur) : (__x._M_node < __y._M_node); 15726: } 15726: 15726: template 15726: [[__nodiscard__]] 15726: friend bool 15726: operator<(const _Self& __x, 15726: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) 15726: noexcept 15726: { 15726: return (__x._M_node == __y._M_node) 15726: ? (__x._M_cur < __y._M_cur) : (__x._M_node < __y._M_node); 15726: } 15726: 15726: [[__nodiscard__]] 15726: friend bool 15726: operator>(const _Self& __x, const _Self& __y) noexcept 15726: { return __y < __x; } 15726: 15726: template 15726: [[__nodiscard__]] 15726: friend bool 15726: operator>(const _Self& __x, 15726: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) 15726: noexcept 15726: { return __y < __x; } 15726: 15726: [[__nodiscard__]] 15726: friend bool 15726: operator<=(const _Self& __x, const _Self& __y) noexcept 15726: { return !(__y < __x); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: friend bool 15726: operator<=(const _Self& __x, 15726: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) 15726: noexcept 15726: { return !(__y < __x); } 15726: 15726: [[__nodiscard__]] 15726: friend bool 15726: operator>=(const _Self& __x, const _Self& __y) noexcept 15726: { return !(__x < __y); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: friend bool 15726: operator>=(const _Self& __x, 15726: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) 15726: noexcept 15726: { return !(__x < __y); } 15726: 15726: 15726: [[__nodiscard__]] 15726: friend difference_type 15726: operator-(const _Self& __x, const _Self& __y) noexcept 15726: { 15726: return difference_type(_S_buffer_size()) 15726: * (__x._M_node - __y._M_node - bool(__x._M_node)) 15726: + (__x._M_cur - __x._M_first) 15726: + (__y._M_last - __y._M_cur); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: friend difference_type 15726: operator-(const _Self& __x, 15726: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) 15726: noexcept 15726: { 15726: return difference_type(_S_buffer_size()) 15726: * (__x._M_node - __y._M_node - bool(__x._M_node)) 15726: + (__x._M_cur - __x._M_first) 15726: + (__y._M_last - __y._M_cur); 15726: } 15726: 15726: [[__nodiscard__]] 15726: friend _Self 15726: operator+(const _Self& __x, difference_type __n) noexcept 15726: { 15726: _Self __tmp = __x; 15726: __tmp += __n; 15726: return __tmp; 15726: } 15726: 15726: [[__nodiscard__]] 15726: friend _Self 15726: operator-(const _Self& __x, difference_type __n) noexcept 15726: { 15726: _Self __tmp = __x; 15726: __tmp -= __n; 15726: return __tmp; 15726: } 15726: 15726: [[__nodiscard__]] 15726: friend _Self 15726: operator+(difference_type __n, const _Self& __x) noexcept 15726: { return __x + __n; } 15726: }; 15726: # 429 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: template 15726: class _Deque_base 15726: { 15726: protected: 15726: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 15726: rebind<_Tp>::other _Tp_alloc_type; 15726: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Alloc_traits; 15726: 15726: 15726: 15726: 15726: 15726: typedef typename _Alloc_traits::pointer _Ptr; 15726: typedef typename _Alloc_traits::const_pointer _Ptr_const; 15726: 15726: 15726: typedef typename _Alloc_traits::template rebind<_Ptr>::other 15726: _Map_alloc_type; 15726: typedef __gnu_cxx::__alloc_traits<_Map_alloc_type> _Map_alloc_traits; 15726: 15726: typedef _Alloc allocator_type; 15726: 15726: allocator_type 15726: get_allocator() const noexcept 15726: { return allocator_type(_M_get_Tp_allocator()); } 15726: 15726: typedef _Deque_iterator<_Tp, _Tp&, _Ptr> iterator; 15726: typedef _Deque_iterator<_Tp, const _Tp&, _Ptr_const> const_iterator; 15726: 15726: _Deque_base() 15726: : _M_impl() 15726: { _M_initialize_map(0); } 15726: 15726: _Deque_base(size_t __num_elements) 15726: : _M_impl() 15726: { _M_initialize_map(__num_elements); } 15726: 15726: _Deque_base(const allocator_type& __a, size_t __num_elements) 15726: : _M_impl(__a) 15726: { _M_initialize_map(__num_elements); } 15726: 15726: _Deque_base(const allocator_type& __a) 15726: : _M_impl(__a) 15726: { } 15726: 15726: 15726: _Deque_base(_Deque_base&& __x) 15726: : _M_impl(std::move(__x._M_get_Tp_allocator())) 15726: { 15726: _M_initialize_map(0); 15726: if (__x._M_impl._M_map) 15726: this->_M_impl._M_swap_data(__x._M_impl); 15726: } 15726: 15726: _Deque_base(_Deque_base&& __x, const allocator_type& __a) 15726: : _M_impl(std::move(__x._M_impl), _Tp_alloc_type(__a)) 15726: { __x._M_initialize_map(0); } 15726: 15726: _Deque_base(_Deque_base&& __x, const allocator_type& __a, size_t __n) 15726: : _M_impl(__a) 15726: { 15726: if (__x.get_allocator() == __a) 15726: { 15726: if (__x._M_impl._M_map) 15726: { 15726: _M_initialize_map(0); 15726: this->_M_impl._M_swap_data(__x._M_impl); 15726: } 15726: } 15726: else 15726: { 15726: _M_initialize_map(__n); 15726: } 15726: } 15726: 15726: 15726: ~_Deque_base() noexcept; 15726: 15726: typedef typename iterator::_Map_pointer _Map_pointer; 15726: 15726: struct _Deque_impl_data 15726: { 15726: _Map_pointer _M_map; 15726: size_t _M_map_size; 15726: iterator _M_start; 15726: iterator _M_finish; 15726: 15726: _Deque_impl_data() noexcept 15726: : _M_map(), _M_map_size(), _M_start(), _M_finish() 15726: { } 15726: 15726: 15726: _Deque_impl_data(const _Deque_impl_data&) = default; 15726: _Deque_impl_data& 15726: operator=(const _Deque_impl_data&) = default; 15726: 15726: _Deque_impl_data(_Deque_impl_data&& __x) noexcept 15726: : _Deque_impl_data(__x) 15726: { __x = _Deque_impl_data(); } 15726: 15726: 15726: void 15726: _M_swap_data(_Deque_impl_data& __x) noexcept 15726: { 15726: 15726: 15726: std::swap(*this, __x); 15726: } 15726: }; 15726: 15726: 15726: 15726: 15726: struct _Deque_impl 15726: : public _Tp_alloc_type, public _Deque_impl_data 15726: { 15726: _Deque_impl() noexcept(is_nothrow_default_constructible<_Tp_alloc_type>::value) 15726: 15726: : _Tp_alloc_type() 15726: { } 15726: 15726: _Deque_impl(const _Tp_alloc_type& __a) noexcept 15726: : _Tp_alloc_type(__a) 15726: { } 15726: 15726: 15726: _Deque_impl(_Deque_impl&&) = default; 15726: 15726: _Deque_impl(_Tp_alloc_type&& __a) noexcept 15726: : _Tp_alloc_type(std::move(__a)) 15726: { } 15726: 15726: _Deque_impl(_Deque_impl&& __d, _Tp_alloc_type&& __a) 15726: : _Tp_alloc_type(std::move(__a)), _Deque_impl_data(std::move(__d)) 15726: { } 15726: 15726: }; 15726: 15726: _Tp_alloc_type& 15726: _M_get_Tp_allocator() noexcept 15726: { return this->_M_impl; } 15726: 15726: const _Tp_alloc_type& 15726: _M_get_Tp_allocator() const noexcept 15726: { return this->_M_impl; } 15726: 15726: _Map_alloc_type 15726: _M_get_map_allocator() const noexcept 15726: { return _Map_alloc_type(_M_get_Tp_allocator()); } 15726: 15726: _Ptr 15726: _M_allocate_node() 15726: { 15726: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Traits; 15726: return _Traits::allocate(_M_impl, __deque_buf_size(sizeof(_Tp))); 15726: } 15726: 15726: void 15726: _M_deallocate_node(_Ptr __p) noexcept 15726: { 15726: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Traits; 15726: _Traits::deallocate(_M_impl, __p, __deque_buf_size(sizeof(_Tp))); 15726: } 15726: 15726: _Map_pointer 15726: _M_allocate_map(size_t __n) 15726: { 15726: _Map_alloc_type __map_alloc = _M_get_map_allocator(); 15726: return _Map_alloc_traits::allocate(__map_alloc, __n); 15726: } 15726: 15726: void 15726: _M_deallocate_map(_Map_pointer __p, size_t __n) noexcept 15726: { 15726: _Map_alloc_type __map_alloc = _M_get_map_allocator(); 15726: _Map_alloc_traits::deallocate(__map_alloc, __p, __n); 15726: } 15726: 15726: void _M_initialize_map(size_t); 15726: void _M_create_nodes(_Map_pointer __nstart, _Map_pointer __nfinish); 15726: void _M_destroy_nodes(_Map_pointer __nstart, 15726: _Map_pointer __nfinish) noexcept; 15726: enum { _S_initial_map_size = 8 }; 15726: 15726: _Deque_impl _M_impl; 15726: }; 15726: 15726: template 15726: _Deque_base<_Tp, _Alloc>:: 15726: ~_Deque_base() noexcept 15726: { 15726: if (this->_M_impl._M_map) 15726: { 15726: _M_destroy_nodes(this->_M_impl._M_start._M_node, 15726: this->_M_impl._M_finish._M_node + 1); 15726: _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size); 15726: } 15726: } 15726: # 636 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: template 15726: void 15726: _Deque_base<_Tp, _Alloc>:: 15726: _M_initialize_map(size_t __num_elements) 15726: { 15726: const size_t __num_nodes = (__num_elements / __deque_buf_size(sizeof(_Tp)) 15726: + 1); 15726: 15726: this->_M_impl._M_map_size = std::max((size_t) _S_initial_map_size, 15726: size_t(__num_nodes + 2)); 15726: this->_M_impl._M_map = _M_allocate_map(this->_M_impl._M_map_size); 15726: 15726: 15726: 15726: 15726: 15726: 15726: _Map_pointer __nstart = (this->_M_impl._M_map 15726: + (this->_M_impl._M_map_size - __num_nodes) / 2); 15726: _Map_pointer __nfinish = __nstart + __num_nodes; 15726: 15726: try 15726: { _M_create_nodes(__nstart, __nfinish); } 15726: catch(...) 15726: { 15726: _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size); 15726: this->_M_impl._M_map = _Map_pointer(); 15726: this->_M_impl._M_map_size = 0; 15726: throw; 15726: } 15726: 15726: this->_M_impl._M_start._M_set_node(__nstart); 15726: this->_M_impl._M_finish._M_set_node(__nfinish - 1); 15726: this->_M_impl._M_start._M_cur = _M_impl._M_start._M_first; 15726: this->_M_impl._M_finish._M_cur = (this->_M_impl._M_finish._M_first 15726: + __num_elements 15726: % __deque_buf_size(sizeof(_Tp))); 15726: } 15726: 15726: template 15726: void 15726: _Deque_base<_Tp, _Alloc>:: 15726: _M_create_nodes(_Map_pointer __nstart, _Map_pointer __nfinish) 15726: { 15726: _Map_pointer __cur; 15726: try 15726: { 15726: for (__cur = __nstart; __cur < __nfinish; ++__cur) 15726: *__cur = this->_M_allocate_node(); 15726: } 15726: catch(...) 15726: { 15726: _M_destroy_nodes(__nstart, __cur); 15726: throw; 15726: } 15726: } 15726: 15726: template 15726: void 15726: _Deque_base<_Tp, _Alloc>:: 15726: _M_destroy_nodes(_Map_pointer __nstart, 15726: _Map_pointer __nfinish) noexcept 15726: { 15726: for (_Map_pointer __n = __nstart; __n < __nfinish; ++__n) 15726: _M_deallocate_node(*__n); 15726: } 15726: # 787 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: template > 15726: class deque : protected _Deque_base<_Tp, _Alloc> 15726: { 15726: # 800 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: static_assert(is_same::type, _Tp>::value, 15726: "std::deque must have a non-const, non-volatile value_type"); 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef _Deque_base<_Tp, _Alloc> _Base; 15726: typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; 15726: typedef typename _Base::_Alloc_traits _Alloc_traits; 15726: typedef typename _Base::_Map_pointer _Map_pointer; 15726: 15726: public: 15726: typedef _Tp value_type; 15726: typedef typename _Alloc_traits::pointer pointer; 15726: typedef typename _Alloc_traits::const_pointer const_pointer; 15726: typedef typename _Alloc_traits::reference reference; 15726: typedef typename _Alloc_traits::const_reference const_reference; 15726: typedef typename _Base::iterator iterator; 15726: typedef typename _Base::const_iterator const_iterator; 15726: typedef std::reverse_iterator const_reverse_iterator; 15726: typedef std::reverse_iterator reverse_iterator; 15726: typedef size_t size_type; 15726: typedef ptrdiff_t difference_type; 15726: typedef _Alloc allocator_type; 15726: 15726: private: 15726: static size_t _S_buffer_size() noexcept 15726: { return __deque_buf_size(sizeof(_Tp)); } 15726: 15726: 15726: using _Base::_M_initialize_map; 15726: using _Base::_M_create_nodes; 15726: using _Base::_M_destroy_nodes; 15726: using _Base::_M_allocate_node; 15726: using _Base::_M_deallocate_node; 15726: using _Base::_M_allocate_map; 15726: using _Base::_M_deallocate_map; 15726: using _Base::_M_get_Tp_allocator; 15726: 15726: 15726: 15726: 15726: 15726: using _Base::_M_impl; 15726: 15726: public: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: deque() = default; 15726: # 864 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: explicit 15726: deque(const allocator_type& __a) 15726: : _Base(__a, 0) { } 15726: # 877 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: explicit 15726: deque(size_type __n, const allocator_type& __a = allocator_type()) 15726: : _Base(__a, _S_check_init_len(__n, __a)) 15726: { _M_default_initialize(); } 15726: # 890 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: deque(size_type __n, const value_type& __value, 15726: const allocator_type& __a = allocator_type()) 15726: : _Base(__a, _S_check_init_len(__n, __a)) 15726: { _M_fill_initialize(__value); } 15726: # 917 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: deque(const deque& __x) 15726: : _Base(_Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator()), 15726: __x.size()) 15726: { std::__uninitialized_copy_a(__x.begin(), __x.end(), 15726: this->_M_impl._M_start, 15726: _M_get_Tp_allocator()); } 15726: # 933 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: deque(deque&&) = default; 15726: 15726: 15726: deque(const deque& __x, const __type_identity_t& __a) 15726: : _Base(__a, __x.size()) 15726: { std::__uninitialized_copy_a(__x.begin(), __x.end(), 15726: this->_M_impl._M_start, 15726: _M_get_Tp_allocator()); } 15726: 15726: 15726: deque(deque&& __x, const __type_identity_t& __a) 15726: : deque(std::move(__x), __a, typename _Alloc_traits::is_always_equal{}) 15726: { } 15726: 15726: private: 15726: deque(deque&& __x, const allocator_type& __a, true_type) 15726: : _Base(std::move(__x), __a) 15726: { } 15726: 15726: deque(deque&& __x, const allocator_type& __a, false_type) 15726: : _Base(std::move(__x), __a, __x.size()) 15726: { 15726: if (__x.get_allocator() != __a && !__x.empty()) 15726: { 15726: std::__uninitialized_move_a(__x.begin(), __x.end(), 15726: this->_M_impl._M_start, 15726: _M_get_Tp_allocator()); 15726: __x.clear(); 15726: } 15726: } 15726: 15726: public: 15726: # 976 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: deque(initializer_list __l, 15726: const allocator_type& __a = allocator_type()) 15726: : _Base(__a) 15726: { 15726: _M_range_initialize(__l.begin(), __l.end(), 15726: random_access_iterator_tag()); 15726: } 15726: # 1001 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: template> 15726: deque(_InputIterator __first, _InputIterator __last, 15726: const allocator_type& __a = allocator_type()) 15726: : _Base(__a) 15726: { 15726: _M_range_initialize(__first, __last, 15726: std::__iterator_category(__first)); 15726: } 15726: # 1027 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: ~deque() 15726: { _M_destroy_data(begin(), end(), _M_get_Tp_allocator()); } 15726: # 1039 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: deque& 15726: operator=(const deque& __x); 15726: # 1051 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: deque& 15726: operator=(deque&& __x) noexcept(_Alloc_traits::_S_always_equal()) 15726: { 15726: using __always_equal = typename _Alloc_traits::is_always_equal; 15726: _M_move_assign1(std::move(__x), __always_equal{}); 15726: return *this; 15726: } 15726: # 1070 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: deque& 15726: operator=(initializer_list __l) 15726: { 15726: _M_assign_aux(__l.begin(), __l.end(), 15726: random_access_iterator_tag()); 15726: return *this; 15726: } 15726: # 1089 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: void 15726: assign(size_type __n, const value_type& __val) 15726: { _M_fill_assign(__n, __val); } 15726: # 1106 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: template> 15726: void 15726: assign(_InputIterator __first, _InputIterator __last) 15726: { _M_assign_aux(__first, __last, std::__iterator_category(__first)); } 15726: # 1133 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: void 15726: assign(initializer_list __l) 15726: { _M_assign_aux(__l.begin(), __l.end(), random_access_iterator_tag()); } 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: allocator_type 15726: get_allocator() const noexcept 15726: { return _Base::get_allocator(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: iterator 15726: begin() noexcept 15726: { return this->_M_impl._M_start; } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: begin() const noexcept 15726: { return this->_M_impl._M_start; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: iterator 15726: end() noexcept 15726: { return this->_M_impl._M_finish; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: end() const noexcept 15726: { return this->_M_impl._M_finish; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: reverse_iterator 15726: rbegin() noexcept 15726: { return reverse_iterator(this->_M_impl._M_finish); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: rbegin() const noexcept 15726: { return const_reverse_iterator(this->_M_impl._M_finish); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: reverse_iterator 15726: rend() noexcept 15726: { return reverse_iterator(this->_M_impl._M_start); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: rend() const noexcept 15726: { return const_reverse_iterator(this->_M_impl._M_start); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: cbegin() const noexcept 15726: { return this->_M_impl._M_start; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: cend() const noexcept 15726: { return this->_M_impl._M_finish; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: crbegin() const noexcept 15726: { return const_reverse_iterator(this->_M_impl._M_finish); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: crend() const noexcept 15726: { return const_reverse_iterator(this->_M_impl._M_start); } 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: size_type 15726: size() const noexcept 15726: { return this->_M_impl._M_finish - this->_M_impl._M_start; } 15726: 15726: 15726: [[__nodiscard__]] 15726: size_type 15726: max_size() const noexcept 15726: { return _S_max_size(_M_get_Tp_allocator()); } 15726: # 1287 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: void 15726: resize(size_type __new_size) 15726: { 15726: const size_type __len = size(); 15726: if (__new_size > __len) 15726: _M_default_append(__new_size - __len); 15726: else if (__new_size < __len) 15726: _M_erase_at_end(this->_M_impl._M_start 15726: + difference_type(__new_size)); 15726: } 15726: # 1309 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: void 15726: resize(size_type __new_size, const value_type& __x) 15726: # 1326 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: { 15726: const size_type __len = size(); 15726: if (__new_size > __len) 15726: _M_fill_insert(this->_M_impl._M_finish, __new_size - __len, __x); 15726: else if (__new_size < __len) 15726: _M_erase_at_end(this->_M_impl._M_start 15726: + difference_type(__new_size)); 15726: } 15726: 15726: 15726: 15726: void 15726: shrink_to_fit() noexcept 15726: { _M_shrink_to_fit(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] bool 15726: empty() const noexcept 15726: { return this->_M_impl._M_finish == this->_M_impl._M_start; } 15726: # 1362 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: [[__nodiscard__]] 15726: reference 15726: operator[](size_type __n) noexcept 15726: { 15726: ; 15726: return this->_M_impl._M_start[difference_type(__n)]; 15726: } 15726: # 1381 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: [[__nodiscard__]] 15726: const_reference 15726: operator[](size_type __n) const noexcept 15726: { 15726: ; 15726: return this->_M_impl._M_start[difference_type(__n)]; 15726: } 15726: 15726: protected: 15726: 15726: void 15726: _M_range_check(size_type __n) const 15726: { 15726: if (__n >= this->size()) 15726: __throw_out_of_range_fmt(("deque::_M_range_check: __n " "(which is %zu)>= this->size() " "(which is %zu)") 15726: 15726: , 15726: __n, this->size()); 15726: } 15726: 15726: public: 15726: # 1413 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: reference 15726: at(size_type __n) 15726: { 15726: _M_range_check(__n); 15726: return (*this)[__n]; 15726: } 15726: # 1431 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: const_reference 15726: at(size_type __n) const 15726: { 15726: _M_range_check(__n); 15726: return (*this)[__n]; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: reference 15726: front() noexcept 15726: { 15726: ; 15726: return *begin(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reference 15726: front() const noexcept 15726: { 15726: ; 15726: return *begin(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: reference 15726: back() noexcept 15726: { 15726: ; 15726: iterator __tmp = end(); 15726: --__tmp; 15726: return *__tmp; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reference 15726: back() const noexcept 15726: { 15726: ; 15726: const_iterator __tmp = end(); 15726: --__tmp; 15726: return *__tmp; 15726: } 15726: # 1500 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: void 15726: push_front(const value_type& __x) 15726: { 15726: if (this->_M_impl._M_start._M_cur != this->_M_impl._M_start._M_first) 15726: { 15726: _Alloc_traits::construct(this->_M_impl, 15726: this->_M_impl._M_start._M_cur - 1, 15726: __x); 15726: --this->_M_impl._M_start._M_cur; 15726: } 15726: else 15726: _M_push_front_aux(__x); 15726: } 15726: 15726: 15726: void 15726: push_front(value_type&& __x) 15726: { emplace_front(std::move(__x)); } 15726: 15726: template 15726: 15726: reference 15726: 15726: 15726: 15726: emplace_front(_Args&&... __args); 15726: # 1537 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: void 15726: push_back(const value_type& __x) 15726: { 15726: if (this->_M_impl._M_finish._M_cur 15726: != this->_M_impl._M_finish._M_last - 1) 15726: { 15726: _Alloc_traits::construct(this->_M_impl, 15726: this->_M_impl._M_finish._M_cur, __x); 15726: ++this->_M_impl._M_finish._M_cur; 15726: } 15726: else 15726: _M_push_back_aux(__x); 15726: } 15726: 15726: 15726: void 15726: push_back(value_type&& __x) 15726: { emplace_back(std::move(__x)); } 15726: 15726: template 15726: 15726: reference 15726: 15726: 15726: 15726: emplace_back(_Args&&... __args); 15726: # 1573 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: void 15726: pop_front() noexcept 15726: { 15726: ; 15726: if (this->_M_impl._M_start._M_cur 15726: != this->_M_impl._M_start._M_last - 1) 15726: { 15726: _Alloc_traits::destroy(_M_get_Tp_allocator(), 15726: this->_M_impl._M_start._M_cur); 15726: ++this->_M_impl._M_start._M_cur; 15726: } 15726: else 15726: _M_pop_front_aux(); 15726: } 15726: # 1596 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: void 15726: pop_back() noexcept 15726: { 15726: ; 15726: if (this->_M_impl._M_finish._M_cur 15726: != this->_M_impl._M_finish._M_first) 15726: { 15726: --this->_M_impl._M_finish._M_cur; 15726: _Alloc_traits::destroy(_M_get_Tp_allocator(), 15726: this->_M_impl._M_finish._M_cur); 15726: } 15726: else 15726: _M_pop_back_aux(); 15726: } 15726: # 1621 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: template 15726: iterator 15726: emplace(const_iterator __position, _Args&&... __args); 15726: # 1634 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: iterator 15726: insert(const_iterator __position, const value_type& __x); 15726: # 1660 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: iterator 15726: insert(const_iterator __position, value_type&& __x) 15726: { return emplace(__position, std::move(__x)); } 15726: # 1674 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: iterator 15726: insert(const_iterator __p, initializer_list __l) 15726: { 15726: auto __offset = __p - cbegin(); 15726: _M_range_insert_aux(__p._M_const_cast(), __l.begin(), __l.end(), 15726: std::random_access_iterator_tag()); 15726: return begin() + __offset; 15726: } 15726: # 1693 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: iterator 15726: insert(const_iterator __position, size_type __n, const value_type& __x) 15726: { 15726: difference_type __offset = __position - cbegin(); 15726: _M_fill_insert(__position._M_const_cast(), __n, __x); 15726: return begin() + __offset; 15726: } 15726: # 1727 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: template> 15726: iterator 15726: insert(const_iterator __position, _InputIterator __first, 15726: _InputIterator __last) 15726: { 15726: difference_type __offset = __position - cbegin(); 15726: _M_range_insert_aux(__position._M_const_cast(), __first, __last, 15726: std::__iterator_category(__first)); 15726: return begin() + __offset; 15726: } 15726: # 1773 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: iterator 15726: 15726: erase(const_iterator __position) 15726: 15726: 15726: 15726: { return _M_erase(__position._M_const_cast()); } 15726: # 1797 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: iterator 15726: 15726: erase(const_iterator __first, const_iterator __last) 15726: 15726: 15726: 15726: { return _M_erase(__first._M_const_cast(), __last._M_const_cast()); } 15726: # 1816 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: void 15726: swap(deque& __x) noexcept 15726: { 15726: 15726: do { if (std::__is_constant_evaluated() && !bool(_Alloc_traits::propagate_on_container_swap::value || _M_get_Tp_allocator() == __x._M_get_Tp_allocator())) __builtin_unreachable(); } while (false) 15726: ; 15726: 15726: _M_impl._M_swap_data(__x._M_impl); 15726: _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(), 15726: __x._M_get_Tp_allocator()); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: clear() noexcept 15726: { _M_erase_at_end(begin()); } 15726: 15726: protected: 15726: # 1866 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: static size_t 15726: _S_check_init_len(size_t __n, const allocator_type& __a) 15726: { 15726: if (__n > _S_max_size(__a)) 15726: __throw_length_error( 15726: ("cannot create std::deque larger than max_size()")); 15726: return __n; 15726: } 15726: 15726: static size_type 15726: _S_max_size(const _Tp_alloc_type& __a) noexcept 15726: { 15726: const size_t __diffmax = __gnu_cxx::__numeric_traits::__max; 15726: const size_t __allocmax = _Alloc_traits::max_size(__a); 15726: return (std::min)(__diffmax, __allocmax); 15726: } 15726: # 1895 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: template 15726: void 15726: _M_range_initialize(_InputIterator __first, _InputIterator __last, 15726: std::input_iterator_tag); 15726: 15726: 15726: template 15726: void 15726: _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last, 15726: std::forward_iterator_tag); 15726: # 1917 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: void 15726: _M_fill_initialize(const value_type& __value); 15726: 15726: 15726: 15726: void 15726: _M_default_initialize(); 15726: # 1948 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: template 15726: void 15726: _M_assign_aux(_InputIterator __first, _InputIterator __last, 15726: std::input_iterator_tag); 15726: 15726: 15726: template 15726: void 15726: _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, 15726: std::forward_iterator_tag) 15726: { 15726: const size_type __len = std::distance(__first, __last); 15726: if (__len > size()) 15726: { 15726: _ForwardIterator __mid = __first; 15726: std::advance(__mid, size()); 15726: std::copy(__first, __mid, begin()); 15726: _M_range_insert_aux(end(), __mid, __last, 15726: std::__iterator_category(__first)); 15726: } 15726: else 15726: _M_erase_at_end(std::copy(__first, __last, begin())); 15726: } 15726: 15726: 15726: 15726: void 15726: _M_fill_assign(size_type __n, const value_type& __val) 15726: { 15726: if (__n > size()) 15726: { 15726: std::fill(begin(), end(), __val); 15726: _M_fill_insert(end(), __n - size(), __val); 15726: } 15726: else 15726: { 15726: _M_erase_at_end(begin() + difference_type(__n)); 15726: std::fill(begin(), end(), __val); 15726: } 15726: } 15726: # 1996 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: template 15726: void _M_push_back_aux(_Args&&... __args); 15726: 15726: template 15726: void _M_push_front_aux(_Args&&... __args); 15726: 15726: 15726: void _M_pop_back_aux(); 15726: 15726: void _M_pop_front_aux(); 15726: # 2035 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: template 15726: void 15726: _M_range_insert_aux(iterator __pos, _InputIterator __first, 15726: _InputIterator __last, std::input_iterator_tag); 15726: 15726: 15726: template 15726: void 15726: _M_range_insert_aux(iterator __pos, _ForwardIterator __first, 15726: _ForwardIterator __last, std::forward_iterator_tag); 15726: 15726: 15726: 15726: 15726: void 15726: _M_fill_insert(iterator __pos, size_type __n, const value_type& __x); 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: iterator 15726: _M_insert_aux(iterator __pos, _Args&&... __args); 15726: 15726: 15726: 15726: void 15726: _M_insert_aux(iterator __pos, size_type __n, const value_type& __x); 15726: 15726: 15726: template 15726: void 15726: _M_insert_aux(iterator __pos, 15726: _ForwardIterator __first, _ForwardIterator __last, 15726: size_type __n); 15726: 15726: 15726: 15726: 15726: void 15726: _M_destroy_data_aux(iterator __first, iterator __last); 15726: 15726: 15726: 15726: template 15726: void 15726: _M_destroy_data(iterator __first, iterator __last, const _Alloc1&) 15726: { _M_destroy_data_aux(__first, __last); } 15726: 15726: void 15726: _M_destroy_data(iterator __first, iterator __last, 15726: const std::allocator<_Tp>&) 15726: { 15726: if (!__has_trivial_destructor(value_type)) 15726: _M_destroy_data_aux(__first, __last); 15726: } 15726: 15726: 15726: void 15726: _M_erase_at_begin(iterator __pos) 15726: { 15726: _M_destroy_data(begin(), __pos, _M_get_Tp_allocator()); 15726: _M_destroy_nodes(this->_M_impl._M_start._M_node, __pos._M_node); 15726: this->_M_impl._M_start = __pos; 15726: } 15726: 15726: 15726: 15726: void 15726: _M_erase_at_end(iterator __pos) 15726: { 15726: _M_destroy_data(__pos, end(), _M_get_Tp_allocator()); 15726: _M_destroy_nodes(__pos._M_node + 1, 15726: this->_M_impl._M_finish._M_node + 1); 15726: this->_M_impl._M_finish = __pos; 15726: } 15726: 15726: iterator 15726: _M_erase(iterator __pos); 15726: 15726: iterator 15726: _M_erase(iterator __first, iterator __last); 15726: 15726: 15726: 15726: void 15726: _M_default_append(size_type __n); 15726: 15726: bool 15726: _M_shrink_to_fit(); 15726: 15726: 15726: 15726: 15726: iterator 15726: _M_reserve_elements_at_front(size_type __n) 15726: { 15726: const size_type __vacancies = this->_M_impl._M_start._M_cur 15726: - this->_M_impl._M_start._M_first; 15726: if (__n > __vacancies) 15726: _M_new_elements_at_front(__n - __vacancies); 15726: return this->_M_impl._M_start - difference_type(__n); 15726: } 15726: 15726: iterator 15726: _M_reserve_elements_at_back(size_type __n) 15726: { 15726: const size_type __vacancies = (this->_M_impl._M_finish._M_last 15726: - this->_M_impl._M_finish._M_cur) - 1; 15726: if (__n > __vacancies) 15726: _M_new_elements_at_back(__n - __vacancies); 15726: return this->_M_impl._M_finish + difference_type(__n); 15726: } 15726: 15726: void 15726: _M_new_elements_at_front(size_type __new_elements); 15726: 15726: void 15726: _M_new_elements_at_back(size_type __new_elements); 15726: # 2167 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: void 15726: _M_reserve_map_at_back(size_type __nodes_to_add = 1) 15726: { 15726: if (__nodes_to_add + 1 > this->_M_impl._M_map_size 15726: - (this->_M_impl._M_finish._M_node - this->_M_impl._M_map)) 15726: _M_reallocate_map(__nodes_to_add, false); 15726: } 15726: 15726: void 15726: _M_reserve_map_at_front(size_type __nodes_to_add = 1) 15726: { 15726: if (__nodes_to_add > size_type(this->_M_impl._M_start._M_node 15726: - this->_M_impl._M_map)) 15726: _M_reallocate_map(__nodes_to_add, true); 15726: } 15726: 15726: void 15726: _M_reallocate_map(size_type __nodes_to_add, bool __add_at_front); 15726: 15726: 15726: 15726: 15726: 15726: void 15726: _M_move_assign1(deque&& __x, true_type) noexcept 15726: { 15726: this->_M_impl._M_swap_data(__x._M_impl); 15726: __x.clear(); 15726: std::__alloc_on_move(_M_get_Tp_allocator(), __x._M_get_Tp_allocator()); 15726: } 15726: 15726: 15726: 15726: 15726: void 15726: _M_move_assign1(deque&& __x, false_type) 15726: { 15726: if (_M_get_Tp_allocator() == __x._M_get_Tp_allocator()) 15726: return _M_move_assign1(std::move(__x), true_type()); 15726: 15726: constexpr bool __move_storage = 15726: _Alloc_traits::_S_propagate_on_move_assign(); 15726: _M_move_assign2(std::move(__x), __bool_constant<__move_storage>()); 15726: } 15726: 15726: 15726: 15726: template 15726: void 15726: _M_replace_map(_Args&&... __args) 15726: { 15726: 15726: deque __newobj(std::forward<_Args>(__args)...); 15726: 15726: clear(); 15726: _M_deallocate_node(*begin()._M_node); 15726: _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size); 15726: this->_M_impl._M_map = nullptr; 15726: this->_M_impl._M_map_size = 0; 15726: 15726: this->_M_impl._M_swap_data(__newobj._M_impl); 15726: } 15726: 15726: 15726: void 15726: _M_move_assign2(deque&& __x, true_type) 15726: { 15726: 15726: auto __alloc = __x._M_get_Tp_allocator(); 15726: 15726: 15726: _M_replace_map(std::move(__x)); 15726: 15726: _M_get_Tp_allocator() = std::move(__alloc); 15726: } 15726: 15726: 15726: 15726: void 15726: _M_move_assign2(deque&& __x, false_type) 15726: { 15726: if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator()) 15726: { 15726: 15726: 15726: _M_replace_map(std::move(__x), __x.get_allocator()); 15726: } 15726: else 15726: { 15726: 15726: 15726: _M_assign_aux(std::make_move_iterator(__x.begin()), 15726: std::make_move_iterator(__x.end()), 15726: std::random_access_iterator_tag()); 15726: __x.clear(); 15726: } 15726: } 15726: 15726: }; 15726: 15726: 15726: template::value_type, 15726: typename _Allocator = allocator<_ValT>, 15726: typename = _RequireInputIter<_InputIterator>, 15726: typename = _RequireAllocator<_Allocator>> 15726: deque(_InputIterator, _InputIterator, _Allocator = _Allocator()) 15726: -> deque<_ValT, _Allocator>; 15726: # 2287 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator==(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y) 15726: { return __x.size() == __y.size() 15726: && std::equal(__x.begin(), __x.end(), __y.begin()); } 15726: # 2327 "/usr/include/c++/13/bits/stl_deque.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y) 15726: { return std::lexicographical_compare(__x.begin(), __x.end(), 15726: __y.begin(), __y.end()); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator!=(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y) 15726: { return !(__x == __y); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator>(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y) 15726: { return __y < __x; } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<=(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y) 15726: { return !(__y < __x); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator>=(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y) 15726: { return !(__x < __y); } 15726: 15726: 15726: 15726: template 15726: inline void 15726: swap(deque<_Tp,_Alloc>& __x, deque<_Tp,_Alloc>& __y) 15726: noexcept(noexcept(__x.swap(__y))) 15726: { __x.swap(__y); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct __is_bitwise_relocatable> 15726: : true_type { }; 15726: 15726: 15726: 15726: } 15726: # 67 "/usr/include/c++/13/deque" 2 3 15726: # 1 "/usr/include/c++/13/bits/refwrap.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/refwrap.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/refwrap.h" 3 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/invoke.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/invoke.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/invoke.h" 3 15726: # 42 "/usr/include/c++/13/bits/invoke.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 53 "/usr/include/c++/13/bits/invoke.h" 3 15726: template::type> 15726: constexpr _Up&& 15726: __invfwd(typename remove_reference<_Tp>::type& __t) noexcept 15726: { return static_cast<_Up&&>(__t); } 15726: 15726: template 15726: constexpr _Res 15726: __invoke_impl(__invoke_other, _Fn&& __f, _Args&&... __args) 15726: { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } 15726: 15726: template 15726: constexpr _Res 15726: __invoke_impl(__invoke_memfun_ref, _MemFun&& __f, _Tp&& __t, 15726: _Args&&... __args) 15726: { return (__invfwd<_Tp>(__t).*__f)(std::forward<_Args>(__args)...); } 15726: 15726: template 15726: constexpr _Res 15726: __invoke_impl(__invoke_memfun_deref, _MemFun&& __f, _Tp&& __t, 15726: _Args&&... __args) 15726: { 15726: return ((*std::forward<_Tp>(__t)).*__f)(std::forward<_Args>(__args)...); 15726: } 15726: 15726: template 15726: constexpr _Res 15726: __invoke_impl(__invoke_memobj_ref, _MemPtr&& __f, _Tp&& __t) 15726: { return __invfwd<_Tp>(__t).*__f; } 15726: 15726: template 15726: constexpr _Res 15726: __invoke_impl(__invoke_memobj_deref, _MemPtr&& __f, _Tp&& __t) 15726: { return (*std::forward<_Tp>(__t)).*__f; } 15726: 15726: 15726: template 15726: constexpr typename __invoke_result<_Callable, _Args...>::type 15726: __invoke(_Callable&& __fn, _Args&&... __args) 15726: noexcept(__is_nothrow_invocable<_Callable, _Args...>::value) 15726: { 15726: using __result = __invoke_result<_Callable, _Args...>; 15726: using __type = typename __result::type; 15726: using __tag = typename __result::__invoke_type; 15726: return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn), 15726: std::forward<_Args>(__args)...); 15726: } 15726: 15726: 15726: 15726: template 15726: constexpr enable_if_t, _Res> 15726: __invoke_r(_Callable&& __fn, _Args&&... __args) 15726: noexcept(is_nothrow_invocable_r_v<_Res, _Callable, _Args...>) 15726: { 15726: using __result = __invoke_result<_Callable, _Args...>; 15726: using __type = typename __result::type; 15726: using __tag = typename __result::__invoke_type; 15726: if constexpr (is_void_v<_Res>) 15726: std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn), 15726: std::forward<_Args>(__args)...); 15726: else 15726: return std::__invoke_impl<__type>(__tag{}, 15726: std::forward<_Callable>(__fn), 15726: std::forward<_Args>(__args)...); 15726: } 15726: # 155 "/usr/include/c++/13/bits/invoke.h" 3 15726: 15726: } 15726: # 39 "/usr/include/c++/13/bits/refwrap.h" 2 3 15726: # 1 "/usr/include/c++/13/bits/stl_function.h" 1 3 15726: # 63 "/usr/include/c++/13/bits/stl_function.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 116 "/usr/include/c++/13/bits/stl_function.h" 3 15726: template 15726: struct unary_function 15726: { 15726: 15726: typedef _Arg argument_type; 15726: 15726: 15726: typedef _Result result_type; 15726: } __attribute__ ((__deprecated__)); 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct binary_function 15726: { 15726: 15726: typedef _Arg1 first_argument_type; 15726: 15726: 15726: typedef _Arg2 second_argument_type; 15726: 15726: 15726: typedef _Result result_type; 15726: } __attribute__ ((__deprecated__)); 15726: # 157 "/usr/include/c++/13/bits/stl_function.h" 3 15726: struct __is_transparent; 15726: 15726: template 15726: struct plus; 15726: 15726: template 15726: struct minus; 15726: 15726: template 15726: struct multiplies; 15726: 15726: template 15726: struct divides; 15726: 15726: template 15726: struct modulus; 15726: 15726: template 15726: struct negate; 15726: 15726: 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: 15726: 15726: template 15726: struct plus : public binary_function<_Tp, _Tp, _Tp> 15726: { 15726: 15726: constexpr 15726: _Tp 15726: operator()(const _Tp& __x, const _Tp& __y) const 15726: { return __x + __y; } 15726: }; 15726: 15726: 15726: template 15726: struct minus : public binary_function<_Tp, _Tp, _Tp> 15726: { 15726: constexpr 15726: _Tp 15726: operator()(const _Tp& __x, const _Tp& __y) const 15726: { return __x - __y; } 15726: }; 15726: 15726: 15726: template 15726: struct multiplies : public binary_function<_Tp, _Tp, _Tp> 15726: { 15726: constexpr 15726: _Tp 15726: operator()(const _Tp& __x, const _Tp& __y) const 15726: { return __x * __y; } 15726: }; 15726: 15726: 15726: template 15726: struct divides : public binary_function<_Tp, _Tp, _Tp> 15726: { 15726: constexpr 15726: _Tp 15726: operator()(const _Tp& __x, const _Tp& __y) const 15726: { return __x / __y; } 15726: }; 15726: 15726: 15726: template 15726: struct modulus : public binary_function<_Tp, _Tp, _Tp> 15726: { 15726: constexpr 15726: _Tp 15726: operator()(const _Tp& __x, const _Tp& __y) const 15726: { return __x % __y; } 15726: }; 15726: 15726: 15726: template 15726: struct negate : public unary_function<_Tp, _Tp> 15726: { 15726: constexpr 15726: _Tp 15726: operator()(const _Tp& __x) const 15726: { return -__x; } 15726: }; 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: 15726: 15726: 15726: template<> 15726: struct plus 15726: { 15726: template 15726: constexpr 15726: auto 15726: operator()(_Tp&& __t, _Up&& __u) const 15726: noexcept(noexcept(std::forward<_Tp>(__t) + std::forward<_Up>(__u))) 15726: -> decltype(std::forward<_Tp>(__t) + std::forward<_Up>(__u)) 15726: { return std::forward<_Tp>(__t) + std::forward<_Up>(__u); } 15726: 15726: typedef __is_transparent is_transparent; 15726: }; 15726: 15726: 15726: template<> 15726: struct minus 15726: { 15726: template 15726: constexpr 15726: auto 15726: operator()(_Tp&& __t, _Up&& __u) const 15726: noexcept(noexcept(std::forward<_Tp>(__t) - std::forward<_Up>(__u))) 15726: -> decltype(std::forward<_Tp>(__t) - std::forward<_Up>(__u)) 15726: { return std::forward<_Tp>(__t) - std::forward<_Up>(__u); } 15726: 15726: typedef __is_transparent is_transparent; 15726: }; 15726: 15726: 15726: template<> 15726: struct multiplies 15726: { 15726: template 15726: constexpr 15726: auto 15726: operator()(_Tp&& __t, _Up&& __u) const 15726: noexcept(noexcept(std::forward<_Tp>(__t) * std::forward<_Up>(__u))) 15726: -> decltype(std::forward<_Tp>(__t) * std::forward<_Up>(__u)) 15726: { return std::forward<_Tp>(__t) * std::forward<_Up>(__u); } 15726: 15726: typedef __is_transparent is_transparent; 15726: }; 15726: 15726: 15726: template<> 15726: struct divides 15726: { 15726: template 15726: constexpr 15726: auto 15726: operator()(_Tp&& __t, _Up&& __u) const 15726: noexcept(noexcept(std::forward<_Tp>(__t) / std::forward<_Up>(__u))) 15726: -> decltype(std::forward<_Tp>(__t) / std::forward<_Up>(__u)) 15726: { return std::forward<_Tp>(__t) / std::forward<_Up>(__u); } 15726: 15726: typedef __is_transparent is_transparent; 15726: }; 15726: 15726: 15726: template<> 15726: struct modulus 15726: { 15726: template 15726: constexpr 15726: auto 15726: operator()(_Tp&& __t, _Up&& __u) const 15726: noexcept(noexcept(std::forward<_Tp>(__t) % std::forward<_Up>(__u))) 15726: -> decltype(std::forward<_Tp>(__t) % std::forward<_Up>(__u)) 15726: { return std::forward<_Tp>(__t) % std::forward<_Up>(__u); } 15726: 15726: typedef __is_transparent is_transparent; 15726: }; 15726: 15726: 15726: template<> 15726: struct negate 15726: { 15726: template 15726: constexpr 15726: auto 15726: operator()(_Tp&& __t) const 15726: noexcept(noexcept(-std::forward<_Tp>(__t))) 15726: -> decltype(-std::forward<_Tp>(__t)) 15726: { return -std::forward<_Tp>(__t); } 15726: 15726: typedef __is_transparent is_transparent; 15726: }; 15726: # 349 "/usr/include/c++/13/bits/stl_function.h" 3 15726: template 15726: struct equal_to; 15726: 15726: template 15726: struct not_equal_to; 15726: 15726: template 15726: struct greater; 15726: 15726: template 15726: struct less; 15726: 15726: template 15726: struct greater_equal; 15726: 15726: template 15726: struct less_equal; 15726: 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: 15726: 15726: template 15726: struct equal_to : public binary_function<_Tp, _Tp, bool> 15726: { 15726: constexpr 15726: bool 15726: operator()(const _Tp& __x, const _Tp& __y) const 15726: { return __x == __y; } 15726: }; 15726: 15726: 15726: template 15726: struct not_equal_to : public binary_function<_Tp, _Tp, bool> 15726: { 15726: constexpr 15726: bool 15726: operator()(const _Tp& __x, const _Tp& __y) const 15726: { return __x != __y; } 15726: }; 15726: 15726: 15726: template 15726: struct greater : public binary_function<_Tp, _Tp, bool> 15726: { 15726: constexpr 15726: bool 15726: operator()(const _Tp& __x, const _Tp& __y) const 15726: { return __x > __y; } 15726: }; 15726: 15726: 15726: template 15726: struct less : public binary_function<_Tp, _Tp, bool> 15726: { 15726: constexpr 15726: bool 15726: operator()(const _Tp& __x, const _Tp& __y) const 15726: { return __x < __y; } 15726: }; 15726: 15726: 15726: template 15726: struct greater_equal : public binary_function<_Tp, _Tp, bool> 15726: { 15726: constexpr 15726: bool 15726: operator()(const _Tp& __x, const _Tp& __y) const 15726: { return __x >= __y; } 15726: }; 15726: 15726: 15726: template 15726: struct less_equal : public binary_function<_Tp, _Tp, bool> 15726: { 15726: constexpr 15726: bool 15726: operator()(const _Tp& __x, const _Tp& __y) const 15726: { return __x <= __y; } 15726: }; 15726: 15726: 15726: template 15726: struct greater<_Tp*> : public binary_function<_Tp*, _Tp*, bool> 15726: { 15726: constexpr bool 15726: operator()(_Tp* __x, _Tp* __y) const noexcept 15726: { 15726: 15726: if (std::__is_constant_evaluated()) 15726: return __x > __y; 15726: 15726: return (unsigned int)__x > (unsigned int)__y; 15726: } 15726: }; 15726: 15726: 15726: template 15726: struct less<_Tp*> : public binary_function<_Tp*, _Tp*, bool> 15726: { 15726: constexpr bool 15726: operator()(_Tp* __x, _Tp* __y) const noexcept 15726: { 15726: 15726: if (std::__is_constant_evaluated()) 15726: return __x < __y; 15726: 15726: return (unsigned int)__x < (unsigned int)__y; 15726: } 15726: }; 15726: 15726: 15726: template 15726: struct greater_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool> 15726: { 15726: constexpr bool 15726: operator()(_Tp* __x, _Tp* __y) const noexcept 15726: { 15726: 15726: if (std::__is_constant_evaluated()) 15726: return __x >= __y; 15726: 15726: return (unsigned int)__x >= (unsigned int)__y; 15726: } 15726: }; 15726: 15726: 15726: template 15726: struct less_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool> 15726: { 15726: constexpr bool 15726: operator()(_Tp* __x, _Tp* __y) const noexcept 15726: { 15726: 15726: if (std::__is_constant_evaluated()) 15726: return __x <= __y; 15726: 15726: return (unsigned int)__x <= (unsigned int)__y; 15726: } 15726: }; 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: 15726: template<> 15726: struct equal_to 15726: { 15726: template 15726: constexpr auto 15726: operator()(_Tp&& __t, _Up&& __u) const 15726: noexcept(noexcept(std::forward<_Tp>(__t) == std::forward<_Up>(__u))) 15726: -> decltype(std::forward<_Tp>(__t) == std::forward<_Up>(__u)) 15726: { return std::forward<_Tp>(__t) == std::forward<_Up>(__u); } 15726: 15726: typedef __is_transparent is_transparent; 15726: }; 15726: 15726: 15726: template<> 15726: struct not_equal_to 15726: { 15726: template 15726: constexpr auto 15726: operator()(_Tp&& __t, _Up&& __u) const 15726: noexcept(noexcept(std::forward<_Tp>(__t) != std::forward<_Up>(__u))) 15726: -> decltype(std::forward<_Tp>(__t) != std::forward<_Up>(__u)) 15726: { return std::forward<_Tp>(__t) != std::forward<_Up>(__u); } 15726: 15726: typedef __is_transparent is_transparent; 15726: }; 15726: 15726: 15726: template<> 15726: struct greater 15726: { 15726: template 15726: constexpr auto 15726: operator()(_Tp&& __t, _Up&& __u) const 15726: noexcept(noexcept(std::forward<_Tp>(__t) > std::forward<_Up>(__u))) 15726: -> decltype(std::forward<_Tp>(__t) > std::forward<_Up>(__u)) 15726: { 15726: return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), 15726: __ptr_cmp<_Tp, _Up>{}); 15726: } 15726: 15726: template 15726: constexpr bool 15726: operator()(_Tp* __t, _Up* __u) const noexcept 15726: { return greater>{}(__t, __u); } 15726: 15726: typedef __is_transparent is_transparent; 15726: 15726: private: 15726: template 15726: static constexpr decltype(auto) 15726: _S_cmp(_Tp&& __t, _Up&& __u, false_type) 15726: { return std::forward<_Tp>(__t) > std::forward<_Up>(__u); } 15726: 15726: template 15726: static constexpr bool 15726: _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept 15726: { 15726: return greater{}( 15726: static_cast(std::forward<_Tp>(__t)), 15726: static_cast(std::forward<_Up>(__u))); 15726: } 15726: 15726: 15726: template 15726: struct __not_overloaded2 : true_type { }; 15726: 15726: 15726: template 15726: struct __not_overloaded2<_Tp, _Up, __void_t< 15726: decltype(std::declval<_Tp>().operator>(std::declval<_Up>()))>> 15726: : false_type { }; 15726: 15726: 15726: template 15726: struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; 15726: 15726: 15726: template 15726: struct __not_overloaded<_Tp, _Up, __void_t< 15726: decltype(operator>(std::declval<_Tp>(), std::declval<_Up>()))>> 15726: : false_type { }; 15726: 15726: template 15726: using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, 15726: is_convertible<_Tp, const volatile void*>, 15726: is_convertible<_Up, const volatile void*>>; 15726: }; 15726: 15726: 15726: template<> 15726: struct less 15726: { 15726: template 15726: constexpr auto 15726: operator()(_Tp&& __t, _Up&& __u) const 15726: noexcept(noexcept(std::forward<_Tp>(__t) < std::forward<_Up>(__u))) 15726: -> decltype(std::forward<_Tp>(__t) < std::forward<_Up>(__u)) 15726: { 15726: return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), 15726: __ptr_cmp<_Tp, _Up>{}); 15726: } 15726: 15726: template 15726: constexpr bool 15726: operator()(_Tp* __t, _Up* __u) const noexcept 15726: { return less>{}(__t, __u); } 15726: 15726: typedef __is_transparent is_transparent; 15726: 15726: private: 15726: template 15726: static constexpr decltype(auto) 15726: _S_cmp(_Tp&& __t, _Up&& __u, false_type) 15726: { return std::forward<_Tp>(__t) < std::forward<_Up>(__u); } 15726: 15726: template 15726: static constexpr bool 15726: _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept 15726: { 15726: return less{}( 15726: static_cast(std::forward<_Tp>(__t)), 15726: static_cast(std::forward<_Up>(__u))); 15726: } 15726: 15726: 15726: template 15726: struct __not_overloaded2 : true_type { }; 15726: 15726: 15726: template 15726: struct __not_overloaded2<_Tp, _Up, __void_t< 15726: decltype(std::declval<_Tp>().operator<(std::declval<_Up>()))>> 15726: : false_type { }; 15726: 15726: 15726: template 15726: struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; 15726: 15726: 15726: template 15726: struct __not_overloaded<_Tp, _Up, __void_t< 15726: decltype(operator<(std::declval<_Tp>(), std::declval<_Up>()))>> 15726: : false_type { }; 15726: 15726: template 15726: using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, 15726: is_convertible<_Tp, const volatile void*>, 15726: is_convertible<_Up, const volatile void*>>; 15726: }; 15726: 15726: 15726: template<> 15726: struct greater_equal 15726: { 15726: template 15726: constexpr auto 15726: operator()(_Tp&& __t, _Up&& __u) const 15726: noexcept(noexcept(std::forward<_Tp>(__t) >= std::forward<_Up>(__u))) 15726: -> decltype(std::forward<_Tp>(__t) >= std::forward<_Up>(__u)) 15726: { 15726: return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), 15726: __ptr_cmp<_Tp, _Up>{}); 15726: } 15726: 15726: template 15726: constexpr bool 15726: operator()(_Tp* __t, _Up* __u) const noexcept 15726: { return greater_equal>{}(__t, __u); } 15726: 15726: typedef __is_transparent is_transparent; 15726: 15726: private: 15726: template 15726: static constexpr decltype(auto) 15726: _S_cmp(_Tp&& __t, _Up&& __u, false_type) 15726: { return std::forward<_Tp>(__t) >= std::forward<_Up>(__u); } 15726: 15726: template 15726: static constexpr bool 15726: _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept 15726: { 15726: return greater_equal{}( 15726: static_cast(std::forward<_Tp>(__t)), 15726: static_cast(std::forward<_Up>(__u))); 15726: } 15726: 15726: 15726: template 15726: struct __not_overloaded2 : true_type { }; 15726: 15726: 15726: template 15726: struct __not_overloaded2<_Tp, _Up, __void_t< 15726: decltype(std::declval<_Tp>().operator>=(std::declval<_Up>()))>> 15726: : false_type { }; 15726: 15726: 15726: template 15726: struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; 15726: 15726: 15726: template 15726: struct __not_overloaded<_Tp, _Up, __void_t< 15726: decltype(operator>=(std::declval<_Tp>(), std::declval<_Up>()))>> 15726: : false_type { }; 15726: 15726: template 15726: using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, 15726: is_convertible<_Tp, const volatile void*>, 15726: is_convertible<_Up, const volatile void*>>; 15726: }; 15726: 15726: 15726: template<> 15726: struct less_equal 15726: { 15726: template 15726: constexpr auto 15726: operator()(_Tp&& __t, _Up&& __u) const 15726: noexcept(noexcept(std::forward<_Tp>(__t) <= std::forward<_Up>(__u))) 15726: -> decltype(std::forward<_Tp>(__t) <= std::forward<_Up>(__u)) 15726: { 15726: return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), 15726: __ptr_cmp<_Tp, _Up>{}); 15726: } 15726: 15726: template 15726: constexpr bool 15726: operator()(_Tp* __t, _Up* __u) const noexcept 15726: { return less_equal>{}(__t, __u); } 15726: 15726: typedef __is_transparent is_transparent; 15726: 15726: private: 15726: template 15726: static constexpr decltype(auto) 15726: _S_cmp(_Tp&& __t, _Up&& __u, false_type) 15726: { return std::forward<_Tp>(__t) <= std::forward<_Up>(__u); } 15726: 15726: template 15726: static constexpr bool 15726: _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept 15726: { 15726: return less_equal{}( 15726: static_cast(std::forward<_Tp>(__t)), 15726: static_cast(std::forward<_Up>(__u))); 15726: } 15726: 15726: 15726: template 15726: struct __not_overloaded2 : true_type { }; 15726: 15726: 15726: template 15726: struct __not_overloaded2<_Tp, _Up, __void_t< 15726: decltype(std::declval<_Tp>().operator<=(std::declval<_Up>()))>> 15726: : false_type { }; 15726: 15726: 15726: template 15726: struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; 15726: 15726: 15726: template 15726: struct __not_overloaded<_Tp, _Up, __void_t< 15726: decltype(operator<=(std::declval<_Tp>(), std::declval<_Up>()))>> 15726: : false_type { }; 15726: 15726: template 15726: using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, 15726: is_convertible<_Tp, const volatile void*>, 15726: is_convertible<_Up, const volatile void*>>; 15726: }; 15726: # 781 "/usr/include/c++/13/bits/stl_function.h" 3 15726: template 15726: struct logical_and; 15726: 15726: template 15726: struct logical_or; 15726: 15726: template 15726: struct logical_not; 15726: 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: 15726: 15726: template 15726: struct logical_and : public binary_function<_Tp, _Tp, bool> 15726: { 15726: constexpr 15726: bool 15726: operator()(const _Tp& __x, const _Tp& __y) const 15726: { return __x && __y; } 15726: }; 15726: 15726: 15726: template 15726: struct logical_or : public binary_function<_Tp, _Tp, bool> 15726: { 15726: constexpr 15726: bool 15726: operator()(const _Tp& __x, const _Tp& __y) const 15726: { return __x || __y; } 15726: }; 15726: 15726: 15726: template 15726: struct logical_not : public unary_function<_Tp, bool> 15726: { 15726: constexpr 15726: bool 15726: operator()(const _Tp& __x) const 15726: { return !__x; } 15726: }; 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: 15726: template<> 15726: struct logical_and 15726: { 15726: template 15726: constexpr 15726: auto 15726: operator()(_Tp&& __t, _Up&& __u) const 15726: noexcept(noexcept(std::forward<_Tp>(__t) && std::forward<_Up>(__u))) 15726: -> decltype(std::forward<_Tp>(__t) && std::forward<_Up>(__u)) 15726: { return std::forward<_Tp>(__t) && std::forward<_Up>(__u); } 15726: 15726: typedef __is_transparent is_transparent; 15726: }; 15726: 15726: 15726: template<> 15726: struct logical_or 15726: { 15726: template 15726: constexpr 15726: auto 15726: operator()(_Tp&& __t, _Up&& __u) const 15726: noexcept(noexcept(std::forward<_Tp>(__t) || std::forward<_Up>(__u))) 15726: -> decltype(std::forward<_Tp>(__t) || std::forward<_Up>(__u)) 15726: { return std::forward<_Tp>(__t) || std::forward<_Up>(__u); } 15726: 15726: typedef __is_transparent is_transparent; 15726: }; 15726: 15726: 15726: template<> 15726: struct logical_not 15726: { 15726: template 15726: constexpr 15726: auto 15726: operator()(_Tp&& __t) const 15726: noexcept(noexcept(!std::forward<_Tp>(__t))) 15726: -> decltype(!std::forward<_Tp>(__t)) 15726: { return !std::forward<_Tp>(__t); } 15726: 15726: typedef __is_transparent is_transparent; 15726: }; 15726: 15726: 15726: 15726: 15726: template 15726: struct bit_and; 15726: 15726: template 15726: struct bit_or; 15726: 15726: template 15726: struct bit_xor; 15726: 15726: template 15726: struct bit_not; 15726: 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: 15726: 15726: 15726: template 15726: struct bit_and : public binary_function<_Tp, _Tp, _Tp> 15726: { 15726: constexpr 15726: _Tp 15726: operator()(const _Tp& __x, const _Tp& __y) const 15726: { return __x & __y; } 15726: }; 15726: 15726: template 15726: struct bit_or : public binary_function<_Tp, _Tp, _Tp> 15726: { 15726: constexpr 15726: _Tp 15726: operator()(const _Tp& __x, const _Tp& __y) const 15726: { return __x | __y; } 15726: }; 15726: 15726: template 15726: struct bit_xor : public binary_function<_Tp, _Tp, _Tp> 15726: { 15726: constexpr 15726: _Tp 15726: operator()(const _Tp& __x, const _Tp& __y) const 15726: { return __x ^ __y; } 15726: }; 15726: 15726: template 15726: struct bit_not : public unary_function<_Tp, _Tp> 15726: { 15726: constexpr 15726: _Tp 15726: operator()(const _Tp& __x) const 15726: { return ~__x; } 15726: }; 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: template <> 15726: struct bit_and 15726: { 15726: template 15726: constexpr 15726: auto 15726: operator()(_Tp&& __t, _Up&& __u) const 15726: noexcept(noexcept(std::forward<_Tp>(__t) & std::forward<_Up>(__u))) 15726: -> decltype(std::forward<_Tp>(__t) & std::forward<_Up>(__u)) 15726: { return std::forward<_Tp>(__t) & std::forward<_Up>(__u); } 15726: 15726: typedef __is_transparent is_transparent; 15726: }; 15726: 15726: template <> 15726: struct bit_or 15726: { 15726: template 15726: constexpr 15726: auto 15726: operator()(_Tp&& __t, _Up&& __u) const 15726: noexcept(noexcept(std::forward<_Tp>(__t) | std::forward<_Up>(__u))) 15726: -> decltype(std::forward<_Tp>(__t) | std::forward<_Up>(__u)) 15726: { return std::forward<_Tp>(__t) | std::forward<_Up>(__u); } 15726: 15726: typedef __is_transparent is_transparent; 15726: }; 15726: 15726: template <> 15726: struct bit_xor 15726: { 15726: template 15726: constexpr 15726: auto 15726: operator()(_Tp&& __t, _Up&& __u) const 15726: noexcept(noexcept(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u))) 15726: -> decltype(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u)) 15726: { return std::forward<_Tp>(__t) ^ std::forward<_Up>(__u); } 15726: 15726: typedef __is_transparent is_transparent; 15726: }; 15726: 15726: template <> 15726: struct bit_not 15726: { 15726: template 15726: constexpr 15726: auto 15726: operator()(_Tp&& __t) const 15726: noexcept(noexcept(~std::forward<_Tp>(__t))) 15726: -> decltype(~std::forward<_Tp>(__t)) 15726: { return ~std::forward<_Tp>(__t); } 15726: 15726: typedef __is_transparent is_transparent; 15726: }; 15726: 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: # 1023 "/usr/include/c++/13/bits/stl_function.h" 3 15726: template 15726: class [[__deprecated__]] unary_negate 15726: : public unary_function 15726: { 15726: protected: 15726: _Predicate _M_pred; 15726: 15726: public: 15726: constexpr 15726: explicit 15726: unary_negate(const _Predicate& __x) : _M_pred(__x) { } 15726: 15726: constexpr 15726: bool 15726: operator()(const typename _Predicate::argument_type& __x) const 15726: { return !_M_pred(__x); } 15726: }; 15726: 15726: 15726: template 15726: __attribute__ ((__deprecated__ ("use '" "std::not_fn" "' instead"))) 15726: constexpr 15726: inline unary_negate<_Predicate> 15726: not1(const _Predicate& __pred) 15726: { return unary_negate<_Predicate>(__pred); } 15726: 15726: 15726: template 15726: class [[__deprecated__]] binary_negate 15726: : public binary_function 15726: { 15726: protected: 15726: _Predicate _M_pred; 15726: 15726: public: 15726: constexpr 15726: explicit 15726: binary_negate(const _Predicate& __x) : _M_pred(__x) { } 15726: 15726: constexpr 15726: bool 15726: operator()(const typename _Predicate::first_argument_type& __x, 15726: const typename _Predicate::second_argument_type& __y) const 15726: { return !_M_pred(__x, __y); } 15726: }; 15726: 15726: 15726: template 15726: __attribute__ ((__deprecated__ ("use '" "std::not_fn" "' instead"))) 15726: constexpr 15726: inline binary_negate<_Predicate> 15726: not2(const _Predicate& __pred) 15726: { return binary_negate<_Predicate>(__pred); } 15726: # 1104 "/usr/include/c++/13/bits/stl_function.h" 3 15726: template 15726: class pointer_to_unary_function : public unary_function<_Arg, _Result> 15726: { 15726: protected: 15726: _Result (*_M_ptr)(_Arg); 15726: 15726: public: 15726: pointer_to_unary_function() { } 15726: 15726: explicit 15726: pointer_to_unary_function(_Result (*__x)(_Arg)) 15726: : _M_ptr(__x) { } 15726: 15726: _Result 15726: operator()(_Arg __x) const 15726: { return _M_ptr(__x); } 15726: } __attribute__ ((__deprecated__)); 15726: 15726: 15726: template 15726: __attribute__ ((__deprecated__ ("use '" "std::function" "' instead"))) 15726: inline pointer_to_unary_function<_Arg, _Result> 15726: ptr_fun(_Result (*__x)(_Arg)) 15726: { return pointer_to_unary_function<_Arg, _Result>(__x); } 15726: 15726: 15726: template 15726: class pointer_to_binary_function 15726: : public binary_function<_Arg1, _Arg2, _Result> 15726: { 15726: protected: 15726: _Result (*_M_ptr)(_Arg1, _Arg2); 15726: 15726: public: 15726: pointer_to_binary_function() { } 15726: 15726: explicit 15726: pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2)) 15726: : _M_ptr(__x) { } 15726: 15726: _Result 15726: operator()(_Arg1 __x, _Arg2 __y) const 15726: { return _M_ptr(__x, __y); } 15726: } __attribute__ ((__deprecated__)); 15726: 15726: 15726: template 15726: __attribute__ ((__deprecated__ ("use '" "std::function" "' instead"))) 15726: inline pointer_to_binary_function<_Arg1, _Arg2, _Result> 15726: ptr_fun(_Result (*__x)(_Arg1, _Arg2)) 15726: { return pointer_to_binary_function<_Arg1, _Arg2, _Result>(__x); } 15726: 15726: 15726: template 15726: struct _Identity 15726: : public unary_function<_Tp, _Tp> 15726: { 15726: _Tp& 15726: operator()(_Tp& __x) const 15726: { return __x; } 15726: 15726: const _Tp& 15726: operator()(const _Tp& __x) const 15726: { return __x; } 15726: }; 15726: 15726: 15726: template struct _Identity : _Identity<_Tp> { }; 15726: 15726: template 15726: struct _Select1st 15726: : public unary_function<_Pair, typename _Pair::first_type> 15726: { 15726: typename _Pair::first_type& 15726: operator()(_Pair& __x) const 15726: { return __x.first; } 15726: 15726: const typename _Pair::first_type& 15726: operator()(const _Pair& __x) const 15726: { return __x.first; } 15726: 15726: 15726: template 15726: typename _Pair2::first_type& 15726: operator()(_Pair2& __x) const 15726: { return __x.first; } 15726: 15726: template 15726: const typename _Pair2::first_type& 15726: operator()(const _Pair2& __x) const 15726: { return __x.first; } 15726: 15726: }; 15726: 15726: template 15726: struct _Select2nd 15726: : public unary_function<_Pair, typename _Pair::second_type> 15726: { 15726: typename _Pair::second_type& 15726: operator()(_Pair& __x) const 15726: { return __x.second; } 15726: 15726: const typename _Pair::second_type& 15726: operator()(const _Pair& __x) const 15726: { return __x.second; } 15726: }; 15726: # 1231 "/usr/include/c++/13/bits/stl_function.h" 3 15726: template 15726: class mem_fun_t : public unary_function<_Tp*, _Ret> 15726: { 15726: public: 15726: explicit 15726: mem_fun_t(_Ret (_Tp::*__pf)()) 15726: : _M_f(__pf) { } 15726: 15726: _Ret 15726: operator()(_Tp* __p) const 15726: { return (__p->*_M_f)(); } 15726: 15726: private: 15726: _Ret (_Tp::*_M_f)(); 15726: } __attribute__ ((__deprecated__)); 15726: 15726: 15726: template 15726: class const_mem_fun_t : public unary_function 15726: { 15726: public: 15726: explicit 15726: const_mem_fun_t(_Ret (_Tp::*__pf)() const) 15726: : _M_f(__pf) { } 15726: 15726: _Ret 15726: operator()(const _Tp* __p) const 15726: { return (__p->*_M_f)(); } 15726: 15726: private: 15726: _Ret (_Tp::*_M_f)() const; 15726: } __attribute__ ((__deprecated__)); 15726: 15726: 15726: template 15726: class mem_fun_ref_t : public unary_function<_Tp, _Ret> 15726: { 15726: public: 15726: explicit 15726: mem_fun_ref_t(_Ret (_Tp::*__pf)()) 15726: : _M_f(__pf) { } 15726: 15726: _Ret 15726: operator()(_Tp& __r) const 15726: { return (__r.*_M_f)(); } 15726: 15726: private: 15726: _Ret (_Tp::*_M_f)(); 15726: } __attribute__ ((__deprecated__)); 15726: 15726: 15726: template 15726: class const_mem_fun_ref_t : public unary_function<_Tp, _Ret> 15726: { 15726: public: 15726: explicit 15726: const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const) 15726: : _M_f(__pf) { } 15726: 15726: _Ret 15726: operator()(const _Tp& __r) const 15726: { return (__r.*_M_f)(); } 15726: 15726: private: 15726: _Ret (_Tp::*_M_f)() const; 15726: } __attribute__ ((__deprecated__)); 15726: 15726: 15726: template 15726: class mem_fun1_t : public binary_function<_Tp*, _Arg, _Ret> 15726: { 15726: public: 15726: explicit 15726: mem_fun1_t(_Ret (_Tp::*__pf)(_Arg)) 15726: : _M_f(__pf) { } 15726: 15726: _Ret 15726: operator()(_Tp* __p, _Arg __x) const 15726: { return (__p->*_M_f)(__x); } 15726: 15726: private: 15726: _Ret (_Tp::*_M_f)(_Arg); 15726: } __attribute__ ((__deprecated__)); 15726: 15726: 15726: template 15726: class const_mem_fun1_t : public binary_function 15726: { 15726: public: 15726: explicit 15726: const_mem_fun1_t(_Ret (_Tp::*__pf)(_Arg) const) 15726: : _M_f(__pf) { } 15726: 15726: _Ret 15726: operator()(const _Tp* __p, _Arg __x) const 15726: { return (__p->*_M_f)(__x); } 15726: 15726: private: 15726: _Ret (_Tp::*_M_f)(_Arg) const; 15726: } __attribute__ ((__deprecated__)); 15726: 15726: 15726: template 15726: class mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret> 15726: { 15726: public: 15726: explicit 15726: mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg)) 15726: : _M_f(__pf) { } 15726: 15726: _Ret 15726: operator()(_Tp& __r, _Arg __x) const 15726: { return (__r.*_M_f)(__x); } 15726: 15726: private: 15726: _Ret (_Tp::*_M_f)(_Arg); 15726: } __attribute__ ((__deprecated__)); 15726: 15726: 15726: template 15726: class const_mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret> 15726: { 15726: public: 15726: explicit 15726: const_mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg) const) 15726: : _M_f(__pf) { } 15726: 15726: _Ret 15726: operator()(const _Tp& __r, _Arg __x) const 15726: { return (__r.*_M_f)(__x); } 15726: 15726: private: 15726: _Ret (_Tp::*_M_f)(_Arg) const; 15726: } __attribute__ ((__deprecated__)); 15726: 15726: 15726: 15726: template 15726: __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) 15726: inline mem_fun_t<_Ret, _Tp> 15726: mem_fun(_Ret (_Tp::*__f)()) 15726: { return mem_fun_t<_Ret, _Tp>(__f); } 15726: 15726: template 15726: __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) 15726: inline const_mem_fun_t<_Ret, _Tp> 15726: mem_fun(_Ret (_Tp::*__f)() const) 15726: { return const_mem_fun_t<_Ret, _Tp>(__f); } 15726: 15726: template 15726: __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) 15726: inline mem_fun_ref_t<_Ret, _Tp> 15726: mem_fun_ref(_Ret (_Tp::*__f)()) 15726: { return mem_fun_ref_t<_Ret, _Tp>(__f); } 15726: 15726: template 15726: __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) 15726: inline const_mem_fun_ref_t<_Ret, _Tp> 15726: mem_fun_ref(_Ret (_Tp::*__f)() const) 15726: { return const_mem_fun_ref_t<_Ret, _Tp>(__f); } 15726: 15726: template 15726: __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) 15726: inline mem_fun1_t<_Ret, _Tp, _Arg> 15726: mem_fun(_Ret (_Tp::*__f)(_Arg)) 15726: { return mem_fun1_t<_Ret, _Tp, _Arg>(__f); } 15726: 15726: template 15726: __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) 15726: inline const_mem_fun1_t<_Ret, _Tp, _Arg> 15726: mem_fun(_Ret (_Tp::*__f)(_Arg) const) 15726: { return const_mem_fun1_t<_Ret, _Tp, _Arg>(__f); } 15726: 15726: template 15726: __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) 15726: inline mem_fun1_ref_t<_Ret, _Tp, _Arg> 15726: mem_fun_ref(_Ret (_Tp::*__f)(_Arg)) 15726: { return mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); } 15726: 15726: template 15726: __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead"))) 15726: inline const_mem_fun1_ref_t<_Ret, _Tp, _Arg> 15726: mem_fun_ref(_Ret (_Tp::*__f)(_Arg) const) 15726: { return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); } 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: 15726: 15726: template> 15726: struct __has_is_transparent 15726: { }; 15726: 15726: template 15726: struct __has_is_transparent<_Func, _SfinaeType, 15726: __void_t> 15726: { typedef void type; }; 15726: 15726: template 15726: using __has_is_transparent_t 15726: = typename __has_is_transparent<_Func, _SfinaeType>::type; 15726: 15726: 15726: 15726: } 15726: 15726: 15726: # 1 "/usr/include/c++/13/backward/binders.h" 1 3 15726: # 60 "/usr/include/c++/13/backward/binders.h" 3 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 107 "/usr/include/c++/13/backward/binders.h" 3 15726: template 15726: class binder1st 15726: : public unary_function 15726: { 15726: protected: 15726: _Operation op; 15726: typename _Operation::first_argument_type value; 15726: 15726: public: 15726: binder1st(const _Operation& __x, 15726: const typename _Operation::first_argument_type& __y) 15726: : op(__x), value(__y) { } 15726: 15726: typename _Operation::result_type 15726: operator()(const typename _Operation::second_argument_type& __x) const 15726: { return op(value, __x); } 15726: 15726: 15726: 15726: typename _Operation::result_type 15726: operator()(typename _Operation::second_argument_type& __x) const 15726: { return op(value, __x); } 15726: } __attribute__ ((__deprecated__ ("use '" "std::bind" "' instead"))); 15726: 15726: 15726: template 15726: __attribute__ ((__deprecated__ ("use '" "std::bind" "' instead"))) 15726: inline binder1st<_Operation> 15726: bind1st(const _Operation& __fn, const _Tp& __x) 15726: { 15726: typedef typename _Operation::first_argument_type _Arg1_type; 15726: return binder1st<_Operation>(__fn, _Arg1_type(__x)); 15726: } 15726: 15726: 15726: template 15726: class binder2nd 15726: : public unary_function 15726: { 15726: protected: 15726: _Operation op; 15726: typename _Operation::second_argument_type value; 15726: 15726: public: 15726: binder2nd(const _Operation& __x, 15726: const typename _Operation::second_argument_type& __y) 15726: : op(__x), value(__y) { } 15726: 15726: typename _Operation::result_type 15726: operator()(const typename _Operation::first_argument_type& __x) const 15726: { return op(__x, value); } 15726: 15726: 15726: 15726: typename _Operation::result_type 15726: operator()(typename _Operation::first_argument_type& __x) const 15726: { return op(__x, value); } 15726: } __attribute__ ((__deprecated__ ("use '" "std::bind" "' instead"))); 15726: 15726: 15726: template 15726: __attribute__ ((__deprecated__ ("use '" "std::bind" "' instead"))) 15726: inline binder2nd<_Operation> 15726: bind2nd(const _Operation& __fn, const _Tp& __x) 15726: { 15726: typedef typename _Operation::second_argument_type _Arg2_type; 15726: return binder2nd<_Operation>(__fn, _Arg2_type(__x)); 15726: } 15726: 15726: 15726: 15726: } 15726: 15726: #pragma GCC diagnostic pop 15726: # 1439 "/usr/include/c++/13/bits/stl_function.h" 2 3 15726: # 40 "/usr/include/c++/13/bits/refwrap.h" 2 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 52 "/usr/include/c++/13/bits/refwrap.h" 3 15726: template 15726: struct _Maybe_unary_or_binary_function { }; 15726: 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: 15726: 15726: template 15726: struct _Maybe_unary_or_binary_function<_Res, _T1> 15726: : std::unary_function<_T1, _Res> { }; 15726: 15726: 15726: template 15726: struct _Maybe_unary_or_binary_function<_Res, _T1, _T2> 15726: : std::binary_function<_T1, _T2, _Res> { }; 15726: 15726: #pragma GCC diagnostic pop 15726: 15726: template 15726: struct _Mem_fn_traits; 15726: 15726: template 15726: struct _Mem_fn_traits_base 15726: { 15726: using __result_type = _Res; 15726: using __maybe_type 15726: = _Maybe_unary_or_binary_function<_Res, _Class*, _ArgTypes...>; 15726: using __arity = integral_constant; 15726: }; 15726: # 103 "/usr/include/c++/13/bits/refwrap.h" 3 15726: template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) > : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) > : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const > : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const > : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile > : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile > : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile > : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile > : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; }; 15726: template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) &> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) &> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const &> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const &> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile &> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile &> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile &> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile &> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; }; 15726: template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) &&> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) &&> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const &&> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const &&> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile &&> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile &&> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile &&> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile &&> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; }; 15726: 15726: 15726: template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) noexcept> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) noexcept> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const noexcept> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const noexcept> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile noexcept> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile noexcept> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile noexcept> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile noexcept> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; }; 15726: template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) & noexcept> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) & noexcept> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const & noexcept> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const & noexcept> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile & noexcept> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile & noexcept> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile & noexcept> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile & noexcept> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; }; 15726: template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) && noexcept> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) && noexcept> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const && noexcept> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const && noexcept> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile && noexcept> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile && noexcept> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile && noexcept> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile && noexcept> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template> 15726: struct _Maybe_get_result_type 15726: { }; 15726: 15726: template 15726: struct _Maybe_get_result_type<_Functor, 15726: __void_t> 15726: { typedef typename _Functor::result_type result_type; }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Weak_result_type_impl 15726: : _Maybe_get_result_type<_Functor> 15726: { }; 15726: 15726: 15726: template 15726: struct _Weak_result_type_impl<_Res(_ArgTypes...) noexcept (_NE)> 15726: { typedef _Res result_type; }; 15726: 15726: 15726: template 15726: struct _Weak_result_type_impl<_Res(_ArgTypes......) noexcept (_NE)> 15726: { typedef _Res result_type; }; 15726: 15726: 15726: template 15726: struct _Weak_result_type_impl<_Res(*)(_ArgTypes...) noexcept (_NE)> 15726: { typedef _Res result_type; }; 15726: 15726: 15726: template 15726: struct 15726: _Weak_result_type_impl<_Res(*)(_ArgTypes......) noexcept (_NE)> 15726: { typedef _Res result_type; }; 15726: 15726: 15726: template::value> 15726: struct _Weak_result_type_memfun 15726: : _Weak_result_type_impl<_Functor> 15726: { }; 15726: 15726: 15726: template 15726: struct _Weak_result_type_memfun<_MemFunPtr, true> 15726: { 15726: using result_type = typename _Mem_fn_traits<_MemFunPtr>::__result_type; 15726: }; 15726: 15726: 15726: template 15726: struct _Weak_result_type_memfun<_Func _Class::*, false> 15726: { }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Weak_result_type 15726: : _Weak_result_type_memfun::type> 15726: { }; 15726: 15726: 15726: 15726: template> 15726: struct _Refwrap_base_arg1 15726: { }; 15726: 15726: 15726: template 15726: struct _Refwrap_base_arg1<_Tp, 15726: __void_t> 15726: { 15726: typedef typename _Tp::argument_type argument_type; 15726: }; 15726: 15726: 15726: template> 15726: struct _Refwrap_base_arg2 15726: { }; 15726: 15726: 15726: template 15726: struct _Refwrap_base_arg2<_Tp, 15726: __void_t> 15726: { 15726: typedef typename _Tp::first_argument_type first_argument_type; 15726: typedef typename _Tp::second_argument_type second_argument_type; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Reference_wrapper_base 15726: : _Weak_result_type<_Tp>, _Refwrap_base_arg1<_Tp>, _Refwrap_base_arg2<_Tp> 15726: { }; 15726: 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: 15726: 15726: template 15726: struct _Reference_wrapper_base<_Res(_T1) noexcept (_NE)> 15726: : unary_function<_T1, _Res> 15726: { }; 15726: 15726: template 15726: struct _Reference_wrapper_base<_Res(_T1) const> 15726: : unary_function<_T1, _Res> 15726: { }; 15726: 15726: template 15726: struct _Reference_wrapper_base<_Res(_T1) volatile> 15726: : unary_function<_T1, _Res> 15726: { }; 15726: 15726: template 15726: struct _Reference_wrapper_base<_Res(_T1) const volatile> 15726: : unary_function<_T1, _Res> 15726: { }; 15726: 15726: 15726: template 15726: struct _Reference_wrapper_base<_Res(_T1, _T2) noexcept (_NE)> 15726: : binary_function<_T1, _T2, _Res> 15726: { }; 15726: 15726: template 15726: struct _Reference_wrapper_base<_Res(_T1, _T2) const> 15726: : binary_function<_T1, _T2, _Res> 15726: { }; 15726: 15726: template 15726: struct _Reference_wrapper_base<_Res(_T1, _T2) volatile> 15726: : binary_function<_T1, _T2, _Res> 15726: { }; 15726: 15726: template 15726: struct _Reference_wrapper_base<_Res(_T1, _T2) const volatile> 15726: : binary_function<_T1, _T2, _Res> 15726: { }; 15726: 15726: 15726: template 15726: struct _Reference_wrapper_base<_Res(*)(_T1) noexcept (_NE)> 15726: : unary_function<_T1, _Res> 15726: { }; 15726: 15726: 15726: template 15726: struct _Reference_wrapper_base<_Res(*)(_T1, _T2) noexcept (_NE)> 15726: : binary_function<_T1, _T2, _Res> 15726: { }; 15726: 15726: template::value> 15726: struct _Reference_wrapper_base_memfun 15726: : _Reference_wrapper_base<_Tp> 15726: { }; 15726: 15726: template 15726: struct _Reference_wrapper_base_memfun<_MemFunPtr, true> 15726: : _Mem_fn_traits<_MemFunPtr>::__maybe_type 15726: { 15726: using result_type = typename _Mem_fn_traits<_MemFunPtr>::__result_type; 15726: }; 15726: #pragma GCC diagnostic pop 15726: # 302 "/usr/include/c++/13/bits/refwrap.h" 3 15726: template 15726: class reference_wrapper 15726: 15726: 15726: 15726: : public _Reference_wrapper_base_memfun::type> 15726: 15726: { 15726: _Tp* _M_data; 15726: 15726: 15726: static _Tp* _S_fun(_Tp& __r) noexcept { return std::__addressof(__r); } 15726: 15726: static void _S_fun(_Tp&&) = delete; 15726: 15726: template> 15726: using __not_same 15726: = typename enable_if::value>::type; 15726: 15726: public: 15726: typedef _Tp type; 15726: 15726: 15726: 15726: 15726: template, typename 15726: = decltype(reference_wrapper::_S_fun(std::declval<_Up>()))> 15726: 15726: reference_wrapper(_Up&& __uref) 15726: noexcept(noexcept(reference_wrapper::_S_fun(std::declval<_Up>()))) 15726: : _M_data(reference_wrapper::_S_fun(std::forward<_Up>(__uref))) 15726: { } 15726: 15726: reference_wrapper(const reference_wrapper&) = default; 15726: 15726: reference_wrapper& 15726: operator=(const reference_wrapper&) = default; 15726: 15726: 15726: operator _Tp&() const noexcept 15726: { return this->get(); } 15726: 15726: 15726: _Tp& 15726: get() const noexcept 15726: { return *_M_data; } 15726: 15726: template 15726: 15726: typename __invoke_result<_Tp&, _Args...>::type 15726: operator()(_Args&&... __args) const 15726: noexcept(__is_nothrow_invocable<_Tp&, _Args...>::value) 15726: { 15726: 15726: 15726: 15726: 15726: return std::__invoke(get(), std::forward<_Args>(__args)...); 15726: } 15726: }; 15726: 15726: 15726: template 15726: reference_wrapper(_Tp&) -> reference_wrapper<_Tp>; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: inline reference_wrapper<_Tp> 15726: ref(_Tp& __t) noexcept 15726: { return reference_wrapper<_Tp>(__t); } 15726: 15726: 15726: template 15726: 15726: inline reference_wrapper 15726: cref(const _Tp& __t) noexcept 15726: { return reference_wrapper(__t); } 15726: 15726: template 15726: void ref(const _Tp&&) = delete; 15726: 15726: template 15726: void cref(const _Tp&&) = delete; 15726: 15726: 15726: template 15726: 15726: inline reference_wrapper<_Tp> 15726: ref(reference_wrapper<_Tp> __t) noexcept 15726: { return __t; } 15726: 15726: 15726: template 15726: 15726: inline reference_wrapper 15726: cref(reference_wrapper<_Tp> __t) noexcept 15726: { return { __t.get() }; } 15726: 15726: 15726: 15726: 15726: } 15726: # 68 "/usr/include/c++/13/deque" 2 3 15726: # 1 "/usr/include/c++/13/bits/range_access.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/range_access.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/range_access.h" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__, __gnu__::__always_inline__]] 15726: inline constexpr auto 15726: begin(_Container& __cont) -> decltype(__cont.begin()) 15726: { return __cont.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__, __gnu__::__always_inline__]] 15726: inline constexpr auto 15726: begin(const _Container& __cont) -> decltype(__cont.begin()) 15726: { return __cont.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__, __gnu__::__always_inline__]] 15726: inline constexpr auto 15726: end(_Container& __cont) -> decltype(__cont.end()) 15726: { return __cont.end(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__, __gnu__::__always_inline__]] 15726: inline constexpr auto 15726: end(const _Container& __cont) -> decltype(__cont.end()) 15726: { return __cont.end(); } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__, __gnu__::__always_inline__]] 15726: inline constexpr _Tp* 15726: begin(_Tp (&__arr)[_Nm]) noexcept 15726: { return __arr; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__, __gnu__::__always_inline__]] 15726: inline constexpr _Tp* 15726: end(_Tp (&__arr)[_Nm]) noexcept 15726: { return __arr + _Nm; } 15726: 15726: 15726: 15726: template class valarray; 15726: 15726: template _Tp* begin(valarray<_Tp>&) noexcept; 15726: template const _Tp* begin(const valarray<_Tp>&) noexcept; 15726: template _Tp* end(valarray<_Tp>&) noexcept; 15726: template const _Tp* end(const valarray<_Tp>&) noexcept; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__, __gnu__::__always_inline__]] 15726: constexpr auto 15726: cbegin(const _Container& __cont) noexcept(noexcept(std::begin(__cont))) 15726: -> decltype(std::begin(__cont)) 15726: { return std::begin(__cont); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__, __gnu__::__always_inline__]] 15726: constexpr auto 15726: cend(const _Container& __cont) noexcept(noexcept(std::end(__cont))) 15726: -> decltype(std::end(__cont)) 15726: { return std::end(__cont); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__, __gnu__::__always_inline__]] 15726: inline constexpr auto 15726: rbegin(_Container& __cont) -> decltype(__cont.rbegin()) 15726: { return __cont.rbegin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__, __gnu__::__always_inline__]] 15726: inline constexpr auto 15726: rbegin(const _Container& __cont) -> decltype(__cont.rbegin()) 15726: { return __cont.rbegin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__, __gnu__::__always_inline__]] 15726: inline constexpr auto 15726: rend(_Container& __cont) -> decltype(__cont.rend()) 15726: { return __cont.rend(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__, __gnu__::__always_inline__]] 15726: inline constexpr auto 15726: rend(const _Container& __cont) -> decltype(__cont.rend()) 15726: { return __cont.rend(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr reverse_iterator<_Tp*> 15726: rbegin(_Tp (&__arr)[_Nm]) noexcept 15726: { return reverse_iterator<_Tp*>(__arr + _Nm); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr reverse_iterator<_Tp*> 15726: rend(_Tp (&__arr)[_Nm]) noexcept 15726: { return reverse_iterator<_Tp*>(__arr); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr reverse_iterator 15726: rbegin(initializer_list<_Tp> __il) noexcept 15726: { return reverse_iterator(__il.end()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline constexpr reverse_iterator 15726: rend(initializer_list<_Tp> __il) noexcept 15726: { return reverse_iterator(__il.begin()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__, __gnu__::__always_inline__]] 15726: inline constexpr auto 15726: crbegin(const _Container& __cont) -> decltype(std::rbegin(__cont)) 15726: { return std::rbegin(__cont); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__, __gnu__::__always_inline__]] 15726: inline constexpr auto 15726: crend(const _Container& __cont) -> decltype(std::rend(__cont)) 15726: { return std::rend(__cont); } 15726: # 261 "/usr/include/c++/13/bits/range_access.h" 3 15726: template 15726: [[nodiscard, __gnu__::__always_inline__]] 15726: constexpr auto 15726: size(const _Container& __cont) noexcept(noexcept(__cont.size())) 15726: -> decltype(__cont.size()) 15726: { return __cont.size(); } 15726: 15726: 15726: 15726: 15726: template 15726: [[nodiscard, __gnu__::__always_inline__]] 15726: constexpr size_t 15726: size(const _Tp (&)[_Nm]) noexcept 15726: { return _Nm; } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[nodiscard, __gnu__::__always_inline__]] 15726: constexpr auto 15726: empty(const _Container& __cont) noexcept(noexcept(__cont.empty())) 15726: -> decltype(__cont.empty()) 15726: { return __cont.empty(); } 15726: 15726: 15726: 15726: 15726: template 15726: [[nodiscard, __gnu__::__always_inline__]] 15726: constexpr bool 15726: empty(const _Tp (&)[_Nm]) noexcept 15726: { return false; } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[nodiscard, __gnu__::__always_inline__]] 15726: constexpr bool 15726: empty(initializer_list<_Tp> __il) noexcept 15726: { return __il.size() == 0;} 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[nodiscard, __gnu__::__always_inline__]] 15726: constexpr auto 15726: data(_Container& __cont) noexcept(noexcept(__cont.data())) 15726: -> decltype(__cont.data()) 15726: { return __cont.data(); } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[nodiscard, __gnu__::__always_inline__]] 15726: constexpr auto 15726: data(const _Container& __cont) noexcept(noexcept(__cont.data())) 15726: -> decltype(__cont.data()) 15726: { return __cont.data(); } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[nodiscard, __gnu__::__always_inline__]] 15726: constexpr _Tp* 15726: data(_Tp (&__array)[_Nm]) noexcept 15726: { return __array; } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[nodiscard, __gnu__::__always_inline__]] 15726: constexpr const _Tp* 15726: data(initializer_list<_Tp> __il) noexcept 15726: { return __il.begin(); } 15726: # 370 "/usr/include/c++/13/bits/range_access.h" 3 15726: 15726: } 15726: # 69 "/usr/include/c++/13/deque" 2 3 15726: # 1 "/usr/include/c++/13/bits/deque.tcc" 1 3 15726: # 61 "/usr/include/c++/13/bits/deque.tcc" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: template 15726: void 15726: deque<_Tp, _Alloc>:: 15726: _M_default_initialize() 15726: { 15726: _Map_pointer __cur; 15726: try 15726: { 15726: for (__cur = this->_M_impl._M_start._M_node; 15726: __cur < this->_M_impl._M_finish._M_node; 15726: ++__cur) 15726: std::__uninitialized_default_a(*__cur, *__cur + _S_buffer_size(), 15726: _M_get_Tp_allocator()); 15726: std::__uninitialized_default_a(this->_M_impl._M_finish._M_first, 15726: this->_M_impl._M_finish._M_cur, 15726: _M_get_Tp_allocator()); 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(this->_M_impl._M_start, iterator(*__cur, __cur), 15726: _M_get_Tp_allocator()); 15726: throw; 15726: } 15726: } 15726: 15726: 15726: template 15726: deque<_Tp, _Alloc>& 15726: deque<_Tp, _Alloc>:: 15726: operator=(const deque& __x) 15726: { 15726: if (std::__addressof(__x) != this) 15726: { 15726: 15726: if (_Alloc_traits::_S_propagate_on_copy_assign()) 15726: { 15726: if (!_Alloc_traits::_S_always_equal() 15726: && _M_get_Tp_allocator() != __x._M_get_Tp_allocator()) 15726: { 15726: 15726: 15726: _M_replace_map(__x, __x.get_allocator()); 15726: std::__alloc_on_copy(_M_get_Tp_allocator(), 15726: __x._M_get_Tp_allocator()); 15726: return *this; 15726: } 15726: std::__alloc_on_copy(_M_get_Tp_allocator(), 15726: __x._M_get_Tp_allocator()); 15726: } 15726: 15726: const size_type __len = size(); 15726: if (__len >= __x.size()) 15726: _M_erase_at_end(std::copy(__x.begin(), __x.end(), 15726: this->_M_impl._M_start)); 15726: else 15726: { 15726: const_iterator __mid = __x.begin() + difference_type(__len); 15726: std::copy(__x.begin(), __mid, this->_M_impl._M_start); 15726: _M_range_insert_aux(this->_M_impl._M_finish, __mid, __x.end(), 15726: std::random_access_iterator_tag()); 15726: } 15726: } 15726: return *this; 15726: } 15726: 15726: 15726: template 15726: template 15726: 15726: typename deque<_Tp, _Alloc>::reference 15726: 15726: 15726: 15726: deque<_Tp, _Alloc>:: 15726: emplace_front(_Args&&... __args) 15726: { 15726: if (this->_M_impl._M_start._M_cur != this->_M_impl._M_start._M_first) 15726: { 15726: _Alloc_traits::construct(this->_M_impl, 15726: this->_M_impl._M_start._M_cur - 1, 15726: std::forward<_Args>(__args)...); 15726: --this->_M_impl._M_start._M_cur; 15726: } 15726: else 15726: _M_push_front_aux(std::forward<_Args>(__args)...); 15726: 15726: return front(); 15726: 15726: } 15726: 15726: template 15726: template 15726: 15726: typename deque<_Tp, _Alloc>::reference 15726: 15726: 15726: 15726: deque<_Tp, _Alloc>:: 15726: emplace_back(_Args&&... __args) 15726: { 15726: if (this->_M_impl._M_finish._M_cur 15726: != this->_M_impl._M_finish._M_last - 1) 15726: { 15726: _Alloc_traits::construct(this->_M_impl, 15726: this->_M_impl._M_finish._M_cur, 15726: std::forward<_Args>(__args)...); 15726: ++this->_M_impl._M_finish._M_cur; 15726: } 15726: else 15726: _M_push_back_aux(std::forward<_Args>(__args)...); 15726: 15726: return back(); 15726: 15726: } 15726: 15726: 15726: 15726: template 15726: template 15726: typename deque<_Tp, _Alloc>::iterator 15726: deque<_Tp, _Alloc>:: 15726: emplace(const_iterator __position, _Args&&... __args) 15726: { 15726: if (__position._M_cur == this->_M_impl._M_start._M_cur) 15726: { 15726: emplace_front(std::forward<_Args>(__args)...); 15726: return this->_M_impl._M_start; 15726: } 15726: else if (__position._M_cur == this->_M_impl._M_finish._M_cur) 15726: { 15726: emplace_back(std::forward<_Args>(__args)...); 15726: iterator __tmp = this->_M_impl._M_finish; 15726: --__tmp; 15726: return __tmp; 15726: } 15726: else 15726: return _M_insert_aux(__position._M_const_cast(), 15726: std::forward<_Args>(__args)...); 15726: } 15726: 15726: 15726: template 15726: typename deque<_Tp, _Alloc>::iterator 15726: deque<_Tp, _Alloc>:: 15726: 15726: insert(const_iterator __position, const value_type& __x) 15726: 15726: 15726: 15726: { 15726: if (__position._M_cur == this->_M_impl._M_start._M_cur) 15726: { 15726: push_front(__x); 15726: return this->_M_impl._M_start; 15726: } 15726: else if (__position._M_cur == this->_M_impl._M_finish._M_cur) 15726: { 15726: push_back(__x); 15726: iterator __tmp = this->_M_impl._M_finish; 15726: --__tmp; 15726: return __tmp; 15726: } 15726: else 15726: return _M_insert_aux(__position._M_const_cast(), __x); 15726: } 15726: 15726: template 15726: typename deque<_Tp, _Alloc>::iterator 15726: deque<_Tp, _Alloc>:: 15726: _M_erase(iterator __position) 15726: { 15726: iterator __next = __position; 15726: ++__next; 15726: const difference_type __index = __position - begin(); 15726: if (static_cast(__index) < (size() >> 1)) 15726: { 15726: if (__position != begin()) 15726: std::move_backward(begin(), __position, __next); 15726: pop_front(); 15726: } 15726: else 15726: { 15726: if (__next != end()) 15726: std::move(__next, end(), __position); 15726: pop_back(); 15726: } 15726: return begin() + __index; 15726: } 15726: 15726: template 15726: typename deque<_Tp, _Alloc>::iterator 15726: deque<_Tp, _Alloc>:: 15726: _M_erase(iterator __first, iterator __last) 15726: { 15726: if (__first == __last) 15726: return __first; 15726: else if (__first == begin() && __last == end()) 15726: { 15726: clear(); 15726: return end(); 15726: } 15726: else 15726: { 15726: const difference_type __n = __last - __first; 15726: const difference_type __elems_before = __first - begin(); 15726: if (static_cast(__elems_before) <= (size() - __n) / 2) 15726: { 15726: if (__first != begin()) 15726: std::move_backward(begin(), __first, __last); 15726: _M_erase_at_begin(begin() + __n); 15726: } 15726: else 15726: { 15726: if (__last != end()) 15726: std::move(__last, end(), __first); 15726: _M_erase_at_end(end() - __n); 15726: } 15726: return begin() + __elems_before; 15726: } 15726: } 15726: 15726: template 15726: template 15726: void 15726: deque<_Tp, _Alloc>:: 15726: _M_assign_aux(_InputIterator __first, _InputIterator __last, 15726: std::input_iterator_tag) 15726: { 15726: iterator __cur = begin(); 15726: for (; __first != __last && __cur != end(); ++__cur, (void)++__first) 15726: *__cur = *__first; 15726: if (__first == __last) 15726: _M_erase_at_end(__cur); 15726: else 15726: _M_range_insert_aux(end(), __first, __last, 15726: std::__iterator_category(__first)); 15726: } 15726: 15726: template 15726: void 15726: deque<_Tp, _Alloc>:: 15726: _M_fill_insert(iterator __pos, size_type __n, const value_type& __x) 15726: { 15726: if (__pos._M_cur == this->_M_impl._M_start._M_cur) 15726: { 15726: iterator __new_start = _M_reserve_elements_at_front(__n); 15726: try 15726: { 15726: std::__uninitialized_fill_a(__new_start, this->_M_impl._M_start, 15726: __x, _M_get_Tp_allocator()); 15726: this->_M_impl._M_start = __new_start; 15726: } 15726: catch(...) 15726: { 15726: _M_destroy_nodes(__new_start._M_node, 15726: this->_M_impl._M_start._M_node); 15726: throw; 15726: } 15726: } 15726: else if (__pos._M_cur == this->_M_impl._M_finish._M_cur) 15726: { 15726: iterator __new_finish = _M_reserve_elements_at_back(__n); 15726: try 15726: { 15726: std::__uninitialized_fill_a(this->_M_impl._M_finish, 15726: __new_finish, __x, 15726: _M_get_Tp_allocator()); 15726: this->_M_impl._M_finish = __new_finish; 15726: } 15726: catch(...) 15726: { 15726: _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1, 15726: __new_finish._M_node + 1); 15726: throw; 15726: } 15726: } 15726: else 15726: _M_insert_aux(__pos, __n, __x); 15726: } 15726: 15726: 15726: template 15726: void 15726: deque<_Tp, _Alloc>:: 15726: _M_default_append(size_type __n) 15726: { 15726: if (__n) 15726: { 15726: iterator __new_finish = _M_reserve_elements_at_back(__n); 15726: try 15726: { 15726: std::__uninitialized_default_a(this->_M_impl._M_finish, 15726: __new_finish, 15726: _M_get_Tp_allocator()); 15726: this->_M_impl._M_finish = __new_finish; 15726: } 15726: catch(...) 15726: { 15726: _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1, 15726: __new_finish._M_node + 1); 15726: throw; 15726: } 15726: } 15726: } 15726: 15726: template 15726: bool 15726: deque<_Tp, _Alloc>:: 15726: _M_shrink_to_fit() 15726: { 15726: const difference_type __front_capacity 15726: = (this->_M_impl._M_start._M_cur - this->_M_impl._M_start._M_first); 15726: if (__front_capacity == 0) 15726: return false; 15726: 15726: const difference_type __back_capacity 15726: = (this->_M_impl._M_finish._M_last - this->_M_impl._M_finish._M_cur); 15726: if (__front_capacity + __back_capacity < _S_buffer_size()) 15726: return false; 15726: 15726: return std::__shrink_to_fit_aux::_S_do_it(*this); 15726: } 15726: 15726: 15726: template 15726: void 15726: deque<_Tp, _Alloc>:: 15726: _M_fill_initialize(const value_type& __value) 15726: { 15726: _Map_pointer __cur; 15726: try 15726: { 15726: for (__cur = this->_M_impl._M_start._M_node; 15726: __cur < this->_M_impl._M_finish._M_node; 15726: ++__cur) 15726: std::__uninitialized_fill_a(*__cur, *__cur + _S_buffer_size(), 15726: __value, _M_get_Tp_allocator()); 15726: std::__uninitialized_fill_a(this->_M_impl._M_finish._M_first, 15726: this->_M_impl._M_finish._M_cur, 15726: __value, _M_get_Tp_allocator()); 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(this->_M_impl._M_start, iterator(*__cur, __cur), 15726: _M_get_Tp_allocator()); 15726: throw; 15726: } 15726: } 15726: 15726: template 15726: template 15726: void 15726: deque<_Tp, _Alloc>:: 15726: _M_range_initialize(_InputIterator __first, _InputIterator __last, 15726: std::input_iterator_tag) 15726: { 15726: this->_M_initialize_map(0); 15726: try 15726: { 15726: for (; __first != __last; ++__first) 15726: 15726: emplace_back(*__first); 15726: 15726: 15726: 15726: } 15726: catch(...) 15726: { 15726: clear(); 15726: throw; 15726: } 15726: } 15726: 15726: template 15726: template 15726: void 15726: deque<_Tp, _Alloc>:: 15726: _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last, 15726: std::forward_iterator_tag) 15726: { 15726: const size_type __n = std::distance(__first, __last); 15726: this->_M_initialize_map(_S_check_init_len(__n, _M_get_Tp_allocator())); 15726: 15726: _Map_pointer __cur_node; 15726: try 15726: { 15726: for (__cur_node = this->_M_impl._M_start._M_node; 15726: __cur_node < this->_M_impl._M_finish._M_node; 15726: ++__cur_node) 15726: { 15726: if (__n < _S_buffer_size()) 15726: __builtin_unreachable(); 15726: 15726: _ForwardIterator __mid = __first; 15726: std::advance(__mid, _S_buffer_size()); 15726: std::__uninitialized_copy_a(__first, __mid, *__cur_node, 15726: _M_get_Tp_allocator()); 15726: __first = __mid; 15726: } 15726: std::__uninitialized_copy_a(__first, __last, 15726: this->_M_impl._M_finish._M_first, 15726: _M_get_Tp_allocator()); 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(this->_M_impl._M_start, 15726: iterator(*__cur_node, __cur_node), 15726: _M_get_Tp_allocator()); 15726: throw; 15726: } 15726: } 15726: 15726: 15726: template 15726: 15726: template 15726: void 15726: deque<_Tp, _Alloc>:: 15726: _M_push_back_aux(_Args&&... __args) 15726: 15726: 15726: 15726: 15726: 15726: { 15726: if (size() == max_size()) 15726: __throw_length_error( 15726: ("cannot create std::deque larger than max_size()")); 15726: 15726: _M_reserve_map_at_back(); 15726: *(this->_M_impl._M_finish._M_node + 1) = this->_M_allocate_node(); 15726: try 15726: { 15726: 15726: _Alloc_traits::construct(this->_M_impl, 15726: this->_M_impl._M_finish._M_cur, 15726: std::forward<_Args>(__args)...); 15726: 15726: 15726: 15726: this->_M_impl._M_finish._M_set_node(this->_M_impl._M_finish._M_node 15726: + 1); 15726: this->_M_impl._M_finish._M_cur = this->_M_impl._M_finish._M_first; 15726: } 15726: catch(...) 15726: { 15726: _M_deallocate_node(*(this->_M_impl._M_finish._M_node + 1)); 15726: throw; 15726: } 15726: } 15726: 15726: 15726: template 15726: 15726: template 15726: void 15726: deque<_Tp, _Alloc>:: 15726: _M_push_front_aux(_Args&&... __args) 15726: 15726: 15726: 15726: 15726: 15726: { 15726: if (size() == max_size()) 15726: __throw_length_error( 15726: ("cannot create std::deque larger than max_size()")); 15726: 15726: _M_reserve_map_at_front(); 15726: *(this->_M_impl._M_start._M_node - 1) = this->_M_allocate_node(); 15726: try 15726: { 15726: this->_M_impl._M_start._M_set_node(this->_M_impl._M_start._M_node 15726: - 1); 15726: this->_M_impl._M_start._M_cur = this->_M_impl._M_start._M_last - 1; 15726: 15726: _Alloc_traits::construct(this->_M_impl, 15726: this->_M_impl._M_start._M_cur, 15726: std::forward<_Args>(__args)...); 15726: 15726: 15726: 15726: } 15726: catch(...) 15726: { 15726: ++this->_M_impl._M_start; 15726: _M_deallocate_node(*(this->_M_impl._M_start._M_node - 1)); 15726: throw; 15726: } 15726: } 15726: 15726: 15726: template 15726: void deque<_Tp, _Alloc>:: 15726: _M_pop_back_aux() 15726: { 15726: _M_deallocate_node(this->_M_impl._M_finish._M_first); 15726: this->_M_impl._M_finish._M_set_node(this->_M_impl._M_finish._M_node - 1); 15726: this->_M_impl._M_finish._M_cur = this->_M_impl._M_finish._M_last - 1; 15726: _Alloc_traits::destroy(_M_get_Tp_allocator(), 15726: this->_M_impl._M_finish._M_cur); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: void deque<_Tp, _Alloc>:: 15726: _M_pop_front_aux() 15726: { 15726: _Alloc_traits::destroy(_M_get_Tp_allocator(), 15726: this->_M_impl._M_start._M_cur); 15726: _M_deallocate_node(this->_M_impl._M_start._M_first); 15726: this->_M_impl._M_start._M_set_node(this->_M_impl._M_start._M_node + 1); 15726: this->_M_impl._M_start._M_cur = this->_M_impl._M_start._M_first; 15726: } 15726: 15726: template 15726: template 15726: void 15726: deque<_Tp, _Alloc>:: 15726: _M_range_insert_aux(iterator __pos, 15726: _InputIterator __first, _InputIterator __last, 15726: std::input_iterator_tag) 15726: { std::copy(__first, __last, std::inserter(*this, __pos)); } 15726: 15726: template 15726: template 15726: void 15726: deque<_Tp, _Alloc>:: 15726: _M_range_insert_aux(iterator __pos, 15726: _ForwardIterator __first, _ForwardIterator __last, 15726: std::forward_iterator_tag) 15726: { 15726: const size_type __n = std::distance(__first, __last); 15726: if (__pos._M_cur == this->_M_impl._M_start._M_cur) 15726: { 15726: iterator __new_start = _M_reserve_elements_at_front(__n); 15726: try 15726: { 15726: std::__uninitialized_copy_a(__first, __last, __new_start, 15726: _M_get_Tp_allocator()); 15726: this->_M_impl._M_start = __new_start; 15726: } 15726: catch(...) 15726: { 15726: _M_destroy_nodes(__new_start._M_node, 15726: this->_M_impl._M_start._M_node); 15726: throw; 15726: } 15726: } 15726: else if (__pos._M_cur == this->_M_impl._M_finish._M_cur) 15726: { 15726: iterator __new_finish = _M_reserve_elements_at_back(__n); 15726: try 15726: { 15726: std::__uninitialized_copy_a(__first, __last, 15726: this->_M_impl._M_finish, 15726: _M_get_Tp_allocator()); 15726: this->_M_impl._M_finish = __new_finish; 15726: } 15726: catch(...) 15726: { 15726: _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1, 15726: __new_finish._M_node + 1); 15726: throw; 15726: } 15726: } 15726: else 15726: _M_insert_aux(__pos, __first, __last, __n); 15726: } 15726: 15726: template 15726: 15726: template 15726: typename deque<_Tp, _Alloc>::iterator 15726: deque<_Tp, _Alloc>:: 15726: _M_insert_aux(iterator __pos, _Args&&... __args) 15726: { 15726: value_type __x_copy(std::forward<_Args>(__args)...); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: difference_type __index = __pos - this->_M_impl._M_start; 15726: if (static_cast(__index) < size() / 2) 15726: { 15726: push_front(std::move(front())); 15726: iterator __front1 = this->_M_impl._M_start; 15726: ++__front1; 15726: iterator __front2 = __front1; 15726: ++__front2; 15726: __pos = this->_M_impl._M_start + __index; 15726: iterator __pos1 = __pos; 15726: ++__pos1; 15726: std::move(__front2, __pos1, __front1); 15726: } 15726: else 15726: { 15726: push_back(std::move(back())); 15726: iterator __back1 = this->_M_impl._M_finish; 15726: --__back1; 15726: iterator __back2 = __back1; 15726: --__back2; 15726: __pos = this->_M_impl._M_start + __index; 15726: std::move_backward(__pos, __back2, __back1); 15726: } 15726: *__pos = std::move(__x_copy); 15726: return __pos; 15726: } 15726: 15726: template 15726: void 15726: deque<_Tp, _Alloc>:: 15726: _M_insert_aux(iterator __pos, size_type __n, const value_type& __x) 15726: { 15726: const difference_type __elems_before = __pos - this->_M_impl._M_start; 15726: const size_type __length = this->size(); 15726: value_type __x_copy = __x; 15726: if (__elems_before < difference_type(__length / 2)) 15726: { 15726: iterator __new_start = _M_reserve_elements_at_front(__n); 15726: iterator __old_start = this->_M_impl._M_start; 15726: __pos = this->_M_impl._M_start + __elems_before; 15726: try 15726: { 15726: if (__elems_before >= difference_type(__n)) 15726: { 15726: iterator __start_n = (this->_M_impl._M_start 15726: + difference_type(__n)); 15726: std::__uninitialized_move_a(this->_M_impl._M_start, 15726: __start_n, __new_start, 15726: _M_get_Tp_allocator()); 15726: this->_M_impl._M_start = __new_start; 15726: std::move(__start_n, __pos, __old_start); 15726: std::fill(__pos - difference_type(__n), __pos, __x_copy); 15726: } 15726: else 15726: { 15726: std::__uninitialized_move_fill(this->_M_impl._M_start, 15726: __pos, __new_start, 15726: this->_M_impl._M_start, 15726: __x_copy, 15726: _M_get_Tp_allocator()); 15726: this->_M_impl._M_start = __new_start; 15726: std::fill(__old_start, __pos, __x_copy); 15726: } 15726: } 15726: catch(...) 15726: { 15726: _M_destroy_nodes(__new_start._M_node, 15726: this->_M_impl._M_start._M_node); 15726: throw; 15726: } 15726: } 15726: else 15726: { 15726: iterator __new_finish = _M_reserve_elements_at_back(__n); 15726: iterator __old_finish = this->_M_impl._M_finish; 15726: const difference_type __elems_after = 15726: difference_type(__length) - __elems_before; 15726: __pos = this->_M_impl._M_finish - __elems_after; 15726: try 15726: { 15726: if (__elems_after > difference_type(__n)) 15726: { 15726: iterator __finish_n = (this->_M_impl._M_finish 15726: - difference_type(__n)); 15726: std::__uninitialized_move_a(__finish_n, 15726: this->_M_impl._M_finish, 15726: this->_M_impl._M_finish, 15726: _M_get_Tp_allocator()); 15726: this->_M_impl._M_finish = __new_finish; 15726: std::move_backward(__pos, __finish_n, __old_finish); 15726: std::fill(__pos, __pos + difference_type(__n), __x_copy); 15726: } 15726: else 15726: { 15726: std::__uninitialized_fill_move(this->_M_impl._M_finish, 15726: __pos + difference_type(__n), 15726: __x_copy, __pos, 15726: this->_M_impl._M_finish, 15726: _M_get_Tp_allocator()); 15726: this->_M_impl._M_finish = __new_finish; 15726: std::fill(__pos, __old_finish, __x_copy); 15726: } 15726: } 15726: catch(...) 15726: { 15726: _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1, 15726: __new_finish._M_node + 1); 15726: throw; 15726: } 15726: } 15726: } 15726: 15726: template 15726: template 15726: void 15726: deque<_Tp, _Alloc>:: 15726: _M_insert_aux(iterator __pos, 15726: _ForwardIterator __first, _ForwardIterator __last, 15726: size_type __n) 15726: { 15726: const difference_type __elemsbefore = __pos - this->_M_impl._M_start; 15726: const size_type __length = size(); 15726: if (static_cast(__elemsbefore) < __length / 2) 15726: { 15726: iterator __new_start = _M_reserve_elements_at_front(__n); 15726: iterator __old_start = this->_M_impl._M_start; 15726: __pos = this->_M_impl._M_start + __elemsbefore; 15726: try 15726: { 15726: if (__elemsbefore >= difference_type(__n)) 15726: { 15726: iterator __start_n = (this->_M_impl._M_start 15726: + difference_type(__n)); 15726: std::__uninitialized_move_a(this->_M_impl._M_start, 15726: __start_n, __new_start, 15726: _M_get_Tp_allocator()); 15726: this->_M_impl._M_start = __new_start; 15726: std::move(__start_n, __pos, __old_start); 15726: std::copy(__first, __last, __pos - difference_type(__n)); 15726: } 15726: else 15726: { 15726: _ForwardIterator __mid = __first; 15726: std::advance(__mid, difference_type(__n) - __elemsbefore); 15726: std::__uninitialized_move_copy(this->_M_impl._M_start, 15726: __pos, __first, __mid, 15726: __new_start, 15726: _M_get_Tp_allocator()); 15726: this->_M_impl._M_start = __new_start; 15726: std::copy(__mid, __last, __old_start); 15726: } 15726: } 15726: catch(...) 15726: { 15726: _M_destroy_nodes(__new_start._M_node, 15726: this->_M_impl._M_start._M_node); 15726: throw; 15726: } 15726: } 15726: else 15726: { 15726: iterator __new_finish = _M_reserve_elements_at_back(__n); 15726: iterator __old_finish = this->_M_impl._M_finish; 15726: const difference_type __elemsafter = 15726: difference_type(__length) - __elemsbefore; 15726: __pos = this->_M_impl._M_finish - __elemsafter; 15726: try 15726: { 15726: if (__elemsafter > difference_type(__n)) 15726: { 15726: iterator __finish_n = (this->_M_impl._M_finish 15726: - difference_type(__n)); 15726: std::__uninitialized_move_a(__finish_n, 15726: this->_M_impl._M_finish, 15726: this->_M_impl._M_finish, 15726: _M_get_Tp_allocator()); 15726: this->_M_impl._M_finish = __new_finish; 15726: std::move_backward(__pos, __finish_n, __old_finish); 15726: std::copy(__first, __last, __pos); 15726: } 15726: else 15726: { 15726: _ForwardIterator __mid = __first; 15726: std::advance(__mid, __elemsafter); 15726: std::__uninitialized_copy_move(__mid, __last, __pos, 15726: this->_M_impl._M_finish, 15726: this->_M_impl._M_finish, 15726: _M_get_Tp_allocator()); 15726: this->_M_impl._M_finish = __new_finish; 15726: std::copy(__first, __mid, __pos); 15726: } 15726: } 15726: catch(...) 15726: { 15726: _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1, 15726: __new_finish._M_node + 1); 15726: throw; 15726: } 15726: } 15726: } 15726: 15726: template 15726: void 15726: deque<_Tp, _Alloc>:: 15726: _M_destroy_data_aux(iterator __first, iterator __last) 15726: { 15726: for (_Map_pointer __node = __first._M_node + 1; 15726: __node < __last._M_node; ++__node) 15726: std::_Destroy(*__node, *__node + _S_buffer_size(), 15726: _M_get_Tp_allocator()); 15726: 15726: if (__first._M_node != __last._M_node) 15726: { 15726: std::_Destroy(__first._M_cur, __first._M_last, 15726: _M_get_Tp_allocator()); 15726: std::_Destroy(__last._M_first, __last._M_cur, 15726: _M_get_Tp_allocator()); 15726: } 15726: else 15726: std::_Destroy(__first._M_cur, __last._M_cur, 15726: _M_get_Tp_allocator()); 15726: } 15726: 15726: template 15726: void 15726: deque<_Tp, _Alloc>:: 15726: _M_new_elements_at_front(size_type __new_elems) 15726: { 15726: if (this->max_size() - this->size() < __new_elems) 15726: __throw_length_error(("deque::_M_new_elements_at_front")); 15726: 15726: const size_type __new_nodes = ((__new_elems + _S_buffer_size() - 1) 15726: / _S_buffer_size()); 15726: _M_reserve_map_at_front(__new_nodes); 15726: size_type __i; 15726: try 15726: { 15726: for (__i = 1; __i <= __new_nodes; ++__i) 15726: *(this->_M_impl._M_start._M_node - __i) = this->_M_allocate_node(); 15726: } 15726: catch(...) 15726: { 15726: for (size_type __j = 1; __j < __i; ++__j) 15726: _M_deallocate_node(*(this->_M_impl._M_start._M_node - __j)); 15726: throw; 15726: } 15726: } 15726: 15726: template 15726: void 15726: deque<_Tp, _Alloc>:: 15726: _M_new_elements_at_back(size_type __new_elems) 15726: { 15726: if (this->max_size() - this->size() < __new_elems) 15726: __throw_length_error(("deque::_M_new_elements_at_back")); 15726: 15726: const size_type __new_nodes = ((__new_elems + _S_buffer_size() - 1) 15726: / _S_buffer_size()); 15726: _M_reserve_map_at_back(__new_nodes); 15726: size_type __i; 15726: try 15726: { 15726: for (__i = 1; __i <= __new_nodes; ++__i) 15726: *(this->_M_impl._M_finish._M_node + __i) = this->_M_allocate_node(); 15726: } 15726: catch(...) 15726: { 15726: for (size_type __j = 1; __j < __i; ++__j) 15726: _M_deallocate_node(*(this->_M_impl._M_finish._M_node + __j)); 15726: throw; 15726: } 15726: } 15726: 15726: template 15726: void 15726: deque<_Tp, _Alloc>:: 15726: _M_reallocate_map(size_type __nodes_to_add, bool __add_at_front) 15726: { 15726: const size_type __old_num_nodes 15726: = this->_M_impl._M_finish._M_node - this->_M_impl._M_start._M_node + 1; 15726: const size_type __new_num_nodes = __old_num_nodes + __nodes_to_add; 15726: 15726: _Map_pointer __new_nstart; 15726: if (this->_M_impl._M_map_size > 2 * __new_num_nodes) 15726: { 15726: __new_nstart = this->_M_impl._M_map + (this->_M_impl._M_map_size 15726: - __new_num_nodes) / 2 15726: + (__add_at_front ? __nodes_to_add : 0); 15726: if (__new_nstart < this->_M_impl._M_start._M_node) 15726: std::copy(this->_M_impl._M_start._M_node, 15726: this->_M_impl._M_finish._M_node + 1, 15726: __new_nstart); 15726: else 15726: std::copy_backward(this->_M_impl._M_start._M_node, 15726: this->_M_impl._M_finish._M_node + 1, 15726: __new_nstart + __old_num_nodes); 15726: } 15726: else 15726: { 15726: size_type __new_map_size = this->_M_impl._M_map_size 15726: + std::max(this->_M_impl._M_map_size, 15726: __nodes_to_add) + 2; 15726: 15726: _Map_pointer __new_map = this->_M_allocate_map(__new_map_size); 15726: __new_nstart = __new_map + (__new_map_size - __new_num_nodes) / 2 15726: + (__add_at_front ? __nodes_to_add : 0); 15726: std::copy(this->_M_impl._M_start._M_node, 15726: this->_M_impl._M_finish._M_node + 1, 15726: __new_nstart); 15726: _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size); 15726: 15726: this->_M_impl._M_map = __new_map; 15726: this->_M_impl._M_map_size = __new_map_size; 15726: } 15726: 15726: this->_M_impl._M_start._M_set_node(__new_nstart); 15726: this->_M_impl._M_finish._M_set_node(__new_nstart + __old_num_nodes - 1); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: void 15726: __fill_a1(const std::_Deque_iterator<_Tp, _Tp&, _Tp*>& __first, 15726: const std::_Deque_iterator<_Tp, _Tp&, _Tp*>& __last, 15726: const _VTp& __value) 15726: { 15726: typedef std::_Deque_iterator<_Tp, _Tp&, _Tp*> _Iter; 15726: if (__first._M_node != __last._M_node) 15726: { 15726: std::__fill_a1(__first._M_cur, __first._M_last, __value); 15726: 15726: for (typename _Iter::_Map_pointer __node = __first._M_node + 1; 15726: __node < __last._M_node; ++__node) 15726: std::__fill_a1(*__node, *__node + _Iter::_S_buffer_size(), __value); 15726: 15726: std::__fill_a1(__last._M_first, __last._M_cur, __value); 15726: } 15726: else 15726: std::__fill_a1(__first._M_cur, __last._M_cur, __value); 15726: } 15726: 15726: template 15726: _OI 15726: __copy_move_dit(std::_Deque_iterator<_Tp, _Ref, _Ptr> __first, 15726: std::_Deque_iterator<_Tp, _Ref, _Ptr> __last, 15726: _OI __result) 15726: { 15726: typedef std::_Deque_iterator<_Tp, _Ref, _Ptr> _Iter; 15726: if (__first._M_node != __last._M_node) 15726: { 15726: __result 15726: = std::__copy_move_a1<_IsMove>(__first._M_cur, __first._M_last, 15726: __result); 15726: 15726: for (typename _Iter::_Map_pointer __node = __first._M_node + 1; 15726: __node != __last._M_node; ++__node) 15726: __result 15726: = std::__copy_move_a1<_IsMove>(*__node, 15726: *__node + _Iter::_S_buffer_size(), 15726: __result); 15726: 15726: return std::__copy_move_a1<_IsMove>(__last._M_first, __last._M_cur, 15726: __result); 15726: } 15726: 15726: return std::__copy_move_a1<_IsMove>(__first._M_cur, __last._M_cur, 15726: __result); 15726: } 15726: 15726: template 15726: _OI 15726: __copy_move_a1(std::_Deque_iterator<_Tp, _Ref, _Ptr> __first, 15726: std::_Deque_iterator<_Tp, _Ref, _Ptr> __last, 15726: _OI __result) 15726: { return __copy_move_dit<_IsMove>(__first, __last, __result); } 15726: 15726: template 15726: std::_Deque_iterator<_OTp, _OTp&, _OTp*> 15726: __copy_move_a1(std::_Deque_iterator<_ITp, _IRef, _IPtr> __first, 15726: std::_Deque_iterator<_ITp, _IRef, _IPtr> __last, 15726: std::_Deque_iterator<_OTp, _OTp&, _OTp*> __result) 15726: { return __copy_move_dit<_IsMove>(__first, __last, __result); } 15726: 15726: template 15726: typename __gnu_cxx::__enable_if< 15726: __is_random_access_iter<_II>::__value, 15726: std::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type 15726: __copy_move_a1(_II __first, _II __last, 15726: std::_Deque_iterator<_Tp, _Tp&, _Tp*> __result) 15726: { 15726: typedef std::_Deque_iterator<_Tp, _Tp&, _Tp*> _Iter; 15726: typedef typename _Iter::difference_type difference_type; 15726: 15726: difference_type __len = __last - __first; 15726: while (__len > 0) 15726: { 15726: const difference_type __clen 15726: = std::min(__len, __result._M_last - __result._M_cur); 15726: std::__copy_move_a1<_IsMove>(__first, __first + __clen, 15726: __result._M_cur); 15726: 15726: __first += __clen; 15726: __result += __clen; 15726: __len -= __clen; 15726: } 15726: 15726: return __result; 15726: } 15726: 15726: template 15726: typename __gnu_cxx::__enable_if< 15726: __is_char<_CharT>::__value, 15726: std::_Deque_iterator<_CharT, _CharT&, _CharT*> >::__type 15726: __copy_move_a2( 15726: istreambuf_iterator<_CharT, char_traits<_CharT> > __first, 15726: istreambuf_iterator<_CharT, char_traits<_CharT> > __last, 15726: std::_Deque_iterator<_CharT, _CharT&, _CharT*> __result) 15726: { 15726: if (__first == __last) 15726: return __result; 15726: 15726: for (;;) 15726: { 15726: const std::ptrdiff_t __len = __result._M_last - __result._M_cur; 15726: const std::ptrdiff_t __nb 15726: = std::__copy_n_a(__first, __len, __result._M_cur, false) 15726: - __result._M_cur; 15726: __result += __nb; 15726: 15726: if (__nb != __len) 15726: break; 15726: } 15726: 15726: return __result; 15726: } 15726: 15726: template 15726: typename __gnu_cxx::__enable_if< 15726: __is_char<_CharT>::__value, 15726: std::_Deque_iterator<_CharT, _CharT&, _CharT*> >::__type 15726: __copy_n_a( 15726: istreambuf_iterator<_CharT, char_traits<_CharT> > __it, _Size __size, 15726: std::_Deque_iterator<_CharT, _CharT&, _CharT*> __result, 15726: bool __strict) 15726: { 15726: if (__size == 0) 15726: return __result; 15726: 15726: do 15726: { 15726: const _Size __len 15726: = std::min<_Size>(__result._M_last - __result._M_cur, __size); 15726: std::__copy_n_a(__it, __len, __result._M_cur, __strict); 15726: __result += __len; 15726: __size -= __len; 15726: } 15726: while (__size != 0); 15726: return __result; 15726: } 15726: 15726: template 15726: _OI 15726: __copy_move_backward_dit( 15726: std::_Deque_iterator<_Tp, _Ref, _Ptr> __first, 15726: std::_Deque_iterator<_Tp, _Ref, _Ptr> __last, 15726: _OI __result) 15726: { 15726: typedef std::_Deque_iterator<_Tp, _Ref, _Ptr> _Iter; 15726: if (__first._M_node != __last._M_node) 15726: { 15726: __result = std::__copy_move_backward_a1<_IsMove>( 15726: __last._M_first, __last._M_cur, __result); 15726: 15726: for (typename _Iter::_Map_pointer __node = __last._M_node - 1; 15726: __node != __first._M_node; --__node) 15726: __result = std::__copy_move_backward_a1<_IsMove>( 15726: *__node, *__node + _Iter::_S_buffer_size(), __result); 15726: 15726: return std::__copy_move_backward_a1<_IsMove>( 15726: __first._M_cur, __first._M_last, __result); 15726: } 15726: 15726: return std::__copy_move_backward_a1<_IsMove>( 15726: __first._M_cur, __last._M_cur, __result); 15726: } 15726: 15726: template 15726: _OI 15726: __copy_move_backward_a1( 15726: std::_Deque_iterator<_Tp, _Ref, _Ptr> __first, 15726: std::_Deque_iterator<_Tp, _Ref, _Ptr> __last, 15726: _OI __result) 15726: { return __copy_move_backward_dit<_IsMove>(__first, __last, __result); } 15726: 15726: template 15726: std::_Deque_iterator<_OTp, _OTp&, _OTp*> 15726: __copy_move_backward_a1( 15726: std::_Deque_iterator<_ITp, _IRef, _IPtr> __first, 15726: std::_Deque_iterator<_ITp, _IRef, _IPtr> __last, 15726: std::_Deque_iterator<_OTp, _OTp&, _OTp*> __result) 15726: { return __copy_move_backward_dit<_IsMove>(__first, __last, __result); } 15726: 15726: template 15726: typename __gnu_cxx::__enable_if< 15726: __is_random_access_iter<_II>::__value, 15726: std::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type 15726: __copy_move_backward_a1(_II __first, _II __last, 15726: std::_Deque_iterator<_Tp, _Tp&, _Tp*> __result) 15726: { 15726: typedef std::_Deque_iterator<_Tp, _Tp&, _Tp*> _Iter; 15726: typedef typename _Iter::difference_type difference_type; 15726: 15726: difference_type __len = __last - __first; 15726: while (__len > 0) 15726: { 15726: difference_type __rlen = __result._M_cur - __result._M_first; 15726: _Tp* __rend = __result._M_cur; 15726: if (!__rlen) 15726: { 15726: __rlen = _Iter::_S_buffer_size(); 15726: __rend = *(__result._M_node - 1) + __rlen; 15726: } 15726: 15726: const difference_type __clen = std::min(__len, __rlen); 15726: std::__copy_move_backward_a1<_IsMove>(__last - __clen, __last, __rend); 15726: 15726: __last -= __clen; 15726: __result -= __clen; 15726: __len -= __clen; 15726: } 15726: 15726: return __result; 15726: } 15726: 15726: template 15726: bool 15726: __equal_dit( 15726: const std::_Deque_iterator<_Tp, _Ref, _Ptr>& __first1, 15726: const std::_Deque_iterator<_Tp, _Ref, _Ptr>& __last1, 15726: _II __first2) 15726: { 15726: typedef std::_Deque_iterator<_Tp, _Ref, _Ptr> _Iter; 15726: if (__first1._M_node != __last1._M_node) 15726: { 15726: if (!std::__equal_aux1(__first1._M_cur, __first1._M_last, __first2)) 15726: return false; 15726: 15726: __first2 += __first1._M_last - __first1._M_cur; 15726: for (typename _Iter::_Map_pointer __node = __first1._M_node + 1; 15726: __node != __last1._M_node; 15726: __first2 += _Iter::_S_buffer_size(), ++__node) 15726: if (!std::__equal_aux1(*__node, *__node + _Iter::_S_buffer_size(), 15726: __first2)) 15726: return false; 15726: 15726: return std::__equal_aux1(__last1._M_first, __last1._M_cur, __first2); 15726: } 15726: 15726: return std::__equal_aux1(__first1._M_cur, __last1._M_cur, __first2); 15726: } 15726: 15726: template 15726: typename __gnu_cxx::__enable_if< 15726: __is_random_access_iter<_II>::__value, bool>::__type 15726: __equal_aux1(std::_Deque_iterator<_Tp, _Ref, _Ptr> __first1, 15726: std::_Deque_iterator<_Tp, _Ref, _Ptr> __last1, 15726: _II __first2) 15726: { return std::__equal_dit(__first1, __last1, __first2); } 15726: 15726: template 15726: bool 15726: __equal_aux1(std::_Deque_iterator<_Tp1, _Ref1, _Ptr1> __first1, 15726: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1> __last1, 15726: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2> __first2) 15726: { return std::__equal_dit(__first1, __last1, __first2); } 15726: 15726: template 15726: typename __gnu_cxx::__enable_if< 15726: __is_random_access_iter<_II>::__value, bool>::__type 15726: __equal_aux1(_II __first1, _II __last1, 15726: std::_Deque_iterator<_Tp, _Ref, _Ptr> __first2) 15726: { 15726: typedef std::_Deque_iterator<_Tp, _Ref, _Ptr> _Iter; 15726: typedef typename _Iter::difference_type difference_type; 15726: 15726: difference_type __len = __last1 - __first1; 15726: while (__len > 0) 15726: { 15726: const difference_type __clen 15726: = std::min(__len, __first2._M_last - __first2._M_cur); 15726: if (!std::__equal_aux1(__first1, __first1 + __clen, __first2._M_cur)) 15726: return false; 15726: 15726: __first1 += __clen; 15726: __len -= __clen; 15726: __first2 += __clen; 15726: } 15726: 15726: return true; 15726: } 15726: 15726: template 15726: int 15726: __lex_cmp_dit( 15726: std::_Deque_iterator<_Tp1, _Ref, _Ptr> __first1, 15726: std::_Deque_iterator<_Tp1, _Ref, _Ptr> __last1, 15726: const _Tp2* __first2, const _Tp2* __last2) 15726: { 15726: const bool __simple = 15726: (__is_memcmp_ordered_with<_Tp1, _Tp2>::__value 15726: && __is_pointer<_Ptr>::__value 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ); 15726: typedef std::__lexicographical_compare<__simple> _Lc; 15726: 15726: while (__first1._M_node != __last1._M_node) 15726: { 15726: const ptrdiff_t __len1 = __first1._M_last - __first1._M_cur; 15726: const ptrdiff_t __len2 = __last2 - __first2; 15726: const ptrdiff_t __len = std::min(__len1, __len2); 15726: 15726: if (int __ret = _Lc::__3way(__first1._M_cur, __first1._M_last, 15726: __first2, __first2 + __len)) 15726: return __ret; 15726: 15726: __first1 += __len; 15726: __first2 += __len; 15726: } 15726: return _Lc::__3way(__first1._M_cur, __last1._M_cur, 15726: __first2, __last2); 15726: } 15726: 15726: template 15726: inline bool 15726: __lexicographical_compare_aux1( 15726: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1> __first1, 15726: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1> __last1, 15726: _Tp2* __first2, _Tp2* __last2) 15726: { return std::__lex_cmp_dit(__first1, __last1, __first2, __last2) < 0; } 15726: 15726: template 15726: inline bool 15726: __lexicographical_compare_aux1(_Tp1* __first1, _Tp1* __last1, 15726: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2> __first2, 15726: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2> __last2) 15726: { return std::__lex_cmp_dit(__first2, __last2, __first1, __last1) > 0; } 15726: 15726: template 15726: inline bool 15726: __lexicographical_compare_aux1( 15726: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1> __first1, 15726: std::_Deque_iterator<_Tp1, _Ref1, _Ptr1> __last1, 15726: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2> __first2, 15726: std::_Deque_iterator<_Tp2, _Ref2, _Ptr2> __last2) 15726: { 15726: const bool __simple = 15726: (__is_memcmp_ordered_with<_Tp1, _Tp2>::__value 15726: && __is_pointer<_Ptr1>::__value 15726: && __is_pointer<_Ptr2>::__value 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ); 15726: typedef std::__lexicographical_compare<__simple> _Lc; 15726: 15726: while (__first1 != __last1) 15726: { 15726: const ptrdiff_t __len2 = __first2._M_node == __last2._M_node 15726: ? __last2._M_cur - __first2._M_cur 15726: : __first2._M_last - __first2._M_cur; 15726: if (__len2 == 0) 15726: return false; 15726: const ptrdiff_t __len1 = __first1._M_node == __last1._M_node 15726: ? __last1._M_cur - __first1._M_cur 15726: : __first1._M_last - __first1._M_cur; 15726: const ptrdiff_t __len = std::min(__len1, __len2); 15726: if (int __ret = _Lc::__3way(__first1._M_cur, __first1._M_cur + __len, 15726: __first2._M_cur, __first2._M_cur + __len)) 15726: return __ret < 0; 15726: 15726: __first1 += __len; 15726: __first2 += __len; 15726: } 15726: 15726: return __last2 != __first2; 15726: } 15726: 15726: 15726: } 15726: # 70 "/usr/include/c++/13/deque" 2 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/memory_resource.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/memory_resource.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/memory_resource.h" 3 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/cstddef" 1 3 15726: # 42 "/usr/include/c++/13/cstddef" 3 15726: 15726: # 43 "/usr/include/c++/13/cstddef" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 145 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 3 4 15726: typedef int ptrdiff_t; 15726: # 214 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 3 4 15726: typedef unsigned int size_t; 15726: # 425 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 3 4 15726: typedef struct { 15726: long long __max_align_ll __attribute__((__aligned__(__alignof__(long long)))); 15726: long double __max_align_ld __attribute__((__aligned__(__alignof__(long double)))); 15726: # 436 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 3 4 15726: } max_align_t; 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef decltype(nullptr) nullptr_t; 15726: # 51 "/usr/include/c++/13/cstddef" 2 3 15726: 15726: extern "C++" 15726: { 15726: 15726: namespace std 15726: { 15726: 15726: using ::max_align_t; 15726: } 15726: 15726: 15726: 15726: namespace std 15726: { 15726: 15726: 15726: 15726: 15726: enum class byte : unsigned char {}; 15726: 15726: template struct __byte_operand { }; 15726: template<> struct __byte_operand { using __type = byte; }; 15726: template<> struct __byte_operand { using __type = byte; }; 15726: template<> struct __byte_operand { using __type = byte; }; 15726: template<> struct __byte_operand { using __type = byte; }; 15726: template<> struct __byte_operand { using __type = byte; }; 15726: 15726: 15726: 15726: template<> struct __byte_operand { using __type = byte; }; 15726: template<> struct __byte_operand { using __type = byte; }; 15726: template<> struct __byte_operand { using __type = byte; }; 15726: template<> struct __byte_operand { using __type = byte; }; 15726: template<> struct __byte_operand { using __type = byte; }; 15726: template<> struct __byte_operand { using __type = byte; }; 15726: template<> struct __byte_operand { using __type = byte; }; 15726: template<> struct __byte_operand { using __type = byte; }; 15726: template<> struct __byte_operand { using __type = byte; }; 15726: template<> struct __byte_operand { using __type = byte; }; 15726: # 108 "/usr/include/c++/13/cstddef" 3 15726: template 15726: struct __byte_operand 15726: : __byte_operand<_IntegerType> { }; 15726: template 15726: struct __byte_operand 15726: : __byte_operand<_IntegerType> { }; 15726: template 15726: struct __byte_operand 15726: : __byte_operand<_IntegerType> { }; 15726: 15726: template 15726: using __byte_op_t = typename __byte_operand<_IntegerType>::__type; 15726: 15726: template 15726: [[__gnu__::__always_inline__]] 15726: constexpr __byte_op_t<_IntegerType> 15726: operator<<(byte __b, _IntegerType __shift) noexcept 15726: { return (byte)(unsigned char)((unsigned)__b << __shift); } 15726: 15726: template 15726: [[__gnu__::__always_inline__]] 15726: constexpr __byte_op_t<_IntegerType> 15726: operator>>(byte __b, _IntegerType __shift) noexcept 15726: { return (byte)(unsigned char)((unsigned)__b >> __shift); } 15726: 15726: [[__gnu__::__always_inline__]] 15726: constexpr byte 15726: operator|(byte __l, byte __r) noexcept 15726: { return (byte)(unsigned char)((unsigned)__l | (unsigned)__r); } 15726: 15726: [[__gnu__::__always_inline__]] 15726: constexpr byte 15726: operator&(byte __l, byte __r) noexcept 15726: { return (byte)(unsigned char)((unsigned)__l & (unsigned)__r); } 15726: 15726: [[__gnu__::__always_inline__]] 15726: constexpr byte 15726: operator^(byte __l, byte __r) noexcept 15726: { return (byte)(unsigned char)((unsigned)__l ^ (unsigned)__r); } 15726: 15726: [[__gnu__::__always_inline__]] 15726: constexpr byte 15726: operator~(byte __b) noexcept 15726: { return (byte)(unsigned char)~(unsigned)__b; } 15726: 15726: template 15726: [[__gnu__::__always_inline__]] 15726: constexpr __byte_op_t<_IntegerType>& 15726: operator<<=(byte& __b, _IntegerType __shift) noexcept 15726: { return __b = __b << __shift; } 15726: 15726: template 15726: [[__gnu__::__always_inline__]] 15726: constexpr __byte_op_t<_IntegerType>& 15726: operator>>=(byte& __b, _IntegerType __shift) noexcept 15726: { return __b = __b >> __shift; } 15726: 15726: [[__gnu__::__always_inline__]] 15726: constexpr byte& 15726: operator|=(byte& __l, byte __r) noexcept 15726: { return __l = __l | __r; } 15726: 15726: [[__gnu__::__always_inline__]] 15726: constexpr byte& 15726: operator&=(byte& __l, byte __r) noexcept 15726: { return __l = __l & __r; } 15726: 15726: [[__gnu__::__always_inline__]] 15726: constexpr byte& 15726: operator^=(byte& __l, byte __r) noexcept 15726: { return __l = __l ^ __r; } 15726: 15726: template 15726: [[nodiscard,__gnu__::__always_inline__]] 15726: constexpr _IntegerType 15726: to_integer(__byte_op_t<_IntegerType> __b) noexcept 15726: { return _IntegerType(__b); } 15726: 15726: 15726: } 15726: 15726: } 15726: # 39 "/usr/include/c++/13/bits/memory_resource.h" 2 3 15726: 15726: # 1 "/usr/include/c++/13/bits/uses_allocator.h" 1 3 15726: # 40 "/usr/include/c++/13/bits/uses_allocator.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: struct __erased_type { }; 15726: 15726: 15726: 15726: 15726: template 15726: using __is_erased_or_convertible 15726: = __or_, is_same<_Tp, __erased_type>>; 15726: 15726: 15726: struct allocator_arg_t { explicit allocator_arg_t() = default; }; 15726: 15726: inline constexpr allocator_arg_t allocator_arg = 15726: allocator_arg_t(); 15726: 15726: template> 15726: struct __uses_allocator_helper 15726: : false_type { }; 15726: 15726: template 15726: struct __uses_allocator_helper<_Tp, _Alloc, 15726: __void_t> 15726: : __is_erased_or_convertible<_Alloc, typename _Tp::allocator_type>::type 15726: { }; 15726: 15726: 15726: template 15726: struct uses_allocator 15726: : __uses_allocator_helper<_Tp, _Alloc>::type 15726: { }; 15726: 15726: struct __uses_alloc_base { }; 15726: 15726: struct __uses_alloc0 : __uses_alloc_base 15726: { 15726: struct _Sink { void operator=(const void*) { } } _M_a; 15726: }; 15726: 15726: template 15726: struct __uses_alloc1 : __uses_alloc_base { const _Alloc* _M_a; }; 15726: 15726: template 15726: struct __uses_alloc2 : __uses_alloc_base { const _Alloc* _M_a; }; 15726: 15726: template 15726: struct __uses_alloc; 15726: 15726: template 15726: struct __uses_alloc 15726: : __conditional_t< 15726: is_constructible<_Tp, allocator_arg_t, const _Alloc&, _Args...>::value, 15726: __uses_alloc1<_Alloc>, 15726: __uses_alloc2<_Alloc>> 15726: { 15726: 15726: 15726: static_assert(__or_< 15726: is_constructible<_Tp, allocator_arg_t, const _Alloc&, _Args...>, 15726: is_constructible<_Tp, _Args..., const _Alloc&>>::value, 15726: "construction with an allocator must be possible" 15726: " if uses_allocator is true"); 15726: }; 15726: 15726: template 15726: struct __uses_alloc 15726: : __uses_alloc0 { }; 15726: 15726: template 15726: using __uses_alloc_t = 15726: __uses_alloc::value, _Tp, _Alloc, _Args...>; 15726: 15726: template 15726: 15726: inline __uses_alloc_t<_Tp, _Alloc, _Args...> 15726: __use_alloc(const _Alloc& __a) 15726: { 15726: __uses_alloc_t<_Tp, _Alloc, _Args...> __ret; 15726: __ret._M_a = std::__addressof(__a); 15726: return __ret; 15726: } 15726: 15726: template 15726: void 15726: __use_alloc(const _Alloc&&) = delete; 15726: 15726: 15726: template 15726: inline constexpr bool uses_allocator_v = 15726: uses_allocator<_Tp, _Alloc>::value; 15726: 15726: 15726: template class _Predicate, 15726: typename _Tp, typename _Alloc, typename... _Args> 15726: struct __is_uses_allocator_predicate 15726: : __conditional_t::value, 15726: __or_<_Predicate<_Tp, allocator_arg_t, _Alloc, _Args...>, 15726: _Predicate<_Tp, _Args..., _Alloc>>, 15726: _Predicate<_Tp, _Args...>> { }; 15726: 15726: template 15726: struct __is_uses_allocator_constructible 15726: : __is_uses_allocator_predicate 15726: { }; 15726: 15726: 15726: template 15726: inline constexpr bool __is_uses_allocator_constructible_v = 15726: __is_uses_allocator_constructible<_Tp, _Alloc, _Args...>::value; 15726: 15726: 15726: template 15726: struct __is_nothrow_uses_allocator_constructible 15726: : __is_uses_allocator_predicate 15726: { }; 15726: 15726: 15726: 15726: template 15726: inline constexpr bool 15726: __is_nothrow_uses_allocator_constructible_v = 15726: __is_nothrow_uses_allocator_constructible<_Tp, _Alloc, _Args...>::value; 15726: 15726: 15726: template 15726: void __uses_allocator_construct_impl(__uses_alloc0, _Tp* __ptr, 15726: _Args&&... __args) 15726: { ::new ((void*)__ptr) _Tp(std::forward<_Args>(__args)...); } 15726: 15726: template 15726: void __uses_allocator_construct_impl(__uses_alloc1<_Alloc> __a, _Tp* __ptr, 15726: _Args&&... __args) 15726: { 15726: ::new ((void*)__ptr) _Tp(allocator_arg, *__a._M_a, 15726: std::forward<_Args>(__args)...); 15726: } 15726: 15726: template 15726: void __uses_allocator_construct_impl(__uses_alloc2<_Alloc> __a, _Tp* __ptr, 15726: _Args&&... __args) 15726: { ::new ((void*)__ptr) _Tp(std::forward<_Args>(__args)..., *__a._M_a); } 15726: 15726: template 15726: void __uses_allocator_construct(const _Alloc& __a, _Tp* __ptr, 15726: _Args&&... __args) 15726: { 15726: std::__uses_allocator_construct_impl( 15726: std::__use_alloc<_Tp, _Alloc, _Args...>(__a), __ptr, 15726: std::forward<_Args>(__args)...); 15726: } 15726: 15726: 15726: 15726: } 15726: # 41 "/usr/include/c++/13/bits/memory_resource.h" 2 3 15726: # 1 "/usr/include/c++/13/bits/uses_allocator_args.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/uses_allocator_args.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/uses_allocator_args.h" 3 15726: # 42 "/usr/include/c++/13/bits/memory_resource.h" 2 3 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/tuple" 1 3 15726: # 32 "/usr/include/c++/13/tuple" 3 15726: 15726: # 33 "/usr/include/c++/13/tuple" 3 15726: # 48 "/usr/include/c++/13/tuple" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: class tuple; 15726: 15726: template 15726: struct __is_empty_non_tuple : is_empty<_Tp> { }; 15726: 15726: 15726: template 15726: struct __is_empty_non_tuple> : false_type { }; 15726: 15726: 15726: template 15726: using __empty_not_final 15726: = __conditional_t<__is_final(_Tp), false_type, 15726: __is_empty_non_tuple<_Tp>>; 15726: 15726: template::value> 15726: struct _Head_base; 15726: 15726: 15726: template 15726: struct _Head_base<_Idx, _Head, true> 15726: { 15726: constexpr _Head_base() 15726: : _M_head_impl() { } 15726: 15726: constexpr _Head_base(const _Head& __h) 15726: : _M_head_impl(__h) { } 15726: 15726: constexpr _Head_base(const _Head_base&) = default; 15726: constexpr _Head_base(_Head_base&&) = default; 15726: 15726: template 15726: constexpr _Head_base(_UHead&& __h) 15726: : _M_head_impl(std::forward<_UHead>(__h)) { } 15726: 15726: 15726: _Head_base(allocator_arg_t, __uses_alloc0) 15726: : _M_head_impl() { } 15726: 15726: template 15726: 15726: _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a) 15726: : _M_head_impl(allocator_arg, *__a._M_a) { } 15726: 15726: template 15726: 15726: _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a) 15726: : _M_head_impl(*__a._M_a) { } 15726: 15726: template 15726: 15726: _Head_base(__uses_alloc0, _UHead&& __uhead) 15726: : _M_head_impl(std::forward<_UHead>(__uhead)) { } 15726: 15726: template 15726: 15726: _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead) 15726: : _M_head_impl(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead)) 15726: { } 15726: 15726: template 15726: 15726: _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead) 15726: : _M_head_impl(std::forward<_UHead>(__uhead), *__a._M_a) { } 15726: 15726: static constexpr _Head& 15726: _M_head(_Head_base& __b) noexcept { return __b._M_head_impl; } 15726: 15726: static constexpr const _Head& 15726: _M_head(const _Head_base& __b) noexcept { return __b._M_head_impl; } 15726: 15726: [[__no_unique_address__]] _Head _M_head_impl; 15726: }; 15726: # 187 "/usr/include/c++/13/tuple" 3 15726: template 15726: struct _Head_base<_Idx, _Head, false> 15726: { 15726: constexpr _Head_base() 15726: : _M_head_impl() { } 15726: 15726: constexpr _Head_base(const _Head& __h) 15726: : _M_head_impl(__h) { } 15726: 15726: constexpr _Head_base(const _Head_base&) = default; 15726: constexpr _Head_base(_Head_base&&) = default; 15726: 15726: template 15726: constexpr _Head_base(_UHead&& __h) 15726: : _M_head_impl(std::forward<_UHead>(__h)) { } 15726: 15726: 15726: _Head_base(allocator_arg_t, __uses_alloc0) 15726: : _M_head_impl() { } 15726: 15726: template 15726: 15726: _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a) 15726: : _M_head_impl(allocator_arg, *__a._M_a) { } 15726: 15726: template 15726: 15726: _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a) 15726: : _M_head_impl(*__a._M_a) { } 15726: 15726: template 15726: 15726: _Head_base(__uses_alloc0, _UHead&& __uhead) 15726: : _M_head_impl(std::forward<_UHead>(__uhead)) { } 15726: 15726: template 15726: 15726: _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead) 15726: : _M_head_impl(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead)) 15726: { } 15726: 15726: template 15726: 15726: _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead) 15726: : _M_head_impl(std::forward<_UHead>(__uhead), *__a._M_a) { } 15726: 15726: static constexpr _Head& 15726: _M_head(_Head_base& __b) noexcept { return __b._M_head_impl; } 15726: 15726: static constexpr const _Head& 15726: _M_head(const _Head_base& __b) noexcept { return __b._M_head_impl; } 15726: 15726: _Head _M_head_impl; 15726: }; 15726: # 250 "/usr/include/c++/13/tuple" 3 15726: template 15726: struct _Tuple_impl; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Tuple_impl<_Idx, _Head, _Tail...> 15726: : public _Tuple_impl<_Idx + 1, _Tail...>, 15726: private _Head_base<_Idx, _Head> 15726: { 15726: template friend struct _Tuple_impl; 15726: 15726: typedef _Tuple_impl<_Idx + 1, _Tail...> _Inherited; 15726: typedef _Head_base<_Idx, _Head> _Base; 15726: 15726: static constexpr _Head& 15726: _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } 15726: 15726: static constexpr const _Head& 15726: _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } 15726: 15726: static constexpr _Inherited& 15726: _M_tail(_Tuple_impl& __t) noexcept { return __t; } 15726: 15726: static constexpr const _Inherited& 15726: _M_tail(const _Tuple_impl& __t) noexcept { return __t; } 15726: 15726: constexpr _Tuple_impl() 15726: : _Inherited(), _Base() { } 15726: 15726: explicit constexpr 15726: _Tuple_impl(const _Head& __head, const _Tail&... __tail) 15726: : _Inherited(__tail...), _Base(__head) 15726: { } 15726: 15726: template> 15726: explicit constexpr 15726: _Tuple_impl(_UHead&& __head, _UTail&&... __tail) 15726: : _Inherited(std::forward<_UTail>(__tail)...), 15726: _Base(std::forward<_UHead>(__head)) 15726: { } 15726: 15726: constexpr _Tuple_impl(const _Tuple_impl&) = default; 15726: 15726: 15726: 15726: _Tuple_impl& operator=(const _Tuple_impl&) = delete; 15726: 15726: _Tuple_impl(_Tuple_impl&&) = default; 15726: 15726: template 15726: constexpr 15726: _Tuple_impl(const _Tuple_impl<_Idx, _UElements...>& __in) 15726: : _Inherited(_Tuple_impl<_Idx, _UElements...>::_M_tail(__in)), 15726: _Base(_Tuple_impl<_Idx, _UElements...>::_M_head(__in)) 15726: { } 15726: 15726: template 15726: constexpr 15726: _Tuple_impl(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in) 15726: : _Inherited(std::move 15726: (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))), 15726: _Base(std::forward<_UHead> 15726: (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) 15726: { } 15726: # 338 "/usr/include/c++/13/tuple" 3 15726: template 15726: 15726: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a) 15726: : _Inherited(__tag, __a), 15726: _Base(__tag, __use_alloc<_Head>(__a)) 15726: { } 15726: 15726: template 15726: 15726: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, 15726: const _Head& __head, const _Tail&... __tail) 15726: : _Inherited(__tag, __a, __tail...), 15726: _Base(__use_alloc<_Head, _Alloc, _Head>(__a), __head) 15726: { } 15726: 15726: template> 15726: 15726: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, 15726: _UHead&& __head, _UTail&&... __tail) 15726: : _Inherited(__tag, __a, std::forward<_UTail>(__tail)...), 15726: _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), 15726: std::forward<_UHead>(__head)) 15726: { } 15726: 15726: template 15726: 15726: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, 15726: const _Tuple_impl& __in) 15726: : _Inherited(__tag, __a, _M_tail(__in)), 15726: _Base(__use_alloc<_Head, _Alloc, _Head>(__a), _M_head(__in)) 15726: { } 15726: 15726: template 15726: 15726: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, 15726: _Tuple_impl&& __in) 15726: : _Inherited(__tag, __a, std::move(_M_tail(__in))), 15726: _Base(__use_alloc<_Head, _Alloc, _Head>(__a), 15726: std::forward<_Head>(_M_head(__in))) 15726: { } 15726: 15726: template 15726: 15726: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, 15726: const _Tuple_impl<_Idx, _UHead, _UTails...>& __in) 15726: : _Inherited(__tag, __a, 15726: _Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in)), 15726: _Base(__use_alloc<_Head, _Alloc, const _UHead&>(__a), 15726: _Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)) 15726: { } 15726: 15726: template 15726: 15726: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, 15726: _Tuple_impl<_Idx, _UHead, _UTails...>&& __in) 15726: : _Inherited(__tag, __a, std::move 15726: (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))), 15726: _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), 15726: std::forward<_UHead> 15726: (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) 15726: { } 15726: # 424 "/usr/include/c++/13/tuple" 3 15726: template 15726: 15726: void 15726: _M_assign(const _Tuple_impl<_Idx, _UElements...>& __in) 15726: { 15726: _M_head(*this) = _Tuple_impl<_Idx, _UElements...>::_M_head(__in); 15726: _M_tail(*this)._M_assign( 15726: _Tuple_impl<_Idx, _UElements...>::_M_tail(__in)); 15726: } 15726: 15726: template 15726: 15726: void 15726: _M_assign(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in) 15726: { 15726: _M_head(*this) = std::forward<_UHead> 15726: (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)); 15726: _M_tail(*this)._M_assign( 15726: std::move(_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))); 15726: } 15726: # 466 "/usr/include/c++/13/tuple" 3 15726: protected: 15726: 15726: void 15726: _M_swap(_Tuple_impl& __in) 15726: { 15726: using std::swap; 15726: swap(_M_head(*this), _M_head(__in)); 15726: _Inherited::_M_swap(_M_tail(__in)); 15726: } 15726: # 485 "/usr/include/c++/13/tuple" 3 15726: }; 15726: 15726: 15726: template 15726: struct _Tuple_impl<_Idx, _Head> 15726: : private _Head_base<_Idx, _Head> 15726: { 15726: template friend struct _Tuple_impl; 15726: 15726: typedef _Head_base<_Idx, _Head> _Base; 15726: 15726: static constexpr _Head& 15726: _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } 15726: 15726: static constexpr const _Head& 15726: _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } 15726: 15726: constexpr 15726: _Tuple_impl() 15726: : _Base() { } 15726: 15726: explicit constexpr 15726: _Tuple_impl(const _Head& __head) 15726: : _Base(__head) 15726: { } 15726: 15726: template 15726: explicit constexpr 15726: _Tuple_impl(_UHead&& __head) 15726: : _Base(std::forward<_UHead>(__head)) 15726: { } 15726: 15726: constexpr _Tuple_impl(const _Tuple_impl&) = default; 15726: 15726: 15726: 15726: _Tuple_impl& operator=(const _Tuple_impl&) = delete; 15726: 15726: 15726: 15726: 15726: constexpr 15726: _Tuple_impl(_Tuple_impl&& __in) 15726: noexcept(is_nothrow_move_constructible<_Head>::value) 15726: : _Base(static_cast<_Base&&>(__in)) 15726: { } 15726: 15726: 15726: template 15726: constexpr 15726: _Tuple_impl(const _Tuple_impl<_Idx, _UHead>& __in) 15726: : _Base(_Tuple_impl<_Idx, _UHead>::_M_head(__in)) 15726: { } 15726: 15726: template 15726: constexpr 15726: _Tuple_impl(_Tuple_impl<_Idx, _UHead>&& __in) 15726: : _Base(std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in))) 15726: { } 15726: # 559 "/usr/include/c++/13/tuple" 3 15726: template 15726: 15726: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a) 15726: : _Base(__tag, __use_alloc<_Head>(__a)) 15726: { } 15726: 15726: template 15726: 15726: _Tuple_impl(allocator_arg_t, const _Alloc& __a, 15726: const _Head& __head) 15726: : _Base(__use_alloc<_Head, _Alloc, const _Head&>(__a), __head) 15726: { } 15726: 15726: template 15726: 15726: _Tuple_impl(allocator_arg_t, const _Alloc& __a, 15726: _UHead&& __head) 15726: : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), 15726: std::forward<_UHead>(__head)) 15726: { } 15726: 15726: template 15726: 15726: _Tuple_impl(allocator_arg_t, const _Alloc& __a, 15726: const _Tuple_impl& __in) 15726: : _Base(__use_alloc<_Head, _Alloc, const _Head&>(__a), _M_head(__in)) 15726: { } 15726: 15726: template 15726: 15726: _Tuple_impl(allocator_arg_t, const _Alloc& __a, 15726: _Tuple_impl&& __in) 15726: : _Base(__use_alloc<_Head, _Alloc, _Head>(__a), 15726: std::forward<_Head>(_M_head(__in))) 15726: { } 15726: 15726: template 15726: 15726: _Tuple_impl(allocator_arg_t, const _Alloc& __a, 15726: const _Tuple_impl<_Idx, _UHead>& __in) 15726: : _Base(__use_alloc<_Head, _Alloc, const _UHead&>(__a), 15726: _Tuple_impl<_Idx, _UHead>::_M_head(__in)) 15726: { } 15726: 15726: template 15726: 15726: _Tuple_impl(allocator_arg_t, const _Alloc& __a, 15726: _Tuple_impl<_Idx, _UHead>&& __in) 15726: : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), 15726: std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in))) 15726: { } 15726: # 629 "/usr/include/c++/13/tuple" 3 15726: template 15726: 15726: void 15726: _M_assign(const _Tuple_impl<_Idx, _UHead>& __in) 15726: { 15726: _M_head(*this) = _Tuple_impl<_Idx, _UHead>::_M_head(__in); 15726: } 15726: 15726: template 15726: 15726: void 15726: _M_assign(_Tuple_impl<_Idx, _UHead>&& __in) 15726: { 15726: _M_head(*this) 15726: = std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in)); 15726: } 15726: # 663 "/usr/include/c++/13/tuple" 3 15726: protected: 15726: 15726: void 15726: _M_swap(_Tuple_impl& __in) 15726: { 15726: using std::swap; 15726: swap(_M_head(*this), _M_head(__in)); 15726: } 15726: # 680 "/usr/include/c++/13/tuple" 3 15726: }; 15726: 15726: 15726: 15726: template 15726: struct _TupleConstraints 15726: { 15726: template 15726: using __constructible = __and_...>; 15726: 15726: template 15726: using __convertible = __and_...>; 15726: 15726: 15726: 15726: 15726: template 15726: static constexpr bool __is_implicitly_constructible() 15726: { 15726: return __and_<__constructible<_UTypes...>, 15726: __convertible<_UTypes...> 15726: >::value; 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: static constexpr bool __is_explicitly_constructible() 15726: { 15726: return __and_<__constructible<_UTypes...>, 15726: __not_<__convertible<_UTypes...>> 15726: >::value; 15726: } 15726: 15726: static constexpr bool __is_implicitly_default_constructible() 15726: { 15726: return __and_... 15726: >::value; 15726: } 15726: 15726: static constexpr bool __is_explicitly_default_constructible() 15726: { 15726: return __and_..., 15726: __not_<__and_< 15726: std::__is_implicitly_default_constructible<_Types>...> 15726: >>::value; 15726: } 15726: }; 15726: 15726: 15726: 15726: template 15726: struct _TupleConstraints 15726: { 15726: template 15726: static constexpr bool __is_implicitly_constructible() 15726: { return false; } 15726: 15726: template 15726: static constexpr bool __is_explicitly_constructible() 15726: { return false; } 15726: }; 15726: 15726: 15726: template 15726: class tuple : public _Tuple_impl<0, _Elements...> 15726: { 15726: typedef _Tuple_impl<0, _Elements...> _Inherited; 15726: 15726: template 15726: using _TCC = _TupleConstraints<_Cond, _Elements...>; 15726: 15726: 15726: template 15726: using _ImplicitDefaultCtor = __enable_if_t< 15726: _TCC<_Dummy>::__is_implicitly_default_constructible(), 15726: bool>; 15726: 15726: 15726: template 15726: using _ExplicitDefaultCtor = __enable_if_t< 15726: _TCC<_Dummy>::__is_explicitly_default_constructible(), 15726: bool>; 15726: 15726: 15726: template 15726: using _ImplicitCtor = __enable_if_t< 15726: _TCC<_Cond>::template __is_implicitly_constructible<_Args...>(), 15726: bool>; 15726: 15726: 15726: template 15726: using _ExplicitCtor = __enable_if_t< 15726: _TCC<_Cond>::template __is_explicitly_constructible<_Args...>(), 15726: bool>; 15726: 15726: template 15726: static constexpr 15726: __enable_if_t 15726: __assignable() 15726: { return __and_...>::value; } 15726: 15726: 15726: template 15726: static constexpr bool __nothrow_assignable() 15726: { 15726: return 15726: __and_...>::value; 15726: } 15726: 15726: 15726: template 15726: static constexpr bool __nothrow_constructible() 15726: { 15726: return 15726: __and_...>::value; 15726: } 15726: 15726: 15726: template 15726: static constexpr bool __valid_args() 15726: { 15726: return sizeof...(_Elements) == 1 15726: && !is_same>::value; 15726: } 15726: 15726: 15726: template 15726: static constexpr bool __valid_args() 15726: { return (sizeof...(_Tail) + 2) == sizeof...(_Elements); } 15726: # 821 "/usr/include/c++/13/tuple" 3 15726: template> 15726: struct _UseOtherCtor 15726: : false_type 15726: { }; 15726: 15726: 15726: template 15726: struct _UseOtherCtor<_Tuple, tuple<_Tp>, tuple<_Up>> 15726: : __or_, is_constructible<_Tp, _Tuple>>::type 15726: { }; 15726: 15726: 15726: template 15726: struct _UseOtherCtor<_Tuple, tuple<_Tp>, tuple<_Tp>> 15726: : true_type 15726: { }; 15726: 15726: 15726: 15726: 15726: template 15726: static constexpr bool __use_other_ctor() 15726: { return _UseOtherCtor<_Tuple>::value; } 15726: # 856 "/usr/include/c++/13/tuple" 3 15726: public: 15726: template::value> = true> 15726: constexpr 15726: tuple() 15726: noexcept(__and_...>::value) 15726: : _Inherited() { } 15726: 15726: template::value> = false> 15726: explicit constexpr 15726: tuple() 15726: noexcept(__and_...>::value) 15726: : _Inherited() { } 15726: 15726: template= 1), 15726: _ImplicitCtor<_NotEmpty, const _Elements&...> = true> 15726: constexpr 15726: tuple(const _Elements&... __elements) 15726: noexcept(__nothrow_constructible()) 15726: : _Inherited(__elements...) { } 15726: 15726: template= 1), 15726: _ExplicitCtor<_NotEmpty, const _Elements&...> = false> 15726: explicit constexpr 15726: tuple(const _Elements&... __elements) 15726: noexcept(__nothrow_constructible()) 15726: : _Inherited(__elements...) { } 15726: 15726: template(), 15726: _ImplicitCtor<_Valid, _UElements...> = true> 15726: constexpr 15726: tuple(_UElements&&... __elements) 15726: noexcept(__nothrow_constructible<_UElements...>()) 15726: : _Inherited(std::forward<_UElements>(__elements)...) { } 15726: 15726: template(), 15726: _ExplicitCtor<_Valid, _UElements...> = false> 15726: explicit constexpr 15726: tuple(_UElements&&... __elements) 15726: noexcept(__nothrow_constructible<_UElements...>()) 15726: : _Inherited(std::forward<_UElements>(__elements)...) { } 15726: 15726: constexpr tuple(const tuple&) = default; 15726: 15726: constexpr tuple(tuple&&) = default; 15726: 15726: template&>(), 15726: _ImplicitCtor<_Valid, const _UElements&...> = true> 15726: constexpr 15726: tuple(const tuple<_UElements...>& __in) 15726: noexcept(__nothrow_constructible()) 15726: : _Inherited(static_cast&>(__in)) 15726: { } 15726: 15726: template&>(), 15726: _ExplicitCtor<_Valid, const _UElements&...> = false> 15726: explicit constexpr 15726: tuple(const tuple<_UElements...>& __in) 15726: noexcept(__nothrow_constructible()) 15726: : _Inherited(static_cast&>(__in)) 15726: { } 15726: 15726: template&&>(), 15726: _ImplicitCtor<_Valid, _UElements...> = true> 15726: constexpr 15726: tuple(tuple<_UElements...>&& __in) 15726: noexcept(__nothrow_constructible<_UElements...>()) 15726: : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { } 15726: 15726: template&&>(), 15726: _ExplicitCtor<_Valid, _UElements...> = false> 15726: explicit constexpr 15726: tuple(tuple<_UElements...>&& __in) 15726: noexcept(__nothrow_constructible<_UElements...>()) 15726: : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { } 15726: # 968 "/usr/include/c++/13/tuple" 3 15726: template::value> = true> 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a) 15726: : _Inherited(__tag, __a) { } 15726: 15726: template::value> = false> 15726: 15726: explicit 15726: tuple(allocator_arg_t __tag, const _Alloc& __a) 15726: : _Inherited(__tag, __a) { } 15726: 15726: template= 1), 15726: _ImplicitCtor<_NotEmpty, const _Elements&...> = true> 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, 15726: const _Elements&... __elements) 15726: : _Inherited(__tag, __a, __elements...) { } 15726: 15726: template= 1), 15726: _ExplicitCtor<_NotEmpty, const _Elements&...> = false> 15726: 15726: explicit 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, 15726: const _Elements&... __elements) 15726: : _Inherited(__tag, __a, __elements...) { } 15726: 15726: template(), 15726: _ImplicitCtor<_Valid, _UElements...> = true> 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, 15726: _UElements&&... __elements) 15726: : _Inherited(__tag, __a, std::forward<_UElements>(__elements)...) 15726: { } 15726: 15726: template(), 15726: _ExplicitCtor<_Valid, _UElements...> = false> 15726: 15726: explicit 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, 15726: _UElements&&... __elements) 15726: : _Inherited(__tag, __a, std::forward<_UElements>(__elements)...) 15726: { } 15726: 15726: template 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in) 15726: : _Inherited(__tag, __a, static_cast(__in)) { } 15726: 15726: template 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in) 15726: : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { } 15726: 15726: template&>(), 15726: _ImplicitCtor<_Valid, const _UElements&...> = true> 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, 15726: const tuple<_UElements...>& __in) 15726: : _Inherited(__tag, __a, 15726: static_cast&>(__in)) 15726: { } 15726: 15726: template&>(), 15726: _ExplicitCtor<_Valid, const _UElements&...> = false> 15726: 15726: explicit 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, 15726: const tuple<_UElements...>& __in) 15726: : _Inherited(__tag, __a, 15726: static_cast&>(__in)) 15726: { } 15726: 15726: template&&>(), 15726: _ImplicitCtor<_Valid, _UElements...> = true> 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, 15726: tuple<_UElements...>&& __in) 15726: : _Inherited(__tag, __a, 15726: static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) 15726: { } 15726: 15726: template&&>(), 15726: _ExplicitCtor<_Valid, _UElements...> = false> 15726: 15726: explicit 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, 15726: tuple<_UElements...>&& __in) 15726: : _Inherited(__tag, __a, 15726: static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) 15726: { } 15726: # 1099 "/usr/include/c++/13/tuple" 3 15726: 15726: tuple& 15726: operator=(__conditional_t<__assignable(), 15726: const tuple&, 15726: const __nonesuch&> __in) 15726: noexcept(__nothrow_assignable()) 15726: { 15726: this->_M_assign(__in); 15726: return *this; 15726: } 15726: 15726: 15726: tuple& 15726: operator=(__conditional_t<__assignable<_Elements...>(), 15726: tuple&&, 15726: __nonesuch&&> __in) 15726: noexcept(__nothrow_assignable<_Elements...>()) 15726: { 15726: this->_M_assign(std::move(__in)); 15726: return *this; 15726: } 15726: 15726: template 15726: 15726: __enable_if_t<__assignable(), tuple&> 15726: operator=(const tuple<_UElements...>& __in) 15726: noexcept(__nothrow_assignable()) 15726: { 15726: this->_M_assign(__in); 15726: return *this; 15726: } 15726: 15726: template 15726: 15726: __enable_if_t<__assignable<_UElements...>(), tuple&> 15726: operator=(tuple<_UElements...>&& __in) 15726: noexcept(__nothrow_assignable<_UElements...>()) 15726: { 15726: this->_M_assign(std::move(__in)); 15726: return *this; 15726: } 15726: # 1180 "/usr/include/c++/13/tuple" 3 15726: 15726: void 15726: swap(tuple& __in) 15726: noexcept(__and_<__is_nothrow_swappable<_Elements>...>::value) 15726: { _Inherited::_M_swap(__in); } 15726: # 1199 "/usr/include/c++/13/tuple" 3 15726: }; 15726: 15726: 15726: template 15726: tuple(_UTypes...) -> tuple<_UTypes...>; 15726: template 15726: tuple(pair<_T1, _T2>) -> tuple<_T1, _T2>; 15726: template 15726: tuple(allocator_arg_t, _Alloc, _UTypes...) -> tuple<_UTypes...>; 15726: template 15726: tuple(allocator_arg_t, _Alloc, pair<_T1, _T2>) -> tuple<_T1, _T2>; 15726: template 15726: tuple(allocator_arg_t, _Alloc, tuple<_UTypes...>) -> tuple<_UTypes...>; 15726: 15726: 15726: 15726: template<> 15726: class tuple<> 15726: { 15726: public: 15726: 15726: void swap(tuple&) noexcept { } 15726: 15726: 15726: 15726: 15726: 15726: tuple() = default; 15726: 15726: template 15726: 15726: tuple(allocator_arg_t, const _Alloc&) noexcept { } 15726: template 15726: 15726: tuple(allocator_arg_t, const _Alloc&, const tuple&) noexcept { } 15726: }; 15726: 15726: 15726: 15726: template 15726: class tuple<_T1, _T2> : public _Tuple_impl<0, _T1, _T2> 15726: { 15726: typedef _Tuple_impl<0, _T1, _T2> _Inherited; 15726: 15726: 15726: template 15726: using _ImplicitDefaultCtor = __enable_if_t< 15726: _TupleConstraints<_Dummy, _U1, _U2>:: 15726: __is_implicitly_default_constructible(), 15726: bool>; 15726: 15726: 15726: template 15726: using _ExplicitDefaultCtor = __enable_if_t< 15726: _TupleConstraints<_Dummy, _U1, _U2>:: 15726: __is_explicitly_default_constructible(), 15726: bool>; 15726: 15726: template 15726: using _TCC = _TupleConstraints<_Dummy, _T1, _T2>; 15726: 15726: 15726: template 15726: using _ImplicitCtor = __enable_if_t< 15726: _TCC<_Cond>::template __is_implicitly_constructible<_U1, _U2>(), 15726: bool>; 15726: 15726: 15726: template 15726: using _ExplicitCtor = __enable_if_t< 15726: _TCC<_Cond>::template __is_explicitly_constructible<_U1, _U2>(), 15726: bool>; 15726: 15726: template 15726: static constexpr bool __assignable() 15726: { 15726: return __and_, 15726: is_assignable<_T2&, _U2>>::value; 15726: } 15726: 15726: template 15726: static constexpr bool __nothrow_assignable() 15726: { 15726: return __and_, 15726: is_nothrow_assignable<_T2&, _U2>>::value; 15726: } 15726: 15726: template 15726: static constexpr bool __nothrow_constructible() 15726: { 15726: return __and_, 15726: is_nothrow_constructible<_T2, _U2>>::value; 15726: } 15726: 15726: static constexpr bool __nothrow_default_constructible() 15726: { 15726: return __and_, 15726: is_nothrow_default_constructible<_T2>>::value; 15726: } 15726: 15726: template 15726: static constexpr bool __is_alloc_arg() 15726: { return is_same<__remove_cvref_t<_U1>, allocator_arg_t>::value; } 15726: # 1313 "/usr/include/c++/13/tuple" 3 15726: public: 15726: template = true> 15726: constexpr 15726: tuple() 15726: noexcept(__nothrow_default_constructible()) 15726: : _Inherited() { } 15726: 15726: template = false> 15726: explicit constexpr 15726: tuple() 15726: noexcept(__nothrow_default_constructible()) 15726: : _Inherited() { } 15726: 15726: template = true> 15726: constexpr 15726: tuple(const _T1& __a1, const _T2& __a2) 15726: noexcept(__nothrow_constructible()) 15726: : _Inherited(__a1, __a2) { } 15726: 15726: template = false> 15726: explicit constexpr 15726: tuple(const _T1& __a1, const _T2& __a2) 15726: noexcept(__nothrow_constructible()) 15726: : _Inherited(__a1, __a2) { } 15726: 15726: template(), _U1, _U2> = true> 15726: constexpr 15726: tuple(_U1&& __a1, _U2&& __a2) 15726: noexcept(__nothrow_constructible<_U1, _U2>()) 15726: : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { } 15726: 15726: template(), _U1, _U2> = false> 15726: explicit constexpr 15726: tuple(_U1&& __a1, _U2&& __a2) 15726: noexcept(__nothrow_constructible<_U1, _U2>()) 15726: : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { } 15726: 15726: constexpr tuple(const tuple&) = default; 15726: 15726: constexpr tuple(tuple&&) = default; 15726: 15726: template = true> 15726: constexpr 15726: tuple(const tuple<_U1, _U2>& __in) 15726: noexcept(__nothrow_constructible()) 15726: : _Inherited(static_cast&>(__in)) { } 15726: 15726: template = false> 15726: explicit constexpr 15726: tuple(const tuple<_U1, _U2>& __in) 15726: noexcept(__nothrow_constructible()) 15726: : _Inherited(static_cast&>(__in)) { } 15726: 15726: template = true> 15726: constexpr 15726: tuple(tuple<_U1, _U2>&& __in) 15726: noexcept(__nothrow_constructible<_U1, _U2>()) 15726: : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { } 15726: 15726: template = false> 15726: explicit constexpr 15726: tuple(tuple<_U1, _U2>&& __in) 15726: noexcept(__nothrow_constructible<_U1, _U2>()) 15726: : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { } 15726: # 1406 "/usr/include/c++/13/tuple" 3 15726: template = true> 15726: constexpr 15726: tuple(const pair<_U1, _U2>& __in) 15726: noexcept(__nothrow_constructible()) 15726: : _Inherited(__in.first, __in.second) { } 15726: 15726: template = false> 15726: explicit constexpr 15726: tuple(const pair<_U1, _U2>& __in) 15726: noexcept(__nothrow_constructible()) 15726: : _Inherited(__in.first, __in.second) { } 15726: 15726: template = true> 15726: constexpr 15726: tuple(pair<_U1, _U2>&& __in) 15726: noexcept(__nothrow_constructible<_U1, _U2>()) 15726: : _Inherited(std::forward<_U1>(__in.first), 15726: std::forward<_U2>(__in.second)) { } 15726: 15726: template = false> 15726: explicit constexpr 15726: tuple(pair<_U1, _U2>&& __in) 15726: noexcept(__nothrow_constructible<_U1, _U2>()) 15726: : _Inherited(std::forward<_U1>(__in.first), 15726: std::forward<_U2>(__in.second)) { } 15726: # 1457 "/usr/include/c++/13/tuple" 3 15726: template::value, _T1, _T2> = true> 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a) 15726: : _Inherited(__tag, __a) { } 15726: 15726: template::value, _T1, _T2> = false> 15726: 15726: explicit 15726: tuple(allocator_arg_t __tag, const _Alloc& __a) 15726: : _Inherited(__tag, __a) { } 15726: 15726: template = true> 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, 15726: const _T1& __a1, const _T2& __a2) 15726: : _Inherited(__tag, __a, __a1, __a2) { } 15726: 15726: template = false> 15726: explicit 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, 15726: const _T1& __a1, const _T2& __a2) 15726: : _Inherited(__tag, __a, __a1, __a2) { } 15726: 15726: template = true> 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, _U1&& __a1, _U2&& __a2) 15726: : _Inherited(__tag, __a, std::forward<_U1>(__a1), 15726: std::forward<_U2>(__a2)) { } 15726: 15726: template = false> 15726: explicit 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, 15726: _U1&& __a1, _U2&& __a2) 15726: : _Inherited(__tag, __a, std::forward<_U1>(__a1), 15726: std::forward<_U2>(__a2)) { } 15726: 15726: template 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in) 15726: : _Inherited(__tag, __a, static_cast(__in)) { } 15726: 15726: template 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in) 15726: : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { } 15726: 15726: template = true> 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, 15726: const tuple<_U1, _U2>& __in) 15726: : _Inherited(__tag, __a, 15726: static_cast&>(__in)) 15726: { } 15726: 15726: template = false> 15726: explicit 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, 15726: const tuple<_U1, _U2>& __in) 15726: : _Inherited(__tag, __a, 15726: static_cast&>(__in)) 15726: { } 15726: 15726: template = true> 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_U1, _U2>&& __in) 15726: : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) 15726: { } 15726: 15726: template = false> 15726: explicit 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_U1, _U2>&& __in) 15726: : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) 15726: { } 15726: # 1567 "/usr/include/c++/13/tuple" 3 15726: template = true> 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, 15726: const pair<_U1, _U2>& __in) 15726: : _Inherited(__tag, __a, __in.first, __in.second) { } 15726: 15726: template = false> 15726: explicit 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, 15726: const pair<_U1, _U2>& __in) 15726: : _Inherited(__tag, __a, __in.first, __in.second) { } 15726: 15726: template = true> 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>&& __in) 15726: : _Inherited(__tag, __a, std::forward<_U1>(__in.first), 15726: std::forward<_U2>(__in.second)) { } 15726: 15726: template = false> 15726: explicit 15726: 15726: tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>&& __in) 15726: : _Inherited(__tag, __a, std::forward<_U1>(__in.first), 15726: std::forward<_U2>(__in.second)) { } 15726: # 1617 "/usr/include/c++/13/tuple" 3 15726: 15726: tuple& 15726: operator=(__conditional_t<__assignable(), 15726: const tuple&, 15726: const __nonesuch&> __in) 15726: noexcept(__nothrow_assignable()) 15726: { 15726: this->_M_assign(__in); 15726: return *this; 15726: } 15726: 15726: 15726: tuple& 15726: operator=(__conditional_t<__assignable<_T1, _T2>(), 15726: tuple&&, 15726: __nonesuch&&> __in) 15726: noexcept(__nothrow_assignable<_T1, _T2>()) 15726: { 15726: this->_M_assign(std::move(__in)); 15726: return *this; 15726: } 15726: 15726: template 15726: 15726: __enable_if_t<__assignable(), tuple&> 15726: operator=(const tuple<_U1, _U2>& __in) 15726: noexcept(__nothrow_assignable()) 15726: { 15726: this->_M_assign(__in); 15726: return *this; 15726: } 15726: 15726: template 15726: 15726: __enable_if_t<__assignable<_U1, _U2>(), tuple&> 15726: operator=(tuple<_U1, _U2>&& __in) 15726: noexcept(__nothrow_assignable<_U1, _U2>()) 15726: { 15726: this->_M_assign(std::move(__in)); 15726: return *this; 15726: } 15726: # 1697 "/usr/include/c++/13/tuple" 3 15726: template 15726: 15726: __enable_if_t<__assignable(), tuple&> 15726: operator=(const pair<_U1, _U2>& __in) 15726: noexcept(__nothrow_assignable()) 15726: { 15726: this->_M_head(*this) = __in.first; 15726: this->_M_tail(*this)._M_head(*this) = __in.second; 15726: return *this; 15726: } 15726: 15726: template 15726: 15726: __enable_if_t<__assignable<_U1, _U2>(), tuple&> 15726: operator=(pair<_U1, _U2>&& __in) 15726: noexcept(__nothrow_assignable<_U1, _U2>()) 15726: { 15726: this->_M_head(*this) = std::forward<_U1>(__in.first); 15726: this->_M_tail(*this)._M_head(*this) = std::forward<_U2>(__in.second); 15726: return *this; 15726: } 15726: # 1743 "/usr/include/c++/13/tuple" 3 15726: 15726: void 15726: swap(tuple& __in) 15726: noexcept(__and_<__is_nothrow_swappable<_T1>, 15726: __is_nothrow_swappable<_T2>>::value) 15726: { _Inherited::_M_swap(__in); } 15726: # 1758 "/usr/include/c++/13/tuple" 3 15726: }; 15726: 15726: 15726: 15726: template 15726: struct tuple_size> 15726: : public integral_constant { }; 15726: 15726: 15726: template 15726: inline constexpr size_t tuple_size_v> 15726: = sizeof...(_Types); 15726: 15726: template 15726: inline constexpr size_t tuple_size_v> 15726: = sizeof...(_Types); 15726: 15726: 15726: 15726: template 15726: struct tuple_element<__i, tuple<_Types...>> 15726: { 15726: static_assert(__i < sizeof...(_Types), "tuple index must be in range"); 15726: 15726: using type = typename _Nth_type<__i, _Types...>::type; 15726: }; 15726: 15726: template 15726: constexpr _Head& 15726: __get_helper(_Tuple_impl<__i, _Head, _Tail...>& __t) noexcept 15726: { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); } 15726: 15726: template 15726: constexpr const _Head& 15726: __get_helper(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept 15726: { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); } 15726: 15726: 15726: template 15726: __enable_if_t<(__i >= sizeof...(_Types))> 15726: __get_helper(const tuple<_Types...>&) = delete; 15726: 15726: 15726: template 15726: constexpr __tuple_element_t<__i, tuple<_Elements...>>& 15726: get(tuple<_Elements...>& __t) noexcept 15726: { return std::__get_helper<__i>(__t); } 15726: 15726: 15726: template 15726: constexpr const __tuple_element_t<__i, tuple<_Elements...>>& 15726: get(const tuple<_Elements...>& __t) noexcept 15726: { return std::__get_helper<__i>(__t); } 15726: 15726: 15726: template 15726: constexpr __tuple_element_t<__i, tuple<_Elements...>>&& 15726: get(tuple<_Elements...>&& __t) noexcept 15726: { 15726: typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type; 15726: return std::forward<__element_type>(std::__get_helper<__i>(__t)); 15726: } 15726: 15726: 15726: template 15726: constexpr const __tuple_element_t<__i, tuple<_Elements...>>&& 15726: get(const tuple<_Elements...>&& __t) noexcept 15726: { 15726: typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type; 15726: return std::forward(std::__get_helper<__i>(__t)); 15726: } 15726: 15726: 15726: 15726: template 15726: constexpr __enable_if_t<(__i >= sizeof...(_Elements))> 15726: get(const tuple<_Elements...>&) = delete; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: constexpr _Tp& 15726: get(tuple<_Types...>& __t) noexcept 15726: { 15726: constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>(); 15726: static_assert(__idx < sizeof...(_Types), 15726: "the type T in std::get must occur exactly once in the tuple"); 15726: return std::__get_helper<__idx>(__t); 15726: } 15726: 15726: 15726: template 15726: constexpr _Tp&& 15726: get(tuple<_Types...>&& __t) noexcept 15726: { 15726: constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>(); 15726: static_assert(__idx < sizeof...(_Types), 15726: "the type T in std::get must occur exactly once in the tuple"); 15726: return std::forward<_Tp>(std::__get_helper<__idx>(__t)); 15726: } 15726: 15726: 15726: template 15726: constexpr const _Tp& 15726: get(const tuple<_Types...>& __t) noexcept 15726: { 15726: constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>(); 15726: static_assert(__idx < sizeof...(_Types), 15726: "the type T in std::get must occur exactly once in the tuple"); 15726: return std::__get_helper<__idx>(__t); 15726: } 15726: 15726: 15726: 15726: template 15726: constexpr const _Tp&& 15726: get(const tuple<_Types...>&& __t) noexcept 15726: { 15726: constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>(); 15726: static_assert(__idx < sizeof...(_Types), 15726: "the type T in std::get must occur exactly once in the tuple"); 15726: return std::forward(std::__get_helper<__idx>(__t)); 15726: } 15726: 15726: 15726: 15726: template 15726: struct __tuple_compare 15726: { 15726: static constexpr bool 15726: __eq(const _Tp& __t, const _Up& __u) 15726: { 15726: return bool(std::get<__i>(__t) == std::get<__i>(__u)) 15726: && __tuple_compare<_Tp, _Up, __i + 1, __size>::__eq(__t, __u); 15726: } 15726: 15726: static constexpr bool 15726: __less(const _Tp& __t, const _Up& __u) 15726: { 15726: return bool(std::get<__i>(__t) < std::get<__i>(__u)) 15726: || (!bool(std::get<__i>(__u) < std::get<__i>(__t)) 15726: && __tuple_compare<_Tp, _Up, __i + 1, __size>::__less(__t, __u)); 15726: } 15726: }; 15726: 15726: template 15726: struct __tuple_compare<_Tp, _Up, __size, __size> 15726: { 15726: static constexpr bool 15726: __eq(const _Tp&, const _Up&) { return true; } 15726: 15726: static constexpr bool 15726: __less(const _Tp&, const _Up&) { return false; } 15726: }; 15726: 15726: template 15726: constexpr bool 15726: operator==(const tuple<_TElements...>& __t, 15726: const tuple<_UElements...>& __u) 15726: { 15726: static_assert(sizeof...(_TElements) == sizeof...(_UElements), 15726: "tuple objects can only be compared if they have equal sizes."); 15726: using __compare = __tuple_compare, 15726: tuple<_UElements...>, 15726: 0, sizeof...(_TElements)>; 15726: return __compare::__eq(__t, __u); 15726: } 15726: # 1959 "/usr/include/c++/13/tuple" 3 15726: template 15726: constexpr bool 15726: operator<(const tuple<_TElements...>& __t, 15726: const tuple<_UElements...>& __u) 15726: { 15726: static_assert(sizeof...(_TElements) == sizeof...(_UElements), 15726: "tuple objects can only be compared if they have equal sizes."); 15726: using __compare = __tuple_compare, 15726: tuple<_UElements...>, 15726: 0, sizeof...(_TElements)>; 15726: return __compare::__less(__t, __u); 15726: } 15726: 15726: template 15726: constexpr bool 15726: operator!=(const tuple<_TElements...>& __t, 15726: const tuple<_UElements...>& __u) 15726: { return !(__t == __u); } 15726: 15726: template 15726: constexpr bool 15726: operator>(const tuple<_TElements...>& __t, 15726: const tuple<_UElements...>& __u) 15726: { return __u < __t; } 15726: 15726: template 15726: constexpr bool 15726: operator<=(const tuple<_TElements...>& __t, 15726: const tuple<_UElements...>& __u) 15726: { return !(__u < __t); } 15726: 15726: template 15726: constexpr bool 15726: operator>=(const tuple<_TElements...>& __t, 15726: const tuple<_UElements...>& __u) 15726: { return !(__t < __u); } 15726: 15726: 15726: 15726: 15726: template 15726: constexpr tuple::__type...> 15726: make_tuple(_Elements&&... __args) 15726: { 15726: typedef tuple::__type...> 15726: __result_type; 15726: return __result_type(std::forward<_Elements>(__args)...); 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: constexpr tuple<_Elements&&...> 15726: forward_as_tuple(_Elements&&... __args) noexcept 15726: { return tuple<_Elements&&...>(std::forward<_Elements>(__args)...); } 15726: 15726: 15726: 15726: 15726: template struct array; 15726: 15726: template 15726: constexpr _Tp& 15726: get(array<_Tp, _Nm>&) noexcept; 15726: 15726: template 15726: constexpr _Tp&& 15726: get(array<_Tp, _Nm>&&) noexcept; 15726: 15726: template 15726: constexpr const _Tp& 15726: get(const array<_Tp, _Nm>&) noexcept; 15726: 15726: template 15726: constexpr const _Tp&& 15726: get(const array<_Tp, _Nm>&&) noexcept; 15726: 15726: 15726: template 15726: struct __make_tuple_impl; 15726: 15726: template 15726: struct __make_tuple_impl<_Idx, tuple<_Tp...>, _Tuple, _Nm> 15726: : __make_tuple_impl<_Idx + 1, 15726: tuple<_Tp..., __tuple_element_t<_Idx, _Tuple>>, 15726: _Tuple, _Nm> 15726: { }; 15726: 15726: template 15726: struct __make_tuple_impl<_Nm, tuple<_Tp...>, _Tuple, _Nm> 15726: { 15726: typedef tuple<_Tp...> __type; 15726: }; 15726: 15726: template 15726: struct __do_make_tuple 15726: : __make_tuple_impl<0, tuple<>, _Tuple, tuple_size<_Tuple>::value> 15726: { }; 15726: 15726: 15726: template 15726: struct __make_tuple 15726: : public __do_make_tuple<__remove_cvref_t<_Tuple>> 15726: { }; 15726: 15726: 15726: template 15726: struct __combine_tuples; 15726: 15726: template<> 15726: struct __combine_tuples<> 15726: { 15726: typedef tuple<> __type; 15726: }; 15726: 15726: template 15726: struct __combine_tuples> 15726: { 15726: typedef tuple<_Ts...> __type; 15726: }; 15726: 15726: template 15726: struct __combine_tuples, tuple<_T2s...>, _Rem...> 15726: { 15726: typedef typename __combine_tuples, 15726: _Rem...>::__type __type; 15726: }; 15726: 15726: 15726: template 15726: struct __tuple_cat_result 15726: { 15726: typedef typename __combine_tuples 15726: ::__type...>::__type __type; 15726: }; 15726: 15726: 15726: 15726: template 15726: struct __make_1st_indices; 15726: 15726: template<> 15726: struct __make_1st_indices<> 15726: { 15726: typedef _Index_tuple<> __type; 15726: }; 15726: 15726: template 15726: struct __make_1st_indices<_Tp, _Tpls...> 15726: { 15726: typedef typename _Build_index_tuple::type>::value>::__type __type; 15726: }; 15726: 15726: 15726: 15726: 15726: template 15726: struct __tuple_concater; 15726: 15726: template 15726: struct __tuple_concater<_Ret, _Index_tuple<_Is...>, _Tp, _Tpls...> 15726: { 15726: template 15726: static constexpr _Ret 15726: _S_do(_Tp&& __tp, _Tpls&&... __tps, _Us&&... __us) 15726: { 15726: typedef typename __make_1st_indices<_Tpls...>::__type __idx; 15726: typedef __tuple_concater<_Ret, __idx, _Tpls...> __next; 15726: return __next::_S_do(std::forward<_Tpls>(__tps)..., 15726: std::forward<_Us>(__us)..., 15726: std::get<_Is>(std::forward<_Tp>(__tp))...); 15726: } 15726: }; 15726: 15726: template 15726: struct __tuple_concater<_Ret, _Index_tuple<>> 15726: { 15726: template 15726: static constexpr _Ret 15726: _S_do(_Us&&... __us) 15726: { 15726: return _Ret(std::forward<_Us>(__us)...); 15726: } 15726: }; 15726: 15726: template 15726: struct __is_tuple_like_impl> : true_type 15726: { }; 15726: 15726: 15726: 15726: template...>::value>::type> 15726: constexpr auto 15726: tuple_cat(_Tpls&&... __tpls) 15726: -> typename __tuple_cat_result<_Tpls...>::__type 15726: { 15726: typedef typename __tuple_cat_result<_Tpls...>::__type __ret; 15726: typedef typename __make_1st_indices<_Tpls...>::__type __idx; 15726: typedef __tuple_concater<__ret, __idx, _Tpls...> __concater; 15726: return __concater::_S_do(std::forward<_Tpls>(__tpls)...); 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: constexpr tuple<_Elements&...> 15726: tie(_Elements&... __args) noexcept 15726: { return tuple<_Elements&...>(__args...); } 15726: 15726: 15726: template 15726: 15726: inline 15726: 15726: 15726: typename enable_if<__and_<__is_swappable<_Elements>...>::value 15726: >::type 15726: 15726: 15726: 15726: swap(tuple<_Elements...>& __x, tuple<_Elements...>& __y) 15726: noexcept(noexcept(__x.swap(__y))) 15726: { __x.swap(__y); } 15726: # 2198 "/usr/include/c++/13/tuple" 3 15726: template 15726: 15726: typename enable_if...>::value>::type 15726: swap(tuple<_Elements...>&, tuple<_Elements...>&) = delete; 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct _Swallow_assign 15726: { 15726: template 15726: constexpr const _Swallow_assign& 15726: operator=(const _Tp&) const 15726: { return *this; } 15726: }; 15726: # 2233 "/usr/include/c++/13/tuple" 3 15726: inline constexpr _Swallow_assign ignore{}; 15726: 15726: 15726: template 15726: struct uses_allocator, _Alloc> : true_type { }; 15726: # 2248 "/usr/include/c++/13/tuple" 3 15726: template 15726: template 15726: 15726: inline 15726: pair<_T1, _T2>:: 15726: pair(piecewise_construct_t, 15726: tuple<_Args1...> __first, tuple<_Args2...> __second) 15726: : pair(__first, __second, 15726: typename _Build_index_tuple::__type(), 15726: typename _Build_index_tuple::__type()) 15726: { } 15726: 15726: template 15726: template 15726: inline 15726: pair<_T1, _T2>:: 15726: pair(tuple<_Args1...>& __tuple1, tuple<_Args2...>& __tuple2, 15726: _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>) 15726: : first(std::forward<_Args1>(std::get<_Indexes1>(__tuple1))...), 15726: second(std::forward<_Args2>(std::get<_Indexes2>(__tuple2))...) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template class _Trait, typename _Tp, typename _Tuple> 15726: inline constexpr bool __unpack_std_tuple = false; 15726: 15726: template class _Trait, typename _Tp, typename... _Up> 15726: inline constexpr bool __unpack_std_tuple<_Trait, _Tp, tuple<_Up...>> 15726: = _Trait<_Tp, _Up...>::value; 15726: 15726: template class _Trait, typename _Tp, typename... _Up> 15726: inline constexpr bool __unpack_std_tuple<_Trait, _Tp, tuple<_Up...>&> 15726: = _Trait<_Tp, _Up&...>::value; 15726: 15726: template class _Trait, typename _Tp, typename... _Up> 15726: inline constexpr bool __unpack_std_tuple<_Trait, _Tp, const tuple<_Up...>> 15726: = _Trait<_Tp, const _Up...>::value; 15726: 15726: template class _Trait, typename _Tp, typename... _Up> 15726: inline constexpr bool __unpack_std_tuple<_Trait, _Tp, const tuple<_Up...>&> 15726: = _Trait<_Tp, const _Up&...>::value; 15726: 15726: 15726: 15726: template 15726: constexpr decltype(auto) 15726: __apply_impl(_Fn&& __f, _Tuple&& __t, index_sequence<_Idx...>) 15726: { 15726: return std::__invoke(std::forward<_Fn>(__f), 15726: std::get<_Idx>(std::forward<_Tuple>(__t))...); 15726: } 15726: 15726: template 15726: constexpr decltype(auto) 15726: apply(_Fn&& __f, _Tuple&& __t) 15726: noexcept(__unpack_std_tuple) 15726: { 15726: using _Indices 15726: = make_index_sequence>>; 15726: return std::__apply_impl(std::forward<_Fn>(__f), 15726: std::forward<_Tuple>(__t), 15726: _Indices{}); 15726: } 15726: 15726: 15726: 15726: template 15726: constexpr _Tp 15726: __make_from_tuple_impl(_Tuple&& __t, index_sequence<_Idx...>) 15726: { return _Tp(std::get<_Idx>(std::forward<_Tuple>(__t))...); } 15726: 15726: template 15726: constexpr _Tp 15726: make_from_tuple(_Tuple&& __t) 15726: noexcept(__unpack_std_tuple) 15726: { 15726: constexpr size_t __n = tuple_size_v>; 15726: 15726: if constexpr (__n == 1) 15726: { 15726: using _Elt = decltype(std::get<0>(std::declval<_Tuple>())); 15726: static_assert(!__reference_constructs_from_temporary(_Tp, _Elt)); 15726: } 15726: 15726: return __make_from_tuple_impl<_Tp>(std::forward<_Tuple>(__t), 15726: make_index_sequence<__n>{}); 15726: } 15726: # 2358 "/usr/include/c++/13/tuple" 3 15726: 15726: } 15726: # 48 "/usr/include/c++/13/bits/memory_resource.h" 2 3 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: namespace pmr 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: class memory_resource 15726: { 15726: static constexpr size_t _S_max_align = alignof(max_align_t); 15726: 15726: public: 15726: memory_resource() = default; 15726: memory_resource(const memory_resource&) = default; 15726: virtual ~memory_resource(); 15726: 15726: memory_resource& operator=(const memory_resource&) = default; 15726: 15726: [[nodiscard]] 15726: void* 15726: allocate(size_t __bytes, size_t __alignment = _S_max_align) 15726: __attribute__((__returns_nonnull__,__alloc_size__(2),__alloc_align__(3))) 15726: { return ::operator new(__bytes, do_allocate(__bytes, __alignment)); } 15726: 15726: void 15726: deallocate(void* __p, size_t __bytes, size_t __alignment = _S_max_align) 15726: __attribute__((__nonnull__)) 15726: { return do_deallocate(__p, __bytes, __alignment); } 15726: 15726: [[nodiscard]] 15726: bool 15726: is_equal(const memory_resource& __other) const noexcept 15726: { return do_is_equal(__other); } 15726: 15726: private: 15726: virtual void* 15726: do_allocate(size_t __bytes, size_t __alignment) = 0; 15726: 15726: virtual void 15726: do_deallocate(void* __p, size_t __bytes, size_t __alignment) = 0; 15726: 15726: virtual bool 15726: do_is_equal(const memory_resource& __other) const noexcept = 0; 15726: }; 15726: 15726: [[nodiscard]] 15726: inline bool 15726: operator==(const memory_resource& __a, const memory_resource& __b) noexcept 15726: { return &__a == &__b || __a.is_equal(__b); } 15726: 15726: 15726: [[nodiscard]] 15726: inline bool 15726: operator!=(const memory_resource& __a, const memory_resource& __b) noexcept 15726: { return !(__a == __b); } 15726: # 119 "/usr/include/c++/13/bits/memory_resource.h" 3 15726: template 15726: class polymorphic_allocator 15726: { 15726: 15726: 15726: template 15726: struct __not_pair { using type = void; }; 15726: 15726: template 15726: struct __not_pair> { }; 15726: 15726: public: 15726: using value_type = _Tp; 15726: 15726: polymorphic_allocator() noexcept 15726: { 15726: extern memory_resource* get_default_resource() noexcept 15726: __attribute__((__returns_nonnull__)); 15726: _M_resource = get_default_resource(); 15726: } 15726: 15726: polymorphic_allocator(memory_resource* __r) noexcept 15726: __attribute__((__nonnull__)) 15726: : _M_resource(__r) 15726: { ; } 15726: 15726: polymorphic_allocator(const polymorphic_allocator& __other) = default; 15726: 15726: template 15726: polymorphic_allocator(const polymorphic_allocator<_Up>& __x) noexcept 15726: : _M_resource(__x.resource()) 15726: { } 15726: 15726: polymorphic_allocator& 15726: operator=(const polymorphic_allocator&) = delete; 15726: 15726: [[nodiscard]] 15726: _Tp* 15726: allocate(size_t __n) 15726: __attribute__((__returns_nonnull__)) 15726: { 15726: if ((__gnu_cxx::__int_traits::__max / sizeof(_Tp)) < __n) 15726: std::__throw_bad_array_new_length(); 15726: return static_cast<_Tp*>(_M_resource->allocate(__n * sizeof(_Tp), 15726: alignof(_Tp))); 15726: } 15726: 15726: void 15726: deallocate(_Tp* __p, size_t __n) noexcept 15726: __attribute__((__nonnull__)) 15726: { _M_resource->deallocate(__p, __n * sizeof(_Tp), alignof(_Tp)); } 15726: # 224 "/usr/include/c++/13/bits/memory_resource.h" 3 15726: template 15726: __attribute__((__nonnull__)) 15726: typename __not_pair<_Tp1>::type 15726: construct(_Tp1* __p, _Args&&... __args) 15726: { 15726: 15726: 15726: using __use_tag 15726: = std::__uses_alloc_t<_Tp1, polymorphic_allocator, _Args...>; 15726: if constexpr (is_base_of_v<__uses_alloc0, __use_tag>) 15726: ::new(__p) _Tp1(std::forward<_Args>(__args)...); 15726: else if constexpr (is_base_of_v<__uses_alloc1_, __use_tag>) 15726: ::new(__p) _Tp1(allocator_arg, *this, 15726: std::forward<_Args>(__args)...); 15726: else 15726: ::new(__p) _Tp1(std::forward<_Args>(__args)..., *this); 15726: } 15726: 15726: template 15726: __attribute__((__nonnull__)) 15726: void 15726: construct(pair<_Tp1, _Tp2>* __p, piecewise_construct_t, 15726: tuple<_Args1...> __x, tuple<_Args2...> __y) 15726: { 15726: auto __x_tag = 15726: __use_alloc<_Tp1, polymorphic_allocator, _Args1...>(*this); 15726: auto __y_tag = 15726: __use_alloc<_Tp2, polymorphic_allocator, _Args2...>(*this); 15726: index_sequence_for<_Args1...> __x_i; 15726: index_sequence_for<_Args2...> __y_i; 15726: 15726: ::new(__p) pair<_Tp1, _Tp2>(piecewise_construct, 15726: _S_construct_p(__x_tag, __x_i, __x), 15726: _S_construct_p(__y_tag, __y_i, __y)); 15726: } 15726: 15726: template 15726: __attribute__((__nonnull__)) 15726: void 15726: construct(pair<_Tp1, _Tp2>* __p) 15726: { this->construct(__p, piecewise_construct, tuple<>(), tuple<>()); } 15726: 15726: template 15726: __attribute__((__nonnull__)) 15726: void 15726: construct(pair<_Tp1, _Tp2>* __p, _Up&& __x, _Vp&& __y) 15726: { 15726: this->construct(__p, piecewise_construct, 15726: std::forward_as_tuple(std::forward<_Up>(__x)), 15726: std::forward_as_tuple(std::forward<_Vp>(__y))); 15726: } 15726: 15726: template 15726: __attribute__((__nonnull__)) 15726: void 15726: construct(pair<_Tp1, _Tp2>* __p, const std::pair<_Up, _Vp>& __pr) 15726: { 15726: this->construct(__p, piecewise_construct, 15726: std::forward_as_tuple(__pr.first), 15726: std::forward_as_tuple(__pr.second)); 15726: } 15726: 15726: template 15726: __attribute__((__nonnull__)) 15726: void 15726: construct(pair<_Tp1, _Tp2>* __p, pair<_Up, _Vp>&& __pr) 15726: { 15726: this->construct(__p, piecewise_construct, 15726: std::forward_as_tuple(std::forward<_Up>(__pr.first)), 15726: std::forward_as_tuple(std::forward<_Vp>(__pr.second))); 15726: } 15726: # 307 "/usr/include/c++/13/bits/memory_resource.h" 3 15726: template 15726: 15726: __attribute__((__nonnull__)) 15726: void 15726: destroy(_Up* __p) 15726: { __p->~_Up(); } 15726: 15726: polymorphic_allocator 15726: select_on_container_copy_construction() const noexcept 15726: { return polymorphic_allocator(); } 15726: 15726: memory_resource* 15726: resource() const noexcept 15726: __attribute__((__returns_nonnull__)) 15726: { return _M_resource; } 15726: 15726: 15726: 15726: [[nodiscard]] 15726: friend bool 15726: operator==(const polymorphic_allocator& __a, 15726: const polymorphic_allocator& __b) noexcept 15726: { return *__a.resource() == *__b.resource(); } 15726: 15726: 15726: [[nodiscard]] 15726: friend bool 15726: operator!=(const polymorphic_allocator& __a, 15726: const polymorphic_allocator& __b) noexcept 15726: { return !(__a == __b); } 15726: 15726: 15726: private: 15726: 15726: using __uses_alloc1_ = __uses_alloc1; 15726: using __uses_alloc2_ = __uses_alloc2; 15726: 15726: template 15726: static tuple<_Args&&...> 15726: _S_construct_p(__uses_alloc0, _Ind, tuple<_Args...>& __t) 15726: { return std::move(__t); } 15726: 15726: template 15726: static tuple 15726: _S_construct_p(__uses_alloc1_ __ua, index_sequence<_Ind...>, 15726: tuple<_Args...>& __t) 15726: { 15726: return { 15726: allocator_arg, *__ua._M_a, std::get<_Ind>(std::move(__t))... 15726: }; 15726: } 15726: 15726: template 15726: static tuple<_Args&&..., polymorphic_allocator> 15726: _S_construct_p(__uses_alloc2_ __ua, index_sequence<_Ind...>, 15726: tuple<_Args...>& __t) 15726: { return { std::get<_Ind>(std::move(__t))..., *__ua._M_a }; } 15726: 15726: 15726: memory_resource* _M_resource; 15726: }; 15726: 15726: template 15726: [[nodiscard]] 15726: inline bool 15726: operator==(const polymorphic_allocator<_Tp1>& __a, 15726: const polymorphic_allocator<_Tp2>& __b) noexcept 15726: { return *__a.resource() == *__b.resource(); } 15726: 15726: 15726: template 15726: [[nodiscard]] 15726: inline bool 15726: operator!=(const polymorphic_allocator<_Tp1>& __a, 15726: const polymorphic_allocator<_Tp2>& __b) noexcept 15726: { return !(__a == __b); } 15726: 15726: 15726: } 15726: 15726: template struct allocator_traits; 15726: 15726: 15726: template 15726: struct allocator_traits> 15726: { 15726: 15726: using allocator_type = pmr::polymorphic_allocator<_Tp>; 15726: 15726: 15726: using value_type = _Tp; 15726: 15726: 15726: using pointer = _Tp*; 15726: 15726: 15726: using const_pointer = const _Tp*; 15726: 15726: 15726: using void_pointer = void*; 15726: 15726: 15726: using const_void_pointer = const void*; 15726: 15726: 15726: using difference_type = std::ptrdiff_t; 15726: 15726: 15726: using size_type = std::size_t; 15726: 15726: 15726: 15726: 15726: 15726: using propagate_on_container_copy_assignment = false_type; 15726: using propagate_on_container_move_assignment = false_type; 15726: using propagate_on_container_swap = false_type; 15726: 15726: static allocator_type 15726: select_on_container_copy_construction(const allocator_type&) noexcept 15726: { return allocator_type(); } 15726: 15726: 15726: 15726: using is_always_equal = false_type; 15726: 15726: template 15726: using rebind_alloc = pmr::polymorphic_allocator<_Up>; 15726: 15726: template 15726: using rebind_traits = allocator_traits>; 15726: # 446 "/usr/include/c++/13/bits/memory_resource.h" 3 15726: [[nodiscard]] static pointer 15726: allocate(allocator_type& __a, size_type __n) 15726: { return __a.allocate(__n); } 15726: # 461 "/usr/include/c++/13/bits/memory_resource.h" 3 15726: [[nodiscard]] static pointer 15726: allocate(allocator_type& __a, size_type __n, const_void_pointer) 15726: { return __a.allocate(__n); } 15726: # 473 "/usr/include/c++/13/bits/memory_resource.h" 3 15726: static void 15726: deallocate(allocator_type& __a, pointer __p, size_type __n) 15726: { __a.deallocate(__p, __n); } 15726: # 488 "/usr/include/c++/13/bits/memory_resource.h" 3 15726: template 15726: static void 15726: construct(allocator_type& __a, _Up* __p, _Args&&... __args) 15726: { __a.construct(__p, std::forward<_Args>(__args)...); } 15726: # 500 "/usr/include/c++/13/bits/memory_resource.h" 3 15726: template 15726: static void 15726: destroy(allocator_type&, _Up* __p) 15726: noexcept(is_nothrow_destructible<_Up>::value) 15726: { __p->~_Up(); } 15726: 15726: 15726: 15726: 15726: 15726: static size_type 15726: max_size(const allocator_type&) noexcept 15726: { return size_t(-1) / sizeof(value_type); } 15726: }; 15726: 15726: 15726: } 15726: # 77 "/usr/include/c++/13/deque" 2 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: namespace pmr 15726: { 15726: template 15726: using deque = std::deque<_Tp, polymorphic_allocator<_Tp>>; 15726: } 15726: 15726: } 15726: # 13 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 15726: # 1 "/usr/include/c++/13/functional" 1 3 15726: # 46 "/usr/include/c++/13/functional" 3 15726: 15726: # 47 "/usr/include/c++/13/functional" 3 15726: # 55 "/usr/include/c++/13/functional" 3 15726: # 1 "/usr/include/c++/13/bits/functional_hash.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/functional_hash.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/functional_hash.h" 3 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/hash_bytes.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/hash_bytes.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/hash_bytes.h" 3 15726: 15726: 15726: 15726: namespace std 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_t 15726: _Hash_bytes(const void* __ptr, size_t __len, size_t __seed); 15726: 15726: 15726: 15726: 15726: 15726: size_t 15726: _Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed); 15726: 15726: 15726: } 15726: # 37 "/usr/include/c++/13/bits/functional_hash.h" 2 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 50 "/usr/include/c++/13/bits/functional_hash.h" 3 15726: template 15726: struct __hash_base 15726: { 15726: typedef _Result result_type [[__deprecated__]]; 15726: typedef _Arg argument_type [[__deprecated__]]; 15726: }; 15726: 15726: 15726: template 15726: struct hash; 15726: 15726: template 15726: struct __poison_hash 15726: { 15726: static constexpr bool __enable_hash_call = false; 15726: private: 15726: 15726: __poison_hash(__poison_hash&&); 15726: ~__poison_hash(); 15726: }; 15726: 15726: template 15726: struct __poison_hash<_Tp, __void_t()(declval<_Tp>()))>> 15726: { 15726: static constexpr bool __enable_hash_call = true; 15726: }; 15726: 15726: 15726: template::value> 15726: struct __hash_enum 15726: { 15726: private: 15726: 15726: __hash_enum(__hash_enum&&); 15726: ~__hash_enum(); 15726: }; 15726: 15726: 15726: template 15726: struct __hash_enum<_Tp, true> : public __hash_base 15726: { 15726: size_t 15726: operator()(_Tp __val) const noexcept 15726: { 15726: using __type = typename underlying_type<_Tp>::type; 15726: return hash<__type>{}(static_cast<__type>(__val)); 15726: } 15726: }; 15726: 15726: 15726: 15726: template 15726: struct hash : __hash_enum<_Tp> 15726: { }; 15726: 15726: 15726: template 15726: struct hash<_Tp*> : public __hash_base 15726: { 15726: size_t 15726: operator()(_Tp* __p) const noexcept 15726: { return reinterpret_cast(__p); } 15726: }; 15726: # 125 "/usr/include/c++/13/bits/functional_hash.h" 3 15726: template<> struct hash : public __hash_base { size_t operator()(bool __val) const noexcept { return static_cast(__val); } }; 15726: 15726: 15726: template<> struct hash : public __hash_base { size_t operator()(char __val) const noexcept { return static_cast(__val); } }; 15726: 15726: 15726: template<> struct hash : public __hash_base { size_t operator()(signed char __val) const noexcept { return static_cast(__val); } }; 15726: 15726: 15726: template<> struct hash : public __hash_base { size_t operator()(unsigned char __val) const noexcept { return static_cast(__val); } }; 15726: 15726: 15726: template<> struct hash : public __hash_base { size_t operator()(wchar_t __val) const noexcept { return static_cast(__val); } }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template<> struct hash : public __hash_base { size_t operator()(char16_t __val) const noexcept { return static_cast(__val); } }; 15726: 15726: 15726: template<> struct hash : public __hash_base { size_t operator()(char32_t __val) const noexcept { return static_cast(__val); } }; 15726: 15726: 15726: template<> struct hash : public __hash_base { size_t operator()(short __val) const noexcept { return static_cast(__val); } }; 15726: 15726: 15726: template<> struct hash : public __hash_base { size_t operator()(int __val) const noexcept { return static_cast(__val); } }; 15726: 15726: 15726: template<> struct hash : public __hash_base { size_t operator()(long __val) const noexcept { return static_cast(__val); } }; 15726: 15726: 15726: template<> struct hash : public __hash_base { size_t operator()(long long __val) const noexcept { return static_cast(__val); } }; 15726: 15726: 15726: template<> struct hash : public __hash_base { size_t operator()(unsigned short __val) const noexcept { return static_cast(__val); } }; 15726: 15726: 15726: template<> struct hash : public __hash_base { size_t operator()(unsigned int __val) const noexcept { return static_cast(__val); } }; 15726: 15726: 15726: template<> struct hash : public __hash_base { size_t operator()(unsigned long __val) const noexcept { return static_cast(__val); } }; 15726: 15726: 15726: template<> struct hash : public __hash_base { size_t operator()(unsigned long long __val) const noexcept { return static_cast(__val); } }; 15726: # 201 "/usr/include/c++/13/bits/functional_hash.h" 3 15726: struct _Hash_impl 15726: { 15726: static size_t 15726: hash(const void* __ptr, size_t __clength, 15726: size_t __seed = static_cast(0xc70f6907UL)) 15726: { return _Hash_bytes(__ptr, __clength, __seed); } 15726: 15726: template 15726: static size_t 15726: hash(const _Tp& __val) 15726: { return hash(&__val, sizeof(__val)); } 15726: 15726: template 15726: static size_t 15726: __hash_combine(const _Tp& __val, size_t __hash) 15726: { return hash(&__val, sizeof(__val), __hash); } 15726: }; 15726: 15726: 15726: struct _Fnv_hash_impl 15726: { 15726: static size_t 15726: hash(const void* __ptr, size_t __clength, 15726: size_t __seed = static_cast(2166136261UL)) 15726: { return _Fnv_hash_bytes(__ptr, __clength, __seed); } 15726: 15726: template 15726: static size_t 15726: hash(const _Tp& __val) 15726: { return hash(&__val, sizeof(__val)); } 15726: 15726: template 15726: static size_t 15726: __hash_combine(const _Tp& __val, size_t __hash) 15726: { return hash(&__val, sizeof(__val), __hash); } 15726: }; 15726: 15726: 15726: template<> 15726: struct hash : public __hash_base 15726: { 15726: size_t 15726: operator()(float __val) const noexcept 15726: { 15726: 15726: return __val != 0.0f ? std::_Hash_impl::hash(__val) : 0; 15726: } 15726: }; 15726: 15726: 15726: template<> 15726: struct hash : public __hash_base 15726: { 15726: size_t 15726: operator()(double __val) const noexcept 15726: { 15726: 15726: return __val != 0.0 ? std::_Hash_impl::hash(__val) : 0; 15726: } 15726: }; 15726: 15726: 15726: template<> 15726: struct hash 15726: : public __hash_base 15726: { 15726: __attribute__ ((__pure__)) size_t 15726: operator()(long double __val) const noexcept; 15726: }; 15726: 15726: 15726: template<> 15726: struct hash : public __hash_base 15726: { 15726: size_t 15726: operator()(nullptr_t) const noexcept 15726: { return 0; } 15726: }; 15726: # 294 "/usr/include/c++/13/bits/functional_hash.h" 3 15726: template 15726: struct __is_fast_hash : public std::true_type 15726: { }; 15726: 15726: template<> 15726: struct __is_fast_hash> : public std::false_type 15726: { }; 15726: 15726: 15726: } 15726: # 56 "/usr/include/c++/13/functional" 2 3 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/std_function.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/std_function.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/std_function.h" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/typeinfo" 1 3 15726: # 32 "/usr/include/c++/13/typeinfo" 3 15726: 15726: # 33 "/usr/include/c++/13/typeinfo" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: #pragma GCC visibility push(default) 15726: 15726: 15726: 15726: 15726: 15726: extern "C++" { 15726: 15726: namespace __cxxabiv1 15726: { 15726: class __class_type_info; 15726: } 15726: # 84 "/usr/include/c++/13/typeinfo" 3 15726: namespace std 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: class type_info 15726: { 15726: public: 15726: 15726: 15726: 15726: 15726: virtual ~type_info(); 15726: 15726: 15726: 15726: const char* name() const noexcept 15726: { return __name[0] == '*' ? __name + 1 : __name; } 15726: 15726: 15726: 15726: bool before(const type_info& __arg) const noexcept; 15726: 15726: 15726: bool operator==(const type_info& __arg) const noexcept; 15726: 15726: 15726: bool operator!=(const type_info& __arg) const noexcept 15726: { return !operator==(__arg); } 15726: 15726: 15726: 15726: size_t hash_code() const noexcept 15726: { 15726: 15726: return _Hash_bytes(name(), __builtin_strlen(name()), 15726: static_cast(0xc70f6907UL)); 15726: 15726: 15726: 15726: } 15726: 15726: 15726: 15726: virtual bool __is_pointer_p() const; 15726: 15726: 15726: virtual bool __is_function_p() const; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual bool __do_catch(const type_info *__thr_type, void **__thr_obj, 15726: unsigned __outer) const; 15726: 15726: 15726: virtual bool __do_upcast(const __cxxabiv1::__class_type_info *__target, 15726: void **__obj_ptr) const; 15726: 15726: protected: 15726: const char *__name; 15726: 15726: explicit type_info(const char *__n): __name(__n) { } 15726: 15726: private: 15726: 15726: 15726: type_info& operator=(const type_info&) = delete; 15726: type_info(const type_info&) = delete; 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool __equal(const type_info&) const noexcept; 15726: 15726: }; 15726: # 220 "/usr/include/c++/13/typeinfo" 3 15726: class bad_cast : public exception 15726: { 15726: public: 15726: bad_cast() noexcept { } 15726: 15726: 15726: 15726: virtual ~bad_cast() noexcept; 15726: 15726: 15726: virtual const char* what() const noexcept; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: class bad_typeid : public exception 15726: { 15726: public: 15726: bad_typeid () noexcept { } 15726: 15726: 15726: 15726: virtual ~bad_typeid() noexcept; 15726: 15726: 15726: virtual const char* what() const noexcept; 15726: }; 15726: } 15726: 15726: } 15726: 15726: #pragma GCC visibility pop 15726: # 41 "/usr/include/c++/13/bits/std_function.h" 2 3 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: class bad_function_call : public std::exception 15726: { 15726: public: 15726: virtual ~bad_function_call() noexcept; 15726: 15726: const char* what() const noexcept; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct __is_location_invariant 15726: : is_trivially_copyable<_Tp>::type 15726: { }; 15726: 15726: class _Undefined_class; 15726: 15726: union _Nocopy_types 15726: { 15726: void* _M_object; 15726: const void* _M_const_object; 15726: void (*_M_function_pointer)(); 15726: void (_Undefined_class::*_M_member_pointer)(); 15726: }; 15726: 15726: union [[gnu::may_alias]] _Any_data 15726: { 15726: void* _M_access() noexcept { return &_M_pod_data[0]; } 15726: const void* _M_access() const noexcept { return &_M_pod_data[0]; } 15726: 15726: template 15726: _Tp& 15726: _M_access() noexcept 15726: { return *static_cast<_Tp*>(_M_access()); } 15726: 15726: template 15726: const _Tp& 15726: _M_access() const noexcept 15726: { return *static_cast(_M_access()); } 15726: 15726: _Nocopy_types _M_unused; 15726: char _M_pod_data[sizeof(_Nocopy_types)]; 15726: }; 15726: 15726: enum _Manager_operation 15726: { 15726: __get_type_info, 15726: __get_functor_ptr, 15726: __clone_functor, 15726: __destroy_functor 15726: }; 15726: 15726: template 15726: class function; 15726: 15726: 15726: class _Function_base 15726: { 15726: public: 15726: static const size_t _M_max_size = sizeof(_Nocopy_types); 15726: static const size_t _M_max_align = __alignof__(_Nocopy_types); 15726: 15726: template 15726: class _Base_manager 15726: { 15726: protected: 15726: static const bool __stored_locally = 15726: (__is_location_invariant<_Functor>::value 15726: && sizeof(_Functor) <= _M_max_size 15726: && __alignof__(_Functor) <= _M_max_align 15726: && (_M_max_align % __alignof__(_Functor) == 0)); 15726: 15726: using _Local_storage = integral_constant; 15726: 15726: 15726: static _Functor* 15726: _M_get_pointer(const _Any_data& __source) noexcept 15726: { 15726: if constexpr (__stored_locally) 15726: { 15726: const _Functor& __f = __source._M_access<_Functor>(); 15726: return const_cast<_Functor*>(std::__addressof(__f)); 15726: } 15726: else 15726: return __source._M_access<_Functor*>(); 15726: } 15726: 15726: private: 15726: 15726: 15726: template 15726: static void 15726: _M_create(_Any_data& __dest, _Fn&& __f, true_type) 15726: { 15726: ::new (__dest._M_access()) _Functor(std::forward<_Fn>(__f)); 15726: } 15726: 15726: 15726: template 15726: static void 15726: _M_create(_Any_data& __dest, _Fn&& __f, false_type) 15726: { 15726: __dest._M_access<_Functor*>() 15726: = new _Functor(std::forward<_Fn>(__f)); 15726: } 15726: 15726: 15726: static void 15726: _M_destroy(_Any_data& __victim, true_type) 15726: { 15726: __victim._M_access<_Functor>().~_Functor(); 15726: } 15726: 15726: 15726: static void 15726: _M_destroy(_Any_data& __victim, false_type) 15726: { 15726: delete __victim._M_access<_Functor*>(); 15726: } 15726: 15726: public: 15726: static bool 15726: _M_manager(_Any_data& __dest, const _Any_data& __source, 15726: _Manager_operation __op) 15726: { 15726: switch (__op) 15726: { 15726: case __get_type_info: 15726: 15726: __dest._M_access() = &typeid(_Functor); 15726: 15726: 15726: 15726: break; 15726: 15726: case __get_functor_ptr: 15726: __dest._M_access<_Functor*>() = _M_get_pointer(__source); 15726: break; 15726: 15726: case __clone_functor: 15726: _M_init_functor(__dest, 15726: *const_cast(_M_get_pointer(__source))); 15726: break; 15726: 15726: case __destroy_functor: 15726: _M_destroy(__dest, _Local_storage()); 15726: break; 15726: } 15726: return false; 15726: } 15726: 15726: template 15726: static void 15726: _M_init_functor(_Any_data& __functor, _Fn&& __f) 15726: noexcept(__and_<_Local_storage, 15726: is_nothrow_constructible<_Functor, _Fn>>::value) 15726: { 15726: _M_create(__functor, std::forward<_Fn>(__f), _Local_storage()); 15726: } 15726: 15726: template 15726: static bool 15726: _M_not_empty_function(const function<_Signature>& __f) noexcept 15726: { return static_cast(__f); } 15726: 15726: template 15726: static bool 15726: _M_not_empty_function(_Tp* __fp) noexcept 15726: { return __fp != nullptr; } 15726: 15726: template 15726: static bool 15726: _M_not_empty_function(_Tp _Class::* __mp) noexcept 15726: { return __mp != nullptr; } 15726: 15726: template 15726: static bool 15726: _M_not_empty_function(const _Tp&) noexcept 15726: { return true; } 15726: }; 15726: 15726: _Function_base() = default; 15726: 15726: ~_Function_base() 15726: { 15726: if (_M_manager) 15726: _M_manager(_M_functor, _M_functor, __destroy_functor); 15726: } 15726: 15726: bool _M_empty() const { return !_M_manager; } 15726: 15726: using _Manager_type 15726: = bool (*)(_Any_data&, const _Any_data&, _Manager_operation); 15726: 15726: _Any_data _M_functor{}; 15726: _Manager_type _M_manager{}; 15726: }; 15726: 15726: template 15726: class _Function_handler; 15726: 15726: template 15726: class _Function_handler<_Res(_ArgTypes...), _Functor> 15726: : public _Function_base::_Base_manager<_Functor> 15726: { 15726: using _Base = _Function_base::_Base_manager<_Functor>; 15726: 15726: public: 15726: static bool 15726: _M_manager(_Any_data& __dest, const _Any_data& __source, 15726: _Manager_operation __op) 15726: { 15726: switch (__op) 15726: { 15726: 15726: case __get_type_info: 15726: __dest._M_access() = &typeid(_Functor); 15726: break; 15726: 15726: case __get_functor_ptr: 15726: __dest._M_access<_Functor*>() = _Base::_M_get_pointer(__source); 15726: break; 15726: 15726: default: 15726: _Base::_M_manager(__dest, __source, __op); 15726: } 15726: return false; 15726: } 15726: 15726: static _Res 15726: _M_invoke(const _Any_data& __functor, _ArgTypes&&... __args) 15726: { 15726: return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), 15726: std::forward<_ArgTypes>(__args)...); 15726: } 15726: 15726: template 15726: static constexpr bool 15726: _S_nothrow_init() noexcept 15726: { 15726: return __and_>::value; 15726: } 15726: }; 15726: 15726: 15726: template<> 15726: class _Function_handler 15726: { 15726: public: 15726: static bool 15726: _M_manager(_Any_data&, const _Any_data&, _Manager_operation) 15726: { return false; } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template::value> 15726: struct _Target_handler 15726: : _Function_handler<_Signature, typename remove_cv<_Functor>::type> 15726: { }; 15726: 15726: template 15726: struct _Target_handler<_Signature, _Functor, false> 15726: : _Function_handler 15726: { }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: class function<_Res(_ArgTypes...)> 15726: : public _Maybe_unary_or_binary_function<_Res, _ArgTypes...>, 15726: private _Function_base 15726: { 15726: 15726: 15726: template, function>::value> 15726: using _Decay_t 15726: = typename __enable_if_t>::type; 15726: 15726: template, 15726: typename _Res2 = __invoke_result<_DFunc&, _ArgTypes...>> 15726: struct _Callable 15726: : __is_invocable_impl<_Res2, _Res>::type 15726: { }; 15726: 15726: template 15726: using _Requires = __enable_if_t<_Cond::value, _Tp>; 15726: 15726: template 15726: using _Handler 15726: = _Function_handler<_Res(_ArgTypes...), __decay_t<_Functor>>; 15726: 15726: public: 15726: typedef _Res result_type; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: function() noexcept 15726: : _Function_base() { } 15726: 15726: 15726: 15726: 15726: 15726: function(nullptr_t) noexcept 15726: : _Function_base() { } 15726: # 386 "/usr/include/c++/13/bits/std_function.h" 3 15726: function(const function& __x) 15726: : _Function_base() 15726: { 15726: if (static_cast(__x)) 15726: { 15726: __x._M_manager(_M_functor, __x._M_functor, __clone_functor); 15726: _M_invoker = __x._M_invoker; 15726: _M_manager = __x._M_manager; 15726: } 15726: } 15726: # 404 "/usr/include/c++/13/bits/std_function.h" 3 15726: function(function&& __x) noexcept 15726: : _Function_base(), _M_invoker(__x._M_invoker) 15726: { 15726: if (static_cast(__x)) 15726: { 15726: _M_functor = __x._M_functor; 15726: _M_manager = __x._M_manager; 15726: __x._M_manager = nullptr; 15726: __x._M_invoker = nullptr; 15726: } 15726: } 15726: # 433 "/usr/include/c++/13/bits/std_function.h" 3 15726: template>> 15726: function(_Functor&& __f) 15726: noexcept(_Handler<_Functor>::template _S_nothrow_init<_Functor>()) 15726: : _Function_base() 15726: { 15726: static_assert(is_copy_constructible<__decay_t<_Functor>>::value, 15726: "std::function target must be copy-constructible"); 15726: static_assert(is_constructible<__decay_t<_Functor>, _Functor>::value, 15726: "std::function target must be constructible from the " 15726: "constructor argument"); 15726: 15726: using _My_handler = _Handler<_Functor>; 15726: 15726: if (_My_handler::_M_not_empty_function(__f)) 15726: { 15726: _My_handler::_M_init_functor(_M_functor, 15726: std::forward<_Functor>(__f)); 15726: _M_invoker = &_My_handler::_M_invoke; 15726: _M_manager = &_My_handler::_M_manager; 15726: } 15726: } 15726: # 468 "/usr/include/c++/13/bits/std_function.h" 3 15726: function& 15726: operator=(const function& __x) 15726: { 15726: function(__x).swap(*this); 15726: return *this; 15726: } 15726: # 486 "/usr/include/c++/13/bits/std_function.h" 3 15726: function& 15726: operator=(function&& __x) noexcept 15726: { 15726: function(std::move(__x)).swap(*this); 15726: return *this; 15726: } 15726: # 500 "/usr/include/c++/13/bits/std_function.h" 3 15726: function& 15726: operator=(nullptr_t) noexcept 15726: { 15726: if (_M_manager) 15726: { 15726: _M_manager(_M_functor, _M_functor, __destroy_functor); 15726: _M_manager = nullptr; 15726: _M_invoker = nullptr; 15726: } 15726: return *this; 15726: } 15726: # 529 "/usr/include/c++/13/bits/std_function.h" 3 15726: template 15726: _Requires<_Callable<_Functor>, function&> 15726: operator=(_Functor&& __f) 15726: noexcept(_Handler<_Functor>::template _S_nothrow_init<_Functor>()) 15726: { 15726: function(std::forward<_Functor>(__f)).swap(*this); 15726: return *this; 15726: } 15726: 15726: 15726: template 15726: function& 15726: operator=(reference_wrapper<_Functor> __f) noexcept 15726: { 15726: function(__f).swap(*this); 15726: return *this; 15726: } 15726: # 556 "/usr/include/c++/13/bits/std_function.h" 3 15726: void swap(function& __x) noexcept 15726: { 15726: std::swap(_M_functor, __x._M_functor); 15726: std::swap(_M_manager, __x._M_manager); 15726: std::swap(_M_invoker, __x._M_invoker); 15726: } 15726: # 573 "/usr/include/c++/13/bits/std_function.h" 3 15726: explicit operator bool() const noexcept 15726: { return !_M_empty(); } 15726: # 586 "/usr/include/c++/13/bits/std_function.h" 3 15726: _Res 15726: operator()(_ArgTypes... __args) const 15726: { 15726: if (_M_empty()) 15726: __throw_bad_function_call(); 15726: return _M_invoker(_M_functor, std::forward<_ArgTypes>(__args)...); 15726: } 15726: # 605 "/usr/include/c++/13/bits/std_function.h" 3 15726: const type_info& 15726: target_type() const noexcept 15726: { 15726: if (_M_manager) 15726: { 15726: _Any_data __typeinfo_result; 15726: _M_manager(__typeinfo_result, _M_functor, __get_type_info); 15726: if (auto __ti = __typeinfo_result._M_access()) 15726: return *__ti; 15726: } 15726: return typeid(void); 15726: } 15726: # 630 "/usr/include/c++/13/bits/std_function.h" 3 15726: template 15726: _Functor* 15726: target() noexcept 15726: { 15726: const function* __const_this = this; 15726: const _Functor* __func = __const_this->template target<_Functor>(); 15726: 15726: 15726: return *const_cast<_Functor**>(&__func); 15726: } 15726: 15726: template 15726: const _Functor* 15726: target() const noexcept 15726: { 15726: if constexpr (is_object<_Functor>::value) 15726: { 15726: 15726: 15726: using _Handler = _Target_handler<_Res(_ArgTypes...), _Functor>; 15726: 15726: if (_M_manager == &_Handler::_M_manager 15726: 15726: || (_M_manager && typeid(_Functor) == target_type()) 15726: 15726: ) 15726: { 15726: _Any_data __ptr; 15726: _M_manager(__ptr, _M_functor, __get_functor_ptr); 15726: return __ptr._M_access(); 15726: } 15726: } 15726: return nullptr; 15726: } 15726: 15726: 15726: private: 15726: using _Invoker_type = _Res (*)(const _Any_data&, _ArgTypes&&...); 15726: _Invoker_type _M_invoker = nullptr; 15726: }; 15726: 15726: 15726: template 15726: struct __function_guide_helper 15726: { }; 15726: 15726: template 15726: struct __function_guide_helper< 15726: _Res (_Tp::*) (_Args...) noexcept(_Nx) 15726: > 15726: { using type = _Res(_Args...); }; 15726: 15726: template 15726: struct __function_guide_helper< 15726: _Res (_Tp::*) (_Args...) & noexcept(_Nx) 15726: > 15726: { using type = _Res(_Args...); }; 15726: 15726: template 15726: struct __function_guide_helper< 15726: _Res (_Tp::*) (_Args...) const noexcept(_Nx) 15726: > 15726: { using type = _Res(_Args...); }; 15726: 15726: template 15726: struct __function_guide_helper< 15726: _Res (_Tp::*) (_Args...) const & noexcept(_Nx) 15726: > 15726: { using type = _Res(_Args...); }; 15726: # 715 "/usr/include/c++/13/bits/std_function.h" 3 15726: template 15726: using __function_guide_t = typename __function_guide_helper<_Op>::type; 15726: 15726: 15726: template 15726: function(_Res(*)(_ArgTypes...)) -> function<_Res(_ArgTypes...)>; 15726: 15726: template> 15726: function(_Fn) -> function<_Signature>; 15726: # 735 "/usr/include/c++/13/bits/std_function.h" 3 15726: template 15726: inline bool 15726: operator==(const function<_Res(_Args...)>& __f, nullptr_t) noexcept 15726: { return !static_cast(__f); } 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator==(nullptr_t, const function<_Res(_Args...)>& __f) noexcept 15726: { return !static_cast(__f); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const function<_Res(_Args...)>& __f, nullptr_t) noexcept 15726: { return static_cast(__f); } 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(nullptr_t, const function<_Res(_Args...)>& __f) noexcept 15726: { return static_cast(__f); } 15726: # 774 "/usr/include/c++/13/bits/std_function.h" 3 15726: template 15726: inline void 15726: swap(function<_Res(_Args...)>& __x, function<_Res(_Args...)>& __y) noexcept 15726: { __x.swap(__y); } 15726: 15726: 15726: namespace __detail::__variant 15726: { 15726: template struct _Never_valueless_alt; 15726: 15726: 15726: 15726: template 15726: struct _Never_valueless_alt> 15726: : std::true_type 15726: { }; 15726: } 15726: 15726: 15726: 15726: } 15726: # 60 "/usr/include/c++/13/functional" 2 3 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/unordered_map" 1 3 15726: # 32 "/usr/include/c++/13/unordered_map" 3 15726: 15726: # 33 "/usr/include/c++/13/unordered_map" 3 15726: # 41 "/usr/include/c++/13/unordered_map" 3 15726: # 1 "/usr/include/c++/13/bits/unordered_map.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: # 1 "/usr/include/c++/13/bits/hashtable.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/hashtable.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/hashtable.h" 3 15726: 15726: # 1 "/usr/include/c++/13/bits/hashtable_policy.h" 1 3 15726: # 38 "/usr/include/c++/13/bits/hashtable_policy.h" 3 15726: # 1 "/usr/include/c++/13/ext/aligned_buffer.h" 1 3 15726: # 32 "/usr/include/c++/13/ext/aligned_buffer.h" 3 15726: 15726: # 33 "/usr/include/c++/13/ext/aligned_buffer.h" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace __gnu_cxx 15726: { 15726: 15726: 15726: 15726: 15726: template 15726: struct __aligned_membuf 15726: { 15726: 15726: 15726: 15726: 15726: 15726: struct _Tp2 { _Tp _M_t; }; 15726: 15726: alignas(__alignof__(_Tp2::_M_t)) unsigned char _M_storage[sizeof(_Tp)]; 15726: 15726: __aligned_membuf() = default; 15726: 15726: 15726: __aligned_membuf(std::nullptr_t) { } 15726: 15726: void* 15726: _M_addr() noexcept 15726: { return static_cast(&_M_storage); } 15726: 15726: const void* 15726: _M_addr() const noexcept 15726: { return static_cast(&_M_storage); } 15726: 15726: _Tp* 15726: _M_ptr() noexcept 15726: { return static_cast<_Tp*>(_M_addr()); } 15726: 15726: const _Tp* 15726: _M_ptr() const noexcept 15726: { return static_cast(_M_addr()); } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct __aligned_buffer 15726: : std::aligned_storage 15726: { 15726: typename 15726: std::aligned_storage::type _M_storage; 15726: 15726: __aligned_buffer() = default; 15726: 15726: 15726: __aligned_buffer(std::nullptr_t) { } 15726: 15726: void* 15726: _M_addr() noexcept 15726: { 15726: return static_cast(&_M_storage); 15726: } 15726: 15726: const void* 15726: _M_addr() const noexcept 15726: { 15726: return static_cast(&_M_storage); 15726: } 15726: 15726: _Tp* 15726: _M_ptr() noexcept 15726: { return static_cast<_Tp*>(_M_addr()); } 15726: 15726: const _Tp* 15726: _M_ptr() const noexcept 15726: { return static_cast(_M_addr()); } 15726: }; 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: } 15726: # 39 "/usr/include/c++/13/bits/hashtable_policy.h" 2 3 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: template 15726: class _Hashtable; 15726: 15726: namespace __detail 15726: { 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Hashtable_base; 15726: 15726: 15726: 15726: template 15726: inline typename std::iterator_traits<_Iterator>::difference_type 15726: __distance_fw(_Iterator __first, _Iterator __last, 15726: std::input_iterator_tag) 15726: { return __first != __last ? 1 : 0; } 15726: 15726: template 15726: inline typename std::iterator_traits<_Iterator>::difference_type 15726: __distance_fw(_Iterator __first, _Iterator __last, 15726: std::forward_iterator_tag) 15726: { return std::distance(__first, __last); } 15726: 15726: template 15726: inline typename std::iterator_traits<_Iterator>::difference_type 15726: __distance_fw(_Iterator __first, _Iterator __last) 15726: { return __distance_fw(__first, __last, 15726: std::__iterator_category(__first)); } 15726: 15726: struct _Identity 15726: { 15726: template 15726: _Tp&& 15726: operator()(_Tp&& __x) const noexcept 15726: { return std::forward<_Tp>(__x); } 15726: }; 15726: 15726: struct _Select1st 15726: { 15726: template 15726: struct __1st_type; 15726: 15726: template 15726: struct __1st_type> 15726: { using type = _Tp; }; 15726: 15726: template 15726: struct __1st_type> 15726: { using type = const _Tp; }; 15726: 15726: template 15726: struct __1st_type<_Pair&> 15726: { using type = typename __1st_type<_Pair>::type&; }; 15726: 15726: template 15726: typename __1st_type<_Tp>::type&& 15726: operator()(_Tp&& __x) const noexcept 15726: { return std::forward<_Tp>(__x).first; } 15726: }; 15726: 15726: template 15726: struct _ConvertToValueType; 15726: 15726: template 15726: struct _ConvertToValueType<_Identity, _Value> 15726: { 15726: template 15726: constexpr _Kt&& 15726: operator()(_Kt&& __k) const noexcept 15726: { return std::forward<_Kt>(__k); } 15726: }; 15726: 15726: template 15726: struct _ConvertToValueType<_Select1st, _Value> 15726: { 15726: constexpr _Value&& 15726: operator()(_Value&& __x) const noexcept 15726: { return std::move(__x); } 15726: 15726: constexpr const _Value& 15726: operator()(const _Value& __x) const noexcept 15726: { return __x; } 15726: 15726: template 15726: constexpr std::pair<_Kt, _Val>&& 15726: operator()(std::pair<_Kt, _Val>&& __x) const noexcept 15726: { return std::move(__x); } 15726: 15726: template 15726: constexpr const std::pair<_Kt, _Val>& 15726: operator()(const std::pair<_Kt, _Val>& __x) const noexcept 15726: { return __x; } 15726: }; 15726: 15726: template 15726: struct _NodeBuilder; 15726: 15726: template<> 15726: struct _NodeBuilder<_Select1st> 15726: { 15726: template 15726: static auto 15726: _S_build(_Kt&& __k, _Arg&& __arg, const _NodeGenerator& __node_gen) 15726: -> typename _NodeGenerator::__node_type* 15726: { 15726: return __node_gen(std::forward<_Kt>(__k), 15726: std::forward<_Arg>(__arg).second); 15726: } 15726: }; 15726: 15726: template<> 15726: struct _NodeBuilder<_Identity> 15726: { 15726: template 15726: static auto 15726: _S_build(_Kt&& __k, _Arg&&, const _NodeGenerator& __node_gen) 15726: -> typename _NodeGenerator::__node_type* 15726: { return __node_gen(std::forward<_Kt>(__k)); } 15726: }; 15726: 15726: template 15726: struct _Hashtable_alloc; 15726: 15726: 15726: 15726: template 15726: struct _ReuseOrAllocNode 15726: { 15726: private: 15726: using __node_alloc_type = _NodeAlloc; 15726: using __hashtable_alloc = _Hashtable_alloc<__node_alloc_type>; 15726: using __node_alloc_traits = 15726: typename __hashtable_alloc::__node_alloc_traits; 15726: 15726: public: 15726: using __node_type = typename __hashtable_alloc::__node_type; 15726: 15726: _ReuseOrAllocNode(__node_type* __nodes, __hashtable_alloc& __h) 15726: : _M_nodes(__nodes), _M_h(__h) { } 15726: _ReuseOrAllocNode(const _ReuseOrAllocNode&) = delete; 15726: 15726: ~_ReuseOrAllocNode() 15726: { _M_h._M_deallocate_nodes(_M_nodes); } 15726: 15726: template 15726: __node_type* 15726: operator()(_Args&&... __args) const 15726: { 15726: if (_M_nodes) 15726: { 15726: __node_type* __node = _M_nodes; 15726: _M_nodes = _M_nodes->_M_next(); 15726: __node->_M_nxt = nullptr; 15726: auto& __a = _M_h._M_node_allocator(); 15726: __node_alloc_traits::destroy(__a, __node->_M_valptr()); 15726: try 15726: { 15726: __node_alloc_traits::construct(__a, __node->_M_valptr(), 15726: std::forward<_Args>(__args)...); 15726: } 15726: catch(...) 15726: { 15726: _M_h._M_deallocate_node_ptr(__node); 15726: throw; 15726: } 15726: return __node; 15726: } 15726: return _M_h._M_allocate_node(std::forward<_Args>(__args)...); 15726: } 15726: 15726: private: 15726: mutable __node_type* _M_nodes; 15726: __hashtable_alloc& _M_h; 15726: }; 15726: 15726: 15726: 15726: template 15726: struct _AllocNode 15726: { 15726: private: 15726: using __hashtable_alloc = _Hashtable_alloc<_NodeAlloc>; 15726: 15726: public: 15726: using __node_type = typename __hashtable_alloc::__node_type; 15726: 15726: _AllocNode(__hashtable_alloc& __h) 15726: : _M_h(__h) { } 15726: 15726: template 15726: __node_type* 15726: operator()(_Args&&... __args) const 15726: { return _M_h._M_allocate_node(std::forward<_Args>(__args)...); } 15726: 15726: private: 15726: __hashtable_alloc& _M_h; 15726: }; 15726: # 279 "/usr/include/c++/13/bits/hashtable_policy.h" 3 15726: template 15726: struct _Hashtable_traits 15726: { 15726: using __hash_cached = __bool_constant<_Cache_hash_code>; 15726: using __constant_iterators = __bool_constant<_Constant_iterators>; 15726: using __unique_keys = __bool_constant<_Unique_keys>; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Hashtable_hash_traits 15726: { 15726: static constexpr std::size_t 15726: __small_size_threshold() noexcept 15726: { return std::__is_fast_hash<_Hash>::value ? 0 : 20; } 15726: }; 15726: # 309 "/usr/include/c++/13/bits/hashtable_policy.h" 3 15726: struct _Hash_node_base 15726: { 15726: _Hash_node_base* _M_nxt; 15726: 15726: _Hash_node_base() noexcept : _M_nxt() { } 15726: 15726: _Hash_node_base(_Hash_node_base* __next) noexcept : _M_nxt(__next) { } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Hash_node_value_base 15726: { 15726: typedef _Value value_type; 15726: 15726: __gnu_cxx::__aligned_buffer<_Value> _M_storage; 15726: 15726: [[__gnu__::__always_inline__]] 15726: _Value* 15726: _M_valptr() noexcept 15726: { return _M_storage._M_ptr(); } 15726: 15726: [[__gnu__::__always_inline__]] 15726: const _Value* 15726: _M_valptr() const noexcept 15726: { return _M_storage._M_ptr(); } 15726: 15726: [[__gnu__::__always_inline__]] 15726: _Value& 15726: _M_v() noexcept 15726: { return *_M_valptr(); } 15726: 15726: [[__gnu__::__always_inline__]] 15726: const _Value& 15726: _M_v() const noexcept 15726: { return *_M_valptr(); } 15726: }; 15726: 15726: 15726: 15726: 15726: template 15726: struct _Hash_node_code_cache 15726: { }; 15726: 15726: 15726: 15726: 15726: template<> 15726: struct _Hash_node_code_cache 15726: { std::size_t _M_hash_code; }; 15726: 15726: template 15726: struct _Hash_node_value 15726: : _Hash_node_value_base<_Value> 15726: , _Hash_node_code_cache<_Cache_hash_code> 15726: { }; 15726: 15726: 15726: 15726: 15726: template 15726: struct _Hash_node 15726: : _Hash_node_base 15726: , _Hash_node_value<_Value, _Cache_hash_code> 15726: { 15726: _Hash_node* 15726: _M_next() const noexcept 15726: { return static_cast<_Hash_node*>(this->_M_nxt); } 15726: }; 15726: 15726: 15726: template 15726: struct _Node_iterator_base 15726: { 15726: using __node_type = _Hash_node<_Value, _Cache_hash_code>; 15726: 15726: __node_type* _M_cur; 15726: 15726: _Node_iterator_base() : _M_cur(nullptr) { } 15726: _Node_iterator_base(__node_type* __p) noexcept 15726: : _M_cur(__p) { } 15726: 15726: void 15726: _M_incr() noexcept 15726: { _M_cur = _M_cur->_M_next(); } 15726: 15726: friend bool 15726: operator==(const _Node_iterator_base& __x, const _Node_iterator_base& __y) 15726: noexcept 15726: { return __x._M_cur == __y._M_cur; } 15726: 15726: 15726: friend bool 15726: operator!=(const _Node_iterator_base& __x, const _Node_iterator_base& __y) 15726: noexcept 15726: { return __x._M_cur != __y._M_cur; } 15726: 15726: }; 15726: 15726: 15726: template 15726: struct _Node_iterator 15726: : public _Node_iterator_base<_Value, __cache> 15726: { 15726: private: 15726: using __base_type = _Node_iterator_base<_Value, __cache>; 15726: using __node_type = typename __base_type::__node_type; 15726: 15726: public: 15726: using value_type = _Value; 15726: using difference_type = std::ptrdiff_t; 15726: using iterator_category = std::forward_iterator_tag; 15726: 15726: using pointer = __conditional_t<__constant_iterators, 15726: const value_type*, value_type*>; 15726: 15726: using reference = __conditional_t<__constant_iterators, 15726: const value_type&, value_type&>; 15726: 15726: _Node_iterator() = default; 15726: 15726: explicit 15726: _Node_iterator(__node_type* __p) noexcept 15726: : __base_type(__p) { } 15726: 15726: reference 15726: operator*() const noexcept 15726: { return this->_M_cur->_M_v(); } 15726: 15726: pointer 15726: operator->() const noexcept 15726: { return this->_M_cur->_M_valptr(); } 15726: 15726: _Node_iterator& 15726: operator++() noexcept 15726: { 15726: this->_M_incr(); 15726: return *this; 15726: } 15726: 15726: _Node_iterator 15726: operator++(int) noexcept 15726: { 15726: _Node_iterator __tmp(*this); 15726: this->_M_incr(); 15726: return __tmp; 15726: } 15726: }; 15726: 15726: 15726: template 15726: struct _Node_const_iterator 15726: : public _Node_iterator_base<_Value, __cache> 15726: { 15726: private: 15726: using __base_type = _Node_iterator_base<_Value, __cache>; 15726: using __node_type = typename __base_type::__node_type; 15726: 15726: public: 15726: typedef _Value value_type; 15726: typedef std::ptrdiff_t difference_type; 15726: typedef std::forward_iterator_tag iterator_category; 15726: 15726: typedef const value_type* pointer; 15726: typedef const value_type& reference; 15726: 15726: _Node_const_iterator() = default; 15726: 15726: explicit 15726: _Node_const_iterator(__node_type* __p) noexcept 15726: : __base_type(__p) { } 15726: 15726: _Node_const_iterator(const _Node_iterator<_Value, __constant_iterators, 15726: __cache>& __x) noexcept 15726: : __base_type(__x._M_cur) { } 15726: 15726: reference 15726: operator*() const noexcept 15726: { return this->_M_cur->_M_v(); } 15726: 15726: pointer 15726: operator->() const noexcept 15726: { return this->_M_cur->_M_valptr(); } 15726: 15726: _Node_const_iterator& 15726: operator++() noexcept 15726: { 15726: this->_M_incr(); 15726: return *this; 15726: } 15726: 15726: _Node_const_iterator 15726: operator++(int) noexcept 15726: { 15726: _Node_const_iterator __tmp(*this); 15726: this->_M_incr(); 15726: return __tmp; 15726: } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct _Mod_range_hashing 15726: { 15726: typedef std::size_t first_argument_type; 15726: typedef std::size_t second_argument_type; 15726: typedef std::size_t result_type; 15726: 15726: result_type 15726: operator()(first_argument_type __num, 15726: second_argument_type __den) const noexcept 15726: { return __num % __den; } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct _Default_ranged_hash { }; 15726: 15726: 15726: 15726: struct _Prime_rehash_policy 15726: { 15726: using __has_load_factor = true_type; 15726: 15726: _Prime_rehash_policy(float __z = 1.0) noexcept 15726: : _M_max_load_factor(__z), _M_next_resize(0) { } 15726: 15726: float 15726: max_load_factor() const noexcept 15726: { return _M_max_load_factor; } 15726: 15726: 15726: std::size_t 15726: _M_next_bkt(std::size_t __n) const; 15726: 15726: 15726: std::size_t 15726: _M_bkt_for_elements(std::size_t __n) const 15726: { return __builtin_ceil(__n / (double)_M_max_load_factor); } 15726: 15726: 15726: 15726: 15726: 15726: std::pair 15726: _M_need_rehash(std::size_t __n_bkt, std::size_t __n_elt, 15726: std::size_t __n_ins) const; 15726: 15726: typedef std::size_t _State; 15726: 15726: _State 15726: _M_state() const 15726: { return _M_next_resize; } 15726: 15726: void 15726: _M_reset() noexcept 15726: { _M_next_resize = 0; } 15726: 15726: void 15726: _M_reset(_State __state) 15726: { _M_next_resize = __state; } 15726: 15726: static const std::size_t _S_growth_factor = 2; 15726: 15726: float _M_max_load_factor; 15726: mutable std::size_t _M_next_resize; 15726: }; 15726: 15726: 15726: struct _Mask_range_hashing 15726: { 15726: typedef std::size_t first_argument_type; 15726: typedef std::size_t second_argument_type; 15726: typedef std::size_t result_type; 15726: 15726: result_type 15726: operator()(first_argument_type __num, 15726: second_argument_type __den) const noexcept 15726: { return __num & (__den - 1); } 15726: }; 15726: 15726: 15726: inline std::size_t 15726: __clp2(std::size_t __n) noexcept 15726: { 15726: using __gnu_cxx::__int_traits; 15726: 15726: if (__n < 2) 15726: return __n; 15726: const unsigned __lz = sizeof(size_t) > sizeof(long) 15726: ? __builtin_clzll(__n - 1ull) 15726: : __builtin_clzl(__n - 1ul); 15726: 15726: return (size_t(1) << (__int_traits::__digits - __lz - 1)) << 1; 15726: } 15726: 15726: 15726: 15726: struct _Power2_rehash_policy 15726: { 15726: using __has_load_factor = true_type; 15726: 15726: _Power2_rehash_policy(float __z = 1.0) noexcept 15726: : _M_max_load_factor(__z), _M_next_resize(0) { } 15726: 15726: float 15726: max_load_factor() const noexcept 15726: { return _M_max_load_factor; } 15726: 15726: 15726: 15726: std::size_t 15726: _M_next_bkt(std::size_t __n) noexcept 15726: { 15726: if (__n == 0) 15726: 15726: 15726: 15726: return 1; 15726: 15726: const auto __max_width = std::min(sizeof(size_t), 8); 15726: const auto __max_bkt = size_t(1) << (__max_width * 8 - 1); 15726: std::size_t __res = __clp2(__n); 15726: 15726: if (__res == 0) 15726: __res = __max_bkt; 15726: else if (__res == 1) 15726: 15726: 15726: 15726: __res = 2; 15726: 15726: if (__res == __max_bkt) 15726: 15726: 15726: 15726: _M_next_resize = size_t(-1); 15726: else 15726: _M_next_resize 15726: = __builtin_floor(__res * (double)_M_max_load_factor); 15726: 15726: return __res; 15726: } 15726: 15726: 15726: std::size_t 15726: _M_bkt_for_elements(std::size_t __n) const noexcept 15726: { return __builtin_ceil(__n / (double)_M_max_load_factor); } 15726: 15726: 15726: 15726: 15726: 15726: std::pair 15726: _M_need_rehash(std::size_t __n_bkt, std::size_t __n_elt, 15726: std::size_t __n_ins) noexcept 15726: { 15726: if (__n_elt + __n_ins > _M_next_resize) 15726: { 15726: 15726: 15726: 15726: double __min_bkts 15726: = std::max(__n_elt + __n_ins, _M_next_resize ? 0 : 11) 15726: / (double)_M_max_load_factor; 15726: if (__min_bkts >= __n_bkt) 15726: return { true, 15726: _M_next_bkt(std::max(__builtin_floor(__min_bkts) + 1, 15726: __n_bkt * _S_growth_factor)) }; 15726: 15726: _M_next_resize 15726: = __builtin_floor(__n_bkt * (double)_M_max_load_factor); 15726: return { false, 0 }; 15726: } 15726: else 15726: return { false, 0 }; 15726: } 15726: 15726: typedef std::size_t _State; 15726: 15726: _State 15726: _M_state() const noexcept 15726: { return _M_next_resize; } 15726: 15726: void 15726: _M_reset() noexcept 15726: { _M_next_resize = 0; } 15726: 15726: void 15726: _M_reset(_State __state) noexcept 15726: { _M_next_resize = __state; } 15726: 15726: static const std::size_t _S_growth_factor = 2; 15726: 15726: float _M_max_load_factor; 15726: std::size_t _M_next_resize; 15726: }; 15726: # 736 "/usr/include/c++/13/bits/hashtable_policy.h" 3 15726: template 15726: struct _Map_base { }; 15726: 15726: 15726: template 15726: struct _Map_base<_Key, pair, _Alloc, _Select1st, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, false> 15726: { 15726: using mapped_type = _Val; 15726: }; 15726: 15726: 15726: template 15726: struct _Map_base<_Key, pair, _Alloc, _Select1st, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true> 15726: { 15726: private: 15726: using __hashtable_base = _Hashtable_base<_Key, pair, 15726: _Select1st, _Equal, _Hash, 15726: _RangeHash, _Unused, 15726: _Traits>; 15726: 15726: using __hashtable = _Hashtable<_Key, pair, _Alloc, 15726: _Select1st, _Equal, _Hash, _RangeHash, 15726: _Unused, _RehashPolicy, _Traits>; 15726: 15726: using __hash_code = typename __hashtable_base::__hash_code; 15726: 15726: public: 15726: using key_type = typename __hashtable_base::key_type; 15726: using mapped_type = _Val; 15726: 15726: mapped_type& 15726: operator[](const key_type& __k); 15726: 15726: mapped_type& 15726: operator[](key_type&& __k); 15726: 15726: 15726: 15726: mapped_type& 15726: at(const key_type& __k) 15726: { 15726: auto __ite = static_cast<__hashtable*>(this)->find(__k); 15726: if (!__ite._M_cur) 15726: __throw_out_of_range(("unordered_map::at")); 15726: return __ite->second; 15726: } 15726: 15726: const mapped_type& 15726: at(const key_type& __k) const 15726: { 15726: auto __ite = static_cast(this)->find(__k); 15726: if (!__ite._M_cur) 15726: __throw_out_of_range(("unordered_map::at")); 15726: return __ite->second; 15726: } 15726: }; 15726: 15726: template 15726: auto 15726: _Map_base<_Key, pair, _Alloc, _Select1st, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true>:: 15726: operator[](const key_type& __k) 15726: -> mapped_type& 15726: { 15726: __hashtable* __h = static_cast<__hashtable*>(this); 15726: __hash_code __code = __h->_M_hash_code(__k); 15726: std::size_t __bkt = __h->_M_bucket_index(__code); 15726: if (auto __node = __h->_M_find_node(__bkt, __k, __code)) 15726: return __node->_M_v().second; 15726: 15726: typename __hashtable::_Scoped_node __node { 15726: __h, 15726: std::piecewise_construct, 15726: std::tuple(__k), 15726: std::tuple<>() 15726: }; 15726: auto __pos 15726: = __h->_M_insert_unique_node(__bkt, __code, __node._M_node); 15726: __node._M_node = nullptr; 15726: return __pos->second; 15726: } 15726: 15726: template 15726: auto 15726: _Map_base<_Key, pair, _Alloc, _Select1st, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true>:: 15726: operator[](key_type&& __k) 15726: -> mapped_type& 15726: { 15726: __hashtable* __h = static_cast<__hashtable*>(this); 15726: __hash_code __code = __h->_M_hash_code(__k); 15726: std::size_t __bkt = __h->_M_bucket_index(__code); 15726: if (auto __node = __h->_M_find_node(__bkt, __k, __code)) 15726: return __node->_M_v().second; 15726: 15726: typename __hashtable::_Scoped_node __node { 15726: __h, 15726: std::piecewise_construct, 15726: std::forward_as_tuple(std::move(__k)), 15726: std::tuple<>() 15726: }; 15726: auto __pos 15726: = __h->_M_insert_unique_node(__bkt, __code, __node._M_node); 15726: __node._M_node = nullptr; 15726: return __pos->second; 15726: } 15726: 15726: 15726: template 15726: struct _Map_base, 15726: _Alloc, _Select1st, _Equal, _Hash, 15726: _RangeHash, _Unused, _RehashPolicy, _Traits, __uniq> 15726: : _Map_base<_Key, pair, _Alloc, _Select1st, _Equal, _Hash, 15726: _RangeHash, _Unused, _RehashPolicy, _Traits, __uniq> 15726: { }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Insert_base 15726: { 15726: protected: 15726: using __hashtable_base = _Hashtable_base<_Key, _Value, _ExtractKey, 15726: _Equal, _Hash, _RangeHash, 15726: _Unused, _Traits>; 15726: 15726: using __hashtable = _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, 15726: _Unused, _RehashPolicy, _Traits>; 15726: 15726: using __hash_cached = typename _Traits::__hash_cached; 15726: using __constant_iterators = typename _Traits::__constant_iterators; 15726: 15726: using __hashtable_alloc = _Hashtable_alloc< 15726: __alloc_rebind<_Alloc, _Hash_node<_Value, 15726: __hash_cached::value>>>; 15726: 15726: using value_type = typename __hashtable_base::value_type; 15726: using size_type = typename __hashtable_base::size_type; 15726: 15726: using __unique_keys = typename _Traits::__unique_keys; 15726: using __node_alloc_type = typename __hashtable_alloc::__node_alloc_type; 15726: using __node_gen_type = _AllocNode<__node_alloc_type>; 15726: 15726: __hashtable& 15726: _M_conjure_hashtable() 15726: { return *(static_cast<__hashtable*>(this)); } 15726: 15726: template 15726: void 15726: _M_insert_range(_InputIterator __first, _InputIterator __last, 15726: const _NodeGetter&, true_type __uks); 15726: 15726: template 15726: void 15726: _M_insert_range(_InputIterator __first, _InputIterator __last, 15726: const _NodeGetter&, false_type __uks); 15726: 15726: public: 15726: using iterator = _Node_iterator<_Value, __constant_iterators::value, 15726: __hash_cached::value>; 15726: 15726: using const_iterator = _Node_const_iterator<_Value, 15726: __constant_iterators::value, 15726: __hash_cached::value>; 15726: 15726: using __ireturn_type = __conditional_t<__unique_keys::value, 15726: std::pair, 15726: iterator>; 15726: 15726: __ireturn_type 15726: insert(const value_type& __v) 15726: { 15726: __hashtable& __h = _M_conjure_hashtable(); 15726: __node_gen_type __node_gen(__h); 15726: return __h._M_insert(__v, __node_gen, __unique_keys{}); 15726: } 15726: 15726: iterator 15726: insert(const_iterator __hint, const value_type& __v) 15726: { 15726: __hashtable& __h = _M_conjure_hashtable(); 15726: __node_gen_type __node_gen(__h); 15726: return __h._M_insert(__hint, __v, __node_gen, __unique_keys{}); 15726: } 15726: 15726: template 15726: std::pair 15726: try_emplace(const_iterator, _KType&& __k, _Args&&... __args) 15726: { 15726: __hashtable& __h = _M_conjure_hashtable(); 15726: auto __code = __h._M_hash_code(__k); 15726: std::size_t __bkt = __h._M_bucket_index(__code); 15726: if (auto __node = __h._M_find_node(__bkt, __k, __code)) 15726: return { iterator(__node), false }; 15726: 15726: typename __hashtable::_Scoped_node __node { 15726: &__h, 15726: std::piecewise_construct, 15726: std::forward_as_tuple(std::forward<_KType>(__k)), 15726: std::forward_as_tuple(std::forward<_Args>(__args)...) 15726: }; 15726: auto __it 15726: = __h._M_insert_unique_node(__bkt, __code, __node._M_node); 15726: __node._M_node = nullptr; 15726: return { __it, true }; 15726: } 15726: 15726: void 15726: insert(initializer_list __l) 15726: { this->insert(__l.begin(), __l.end()); } 15726: 15726: template 15726: void 15726: insert(_InputIterator __first, _InputIterator __last) 15726: { 15726: __hashtable& __h = _M_conjure_hashtable(); 15726: __node_gen_type __node_gen(__h); 15726: return _M_insert_range(__first, __last, __node_gen, __unique_keys{}); 15726: } 15726: }; 15726: 15726: template 15726: template 15726: void 15726: _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, 15726: _RehashPolicy, _Traits>:: 15726: _M_insert_range(_InputIterator __first, _InputIterator __last, 15726: const _NodeGetter& __node_gen, true_type __uks) 15726: { 15726: __hashtable& __h = _M_conjure_hashtable(); 15726: for (; __first != __last; ++__first) 15726: __h._M_insert(*__first, __node_gen, __uks); 15726: } 15726: 15726: template 15726: template 15726: void 15726: _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, 15726: _RehashPolicy, _Traits>:: 15726: _M_insert_range(_InputIterator __first, _InputIterator __last, 15726: const _NodeGetter& __node_gen, false_type __uks) 15726: { 15726: using __rehash_type = typename __hashtable::__rehash_type; 15726: using __rehash_state = typename __hashtable::__rehash_state; 15726: using pair_type = std::pair; 15726: 15726: size_type __n_elt = __detail::__distance_fw(__first, __last); 15726: if (__n_elt == 0) 15726: return; 15726: 15726: __hashtable& __h = _M_conjure_hashtable(); 15726: __rehash_type& __rehash = __h._M_rehash_policy; 15726: const __rehash_state& __saved_state = __rehash._M_state(); 15726: pair_type __do_rehash = __rehash._M_need_rehash(__h._M_bucket_count, 15726: __h._M_element_count, 15726: __n_elt); 15726: 15726: if (__do_rehash.first) 15726: __h._M_rehash(__do_rehash.second, __saved_state); 15726: 15726: for (; __first != __last; ++__first) 15726: __h._M_insert(*__first, __node_gen, __uks); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Insert; 15726: 15726: 15726: template 15726: struct _Insert<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, 15726: _RehashPolicy, _Traits, true> 15726: : public _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits> 15726: { 15726: using __base_type = _Insert_base<_Key, _Value, _Alloc, _ExtractKey, 15726: _Equal, _Hash, _RangeHash, _Unused, 15726: _RehashPolicy, _Traits>; 15726: 15726: using value_type = typename __base_type::value_type; 15726: using iterator = typename __base_type::iterator; 15726: using const_iterator = typename __base_type::const_iterator; 15726: using __ireturn_type = typename __base_type::__ireturn_type; 15726: 15726: using __unique_keys = typename __base_type::__unique_keys; 15726: using __hashtable = typename __base_type::__hashtable; 15726: using __node_gen_type = typename __base_type::__node_gen_type; 15726: 15726: using __base_type::insert; 15726: 15726: __ireturn_type 15726: insert(value_type&& __v) 15726: { 15726: __hashtable& __h = this->_M_conjure_hashtable(); 15726: __node_gen_type __node_gen(__h); 15726: return __h._M_insert(std::move(__v), __node_gen, __unique_keys{}); 15726: } 15726: 15726: iterator 15726: insert(const_iterator __hint, value_type&& __v) 15726: { 15726: __hashtable& __h = this->_M_conjure_hashtable(); 15726: __node_gen_type __node_gen(__h); 15726: return __h._M_insert(__hint, std::move(__v), __node_gen, 15726: __unique_keys{}); 15726: } 15726: }; 15726: 15726: 15726: template 15726: struct _Insert<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, false> 15726: : public _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits> 15726: { 15726: using __base_type = _Insert_base<_Key, _Value, _Alloc, _ExtractKey, 15726: _Equal, _Hash, _RangeHash, _Unused, 15726: _RehashPolicy, _Traits>; 15726: using value_type = typename __base_type::value_type; 15726: using iterator = typename __base_type::iterator; 15726: using const_iterator = typename __base_type::const_iterator; 15726: 15726: using __unique_keys = typename __base_type::__unique_keys; 15726: using __hashtable = typename __base_type::__hashtable; 15726: using __ireturn_type = typename __base_type::__ireturn_type; 15726: 15726: using __base_type::insert; 15726: 15726: template 15726: using __is_cons = std::is_constructible; 15726: 15726: template 15726: using _IFcons = std::enable_if<__is_cons<_Pair>::value>; 15726: 15726: template 15726: using _IFconsp = typename _IFcons<_Pair>::type; 15726: 15726: template> 15726: __ireturn_type 15726: insert(_Pair&& __v) 15726: { 15726: __hashtable& __h = this->_M_conjure_hashtable(); 15726: return __h._M_emplace(__unique_keys{}, std::forward<_Pair>(__v)); 15726: } 15726: 15726: template> 15726: iterator 15726: insert(const_iterator __hint, _Pair&& __v) 15726: { 15726: __hashtable& __h = this->_M_conjure_hashtable(); 15726: return __h._M_emplace(__hint, __unique_keys{}, 15726: std::forward<_Pair>(__v)); 15726: } 15726: }; 15726: 15726: template 15726: using __has_load_factor = typename _Policy::__has_load_factor; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template> 15726: struct _Rehash_base; 15726: 15726: 15726: template 15726: struct _Rehash_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, 15726: false_type > 15726: { 15726: }; 15726: 15726: 15726: template 15726: struct _Rehash_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, 15726: true_type > 15726: { 15726: private: 15726: using __hashtable = _Hashtable<_Key, _Value, _Alloc, _ExtractKey, 15726: _Equal, _Hash, _RangeHash, _Unused, 15726: _RehashPolicy, _Traits>; 15726: 15726: public: 15726: float 15726: max_load_factor() const noexcept 15726: { 15726: const __hashtable* __this = static_cast(this); 15726: return __this->__rehash_policy().max_load_factor(); 15726: } 15726: 15726: void 15726: max_load_factor(float __z) 15726: { 15726: __hashtable* __this = static_cast<__hashtable*>(this); 15726: __this->__rehash_policy(_RehashPolicy(__z)); 15726: } 15726: 15726: void 15726: reserve(std::size_t __n) 15726: { 15726: __hashtable* __this = static_cast<__hashtable*>(this); 15726: __this->rehash(__this->__rehash_policy()._M_bkt_for_elements(__n)); 15726: } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Hashtable_ebo_helper; 15726: 15726: 15726: template 15726: struct _Hashtable_ebo_helper<_Nm, _Tp, true> 15726: : private _Tp 15726: { 15726: _Hashtable_ebo_helper() noexcept(noexcept(_Tp())) : _Tp() { } 15726: 15726: template 15726: _Hashtable_ebo_helper(_OtherTp&& __tp) 15726: : _Tp(std::forward<_OtherTp>(__tp)) 15726: { } 15726: 15726: const _Tp& _M_cget() const { return static_cast(*this); } 15726: _Tp& _M_get() { return static_cast<_Tp&>(*this); } 15726: }; 15726: 15726: 15726: template 15726: struct _Hashtable_ebo_helper<_Nm, _Tp, false> 15726: { 15726: _Hashtable_ebo_helper() = default; 15726: 15726: template 15726: _Hashtable_ebo_helper(_OtherTp&& __tp) 15726: : _M_tp(std::forward<_OtherTp>(__tp)) 15726: { } 15726: 15726: const _Tp& _M_cget() const { return _M_tp; } 15726: _Tp& _M_get() { return _M_tp; } 15726: 15726: private: 15726: _Tp _M_tp{}; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Local_iterator_base; 15726: # 1276 "/usr/include/c++/13/bits/hashtable_policy.h" 3 15726: template 15726: struct _Hash_code_base 15726: : private _Hashtable_ebo_helper<1, _Hash> 15726: { 15726: private: 15726: using __ebo_hash = _Hashtable_ebo_helper<1, _Hash>; 15726: 15726: 15726: friend struct _Local_iterator_base<_Key, _Value, _ExtractKey, 15726: _Hash, _RangeHash, _Unused, false>; 15726: 15726: public: 15726: typedef _Hash hasher; 15726: 15726: hasher 15726: hash_function() const 15726: { return _M_hash(); } 15726: 15726: protected: 15726: typedef std::size_t __hash_code; 15726: 15726: 15726: 15726: _Hash_code_base() = default; 15726: 15726: _Hash_code_base(const _Hash& __hash) : __ebo_hash(__hash) { } 15726: 15726: __hash_code 15726: _M_hash_code(const _Key& __k) const 15726: { 15726: static_assert(__is_invocable{}, 15726: "hash function must be invocable with an argument of key type"); 15726: return _M_hash()(__k); 15726: } 15726: 15726: template 15726: __hash_code 15726: _M_hash_code_tr(const _Kt& __k) const 15726: { 15726: static_assert(__is_invocable{}, 15726: "hash function must be invocable with an argument of key type"); 15726: return _M_hash()(__k); 15726: } 15726: 15726: __hash_code 15726: _M_hash_code(const _Hash_node_value<_Value, false>& __n) const 15726: { return _M_hash_code(_ExtractKey{}(__n._M_v())); } 15726: 15726: __hash_code 15726: _M_hash_code(const _Hash_node_value<_Value, true>& __n) const 15726: { return __n._M_hash_code; } 15726: 15726: std::size_t 15726: _M_bucket_index(__hash_code __c, std::size_t __bkt_count) const 15726: { return _RangeHash{}(__c, __bkt_count); } 15726: 15726: std::size_t 15726: _M_bucket_index(const _Hash_node_value<_Value, false>& __n, 15726: std::size_t __bkt_count) const 15726: noexcept( noexcept(declval()(declval())) 15726: && noexcept(declval()((__hash_code)0, 15726: (std::size_t)0)) ) 15726: { 15726: return _RangeHash{}(_M_hash_code(_ExtractKey{}(__n._M_v())), 15726: __bkt_count); 15726: } 15726: 15726: std::size_t 15726: _M_bucket_index(const _Hash_node_value<_Value, true>& __n, 15726: std::size_t __bkt_count) const 15726: noexcept( noexcept(declval()((__hash_code)0, 15726: (std::size_t)0)) ) 15726: { return _RangeHash{}(__n._M_hash_code, __bkt_count); } 15726: 15726: void 15726: _M_store_code(_Hash_node_code_cache&, __hash_code) const 15726: { } 15726: 15726: void 15726: _M_copy_code(_Hash_node_code_cache&, 15726: const _Hash_node_code_cache&) const 15726: { } 15726: 15726: void 15726: _M_store_code(_Hash_node_code_cache& __n, __hash_code __c) const 15726: { __n._M_hash_code = __c; } 15726: 15726: void 15726: _M_copy_code(_Hash_node_code_cache& __to, 15726: const _Hash_node_code_cache& __from) const 15726: { __to._M_hash_code = __from._M_hash_code; } 15726: 15726: void 15726: _M_swap(_Hash_code_base& __x) 15726: { std::swap(__ebo_hash::_M_get(), __x.__ebo_hash::_M_get()); } 15726: 15726: const _Hash& 15726: _M_hash() const { return __ebo_hash::_M_cget(); } 15726: }; 15726: 15726: 15726: template 15726: struct _Local_iterator_base<_Key, _Value, _ExtractKey, 15726: _Hash, _RangeHash, _Unused, true> 15726: : public _Node_iterator_base<_Value, true> 15726: { 15726: protected: 15726: using __base_node_iter = _Node_iterator_base<_Value, true>; 15726: using __hash_code_base = _Hash_code_base<_Key, _Value, _ExtractKey, 15726: _Hash, _RangeHash, _Unused, true>; 15726: 15726: _Local_iterator_base() = default; 15726: _Local_iterator_base(const __hash_code_base&, 15726: _Hash_node<_Value, true>* __p, 15726: std::size_t __bkt, std::size_t __bkt_count) 15726: : __base_node_iter(__p), _M_bucket(__bkt), _M_bucket_count(__bkt_count) 15726: { } 15726: 15726: void 15726: _M_incr() 15726: { 15726: __base_node_iter::_M_incr(); 15726: if (this->_M_cur) 15726: { 15726: std::size_t __bkt 15726: = _RangeHash{}(this->_M_cur->_M_hash_code, _M_bucket_count); 15726: if (__bkt != _M_bucket) 15726: this->_M_cur = nullptr; 15726: } 15726: } 15726: 15726: std::size_t _M_bucket; 15726: std::size_t _M_bucket_count; 15726: 15726: public: 15726: std::size_t 15726: _M_get_bucket() const { return _M_bucket; } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template::value> 15726: struct _Hash_code_storage 15726: { 15726: __gnu_cxx::__aligned_buffer<_Tp> _M_storage; 15726: 15726: _Tp* 15726: _M_h() { return _M_storage._M_ptr(); } 15726: 15726: const _Tp* 15726: _M_h() const { return _M_storage._M_ptr(); } 15726: }; 15726: 15726: 15726: template 15726: struct _Hash_code_storage<_Tp, true> 15726: { 15726: static_assert( std::is_empty<_Tp>::value, "Type must be empty" ); 15726: 15726: 15726: 15726: _Tp* 15726: _M_h() { return reinterpret_cast<_Tp*>(this); } 15726: 15726: const _Tp* 15726: _M_h() const { return reinterpret_cast(this); } 15726: }; 15726: 15726: template 15726: using __hash_code_for_local_iter 15726: = _Hash_code_storage<_Hash_code_base<_Key, _Value, _ExtractKey, 15726: _Hash, _RangeHash, _Unused, false>>; 15726: 15726: 15726: template 15726: struct _Local_iterator_base<_Key, _Value, _ExtractKey, 15726: _Hash, _RangeHash, _Unused, false> 15726: : __hash_code_for_local_iter<_Key, _Value, _ExtractKey, _Hash, _RangeHash, 15726: _Unused> 15726: , _Node_iterator_base<_Value, false> 15726: { 15726: protected: 15726: using __hash_code_base = _Hash_code_base<_Key, _Value, _ExtractKey, 15726: _Hash, _RangeHash, _Unused, false>; 15726: using __node_iter_base = _Node_iterator_base<_Value, false>; 15726: 15726: _Local_iterator_base() : _M_bucket_count(-1) { } 15726: 15726: _Local_iterator_base(const __hash_code_base& __base, 15726: _Hash_node<_Value, false>* __p, 15726: std::size_t __bkt, std::size_t __bkt_count) 15726: : __node_iter_base(__p), _M_bucket(__bkt), _M_bucket_count(__bkt_count) 15726: { _M_init(__base); } 15726: 15726: ~_Local_iterator_base() 15726: { 15726: if (_M_bucket_count != size_t(-1)) 15726: _M_destroy(); 15726: } 15726: 15726: _Local_iterator_base(const _Local_iterator_base& __iter) 15726: : __node_iter_base(__iter._M_cur), _M_bucket(__iter._M_bucket) 15726: , _M_bucket_count(__iter._M_bucket_count) 15726: { 15726: if (_M_bucket_count != size_t(-1)) 15726: _M_init(*__iter._M_h()); 15726: } 15726: 15726: _Local_iterator_base& 15726: operator=(const _Local_iterator_base& __iter) 15726: { 15726: if (_M_bucket_count != -1) 15726: _M_destroy(); 15726: this->_M_cur = __iter._M_cur; 15726: _M_bucket = __iter._M_bucket; 15726: _M_bucket_count = __iter._M_bucket_count; 15726: if (_M_bucket_count != -1) 15726: _M_init(*__iter._M_h()); 15726: return *this; 15726: } 15726: 15726: void 15726: _M_incr() 15726: { 15726: __node_iter_base::_M_incr(); 15726: if (this->_M_cur) 15726: { 15726: std::size_t __bkt = this->_M_h()->_M_bucket_index(*this->_M_cur, 15726: _M_bucket_count); 15726: if (__bkt != _M_bucket) 15726: this->_M_cur = nullptr; 15726: } 15726: } 15726: 15726: std::size_t _M_bucket; 15726: std::size_t _M_bucket_count; 15726: 15726: void 15726: _M_init(const __hash_code_base& __base) 15726: { ::new(this->_M_h()) __hash_code_base(__base); } 15726: 15726: void 15726: _M_destroy() { this->_M_h()->~__hash_code_base(); } 15726: 15726: public: 15726: std::size_t 15726: _M_get_bucket() const { return _M_bucket; } 15726: }; 15726: 15726: 15726: template 15726: struct _Local_iterator 15726: : public _Local_iterator_base<_Key, _Value, _ExtractKey, 15726: _Hash, _RangeHash, _Unused, __cache> 15726: { 15726: private: 15726: using __base_type = _Local_iterator_base<_Key, _Value, _ExtractKey, 15726: _Hash, _RangeHash, _Unused, __cache>; 15726: using __hash_code_base = typename __base_type::__hash_code_base; 15726: 15726: public: 15726: using value_type = _Value; 15726: using pointer = __conditional_t<__constant_iterators, 15726: const value_type*, value_type*>; 15726: using reference = __conditional_t<__constant_iterators, 15726: const value_type&, value_type&>; 15726: using difference_type = ptrdiff_t; 15726: using iterator_category = forward_iterator_tag; 15726: 15726: _Local_iterator() = default; 15726: 15726: _Local_iterator(const __hash_code_base& __base, 15726: _Hash_node<_Value, __cache>* __n, 15726: std::size_t __bkt, std::size_t __bkt_count) 15726: : __base_type(__base, __n, __bkt, __bkt_count) 15726: { } 15726: 15726: reference 15726: operator*() const 15726: { return this->_M_cur->_M_v(); } 15726: 15726: pointer 15726: operator->() const 15726: { return this->_M_cur->_M_valptr(); } 15726: 15726: _Local_iterator& 15726: operator++() 15726: { 15726: this->_M_incr(); 15726: return *this; 15726: } 15726: 15726: _Local_iterator 15726: operator++(int) 15726: { 15726: _Local_iterator __tmp(*this); 15726: this->_M_incr(); 15726: return __tmp; 15726: } 15726: }; 15726: 15726: 15726: template 15726: struct _Local_const_iterator 15726: : public _Local_iterator_base<_Key, _Value, _ExtractKey, 15726: _Hash, _RangeHash, _Unused, __cache> 15726: { 15726: private: 15726: using __base_type = _Local_iterator_base<_Key, _Value, _ExtractKey, 15726: _Hash, _RangeHash, _Unused, __cache>; 15726: using __hash_code_base = typename __base_type::__hash_code_base; 15726: 15726: public: 15726: typedef _Value value_type; 15726: typedef const value_type* pointer; 15726: typedef const value_type& reference; 15726: typedef std::ptrdiff_t difference_type; 15726: typedef std::forward_iterator_tag iterator_category; 15726: 15726: _Local_const_iterator() = default; 15726: 15726: _Local_const_iterator(const __hash_code_base& __base, 15726: _Hash_node<_Value, __cache>* __n, 15726: std::size_t __bkt, std::size_t __bkt_count) 15726: : __base_type(__base, __n, __bkt, __bkt_count) 15726: { } 15726: 15726: _Local_const_iterator(const _Local_iterator<_Key, _Value, _ExtractKey, 15726: _Hash, _RangeHash, _Unused, 15726: __constant_iterators, 15726: __cache>& __x) 15726: : __base_type(__x) 15726: { } 15726: 15726: reference 15726: operator*() const 15726: { return this->_M_cur->_M_v(); } 15726: 15726: pointer 15726: operator->() const 15726: { return this->_M_cur->_M_valptr(); } 15726: 15726: _Local_const_iterator& 15726: operator++() 15726: { 15726: this->_M_incr(); 15726: return *this; 15726: } 15726: 15726: _Local_const_iterator 15726: operator++(int) 15726: { 15726: _Local_const_iterator __tmp(*this); 15726: this->_M_incr(); 15726: return __tmp; 15726: } 15726: }; 15726: # 1655 "/usr/include/c++/13/bits/hashtable_policy.h" 3 15726: template 15726: struct _Hashtable_base 15726: : public _Hash_code_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash, 15726: _Unused, _Traits::__hash_cached::value>, 15726: private _Hashtable_ebo_helper<0, _Equal> 15726: { 15726: public: 15726: typedef _Key key_type; 15726: typedef _Value value_type; 15726: typedef _Equal key_equal; 15726: typedef std::size_t size_type; 15726: typedef std::ptrdiff_t difference_type; 15726: 15726: using __traits_type = _Traits; 15726: using __hash_cached = typename __traits_type::__hash_cached; 15726: 15726: using __hash_code_base = _Hash_code_base<_Key, _Value, _ExtractKey, 15726: _Hash, _RangeHash, _Unused, 15726: __hash_cached::value>; 15726: 15726: using __hash_code = typename __hash_code_base::__hash_code; 15726: 15726: private: 15726: using _EqualEBO = _Hashtable_ebo_helper<0, _Equal>; 15726: 15726: static bool 15726: _S_equals(__hash_code, const _Hash_node_code_cache&) 15726: { return true; } 15726: 15726: static bool 15726: _S_node_equals(const _Hash_node_code_cache&, 15726: const _Hash_node_code_cache&) 15726: { return true; } 15726: 15726: static bool 15726: _S_equals(__hash_code __c, const _Hash_node_code_cache& __n) 15726: { return __c == __n._M_hash_code; } 15726: 15726: static bool 15726: _S_node_equals(const _Hash_node_code_cache& __lhn, 15726: const _Hash_node_code_cache& __rhn) 15726: { return __lhn._M_hash_code == __rhn._M_hash_code; } 15726: 15726: protected: 15726: _Hashtable_base() = default; 15726: 15726: _Hashtable_base(const _Hash& __hash, const _Equal& __eq) 15726: : __hash_code_base(__hash), _EqualEBO(__eq) 15726: { } 15726: 15726: bool 15726: _M_key_equals(const _Key& __k, 15726: const _Hash_node_value<_Value, 15726: __hash_cached::value>& __n) const 15726: { 15726: static_assert(__is_invocable{}, 15726: "key equality predicate must be invocable with two arguments of " 15726: "key type"); 15726: return _M_eq()(__k, _ExtractKey{}(__n._M_v())); 15726: } 15726: 15726: template 15726: bool 15726: _M_key_equals_tr(const _Kt& __k, 15726: const _Hash_node_value<_Value, 15726: __hash_cached::value>& __n) const 15726: { 15726: static_assert( 15726: __is_invocable{}, 15726: "key equality predicate must be invocable with two arguments of " 15726: "key type"); 15726: return _M_eq()(__k, _ExtractKey{}(__n._M_v())); 15726: } 15726: 15726: bool 15726: _M_equals(const _Key& __k, __hash_code __c, 15726: const _Hash_node_value<_Value, __hash_cached::value>& __n) const 15726: { return _S_equals(__c, __n) && _M_key_equals(__k, __n); } 15726: 15726: template 15726: bool 15726: _M_equals_tr(const _Kt& __k, __hash_code __c, 15726: const _Hash_node_value<_Value, 15726: __hash_cached::value>& __n) const 15726: { return _S_equals(__c, __n) && _M_key_equals_tr(__k, __n); } 15726: 15726: bool 15726: _M_node_equals( 15726: const _Hash_node_value<_Value, __hash_cached::value>& __lhn, 15726: const _Hash_node_value<_Value, __hash_cached::value>& __rhn) const 15726: { 15726: return _S_node_equals(__lhn, __rhn) 15726: && _M_key_equals(_ExtractKey{}(__lhn._M_v()), __rhn); 15726: } 15726: 15726: void 15726: _M_swap(_Hashtable_base& __x) 15726: { 15726: __hash_code_base::_M_swap(__x); 15726: std::swap(_EqualEBO::_M_get(), __x._EqualEBO::_M_get()); 15726: } 15726: 15726: const _Equal& 15726: _M_eq() const { return _EqualEBO::_M_cget(); } 15726: }; 15726: # 1771 "/usr/include/c++/13/bits/hashtable_policy.h" 3 15726: template 15726: struct _Equality; 15726: 15726: 15726: template 15726: struct _Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true> 15726: { 15726: using __hashtable = _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, 15726: _RehashPolicy, _Traits>; 15726: 15726: bool 15726: _M_equal(const __hashtable&) const; 15726: }; 15726: 15726: template 15726: bool 15726: _Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true>:: 15726: _M_equal(const __hashtable& __other) const 15726: { 15726: using __node_type = typename __hashtable::__node_type; 15726: const __hashtable* __this = static_cast(this); 15726: if (__this->size() != __other.size()) 15726: return false; 15726: 15726: for (auto __itx = __this->begin(); __itx != __this->end(); ++__itx) 15726: { 15726: std::size_t __ybkt = __other._M_bucket_index(*__itx._M_cur); 15726: auto __prev_n = __other._M_buckets[__ybkt]; 15726: if (!__prev_n) 15726: return false; 15726: 15726: for (__node_type* __n = static_cast<__node_type*>(__prev_n->_M_nxt);; 15726: __n = __n->_M_next()) 15726: { 15726: if (__n->_M_v() == *__itx) 15726: break; 15726: 15726: if (!__n->_M_nxt 15726: || __other._M_bucket_index(*__n->_M_next()) != __ybkt) 15726: return false; 15726: } 15726: } 15726: 15726: return true; 15726: } 15726: 15726: 15726: template 15726: struct _Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, false> 15726: { 15726: using __hashtable = _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, 15726: _RehashPolicy, _Traits>; 15726: 15726: bool 15726: _M_equal(const __hashtable&) const; 15726: }; 15726: 15726: template 15726: bool 15726: _Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, false>:: 15726: _M_equal(const __hashtable& __other) const 15726: { 15726: using __node_type = typename __hashtable::__node_type; 15726: const __hashtable* __this = static_cast(this); 15726: if (__this->size() != __other.size()) 15726: return false; 15726: 15726: for (auto __itx = __this->begin(); __itx != __this->end();) 15726: { 15726: std::size_t __x_count = 1; 15726: auto __itx_end = __itx; 15726: for (++__itx_end; __itx_end != __this->end() 15726: && __this->key_eq()(_ExtractKey{}(*__itx), 15726: _ExtractKey{}(*__itx_end)); 15726: ++__itx_end) 15726: ++__x_count; 15726: 15726: std::size_t __ybkt = __other._M_bucket_index(*__itx._M_cur); 15726: auto __y_prev_n = __other._M_buckets[__ybkt]; 15726: if (!__y_prev_n) 15726: return false; 15726: 15726: __node_type* __y_n = static_cast<__node_type*>(__y_prev_n->_M_nxt); 15726: for (;;) 15726: { 15726: if (__this->key_eq()(_ExtractKey{}(__y_n->_M_v()), 15726: _ExtractKey{}(*__itx))) 15726: break; 15726: 15726: auto __y_ref_n = __y_n; 15726: for (__y_n = __y_n->_M_next(); __y_n; __y_n = __y_n->_M_next()) 15726: if (!__other._M_node_equals(*__y_ref_n, *__y_n)) 15726: break; 15726: 15726: if (!__y_n || __other._M_bucket_index(*__y_n) != __ybkt) 15726: return false; 15726: } 15726: 15726: typename __hashtable::const_iterator __ity(__y_n); 15726: for (auto __ity_end = __ity; __ity_end != __other.end(); ++__ity_end) 15726: if (--__x_count == 0) 15726: break; 15726: 15726: if (__x_count != 0) 15726: return false; 15726: 15726: if (!std::is_permutation(__itx, __itx_end, __ity)) 15726: return false; 15726: 15726: __itx = __itx_end; 15726: } 15726: return true; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Hashtable_alloc : private _Hashtable_ebo_helper<0, _NodeAlloc> 15726: { 15726: private: 15726: using __ebo_node_alloc = _Hashtable_ebo_helper<0, _NodeAlloc>; 15726: 15726: template 15726: struct __get_value_type; 15726: template 15726: struct __get_value_type<_Hash_node<_Val, _Cache_hash_code>> 15726: { using type = _Val; }; 15726: 15726: public: 15726: using __node_type = typename _NodeAlloc::value_type; 15726: using __node_alloc_type = _NodeAlloc; 15726: 15726: using __node_alloc_traits = __gnu_cxx::__alloc_traits<__node_alloc_type>; 15726: 15726: using __value_alloc_traits = typename __node_alloc_traits::template 15726: rebind_traits::type>; 15726: 15726: using __node_ptr = __node_type*; 15726: using __node_base = _Hash_node_base; 15726: using __node_base_ptr = __node_base*; 15726: using __buckets_alloc_type = 15726: __alloc_rebind<__node_alloc_type, __node_base_ptr>; 15726: using __buckets_alloc_traits = std::allocator_traits<__buckets_alloc_type>; 15726: using __buckets_ptr = __node_base_ptr*; 15726: 15726: _Hashtable_alloc() = default; 15726: _Hashtable_alloc(const _Hashtable_alloc&) = default; 15726: _Hashtable_alloc(_Hashtable_alloc&&) = default; 15726: 15726: template 15726: _Hashtable_alloc(_Alloc&& __a) 15726: : __ebo_node_alloc(std::forward<_Alloc>(__a)) 15726: { } 15726: 15726: __node_alloc_type& 15726: _M_node_allocator() 15726: { return __ebo_node_alloc::_M_get(); } 15726: 15726: const __node_alloc_type& 15726: _M_node_allocator() const 15726: { return __ebo_node_alloc::_M_cget(); } 15726: 15726: 15726: template 15726: __node_ptr 15726: _M_allocate_node(_Args&&... __args); 15726: 15726: 15726: void 15726: _M_deallocate_node(__node_ptr __n); 15726: 15726: 15726: void 15726: _M_deallocate_node_ptr(__node_ptr __n); 15726: 15726: 15726: 15726: void 15726: _M_deallocate_nodes(__node_ptr __n); 15726: 15726: __buckets_ptr 15726: _M_allocate_buckets(std::size_t __bkt_count); 15726: 15726: void 15726: _M_deallocate_buckets(__buckets_ptr, std::size_t __bkt_count); 15726: }; 15726: 15726: 15726: 15726: template 15726: template 15726: auto 15726: _Hashtable_alloc<_NodeAlloc>::_M_allocate_node(_Args&&... __args) 15726: -> __node_ptr 15726: { 15726: auto __nptr = __node_alloc_traits::allocate(_M_node_allocator(), 1); 15726: __node_ptr __n = std::__to_address(__nptr); 15726: try 15726: { 15726: ::new ((void*)__n) __node_type; 15726: __node_alloc_traits::construct(_M_node_allocator(), 15726: __n->_M_valptr(), 15726: std::forward<_Args>(__args)...); 15726: return __n; 15726: } 15726: catch(...) 15726: { 15726: __node_alloc_traits::deallocate(_M_node_allocator(), __nptr, 1); 15726: throw; 15726: } 15726: } 15726: 15726: template 15726: void 15726: _Hashtable_alloc<_NodeAlloc>::_M_deallocate_node(__node_ptr __n) 15726: { 15726: __node_alloc_traits::destroy(_M_node_allocator(), __n->_M_valptr()); 15726: _M_deallocate_node_ptr(__n); 15726: } 15726: 15726: template 15726: void 15726: _Hashtable_alloc<_NodeAlloc>::_M_deallocate_node_ptr(__node_ptr __n) 15726: { 15726: typedef typename __node_alloc_traits::pointer _Ptr; 15726: auto __ptr = std::pointer_traits<_Ptr>::pointer_to(*__n); 15726: __n->~__node_type(); 15726: __node_alloc_traits::deallocate(_M_node_allocator(), __ptr, 1); 15726: } 15726: 15726: template 15726: void 15726: _Hashtable_alloc<_NodeAlloc>::_M_deallocate_nodes(__node_ptr __n) 15726: { 15726: while (__n) 15726: { 15726: __node_ptr __tmp = __n; 15726: __n = __n->_M_next(); 15726: _M_deallocate_node(__tmp); 15726: } 15726: } 15726: 15726: template 15726: auto 15726: _Hashtable_alloc<_NodeAlloc>::_M_allocate_buckets(std::size_t __bkt_count) 15726: -> __buckets_ptr 15726: { 15726: __buckets_alloc_type __alloc(_M_node_allocator()); 15726: 15726: auto __ptr = __buckets_alloc_traits::allocate(__alloc, __bkt_count); 15726: __buckets_ptr __p = std::__to_address(__ptr); 15726: __builtin_memset(__p, 0, __bkt_count * sizeof(__node_base_ptr)); 15726: return __p; 15726: } 15726: 15726: template 15726: void 15726: _Hashtable_alloc<_NodeAlloc>:: 15726: _M_deallocate_buckets(__buckets_ptr __bkts, 15726: std::size_t __bkt_count) 15726: { 15726: typedef typename __buckets_alloc_traits::pointer _Ptr; 15726: auto __ptr = std::pointer_traits<_Ptr>::pointer_to(*__bkts); 15726: __buckets_alloc_type __alloc(_M_node_allocator()); 15726: __buckets_alloc_traits::deallocate(__alloc, __ptr, __bkt_count); 15726: } 15726: 15726: 15726: } 15726: 15726: 15726: } 15726: # 36 "/usr/include/c++/13/bits/hashtable.h" 2 3 15726: # 1 "/usr/include/c++/13/bits/enable_special_members.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/enable_special_members.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/enable_special_members.h" 3 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: struct _Enable_default_constructor_tag 15726: { 15726: explicit constexpr _Enable_default_constructor_tag() = default; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Enable_default_constructor 15726: { 15726: constexpr _Enable_default_constructor() noexcept = default; 15726: constexpr _Enable_default_constructor(_Enable_default_constructor const&) 15726: noexcept = default; 15726: constexpr _Enable_default_constructor(_Enable_default_constructor&&) 15726: noexcept = default; 15726: _Enable_default_constructor& 15726: operator=(_Enable_default_constructor const&) noexcept = default; 15726: _Enable_default_constructor& 15726: operator=(_Enable_default_constructor&&) noexcept = default; 15726: 15726: 15726: constexpr explicit 15726: _Enable_default_constructor(_Enable_default_constructor_tag) { } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Enable_destructor { }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Enable_copy_move { }; 15726: # 96 "/usr/include/c++/13/bits/enable_special_members.h" 3 15726: template 15726: struct _Enable_special_members 15726: : private _Enable_default_constructor<_Default, _Tag>, 15726: private _Enable_destructor<_Destructor, _Tag>, 15726: private _Enable_copy_move<_Copy, _CopyAssignment, 15726: _Move, _MoveAssignment, 15726: _Tag> 15726: { }; 15726: 15726: 15726: 15726: template 15726: struct _Enable_default_constructor 15726: { 15726: constexpr _Enable_default_constructor() noexcept = delete; 15726: constexpr _Enable_default_constructor(_Enable_default_constructor const&) 15726: noexcept = default; 15726: constexpr _Enable_default_constructor(_Enable_default_constructor&&) 15726: noexcept = default; 15726: _Enable_default_constructor& 15726: operator=(_Enable_default_constructor const&) noexcept = default; 15726: _Enable_default_constructor& 15726: operator=(_Enable_default_constructor&&) noexcept = default; 15726: 15726: 15726: constexpr explicit 15726: _Enable_default_constructor(_Enable_default_constructor_tag) { } 15726: }; 15726: 15726: template 15726: struct _Enable_destructor 15726: { ~_Enable_destructor() noexcept = delete; }; 15726: 15726: template 15726: struct _Enable_copy_move 15726: { 15726: constexpr _Enable_copy_move() noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; 15726: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move const&) noexcept = default; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move&&) noexcept = default; 15726: }; 15726: 15726: template 15726: struct _Enable_copy_move 15726: { 15726: constexpr _Enable_copy_move() noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move const&) noexcept = delete; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move&&) noexcept = default; 15726: }; 15726: 15726: template 15726: struct _Enable_copy_move 15726: { 15726: constexpr _Enable_copy_move() noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; 15726: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move const&) noexcept = delete; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move&&) noexcept = default; 15726: }; 15726: 15726: template 15726: struct _Enable_copy_move 15726: { 15726: constexpr _Enable_copy_move() noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move const&) noexcept = default; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move&&) noexcept = default; 15726: }; 15726: 15726: template 15726: struct _Enable_copy_move 15726: { 15726: constexpr _Enable_copy_move() noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; 15726: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move const&) noexcept = default; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move&&) noexcept = default; 15726: }; 15726: 15726: template 15726: struct _Enable_copy_move 15726: { 15726: constexpr _Enable_copy_move() noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move const&) noexcept = delete; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move&&) noexcept = default; 15726: }; 15726: 15726: template 15726: struct _Enable_copy_move 15726: { 15726: constexpr _Enable_copy_move() noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; 15726: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move const&) noexcept = delete; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move&&) noexcept = default; 15726: }; 15726: 15726: template 15726: struct _Enable_copy_move 15726: { 15726: constexpr _Enable_copy_move() noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move const&) noexcept = default; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move&&) noexcept = delete; 15726: }; 15726: 15726: template 15726: struct _Enable_copy_move 15726: { 15726: constexpr _Enable_copy_move() noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; 15726: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move const&) noexcept = default; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move&&) noexcept = delete; 15726: }; 15726: 15726: template 15726: struct _Enable_copy_move 15726: { 15726: constexpr _Enable_copy_move() noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move const&) noexcept = delete; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move&&) noexcept = delete; 15726: }; 15726: 15726: template 15726: struct _Enable_copy_move 15726: { 15726: constexpr _Enable_copy_move() noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; 15726: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move const&) noexcept = delete; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move&&) noexcept = delete; 15726: }; 15726: 15726: template 15726: struct _Enable_copy_move 15726: { 15726: constexpr _Enable_copy_move() noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move const&) noexcept = default; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move&&) noexcept = delete; 15726: }; 15726: 15726: template 15726: struct _Enable_copy_move 15726: { 15726: constexpr _Enable_copy_move() noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; 15726: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move const&) noexcept = default; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move&&) noexcept = delete; 15726: }; 15726: 15726: template 15726: struct _Enable_copy_move 15726: { 15726: constexpr _Enable_copy_move() noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move const&) noexcept = delete; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move&&) noexcept = delete; 15726: }; 15726: 15726: template 15726: struct _Enable_copy_move 15726: { 15726: constexpr _Enable_copy_move() noexcept = default; 15726: constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete; 15726: constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move const&) noexcept = delete; 15726: _Enable_copy_move& 15726: operator=(_Enable_copy_move&&) noexcept = delete; 15726: }; 15726: 15726: 15726: 15726: } 15726: # 37 "/usr/include/c++/13/bits/hashtable.h" 2 3 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/node_handle.h" 1 3 15726: # 34 "/usr/include/c++/13/bits/node_handle.h" 3 15726: 15726: # 35 "/usr/include/c++/13/bits/node_handle.h" 3 15726: # 43 "/usr/include/c++/13/bits/node_handle.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 63 "/usr/include/c++/13/bits/node_handle.h" 3 15726: template 15726: class _Node_handle_common 15726: { 15726: using _AllocTraits = allocator_traits<_NodeAlloc>; 15726: 15726: public: 15726: using allocator_type = __alloc_rebind<_NodeAlloc, _Val>; 15726: 15726: allocator_type 15726: get_allocator() const noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(!this->empty())) __builtin_unreachable(); } while (false); 15726: return allocator_type(_M_alloc._M_alloc); 15726: } 15726: 15726: explicit operator bool() const noexcept { return _M_ptr != nullptr; } 15726: 15726: [[nodiscard]] bool empty() const noexcept { return _M_ptr == nullptr; } 15726: 15726: 15726: protected: 15726: constexpr _Node_handle_common() noexcept : _M_ptr() { } 15726: 15726: ~_Node_handle_common() 15726: { 15726: if (!empty()) 15726: _M_reset(); 15726: } 15726: 15726: _Node_handle_common(_Node_handle_common&& __nh) noexcept 15726: : _M_ptr(__nh._M_ptr) 15726: { 15726: if (_M_ptr) 15726: _M_move(std::move(__nh)); 15726: } 15726: 15726: _Node_handle_common& 15726: operator=(_Node_handle_common&& __nh) noexcept 15726: { 15726: if (empty()) 15726: { 15726: if (!__nh.empty()) 15726: _M_move(std::move(__nh)); 15726: } 15726: else if (__nh.empty()) 15726: _M_reset(); 15726: else 15726: { 15726: 15726: _AllocTraits::destroy(*_M_alloc, _M_ptr->_M_valptr()); 15726: _AllocTraits::deallocate(*_M_alloc, _M_ptr, 1); 15726: 15726: _M_alloc = __nh._M_alloc.release(); 15726: _M_ptr = __nh._M_ptr; 15726: __nh._M_ptr = nullptr; 15726: } 15726: return *this; 15726: } 15726: 15726: _Node_handle_common(typename _AllocTraits::pointer __ptr, 15726: const _NodeAlloc& __alloc) 15726: : _M_ptr(__ptr), _M_alloc(__alloc) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__ptr != nullptr)) __builtin_unreachable(); } while (false); 15726: } 15726: 15726: void 15726: _M_swap(_Node_handle_common& __nh) noexcept 15726: { 15726: if (empty()) 15726: { 15726: if (!__nh.empty()) 15726: _M_move(std::move(__nh)); 15726: } 15726: else if (__nh.empty()) 15726: __nh._M_move(std::move(*this)); 15726: else 15726: { 15726: using std::swap; 15726: swap(_M_ptr, __nh._M_ptr); 15726: _M_alloc.swap(__nh._M_alloc); 15726: } 15726: } 15726: 15726: private: 15726: 15726: 15726: 15726: void 15726: _M_move(_Node_handle_common&& __nh) noexcept 15726: { 15726: ::new (std::__addressof(_M_alloc)) _NodeAlloc(__nh._M_alloc.release()); 15726: _M_ptr = __nh._M_ptr; 15726: __nh._M_ptr = nullptr; 15726: } 15726: 15726: 15726: 15726: 15726: void 15726: _M_reset() noexcept 15726: { 15726: _NodeAlloc __alloc = _M_alloc.release(); 15726: _AllocTraits::destroy(__alloc, _M_ptr->_M_valptr()); 15726: _AllocTraits::deallocate(__alloc, _M_ptr, 1); 15726: _M_ptr = nullptr; 15726: } 15726: 15726: 15726: 15726: 15726: void 15726: release() noexcept 15726: { 15726: _M_alloc.release(); 15726: _M_ptr = nullptr; 15726: } 15726: 15726: protected: 15726: typename _AllocTraits::pointer _M_ptr; 15726: 15726: private: 15726: 15726: 15726: union _Optional_alloc 15726: { 15726: _Optional_alloc() { } 15726: ~_Optional_alloc() { } 15726: 15726: _Optional_alloc(_Optional_alloc&&) = delete; 15726: _Optional_alloc& operator=(_Optional_alloc&&) = delete; 15726: 15726: _Optional_alloc(const _NodeAlloc& __alloc) noexcept 15726: : _M_alloc(__alloc) 15726: { } 15726: 15726: 15726: void 15726: operator=(_NodeAlloc&& __alloc) noexcept 15726: { 15726: using _ATr = _AllocTraits; 15726: if constexpr (_ATr::propagate_on_container_move_assignment::value) 15726: _M_alloc = std::move(__alloc); 15726: else if constexpr (!_AllocTraits::is_always_equal::value) 15726: do { if (std::__is_constant_evaluated() && !bool(_M_alloc == __alloc)) __builtin_unreachable(); } while (false); 15726: } 15726: 15726: 15726: void 15726: swap(_Optional_alloc& __other) noexcept 15726: { 15726: using std::swap; 15726: if constexpr (_AllocTraits::propagate_on_container_swap::value) 15726: swap(_M_alloc, __other._M_alloc); 15726: else if constexpr (!_AllocTraits::is_always_equal::value) 15726: do { if (std::__is_constant_evaluated() && !bool(_M_alloc == __other._M_alloc)) __builtin_unreachable(); } while (false); 15726: } 15726: 15726: 15726: _NodeAlloc& operator*() noexcept { return _M_alloc; } 15726: 15726: 15726: _NodeAlloc release() noexcept 15726: { 15726: _NodeAlloc __tmp = std::move(_M_alloc); 15726: _M_alloc.~_NodeAlloc(); 15726: return __tmp; 15726: } 15726: 15726: [[__no_unique_address__]] _NodeAlloc _M_alloc; 15726: }; 15726: 15726: [[__no_unique_address__]] _Optional_alloc _M_alloc; 15726: 15726: template 15726: friend class _Rb_tree; 15726: 15726: template 15726: friend class _Hashtable; 15726: 15726: 15726: }; 15726: 15726: 15726: template 15726: class _Node_handle : public _Node_handle_common<_Value, _NodeAlloc> 15726: { 15726: public: 15726: constexpr _Node_handle() noexcept = default; 15726: ~_Node_handle() = default; 15726: _Node_handle(_Node_handle&&) noexcept = default; 15726: 15726: _Node_handle& 15726: operator=(_Node_handle&&) noexcept = default; 15726: 15726: using key_type = _Key; 15726: using mapped_type = typename _Value::second_type; 15726: 15726: key_type& 15726: key() const noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(!this->empty())) __builtin_unreachable(); } while (false); 15726: return *_M_pkey; 15726: } 15726: 15726: mapped_type& 15726: mapped() const noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(!this->empty())) __builtin_unreachable(); } while (false); 15726: return *_M_pmapped; 15726: } 15726: 15726: void 15726: swap(_Node_handle& __nh) noexcept 15726: { 15726: this->_M_swap(__nh); 15726: using std::swap; 15726: swap(_M_pkey, __nh._M_pkey); 15726: swap(_M_pmapped, __nh._M_pmapped); 15726: } 15726: 15726: friend void 15726: swap(_Node_handle& __x, _Node_handle& __y) 15726: noexcept(noexcept(__x.swap(__y))) 15726: { __x.swap(__y); } 15726: 15726: private: 15726: using _AllocTraits = allocator_traits<_NodeAlloc>; 15726: 15726: _Node_handle(typename _AllocTraits::pointer __ptr, 15726: const _NodeAlloc& __alloc) 15726: : _Node_handle_common<_Value, _NodeAlloc>(__ptr, __alloc) 15726: { 15726: if (__ptr) 15726: { 15726: auto& __key = const_cast<_Key&>(__ptr->_M_valptr()->first); 15726: _M_pkey = _S_pointer_to(__key); 15726: _M_pmapped = _S_pointer_to(__ptr->_M_valptr()->second); 15726: } 15726: else 15726: { 15726: _M_pkey = nullptr; 15726: _M_pmapped = nullptr; 15726: } 15726: } 15726: 15726: template 15726: using __pointer 15726: = __ptr_rebind>; 15726: 15726: __pointer<_Key> _M_pkey = nullptr; 15726: __pointer _M_pmapped = nullptr; 15726: 15726: template 15726: __pointer<_Tp> 15726: _S_pointer_to(_Tp& __obj) 15726: { return pointer_traits<__pointer<_Tp>>::pointer_to(__obj); } 15726: 15726: const key_type& 15726: _M_key() const noexcept { return key(); } 15726: 15726: template 15726: friend class _Rb_tree; 15726: 15726: template 15726: friend class _Hashtable; 15726: }; 15726: 15726: 15726: template 15726: class _Node_handle<_Value, _Value, _NodeAlloc> 15726: : public _Node_handle_common<_Value, _NodeAlloc> 15726: { 15726: public: 15726: constexpr _Node_handle() noexcept = default; 15726: ~_Node_handle() = default; 15726: _Node_handle(_Node_handle&&) noexcept = default; 15726: 15726: _Node_handle& 15726: operator=(_Node_handle&&) noexcept = default; 15726: 15726: using value_type = _Value; 15726: 15726: value_type& 15726: value() const noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(!this->empty())) __builtin_unreachable(); } while (false); 15726: return *this->_M_ptr->_M_valptr(); 15726: } 15726: 15726: void 15726: swap(_Node_handle& __nh) noexcept 15726: { this->_M_swap(__nh); } 15726: 15726: friend void 15726: swap(_Node_handle& __x, _Node_handle& __y) 15726: noexcept(noexcept(__x.swap(__y))) 15726: { __x.swap(__y); } 15726: 15726: private: 15726: using _AllocTraits = allocator_traits<_NodeAlloc>; 15726: 15726: _Node_handle(typename _AllocTraits::pointer __ptr, 15726: const _NodeAlloc& __alloc) 15726: : _Node_handle_common<_Value, _NodeAlloc>(__ptr, __alloc) { } 15726: 15726: const value_type& 15726: _M_key() const noexcept { return value(); } 15726: 15726: template 15726: friend class _Rb_tree; 15726: 15726: template 15726: friend class _Hashtable; 15726: }; 15726: 15726: 15726: template 15726: struct _Node_insert_return 15726: { 15726: _Iterator position = _Iterator(); 15726: bool inserted = false; 15726: _NodeHandle node; 15726: }; 15726: 15726: 15726: 15726: 15726: } 15726: # 40 "/usr/include/c++/13/bits/hashtable.h" 2 3 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: template 15726: using __cache_default 15726: = __not_<__and_< 15726: __is_fast_hash<_Hash>, 15726: 15726: __is_nothrow_invocable>>; 15726: 15726: 15726: 15726: 15726: template 15726: using _Hashtable_enable_default_ctor 15726: = _Enable_default_constructor<__and_, 15726: is_default_constructible<_Hash>, 15726: is_default_constructible<_Allocator>>{}, 15726: __detail::_Hash_node_base>; 15726: # 177 "/usr/include/c++/13/bits/hashtable.h" 3 15726: template 15726: class _Hashtable 15726: : public __detail::_Hashtable_base<_Key, _Value, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _Traits>, 15726: public __detail::_Map_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, 15726: _RehashPolicy, _Traits>, 15726: public __detail::_Insert<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, 15726: _RehashPolicy, _Traits>, 15726: public __detail::_Rehash_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, 15726: _RehashPolicy, _Traits>, 15726: public __detail::_Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, 15726: _RehashPolicy, _Traits>, 15726: private __detail::_Hashtable_alloc< 15726: __alloc_rebind<_Alloc, 15726: __detail::_Hash_node<_Value, 15726: _Traits::__hash_cached::value>>>, 15726: private _Hashtable_enable_default_ctor<_Equal, _Hash, _Alloc> 15726: { 15726: static_assert(is_same::type, _Value>::value, 15726: "unordered container must have a non-const, non-volatile value_type"); 15726: 15726: 15726: 15726: 15726: 15726: using __traits_type = _Traits; 15726: using __hash_cached = typename __traits_type::__hash_cached; 15726: using __constant_iterators = typename __traits_type::__constant_iterators; 15726: using __node_type = __detail::_Hash_node<_Value, __hash_cached::value>; 15726: using __node_alloc_type = __alloc_rebind<_Alloc, __node_type>; 15726: 15726: using __hashtable_alloc = __detail::_Hashtable_alloc<__node_alloc_type>; 15726: 15726: using __node_value_type = 15726: __detail::_Hash_node_value<_Value, __hash_cached::value>; 15726: using __node_ptr = typename __hashtable_alloc::__node_ptr; 15726: using __value_alloc_traits = 15726: typename __hashtable_alloc::__value_alloc_traits; 15726: using __node_alloc_traits = 15726: typename __hashtable_alloc::__node_alloc_traits; 15726: using __node_base = typename __hashtable_alloc::__node_base; 15726: using __node_base_ptr = typename __hashtable_alloc::__node_base_ptr; 15726: using __buckets_ptr = typename __hashtable_alloc::__buckets_ptr; 15726: 15726: using __insert_base = __detail::_Insert<_Key, _Value, _Alloc, _ExtractKey, 15726: _Equal, _Hash, 15726: _RangeHash, _Unused, 15726: _RehashPolicy, _Traits>; 15726: using __enable_default_ctor 15726: = _Hashtable_enable_default_ctor<_Equal, _Hash, _Alloc>; 15726: 15726: public: 15726: typedef _Key key_type; 15726: typedef _Value value_type; 15726: typedef _Alloc allocator_type; 15726: typedef _Equal key_equal; 15726: 15726: 15726: 15726: typedef typename __value_alloc_traits::pointer pointer; 15726: typedef typename __value_alloc_traits::const_pointer const_pointer; 15726: typedef value_type& reference; 15726: typedef const value_type& const_reference; 15726: 15726: using iterator = typename __insert_base::iterator; 15726: 15726: using const_iterator = typename __insert_base::const_iterator; 15726: 15726: using local_iterator = __detail::_Local_iterator; 15726: 15726: using const_local_iterator = __detail::_Local_const_iterator< 15726: key_type, _Value, 15726: _ExtractKey, _Hash, _RangeHash, _Unused, 15726: __constant_iterators::value, __hash_cached::value>; 15726: 15726: private: 15726: using __rehash_type = _RehashPolicy; 15726: using __rehash_state = typename __rehash_type::_State; 15726: 15726: using __unique_keys = typename __traits_type::__unique_keys; 15726: 15726: using __hashtable_base = __detail:: 15726: _Hashtable_base<_Key, _Value, _ExtractKey, 15726: _Equal, _Hash, _RangeHash, _Unused, _Traits>; 15726: 15726: using __hash_code_base = typename __hashtable_base::__hash_code_base; 15726: using __hash_code = typename __hashtable_base::__hash_code; 15726: using __ireturn_type = typename __insert_base::__ireturn_type; 15726: 15726: using __map_base = __detail::_Map_base<_Key, _Value, _Alloc, _ExtractKey, 15726: _Equal, _Hash, _RangeHash, _Unused, 15726: _RehashPolicy, _Traits>; 15726: 15726: using __rehash_base = __detail::_Rehash_base<_Key, _Value, _Alloc, 15726: _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, 15726: _RehashPolicy, _Traits>; 15726: 15726: using __eq_base = __detail::_Equality<_Key, _Value, _Alloc, _ExtractKey, 15726: _Equal, _Hash, _RangeHash, _Unused, 15726: _RehashPolicy, _Traits>; 15726: 15726: using __reuse_or_alloc_node_gen_t = 15726: __detail::_ReuseOrAllocNode<__node_alloc_type>; 15726: using __alloc_node_gen_t = 15726: __detail::_AllocNode<__node_alloc_type>; 15726: using __node_builder_t = 15726: __detail::_NodeBuilder<_ExtractKey>; 15726: 15726: 15726: struct _Scoped_node 15726: { 15726: 15726: _Scoped_node(__node_ptr __n, __hashtable_alloc* __h) 15726: : _M_h(__h), _M_node(__n) { } 15726: 15726: 15726: template 15726: _Scoped_node(__hashtable_alloc* __h, _Args&&... __args) 15726: : _M_h(__h), 15726: _M_node(__h->_M_allocate_node(std::forward<_Args>(__args)...)) 15726: { } 15726: 15726: 15726: ~_Scoped_node() { if (_M_node) _M_h->_M_deallocate_node(_M_node); }; 15726: 15726: _Scoped_node(const _Scoped_node&) = delete; 15726: _Scoped_node& operator=(const _Scoped_node&) = delete; 15726: 15726: __hashtable_alloc* _M_h; 15726: __node_ptr _M_node; 15726: }; 15726: 15726: template 15726: static constexpr 15726: __conditional_t::value, 15726: const value_type&, value_type&&> 15726: __fwd_value_for(value_type& __val) noexcept 15726: { return std::move(__val); } 15726: 15726: 15726: 15726: 15726: 15726: struct __hash_code_base_access : __hash_code_base 15726: { using __hash_code_base::_M_bucket_index; }; 15726: 15726: 15726: static_assert(is_nothrow_default_constructible<_RangeHash>::value, 15726: "Functor used to map hash code to bucket index" 15726: " must be nothrow default constructible"); 15726: static_assert(noexcept( 15726: std::declval()((std::size_t)0, (std::size_t)0)), 15726: "Functor used to map hash code to bucket index must be" 15726: " noexcept"); 15726: 15726: 15726: static_assert(is_nothrow_default_constructible<_ExtractKey>::value, 15726: "_ExtractKey must be nothrow default constructible"); 15726: static_assert(noexcept( 15726: std::declval()(std::declval<_Value>())), 15726: "_ExtractKey functor must be noexcept invocable"); 15726: 15726: template 15726: friend struct __detail::_Map_base; 15726: 15726: template 15726: friend struct __detail::_Insert_base; 15726: 15726: template 15726: friend struct __detail::_Insert; 15726: 15726: template 15726: friend struct __detail::_Equality; 15726: 15726: public: 15726: using size_type = typename __hashtable_base::size_type; 15726: using difference_type = typename __hashtable_base::difference_type; 15726: 15726: 15726: using node_type = _Node_handle<_Key, _Value, __node_alloc_type>; 15726: using insert_return_type = _Node_insert_return; 15726: 15726: 15726: private: 15726: __buckets_ptr _M_buckets = &_M_single_bucket; 15726: size_type _M_bucket_count = 1; 15726: __node_base _M_before_begin; 15726: size_type _M_element_count = 0; 15726: _RehashPolicy _M_rehash_policy; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: __node_base_ptr _M_single_bucket = nullptr; 15726: 15726: void 15726: _M_update_bbegin() 15726: { 15726: if (_M_begin()) 15726: _M_buckets[_M_bucket_index(*_M_begin())] = &_M_before_begin; 15726: } 15726: 15726: void 15726: _M_update_bbegin(__node_ptr __n) 15726: { 15726: _M_before_begin._M_nxt = __n; 15726: _M_update_bbegin(); 15726: } 15726: 15726: bool 15726: _M_uses_single_bucket(__buckets_ptr __bkts) const 15726: { return __builtin_expect(__bkts == &_M_single_bucket, false); } 15726: 15726: bool 15726: _M_uses_single_bucket() const 15726: { return _M_uses_single_bucket(_M_buckets); } 15726: 15726: static constexpr size_t 15726: __small_size_threshold() noexcept 15726: { 15726: return 15726: __detail::_Hashtable_hash_traits<_Hash>::__small_size_threshold(); 15726: } 15726: 15726: __hashtable_alloc& 15726: _M_base_alloc() { return *this; } 15726: 15726: __buckets_ptr 15726: _M_allocate_buckets(size_type __bkt_count) 15726: { 15726: if (__builtin_expect(__bkt_count == 1, false)) 15726: { 15726: _M_single_bucket = nullptr; 15726: return &_M_single_bucket; 15726: } 15726: 15726: return __hashtable_alloc::_M_allocate_buckets(__bkt_count); 15726: } 15726: 15726: void 15726: _M_deallocate_buckets(__buckets_ptr __bkts, size_type __bkt_count) 15726: { 15726: if (_M_uses_single_bucket(__bkts)) 15726: return; 15726: 15726: __hashtable_alloc::_M_deallocate_buckets(__bkts, __bkt_count); 15726: } 15726: 15726: void 15726: _M_deallocate_buckets() 15726: { _M_deallocate_buckets(_M_buckets, _M_bucket_count); } 15726: 15726: 15726: 15726: __node_ptr 15726: _M_bucket_begin(size_type __bkt) const; 15726: 15726: __node_ptr 15726: _M_begin() const 15726: { return static_cast<__node_ptr>(_M_before_begin._M_nxt); } 15726: 15726: 15726: 15726: template 15726: void 15726: _M_assign_elements(_Ht&&); 15726: 15726: template 15726: void 15726: _M_assign(_Ht&&, const _NodeGenerator&); 15726: 15726: void 15726: _M_move_assign(_Hashtable&&, true_type); 15726: 15726: void 15726: _M_move_assign(_Hashtable&&, false_type); 15726: 15726: void 15726: _M_reset() noexcept; 15726: 15726: _Hashtable(const _Hash& __h, const _Equal& __eq, 15726: const allocator_type& __a) 15726: : __hashtable_base(__h, __eq), 15726: __hashtable_alloc(__node_alloc_type(__a)), 15726: __enable_default_ctor(_Enable_default_constructor_tag{}) 15726: { } 15726: 15726: template 15726: static constexpr bool 15726: _S_nothrow_move() 15726: { 15726: 15726: 15726: 15726: 15726: 15726: if constexpr (_No_realloc) 15726: if constexpr (is_nothrow_copy_constructible<_Hash>()) 15726: return is_nothrow_copy_constructible<_Equal>(); 15726: return false; 15726: 15726: } 15726: 15726: _Hashtable(_Hashtable&& __ht, __node_alloc_type&& __a, 15726: true_type ) 15726: noexcept(_S_nothrow_move()); 15726: 15726: _Hashtable(_Hashtable&&, __node_alloc_type&&, 15726: false_type ); 15726: 15726: template 15726: _Hashtable(_InputIterator __first, _InputIterator __last, 15726: size_type __bkt_count_hint, 15726: const _Hash&, const _Equal&, const allocator_type&, 15726: true_type __uks); 15726: 15726: template 15726: _Hashtable(_InputIterator __first, _InputIterator __last, 15726: size_type __bkt_count_hint, 15726: const _Hash&, const _Equal&, const allocator_type&, 15726: false_type __uks); 15726: 15726: public: 15726: 15726: _Hashtable() = default; 15726: 15726: _Hashtable(const _Hashtable&); 15726: 15726: _Hashtable(const _Hashtable&, const allocator_type&); 15726: 15726: explicit 15726: _Hashtable(size_type __bkt_count_hint, 15726: const _Hash& __hf = _Hash(), 15726: const key_equal& __eql = key_equal(), 15726: const allocator_type& __a = allocator_type()); 15726: 15726: 15726: _Hashtable(_Hashtable&& __ht) 15726: noexcept(_S_nothrow_move()) 15726: : _Hashtable(std::move(__ht), std::move(__ht._M_node_allocator()), 15726: true_type{}) 15726: { } 15726: 15726: _Hashtable(_Hashtable&& __ht, const allocator_type& __a) 15726: noexcept(_S_nothrow_move<__node_alloc_traits::_S_always_equal()>()) 15726: : _Hashtable(std::move(__ht), __node_alloc_type(__a), 15726: typename __node_alloc_traits::is_always_equal{}) 15726: { } 15726: 15726: explicit 15726: _Hashtable(const allocator_type& __a) 15726: : __hashtable_alloc(__node_alloc_type(__a)), 15726: __enable_default_ctor(_Enable_default_constructor_tag{}) 15726: { } 15726: 15726: template 15726: _Hashtable(_InputIterator __f, _InputIterator __l, 15726: size_type __bkt_count_hint = 0, 15726: const _Hash& __hf = _Hash(), 15726: const key_equal& __eql = key_equal(), 15726: const allocator_type& __a = allocator_type()) 15726: : _Hashtable(__f, __l, __bkt_count_hint, __hf, __eql, __a, 15726: __unique_keys{}) 15726: { } 15726: 15726: _Hashtable(initializer_list __l, 15726: size_type __bkt_count_hint = 0, 15726: const _Hash& __hf = _Hash(), 15726: const key_equal& __eql = key_equal(), 15726: const allocator_type& __a = allocator_type()) 15726: : _Hashtable(__l.begin(), __l.end(), __bkt_count_hint, 15726: __hf, __eql, __a, __unique_keys{}) 15726: { } 15726: 15726: _Hashtable& 15726: operator=(const _Hashtable& __ht); 15726: 15726: _Hashtable& 15726: operator=(_Hashtable&& __ht) 15726: noexcept(__node_alloc_traits::_S_nothrow_move() 15726: && is_nothrow_move_assignable<_Hash>::value 15726: && is_nothrow_move_assignable<_Equal>::value) 15726: { 15726: constexpr bool __move_storage = 15726: __node_alloc_traits::_S_propagate_on_move_assign() 15726: || __node_alloc_traits::_S_always_equal(); 15726: _M_move_assign(std::move(__ht), __bool_constant<__move_storage>()); 15726: return *this; 15726: } 15726: 15726: _Hashtable& 15726: operator=(initializer_list __l) 15726: { 15726: __reuse_or_alloc_node_gen_t __roan(_M_begin(), *this); 15726: _M_before_begin._M_nxt = nullptr; 15726: clear(); 15726: 15726: 15726: auto __l_bkt_count = _M_rehash_policy._M_bkt_for_elements(__l.size()); 15726: 15726: 15726: if (_M_bucket_count < __l_bkt_count) 15726: rehash(__l_bkt_count); 15726: 15726: this->_M_insert_range(__l.begin(), __l.end(), __roan, __unique_keys{}); 15726: return *this; 15726: } 15726: 15726: ~_Hashtable() noexcept; 15726: 15726: void 15726: swap(_Hashtable&) 15726: noexcept(__and_<__is_nothrow_swappable<_Hash>, 15726: __is_nothrow_swappable<_Equal>>::value); 15726: 15726: 15726: iterator 15726: begin() noexcept 15726: { return iterator(_M_begin()); } 15726: 15726: const_iterator 15726: begin() const noexcept 15726: { return const_iterator(_M_begin()); } 15726: 15726: iterator 15726: end() noexcept 15726: { return iterator(nullptr); } 15726: 15726: const_iterator 15726: end() const noexcept 15726: { return const_iterator(nullptr); } 15726: 15726: const_iterator 15726: cbegin() const noexcept 15726: { return const_iterator(_M_begin()); } 15726: 15726: const_iterator 15726: cend() const noexcept 15726: { return const_iterator(nullptr); } 15726: 15726: size_type 15726: size() const noexcept 15726: { return _M_element_count; } 15726: 15726: [[__nodiscard__]] bool 15726: empty() const noexcept 15726: { return size() == 0; } 15726: 15726: allocator_type 15726: get_allocator() const noexcept 15726: { return allocator_type(this->_M_node_allocator()); } 15726: 15726: size_type 15726: max_size() const noexcept 15726: { return __node_alloc_traits::max_size(this->_M_node_allocator()); } 15726: 15726: 15726: key_equal 15726: key_eq() const 15726: { return this->_M_eq(); } 15726: 15726: 15726: 15726: 15726: size_type 15726: bucket_count() const noexcept 15726: { return _M_bucket_count; } 15726: 15726: size_type 15726: max_bucket_count() const noexcept 15726: { return max_size(); } 15726: 15726: size_type 15726: bucket_size(size_type __bkt) const 15726: { return std::distance(begin(__bkt), end(__bkt)); } 15726: 15726: size_type 15726: bucket(const key_type& __k) const 15726: { return _M_bucket_index(this->_M_hash_code(__k)); } 15726: 15726: local_iterator 15726: begin(size_type __bkt) 15726: { 15726: return local_iterator(*this, _M_bucket_begin(__bkt), 15726: __bkt, _M_bucket_count); 15726: } 15726: 15726: local_iterator 15726: end(size_type __bkt) 15726: { return local_iterator(*this, nullptr, __bkt, _M_bucket_count); } 15726: 15726: const_local_iterator 15726: begin(size_type __bkt) const 15726: { 15726: return const_local_iterator(*this, _M_bucket_begin(__bkt), 15726: __bkt, _M_bucket_count); 15726: } 15726: 15726: const_local_iterator 15726: end(size_type __bkt) const 15726: { return const_local_iterator(*this, nullptr, __bkt, _M_bucket_count); } 15726: 15726: 15726: const_local_iterator 15726: cbegin(size_type __bkt) const 15726: { 15726: return const_local_iterator(*this, _M_bucket_begin(__bkt), 15726: __bkt, _M_bucket_count); 15726: } 15726: 15726: const_local_iterator 15726: cend(size_type __bkt) const 15726: { return const_local_iterator(*this, nullptr, __bkt, _M_bucket_count); } 15726: 15726: float 15726: load_factor() const noexcept 15726: { 15726: return static_cast(size()) / static_cast(bucket_count()); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const _RehashPolicy& 15726: __rehash_policy() const 15726: { return _M_rehash_policy; } 15726: 15726: void 15726: __rehash_policy(const _RehashPolicy& __pol) 15726: { _M_rehash_policy = __pol; } 15726: 15726: 15726: iterator 15726: find(const key_type& __k); 15726: 15726: const_iterator 15726: find(const key_type& __k) const; 15726: 15726: size_type 15726: count(const key_type& __k) const; 15726: 15726: std::pair 15726: equal_range(const key_type& __k); 15726: 15726: std::pair 15726: equal_range(const key_type& __k) const; 15726: # 789 "/usr/include/c++/13/bits/hashtable.h" 3 15726: private: 15726: 15726: size_type 15726: _M_bucket_index(const __node_value_type& __n) const noexcept 15726: { return __hash_code_base::_M_bucket_index(__n, _M_bucket_count); } 15726: 15726: size_type 15726: _M_bucket_index(__hash_code __c) const 15726: { return __hash_code_base::_M_bucket_index(__c, _M_bucket_count); } 15726: 15726: __node_base_ptr 15726: _M_find_before_node(const key_type&); 15726: 15726: 15726: 15726: __node_base_ptr 15726: _M_find_before_node(size_type, const key_type&, __hash_code) const; 15726: 15726: template 15726: __node_base_ptr 15726: _M_find_before_node_tr(size_type, const _Kt&, __hash_code) const; 15726: 15726: __node_ptr 15726: _M_find_node(size_type __bkt, const key_type& __key, 15726: __hash_code __c) const 15726: { 15726: __node_base_ptr __before_n = _M_find_before_node(__bkt, __key, __c); 15726: if (__before_n) 15726: return static_cast<__node_ptr>(__before_n->_M_nxt); 15726: return nullptr; 15726: } 15726: 15726: template 15726: __node_ptr 15726: _M_find_node_tr(size_type __bkt, const _Kt& __key, 15726: __hash_code __c) const 15726: { 15726: auto __before_n = _M_find_before_node_tr(__bkt, __key, __c); 15726: if (__before_n) 15726: return static_cast<__node_ptr>(__before_n->_M_nxt); 15726: return nullptr; 15726: } 15726: 15726: 15726: void 15726: _M_insert_bucket_begin(size_type, __node_ptr); 15726: 15726: 15726: void 15726: _M_remove_bucket_begin(size_type __bkt, __node_ptr __next_n, 15726: size_type __next_bkt); 15726: 15726: 15726: __node_base_ptr 15726: _M_get_previous_node(size_type __bkt, __node_ptr __n); 15726: 15726: pair 15726: _M_compute_hash_code(const_iterator __hint, const key_type& __k) const; 15726: 15726: 15726: 15726: 15726: iterator 15726: _M_insert_unique_node(size_type __bkt, __hash_code, 15726: __node_ptr __n, size_type __n_elt = 1); 15726: 15726: 15726: 15726: iterator 15726: _M_insert_multi_node(__node_ptr __hint, 15726: __hash_code __code, __node_ptr __n); 15726: 15726: template 15726: std::pair 15726: _M_emplace(true_type __uks, _Args&&... __args); 15726: 15726: template 15726: iterator 15726: _M_emplace(false_type __uks, _Args&&... __args) 15726: { return _M_emplace(cend(), __uks, std::forward<_Args>(__args)...); } 15726: 15726: 15726: template 15726: iterator 15726: _M_emplace(const_iterator, true_type __uks, _Args&&... __args) 15726: { return _M_emplace(__uks, std::forward<_Args>(__args)...).first; } 15726: 15726: template 15726: iterator 15726: _M_emplace(const_iterator, false_type __uks, _Args&&... __args); 15726: 15726: template 15726: std::pair 15726: _M_insert_unique(_Kt&&, _Arg&&, const _NodeGenerator&); 15726: 15726: template 15726: static __conditional_t< 15726: __and_<__is_nothrow_invocable<_Hash&, const key_type&>, 15726: __not_<__is_nothrow_invocable<_Hash&, _Kt>>>::value, 15726: key_type, _Kt&&> 15726: _S_forward_key(_Kt&& __k) 15726: { return std::forward<_Kt>(__k); } 15726: 15726: static const key_type& 15726: _S_forward_key(const key_type& __k) 15726: { return __k; } 15726: 15726: static key_type&& 15726: _S_forward_key(key_type&& __k) 15726: { return std::move(__k); } 15726: 15726: template 15726: std::pair 15726: _M_insert_unique_aux(_Arg&& __arg, const _NodeGenerator& __node_gen) 15726: { 15726: return _M_insert_unique( 15726: _S_forward_key(_ExtractKey{}(std::forward<_Arg>(__arg))), 15726: std::forward<_Arg>(__arg), __node_gen); 15726: } 15726: 15726: template 15726: std::pair 15726: _M_insert(_Arg&& __arg, const _NodeGenerator& __node_gen, 15726: true_type ) 15726: { 15726: using __to_value 15726: = __detail::_ConvertToValueType<_ExtractKey, value_type>; 15726: return _M_insert_unique_aux( 15726: __to_value{}(std::forward<_Arg>(__arg)), __node_gen); 15726: } 15726: 15726: template 15726: iterator 15726: _M_insert(_Arg&& __arg, const _NodeGenerator& __node_gen, 15726: false_type __uks) 15726: { 15726: using __to_value 15726: = __detail::_ConvertToValueType<_ExtractKey, value_type>; 15726: return _M_insert(cend(), 15726: __to_value{}(std::forward<_Arg>(__arg)), __node_gen, __uks); 15726: } 15726: 15726: 15726: template 15726: iterator 15726: _M_insert(const_iterator, _Arg&& __arg, 15726: const _NodeGenerator& __node_gen, true_type __uks) 15726: { 15726: return 15726: _M_insert(std::forward<_Arg>(__arg), __node_gen, __uks).first; 15726: } 15726: 15726: 15726: template 15726: iterator 15726: _M_insert(const_iterator, _Arg&&, 15726: const _NodeGenerator&, false_type __uks); 15726: 15726: size_type 15726: _M_erase(true_type __uks, const key_type&); 15726: 15726: size_type 15726: _M_erase(false_type __uks, const key_type&); 15726: 15726: iterator 15726: _M_erase(size_type __bkt, __node_base_ptr __prev_n, __node_ptr __n); 15726: 15726: public: 15726: 15726: template 15726: __ireturn_type 15726: emplace(_Args&&... __args) 15726: { return _M_emplace(__unique_keys{}, std::forward<_Args>(__args)...); } 15726: 15726: template 15726: iterator 15726: emplace_hint(const_iterator __hint, _Args&&... __args) 15726: { 15726: return _M_emplace(__hint, __unique_keys{}, 15726: std::forward<_Args>(__args)...); 15726: } 15726: 15726: 15726: 15726: 15726: iterator 15726: erase(const_iterator); 15726: 15726: 15726: iterator 15726: erase(iterator __it) 15726: { return erase(const_iterator(__it)); } 15726: 15726: size_type 15726: erase(const key_type& __k) 15726: { return _M_erase(__unique_keys{}, __k); } 15726: 15726: iterator 15726: erase(const_iterator, const_iterator); 15726: 15726: void 15726: clear() noexcept; 15726: 15726: 15726: 15726: void rehash(size_type __bkt_count); 15726: 15726: 15726: 15726: 15726: 15726: 15726: insert_return_type 15726: _M_reinsert_node(node_type&& __nh) 15726: { 15726: insert_return_type __ret; 15726: if (__nh.empty()) 15726: __ret.position = end(); 15726: else 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(get_allocator() == __nh.get_allocator())) __builtin_unreachable(); } while (false); 15726: 15726: const key_type& __k = __nh._M_key(); 15726: __hash_code __code = this->_M_hash_code(__k); 15726: size_type __bkt = _M_bucket_index(__code); 15726: if (__node_ptr __n = _M_find_node(__bkt, __k, __code)) 15726: { 15726: __ret.node = std::move(__nh); 15726: __ret.position = iterator(__n); 15726: __ret.inserted = false; 15726: } 15726: else 15726: { 15726: __ret.position 15726: = _M_insert_unique_node(__bkt, __code, __nh._M_ptr); 15726: __nh.release(); 15726: __ret.inserted = true; 15726: } 15726: } 15726: return __ret; 15726: } 15726: 15726: 15726: iterator 15726: _M_reinsert_node_multi(const_iterator __hint, node_type&& __nh) 15726: { 15726: if (__nh.empty()) 15726: return end(); 15726: 15726: do { if (std::__is_constant_evaluated() && !bool(get_allocator() == __nh.get_allocator())) __builtin_unreachable(); } while (false); 15726: 15726: const key_type& __k = __nh._M_key(); 15726: auto __code = this->_M_hash_code(__k); 15726: auto __ret 15726: = _M_insert_multi_node(__hint._M_cur, __code, __nh._M_ptr); 15726: __nh.release(); 15726: return __ret; 15726: } 15726: 15726: private: 15726: node_type 15726: _M_extract_node(size_t __bkt, __node_base_ptr __prev_n) 15726: { 15726: __node_ptr __n = static_cast<__node_ptr>(__prev_n->_M_nxt); 15726: if (__prev_n == _M_buckets[__bkt]) 15726: _M_remove_bucket_begin(__bkt, __n->_M_next(), 15726: __n->_M_nxt ? _M_bucket_index(*__n->_M_next()) : 0); 15726: else if (__n->_M_nxt) 15726: { 15726: size_type __next_bkt = _M_bucket_index(*__n->_M_next()); 15726: if (__next_bkt != __bkt) 15726: _M_buckets[__next_bkt] = __prev_n; 15726: } 15726: 15726: __prev_n->_M_nxt = __n->_M_nxt; 15726: __n->_M_nxt = nullptr; 15726: --_M_element_count; 15726: return { __n, this->_M_node_allocator() }; 15726: } 15726: 15726: 15726: 15726: template 15726: __hash_code 15726: _M_src_hash_code(const _H2&, const key_type& __k, 15726: const __node_value_type& __src_n) const 15726: { 15726: if constexpr (std::is_same_v<_H2, _Hash>) 15726: if constexpr (std::is_empty_v<_Hash>) 15726: return this->_M_hash_code(__src_n); 15726: 15726: return this->_M_hash_code(__k); 15726: } 15726: 15726: public: 15726: 15726: node_type 15726: extract(const_iterator __pos) 15726: { 15726: size_t __bkt = _M_bucket_index(*__pos._M_cur); 15726: return _M_extract_node(__bkt, 15726: _M_get_previous_node(__bkt, __pos._M_cur)); 15726: } 15726: 15726: 15726: node_type 15726: extract(const _Key& __k) 15726: { 15726: node_type __nh; 15726: __hash_code __code = this->_M_hash_code(__k); 15726: std::size_t __bkt = _M_bucket_index(__code); 15726: if (__node_base_ptr __prev_node = _M_find_before_node(__bkt, __k, __code)) 15726: __nh = _M_extract_node(__bkt, __prev_node); 15726: return __nh; 15726: } 15726: 15726: 15726: template 15726: void 15726: _M_merge_unique(_Compatible_Hashtable& __src) 15726: { 15726: static_assert(is_same_v, "Node types are compatible"); 15726: do { if (std::__is_constant_evaluated() && !bool(get_allocator() == __src.get_allocator())) __builtin_unreachable(); } while (false); 15726: 15726: auto __n_elt = __src.size(); 15726: for (auto __i = __src.cbegin(), __end = __src.cend(); __i != __end;) 15726: { 15726: auto __pos = __i++; 15726: const key_type& __k = _ExtractKey{}(*__pos); 15726: __hash_code __code 15726: = _M_src_hash_code(__src.hash_function(), __k, *__pos._M_cur); 15726: size_type __bkt = _M_bucket_index(__code); 15726: if (_M_find_node(__bkt, __k, __code) == nullptr) 15726: { 15726: auto __nh = __src.extract(__pos); 15726: _M_insert_unique_node(__bkt, __code, __nh._M_ptr, __n_elt); 15726: __nh.release(); 15726: __n_elt = 1; 15726: } 15726: else if (__n_elt != 1) 15726: --__n_elt; 15726: } 15726: } 15726: 15726: 15726: template 15726: void 15726: _M_merge_multi(_Compatible_Hashtable& __src) 15726: { 15726: static_assert(is_same_v, "Node types are compatible"); 15726: do { if (std::__is_constant_evaluated() && !bool(get_allocator() == __src.get_allocator())) __builtin_unreachable(); } while (false); 15726: 15726: __node_ptr __hint = nullptr; 15726: this->reserve(size() + __src.size()); 15726: for (auto __i = __src.cbegin(), __end = __src.cend(); __i != __end;) 15726: { 15726: auto __pos = __i++; 15726: const key_type& __k = _ExtractKey{}(*__pos); 15726: __hash_code __code 15726: = _M_src_hash_code(__src.hash_function(), __k, *__pos._M_cur); 15726: auto __nh = __src.extract(__pos); 15726: __hint = _M_insert_multi_node(__hint, __code, __nh._M_ptr)._M_cur; 15726: __nh.release(); 15726: } 15726: } 15726: 15726: 15726: private: 15726: 15726: void _M_rehash_aux(size_type __bkt_count, true_type __uks); 15726: 15726: 15726: void _M_rehash_aux(size_type __bkt_count, false_type __uks); 15726: 15726: 15726: 15726: void _M_rehash(size_type __bkt_count, const __rehash_state& __state); 15726: }; 15726: 15726: 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_bucket_begin(size_type __bkt) const 15726: -> __node_ptr 15726: { 15726: __node_base_ptr __n = _M_buckets[__bkt]; 15726: return __n ? static_cast<__node_ptr>(__n->_M_nxt) : nullptr; 15726: } 15726: 15726: template 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _Hashtable(size_type __bkt_count_hint, 15726: const _Hash& __h, const _Equal& __eq, const allocator_type& __a) 15726: : _Hashtable(__h, __eq, __a) 15726: { 15726: auto __bkt_count = _M_rehash_policy._M_next_bkt(__bkt_count_hint); 15726: if (__bkt_count > _M_bucket_count) 15726: { 15726: _M_buckets = _M_allocate_buckets(__bkt_count); 15726: _M_bucket_count = __bkt_count; 15726: } 15726: } 15726: 15726: template 15726: template 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _Hashtable(_InputIterator __f, _InputIterator __l, 15726: size_type __bkt_count_hint, 15726: const _Hash& __h, const _Equal& __eq, 15726: const allocator_type& __a, true_type ) 15726: : _Hashtable(__bkt_count_hint, __h, __eq, __a) 15726: { this->insert(__f, __l); } 15726: 15726: template 15726: template 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _Hashtable(_InputIterator __f, _InputIterator __l, 15726: size_type __bkt_count_hint, 15726: const _Hash& __h, const _Equal& __eq, 15726: const allocator_type& __a, false_type __uks) 15726: : _Hashtable(__h, __eq, __a) 15726: { 15726: auto __nb_elems = __detail::__distance_fw(__f, __l); 15726: auto __bkt_count = 15726: _M_rehash_policy._M_next_bkt( 15726: std::max(_M_rehash_policy._M_bkt_for_elements(__nb_elems), 15726: __bkt_count_hint)); 15726: 15726: if (__bkt_count > _M_bucket_count) 15726: { 15726: _M_buckets = _M_allocate_buckets(__bkt_count); 15726: _M_bucket_count = __bkt_count; 15726: } 15726: 15726: __alloc_node_gen_t __node_gen(*this); 15726: for (; __f != __l; ++__f) 15726: _M_insert(*__f, __node_gen, __uks); 15726: } 15726: 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: operator=(const _Hashtable& __ht) 15726: -> _Hashtable& 15726: { 15726: if (&__ht == this) 15726: return *this; 15726: 15726: if (__node_alloc_traits::_S_propagate_on_copy_assign()) 15726: { 15726: auto& __this_alloc = this->_M_node_allocator(); 15726: auto& __that_alloc = __ht._M_node_allocator(); 15726: if (!__node_alloc_traits::_S_always_equal() 15726: && __this_alloc != __that_alloc) 15726: { 15726: 15726: this->_M_deallocate_nodes(_M_begin()); 15726: _M_before_begin._M_nxt = nullptr; 15726: _M_deallocate_buckets(); 15726: _M_buckets = nullptr; 15726: std::__alloc_on_copy(__this_alloc, __that_alloc); 15726: __hashtable_base::operator=(__ht); 15726: _M_bucket_count = __ht._M_bucket_count; 15726: _M_element_count = __ht._M_element_count; 15726: _M_rehash_policy = __ht._M_rehash_policy; 15726: __alloc_node_gen_t __alloc_node_gen(*this); 15726: try 15726: { 15726: _M_assign(__ht, __alloc_node_gen); 15726: } 15726: catch(...) 15726: { 15726: 15726: 15726: _M_reset(); 15726: throw; 15726: } 15726: return *this; 15726: } 15726: std::__alloc_on_copy(__this_alloc, __that_alloc); 15726: } 15726: 15726: 15726: _M_assign_elements(__ht); 15726: return *this; 15726: } 15726: 15726: template 15726: template 15726: void 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_assign_elements(_Ht&& __ht) 15726: { 15726: __buckets_ptr __former_buckets = nullptr; 15726: std::size_t __former_bucket_count = _M_bucket_count; 15726: const __rehash_state& __former_state = _M_rehash_policy._M_state(); 15726: 15726: if (_M_bucket_count != __ht._M_bucket_count) 15726: { 15726: __former_buckets = _M_buckets; 15726: _M_buckets = _M_allocate_buckets(__ht._M_bucket_count); 15726: _M_bucket_count = __ht._M_bucket_count; 15726: } 15726: else 15726: __builtin_memset(_M_buckets, 0, 15726: _M_bucket_count * sizeof(__node_base_ptr)); 15726: 15726: try 15726: { 15726: __hashtable_base::operator=(std::forward<_Ht>(__ht)); 15726: _M_element_count = __ht._M_element_count; 15726: _M_rehash_policy = __ht._M_rehash_policy; 15726: __reuse_or_alloc_node_gen_t __roan(_M_begin(), *this); 15726: _M_before_begin._M_nxt = nullptr; 15726: _M_assign(std::forward<_Ht>(__ht), __roan); 15726: if (__former_buckets) 15726: _M_deallocate_buckets(__former_buckets, __former_bucket_count); 15726: } 15726: catch(...) 15726: { 15726: if (__former_buckets) 15726: { 15726: 15726: _M_deallocate_buckets(); 15726: _M_rehash_policy._M_reset(__former_state); 15726: _M_buckets = __former_buckets; 15726: _M_bucket_count = __former_bucket_count; 15726: } 15726: __builtin_memset(_M_buckets, 0, 15726: _M_bucket_count * sizeof(__node_base_ptr)); 15726: throw; 15726: } 15726: } 15726: 15726: template 15726: template 15726: void 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_assign(_Ht&& __ht, const _NodeGenerator& __node_gen) 15726: { 15726: __buckets_ptr __buckets = nullptr; 15726: if (!_M_buckets) 15726: _M_buckets = __buckets = _M_allocate_buckets(_M_bucket_count); 15726: 15726: try 15726: { 15726: if (!__ht._M_before_begin._M_nxt) 15726: return; 15726: 15726: 15726: 15726: __node_ptr __ht_n = __ht._M_begin(); 15726: __node_ptr __this_n 15726: = __node_gen(__fwd_value_for<_Ht>(__ht_n->_M_v())); 15726: this->_M_copy_code(*__this_n, *__ht_n); 15726: _M_update_bbegin(__this_n); 15726: 15726: 15726: __node_ptr __prev_n = __this_n; 15726: for (__ht_n = __ht_n->_M_next(); __ht_n; __ht_n = __ht_n->_M_next()) 15726: { 15726: __this_n = __node_gen(__fwd_value_for<_Ht>(__ht_n->_M_v())); 15726: __prev_n->_M_nxt = __this_n; 15726: this->_M_copy_code(*__this_n, *__ht_n); 15726: size_type __bkt = _M_bucket_index(*__this_n); 15726: if (!_M_buckets[__bkt]) 15726: _M_buckets[__bkt] = __prev_n; 15726: __prev_n = __this_n; 15726: } 15726: } 15726: catch(...) 15726: { 15726: clear(); 15726: if (__buckets) 15726: _M_deallocate_buckets(); 15726: throw; 15726: } 15726: } 15726: 15726: template 15726: void 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_reset() noexcept 15726: { 15726: _M_rehash_policy._M_reset(); 15726: _M_bucket_count = 1; 15726: _M_single_bucket = nullptr; 15726: _M_buckets = &_M_single_bucket; 15726: _M_before_begin._M_nxt = nullptr; 15726: _M_element_count = 0; 15726: } 15726: 15726: template 15726: void 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_move_assign(_Hashtable&& __ht, true_type) 15726: { 15726: if (__builtin_expect(std::__addressof(__ht) == this, false)) 15726: return; 15726: 15726: this->_M_deallocate_nodes(_M_begin()); 15726: _M_deallocate_buckets(); 15726: __hashtable_base::operator=(std::move(__ht)); 15726: _M_rehash_policy = __ht._M_rehash_policy; 15726: if (!__ht._M_uses_single_bucket()) 15726: _M_buckets = __ht._M_buckets; 15726: else 15726: { 15726: _M_buckets = &_M_single_bucket; 15726: _M_single_bucket = __ht._M_single_bucket; 15726: } 15726: 15726: _M_bucket_count = __ht._M_bucket_count; 15726: _M_before_begin._M_nxt = __ht._M_before_begin._M_nxt; 15726: _M_element_count = __ht._M_element_count; 15726: std::__alloc_on_move(this->_M_node_allocator(), __ht._M_node_allocator()); 15726: 15726: 15726: _M_update_bbegin(); 15726: __ht._M_reset(); 15726: } 15726: 15726: template 15726: void 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_move_assign(_Hashtable&& __ht, false_type) 15726: { 15726: if (__ht._M_node_allocator() == this->_M_node_allocator()) 15726: _M_move_assign(std::move(__ht), true_type{}); 15726: else 15726: { 15726: 15726: _M_assign_elements(std::move(__ht)); 15726: __ht.clear(); 15726: } 15726: } 15726: 15726: template 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _Hashtable(const _Hashtable& __ht) 15726: : __hashtable_base(__ht), 15726: __map_base(__ht), 15726: __rehash_base(__ht), 15726: __hashtable_alloc( 15726: __node_alloc_traits::_S_select_on_copy(__ht._M_node_allocator())), 15726: __enable_default_ctor(__ht), 15726: _M_buckets(nullptr), 15726: _M_bucket_count(__ht._M_bucket_count), 15726: _M_element_count(__ht._M_element_count), 15726: _M_rehash_policy(__ht._M_rehash_policy) 15726: { 15726: __alloc_node_gen_t __alloc_node_gen(*this); 15726: _M_assign(__ht, __alloc_node_gen); 15726: } 15726: 15726: template 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _Hashtable(_Hashtable&& __ht, __node_alloc_type&& __a, 15726: true_type ) 15726: noexcept(_S_nothrow_move()) 15726: : __hashtable_base(__ht), 15726: __map_base(__ht), 15726: __rehash_base(__ht), 15726: __hashtable_alloc(std::move(__a)), 15726: __enable_default_ctor(__ht), 15726: _M_buckets(__ht._M_buckets), 15726: _M_bucket_count(__ht._M_bucket_count), 15726: _M_before_begin(__ht._M_before_begin._M_nxt), 15726: _M_element_count(__ht._M_element_count), 15726: _M_rehash_policy(__ht._M_rehash_policy) 15726: { 15726: 15726: if (__ht._M_uses_single_bucket()) 15726: { 15726: _M_buckets = &_M_single_bucket; 15726: _M_single_bucket = __ht._M_single_bucket; 15726: } 15726: 15726: 15726: _M_update_bbegin(); 15726: 15726: __ht._M_reset(); 15726: } 15726: 15726: template 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _Hashtable(const _Hashtable& __ht, const allocator_type& __a) 15726: : __hashtable_base(__ht), 15726: __map_base(__ht), 15726: __rehash_base(__ht), 15726: __hashtable_alloc(__node_alloc_type(__a)), 15726: __enable_default_ctor(__ht), 15726: _M_buckets(), 15726: _M_bucket_count(__ht._M_bucket_count), 15726: _M_element_count(__ht._M_element_count), 15726: _M_rehash_policy(__ht._M_rehash_policy) 15726: { 15726: __alloc_node_gen_t __alloc_node_gen(*this); 15726: _M_assign(__ht, __alloc_node_gen); 15726: } 15726: 15726: template 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _Hashtable(_Hashtable&& __ht, __node_alloc_type&& __a, 15726: false_type ) 15726: : __hashtable_base(__ht), 15726: __map_base(__ht), 15726: __rehash_base(__ht), 15726: __hashtable_alloc(std::move(__a)), 15726: __enable_default_ctor(__ht), 15726: _M_buckets(nullptr), 15726: _M_bucket_count(__ht._M_bucket_count), 15726: _M_element_count(__ht._M_element_count), 15726: _M_rehash_policy(__ht._M_rehash_policy) 15726: { 15726: if (__ht._M_node_allocator() == this->_M_node_allocator()) 15726: { 15726: if (__ht._M_uses_single_bucket()) 15726: { 15726: _M_buckets = &_M_single_bucket; 15726: _M_single_bucket = __ht._M_single_bucket; 15726: } 15726: else 15726: _M_buckets = __ht._M_buckets; 15726: 15726: 15726: 15726: _M_update_bbegin(__ht._M_begin()); 15726: 15726: __ht._M_reset(); 15726: } 15726: else 15726: { 15726: __alloc_node_gen_t __alloc_gen(*this); 15726: 15726: using _Fwd_Ht = __conditional_t< 15726: __move_if_noexcept_cond::value, 15726: const _Hashtable&, _Hashtable&&>; 15726: _M_assign(std::forward<_Fwd_Ht>(__ht), __alloc_gen); 15726: __ht.clear(); 15726: } 15726: } 15726: 15726: template 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: ~_Hashtable() noexcept 15726: { 15726: 15726: 15726: 15726: static_assert(noexcept(declval() 15726: ._M_bucket_index(declval(), 15726: (std::size_t)0)), 15726: "Cache the hash code or qualify your functors involved" 15726: " in hash code and bucket index computation with noexcept"); 15726: 15726: clear(); 15726: _M_deallocate_buckets(); 15726: } 15726: 15726: template 15726: void 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: swap(_Hashtable& __x) 15726: noexcept(__and_<__is_nothrow_swappable<_Hash>, 15726: __is_nothrow_swappable<_Equal>>::value) 15726: { 15726: 15726: 15726: 15726: this->_M_swap(__x); 15726: 15726: std::__alloc_on_swap(this->_M_node_allocator(), __x._M_node_allocator()); 15726: std::swap(_M_rehash_policy, __x._M_rehash_policy); 15726: 15726: 15726: if (this->_M_uses_single_bucket()) 15726: { 15726: if (!__x._M_uses_single_bucket()) 15726: { 15726: _M_buckets = __x._M_buckets; 15726: __x._M_buckets = &__x._M_single_bucket; 15726: } 15726: } 15726: else if (__x._M_uses_single_bucket()) 15726: { 15726: __x._M_buckets = _M_buckets; 15726: _M_buckets = &_M_single_bucket; 15726: } 15726: else 15726: std::swap(_M_buckets, __x._M_buckets); 15726: 15726: std::swap(_M_bucket_count, __x._M_bucket_count); 15726: std::swap(_M_before_begin._M_nxt, __x._M_before_begin._M_nxt); 15726: std::swap(_M_element_count, __x._M_element_count); 15726: std::swap(_M_single_bucket, __x._M_single_bucket); 15726: 15726: 15726: 15726: _M_update_bbegin(); 15726: __x._M_update_bbegin(); 15726: } 15726: 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: find(const key_type& __k) 15726: -> iterator 15726: { 15726: if (size() <= __small_size_threshold()) 15726: { 15726: for (auto __it = begin(); __it != end(); ++__it) 15726: if (this->_M_key_equals(__k, *__it._M_cur)) 15726: return __it; 15726: return end(); 15726: } 15726: 15726: __hash_code __code = this->_M_hash_code(__k); 15726: std::size_t __bkt = _M_bucket_index(__code); 15726: return iterator(_M_find_node(__bkt, __k, __code)); 15726: } 15726: 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: find(const key_type& __k) const 15726: -> const_iterator 15726: { 15726: if (size() <= __small_size_threshold()) 15726: { 15726: for (auto __it = begin(); __it != end(); ++__it) 15726: if (this->_M_key_equals(__k, *__it._M_cur)) 15726: return __it; 15726: return end(); 15726: } 15726: 15726: __hash_code __code = this->_M_hash_code(__k); 15726: std::size_t __bkt = _M_bucket_index(__code); 15726: return const_iterator(_M_find_node(__bkt, __k, __code)); 15726: } 15726: # 1739 "/usr/include/c++/13/bits/hashtable.h" 3 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: count(const key_type& __k) const 15726: -> size_type 15726: { 15726: auto __it = find(__k); 15726: if (!__it._M_cur) 15726: return 0; 15726: 15726: if (__unique_keys::value) 15726: return 1; 15726: 15726: 15726: 15726: 15726: size_type __result = 1; 15726: for (auto __ref = __it++; 15726: __it._M_cur && this->_M_node_equals(*__ref._M_cur, *__it._M_cur); 15726: ++__it) 15726: ++__result; 15726: 15726: return __result; 15726: } 15726: # 1800 "/usr/include/c++/13/bits/hashtable.h" 3 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: equal_range(const key_type& __k) 15726: -> pair 15726: { 15726: auto __ite = find(__k); 15726: if (!__ite._M_cur) 15726: return { __ite, __ite }; 15726: 15726: auto __beg = __ite++; 15726: if (__unique_keys::value) 15726: return { __beg, __ite }; 15726: 15726: 15726: 15726: 15726: while (__ite._M_cur && this->_M_node_equals(*__beg._M_cur, *__ite._M_cur)) 15726: ++__ite; 15726: 15726: return { __beg, __ite }; 15726: } 15726: 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: equal_range(const key_type& __k) const 15726: -> pair 15726: { 15726: auto __ite = find(__k); 15726: if (!__ite._M_cur) 15726: return { __ite, __ite }; 15726: 15726: auto __beg = __ite++; 15726: if (__unique_keys::value) 15726: return { __beg, __ite }; 15726: 15726: 15726: 15726: 15726: while (__ite._M_cur && this->_M_node_equals(*__beg._M_cur, *__ite._M_cur)) 15726: ++__ite; 15726: 15726: return { __beg, __ite }; 15726: } 15726: # 1914 "/usr/include/c++/13/bits/hashtable.h" 3 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_find_before_node(const key_type& __k) 15726: -> __node_base_ptr 15726: { 15726: __node_base_ptr __prev_p = &_M_before_begin; 15726: if (!__prev_p->_M_nxt) 15726: return nullptr; 15726: 15726: for (__node_ptr __p = static_cast<__node_ptr>(__prev_p->_M_nxt); 15726: __p != nullptr; 15726: __p = __p->_M_next()) 15726: { 15726: if (this->_M_key_equals(__k, *__p)) 15726: return __prev_p; 15726: 15726: __prev_p = __p; 15726: } 15726: 15726: return nullptr; 15726: } 15726: 15726: 15726: 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_find_before_node(size_type __bkt, const key_type& __k, 15726: __hash_code __code) const 15726: -> __node_base_ptr 15726: { 15726: __node_base_ptr __prev_p = _M_buckets[__bkt]; 15726: if (!__prev_p) 15726: return nullptr; 15726: 15726: for (__node_ptr __p = static_cast<__node_ptr>(__prev_p->_M_nxt);; 15726: __p = __p->_M_next()) 15726: { 15726: if (this->_M_equals(__k, __code, *__p)) 15726: return __prev_p; 15726: 15726: if (!__p->_M_nxt || _M_bucket_index(*__p->_M_next()) != __bkt) 15726: break; 15726: __prev_p = __p; 15726: } 15726: 15726: return nullptr; 15726: } 15726: 15726: template 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_find_before_node_tr(size_type __bkt, const _Kt& __k, 15726: __hash_code __code) const 15726: -> __node_base_ptr 15726: { 15726: __node_base_ptr __prev_p = _M_buckets[__bkt]; 15726: if (!__prev_p) 15726: return nullptr; 15726: 15726: for (__node_ptr __p = static_cast<__node_ptr>(__prev_p->_M_nxt);; 15726: __p = __p->_M_next()) 15726: { 15726: if (this->_M_equals_tr(__k, __code, *__p)) 15726: return __prev_p; 15726: 15726: if (!__p->_M_nxt || _M_bucket_index(*__p->_M_next()) != __bkt) 15726: break; 15726: __prev_p = __p; 15726: } 15726: 15726: return nullptr; 15726: } 15726: 15726: template 15726: void 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_insert_bucket_begin(size_type __bkt, __node_ptr __node) 15726: { 15726: if (_M_buckets[__bkt]) 15726: { 15726: 15726: 15726: __node->_M_nxt = _M_buckets[__bkt]->_M_nxt; 15726: _M_buckets[__bkt]->_M_nxt = __node; 15726: } 15726: else 15726: { 15726: 15726: 15726: 15726: __node->_M_nxt = _M_before_begin._M_nxt; 15726: _M_before_begin._M_nxt = __node; 15726: 15726: if (__node->_M_nxt) 15726: 15726: 15726: _M_buckets[_M_bucket_index(*__node->_M_next())] = __node; 15726: 15726: _M_buckets[__bkt] = &_M_before_begin; 15726: } 15726: } 15726: 15726: template 15726: void 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_remove_bucket_begin(size_type __bkt, __node_ptr __next, 15726: size_type __next_bkt) 15726: { 15726: if (!__next || __next_bkt != __bkt) 15726: { 15726: 15726: 15726: if (__next) 15726: _M_buckets[__next_bkt] = _M_buckets[__bkt]; 15726: 15726: 15726: if (&_M_before_begin == _M_buckets[__bkt]) 15726: _M_before_begin._M_nxt = __next; 15726: _M_buckets[__bkt] = nullptr; 15726: } 15726: } 15726: 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_get_previous_node(size_type __bkt, __node_ptr __n) 15726: -> __node_base_ptr 15726: { 15726: __node_base_ptr __prev_n = _M_buckets[__bkt]; 15726: while (__prev_n->_M_nxt != __n) 15726: __prev_n = __prev_n->_M_nxt; 15726: return __prev_n; 15726: } 15726: 15726: template 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_emplace(true_type , _Args&&... __args) 15726: -> pair 15726: { 15726: 15726: _Scoped_node __node { this, std::forward<_Args>(__args)... }; 15726: const key_type& __k = _ExtractKey{}(__node._M_node->_M_v()); 15726: if (size() <= __small_size_threshold()) 15726: { 15726: for (auto __it = begin(); __it != end(); ++__it) 15726: if (this->_M_key_equals(__k, *__it._M_cur)) 15726: 15726: return { __it, false }; 15726: } 15726: 15726: __hash_code __code = this->_M_hash_code(__k); 15726: size_type __bkt = _M_bucket_index(__code); 15726: if (size() > __small_size_threshold()) 15726: if (__node_ptr __p = _M_find_node(__bkt, __k, __code)) 15726: 15726: return { iterator(__p), false }; 15726: 15726: 15726: auto __pos = _M_insert_unique_node(__bkt, __code, __node._M_node); 15726: __node._M_node = nullptr; 15726: return { __pos, true }; 15726: } 15726: 15726: template 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_emplace(const_iterator __hint, false_type , 15726: _Args&&... __args) 15726: -> iterator 15726: { 15726: 15726: _Scoped_node __node { this, std::forward<_Args>(__args)... }; 15726: const key_type& __k = _ExtractKey{}(__node._M_node->_M_v()); 15726: 15726: auto __res = this->_M_compute_hash_code(__hint, __k); 15726: auto __pos 15726: = _M_insert_multi_node(__res.first._M_cur, __res.second, 15726: __node._M_node); 15726: __node._M_node = nullptr; 15726: return __pos; 15726: } 15726: 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_compute_hash_code(const_iterator __hint, const key_type& __k) const 15726: -> pair 15726: { 15726: if (size() <= __small_size_threshold()) 15726: { 15726: if (__hint != cend()) 15726: { 15726: for (auto __it = __hint; __it != cend(); ++__it) 15726: if (this->_M_key_equals(__k, *__it._M_cur)) 15726: return { __it, this->_M_hash_code(*__it._M_cur) }; 15726: } 15726: 15726: for (auto __it = cbegin(); __it != __hint; ++__it) 15726: if (this->_M_key_equals(__k, *__it._M_cur)) 15726: return { __it, this->_M_hash_code(*__it._M_cur) }; 15726: } 15726: 15726: return { __hint, this->_M_hash_code(__k) }; 15726: } 15726: 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_insert_unique_node(size_type __bkt, __hash_code __code, 15726: __node_ptr __node, size_type __n_elt) 15726: -> iterator 15726: { 15726: const __rehash_state& __saved_state = _M_rehash_policy._M_state(); 15726: std::pair __do_rehash 15726: = _M_rehash_policy._M_need_rehash(_M_bucket_count, _M_element_count, 15726: __n_elt); 15726: 15726: if (__do_rehash.first) 15726: { 15726: _M_rehash(__do_rehash.second, __saved_state); 15726: __bkt = _M_bucket_index(__code); 15726: } 15726: 15726: this->_M_store_code(*__node, __code); 15726: 15726: 15726: _M_insert_bucket_begin(__bkt, __node); 15726: ++_M_element_count; 15726: return iterator(__node); 15726: } 15726: 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_insert_multi_node(__node_ptr __hint, 15726: __hash_code __code, __node_ptr __node) 15726: -> iterator 15726: { 15726: const __rehash_state& __saved_state = _M_rehash_policy._M_state(); 15726: std::pair __do_rehash 15726: = _M_rehash_policy._M_need_rehash(_M_bucket_count, _M_element_count, 1); 15726: 15726: if (__do_rehash.first) 15726: _M_rehash(__do_rehash.second, __saved_state); 15726: 15726: this->_M_store_code(*__node, __code); 15726: const key_type& __k = _ExtractKey{}(__node->_M_v()); 15726: size_type __bkt = _M_bucket_index(__code); 15726: 15726: 15726: 15726: __node_base_ptr __prev 15726: = __builtin_expect(__hint != nullptr, false) 15726: && this->_M_equals(__k, __code, *__hint) 15726: ? __hint 15726: : _M_find_before_node(__bkt, __k, __code); 15726: 15726: if (__prev) 15726: { 15726: 15726: __node->_M_nxt = __prev->_M_nxt; 15726: __prev->_M_nxt = __node; 15726: if (__builtin_expect(__prev == __hint, false)) 15726: 15726: 15726: if (__node->_M_nxt 15726: && !this->_M_equals(__k, __code, *__node->_M_next())) 15726: { 15726: size_type __next_bkt = _M_bucket_index(*__node->_M_next()); 15726: if (__next_bkt != __bkt) 15726: _M_buckets[__next_bkt] = __node; 15726: } 15726: } 15726: else 15726: 15726: 15726: 15726: _M_insert_bucket_begin(__bkt, __node); 15726: ++_M_element_count; 15726: return iterator(__node); 15726: } 15726: 15726: 15726: template 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_insert_unique(_Kt&& __k, _Arg&& __v, 15726: const _NodeGenerator& __node_gen) 15726: -> pair 15726: { 15726: if (size() <= __small_size_threshold()) 15726: for (auto __it = begin(); __it != end(); ++__it) 15726: if (this->_M_key_equals_tr(__k, *__it._M_cur)) 15726: return { __it, false }; 15726: 15726: __hash_code __code = this->_M_hash_code_tr(__k); 15726: size_type __bkt = _M_bucket_index(__code); 15726: 15726: if (size() > __small_size_threshold()) 15726: if (__node_ptr __node = _M_find_node_tr(__bkt, __k, __code)) 15726: return { iterator(__node), false }; 15726: 15726: _Scoped_node __node { 15726: __node_builder_t::_S_build(std::forward<_Kt>(__k), 15726: std::forward<_Arg>(__v), 15726: __node_gen), 15726: this 15726: }; 15726: auto __pos 15726: = _M_insert_unique_node(__bkt, __code, __node._M_node); 15726: __node._M_node = nullptr; 15726: return { __pos, true }; 15726: } 15726: 15726: 15726: template 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_insert(const_iterator __hint, _Arg&& __v, 15726: const _NodeGenerator& __node_gen, 15726: false_type ) 15726: -> iterator 15726: { 15726: 15726: _Scoped_node __node{ __node_gen(std::forward<_Arg>(__v)), this }; 15726: 15726: 15726: auto __res = this->_M_compute_hash_code( 15726: __hint, _ExtractKey{}(__node._M_node->_M_v())); 15726: 15726: auto __pos 15726: = _M_insert_multi_node(__res.first._M_cur, __res.second, 15726: __node._M_node); 15726: __node._M_node = nullptr; 15726: return __pos; 15726: } 15726: 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: erase(const_iterator __it) 15726: -> iterator 15726: { 15726: __node_ptr __n = __it._M_cur; 15726: std::size_t __bkt = _M_bucket_index(*__n); 15726: 15726: 15726: 15726: 15726: __node_base_ptr __prev_n = _M_get_previous_node(__bkt, __n); 15726: return _M_erase(__bkt, __prev_n, __n); 15726: } 15726: 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_erase(size_type __bkt, __node_base_ptr __prev_n, __node_ptr __n) 15726: -> iterator 15726: { 15726: if (__prev_n == _M_buckets[__bkt]) 15726: _M_remove_bucket_begin(__bkt, __n->_M_next(), 15726: __n->_M_nxt ? _M_bucket_index(*__n->_M_next()) : 0); 15726: else if (__n->_M_nxt) 15726: { 15726: size_type __next_bkt = _M_bucket_index(*__n->_M_next()); 15726: if (__next_bkt != __bkt) 15726: _M_buckets[__next_bkt] = __prev_n; 15726: } 15726: 15726: __prev_n->_M_nxt = __n->_M_nxt; 15726: iterator __result(__n->_M_next()); 15726: this->_M_deallocate_node(__n); 15726: --_M_element_count; 15726: 15726: return __result; 15726: } 15726: 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_erase(true_type , const key_type& __k) 15726: -> size_type 15726: { 15726: __node_base_ptr __prev_n; 15726: __node_ptr __n; 15726: std::size_t __bkt; 15726: if (size() <= __small_size_threshold()) 15726: { 15726: __prev_n = _M_find_before_node(__k); 15726: if (!__prev_n) 15726: return 0; 15726: 15726: 15726: __n = static_cast<__node_ptr>(__prev_n->_M_nxt); 15726: __bkt = _M_bucket_index(*__n); 15726: } 15726: else 15726: { 15726: __hash_code __code = this->_M_hash_code(__k); 15726: __bkt = _M_bucket_index(__code); 15726: 15726: 15726: __prev_n = _M_find_before_node(__bkt, __k, __code); 15726: if (!__prev_n) 15726: return 0; 15726: 15726: 15726: __n = static_cast<__node_ptr>(__prev_n->_M_nxt); 15726: } 15726: 15726: _M_erase(__bkt, __prev_n, __n); 15726: return 1; 15726: } 15726: 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_erase(false_type , const key_type& __k) 15726: -> size_type 15726: { 15726: std::size_t __bkt; 15726: __node_base_ptr __prev_n; 15726: __node_ptr __n; 15726: if (size() <= __small_size_threshold()) 15726: { 15726: __prev_n = _M_find_before_node(__k); 15726: if (!__prev_n) 15726: return 0; 15726: 15726: 15726: __n = static_cast<__node_ptr>(__prev_n->_M_nxt); 15726: __bkt = _M_bucket_index(*__n); 15726: } 15726: else 15726: { 15726: __hash_code __code = this->_M_hash_code(__k); 15726: __bkt = _M_bucket_index(__code); 15726: 15726: 15726: __prev_n = _M_find_before_node(__bkt, __k, __code); 15726: if (!__prev_n) 15726: return 0; 15726: 15726: __n = static_cast<__node_ptr>(__prev_n->_M_nxt); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: __node_ptr __n_last = __n->_M_next(); 15726: while (__n_last && this->_M_node_equals(*__n, *__n_last)) 15726: __n_last = __n_last->_M_next(); 15726: 15726: std::size_t __n_last_bkt = __n_last ? _M_bucket_index(*__n_last) : __bkt; 15726: 15726: 15726: size_type __result = 0; 15726: do 15726: { 15726: __node_ptr __p = __n->_M_next(); 15726: this->_M_deallocate_node(__n); 15726: __n = __p; 15726: ++__result; 15726: } 15726: while (__n != __n_last); 15726: 15726: _M_element_count -= __result; 15726: if (__prev_n == _M_buckets[__bkt]) 15726: _M_remove_bucket_begin(__bkt, __n_last, __n_last_bkt); 15726: else if (__n_last_bkt != __bkt) 15726: _M_buckets[__n_last_bkt] = __prev_n; 15726: __prev_n->_M_nxt = __n_last; 15726: return __result; 15726: } 15726: 15726: template 15726: auto 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: erase(const_iterator __first, const_iterator __last) 15726: -> iterator 15726: { 15726: __node_ptr __n = __first._M_cur; 15726: __node_ptr __last_n = __last._M_cur; 15726: if (__n == __last_n) 15726: return iterator(__n); 15726: 15726: std::size_t __bkt = _M_bucket_index(*__n); 15726: 15726: __node_base_ptr __prev_n = _M_get_previous_node(__bkt, __n); 15726: bool __is_bucket_begin = __n == _M_bucket_begin(__bkt); 15726: std::size_t __n_bkt = __bkt; 15726: for (;;) 15726: { 15726: do 15726: { 15726: __node_ptr __tmp = __n; 15726: __n = __n->_M_next(); 15726: this->_M_deallocate_node(__tmp); 15726: --_M_element_count; 15726: if (!__n) 15726: break; 15726: __n_bkt = _M_bucket_index(*__n); 15726: } 15726: while (__n != __last_n && __n_bkt == __bkt); 15726: if (__is_bucket_begin) 15726: _M_remove_bucket_begin(__bkt, __n, __n_bkt); 15726: if (__n == __last_n) 15726: break; 15726: __is_bucket_begin = true; 15726: __bkt = __n_bkt; 15726: } 15726: 15726: if (__n && (__n_bkt != __bkt || __is_bucket_begin)) 15726: _M_buckets[__n_bkt] = __prev_n; 15726: __prev_n->_M_nxt = __n; 15726: return iterator(__n); 15726: } 15726: 15726: template 15726: void 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: clear() noexcept 15726: { 15726: this->_M_deallocate_nodes(_M_begin()); 15726: __builtin_memset(_M_buckets, 0, 15726: _M_bucket_count * sizeof(__node_base_ptr)); 15726: _M_element_count = 0; 15726: _M_before_begin._M_nxt = nullptr; 15726: } 15726: 15726: template 15726: void 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: rehash(size_type __bkt_count) 15726: { 15726: const __rehash_state& __saved_state = _M_rehash_policy._M_state(); 15726: __bkt_count 15726: = std::max(_M_rehash_policy._M_bkt_for_elements(_M_element_count + 1), 15726: __bkt_count); 15726: __bkt_count = _M_rehash_policy._M_next_bkt(__bkt_count); 15726: 15726: if (__bkt_count != _M_bucket_count) 15726: _M_rehash(__bkt_count, __saved_state); 15726: else 15726: 15726: 15726: _M_rehash_policy._M_reset(__saved_state); 15726: } 15726: 15726: template 15726: void 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_rehash(size_type __bkt_count, const __rehash_state& __state) 15726: { 15726: try 15726: { 15726: _M_rehash_aux(__bkt_count, __unique_keys{}); 15726: } 15726: catch(...) 15726: { 15726: 15726: 15726: _M_rehash_policy._M_reset(__state); 15726: throw; 15726: } 15726: } 15726: 15726: 15726: template 15726: void 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_rehash_aux(size_type __bkt_count, true_type ) 15726: { 15726: __buckets_ptr __new_buckets = _M_allocate_buckets(__bkt_count); 15726: __node_ptr __p = _M_begin(); 15726: _M_before_begin._M_nxt = nullptr; 15726: std::size_t __bbegin_bkt = 0; 15726: while (__p) 15726: { 15726: __node_ptr __next = __p->_M_next(); 15726: std::size_t __bkt 15726: = __hash_code_base::_M_bucket_index(*__p, __bkt_count); 15726: if (!__new_buckets[__bkt]) 15726: { 15726: __p->_M_nxt = _M_before_begin._M_nxt; 15726: _M_before_begin._M_nxt = __p; 15726: __new_buckets[__bkt] = &_M_before_begin; 15726: if (__p->_M_nxt) 15726: __new_buckets[__bbegin_bkt] = __p; 15726: __bbegin_bkt = __bkt; 15726: } 15726: else 15726: { 15726: __p->_M_nxt = __new_buckets[__bkt]->_M_nxt; 15726: __new_buckets[__bkt]->_M_nxt = __p; 15726: } 15726: 15726: __p = __next; 15726: } 15726: 15726: _M_deallocate_buckets(); 15726: _M_bucket_count = __bkt_count; 15726: _M_buckets = __new_buckets; 15726: } 15726: 15726: 15726: 15726: template 15726: void 15726: _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 15726: _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: 15726: _M_rehash_aux(size_type __bkt_count, false_type ) 15726: { 15726: __buckets_ptr __new_buckets = _M_allocate_buckets(__bkt_count); 15726: __node_ptr __p = _M_begin(); 15726: _M_before_begin._M_nxt = nullptr; 15726: std::size_t __bbegin_bkt = 0; 15726: std::size_t __prev_bkt = 0; 15726: __node_ptr __prev_p = nullptr; 15726: bool __check_bucket = false; 15726: 15726: while (__p) 15726: { 15726: __node_ptr __next = __p->_M_next(); 15726: std::size_t __bkt 15726: = __hash_code_base::_M_bucket_index(*__p, __bkt_count); 15726: 15726: if (__prev_p && __prev_bkt == __bkt) 15726: { 15726: 15726: 15726: 15726: __p->_M_nxt = __prev_p->_M_nxt; 15726: __prev_p->_M_nxt = __p; 15726: 15726: 15726: 15726: 15726: 15726: 15726: __check_bucket = true; 15726: } 15726: else 15726: { 15726: if (__check_bucket) 15726: { 15726: 15726: 15726: if (__prev_p->_M_nxt) 15726: { 15726: std::size_t __next_bkt 15726: = __hash_code_base::_M_bucket_index( 15726: *__prev_p->_M_next(), __bkt_count); 15726: if (__next_bkt != __prev_bkt) 15726: __new_buckets[__next_bkt] = __prev_p; 15726: } 15726: __check_bucket = false; 15726: } 15726: 15726: if (!__new_buckets[__bkt]) 15726: { 15726: __p->_M_nxt = _M_before_begin._M_nxt; 15726: _M_before_begin._M_nxt = __p; 15726: __new_buckets[__bkt] = &_M_before_begin; 15726: if (__p->_M_nxt) 15726: __new_buckets[__bbegin_bkt] = __p; 15726: __bbegin_bkt = __bkt; 15726: } 15726: else 15726: { 15726: __p->_M_nxt = __new_buckets[__bkt]->_M_nxt; 15726: __new_buckets[__bkt]->_M_nxt = __p; 15726: } 15726: } 15726: __prev_p = __p; 15726: __prev_bkt = __bkt; 15726: __p = __next; 15726: } 15726: 15726: if (__check_bucket && __prev_p->_M_nxt) 15726: { 15726: std::size_t __next_bkt 15726: = __hash_code_base::_M_bucket_index(*__prev_p->_M_next(), 15726: __bkt_count); 15726: if (__next_bkt != __prev_bkt) 15726: __new_buckets[__next_bkt] = __prev_p; 15726: } 15726: 15726: _M_deallocate_buckets(); 15726: _M_bucket_count = __bkt_count; 15726: _M_buckets = __new_buckets; 15726: } 15726: 15726: 15726: template class _Hash_merge_helper { }; 15726: 15726: 15726: 15726: 15726: template 15726: using _RequireNotAllocatorOrIntegral 15726: = __enable_if_t, __is_allocator<_Hash>>::value>; 15726: 15726: 15726: 15726: 15726: } 15726: # 34 "/usr/include/c++/13/bits/unordered_map.h" 2 3 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: template 15726: using __umap_traits = __detail::_Hashtable_traits<_Cache, false, true>; 15726: 15726: template, 15726: typename _Pred = std::equal_to<_Key>, 15726: typename _Alloc = std::allocator >, 15726: typename _Tr = __umap_traits<__cache_default<_Key, _Hash>::value>> 15726: using __umap_hashtable = _Hashtable<_Key, std::pair, 15726: _Alloc, __detail::_Select1st, 15726: _Pred, _Hash, 15726: __detail::_Mod_range_hashing, 15726: __detail::_Default_ranged_hash, 15726: __detail::_Prime_rehash_policy, _Tr>; 15726: 15726: 15726: template 15726: using __ummap_traits = __detail::_Hashtable_traits<_Cache, false, false>; 15726: 15726: template, 15726: typename _Pred = std::equal_to<_Key>, 15726: typename _Alloc = std::allocator >, 15726: typename _Tr = __ummap_traits<__cache_default<_Key, _Hash>::value>> 15726: using __ummap_hashtable = _Hashtable<_Key, std::pair, 15726: _Alloc, __detail::_Select1st, 15726: _Pred, _Hash, 15726: __detail::_Mod_range_hashing, 15726: __detail::_Default_ranged_hash, 15726: __detail::_Prime_rehash_policy, _Tr>; 15726: 15726: template 15726: class unordered_multimap; 15726: # 105 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: template, 15726: typename _Pred = equal_to<_Key>, 15726: typename _Alloc = allocator>> 15726: class unordered_map 15726: { 15726: typedef __umap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable; 15726: _Hashtable _M_h; 15726: 15726: public: 15726: 15726: 15726: 15726: typedef typename _Hashtable::key_type key_type; 15726: typedef typename _Hashtable::value_type value_type; 15726: typedef typename _Hashtable::mapped_type mapped_type; 15726: typedef typename _Hashtable::hasher hasher; 15726: typedef typename _Hashtable::key_equal key_equal; 15726: typedef typename _Hashtable::allocator_type allocator_type; 15726: 15726: 15726: 15726: 15726: typedef typename _Hashtable::pointer pointer; 15726: typedef typename _Hashtable::const_pointer const_pointer; 15726: typedef typename _Hashtable::reference reference; 15726: typedef typename _Hashtable::const_reference const_reference; 15726: typedef typename _Hashtable::iterator iterator; 15726: typedef typename _Hashtable::const_iterator const_iterator; 15726: typedef typename _Hashtable::local_iterator local_iterator; 15726: typedef typename _Hashtable::const_local_iterator const_local_iterator; 15726: typedef typename _Hashtable::size_type size_type; 15726: typedef typename _Hashtable::difference_type difference_type; 15726: 15726: 15726: 15726: using node_type = typename _Hashtable::node_type; 15726: using insert_return_type = typename _Hashtable::insert_return_type; 15726: 15726: 15726: 15726: 15726: 15726: unordered_map() = default; 15726: # 157 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: explicit 15726: unordered_map(size_type __n, 15726: const hasher& __hf = hasher(), 15726: const key_equal& __eql = key_equal(), 15726: const allocator_type& __a = allocator_type()) 15726: : _M_h(__n, __hf, __eql, __a) 15726: { } 15726: # 178 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: template 15726: unordered_map(_InputIterator __first, _InputIterator __last, 15726: size_type __n = 0, 15726: const hasher& __hf = hasher(), 15726: const key_equal& __eql = key_equal(), 15726: const allocator_type& __a = allocator_type()) 15726: : _M_h(__first, __last, __n, __hf, __eql, __a) 15726: { } 15726: 15726: 15726: unordered_map(const unordered_map&) = default; 15726: 15726: 15726: unordered_map(unordered_map&&) = default; 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: unordered_map(const allocator_type& __a) 15726: : _M_h(__a) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: unordered_map(const unordered_map& __umap, 15726: const allocator_type& __a) 15726: : _M_h(__umap._M_h, __a) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: unordered_map(unordered_map&& __umap, 15726: const allocator_type& __a) 15726: noexcept( noexcept(_Hashtable(std::move(__umap._M_h), __a)) ) 15726: : _M_h(std::move(__umap._M_h), __a) 15726: { } 15726: # 234 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: unordered_map(initializer_list __l, 15726: size_type __n = 0, 15726: const hasher& __hf = hasher(), 15726: const key_equal& __eql = key_equal(), 15726: const allocator_type& __a = allocator_type()) 15726: : _M_h(__l, __n, __hf, __eql, __a) 15726: { } 15726: 15726: unordered_map(size_type __n, const allocator_type& __a) 15726: : unordered_map(__n, hasher(), key_equal(), __a) 15726: { } 15726: 15726: unordered_map(size_type __n, const hasher& __hf, 15726: const allocator_type& __a) 15726: : unordered_map(__n, __hf, key_equal(), __a) 15726: { } 15726: 15726: template 15726: unordered_map(_InputIterator __first, _InputIterator __last, 15726: size_type __n, 15726: const allocator_type& __a) 15726: : unordered_map(__first, __last, __n, hasher(), key_equal(), __a) 15726: { } 15726: 15726: template 15726: unordered_map(_InputIterator __first, _InputIterator __last, 15726: size_type __n, const hasher& __hf, 15726: const allocator_type& __a) 15726: : unordered_map(__first, __last, __n, __hf, key_equal(), __a) 15726: { } 15726: 15726: unordered_map(initializer_list __l, 15726: size_type __n, 15726: const allocator_type& __a) 15726: : unordered_map(__l, __n, hasher(), key_equal(), __a) 15726: { } 15726: 15726: unordered_map(initializer_list __l, 15726: size_type __n, const hasher& __hf, 15726: const allocator_type& __a) 15726: : unordered_map(__l, __n, __hf, key_equal(), __a) 15726: { } 15726: 15726: 15726: unordered_map& 15726: operator=(const unordered_map&) = default; 15726: 15726: 15726: unordered_map& 15726: operator=(unordered_map&&) = default; 15726: # 296 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: unordered_map& 15726: operator=(initializer_list __l) 15726: { 15726: _M_h = __l; 15726: return *this; 15726: } 15726: 15726: 15726: allocator_type 15726: get_allocator() const noexcept 15726: { return _M_h.get_allocator(); } 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] bool 15726: empty() const noexcept 15726: { return _M_h.empty(); } 15726: 15726: 15726: size_type 15726: size() const noexcept 15726: { return _M_h.size(); } 15726: 15726: 15726: size_type 15726: max_size() const noexcept 15726: { return _M_h.max_size(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: iterator 15726: begin() noexcept 15726: { return _M_h.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_iterator 15726: begin() const noexcept 15726: { return _M_h.begin(); } 15726: 15726: const_iterator 15726: cbegin() const noexcept 15726: { return _M_h.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: iterator 15726: end() noexcept 15726: { return _M_h.end(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_iterator 15726: end() const noexcept 15726: { return _M_h.end(); } 15726: 15726: const_iterator 15726: cend() const noexcept 15726: { return _M_h.end(); } 15726: # 393 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: template 15726: std::pair 15726: emplace(_Args&&... __args) 15726: { return _M_h.emplace(std::forward<_Args>(__args)...); } 15726: # 424 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: template 15726: iterator 15726: emplace_hint(const_iterator __pos, _Args&&... __args) 15726: { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); } 15726: 15726: 15726: 15726: node_type 15726: extract(const_iterator __pos) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__pos != end())) __builtin_unreachable(); } while (false); 15726: return _M_h.extract(__pos); 15726: } 15726: 15726: 15726: node_type 15726: extract(const key_type& __key) 15726: { return _M_h.extract(__key); } 15726: 15726: 15726: insert_return_type 15726: insert(node_type&& __nh) 15726: { return _M_h._M_reinsert_node(std::move(__nh)); } 15726: 15726: 15726: iterator 15726: insert(const_iterator, node_type&& __nh) 15726: { return _M_h._M_reinsert_node(std::move(__nh)).position; } 15726: # 476 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: template 15726: pair 15726: try_emplace(const key_type& __k, _Args&&... __args) 15726: { 15726: return _M_h.try_emplace(cend(), __k, std::forward<_Args>(__args)...); 15726: } 15726: 15726: 15726: template 15726: pair 15726: try_emplace(key_type&& __k, _Args&&... __args) 15726: { 15726: return _M_h.try_emplace(cend(), std::move(__k), 15726: std::forward<_Args>(__args)...); 15726: } 15726: # 520 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: template 15726: iterator 15726: try_emplace(const_iterator __hint, const key_type& __k, 15726: _Args&&... __args) 15726: { 15726: return _M_h.try_emplace(__hint, __k, 15726: std::forward<_Args>(__args)...).first; 15726: } 15726: 15726: 15726: template 15726: iterator 15726: try_emplace(const_iterator __hint, key_type&& __k, _Args&&... __args) 15726: { 15726: return _M_h.try_emplace(__hint, std::move(__k), 15726: std::forward<_Args>(__args)...).first; 15726: } 15726: # 557 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: std::pair 15726: insert(const value_type& __x) 15726: { return _M_h.insert(__x); } 15726: 15726: 15726: 15726: std::pair 15726: insert(value_type&& __x) 15726: { return _M_h.insert(std::move(__x)); } 15726: 15726: template 15726: __enable_if_t::value, 15726: pair> 15726: insert(_Pair&& __x) 15726: { return _M_h.emplace(std::forward<_Pair>(__x)); } 15726: # 596 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: iterator 15726: insert(const_iterator __hint, const value_type& __x) 15726: { return _M_h.insert(__hint, __x); } 15726: 15726: 15726: 15726: iterator 15726: insert(const_iterator __hint, value_type&& __x) 15726: { return _M_h.insert(__hint, std::move(__x)); } 15726: 15726: template 15726: __enable_if_t::value, iterator> 15726: insert(const_iterator __hint, _Pair&& __x) 15726: { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); } 15726: # 621 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: template 15726: void 15726: insert(_InputIterator __first, _InputIterator __last) 15726: { _M_h.insert(__first, __last); } 15726: # 633 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: void 15726: insert(initializer_list __l) 15726: { _M_h.insert(__l); } 15726: # 659 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: template 15726: pair 15726: insert_or_assign(const key_type& __k, _Obj&& __obj) 15726: { 15726: auto __ret = _M_h.try_emplace(cend(), __k, 15726: std::forward<_Obj>(__obj)); 15726: if (!__ret.second) 15726: __ret.first->second = std::forward<_Obj>(__obj); 15726: return __ret; 15726: } 15726: 15726: 15726: template 15726: pair 15726: insert_or_assign(key_type&& __k, _Obj&& __obj) 15726: { 15726: auto __ret = _M_h.try_emplace(cend(), std::move(__k), 15726: std::forward<_Obj>(__obj)); 15726: if (!__ret.second) 15726: __ret.first->second = std::forward<_Obj>(__obj); 15726: return __ret; 15726: } 15726: # 708 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: template 15726: iterator 15726: insert_or_assign(const_iterator __hint, const key_type& __k, 15726: _Obj&& __obj) 15726: { 15726: auto __ret = _M_h.try_emplace(__hint, __k, std::forward<_Obj>(__obj)); 15726: if (!__ret.second) 15726: __ret.first->second = std::forward<_Obj>(__obj); 15726: return __ret.first; 15726: } 15726: 15726: 15726: template 15726: iterator 15726: insert_or_assign(const_iterator __hint, key_type&& __k, _Obj&& __obj) 15726: { 15726: auto __ret = _M_h.try_emplace(__hint, std::move(__k), 15726: std::forward<_Obj>(__obj)); 15726: if (!__ret.second) 15726: __ret.first->second = std::forward<_Obj>(__obj); 15726: return __ret.first; 15726: } 15726: # 746 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: iterator 15726: erase(const_iterator __position) 15726: { return _M_h.erase(__position); } 15726: 15726: 15726: iterator 15726: erase(iterator __position) 15726: { return _M_h.erase(__position); } 15726: # 768 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: size_type 15726: erase(const key_type& __x) 15726: { return _M_h.erase(__x); } 15726: # 786 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: iterator 15726: erase(const_iterator __first, const_iterator __last) 15726: { return _M_h.erase(__first, __last); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: clear() noexcept 15726: { _M_h.clear(); } 15726: # 810 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: void 15726: swap(unordered_map& __x) 15726: noexcept( noexcept(_M_h.swap(__x._M_h)) ) 15726: { _M_h.swap(__x._M_h); } 15726: 15726: 15726: template 15726: friend class std::_Hash_merge_helper; 15726: 15726: template 15726: void 15726: merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source) 15726: { 15726: using _Merge_helper = _Hash_merge_helper; 15726: _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); 15726: } 15726: 15726: template 15726: void 15726: merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source) 15726: { merge(__source); } 15726: 15726: template 15726: void 15726: merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source) 15726: { 15726: using _Merge_helper = _Hash_merge_helper; 15726: _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); 15726: } 15726: 15726: template 15726: void 15726: merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source) 15726: { merge(__source); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: hasher 15726: hash_function() const 15726: { return _M_h.hash_function(); } 15726: 15726: 15726: 15726: key_equal 15726: key_eq() const 15726: { return _M_h.key_eq(); } 15726: # 874 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: iterator 15726: find(const key_type& __x) 15726: { return _M_h.find(__x); } 15726: # 885 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: const_iterator 15726: find(const key_type& __x) const 15726: { return _M_h.find(__x); } 15726: # 907 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: size_type 15726: count(const key_type& __x) const 15726: { return _M_h.count(__x); } 15726: # 947 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: std::pair 15726: equal_range(const key_type& __x) 15726: { return _M_h.equal_range(__x); } 15726: # 959 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: std::pair 15726: equal_range(const key_type& __x) const 15726: { return _M_h.equal_range(__x); } 15726: # 985 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: mapped_type& 15726: operator[](const key_type& __k) 15726: { return _M_h[__k]; } 15726: 15726: mapped_type& 15726: operator[](key_type&& __k) 15726: { return _M_h[std::move(__k)]; } 15726: # 1002 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: mapped_type& 15726: at(const key_type& __k) 15726: { return _M_h.at(__k); } 15726: 15726: const mapped_type& 15726: at(const key_type& __k) const 15726: { return _M_h.at(__k); } 15726: 15726: 15726: 15726: 15726: 15726: size_type 15726: bucket_count() const noexcept 15726: { return _M_h.bucket_count(); } 15726: 15726: 15726: size_type 15726: max_bucket_count() const noexcept 15726: { return _M_h.max_bucket_count(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_type 15726: bucket_size(size_type __n) const 15726: { return _M_h.bucket_size(__n); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_type 15726: bucket(const key_type& __key) const 15726: { return _M_h.bucket(__key); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: local_iterator 15726: begin(size_type __n) 15726: { return _M_h.begin(__n); } 15726: # 1058 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: const_local_iterator 15726: begin(size_type __n) const 15726: { return _M_h.begin(__n); } 15726: 15726: const_local_iterator 15726: cbegin(size_type __n) const 15726: { return _M_h.cbegin(__n); } 15726: # 1073 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: local_iterator 15726: end(size_type __n) 15726: { return _M_h.end(__n); } 15726: # 1084 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: const_local_iterator 15726: end(size_type __n) const 15726: { return _M_h.end(__n); } 15726: 15726: const_local_iterator 15726: cend(size_type __n) const 15726: { return _M_h.cend(__n); } 15726: 15726: 15726: 15726: 15726: 15726: float 15726: load_factor() const noexcept 15726: { return _M_h.load_factor(); } 15726: 15726: 15726: 15726: float 15726: max_load_factor() const noexcept 15726: { return _M_h.max_load_factor(); } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: max_load_factor(float __z) 15726: { _M_h.max_load_factor(__z); } 15726: # 1121 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: void 15726: rehash(size_type __n) 15726: { _M_h.rehash(__n); } 15726: # 1132 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: void 15726: reserve(size_type __n) 15726: { _M_h.reserve(__n); } 15726: 15726: template 15726: friend bool 15726: operator==(const unordered_map<_Key1, _Tp1, _Hash1, _Pred1, _Alloc1>&, 15726: const unordered_map<_Key1, _Tp1, _Hash1, _Pred1, _Alloc1>&); 15726: }; 15726: 15726: 15726: 15726: template>, 15726: typename _Pred = equal_to<__iter_key_t<_InputIterator>>, 15726: typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, 15726: typename = _RequireInputIter<_InputIterator>, 15726: typename = _RequireNotAllocatorOrIntegral<_Hash>, 15726: typename = _RequireNotAllocator<_Pred>, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_map(_InputIterator, _InputIterator, 15726: typename unordered_map::size_type = {}, 15726: _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) 15726: -> unordered_map<__iter_key_t<_InputIterator>, 15726: __iter_val_t<_InputIterator>, 15726: _Hash, _Pred, _Allocator>; 15726: 15726: template, 15726: typename _Pred = equal_to<_Key>, 15726: typename _Allocator = allocator>, 15726: typename = _RequireNotAllocatorOrIntegral<_Hash>, 15726: typename = _RequireNotAllocator<_Pred>, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_map(initializer_list>, 15726: typename unordered_map::size_type = {}, 15726: _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) 15726: -> unordered_map<_Key, _Tp, _Hash, _Pred, _Allocator>; 15726: 15726: template, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_map(_InputIterator, _InputIterator, 15726: typename unordered_map::size_type, _Allocator) 15726: -> unordered_map<__iter_key_t<_InputIterator>, 15726: __iter_val_t<_InputIterator>, 15726: hash<__iter_key_t<_InputIterator>>, 15726: equal_to<__iter_key_t<_InputIterator>>, 15726: _Allocator>; 15726: 15726: template, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_map(_InputIterator, _InputIterator, _Allocator) 15726: -> unordered_map<__iter_key_t<_InputIterator>, 15726: __iter_val_t<_InputIterator>, 15726: hash<__iter_key_t<_InputIterator>>, 15726: equal_to<__iter_key_t<_InputIterator>>, 15726: _Allocator>; 15726: 15726: template, 15726: typename = _RequireNotAllocatorOrIntegral<_Hash>, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_map(_InputIterator, _InputIterator, 15726: typename unordered_map::size_type, 15726: _Hash, _Allocator) 15726: -> unordered_map<__iter_key_t<_InputIterator>, 15726: __iter_val_t<_InputIterator>, _Hash, 15726: equal_to<__iter_key_t<_InputIterator>>, _Allocator>; 15726: 15726: template> 15726: unordered_map(initializer_list>, 15726: typename unordered_map::size_type, 15726: _Allocator) 15726: -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; 15726: 15726: template> 15726: unordered_map(initializer_list>, _Allocator) 15726: -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; 15726: 15726: template, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_map(initializer_list>, 15726: typename unordered_map::size_type, 15726: _Hash, _Allocator) 15726: -> unordered_map<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>; 15726: # 1250 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: template, 15726: typename _Pred = equal_to<_Key>, 15726: typename _Alloc = allocator>> 15726: class unordered_multimap 15726: { 15726: typedef __ummap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable; 15726: _Hashtable _M_h; 15726: 15726: public: 15726: 15726: 15726: 15726: typedef typename _Hashtable::key_type key_type; 15726: typedef typename _Hashtable::value_type value_type; 15726: typedef typename _Hashtable::mapped_type mapped_type; 15726: typedef typename _Hashtable::hasher hasher; 15726: typedef typename _Hashtable::key_equal key_equal; 15726: typedef typename _Hashtable::allocator_type allocator_type; 15726: 15726: 15726: 15726: 15726: typedef typename _Hashtable::pointer pointer; 15726: typedef typename _Hashtable::const_pointer const_pointer; 15726: typedef typename _Hashtable::reference reference; 15726: typedef typename _Hashtable::const_reference const_reference; 15726: typedef typename _Hashtable::iterator iterator; 15726: typedef typename _Hashtable::const_iterator const_iterator; 15726: typedef typename _Hashtable::local_iterator local_iterator; 15726: typedef typename _Hashtable::const_local_iterator const_local_iterator; 15726: typedef typename _Hashtable::size_type size_type; 15726: typedef typename _Hashtable::difference_type difference_type; 15726: 15726: 15726: 15726: using node_type = typename _Hashtable::node_type; 15726: 15726: 15726: 15726: 15726: 15726: unordered_multimap() = default; 15726: # 1301 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: explicit 15726: unordered_multimap(size_type __n, 15726: const hasher& __hf = hasher(), 15726: const key_equal& __eql = key_equal(), 15726: const allocator_type& __a = allocator_type()) 15726: : _M_h(__n, __hf, __eql, __a) 15726: { } 15726: # 1322 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: template 15726: unordered_multimap(_InputIterator __first, _InputIterator __last, 15726: size_type __n = 0, 15726: const hasher& __hf = hasher(), 15726: const key_equal& __eql = key_equal(), 15726: const allocator_type& __a = allocator_type()) 15726: : _M_h(__first, __last, __n, __hf, __eql, __a) 15726: { } 15726: 15726: 15726: unordered_multimap(const unordered_multimap&) = default; 15726: 15726: 15726: unordered_multimap(unordered_multimap&&) = default; 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: unordered_multimap(const allocator_type& __a) 15726: : _M_h(__a) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: unordered_multimap(const unordered_multimap& __ummap, 15726: const allocator_type& __a) 15726: : _M_h(__ummap._M_h, __a) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: unordered_multimap(unordered_multimap&& __ummap, 15726: const allocator_type& __a) 15726: noexcept( noexcept(_Hashtable(std::move(__ummap._M_h), __a)) ) 15726: : _M_h(std::move(__ummap._M_h), __a) 15726: { } 15726: # 1378 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: unordered_multimap(initializer_list __l, 15726: size_type __n = 0, 15726: const hasher& __hf = hasher(), 15726: const key_equal& __eql = key_equal(), 15726: const allocator_type& __a = allocator_type()) 15726: : _M_h(__l, __n, __hf, __eql, __a) 15726: { } 15726: 15726: unordered_multimap(size_type __n, const allocator_type& __a) 15726: : unordered_multimap(__n, hasher(), key_equal(), __a) 15726: { } 15726: 15726: unordered_multimap(size_type __n, const hasher& __hf, 15726: const allocator_type& __a) 15726: : unordered_multimap(__n, __hf, key_equal(), __a) 15726: { } 15726: 15726: template 15726: unordered_multimap(_InputIterator __first, _InputIterator __last, 15726: size_type __n, 15726: const allocator_type& __a) 15726: : unordered_multimap(__first, __last, __n, hasher(), key_equal(), __a) 15726: { } 15726: 15726: template 15726: unordered_multimap(_InputIterator __first, _InputIterator __last, 15726: size_type __n, const hasher& __hf, 15726: const allocator_type& __a) 15726: : unordered_multimap(__first, __last, __n, __hf, key_equal(), __a) 15726: { } 15726: 15726: unordered_multimap(initializer_list __l, 15726: size_type __n, 15726: const allocator_type& __a) 15726: : unordered_multimap(__l, __n, hasher(), key_equal(), __a) 15726: { } 15726: 15726: unordered_multimap(initializer_list __l, 15726: size_type __n, const hasher& __hf, 15726: const allocator_type& __a) 15726: : unordered_multimap(__l, __n, __hf, key_equal(), __a) 15726: { } 15726: 15726: 15726: unordered_multimap& 15726: operator=(const unordered_multimap&) = default; 15726: 15726: 15726: unordered_multimap& 15726: operator=(unordered_multimap&&) = default; 15726: # 1440 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: unordered_multimap& 15726: operator=(initializer_list __l) 15726: { 15726: _M_h = __l; 15726: return *this; 15726: } 15726: 15726: 15726: allocator_type 15726: get_allocator() const noexcept 15726: { return _M_h.get_allocator(); } 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] bool 15726: empty() const noexcept 15726: { return _M_h.empty(); } 15726: 15726: 15726: size_type 15726: size() const noexcept 15726: { return _M_h.size(); } 15726: 15726: 15726: size_type 15726: max_size() const noexcept 15726: { return _M_h.max_size(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: iterator 15726: begin() noexcept 15726: { return _M_h.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_iterator 15726: begin() const noexcept 15726: { return _M_h.begin(); } 15726: 15726: const_iterator 15726: cbegin() const noexcept 15726: { return _M_h.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: iterator 15726: end() noexcept 15726: { return _M_h.end(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_iterator 15726: end() const noexcept 15726: { return _M_h.end(); } 15726: 15726: const_iterator 15726: cend() const noexcept 15726: { return _M_h.end(); } 15726: # 1532 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: template 15726: iterator 15726: emplace(_Args&&... __args) 15726: { return _M_h.emplace(std::forward<_Args>(__args)...); } 15726: # 1559 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: template 15726: iterator 15726: emplace_hint(const_iterator __pos, _Args&&... __args) 15726: { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); } 15726: # 1574 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: iterator 15726: insert(const value_type& __x) 15726: { return _M_h.insert(__x); } 15726: 15726: iterator 15726: insert(value_type&& __x) 15726: { return _M_h.insert(std::move(__x)); } 15726: 15726: template 15726: __enable_if_t::value, iterator> 15726: insert(_Pair&& __x) 15726: { return _M_h.emplace(std::forward<_Pair>(__x)); } 15726: # 1608 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: iterator 15726: insert(const_iterator __hint, const value_type& __x) 15726: { return _M_h.insert(__hint, __x); } 15726: 15726: 15726: 15726: iterator 15726: insert(const_iterator __hint, value_type&& __x) 15726: { return _M_h.insert(__hint, std::move(__x)); } 15726: 15726: template 15726: __enable_if_t::value, iterator> 15726: insert(const_iterator __hint, _Pair&& __x) 15726: { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); } 15726: # 1633 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: template 15726: void 15726: insert(_InputIterator __first, _InputIterator __last) 15726: { _M_h.insert(__first, __last); } 15726: # 1646 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: void 15726: insert(initializer_list __l) 15726: { _M_h.insert(__l); } 15726: 15726: 15726: 15726: node_type 15726: extract(const_iterator __pos) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__pos != end())) __builtin_unreachable(); } while (false); 15726: return _M_h.extract(__pos); 15726: } 15726: 15726: 15726: node_type 15726: extract(const key_type& __key) 15726: { return _M_h.extract(__key); } 15726: 15726: 15726: iterator 15726: insert(node_type&& __nh) 15726: { return _M_h._M_reinsert_node_multi(cend(), std::move(__nh)); } 15726: 15726: 15726: iterator 15726: insert(const_iterator __hint, node_type&& __nh) 15726: { return _M_h._M_reinsert_node_multi(__hint, std::move(__nh)); } 15726: # 1689 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: iterator 15726: erase(const_iterator __position) 15726: { return _M_h.erase(__position); } 15726: 15726: 15726: iterator 15726: erase(iterator __position) 15726: { return _M_h.erase(__position); } 15726: # 1710 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: size_type 15726: erase(const key_type& __x) 15726: { return _M_h.erase(__x); } 15726: # 1729 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: iterator 15726: erase(const_iterator __first, const_iterator __last) 15726: { return _M_h.erase(__first, __last); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: clear() noexcept 15726: { _M_h.clear(); } 15726: # 1753 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: void 15726: swap(unordered_multimap& __x) 15726: noexcept( noexcept(_M_h.swap(__x._M_h)) ) 15726: { _M_h.swap(__x._M_h); } 15726: 15726: 15726: template 15726: friend class std::_Hash_merge_helper; 15726: 15726: template 15726: void 15726: merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source) 15726: { 15726: using _Merge_helper 15726: = _Hash_merge_helper; 15726: _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); 15726: } 15726: 15726: template 15726: void 15726: merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source) 15726: { merge(__source); } 15726: 15726: template 15726: void 15726: merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source) 15726: { 15726: using _Merge_helper 15726: = _Hash_merge_helper; 15726: _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); 15726: } 15726: 15726: template 15726: void 15726: merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source) 15726: { merge(__source); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: hasher 15726: hash_function() const 15726: { return _M_h.hash_function(); } 15726: 15726: 15726: 15726: key_equal 15726: key_eq() const 15726: { return _M_h.key_eq(); } 15726: # 1819 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: iterator 15726: find(const key_type& __x) 15726: { return _M_h.find(__x); } 15726: # 1830 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: const_iterator 15726: find(const key_type& __x) const 15726: { return _M_h.find(__x); } 15726: # 1848 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: size_type 15726: count(const key_type& __x) const 15726: { return _M_h.count(__x); } 15726: # 1886 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: std::pair 15726: equal_range(const key_type& __x) 15726: { return _M_h.equal_range(__x); } 15726: # 1898 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: std::pair 15726: equal_range(const key_type& __x) const 15726: { return _M_h.equal_range(__x); } 15726: # 1914 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: size_type 15726: bucket_count() const noexcept 15726: { return _M_h.bucket_count(); } 15726: 15726: 15726: size_type 15726: max_bucket_count() const noexcept 15726: { return _M_h.max_bucket_count(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_type 15726: bucket_size(size_type __n) const 15726: { return _M_h.bucket_size(__n); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_type 15726: bucket(const key_type& __key) const 15726: { return _M_h.bucket(__key); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: local_iterator 15726: begin(size_type __n) 15726: { return _M_h.begin(__n); } 15726: # 1958 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: const_local_iterator 15726: begin(size_type __n) const 15726: { return _M_h.begin(__n); } 15726: 15726: const_local_iterator 15726: cbegin(size_type __n) const 15726: { return _M_h.cbegin(__n); } 15726: # 1973 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: local_iterator 15726: end(size_type __n) 15726: { return _M_h.end(__n); } 15726: # 1984 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: const_local_iterator 15726: end(size_type __n) const 15726: { return _M_h.end(__n); } 15726: 15726: const_local_iterator 15726: cend(size_type __n) const 15726: { return _M_h.cend(__n); } 15726: 15726: 15726: 15726: 15726: 15726: float 15726: load_factor() const noexcept 15726: { return _M_h.load_factor(); } 15726: 15726: 15726: 15726: float 15726: max_load_factor() const noexcept 15726: { return _M_h.max_load_factor(); } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: max_load_factor(float __z) 15726: { _M_h.max_load_factor(__z); } 15726: # 2021 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: void 15726: rehash(size_type __n) 15726: { _M_h.rehash(__n); } 15726: # 2032 "/usr/include/c++/13/bits/unordered_map.h" 3 15726: void 15726: reserve(size_type __n) 15726: { _M_h.reserve(__n); } 15726: 15726: template 15726: friend bool 15726: operator==(const unordered_multimap<_Key1, _Tp1, 15726: _Hash1, _Pred1, _Alloc1>&, 15726: const unordered_multimap<_Key1, _Tp1, 15726: _Hash1, _Pred1, _Alloc1>&); 15726: }; 15726: 15726: 15726: 15726: template>, 15726: typename _Pred = equal_to<__iter_key_t<_InputIterator>>, 15726: typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, 15726: typename = _RequireInputIter<_InputIterator>, 15726: typename = _RequireNotAllocatorOrIntegral<_Hash>, 15726: typename = _RequireNotAllocator<_Pred>, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_multimap(_InputIterator, _InputIterator, 15726: unordered_multimap::size_type = {}, 15726: _Hash = _Hash(), _Pred = _Pred(), 15726: _Allocator = _Allocator()) 15726: -> unordered_multimap<__iter_key_t<_InputIterator>, 15726: __iter_val_t<_InputIterator>, _Hash, _Pred, 15726: _Allocator>; 15726: 15726: template, 15726: typename _Pred = equal_to<_Key>, 15726: typename _Allocator = allocator>, 15726: typename = _RequireNotAllocatorOrIntegral<_Hash>, 15726: typename = _RequireNotAllocator<_Pred>, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_multimap(initializer_list>, 15726: unordered_multimap::size_type = {}, 15726: _Hash = _Hash(), _Pred = _Pred(), 15726: _Allocator = _Allocator()) 15726: -> unordered_multimap<_Key, _Tp, _Hash, _Pred, _Allocator>; 15726: 15726: template, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_multimap(_InputIterator, _InputIterator, 15726: unordered_multimap::size_type, _Allocator) 15726: -> unordered_multimap<__iter_key_t<_InputIterator>, 15726: __iter_val_t<_InputIterator>, 15726: hash<__iter_key_t<_InputIterator>>, 15726: equal_to<__iter_key_t<_InputIterator>>, _Allocator>; 15726: 15726: template, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_multimap(_InputIterator, _InputIterator, _Allocator) 15726: -> unordered_multimap<__iter_key_t<_InputIterator>, 15726: __iter_val_t<_InputIterator>, 15726: hash<__iter_key_t<_InputIterator>>, 15726: equal_to<__iter_key_t<_InputIterator>>, _Allocator>; 15726: 15726: template, 15726: typename = _RequireNotAllocatorOrIntegral<_Hash>, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_multimap(_InputIterator, _InputIterator, 15726: unordered_multimap::size_type, _Hash, 15726: _Allocator) 15726: -> unordered_multimap<__iter_key_t<_InputIterator>, 15726: __iter_val_t<_InputIterator>, _Hash, 15726: equal_to<__iter_key_t<_InputIterator>>, _Allocator>; 15726: 15726: template> 15726: unordered_multimap(initializer_list>, 15726: unordered_multimap::size_type, 15726: _Allocator) 15726: -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; 15726: 15726: template> 15726: unordered_multimap(initializer_list>, _Allocator) 15726: -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; 15726: 15726: template, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_multimap(initializer_list>, 15726: unordered_multimap::size_type, 15726: _Hash, _Allocator) 15726: -> unordered_multimap<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>; 15726: 15726: 15726: 15726: template 15726: inline void 15726: swap(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, 15726: unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) 15726: noexcept(noexcept(__x.swap(__y))) 15726: { __x.swap(__y); } 15726: 15726: template 15726: inline void 15726: swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, 15726: unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) 15726: noexcept(noexcept(__x.swap(__y))) 15726: { __x.swap(__y); } 15726: 15726: template 15726: inline bool 15726: operator==(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, 15726: const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) 15726: { return __x._M_h._M_equal(__y._M_h); } 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, 15726: const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) 15726: { return !(__x == __y); } 15726: 15726: 15726: template 15726: inline bool 15726: operator==(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, 15726: const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) 15726: { return __x._M_h._M_equal(__y._M_h); } 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, 15726: const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) 15726: { return !(__x == __y); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Hash_merge_helper< 15726: std::unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>, 15726: _Hash2, _Eq2> 15726: { 15726: private: 15726: template 15726: using unordered_map = std::unordered_map<_Tp...>; 15726: template 15726: using unordered_multimap = std::unordered_multimap<_Tp...>; 15726: 15726: friend unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>; 15726: 15726: static auto& 15726: _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) 15726: { return __map._M_h; } 15726: 15726: static auto& 15726: _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) 15726: { return __map._M_h; } 15726: }; 15726: 15726: 15726: template 15726: struct _Hash_merge_helper< 15726: std::unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>, 15726: _Hash2, _Eq2> 15726: { 15726: private: 15726: template 15726: using unordered_map = std::unordered_map<_Tp...>; 15726: template 15726: using unordered_multimap = std::unordered_multimap<_Tp...>; 15726: 15726: friend unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>; 15726: 15726: static auto& 15726: _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) 15726: { return __map._M_h; } 15726: 15726: static auto& 15726: _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) 15726: { return __map._M_h; } 15726: }; 15726: 15726: 15726: 15726: } 15726: # 42 "/usr/include/c++/13/unordered_map" 2 3 15726: 15726: # 1 "/usr/include/c++/13/bits/erase_if.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/erase_if.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/erase_if.h" 3 15726: 15726: 15726: 15726: 15726: 15726: namespace std 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace __detail 15726: { 15726: template 15726: typename _Container::size_type 15726: __erase_nodes_if(_Container& __cont, _UnsafeContainer& __ucont, 15726: _Predicate __pred) 15726: { 15726: typename _Container::size_type __num = 0; 15726: for (auto __iter = __ucont.begin(), __last = __ucont.end(); 15726: __iter != __last;) 15726: { 15726: if (__pred(*__iter)) 15726: { 15726: __iter = __cont.erase(__iter); 15726: ++__num; 15726: } 15726: else 15726: ++__iter; 15726: } 15726: return __num; 15726: } 15726: } 15726: 15726: 15726: } 15726: # 44 "/usr/include/c++/13/unordered_map" 2 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: namespace pmr 15726: { 15726: template, 15726: typename _Pred = std::equal_to<_Key>> 15726: using unordered_map 15726: = std::unordered_map<_Key, _Tp, _Hash, _Pred, 15726: polymorphic_allocator>>; 15726: template, 15726: typename _Pred = std::equal_to<_Key>> 15726: using unordered_multimap 15726: = std::unordered_multimap<_Key, _Tp, _Hash, _Pred, 15726: polymorphic_allocator>>; 15726: } 15726: 15726: } 15726: # 64 "/usr/include/c++/13/functional" 2 3 15726: # 1 "/usr/include/c++/13/vector" 1 3 15726: # 58 "/usr/include/c++/13/vector" 3 15726: 15726: # 59 "/usr/include/c++/13/vector" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/stl_vector.h" 1 3 15726: # 78 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: template 15726: struct _Vector_base 15726: { 15726: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 15726: rebind<_Tp>::other _Tp_alloc_type; 15726: typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>::pointer 15726: pointer; 15726: 15726: struct _Vector_impl_data 15726: { 15726: pointer _M_start; 15726: pointer _M_finish; 15726: pointer _M_end_of_storage; 15726: 15726: 15726: _Vector_impl_data() noexcept 15726: : _M_start(), _M_finish(), _M_end_of_storage() 15726: { } 15726: 15726: 15726: 15726: _Vector_impl_data(_Vector_impl_data&& __x) noexcept 15726: : _M_start(__x._M_start), _M_finish(__x._M_finish), 15726: _M_end_of_storage(__x._M_end_of_storage) 15726: { __x._M_start = __x._M_finish = __x._M_end_of_storage = pointer(); } 15726: 15726: 15726: 15726: void 15726: _M_copy_data(_Vector_impl_data const& __x) noexcept 15726: { 15726: _M_start = __x._M_start; 15726: _M_finish = __x._M_finish; 15726: _M_end_of_storage = __x._M_end_of_storage; 15726: } 15726: 15726: 15726: void 15726: _M_swap_data(_Vector_impl_data& __x) noexcept 15726: { 15726: 15726: 15726: _Vector_impl_data __tmp; 15726: __tmp._M_copy_data(*this); 15726: _M_copy_data(__x); 15726: __x._M_copy_data(__tmp); 15726: } 15726: }; 15726: 15726: struct _Vector_impl 15726: : public _Tp_alloc_type, public _Vector_impl_data 15726: { 15726: 15726: _Vector_impl() noexcept(is_nothrow_default_constructible<_Tp_alloc_type>::value) 15726: 15726: 15726: 15726: 15726: : _Tp_alloc_type() 15726: { } 15726: 15726: 15726: _Vector_impl(_Tp_alloc_type const& __a) noexcept 15726: : _Tp_alloc_type(__a) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: _Vector_impl(_Vector_impl&& __x) noexcept 15726: : _Tp_alloc_type(std::move(__x)), _Vector_impl_data(std::move(__x)) 15726: { } 15726: 15726: 15726: _Vector_impl(_Tp_alloc_type&& __a) noexcept 15726: : _Tp_alloc_type(std::move(__a)) 15726: { } 15726: 15726: 15726: _Vector_impl(_Tp_alloc_type&& __a, _Vector_impl&& __rv) noexcept 15726: : _Tp_alloc_type(std::move(__a)), _Vector_impl_data(std::move(__rv)) 15726: { } 15726: # 294 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: }; 15726: 15726: public: 15726: typedef _Alloc allocator_type; 15726: 15726: 15726: _Tp_alloc_type& 15726: _M_get_Tp_allocator() noexcept 15726: { return this->_M_impl; } 15726: 15726: 15726: const _Tp_alloc_type& 15726: _M_get_Tp_allocator() const noexcept 15726: { return this->_M_impl; } 15726: 15726: 15726: allocator_type 15726: get_allocator() const noexcept 15726: { return allocator_type(_M_get_Tp_allocator()); } 15726: 15726: 15726: _Vector_base() = default; 15726: 15726: 15726: 15726: 15726: 15726: _Vector_base(const allocator_type& __a) noexcept 15726: : _M_impl(__a) { } 15726: 15726: 15726: 15726: 15726: _Vector_base(size_t __n) 15726: : _M_impl() 15726: { _M_create_storage(__n); } 15726: 15726: 15726: 15726: _Vector_base(size_t __n, const allocator_type& __a) 15726: : _M_impl(__a) 15726: { _M_create_storage(__n); } 15726: 15726: 15726: _Vector_base(_Vector_base&&) = default; 15726: 15726: 15726: 15726: 15726: _Vector_base(_Tp_alloc_type&& __a) noexcept 15726: : _M_impl(std::move(__a)) { } 15726: 15726: 15726: _Vector_base(_Vector_base&& __x, const allocator_type& __a) 15726: : _M_impl(__a) 15726: { 15726: if (__x.get_allocator() == __a) 15726: this->_M_impl._M_swap_data(__x._M_impl); 15726: else 15726: { 15726: size_t __n = __x._M_impl._M_finish - __x._M_impl._M_start; 15726: _M_create_storage(__n); 15726: } 15726: } 15726: 15726: 15726: 15726: _Vector_base(const allocator_type& __a, _Vector_base&& __x) 15726: : _M_impl(_Tp_alloc_type(__a), std::move(__x._M_impl)) 15726: { } 15726: 15726: 15726: 15726: ~_Vector_base() noexcept 15726: { 15726: _M_deallocate(_M_impl._M_start, 15726: _M_impl._M_end_of_storage - _M_impl._M_start); 15726: } 15726: 15726: public: 15726: _Vector_impl _M_impl; 15726: 15726: 15726: pointer 15726: _M_allocate(size_t __n) 15726: { 15726: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tr; 15726: return __n != 0 ? _Tr::allocate(_M_impl, __n) : pointer(); 15726: } 15726: 15726: 15726: void 15726: _M_deallocate(pointer __p, size_t __n) 15726: { 15726: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tr; 15726: if (__p) 15726: _Tr::deallocate(_M_impl, __p, __n); 15726: } 15726: 15726: protected: 15726: 15726: void 15726: _M_create_storage(size_t __n) 15726: { 15726: this->_M_impl._M_start = this->_M_allocate(__n); 15726: this->_M_impl._M_finish = this->_M_impl._M_start; 15726: this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; 15726: } 15726: }; 15726: # 427 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: template > 15726: class vector : protected _Vector_base<_Tp, _Alloc> 15726: { 15726: # 440 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: static_assert(is_same::type, _Tp>::value, 15726: "std::vector must have a non-const, non-volatile value_type"); 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef _Vector_base<_Tp, _Alloc> _Base; 15726: typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; 15726: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Alloc_traits; 15726: 15726: public: 15726: typedef _Tp value_type; 15726: typedef typename _Base::pointer pointer; 15726: typedef typename _Alloc_traits::const_pointer const_pointer; 15726: typedef typename _Alloc_traits::reference reference; 15726: typedef typename _Alloc_traits::const_reference const_reference; 15726: typedef __gnu_cxx::__normal_iterator iterator; 15726: typedef __gnu_cxx::__normal_iterator 15726: const_iterator; 15726: typedef std::reverse_iterator const_reverse_iterator; 15726: typedef std::reverse_iterator reverse_iterator; 15726: typedef size_t size_type; 15726: typedef ptrdiff_t difference_type; 15726: typedef _Alloc allocator_type; 15726: 15726: private: 15726: 15726: static constexpr bool 15726: _S_nothrow_relocate(true_type) 15726: { 15726: return noexcept(std::__relocate_a(std::declval(), 15726: std::declval(), 15726: std::declval(), 15726: std::declval<_Tp_alloc_type&>())); 15726: } 15726: 15726: static constexpr bool 15726: _S_nothrow_relocate(false_type) 15726: { return false; } 15726: 15726: static constexpr bool 15726: _S_use_relocate() 15726: { 15726: 15726: 15726: 15726: return _S_nothrow_relocate(__is_move_insertable<_Tp_alloc_type>{}); 15726: } 15726: 15726: static pointer 15726: _S_do_relocate(pointer __first, pointer __last, pointer __result, 15726: _Tp_alloc_type& __alloc, true_type) noexcept 15726: { 15726: return std::__relocate_a(__first, __last, __result, __alloc); 15726: } 15726: 15726: static pointer 15726: _S_do_relocate(pointer, pointer, pointer __result, 15726: _Tp_alloc_type&, false_type) noexcept 15726: { return __result; } 15726: 15726: static pointer 15726: _S_relocate(pointer __first, pointer __last, pointer __result, 15726: _Tp_alloc_type& __alloc) noexcept 15726: { 15726: 15726: 15726: return std::__relocate_a(__first, __last, __result, __alloc); 15726: 15726: 15726: 15726: 15726: } 15726: 15726: 15726: protected: 15726: using _Base::_M_allocate; 15726: using _Base::_M_deallocate; 15726: using _Base::_M_impl; 15726: using _Base::_M_get_Tp_allocator; 15726: 15726: public: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: vector() = default; 15726: # 540 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: explicit 15726: 15726: vector(const allocator_type& __a) noexcept 15726: : _Base(__a) { } 15726: # 554 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: explicit 15726: 15726: vector(size_type __n, const allocator_type& __a = allocator_type()) 15726: : _Base(_S_check_init_len(__n, __a), __a) 15726: { _M_default_initialize(__n); } 15726: # 568 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: vector(size_type __n, const value_type& __value, 15726: const allocator_type& __a = allocator_type()) 15726: : _Base(_S_check_init_len(__n, __a), __a) 15726: { _M_fill_initialize(__n, __value); } 15726: # 600 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: vector(const vector& __x) 15726: : _Base(__x.size(), 15726: _Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator())) 15726: { 15726: this->_M_impl._M_finish = 15726: std::__uninitialized_copy_a(__x.begin(), __x.end(), 15726: this->_M_impl._M_start, 15726: _M_get_Tp_allocator()); 15726: } 15726: # 620 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: vector(vector&&) noexcept = default; 15726: 15726: 15726: 15726: vector(const vector& __x, const __type_identity_t& __a) 15726: : _Base(__x.size(), __a) 15726: { 15726: this->_M_impl._M_finish = 15726: std::__uninitialized_copy_a(__x.begin(), __x.end(), 15726: this->_M_impl._M_start, 15726: _M_get_Tp_allocator()); 15726: } 15726: 15726: private: 15726: 15726: vector(vector&& __rv, const allocator_type& __m, true_type) noexcept 15726: : _Base(__m, std::move(__rv)) 15726: { } 15726: 15726: 15726: vector(vector&& __rv, const allocator_type& __m, false_type) 15726: : _Base(__m) 15726: { 15726: if (__rv.get_allocator() == __m) 15726: this->_M_impl._M_swap_data(__rv._M_impl); 15726: else if (!__rv.empty()) 15726: { 15726: this->_M_create_storage(__rv.size()); 15726: this->_M_impl._M_finish = 15726: std::__uninitialized_move_a(__rv.begin(), __rv.end(), 15726: this->_M_impl._M_start, 15726: _M_get_Tp_allocator()); 15726: __rv.clear(); 15726: } 15726: } 15726: 15726: public: 15726: 15726: 15726: vector(vector&& __rv, const __type_identity_t& __m) 15726: noexcept( noexcept( 15726: vector(std::declval(), std::declval(), 15726: std::declval())) ) 15726: : vector(std::move(__rv), __m, typename _Alloc_traits::is_always_equal{}) 15726: { } 15726: # 677 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: vector(initializer_list __l, 15726: const allocator_type& __a = allocator_type()) 15726: : _Base(__a) 15726: { 15726: _M_range_initialize(__l.begin(), __l.end(), 15726: random_access_iterator_tag()); 15726: } 15726: # 704 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: template> 15726: 15726: vector(_InputIterator __first, _InputIterator __last, 15726: const allocator_type& __a = allocator_type()) 15726: : _Base(__a) 15726: { 15726: _M_range_initialize(__first, __last, 15726: std::__iterator_category(__first)); 15726: } 15726: # 732 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: ~vector() noexcept 15726: { 15726: std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, 15726: _M_get_Tp_allocator()); 15726: ; 15726: } 15726: # 749 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: vector& 15726: operator=(const vector& __x); 15726: # 764 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: vector& 15726: operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move()) 15726: { 15726: constexpr bool __move_storage = 15726: _Alloc_traits::_S_propagate_on_move_assign() 15726: || _Alloc_traits::_S_always_equal(); 15726: _M_move_assign(std::move(__x), __bool_constant<__move_storage>()); 15726: return *this; 15726: } 15726: # 786 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: vector& 15726: operator=(initializer_list __l) 15726: { 15726: this->_M_assign_aux(__l.begin(), __l.end(), 15726: random_access_iterator_tag()); 15726: return *this; 15726: } 15726: # 806 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: void 15726: assign(size_type __n, const value_type& __val) 15726: { _M_fill_assign(__n, __val); } 15726: # 824 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: template> 15726: 15726: void 15726: assign(_InputIterator __first, _InputIterator __last) 15726: { _M_assign_aux(__first, __last, std::__iterator_category(__first)); } 15726: # 853 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: void 15726: assign(initializer_list __l) 15726: { 15726: this->_M_assign_aux(__l.begin(), __l.end(), 15726: random_access_iterator_tag()); 15726: } 15726: 15726: 15726: 15726: using _Base::get_allocator; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: iterator 15726: begin() noexcept 15726: { return iterator(this->_M_impl._M_start); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: begin() const noexcept 15726: { return const_iterator(this->_M_impl._M_start); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: iterator 15726: end() noexcept 15726: { return iterator(this->_M_impl._M_finish); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: end() const noexcept 15726: { return const_iterator(this->_M_impl._M_finish); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: reverse_iterator 15726: rbegin() noexcept 15726: { return reverse_iterator(end()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: rbegin() const noexcept 15726: { return const_reverse_iterator(end()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: reverse_iterator 15726: rend() noexcept 15726: { return reverse_iterator(begin()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: rend() const noexcept 15726: { return const_reverse_iterator(begin()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: cbegin() const noexcept 15726: { return const_iterator(this->_M_impl._M_start); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: cend() const noexcept 15726: { return const_iterator(this->_M_impl._M_finish); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: crbegin() const noexcept 15726: { return const_reverse_iterator(end()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: crend() const noexcept 15726: { return const_reverse_iterator(begin()); } 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: size_type 15726: size() const noexcept 15726: { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); } 15726: 15726: 15726: [[__nodiscard__]] 15726: size_type 15726: max_size() const noexcept 15726: { return _S_max_size(_M_get_Tp_allocator()); } 15726: # 1011 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: void 15726: resize(size_type __new_size) 15726: { 15726: if (__new_size > size()) 15726: _M_default_append(__new_size - size()); 15726: else if (__new_size < size()) 15726: _M_erase_at_end(this->_M_impl._M_start + __new_size); 15726: } 15726: # 1032 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: void 15726: resize(size_type __new_size, const value_type& __x) 15726: { 15726: if (__new_size > size()) 15726: _M_fill_insert(end(), __new_size - size(), __x); 15726: else if (__new_size < size()) 15726: _M_erase_at_end(this->_M_impl._M_start + __new_size); 15726: } 15726: # 1066 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: void 15726: shrink_to_fit() 15726: { _M_shrink_to_fit(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: size_type 15726: capacity() const noexcept 15726: { return size_type(this->_M_impl._M_end_of_storage 15726: - this->_M_impl._M_start); } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: bool 15726: empty() const noexcept 15726: { return begin() == end(); } 15726: # 1108 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: void 15726: reserve(size_type __n); 15726: # 1124 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: [[__nodiscard__]] 15726: reference 15726: operator[](size_type __n) noexcept 15726: { 15726: ; 15726: return *(this->_M_impl._M_start + __n); 15726: } 15726: # 1143 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: [[__nodiscard__]] 15726: const_reference 15726: operator[](size_type __n) const noexcept 15726: { 15726: ; 15726: return *(this->_M_impl._M_start + __n); 15726: } 15726: 15726: protected: 15726: 15726: 15726: void 15726: _M_range_check(size_type __n) const 15726: { 15726: if (__n >= this->size()) 15726: __throw_out_of_range_fmt(("vector::_M_range_check: __n " "(which is %zu) >= this->size() " "(which is %zu)") 15726: 15726: , 15726: __n, this->size()); 15726: } 15726: 15726: public: 15726: # 1176 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: reference 15726: at(size_type __n) 15726: { 15726: _M_range_check(__n); 15726: return (*this)[__n]; 15726: } 15726: # 1195 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: const_reference 15726: at(size_type __n) const 15726: { 15726: _M_range_check(__n); 15726: return (*this)[__n]; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: reference 15726: front() noexcept 15726: { 15726: ; 15726: return *begin(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reference 15726: front() const noexcept 15726: { 15726: ; 15726: return *begin(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: reference 15726: back() noexcept 15726: { 15726: ; 15726: return *(end() - 1); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reference 15726: back() const noexcept 15726: { 15726: ; 15726: return *(end() - 1); 15726: } 15726: # 1258 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: [[__nodiscard__]] 15726: _Tp* 15726: data() noexcept 15726: { return _M_data_ptr(this->_M_impl._M_start); } 15726: 15726: [[__nodiscard__]] 15726: const _Tp* 15726: data() const noexcept 15726: { return _M_data_ptr(this->_M_impl._M_start); } 15726: # 1279 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: void 15726: push_back(const value_type& __x) 15726: { 15726: if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) 15726: { 15726: ; 15726: _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, 15726: __x); 15726: ++this->_M_impl._M_finish; 15726: ; 15726: } 15726: else 15726: _M_realloc_insert(end(), __x); 15726: } 15726: 15726: 15726: 15726: void 15726: push_back(value_type&& __x) 15726: { emplace_back(std::move(__x)); } 15726: 15726: template 15726: 15726: 15726: reference 15726: 15726: 15726: 15726: emplace_back(_Args&&... __args); 15726: # 1320 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: void 15726: pop_back() noexcept 15726: { 15726: ; 15726: --this->_M_impl._M_finish; 15726: _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish); 15726: ; 15726: } 15726: # 1343 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: template 15726: 15726: iterator 15726: emplace(const_iterator __position, _Args&&... __args) 15726: { return _M_emplace_aux(__position, std::forward<_Args>(__args)...); } 15726: # 1360 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: iterator 15726: insert(const_iterator __position, const value_type& __x); 15726: # 1391 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: iterator 15726: insert(const_iterator __position, value_type&& __x) 15726: { return _M_insert_rval(__position, std::move(__x)); } 15726: # 1409 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: iterator 15726: insert(const_iterator __position, initializer_list __l) 15726: { 15726: auto __offset = __position - cbegin(); 15726: _M_range_insert(begin() + __offset, __l.begin(), __l.end(), 15726: std::random_access_iterator_tag()); 15726: return begin() + __offset; 15726: } 15726: # 1435 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: iterator 15726: insert(const_iterator __position, size_type __n, const value_type& __x) 15726: { 15726: difference_type __offset = __position - cbegin(); 15726: _M_fill_insert(begin() + __offset, __n, __x); 15726: return begin() + __offset; 15726: } 15726: # 1478 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: template> 15726: 15726: iterator 15726: insert(const_iterator __position, _InputIterator __first, 15726: _InputIterator __last) 15726: { 15726: difference_type __offset = __position - cbegin(); 15726: _M_range_insert(begin() + __offset, __first, __last, 15726: std::__iterator_category(__first)); 15726: return begin() + __offset; 15726: } 15726: # 1531 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: iterator 15726: 15726: erase(const_iterator __position) 15726: { return _M_erase(begin() + (__position - cbegin())); } 15726: # 1559 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: iterator 15726: 15726: erase(const_iterator __first, const_iterator __last) 15726: { 15726: const auto __beg = begin(); 15726: const auto __cbeg = cbegin(); 15726: return _M_erase(__beg + (__first - __cbeg), __beg + (__last - __cbeg)); 15726: } 15726: # 1584 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: 15726: void 15726: swap(vector& __x) noexcept 15726: { 15726: 15726: do { if (std::__is_constant_evaluated() && !bool(_Alloc_traits::propagate_on_container_swap::value || _M_get_Tp_allocator() == __x._M_get_Tp_allocator())) __builtin_unreachable(); } while (false) 15726: ; 15726: 15726: this->_M_impl._M_swap_data(__x._M_impl); 15726: _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(), 15726: __x._M_get_Tp_allocator()); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: clear() noexcept 15726: { _M_erase_at_end(this->_M_impl._M_start); } 15726: 15726: protected: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: pointer 15726: _M_allocate_and_copy(size_type __n, 15726: _ForwardIterator __first, _ForwardIterator __last) 15726: { 15726: pointer __result = this->_M_allocate(__n); 15726: try 15726: { 15726: std::__uninitialized_copy_a(__first, __last, __result, 15726: _M_get_Tp_allocator()); 15726: return __result; 15726: } 15726: catch(...) 15726: { 15726: _M_deallocate(__result, __n); 15726: throw; 15726: } 15726: } 15726: # 1664 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: template 15726: 15726: void 15726: _M_range_initialize(_InputIterator __first, _InputIterator __last, 15726: std::input_iterator_tag) 15726: { 15726: try { 15726: for (; __first != __last; ++__first) 15726: 15726: emplace_back(*__first); 15726: 15726: 15726: 15726: } catch(...) { 15726: clear(); 15726: throw; 15726: } 15726: } 15726: 15726: 15726: template 15726: 15726: void 15726: _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last, 15726: std::forward_iterator_tag) 15726: { 15726: const size_type __n = std::distance(__first, __last); 15726: this->_M_impl._M_start 15726: = this->_M_allocate(_S_check_init_len(__n, _M_get_Tp_allocator())); 15726: this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; 15726: this->_M_impl._M_finish = 15726: std::__uninitialized_copy_a(__first, __last, 15726: this->_M_impl._M_start, 15726: _M_get_Tp_allocator()); 15726: } 15726: 15726: 15726: 15726: 15726: void 15726: _M_fill_initialize(size_type __n, const value_type& __value) 15726: { 15726: this->_M_impl._M_finish = 15726: std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value, 15726: _M_get_Tp_allocator()); 15726: } 15726: 15726: 15726: 15726: 15726: void 15726: _M_default_initialize(size_type __n) 15726: { 15726: this->_M_impl._M_finish = 15726: std::__uninitialized_default_n_a(this->_M_impl._M_start, __n, 15726: _M_get_Tp_allocator()); 15726: } 15726: # 1730 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: template 15726: 15726: void 15726: _M_assign_dispatch(_Integer __n, _Integer __val, __true_type) 15726: { _M_fill_assign(__n, __val); } 15726: 15726: 15726: template 15726: 15726: void 15726: _M_assign_dispatch(_InputIterator __first, _InputIterator __last, 15726: __false_type) 15726: { _M_assign_aux(__first, __last, std::__iterator_category(__first)); } 15726: 15726: 15726: template 15726: 15726: void 15726: _M_assign_aux(_InputIterator __first, _InputIterator __last, 15726: std::input_iterator_tag); 15726: 15726: 15726: template 15726: 15726: void 15726: _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, 15726: std::forward_iterator_tag); 15726: 15726: 15726: 15726: 15726: void 15726: _M_fill_assign(size_type __n, const value_type& __val); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: void 15726: _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __val, 15726: __true_type) 15726: { _M_fill_insert(__pos, __n, __val); } 15726: 15726: 15726: template 15726: 15726: void 15726: _M_insert_dispatch(iterator __pos, _InputIterator __first, 15726: _InputIterator __last, __false_type) 15726: { 15726: _M_range_insert(__pos, __first, __last, 15726: std::__iterator_category(__first)); 15726: } 15726: 15726: 15726: template 15726: 15726: void 15726: _M_range_insert(iterator __pos, _InputIterator __first, 15726: _InputIterator __last, std::input_iterator_tag); 15726: 15726: 15726: template 15726: 15726: void 15726: _M_range_insert(iterator __pos, _ForwardIterator __first, 15726: _ForwardIterator __last, std::forward_iterator_tag); 15726: 15726: 15726: 15726: 15726: void 15726: _M_fill_insert(iterator __pos, size_type __n, const value_type& __x); 15726: 15726: 15726: 15726: 15726: void 15726: _M_default_append(size_type __n); 15726: 15726: 15726: bool 15726: _M_shrink_to_fit(); 15726: # 1829 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: struct _Temporary_value 15726: { 15726: template 15726: explicit 15726: _Temporary_value(vector* __vec, _Args&&... __args) : _M_this(__vec) 15726: { 15726: _Alloc_traits::construct(_M_this->_M_impl, _M_ptr(), 15726: std::forward<_Args>(__args)...); 15726: } 15726: 15726: 15726: ~_Temporary_value() 15726: { _Alloc_traits::destroy(_M_this->_M_impl, _M_ptr()); } 15726: 15726: value_type& 15726: _M_val() noexcept { return _M_storage._M_val; } 15726: 15726: private: 15726: _Tp* 15726: _M_ptr() noexcept { return std::__addressof(_M_storage._M_val); } 15726: 15726: union _Storage 15726: { 15726: constexpr _Storage() : _M_byte() { } 15726: ~_Storage() { } 15726: _Storage& operator=(const _Storage&) = delete; 15726: unsigned char _M_byte; 15726: _Tp _M_val; 15726: }; 15726: 15726: vector* _M_this; 15726: _Storage _M_storage; 15726: }; 15726: 15726: 15726: 15726: template 15726: 15726: void 15726: _M_insert_aux(iterator __position, _Arg&& __arg); 15726: 15726: template 15726: 15726: void 15726: _M_realloc_insert(iterator __position, _Args&&... __args); 15726: 15726: 15726: 15726: iterator 15726: _M_insert_rval(const_iterator __position, value_type&& __v); 15726: 15726: 15726: template 15726: 15726: iterator 15726: _M_emplace_aux(const_iterator __position, _Args&&... __args); 15726: 15726: 15726: 15726: iterator 15726: _M_emplace_aux(const_iterator __position, value_type&& __v) 15726: { return _M_insert_rval(__position, std::move(__v)); } 15726: 15726: 15726: 15726: 15726: size_type 15726: _M_check_len(size_type __n, const char* __s) const 15726: { 15726: if (max_size() - size() < __n) 15726: __throw_length_error((__s)); 15726: 15726: const size_type __len = size() + (std::max)(size(), __n); 15726: return (__len < size() || __len > max_size()) ? max_size() : __len; 15726: } 15726: 15726: 15726: static size_type 15726: _S_check_init_len(size_type __n, const allocator_type& __a) 15726: { 15726: if (__n > _S_max_size(_Tp_alloc_type(__a))) 15726: __throw_length_error( 15726: ("cannot create std::vector larger than max_size()")); 15726: return __n; 15726: } 15726: 15726: static size_type 15726: _S_max_size(const _Tp_alloc_type& __a) noexcept 15726: { 15726: 15726: 15726: 15726: const size_t __diffmax 15726: = __gnu_cxx::__numeric_traits::__max / sizeof(_Tp); 15726: const size_t __allocmax = _Alloc_traits::max_size(__a); 15726: return (std::min)(__diffmax, __allocmax); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: _M_erase_at_end(pointer __pos) noexcept 15726: { 15726: if (size_type __n = this->_M_impl._M_finish - __pos) 15726: { 15726: std::_Destroy(__pos, this->_M_impl._M_finish, 15726: _M_get_Tp_allocator()); 15726: this->_M_impl._M_finish = __pos; 15726: ; 15726: } 15726: } 15726: 15726: 15726: iterator 15726: _M_erase(iterator __position); 15726: 15726: 15726: iterator 15726: _M_erase(iterator __first, iterator __last); 15726: 15726: 15726: private: 15726: 15726: 15726: 15726: 15726: void 15726: _M_move_assign(vector&& __x, true_type) noexcept 15726: { 15726: vector __tmp(get_allocator()); 15726: this->_M_impl._M_swap_data(__x._M_impl); 15726: __tmp._M_impl._M_swap_data(__x._M_impl); 15726: std::__alloc_on_move(_M_get_Tp_allocator(), __x._M_get_Tp_allocator()); 15726: } 15726: 15726: 15726: 15726: 15726: void 15726: _M_move_assign(vector&& __x, false_type) 15726: { 15726: if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator()) 15726: _M_move_assign(std::move(__x), true_type()); 15726: else 15726: { 15726: 15726: 15726: this->_M_assign_aux(std::make_move_iterator(__x.begin()), 15726: std::make_move_iterator(__x.end()), 15726: std::random_access_iterator_tag()); 15726: __x.clear(); 15726: } 15726: } 15726: 15726: 15726: template 15726: 15726: _Up* 15726: _M_data_ptr(_Up* __ptr) const noexcept 15726: { return __ptr; } 15726: 15726: 15726: template 15726: 15726: typename std::pointer_traits<_Ptr>::element_type* 15726: _M_data_ptr(_Ptr __ptr) const 15726: { return empty() ? nullptr : std::__to_address(__ptr); } 15726: # 2015 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: }; 15726: 15726: 15726: template::value_type, 15726: typename _Allocator = allocator<_ValT>, 15726: typename = _RequireInputIter<_InputIterator>, 15726: typename = _RequireAllocator<_Allocator>> 15726: vector(_InputIterator, _InputIterator, _Allocator = _Allocator()) 15726: -> vector<_ValT, _Allocator>; 15726: # 2037 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: template 15726: 15726: inline bool 15726: operator==(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) 15726: { return (__x.size() == __y.size() 15726: && std::equal(__x.begin(), __x.end(), __y.begin())); } 15726: # 2077 "/usr/include/c++/13/bits/stl_vector.h" 3 15726: template 15726: inline bool 15726: operator<(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) 15726: { return std::lexicographical_compare(__x.begin(), __x.end(), 15726: __y.begin(), __y.end()); } 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) 15726: { return !(__x == __y); } 15726: 15726: 15726: template 15726: inline bool 15726: operator>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) 15726: { return __y < __x; } 15726: 15726: 15726: template 15726: inline bool 15726: operator<=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) 15726: { return !(__y < __x); } 15726: 15726: 15726: template 15726: inline bool 15726: operator>=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) 15726: { return !(__x < __y); } 15726: 15726: 15726: 15726: template 15726: 15726: inline void 15726: swap(vector<_Tp, _Alloc>& __x, vector<_Tp, _Alloc>& __y) 15726: noexcept(noexcept(__x.swap(__y))) 15726: { __x.swap(__y); } 15726: 15726: 15726: 15726: 15726: namespace __detail::__variant 15726: { 15726: template struct _Never_valueless_alt; 15726: 15726: 15726: 15726: template 15726: struct _Never_valueless_alt> 15726: : std::is_nothrow_move_assignable> 15726: { }; 15726: } 15726: 15726: 15726: 15726: } 15726: # 67 "/usr/include/c++/13/vector" 2 3 15726: # 1 "/usr/include/c++/13/bits/stl_bvector.h" 1 3 15726: # 68 "/usr/include/c++/13/bits/stl_bvector.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: typedef unsigned long _Bit_type; 15726: enum { _S_word_bit = int(8 * sizeof(_Bit_type)) }; 15726: 15726: __attribute__((__nonnull__)) 15726: 15726: void 15726: __fill_bvector_n(_Bit_type*, size_t, bool) noexcept; 15726: 15726: 15726: 15726: struct _Bit_reference 15726: { 15726: _Bit_type * _M_p; 15726: _Bit_type _M_mask; 15726: 15726: 15726: _Bit_reference(_Bit_type * __x, _Bit_type __y) 15726: : _M_p(__x), _M_mask(__y) { } 15726: 15726: 15726: _Bit_reference() noexcept : _M_p(0), _M_mask(0) { } 15726: 15726: 15726: _Bit_reference(const _Bit_reference&) = default; 15726: 15726: 15726: [[__nodiscard__]] 15726: operator bool() const noexcept 15726: { return !!(*_M_p & _M_mask); } 15726: 15726: 15726: _Bit_reference& 15726: operator=(bool __x) noexcept 15726: { 15726: if (__x) 15726: *_M_p |= _M_mask; 15726: else 15726: *_M_p &= ~_M_mask; 15726: return *this; 15726: } 15726: # 125 "/usr/include/c++/13/bits/stl_bvector.h" 3 15726: 15726: _Bit_reference& 15726: operator=(const _Bit_reference& __x) noexcept 15726: { return *this = bool(__x); } 15726: 15726: [[__nodiscard__]] 15726: bool 15726: operator==(const _Bit_reference& __x) const 15726: { return bool(*this) == bool(__x); } 15726: 15726: [[__nodiscard__]] 15726: bool 15726: operator<(const _Bit_reference& __x) const 15726: { return !bool(*this) && bool(__x); } 15726: 15726: 15726: void 15726: flip() noexcept 15726: { *_M_p ^= _M_mask; } 15726: 15726: 15726: 15726: friend void 15726: swap(_Bit_reference __x, _Bit_reference __y) noexcept 15726: { 15726: bool __tmp = __x; 15726: __x = __y; 15726: __y = __tmp; 15726: } 15726: 15726: 15726: friend void 15726: swap(_Bit_reference __x, bool& __y) noexcept 15726: { 15726: bool __tmp = __x; 15726: __x = __y; 15726: __y = __tmp; 15726: } 15726: 15726: 15726: friend void 15726: swap(bool& __x, _Bit_reference __y) noexcept 15726: { 15726: bool __tmp = __x; 15726: __x = __y; 15726: __y = __tmp; 15726: } 15726: 15726: }; 15726: 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: struct _Bit_iterator_base 15726: : public std::iterator 15726: { 15726: _Bit_type * _M_p; 15726: unsigned int _M_offset; 15726: 15726: inline __attribute__((__always_inline__)) 15726: void 15726: _M_assume_normalized() const 15726: { 15726: 15726: unsigned int __ofst = _M_offset; 15726: __attribute__ ((__assume__ (__ofst < unsigned(_S_word_bit)))); 15726: 15726: } 15726: 15726: 15726: _Bit_iterator_base(_Bit_type * __x, unsigned int __y) 15726: : _M_p(__x), _M_offset(__y) { } 15726: 15726: 15726: void 15726: _M_bump_up() 15726: { 15726: _M_assume_normalized(); 15726: if (_M_offset++ == int(_S_word_bit) - 1) 15726: { 15726: _M_offset = 0; 15726: ++_M_p; 15726: } 15726: } 15726: 15726: 15726: void 15726: _M_bump_down() 15726: { 15726: _M_assume_normalized(); 15726: if (_M_offset-- == 0) 15726: { 15726: _M_offset = int(_S_word_bit) - 1; 15726: --_M_p; 15726: } 15726: } 15726: 15726: 15726: void 15726: _M_incr(ptrdiff_t __i) 15726: { 15726: _M_assume_normalized(); 15726: difference_type __n = __i + _M_offset; 15726: _M_p += __n / int(_S_word_bit); 15726: __n = __n % int(_S_word_bit); 15726: if (__n < 0) 15726: { 15726: __n += int(_S_word_bit); 15726: --_M_p; 15726: } 15726: _M_offset = static_cast(__n); 15726: } 15726: 15726: [[__nodiscard__]] 15726: friend bool 15726: operator==(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) 15726: { 15726: __x._M_assume_normalized(); 15726: __y._M_assume_normalized(); 15726: return __x._M_p == __y._M_p && __x._M_offset == __y._M_offset; 15726: } 15726: # 260 "/usr/include/c++/13/bits/stl_bvector.h" 3 15726: [[__nodiscard__]] 15726: friend bool 15726: operator<(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) 15726: { 15726: __x._M_assume_normalized(); 15726: __y._M_assume_normalized(); 15726: return __x._M_p < __y._M_p 15726: || (__x._M_p == __y._M_p && __x._M_offset < __y._M_offset); 15726: } 15726: 15726: [[__nodiscard__]] 15726: friend bool 15726: operator!=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) 15726: { return !(__x == __y); } 15726: 15726: [[__nodiscard__]] 15726: friend bool 15726: operator>(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) 15726: { return __y < __x; } 15726: 15726: [[__nodiscard__]] 15726: friend bool 15726: operator<=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) 15726: { return !(__y < __x); } 15726: 15726: [[__nodiscard__]] 15726: friend bool 15726: operator>=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) 15726: { return !(__x < __y); } 15726: 15726: 15726: friend ptrdiff_t 15726: operator-(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) 15726: { 15726: __x._M_assume_normalized(); 15726: __y._M_assume_normalized(); 15726: return (int(_S_word_bit) * (__x._M_p - __y._M_p) 15726: + __x._M_offset - __y._M_offset); 15726: } 15726: }; 15726: #pragma GCC diagnostic pop 15726: 15726: struct _Bit_iterator : public _Bit_iterator_base 15726: { 15726: typedef _Bit_reference reference; 15726: 15726: 15726: 15726: typedef _Bit_reference* pointer; 15726: 15726: typedef _Bit_iterator iterator; 15726: 15726: 15726: _Bit_iterator() : _Bit_iterator_base(0, 0) { } 15726: 15726: 15726: _Bit_iterator(_Bit_type * __x, unsigned int __y) 15726: : _Bit_iterator_base(__x, __y) { } 15726: 15726: 15726: iterator 15726: _M_const_cast() const 15726: { return *this; } 15726: 15726: [[__nodiscard__]] 15726: reference 15726: operator*() const 15726: { 15726: _M_assume_normalized(); 15726: return reference(_M_p, 1UL << _M_offset); 15726: } 15726: 15726: 15726: iterator& 15726: operator++() 15726: { 15726: _M_bump_up(); 15726: return *this; 15726: } 15726: 15726: 15726: iterator 15726: operator++(int) 15726: { 15726: iterator __tmp = *this; 15726: _M_bump_up(); 15726: return __tmp; 15726: } 15726: 15726: 15726: iterator& 15726: operator--() 15726: { 15726: _M_bump_down(); 15726: return *this; 15726: } 15726: 15726: 15726: iterator 15726: operator--(int) 15726: { 15726: iterator __tmp = *this; 15726: _M_bump_down(); 15726: return __tmp; 15726: } 15726: 15726: 15726: iterator& 15726: operator+=(difference_type __i) 15726: { 15726: _M_incr(__i); 15726: return *this; 15726: } 15726: 15726: 15726: iterator& 15726: operator-=(difference_type __i) 15726: { 15726: *this += -__i; 15726: return *this; 15726: } 15726: 15726: [[__nodiscard__]] 15726: reference 15726: operator[](difference_type __i) const 15726: { return *(*this + __i); } 15726: 15726: [[__nodiscard__]] 15726: friend iterator 15726: operator+(const iterator& __x, difference_type __n) 15726: { 15726: iterator __tmp = __x; 15726: __tmp += __n; 15726: return __tmp; 15726: } 15726: 15726: [[__nodiscard__]] 15726: friend iterator 15726: operator+(difference_type __n, const iterator& __x) 15726: { return __x + __n; } 15726: 15726: [[__nodiscard__]] 15726: friend iterator 15726: operator-(const iterator& __x, difference_type __n) 15726: { 15726: iterator __tmp = __x; 15726: __tmp -= __n; 15726: return __tmp; 15726: } 15726: }; 15726: 15726: struct _Bit_const_iterator : public _Bit_iterator_base 15726: { 15726: typedef bool reference; 15726: typedef bool const_reference; 15726: 15726: 15726: 15726: typedef const bool* pointer; 15726: 15726: typedef _Bit_const_iterator const_iterator; 15726: 15726: 15726: _Bit_const_iterator() : _Bit_iterator_base(0, 0) { } 15726: 15726: 15726: _Bit_const_iterator(_Bit_type * __x, unsigned int __y) 15726: : _Bit_iterator_base(__x, __y) { } 15726: 15726: 15726: _Bit_const_iterator(const _Bit_iterator& __x) 15726: : _Bit_iterator_base(__x._M_p, __x._M_offset) { } 15726: 15726: 15726: _Bit_iterator 15726: _M_const_cast() const 15726: { return _Bit_iterator(_M_p, _M_offset); } 15726: 15726: [[__nodiscard__]] 15726: const_reference 15726: operator*() const 15726: { 15726: _M_assume_normalized(); 15726: return _Bit_reference(_M_p, 1UL << _M_offset); 15726: } 15726: 15726: 15726: const_iterator& 15726: operator++() 15726: { 15726: _M_bump_up(); 15726: return *this; 15726: } 15726: 15726: 15726: const_iterator 15726: operator++(int) 15726: { 15726: const_iterator __tmp = *this; 15726: _M_bump_up(); 15726: return __tmp; 15726: } 15726: 15726: 15726: const_iterator& 15726: operator--() 15726: { 15726: _M_bump_down(); 15726: return *this; 15726: } 15726: 15726: 15726: const_iterator 15726: operator--(int) 15726: { 15726: const_iterator __tmp = *this; 15726: _M_bump_down(); 15726: return __tmp; 15726: } 15726: 15726: 15726: const_iterator& 15726: operator+=(difference_type __i) 15726: { 15726: _M_incr(__i); 15726: return *this; 15726: } 15726: 15726: 15726: const_iterator& 15726: operator-=(difference_type __i) 15726: { 15726: *this += -__i; 15726: return *this; 15726: } 15726: 15726: [[__nodiscard__]] 15726: const_reference 15726: operator[](difference_type __i) const 15726: { return *(*this + __i); } 15726: 15726: [[__nodiscard__]] 15726: friend const_iterator 15726: operator+(const const_iterator& __x, difference_type __n) 15726: { 15726: const_iterator __tmp = __x; 15726: __tmp += __n; 15726: return __tmp; 15726: } 15726: 15726: [[__nodiscard__]] 15726: friend const_iterator 15726: operator-(const const_iterator& __x, difference_type __n) 15726: { 15726: const_iterator __tmp = __x; 15726: __tmp -= __n; 15726: return __tmp; 15726: } 15726: 15726: [[__nodiscard__]] 15726: friend const_iterator 15726: operator+(difference_type __n, const const_iterator& __x) 15726: { return __x + __n; } 15726: }; 15726: 15726: template 15726: struct _Bvector_base 15726: { 15726: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 15726: rebind<_Bit_type>::other _Bit_alloc_type; 15726: typedef typename __gnu_cxx::__alloc_traits<_Bit_alloc_type> 15726: _Bit_alloc_traits; 15726: typedef typename _Bit_alloc_traits::pointer _Bit_pointer; 15726: 15726: struct _Bvector_impl_data 15726: { 15726: 15726: _Bit_iterator _M_start; 15726: # 547 "/usr/include/c++/13/bits/stl_bvector.h" 3 15726: _Bit_iterator _M_finish; 15726: _Bit_pointer _M_end_of_storage; 15726: 15726: 15726: _Bvector_impl_data() noexcept 15726: : _M_start(), _M_finish(), _M_end_of_storage() 15726: { } 15726: 15726: 15726: _Bvector_impl_data(const _Bvector_impl_data&) = default; 15726: 15726: _Bvector_impl_data& 15726: operator=(const _Bvector_impl_data&) = default; 15726: 15726: 15726: _Bvector_impl_data(_Bvector_impl_data&& __x) noexcept 15726: : _Bvector_impl_data(__x) 15726: { __x._M_reset(); } 15726: 15726: 15726: void 15726: _M_move_data(_Bvector_impl_data&& __x) noexcept 15726: { 15726: *this = __x; 15726: __x._M_reset(); 15726: } 15726: 15726: 15726: 15726: void 15726: _M_reset() noexcept 15726: { *this = _Bvector_impl_data(); } 15726: 15726: 15726: void 15726: _M_swap_data(_Bvector_impl_data& __x) noexcept 15726: { 15726: 15726: 15726: std::swap(*this, __x); 15726: } 15726: }; 15726: 15726: struct _Bvector_impl 15726: : public _Bit_alloc_type, public _Bvector_impl_data 15726: { 15726: 15726: _Bvector_impl() noexcept(is_nothrow_default_constructible<_Bit_alloc_type>::value) 15726: 15726: 15726: 15726: 15726: : _Bit_alloc_type() 15726: { } 15726: 15726: 15726: _Bvector_impl(const _Bit_alloc_type& __a) noexcept 15726: : _Bit_alloc_type(__a) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: _Bvector_impl(_Bvector_impl&& __x) noexcept 15726: : _Bit_alloc_type(std::move(__x)), _Bvector_impl_data(std::move(__x)) 15726: { } 15726: 15726: 15726: _Bvector_impl(_Bit_alloc_type&& __a, _Bvector_impl&& __x) noexcept 15726: : _Bit_alloc_type(std::move(__a)), _Bvector_impl_data(std::move(__x)) 15726: { } 15726: 15726: 15726: 15726: _Bit_type* 15726: _M_end_addr() const noexcept 15726: { 15726: if (this->_M_end_of_storage) 15726: return std::__addressof(this->_M_end_of_storage[-1]) + 1; 15726: return 0; 15726: } 15726: }; 15726: 15726: public: 15726: typedef _Alloc allocator_type; 15726: 15726: 15726: _Bit_alloc_type& 15726: _M_get_Bit_allocator() noexcept 15726: { return this->_M_impl; } 15726: 15726: 15726: const _Bit_alloc_type& 15726: _M_get_Bit_allocator() const noexcept 15726: { return this->_M_impl; } 15726: 15726: 15726: allocator_type 15726: get_allocator() const noexcept 15726: { return allocator_type(_M_get_Bit_allocator()); } 15726: 15726: 15726: _Bvector_base() = default; 15726: 15726: 15726: 15726: 15726: 15726: _Bvector_base(const allocator_type& __a) 15726: : _M_impl(__a) { } 15726: 15726: 15726: _Bvector_base(_Bvector_base&&) = default; 15726: 15726: 15726: _Bvector_base(_Bvector_base&& __x, const allocator_type& __a) noexcept 15726: : _M_impl(_Bit_alloc_type(__a), std::move(__x._M_impl)) 15726: { } 15726: 15726: 15726: 15726: ~_Bvector_base() 15726: { this->_M_deallocate(); } 15726: 15726: protected: 15726: _Bvector_impl _M_impl; 15726: 15726: 15726: _Bit_pointer 15726: _M_allocate(size_t __n) 15726: { 15726: _Bit_pointer __p = _Bit_alloc_traits::allocate(_M_impl, _S_nword(__n)); 15726: # 688 "/usr/include/c++/13/bits/stl_bvector.h" 3 15726: return __p; 15726: } 15726: 15726: 15726: void 15726: _M_deallocate() 15726: { 15726: if (_M_impl._M_start._M_p) 15726: { 15726: const size_t __n = _M_impl._M_end_addr() - _M_impl._M_start._M_p; 15726: _Bit_alloc_traits::deallocate(_M_impl, 15726: _M_impl._M_end_of_storage - __n, 15726: __n); 15726: _M_impl._M_reset(); 15726: } 15726: } 15726: 15726: 15726: 15726: void 15726: _M_move_data(_Bvector_base&& __x) noexcept 15726: { _M_impl._M_move_data(std::move(__x._M_impl)); } 15726: 15726: 15726: constexpr 15726: static size_t 15726: _S_nword(size_t __n) 15726: { return (__n + int(_S_word_bit) - 1) / int(_S_word_bit); } 15726: }; 15726: # 739 "/usr/include/c++/13/bits/stl_bvector.h" 3 15726: template 15726: class vector : protected _Bvector_base<_Alloc> 15726: { 15726: typedef _Bvector_base<_Alloc> _Base; 15726: typedef typename _Base::_Bit_pointer _Bit_pointer; 15726: typedef typename _Base::_Bit_alloc_traits _Bit_alloc_traits; 15726: 15726: 15726: friend struct std::hash; 15726: 15726: 15726: public: 15726: typedef bool value_type; 15726: typedef size_t size_type; 15726: typedef ptrdiff_t difference_type; 15726: typedef _Bit_reference reference; 15726: typedef bool const_reference; 15726: typedef _Bit_reference* pointer; 15726: typedef const bool* const_pointer; 15726: typedef _Bit_iterator iterator; 15726: typedef _Bit_const_iterator const_iterator; 15726: typedef std::reverse_iterator const_reverse_iterator; 15726: typedef std::reverse_iterator reverse_iterator; 15726: typedef _Alloc allocator_type; 15726: 15726: 15726: allocator_type 15726: get_allocator() const 15726: { return _Base::get_allocator(); } 15726: 15726: protected: 15726: using _Base::_M_allocate; 15726: using _Base::_M_deallocate; 15726: using _Base::_S_nword; 15726: using _Base::_M_get_Bit_allocator; 15726: 15726: public: 15726: 15726: vector() = default; 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: vector(const allocator_type& __a) 15726: : _Base(__a) { } 15726: 15726: 15726: 15726: explicit 15726: vector(size_type __n, const allocator_type& __a = allocator_type()) 15726: : vector(__n, false, __a) 15726: { } 15726: 15726: 15726: vector(size_type __n, const bool& __value, 15726: const allocator_type& __a = allocator_type()) 15726: 15726: 15726: 15726: 15726: 15726: : _Base(__a) 15726: { 15726: _M_initialize(__n); 15726: _M_initialize_value(__value); 15726: } 15726: 15726: 15726: vector(const vector& __x) 15726: : _Base(_Bit_alloc_traits::_S_select_on_copy(__x._M_get_Bit_allocator())) 15726: { 15726: const_iterator __xbegin = __x.begin(), __xend = __x.end(); 15726: _M_initialize(__x.size()); 15726: _M_copy_aligned(__xbegin, __xend, begin()); 15726: } 15726: 15726: 15726: vector(vector&&) = default; 15726: 15726: private: 15726: 15726: vector(vector&& __x, const allocator_type& __a, true_type) noexcept 15726: : _Base(std::move(__x), __a) 15726: { } 15726: 15726: 15726: vector(vector&& __x, const allocator_type& __a, false_type) 15726: : _Base(__a) 15726: { 15726: if (__x.get_allocator() == __a) 15726: this->_M_move_data(std::move(__x)); 15726: else 15726: { 15726: _M_initialize(__x.size()); 15726: _M_copy_aligned(__x.begin(), __x.end(), begin()); 15726: __x.clear(); 15726: } 15726: } 15726: 15726: public: 15726: 15726: vector(vector&& __x, const __type_identity_t& __a) 15726: noexcept(_Bit_alloc_traits::_S_always_equal()) 15726: : vector(std::move(__x), __a, 15726: typename _Bit_alloc_traits::is_always_equal{}) 15726: { } 15726: 15726: 15726: vector(const vector& __x, const __type_identity_t& __a) 15726: : _Base(__a) 15726: { 15726: _M_initialize(__x.size()); 15726: _M_copy_aligned(__x.begin(), __x.end(), begin()); 15726: } 15726: 15726: 15726: vector(initializer_list __l, 15726: const allocator_type& __a = allocator_type()) 15726: : _Base(__a) 15726: { 15726: _M_initialize_range(__l.begin(), __l.end(), 15726: random_access_iterator_tag()); 15726: } 15726: 15726: 15726: 15726: template> 15726: 15726: vector(_InputIterator __first, _InputIterator __last, 15726: const allocator_type& __a = allocator_type()) 15726: : _Base(__a) 15726: { 15726: _M_initialize_range(__first, __last, 15726: std::__iterator_category(__first)); 15726: } 15726: # 889 "/usr/include/c++/13/bits/stl_bvector.h" 3 15726: 15726: ~vector() noexcept { } 15726: 15726: 15726: vector& 15726: operator=(const vector& __x) 15726: { 15726: if (&__x == this) 15726: return *this; 15726: 15726: if (_Bit_alloc_traits::_S_propagate_on_copy_assign()) 15726: { 15726: if (this->_M_get_Bit_allocator() != __x._M_get_Bit_allocator()) 15726: { 15726: this->_M_deallocate(); 15726: std::__alloc_on_copy(_M_get_Bit_allocator(), 15726: __x._M_get_Bit_allocator()); 15726: _M_initialize(__x.size()); 15726: } 15726: else 15726: std::__alloc_on_copy(_M_get_Bit_allocator(), 15726: __x._M_get_Bit_allocator()); 15726: } 15726: 15726: if (__x.size() > capacity()) 15726: { 15726: this->_M_deallocate(); 15726: _M_initialize(__x.size()); 15726: } 15726: this->_M_impl._M_finish = _M_copy_aligned(__x.begin(), __x.end(), 15726: begin()); 15726: return *this; 15726: } 15726: 15726: 15726: 15726: vector& 15726: operator=(vector&& __x) noexcept(_Bit_alloc_traits::_S_nothrow_move()) 15726: { 15726: if (_Bit_alloc_traits::_S_propagate_on_move_assign() 15726: || this->_M_get_Bit_allocator() == __x._M_get_Bit_allocator()) 15726: { 15726: this->_M_deallocate(); 15726: this->_M_move_data(std::move(__x)); 15726: std::__alloc_on_move(_M_get_Bit_allocator(), 15726: __x._M_get_Bit_allocator()); 15726: } 15726: else 15726: { 15726: if (__x.size() > capacity()) 15726: { 15726: this->_M_deallocate(); 15726: _M_initialize(__x.size()); 15726: } 15726: this->_M_impl._M_finish = _M_copy_aligned(__x.begin(), __x.end(), 15726: begin()); 15726: __x.clear(); 15726: } 15726: return *this; 15726: } 15726: 15726: 15726: vector& 15726: operator=(initializer_list __l) 15726: { 15726: this->assign(__l.begin(), __l.end()); 15726: return *this; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: assign(size_type __n, const bool& __x) 15726: { _M_fill_assign(__n, __x); } 15726: 15726: 15726: template> 15726: 15726: void 15726: assign(_InputIterator __first, _InputIterator __last) 15726: { _M_assign_aux(__first, __last, std::__iterator_category(__first)); } 15726: # 987 "/usr/include/c++/13/bits/stl_bvector.h" 3 15726: 15726: void 15726: assign(initializer_list __l) 15726: { _M_assign_aux(__l.begin(), __l.end(), random_access_iterator_tag()); } 15726: 15726: 15726: [[__nodiscard__]] 15726: iterator 15726: begin() noexcept 15726: { return iterator(this->_M_impl._M_start._M_p, 0); } 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: begin() const noexcept 15726: { return const_iterator(this->_M_impl._M_start._M_p, 0); } 15726: 15726: [[__nodiscard__]] 15726: iterator 15726: end() noexcept 15726: { return this->_M_impl._M_finish; } 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: end() const noexcept 15726: { return this->_M_impl._M_finish; } 15726: 15726: [[__nodiscard__]] 15726: reverse_iterator 15726: rbegin() noexcept 15726: { return reverse_iterator(end()); } 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: rbegin() const noexcept 15726: { return const_reverse_iterator(end()); } 15726: 15726: [[__nodiscard__]] 15726: reverse_iterator 15726: rend() noexcept 15726: { return reverse_iterator(begin()); } 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: rend() const noexcept 15726: { return const_reverse_iterator(begin()); } 15726: 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: cbegin() const noexcept 15726: { return const_iterator(this->_M_impl._M_start._M_p, 0); } 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: cend() const noexcept 15726: { return this->_M_impl._M_finish; } 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: crbegin() const noexcept 15726: { return const_reverse_iterator(end()); } 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: crend() const noexcept 15726: { return const_reverse_iterator(begin()); } 15726: 15726: 15726: [[__nodiscard__]] 15726: size_type 15726: size() const noexcept 15726: { return size_type(end() - begin()); } 15726: 15726: [[__nodiscard__]] 15726: size_type 15726: max_size() const noexcept 15726: { 15726: const size_type __isize = 15726: __gnu_cxx::__numeric_traits::__max 15726: - int(_S_word_bit) + 1; 15726: const size_type __asize 15726: = _Bit_alloc_traits::max_size(_M_get_Bit_allocator()); 15726: return (__asize <= __isize / int(_S_word_bit) 15726: ? __asize * int(_S_word_bit) : __isize); 15726: } 15726: 15726: [[__nodiscard__]] 15726: size_type 15726: capacity() const noexcept 15726: { return size_type(const_iterator(this->_M_impl._M_end_addr(), 0) 15726: - begin()); } 15726: 15726: [[__nodiscard__]] 15726: bool 15726: empty() const noexcept 15726: { return begin() == end(); } 15726: 15726: [[__nodiscard__]] 15726: reference 15726: operator[](size_type __n) 15726: { return begin()[__n]; } 15726: 15726: [[__nodiscard__]] 15726: const_reference 15726: operator[](size_type __n) const 15726: { return begin()[__n]; } 15726: 15726: protected: 15726: 15726: void 15726: _M_range_check(size_type __n) const 15726: { 15726: if (__n >= this->size()) 15726: __throw_out_of_range_fmt(("vector::_M_range_check: __n " "(which is %zu) >= this->size() " "(which is %zu)") 15726: 15726: , 15726: __n, this->size()); 15726: } 15726: 15726: public: 15726: 15726: reference 15726: at(size_type __n) 15726: { 15726: _M_range_check(__n); 15726: return (*this)[__n]; 15726: } 15726: 15726: 15726: const_reference 15726: at(size_type __n) const 15726: { 15726: _M_range_check(__n); 15726: return (*this)[__n]; 15726: } 15726: 15726: 15726: void 15726: reserve(size_type __n) 15726: { 15726: if (__n > max_size()) 15726: __throw_length_error(("vector::reserve")); 15726: if (capacity() < __n) 15726: _M_reallocate(__n); 15726: } 15726: 15726: [[__nodiscard__]] 15726: reference 15726: front() 15726: { return *begin(); } 15726: 15726: [[__nodiscard__]] 15726: const_reference 15726: front() const 15726: { return *begin(); } 15726: 15726: [[__nodiscard__]] 15726: reference 15726: back() 15726: { return *(end() - 1); } 15726: 15726: [[__nodiscard__]] 15726: const_reference 15726: back() const 15726: { return *(end() - 1); } 15726: 15726: 15726: void 15726: push_back(bool __x) 15726: { 15726: if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr()) 15726: *this->_M_impl._M_finish++ = __x; 15726: else 15726: _M_insert_aux(end(), __x); 15726: } 15726: 15726: 15726: void 15726: swap(vector& __x) noexcept 15726: { 15726: 15726: do { if (std::__is_constant_evaluated() && !bool(_Bit_alloc_traits::propagate_on_container_swap::value || _M_get_Bit_allocator() == __x._M_get_Bit_allocator())) __builtin_unreachable(); } while (false) 15726: ; 15726: 15726: this->_M_impl._M_swap_data(__x._M_impl); 15726: _Bit_alloc_traits::_S_on_swap(_M_get_Bit_allocator(), 15726: __x._M_get_Bit_allocator()); 15726: } 15726: 15726: 15726: 15726: static void 15726: swap(reference __x, reference __y) noexcept 15726: { 15726: bool __tmp = __x; 15726: __x = __y; 15726: __y = __tmp; 15726: } 15726: 15726: 15726: iterator 15726: 15726: insert(const_iterator __position, const bool& __x) 15726: 15726: 15726: 15726: { 15726: const difference_type __n = __position - begin(); 15726: if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr() 15726: && __position == end()) 15726: *this->_M_impl._M_finish++ = __x; 15726: else 15726: _M_insert_aux(__position._M_const_cast(), __x); 15726: return begin() + __n; 15726: } 15726: 15726: 15726: __attribute__ ((__deprecated__ ("use '" "insert(position, false)" "' instead"))) 15726: iterator 15726: insert(const_iterator __position) 15726: { return this->insert(__position._M_const_cast(), false); } 15726: 15726: 15726: 15726: template> 15726: 15726: iterator 15726: insert(const_iterator __position, 15726: _InputIterator __first, _InputIterator __last) 15726: { 15726: difference_type __offset = __position - cbegin(); 15726: _M_insert_range(__position._M_const_cast(), 15726: __first, __last, 15726: std::__iterator_category(__first)); 15726: return begin() + __offset; 15726: } 15726: # 1237 "/usr/include/c++/13/bits/stl_bvector.h" 3 15726: 15726: iterator 15726: insert(const_iterator __position, size_type __n, const bool& __x) 15726: { 15726: difference_type __offset = __position - cbegin(); 15726: _M_fill_insert(__position._M_const_cast(), __n, __x); 15726: return begin() + __offset; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: iterator 15726: insert(const_iterator __p, initializer_list __l) 15726: { return this->insert(__p, __l.begin(), __l.end()); } 15726: 15726: 15726: 15726: void 15726: pop_back() 15726: { --this->_M_impl._M_finish; } 15726: 15726: 15726: iterator 15726: 15726: erase(const_iterator __position) 15726: 15726: 15726: 15726: { return _M_erase(__position._M_const_cast()); } 15726: 15726: 15726: iterator 15726: 15726: erase(const_iterator __first, const_iterator __last) 15726: 15726: 15726: 15726: { return _M_erase(__first._M_const_cast(), __last._M_const_cast()); } 15726: 15726: 15726: void 15726: resize(size_type __new_size, bool __x = bool()) 15726: { 15726: if (__new_size < size()) 15726: _M_erase_at_end(begin() + difference_type(__new_size)); 15726: else 15726: insert(end(), __new_size - size(), __x); 15726: } 15726: 15726: 15726: 15726: void 15726: shrink_to_fit() 15726: { _M_shrink_to_fit(); } 15726: 15726: 15726: 15726: void 15726: flip() noexcept 15726: { 15726: _Bit_type * const __end = this->_M_impl._M_end_addr(); 15726: for (_Bit_type * __p = this->_M_impl._M_start._M_p; __p != __end; ++__p) 15726: *__p = ~*__p; 15726: } 15726: 15726: 15726: void 15726: clear() noexcept 15726: { _M_erase_at_end(begin()); } 15726: 15726: 15726: template 15726: 15726: 15726: reference 15726: 15726: 15726: 15726: emplace_back(_Args&&... __args) 15726: { 15726: push_back(bool(__args...)); 15726: 15726: return back(); 15726: 15726: } 15726: 15726: template 15726: 15726: iterator 15726: emplace(const_iterator __pos, _Args&&... __args) 15726: { return insert(__pos, bool(__args...)); } 15726: 15726: 15726: protected: 15726: 15726: 15726: iterator 15726: _M_copy_aligned(const_iterator __first, const_iterator __last, 15726: iterator __result) 15726: { 15726: _Bit_type* __q = std::copy(__first._M_p, __last._M_p, __result._M_p); 15726: return std::copy(const_iterator(__last._M_p, 0), __last, 15726: iterator(__q, 0)); 15726: } 15726: 15726: 15726: void 15726: _M_initialize(size_type __n) 15726: { 15726: if (__n) 15726: { 15726: _Bit_pointer __q = this->_M_allocate(__n); 15726: this->_M_impl._M_end_of_storage = __q + _S_nword(__n); 15726: iterator __start = iterator(std::__addressof(*__q), 0); 15726: this->_M_impl._M_start = __start; 15726: this->_M_impl._M_finish = __start + difference_type(__n); 15726: } 15726: } 15726: 15726: 15726: void 15726: _M_initialize_value(bool __x) noexcept 15726: { 15726: if (_Bit_type* __p = this->_M_impl._M_start._M_p) 15726: __fill_bvector_n(__p, this->_M_impl._M_end_addr() - __p, __x); 15726: } 15726: 15726: 15726: void 15726: _M_reallocate(size_type __n); 15726: 15726: 15726: 15726: bool 15726: _M_shrink_to_fit(); 15726: # 1398 "/usr/include/c++/13/bits/stl_bvector.h" 3 15726: template 15726: 15726: void 15726: _M_initialize_range(_InputIterator __first, _InputIterator __last, 15726: std::input_iterator_tag) 15726: { 15726: for (; __first != __last; ++__first) 15726: push_back(*__first); 15726: } 15726: 15726: template 15726: 15726: void 15726: _M_initialize_range(_ForwardIterator __first, _ForwardIterator __last, 15726: std::forward_iterator_tag) 15726: { 15726: const size_type __n = std::distance(__first, __last); 15726: _M_initialize(__n); 15726: std::copy(__first, __last, begin()); 15726: } 15726: # 1434 "/usr/include/c++/13/bits/stl_bvector.h" 3 15726: 15726: void 15726: _M_fill_assign(size_t __n, bool __x) 15726: { 15726: if (__n > size()) 15726: { 15726: _M_initialize_value(__x); 15726: insert(end(), __n - size(), __x); 15726: } 15726: else 15726: { 15726: _M_erase_at_end(begin() + __n); 15726: _M_initialize_value(__x); 15726: } 15726: } 15726: 15726: template 15726: 15726: void 15726: _M_assign_aux(_InputIterator __first, _InputIterator __last, 15726: std::input_iterator_tag) 15726: { 15726: iterator __cur = begin(); 15726: for (; __first != __last && __cur != end(); ++__cur, (void)++__first) 15726: *__cur = *__first; 15726: if (__first == __last) 15726: _M_erase_at_end(__cur); 15726: else 15726: insert(end(), __first, __last); 15726: } 15726: 15726: template 15726: 15726: void 15726: _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, 15726: std::forward_iterator_tag) 15726: { 15726: const size_type __len = std::distance(__first, __last); 15726: if (__len < size()) 15726: _M_erase_at_end(std::copy(__first, __last, begin())); 15726: else 15726: { 15726: _ForwardIterator __mid = __first; 15726: std::advance(__mid, size()); 15726: std::copy(__first, __mid, begin()); 15726: insert(end(), __mid, __last); 15726: } 15726: } 15726: # 1501 "/usr/include/c++/13/bits/stl_bvector.h" 3 15726: 15726: void 15726: _M_fill_insert(iterator __position, size_type __n, bool __x); 15726: 15726: template 15726: 15726: void 15726: _M_insert_range(iterator __pos, _InputIterator __first, 15726: _InputIterator __last, std::input_iterator_tag) 15726: { 15726: for (; __first != __last; ++__first) 15726: { 15726: __pos = insert(__pos, *__first); 15726: ++__pos; 15726: } 15726: } 15726: 15726: template 15726: 15726: void 15726: _M_insert_range(iterator __position, _ForwardIterator __first, 15726: _ForwardIterator __last, std::forward_iterator_tag); 15726: 15726: 15726: void 15726: _M_insert_aux(iterator __position, bool __x); 15726: 15726: 15726: size_type 15726: _M_check_len(size_type __n, const char* __s) const 15726: { 15726: if (max_size() - size() < __n) 15726: __throw_length_error((__s)); 15726: 15726: const size_type __len = size() + std::max(size(), __n); 15726: return (__len < size() || __len > max_size()) ? max_size() : __len; 15726: } 15726: 15726: 15726: void 15726: _M_erase_at_end(iterator __pos) 15726: { this->_M_impl._M_finish = __pos; } 15726: 15726: 15726: iterator 15726: _M_erase(iterator __pos); 15726: 15726: 15726: iterator 15726: _M_erase(iterator __first, iterator __last); 15726: 15726: protected: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void data() = delete; 15726: 15726: 15726: 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: inline void 15726: __fill_bvector(_Bit_type* __v, unsigned int __first, unsigned int __last, 15726: bool __x) noexcept 15726: { 15726: const _Bit_type __fmask = ~0ul << __first; 15726: const _Bit_type __lmask = ~0ul >> (_S_word_bit - __last); 15726: const _Bit_type __mask = __fmask & __lmask; 15726: 15726: if (__x) 15726: *__v |= __mask; 15726: else 15726: *__v &= ~__mask; 15726: } 15726: 15726: 15726: __attribute__((__nonnull__)) 15726: 15726: inline void 15726: __fill_bvector_n(_Bit_type* __p, size_t __n, bool __x) noexcept 15726: { 15726: # 1597 "/usr/include/c++/13/bits/stl_bvector.h" 3 15726: __builtin_memset(__p, __x ? ~0 : 0, __n * sizeof(_Bit_type)); 15726: } 15726: 15726: 15726: 15726: inline void 15726: __fill_a1(std::_Bit_iterator __first, 15726: std::_Bit_iterator __last, const bool& __x) 15726: { 15726: if (__first._M_p != __last._M_p) 15726: { 15726: _Bit_type* __first_p = __first._M_p; 15726: if (__first._M_offset != 0) 15726: __fill_bvector(__first_p++, __first._M_offset, _S_word_bit, __x); 15726: 15726: __fill_bvector_n(__first_p, __last._M_p - __first_p, __x); 15726: 15726: if (__last._M_offset != 0) 15726: __fill_bvector(__last._M_p, 0, __last._M_offset, __x); 15726: } 15726: else if (__first._M_offset != __last._M_offset) 15726: __fill_bvector(__first._M_p, __first._M_offset, __last._M_offset, __x); 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: struct hash> 15726: : public __hash_base> 15726: { 15726: size_t 15726: operator()(const std::vector&) const noexcept; 15726: }; 15726: 15726: 15726: 15726: } 15726: # 68 "/usr/include/c++/13/vector" 2 3 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/vector.tcc" 1 3 15726: # 59 "/usr/include/c++/13/bits/vector.tcc" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: template 15726: 15726: void 15726: vector<_Tp, _Alloc>:: 15726: reserve(size_type __n) 15726: { 15726: if (__n > this->max_size()) 15726: __throw_length_error(("vector::reserve")); 15726: if (this->capacity() < __n) 15726: { 15726: const size_type __old_size = size(); 15726: pointer __tmp; 15726: 15726: if constexpr (_S_use_relocate()) 15726: { 15726: __tmp = this->_M_allocate(__n); 15726: _S_relocate(this->_M_impl._M_start, this->_M_impl._M_finish, 15726: __tmp, _M_get_Tp_allocator()); 15726: } 15726: else 15726: 15726: { 15726: __tmp = _M_allocate_and_copy(__n, 15726: std::__make_move_if_noexcept_iterator(this->_M_impl._M_start), 15726: std::__make_move_if_noexcept_iterator(this->_M_impl._M_finish)); 15726: std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, 15726: _M_get_Tp_allocator()); 15726: } 15726: ; 15726: _M_deallocate(this->_M_impl._M_start, 15726: this->_M_impl._M_end_of_storage 15726: - this->_M_impl._M_start); 15726: this->_M_impl._M_start = __tmp; 15726: this->_M_impl._M_finish = __tmp + __old_size; 15726: this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; 15726: } 15726: } 15726: 15726: 15726: template 15726: template 15726: 15726: 15726: typename vector<_Tp, _Alloc>::reference 15726: 15726: 15726: 15726: vector<_Tp, _Alloc>:: 15726: emplace_back(_Args&&... __args) 15726: { 15726: if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) 15726: { 15726: ; 15726: _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, 15726: std::forward<_Args>(__args)...); 15726: ++this->_M_impl._M_finish; 15726: ; 15726: } 15726: else 15726: _M_realloc_insert(end(), std::forward<_Args>(__args)...); 15726: 15726: return back(); 15726: 15726: } 15726: 15726: 15726: template 15726: 15726: typename vector<_Tp, _Alloc>::iterator 15726: vector<_Tp, _Alloc>:: 15726: 15726: insert(const_iterator __position, const value_type& __x) 15726: 15726: 15726: 15726: { 15726: const size_type __n = __position - begin(); 15726: if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__position != const_iterator())) __builtin_unreachable(); } while (false); 15726: if (!(__position != const_iterator())) 15726: __builtin_unreachable(); 15726: 15726: if (__position == end()) 15726: { 15726: ; 15726: _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, 15726: __x); 15726: ++this->_M_impl._M_finish; 15726: ; 15726: } 15726: else 15726: { 15726: 15726: const auto __pos = begin() + (__position - cbegin()); 15726: 15726: 15726: _Temporary_value __x_copy(this, __x); 15726: _M_insert_aux(__pos, std::move(__x_copy._M_val())); 15726: 15726: 15726: 15726: } 15726: } 15726: else 15726: 15726: _M_realloc_insert(begin() + (__position - cbegin()), __x); 15726: 15726: 15726: 15726: 15726: return iterator(this->_M_impl._M_start + __n); 15726: } 15726: 15726: template 15726: 15726: typename vector<_Tp, _Alloc>::iterator 15726: vector<_Tp, _Alloc>:: 15726: _M_erase(iterator __position) 15726: { 15726: if (__position + 1 != end()) 15726: std::move(__position + 1, end(), __position); 15726: --this->_M_impl._M_finish; 15726: _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish); 15726: ; 15726: return __position; 15726: } 15726: 15726: template 15726: 15726: typename vector<_Tp, _Alloc>::iterator 15726: vector<_Tp, _Alloc>:: 15726: _M_erase(iterator __first, iterator __last) 15726: { 15726: if (__first != __last) 15726: { 15726: if (__last != end()) 15726: std::move(__last, end(), __first); 15726: _M_erase_at_end(__first.base() + (end() - __last)); 15726: } 15726: return __first; 15726: } 15726: 15726: template 15726: 15726: vector<_Tp, _Alloc>& 15726: vector<_Tp, _Alloc>:: 15726: operator=(const vector<_Tp, _Alloc>& __x) 15726: { 15726: if (std::__addressof(__x) != this) 15726: { 15726: ; 15726: 15726: if (_Alloc_traits::_S_propagate_on_copy_assign()) 15726: { 15726: if (!_Alloc_traits::_S_always_equal() 15726: && _M_get_Tp_allocator() != __x._M_get_Tp_allocator()) 15726: { 15726: 15726: this->clear(); 15726: _M_deallocate(this->_M_impl._M_start, 15726: this->_M_impl._M_end_of_storage 15726: - this->_M_impl._M_start); 15726: this->_M_impl._M_start = nullptr; 15726: this->_M_impl._M_finish = nullptr; 15726: this->_M_impl._M_end_of_storage = nullptr; 15726: } 15726: std::__alloc_on_copy(_M_get_Tp_allocator(), 15726: __x._M_get_Tp_allocator()); 15726: } 15726: 15726: const size_type __xlen = __x.size(); 15726: if (__xlen > capacity()) 15726: { 15726: pointer __tmp = _M_allocate_and_copy(__xlen, __x.begin(), 15726: __x.end()); 15726: std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, 15726: _M_get_Tp_allocator()); 15726: _M_deallocate(this->_M_impl._M_start, 15726: this->_M_impl._M_end_of_storage 15726: - this->_M_impl._M_start); 15726: this->_M_impl._M_start = __tmp; 15726: this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __xlen; 15726: } 15726: else if (size() >= __xlen) 15726: { 15726: std::_Destroy(std::copy(__x.begin(), __x.end(), begin()), 15726: end(), _M_get_Tp_allocator()); 15726: } 15726: else 15726: { 15726: std::copy(__x._M_impl._M_start, __x._M_impl._M_start + size(), 15726: this->_M_impl._M_start); 15726: std::__uninitialized_copy_a(__x._M_impl._M_start + size(), 15726: __x._M_impl._M_finish, 15726: this->_M_impl._M_finish, 15726: _M_get_Tp_allocator()); 15726: } 15726: this->_M_impl._M_finish = this->_M_impl._M_start + __xlen; 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: 15726: void 15726: vector<_Tp, _Alloc>:: 15726: _M_fill_assign(size_t __n, const value_type& __val) 15726: { 15726: if (__n > capacity()) 15726: { 15726: vector __tmp(__n, __val, _M_get_Tp_allocator()); 15726: __tmp._M_impl._M_swap_data(this->_M_impl); 15726: } 15726: else if (__n > size()) 15726: { 15726: std::fill(begin(), end(), __val); 15726: const size_type __add = __n - size(); 15726: ; 15726: this->_M_impl._M_finish = 15726: std::__uninitialized_fill_n_a(this->_M_impl._M_finish, 15726: __add, __val, _M_get_Tp_allocator()); 15726: ; 15726: } 15726: else 15726: _M_erase_at_end(std::fill_n(this->_M_impl._M_start, __n, __val)); 15726: } 15726: 15726: template 15726: template 15726: 15726: void 15726: vector<_Tp, _Alloc>:: 15726: _M_assign_aux(_InputIterator __first, _InputIterator __last, 15726: std::input_iterator_tag) 15726: { 15726: pointer __cur(this->_M_impl._M_start); 15726: for (; __first != __last && __cur != this->_M_impl._M_finish; 15726: ++__cur, (void)++__first) 15726: *__cur = *__first; 15726: if (__first == __last) 15726: _M_erase_at_end(__cur); 15726: else 15726: _M_range_insert(end(), __first, __last, 15726: std::__iterator_category(__first)); 15726: } 15726: 15726: template 15726: template 15726: 15726: void 15726: vector<_Tp, _Alloc>:: 15726: _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, 15726: std::forward_iterator_tag) 15726: { 15726: const size_type __len = std::distance(__first, __last); 15726: 15726: if (__len > capacity()) 15726: { 15726: _S_check_init_len(__len, _M_get_Tp_allocator()); 15726: pointer __tmp(_M_allocate_and_copy(__len, __first, __last)); 15726: std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, 15726: _M_get_Tp_allocator()); 15726: ; 15726: _M_deallocate(this->_M_impl._M_start, 15726: this->_M_impl._M_end_of_storage 15726: - this->_M_impl._M_start); 15726: this->_M_impl._M_start = __tmp; 15726: this->_M_impl._M_finish = this->_M_impl._M_start + __len; 15726: this->_M_impl._M_end_of_storage = this->_M_impl._M_finish; 15726: } 15726: else if (size() >= __len) 15726: _M_erase_at_end(std::copy(__first, __last, this->_M_impl._M_start)); 15726: else 15726: { 15726: _ForwardIterator __mid = __first; 15726: std::advance(__mid, size()); 15726: std::copy(__first, __mid, this->_M_impl._M_start); 15726: const size_type __attribute__((__unused__)) __n = __len - size(); 15726: ; 15726: this->_M_impl._M_finish = 15726: std::__uninitialized_copy_a(__mid, __last, 15726: this->_M_impl._M_finish, 15726: _M_get_Tp_allocator()); 15726: ; 15726: } 15726: } 15726: 15726: 15726: template 15726: 15726: auto 15726: vector<_Tp, _Alloc>:: 15726: _M_insert_rval(const_iterator __position, value_type&& __v) -> iterator 15726: { 15726: const auto __n = __position - cbegin(); 15726: if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) 15726: if (__position == cend()) 15726: { 15726: ; 15726: _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, 15726: std::move(__v)); 15726: ++this->_M_impl._M_finish; 15726: ; 15726: } 15726: else 15726: _M_insert_aux(begin() + __n, std::move(__v)); 15726: else 15726: _M_realloc_insert(begin() + __n, std::move(__v)); 15726: 15726: return iterator(this->_M_impl._M_start + __n); 15726: } 15726: 15726: template 15726: template 15726: 15726: auto 15726: vector<_Tp, _Alloc>:: 15726: _M_emplace_aux(const_iterator __position, _Args&&... __args) 15726: -> iterator 15726: { 15726: const auto __n = __position - cbegin(); 15726: if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) 15726: if (__position == cend()) 15726: { 15726: ; 15726: _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, 15726: std::forward<_Args>(__args)...); 15726: ++this->_M_impl._M_finish; 15726: ; 15726: } 15726: else 15726: { 15726: 15726: 15726: 15726: _Temporary_value __tmp(this, std::forward<_Args>(__args)...); 15726: _M_insert_aux(begin() + __n, std::move(__tmp._M_val())); 15726: } 15726: else 15726: _M_realloc_insert(begin() + __n, std::forward<_Args>(__args)...); 15726: 15726: return iterator(this->_M_impl._M_start + __n); 15726: } 15726: 15726: template 15726: template 15726: 15726: void 15726: vector<_Tp, _Alloc>:: 15726: _M_insert_aux(iterator __position, _Arg&& __arg) 15726: 15726: 15726: 15726: 15726: 15726: 15726: { 15726: ; 15726: _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, 15726: std::move(*(this->_M_impl._M_finish - 1))); 15726: ++this->_M_impl._M_finish; 15726: ; 15726: 15726: 15726: 15726: std::move_backward(__position.base(), this->_M_impl._M_finish - 2, this->_M_impl._M_finish - 1) 15726: 15726: ; 15726: 15726: 15726: 15726: *__position = std::forward<_Arg>(__arg); 15726: 15726: } 15726: 15726: 15726: template 15726: template 15726: 15726: void 15726: vector<_Tp, _Alloc>:: 15726: _M_realloc_insert(iterator __position, _Args&&... __args) 15726: 15726: 15726: 15726: 15726: 15726: 15726: { 15726: const size_type __len = 15726: _M_check_len(size_type(1), "vector::_M_realloc_insert"); 15726: pointer __old_start = this->_M_impl._M_start; 15726: pointer __old_finish = this->_M_impl._M_finish; 15726: const size_type __elems_before = __position - begin(); 15726: pointer __new_start(this->_M_allocate(__len)); 15726: pointer __new_finish(__new_start); 15726: try 15726: { 15726: 15726: 15726: 15726: 15726: 15726: _Alloc_traits::construct(this->_M_impl, 15726: __new_start + __elems_before, 15726: 15726: std::forward<_Args>(__args)...); 15726: 15726: 15726: 15726: __new_finish = pointer(); 15726: 15726: 15726: if constexpr (_S_use_relocate()) 15726: { 15726: __new_finish = _S_relocate(__old_start, __position.base(), 15726: __new_start, _M_get_Tp_allocator()); 15726: 15726: ++__new_finish; 15726: 15726: __new_finish = _S_relocate(__position.base(), __old_finish, 15726: __new_finish, _M_get_Tp_allocator()); 15726: } 15726: else 15726: 15726: { 15726: __new_finish 15726: = std::__uninitialized_move_if_noexcept_a 15726: (__old_start, __position.base(), 15726: __new_start, _M_get_Tp_allocator()); 15726: 15726: ++__new_finish; 15726: 15726: __new_finish 15726: = std::__uninitialized_move_if_noexcept_a 15726: (__position.base(), __old_finish, 15726: __new_finish, _M_get_Tp_allocator()); 15726: } 15726: } 15726: catch(...) 15726: { 15726: if (!__new_finish) 15726: _Alloc_traits::destroy(this->_M_impl, 15726: __new_start + __elems_before); 15726: else 15726: std::_Destroy(__new_start, __new_finish, _M_get_Tp_allocator()); 15726: _M_deallocate(__new_start, __len); 15726: throw; 15726: } 15726: 15726: if constexpr (!_S_use_relocate()) 15726: 15726: std::_Destroy(__old_start, __old_finish, _M_get_Tp_allocator()); 15726: ; 15726: _M_deallocate(__old_start, 15726: this->_M_impl._M_end_of_storage - __old_start); 15726: this->_M_impl._M_start = __new_start; 15726: this->_M_impl._M_finish = __new_finish; 15726: this->_M_impl._M_end_of_storage = __new_start + __len; 15726: } 15726: 15726: template 15726: 15726: void 15726: vector<_Tp, _Alloc>:: 15726: _M_fill_insert(iterator __position, size_type __n, const value_type& __x) 15726: { 15726: if (__n != 0) 15726: { 15726: if (size_type(this->_M_impl._M_end_of_storage 15726: - this->_M_impl._M_finish) >= __n) 15726: { 15726: 15726: 15726: 15726: _Temporary_value __tmp(this, __x); 15726: value_type& __x_copy = __tmp._M_val(); 15726: 15726: const size_type __elems_after = end() - __position; 15726: pointer __old_finish(this->_M_impl._M_finish); 15726: if (__elems_after > __n) 15726: { 15726: ; 15726: std::__uninitialized_move_a(__old_finish - __n, 15726: __old_finish, 15726: __old_finish, 15726: _M_get_Tp_allocator()); 15726: this->_M_impl._M_finish += __n; 15726: ; 15726: std::move_backward(__position.base(), __old_finish - __n, __old_finish) 15726: ; 15726: std::fill(__position.base(), __position.base() + __n, 15726: __x_copy); 15726: } 15726: else 15726: { 15726: ; 15726: this->_M_impl._M_finish = 15726: std::__uninitialized_fill_n_a(__old_finish, 15726: __n - __elems_after, 15726: __x_copy, 15726: _M_get_Tp_allocator()); 15726: ; 15726: std::__uninitialized_move_a(__position.base(), __old_finish, 15726: this->_M_impl._M_finish, 15726: _M_get_Tp_allocator()); 15726: this->_M_impl._M_finish += __elems_after; 15726: ; 15726: std::fill(__position.base(), __old_finish, __x_copy); 15726: } 15726: } 15726: else 15726: { 15726: 15726: 15726: pointer __old_start = this->_M_impl._M_start; 15726: pointer __old_finish = this->_M_impl._M_finish; 15726: const pointer __pos = __position.base(); 15726: 15726: const size_type __len = 15726: _M_check_len(__n, "vector::_M_fill_insert"); 15726: const size_type __elems_before = __pos - __old_start; 15726: pointer __new_start(this->_M_allocate(__len)); 15726: pointer __new_finish(__new_start); 15726: try 15726: { 15726: 15726: std::__uninitialized_fill_n_a(__new_start + __elems_before, 15726: __n, __x, 15726: _M_get_Tp_allocator()); 15726: __new_finish = pointer(); 15726: 15726: __new_finish 15726: = std::__uninitialized_move_if_noexcept_a 15726: (__old_start, __pos, __new_start, _M_get_Tp_allocator()); 15726: 15726: __new_finish += __n; 15726: 15726: __new_finish 15726: = std::__uninitialized_move_if_noexcept_a 15726: (__pos, __old_finish, __new_finish, _M_get_Tp_allocator()); 15726: } 15726: catch(...) 15726: { 15726: if (!__new_finish) 15726: std::_Destroy(__new_start + __elems_before, 15726: __new_start + __elems_before + __n, 15726: _M_get_Tp_allocator()); 15726: else 15726: std::_Destroy(__new_start, __new_finish, 15726: _M_get_Tp_allocator()); 15726: _M_deallocate(__new_start, __len); 15726: throw; 15726: } 15726: std::_Destroy(__old_start, __old_finish, _M_get_Tp_allocator()); 15726: ; 15726: _M_deallocate(__old_start, 15726: this->_M_impl._M_end_of_storage - __old_start); 15726: this->_M_impl._M_start = __new_start; 15726: this->_M_impl._M_finish = __new_finish; 15726: this->_M_impl._M_end_of_storage = __new_start + __len; 15726: } 15726: } 15726: } 15726: 15726: 15726: template 15726: 15726: void 15726: vector<_Tp, _Alloc>:: 15726: _M_default_append(size_type __n) 15726: { 15726: if (__n != 0) 15726: { 15726: const size_type __size = size(); 15726: size_type __navail = size_type(this->_M_impl._M_end_of_storage 15726: - this->_M_impl._M_finish); 15726: 15726: if (__size > max_size() || __navail > max_size() - __size) 15726: __builtin_unreachable(); 15726: 15726: if (__navail >= __n) 15726: { 15726: ; 15726: this->_M_impl._M_finish = 15726: std::__uninitialized_default_n_a(this->_M_impl._M_finish, 15726: __n, _M_get_Tp_allocator()); 15726: ; 15726: } 15726: else 15726: { 15726: 15726: 15726: pointer __old_start = this->_M_impl._M_start; 15726: pointer __old_finish = this->_M_impl._M_finish; 15726: 15726: const size_type __len = 15726: _M_check_len(__n, "vector::_M_default_append"); 15726: pointer __new_start(this->_M_allocate(__len)); 15726: if constexpr (_S_use_relocate()) 15726: { 15726: try 15726: { 15726: std::__uninitialized_default_n_a(__new_start + __size, 15726: __n, _M_get_Tp_allocator()); 15726: } 15726: catch(...) 15726: { 15726: _M_deallocate(__new_start, __len); 15726: throw; 15726: } 15726: _S_relocate(__old_start, __old_finish, 15726: __new_start, _M_get_Tp_allocator()); 15726: } 15726: else 15726: { 15726: pointer __destroy_from = pointer(); 15726: try 15726: { 15726: std::__uninitialized_default_n_a(__new_start + __size, 15726: __n, _M_get_Tp_allocator()); 15726: __destroy_from = __new_start + __size; 15726: std::__uninitialized_move_if_noexcept_a( 15726: __old_start, __old_finish, 15726: __new_start, _M_get_Tp_allocator()); 15726: } 15726: catch(...) 15726: { 15726: if (__destroy_from) 15726: std::_Destroy(__destroy_from, __destroy_from + __n, 15726: _M_get_Tp_allocator()); 15726: _M_deallocate(__new_start, __len); 15726: throw; 15726: } 15726: std::_Destroy(__old_start, __old_finish, 15726: _M_get_Tp_allocator()); 15726: } 15726: ; 15726: _M_deallocate(__old_start, 15726: this->_M_impl._M_end_of_storage - __old_start); 15726: this->_M_impl._M_start = __new_start; 15726: this->_M_impl._M_finish = __new_start + __size + __n; 15726: this->_M_impl._M_end_of_storage = __new_start + __len; 15726: } 15726: } 15726: } 15726: 15726: template 15726: 15726: bool 15726: vector<_Tp, _Alloc>:: 15726: _M_shrink_to_fit() 15726: { 15726: if (capacity() == size()) 15726: return false; 15726: ; 15726: return std::__shrink_to_fit_aux::_S_do_it(*this); 15726: } 15726: 15726: 15726: template 15726: template 15726: 15726: void 15726: vector<_Tp, _Alloc>:: 15726: _M_range_insert(iterator __pos, _InputIterator __first, 15726: _InputIterator __last, std::input_iterator_tag) 15726: { 15726: if (__pos == end()) 15726: { 15726: for (; __first != __last; ++__first) 15726: insert(end(), *__first); 15726: } 15726: else if (__first != __last) 15726: { 15726: vector __tmp(__first, __last, _M_get_Tp_allocator()); 15726: insert(__pos, 15726: std::make_move_iterator(__tmp.begin()), 15726: std::make_move_iterator(__tmp.end())); 15726: } 15726: } 15726: 15726: template 15726: template 15726: 15726: void 15726: vector<_Tp, _Alloc>:: 15726: _M_range_insert(iterator __position, _ForwardIterator __first, 15726: _ForwardIterator __last, std::forward_iterator_tag) 15726: { 15726: if (__first != __last) 15726: { 15726: const size_type __n = std::distance(__first, __last); 15726: if (size_type(this->_M_impl._M_end_of_storage 15726: - this->_M_impl._M_finish) >= __n) 15726: { 15726: const size_type __elems_after = end() - __position; 15726: pointer __old_finish(this->_M_impl._M_finish); 15726: if (__elems_after > __n) 15726: { 15726: ; 15726: std::__uninitialized_move_a(this->_M_impl._M_finish - __n, 15726: this->_M_impl._M_finish, 15726: this->_M_impl._M_finish, 15726: _M_get_Tp_allocator()); 15726: this->_M_impl._M_finish += __n; 15726: ; 15726: std::move_backward(__position.base(), __old_finish - __n, __old_finish) 15726: ; 15726: std::copy(__first, __last, __position); 15726: } 15726: else 15726: { 15726: _ForwardIterator __mid = __first; 15726: std::advance(__mid, __elems_after); 15726: ; 15726: std::__uninitialized_copy_a(__mid, __last, 15726: this->_M_impl._M_finish, 15726: _M_get_Tp_allocator()); 15726: this->_M_impl._M_finish += __n - __elems_after; 15726: ; 15726: std::__uninitialized_move_a(__position.base(), 15726: __old_finish, 15726: this->_M_impl._M_finish, 15726: _M_get_Tp_allocator()); 15726: this->_M_impl._M_finish += __elems_after; 15726: ; 15726: std::copy(__first, __mid, __position); 15726: } 15726: } 15726: else 15726: { 15726: 15726: 15726: 15726: pointer __old_start = this->_M_impl._M_start; 15726: pointer __old_finish = this->_M_impl._M_finish; 15726: 15726: const size_type __len = 15726: _M_check_len(__n, "vector::_M_range_insert"); 15726: pointer __new_start(this->_M_allocate(__len)); 15726: pointer __new_finish(__new_start); 15726: try 15726: { 15726: __new_finish 15726: = std::__uninitialized_move_if_noexcept_a 15726: (__old_start, __position.base(), 15726: __new_start, _M_get_Tp_allocator()); 15726: __new_finish 15726: = std::__uninitialized_copy_a(__first, __last, 15726: __new_finish, 15726: _M_get_Tp_allocator()); 15726: __new_finish 15726: = std::__uninitialized_move_if_noexcept_a 15726: (__position.base(), __old_finish, 15726: __new_finish, _M_get_Tp_allocator()); 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__new_start, __new_finish, 15726: _M_get_Tp_allocator()); 15726: _M_deallocate(__new_start, __len); 15726: throw; 15726: } 15726: std::_Destroy(__old_start, __old_finish, 15726: _M_get_Tp_allocator()); 15726: ; 15726: _M_deallocate(__old_start, 15726: this->_M_impl._M_end_of_storage - __old_start); 15726: this->_M_impl._M_start = __new_start; 15726: this->_M_impl._M_finish = __new_finish; 15726: this->_M_impl._M_end_of_storage = __new_start + __len; 15726: } 15726: } 15726: } 15726: 15726: 15726: 15726: template 15726: 15726: void 15726: vector:: 15726: _M_reallocate(size_type __n) 15726: { 15726: _Bit_pointer __q = this->_M_allocate(__n); 15726: iterator __start(std::__addressof(*__q), 0); 15726: iterator __finish(_M_copy_aligned(begin(), end(), __start)); 15726: this->_M_deallocate(); 15726: this->_M_impl._M_start = __start; 15726: this->_M_impl._M_finish = __finish; 15726: this->_M_impl._M_end_of_storage = __q + _S_nword(__n); 15726: } 15726: 15726: template 15726: 15726: void 15726: vector:: 15726: _M_fill_insert(iterator __position, size_type __n, bool __x) 15726: { 15726: if (__n == 0) 15726: return; 15726: if (capacity() - size() >= __n) 15726: { 15726: std::copy_backward(__position, end(), 15726: this->_M_impl._M_finish + difference_type(__n)); 15726: std::fill(__position, __position + difference_type(__n), __x); 15726: this->_M_impl._M_finish += difference_type(__n); 15726: } 15726: else 15726: { 15726: const size_type __len = 15726: _M_check_len(__n, "vector::_M_fill_insert"); 15726: _Bit_pointer __q = this->_M_allocate(__len); 15726: iterator __start(std::__addressof(*__q), 0); 15726: iterator __i = _M_copy_aligned(begin(), __position, __start); 15726: std::fill(__i, __i + difference_type(__n), __x); 15726: iterator __finish = std::copy(__position, end(), 15726: __i + difference_type(__n)); 15726: this->_M_deallocate(); 15726: this->_M_impl._M_end_of_storage = __q + _S_nword(__len); 15726: this->_M_impl._M_start = __start; 15726: this->_M_impl._M_finish = __finish; 15726: } 15726: } 15726: 15726: template 15726: template 15726: 15726: void 15726: vector:: 15726: _M_insert_range(iterator __position, _ForwardIterator __first, 15726: _ForwardIterator __last, std::forward_iterator_tag) 15726: { 15726: if (__first != __last) 15726: { 15726: size_type __n = std::distance(__first, __last); 15726: if (capacity() - size() >= __n) 15726: { 15726: std::copy_backward(__position, end(), 15726: this->_M_impl._M_finish 15726: + difference_type(__n)); 15726: std::copy(__first, __last, __position); 15726: this->_M_impl._M_finish += difference_type(__n); 15726: } 15726: else 15726: { 15726: const size_type __len = 15726: _M_check_len(__n, "vector::_M_insert_range"); 15726: const iterator __begin = begin(), __end = end(); 15726: _Bit_pointer __q = this->_M_allocate(__len); 15726: iterator __start(std::__addressof(*__q), 0); 15726: iterator __i = _M_copy_aligned(__begin, __position, __start); 15726: __i = std::copy(__first, __last, __i); 15726: iterator __finish = std::copy(__position, __end, __i); 15726: this->_M_deallocate(); 15726: this->_M_impl._M_end_of_storage = __q + _S_nword(__len); 15726: this->_M_impl._M_start = __start; 15726: this->_M_impl._M_finish = __finish; 15726: } 15726: } 15726: } 15726: 15726: template 15726: 15726: void 15726: vector:: 15726: _M_insert_aux(iterator __position, bool __x) 15726: { 15726: if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr()) 15726: { 15726: std::copy_backward(__position, this->_M_impl._M_finish, 15726: this->_M_impl._M_finish + 1); 15726: *__position = __x; 15726: ++this->_M_impl._M_finish; 15726: } 15726: else 15726: { 15726: const size_type __len = 15726: _M_check_len(size_type(1), "vector::_M_insert_aux"); 15726: _Bit_pointer __q = this->_M_allocate(__len); 15726: iterator __start(std::__addressof(*__q), 0); 15726: iterator __i = _M_copy_aligned(begin(), __position, __start); 15726: *__i++ = __x; 15726: iterator __finish = std::copy(__position, end(), __i); 15726: this->_M_deallocate(); 15726: this->_M_impl._M_end_of_storage = __q + _S_nword(__len); 15726: this->_M_impl._M_start = __start; 15726: this->_M_impl._M_finish = __finish; 15726: } 15726: } 15726: 15726: template 15726: 15726: typename vector::iterator 15726: vector:: 15726: _M_erase(iterator __position) 15726: { 15726: if (__position + 1 != end()) 15726: std::copy(__position + 1, end(), __position); 15726: --this->_M_impl._M_finish; 15726: return __position; 15726: } 15726: 15726: template 15726: 15726: typename vector::iterator 15726: vector:: 15726: _M_erase(iterator __first, iterator __last) 15726: { 15726: if (__first != __last) 15726: _M_erase_at_end(std::copy(__last, end(), __first)); 15726: return __first; 15726: } 15726: 15726: 15726: template 15726: 15726: bool 15726: vector:: 15726: _M_shrink_to_fit() 15726: { 15726: if (capacity() - size() < int(_S_word_bit)) 15726: return false; 15726: try 15726: { 15726: if (size_type __n = size()) 15726: _M_reallocate(__n); 15726: else 15726: { 15726: this->_M_deallocate(); 15726: this->_M_impl._M_reset(); 15726: } 15726: return true; 15726: } 15726: catch(...) 15726: { return false; } 15726: } 15726: 15726: 15726: 15726: 15726: } 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: template 15726: size_t 15726: hash>:: 15726: operator()(const std::vector& __b) const noexcept 15726: { 15726: size_t __hash = 0; 15726: const size_t __words = __b.size() / _S_word_bit; 15726: if (__words) 15726: { 15726: const size_t __clength = __words * sizeof(_Bit_type); 15726: __hash = std::_Hash_impl::hash(__b._M_impl._M_start._M_p, __clength); 15726: } 15726: 15726: const size_t __extrabits = __b.size() % _S_word_bit; 15726: if (__extrabits) 15726: { 15726: _Bit_type __hiword = *__b._M_impl._M_finish._M_p; 15726: __hiword &= ~((~static_cast<_Bit_type>(0)) << __extrabits); 15726: 15726: const size_t __clength 15726: = (__extrabits + 8 - 1) / 8; 15726: if (__words) 15726: __hash = std::_Hash_impl::hash(&__hiword, __clength, __hash); 15726: else 15726: __hash = std::_Hash_impl::hash(&__hiword, __clength); 15726: } 15726: 15726: return __hash; 15726: } 15726: 15726: 15726: } 15726: # 73 "/usr/include/c++/13/vector" 2 3 15726: # 81 "/usr/include/c++/13/vector" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: namespace pmr { 15726: template 15726: using vector = std::vector<_Tp, polymorphic_allocator<_Tp>>; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 65 "/usr/include/c++/13/functional" 2 3 15726: # 1 "/usr/include/c++/13/array" 1 3 15726: # 32 "/usr/include/c++/13/array" 3 15726: 15726: # 33 "/usr/include/c++/13/array" 3 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/compare" 1 3 15726: # 33 "/usr/include/c++/13/compare" 3 15726: 15726: # 34 "/usr/include/c++/13/compare" 3 15726: # 39 "/usr/include/c++/13/array" 2 3 15726: # 48 "/usr/include/c++/13/array" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: template 15726: struct __array_traits 15726: { 15726: using _Type = _Tp[_Nm]; 15726: using _Is_swappable = __is_swappable<_Tp>; 15726: using _Is_nothrow_swappable = __is_nothrow_swappable<_Tp>; 15726: }; 15726: 15726: template 15726: struct __array_traits<_Tp, 0> 15726: { 15726: 15726: struct _Type 15726: { 15726: 15726: __attribute__((__always_inline__,__noreturn__)) 15726: _Tp& operator[](size_t) const noexcept { __builtin_trap(); } 15726: 15726: 15726: __attribute__((__always_inline__)) 15726: constexpr explicit operator _Tp*() const noexcept { return nullptr; } 15726: }; 15726: 15726: using _Is_swappable = true_type; 15726: using _Is_nothrow_swappable = true_type; 15726: }; 15726: # 93 "/usr/include/c++/13/array" 3 15726: template 15726: struct array 15726: { 15726: typedef _Tp value_type; 15726: typedef value_type* pointer; 15726: typedef const value_type* const_pointer; 15726: typedef value_type& reference; 15726: typedef const value_type& const_reference; 15726: typedef value_type* iterator; 15726: typedef const value_type* const_iterator; 15726: typedef std::size_t size_type; 15726: typedef std::ptrdiff_t difference_type; 15726: typedef std::reverse_iterator reverse_iterator; 15726: typedef std::reverse_iterator const_reverse_iterator; 15726: 15726: 15726: typename __array_traits<_Tp, _Nm>::_Type _M_elems; 15726: 15726: 15726: 15726: 15726: void 15726: fill(const value_type& __u) 15726: { std::fill_n(begin(), size(), __u); } 15726: 15726: void 15726: swap(array& __other) 15726: noexcept(__array_traits<_Tp, _Nm>::_Is_nothrow_swappable::value) 15726: { std::swap_ranges(begin(), end(), __other.begin()); } 15726: 15726: 15726: [[__gnu__::__const__, __nodiscard__]] 15726: constexpr iterator 15726: begin() noexcept 15726: { return iterator(data()); } 15726: 15726: [[__nodiscard__]] 15726: constexpr const_iterator 15726: begin() const noexcept 15726: { return const_iterator(data()); } 15726: 15726: [[__gnu__::__const__, __nodiscard__]] 15726: constexpr iterator 15726: end() noexcept 15726: { return iterator(data() + _Nm); } 15726: 15726: [[__nodiscard__]] 15726: constexpr const_iterator 15726: end() const noexcept 15726: { return const_iterator(data() + _Nm); } 15726: 15726: [[__gnu__::__const__, __nodiscard__]] 15726: constexpr reverse_iterator 15726: rbegin() noexcept 15726: { return reverse_iterator(end()); } 15726: 15726: [[__nodiscard__]] 15726: constexpr const_reverse_iterator 15726: rbegin() const noexcept 15726: { return const_reverse_iterator(end()); } 15726: 15726: [[__gnu__::__const__, __nodiscard__]] 15726: constexpr reverse_iterator 15726: rend() noexcept 15726: { return reverse_iterator(begin()); } 15726: 15726: [[__nodiscard__]] 15726: constexpr const_reverse_iterator 15726: rend() const noexcept 15726: { return const_reverse_iterator(begin()); } 15726: 15726: [[__nodiscard__]] 15726: constexpr const_iterator 15726: cbegin() const noexcept 15726: { return const_iterator(data()); } 15726: 15726: [[__nodiscard__]] 15726: constexpr const_iterator 15726: cend() const noexcept 15726: { return const_iterator(data() + _Nm); } 15726: 15726: [[__nodiscard__]] 15726: constexpr const_reverse_iterator 15726: crbegin() const noexcept 15726: { return const_reverse_iterator(end()); } 15726: 15726: [[__nodiscard__]] 15726: constexpr const_reverse_iterator 15726: crend() const noexcept 15726: { return const_reverse_iterator(begin()); } 15726: 15726: 15726: [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]] 15726: constexpr size_type 15726: size() const noexcept { return _Nm; } 15726: 15726: [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]] 15726: constexpr size_type 15726: max_size() const noexcept { return _Nm; } 15726: 15726: [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]] 15726: constexpr bool 15726: empty() const noexcept { return size() == 0; } 15726: 15726: 15726: [[__nodiscard__]] 15726: constexpr reference 15726: operator[](size_type __n) noexcept 15726: { 15726: ; 15726: return _M_elems[__n]; 15726: } 15726: 15726: [[__nodiscard__]] 15726: constexpr const_reference 15726: operator[](size_type __n) const noexcept 15726: { 15726: 15726: ; 15726: 15726: return _M_elems[__n]; 15726: } 15726: 15726: constexpr reference 15726: at(size_type __n) 15726: { 15726: if (__n >= _Nm) 15726: std::__throw_out_of_range_fmt(("array::at: __n (which is %zu) " ">= _Nm (which is %zu)") 15726: , 15726: __n, _Nm); 15726: return _M_elems[__n]; 15726: } 15726: 15726: constexpr const_reference 15726: at(size_type __n) const 15726: { 15726: 15726: 15726: return __n < _Nm ? _M_elems[__n] 15726: : (std::__throw_out_of_range_fmt(("array::at: __n (which is %zu) " ">= _Nm (which is %zu)") 15726: , 15726: __n, _Nm), 15726: _M_elems[__n]); 15726: } 15726: 15726: [[__nodiscard__]] 15726: constexpr reference 15726: front() noexcept 15726: { 15726: ; 15726: return _M_elems[(size_type)0]; 15726: } 15726: 15726: [[__nodiscard__]] 15726: constexpr const_reference 15726: front() const noexcept 15726: { 15726: 15726: ; 15726: 15726: return _M_elems[(size_type)0]; 15726: } 15726: 15726: [[__nodiscard__]] 15726: constexpr reference 15726: back() noexcept 15726: { 15726: ; 15726: return _M_elems[_Nm - 1]; 15726: } 15726: 15726: [[__nodiscard__]] 15726: constexpr const_reference 15726: back() const noexcept 15726: { 15726: 15726: ; 15726: 15726: return _M_elems[_Nm - 1]; 15726: } 15726: 15726: [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]] 15726: constexpr pointer 15726: data() noexcept 15726: { return static_cast(_M_elems); } 15726: 15726: [[__nodiscard__]] 15726: constexpr const_pointer 15726: data() const noexcept 15726: { return static_cast(_M_elems); } 15726: }; 15726: 15726: 15726: template 15726: array(_Tp, _Up...) 15726: -> array && ...), _Tp>, 15726: 1 + sizeof...(_Up)>; 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: 15726: inline bool 15726: operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) 15726: { return std::equal(__one.begin(), __one.end(), __two.begin()); } 15726: # 322 "/usr/include/c++/13/array" 3 15726: template 15726: [[__nodiscard__]] 15726: 15726: inline bool 15726: operator!=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) 15726: { return !(__one == __two); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: 15726: inline bool 15726: operator<(const array<_Tp, _Nm>& __a, const array<_Tp, _Nm>& __b) 15726: { 15726: return std::lexicographical_compare(__a.begin(), __a.end(), 15726: __b.begin(), __b.end()); 15726: } 15726: 15726: template 15726: [[__nodiscard__]] 15726: 15726: inline bool 15726: operator>(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) 15726: { return __two < __one; } 15726: 15726: template 15726: [[__nodiscard__]] 15726: 15726: inline bool 15726: operator<=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) 15726: { return !(__one > __two); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: 15726: inline bool 15726: operator>=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) 15726: { return !(__one < __two); } 15726: 15726: 15726: 15726: template 15726: 15726: inline 15726: 15726: 15726: __enable_if_t<__array_traits<_Tp, _Nm>::_Is_swappable::value> 15726: 15726: 15726: 15726: swap(array<_Tp, _Nm>& __one, array<_Tp, _Nm>& __two) 15726: noexcept(noexcept(__one.swap(__two))) 15726: { __one.swap(__two); } 15726: 15726: 15726: template 15726: __enable_if_t::_Is_swappable::value> 15726: swap(array<_Tp, _Nm>&, array<_Tp, _Nm>&) = delete; 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: constexpr _Tp& 15726: get(array<_Tp, _Nm>& __arr) noexcept 15726: { 15726: static_assert(_Int < _Nm, "array index is within bounds"); 15726: return __arr._M_elems[_Int]; 15726: } 15726: 15726: template 15726: [[__nodiscard__]] 15726: constexpr _Tp&& 15726: get(array<_Tp, _Nm>&& __arr) noexcept 15726: { 15726: static_assert(_Int < _Nm, "array index is within bounds"); 15726: return std::move(std::get<_Int>(__arr)); 15726: } 15726: 15726: template 15726: [[__nodiscard__]] 15726: constexpr const _Tp& 15726: get(const array<_Tp, _Nm>& __arr) noexcept 15726: { 15726: static_assert(_Int < _Nm, "array index is within bounds"); 15726: return __arr._M_elems[_Int]; 15726: } 15726: 15726: template 15726: [[__nodiscard__]] 15726: constexpr const _Tp&& 15726: get(const array<_Tp, _Nm>&& __arr) noexcept 15726: { 15726: static_assert(_Int < _Nm, "array index is within bounds"); 15726: return std::move(std::get<_Int>(__arr)); 15726: } 15726: # 481 "/usr/include/c++/13/array" 3 15726: template 15726: struct tuple_size> 15726: : public integral_constant { }; 15726: 15726: 15726: template 15726: struct tuple_element<_Ind, array<_Tp, _Nm>> 15726: { 15726: static_assert(_Ind < _Nm, "array index is in range"); 15726: using type = _Tp; 15726: }; 15726: 15726: 15726: template 15726: inline constexpr size_t tuple_size_v> = _Nm; 15726: 15726: template 15726: inline constexpr size_t tuple_size_v> = _Nm; 15726: 15726: 15726: template 15726: struct __is_tuple_like_impl> : true_type 15726: { }; 15726: 15726: 15726: } 15726: # 66 "/usr/include/c++/13/functional" 2 3 15726: 15726: # 1 "/usr/include/c++/13/bits/stl_algo.h" 1 3 15726: # 59 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: # 1 "/usr/include/c++/13/bits/algorithmfwd.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/algorithmfwd.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/algorithmfwd.h" 3 15726: # 42 "/usr/include/c++/13/bits/algorithmfwd.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 199 "/usr/include/c++/13/bits/algorithmfwd.h" 3 15726: template 15726: 15726: bool 15726: all_of(_IIter, _IIter, _Predicate); 15726: 15726: template 15726: 15726: bool 15726: any_of(_IIter, _IIter, _Predicate); 15726: 15726: 15726: template 15726: 15726: bool 15726: binary_search(_FIter, _FIter, const _Tp&); 15726: 15726: template 15726: 15726: bool 15726: binary_search(_FIter, _FIter, const _Tp&, _Compare); 15726: 15726: 15726: template 15726: constexpr 15726: const _Tp& 15726: clamp(const _Tp&, const _Tp&, const _Tp&); 15726: 15726: template 15726: constexpr 15726: const _Tp& 15726: clamp(const _Tp&, const _Tp&, const _Tp&, _Compare); 15726: 15726: 15726: template 15726: 15726: _OIter 15726: copy(_IIter, _IIter, _OIter); 15726: 15726: template 15726: 15726: _BIter2 15726: copy_backward(_BIter1, _BIter1, _BIter2); 15726: 15726: 15726: template 15726: 15726: _OIter 15726: copy_if(_IIter, _IIter, _OIter, _Predicate); 15726: 15726: template 15726: 15726: _OIter 15726: copy_n(_IIter, _Size, _OIter); 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: pair<_FIter, _FIter> 15726: equal_range(_FIter, _FIter, const _Tp&); 15726: 15726: template 15726: 15726: pair<_FIter, _FIter> 15726: equal_range(_FIter, _FIter, const _Tp&, _Compare); 15726: 15726: template 15726: 15726: void 15726: fill(_FIter, _FIter, const _Tp&); 15726: 15726: template 15726: 15726: _OIter 15726: fill_n(_OIter, _Size, const _Tp&); 15726: 15726: 15726: 15726: template 15726: 15726: _FIter1 15726: find_end(_FIter1, _FIter1, _FIter2, _FIter2); 15726: 15726: template 15726: 15726: _FIter1 15726: find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate); 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: _IIter 15726: find_if_not(_IIter, _IIter, _Predicate); 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: bool 15726: includes(_IIter1, _IIter1, _IIter2, _IIter2); 15726: 15726: template 15726: 15726: bool 15726: includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare); 15726: 15726: template 15726: void 15726: inplace_merge(_BIter, _BIter, _BIter); 15726: 15726: template 15726: void 15726: inplace_merge(_BIter, _BIter, _BIter, _Compare); 15726: 15726: 15726: template 15726: 15726: bool 15726: is_heap(_RAIter, _RAIter); 15726: 15726: template 15726: 15726: bool 15726: is_heap(_RAIter, _RAIter, _Compare); 15726: 15726: template 15726: 15726: _RAIter 15726: is_heap_until(_RAIter, _RAIter); 15726: 15726: template 15726: 15726: _RAIter 15726: is_heap_until(_RAIter, _RAIter, _Compare); 15726: 15726: template 15726: 15726: bool 15726: is_partitioned(_IIter, _IIter, _Predicate); 15726: 15726: template 15726: 15726: bool 15726: is_permutation(_FIter1, _FIter1, _FIter2); 15726: 15726: template 15726: 15726: bool 15726: is_permutation(_FIter1, _FIter1, _FIter2, _BinaryPredicate); 15726: 15726: template 15726: 15726: bool 15726: is_sorted(_FIter, _FIter); 15726: 15726: template 15726: 15726: bool 15726: is_sorted(_FIter, _FIter, _Compare); 15726: 15726: template 15726: 15726: _FIter 15726: is_sorted_until(_FIter, _FIter); 15726: 15726: template 15726: 15726: _FIter 15726: is_sorted_until(_FIter, _FIter, _Compare); 15726: 15726: 15726: template 15726: 15726: void 15726: iter_swap(_FIter1, _FIter2); 15726: 15726: template 15726: 15726: _FIter 15726: lower_bound(_FIter, _FIter, const _Tp&); 15726: 15726: template 15726: 15726: _FIter 15726: lower_bound(_FIter, _FIter, const _Tp&, _Compare); 15726: 15726: template 15726: 15726: void 15726: make_heap(_RAIter, _RAIter); 15726: 15726: template 15726: 15726: void 15726: make_heap(_RAIter, _RAIter, _Compare); 15726: 15726: template 15726: constexpr 15726: const _Tp& 15726: max(const _Tp&, const _Tp&); 15726: 15726: template 15726: constexpr 15726: const _Tp& 15726: max(const _Tp&, const _Tp&, _Compare); 15726: 15726: 15726: 15726: 15726: template 15726: constexpr 15726: const _Tp& 15726: min(const _Tp&, const _Tp&); 15726: 15726: template 15726: constexpr 15726: const _Tp& 15726: min(const _Tp&, const _Tp&, _Compare); 15726: 15726: 15726: 15726: 15726: template 15726: constexpr 15726: pair 15726: minmax(const _Tp&, const _Tp&); 15726: 15726: template 15726: constexpr 15726: pair 15726: minmax(const _Tp&, const _Tp&, _Compare); 15726: 15726: template 15726: constexpr 15726: pair<_FIter, _FIter> 15726: minmax_element(_FIter, _FIter); 15726: 15726: template 15726: constexpr 15726: pair<_FIter, _FIter> 15726: minmax_element(_FIter, _FIter, _Compare); 15726: 15726: template 15726: constexpr 15726: _Tp 15726: min(initializer_list<_Tp>); 15726: 15726: template 15726: constexpr 15726: _Tp 15726: min(initializer_list<_Tp>, _Compare); 15726: 15726: template 15726: constexpr 15726: _Tp 15726: max(initializer_list<_Tp>); 15726: 15726: template 15726: constexpr 15726: _Tp 15726: max(initializer_list<_Tp>, _Compare); 15726: 15726: template 15726: constexpr 15726: pair<_Tp, _Tp> 15726: minmax(initializer_list<_Tp>); 15726: 15726: template 15726: constexpr 15726: pair<_Tp, _Tp> 15726: minmax(initializer_list<_Tp>, _Compare); 15726: 15726: 15726: 15726: 15726: template 15726: 15726: bool 15726: next_permutation(_BIter, _BIter); 15726: 15726: template 15726: 15726: bool 15726: next_permutation(_BIter, _BIter, _Compare); 15726: 15726: 15726: template 15726: 15726: bool 15726: none_of(_IIter, _IIter, _Predicate); 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: _RAIter 15726: partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter); 15726: 15726: template 15726: 15726: _RAIter 15726: partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare); 15726: 15726: 15726: 15726: 15726: template 15726: 15726: pair<_OIter1, _OIter2> 15726: partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate); 15726: 15726: template 15726: 15726: _FIter 15726: partition_point(_FIter, _FIter, _Predicate); 15726: 15726: 15726: template 15726: 15726: void 15726: pop_heap(_RAIter, _RAIter); 15726: 15726: template 15726: 15726: void 15726: pop_heap(_RAIter, _RAIter, _Compare); 15726: 15726: template 15726: 15726: bool 15726: prev_permutation(_BIter, _BIter); 15726: 15726: template 15726: 15726: bool 15726: prev_permutation(_BIter, _BIter, _Compare); 15726: 15726: template 15726: 15726: void 15726: push_heap(_RAIter, _RAIter); 15726: 15726: template 15726: 15726: void 15726: push_heap(_RAIter, _RAIter, _Compare); 15726: 15726: 15726: 15726: template 15726: 15726: _FIter 15726: remove(_FIter, _FIter, const _Tp&); 15726: 15726: template 15726: 15726: _FIter 15726: remove_if(_FIter, _FIter, _Predicate); 15726: 15726: template 15726: 15726: _OIter 15726: remove_copy(_IIter, _IIter, _OIter, const _Tp&); 15726: 15726: template 15726: 15726: _OIter 15726: remove_copy_if(_IIter, _IIter, _OIter, _Predicate); 15726: 15726: 15726: 15726: template 15726: 15726: _OIter 15726: replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&); 15726: 15726: template 15726: 15726: _OIter 15726: replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&); 15726: 15726: 15726: 15726: template 15726: 15726: void 15726: reverse(_BIter, _BIter); 15726: 15726: template 15726: 15726: _OIter 15726: reverse_copy(_BIter, _BIter, _OIter); 15726: 15726: inline namespace _V2 { 15726: 15726: template 15726: 15726: _FIter 15726: rotate(_FIter, _FIter, _FIter); 15726: 15726: } 15726: 15726: template 15726: 15726: _OIter 15726: rotate_copy(_FIter, _FIter, _FIter, _OIter); 15726: # 626 "/usr/include/c++/13/bits/algorithmfwd.h" 3 15726: template 15726: void 15726: shuffle(_RAIter, _RAIter, _UGenerator&&); 15726: 15726: 15726: template 15726: 15726: void 15726: sort_heap(_RAIter, _RAIter); 15726: 15726: template 15726: 15726: void 15726: sort_heap(_RAIter, _RAIter, _Compare); 15726: 15726: 15726: template 15726: _BIter 15726: stable_partition(_BIter, _BIter, _Predicate); 15726: # 661 "/usr/include/c++/13/bits/algorithmfwd.h" 3 15726: template 15726: 15726: _FIter2 15726: swap_ranges(_FIter1, _FIter1, _FIter2); 15726: 15726: 15726: 15726: template 15726: 15726: _FIter 15726: unique(_FIter, _FIter); 15726: 15726: template 15726: 15726: _FIter 15726: unique(_FIter, _FIter, _BinaryPredicate); 15726: 15726: 15726: 15726: template 15726: 15726: _FIter 15726: upper_bound(_FIter, _FIter, const _Tp&); 15726: 15726: template 15726: 15726: _FIter 15726: upper_bound(_FIter, _FIter, const _Tp&, _Compare); 15726: 15726: 15726: 15726: template 15726: 15726: _FIter 15726: adjacent_find(_FIter, _FIter); 15726: 15726: template 15726: 15726: _FIter 15726: adjacent_find(_FIter, _FIter, _BinaryPredicate); 15726: 15726: template 15726: 15726: typename iterator_traits<_IIter>::difference_type 15726: count(_IIter, _IIter, const _Tp&); 15726: 15726: template 15726: 15726: typename iterator_traits<_IIter>::difference_type 15726: count_if(_IIter, _IIter, _Predicate); 15726: 15726: template 15726: 15726: bool 15726: equal(_IIter1, _IIter1, _IIter2); 15726: 15726: template 15726: 15726: bool 15726: equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate); 15726: 15726: template 15726: 15726: _IIter 15726: find(_IIter, _IIter, const _Tp&); 15726: 15726: template 15726: 15726: _FIter1 15726: find_first_of(_FIter1, _FIter1, _FIter2, _FIter2); 15726: 15726: template 15726: 15726: _FIter1 15726: find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate); 15726: 15726: template 15726: 15726: _IIter 15726: find_if(_IIter, _IIter, _Predicate); 15726: 15726: template 15726: 15726: _Funct 15726: for_each(_IIter, _IIter, _Funct); 15726: 15726: template 15726: 15726: void 15726: generate(_FIter, _FIter, _Generator); 15726: 15726: template 15726: 15726: _OIter 15726: generate_n(_OIter, _Size, _Generator); 15726: 15726: template 15726: 15726: bool 15726: lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2); 15726: 15726: template 15726: 15726: bool 15726: lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare); 15726: 15726: template 15726: constexpr 15726: _FIter 15726: max_element(_FIter, _FIter); 15726: 15726: template 15726: constexpr 15726: _FIter 15726: max_element(_FIter, _FIter, _Compare); 15726: 15726: template 15726: 15726: _OIter 15726: merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 15726: 15726: template 15726: 15726: _OIter 15726: merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); 15726: 15726: template 15726: constexpr 15726: _FIter 15726: min_element(_FIter, _FIter); 15726: 15726: template 15726: constexpr 15726: _FIter 15726: min_element(_FIter, _FIter, _Compare); 15726: 15726: template 15726: 15726: pair<_IIter1, _IIter2> 15726: mismatch(_IIter1, _IIter1, _IIter2); 15726: 15726: template 15726: 15726: pair<_IIter1, _IIter2> 15726: mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate); 15726: 15726: template 15726: 15726: void 15726: nth_element(_RAIter, _RAIter, _RAIter); 15726: 15726: template 15726: 15726: void 15726: nth_element(_RAIter, _RAIter, _RAIter, _Compare); 15726: 15726: template 15726: 15726: void 15726: partial_sort(_RAIter, _RAIter, _RAIter); 15726: 15726: template 15726: 15726: void 15726: partial_sort(_RAIter, _RAIter, _RAIter, _Compare); 15726: 15726: template 15726: 15726: _BIter 15726: partition(_BIter, _BIter, _Predicate); 15726: 15726: 15726: template 15726: __attribute__ ((__deprecated__ ("use '" "std::shuffle" "' instead"))) 15726: void 15726: random_shuffle(_RAIter, _RAIter); 15726: 15726: template 15726: __attribute__ ((__deprecated__ ("use '" "std::shuffle" "' instead"))) 15726: void 15726: random_shuffle(_RAIter, _RAIter, 15726: 15726: _Generator&&); 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: void 15726: replace(_FIter, _FIter, const _Tp&, const _Tp&); 15726: 15726: template 15726: 15726: void 15726: replace_if(_FIter, _FIter, _Predicate, const _Tp&); 15726: 15726: template 15726: 15726: _FIter1 15726: search(_FIter1, _FIter1, _FIter2, _FIter2); 15726: 15726: template 15726: 15726: _FIter1 15726: search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate); 15726: 15726: template 15726: 15726: _FIter 15726: search_n(_FIter, _FIter, _Size, const _Tp&); 15726: 15726: template 15726: 15726: _FIter 15726: search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate); 15726: 15726: template 15726: 15726: _OIter 15726: set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 15726: 15726: template 15726: 15726: _OIter 15726: set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); 15726: 15726: template 15726: 15726: _OIter 15726: set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 15726: 15726: template 15726: 15726: _OIter 15726: set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); 15726: 15726: template 15726: 15726: _OIter 15726: set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 15726: 15726: template 15726: 15726: _OIter 15726: set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, 15726: _OIter, _Compare); 15726: 15726: template 15726: 15726: _OIter 15726: set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 15726: 15726: template 15726: 15726: _OIter 15726: set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); 15726: 15726: template 15726: 15726: void 15726: sort(_RAIter, _RAIter); 15726: 15726: template 15726: 15726: void 15726: sort(_RAIter, _RAIter, _Compare); 15726: 15726: template 15726: void 15726: stable_sort(_RAIter, _RAIter); 15726: 15726: template 15726: void 15726: stable_sort(_RAIter, _RAIter, _Compare); 15726: 15726: template 15726: 15726: _OIter 15726: transform(_IIter, _IIter, _OIter, _UnaryOperation); 15726: 15726: template 15726: 15726: _OIter 15726: transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation); 15726: 15726: template 15726: 15726: _OIter 15726: unique_copy(_IIter, _IIter, _OIter); 15726: 15726: template 15726: 15726: _OIter 15726: unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate); 15726: 15726: 15726: 15726: } 15726: # 60 "/usr/include/c++/13/bits/stl_algo.h" 2 3 15726: 15726: # 1 "/usr/include/c++/13/bits/stl_heap.h" 1 3 15726: # 63 "/usr/include/c++/13/bits/stl_heap.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: _Distance 15726: __is_heap_until(_RandomAccessIterator __first, _Distance __n, 15726: _Compare& __comp) 15726: { 15726: _Distance __parent = 0; 15726: for (_Distance __child = 1; __child < __n; ++__child) 15726: { 15726: if (__comp(__first + __parent, __first + __child)) 15726: return __child; 15726: if ((__child & 1) == 0) 15726: ++__parent; 15726: } 15726: return __n; 15726: } 15726: 15726: 15726: 15726: template 15726: 15726: inline bool 15726: __is_heap(_RandomAccessIterator __first, _Distance __n) 15726: { 15726: __gnu_cxx::__ops::_Iter_less_iter __comp; 15726: return std::__is_heap_until(__first, __n, __comp) == __n; 15726: } 15726: 15726: template 15726: 15726: inline bool 15726: __is_heap(_RandomAccessIterator __first, _Compare __comp, _Distance __n) 15726: { 15726: typedef __decltype(__comp) _Cmp; 15726: __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp)); 15726: return std::__is_heap_until(__first, __n, __cmp) == __n; 15726: } 15726: 15726: template 15726: 15726: inline bool 15726: __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) 15726: { return std::__is_heap(__first, std::distance(__first, __last)); } 15726: 15726: template 15726: 15726: inline bool 15726: __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, 15726: _Compare __comp) 15726: { 15726: return std::__is_heap(__first, std::move(__comp), 15726: std::distance(__first, __last)); 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: 15726: void 15726: __push_heap(_RandomAccessIterator __first, 15726: _Distance __holeIndex, _Distance __topIndex, _Tp __value, 15726: _Compare& __comp) 15726: { 15726: _Distance __parent = (__holeIndex - 1) / 2; 15726: while (__holeIndex > __topIndex && __comp(__first + __parent, __value)) 15726: { 15726: *(__first + __holeIndex) = std::move(*(__first + __parent)); 15726: __holeIndex = __parent; 15726: __parent = (__holeIndex - 1) / 2; 15726: } 15726: *(__first + __holeIndex) = std::move(__value); 15726: } 15726: # 159 "/usr/include/c++/13/bits/stl_heap.h" 3 15726: template 15726: 15726: inline void 15726: push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) 15726: { 15726: typedef typename iterator_traits<_RandomAccessIterator>::value_type 15726: _ValueType; 15726: typedef typename iterator_traits<_RandomAccessIterator>::difference_type 15726: _DistanceType; 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: 15726: __gnu_cxx::__ops::_Iter_less_val __comp; 15726: _ValueType __value = std::move(*(__last - 1)); 15726: std::__push_heap(__first, _DistanceType((__last - __first) - 1), 15726: _DistanceType(0), std::move(__value), __comp); 15726: } 15726: # 195 "/usr/include/c++/13/bits/stl_heap.h" 3 15726: template 15726: 15726: inline void 15726: push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, 15726: _Compare __comp) 15726: { 15726: typedef typename iterator_traits<_RandomAccessIterator>::value_type 15726: _ValueType; 15726: typedef typename iterator_traits<_RandomAccessIterator>::difference_type 15726: _DistanceType; 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: 15726: __decltype(__gnu_cxx::__ops::__iter_comp_val(std::move(__comp))) 15726: __cmp(std::move(__comp)); 15726: _ValueType __value = std::move(*(__last - 1)); 15726: std::__push_heap(__first, _DistanceType((__last - __first) - 1), 15726: _DistanceType(0), std::move(__value), __cmp); 15726: } 15726: 15726: template 15726: 15726: void 15726: __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex, 15726: _Distance __len, _Tp __value, _Compare __comp) 15726: { 15726: const _Distance __topIndex = __holeIndex; 15726: _Distance __secondChild = __holeIndex; 15726: while (__secondChild < (__len - 1) / 2) 15726: { 15726: __secondChild = 2 * (__secondChild + 1); 15726: if (__comp(__first + __secondChild, 15726: __first + (__secondChild - 1))) 15726: __secondChild--; 15726: *(__first + __holeIndex) = std::move(*(__first + __secondChild)); 15726: __holeIndex = __secondChild; 15726: } 15726: if ((__len & 1) == 0 && __secondChild == (__len - 2) / 2) 15726: { 15726: __secondChild = 2 * (__secondChild + 1); 15726: *(__first + __holeIndex) = std::move(*(__first + (__secondChild - 1))) 15726: ; 15726: __holeIndex = __secondChild - 1; 15726: } 15726: __decltype(__gnu_cxx::__ops::__iter_comp_val(std::move(__comp))) 15726: __cmp(std::move(__comp)); 15726: std::__push_heap(__first, __holeIndex, __topIndex, 15726: std::move(__value), __cmp); 15726: } 15726: 15726: template 15726: 15726: inline void 15726: __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, 15726: _RandomAccessIterator __result, _Compare& __comp) 15726: { 15726: typedef typename iterator_traits<_RandomAccessIterator>::value_type 15726: _ValueType; 15726: typedef typename iterator_traits<_RandomAccessIterator>::difference_type 15726: _DistanceType; 15726: 15726: _ValueType __value = std::move(*__result); 15726: *__result = std::move(*__first); 15726: std::__adjust_heap(__first, _DistanceType(0), 15726: _DistanceType(__last - __first), 15726: std::move(__value), __comp); 15726: } 15726: # 280 "/usr/include/c++/13/bits/stl_heap.h" 3 15726: template 15726: 15726: inline void 15726: pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: ; 15726: 15726: if (__last - __first > 1) 15726: { 15726: --__last; 15726: __gnu_cxx::__ops::_Iter_less_iter __comp; 15726: std::__pop_heap(__first, __last, __last, __comp); 15726: } 15726: } 15726: # 314 "/usr/include/c++/13/bits/stl_heap.h" 3 15726: template 15726: 15726: inline void 15726: pop_heap(_RandomAccessIterator __first, 15726: _RandomAccessIterator __last, _Compare __comp) 15726: { 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: ; 15726: 15726: if (__last - __first > 1) 15726: { 15726: typedef __decltype(__comp) _Cmp; 15726: __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp)); 15726: --__last; 15726: std::__pop_heap(__first, __last, __last, __cmp); 15726: } 15726: } 15726: 15726: template 15726: 15726: void 15726: __make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, 15726: _Compare& __comp) 15726: { 15726: typedef typename iterator_traits<_RandomAccessIterator>::value_type 15726: _ValueType; 15726: typedef typename iterator_traits<_RandomAccessIterator>::difference_type 15726: _DistanceType; 15726: 15726: if (__last - __first < 2) 15726: return; 15726: 15726: const _DistanceType __len = __last - __first; 15726: _DistanceType __parent = (__len - 2) / 2; 15726: while (true) 15726: { 15726: _ValueType __value = std::move(*(__first + __parent)); 15726: std::__adjust_heap(__first, __parent, __len, std::move(__value), 15726: __comp); 15726: if (__parent == 0) 15726: return; 15726: __parent--; 15726: } 15726: } 15726: # 372 "/usr/include/c++/13/bits/stl_heap.h" 3 15726: template 15726: 15726: inline void 15726: make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: __gnu_cxx::__ops::_Iter_less_iter __comp; 15726: std::__make_heap(__first, __last, __comp); 15726: } 15726: # 399 "/usr/include/c++/13/bits/stl_heap.h" 3 15726: template 15726: 15726: inline void 15726: make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, 15726: _Compare __comp) 15726: { 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: typedef __decltype(__comp) _Cmp; 15726: __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp)); 15726: std::__make_heap(__first, __last, __cmp); 15726: } 15726: 15726: template 15726: 15726: void 15726: __sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, 15726: _Compare& __comp) 15726: { 15726: while (__last - __first > 1) 15726: { 15726: --__last; 15726: std::__pop_heap(__first, __last, __last, __comp); 15726: } 15726: } 15726: # 437 "/usr/include/c++/13/bits/stl_heap.h" 3 15726: template 15726: 15726: inline void 15726: sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: 15726: __gnu_cxx::__ops::_Iter_less_iter __comp; 15726: std::__sort_heap(__first, __last, __comp); 15726: } 15726: # 465 "/usr/include/c++/13/bits/stl_heap.h" 3 15726: template 15726: 15726: inline void 15726: sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, 15726: _Compare __comp) 15726: { 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: 15726: typedef __decltype(__comp) _Cmp; 15726: __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp)); 15726: std::__sort_heap(__first, __last, __cmp); 15726: } 15726: # 494 "/usr/include/c++/13/bits/stl_heap.h" 3 15726: template 15726: 15726: inline _RandomAccessIterator 15726: is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: __gnu_cxx::__ops::_Iter_less_iter __comp; 15726: return __first + 15726: std::__is_heap_until(__first, std::distance(__first, __last), __comp); 15726: } 15726: # 523 "/usr/include/c++/13/bits/stl_heap.h" 3 15726: template 15726: 15726: inline _RandomAccessIterator 15726: is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last, 15726: _Compare __comp) 15726: { 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: typedef __decltype(__comp) _Cmp; 15726: __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp)); 15726: return __first 15726: + std::__is_heap_until(__first, std::distance(__first, __last), __cmp); 15726: } 15726: # 548 "/usr/include/c++/13/bits/stl_heap.h" 3 15726: template 15726: 15726: inline bool 15726: is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) 15726: { return std::is_heap_until(__first, __last) == __last; } 15726: # 562 "/usr/include/c++/13/bits/stl_heap.h" 3 15726: template 15726: 15726: inline bool 15726: is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, 15726: _Compare __comp) 15726: { 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: const auto __dist = std::distance(__first, __last); 15726: typedef __decltype(__comp) _Cmp; 15726: __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp)); 15726: return std::__is_heap_until(__first, __dist, __cmp) == __dist; 15726: } 15726: 15726: 15726: 15726: } 15726: # 62 "/usr/include/c++/13/bits/stl_algo.h" 2 3 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/uniform_int_dist.h" 1 3 15726: # 41 "/usr/include/c++/13/bits/uniform_int_dist.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 64 "/usr/include/c++/13/bits/uniform_int_dist.h" 3 15726: namespace __detail 15726: { 15726: 15726: 15726: 15726: template 15726: constexpr bool 15726: _Power_of_2(_Tp __x) 15726: { 15726: return ((__x - 1) & __x) == 0; 15726: } 15726: } 15726: # 87 "/usr/include/c++/13/bits/uniform_int_dist.h" 3 15726: template 15726: class uniform_int_distribution 15726: { 15726: static_assert(std::is_integral<_IntType>::value, 15726: "template argument must be an integral type"); 15726: 15726: public: 15726: 15726: typedef _IntType result_type; 15726: 15726: struct param_type 15726: { 15726: typedef uniform_int_distribution<_IntType> distribution_type; 15726: 15726: param_type() : param_type(0) { } 15726: 15726: explicit 15726: param_type(_IntType __a, 15726: _IntType __b = __gnu_cxx::__int_traits<_IntType>::__max) 15726: : _M_a(__a), _M_b(__b) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(_M_a <= _M_b)) __builtin_unreachable(); } while (false); 15726: } 15726: 15726: result_type 15726: a() const 15726: { return _M_a; } 15726: 15726: result_type 15726: b() const 15726: { return _M_b; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; } 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: private: 15726: _IntType _M_a; 15726: _IntType _M_b; 15726: }; 15726: 15726: public: 15726: 15726: 15726: 15726: uniform_int_distribution() : uniform_int_distribution(0) { } 15726: 15726: 15726: 15726: 15726: explicit 15726: uniform_int_distribution(_IntType __a, 15726: _IntType __b 15726: = __gnu_cxx::__int_traits<_IntType>::__max) 15726: : _M_param(__a, __b) 15726: { } 15726: 15726: explicit 15726: uniform_int_distribution(const param_type& __p) 15726: : _M_param(__p) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: reset() { } 15726: 15726: result_type 15726: a() const 15726: { return _M_param.a(); } 15726: 15726: result_type 15726: b() const 15726: { return _M_param.b(); } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { _M_param = __param; } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { return this->a(); } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { return this->b(); } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomBitGenerator& __urng) 15726: { return this->operator()(__urng, _M_param); } 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomBitGenerator& __urng, 15726: const param_type& __p); 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomBitGenerator& __urng) 15726: { this->__generate(__f, __t, __urng, _M_param); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomBitGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomBitGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const uniform_int_distribution& __d1, 15726: const uniform_int_distribution& __d2) 15726: { return __d1._M_param == __d2._M_param; } 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomBitGenerator& __urng, 15726: const param_type& __p); 15726: 15726: param_type _M_param; 15726: 15726: 15726: 15726: 15726: template 15726: static _Up 15726: _S_nd(_Urbg& __g, _Up __range) 15726: { 15726: using _Up_traits = __gnu_cxx::__int_traits<_Up>; 15726: using _Wp_traits = __gnu_cxx::__int_traits<_Wp>; 15726: static_assert(!_Up_traits::__is_signed, "U must be unsigned"); 15726: static_assert(!_Wp_traits::__is_signed, "W must be unsigned"); 15726: static_assert(_Wp_traits::__digits == (2 * _Up_traits::__digits), 15726: "W must be twice as wide as U"); 15726: 15726: 15726: 15726: 15726: _Wp __product = _Wp(__g()) * _Wp(__range); 15726: _Up __low = _Up(__product); 15726: if (__low < __range) 15726: { 15726: _Up __threshold = -__range % __range; 15726: while (__low < __threshold) 15726: { 15726: __product = _Wp(__g()) * _Wp(__range); 15726: __low = _Up(__product); 15726: } 15726: } 15726: return __product >> _Up_traits::__digits; 15726: } 15726: }; 15726: 15726: template 15726: template 15726: typename uniform_int_distribution<_IntType>::result_type 15726: uniform_int_distribution<_IntType>:: 15726: operator()(_UniformRandomBitGenerator& __urng, 15726: const param_type& __param) 15726: { 15726: typedef typename _UniformRandomBitGenerator::result_type _Gresult_type; 15726: typedef typename make_unsigned::type __utype; 15726: typedef typename common_type<_Gresult_type, __utype>::type __uctype; 15726: 15726: constexpr __uctype __urngmin = _UniformRandomBitGenerator::min(); 15726: constexpr __uctype __urngmax = _UniformRandomBitGenerator::max(); 15726: static_assert( __urngmin < __urngmax, 15726: "Uniform random bit generator must define min() < max()"); 15726: constexpr __uctype __urngrange = __urngmax - __urngmin; 15726: 15726: const __uctype __urange 15726: = __uctype(__param.b()) - __uctype(__param.a()); 15726: 15726: __uctype __ret; 15726: if (__urngrange > __urange) 15726: { 15726: 15726: 15726: const __uctype __uerange = __urange + 1; 15726: # 323 "/usr/include/c++/13/bits/uniform_int_dist.h" 3 15726: if constexpr (__urngrange == 0xffffffffU) 15726: { 15726: 15726: 15726: unsigned int __u32erange = __uerange; 15726: __ret = _S_nd(__urng, __u32erange); 15726: } 15726: else 15726: 15726: { 15726: 15726: const __uctype __scaling = __urngrange / __uerange; 15726: const __uctype __past = __uerange * __scaling; 15726: do 15726: __ret = __uctype(__urng()) - __urngmin; 15726: while (__ret >= __past); 15726: __ret /= __scaling; 15726: } 15726: } 15726: else if (__urngrange < __urange) 15726: { 15726: # 359 "/usr/include/c++/13/bits/uniform_int_dist.h" 3 15726: __uctype __tmp; 15726: do 15726: { 15726: const __uctype __uerngrange = __urngrange + 1; 15726: __tmp = (__uerngrange * operator() 15726: (__urng, param_type(0, __urange / __uerngrange))); 15726: __ret = __tmp + (__uctype(__urng()) - __urngmin); 15726: } 15726: while (__ret > __urange || __ret < __tmp); 15726: } 15726: else 15726: __ret = __uctype(__urng()) - __urngmin; 15726: 15726: return __ret + __param.a(); 15726: } 15726: 15726: 15726: template 15726: template 15726: void 15726: uniform_int_distribution<_IntType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomBitGenerator& __urng, 15726: const param_type& __param) 15726: { 15726: 15726: typedef typename _UniformRandomBitGenerator::result_type _Gresult_type; 15726: typedef typename make_unsigned::type __utype; 15726: typedef typename common_type<_Gresult_type, __utype>::type __uctype; 15726: 15726: static_assert( __urng.min() < __urng.max(), 15726: "Uniform random bit generator must define min() < max()"); 15726: 15726: constexpr __uctype __urngmin = __urng.min(); 15726: constexpr __uctype __urngmax = __urng.max(); 15726: constexpr __uctype __urngrange = __urngmax - __urngmin; 15726: const __uctype __urange 15726: = __uctype(__param.b()) - __uctype(__param.a()); 15726: 15726: __uctype __ret; 15726: 15726: if (__urngrange > __urange) 15726: { 15726: if (__detail::_Power_of_2(__urngrange + 1) 15726: && __detail::_Power_of_2(__urange + 1)) 15726: { 15726: while (__f != __t) 15726: { 15726: __ret = __uctype(__urng()) - __urngmin; 15726: *__f++ = (__ret & __urange) + __param.a(); 15726: } 15726: } 15726: else 15726: { 15726: 15726: const __uctype __uerange = __urange + 1; 15726: const __uctype __scaling = __urngrange / __uerange; 15726: const __uctype __past = __uerange * __scaling; 15726: while (__f != __t) 15726: { 15726: do 15726: __ret = __uctype(__urng()) - __urngmin; 15726: while (__ret >= __past); 15726: *__f++ = __ret / __scaling + __param.a(); 15726: } 15726: } 15726: } 15726: else if (__urngrange < __urange) 15726: { 15726: # 444 "/usr/include/c++/13/bits/uniform_int_dist.h" 3 15726: __uctype __tmp; 15726: while (__f != __t) 15726: { 15726: do 15726: { 15726: constexpr __uctype __uerngrange = __urngrange + 1; 15726: __tmp = (__uerngrange * operator() 15726: (__urng, param_type(0, __urange / __uerngrange))); 15726: __ret = __tmp + (__uctype(__urng()) - __urngmin); 15726: } 15726: while (__ret > __urange || __ret < __tmp); 15726: *__f++ = __ret; 15726: } 15726: } 15726: else 15726: while (__f != __t) 15726: *__f++ = __uctype(__urng()) - __urngmin + __param.a(); 15726: } 15726: 15726: 15726: 15726: 15726: } 15726: # 66 "/usr/include/c++/13/bits/stl_algo.h" 2 3 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/stl_tempbuf.h" 1 3 15726: # 65 "/usr/include/c++/13/bits/stl_tempbuf.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: namespace __detail 15726: { 15726: template 15726: inline void 15726: __return_temporary_buffer(_Tp* __p, 15726: size_t __len __attribute__((__unused__))) 15726: { 15726: 15726: ::operator delete(__p, __len * sizeof(_Tp)); 15726: 15726: 15726: 15726: } 15726: } 15726: # 101 "/usr/include/c++/13/bits/stl_tempbuf.h" 3 15726: template 15726: [[__deprecated__]] 15726: pair<_Tp*, ptrdiff_t> 15726: get_temporary_buffer(ptrdiff_t __len) noexcept 15726: { 15726: const ptrdiff_t __max = 15726: __gnu_cxx::__numeric_traits::__max / sizeof(_Tp); 15726: if (__len > __max) 15726: __len = __max; 15726: 15726: while (__len > 0) 15726: { 15726: _Tp* __tmp = static_cast<_Tp*>(::operator new(__len * sizeof(_Tp), 15726: std::nothrow)); 15726: if (__tmp != 0) 15726: return std::pair<_Tp*, ptrdiff_t>(__tmp, __len); 15726: __len = __len == 1 ? 0 : ((__len + 1) / 2); 15726: } 15726: return std::pair<_Tp*, ptrdiff_t>(static_cast<_Tp*>(0), 0); 15726: } 15726: # 129 "/usr/include/c++/13/bits/stl_tempbuf.h" 3 15726: template 15726: inline void 15726: return_temporary_buffer(_Tp* __p) 15726: { ::operator delete(__p); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: class _Temporary_buffer 15726: { 15726: 15726: 15726: 15726: public: 15726: typedef _Tp value_type; 15726: typedef value_type* pointer; 15726: typedef pointer iterator; 15726: typedef ptrdiff_t size_type; 15726: 15726: protected: 15726: size_type _M_original_len; 15726: size_type _M_len; 15726: pointer _M_buffer; 15726: 15726: public: 15726: 15726: size_type 15726: size() const 15726: { return _M_len; } 15726: 15726: 15726: size_type 15726: requested_size() const 15726: { return _M_original_len; } 15726: 15726: 15726: iterator 15726: begin() 15726: { return _M_buffer; } 15726: 15726: 15726: iterator 15726: end() 15726: { return _M_buffer + _M_len; } 15726: 15726: 15726: 15726: 15726: 15726: _Temporary_buffer(_ForwardIterator __seed, size_type __original_len); 15726: 15726: ~_Temporary_buffer() 15726: { 15726: std::_Destroy(_M_buffer, _M_buffer + _M_len); 15726: std::__detail::__return_temporary_buffer(_M_buffer, _M_len); 15726: } 15726: 15726: private: 15726: 15726: _Temporary_buffer(const _Temporary_buffer&); 15726: 15726: void 15726: operator=(const _Temporary_buffer&); 15726: }; 15726: 15726: 15726: template 15726: struct __uninitialized_construct_buf_dispatch 15726: { 15726: template 15726: static void 15726: __ucr(_Pointer __first, _Pointer __last, 15726: _ForwardIterator __seed) 15726: { 15726: if (__first == __last) 15726: return; 15726: 15726: _Pointer __cur = __first; 15726: try 15726: { 15726: std::_Construct(std::__addressof(*__first), 15726: std::move(*__seed)); 15726: _Pointer __prev = __cur; 15726: ++__cur; 15726: for(; __cur != __last; ++__cur, ++__prev) 15726: std::_Construct(std::__addressof(*__cur), 15726: std::move(*__prev)); 15726: *__seed = std::move(*__prev); 15726: } 15726: catch(...) 15726: { 15726: std::_Destroy(__first, __cur); 15726: throw; 15726: } 15726: } 15726: }; 15726: 15726: template<> 15726: struct __uninitialized_construct_buf_dispatch 15726: { 15726: template 15726: static void 15726: __ucr(_Pointer, _Pointer, _ForwardIterator) { } 15726: }; 15726: # 247 "/usr/include/c++/13/bits/stl_tempbuf.h" 3 15726: template 15726: inline void 15726: __uninitialized_construct_buf(_Pointer __first, _Pointer __last, 15726: _ForwardIterator __seed) 15726: { 15726: typedef typename std::iterator_traits<_Pointer>::value_type 15726: _ValueType; 15726: 15726: std::__uninitialized_construct_buf_dispatch< 15726: __has_trivial_constructor(_ValueType)>:: 15726: __ucr(__first, __last, __seed); 15726: } 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: template 15726: _Temporary_buffer<_ForwardIterator, _Tp>:: 15726: _Temporary_buffer(_ForwardIterator __seed, size_type __original_len) 15726: : _M_original_len(__original_len), _M_len(0), _M_buffer(0) 15726: { 15726: std::pair __p( 15726: std::get_temporary_buffer(_M_original_len)); 15726: 15726: if (__p.first) 15726: { 15726: try 15726: { 15726: std::__uninitialized_construct_buf(__p.first, __p.first + __p.second, 15726: __seed); 15726: _M_buffer = __p.first; 15726: _M_len = __p.second; 15726: } 15726: catch(...) 15726: { 15726: std::__detail::__return_temporary_buffer(__p.first, __p.second); 15726: throw; 15726: } 15726: } 15726: } 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: } 15726: # 70 "/usr/include/c++/13/bits/stl_algo.h" 2 3 15726: 15726: # 1 "/usr/include/c++/13/cstdlib" 1 3 15726: # 39 "/usr/include/c++/13/cstdlib" 3 15726: 15726: # 40 "/usr/include/c++/13/cstdlib" 3 15726: # 79 "/usr/include/c++/13/cstdlib" 3 15726: # 1 "/usr/include/stdlib.h" 1 3 4 15726: # 26 "/usr/include/stdlib.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 15726: # 27 "/usr/include/stdlib.h" 2 3 4 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 33 "/usr/include/stdlib.h" 2 3 4 15726: 15726: extern "C" { 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/waitflags.h" 1 3 4 15726: # 41 "/usr/include/stdlib.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/waitstatus.h" 1 3 4 15726: # 42 "/usr/include/stdlib.h" 2 3 4 15726: # 56 "/usr/include/stdlib.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/floatn.h" 1 3 4 15726: # 52 "/usr/include/arm-linux-gnueabihf/bits/floatn.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/floatn-common.h" 1 3 4 15726: # 24 "/usr/include/arm-linux-gnueabihf/bits/floatn-common.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/long-double.h" 1 3 4 15726: # 25 "/usr/include/arm-linux-gnueabihf/bits/floatn-common.h" 2 3 4 15726: # 53 "/usr/include/arm-linux-gnueabihf/bits/floatn.h" 2 3 4 15726: # 57 "/usr/include/stdlib.h" 2 3 4 15726: 15726: 15726: typedef struct 15726: { 15726: int quot; 15726: int rem; 15726: } div_t; 15726: 15726: 15726: 15726: typedef struct 15726: { 15726: long int quot; 15726: long int rem; 15726: } ldiv_t; 15726: 15726: 15726: 15726: 15726: 15726: __extension__ typedef struct 15726: { 15726: long long int quot; 15726: long long int rem; 15726: } lldiv_t; 15726: # 98 "/usr/include/stdlib.h" 3 4 15726: extern size_t __ctype_get_mb_cur_max (void) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: extern double atof (const char *__nptr) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: extern int atoi (const char *__nptr) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: extern long int atol (const char *__nptr) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: __extension__ extern long long int atoll (const char *__nptr) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: extern double strtod (const char *__restrict __nptr, 15726: char **__restrict __endptr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern float strtof (const char *__restrict __nptr, 15726: char **__restrict __endptr) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: extern long double strtold (const char *__restrict __nptr, 15726: char **__restrict __endptr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: # 141 "/usr/include/stdlib.h" 3 4 15726: extern _Float32 strtof32 (const char *__restrict __nptr, 15726: char **__restrict __endptr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern _Float64 strtof64 (const char *__restrict __nptr, 15726: char **__restrict __endptr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: # 159 "/usr/include/stdlib.h" 3 4 15726: extern _Float32x strtof32x (const char *__restrict __nptr, 15726: char **__restrict __endptr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: # 177 "/usr/include/stdlib.h" 3 4 15726: extern long int strtol (const char *__restrict __nptr, 15726: char **__restrict __endptr, int __base) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: extern unsigned long int strtoul (const char *__restrict __nptr, 15726: char **__restrict __endptr, int __base) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: __extension__ 15726: extern long long int strtoq (const char *__restrict __nptr, 15726: char **__restrict __endptr, int __base) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: __extension__ 15726: extern unsigned long long int strtouq (const char *__restrict __nptr, 15726: char **__restrict __endptr, int __base) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: __extension__ 15726: extern long long int strtoll (const char *__restrict __nptr, 15726: char **__restrict __endptr, int __base) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: __extension__ 15726: extern unsigned long long int strtoull (const char *__restrict __nptr, 15726: char **__restrict __endptr, int __base) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern long int strtol (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtol") 15726: 15726: 15726: __attribute__ ((__nonnull__ (1))); 15726: extern unsigned long int strtoul (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoul") 15726: 15726: 15726: 15726: __attribute__ ((__nonnull__ (1))); 15726: 15726: __extension__ 15726: extern long long int strtoq (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoll") 15726: 15726: 15726: __attribute__ ((__nonnull__ (1))); 15726: __extension__ 15726: extern unsigned long long int strtouq (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoull") 15726: 15726: 15726: 15726: __attribute__ ((__nonnull__ (1))); 15726: 15726: __extension__ 15726: extern long long int strtoll (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoll") 15726: 15726: 15726: __attribute__ ((__nonnull__ (1))); 15726: __extension__ 15726: extern unsigned long long int strtoull (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoull") 15726: 15726: 15726: 15726: __attribute__ ((__nonnull__ (1))); 15726: # 278 "/usr/include/stdlib.h" 3 4 15726: extern int strfromd (char *__dest, size_t __size, const char *__format, 15726: double __f) 15726: noexcept (true) __attribute__ ((__nonnull__ (3))); 15726: 15726: extern int strfromf (char *__dest, size_t __size, const char *__format, 15726: float __f) 15726: noexcept (true) __attribute__ ((__nonnull__ (3))); 15726: 15726: extern int strfroml (char *__dest, size_t __size, const char *__format, 15726: long double __f) 15726: noexcept (true) __attribute__ ((__nonnull__ (3))); 15726: # 298 "/usr/include/stdlib.h" 3 4 15726: extern int strfromf32 (char *__dest, size_t __size, const char * __format, 15726: _Float32 __f) 15726: noexcept (true) __attribute__ ((__nonnull__ (3))); 15726: 15726: 15726: 15726: extern int strfromf64 (char *__dest, size_t __size, const char * __format, 15726: _Float64 __f) 15726: noexcept (true) __attribute__ ((__nonnull__ (3))); 15726: # 316 "/usr/include/stdlib.h" 3 4 15726: extern int strfromf32x (char *__dest, size_t __size, const char * __format, 15726: _Float32x __f) 15726: noexcept (true) __attribute__ ((__nonnull__ (3))); 15726: # 338 "/usr/include/stdlib.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/locale_t.h" 1 3 4 15726: # 22 "/usr/include/arm-linux-gnueabihf/bits/types/locale_t.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/__locale_t.h" 1 3 4 15726: # 27 "/usr/include/arm-linux-gnueabihf/bits/types/__locale_t.h" 3 4 15726: struct __locale_struct 15726: { 15726: 15726: struct __locale_data *__locales[13]; 15726: 15726: 15726: const unsigned short int *__ctype_b; 15726: const int *__ctype_tolower; 15726: const int *__ctype_toupper; 15726: 15726: 15726: const char *__names[13]; 15726: }; 15726: 15726: typedef struct __locale_struct *__locale_t; 15726: # 23 "/usr/include/arm-linux-gnueabihf/bits/types/locale_t.h" 2 3 4 15726: 15726: typedef __locale_t locale_t; 15726: # 339 "/usr/include/stdlib.h" 2 3 4 15726: 15726: extern long int strtol_l (const char *__restrict __nptr, 15726: char **__restrict __endptr, int __base, 15726: locale_t __loc) noexcept (true) __attribute__ ((__nonnull__ (1, 4))); 15726: 15726: extern unsigned long int strtoul_l (const char *__restrict __nptr, 15726: char **__restrict __endptr, 15726: int __base, locale_t __loc) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 4))); 15726: 15726: __extension__ 15726: extern long long int strtoll_l (const char *__restrict __nptr, 15726: char **__restrict __endptr, int __base, 15726: locale_t __loc) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 4))); 15726: 15726: __extension__ 15726: extern unsigned long long int strtoull_l (const char *__restrict __nptr, 15726: char **__restrict __endptr, 15726: int __base, locale_t __loc) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 4))); 15726: 15726: 15726: 15726: 15726: 15726: extern long int strtol_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_strtol_l") 15726: 15726: 15726: 15726: __attribute__ ((__nonnull__ (1, 4))); 15726: extern unsigned long int strtoul_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_strtoul_l") 15726: 15726: 15726: 15726: 15726: __attribute__ ((__nonnull__ (1, 4))); 15726: __extension__ 15726: extern long long int strtoll_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_strtoll_l") 15726: 15726: 15726: 15726: 15726: __attribute__ ((__nonnull__ (1, 4))); 15726: __extension__ 15726: extern unsigned long long int strtoull_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_strtoull_l") 15726: 15726: 15726: 15726: 15726: __attribute__ ((__nonnull__ (1, 4))); 15726: # 415 "/usr/include/stdlib.h" 3 4 15726: extern double strtod_l (const char *__restrict __nptr, 15726: char **__restrict __endptr, locale_t __loc) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 15726: 15726: extern float strtof_l (const char *__restrict __nptr, 15726: char **__restrict __endptr, locale_t __loc) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 15726: 15726: extern long double strtold_l (const char *__restrict __nptr, 15726: char **__restrict __endptr, 15726: locale_t __loc) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 15726: # 436 "/usr/include/stdlib.h" 3 4 15726: extern _Float32 strtof32_l (const char *__restrict __nptr, 15726: char **__restrict __endptr, 15726: locale_t __loc) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 15726: 15726: 15726: 15726: extern _Float64 strtof64_l (const char *__restrict __nptr, 15726: char **__restrict __endptr, 15726: locale_t __loc) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 15726: # 457 "/usr/include/stdlib.h" 3 4 15726: extern _Float32x strtof32x_l (const char *__restrict __nptr, 15726: char **__restrict __endptr, 15726: locale_t __loc) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 15726: # 480 "/usr/include/stdlib.h" 3 4 15726: extern __inline __attribute__ ((__gnu_inline__)) int 15726: __attribute__ ((__leaf__)) atoi (const char *__nptr) noexcept (true) 15726: { 15726: return (int) strtol (__nptr, (char **) __null, 10); 15726: } 15726: extern __inline __attribute__ ((__gnu_inline__)) long int 15726: __attribute__ ((__leaf__)) atol (const char *__nptr) noexcept (true) 15726: { 15726: return strtol (__nptr, (char **) __null, 10); 15726: } 15726: 15726: 15726: __extension__ extern __inline __attribute__ ((__gnu_inline__)) long long int 15726: __attribute__ ((__leaf__)) atoll (const char *__nptr) noexcept (true) 15726: { 15726: return strtoll (__nptr, (char **) __null, 10); 15726: } 15726: # 505 "/usr/include/stdlib.h" 3 4 15726: extern char *l64a (long int __n) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: extern long int a64l (const char *__s) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/sys/types.h" 1 3 4 15726: # 27 "/usr/include/arm-linux-gnueabihf/sys/types.h" 3 4 15726: extern "C" { 15726: 15726: 15726: 15726: 15726: 15726: typedef __u_char u_char; 15726: typedef __u_short u_short; 15726: typedef __u_int u_int; 15726: typedef __u_long u_long; 15726: typedef __quad_t quad_t; 15726: typedef __u_quad_t u_quad_t; 15726: typedef __fsid_t fsid_t; 15726: 15726: 15726: typedef __loff_t loff_t; 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef __ino64_t ino_t; 15726: 15726: 15726: 15726: 15726: typedef __ino64_t ino64_t; 15726: 15726: 15726: 15726: 15726: typedef __dev_t dev_t; 15726: 15726: 15726: 15726: 15726: typedef __gid_t gid_t; 15726: 15726: 15726: 15726: 15726: typedef __mode_t mode_t; 15726: 15726: 15726: 15726: 15726: typedef __nlink_t nlink_t; 15726: 15726: 15726: 15726: 15726: typedef __uid_t uid_t; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef __off64_t off_t; 15726: 15726: 15726: 15726: 15726: typedef __off64_t off64_t; 15726: 15726: 15726: 15726: 15726: typedef __pid_t pid_t; 15726: 15726: 15726: 15726: 15726: 15726: typedef __id_t id_t; 15726: 15726: 15726: 15726: 15726: typedef __ssize_t ssize_t; 15726: 15726: 15726: 15726: 15726: 15726: typedef __daddr_t daddr_t; 15726: typedef __caddr_t caddr_t; 15726: 15726: 15726: 15726: 15726: 15726: typedef __key_t key_t; 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/clock_t.h" 1 3 4 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef __clock_t clock_t; 15726: # 127 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/clockid_t.h" 1 3 4 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef __clockid_t clockid_t; 15726: # 129 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/time_t.h" 1 3 4 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef __time64_t time_t; 15726: # 130 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/timer_t.h" 1 3 4 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef __timer_t timer_t; 15726: # 131 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 15726: 15726: 15726: 15726: typedef __useconds_t useconds_t; 15726: 15726: 15726: 15726: typedef __suseconds_t suseconds_t; 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 145 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 15726: 15726: 15726: 15726: typedef unsigned long int ulong; 15726: typedef unsigned short int ushort; 15726: typedef unsigned int uint; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef __uint8_t u_int8_t; 15726: typedef __uint16_t u_int16_t; 15726: typedef __uint32_t u_int32_t; 15726: typedef __uint64_t u_int64_t; 15726: 15726: 15726: typedef int register_t __attribute__ ((__mode__ (__word__))); 15726: # 176 "/usr/include/arm-linux-gnueabihf/sys/types.h" 3 4 15726: # 1 "/usr/include/endian.h" 1 3 4 15726: # 24 "/usr/include/endian.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/endian.h" 1 3 4 15726: # 35 "/usr/include/arm-linux-gnueabihf/bits/endian.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/endianness.h" 1 3 4 15726: # 36 "/usr/include/arm-linux-gnueabihf/bits/endian.h" 2 3 4 15726: # 25 "/usr/include/endian.h" 2 3 4 15726: # 35 "/usr/include/endian.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/byteswap.h" 1 3 4 15726: # 33 "/usr/include/arm-linux-gnueabihf/bits/byteswap.h" 3 4 15726: static __inline __uint16_t 15726: __bswap_16 (__uint16_t __bsx) 15726: { 15726: 15726: return __builtin_bswap16 (__bsx); 15726: 15726: 15726: 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: static __inline __uint32_t 15726: __bswap_32 (__uint32_t __bsx) 15726: { 15726: 15726: return __builtin_bswap32 (__bsx); 15726: 15726: 15726: 15726: } 15726: # 69 "/usr/include/arm-linux-gnueabihf/bits/byteswap.h" 3 4 15726: __extension__ static __inline __uint64_t 15726: __bswap_64 (__uint64_t __bsx) 15726: { 15726: 15726: return __builtin_bswap64 (__bsx); 15726: 15726: 15726: 15726: } 15726: # 36 "/usr/include/endian.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/uintn-identity.h" 1 3 4 15726: # 32 "/usr/include/arm-linux-gnueabihf/bits/uintn-identity.h" 3 4 15726: static __inline __uint16_t 15726: __uint16_identity (__uint16_t __x) 15726: { 15726: return __x; 15726: } 15726: 15726: static __inline __uint32_t 15726: __uint32_identity (__uint32_t __x) 15726: { 15726: return __x; 15726: } 15726: 15726: static __inline __uint64_t 15726: __uint64_identity (__uint64_t __x) 15726: { 15726: return __x; 15726: } 15726: # 37 "/usr/include/endian.h" 2 3 4 15726: # 177 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/sys/select.h" 1 3 4 15726: # 30 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/select.h" 1 3 4 15726: # 31 "/usr/include/arm-linux-gnueabihf/sys/select.h" 2 3 4 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/sigset_t.h" 1 3 4 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/__sigset_t.h" 1 3 4 15726: 15726: 15726: 15726: 15726: typedef struct 15726: { 15726: unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))]; 15726: } __sigset_t; 15726: # 5 "/usr/include/arm-linux-gnueabihf/bits/types/sigset_t.h" 2 3 4 15726: 15726: 15726: typedef __sigset_t sigset_t; 15726: # 34 "/usr/include/arm-linux-gnueabihf/sys/select.h" 2 3 4 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_timeval.h" 1 3 4 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct timeval 15726: { 15726: 15726: __time64_t tv_sec; 15726: __suseconds64_t tv_usec; 15726: 15726: 15726: 15726: 15726: }; 15726: # 38 "/usr/include/arm-linux-gnueabihf/sys/select.h" 2 3 4 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_timespec.h" 1 3 4 15726: # 11 "/usr/include/arm-linux-gnueabihf/bits/types/struct_timespec.h" 3 4 15726: struct timespec 15726: { 15726: 15726: __time64_t tv_sec; 15726: # 27 "/usr/include/arm-linux-gnueabihf/bits/types/struct_timespec.h" 3 4 15726: long int tv_nsec; 15726: int: 32; 15726: 15726: 15726: }; 15726: # 40 "/usr/include/arm-linux-gnueabihf/sys/select.h" 2 3 4 15726: # 49 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 15726: typedef long int __fd_mask; 15726: # 59 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 15726: typedef struct 15726: { 15726: 15726: 15726: 15726: __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))]; 15726: 15726: 15726: 15726: 15726: 15726: } fd_set; 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef __fd_mask fd_mask; 15726: # 91 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 15726: extern "C" { 15726: # 108 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 15726: extern int select (int __nfds, fd_set *__restrict __readfds, fd_set *__restrict __writefds, fd_set *__restrict __exceptfds, struct timeval *__restrict __timeout) __asm__ ("" "__select64") 15726: 15726: 15726: 15726: 15726: ; 15726: # 134 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 15726: extern int pselect (int __nfds, fd_set *__restrict __readfds, fd_set *__restrict __writefds, fd_set *__restrict __exceptfds, const struct timespec *__restrict __timeout, const __sigset_t *__restrict __sigmask) __asm__ ("" "__pselect64") 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: # 150 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/select2.h" 1 3 4 15726: # 23 "/usr/include/arm-linux-gnueabihf/bits/select2.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/select-decl.h" 1 3 4 15726: # 27 "/usr/include/arm-linux-gnueabihf/bits/select-decl.h" 3 4 15726: extern long int __fdelt_chk (long int __d); 15726: extern long int __fdelt_warn (long int __d) 15726: __attribute__((__warning__ ("bit outside of fd_set selected"))); 15726: # 24 "/usr/include/arm-linux-gnueabihf/bits/select2.h" 2 3 4 15726: # 151 "/usr/include/arm-linux-gnueabihf/sys/select.h" 2 3 4 15726: 15726: 15726: } 15726: # 180 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 15726: 15726: 15726: 15726: 15726: 15726: typedef __blksize_t blksize_t; 15726: # 205 "/usr/include/arm-linux-gnueabihf/sys/types.h" 3 4 15726: typedef __blkcnt64_t blkcnt_t; 15726: 15726: 15726: 15726: typedef __fsblkcnt64_t fsblkcnt_t; 15726: 15726: 15726: 15726: typedef __fsfilcnt64_t fsfilcnt_t; 15726: 15726: 15726: 15726: 15726: 15726: typedef __blkcnt64_t blkcnt64_t; 15726: typedef __fsblkcnt64_t fsblkcnt64_t; 15726: typedef __fsfilcnt64_t fsfilcnt64_t; 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/pthreadtypes.h" 1 3 4 15726: # 23 "/usr/include/arm-linux-gnueabihf/bits/pthreadtypes.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 1 3 4 15726: # 44 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/pthreadtypes-arch.h" 1 3 4 15726: # 23 "/usr/include/arm-linux-gnueabihf/bits/pthreadtypes-arch.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 15726: # 24 "/usr/include/arm-linux-gnueabihf/bits/pthreadtypes-arch.h" 2 3 4 15726: # 45 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 2 3 4 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/atomic_wide_counter.h" 1 3 4 15726: # 25 "/usr/include/arm-linux-gnueabihf/bits/atomic_wide_counter.h" 3 4 15726: typedef union 15726: { 15726: __extension__ unsigned long long int __value64; 15726: struct 15726: { 15726: unsigned int __low; 15726: unsigned int __high; 15726: } __value32; 15726: } __atomic_wide_counter; 15726: # 47 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 2 3 4 15726: 15726: 15726: 15726: 15726: typedef struct __pthread_internal_list 15726: { 15726: struct __pthread_internal_list *__prev; 15726: struct __pthread_internal_list *__next; 15726: } __pthread_list_t; 15726: 15726: typedef struct __pthread_internal_slist 15726: { 15726: struct __pthread_internal_slist *__next; 15726: } __pthread_slist_t; 15726: # 76 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/struct_mutex.h" 1 3 4 15726: # 27 "/usr/include/arm-linux-gnueabihf/bits/struct_mutex.h" 3 4 15726: struct __pthread_mutex_s 15726: { 15726: int __lock ; 15726: unsigned int __count; 15726: int __owner; 15726: # 58 "/usr/include/arm-linux-gnueabihf/bits/struct_mutex.h" 3 4 15726: int __kind; 15726: 15726: unsigned int __nusers; 15726: 15726: 15726: 15726: 15726: 15726: 15726: __extension__ union 15726: { 15726: int __spins; 15726: __pthread_slist_t __list; 15726: }; 15726: 15726: 15726: }; 15726: # 77 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 2 3 4 15726: # 89 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/struct_rwlock.h" 1 3 4 15726: # 29 "/usr/include/arm-linux-gnueabihf/bits/struct_rwlock.h" 3 4 15726: struct __pthread_rwlock_arch_t 15726: { 15726: unsigned int __readers; 15726: unsigned int __writers; 15726: unsigned int __wrphase_futex; 15726: unsigned int __writers_futex; 15726: unsigned int __pad3; 15726: unsigned int __pad4; 15726: # 45 "/usr/include/arm-linux-gnueabihf/bits/struct_rwlock.h" 3 4 15726: unsigned char __flags; 15726: unsigned char __shared; 15726: unsigned char __pad1; 15726: unsigned char __pad2; 15726: 15726: int __cur_writer; 15726: }; 15726: # 90 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 2 3 4 15726: 15726: 15726: 15726: 15726: struct __pthread_cond_s 15726: { 15726: __atomic_wide_counter __wseq; 15726: __atomic_wide_counter __g1_start; 15726: unsigned int __g_refs[2] ; 15726: unsigned int __g_size[2]; 15726: unsigned int __g1_orig_size; 15726: unsigned int __wrefs; 15726: unsigned int __g_signals[2]; 15726: }; 15726: 15726: typedef unsigned int __tss_t; 15726: typedef unsigned long int __thrd_t; 15726: 15726: typedef struct 15726: { 15726: int __data ; 15726: } __once_flag; 15726: # 24 "/usr/include/arm-linux-gnueabihf/bits/pthreadtypes.h" 2 3 4 15726: 15726: 15726: 15726: typedef unsigned long int pthread_t; 15726: 15726: 15726: 15726: 15726: typedef union 15726: { 15726: char __size[4]; 15726: int __align; 15726: } pthread_mutexattr_t; 15726: 15726: 15726: 15726: 15726: typedef union 15726: { 15726: char __size[4]; 15726: int __align; 15726: } pthread_condattr_t; 15726: 15726: 15726: 15726: typedef unsigned int pthread_key_t; 15726: 15726: 15726: 15726: typedef int pthread_once_t; 15726: 15726: 15726: union pthread_attr_t 15726: { 15726: char __size[36]; 15726: long int __align; 15726: }; 15726: 15726: typedef union pthread_attr_t pthread_attr_t; 15726: 15726: 15726: 15726: 15726: typedef union 15726: { 15726: struct __pthread_mutex_s __data; 15726: char __size[24]; 15726: long int __align; 15726: } pthread_mutex_t; 15726: 15726: 15726: typedef union 15726: { 15726: struct __pthread_cond_s __data; 15726: char __size[48]; 15726: __extension__ long long int __align; 15726: } pthread_cond_t; 15726: 15726: 15726: 15726: 15726: 15726: typedef union 15726: { 15726: struct __pthread_rwlock_arch_t __data; 15726: char __size[32]; 15726: long int __align; 15726: } pthread_rwlock_t; 15726: 15726: typedef union 15726: { 15726: char __size[8]; 15726: long int __align; 15726: } pthread_rwlockattr_t; 15726: 15726: 15726: 15726: 15726: 15726: typedef volatile int pthread_spinlock_t; 15726: 15726: 15726: 15726: 15726: typedef union 15726: { 15726: char __size[20]; 15726: long int __align; 15726: } pthread_barrier_t; 15726: 15726: typedef union 15726: { 15726: char __size[4]; 15726: int __align; 15726: } pthread_barrierattr_t; 15726: # 228 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 15726: 15726: 15726: } 15726: # 515 "/usr/include/stdlib.h" 2 3 4 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern long int random (void) noexcept (true); 15726: 15726: 15726: extern void srandom (unsigned int __seed) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern char *initstate (unsigned int __seed, char *__statebuf, 15726: size_t __statelen) noexcept (true) __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: 15726: extern char *setstate (char *__statebuf) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct random_data 15726: { 15726: int32_t *fptr; 15726: int32_t *rptr; 15726: int32_t *state; 15726: int rand_type; 15726: int rand_deg; 15726: int rand_sep; 15726: int32_t *end_ptr; 15726: }; 15726: 15726: extern int random_r (struct random_data *__restrict __buf, 15726: int32_t *__restrict __result) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: extern int srandom_r (unsigned int __seed, struct random_data *__buf) 15726: noexcept (true) __attribute__ ((__nonnull__ (2))); 15726: 15726: extern int initstate_r (unsigned int __seed, char *__restrict __statebuf, 15726: size_t __statelen, 15726: struct random_data *__restrict __buf) 15726: noexcept (true) __attribute__ ((__nonnull__ (2, 4))); 15726: 15726: extern int setstate_r (char *__restrict __statebuf, 15726: struct random_data *__restrict __buf) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: 15726: 15726: extern int rand (void) noexcept (true); 15726: 15726: extern void srand (unsigned int __seed) noexcept (true); 15726: 15726: 15726: 15726: extern int rand_r (unsigned int *__seed) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern double drand48 (void) noexcept (true); 15726: extern double erand48 (unsigned short int __xsubi[3]) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern long int lrand48 (void) noexcept (true); 15726: extern long int nrand48 (unsigned short int __xsubi[3]) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern long int mrand48 (void) noexcept (true); 15726: extern long int jrand48 (unsigned short int __xsubi[3]) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern void srand48 (long int __seedval) noexcept (true); 15726: extern unsigned short int *seed48 (unsigned short int __seed16v[3]) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: extern void lcong48 (unsigned short int __param[7]) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: struct drand48_data 15726: { 15726: unsigned short int __x[3]; 15726: unsigned short int __old_x[3]; 15726: unsigned short int __c; 15726: unsigned short int __init; 15726: __extension__ unsigned long long int __a; 15726: 15726: }; 15726: 15726: 15726: extern int drand48_r (struct drand48_data *__restrict __buffer, 15726: double *__restrict __result) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: extern int erand48_r (unsigned short int __xsubi[3], 15726: struct drand48_data *__restrict __buffer, 15726: double *__restrict __result) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int lrand48_r (struct drand48_data *__restrict __buffer, 15726: long int *__restrict __result) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: extern int nrand48_r (unsigned short int __xsubi[3], 15726: struct drand48_data *__restrict __buffer, 15726: long int *__restrict __result) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int mrand48_r (struct drand48_data *__restrict __buffer, 15726: long int *__restrict __result) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: extern int jrand48_r (unsigned short int __xsubi[3], 15726: struct drand48_data *__restrict __buffer, 15726: long int *__restrict __result) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int srand48_r (long int __seedval, struct drand48_data *__buffer) 15726: noexcept (true) __attribute__ ((__nonnull__ (2))); 15726: 15726: extern int seed48_r (unsigned short int __seed16v[3], 15726: struct drand48_data *__buffer) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: extern int lcong48_r (unsigned short int __param[7], 15726: struct drand48_data *__buffer) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern __uint32_t arc4random (void) 15726: noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: extern void arc4random_buf (void *__buf, size_t __size) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern __uint32_t arc4random_uniform (__uint32_t __upper_bound) 15726: noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern void *malloc (size_t __size) noexcept (true) __attribute__ ((__malloc__)) 15726: __attribute__ ((__alloc_size__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: extern void *calloc (size_t __nmemb, size_t __size) 15726: noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (1, 2))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern void *realloc (void *__ptr, size_t __size) 15726: noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__alloc_size__ (2))); 15726: 15726: 15726: extern void free (void *__ptr) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size) 15726: noexcept (true) __attribute__ ((__warn_unused_result__)) 15726: __attribute__ ((__alloc_size__ (2, 3))) 15726: __attribute__ ((__malloc__ (__builtin_free, 1))); 15726: 15726: 15726: extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size) 15726: noexcept (true) __attribute__ ((__malloc__ (reallocarray, 1))); 15726: 15726: 15726: 15726: # 1 "/usr/include/alloca.h" 1 3 4 15726: # 24 "/usr/include/alloca.h" 3 4 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 25 "/usr/include/alloca.h" 2 3 4 15726: 15726: extern "C" { 15726: 15726: 15726: 15726: 15726: 15726: extern void *alloca (size_t __size) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 707 "/usr/include/stdlib.h" 2 3 4 15726: 15726: 15726: 15726: 15726: 15726: extern void *valloc (size_t __size) noexcept (true) __attribute__ ((__malloc__)) 15726: __attribute__ ((__alloc_size__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern void *aligned_alloc (size_t __alignment, size_t __size) 15726: noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__alloc_align__ (1))) 15726: __attribute__ ((__alloc_size__ (2))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: extern void abort (void) noexcept (true) __attribute__ ((__noreturn__)); 15726: 15726: 15726: 15726: extern int atexit (void (*__func) (void)) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: extern "C++" int at_quick_exit (void (*__func) (void)) 15726: noexcept (true) __asm ("at_quick_exit") __attribute__ ((__nonnull__ (1))); 15726: # 749 "/usr/include/stdlib.h" 3 4 15726: extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: extern void exit (int __status) noexcept (true) __attribute__ ((__noreturn__)); 15726: 15726: 15726: 15726: 15726: 15726: extern void quick_exit (int __status) noexcept (true) __attribute__ ((__noreturn__)); 15726: 15726: 15726: 15726: 15726: 15726: extern void _Exit (int __status) noexcept (true) __attribute__ ((__noreturn__)); 15726: 15726: 15726: 15726: 15726: extern char *getenv (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern char *secure_getenv (const char *__name) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int putenv (char *__string) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: extern int setenv (const char *__name, const char *__value, int __replace) 15726: noexcept (true) __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: extern int unsetenv (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int clearenv (void) noexcept (true); 15726: # 814 "/usr/include/stdlib.h" 3 4 15726: extern char *mktemp (char *__template) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: # 830 "/usr/include/stdlib.h" 3 4 15726: extern int mkstemp (char *__template) __asm__ ("" "mkstemp64") 15726: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: # 852 "/usr/include/stdlib.h" 3 4 15726: extern int mkstemps (char *__template, int __suffixlen) __asm__ ("" "mkstemps64") 15726: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: extern int mkstemps64 (char *__template, int __suffixlen) 15726: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: # 870 "/usr/include/stdlib.h" 3 4 15726: extern char *mkdtemp (char *__template) noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: # 884 "/usr/include/stdlib.h" 3 4 15726: extern int mkostemp (char *__template, int __flags) __asm__ ("" "mkostemp64") 15726: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: # 905 "/usr/include/stdlib.h" 3 4 15726: extern int mkostemps (char *__template, int __suffixlen, int __flags) __asm__ ("" "mkostemps64") 15726: 15726: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: extern int mkostemps64 (char *__template, int __suffixlen, int __flags) 15726: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: # 923 "/usr/include/stdlib.h" 3 4 15726: extern int system (const char *__command) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: extern char *canonicalize_file_name (const char *__name) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__malloc__)) 15726: __attribute__ ((__malloc__ (__builtin_free, 1))) __attribute__ ((__warn_unused_result__)); 15726: # 940 "/usr/include/stdlib.h" 3 4 15726: extern char *realpath (const char *__restrict __name, 15726: char *__restrict __resolved) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef int (*__compar_fn_t) (const void *, const void *); 15726: 15726: 15726: typedef __compar_fn_t comparison_fn_t; 15726: 15726: 15726: 15726: typedef int (*__compar_d_fn_t) (const void *, const void *, void *); 15726: 15726: 15726: 15726: 15726: extern void *bsearch (const void *__key, const void *__base, 15726: size_t __nmemb, size_t __size, __compar_fn_t __compar) 15726: __attribute__ ((__nonnull__ (1, 2, 5))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdlib-bsearch.h" 1 3 4 15726: # 19 "/usr/include/arm-linux-gnueabihf/bits/stdlib-bsearch.h" 3 4 15726: extern __inline __attribute__ ((__gnu_inline__)) void * 15726: bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size, 15726: __compar_fn_t __compar) 15726: { 15726: size_t __l, __u, __idx; 15726: const void *__p; 15726: int __comparison; 15726: 15726: __l = 0; 15726: __u = __nmemb; 15726: while (__l < __u) 15726: { 15726: __idx = (__l + __u) / 2; 15726: __p = (const void *) (((const char *) __base) + (__idx * __size)); 15726: __comparison = (*__compar) (__key, __p); 15726: if (__comparison < 0) 15726: __u = __idx; 15726: else if (__comparison > 0) 15726: __l = __idx + 1; 15726: else 15726: { 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wcast-qual" 15726: 15726: return (void *) __p; 15726: 15726: #pragma GCC diagnostic pop 15726: 15726: } 15726: } 15726: 15726: return __null; 15726: } 15726: # 966 "/usr/include/stdlib.h" 2 3 4 15726: 15726: 15726: 15726: 15726: extern void qsort (void *__base, size_t __nmemb, size_t __size, 15726: __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4))); 15726: 15726: extern void qsort_r (void *__base, size_t __nmemb, size_t __size, 15726: __compar_d_fn_t __compar, void *__arg) 15726: __attribute__ ((__nonnull__ (1, 4))); 15726: 15726: 15726: 15726: 15726: extern int abs (int __x) noexcept (true) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__)); 15726: extern long int labs (long int __x) noexcept (true) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: __extension__ extern long long int llabs (long long int __x) 15726: noexcept (true) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern div_t div (int __numer, int __denom) 15726: noexcept (true) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__)); 15726: extern ldiv_t ldiv (long int __numer, long int __denom) 15726: noexcept (true) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: __extension__ extern lldiv_t lldiv (long long int __numer, 15726: long long int __denom) 15726: noexcept (true) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__)); 15726: # 1012 "/usr/include/stdlib.h" 3 4 15726: extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt, 15726: int *__restrict __sign) noexcept (true) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt, 15726: int *__restrict __sign) noexcept (true) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern char *gcvt (double __value, int __ndigit, char *__buf) 15726: noexcept (true) __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern char *qecvt (long double __value, int __ndigit, 15726: int *__restrict __decpt, int *__restrict __sign) 15726: noexcept (true) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__)); 15726: extern char *qfcvt (long double __value, int __ndigit, 15726: int *__restrict __decpt, int *__restrict __sign) 15726: noexcept (true) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__)); 15726: extern char *qgcvt (long double __value, int __ndigit, char *__buf) 15726: noexcept (true) __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt, 15726: int *__restrict __sign, char *__restrict __buf, 15726: size_t __len) noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5))); 15726: extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt, 15726: int *__restrict __sign, char *__restrict __buf, 15726: size_t __len) noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5))); 15726: 15726: extern int qecvt_r (long double __value, int __ndigit, 15726: int *__restrict __decpt, int *__restrict __sign, 15726: char *__restrict __buf, size_t __len) 15726: noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5))); 15726: extern int qfcvt_r (long double __value, int __ndigit, 15726: int *__restrict __decpt, int *__restrict __sign, 15726: char *__restrict __buf, size_t __len) 15726: noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5))); 15726: 15726: 15726: 15726: 15726: 15726: extern int mblen (const char *__s, size_t __n) noexcept (true); 15726: 15726: 15726: extern int mbtowc (wchar_t *__restrict __pwc, 15726: const char *__restrict __s, size_t __n) noexcept (true); 15726: 15726: 15726: extern int wctomb (char *__s, wchar_t __wchar) noexcept (true); 15726: 15726: 15726: 15726: extern size_t mbstowcs (wchar_t *__restrict __pwcs, 15726: const char *__restrict __s, size_t __n) noexcept (true) 15726: __attribute__ ((__access__ (__read_only__, 2))); 15726: 15726: extern size_t wcstombs (char *__restrict __s, 15726: const wchar_t *__restrict __pwcs, size_t __n) 15726: noexcept (true) 15726: __attribute__ ((__access__ (__write_only__, 1, 3))) 15726: __attribute__ ((__access__ (__read_only__, 2))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int rpmatch (const char *__response) noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: # 1099 "/usr/include/stdlib.h" 3 4 15726: extern int getsubopt (char **__restrict __optionp, 15726: char *const *__restrict __tokens, 15726: char **__restrict __valuep) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2, 3))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int posix_openpt (int __oflag) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int grantpt (int __fd) noexcept (true); 15726: 15726: 15726: 15726: extern int unlockpt (int __fd) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern char *ptsname (int __fd) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int ptsname_r (int __fd, char *__buf, size_t __buflen) 15726: noexcept (true) __attribute__ ((__nonnull__ (2))) __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: 15726: 15726: extern int getpt (void); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int getloadavg (double __loadavg[], int __nelem) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: # 1155 "/usr/include/stdlib.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdlib-float.h" 1 3 4 15726: # 24 "/usr/include/arm-linux-gnueabihf/bits/stdlib-float.h" 3 4 15726: extern __inline __attribute__ ((__gnu_inline__)) double 15726: __attribute__ ((__leaf__)) atof (const char *__nptr) noexcept (true) 15726: { 15726: return strtod (__nptr, (char **) __null); 15726: } 15726: # 1156 "/usr/include/stdlib.h" 2 3 4 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdlib.h" 1 3 4 15726: # 23 "/usr/include/arm-linux-gnueabihf/bits/stdlib.h" 3 4 15726: extern char *__realpath_chk (const char *__restrict __name, 15726: char *__restrict __resolved, 15726: size_t __resolvedlen) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: extern char *__realpath_alias (const char *__restrict __name, char *__restrict __resolved) noexcept (true) __asm__ ("" "realpath") 15726: 15726: __attribute__ ((__warn_unused_result__)); 15726: extern char *__realpath_chk_warn (const char *__restrict __name, char *__restrict __resolved, size_t __resolvedlen) noexcept (true) __asm__ ("" "__realpath_chk") 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) 15726: __attribute__((__warning__ ("second argument of realpath must be either NULL or at " "least PATH_MAX bytes long buffer"))) 15726: ; 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char * 15726: __attribute__ ((__leaf__)) realpath (const char *__restrict __name, char *__restrict __resolved) noexcept (true) 15726: { 15726: size_t sz = __builtin_object_size (__resolved, 2 > 1); 15726: 15726: if (sz == (size_t) -1) 15726: return __realpath_alias (__name, __resolved); 15726: 15726: 15726: 15726: 15726: 15726: return __realpath_chk (__name, __resolved, sz); 15726: } 15726: 15726: 15726: extern int __ptsname_r_chk (int __fd, char *__buf, size_t __buflen, 15726: size_t __nreal) noexcept (true) __attribute__ ((__nonnull__ (2))) 15726: __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: extern int __ptsname_r_alias (int __fd, char *__buf, size_t __buflen) noexcept (true) __asm__ ("" "ptsname_r") 15726: 15726: __attribute__ ((__nonnull__ (2))) __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: extern int __ptsname_r_chk_warn (int __fd, char *__buf, size_t __buflen, size_t __nreal) noexcept (true) __asm__ ("" "__ptsname_r_chk") 15726: 15726: 15726: __attribute__ ((__nonnull__ (2))) __attribute__((__warning__ ("ptsname_r called with buflen bigger than " "size of buf"))) 15726: ; 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: __attribute__ ((__leaf__)) ptsname_r (int __fd, char *__buf, size_t __buflen) noexcept (true) 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__buf, 2 > 1)) && (__builtin_object_size (__buf, 2 > 1)) == (unsigned int) -1) || (((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char)))))) ? __ptsname_r_alias (__fd, __buf, __buflen) : ((((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) ? __ptsname_r_chk_warn (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1)) : __ptsname_r_chk (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1)))) 15726: 15726: ; 15726: } 15726: 15726: 15726: extern int __wctomb_chk (char *__s, wchar_t __wchar, size_t __buflen) 15726: noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: extern int __wctomb_alias (char *__s, wchar_t __wchar) noexcept (true) __asm__ ("" "wctomb") 15726: __attribute__ ((__warn_unused_result__)); 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) int 15726: __attribute__ ((__leaf__)) wctomb (char *__s, wchar_t __wchar) noexcept (true) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: if (__builtin_object_size (__s, 2 > 1) != (size_t) -1 15726: && 16 > __builtin_object_size (__s, 2 > 1)) 15726: return __wctomb_chk (__s, __wchar, __builtin_object_size (__s, 2 > 1)); 15726: return __wctomb_alias (__s, __wchar); 15726: } 15726: 15726: 15726: extern size_t __mbstowcs_chk (wchar_t *__restrict __dst, 15726: const char *__restrict __src, 15726: size_t __len, size_t __dstlen) noexcept (true) 15726: __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__access__ (__read_only__, 2))); 15726: extern size_t __mbstowcs_nulldst (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len) noexcept (true) __asm__ ("" "mbstowcs") 15726: 15726: 15726: 15726: __attribute__ ((__access__ (__read_only__, 2))); 15726: extern size_t __mbstowcs_alias (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len) noexcept (true) __asm__ ("" "mbstowcs") 15726: 15726: 15726: 15726: __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__access__ (__read_only__, 2))); 15726: extern size_t __mbstowcs_chk_warn (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len, size_t __dstlen) noexcept (true) __asm__ ("" "__mbstowcs_chk") 15726: 15726: 15726: 15726: __attribute__((__warning__ ("mbstowcs called with dst buffer smaller than len " "* sizeof (wchar_t)"))) 15726: ; 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 15726: __attribute__ ((__leaf__)) mbstowcs (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len) noexcept (true) 15726: 15726: { 15726: if (__builtin_constant_p (__dst == __null) && __dst == __null) 15726: return __mbstowcs_nulldst (__dst, __src, __len); 15726: else 15726: return (((__builtin_constant_p (__builtin_object_size (__dst, 2 > 1)) && (__builtin_object_size (__dst, 2 > 1)) == (unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (wchar_t))))) && (((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (wchar_t)))))) ? __mbstowcs_alias (__dst, __src, __len) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))) && !(((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))) ? __mbstowcs_chk_warn (__dst, __src, __len, (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t))) : __mbstowcs_chk (__dst, __src, __len, (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t))))) 15726: ; 15726: } 15726: 15726: extern size_t __wcstombs_chk (char *__restrict __dst, 15726: const wchar_t *__restrict __src, 15726: size_t __len, size_t __dstlen) noexcept (true) 15726: __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__access__ (__read_only__, 2))); 15726: extern size_t __wcstombs_alias (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len) noexcept (true) __asm__ ("" "wcstombs") 15726: 15726: 15726: 15726: __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__access__ (__read_only__, 2))); 15726: extern size_t __wcstombs_chk_warn (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len, size_t __dstlen) noexcept (true) __asm__ ("" "__wcstombs_chk") 15726: 15726: 15726: 15726: __attribute__((__warning__ ("wcstombs called with dst buffer smaller than len"))); 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 15726: __attribute__ ((__leaf__)) wcstombs (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len) noexcept (true) 15726: 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__dst, 2 > 1)) && (__builtin_object_size (__dst, 2 > 1)) == (unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (char)))))) ? __wcstombs_alias (__dst, __src, __len) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (char)))) ? __wcstombs_chk_warn (__dst, __src, __len, __builtin_object_size (__dst, 2 > 1)) : __wcstombs_chk (__dst, __src, __len, __builtin_object_size (__dst, 2 > 1)))) 15726: 15726: ; 15726: } 15726: # 1160 "/usr/include/stdlib.h" 2 3 4 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/floatn.h" 1 3 4 15726: # 1163 "/usr/include/stdlib.h" 2 3 4 15726: 15726: 15726: 15726: 15726: } 15726: # 80 "/usr/include/c++/13/cstdlib" 2 3 15726: 15726: # 1 "/usr/include/c++/13/bits/std_abs.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/std_abs.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/std_abs.h" 3 15726: # 46 "/usr/include/c++/13/bits/std_abs.h" 3 15726: extern "C++" 15726: { 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: using ::abs; 15726: 15726: 15726: inline long 15726: abs(long __i) { return __builtin_labs(__i); } 15726: 15726: 15726: 15726: inline long long 15726: abs(long long __x) { return __builtin_llabs (__x); } 15726: # 70 "/usr/include/c++/13/bits/std_abs.h" 3 15726: inline constexpr double 15726: abs(double __x) 15726: { return __builtin_fabs(__x); } 15726: 15726: inline constexpr float 15726: abs(float __x) 15726: { return __builtin_fabsf(__x); } 15726: 15726: inline constexpr long double 15726: abs(long double __x) 15726: { return __builtin_fabsl(__x); } 15726: # 150 "/usr/include/c++/13/bits/std_abs.h" 3 15726: 15726: } 15726: } 15726: # 82 "/usr/include/c++/13/cstdlib" 2 3 15726: # 125 "/usr/include/c++/13/cstdlib" 3 15726: extern "C++" 15726: { 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: using ::div_t; 15726: using ::ldiv_t; 15726: 15726: using ::abort; 15726: 15726: using ::aligned_alloc; 15726: 15726: using ::atexit; 15726: 15726: 15726: using ::at_quick_exit; 15726: 15726: 15726: using ::atof; 15726: using ::atoi; 15726: using ::atol; 15726: using ::bsearch; 15726: using ::calloc; 15726: using ::div; 15726: using ::exit; 15726: using ::free; 15726: using ::getenv; 15726: using ::labs; 15726: using ::ldiv; 15726: using ::malloc; 15726: 15726: using ::mblen; 15726: using ::mbstowcs; 15726: using ::mbtowc; 15726: 15726: using ::qsort; 15726: 15726: 15726: using ::quick_exit; 15726: 15726: 15726: using ::rand; 15726: using ::realloc; 15726: using ::srand; 15726: using ::strtod; 15726: using ::strtol; 15726: using ::strtoul; 15726: using ::system; 15726: 15726: using ::wcstombs; 15726: using ::wctomb; 15726: 15726: 15726: 15726: inline ldiv_t 15726: div(long __i, long __j) noexcept { return ldiv(__i, __j); } 15726: 15726: 15726: 15726: 15726: } 15726: # 199 "/usr/include/c++/13/cstdlib" 3 15726: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: using ::lldiv_t; 15726: 15726: 15726: 15726: 15726: 15726: using ::_Exit; 15726: 15726: 15726: 15726: using ::llabs; 15726: 15726: inline lldiv_t 15726: div(long long __n, long long __d) 15726: { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; } 15726: 15726: using ::lldiv; 15726: # 231 "/usr/include/c++/13/cstdlib" 3 15726: using ::atoll; 15726: using ::strtoll; 15726: using ::strtoull; 15726: 15726: using ::strtof; 15726: using ::strtold; 15726: 15726: 15726: } 15726: 15726: namespace std 15726: { 15726: 15726: using ::__gnu_cxx::lldiv_t; 15726: 15726: using ::__gnu_cxx::_Exit; 15726: 15726: using ::__gnu_cxx::llabs; 15726: using ::__gnu_cxx::div; 15726: using ::__gnu_cxx::lldiv; 15726: 15726: using ::__gnu_cxx::atoll; 15726: using ::__gnu_cxx::strtof; 15726: using ::__gnu_cxx::strtoll; 15726: using ::__gnu_cxx::strtoull; 15726: using ::__gnu_cxx::strtold; 15726: } 15726: 15726: 15726: 15726: } 15726: # 72 "/usr/include/c++/13/bits/stl_algo.h" 2 3 15726: 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: template 15726: 15726: void 15726: __move_median_to_first(_Iterator __result,_Iterator __a, _Iterator __b, 15726: _Iterator __c, _Compare __comp) 15726: { 15726: if (__comp(__a, __b)) 15726: { 15726: if (__comp(__b, __c)) 15726: std::iter_swap(__result, __b); 15726: else if (__comp(__a, __c)) 15726: std::iter_swap(__result, __c); 15726: else 15726: std::iter_swap(__result, __a); 15726: } 15726: else if (__comp(__a, __c)) 15726: std::iter_swap(__result, __a); 15726: else if (__comp(__b, __c)) 15726: std::iter_swap(__result, __c); 15726: else 15726: std::iter_swap(__result, __b); 15726: } 15726: 15726: 15726: template 15726: 15726: inline _InputIterator 15726: __find_if_not(_InputIterator __first, _InputIterator __last, 15726: _Predicate __pred) 15726: { 15726: return std::__find_if(__first, __last, 15726: __gnu_cxx::__ops::__negate(__pred), 15726: std::__iterator_category(__first)); 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: 15726: _InputIterator 15726: __find_if_not_n(_InputIterator __first, _Distance& __len, _Predicate __pred) 15726: { 15726: for (; __len; --__len, (void) ++__first) 15726: if (!__pred(__first)) 15726: break; 15726: return __first; 15726: } 15726: # 144 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: _ForwardIterator1 15726: __search(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _ForwardIterator2 __last2, 15726: _BinaryPredicate __predicate) 15726: { 15726: 15726: if (__first1 == __last1 || __first2 == __last2) 15726: return __first1; 15726: 15726: 15726: _ForwardIterator2 __p1(__first2); 15726: if (++__p1 == __last2) 15726: return std::__find_if(__first1, __last1, 15726: __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2)); 15726: 15726: 15726: _ForwardIterator1 __current = __first1; 15726: 15726: for (;;) 15726: { 15726: __first1 = 15726: std::__find_if(__first1, __last1, 15726: __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2)); 15726: 15726: if (__first1 == __last1) 15726: return __last1; 15726: 15726: _ForwardIterator2 __p = __p1; 15726: __current = __first1; 15726: if (++__current == __last1) 15726: return __last1; 15726: 15726: while (__predicate(__current, __p)) 15726: { 15726: if (++__p == __last2) 15726: return __first1; 15726: if (++__current == __last1) 15726: return __last1; 15726: } 15726: ++__first1; 15726: } 15726: return __first1; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: _ForwardIterator 15726: __search_n_aux(_ForwardIterator __first, _ForwardIterator __last, 15726: _Integer __count, _UnaryPredicate __unary_pred, 15726: std::forward_iterator_tag) 15726: { 15726: __first = std::__find_if(__first, __last, __unary_pred); 15726: while (__first != __last) 15726: { 15726: typename iterator_traits<_ForwardIterator>::difference_type 15726: __n = __count; 15726: _ForwardIterator __i = __first; 15726: ++__i; 15726: while (__i != __last && __n != 1 && __unary_pred(__i)) 15726: { 15726: ++__i; 15726: --__n; 15726: } 15726: if (__n == 1) 15726: return __first; 15726: if (__i == __last) 15726: return __last; 15726: __first = std::__find_if(++__i, __last, __unary_pred); 15726: } 15726: return __last; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: _RandomAccessIter 15726: __search_n_aux(_RandomAccessIter __first, _RandomAccessIter __last, 15726: _Integer __count, _UnaryPredicate __unary_pred, 15726: std::random_access_iterator_tag) 15726: { 15726: typedef typename std::iterator_traits<_RandomAccessIter>::difference_type 15726: _DistanceType; 15726: 15726: _DistanceType __tailSize = __last - __first; 15726: _DistanceType __remainder = __count; 15726: 15726: while (__remainder <= __tailSize) 15726: { 15726: __first += __remainder; 15726: __tailSize -= __remainder; 15726: 15726: 15726: _RandomAccessIter __backTrack = __first; 15726: while (__unary_pred(--__backTrack)) 15726: { 15726: if (--__remainder == 0) 15726: return (__first - __count); 15726: } 15726: __remainder = __count + 1 - (__first - __backTrack); 15726: } 15726: return __last; 15726: } 15726: 15726: template 15726: 15726: _ForwardIterator 15726: __search_n(_ForwardIterator __first, _ForwardIterator __last, 15726: _Integer __count, 15726: _UnaryPredicate __unary_pred) 15726: { 15726: if (__count <= 0) 15726: return __first; 15726: 15726: if (__count == 1) 15726: return std::__find_if(__first, __last, __unary_pred); 15726: 15726: return std::__search_n_aux(__first, __last, __count, __unary_pred, 15726: std::__iterator_category(__first)); 15726: } 15726: 15726: 15726: template 15726: 15726: _ForwardIterator1 15726: __find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _ForwardIterator2 __last2, 15726: forward_iterator_tag, forward_iterator_tag, 15726: _BinaryPredicate __comp) 15726: { 15726: if (__first2 == __last2) 15726: return __last1; 15726: 15726: _ForwardIterator1 __result = __last1; 15726: while (1) 15726: { 15726: _ForwardIterator1 __new_result 15726: = std::__search(__first1, __last1, __first2, __last2, __comp); 15726: if (__new_result == __last1) 15726: return __result; 15726: else 15726: { 15726: __result = __new_result; 15726: __first1 = __new_result; 15726: ++__first1; 15726: } 15726: } 15726: } 15726: 15726: 15726: template 15726: 15726: _BidirectionalIterator1 15726: __find_end(_BidirectionalIterator1 __first1, 15726: _BidirectionalIterator1 __last1, 15726: _BidirectionalIterator2 __first2, 15726: _BidirectionalIterator2 __last2, 15726: bidirectional_iterator_tag, bidirectional_iterator_tag, 15726: _BinaryPredicate __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef reverse_iterator<_BidirectionalIterator1> _RevIterator1; 15726: typedef reverse_iterator<_BidirectionalIterator2> _RevIterator2; 15726: 15726: _RevIterator1 __rlast1(__first1); 15726: _RevIterator2 __rlast2(__first2); 15726: _RevIterator1 __rresult = std::__search(_RevIterator1(__last1), __rlast1, 15726: _RevIterator2(__last2), __rlast2, 15726: __comp); 15726: 15726: if (__rresult == __rlast1) 15726: return __last1; 15726: else 15726: { 15726: _BidirectionalIterator1 __result = __rresult.base(); 15726: std::advance(__result, -std::distance(__first2, __last2)); 15726: return __result; 15726: } 15726: } 15726: # 370 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator1 15726: find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _ForwardIterator2 __last2) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__find_end(__first1, __last1, __first2, __last2, 15726: std::__iterator_category(__first1), 15726: std::__iterator_category(__first2), 15726: __gnu_cxx::__ops::__iter_equal_to_iter()); 15726: } 15726: # 419 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator1 15726: find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _ForwardIterator2 __last2, 15726: _BinaryPredicate __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__find_end(__first1, __last1, __first2, __last2, 15726: std::__iterator_category(__first1), 15726: std::__iterator_category(__first2), 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: # 455 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline bool 15726: all_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) 15726: { return __last == std::find_if_not(__first, __last, __pred); } 15726: # 473 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline bool 15726: none_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) 15726: { return __last == std::find_if(__first, __last, __pred); } 15726: # 492 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline bool 15726: any_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) 15726: { return !std::none_of(__first, __last, __pred); } 15726: # 508 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _InputIterator 15726: find_if_not(_InputIterator __first, _InputIterator __last, 15726: _Predicate __pred) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: return std::__find_if_not(__first, __last, 15726: __gnu_cxx::__ops::__pred_iter(__pred)); 15726: } 15726: # 533 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline bool 15726: is_partitioned(_InputIterator __first, _InputIterator __last, 15726: _Predicate __pred) 15726: { 15726: __first = std::find_if_not(__first, __last, __pred); 15726: if (__first == __last) 15726: return true; 15726: ++__first; 15726: return std::none_of(__first, __last, __pred); 15726: } 15726: # 555 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: _ForwardIterator 15726: partition_point(_ForwardIterator __first, _ForwardIterator __last, 15726: _Predicate __pred) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: typedef typename iterator_traits<_ForwardIterator>::difference_type 15726: _DistanceType; 15726: 15726: _DistanceType __len = std::distance(__first, __last); 15726: 15726: while (__len > 0) 15726: { 15726: _DistanceType __half = __len >> 1; 15726: _ForwardIterator __middle = __first; 15726: std::advance(__middle, __half); 15726: if (__pred(*__middle)) 15726: { 15726: __first = __middle; 15726: ++__first; 15726: __len = __len - __half - 1; 15726: } 15726: else 15726: __len = __half; 15726: } 15726: return __first; 15726: } 15726: 15726: 15726: template 15726: 15726: _OutputIterator 15726: __remove_copy_if(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, _Predicate __pred) 15726: { 15726: for (; __first != __last; ++__first) 15726: if (!__pred(__first)) 15726: { 15726: *__result = *__first; 15726: ++__result; 15726: } 15726: return __result; 15726: } 15726: # 622 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _OutputIterator 15726: remove_copy(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, const _Tp& __value) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__remove_copy_if(__first, __last, __result, 15726: __gnu_cxx::__ops::__iter_equals_val(__value)); 15726: } 15726: # 655 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _OutputIterator 15726: remove_copy_if(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, _Predicate __pred) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__remove_copy_if(__first, __last, __result, 15726: __gnu_cxx::__ops::__pred_iter(__pred)); 15726: } 15726: # 690 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: _OutputIterator 15726: copy_if(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, _Predicate __pred) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: for (; __first != __last; ++__first) 15726: if (__pred(*__first)) 15726: { 15726: *__result = *__first; 15726: ++__result; 15726: } 15726: return __result; 15726: } 15726: 15726: template 15726: 15726: _OutputIterator 15726: __copy_n(_InputIterator __first, _Size __n, 15726: _OutputIterator __result, input_iterator_tag) 15726: { 15726: return std::__niter_wrap(__result, 15726: __copy_n_a(__first, __n, 15726: std::__niter_base(__result), true)); 15726: } 15726: 15726: template 15726: 15726: inline _OutputIterator 15726: __copy_n(_RandomAccessIterator __first, _Size __n, 15726: _OutputIterator __result, random_access_iterator_tag) 15726: { return std::copy(__first, __first + __n, __result); } 15726: # 746 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _OutputIterator 15726: copy_n(_InputIterator __first, _Size __n, _OutputIterator __result) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: const auto __n2 = std::__size_to_integer(__n); 15726: if (__n2 <= 0) 15726: return __result; 15726: 15726: ; 15726: ; 15726: 15726: return std::__copy_n(__first, __n2, __result, 15726: std::__iterator_category(__first)); 15726: } 15726: # 782 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: pair<_OutputIterator1, _OutputIterator2> 15726: partition_copy(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator1 __out_true, _OutputIterator2 __out_false, 15726: _Predicate __pred) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: for (; __first != __last; ++__first) 15726: if (__pred(*__first)) 15726: { 15726: *__out_true = *__first; 15726: ++__out_true; 15726: } 15726: else 15726: { 15726: *__out_false = *__first; 15726: ++__out_false; 15726: } 15726: 15726: return pair<_OutputIterator1, _OutputIterator2>(__out_true, __out_false); 15726: } 15726: # 833 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator 15726: remove(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __value) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__remove_if(__first, __last, 15726: __gnu_cxx::__ops::__iter_equals_val(__value)); 15726: } 15726: # 867 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator 15726: remove_if(_ForwardIterator __first, _ForwardIterator __last, 15726: _Predicate __pred) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__remove_if(__first, __last, 15726: __gnu_cxx::__ops::__pred_iter(__pred)); 15726: } 15726: 15726: template 15726: 15726: _ForwardIterator 15726: __adjacent_find(_ForwardIterator __first, _ForwardIterator __last, 15726: _BinaryPredicate __binary_pred) 15726: { 15726: if (__first == __last) 15726: return __last; 15726: _ForwardIterator __next = __first; 15726: while (++__next != __last) 15726: { 15726: if (__binary_pred(__first, __next)) 15726: return __first; 15726: __first = __next; 15726: } 15726: return __last; 15726: } 15726: 15726: template 15726: 15726: _ForwardIterator 15726: __unique(_ForwardIterator __first, _ForwardIterator __last, 15726: _BinaryPredicate __binary_pred) 15726: { 15726: 15726: __first = std::__adjacent_find(__first, __last, __binary_pred); 15726: if (__first == __last) 15726: return __last; 15726: 15726: 15726: _ForwardIterator __dest = __first; 15726: ++__first; 15726: while (++__first != __last) 15726: if (!__binary_pred(__dest, __first)) 15726: *++__dest = std::move(*__first); 15726: return ++__dest; 15726: } 15726: # 936 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator 15726: unique(_ForwardIterator __first, _ForwardIterator __last) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__unique(__first, __last, 15726: __gnu_cxx::__ops::__iter_equal_to_iter()); 15726: } 15726: # 967 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator 15726: unique(_ForwardIterator __first, _ForwardIterator __last, 15726: _BinaryPredicate __binary_pred) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__unique(__first, __last, 15726: __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: _OutputIterator 15726: __unique_copy(_ForwardIterator __first, _ForwardIterator __last, 15726: _OutputIterator __result, _BinaryPredicate __binary_pred, 15726: forward_iterator_tag, output_iterator_tag) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: _ForwardIterator __next = __first; 15726: *__result = *__first; 15726: while (++__next != __last) 15726: if (!__binary_pred(__first, __next)) 15726: { 15726: __first = __next; 15726: *++__result = *__first; 15726: } 15726: return ++__result; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: _OutputIterator 15726: __unique_copy(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, _BinaryPredicate __binary_pred, 15726: input_iterator_tag, output_iterator_tag) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: typename iterator_traits<_InputIterator>::value_type __value = *__first; 15726: __decltype(__gnu_cxx::__ops::__iter_comp_val(__binary_pred)) 15726: __rebound_pred 15726: = __gnu_cxx::__ops::__iter_comp_val(__binary_pred); 15726: *__result = __value; 15726: while (++__first != __last) 15726: if (!__rebound_pred(__first, __value)) 15726: { 15726: __value = *__first; 15726: *++__result = __value; 15726: } 15726: return ++__result; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: _ForwardIterator 15726: __unique_copy(_InputIterator __first, _InputIterator __last, 15726: _ForwardIterator __result, _BinaryPredicate __binary_pred, 15726: input_iterator_tag, forward_iterator_tag) 15726: { 15726: 15726: 15726: 15726: 15726: *__result = *__first; 15726: while (++__first != __last) 15726: if (!__binary_pred(__result, __first)) 15726: *++__result = *__first; 15726: return ++__result; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: void 15726: __reverse(_BidirectionalIterator __first, _BidirectionalIterator __last, 15726: bidirectional_iterator_tag) 15726: { 15726: while (true) 15726: if (__first == __last || __first == --__last) 15726: return; 15726: else 15726: { 15726: std::iter_swap(__first, __last); 15726: ++__first; 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: void 15726: __reverse(_RandomAccessIterator __first, _RandomAccessIterator __last, 15726: random_access_iterator_tag) 15726: { 15726: if (__first == __last) 15726: return; 15726: --__last; 15726: while (__first < __last) 15726: { 15726: std::iter_swap(__first, __last); 15726: ++__first; 15726: --__last; 15726: } 15726: } 15726: # 1128 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline void 15726: reverse(_BidirectionalIterator __first, _BidirectionalIterator __last) 15726: { 15726: 15726: 15726: 15726: ; 15726: std::__reverse(__first, __last, std::__iterator_category(__first)); 15726: } 15726: # 1156 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: _OutputIterator 15726: reverse_copy(_BidirectionalIterator __first, _BidirectionalIterator __last, 15726: _OutputIterator __result) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: while (__first != __last) 15726: { 15726: --__last; 15726: *__result = *__last; 15726: ++__result; 15726: } 15726: return __result; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: _EuclideanRingElement 15726: __gcd(_EuclideanRingElement __m, _EuclideanRingElement __n) 15726: { 15726: while (__n != 0) 15726: { 15726: _EuclideanRingElement __t = __m % __n; 15726: __m = __n; 15726: __n = __t; 15726: } 15726: return __m; 15726: } 15726: 15726: inline namespace _V2 { 15726: 15726: 15726: template 15726: 15726: _ForwardIterator 15726: __rotate(_ForwardIterator __first, 15726: _ForwardIterator __middle, 15726: _ForwardIterator __last, 15726: forward_iterator_tag) 15726: { 15726: if (__first == __middle) 15726: return __last; 15726: else if (__last == __middle) 15726: return __first; 15726: 15726: _ForwardIterator __first2 = __middle; 15726: do 15726: { 15726: std::iter_swap(__first, __first2); 15726: ++__first; 15726: ++__first2; 15726: if (__first == __middle) 15726: __middle = __first2; 15726: } 15726: while (__first2 != __last); 15726: 15726: _ForwardIterator __ret = __first; 15726: 15726: __first2 = __middle; 15726: 15726: while (__first2 != __last) 15726: { 15726: std::iter_swap(__first, __first2); 15726: ++__first; 15726: ++__first2; 15726: if (__first == __middle) 15726: __middle = __first2; 15726: else if (__first2 == __last) 15726: __first2 = __middle; 15726: } 15726: return __ret; 15726: } 15726: 15726: 15726: template 15726: 15726: _BidirectionalIterator 15726: __rotate(_BidirectionalIterator __first, 15726: _BidirectionalIterator __middle, 15726: _BidirectionalIterator __last, 15726: bidirectional_iterator_tag) 15726: { 15726: 15726: 15726: 15726: 15726: if (__first == __middle) 15726: return __last; 15726: else if (__last == __middle) 15726: return __first; 15726: 15726: std::__reverse(__first, __middle, bidirectional_iterator_tag()); 15726: std::__reverse(__middle, __last, bidirectional_iterator_tag()); 15726: 15726: while (__first != __middle && __middle != __last) 15726: { 15726: std::iter_swap(__first, --__last); 15726: ++__first; 15726: } 15726: 15726: if (__first == __middle) 15726: { 15726: std::__reverse(__middle, __last, bidirectional_iterator_tag()); 15726: return __last; 15726: } 15726: else 15726: { 15726: std::__reverse(__first, __middle, bidirectional_iterator_tag()); 15726: return __first; 15726: } 15726: } 15726: 15726: 15726: template 15726: 15726: _RandomAccessIterator 15726: __rotate(_RandomAccessIterator __first, 15726: _RandomAccessIterator __middle, 15726: _RandomAccessIterator __last, 15726: random_access_iterator_tag) 15726: { 15726: 15726: 15726: 15726: 15726: if (__first == __middle) 15726: return __last; 15726: else if (__last == __middle) 15726: return __first; 15726: 15726: typedef typename iterator_traits<_RandomAccessIterator>::difference_type 15726: _Distance; 15726: typedef typename iterator_traits<_RandomAccessIterator>::value_type 15726: _ValueType; 15726: 15726: _Distance __n = __last - __first; 15726: _Distance __k = __middle - __first; 15726: 15726: if (__k == __n - __k) 15726: { 15726: std::swap_ranges(__first, __middle, __middle); 15726: return __middle; 15726: } 15726: 15726: _RandomAccessIterator __p = __first; 15726: _RandomAccessIterator __ret = __first + (__last - __middle); 15726: 15726: for (;;) 15726: { 15726: if (__k < __n - __k) 15726: { 15726: if (__is_pod(_ValueType) && __k == 1) 15726: { 15726: _ValueType __t = std::move(*__p); 15726: std::move(__p + 1, __p + __n, __p); 15726: *(__p + __n - 1) = std::move(__t); 15726: return __ret; 15726: } 15726: _RandomAccessIterator __q = __p + __k; 15726: for (_Distance __i = 0; __i < __n - __k; ++ __i) 15726: { 15726: std::iter_swap(__p, __q); 15726: ++__p; 15726: ++__q; 15726: } 15726: __n %= __k; 15726: if (__n == 0) 15726: return __ret; 15726: std::swap(__n, __k); 15726: __k = __n - __k; 15726: } 15726: else 15726: { 15726: __k = __n - __k; 15726: if (__is_pod(_ValueType) && __k == 1) 15726: { 15726: _ValueType __t = std::move(*(__p + __n - 1)); 15726: std::move_backward(__p, __p + __n - 1, __p + __n); 15726: *__p = std::move(__t); 15726: return __ret; 15726: } 15726: _RandomAccessIterator __q = __p + __n; 15726: __p = __q - __k; 15726: for (_Distance __i = 0; __i < __n - __k; ++ __i) 15726: { 15726: --__p; 15726: --__q; 15726: std::iter_swap(__p, __q); 15726: } 15726: __n %= __k; 15726: if (__n == 0) 15726: return __ret; 15726: std::swap(__n, __k); 15726: } 15726: } 15726: } 15726: # 1387 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator 15726: rotate(_ForwardIterator __first, _ForwardIterator __middle, 15726: _ForwardIterator __last) 15726: { 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__rotate(__first, __middle, __last, 15726: std::__iterator_category(__first)); 15726: } 15726: 15726: } 15726: # 1425 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _OutputIterator 15726: rotate_copy(_ForwardIterator __first, _ForwardIterator __middle, 15726: _ForwardIterator __last, _OutputIterator __result) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::copy(__first, __middle, 15726: std::copy(__middle, __last, __result)); 15726: } 15726: 15726: 15726: template 15726: 15726: _ForwardIterator 15726: __partition(_ForwardIterator __first, _ForwardIterator __last, 15726: _Predicate __pred, forward_iterator_tag) 15726: { 15726: if (__first == __last) 15726: return __first; 15726: 15726: while (__pred(*__first)) 15726: if (++__first == __last) 15726: return __first; 15726: 15726: _ForwardIterator __next = __first; 15726: 15726: while (++__next != __last) 15726: if (__pred(*__next)) 15726: { 15726: std::iter_swap(__first, __next); 15726: ++__first; 15726: } 15726: 15726: return __first; 15726: } 15726: 15726: 15726: template 15726: 15726: _BidirectionalIterator 15726: __partition(_BidirectionalIterator __first, _BidirectionalIterator __last, 15726: _Predicate __pred, bidirectional_iterator_tag) 15726: { 15726: while (true) 15726: { 15726: while (true) 15726: if (__first == __last) 15726: return __first; 15726: else if (__pred(*__first)) 15726: ++__first; 15726: else 15726: break; 15726: --__last; 15726: while (true) 15726: if (__first == __last) 15726: return __first; 15726: else if (!bool(__pred(*__last))) 15726: --__last; 15726: else 15726: break; 15726: std::iter_swap(__first, __last); 15726: ++__first; 15726: } 15726: } 15726: # 1506 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: _ForwardIterator 15726: __stable_partition_adaptive(_ForwardIterator __first, 15726: _ForwardIterator __last, 15726: _Predicate __pred, _Distance __len, 15726: _Pointer __buffer, 15726: _Distance __buffer_size) 15726: { 15726: if (__len == 1) 15726: return __first; 15726: 15726: if (__len <= __buffer_size) 15726: { 15726: _ForwardIterator __result1 = __first; 15726: _Pointer __result2 = __buffer; 15726: 15726: 15726: 15726: 15726: *__result2 = std::move(*__first); 15726: ++__result2; 15726: ++__first; 15726: for (; __first != __last; ++__first) 15726: if (__pred(__first)) 15726: { 15726: *__result1 = std::move(*__first); 15726: ++__result1; 15726: } 15726: else 15726: { 15726: *__result2 = std::move(*__first); 15726: ++__result2; 15726: } 15726: 15726: std::move(__buffer, __result2, __result1); 15726: return __result1; 15726: } 15726: 15726: _ForwardIterator __middle = __first; 15726: std::advance(__middle, __len / 2); 15726: _ForwardIterator __left_split = 15726: std::__stable_partition_adaptive(__first, __middle, __pred, 15726: __len / 2, __buffer, 15726: __buffer_size); 15726: 15726: 15726: 15726: _Distance __right_len = __len - __len / 2; 15726: _ForwardIterator __right_split = 15726: std::__find_if_not_n(__middle, __right_len, __pred); 15726: 15726: if (__right_len) 15726: __right_split = 15726: std::__stable_partition_adaptive(__right_split, __last, __pred, 15726: __right_len, 15726: __buffer, __buffer_size); 15726: 15726: return std::rotate(__left_split, __middle, __right_split); 15726: } 15726: 15726: template 15726: _ForwardIterator 15726: __stable_partition(_ForwardIterator __first, _ForwardIterator __last, 15726: _Predicate __pred) 15726: { 15726: __first = std::__find_if_not(__first, __last, __pred); 15726: 15726: if (__first == __last) 15726: return __first; 15726: 15726: typedef typename iterator_traits<_ForwardIterator>::value_type 15726: _ValueType; 15726: typedef typename iterator_traits<_ForwardIterator>::difference_type 15726: _DistanceType; 15726: 15726: _Temporary_buffer<_ForwardIterator, _ValueType> 15726: __buf(__first, std::distance(__first, __last)); 15726: return 15726: std::__stable_partition_adaptive(__first, __last, __pred, 15726: _DistanceType(__buf.requested_size()), 15726: __buf.begin(), 15726: _DistanceType(__buf.size())); 15726: } 15726: # 1608 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: inline _ForwardIterator 15726: stable_partition(_ForwardIterator __first, _ForwardIterator __last, 15726: _Predicate __pred) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__stable_partition(__first, __last, 15726: __gnu_cxx::__ops::__pred_iter(__pred)); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: void 15726: __heap_select(_RandomAccessIterator __first, 15726: _RandomAccessIterator __middle, 15726: _RandomAccessIterator __last, _Compare __comp) 15726: { 15726: std::__make_heap(__first, __middle, __comp); 15726: for (_RandomAccessIterator __i = __middle; __i < __last; ++__i) 15726: if (__comp(__i, __first)) 15726: std::__pop_heap(__first, __middle, __i, __comp); 15726: } 15726: 15726: 15726: 15726: template 15726: 15726: _RandomAccessIterator 15726: __partial_sort_copy(_InputIterator __first, _InputIterator __last, 15726: _RandomAccessIterator __result_first, 15726: _RandomAccessIterator __result_last, 15726: _Compare __comp) 15726: { 15726: typedef typename iterator_traits<_InputIterator>::value_type 15726: _InputValueType; 15726: typedef iterator_traits<_RandomAccessIterator> _RItTraits; 15726: typedef typename _RItTraits::difference_type _DistanceType; 15726: 15726: if (__result_first == __result_last) 15726: return __result_last; 15726: _RandomAccessIterator __result_real_last = __result_first; 15726: while (__first != __last && __result_real_last != __result_last) 15726: { 15726: *__result_real_last = *__first; 15726: ++__result_real_last; 15726: ++__first; 15726: } 15726: 15726: std::__make_heap(__result_first, __result_real_last, __comp); 15726: while (__first != __last) 15726: { 15726: if (__comp(__first, __result_first)) 15726: std::__adjust_heap(__result_first, _DistanceType(0), 15726: _DistanceType(__result_real_last 15726: - __result_first), 15726: _InputValueType(*__first), __comp); 15726: ++__first; 15726: } 15726: std::__sort_heap(__result_first, __result_real_last, __comp); 15726: return __result_real_last; 15726: } 15726: # 1701 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _RandomAccessIterator 15726: partial_sort_copy(_InputIterator __first, _InputIterator __last, 15726: _RandomAccessIterator __result_first, 15726: _RandomAccessIterator __result_last) 15726: { 15726: # 1716 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: 15726: return std::__partial_sort_copy(__first, __last, 15726: __result_first, __result_last, 15726: __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: # 1751 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _RandomAccessIterator 15726: partial_sort_copy(_InputIterator __first, _InputIterator __last, 15726: _RandomAccessIterator __result_first, 15726: _RandomAccessIterator __result_last, 15726: _Compare __comp) 15726: { 15726: # 1768 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: 15726: return std::__partial_sort_copy(__first, __last, 15726: __result_first, __result_last, 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: 15726: void 15726: __unguarded_linear_insert(_RandomAccessIterator __last, 15726: _Compare __comp) 15726: { 15726: typename iterator_traits<_RandomAccessIterator>::value_type 15726: __val = std::move(*__last); 15726: _RandomAccessIterator __next = __last; 15726: --__next; 15726: while (__comp(__val, __next)) 15726: { 15726: *__last = std::move(*__next); 15726: __last = __next; 15726: --__next; 15726: } 15726: *__last = std::move(__val); 15726: } 15726: 15726: 15726: template 15726: 15726: void 15726: __insertion_sort(_RandomAccessIterator __first, 15726: _RandomAccessIterator __last, _Compare __comp) 15726: { 15726: if (__first == __last) return; 15726: 15726: for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) 15726: { 15726: if (__comp(__i, __first)) 15726: { 15726: typename iterator_traits<_RandomAccessIterator>::value_type 15726: __val = std::move(*__i); 15726: std::move_backward(__first, __i, __i + 1); 15726: *__first = std::move(__val); 15726: } 15726: else 15726: std::__unguarded_linear_insert(__i, 15726: __gnu_cxx::__ops::__val_comp_iter(__comp)); 15726: } 15726: } 15726: 15726: 15726: template 15726: 15726: inline void 15726: __unguarded_insertion_sort(_RandomAccessIterator __first, 15726: _RandomAccessIterator __last, _Compare __comp) 15726: { 15726: for (_RandomAccessIterator __i = __first; __i != __last; ++__i) 15726: std::__unguarded_linear_insert(__i, 15726: __gnu_cxx::__ops::__val_comp_iter(__comp)); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: enum { _S_threshold = 16 }; 15726: 15726: 15726: template 15726: 15726: void 15726: __final_insertion_sort(_RandomAccessIterator __first, 15726: _RandomAccessIterator __last, _Compare __comp) 15726: { 15726: if (__last - __first > int(_S_threshold)) 15726: { 15726: std::__insertion_sort(__first, __first + int(_S_threshold), __comp); 15726: std::__unguarded_insertion_sort(__first + int(_S_threshold), __last, 15726: __comp); 15726: } 15726: else 15726: std::__insertion_sort(__first, __last, __comp); 15726: } 15726: 15726: 15726: template 15726: 15726: _RandomAccessIterator 15726: __unguarded_partition(_RandomAccessIterator __first, 15726: _RandomAccessIterator __last, 15726: _RandomAccessIterator __pivot, _Compare __comp) 15726: { 15726: while (true) 15726: { 15726: while (__comp(__first, __pivot)) 15726: ++__first; 15726: --__last; 15726: while (__comp(__pivot, __last)) 15726: --__last; 15726: if (!(__first < __last)) 15726: return __first; 15726: std::iter_swap(__first, __last); 15726: ++__first; 15726: } 15726: } 15726: 15726: 15726: template 15726: 15726: inline _RandomAccessIterator 15726: __unguarded_partition_pivot(_RandomAccessIterator __first, 15726: _RandomAccessIterator __last, _Compare __comp) 15726: { 15726: _RandomAccessIterator __mid = __first + (__last - __first) / 2; 15726: std::__move_median_to_first(__first, __first + 1, __mid, __last - 1, 15726: __comp); 15726: return std::__unguarded_partition(__first + 1, __last, __first, __comp); 15726: } 15726: 15726: template 15726: 15726: inline void 15726: __partial_sort(_RandomAccessIterator __first, 15726: _RandomAccessIterator __middle, 15726: _RandomAccessIterator __last, 15726: _Compare __comp) 15726: { 15726: std::__heap_select(__first, __middle, __last, __comp); 15726: std::__sort_heap(__first, __middle, __comp); 15726: } 15726: 15726: 15726: template 15726: 15726: void 15726: __introsort_loop(_RandomAccessIterator __first, 15726: _RandomAccessIterator __last, 15726: _Size __depth_limit, _Compare __comp) 15726: { 15726: while (__last - __first > int(_S_threshold)) 15726: { 15726: if (__depth_limit == 0) 15726: { 15726: std::__partial_sort(__first, __last, __last, __comp); 15726: return; 15726: } 15726: --__depth_limit; 15726: _RandomAccessIterator __cut = 15726: std::__unguarded_partition_pivot(__first, __last, __comp); 15726: std::__introsort_loop(__cut, __last, __depth_limit, __comp); 15726: __last = __cut; 15726: } 15726: } 15726: 15726: 15726: 15726: template 15726: 15726: inline void 15726: __sort(_RandomAccessIterator __first, _RandomAccessIterator __last, 15726: _Compare __comp) 15726: { 15726: if (__first != __last) 15726: { 15726: std::__introsort_loop(__first, __last, 15726: std::__lg(__last - __first) * 2, 15726: __comp); 15726: std::__final_insertion_sort(__first, __last, __comp); 15726: } 15726: } 15726: 15726: template 15726: 15726: void 15726: __introselect(_RandomAccessIterator __first, _RandomAccessIterator __nth, 15726: _RandomAccessIterator __last, _Size __depth_limit, 15726: _Compare __comp) 15726: { 15726: while (__last - __first > 3) 15726: { 15726: if (__depth_limit == 0) 15726: { 15726: std::__heap_select(__first, __nth + 1, __last, __comp); 15726: 15726: std::iter_swap(__first, __nth); 15726: return; 15726: } 15726: --__depth_limit; 15726: _RandomAccessIterator __cut = 15726: std::__unguarded_partition_pivot(__first, __last, __comp); 15726: if (__cut <= __nth) 15726: __first = __cut; 15726: else 15726: __last = __cut; 15726: } 15726: std::__insertion_sort(__first, __last, __comp); 15726: } 15726: # 2002 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator 15726: lower_bound(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __val, _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__lower_bound(__first, __last, __val, 15726: __gnu_cxx::__ops::__iter_comp_val(__comp)); 15726: } 15726: 15726: template 15726: 15726: _ForwardIterator 15726: __upper_bound(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __val, _Compare __comp) 15726: { 15726: typedef typename iterator_traits<_ForwardIterator>::difference_type 15726: _DistanceType; 15726: 15726: _DistanceType __len = std::distance(__first, __last); 15726: 15726: while (__len > 0) 15726: { 15726: _DistanceType __half = __len >> 1; 15726: _ForwardIterator __middle = __first; 15726: std::advance(__middle, __half); 15726: if (__comp(__val, __middle)) 15726: __len = __half; 15726: else 15726: { 15726: __first = __middle; 15726: ++__first; 15726: __len = __len - __half - 1; 15726: } 15726: } 15726: return __first; 15726: } 15726: # 2058 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator 15726: upper_bound(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __val) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__upper_bound(__first, __last, __val, 15726: __gnu_cxx::__ops::__val_less_iter()); 15726: } 15726: # 2089 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator 15726: upper_bound(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __val, _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__upper_bound(__first, __last, __val, 15726: __gnu_cxx::__ops::__val_comp_iter(__comp)); 15726: } 15726: 15726: template 15726: 15726: pair<_ForwardIterator, _ForwardIterator> 15726: __equal_range(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __val, 15726: _CompareItTp __comp_it_val, _CompareTpIt __comp_val_it) 15726: { 15726: typedef typename iterator_traits<_ForwardIterator>::difference_type 15726: _DistanceType; 15726: 15726: _DistanceType __len = std::distance(__first, __last); 15726: 15726: while (__len > 0) 15726: { 15726: _DistanceType __half = __len >> 1; 15726: _ForwardIterator __middle = __first; 15726: std::advance(__middle, __half); 15726: if (__comp_it_val(__middle, __val)) 15726: { 15726: __first = __middle; 15726: ++__first; 15726: __len = __len - __half - 1; 15726: } 15726: else if (__comp_val_it(__val, __middle)) 15726: __len = __half; 15726: else 15726: { 15726: _ForwardIterator __left 15726: = std::__lower_bound(__first, __middle, __val, __comp_it_val); 15726: std::advance(__first, __len); 15726: _ForwardIterator __right 15726: = std::__upper_bound(++__middle, __first, __val, __comp_val_it); 15726: return pair<_ForwardIterator, _ForwardIterator>(__left, __right); 15726: } 15726: } 15726: return pair<_ForwardIterator, _ForwardIterator>(__first, __first); 15726: } 15726: # 2162 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline pair<_ForwardIterator, _ForwardIterator> 15726: equal_range(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __val) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__equal_range(__first, __last, __val, 15726: __gnu_cxx::__ops::__iter_less_val(), 15726: __gnu_cxx::__ops::__val_less_iter()); 15726: } 15726: # 2199 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline pair<_ForwardIterator, _ForwardIterator> 15726: equal_range(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __val, _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: ; 15726: 15726: return std::__equal_range(__first, __last, __val, 15726: __gnu_cxx::__ops::__iter_comp_val(__comp), 15726: __gnu_cxx::__ops::__val_comp_iter(__comp)); 15726: } 15726: # 2233 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: bool 15726: binary_search(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __val) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: _ForwardIterator __i 15726: = std::__lower_bound(__first, __last, __val, 15726: __gnu_cxx::__ops::__iter_less_val()); 15726: return __i != __last && !(__val < *__i); 15726: } 15726: # 2267 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: bool 15726: binary_search(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __val, _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: ; 15726: 15726: _ForwardIterator __i 15726: = std::__lower_bound(__first, __last, __val, 15726: __gnu_cxx::__ops::__iter_comp_val(__comp)); 15726: return __i != __last && !bool(__comp(__val, *__i)); 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: void 15726: __move_merge_adaptive(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2, 15726: _OutputIterator __result, _Compare __comp) 15726: { 15726: while (__first1 != __last1 && __first2 != __last2) 15726: { 15726: if (__comp(__first2, __first1)) 15726: { 15726: *__result = std::move(*__first2); 15726: ++__first2; 15726: } 15726: else 15726: { 15726: *__result = std::move(*__first1); 15726: ++__first1; 15726: } 15726: ++__result; 15726: } 15726: if (__first1 != __last1) 15726: std::move(__first1, __last1, __result); 15726: } 15726: 15726: 15726: template 15726: void 15726: __move_merge_adaptive_backward(_BidirectionalIterator1 __first1, 15726: _BidirectionalIterator1 __last1, 15726: _BidirectionalIterator2 __first2, 15726: _BidirectionalIterator2 __last2, 15726: _BidirectionalIterator3 __result, 15726: _Compare __comp) 15726: { 15726: if (__first1 == __last1) 15726: { 15726: std::move_backward(__first2, __last2, __result); 15726: return; 15726: } 15726: else if (__first2 == __last2) 15726: return; 15726: 15726: --__last1; 15726: --__last2; 15726: while (true) 15726: { 15726: if (__comp(__last2, __last1)) 15726: { 15726: *--__result = std::move(*__last1); 15726: if (__first1 == __last1) 15726: { 15726: std::move_backward(__first2, ++__last2, __result); 15726: return; 15726: } 15726: --__last1; 15726: } 15726: else 15726: { 15726: *--__result = std::move(*__last2); 15726: if (__first2 == __last2) 15726: return; 15726: --__last2; 15726: } 15726: } 15726: } 15726: 15726: 15726: template 15726: _BidirectionalIterator1 15726: __rotate_adaptive(_BidirectionalIterator1 __first, 15726: _BidirectionalIterator1 __middle, 15726: _BidirectionalIterator1 __last, 15726: _Distance __len1, _Distance __len2, 15726: _BidirectionalIterator2 __buffer, 15726: _Distance __buffer_size) 15726: { 15726: _BidirectionalIterator2 __buffer_end; 15726: if (__len1 > __len2 && __len2 <= __buffer_size) 15726: { 15726: if (__len2) 15726: { 15726: __buffer_end = std::move(__middle, __last, __buffer); 15726: std::move_backward(__first, __middle, __last); 15726: return std::move(__buffer, __buffer_end, __first); 15726: } 15726: else 15726: return __first; 15726: } 15726: else if (__len1 <= __buffer_size) 15726: { 15726: if (__len1) 15726: { 15726: __buffer_end = std::move(__first, __middle, __buffer); 15726: std::move(__middle, __last, __first); 15726: return std::move_backward(__buffer, __buffer_end, __last); 15726: } 15726: else 15726: return __last; 15726: } 15726: else 15726: return std::rotate(__first, __middle, __last); 15726: } 15726: 15726: 15726: template 15726: void 15726: __merge_adaptive(_BidirectionalIterator __first, 15726: _BidirectionalIterator __middle, 15726: _BidirectionalIterator __last, 15726: _Distance __len1, _Distance __len2, 15726: _Pointer __buffer, _Compare __comp) 15726: { 15726: if (__len1 <= __len2) 15726: { 15726: _Pointer __buffer_end = std::move(__first, __middle, __buffer); 15726: std::__move_merge_adaptive(__buffer, __buffer_end, __middle, __last, 15726: __first, __comp); 15726: } 15726: else 15726: { 15726: _Pointer __buffer_end = std::move(__middle, __last, __buffer); 15726: std::__move_merge_adaptive_backward(__first, __middle, __buffer, 15726: __buffer_end, __last, __comp); 15726: } 15726: } 15726: 15726: template 15726: void 15726: __merge_adaptive_resize(_BidirectionalIterator __first, 15726: _BidirectionalIterator __middle, 15726: _BidirectionalIterator __last, 15726: _Distance __len1, _Distance __len2, 15726: _Pointer __buffer, _Distance __buffer_size, 15726: _Compare __comp) 15726: { 15726: if (__len1 <= __buffer_size || __len2 <= __buffer_size) 15726: std::__merge_adaptive(__first, __middle, __last, 15726: __len1, __len2, __buffer, __comp); 15726: else 15726: { 15726: _BidirectionalIterator __first_cut = __first; 15726: _BidirectionalIterator __second_cut = __middle; 15726: _Distance __len11 = 0; 15726: _Distance __len22 = 0; 15726: if (__len1 > __len2) 15726: { 15726: __len11 = __len1 / 2; 15726: std::advance(__first_cut, __len11); 15726: __second_cut 15726: = std::__lower_bound(__middle, __last, *__first_cut, 15726: __gnu_cxx::__ops::__iter_comp_val(__comp)); 15726: __len22 = std::distance(__middle, __second_cut); 15726: } 15726: else 15726: { 15726: __len22 = __len2 / 2; 15726: std::advance(__second_cut, __len22); 15726: __first_cut 15726: = std::__upper_bound(__first, __middle, *__second_cut, 15726: __gnu_cxx::__ops::__val_comp_iter(__comp)); 15726: __len11 = std::distance(__first, __first_cut); 15726: } 15726: 15726: _BidirectionalIterator __new_middle 15726: = std::__rotate_adaptive(__first_cut, __middle, __second_cut, 15726: _Distance(__len1 - __len11), __len22, 15726: __buffer, __buffer_size); 15726: std::__merge_adaptive_resize(__first, __first_cut, __new_middle, 15726: __len11, __len22, 15726: __buffer, __buffer_size, __comp); 15726: std::__merge_adaptive_resize(__new_middle, __second_cut, __last, 15726: _Distance(__len1 - __len11), 15726: _Distance(__len2 - __len22), 15726: __buffer, __buffer_size, __comp); 15726: } 15726: } 15726: 15726: 15726: template 15726: void 15726: __merge_without_buffer(_BidirectionalIterator __first, 15726: _BidirectionalIterator __middle, 15726: _BidirectionalIterator __last, 15726: _Distance __len1, _Distance __len2, 15726: _Compare __comp) 15726: { 15726: if (__len1 == 0 || __len2 == 0) 15726: return; 15726: 15726: if (__len1 + __len2 == 2) 15726: { 15726: if (__comp(__middle, __first)) 15726: std::iter_swap(__first, __middle); 15726: return; 15726: } 15726: 15726: _BidirectionalIterator __first_cut = __first; 15726: _BidirectionalIterator __second_cut = __middle; 15726: _Distance __len11 = 0; 15726: _Distance __len22 = 0; 15726: if (__len1 > __len2) 15726: { 15726: __len11 = __len1 / 2; 15726: std::advance(__first_cut, __len11); 15726: __second_cut 15726: = std::__lower_bound(__middle, __last, *__first_cut, 15726: __gnu_cxx::__ops::__iter_comp_val(__comp)); 15726: __len22 = std::distance(__middle, __second_cut); 15726: } 15726: else 15726: { 15726: __len22 = __len2 / 2; 15726: std::advance(__second_cut, __len22); 15726: __first_cut 15726: = std::__upper_bound(__first, __middle, *__second_cut, 15726: __gnu_cxx::__ops::__val_comp_iter(__comp)); 15726: __len11 = std::distance(__first, __first_cut); 15726: } 15726: 15726: _BidirectionalIterator __new_middle 15726: = std::rotate(__first_cut, __middle, __second_cut); 15726: std::__merge_without_buffer(__first, __first_cut, __new_middle, 15726: __len11, __len22, __comp); 15726: std::__merge_without_buffer(__new_middle, __second_cut, __last, 15726: __len1 - __len11, __len2 - __len22, __comp); 15726: } 15726: 15726: template 15726: void 15726: __inplace_merge(_BidirectionalIterator __first, 15726: _BidirectionalIterator __middle, 15726: _BidirectionalIterator __last, 15726: _Compare __comp) 15726: { 15726: typedef typename iterator_traits<_BidirectionalIterator>::value_type 15726: _ValueType; 15726: typedef typename iterator_traits<_BidirectionalIterator>::difference_type 15726: _DistanceType; 15726: 15726: if (__first == __middle || __middle == __last) 15726: return; 15726: 15726: const _DistanceType __len1 = std::distance(__first, __middle); 15726: const _DistanceType __len2 = std::distance(__middle, __last); 15726: 15726: 15726: typedef _Temporary_buffer<_BidirectionalIterator, _ValueType> _TmpBuf; 15726: 15726: 15726: _TmpBuf __buf(__first, std::min(__len1, __len2)); 15726: 15726: if (__builtin_expect(__buf.size() == __buf.requested_size(), true)) 15726: std::__merge_adaptive 15726: (__first, __middle, __last, __len1, __len2, __buf.begin(), __comp); 15726: else if (__builtin_expect(__buf.begin() == 0, false)) 15726: std::__merge_without_buffer 15726: (__first, __middle, __last, __len1, __len2, __comp); 15726: else 15726: std::__merge_adaptive_resize 15726: (__first, __middle, __last, __len1, __len2, __buf.begin(), 15726: _DistanceType(__buf.size()), __comp); 15726: 15726: 15726: 15726: 15726: } 15726: # 2582 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: inline void 15726: inplace_merge(_BidirectionalIterator __first, 15726: _BidirectionalIterator __middle, 15726: _BidirectionalIterator __last) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: 15726: std::__inplace_merge(__first, __middle, __last, 15726: __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: # 2623 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: inline void 15726: inplace_merge(_BidirectionalIterator __first, 15726: _BidirectionalIterator __middle, 15726: _BidirectionalIterator __last, 15726: _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: 15726: std::__inplace_merge(__first, __middle, __last, 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: 15726: 15726: 15726: template 15726: _OutputIterator 15726: __move_merge(_InputIterator __first1, _InputIterator __last1, 15726: _InputIterator __first2, _InputIterator __last2, 15726: _OutputIterator __result, _Compare __comp) 15726: { 15726: while (__first1 != __last1 && __first2 != __last2) 15726: { 15726: if (__comp(__first2, __first1)) 15726: { 15726: *__result = std::move(*__first2); 15726: ++__first2; 15726: } 15726: else 15726: { 15726: *__result = std::move(*__first1); 15726: ++__first1; 15726: } 15726: ++__result; 15726: } 15726: return std::move(__first2, __last2, std::move(__first1, __last1, __result)) 15726: 15726: ; 15726: } 15726: 15726: template 15726: void 15726: __merge_sort_loop(_RandomAccessIterator1 __first, 15726: _RandomAccessIterator1 __last, 15726: _RandomAccessIterator2 __result, _Distance __step_size, 15726: _Compare __comp) 15726: { 15726: const _Distance __two_step = 2 * __step_size; 15726: 15726: while (__last - __first >= __two_step) 15726: { 15726: __result = std::__move_merge(__first, __first + __step_size, 15726: __first + __step_size, 15726: __first + __two_step, 15726: __result, __comp); 15726: __first += __two_step; 15726: } 15726: __step_size = std::min(_Distance(__last - __first), __step_size); 15726: 15726: std::__move_merge(__first, __first + __step_size, 15726: __first + __step_size, __last, __result, __comp); 15726: } 15726: 15726: template 15726: 15726: void 15726: __chunk_insertion_sort(_RandomAccessIterator __first, 15726: _RandomAccessIterator __last, 15726: _Distance __chunk_size, _Compare __comp) 15726: { 15726: while (__last - __first >= __chunk_size) 15726: { 15726: std::__insertion_sort(__first, __first + __chunk_size, __comp); 15726: __first += __chunk_size; 15726: } 15726: std::__insertion_sort(__first, __last, __comp); 15726: } 15726: 15726: enum { _S_chunk_size = 7 }; 15726: 15726: template 15726: void 15726: __merge_sort_with_buffer(_RandomAccessIterator __first, 15726: _RandomAccessIterator __last, 15726: _Pointer __buffer, _Compare __comp) 15726: { 15726: typedef typename iterator_traits<_RandomAccessIterator>::difference_type 15726: _Distance; 15726: 15726: const _Distance __len = __last - __first; 15726: const _Pointer __buffer_last = __buffer + __len; 15726: 15726: _Distance __step_size = _S_chunk_size; 15726: std::__chunk_insertion_sort(__first, __last, __step_size, __comp); 15726: 15726: while (__step_size < __len) 15726: { 15726: std::__merge_sort_loop(__first, __last, __buffer, 15726: __step_size, __comp); 15726: __step_size *= 2; 15726: std::__merge_sort_loop(__buffer, __buffer_last, __first, 15726: __step_size, __comp); 15726: __step_size *= 2; 15726: } 15726: } 15726: 15726: template 15726: void 15726: __stable_sort_adaptive(_RandomAccessIterator __first, 15726: _RandomAccessIterator __middle, 15726: _RandomAccessIterator __last, 15726: _Pointer __buffer, _Compare __comp) 15726: { 15726: std::__merge_sort_with_buffer(__first, __middle, __buffer, __comp); 15726: std::__merge_sort_with_buffer(__middle, __last, __buffer, __comp); 15726: 15726: std::__merge_adaptive(__first, __middle, __last, 15726: __middle - __first, __last - __middle, 15726: __buffer, __comp); 15726: } 15726: 15726: template 15726: void 15726: __stable_sort_adaptive_resize(_RandomAccessIterator __first, 15726: _RandomAccessIterator __last, 15726: _Pointer __buffer, _Distance __buffer_size, 15726: _Compare __comp) 15726: { 15726: const _Distance __len = (__last - __first + 1) / 2; 15726: const _RandomAccessIterator __middle = __first + __len; 15726: if (__len > __buffer_size) 15726: { 15726: std::__stable_sort_adaptive_resize(__first, __middle, __buffer, 15726: __buffer_size, __comp); 15726: std::__stable_sort_adaptive_resize(__middle, __last, __buffer, 15726: __buffer_size, __comp); 15726: std::__merge_adaptive_resize(__first, __middle, __last, 15726: _Distance(__middle - __first), 15726: _Distance(__last - __middle), 15726: __buffer, __buffer_size, 15726: __comp); 15726: } 15726: else 15726: std::__stable_sort_adaptive(__first, __middle, __last, 15726: __buffer, __comp); 15726: } 15726: 15726: 15726: template 15726: void 15726: __inplace_stable_sort(_RandomAccessIterator __first, 15726: _RandomAccessIterator __last, _Compare __comp) 15726: { 15726: if (__last - __first < 15) 15726: { 15726: std::__insertion_sort(__first, __last, __comp); 15726: return; 15726: } 15726: _RandomAccessIterator __middle = __first + (__last - __first) / 2; 15726: std::__inplace_stable_sort(__first, __middle, __comp); 15726: std::__inplace_stable_sort(__middle, __last, __comp); 15726: std::__merge_without_buffer(__first, __middle, __last, 15726: __middle - __first, 15726: __last - __middle, 15726: __comp); 15726: } 15726: # 2809 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: bool 15726: __includes(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2, 15726: _Compare __comp) 15726: { 15726: while (__first1 != __last1 && __first2 != __last2) 15726: { 15726: if (__comp(__first2, __first1)) 15726: return false; 15726: if (!__comp(__first1, __first2)) 15726: ++__first2; 15726: ++__first1; 15726: } 15726: 15726: return __first2 == __last2; 15726: } 15726: # 2847 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline bool 15726: includes(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: ; 15726: 15726: return std::__includes(__first1, __last1, __first2, __last2, 15726: __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: # 2892 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline bool 15726: includes(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2, 15726: _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: ; 15726: 15726: return std::__includes(__first1, __last1, __first2, __last2, 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: # 2928 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: bool 15726: __next_permutation(_BidirectionalIterator __first, 15726: _BidirectionalIterator __last, _Compare __comp) 15726: { 15726: if (__first == __last) 15726: return false; 15726: _BidirectionalIterator __i = __first; 15726: ++__i; 15726: if (__i == __last) 15726: return false; 15726: __i = __last; 15726: --__i; 15726: 15726: for(;;) 15726: { 15726: _BidirectionalIterator __ii = __i; 15726: --__i; 15726: if (__comp(__i, __ii)) 15726: { 15726: _BidirectionalIterator __j = __last; 15726: while (!__comp(__i, --__j)) 15726: {} 15726: std::iter_swap(__i, __j); 15726: std::__reverse(__ii, __last, 15726: std::__iterator_category(__first)); 15726: return true; 15726: } 15726: if (__i == __first) 15726: { 15726: std::__reverse(__first, __last, 15726: std::__iterator_category(__first)); 15726: return false; 15726: } 15726: } 15726: } 15726: # 2978 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline bool 15726: next_permutation(_BidirectionalIterator __first, 15726: _BidirectionalIterator __last) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__next_permutation 15726: (__first, __last, __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: # 3011 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline bool 15726: next_permutation(_BidirectionalIterator __first, 15726: _BidirectionalIterator __last, _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__next_permutation 15726: (__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: 15726: template 15726: 15726: bool 15726: __prev_permutation(_BidirectionalIterator __first, 15726: _BidirectionalIterator __last, _Compare __comp) 15726: { 15726: if (__first == __last) 15726: return false; 15726: _BidirectionalIterator __i = __first; 15726: ++__i; 15726: if (__i == __last) 15726: return false; 15726: __i = __last; 15726: --__i; 15726: 15726: for(;;) 15726: { 15726: _BidirectionalIterator __ii = __i; 15726: --__i; 15726: if (__comp(__ii, __i)) 15726: { 15726: _BidirectionalIterator __j = __last; 15726: while (!__comp(--__j, __i)) 15726: {} 15726: std::iter_swap(__i, __j); 15726: std::__reverse(__ii, __last, 15726: std::__iterator_category(__first)); 15726: return true; 15726: } 15726: if (__i == __first) 15726: { 15726: std::__reverse(__first, __last, 15726: std::__iterator_category(__first)); 15726: return false; 15726: } 15726: } 15726: } 15726: # 3081 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline bool 15726: prev_permutation(_BidirectionalIterator __first, 15726: _BidirectionalIterator __last) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__prev_permutation(__first, __last, 15726: __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: # 3114 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline bool 15726: prev_permutation(_BidirectionalIterator __first, 15726: _BidirectionalIterator __last, _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__prev_permutation(__first, __last, 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: 15726: _OutputIterator 15726: __replace_copy_if(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, 15726: _Predicate __pred, const _Tp& __new_value) 15726: { 15726: for (; __first != __last; ++__first, (void)++__result) 15726: if (__pred(__first)) 15726: *__result = __new_value; 15726: else 15726: *__result = *__first; 15726: return __result; 15726: } 15726: # 3166 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _OutputIterator 15726: replace_copy(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, 15726: const _Tp& __old_value, const _Tp& __new_value) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__replace_copy_if(__first, __last, __result, 15726: __gnu_cxx::__ops::__iter_equals_val(__old_value), 15726: __new_value); 15726: } 15726: # 3201 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _OutputIterator 15726: replace_copy_if(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, 15726: _Predicate __pred, const _Tp& __new_value) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__replace_copy_if(__first, __last, __result, 15726: __gnu_cxx::__ops::__pred_iter(__pred), 15726: __new_value); 15726: } 15726: # 3230 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline bool 15726: is_sorted(_ForwardIterator __first, _ForwardIterator __last) 15726: { return std::is_sorted_until(__first, __last) == __last; } 15726: # 3245 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline bool 15726: is_sorted(_ForwardIterator __first, _ForwardIterator __last, 15726: _Compare __comp) 15726: { return std::is_sorted_until(__first, __last, __comp) == __last; } 15726: 15726: template 15726: 15726: _ForwardIterator 15726: __is_sorted_until(_ForwardIterator __first, _ForwardIterator __last, 15726: _Compare __comp) 15726: { 15726: if (__first == __last) 15726: return __last; 15726: 15726: _ForwardIterator __next = __first; 15726: for (++__next; __next != __last; __first = __next, (void)++__next) 15726: if (__comp(__next, __first)) 15726: return __next; 15726: return __next; 15726: } 15726: # 3276 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator 15726: is_sorted_until(_ForwardIterator __first, _ForwardIterator __last) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__is_sorted_until(__first, __last, 15726: __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: # 3301 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator 15726: is_sorted_until(_ForwardIterator __first, _ForwardIterator __last, 15726: _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__is_sorted_until(__first, __last, 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: # 3327 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: constexpr 15726: inline pair 15726: minmax(const _Tp& __a, const _Tp& __b) 15726: { 15726: 15726: 15726: 15726: return __b < __a ? pair(__b, __a) 15726: : pair(__a, __b); 15726: } 15726: # 3348 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: constexpr 15726: inline pair 15726: minmax(const _Tp& __a, const _Tp& __b, _Compare __comp) 15726: { 15726: return __comp(__b, __a) ? pair(__b, __a) 15726: : pair(__a, __b); 15726: } 15726: 15726: template 15726: constexpr 15726: pair<_ForwardIterator, _ForwardIterator> 15726: __minmax_element(_ForwardIterator __first, _ForwardIterator __last, 15726: _Compare __comp) 15726: { 15726: _ForwardIterator __next = __first; 15726: if (__first == __last 15726: || ++__next == __last) 15726: return std::make_pair(__first, __first); 15726: 15726: _ForwardIterator __min{}, __max{}; 15726: if (__comp(__next, __first)) 15726: { 15726: __min = __next; 15726: __max = __first; 15726: } 15726: else 15726: { 15726: __min = __first; 15726: __max = __next; 15726: } 15726: 15726: __first = __next; 15726: ++__first; 15726: 15726: while (__first != __last) 15726: { 15726: __next = __first; 15726: if (++__next == __last) 15726: { 15726: if (__comp(__first, __min)) 15726: __min = __first; 15726: else if (!__comp(__first, __max)) 15726: __max = __first; 15726: break; 15726: } 15726: 15726: if (__comp(__next, __first)) 15726: { 15726: if (__comp(__next, __min)) 15726: __min = __next; 15726: if (!__comp(__first, __max)) 15726: __max = __first; 15726: } 15726: else 15726: { 15726: if (__comp(__first, __min)) 15726: __min = __first; 15726: if (!__comp(__next, __max)) 15726: __max = __next; 15726: } 15726: 15726: __first = __next; 15726: ++__first; 15726: } 15726: 15726: return std::make_pair(__min, __max); 15726: } 15726: # 3428 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: constexpr 15726: inline pair<_ForwardIterator, _ForwardIterator> 15726: minmax_element(_ForwardIterator __first, _ForwardIterator __last) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__minmax_element(__first, __last, 15726: __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: # 3456 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: constexpr 15726: inline pair<_ForwardIterator, _ForwardIterator> 15726: minmax_element(_ForwardIterator __first, _ForwardIterator __last, 15726: _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__minmax_element(__first, __last, 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: 15726: template 15726: constexpr 15726: inline pair<_Tp, _Tp> 15726: minmax(initializer_list<_Tp> __l) 15726: { 15726: ; 15726: pair __p = 15726: std::__minmax_element(__l.begin(), __l.end(), 15726: __gnu_cxx::__ops::__iter_less_iter()); 15726: return std::make_pair(*__p.first, *__p.second); 15726: } 15726: 15726: template 15726: constexpr 15726: inline pair<_Tp, _Tp> 15726: minmax(initializer_list<_Tp> __l, _Compare __comp) 15726: { 15726: ; 15726: pair __p = 15726: std::__minmax_element(__l.begin(), __l.end(), 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: return std::make_pair(*__p.first, *__p.second); 15726: } 15726: # 3512 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline bool 15726: is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _BinaryPredicate __pred) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__is_permutation(__first1, __last1, __first2, 15726: __gnu_cxx::__ops::__iter_comp_iter(__pred)); 15726: } 15726: 15726: 15726: template 15726: 15726: bool 15726: __is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _ForwardIterator2 __last2, 15726: _BinaryPredicate __pred) 15726: { 15726: using _Cat1 15726: = typename iterator_traits<_ForwardIterator1>::iterator_category; 15726: using _Cat2 15726: = typename iterator_traits<_ForwardIterator2>::iterator_category; 15726: using _It1_is_RA = is_same<_Cat1, random_access_iterator_tag>; 15726: using _It2_is_RA = is_same<_Cat2, random_access_iterator_tag>; 15726: constexpr bool __ra_iters = _It1_is_RA() && _It2_is_RA(); 15726: if (__ra_iters) 15726: { 15726: auto __d1 = std::distance(__first1, __last1); 15726: auto __d2 = std::distance(__first2, __last2); 15726: if (__d1 != __d2) 15726: return false; 15726: } 15726: 15726: 15726: 15726: for (; __first1 != __last1 && __first2 != __last2; 15726: ++__first1, (void)++__first2) 15726: if (!__pred(__first1, __first2)) 15726: break; 15726: 15726: if (__ra_iters) 15726: { 15726: if (__first1 == __last1) 15726: return true; 15726: } 15726: else 15726: { 15726: auto __d1 = std::distance(__first1, __last1); 15726: auto __d2 = std::distance(__first2, __last2); 15726: if (__d1 == 0 && __d2 == 0) 15726: return true; 15726: if (__d1 != __d2) 15726: return false; 15726: } 15726: 15726: for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan) 15726: { 15726: if (__scan != std::__find_if(__first1, __scan, 15726: __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))) 15726: continue; 15726: 15726: auto __matches = std::__count_if(__first2, __last2, 15726: __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)); 15726: if (0 == __matches 15726: || std::__count_if(__scan, __last1, 15726: __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)) 15726: != __matches) 15726: return false; 15726: } 15726: return true; 15726: } 15726: # 3607 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline bool 15726: is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _ForwardIterator2 __last2) 15726: { 15726: ; 15726: ; 15726: 15726: return 15726: std::__is_permutation(__first1, __last1, __first2, __last2, 15726: __gnu_cxx::__ops::__iter_equal_to_iter()); 15726: } 15726: # 3635 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline bool 15726: is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _ForwardIterator2 __last2, 15726: _BinaryPredicate __pred) 15726: { 15726: ; 15726: ; 15726: 15726: return std::__is_permutation(__first1, __last1, __first2, __last2, 15726: __gnu_cxx::__ops::__iter_comp_iter(__pred)); 15726: } 15726: # 3665 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: constexpr const _Tp& 15726: clamp(const _Tp& __val, const _Tp& __lo, const _Tp& __hi) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(!(__hi < __lo))) __builtin_unreachable(); } while (false); 15726: return std::min(std::max(__val, __lo), __hi); 15726: } 15726: # 3685 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: constexpr const _Tp& 15726: clamp(const _Tp& __val, const _Tp& __lo, const _Tp& __hi, _Compare __comp) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(!__comp(__hi, __lo))) __builtin_unreachable(); } while (false); 15726: return std::min(std::max(__val, __lo, __comp), __hi, __comp); 15726: } 15726: # 3717 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: pair<_IntType, _IntType> 15726: __gen_two_uniform_ints(_IntType __b0, _IntType __b1, 15726: _UniformRandomBitGenerator&& __g) 15726: { 15726: _IntType __x 15726: = uniform_int_distribution<_IntType>{0, (__b0 * __b1) - 1}(__g); 15726: return std::make_pair(__x / __b1, __x % __b1); 15726: } 15726: # 3739 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: void 15726: shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last, 15726: _UniformRandomNumberGenerator&& __g) 15726: { 15726: 15726: 15726: 15726: ; 15726: 15726: if (__first == __last) 15726: return; 15726: 15726: typedef typename iterator_traits<_RandomAccessIterator>::difference_type 15726: _DistanceType; 15726: 15726: typedef typename std::make_unsigned<_DistanceType>::type __ud_type; 15726: typedef typename std::uniform_int_distribution<__ud_type> __distr_type; 15726: typedef typename __distr_type::param_type __p_type; 15726: 15726: typedef typename remove_reference<_UniformRandomNumberGenerator>::type 15726: _Gen; 15726: typedef typename common_type::type 15726: __uc_type; 15726: 15726: const __uc_type __urngrange = __g.max() - __g.min(); 15726: const __uc_type __urange = __uc_type(__last - __first); 15726: 15726: if (__urngrange / __urange >= __urange) 15726: 15726: { 15726: _RandomAccessIterator __i = __first + 1; 15726: 15726: 15726: 15726: 15726: 15726: if ((__urange % 2) == 0) 15726: { 15726: __distr_type __d{0, 1}; 15726: std::iter_swap(__i++, __first + __d(__g)); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: while (__i != __last) 15726: { 15726: const __uc_type __swap_range = __uc_type(__i - __first) + 1; 15726: 15726: const pair<__uc_type, __uc_type> __pospos = 15726: __gen_two_uniform_ints(__swap_range, __swap_range + 1, __g); 15726: 15726: std::iter_swap(__i++, __first + __pospos.first); 15726: std::iter_swap(__i++, __first + __pospos.second); 15726: } 15726: 15726: return; 15726: } 15726: 15726: __distr_type __d; 15726: 15726: for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) 15726: std::iter_swap(__i, __first + __d(__g, __p_type(0, __i - __first))); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: # 3824 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: _Function 15726: for_each(_InputIterator __first, _InputIterator __last, _Function __f) 15726: { 15726: 15726: 15726: ; 15726: for (; __first != __last; ++__first) 15726: __f(*__first); 15726: return __f; 15726: } 15726: # 3850 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: _InputIterator 15726: for_each_n(_InputIterator __first, _Size __n, _Function __f) 15726: { 15726: auto __n2 = std::__size_to_integer(__n); 15726: using _Cat = typename iterator_traits<_InputIterator>::iterator_category; 15726: if constexpr (is_base_of_v) 15726: { 15726: if (__n2 <= 0) 15726: return __first; 15726: auto __last = __first + __n2; 15726: std::for_each(__first, __last, std::move(__f)); 15726: return __last; 15726: } 15726: else 15726: { 15726: while (__n2-->0) 15726: { 15726: __f(*__first); 15726: ++__first; 15726: } 15726: return __first; 15726: } 15726: } 15726: # 3886 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _InputIterator 15726: find(_InputIterator __first, _InputIterator __last, 15726: const _Tp& __val) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: return std::__find_if(__first, __last, 15726: __gnu_cxx::__ops::__iter_equals_val(__val)); 15726: } 15726: # 3911 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _InputIterator 15726: find_if(_InputIterator __first, _InputIterator __last, 15726: _Predicate __pred) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__find_if(__first, __last, 15726: __gnu_cxx::__ops::__pred_iter(__pred)); 15726: } 15726: # 3943 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: _InputIterator 15726: find_first_of(_InputIterator __first1, _InputIterator __last1, 15726: _ForwardIterator __first2, _ForwardIterator __last2) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: for (; __first1 != __last1; ++__first1) 15726: for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter) 15726: if (*__first1 == *__iter) 15726: return __first1; 15726: return __last1; 15726: } 15726: # 3984 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: _InputIterator 15726: find_first_of(_InputIterator __first1, _InputIterator __last1, 15726: _ForwardIterator __first2, _ForwardIterator __last2, 15726: _BinaryPredicate __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: for (; __first1 != __last1; ++__first1) 15726: for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter) 15726: if (__comp(*__first1, *__iter)) 15726: return __first1; 15726: return __last1; 15726: } 15726: # 4017 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator 15726: adjacent_find(_ForwardIterator __first, _ForwardIterator __last) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__adjacent_find(__first, __last, 15726: __gnu_cxx::__ops::__iter_equal_to_iter()); 15726: } 15726: # 4043 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator 15726: adjacent_find(_ForwardIterator __first, _ForwardIterator __last, 15726: _BinaryPredicate __binary_pred) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__adjacent_find(__first, __last, 15726: __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); 15726: } 15726: # 4069 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline typename iterator_traits<_InputIterator>::difference_type 15726: count(_InputIterator __first, _InputIterator __last, const _Tp& __value) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__count_if(__first, __last, 15726: __gnu_cxx::__ops::__iter_equals_val(__value)); 15726: } 15726: # 4093 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline typename iterator_traits<_InputIterator>::difference_type 15726: count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__count_if(__first, __last, 15726: __gnu_cxx::__ops::__pred_iter(__pred)); 15726: } 15726: # 4134 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator1 15726: search(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _ForwardIterator2 __last2) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__search(__first1, __last1, __first2, __last2, 15726: __gnu_cxx::__ops::__iter_equal_to_iter()); 15726: } 15726: # 4174 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator1 15726: search(_ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _ForwardIterator2 __last2, 15726: _BinaryPredicate __predicate) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__search(__first1, __last1, __first2, __last2, 15726: __gnu_cxx::__ops::__iter_comp_iter(__predicate)); 15726: } 15726: # 4210 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator 15726: search_n(_ForwardIterator __first, _ForwardIterator __last, 15726: _Integer __count, const _Tp& __val) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__search_n(__first, __last, __count, 15726: __gnu_cxx::__ops::__iter_equals_val(__val)); 15726: } 15726: # 4244 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator 15726: search_n(_ForwardIterator __first, _ForwardIterator __last, 15726: _Integer __count, const _Tp& __val, 15726: _BinaryPredicate __binary_pred) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__search_n(__first, __last, __count, 15726: __gnu_cxx::__ops::__iter_comp_val(__binary_pred, __val)); 15726: } 15726: # 4270 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator 15726: search(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Searcher& __searcher) 15726: { return __searcher(__first, __last).first; } 15726: # 4294 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: _OutputIterator 15726: transform(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, _UnaryOperation __unary_op) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: for (; __first != __last; ++__first, (void)++__result) 15726: *__result = __unary_op(*__first); 15726: return __result; 15726: } 15726: # 4332 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: _OutputIterator 15726: transform(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _OutputIterator __result, 15726: _BinaryOperation __binary_op) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: for (; __first1 != __last1; ++__first1, (void)++__first2, ++__result) 15726: *__result = __binary_op(*__first1, *__first2); 15726: return __result; 15726: } 15726: # 4366 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: void 15726: replace(_ForwardIterator __first, _ForwardIterator __last, 15726: const _Tp& __old_value, const _Tp& __new_value) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: for (; __first != __last; ++__first) 15726: if (*__first == __old_value) 15726: *__first = __new_value; 15726: } 15726: # 4399 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: void 15726: replace_if(_ForwardIterator __first, _ForwardIterator __last, 15726: _Predicate __pred, const _Tp& __new_value) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: for (; __first != __last; ++__first) 15726: if (__pred(*__first)) 15726: *__first = __new_value; 15726: } 15726: # 4431 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: void 15726: generate(_ForwardIterator __first, _ForwardIterator __last, 15726: _Generator __gen) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: for (; __first != __last; ++__first) 15726: *__first = __gen(); 15726: } 15726: # 4464 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: _OutputIterator 15726: generate_n(_OutputIterator __first, _Size __n, _Generator __gen) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: typedef __decltype(std::__size_to_integer(__n)) _IntSize; 15726: for (_IntSize __niter = std::__size_to_integer(__n); 15726: __niter > 0; --__niter, (void) ++__first) 15726: *__first = __gen(); 15726: return __first; 15726: } 15726: # 4499 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _OutputIterator 15726: unique_copy(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: if (__first == __last) 15726: return __result; 15726: return std::__unique_copy(__first, __last, __result, 15726: __gnu_cxx::__ops::__iter_equal_to_iter(), 15726: std::__iterator_category(__first), 15726: std::__iterator_category(__result)); 15726: } 15726: # 4539 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _OutputIterator 15726: unique_copy(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, 15726: _BinaryPredicate __binary_pred) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: if (__first == __last) 15726: return __result; 15726: return std::__unique_copy(__first, __last, __result, 15726: __gnu_cxx::__ops::__iter_comp_iter(__binary_pred), 15726: std::__iterator_category(__first), 15726: std::__iterator_category(__result)); 15726: } 15726: # 4578 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: __attribute__ ((__deprecated__ ("use '" "std::shuffle" "' instead"))) 15726: inline void 15726: random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last) 15726: { 15726: 15726: 15726: 15726: ; 15726: 15726: if (__first != __last) 15726: for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) 15726: { 15726: 15726: _RandomAccessIterator __j = __first 15726: + std::rand() % ((__i - __first) + 1); 15726: if (__i != __j) 15726: std::iter_swap(__i, __j); 15726: } 15726: } 15726: # 4617 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: __attribute__ ((__deprecated__ ("use '" "std::shuffle" "' instead"))) 15726: void 15726: random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last, 15726: 15726: _RandomNumberGenerator&& __rand) 15726: 15726: 15726: 15726: { 15726: 15726: 15726: 15726: ; 15726: 15726: if (__first == __last) 15726: return; 15726: for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) 15726: { 15726: _RandomAccessIterator __j = __first + __rand((__i - __first) + 1); 15726: if (__i != __j) 15726: std::iter_swap(__i, __j); 15726: } 15726: } 15726: # 4659 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _ForwardIterator 15726: partition(_ForwardIterator __first, _ForwardIterator __last, 15726: _Predicate __pred) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: return std::__partition(__first, __last, __pred, 15726: std::__iterator_category(__first)); 15726: } 15726: # 4694 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline void 15726: partial_sort(_RandomAccessIterator __first, 15726: _RandomAccessIterator __middle, 15726: _RandomAccessIterator __last) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: 15726: std::__partial_sort(__first, __middle, __last, 15726: __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: # 4733 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline void 15726: partial_sort(_RandomAccessIterator __first, 15726: _RandomAccessIterator __middle, 15726: _RandomAccessIterator __last, 15726: _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: 15726: std::__partial_sort(__first, __middle, __last, 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: # 4770 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline void 15726: nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth, 15726: _RandomAccessIterator __last) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: 15726: if (__first == __last || __nth == __last) 15726: return; 15726: 15726: std::__introselect(__first, __nth, __last, 15726: std::__lg(__last - __first) * 2, 15726: __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: # 4810 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline void 15726: nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth, 15726: _RandomAccessIterator __last, _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: 15726: if (__first == __last || __nth == __last) 15726: return; 15726: 15726: std::__introselect(__first, __nth, __last, 15726: std::__lg(__last - __first) * 2, 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: # 4848 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline void 15726: sort(_RandomAccessIterator __first, _RandomAccessIterator __last) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: # 4879 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline void 15726: sort(_RandomAccessIterator __first, _RandomAccessIterator __last, 15726: _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: std::__sort(__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: 15726: template 15726: 15726: _OutputIterator 15726: __merge(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2, 15726: _OutputIterator __result, _Compare __comp) 15726: { 15726: while (__first1 != __last1 && __first2 != __last2) 15726: { 15726: if (__comp(__first2, __first1)) 15726: { 15726: *__result = *__first2; 15726: ++__first2; 15726: } 15726: else 15726: { 15726: *__result = *__first1; 15726: ++__first1; 15726: } 15726: ++__result; 15726: } 15726: return std::copy(__first2, __last2, 15726: std::copy(__first1, __last1, __result)); 15726: } 15726: # 4942 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _OutputIterator 15726: merge(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2, 15726: _OutputIterator __result) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: ; 15726: 15726: return std::__merge(__first1, __last1, 15726: __first2, __last2, __result, 15726: __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: # 4993 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _OutputIterator 15726: merge(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2, 15726: _OutputIterator __result, _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: ; 15726: 15726: return std::__merge(__first1, __last1, 15726: __first2, __last2, __result, 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: 15726: template 15726: inline void 15726: __stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, 15726: _Compare __comp) 15726: { 15726: typedef typename iterator_traits<_RandomAccessIterator>::value_type 15726: _ValueType; 15726: typedef typename iterator_traits<_RandomAccessIterator>::difference_type 15726: _DistanceType; 15726: 15726: if (__first == __last) 15726: return; 15726: 15726: 15726: typedef _Temporary_buffer<_RandomAccessIterator, _ValueType> _TmpBuf; 15726: 15726: 15726: _TmpBuf __buf(__first, (__last - __first + 1) / 2); 15726: 15726: if (__builtin_expect(__buf.requested_size() == __buf.size(), true)) 15726: std::__stable_sort_adaptive(__first, 15726: __first + _DistanceType(__buf.size()), 15726: __last, __buf.begin(), __comp); 15726: else if (__builtin_expect(__buf.begin() == 0, false)) 15726: std::__inplace_stable_sort(__first, __last, __comp); 15726: else 15726: std::__stable_sort_adaptive_resize(__first, __last, __buf.begin(), 15726: _DistanceType(__buf.size()), __comp); 15726: 15726: 15726: 15726: } 15726: # 5071 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: inline void 15726: stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: std::__stable_sort(__first, __last, 15726: __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: # 5105 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: inline void 15726: stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, 15726: _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: std::__stable_sort(__first, __last, 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: 15726: template 15726: 15726: _OutputIterator 15726: __set_union(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2, 15726: _OutputIterator __result, _Compare __comp) 15726: { 15726: while (__first1 != __last1 && __first2 != __last2) 15726: { 15726: if (__comp(__first1, __first2)) 15726: { 15726: *__result = *__first1; 15726: ++__first1; 15726: } 15726: else if (__comp(__first2, __first1)) 15726: { 15726: *__result = *__first2; 15726: ++__first2; 15726: } 15726: else 15726: { 15726: *__result = *__first1; 15726: ++__first1; 15726: ++__first2; 15726: } 15726: ++__result; 15726: } 15726: return std::copy(__first2, __last2, 15726: std::copy(__first1, __last1, __result)); 15726: } 15726: # 5175 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _OutputIterator 15726: set_union(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2, 15726: _OutputIterator __result) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: ; 15726: 15726: return std::__set_union(__first1, __last1, 15726: __first2, __last2, __result, 15726: __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: # 5226 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _OutputIterator 15726: set_union(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2, 15726: _OutputIterator __result, _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: ; 15726: 15726: return std::__set_union(__first1, __last1, 15726: __first2, __last2, __result, 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: 15726: template 15726: 15726: _OutputIterator 15726: __set_intersection(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2, 15726: _OutputIterator __result, _Compare __comp) 15726: { 15726: while (__first1 != __last1 && __first2 != __last2) 15726: if (__comp(__first1, __first2)) 15726: ++__first1; 15726: else if (__comp(__first2, __first1)) 15726: ++__first2; 15726: else 15726: { 15726: *__result = *__first1; 15726: ++__first1; 15726: ++__first2; 15726: ++__result; 15726: } 15726: return __result; 15726: } 15726: # 5299 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _OutputIterator 15726: set_intersection(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2, 15726: _OutputIterator __result) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: ; 15726: 15726: return std::__set_intersection(__first1, __last1, 15726: __first2, __last2, __result, 15726: __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: # 5349 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _OutputIterator 15726: set_intersection(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2, 15726: _OutputIterator __result, _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: ; 15726: 15726: return std::__set_intersection(__first1, __last1, 15726: __first2, __last2, __result, 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: 15726: template 15726: 15726: _OutputIterator 15726: __set_difference(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2, 15726: _OutputIterator __result, _Compare __comp) 15726: { 15726: while (__first1 != __last1 && __first2 != __last2) 15726: if (__comp(__first1, __first2)) 15726: { 15726: *__result = *__first1; 15726: ++__first1; 15726: ++__result; 15726: } 15726: else if (__comp(__first2, __first1)) 15726: ++__first2; 15726: else 15726: { 15726: ++__first1; 15726: ++__first2; 15726: } 15726: return std::copy(__first1, __last1, __result); 15726: } 15726: # 5424 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _OutputIterator 15726: set_difference(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2, 15726: _OutputIterator __result) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: ; 15726: 15726: return std::__set_difference(__first1, __last1, 15726: __first2, __last2, __result, 15726: __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: # 5476 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _OutputIterator 15726: set_difference(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2, 15726: _OutputIterator __result, _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: ; 15726: 15726: return std::__set_difference(__first1, __last1, 15726: __first2, __last2, __result, 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: 15726: template 15726: 15726: _OutputIterator 15726: __set_symmetric_difference(_InputIterator1 __first1, 15726: _InputIterator1 __last1, 15726: _InputIterator2 __first2, 15726: _InputIterator2 __last2, 15726: _OutputIterator __result, 15726: _Compare __comp) 15726: { 15726: while (__first1 != __last1 && __first2 != __last2) 15726: if (__comp(__first1, __first2)) 15726: { 15726: *__result = *__first1; 15726: ++__first1; 15726: ++__result; 15726: } 15726: else if (__comp(__first2, __first1)) 15726: { 15726: *__result = *__first2; 15726: ++__first2; 15726: ++__result; 15726: } 15726: else 15726: { 15726: ++__first1; 15726: ++__first2; 15726: } 15726: return std::copy(__first2, __last2, 15726: std::copy(__first1, __last1, __result)); 15726: } 15726: # 5557 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _OutputIterator 15726: set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2, 15726: _OutputIterator __result) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: ; 15726: 15726: return std::__set_symmetric_difference(__first1, __last1, 15726: __first2, __last2, __result, 15726: __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: # 5609 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: 15726: inline _OutputIterator 15726: set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _InputIterator2 __last2, 15726: _OutputIterator __result, 15726: _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: ; 15726: ; 15726: 15726: return std::__set_symmetric_difference(__first1, __last1, 15726: __first2, __last2, __result, 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: 15726: template 15726: constexpr 15726: _ForwardIterator 15726: __min_element(_ForwardIterator __first, _ForwardIterator __last, 15726: _Compare __comp) 15726: { 15726: if (__first == __last) 15726: return __first; 15726: _ForwardIterator __result = __first; 15726: while (++__first != __last) 15726: if (__comp(__first, __result)) 15726: __result = __first; 15726: return __result; 15726: } 15726: # 5663 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: constexpr 15726: _ForwardIterator 15726: inline min_element(_ForwardIterator __first, _ForwardIterator __last) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__min_element(__first, __last, 15726: __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: # 5688 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: constexpr 15726: inline _ForwardIterator 15726: min_element(_ForwardIterator __first, _ForwardIterator __last, 15726: _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__min_element(__first, __last, 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: 15726: template 15726: constexpr 15726: _ForwardIterator 15726: __max_element(_ForwardIterator __first, _ForwardIterator __last, 15726: _Compare __comp) 15726: { 15726: if (__first == __last) return __first; 15726: _ForwardIterator __result = __first; 15726: while (++__first != __last) 15726: if (__comp(__result, __first)) 15726: __result = __first; 15726: return __result; 15726: } 15726: # 5727 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: constexpr 15726: inline _ForwardIterator 15726: max_element(_ForwardIterator __first, _ForwardIterator __last) 15726: { 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__max_element(__first, __last, 15726: __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: # 5752 "/usr/include/c++/13/bits/stl_algo.h" 3 15726: template 15726: constexpr 15726: inline _ForwardIterator 15726: max_element(_ForwardIterator __first, _ForwardIterator __last, 15726: _Compare __comp) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: ; 15726: 15726: return std::__max_element(__first, __last, 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: 15726: 15726: 15726: template 15726: constexpr 15726: inline _Tp 15726: min(initializer_list<_Tp> __l) 15726: { 15726: ; 15726: return *std::__min_element(__l.begin(), __l.end(), 15726: __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: 15726: template 15726: constexpr 15726: inline _Tp 15726: min(initializer_list<_Tp> __l, _Compare __comp) 15726: { 15726: ; 15726: return *std::__min_element(__l.begin(), __l.end(), 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: 15726: template 15726: constexpr 15726: inline _Tp 15726: max(initializer_list<_Tp> __l) 15726: { 15726: ; 15726: return *std::__max_element(__l.begin(), __l.end(), 15726: __gnu_cxx::__ops::__iter_less_iter()); 15726: } 15726: 15726: template 15726: constexpr 15726: inline _Tp 15726: max(initializer_list<_Tp> __l, _Compare __comp) 15726: { 15726: ; 15726: return *std::__max_element(__l.begin(), __l.end(), 15726: __gnu_cxx::__ops::__iter_comp_iter(__comp)); 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: _RandomAccessIterator 15726: __sample(_InputIterator __first, _InputIterator __last, input_iterator_tag, 15726: _RandomAccessIterator __out, random_access_iterator_tag, 15726: _Size __n, _UniformRandomBitGenerator&& __g) 15726: { 15726: using __distrib_type = uniform_int_distribution<_Size>; 15726: using __param_type = typename __distrib_type::param_type; 15726: __distrib_type __d{}; 15726: _Size __sample_sz = 0; 15726: while (__first != __last && __sample_sz != __n) 15726: { 15726: __out[__sample_sz++] = *__first; 15726: ++__first; 15726: } 15726: for (auto __pop_sz = __sample_sz; __first != __last; 15726: ++__first, (void) ++__pop_sz) 15726: { 15726: const auto __k = __d(__g, __param_type{0, __pop_sz}); 15726: if (__k < __n) 15726: __out[__k] = *__first; 15726: } 15726: return __out + __sample_sz; 15726: } 15726: 15726: 15726: template 15726: _OutputIterator 15726: __sample(_ForwardIterator __first, _ForwardIterator __last, 15726: forward_iterator_tag, 15726: _OutputIterator __out, _Cat, 15726: _Size __n, _UniformRandomBitGenerator&& __g) 15726: { 15726: using __distrib_type = uniform_int_distribution<_Size>; 15726: using __param_type = typename __distrib_type::param_type; 15726: using _USize = make_unsigned_t<_Size>; 15726: using _Gen = remove_reference_t<_UniformRandomBitGenerator>; 15726: using __uc_type = common_type_t; 15726: 15726: if (__first == __last) 15726: return __out; 15726: 15726: __distrib_type __d{}; 15726: _Size __unsampled_sz = std::distance(__first, __last); 15726: __n = std::min(__n, __unsampled_sz); 15726: 15726: 15726: 15726: 15726: const __uc_type __urngrange = __g.max() - __g.min(); 15726: if (__urngrange / __uc_type(__unsampled_sz) >= __uc_type(__unsampled_sz)) 15726: 15726: 15726: { 15726: while (__n != 0 && __unsampled_sz >= 2) 15726: { 15726: const pair<_Size, _Size> __p = 15726: __gen_two_uniform_ints(__unsampled_sz, __unsampled_sz - 1, __g); 15726: 15726: --__unsampled_sz; 15726: if (__p.first < __n) 15726: { 15726: *__out++ = *__first; 15726: --__n; 15726: } 15726: 15726: ++__first; 15726: 15726: if (__n == 0) break; 15726: 15726: --__unsampled_sz; 15726: if (__p.second < __n) 15726: { 15726: *__out++ = *__first; 15726: --__n; 15726: } 15726: 15726: ++__first; 15726: } 15726: } 15726: 15726: 15726: 15726: for (; __n != 0; ++__first) 15726: if (__d(__g, __param_type{0, --__unsampled_sz}) < __n) 15726: { 15726: *__out++ = *__first; 15726: --__n; 15726: } 15726: return __out; 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: _SampleIterator 15726: sample(_PopulationIterator __first, _PopulationIterator __last, 15726: _SampleIterator __out, _Distance __n, 15726: _UniformRandomBitGenerator&& __g) 15726: { 15726: using __pop_cat = typename 15726: std::iterator_traits<_PopulationIterator>::iterator_category; 15726: using __samp_cat = typename 15726: std::iterator_traits<_SampleIterator>::iterator_category; 15726: 15726: static_assert( 15726: __or_, 15726: is_convertible<__samp_cat, random_access_iterator_tag>>::value, 15726: "output range must use a RandomAccessIterator when input range" 15726: " does not meet the ForwardIterator requirements"); 15726: 15726: static_assert(is_integral<_Distance>::value, 15726: "sample size must be an integer type"); 15726: 15726: typename iterator_traits<_PopulationIterator>::difference_type __d = __n; 15726: return std:: 15726: __sample(__first, __last, __pop_cat{}, __out, __samp_cat{}, __d, 15726: std::forward<_UniformRandomBitGenerator>(__g)); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 68 "/usr/include/c++/13/functional" 2 3 15726: # 79 "/usr/include/c++/13/functional" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: template struct _Placeholder { }; 15726: # 108 "/usr/include/c++/13/functional" 3 15726: template 15726: inline invoke_result_t<_Callable, _Args...> 15726: invoke(_Callable&& __fn, _Args&&... __args) 15726: noexcept(is_nothrow_invocable_v<_Callable, _Args...>) 15726: { 15726: return std::__invoke(std::forward<_Callable>(__fn), 15726: std::forward<_Args>(__args)...); 15726: } 15726: # 141 "/usr/include/c++/13/functional" 3 15726: template::value> 15726: class _Mem_fn_base 15726: : public _Mem_fn_traits<_MemFunPtr>::__maybe_type 15726: { 15726: using _Traits = _Mem_fn_traits<_MemFunPtr>; 15726: 15726: using _Arity = typename _Traits::__arity; 15726: using _Varargs = typename _Traits::__vararg; 15726: 15726: template 15726: friend struct _Bind_check_arity; 15726: 15726: _MemFunPtr _M_pmf; 15726: 15726: public: 15726: 15726: using result_type = typename _Traits::__result_type; 15726: 15726: explicit constexpr 15726: _Mem_fn_base(_MemFunPtr __pmf) noexcept : _M_pmf(__pmf) { } 15726: 15726: template 15726: 15726: auto 15726: operator()(_Args&&... __args) const 15726: noexcept(noexcept( 15726: std::__invoke(_M_pmf, std::forward<_Args>(__args)...))) 15726: -> decltype(std::__invoke(_M_pmf, std::forward<_Args>(__args)...)) 15726: { return std::__invoke(_M_pmf, std::forward<_Args>(__args)...); } 15726: }; 15726: 15726: 15726: template 15726: class _Mem_fn_base<_MemObjPtr, false> 15726: { 15726: using _Arity = integral_constant; 15726: using _Varargs = false_type; 15726: 15726: template 15726: friend struct _Bind_check_arity; 15726: 15726: _MemObjPtr _M_pm; 15726: 15726: public: 15726: explicit constexpr 15726: _Mem_fn_base(_MemObjPtr __pm) noexcept : _M_pm(__pm) { } 15726: 15726: template 15726: 15726: auto 15726: operator()(_Tp&& __obj) const 15726: noexcept(noexcept(std::__invoke(_M_pm, std::forward<_Tp>(__obj)))) 15726: -> decltype(std::__invoke(_M_pm, std::forward<_Tp>(__obj))) 15726: { return std::__invoke(_M_pm, std::forward<_Tp>(__obj)); } 15726: }; 15726: 15726: template 15726: struct _Mem_fn; 15726: 15726: template 15726: struct _Mem_fn<_Res _Class::*> 15726: : _Mem_fn_base<_Res _Class::*> 15726: { 15726: using _Mem_fn_base<_Res _Class::*>::_Mem_fn_base; 15726: }; 15726: # 234 "/usr/include/c++/13/functional" 3 15726: template 15726: 15726: inline _Mem_fn<_Tp _Class::*> 15726: mem_fn(_Tp _Class::* __pm) noexcept 15726: { 15726: return _Mem_fn<_Tp _Class::*>(__pm); 15726: } 15726: # 253 "/usr/include/c++/13/functional" 3 15726: template 15726: struct is_bind_expression 15726: : public false_type { }; 15726: # 265 "/usr/include/c++/13/functional" 3 15726: template 15726: struct is_placeholder 15726: : public integral_constant 15726: { }; 15726: 15726: 15726: template inline constexpr bool is_bind_expression_v 15726: = is_bind_expression<_Tp>::value; 15726: template inline constexpr int is_placeholder_v 15726: = is_placeholder<_Tp>::value; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace placeholders 15726: { 15726: # 294 "/usr/include/c++/13/functional" 3 15726: inline const _Placeholder<1> _1; 15726: inline const _Placeholder<2> _2; 15726: inline const _Placeholder<3> _3; 15726: inline const _Placeholder<4> _4; 15726: inline const _Placeholder<5> _5; 15726: inline const _Placeholder<6> _6; 15726: inline const _Placeholder<7> _7; 15726: inline const _Placeholder<8> _8; 15726: inline const _Placeholder<9> _9; 15726: inline const _Placeholder<10> _10; 15726: inline const _Placeholder<11> _11; 15726: inline const _Placeholder<12> _12; 15726: inline const _Placeholder<13> _13; 15726: inline const _Placeholder<14> _14; 15726: inline const _Placeholder<15> _15; 15726: inline const _Placeholder<16> _16; 15726: inline const _Placeholder<17> _17; 15726: inline const _Placeholder<18> _18; 15726: inline const _Placeholder<19> _19; 15726: inline const _Placeholder<20> _20; 15726: inline const _Placeholder<21> _21; 15726: inline const _Placeholder<22> _22; 15726: inline const _Placeholder<23> _23; 15726: inline const _Placeholder<24> _24; 15726: inline const _Placeholder<25> _25; 15726: inline const _Placeholder<26> _26; 15726: inline const _Placeholder<27> _27; 15726: inline const _Placeholder<28> _28; 15726: inline const _Placeholder<29> _29; 15726: 15726: 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct is_placeholder<_Placeholder<_Num> > 15726: : public integral_constant 15726: { }; 15726: 15726: template 15726: struct is_placeholder > 15726: : public integral_constant 15726: { }; 15726: 15726: 15726: 15726: 15726: template 15726: using _Safe_tuple_element_t 15726: = typename enable_if<(__i < tuple_size<_Tuple>::value), 15726: tuple_element<__i, _Tuple>>::type::type; 15726: # 362 "/usr/include/c++/13/functional" 3 15726: template::value, 15726: bool _IsPlaceholder = (is_placeholder<_Arg>::value > 0)> 15726: class _Mu; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: class _Mu, false, false> 15726: { 15726: public: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: _Tp& 15726: operator()(_CVRef& __arg, _Tuple&) const volatile 15726: { return __arg.get(); } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: class _Mu<_Arg, true, false> 15726: { 15726: public: 15726: template 15726: 15726: auto 15726: operator()(_CVArg& __arg, 15726: tuple<_Args...>& __tuple) const volatile 15726: -> decltype(__arg(declval<_Args>()...)) 15726: { 15726: 15726: typedef typename _Build_index_tuple::__type 15726: _Indexes; 15726: return this->__call(__arg, __tuple, _Indexes()); 15726: } 15726: 15726: private: 15726: 15726: 15726: template 15726: 15726: auto 15726: __call(_CVArg& __arg, tuple<_Args...>& __tuple, 15726: const _Index_tuple<_Indexes...>&) const volatile 15726: -> decltype(__arg(declval<_Args>()...)) 15726: { 15726: return __arg(std::get<_Indexes>(std::move(__tuple))...); 15726: } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: class _Mu<_Arg, false, true> 15726: { 15726: public: 15726: template 15726: 15726: _Safe_tuple_element_t<(is_placeholder<_Arg>::value - 1), _Tuple>&& 15726: operator()(const volatile _Arg&, _Tuple& __tuple) const volatile 15726: { 15726: return 15726: ::std::get<(is_placeholder<_Arg>::value - 1)>(std::move(__tuple)); 15726: } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: class _Mu<_Arg, false, false> 15726: { 15726: public: 15726: template 15726: 15726: _CVArg&& 15726: operator()(_CVArg&& __arg, _Tuple&) const volatile 15726: { return std::forward<_CVArg>(__arg); } 15726: }; 15726: 15726: 15726: template 15726: inline auto 15726: __volget(volatile tuple<_Tp...>& __tuple) 15726: -> __tuple_element_t<_Ind, tuple<_Tp...>> volatile& 15726: { return std::get<_Ind>(const_cast&>(__tuple)); } 15726: 15726: 15726: template 15726: inline auto 15726: __volget(const volatile tuple<_Tp...>& __tuple) 15726: -> __tuple_element_t<_Ind, tuple<_Tp...>> const volatile& 15726: { return std::get<_Ind>(const_cast&>(__tuple)); } 15726: # 487 "/usr/include/c++/13/functional" 3 15726: template 15726: class _Bind; 15726: 15726: template 15726: class _Bind<_Functor(_Bound_args...)> 15726: : public _Weak_result_type<_Functor> 15726: { 15726: typedef typename _Build_index_tuple::__type 15726: _Bound_indexes; 15726: 15726: _Functor _M_f; 15726: tuple<_Bound_args...> _M_bound_args; 15726: 15726: 15726: template 15726: 15726: _Result 15726: __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) 15726: { 15726: return std::__invoke(_M_f, 15726: _Mu<_Bound_args>()(std::get<_Indexes>(_M_bound_args), __args)... 15726: ); 15726: } 15726: 15726: 15726: template 15726: 15726: _Result 15726: __call_c(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) const 15726: { 15726: return std::__invoke(_M_f, 15726: _Mu<_Bound_args>()(std::get<_Indexes>(_M_bound_args), __args)... 15726: ); 15726: } 15726: 15726: 15726: 15726: template 15726: _Result 15726: __call_v(tuple<_Args...>&& __args, 15726: _Index_tuple<_Indexes...>) volatile 15726: { 15726: return std::__invoke(_M_f, 15726: _Mu<_Bound_args>()(__volget<_Indexes>(_M_bound_args), __args)... 15726: ); 15726: } 15726: 15726: 15726: template 15726: _Result 15726: __call_c_v(tuple<_Args...>&& __args, 15726: _Index_tuple<_Indexes...>) const volatile 15726: { 15726: return std::__invoke(_M_f, 15726: _Mu<_Bound_args>()(__volget<_Indexes>(_M_bound_args), __args)... 15726: ); 15726: } 15726: 15726: 15726: template 15726: using _Mu_type = decltype( 15726: _Mu::type>()( 15726: std::declval<_BoundArg&>(), std::declval<_CallArgs&>()) ); 15726: 15726: template 15726: using _Res_type_impl 15726: = typename result_of< _Fn&(_Mu_type<_BArgs, _CallArgs>&&...) >::type; 15726: 15726: template 15726: using _Res_type = _Res_type_impl<_Functor, _CallArgs, _Bound_args...>; 15726: 15726: template 15726: using __dependent = typename 15726: enable_if::value+1), _Functor>::type; 15726: 15726: template class __cv_quals> 15726: using _Res_type_cv = _Res_type_impl< 15726: typename __cv_quals<__dependent<_CallArgs>>::type, 15726: _CallArgs, 15726: typename __cv_quals<_Bound_args>::type...>; 15726: 15726: public: 15726: template 15726: explicit 15726: _Bind(const _Functor& __f, _Args&&... __args) 15726: : _M_f(__f), _M_bound_args(std::forward<_Args>(__args)...) 15726: { } 15726: 15726: template 15726: explicit 15726: _Bind(_Functor&& __f, _Args&&... __args) 15726: : _M_f(std::move(__f)), _M_bound_args(std::forward<_Args>(__args)...) 15726: { } 15726: 15726: _Bind(const _Bind&) = default; 15726: _Bind(_Bind&&) = default; 15726: 15726: 15726: template>> 15726: 15726: _Result 15726: operator()(_Args&&... __args) 15726: { 15726: return this->__call<_Result>( 15726: std::forward_as_tuple(std::forward<_Args>(__args)...), 15726: _Bound_indexes()); 15726: } 15726: 15726: 15726: template, add_const>> 15726: 15726: _Result 15726: operator()(_Args&&... __args) const 15726: { 15726: return this->__call_c<_Result>( 15726: std::forward_as_tuple(std::forward<_Args>(__args)...), 15726: _Bound_indexes()); 15726: } 15726: 15726: 15726: 15726: template, add_volatile>> 15726: [[deprecated("std::bind does not support volatile in C++17")]] 15726: _Result 15726: operator()(_Args&&... __args) volatile 15726: { 15726: return this->__call_v<_Result>( 15726: std::forward_as_tuple(std::forward<_Args>(__args)...), 15726: _Bound_indexes()); 15726: } 15726: 15726: 15726: template, add_cv>> 15726: [[deprecated("std::bind does not support volatile in C++17")]] 15726: _Result 15726: operator()(_Args&&... __args) const volatile 15726: { 15726: return this->__call_c_v<_Result>( 15726: std::forward_as_tuple(std::forward<_Args>(__args)...), 15726: _Bound_indexes()); 15726: } 15726: 15726: }; 15726: 15726: 15726: template 15726: class _Bind_result; 15726: 15726: template 15726: class _Bind_result<_Result, _Functor(_Bound_args...)> 15726: { 15726: typedef typename _Build_index_tuple::__type 15726: _Bound_indexes; 15726: 15726: _Functor _M_f; 15726: tuple<_Bound_args...> _M_bound_args; 15726: 15726: 15726: template 15726: 15726: _Res 15726: __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) 15726: { 15726: return std::__invoke_r<_Res>(_M_f, _Mu<_Bound_args>() 15726: (std::get<_Indexes>(_M_bound_args), __args)...); 15726: } 15726: 15726: 15726: template 15726: 15726: _Res 15726: __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) const 15726: { 15726: return std::__invoke_r<_Res>(_M_f, _Mu<_Bound_args>() 15726: (std::get<_Indexes>(_M_bound_args), __args)...); 15726: } 15726: 15726: 15726: 15726: template 15726: _Res 15726: __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) volatile 15726: { 15726: return std::__invoke_r<_Res>(_M_f, _Mu<_Bound_args>() 15726: (__volget<_Indexes>(_M_bound_args), __args)...); 15726: } 15726: 15726: 15726: template 15726: _Res 15726: __call(tuple<_Args...>&& __args, 15726: _Index_tuple<_Indexes...>) const volatile 15726: { 15726: return std::__invoke_r<_Res>(_M_f, _Mu<_Bound_args>() 15726: (__volget<_Indexes>(_M_bound_args), __args)...); 15726: } 15726: 15726: 15726: public: 15726: typedef _Result result_type; 15726: 15726: template 15726: explicit 15726: _Bind_result(const _Functor& __f, _Args&&... __args) 15726: : _M_f(__f), _M_bound_args(std::forward<_Args>(__args)...) 15726: { } 15726: 15726: template 15726: explicit 15726: _Bind_result(_Functor&& __f, _Args&&... __args) 15726: : _M_f(std::move(__f)), _M_bound_args(std::forward<_Args>(__args)...) 15726: { } 15726: 15726: _Bind_result(const _Bind_result&) = default; 15726: _Bind_result(_Bind_result&&) = default; 15726: 15726: 15726: template 15726: 15726: result_type 15726: operator()(_Args&&... __args) 15726: { 15726: return this->__call<_Result>( 15726: std::forward_as_tuple(std::forward<_Args>(__args)...), 15726: _Bound_indexes()); 15726: } 15726: 15726: 15726: template 15726: 15726: result_type 15726: operator()(_Args&&... __args) const 15726: { 15726: return this->__call<_Result>( 15726: std::forward_as_tuple(std::forward<_Args>(__args)...), 15726: _Bound_indexes()); 15726: } 15726: 15726: 15726: 15726: template 15726: [[deprecated("std::bind does not support volatile in C++17")]] 15726: result_type 15726: operator()(_Args&&... __args) volatile 15726: { 15726: return this->__call<_Result>( 15726: std::forward_as_tuple(std::forward<_Args>(__args)...), 15726: _Bound_indexes()); 15726: } 15726: 15726: 15726: template 15726: [[deprecated("std::bind does not support volatile in C++17")]] 15726: result_type 15726: operator()(_Args&&... __args) const volatile 15726: { 15726: return this->__call<_Result>( 15726: std::forward_as_tuple(std::forward<_Args>(__args)...), 15726: _Bound_indexes()); 15726: } 15726: 15726: 15726: 15726: 15726: }; 15726: # 764 "/usr/include/c++/13/functional" 3 15726: template 15726: struct is_bind_expression<_Bind<_Signature> > 15726: : public true_type { }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct is_bind_expression > 15726: : public true_type { }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct is_bind_expression > 15726: : public true_type { }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct is_bind_expression> 15726: : public true_type { }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct is_bind_expression<_Bind_result<_Result, _Signature>> 15726: : public true_type { }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct is_bind_expression> 15726: : public true_type { }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct is_bind_expression> 15726: : public true_type { }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct is_bind_expression> 15726: : public true_type { }; 15726: 15726: template 15726: struct _Bind_check_arity { }; 15726: 15726: template 15726: struct _Bind_check_arity<_Ret (*)(_Args...), _BoundArgs...> 15726: { 15726: static_assert(sizeof...(_BoundArgs) == sizeof...(_Args), 15726: "Wrong number of arguments for function"); 15726: }; 15726: 15726: template 15726: struct _Bind_check_arity<_Ret (*)(_Args......), _BoundArgs...> 15726: { 15726: static_assert(sizeof...(_BoundArgs) >= sizeof...(_Args), 15726: "Wrong number of arguments for function"); 15726: }; 15726: 15726: template 15726: struct _Bind_check_arity<_Tp _Class::*, _BoundArgs...> 15726: { 15726: using _Arity = typename _Mem_fn<_Tp _Class::*>::_Arity; 15726: using _Varargs = typename _Mem_fn<_Tp _Class::*>::_Varargs; 15726: static_assert(_Varargs::value 15726: ? sizeof...(_BoundArgs) >= _Arity::value + 1 15726: : sizeof...(_BoundArgs) == _Arity::value + 1, 15726: "Wrong number of arguments for pointer-to-member"); 15726: }; 15726: 15726: 15726: 15726: 15726: template::type> 15726: using __is_socketlike = __or_, is_enum<_Tp2>>; 15726: 15726: template 15726: struct _Bind_helper 15726: : _Bind_check_arity::type, _BoundArgs...> 15726: { 15726: typedef typename decay<_Func>::type __func_type; 15726: typedef _Bind<__func_type(typename decay<_BoundArgs>::type...)> type; 15726: }; 15726: 15726: 15726: 15726: 15726: template 15726: struct _Bind_helper 15726: { }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline typename 15726: _Bind_helper<__is_socketlike<_Func>::value, _Func, _BoundArgs...>::type 15726: bind(_Func&& __f, _BoundArgs&&... __args) 15726: { 15726: typedef _Bind_helper __helper_type; 15726: return typename __helper_type::type(std::forward<_Func>(__f), 15726: std::forward<_BoundArgs>(__args)...); 15726: } 15726: 15726: template 15726: struct _Bindres_helper 15726: : _Bind_check_arity::type, _BoundArgs...> 15726: { 15726: typedef typename decay<_Func>::type __functor_type; 15726: typedef _Bind_result<_Result, 15726: __functor_type(typename decay<_BoundArgs>::type...)> 15726: type; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline 15726: typename _Bindres_helper<_Result, _Func, _BoundArgs...>::type 15726: bind(_Func&& __f, _BoundArgs&&... __args) 15726: { 15726: typedef _Bindres_helper<_Result, _Func, _BoundArgs...> __helper_type; 15726: return typename __helper_type::type(std::forward<_Func>(__f), 15726: std::forward<_BoundArgs>(__args)...); 15726: } 15726: # 1084 "/usr/include/c++/13/functional" 3 15726: template 15726: class _Not_fn 15726: { 15726: template 15726: using __inv_res_t = typename __invoke_result<_Fn2, _Args...>::type; 15726: 15726: template 15726: static decltype(!std::declval<_Tp>()) 15726: _S_not() noexcept(noexcept(!std::declval<_Tp>())); 15726: 15726: public: 15726: template 15726: constexpr 15726: _Not_fn(_Fn2&& __fn, int) 15726: : _M_fn(std::forward<_Fn2>(__fn)) { } 15726: 15726: _Not_fn(const _Not_fn& __fn) = default; 15726: _Not_fn(_Not_fn&& __fn) = default; 15726: ~_Not_fn() = default; 15726: # 1118 "/usr/include/c++/13/functional" 3 15726: template decltype(_S_not<__inv_res_t<_Fn &, _Args...>>()) operator()(_Args&&... __args) & noexcept(__is_nothrow_invocable<_Fn &, _Args...>::value && noexcept(_S_not<__inv_res_t<_Fn &, _Args...>>())) { return !std::__invoke(std::forward< _Fn & >(_M_fn), std::forward<_Args>(__args)...); } 15726: template decltype(_S_not<__inv_res_t<_Fn const &, _Args...>>()) operator()(_Args&&... __args) const & noexcept(__is_nothrow_invocable<_Fn const &, _Args...>::value && noexcept(_S_not<__inv_res_t<_Fn const &, _Args...>>())) { return !std::__invoke(std::forward< _Fn const & >(_M_fn), std::forward<_Args>(__args)...); } 15726: template decltype(_S_not<__inv_res_t<_Fn &&, _Args...>>()) operator()(_Args&&... __args) && noexcept(__is_nothrow_invocable<_Fn &&, _Args...>::value && noexcept(_S_not<__inv_res_t<_Fn &&, _Args...>>())) { return !std::__invoke(std::forward< _Fn && >(_M_fn), std::forward<_Args>(__args)...); } 15726: template decltype(_S_not<__inv_res_t<_Fn const &&, _Args...>>()) operator()(_Args&&... __args) const && noexcept(__is_nothrow_invocable<_Fn const &&, _Args...>::value && noexcept(_S_not<__inv_res_t<_Fn const &&, _Args...>>())) { return !std::__invoke(std::forward< _Fn const && >(_M_fn), std::forward<_Args>(__args)...); } 15726: 15726: 15726: private: 15726: _Fn _M_fn; 15726: }; 15726: 15726: template 15726: struct __is_byte_like : false_type { }; 15726: 15726: template 15726: struct __is_byte_like<_Tp, equal_to<_Tp>> 15726: : __bool_constant::value> { }; 15726: 15726: template 15726: struct __is_byte_like<_Tp, equal_to> 15726: : __bool_constant::value> { }; 15726: 15726: 15726: 15726: enum class byte : unsigned char; 15726: 15726: template<> 15726: struct __is_byte_like> 15726: : true_type { }; 15726: 15726: template<> 15726: struct __is_byte_like> 15726: : true_type { }; 15726: # 1165 "/usr/include/c++/13/functional" 3 15726: template 15726: 15726: inline auto 15726: not_fn(_Fn&& __fn) 15726: noexcept(std::is_nothrow_constructible, _Fn&&>::value) 15726: { 15726: return _Not_fn>{std::forward<_Fn>(__fn), 0}; 15726: } 15726: 15726: 15726: 15726: template> 15726: class default_searcher 15726: { 15726: public: 15726: 15726: default_searcher(_ForwardIterator1 __pat_first, 15726: _ForwardIterator1 __pat_last, 15726: _BinaryPredicate __pred = _BinaryPredicate()) 15726: : _M_m(__pat_first, __pat_last, std::move(__pred)) 15726: { } 15726: 15726: template 15726: 15726: pair<_ForwardIterator2, _ForwardIterator2> 15726: operator()(_ForwardIterator2 __first, _ForwardIterator2 __last) const 15726: { 15726: _ForwardIterator2 __first_ret = 15726: std::search(__first, __last, std::get<0>(_M_m), std::get<1>(_M_m), 15726: std::get<2>(_M_m)); 15726: auto __ret = std::make_pair(__first_ret, __first_ret); 15726: if (__ret.first != __last) 15726: std::advance(__ret.second, std::distance(std::get<0>(_M_m), 15726: std::get<1>(_M_m))); 15726: return __ret; 15726: } 15726: 15726: private: 15726: tuple<_ForwardIterator1, _ForwardIterator1, _BinaryPredicate> _M_m; 15726: }; 15726: 15726: 15726: 15726: 15726: template 15726: struct __boyer_moore_map_base 15726: { 15726: template 15726: __boyer_moore_map_base(_RAIter __pat, size_t __patlen, 15726: _Hash&& __hf, _Pred&& __pred) 15726: : _M_bad_char{ __patlen, std::move(__hf), std::move(__pred) } 15726: { 15726: if (__patlen > 0) 15726: for (__diff_type __i = 0; __i < __patlen - 1; ++__i) 15726: _M_bad_char[__pat[__i]] = __patlen - 1 - __i; 15726: } 15726: 15726: using __diff_type = _Tp; 15726: 15726: __diff_type 15726: _M_lookup(_Key __key, __diff_type __not_found) const 15726: { 15726: auto __iter = _M_bad_char.find(__key); 15726: if (__iter == _M_bad_char.end()) 15726: return __not_found; 15726: return __iter->second; 15726: } 15726: 15726: _Pred 15726: _M_pred() const { return _M_bad_char.key_eq(); } 15726: 15726: std::unordered_map<_Key, _Tp, _Hash, _Pred> _M_bad_char; 15726: }; 15726: 15726: template 15726: struct __boyer_moore_array_base 15726: { 15726: template 15726: __boyer_moore_array_base(_RAIter __pat, size_t __patlen, 15726: _Unused&&, _Pred&& __pred) 15726: : _M_bad_char{ array<_Tp, _Len>{}, std::move(__pred) } 15726: { 15726: std::get<0>(_M_bad_char).fill(__patlen); 15726: if (__patlen > 0) 15726: for (__diff_type __i = 0; __i < __patlen - 1; ++__i) 15726: { 15726: auto __ch = __pat[__i]; 15726: using _UCh = make_unsigned_t; 15726: auto __uch = static_cast<_UCh>(__ch); 15726: std::get<0>(_M_bad_char)[__uch] = __patlen - 1 - __i; 15726: } 15726: } 15726: 15726: using __diff_type = _Tp; 15726: 15726: template 15726: __diff_type 15726: _M_lookup(_Key __key, __diff_type __not_found) const 15726: { 15726: auto __ukey = static_cast>(__key); 15726: if (__ukey >= _Len) 15726: return __not_found; 15726: return std::get<0>(_M_bad_char)[__ukey]; 15726: } 15726: 15726: const _Pred& 15726: _M_pred() const { return std::get<1>(_M_bad_char); } 15726: 15726: tuple, _Pred> _M_bad_char; 15726: }; 15726: 15726: 15726: 15726: template::value_type, 15726: typename _Diff = typename iterator_traits<_RAIter>::difference_type> 15726: using __boyer_moore_base_t 15726: = __conditional_t<__is_byte_like<_Val, _Pred>::value, 15726: __boyer_moore_array_base<_Diff, 256, _Pred>, 15726: __boyer_moore_map_base<_Val, _Diff, _Hash, _Pred>>; 15726: 15726: template::value_type>, 15726: typename _BinaryPredicate = equal_to<>> 15726: class boyer_moore_searcher 15726: : __boyer_moore_base_t<_RAIter, _Hash, _BinaryPredicate> 15726: { 15726: using _Base = __boyer_moore_base_t<_RAIter, _Hash, _BinaryPredicate>; 15726: using typename _Base::__diff_type; 15726: 15726: public: 15726: boyer_moore_searcher(_RAIter __pat_first, _RAIter __pat_last, 15726: _Hash __hf = _Hash(), 15726: _BinaryPredicate __pred = _BinaryPredicate()); 15726: 15726: template 15726: pair<_RandomAccessIterator2, _RandomAccessIterator2> 15726: operator()(_RandomAccessIterator2 __first, 15726: _RandomAccessIterator2 __last) const; 15726: 15726: private: 15726: bool 15726: _M_is_prefix(_RAIter __word, __diff_type __len, 15726: __diff_type __pos) 15726: { 15726: const auto& __pred = this->_M_pred(); 15726: __diff_type __suffixlen = __len - __pos; 15726: for (__diff_type __i = 0; __i < __suffixlen; ++__i) 15726: if (!__pred(__word[__i], __word[__pos + __i])) 15726: return false; 15726: return true; 15726: } 15726: 15726: __diff_type 15726: _M_suffix_length(_RAIter __word, __diff_type __len, 15726: __diff_type __pos) 15726: { 15726: const auto& __pred = this->_M_pred(); 15726: __diff_type __i = 0; 15726: while (__pred(__word[__pos - __i], __word[__len - 1 - __i]) 15726: && __i < __pos) 15726: { 15726: ++__i; 15726: } 15726: return __i; 15726: } 15726: 15726: template 15726: __diff_type 15726: _M_bad_char_shift(_Tp __c) const 15726: { return this->_M_lookup(__c, _M_pat_end - _M_pat); } 15726: 15726: _RAIter _M_pat; 15726: _RAIter _M_pat_end; 15726: std::vector<__diff_type> _M_good_suffix; 15726: }; 15726: 15726: template::value_type>, 15726: typename _BinaryPredicate = equal_to<>> 15726: class boyer_moore_horspool_searcher 15726: : __boyer_moore_base_t<_RAIter, _Hash, _BinaryPredicate> 15726: { 15726: using _Base = __boyer_moore_base_t<_RAIter, _Hash, _BinaryPredicate>; 15726: using typename _Base::__diff_type; 15726: 15726: public: 15726: boyer_moore_horspool_searcher(_RAIter __pat, 15726: _RAIter __pat_end, 15726: _Hash __hf = _Hash(), 15726: _BinaryPredicate __pred 15726: = _BinaryPredicate()) 15726: : _Base(__pat, __pat_end - __pat, std::move(__hf), std::move(__pred)), 15726: _M_pat(__pat), _M_pat_end(__pat_end) 15726: { } 15726: 15726: template 15726: pair<_RandomAccessIterator2, _RandomAccessIterator2> 15726: operator()(_RandomAccessIterator2 __first, 15726: _RandomAccessIterator2 __last) const 15726: { 15726: const auto& __pred = this->_M_pred(); 15726: auto __patlen = _M_pat_end - _M_pat; 15726: if (__patlen == 0) 15726: return std::make_pair(__first, __first); 15726: auto __len = __last - __first; 15726: while (__len >= __patlen) 15726: { 15726: for (auto __scan = __patlen - 1; 15726: __pred(__first[__scan], _M_pat[__scan]); --__scan) 15726: if (__scan == 0) 15726: return std::make_pair(__first, __first + __patlen); 15726: auto __shift = _M_bad_char_shift(__first[__patlen - 1]); 15726: __len -= __shift; 15726: __first += __shift; 15726: } 15726: return std::make_pair(__last, __last); 15726: } 15726: 15726: private: 15726: template 15726: __diff_type 15726: _M_bad_char_shift(_Tp __c) const 15726: { return this->_M_lookup(__c, _M_pat_end - _M_pat); } 15726: 15726: _RAIter _M_pat; 15726: _RAIter _M_pat_end; 15726: }; 15726: 15726: template 15726: boyer_moore_searcher<_RAIter, _Hash, _BinaryPredicate>:: 15726: boyer_moore_searcher(_RAIter __pat, _RAIter __pat_end, 15726: _Hash __hf, _BinaryPredicate __pred) 15726: : _Base(__pat, __pat_end - __pat, std::move(__hf), std::move(__pred)), 15726: _M_pat(__pat), _M_pat_end(__pat_end), _M_good_suffix(__pat_end - __pat) 15726: { 15726: auto __patlen = __pat_end - __pat; 15726: if (__patlen == 0) 15726: return; 15726: __diff_type __last_prefix = __patlen - 1; 15726: for (__diff_type __p = __patlen - 1; __p >= 0; --__p) 15726: { 15726: if (_M_is_prefix(__pat, __patlen, __p + 1)) 15726: __last_prefix = __p + 1; 15726: _M_good_suffix[__p] = __last_prefix + (__patlen - 1 - __p); 15726: } 15726: for (__diff_type __p = 0; __p < __patlen - 1; ++__p) 15726: { 15726: auto __slen = _M_suffix_length(__pat, __patlen, __p); 15726: auto __pos = __patlen - 1 - __slen; 15726: if (!__pred(__pat[__p - __slen], __pat[__pos])) 15726: _M_good_suffix[__pos] = __patlen - 1 - __p + __slen; 15726: } 15726: } 15726: 15726: template 15726: template 15726: pair<_RandomAccessIterator2, _RandomAccessIterator2> 15726: boyer_moore_searcher<_RAIter, _Hash, _BinaryPredicate>:: 15726: operator()(_RandomAccessIterator2 __first, 15726: _RandomAccessIterator2 __last) const 15726: { 15726: auto __patlen = _M_pat_end - _M_pat; 15726: if (__patlen == 0) 15726: return std::make_pair(__first, __first); 15726: const auto& __pred = this->_M_pred(); 15726: __diff_type __i = __patlen - 1; 15726: auto __stringlen = __last - __first; 15726: while (__i < __stringlen) 15726: { 15726: __diff_type __j = __patlen - 1; 15726: while (__j >= 0 && __pred(__first[__i], _M_pat[__j])) 15726: { 15726: --__i; 15726: --__j; 15726: } 15726: if (__j < 0) 15726: { 15726: const auto __match = __first + __i + 1; 15726: return std::make_pair(__match, __match + __patlen); 15726: } 15726: __i += std::max(_M_bad_char_shift(__first[__i]), 15726: _M_good_suffix[__j]); 15726: } 15726: return std::make_pair(__last, __last); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 14 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 15726: # 1 "/usr/include/c++/13/memory" 1 3 15726: # 47 "/usr/include/c++/13/memory" 3 15726: 15726: # 48 "/usr/include/c++/13/memory" 3 15726: # 70 "/usr/include/c++/13/memory" 3 15726: # 1 "/usr/include/c++/13/bits/stl_raw_storage_iter.h" 1 3 15726: # 59 "/usr/include/c++/13/bits/stl_raw_storage_iter.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: # 64 "/usr/include/c++/13/bits/stl_raw_storage_iter.h" 3 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: 15726: 15726: 15726: 15726: 15726: template 15726: class [[__deprecated__]] raw_storage_iterator 15726: : public iterator 15726: { 15726: protected: 15726: _OutputIterator _M_iter; 15726: 15726: public: 15726: explicit 15726: raw_storage_iterator(_OutputIterator __x) 15726: : _M_iter(__x) {} 15726: 15726: raw_storage_iterator& 15726: operator*() { return *this; } 15726: 15726: raw_storage_iterator& 15726: operator=(const _Tp& __element) 15726: { 15726: std::_Construct(std::__addressof(*_M_iter), __element); 15726: return *this; 15726: } 15726: 15726: 15726: 15726: 15726: raw_storage_iterator& 15726: operator=(_Tp&& __element) 15726: { 15726: std::_Construct(std::__addressof(*_M_iter), std::move(__element)); 15726: return *this; 15726: } 15726: 15726: 15726: raw_storage_iterator& 15726: operator++() 15726: { 15726: ++_M_iter; 15726: return *this; 15726: } 15726: 15726: raw_storage_iterator 15726: operator++(int) 15726: { 15726: raw_storage_iterator __tmp = *this; 15726: ++_M_iter; 15726: return __tmp; 15726: } 15726: 15726: 15726: 15726: _OutputIterator base() const { return _M_iter; } 15726: }; 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: } 15726: # 71 "/usr/include/c++/13/memory" 2 3 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/align.h" 1 3 15726: # 39 "/usr/include/c++/13/bits/align.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 61 "/usr/include/c++/13/bits/align.h" 3 15726: inline void* 15726: align(size_t __align, size_t __size, void*& __ptr, size_t& __space) noexcept 15726: { 15726: if (__space < __size) 15726: return nullptr; 15726: const auto __intptr = reinterpret_cast(__ptr); 15726: const auto __aligned = (__intptr - 1u + __align) & -__align; 15726: const auto __diff = __aligned - __intptr; 15726: if (__diff > (__space - __size)) 15726: return nullptr; 15726: else 15726: { 15726: __space -= __diff; 15726: return __ptr = reinterpret_cast(__aligned); 15726: } 15726: } 15726: # 108 "/usr/include/c++/13/bits/align.h" 3 15726: 15726: } 15726: # 75 "/usr/include/c++/13/memory" 2 3 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/unique_ptr.h" 1 3 15726: # 53 "/usr/include/c++/13/bits/unique_ptr.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 63 "/usr/include/c++/13/bits/unique_ptr.h" 3 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: template class auto_ptr; 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct default_delete 15726: { 15726: 15726: constexpr default_delete() noexcept = default; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template>> 15726: 15726: default_delete(const default_delete<_Up>&) noexcept { } 15726: 15726: 15726: 15726: void 15726: operator()(_Tp* __ptr) const 15726: { 15726: static_assert(!is_void<_Tp>::value, 15726: "can't delete pointer to incomplete type"); 15726: static_assert(sizeof(_Tp)>0, 15726: "can't delete pointer to incomplete type"); 15726: delete __ptr; 15726: } 15726: }; 15726: # 111 "/usr/include/c++/13/bits/unique_ptr.h" 3 15726: template 15726: struct default_delete<_Tp[]> 15726: { 15726: public: 15726: 15726: constexpr default_delete() noexcept = default; 15726: # 127 "/usr/include/c++/13/bits/unique_ptr.h" 3 15726: template>> 15726: 15726: default_delete(const default_delete<_Up[]>&) noexcept { } 15726: 15726: 15726: template 15726: 15726: typename enable_if::value>::type 15726: operator()(_Up* __ptr) const 15726: { 15726: static_assert(sizeof(_Tp)>0, 15726: "can't delete pointer to incomplete type"); 15726: delete [] __ptr; 15726: } 15726: }; 15726: 15726: 15726: 15726: 15726: template 15726: class __uniq_ptr_impl 15726: { 15726: template 15726: struct _Ptr 15726: { 15726: using type = _Up*; 15726: }; 15726: 15726: template 15726: struct 15726: _Ptr<_Up, _Ep, __void_t::type::pointer>> 15726: { 15726: using type = typename remove_reference<_Ep>::type::pointer; 15726: }; 15726: 15726: public: 15726: using _DeleterConstraint = enable_if< 15726: __and_<__not_>, 15726: is_default_constructible<_Dp>>::value>; 15726: 15726: using pointer = typename _Ptr<_Tp, _Dp>::type; 15726: 15726: static_assert( !is_rvalue_reference<_Dp>::value, 15726: "unique_ptr's deleter type must be a function object type" 15726: " or an lvalue reference type" ); 15726: 15726: __uniq_ptr_impl() = default; 15726: 15726: __uniq_ptr_impl(pointer __p) : _M_t() { _M_ptr() = __p; } 15726: 15726: template 15726: 15726: __uniq_ptr_impl(pointer __p, _Del&& __d) 15726: : _M_t(__p, std::forward<_Del>(__d)) { } 15726: 15726: 15726: __uniq_ptr_impl(__uniq_ptr_impl&& __u) noexcept 15726: : _M_t(std::move(__u._M_t)) 15726: { __u._M_ptr() = nullptr; } 15726: 15726: 15726: __uniq_ptr_impl& operator=(__uniq_ptr_impl&& __u) noexcept 15726: { 15726: reset(__u.release()); 15726: _M_deleter() = std::forward<_Dp>(__u._M_deleter()); 15726: return *this; 15726: } 15726: 15726: 15726: pointer& _M_ptr() noexcept { return std::get<0>(_M_t); } 15726: 15726: pointer _M_ptr() const noexcept { return std::get<0>(_M_t); } 15726: 15726: _Dp& _M_deleter() noexcept { return std::get<1>(_M_t); } 15726: 15726: const _Dp& _M_deleter() const noexcept { return std::get<1>(_M_t); } 15726: 15726: 15726: void reset(pointer __p) noexcept 15726: { 15726: const pointer __old_p = _M_ptr(); 15726: _M_ptr() = __p; 15726: if (__old_p) 15726: _M_deleter()(__old_p); 15726: } 15726: 15726: 15726: pointer release() noexcept 15726: { 15726: pointer __p = _M_ptr(); 15726: _M_ptr() = nullptr; 15726: return __p; 15726: } 15726: 15726: 15726: void 15726: swap(__uniq_ptr_impl& __rhs) noexcept 15726: { 15726: using std::swap; 15726: swap(this->_M_ptr(), __rhs._M_ptr()); 15726: swap(this->_M_deleter(), __rhs._M_deleter()); 15726: } 15726: 15726: private: 15726: tuple _M_t; 15726: }; 15726: 15726: 15726: template ::value, 15726: bool = is_move_assignable<_Dp>::value> 15726: struct __uniq_ptr_data : __uniq_ptr_impl<_Tp, _Dp> 15726: { 15726: using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl; 15726: __uniq_ptr_data(__uniq_ptr_data&&) = default; 15726: __uniq_ptr_data& operator=(__uniq_ptr_data&&) = default; 15726: }; 15726: 15726: template 15726: struct __uniq_ptr_data<_Tp, _Dp, true, false> : __uniq_ptr_impl<_Tp, _Dp> 15726: { 15726: using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl; 15726: __uniq_ptr_data(__uniq_ptr_data&&) = default; 15726: __uniq_ptr_data& operator=(__uniq_ptr_data&&) = delete; 15726: }; 15726: 15726: template 15726: struct __uniq_ptr_data<_Tp, _Dp, false, true> : __uniq_ptr_impl<_Tp, _Dp> 15726: { 15726: using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl; 15726: __uniq_ptr_data(__uniq_ptr_data&&) = delete; 15726: __uniq_ptr_data& operator=(__uniq_ptr_data&&) = default; 15726: }; 15726: 15726: template 15726: struct __uniq_ptr_data<_Tp, _Dp, false, false> : __uniq_ptr_impl<_Tp, _Dp> 15726: { 15726: using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl; 15726: __uniq_ptr_data(__uniq_ptr_data&&) = delete; 15726: __uniq_ptr_data& operator=(__uniq_ptr_data&&) = delete; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template > 15726: class unique_ptr 15726: { 15726: template 15726: using _DeleterConstraint = 15726: typename __uniq_ptr_impl<_Tp, _Up>::_DeleterConstraint::type; 15726: 15726: __uniq_ptr_data<_Tp, _Dp> _M_t; 15726: 15726: public: 15726: using pointer = typename __uniq_ptr_impl<_Tp, _Dp>::pointer; 15726: using element_type = _Tp; 15726: using deleter_type = _Dp; 15726: 15726: private: 15726: 15726: 15726: template 15726: using __safe_conversion_up = __and_< 15726: is_convertible::pointer, pointer>, 15726: __not_> 15726: >; 15726: 15726: public: 15726: 15726: 15726: 15726: template> 15726: constexpr unique_ptr() noexcept 15726: : _M_t() 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template> 15726: 15726: explicit 15726: unique_ptr(pointer __p) noexcept 15726: : _M_t(__p) 15726: { } 15726: # 328 "/usr/include/c++/13/bits/unique_ptr.h" 3 15726: template>> 15726: 15726: unique_ptr(pointer __p, const deleter_type& __d) noexcept 15726: : _M_t(__p, __d) { } 15726: # 341 "/usr/include/c++/13/bits/unique_ptr.h" 3 15726: template>> 15726: 15726: unique_ptr(pointer __p, 15726: __enable_if_t::value, 15726: _Del&&> __d) noexcept 15726: : _M_t(__p, std::move(__d)) 15726: { } 15726: 15726: template::type> 15726: 15726: unique_ptr(pointer, 15726: __enable_if_t::value, 15726: _DelUnref&&>) = delete; 15726: 15726: 15726: template> 15726: constexpr unique_ptr(nullptr_t) noexcept 15726: : _M_t() 15726: { } 15726: 15726: 15726: 15726: 15726: unique_ptr(unique_ptr&&) = default; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template, 15726: __conditional_t::value, 15726: is_same<_Ep, _Dp>, 15726: is_convertible<_Ep, _Dp>>>> 15726: 15726: unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept 15726: : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter())) 15726: { } 15726: 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: 15726: template, is_same<_Dp, default_delete<_Tp>>>> 15726: unique_ptr(auto_ptr<_Up>&& __u) noexcept; 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: 15726: 15726: 15726: 15726: ~unique_ptr() noexcept 15726: { 15726: static_assert(__is_invocable::value, 15726: "unique_ptr's deleter must be invocable with a pointer"); 15726: auto& __ptr = _M_t._M_ptr(); 15726: if (__ptr != nullptr) 15726: get_deleter()(std::move(__ptr)); 15726: __ptr = pointer(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: unique_ptr& operator=(unique_ptr&&) = default; 15726: # 423 "/usr/include/c++/13/bits/unique_ptr.h" 3 15726: template 15726: 15726: typename enable_if< __and_< 15726: __safe_conversion_up<_Up, _Ep>, 15726: is_assignable 15726: >::value, 15726: unique_ptr&>::type 15726: operator=(unique_ptr<_Up, _Ep>&& __u) noexcept 15726: { 15726: reset(__u.release()); 15726: get_deleter() = std::forward<_Ep>(__u.get_deleter()); 15726: return *this; 15726: } 15726: 15726: 15726: 15726: unique_ptr& 15726: operator=(nullptr_t) noexcept 15726: { 15726: reset(); 15726: return *this; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: typename add_lvalue_reference::type 15726: operator*() const noexcept(noexcept(*std::declval())) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(get() != pointer())) __builtin_unreachable(); } while (false); 15726: return *get(); 15726: } 15726: 15726: 15726: 15726: pointer 15726: operator->() const noexcept 15726: { 15726: ; 15726: return get(); 15726: } 15726: 15726: 15726: 15726: pointer 15726: get() const noexcept 15726: { return _M_t._M_ptr(); } 15726: 15726: 15726: 15726: deleter_type& 15726: get_deleter() noexcept 15726: { return _M_t._M_deleter(); } 15726: 15726: 15726: 15726: const deleter_type& 15726: get_deleter() const noexcept 15726: { return _M_t._M_deleter(); } 15726: 15726: 15726: 15726: explicit operator bool() const noexcept 15726: { return get() == pointer() ? false : true; } 15726: 15726: 15726: 15726: 15726: 15726: pointer 15726: release() noexcept 15726: { return _M_t.release(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: reset(pointer __p = pointer()) noexcept 15726: { 15726: static_assert(__is_invocable::value, 15726: "unique_ptr's deleter must be invocable with a pointer"); 15726: _M_t.reset(std::move(__p)); 15726: } 15726: 15726: 15726: 15726: void 15726: swap(unique_ptr& __u) noexcept 15726: { 15726: static_assert(__is_swappable<_Dp>::value, "deleter must be swappable"); 15726: _M_t.swap(__u._M_t); 15726: } 15726: 15726: 15726: unique_ptr(const unique_ptr&) = delete; 15726: unique_ptr& operator=(const unique_ptr&) = delete; 15726: }; 15726: # 534 "/usr/include/c++/13/bits/unique_ptr.h" 3 15726: template 15726: class unique_ptr<_Tp[], _Dp> 15726: { 15726: template 15726: using _DeleterConstraint = 15726: typename __uniq_ptr_impl<_Tp, _Up>::_DeleterConstraint::type; 15726: 15726: __uniq_ptr_data<_Tp, _Dp> _M_t; 15726: 15726: 15726: template 15726: using __is_derived_Tp 15726: = __and_< is_base_of<_Tp, _Up>, 15726: __not_, __remove_cv_t<_Up>>> >; 15726: 15726: public: 15726: using pointer = typename __uniq_ptr_impl<_Tp, _Dp>::pointer; 15726: using element_type = _Tp; 15726: using deleter_type = _Dp; 15726: 15726: 15726: 15726: template, 15726: typename _UP_pointer = typename _UPtr::pointer, 15726: typename _UP_element_type = typename _UPtr::element_type> 15726: using __safe_conversion_up = __and_< 15726: is_array<_Up>, 15726: is_same, 15726: is_same<_UP_pointer, _UP_element_type*>, 15726: is_convertible<_UP_element_type(*)[], element_type(*)[]> 15726: >; 15726: 15726: 15726: template 15726: using __safe_conversion_raw = __and_< 15726: __or_<__or_, 15726: is_same<_Up, nullptr_t>>, 15726: __and_, 15726: is_same, 15726: is_convertible< 15726: typename remove_pointer<_Up>::type(*)[], 15726: element_type(*)[]> 15726: > 15726: > 15726: >; 15726: 15726: 15726: 15726: 15726: template> 15726: constexpr unique_ptr() noexcept 15726: : _M_t() 15726: { } 15726: # 596 "/usr/include/c++/13/bits/unique_ptr.h" 3 15726: template, 15726: typename = typename enable_if< 15726: __safe_conversion_raw<_Up>::value, bool>::type> 15726: 15726: explicit 15726: unique_ptr(_Up __p) noexcept 15726: : _M_t(__p) 15726: { } 15726: # 615 "/usr/include/c++/13/bits/unique_ptr.h" 3 15726: template, 15726: is_copy_constructible<_Del>>> 15726: 15726: unique_ptr(_Up __p, const deleter_type& __d) noexcept 15726: : _M_t(__p, __d) { } 15726: # 630 "/usr/include/c++/13/bits/unique_ptr.h" 3 15726: template, 15726: is_move_constructible<_Del>>> 15726: 15726: unique_ptr(_Up __p, 15726: __enable_if_t::value, 15726: _Del&&> __d) noexcept 15726: : _M_t(std::move(__p), std::move(__d)) 15726: { } 15726: 15726: template::type, 15726: typename = _Require<__safe_conversion_raw<_Up>>> 15726: unique_ptr(_Up, 15726: __enable_if_t::value, 15726: _DelUnref&&>) = delete; 15726: 15726: 15726: unique_ptr(unique_ptr&&) = default; 15726: 15726: 15726: template> 15726: constexpr unique_ptr(nullptr_t) noexcept 15726: : _M_t() 15726: { } 15726: 15726: template, 15726: __conditional_t::value, 15726: is_same<_Ep, _Dp>, 15726: is_convertible<_Ep, _Dp>>>> 15726: 15726: unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept 15726: : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter())) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: ~unique_ptr() 15726: { 15726: auto& __ptr = _M_t._M_ptr(); 15726: if (__ptr != nullptr) 15726: get_deleter()(__ptr); 15726: __ptr = pointer(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: unique_ptr& 15726: operator=(unique_ptr&&) = default; 15726: # 694 "/usr/include/c++/13/bits/unique_ptr.h" 3 15726: template 15726: 15726: typename 15726: enable_if<__and_<__safe_conversion_up<_Up, _Ep>, 15726: is_assignable 15726: >::value, 15726: unique_ptr&>::type 15726: operator=(unique_ptr<_Up, _Ep>&& __u) noexcept 15726: { 15726: reset(__u.release()); 15726: get_deleter() = std::forward<_Ep>(__u.get_deleter()); 15726: return *this; 15726: } 15726: 15726: 15726: 15726: unique_ptr& 15726: operator=(nullptr_t) noexcept 15726: { 15726: reset(); 15726: return *this; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: typename std::add_lvalue_reference::type 15726: operator[](size_t __i) const 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(get() != pointer())) __builtin_unreachable(); } while (false); 15726: return get()[__i]; 15726: } 15726: 15726: 15726: 15726: pointer 15726: get() const noexcept 15726: { return _M_t._M_ptr(); } 15726: 15726: 15726: 15726: deleter_type& 15726: get_deleter() noexcept 15726: { return _M_t._M_deleter(); } 15726: 15726: 15726: 15726: const deleter_type& 15726: get_deleter() const noexcept 15726: { return _M_t._M_deleter(); } 15726: 15726: 15726: 15726: explicit operator bool() const noexcept 15726: { return get() == pointer() ? false : true; } 15726: 15726: 15726: 15726: 15726: 15726: pointer 15726: release() noexcept 15726: { return _M_t.release(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template , 15726: __and_, 15726: is_pointer<_Up>, 15726: is_convertible< 15726: typename remove_pointer<_Up>::type(*)[], 15726: element_type(*)[] 15726: > 15726: > 15726: > 15726: >> 15726: 15726: void 15726: reset(_Up __p) noexcept 15726: { _M_t.reset(std::move(__p)); } 15726: 15726: 15726: void reset(nullptr_t = nullptr) noexcept 15726: { reset(pointer()); } 15726: 15726: 15726: 15726: void 15726: swap(unique_ptr& __u) noexcept 15726: { 15726: static_assert(__is_swappable<_Dp>::value, "deleter must be swappable"); 15726: _M_t.swap(__u._M_t); 15726: } 15726: 15726: 15726: unique_ptr(const unique_ptr&) = delete; 15726: unique_ptr& operator=(const unique_ptr&) = delete; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline 15726: 15726: 15726: 15726: typename enable_if<__is_swappable<_Dp>::value>::type 15726: 15726: 15726: 15726: swap(unique_ptr<_Tp, _Dp>& __x, 15726: unique_ptr<_Tp, _Dp>& __y) noexcept 15726: { __x.swap(__y); } 15726: 15726: 15726: template 15726: typename enable_if::value>::type 15726: swap(unique_ptr<_Tp, _Dp>&, 15726: unique_ptr<_Tp, _Dp>&) = delete; 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator==(const unique_ptr<_Tp, _Dp>& __x, 15726: const unique_ptr<_Up, _Ep>& __y) 15726: { return __x.get() == __y.get(); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator==(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept 15726: { return !__x; } 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator==(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept 15726: { return !__x; } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator!=(const unique_ptr<_Tp, _Dp>& __x, 15726: const unique_ptr<_Up, _Ep>& __y) 15726: { return __x.get() != __y.get(); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator!=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept 15726: { return (bool)__x; } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator!=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept 15726: { return (bool)__x; } 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<(const unique_ptr<_Tp, _Dp>& __x, 15726: const unique_ptr<_Up, _Ep>& __y) 15726: { 15726: typedef typename 15726: std::common_type::pointer, 15726: typename unique_ptr<_Up, _Ep>::pointer>::type _CT; 15726: return std::less<_CT>()(__x.get(), __y.get()); 15726: } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) 15726: { 15726: return std::less::pointer>()(__x.get(), 15726: nullptr); 15726: } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) 15726: { 15726: return std::less::pointer>()(nullptr, 15726: __x.get()); 15726: } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<=(const unique_ptr<_Tp, _Dp>& __x, 15726: const unique_ptr<_Up, _Ep>& __y) 15726: { return !(__y < __x); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) 15726: { return !(nullptr < __x); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) 15726: { return !(__x < nullptr); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator>(const unique_ptr<_Tp, _Dp>& __x, 15726: const unique_ptr<_Up, _Ep>& __y) 15726: { return (__y < __x); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator>(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) 15726: { 15726: return std::less::pointer>()(nullptr, 15726: __x.get()); 15726: } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator>(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) 15726: { 15726: return std::less::pointer>()(__x.get(), 15726: nullptr); 15726: } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator>=(const unique_ptr<_Tp, _Dp>& __x, 15726: const unique_ptr<_Up, _Ep>& __y) 15726: { return !(__x < __y); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator>=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) 15726: { return !(__x < nullptr); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] inline bool 15726: operator>=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) 15726: { return !(nullptr < __x); } 15726: # 1006 "/usr/include/c++/13/bits/unique_ptr.h" 3 15726: template::__enable_hash_call> 15726: struct __uniq_ptr_hash 15726: 15726: : private __poison_hash<_Ptr> 15726: 15726: { 15726: size_t 15726: operator()(const _Up& __u) const 15726: noexcept(noexcept(std::declval>()(std::declval<_Ptr>()))) 15726: { return hash<_Ptr>()(__u.get()); } 15726: }; 15726: 15726: template 15726: struct __uniq_ptr_hash<_Up, _Ptr, false> 15726: : private __poison_hash<_Ptr> 15726: { }; 15726: 15726: 15726: 15726: template 15726: struct hash> 15726: : public __hash_base>, 15726: public __uniq_ptr_hash> 15726: { }; 15726: 15726: 15726: 15726: 15726: 15726: namespace __detail 15726: { 15726: template 15726: struct _MakeUniq 15726: { typedef unique_ptr<_Tp> __single_object; }; 15726: 15726: template 15726: struct _MakeUniq<_Tp[]> 15726: { typedef unique_ptr<_Tp[]> __array; }; 15726: 15726: template 15726: struct _MakeUniq<_Tp[_Bound]> 15726: { struct __invalid_type { }; }; 15726: 15726: template 15726: using __unique_ptr_t = typename _MakeUniq<_Tp>::__single_object; 15726: template 15726: using __unique_ptr_array_t = typename _MakeUniq<_Tp>::__array; 15726: template 15726: using __invalid_make_unique_t = typename _MakeUniq<_Tp>::__invalid_type; 15726: } 15726: # 1066 "/usr/include/c++/13/bits/unique_ptr.h" 3 15726: template 15726: 15726: inline __detail::__unique_ptr_t<_Tp> 15726: make_unique(_Args&&... __args) 15726: { return unique_ptr<_Tp>(new _Tp(std::forward<_Args>(__args)...)); } 15726: # 1081 "/usr/include/c++/13/bits/unique_ptr.h" 3 15726: template 15726: 15726: inline __detail::__unique_ptr_array_t<_Tp> 15726: make_unique(size_t __num) 15726: { return unique_ptr<_Tp>(new remove_extent_t<_Tp>[__num]()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: __detail::__invalid_make_unique_t<_Tp> 15726: make_unique(_Args&&...) = delete; 15726: # 1154 "/usr/include/c++/13/bits/unique_ptr.h" 3 15726: namespace __detail::__variant 15726: { 15726: template struct _Never_valueless_alt; 15726: 15726: 15726: 15726: template 15726: struct _Never_valueless_alt> 15726: : std::true_type 15726: { }; 15726: } 15726: 15726: 15726: 15726: } 15726: # 79 "/usr/include/c++/13/memory" 2 3 15726: 15726: # 1 "/usr/include/c++/13/bits/shared_ptr.h" 1 3 15726: # 52 "/usr/include/c++/13/bits/shared_ptr.h" 3 15726: # 1 "/usr/include/c++/13/iosfwd" 1 3 15726: # 36 "/usr/include/c++/13/iosfwd" 3 15726: 15726: # 37 "/usr/include/c++/13/iosfwd" 3 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/stringfwd.h" 1 3 15726: # 37 "/usr/include/c++/13/bits/stringfwd.h" 3 15726: 15726: # 38 "/usr/include/c++/13/bits/stringfwd.h" 3 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct char_traits; 15726: 15726: template<> struct char_traits; 15726: 15726: template<> struct char_traits; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template<> struct char_traits; 15726: template<> struct char_traits; 15726: 15726: 15726: namespace __cxx11 { 15726: 15726: template, 15726: typename _Alloc = allocator<_CharT> > 15726: class basic_string; 15726: 15726: } 15726: 15726: 15726: typedef basic_string string; 15726: 15726: 15726: typedef basic_string wstring; 15726: # 89 "/usr/include/c++/13/bits/stringfwd.h" 3 15726: typedef basic_string u16string; 15726: 15726: 15726: typedef basic_string u32string; 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 42 "/usr/include/c++/13/iosfwd" 2 3 15726: # 1 "/usr/include/c++/13/bits/postypes.h" 1 3 15726: # 38 "/usr/include/c++/13/bits/postypes.h" 3 15726: 15726: # 39 "/usr/include/c++/13/bits/postypes.h" 3 15726: 15726: # 1 "/usr/include/c++/13/cwchar" 1 3 15726: # 39 "/usr/include/c++/13/cwchar" 3 15726: 15726: # 40 "/usr/include/c++/13/cwchar" 3 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/wchar.h" 1 3 4 15726: # 27 "/usr/include/wchar.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 15726: # 28 "/usr/include/wchar.h" 2 3 4 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/floatn.h" 1 3 4 15726: # 31 "/usr/include/wchar.h" 2 3 4 15726: 15726: 15726: 15726: 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 36 "/usr/include/wchar.h" 2 3 4 15726: 15726: 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stdarg.h" 1 3 4 15726: # 40 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stdarg.h" 3 4 15726: typedef __builtin_va_list __gnuc_va_list; 15726: # 39 "/usr/include/wchar.h" 2 3 4 15726: 15726: 15726: 15726: 15726: typedef __gnuc_va_list va_list; 15726: # 52 "/usr/include/wchar.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/wint_t.h" 1 3 4 15726: # 20 "/usr/include/arm-linux-gnueabihf/bits/types/wint_t.h" 3 4 15726: typedef unsigned int wint_t; 15726: # 53 "/usr/include/wchar.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/mbstate_t.h" 1 3 4 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/__mbstate_t.h" 1 3 4 15726: # 13 "/usr/include/arm-linux-gnueabihf/bits/types/__mbstate_t.h" 3 4 15726: typedef struct 15726: { 15726: int __count; 15726: union 15726: { 15726: unsigned int __wch; 15726: char __wchb[4]; 15726: } __value; 15726: } __mbstate_t; 15726: # 5 "/usr/include/arm-linux-gnueabihf/bits/types/mbstate_t.h" 2 3 4 15726: 15726: typedef __mbstate_t mbstate_t; 15726: # 54 "/usr/include/wchar.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/__FILE.h" 1 3 4 15726: 15726: 15726: 15726: struct _IO_FILE; 15726: typedef struct _IO_FILE __FILE; 15726: # 55 "/usr/include/wchar.h" 2 3 4 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/FILE.h" 1 3 4 15726: 15726: 15726: 15726: struct _IO_FILE; 15726: 15726: 15726: typedef struct _IO_FILE FILE; 15726: # 58 "/usr/include/wchar.h" 2 3 4 15726: # 90 "/usr/include/wchar.h" 3 4 15726: extern "C" { 15726: 15726: 15726: 15726: struct tm; 15726: 15726: 15726: 15726: extern wchar_t *wcscpy (wchar_t *__restrict __dest, 15726: const wchar_t *__restrict __src) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern wchar_t *wcsncpy (wchar_t *__restrict __dest, 15726: const wchar_t *__restrict __src, size_t __n) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: extern size_t wcslcpy (wchar_t *__restrict __dest, 15726: const wchar_t *__restrict __src, size_t __n) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__access__ (__write_only__, 1, 3))); 15726: 15726: 15726: 15726: extern size_t wcslcat (wchar_t *__restrict __dest, 15726: const wchar_t *__restrict __src, size_t __n) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__access__ (__read_write__, 1, 3))); 15726: 15726: 15726: 15726: extern wchar_t *wcscat (wchar_t *__restrict __dest, 15726: const wchar_t *__restrict __src) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: extern wchar_t *wcsncat (wchar_t *__restrict __dest, 15726: const wchar_t *__restrict __src, size_t __n) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int wcscmp (const wchar_t *__s1, const wchar_t *__s2) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: extern int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: extern int wcscasecmp (const wchar_t *__s1, const wchar_t *__s2) noexcept (true); 15726: 15726: 15726: extern int wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2, 15726: size_t __n) noexcept (true); 15726: 15726: 15726: 15726: extern int wcscasecmp_l (const wchar_t *__s1, const wchar_t *__s2, 15726: locale_t __loc) noexcept (true); 15726: 15726: extern int wcsncasecmp_l (const wchar_t *__s1, const wchar_t *__s2, 15726: size_t __n, locale_t __loc) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int wcscoll (const wchar_t *__s1, const wchar_t *__s2) noexcept (true); 15726: 15726: 15726: 15726: extern size_t wcsxfrm (wchar_t *__restrict __s1, 15726: const wchar_t *__restrict __s2, size_t __n) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int wcscoll_l (const wchar_t *__s1, const wchar_t *__s2, 15726: locale_t __loc) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern size_t wcsxfrm_l (wchar_t *__s1, const wchar_t *__s2, 15726: size_t __n, locale_t __loc) noexcept (true); 15726: 15726: 15726: extern wchar_t *wcsdup (const wchar_t *__s) noexcept (true) 15726: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (__builtin_free, 1))); 15726: 15726: 15726: 15726: 15726: extern "C++" wchar_t *wcschr (wchar_t *__wcs, wchar_t __wc) 15726: noexcept (true) __asm ("wcschr") __attribute__ ((__pure__)); 15726: extern "C++" const wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc) 15726: noexcept (true) __asm ("wcschr") __attribute__ ((__pure__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern "C++" wchar_t *wcsrchr (wchar_t *__wcs, wchar_t __wc) 15726: noexcept (true) __asm ("wcsrchr") __attribute__ ((__pure__)); 15726: extern "C++" const wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc) 15726: noexcept (true) __asm ("wcsrchr") __attribute__ ((__pure__)); 15726: # 206 "/usr/include/wchar.h" 3 4 15726: extern wchar_t *wcschrnul (const wchar_t *__s, wchar_t __wc) 15726: noexcept (true) __attribute__ ((__pure__)); 15726: 15726: 15726: 15726: 15726: extern size_t wcscspn (const wchar_t *__wcs, const wchar_t *__reject) 15726: noexcept (true) __attribute__ ((__pure__)); 15726: 15726: 15726: extern size_t wcsspn (const wchar_t *__wcs, const wchar_t *__accept) 15726: noexcept (true) __attribute__ ((__pure__)); 15726: 15726: 15726: extern "C++" wchar_t *wcspbrk (wchar_t *__wcs, const wchar_t *__accept) 15726: noexcept (true) __asm ("wcspbrk") __attribute__ ((__pure__)); 15726: extern "C++" const wchar_t *wcspbrk (const wchar_t *__wcs, 15726: const wchar_t *__accept) 15726: noexcept (true) __asm ("wcspbrk") __attribute__ ((__pure__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern "C++" wchar_t *wcsstr (wchar_t *__haystack, const wchar_t *__needle) 15726: noexcept (true) __asm ("wcsstr") __attribute__ ((__pure__)); 15726: extern "C++" const wchar_t *wcsstr (const wchar_t *__haystack, 15726: const wchar_t *__needle) 15726: noexcept (true) __asm ("wcsstr") __attribute__ ((__pure__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern wchar_t *wcstok (wchar_t *__restrict __s, 15726: const wchar_t *__restrict __delim, 15726: wchar_t **__restrict __ptr) noexcept (true); 15726: 15726: 15726: extern size_t wcslen (const wchar_t *__s) noexcept (true) __attribute__ ((__pure__)); 15726: 15726: 15726: 15726: 15726: extern "C++" wchar_t *wcswcs (wchar_t *__haystack, const wchar_t *__needle) 15726: noexcept (true) __asm ("wcswcs") __attribute__ ((__pure__)); 15726: extern "C++" const wchar_t *wcswcs (const wchar_t *__haystack, 15726: const wchar_t *__needle) 15726: noexcept (true) __asm ("wcswcs") __attribute__ ((__pure__)); 15726: # 265 "/usr/include/wchar.h" 3 4 15726: extern size_t wcsnlen (const wchar_t *__s, size_t __maxlen) 15726: noexcept (true) __attribute__ ((__pure__)); 15726: 15726: 15726: 15726: 15726: 15726: extern "C++" wchar_t *wmemchr (wchar_t *__s, wchar_t __c, size_t __n) 15726: noexcept (true) __asm ("wmemchr") __attribute__ ((__pure__)); 15726: extern "C++" const wchar_t *wmemchr (const wchar_t *__s, wchar_t __c, 15726: size_t __n) 15726: noexcept (true) __asm ("wmemchr") __attribute__ ((__pure__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int wmemcmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n) 15726: noexcept (true) __attribute__ ((__pure__)); 15726: 15726: 15726: extern wchar_t *wmemcpy (wchar_t *__restrict __s1, 15726: const wchar_t *__restrict __s2, size_t __n) noexcept (true); 15726: 15726: 15726: 15726: extern wchar_t *wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n) 15726: noexcept (true); 15726: 15726: 15726: extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern wchar_t *wmempcpy (wchar_t *__restrict __s1, 15726: const wchar_t *__restrict __s2, size_t __n) 15726: noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern wint_t btowc (int __c) noexcept (true); 15726: 15726: 15726: 15726: extern int wctob (wint_t __c) noexcept (true); 15726: 15726: 15726: 15726: extern int mbsinit (const mbstate_t *__ps) noexcept (true) __attribute__ ((__pure__)); 15726: 15726: 15726: 15726: extern size_t mbrtowc (wchar_t *__restrict __pwc, 15726: const char *__restrict __s, size_t __n, 15726: mbstate_t *__restrict __p) noexcept (true); 15726: 15726: 15726: extern size_t wcrtomb (char *__restrict __s, wchar_t __wc, 15726: mbstate_t *__restrict __ps) noexcept (true); 15726: 15726: 15726: extern size_t __mbrlen (const char *__restrict __s, size_t __n, 15726: mbstate_t *__restrict __ps) noexcept (true); 15726: extern size_t mbrlen (const char *__restrict __s, size_t __n, 15726: mbstate_t *__restrict __ps) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern wint_t __btowc_alias (int __c) __asm ("btowc"); 15726: extern __inline __attribute__ ((__gnu_inline__)) wint_t 15726: __attribute__ ((__leaf__)) btowc (int __c) noexcept (true) 15726: { return (__builtin_constant_p (__c) && __c >= '\0' && __c <= '\x7f' 15726: ? (wint_t) __c : __btowc_alias (__c)); } 15726: 15726: extern int __wctob_alias (wint_t __c) __asm ("wctob"); 15726: extern __inline __attribute__ ((__gnu_inline__)) int 15726: __attribute__ ((__leaf__)) wctob (wint_t __wc) noexcept (true) 15726: { return (__builtin_constant_p (__wc) && __wc >= L'\0' && __wc <= L'\x7f' 15726: ? (int) __wc : __wctob_alias (__wc)); } 15726: 15726: extern __inline __attribute__ ((__gnu_inline__)) size_t 15726: __attribute__ ((__leaf__)) mbrlen (const char *__restrict __s, size_t __n, mbstate_t *__restrict __ps) noexcept (true) 15726: 15726: { return (__ps != __null 15726: ? mbrtowc (__null, __s, __n, __ps) : __mbrlen (__s, __n, __null)); } 15726: 15726: 15726: 15726: 15726: extern size_t mbsrtowcs (wchar_t *__restrict __dst, 15726: const char **__restrict __src, size_t __len, 15726: mbstate_t *__restrict __ps) noexcept (true); 15726: 15726: 15726: 15726: extern size_t wcsrtombs (char *__restrict __dst, 15726: const wchar_t **__restrict __src, size_t __len, 15726: mbstate_t *__restrict __ps) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern size_t mbsnrtowcs (wchar_t *__restrict __dst, 15726: const char **__restrict __src, size_t __nmc, 15726: size_t __len, mbstate_t *__restrict __ps) noexcept (true); 15726: 15726: 15726: 15726: extern size_t wcsnrtombs (char *__restrict __dst, 15726: const wchar_t **__restrict __src, 15726: size_t __nwc, size_t __len, 15726: mbstate_t *__restrict __ps) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int wcwidth (wchar_t __c) noexcept (true); 15726: 15726: 15726: 15726: extern int wcswidth (const wchar_t *__s, size_t __n) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern double wcstod (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr) noexcept (true); 15726: 15726: 15726: 15726: extern float wcstof (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr) noexcept (true); 15726: extern long double wcstold (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr) noexcept (true); 15726: # 422 "/usr/include/wchar.h" 3 4 15726: extern _Float32 wcstof32 (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr) noexcept (true); 15726: 15726: 15726: 15726: extern _Float64 wcstof64 (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr) noexcept (true); 15726: # 437 "/usr/include/wchar.h" 3 4 15726: extern _Float32x wcstof32x (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr) noexcept (true); 15726: # 455 "/usr/include/wchar.h" 3 4 15726: extern long int wcstol (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr, int __base) noexcept (true); 15726: 15726: 15726: 15726: extern unsigned long int wcstoul (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr, int __base) 15726: noexcept (true); 15726: 15726: 15726: 15726: 15726: __extension__ 15726: extern long long int wcstoll (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr, int __base) 15726: noexcept (true); 15726: 15726: 15726: 15726: __extension__ 15726: extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr, 15726: int __base) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: __extension__ 15726: extern long long int wcstoq (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr, int __base) 15726: noexcept (true); 15726: 15726: 15726: 15726: __extension__ 15726: extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr, 15726: int __base) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern long int wcstol (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_wcstol") 15726: 15726: ; 15726: extern unsigned long int wcstoul (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_wcstoul") 15726: 15726: 15726: ; 15726: __extension__ 15726: extern long long int wcstoll (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_wcstoll") 15726: 15726: 15726: ; 15726: __extension__ 15726: extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_wcstoull") 15726: 15726: 15726: ; 15726: 15726: __extension__ 15726: extern long long int wcstoq (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_wcstoll") 15726: 15726: ; 15726: __extension__ 15726: extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_wcstoull") 15726: 15726: 15726: ; 15726: # 561 "/usr/include/wchar.h" 3 4 15726: extern long int wcstol_l (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr, int __base, 15726: locale_t __loc) noexcept (true); 15726: 15726: extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr, 15726: int __base, locale_t __loc) noexcept (true); 15726: 15726: __extension__ 15726: extern long long int wcstoll_l (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr, 15726: int __base, locale_t __loc) noexcept (true); 15726: 15726: __extension__ 15726: extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr, 15726: int __base, locale_t __loc) 15726: noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern long int wcstol_l (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_wcstol_l") 15726: 15726: 15726: ; 15726: extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_wcstoul_l") 15726: 15726: 15726: 15726: ; 15726: __extension__ 15726: extern long long int wcstoll_l (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_wcstoll_l") 15726: 15726: 15726: 15726: ; 15726: __extension__ 15726: extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_wcstoull_l") 15726: 15726: 15726: 15726: ; 15726: # 630 "/usr/include/wchar.h" 3 4 15726: extern double wcstod_l (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr, locale_t __loc) 15726: noexcept (true); 15726: 15726: extern float wcstof_l (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr, locale_t __loc) 15726: noexcept (true); 15726: 15726: extern long double wcstold_l (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr, 15726: locale_t __loc) noexcept (true); 15726: # 649 "/usr/include/wchar.h" 3 4 15726: extern _Float32 wcstof32_l (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr, 15726: locale_t __loc) noexcept (true); 15726: 15726: 15726: 15726: extern _Float64 wcstof64_l (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr, 15726: locale_t __loc) noexcept (true); 15726: # 667 "/usr/include/wchar.h" 3 4 15726: extern _Float32x wcstof32x_l (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr, 15726: locale_t __loc) noexcept (true); 15726: # 689 "/usr/include/wchar.h" 3 4 15726: extern wchar_t *wcpcpy (wchar_t *__restrict __dest, 15726: const wchar_t *__restrict __src) noexcept (true); 15726: 15726: 15726: 15726: extern wchar_t *wcpncpy (wchar_t *__restrict __dest, 15726: const wchar_t *__restrict __src, size_t __n) 15726: noexcept (true); 15726: # 718 "/usr/include/wchar.h" 3 4 15726: extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) noexcept (true) 15726: __attribute__ ((__malloc__)) ; 15726: 15726: 15726: 15726: 15726: 15726: extern int fwide (__FILE *__fp, int __mode) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int fwprintf (__FILE *__restrict __stream, 15726: const wchar_t *__restrict __format, ...) 15726: ; 15726: 15726: 15726: 15726: 15726: extern int wprintf (const wchar_t *__restrict __format, ...) 15726: ; 15726: 15726: extern int swprintf (wchar_t *__restrict __s, size_t __n, 15726: const wchar_t *__restrict __format, ...) 15726: noexcept (true) ; 15726: 15726: 15726: 15726: 15726: 15726: extern int vfwprintf (__FILE *__restrict __s, 15726: const wchar_t *__restrict __format, 15726: __gnuc_va_list __arg) 15726: ; 15726: 15726: 15726: 15726: 15726: extern int vwprintf (const wchar_t *__restrict __format, 15726: __gnuc_va_list __arg) 15726: ; 15726: 15726: 15726: extern int vswprintf (wchar_t *__restrict __s, size_t __n, 15726: const wchar_t *__restrict __format, 15726: __gnuc_va_list __arg) 15726: noexcept (true) ; 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int fwscanf (__FILE *__restrict __stream, 15726: const wchar_t *__restrict __format, ...) 15726: ; 15726: 15726: 15726: 15726: 15726: extern int wscanf (const wchar_t *__restrict __format, ...) 15726: ; 15726: 15726: extern int swscanf (const wchar_t *__restrict __s, 15726: const wchar_t *__restrict __format, ...) 15726: noexcept (true) ; 15726: # 795 "/usr/include/wchar.h" 3 4 15726: extern int fwscanf (__FILE *__restrict __stream, const wchar_t *__restrict __format, ...) __asm__ ("" "__isoc23_fwscanf") 15726: 15726: 15726: ; 15726: extern int wscanf (const wchar_t *__restrict __format, ...) __asm__ ("" "__isoc23_wscanf") 15726: 15726: ; 15726: extern int swscanf (const wchar_t *__restrict __s, const wchar_t *__restrict __format, ...) noexcept (true) __asm__ ("" "__isoc23_swscanf") 15726: 15726: 15726: ; 15726: # 851 "/usr/include/wchar.h" 3 4 15726: extern int vfwscanf (__FILE *__restrict __s, 15726: const wchar_t *__restrict __format, 15726: __gnuc_va_list __arg) 15726: ; 15726: 15726: 15726: 15726: 15726: extern int vwscanf (const wchar_t *__restrict __format, 15726: __gnuc_va_list __arg) 15726: ; 15726: 15726: extern int vswscanf (const wchar_t *__restrict __s, 15726: const wchar_t *__restrict __format, 15726: __gnuc_va_list __arg) 15726: noexcept (true) ; 15726: # 875 "/usr/include/wchar.h" 3 4 15726: extern int vfwscanf (__FILE *__restrict __s, const wchar_t *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc23_vfwscanf") 15726: 15726: 15726: ; 15726: extern int vwscanf (const wchar_t *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc23_vwscanf") 15726: 15726: ; 15726: extern int vswscanf (const wchar_t *__restrict __s, const wchar_t *__restrict __format, __gnuc_va_list __arg) noexcept (true) __asm__ ("" "__isoc23_vswscanf") 15726: 15726: 15726: ; 15726: # 935 "/usr/include/wchar.h" 3 4 15726: extern wint_t fgetwc (__FILE *__stream); 15726: extern wint_t getwc (__FILE *__stream); 15726: 15726: 15726: 15726: 15726: 15726: extern wint_t getwchar (void); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern wint_t fputwc (wchar_t __wc, __FILE *__stream); 15726: extern wint_t putwc (wchar_t __wc, __FILE *__stream); 15726: 15726: 15726: 15726: 15726: 15726: extern wint_t putwchar (wchar_t __wc); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n, 15726: __FILE *__restrict __stream); 15726: 15726: 15726: 15726: 15726: 15726: extern int fputws (const wchar_t *__restrict __ws, 15726: __FILE *__restrict __stream); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern wint_t ungetwc (wint_t __wc, __FILE *__stream); 15726: # 990 "/usr/include/wchar.h" 3 4 15726: extern wint_t getwc_unlocked (__FILE *__stream); 15726: extern wint_t getwchar_unlocked (void); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern wint_t fgetwc_unlocked (__FILE *__stream); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream); 15726: # 1016 "/usr/include/wchar.h" 3 4 15726: extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream); 15726: extern wint_t putwchar_unlocked (wchar_t __wc); 15726: # 1026 "/usr/include/wchar.h" 3 4 15726: extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n, 15726: __FILE *__restrict __stream); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int fputws_unlocked (const wchar_t *__restrict __ws, 15726: __FILE *__restrict __stream); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize, 15726: const wchar_t *__restrict __format, 15726: const struct tm *__restrict __tp) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize, 15726: const wchar_t *__restrict __format, 15726: const struct tm *__restrict __tp, 15726: locale_t __loc) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/wchar2-decl.h" 1 3 4 15726: # 27 "/usr/include/arm-linux-gnueabihf/bits/wchar2-decl.h" 3 4 15726: extern wchar_t *__wmemcpy_chk (wchar_t *__restrict __s1, 15726: const wchar_t *__restrict __s2, size_t __n, 15726: size_t __ns1) noexcept (true); 15726: extern wchar_t *__wmemcpy_alias (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) noexcept (true) __asm__ ("" "wmemcpy") 15726: 15726: 15726: ; 15726: extern wchar_t *__wmemcpy_chk_warn (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n, size_t __ns1) noexcept (true) __asm__ ("" "__wmemcpy_chk") 15726: 15726: 15726: 15726: __attribute__((__warning__ ("wmemcpy called with length bigger than size of destination " "buffer"))) 15726: ; 15726: 15726: extern wchar_t *__wmemmove_chk (wchar_t *__s1, const wchar_t *__s2, 15726: size_t __n, size_t __ns1) noexcept (true); 15726: extern wchar_t *__wmemmove_alias (wchar_t *__s1, const wchar_t *__s2, size_t __n) noexcept (true) __asm__ ("" "wmemmove") 15726: 15726: ; 15726: extern wchar_t *__wmemmove_chk_warn (wchar_t *__s1, const wchar_t *__s2, size_t __n, size_t __ns1) noexcept (true) __asm__ ("" "__wmemmove_chk") 15726: 15726: 15726: __attribute__((__warning__ ("wmemmove called with length bigger than size of destination " "buffer"))) 15726: ; 15726: 15726: 15726: 15726: 15726: extern wchar_t *__wmempcpy_chk (wchar_t *__restrict __s1, 15726: const wchar_t *__restrict __s2, size_t __n, 15726: size_t __ns1) noexcept (true); 15726: extern wchar_t *__wmempcpy_alias (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) noexcept (true) __asm__ ("" "wmempcpy") 15726: 15726: 15726: ; 15726: extern wchar_t *__wmempcpy_chk_warn (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n, size_t __ns1) noexcept (true) __asm__ ("" "__wmempcpy_chk") 15726: 15726: 15726: 15726: __attribute__((__warning__ ("wmempcpy called with length bigger than size of destination " "buffer"))) 15726: ; 15726: 15726: 15726: 15726: 15726: extern wchar_t *__wmemset_chk (wchar_t *__s, wchar_t __c, size_t __n, 15726: size_t __ns) noexcept (true); 15726: extern wchar_t *__wmemset_alias (wchar_t *__s, wchar_t __c, size_t __n) noexcept (true) __asm__ ("" "wmemset") 15726: ; 15726: extern wchar_t *__wmemset_chk_warn (wchar_t *__s, wchar_t __c, size_t __n, size_t __ns) noexcept (true) __asm__ ("" "__wmemset_chk") 15726: 15726: 15726: __attribute__((__warning__ ("wmemset called with length bigger than size of destination " "buffer"))) 15726: ; 15726: 15726: extern wchar_t *__wcscpy_chk (wchar_t *__restrict __dest, 15726: const wchar_t *__restrict __src, 15726: size_t __n) noexcept (true); 15726: extern wchar_t *__wcscpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src) noexcept (true) __asm__ ("" "wcscpy") 15726: 15726: ; 15726: 15726: extern wchar_t *__wcpcpy_chk (wchar_t *__restrict __dest, 15726: const wchar_t *__restrict __src, 15726: size_t __destlen) noexcept (true); 15726: extern wchar_t *__wcpcpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src) noexcept (true) __asm__ ("" "wcpcpy") 15726: 15726: ; 15726: 15726: extern wchar_t *__wcsncpy_chk (wchar_t *__restrict __dest, 15726: const wchar_t *__restrict __src, size_t __n, 15726: size_t __destlen) noexcept (true); 15726: extern wchar_t *__wcsncpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true) __asm__ ("" "wcsncpy") 15726: 15726: 15726: ; 15726: extern wchar_t *__wcsncpy_chk_warn (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n, size_t __destlen) noexcept (true) __asm__ ("" "__wcsncpy_chk") 15726: 15726: 15726: 15726: __attribute__((__warning__ ("wcsncpy called with length bigger than size of destination " "buffer"))) 15726: ; 15726: 15726: extern wchar_t *__wcpncpy_chk (wchar_t *__restrict __dest, 15726: const wchar_t *__restrict __src, size_t __n, 15726: size_t __destlen) noexcept (true); 15726: 15726: extern wchar_t *__wcpncpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true) __asm__ ("" "wcpncpy") 15726: 15726: 15726: ; 15726: extern wchar_t *__wcpncpy_chk_warn (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n, size_t __destlen) noexcept (true) __asm__ ("" "__wcpncpy_chk") 15726: 15726: 15726: 15726: __attribute__((__warning__ ("wcpncpy called with length bigger than size of destination " "buffer"))) 15726: ; 15726: 15726: extern wchar_t *__wcscat_chk (wchar_t *__restrict __dest, 15726: const wchar_t *__restrict __src, 15726: size_t __destlen) noexcept (true); 15726: extern wchar_t *__wcscat_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src) noexcept (true) __asm__ ("" "wcscat") 15726: 15726: ; 15726: 15726: extern wchar_t *__wcsncat_chk (wchar_t *__restrict __dest, 15726: const wchar_t *__restrict __src, 15726: size_t __n, size_t __destlen) noexcept (true); 15726: extern wchar_t *__wcsncat_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true) __asm__ ("" "wcsncat") 15726: 15726: 15726: ; 15726: 15726: extern int __swprintf_chk (wchar_t *__restrict __s, size_t __n, 15726: int __flag, size_t __s_len, 15726: const wchar_t *__restrict __format, ...) 15726: noexcept (true) ; 15726: extern int __swprintf_alias (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, ...) noexcept (true) __asm__ ("" "swprintf") 15726: 15726: 15726: ; 15726: 15726: extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n, 15726: int __flag, size_t __s_len, 15726: const wchar_t *__restrict __format, 15726: __gnuc_va_list __arg) 15726: noexcept (true) ; 15726: extern int __vswprintf_alias (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, __gnuc_va_list __ap) noexcept (true) __asm__ ("" "vswprintf") 15726: 15726: 15726: ; 15726: 15726: 15726: 15726: 15726: extern int __fwprintf_chk (__FILE *__restrict __stream, int __flag, 15726: const wchar_t *__restrict __format, ...); 15726: extern int __wprintf_chk (int __flag, const wchar_t *__restrict __format, 15726: ...); 15726: extern int __vfwprintf_chk (__FILE *__restrict __stream, int __flag, 15726: const wchar_t *__restrict __format, 15726: __gnuc_va_list __ap); 15726: extern int __vwprintf_chk (int __flag, const wchar_t *__restrict __format, 15726: __gnuc_va_list __ap); 15726: 15726: 15726: 15726: extern wchar_t *__fgetws_chk (wchar_t *__restrict __s, size_t __size, int __n, 15726: __FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)); 15726: extern wchar_t *__fgetws_alias (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) __asm__ ("" "fgetws") 15726: 15726: __attribute__ ((__warn_unused_result__)); 15726: extern wchar_t *__fgetws_chk_warn (wchar_t *__restrict __s, size_t __size, int __n, __FILE *__restrict __stream) __asm__ ("" "__fgetws_chk") 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgetws called with bigger size than length " "of destination buffer"))) 15726: ; 15726: 15726: 15726: 15726: extern wchar_t *__fgetws_unlocked_chk (wchar_t *__restrict __s, size_t __size, 15726: int __n, __FILE *__restrict __stream) 15726: __attribute__ ((__warn_unused_result__)); 15726: extern wchar_t *__fgetws_unlocked_alias (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) __asm__ ("" "fgetws_unlocked") 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)); 15726: extern wchar_t *__fgetws_unlocked_chk_warn (wchar_t *__restrict __s, size_t __size, int __n, __FILE *__restrict __stream) __asm__ ("" "__fgetws_unlocked_chk") 15726: 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgetws_unlocked called with bigger size than length " "of destination buffer"))) 15726: ; 15726: 15726: 15726: 15726: extern size_t __wcrtomb_chk (char *__restrict __s, wchar_t __wchar, 15726: mbstate_t *__restrict __p, 15726: size_t __buflen) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: extern size_t __wcrtomb_alias (char *__restrict __s, wchar_t __wchar, mbstate_t *__restrict __ps) noexcept (true) __asm__ ("" "wcrtomb") 15726: 15726: __attribute__ ((__warn_unused_result__)); 15726: 15726: extern size_t __mbsrtowcs_chk (wchar_t *__restrict __dst, 15726: const char **__restrict __src, 15726: size_t __len, mbstate_t *__restrict __ps, 15726: size_t __dstlen) noexcept (true); 15726: extern size_t __mbsrtowcs_alias (wchar_t *__restrict __dst, const char **__restrict __src, size_t __len, mbstate_t *__restrict __ps) noexcept (true) __asm__ ("" "mbsrtowcs") 15726: 15726: 15726: 15726: ; 15726: extern size_t __mbsrtowcs_chk_warn (wchar_t *__restrict __dst, const char **__restrict __src, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) noexcept (true) __asm__ ("" "__mbsrtowcs_chk") 15726: 15726: 15726: 15726: 15726: __attribute__((__warning__ ("mbsrtowcs called with dst buffer smaller than len " "* sizeof (wchar_t)"))) 15726: ; 15726: 15726: extern size_t __wcsrtombs_chk (char *__restrict __dst, 15726: const wchar_t **__restrict __src, 15726: size_t __len, mbstate_t *__restrict __ps, 15726: size_t __dstlen) noexcept (true); 15726: extern size_t __wcsrtombs_alias (char *__restrict __dst, const wchar_t **__restrict __src, size_t __len, mbstate_t *__restrict __ps) noexcept (true) __asm__ ("" "wcsrtombs") 15726: 15726: 15726: 15726: ; 15726: extern size_t __wcsrtombs_chk_warn (char *__restrict __dst, const wchar_t **__restrict __src, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) noexcept (true) __asm__ ("" "__wcsrtombs_chk") 15726: 15726: 15726: 15726: 15726: __attribute__((__warning__ ("wcsrtombs called with dst buffer smaller than len"))); 15726: 15726: 15726: 15726: extern size_t __mbsnrtowcs_chk (wchar_t *__restrict __dst, 15726: const char **__restrict __src, size_t __nmc, 15726: size_t __len, mbstate_t *__restrict __ps, 15726: size_t __dstlen) noexcept (true); 15726: extern size_t __mbsnrtowcs_alias (wchar_t *__restrict __dst, const char **__restrict __src, size_t __nmc, size_t __len, mbstate_t *__restrict __ps) noexcept (true) __asm__ ("" "mbsnrtowcs") 15726: 15726: 15726: 15726: ; 15726: extern size_t __mbsnrtowcs_chk_warn (wchar_t *__restrict __dst, const char **__restrict __src, size_t __nmc, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) noexcept (true) __asm__ ("" "__mbsnrtowcs_chk") 15726: 15726: 15726: 15726: 15726: __attribute__((__warning__ ("mbsnrtowcs called with dst buffer smaller than len " "* sizeof (wchar_t)"))) 15726: ; 15726: 15726: extern size_t __wcsnrtombs_chk (char *__restrict __dst, 15726: const wchar_t **__restrict __src, 15726: size_t __nwc, size_t __len, 15726: mbstate_t *__restrict __ps, size_t __dstlen) 15726: noexcept (true); 15726: extern size_t __wcsnrtombs_alias (char *__restrict __dst, const wchar_t **__restrict __src, size_t __nwc, size_t __len, mbstate_t *__restrict __ps) noexcept (true) __asm__ ("" "wcsnrtombs") 15726: 15726: 15726: 15726: ; 15726: extern size_t __wcsnrtombs_chk_warn (char *__restrict __dst, const wchar_t **__restrict __src, size_t __nwc, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) noexcept (true) __asm__ ("" "__wcsnrtombs_chk") 15726: 15726: 15726: 15726: 15726: 15726: __attribute__((__warning__ ("wcsnrtombs called with dst buffer smaller than len"))); 15726: 15726: 15726: 15726: 15726: extern size_t __wcslcpy_chk (wchar_t *__dest, const wchar_t *__src, size_t __n, 15726: size_t __destlen) noexcept (true); 15726: extern size_t __wcslcpy_alias (wchar_t *__dest, const wchar_t *__src, size_t __n) noexcept (true) __asm__ ("" "wcslcpy") 15726: 15726: ; 15726: 15726: extern size_t __wcslcat_chk (wchar_t *__dest, const wchar_t *__src, size_t __n, 15726: size_t __destlen) noexcept (true); 15726: extern size_t __wcslcat_alias (wchar_t *__dest, const wchar_t *__src, size_t __n) noexcept (true) __asm__ ("" "wcslcat") 15726: 15726: ; 15726: # 1060 "/usr/include/wchar.h" 2 3 4 15726: # 1070 "/usr/include/wchar.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/wchar2.h" 1 3 4 15726: # 23 "/usr/include/arm-linux-gnueabihf/bits/wchar2.h" 3 4 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 15726: __attribute__ ((__leaf__)) wmemcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) noexcept (true) 15726: 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__s1, 0)) && (__builtin_object_size (__s1, 0)) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((__builtin_object_size (__s1, 0))) / ((sizeof (wchar_t))))) && (((unsigned int) (__n)) <= ((__builtin_object_size (__s1, 0))) / ((sizeof (wchar_t)))))) ? __wmemcpy_alias (__s1, __s2, __n) : ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))) && !(((unsigned int) (__n)) <= (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))) ? __wmemcpy_chk_warn (__s1, __s2, __n, (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t))) : __wmemcpy_chk (__s1, __s2, __n, (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t))))) 15726: 15726: ; 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 15726: __attribute__ ((__leaf__)) wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n) noexcept (true) 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__s1, 0)) && (__builtin_object_size (__s1, 0)) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((__builtin_object_size (__s1, 0))) / ((sizeof (wchar_t))))) && (((unsigned int) (__n)) <= ((__builtin_object_size (__s1, 0))) / ((sizeof (wchar_t)))))) ? __wmemmove_alias (__s1, __s2, __n) : ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))) && !(((unsigned int) (__n)) <= (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))) ? __wmemmove_chk_warn (__s1, __s2, __n, (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t))) : __wmemmove_chk (__s1, __s2, __n, (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t))))) 15726: 15726: ; 15726: } 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 15726: __attribute__ ((__leaf__)) wmempcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) noexcept (true) 15726: 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__s1, 0)) && (__builtin_object_size (__s1, 0)) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((__builtin_object_size (__s1, 0))) / ((sizeof (wchar_t))))) && (((unsigned int) (__n)) <= ((__builtin_object_size (__s1, 0))) / ((sizeof (wchar_t)))))) ? __wmempcpy_alias (__s1, __s2, __n) : ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))) && !(((unsigned int) (__n)) <= (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))) ? __wmempcpy_chk_warn (__s1, __s2, __n, (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t))) : __wmempcpy_chk (__s1, __s2, __n, (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t))))) 15726: 15726: ; 15726: } 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 15726: __attribute__ ((__leaf__)) wmemset (wchar_t *__s, wchar_t __c, size_t __n) noexcept (true) 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__s, 0)) && (__builtin_object_size (__s, 0)) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((__builtin_object_size (__s, 0))) / ((sizeof (wchar_t))))) && (((unsigned int) (__n)) <= ((__builtin_object_size (__s, 0))) / ((sizeof (wchar_t)))))) ? __wmemset_alias (__s, __c, __n) : ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (__builtin_object_size (__s, 0)) / (sizeof (wchar_t)))) && !(((unsigned int) (__n)) <= (__builtin_object_size (__s, 0)) / (sizeof (wchar_t)))) ? __wmemset_chk_warn (__s, __c, __n, (__builtin_object_size (__s, 0)) / (sizeof (wchar_t))) : __wmemset_chk (__s, __c, __n, (__builtin_object_size (__s, 0)) / (sizeof (wchar_t))))) 15726: 15726: ; 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 15726: __attribute__ ((__leaf__)) wcscpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src) noexcept (true) 15726: { 15726: size_t sz = __builtin_object_size (__dest, 2 > 1); 15726: if (sz != (size_t) -1) 15726: return __wcscpy_chk (__dest, __src, sz / sizeof (wchar_t)); 15726: return __wcscpy_alias (__dest, __src); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 15726: __attribute__ ((__leaf__)) wcpcpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src) noexcept (true) 15726: { 15726: size_t sz = __builtin_object_size (__dest, 2 > 1); 15726: if (sz != (size_t) -1) 15726: return __wcpcpy_chk (__dest, __src, sz / sizeof (wchar_t)); 15726: return __wcpcpy_alias (__dest, __src); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 15726: __attribute__ ((__leaf__)) wcsncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true) 15726: 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__dest, 2 > 1)) && (__builtin_object_size (__dest, 2 > 1)) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((__builtin_object_size (__dest, 2 > 1))) / ((sizeof (wchar_t))))) && (((unsigned int) (__n)) <= ((__builtin_object_size (__dest, 2 > 1))) / ((sizeof (wchar_t)))))) ? __wcsncpy_alias (__dest, __src, __n) : ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t)))) && !(((unsigned int) (__n)) <= (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t)))) ? __wcsncpy_chk_warn (__dest, __src, __n, (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t))) : __wcsncpy_chk (__dest, __src, __n, (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t))))) 15726: 15726: ; 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 15726: __attribute__ ((__leaf__)) wcpncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true) 15726: 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__dest, 2 > 1)) && (__builtin_object_size (__dest, 2 > 1)) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((__builtin_object_size (__dest, 2 > 1))) / ((sizeof (wchar_t))))) && (((unsigned int) (__n)) <= ((__builtin_object_size (__dest, 2 > 1))) / ((sizeof (wchar_t)))))) ? __wcpncpy_alias (__dest, __src, __n) : ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t)))) && !(((unsigned int) (__n)) <= (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t)))) ? __wcpncpy_chk_warn (__dest, __src, __n, (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t))) : __wcpncpy_chk (__dest, __src, __n, (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t))))) 15726: 15726: ; 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 15726: __attribute__ ((__leaf__)) wcscat (wchar_t *__restrict __dest, const wchar_t *__restrict __src) noexcept (true) 15726: { 15726: size_t sz = __builtin_object_size (__dest, 2 > 1); 15726: if (sz != (size_t) -1) 15726: return __wcscat_chk (__dest, __src, sz / sizeof (wchar_t)); 15726: return __wcscat_alias (__dest, __src); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * 15726: __attribute__ ((__leaf__)) wcsncat (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true) 15726: 15726: { 15726: size_t sz = __builtin_object_size (__dest, 2 > 1); 15726: if (sz != (size_t) -1) 15726: return __wcsncat_chk (__dest, __src, __n, sz / sizeof (wchar_t)); 15726: return __wcsncat_alias (__dest, __src, __n); 15726: } 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 15726: __attribute__ ((__leaf__)) wcslcpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true) 15726: 15726: { 15726: if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1 15726: && (!__builtin_constant_p (__n 15726: > __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t)) 15726: || __n > __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t))) 15726: return __wcslcpy_chk (__dest, __src, __n, 15726: __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t)); 15726: return __wcslcpy_alias (__dest, __src, __n); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 15726: __attribute__ ((__leaf__)) wcslcat (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true) 15726: 15726: { 15726: if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1 15726: && (!__builtin_constant_p (__n > __builtin_object_size (__dest, 2 > 1) 15726: / sizeof (wchar_t)) 15726: || __n > __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t))) 15726: return __wcslcat_chk (__dest, __src, __n, 15726: __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t)); 15726: return __wcslcat_alias (__dest, __src, __n); 15726: } 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: __attribute__ ((__leaf__)) swprintf (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, ...) noexcept (true) 15726: 15726: { 15726: size_t sz = __builtin_object_size (__s, 2 > 1); 15726: if (sz != (size_t) -1 || 2 > 1) 15726: return __swprintf_chk (__s, __n, 2 - 1, 15726: sz / sizeof (wchar_t), __fmt, __builtin_va_arg_pack ()); 15726: return __swprintf_alias (__s, __n, __fmt, __builtin_va_arg_pack ()); 15726: } 15726: # 162 "/usr/include/arm-linux-gnueabihf/bits/wchar2.h" 3 4 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: __attribute__ ((__leaf__)) vswprintf (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, __gnuc_va_list __ap) noexcept (true) 15726: 15726: { 15726: size_t sz = __builtin_object_size (__s, 2 > 1); 15726: if (sz != (size_t) -1 || 2 > 1) 15726: return __vswprintf_chk (__s, __n, 2 - 1, 15726: sz / sizeof (wchar_t), __fmt, __ap); 15726: return __vswprintf_alias (__s, __n, __fmt, __ap); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: wprintf (const wchar_t *__restrict __fmt, ...) 15726: { 15726: return __wprintf_chk (2 - 1, __fmt, __builtin_va_arg_pack ()); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: fwprintf (__FILE *__restrict __stream, const wchar_t *__restrict __fmt, ...) 15726: { 15726: return __fwprintf_chk (__stream, 2 - 1, __fmt, 15726: __builtin_va_arg_pack ()); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: vwprintf (const wchar_t *__restrict __fmt, __gnuc_va_list __ap) 15726: { 15726: return __vwprintf_chk (2 - 1, __fmt, __ap); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: vfwprintf (__FILE *__restrict __stream, 15726: const wchar_t *__restrict __fmt, __gnuc_va_list __ap) 15726: { 15726: return __vfwprintf_chk (__stream, 2 - 1, __fmt, __ap); 15726: } 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) wchar_t * 15726: fgetws (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) 15726: { 15726: size_t sz = __builtin_object_size (__s, 2 > 1); 15726: if (((__builtin_constant_p (sz) && (sz) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((sz)) / ((sizeof (wchar_t))))) && (((unsigned int) (__n)) <= ((sz)) / ((sizeof (wchar_t))))))) 15726: return __fgetws_alias (__s, __n, __stream); 15726: if ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (sz) / (sizeof (wchar_t)))) && !(((unsigned int) (__n)) <= (sz) / (sizeof (wchar_t))))) 15726: return __fgetws_chk_warn (__s, sz / sizeof (wchar_t), __n, __stream); 15726: return __fgetws_chk (__s, sz / sizeof (wchar_t), __n, __stream); 15726: } 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) wchar_t * 15726: fgetws_unlocked (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) 15726: { 15726: size_t sz = __builtin_object_size (__s, 2 > 1); 15726: if (((__builtin_constant_p (sz) && (sz) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((sz)) / ((sizeof (wchar_t))))) && (((unsigned int) (__n)) <= ((sz)) / ((sizeof (wchar_t))))))) 15726: return __fgetws_unlocked_alias (__s, __n, __stream); 15726: if ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (sz) / (sizeof (wchar_t)))) && !(((unsigned int) (__n)) <= (sz) / (sizeof (wchar_t))))) 15726: return __fgetws_unlocked_chk_warn (__s, sz / sizeof (wchar_t), __n, 15726: __stream); 15726: return __fgetws_unlocked_chk (__s, sz / sizeof (wchar_t), __n, __stream); 15726: } 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t 15726: __attribute__ ((__leaf__)) wcrtomb (char *__restrict __s, wchar_t __wchar, mbstate_t *__restrict __ps) noexcept (true) 15726: 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: if (__builtin_object_size (__s, 2 > 1) != (size_t) -1 15726: && 16 > __builtin_object_size (__s, 2 > 1)) 15726: return __wcrtomb_chk (__s, __wchar, __ps, __builtin_object_size (__s, 2 > 1)); 15726: return __wcrtomb_alias (__s, __wchar, __ps); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 15726: __attribute__ ((__leaf__)) mbsrtowcs (wchar_t *__restrict __dst, const char **__restrict __src, size_t __len, mbstate_t *__restrict __ps) noexcept (true) 15726: 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__dst, 2 > 1)) && (__builtin_object_size (__dst, 2 > 1)) == (unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (wchar_t))))) && (((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (wchar_t)))))) ? __mbsrtowcs_alias (__dst, __src, __len, __ps) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))) && !(((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))) ? __mbsrtowcs_chk_warn (__dst, __src, __len, __ps, (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t))) : __mbsrtowcs_chk (__dst, __src, __len, __ps, (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t))))) 15726: 15726: ; 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 15726: __attribute__ ((__leaf__)) wcsrtombs (char *__restrict __dst, const wchar_t **__restrict __src, size_t __len, mbstate_t *__restrict __ps) noexcept (true) 15726: 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__dst, 2 > 1)) && (__builtin_object_size (__dst, 2 > 1)) == (unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (char)))))) ? __wcsrtombs_alias (__dst, __src, __len, __ps) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (char)))) ? __wcsrtombs_chk_warn (__dst, __src, __len, __ps, __builtin_object_size (__dst, 2 > 1)) : __wcsrtombs_chk (__dst, __src, __len, __ps, __builtin_object_size (__dst, 2 > 1)))) 15726: 15726: ; 15726: } 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 15726: __attribute__ ((__leaf__)) mbsnrtowcs (wchar_t *__restrict __dst, const char **__restrict __src, size_t __nmc, size_t __len, mbstate_t *__restrict __ps) noexcept (true) 15726: 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__dst, 2 > 1)) && (__builtin_object_size (__dst, 2 > 1)) == (unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (wchar_t))))) && (((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (wchar_t)))))) ? __mbsnrtowcs_alias (__dst, __src, __nmc, __len, __ps) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))) && !(((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))) ? __mbsnrtowcs_chk_warn (__dst, __src, __nmc, __len, __ps, (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t))) : __mbsnrtowcs_chk (__dst, __src, __nmc, __len, __ps, (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t))))) 15726: 15726: ; 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 15726: __attribute__ ((__leaf__)) wcsnrtombs (char *__restrict __dst, const wchar_t **__restrict __src, size_t __nwc, size_t __len, mbstate_t *__restrict __ps) noexcept (true) 15726: 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__dst, 2 > 1)) && (__builtin_object_size (__dst, 2 > 1)) == (unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (char)))))) ? __wcsnrtombs_alias (__dst, __src, __nwc, __len, __ps) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (char)))) ? __wcsnrtombs_chk_warn (__dst, __src, __nwc, __len, __ps, __builtin_object_size (__dst, 2 > 1)) : __wcsnrtombs_chk (__dst, __src, __nwc, __len, __ps, __builtin_object_size (__dst, 2 > 1)))) 15726: 15726: ; 15726: } 15726: # 1071 "/usr/include/wchar.h" 2 3 4 15726: 15726: 15726: } 15726: # 45 "/usr/include/c++/13/cwchar" 2 3 15726: # 62 "/usr/include/c++/13/cwchar" 3 15726: namespace std 15726: { 15726: using ::mbstate_t; 15726: } 15726: # 135 "/usr/include/c++/13/cwchar" 3 15726: extern "C++" 15726: { 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: using ::wint_t; 15726: 15726: using ::btowc; 15726: using ::fgetwc; 15726: using ::fgetws; 15726: using ::fputwc; 15726: using ::fputws; 15726: using ::fwide; 15726: using ::fwprintf; 15726: using ::fwscanf; 15726: using ::getwc; 15726: using ::getwchar; 15726: using ::mbrlen; 15726: using ::mbrtowc; 15726: using ::mbsinit; 15726: using ::mbsrtowcs; 15726: using ::putwc; 15726: using ::putwchar; 15726: 15726: using ::swprintf; 15726: 15726: using ::swscanf; 15726: using ::ungetwc; 15726: using ::vfwprintf; 15726: 15726: using ::vfwscanf; 15726: 15726: 15726: using ::vswprintf; 15726: 15726: 15726: using ::vswscanf; 15726: 15726: using ::vwprintf; 15726: 15726: using ::vwscanf; 15726: 15726: using ::wcrtomb; 15726: using ::wcscat; 15726: using ::wcscmp; 15726: using ::wcscoll; 15726: using ::wcscpy; 15726: using ::wcscspn; 15726: using ::wcsftime; 15726: using ::wcslen; 15726: using ::wcsncat; 15726: using ::wcsncmp; 15726: using ::wcsncpy; 15726: using ::wcsrtombs; 15726: using ::wcsspn; 15726: using ::wcstod; 15726: 15726: using ::wcstof; 15726: 15726: using ::wcstok; 15726: using ::wcstol; 15726: using ::wcstoul; 15726: using ::wcsxfrm; 15726: using ::wctob; 15726: using ::wmemcmp; 15726: using ::wmemcpy; 15726: using ::wmemmove; 15726: using ::wmemset; 15726: using ::wprintf; 15726: using ::wscanf; 15726: using ::wcschr; 15726: using ::wcspbrk; 15726: using ::wcsrchr; 15726: using ::wcsstr; 15726: using ::wmemchr; 15726: # 234 "/usr/include/c++/13/cwchar" 3 15726: 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace __gnu_cxx 15726: { 15726: 15726: 15726: 15726: 15726: 15726: using ::wcstold; 15726: # 260 "/usr/include/c++/13/cwchar" 3 15726: using ::wcstoll; 15726: using ::wcstoull; 15726: 15726: } 15726: 15726: namespace std 15726: { 15726: using ::__gnu_cxx::wcstold; 15726: using ::__gnu_cxx::wcstoll; 15726: using ::__gnu_cxx::wcstoull; 15726: } 15726: # 280 "/usr/include/c++/13/cwchar" 3 15726: namespace std 15726: { 15726: 15726: using std::wcstof; 15726: 15726: 15726: using std::vfwscanf; 15726: 15726: 15726: using std::vswscanf; 15726: 15726: 15726: using std::vwscanf; 15726: 15726: 15726: 15726: using std::wcstold; 15726: using std::wcstoll; 15726: using std::wcstoull; 15726: 15726: } 15726: # 41 "/usr/include/c++/13/bits/postypes.h" 2 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 62 "/usr/include/c++/13/bits/postypes.h" 3 15726: typedef long long int streamoff; 15726: 15726: 15726: 15726: 15726: 15726: typedef ptrdiff_t streamsize; 15726: # 81 "/usr/include/c++/13/bits/postypes.h" 3 15726: template 15726: class fpos 15726: { 15726: private: 15726: streamoff _M_off; 15726: _StateT _M_state; 15726: 15726: public: 15726: 15726: 15726: 15726: 15726: fpos() 15726: : _M_off(0), _M_state() { } 15726: # 103 "/usr/include/c++/13/bits/postypes.h" 3 15726: fpos(streamoff __off) 15726: : _M_off(__off), _M_state() { } 15726: 15726: 15726: fpos(const fpos&) = default; 15726: fpos& operator=(const fpos&) = default; 15726: ~fpos() = default; 15726: 15726: 15726: 15726: operator streamoff() const { return _M_off; } 15726: 15726: 15726: void 15726: state(_StateT __st) 15726: { _M_state = __st; } 15726: 15726: 15726: _StateT 15726: state() const 15726: { return _M_state; } 15726: 15726: 15726: 15726: 15726: 15726: fpos& 15726: operator+=(streamoff __off) 15726: { 15726: _M_off += __off; 15726: return *this; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: fpos& 15726: operator-=(streamoff __off) 15726: { 15726: _M_off -= __off; 15726: return *this; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: fpos 15726: operator+(streamoff __off) const 15726: { 15726: fpos __pos(*this); 15726: __pos += __off; 15726: return __pos; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: fpos 15726: operator-(streamoff __off) const 15726: { 15726: fpos __pos(*this); 15726: __pos -= __off; 15726: return __pos; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: streamoff 15726: operator-(const fpos& __other) const 15726: { return _M_off - __other._M_off; } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator==(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs) 15726: { return streamoff(__lhs) == streamoff(__rhs); } 15726: 15726: template 15726: inline bool 15726: operator!=(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs) 15726: { return streamoff(__lhs) != streamoff(__rhs); } 15726: 15726: 15726: 15726: 15726: 15726: typedef fpos streampos; 15726: 15726: typedef fpos wstreampos; 15726: # 215 "/usr/include/c++/13/bits/postypes.h" 3 15726: typedef fpos u16streampos; 15726: 15726: typedef fpos u32streampos; 15726: 15726: 15726: 15726: } 15726: # 43 "/usr/include/c++/13/iosfwd" 2 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 76 "/usr/include/c++/13/iosfwd" 3 15726: class ios_base; 15726: 15726: template > 15726: class basic_ios; 15726: 15726: template > 15726: class basic_streambuf; 15726: 15726: template > 15726: class basic_istream; 15726: 15726: template > 15726: class basic_ostream; 15726: 15726: template > 15726: class basic_iostream; 15726: 15726: 15726: namespace __cxx11 { 15726: 15726: template, 15726: typename _Alloc = allocator<_CharT> > 15726: class basic_stringbuf; 15726: 15726: template, 15726: typename _Alloc = allocator<_CharT> > 15726: class basic_istringstream; 15726: 15726: template, 15726: typename _Alloc = allocator<_CharT> > 15726: class basic_ostringstream; 15726: 15726: template, 15726: typename _Alloc = allocator<_CharT> > 15726: class basic_stringstream; 15726: 15726: } 15726: 15726: template > 15726: class basic_filebuf; 15726: 15726: template > 15726: class basic_ifstream; 15726: 15726: template > 15726: class basic_ofstream; 15726: 15726: template > 15726: class basic_fstream; 15726: 15726: template > 15726: class istreambuf_iterator; 15726: 15726: template > 15726: class ostreambuf_iterator; 15726: 15726: 15726: 15726: typedef basic_ios ios; 15726: 15726: 15726: typedef basic_streambuf streambuf; 15726: 15726: 15726: typedef basic_istream istream; 15726: 15726: 15726: typedef basic_ostream ostream; 15726: 15726: 15726: typedef basic_iostream iostream; 15726: 15726: 15726: typedef basic_stringbuf stringbuf; 15726: 15726: 15726: typedef basic_istringstream istringstream; 15726: 15726: 15726: typedef basic_ostringstream ostringstream; 15726: 15726: 15726: typedef basic_stringstream stringstream; 15726: 15726: 15726: typedef basic_filebuf filebuf; 15726: 15726: 15726: typedef basic_ifstream ifstream; 15726: 15726: 15726: typedef basic_ofstream ofstream; 15726: 15726: 15726: typedef basic_fstream fstream; 15726: 15726: 15726: 15726: typedef basic_ios wios; 15726: 15726: 15726: typedef basic_streambuf wstreambuf; 15726: 15726: 15726: typedef basic_istream wistream; 15726: 15726: 15726: typedef basic_ostream wostream; 15726: 15726: 15726: typedef basic_iostream wiostream; 15726: 15726: 15726: typedef basic_stringbuf wstringbuf; 15726: 15726: 15726: typedef basic_istringstream wistringstream; 15726: 15726: 15726: typedef basic_ostringstream wostringstream; 15726: 15726: 15726: typedef basic_stringstream wstringstream; 15726: 15726: 15726: typedef basic_filebuf wfilebuf; 15726: 15726: 15726: typedef basic_ifstream wifstream; 15726: 15726: 15726: typedef basic_ofstream wofstream; 15726: 15726: 15726: typedef basic_fstream wfstream; 15726: # 255 "/usr/include/c++/13/iosfwd" 3 15726: 15726: } 15726: # 53 "/usr/include/c++/13/bits/shared_ptr.h" 2 3 15726: # 1 "/usr/include/c++/13/bits/shared_ptr_base.h" 1 3 15726: # 53 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 15726: # 1 "/usr/include/c++/13/bits/allocated_ptr.h" 1 3 15726: # 40 "/usr/include/c++/13/bits/allocated_ptr.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: template 15726: struct __allocated_ptr 15726: { 15726: using pointer = typename allocator_traits<_Alloc>::pointer; 15726: using value_type = typename allocator_traits<_Alloc>::value_type; 15726: 15726: 15726: __allocated_ptr(_Alloc& __a, pointer __ptr) noexcept 15726: : _M_alloc(std::__addressof(__a)), _M_ptr(__ptr) 15726: { } 15726: 15726: 15726: template>> 15726: __allocated_ptr(_Alloc& __a, _Ptr __ptr) 15726: : _M_alloc(std::__addressof(__a)), 15726: _M_ptr(pointer_traits::pointer_to(*__ptr)) 15726: { } 15726: 15726: 15726: __allocated_ptr(__allocated_ptr&& __gd) noexcept 15726: : _M_alloc(__gd._M_alloc), _M_ptr(__gd._M_ptr) 15726: { __gd._M_ptr = nullptr; } 15726: 15726: 15726: ~__allocated_ptr() 15726: { 15726: if (_M_ptr != nullptr) 15726: std::allocator_traits<_Alloc>::deallocate(*_M_alloc, _M_ptr, 1); 15726: } 15726: 15726: 15726: __allocated_ptr& 15726: operator=(std::nullptr_t) noexcept 15726: { 15726: _M_ptr = nullptr; 15726: return *this; 15726: } 15726: 15726: 15726: value_type* get() { return std::__to_address(_M_ptr); } 15726: 15726: private: 15726: _Alloc* _M_alloc; 15726: pointer _M_ptr; 15726: }; 15726: 15726: 15726: template 15726: __allocated_ptr<_Alloc> 15726: __allocate_guarded(_Alloc& __a) 15726: { 15726: return { __a, std::allocator_traits<_Alloc>::allocate(__a, 1) }; 15726: } 15726: 15726: 15726: 15726: } 15726: # 54 "/usr/include/c++/13/bits/shared_ptr_base.h" 2 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/ext/atomicity.h" 1 3 15726: # 32 "/usr/include/c++/13/ext/atomicity.h" 3 15726: 15726: # 33 "/usr/include/c++/13/ext/atomicity.h" 3 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr.h" 1 3 15726: # 30 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr.h" 3 15726: #pragma GCC visibility push(default) 15726: # 148 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr.h" 3 15726: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr-default.h" 1 3 15726: # 35 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr-default.h" 3 15726: # 1 "/usr/include/pthread.h" 1 3 4 15726: # 22 "/usr/include/pthread.h" 3 4 15726: # 1 "/usr/include/sched.h" 1 3 4 15726: # 29 "/usr/include/sched.h" 3 4 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 30 "/usr/include/sched.h" 2 3 4 15726: # 43 "/usr/include/sched.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/sched.h" 1 3 4 15726: # 80 "/usr/include/arm-linux-gnueabihf/bits/sched.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_sched_param.h" 1 3 4 15726: # 23 "/usr/include/arm-linux-gnueabihf/bits/types/struct_sched_param.h" 3 4 15726: struct sched_param 15726: { 15726: int sched_priority; 15726: }; 15726: # 81 "/usr/include/arm-linux-gnueabihf/bits/sched.h" 2 3 4 15726: 15726: extern "C" { 15726: 15726: 15726: 15726: extern int clone (int (*__fn) (void *__arg), void *__child_stack, 15726: int __flags, void *__arg, ...) noexcept (true); 15726: 15726: 15726: extern int unshare (int __flags) noexcept (true); 15726: 15726: 15726: extern int sched_getcpu (void) noexcept (true); 15726: 15726: 15726: extern int getcpu (unsigned int *, unsigned int *) noexcept (true); 15726: 15726: 15726: extern int setns (int __fd, int __nstype) noexcept (true); 15726: 15726: 15726: } 15726: # 44 "/usr/include/sched.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/cpu-set.h" 1 3 4 15726: # 32 "/usr/include/arm-linux-gnueabihf/bits/cpu-set.h" 3 4 15726: typedef unsigned long int __cpu_mask; 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef struct 15726: { 15726: __cpu_mask __bits[1024 / (8 * sizeof (__cpu_mask))]; 15726: } cpu_set_t; 15726: # 115 "/usr/include/arm-linux-gnueabihf/bits/cpu-set.h" 3 4 15726: extern "C" { 15726: 15726: extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp) 15726: noexcept (true); 15726: extern cpu_set_t *__sched_cpualloc (size_t __count) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: extern void __sched_cpufree (cpu_set_t *__set) noexcept (true); 15726: 15726: } 15726: # 45 "/usr/include/sched.h" 2 3 4 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern "C" { 15726: 15726: 15726: extern int sched_setparam (__pid_t __pid, const struct sched_param *__param) 15726: noexcept (true); 15726: 15726: 15726: extern int sched_getparam (__pid_t __pid, struct sched_param *__param) noexcept (true); 15726: 15726: 15726: extern int sched_setscheduler (__pid_t __pid, int __policy, 15726: const struct sched_param *__param) noexcept (true); 15726: 15726: 15726: extern int sched_getscheduler (__pid_t __pid) noexcept (true); 15726: 15726: 15726: extern int sched_yield (void) noexcept (true); 15726: 15726: 15726: extern int sched_get_priority_max (int __algorithm) noexcept (true); 15726: 15726: 15726: extern int sched_get_priority_min (int __algorithm) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) noexcept (true) __asm__ ("" "__sched_rr_get_interval64") 15726: 15726: ; 15726: # 130 "/usr/include/sched.h" 3 4 15726: extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize, 15726: const cpu_set_t *__cpuset) noexcept (true); 15726: 15726: 15726: extern int sched_getaffinity (__pid_t __pid, size_t __cpusetsize, 15726: cpu_set_t *__cpuset) noexcept (true); 15726: 15726: 15726: } 15726: # 23 "/usr/include/pthread.h" 2 3 4 15726: # 1 "/usr/include/time.h" 1 3 4 15726: # 29 "/usr/include/time.h" 3 4 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 30 "/usr/include/time.h" 2 3 4 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/time.h" 1 3 4 15726: # 73 "/usr/include/arm-linux-gnueabihf/bits/time.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/timex.h" 1 3 4 15726: # 26 "/usr/include/arm-linux-gnueabihf/bits/timex.h" 3 4 15726: struct timex 15726: { 15726: 15726: unsigned int modes; 15726: int :32; 15726: long long offset; 15726: long long freq; 15726: long long maxerror; 15726: long long esterror; 15726: int status; 15726: int :32; 15726: long long constant; 15726: long long precision; 15726: long long tolerance; 15726: struct timeval time; 15726: long long tick; 15726: long long ppsfreq; 15726: long long jitter; 15726: int shift; 15726: int :32; 15726: long long stabil; 15726: long long jitcnt; 15726: long long calcnt; 15726: long long errcnt; 15726: long long stbcnt; 15726: 15726: int tai; 15726: 15726: int :32; int :32; int :32; int :32; 15726: int :32; int :32; int :32; int :32; 15726: int :32; int :32; int :32; 15726: # 85 "/usr/include/arm-linux-gnueabihf/bits/timex.h" 3 4 15726: }; 15726: # 74 "/usr/include/arm-linux-gnueabihf/bits/time.h" 2 3 4 15726: 15726: extern "C" { 15726: 15726: 15726: extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) noexcept (true) __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: 15726: extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) noexcept (true) __asm__ ("" "__clock_adjtime64") 15726: 15726: __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 34 "/usr/include/time.h" 2 3 4 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_tm.h" 1 3 4 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct tm 15726: { 15726: int tm_sec; 15726: int tm_min; 15726: int tm_hour; 15726: int tm_mday; 15726: int tm_mon; 15726: int tm_year; 15726: int tm_wday; 15726: int tm_yday; 15726: int tm_isdst; 15726: 15726: 15726: long int tm_gmtoff; 15726: const char *tm_zone; 15726: 15726: 15726: 15726: 15726: }; 15726: # 40 "/usr/include/time.h" 2 3 4 15726: # 48 "/usr/include/time.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_itimerspec.h" 1 3 4 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct itimerspec 15726: { 15726: struct timespec it_interval; 15726: struct timespec it_value; 15726: }; 15726: # 49 "/usr/include/time.h" 2 3 4 15726: struct sigevent; 15726: # 68 "/usr/include/time.h" 3 4 15726: extern "C" { 15726: 15726: 15726: 15726: extern clock_t clock (void) noexcept (true); 15726: # 86 "/usr/include/time.h" 3 4 15726: extern time_t time (time_t *__timer) noexcept (true) __asm__ ("" "__time64"); 15726: extern double difftime (time_t __time1, time_t __time0) noexcept (true) __asm__ ("" "__difftime64") 15726: __attribute__ ((__const__)); 15726: extern time_t mktime (struct tm *__tp) noexcept (true) __asm__ ("" "__mktime64"); 15726: # 100 "/usr/include/time.h" 3 4 15726: extern size_t strftime (char *__restrict __s, size_t __maxsize, 15726: const char *__restrict __format, 15726: const struct tm *__restrict __tp) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 3, 4))); 15726: 15726: 15726: 15726: 15726: extern char *strptime (const char *__restrict __s, 15726: const char *__restrict __fmt, struct tm *__tp) 15726: noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern size_t strftime_l (char *__restrict __s, size_t __maxsize, 15726: const char *__restrict __format, 15726: const struct tm *__restrict __tp, 15726: locale_t __loc) noexcept (true); 15726: 15726: 15726: 15726: extern char *strptime_l (const char *__restrict __s, 15726: const char *__restrict __fmt, struct tm *__tp, 15726: locale_t __loc) noexcept (true); 15726: # 141 "/usr/include/time.h" 3 4 15726: extern struct tm*gmtime (const time_t *__timer) noexcept (true) __asm__ ("" "__gmtime64"); 15726: extern struct tm *localtime (const time_t *__timer) noexcept (true) __asm__ ("" "__localtime64") 15726: ; 15726: # 164 "/usr/include/time.h" 3 4 15726: extern struct tm*gmtime_r (const time_t *__restrict __timer, struct tm *__restrict __tp) noexcept (true) __asm__ ("" "__gmtime64_r") 15726: 15726: ; 15726: 15726: extern struct tm*localtime_r (const time_t *__restrict __t, struct tm *__restrict __tp) noexcept (true) __asm__ ("" "__localtime64_r") 15726: 15726: ; 15726: # 180 "/usr/include/time.h" 3 4 15726: extern char *asctime (const struct tm *__tp) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern char *ctime (const time_t *__timer) noexcept (true) __asm__ ("" "__ctime64"); 15726: # 198 "/usr/include/time.h" 3 4 15726: extern char *asctime_r (const struct tm *__restrict __tp, 15726: char *__restrict __buf) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern char *ctime_r (const time_t *__restrict __timer, char *__restrict __buf) noexcept (true) __asm__ ("" "__ctime64_r") 15726: ; 15726: # 218 "/usr/include/time.h" 3 4 15726: extern char *__tzname[2]; 15726: extern int __daylight; 15726: extern long int __timezone; 15726: 15726: 15726: 15726: 15726: extern char *tzname[2]; 15726: 15726: 15726: 15726: extern void tzset (void) noexcept (true); 15726: 15726: 15726: 15726: extern int daylight; 15726: extern long int timezone; 15726: # 250 "/usr/include/time.h" 3 4 15726: extern time_t timegm (struct tm *__tp) noexcept (true) __asm__ ("" "__timegm64"); 15726: # 267 "/usr/include/time.h" 3 4 15726: extern time_t timelocal (struct tm *__tp) noexcept (true) __asm__ ("" "__mktime64"); 15726: 15726: 15726: 15726: 15726: extern int dysize (int __year) noexcept (true) __attribute__ ((__const__)); 15726: # 297 "/usr/include/time.h" 3 4 15726: extern int nanosleep (const struct timespec *__requested_time, struct timespec *__remaining) __asm__ ("" "__nanosleep64") 15726: 15726: ; 15726: extern int clock_getres (clockid_t __clock_id, struct timespec *__res) noexcept (true) __asm__ ("" "__clock_getres64") 15726: 15726: ; 15726: extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) noexcept (true) __asm__ ("" "__clock_gettime64") 15726: 15726: __attribute__ ((__nonnull__ (2))); 15726: extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp) noexcept (true) __asm__ ("" "__clock_settime64") 15726: 15726: __attribute__ ((__nonnull__ (2))); 15726: # 329 "/usr/include/time.h" 3 4 15726: extern int clock_nanosleep (clockid_t __clock_id, int __flags, const struct timespec *__req, struct timespec *__rem) __asm__ ("" "__clock_nanosleep_time64") 15726: 15726: 15726: ; 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int timer_create (clockid_t __clock_id, 15726: struct sigevent *__restrict __evp, 15726: timer_t *__restrict __timerid) noexcept (true); 15726: 15726: 15726: extern int timer_delete (timer_t __timerid) noexcept (true); 15726: # 362 "/usr/include/time.h" 3 4 15726: extern int timer_settime (timer_t __timerid, int __flags, const struct itimerspec *__restrict __value, struct itimerspec *__restrict __ovalue) noexcept (true) __asm__ ("" "__timer_settime64") 15726: 15726: 15726: ; 15726: 15726: extern int timer_gettime (timer_t __timerid, struct itimerspec *__value) noexcept (true) __asm__ ("" "__timer_gettime64") 15726: 15726: ; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int timer_getoverrun (timer_t __timerid) noexcept (true); 15726: # 388 "/usr/include/time.h" 3 4 15726: extern int timespec_get (struct timespec *__ts, int __base) noexcept (true) __asm__ ("" "__timespec_get64") 15726: __attribute__ ((__nonnull__ (1))); 15726: # 404 "/usr/include/time.h" 3 4 15726: extern int timespec_getres (struct timespec *__ts, int __base) noexcept (true) __asm__ ("" "__timespec_getres64") 15726: 15726: ; 15726: # 426 "/usr/include/time.h" 3 4 15726: extern int getdate_err; 15726: # 435 "/usr/include/time.h" 3 4 15726: extern struct tm *getdate (const char *__string); 15726: # 449 "/usr/include/time.h" 3 4 15726: extern int getdate_r (const char *__restrict __string, 15726: struct tm *__restrict __resbufp); 15726: 15726: 15726: } 15726: # 24 "/usr/include/pthread.h" 2 3 4 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/setjmp.h" 1 3 4 15726: # 33 "/usr/include/arm-linux-gnueabihf/bits/setjmp.h" 3 4 15726: typedef int __jmp_buf[64] __attribute__((__aligned__ (8))); 15726: # 28 "/usr/include/pthread.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 15726: # 29 "/usr/include/pthread.h" 2 3 4 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct___jmp_buf_tag.h" 1 3 4 15726: # 26 "/usr/include/arm-linux-gnueabihf/bits/types/struct___jmp_buf_tag.h" 3 4 15726: struct __jmp_buf_tag 15726: { 15726: 15726: 15726: 15726: 15726: __jmp_buf __jmpbuf; 15726: int __mask_was_saved; 15726: __sigset_t __saved_mask; 15726: }; 15726: # 32 "/usr/include/pthread.h" 2 3 4 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/pthread_stack_min-dynamic.h" 1 3 4 15726: # 23 "/usr/include/arm-linux-gnueabihf/bits/pthread_stack_min-dynamic.h" 3 4 15726: extern "C" { 15726: extern long int __sysconf (int __name) noexcept (true); 15726: } 15726: # 34 "/usr/include/pthread.h" 2 3 4 15726: 15726: 15726: 15726: enum 15726: { 15726: PTHREAD_CREATE_JOINABLE, 15726: 15726: PTHREAD_CREATE_DETACHED 15726: 15726: }; 15726: 15726: 15726: 15726: enum 15726: { 15726: PTHREAD_MUTEX_TIMED_NP, 15726: PTHREAD_MUTEX_RECURSIVE_NP, 15726: PTHREAD_MUTEX_ERRORCHECK_NP, 15726: PTHREAD_MUTEX_ADAPTIVE_NP 15726: 15726: , 15726: PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP, 15726: PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP, 15726: PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP, 15726: PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL 15726: 15726: 15726: 15726: , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP 15726: 15726: }; 15726: 15726: 15726: 15726: 15726: enum 15726: { 15726: PTHREAD_MUTEX_STALLED, 15726: PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED, 15726: PTHREAD_MUTEX_ROBUST, 15726: PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: enum 15726: { 15726: PTHREAD_PRIO_NONE, 15726: PTHREAD_PRIO_INHERIT, 15726: PTHREAD_PRIO_PROTECT 15726: }; 15726: # 104 "/usr/include/pthread.h" 3 4 15726: enum 15726: { 15726: PTHREAD_RWLOCK_PREFER_READER_NP, 15726: PTHREAD_RWLOCK_PREFER_WRITER_NP, 15726: PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, 15726: PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP 15726: }; 15726: # 124 "/usr/include/pthread.h" 3 4 15726: enum 15726: { 15726: PTHREAD_INHERIT_SCHED, 15726: 15726: PTHREAD_EXPLICIT_SCHED 15726: 15726: }; 15726: 15726: 15726: 15726: enum 15726: { 15726: PTHREAD_SCOPE_SYSTEM, 15726: 15726: PTHREAD_SCOPE_PROCESS 15726: 15726: }; 15726: 15726: 15726: 15726: enum 15726: { 15726: PTHREAD_PROCESS_PRIVATE, 15726: 15726: PTHREAD_PROCESS_SHARED 15726: 15726: }; 15726: # 159 "/usr/include/pthread.h" 3 4 15726: struct _pthread_cleanup_buffer 15726: { 15726: void (*__routine) (void *); 15726: void *__arg; 15726: int __canceltype; 15726: struct _pthread_cleanup_buffer *__prev; 15726: }; 15726: 15726: 15726: enum 15726: { 15726: PTHREAD_CANCEL_ENABLE, 15726: 15726: PTHREAD_CANCEL_DISABLE 15726: 15726: }; 15726: enum 15726: { 15726: PTHREAD_CANCEL_DEFERRED, 15726: 15726: PTHREAD_CANCEL_ASYNCHRONOUS 15726: 15726: }; 15726: # 197 "/usr/include/pthread.h" 3 4 15726: extern "C" { 15726: 15726: 15726: 15726: 15726: extern int pthread_create (pthread_t *__restrict __newthread, 15726: const pthread_attr_t *__restrict __attr, 15726: void *(*__start_routine) (void *), 15726: void *__restrict __arg) noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 15726: 15726: 15726: 15726: 15726: 15726: extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int pthread_join (pthread_t __th, void **__thread_return); 15726: 15726: 15726: 15726: 15726: extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) noexcept (true); 15726: # 248 "/usr/include/pthread.h" 3 4 15726: extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return, const struct timespec *__abstime) __asm__ ("" "__pthread_timedjoin_np64") 15726: 15726: 15726: ; 15726: 15726: extern int pthread_clockjoin_np (pthread_t __th, void **__thread_return, clockid_t __clockid, const struct timespec *__abstime) __asm__ ("" "__pthread_clockjoin_np64") 15726: 15726: 15726: 15726: ; 15726: # 269 "/usr/include/pthread.h" 3 4 15726: extern int pthread_detach (pthread_t __th) noexcept (true); 15726: 15726: 15726: 15726: extern pthread_t pthread_self (void) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern int pthread_equal (pthread_t __thread1, pthread_t __thread2) 15726: noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int pthread_attr_init (pthread_attr_t *__attr) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_attr_destroy (pthread_attr_t *__attr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr, 15726: int *__detachstate) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int pthread_attr_setdetachstate (pthread_attr_t *__attr, 15726: int __detachstate) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern int pthread_attr_getguardsize (const pthread_attr_t *__attr, 15726: size_t *__guardsize) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int pthread_attr_setguardsize (pthread_attr_t *__attr, 15726: size_t __guardsize) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr, 15726: struct sched_param *__restrict __param) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr, 15726: const struct sched_param *__restrict 15726: __param) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict 15726: __attr, int *__restrict __policy) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict 15726: __attr, int *__restrict __inherit) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int pthread_attr_setinheritsched (pthread_attr_t *__attr, 15726: int __inherit) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr, 15726: int *__restrict __scope) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict 15726: __attr, void **__restrict __stackaddr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__deprecated__)); 15726: 15726: 15726: 15726: 15726: 15726: extern int pthread_attr_setstackaddr (pthread_attr_t *__attr, 15726: void *__stackaddr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)); 15726: 15726: 15726: extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict 15726: __attr, size_t *__restrict __stacksize) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: 15726: extern int pthread_attr_setstacksize (pthread_attr_t *__attr, 15726: size_t __stacksize) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr, 15726: void **__restrict __stackaddr, 15726: size_t *__restrict __stacksize) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2, 3))); 15726: 15726: 15726: 15726: 15726: extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr, 15726: size_t __stacksize) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr, 15726: size_t __cpusetsize, 15726: const cpu_set_t *__cpuset) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 15726: 15726: 15726: 15726: extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr, 15726: size_t __cpusetsize, 15726: cpu_set_t *__cpuset) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 15726: 15726: 15726: extern int pthread_getattr_default_np (pthread_attr_t *__attr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_attr_setsigmask_np (pthread_attr_t *__attr, 15726: const __sigset_t *sigmask); 15726: 15726: 15726: 15726: 15726: extern int pthread_attr_getsigmask_np (const pthread_attr_t *__attr, 15726: __sigset_t *sigmask); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int pthread_setattr_default_np (const pthread_attr_t *__attr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr) 15726: noexcept (true) __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int pthread_setschedparam (pthread_t __target_thread, int __policy, 15726: const struct sched_param *__param) 15726: noexcept (true) __attribute__ ((__nonnull__ (3))); 15726: 15726: 15726: extern int pthread_getschedparam (pthread_t __target_thread, 15726: int *__restrict __policy, 15726: struct sched_param *__restrict __param) 15726: noexcept (true) __attribute__ ((__nonnull__ (2, 3))); 15726: 15726: 15726: extern int pthread_setschedprio (pthread_t __target_thread, int __prio) 15726: noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int pthread_getname_np (pthread_t __target_thread, char *__buf, 15726: size_t __buflen) 15726: noexcept (true) __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: extern int pthread_setname_np (pthread_t __target_thread, const char *__name) 15726: noexcept (true) __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: 15726: 15726: 15726: extern int pthread_getconcurrency (void) noexcept (true); 15726: 15726: 15726: extern int pthread_setconcurrency (int __level) noexcept (true); 15726: 15726: 15726: 15726: extern int pthread_yield (void) noexcept (true); 15726: 15726: extern int pthread_yield (void) noexcept (true) __asm__ ("" "sched_yield") 15726: __attribute__ ((__deprecated__ ("pthread_yield is deprecated, use sched_yield instead"))) 15726: ; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize, 15726: const cpu_set_t *__cpuset) 15726: noexcept (true) __attribute__ ((__nonnull__ (3))); 15726: 15726: 15726: extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize, 15726: cpu_set_t *__cpuset) 15726: noexcept (true) __attribute__ ((__nonnull__ (3))); 15726: # 509 "/usr/include/pthread.h" 3 4 15726: extern int pthread_once (pthread_once_t *__once_control, 15726: void (*__init_routine) (void)) __attribute__ ((__nonnull__ (1, 2))); 15726: # 521 "/usr/include/pthread.h" 3 4 15726: extern int pthread_setcancelstate (int __state, int *__oldstate); 15726: 15726: 15726: 15726: extern int pthread_setcanceltype (int __type, int *__oldtype); 15726: 15726: 15726: extern int pthread_cancel (pthread_t __th); 15726: 15726: 15726: 15726: 15726: extern void pthread_testcancel (void); 15726: 15726: 15726: 15726: 15726: struct __cancel_jmp_buf_tag 15726: { 15726: __jmp_buf __cancel_jmp_buf; 15726: int __mask_was_saved; 15726: }; 15726: 15726: typedef struct 15726: { 15726: struct __cancel_jmp_buf_tag __cancel_jmp_buf[1]; 15726: void *__pad[4]; 15726: } __pthread_unwind_buf_t __attribute__ ((__aligned__)); 15726: # 557 "/usr/include/pthread.h" 3 4 15726: struct __pthread_cleanup_frame 15726: { 15726: void (*__cancel_routine) (void *); 15726: void *__cancel_arg; 15726: int __do_it; 15726: int __cancel_type; 15726: }; 15726: 15726: 15726: 15726: 15726: class __pthread_cleanup_class 15726: { 15726: void (*__cancel_routine) (void *); 15726: void *__cancel_arg; 15726: int __do_it; 15726: int __cancel_type; 15726: 15726: public: 15726: __pthread_cleanup_class (void (*__fct) (void *), void *__arg) 15726: : __cancel_routine (__fct), __cancel_arg (__arg), __do_it (1) { } 15726: ~__pthread_cleanup_class () { if (__do_it) __cancel_routine (__cancel_arg); } 15726: void __setdoit (int __newval) { __do_it = __newval; } 15726: void __defer () { pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, 15726: &__cancel_type); } 15726: void __restore () const { pthread_setcanceltype (__cancel_type, 0); } 15726: }; 15726: # 766 "/usr/include/pthread.h" 3 4 15726: extern int __sigsetjmp_cancel (struct __cancel_jmp_buf_tag __env[1], int __savemask) noexcept (true) __asm__ ("" "__sigsetjmp") 15726: 15726: 15726: __attribute__ ((__returns_twice__)); 15726: # 781 "/usr/include/pthread.h" 3 4 15726: extern int pthread_mutex_init (pthread_mutex_t *__mutex, 15726: const pthread_mutexattr_t *__mutexattr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_mutex_destroy (pthread_mutex_t *__mutex) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_mutex_trylock (pthread_mutex_t *__mutex) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_mutex_lock (pthread_mutex_t *__mutex) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: # 805 "/usr/include/pthread.h" 3 4 15726: extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex, const struct timespec *__restrict __abstime) noexcept (true) __asm__ ("" "__pthread_mutex_timedlock64") 15726: 15726: 15726: __attribute__ ((__nonnull__ (1, 2))); 15726: # 823 "/usr/include/pthread.h" 3 4 15726: extern int pthread_mutex_clocklock (pthread_mutex_t *__restrict __mutex, clockid_t __clockid, const struct timespec *__restrict __abstime) noexcept (true) __asm__ ("" "__pthread_mutex_clocklock64") 15726: 15726: 15726: 15726: __attribute__ ((__nonnull__ (1, 3))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int pthread_mutex_unlock (pthread_mutex_t *__mutex) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern int pthread_mutex_getprioceiling (const pthread_mutex_t * 15726: __restrict __mutex, 15726: int *__restrict __prioceiling) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex, 15726: int __prioceiling, 15726: int *__restrict __old_ceiling) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 3))); 15726: 15726: 15726: 15726: 15726: extern int pthread_mutex_consistent (pthread_mutex_t *__mutex) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_mutex_consistent_np (pthread_mutex_t *) noexcept (true) __asm__ ("" "pthread_mutex_consistent") 15726: __attribute__ ((__nonnull__ (1))) 15726: __attribute__ ((__deprecated__ ("pthread_mutex_consistent_np is deprecated, use pthread_mutex_consistent"))) 15726: ; 15726: # 874 "/usr/include/pthread.h" 3 4 15726: extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t * 15726: __restrict __attr, 15726: int *__restrict __pshared) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr, 15726: int __pshared) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict 15726: __attr, int *__restrict __kind) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: 15726: extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t * 15726: __restrict __attr, 15726: int *__restrict __protocol) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr, 15726: int __protocol) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t * 15726: __restrict __attr, 15726: int *__restrict __prioceiling) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr, 15726: int __prioceiling) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr, 15726: int *__robustness) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int pthread_mutexattr_getrobust_np (pthread_mutexattr_t *, int *) noexcept (true) __asm__ ("" "pthread_mutexattr_getrobust") 15726: 15726: __attribute__ ((__nonnull__ (1))) 15726: __attribute__ ((__deprecated__ ("pthread_mutexattr_getrobust_np is deprecated, use pthread_mutexattr_getrobust"))) 15726: ; 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr, 15726: int __robustness) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *, int) noexcept (true) __asm__ ("" "pthread_mutexattr_setrobust") 15726: 15726: __attribute__ ((__nonnull__ (1))) 15726: __attribute__ ((__deprecated__ ("pthread_mutexattr_setrobust_np is deprecated, use pthread_mutexattr_setrobust"))) 15726: ; 15726: # 967 "/usr/include/pthread.h" 3 4 15726: extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock, 15726: const pthread_rwlockattr_t *__restrict 15726: __attr) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: # 991 "/usr/include/pthread.h" 3 4 15726: extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock, const struct timespec *__restrict __abstime) noexcept (true) __asm__ ("" "__pthread_rwlock_timedrdlock64") 15726: 15726: 15726: 15726: __attribute__ ((__nonnull__ (1, 2))); 15726: # 1010 "/usr/include/pthread.h" 3 4 15726: extern int pthread_rwlock_clockrdlock (pthread_rwlock_t *__restrict __rwlock, clockid_t __clockid, const struct timespec *__restrict __abstime) noexcept (true) __asm__ ("" "__pthread_rwlock_clockrdlock64") 15726: 15726: 15726: 15726: 15726: __attribute__ ((__nonnull__ (1, 3))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: # 1038 "/usr/include/pthread.h" 3 4 15726: extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock, const struct timespec *__restrict __abstime) noexcept (true) __asm__ ("" "__pthread_rwlock_timedwrlock64") 15726: 15726: 15726: 15726: __attribute__ ((__nonnull__ (1, 2))); 15726: # 1058 "/usr/include/pthread.h" 3 4 15726: extern int pthread_rwlock_clockwrlock (pthread_rwlock_t *__restrict __rwlock, clockid_t __clockid, const struct timespec *__restrict __abstime) noexcept (true) __asm__ ("" "__pthread_rwlock_clockwrlock64") 15726: 15726: 15726: 15726: 15726: __attribute__ ((__nonnull__ (1, 3))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t * 15726: __restrict __attr, 15726: int *__restrict __pshared) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr, 15726: int __pshared) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t * 15726: __restrict __attr, 15726: int *__restrict __pref) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr, 15726: int __pref) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int pthread_cond_init (pthread_cond_t *__restrict __cond, 15726: const pthread_condattr_t *__restrict __cond_attr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_cond_destroy (pthread_cond_t *__cond) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_cond_signal (pthread_cond_t *__cond) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_cond_broadcast (pthread_cond_t *__cond) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int pthread_cond_wait (pthread_cond_t *__restrict __cond, 15726: pthread_mutex_t *__restrict __mutex) 15726: __attribute__ ((__nonnull__ (1, 2))); 15726: # 1151 "/usr/include/pthread.h" 3 4 15726: extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond, pthread_mutex_t *__restrict __mutex, const struct timespec *__restrict __abstime) __asm__ ("" "__pthread_cond_timedwait64") 15726: 15726: 15726: 15726: 15726: __attribute__ ((__nonnull__ (1, 2, 3))); 15726: # 1178 "/usr/include/pthread.h" 3 4 15726: extern int pthread_cond_clockwait (pthread_cond_t *__restrict __cond, pthread_mutex_t *__restrict __mutex, __clockid_t __clock_id, const struct timespec *__restrict __abstime) __asm__ ("" "__pthread_cond_clockwait64") 15726: 15726: 15726: 15726: 15726: 15726: __attribute__ ((__nonnull__ (1, 2, 4))); 15726: # 1194 "/usr/include/pthread.h" 3 4 15726: extern int pthread_condattr_init (pthread_condattr_t *__attr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_condattr_destroy (pthread_condattr_t *__attr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_condattr_getpshared (const pthread_condattr_t * 15726: __restrict __attr, 15726: int *__restrict __pshared) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int pthread_condattr_setpshared (pthread_condattr_t *__attr, 15726: int __pshared) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern int pthread_condattr_getclock (const pthread_condattr_t * 15726: __restrict __attr, 15726: __clockid_t *__restrict __clock_id) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int pthread_condattr_setclock (pthread_condattr_t *__attr, 15726: __clockid_t __clock_id) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: # 1230 "/usr/include/pthread.h" 3 4 15726: extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_spin_destroy (pthread_spinlock_t *__lock) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_spin_lock (pthread_spinlock_t *__lock) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_spin_trylock (pthread_spinlock_t *__lock) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_spin_unlock (pthread_spinlock_t *__lock) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier, 15726: const pthread_barrierattr_t *__restrict 15726: __attr, unsigned int __count) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_barrier_destroy (pthread_barrier_t *__barrier) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_barrier_wait (pthread_barrier_t *__barrier) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t * 15726: __restrict __attr, 15726: int *__restrict __pshared) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr, 15726: int __pshared) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: # 1297 "/usr/include/pthread.h" 3 4 15726: extern int pthread_key_create (pthread_key_t *__key, 15726: void (*__destr_function) (void *)) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int pthread_key_delete (pthread_key_t __key) noexcept (true); 15726: 15726: 15726: extern void *pthread_getspecific (pthread_key_t __key) noexcept (true); 15726: 15726: 15726: extern int pthread_setspecific (pthread_key_t __key, 15726: const void *__pointer) 15726: noexcept (true) __attribute__ ((__access__ (__none__, 2))); 15726: 15726: 15726: 15726: 15726: extern int pthread_getcpuclockid (pthread_t __thread_id, 15726: __clockid_t *__clock_id) 15726: noexcept (true) __attribute__ ((__nonnull__ (2))); 15726: # 1332 "/usr/include/pthread.h" 3 4 15726: extern int pthread_atfork (void (*__prepare) (void), 15726: void (*__parent) (void), 15726: void (*__child) (void)) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__gnu_inline__)) int 15726: __attribute__ ((__leaf__)) pthread_equal (pthread_t __thread1, pthread_t __thread2) noexcept (true) 15726: { 15726: return __thread1 == __thread2; 15726: } 15726: 15726: 15726: } 15726: # 36 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr-default.h" 2 3 15726: # 47 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr-default.h" 3 15726: typedef pthread_t __gthread_t; 15726: typedef pthread_key_t __gthread_key_t; 15726: typedef pthread_once_t __gthread_once_t; 15726: typedef pthread_mutex_t __gthread_mutex_t; 15726: typedef pthread_mutex_t __gthread_recursive_mutex_t; 15726: typedef pthread_cond_t __gthread_cond_t; 15726: typedef struct timespec __gthread_time_t; 15726: # 102 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr-default.h" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 299 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr-default.h" 3 15726: static inline int 15726: __gthread_active_p (void) 15726: { 15726: return 1; 15726: } 15726: # 659 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr-default.h" 3 15726: static inline int 15726: __gthread_create (__gthread_t *__threadid, void *(*__func) (void*), 15726: void *__args) 15726: { 15726: return pthread_create (__threadid, __null, __func, __args); 15726: } 15726: 15726: static inline int 15726: __gthread_join (__gthread_t __threadid, void **__value_ptr) 15726: { 15726: return pthread_join (__threadid, __value_ptr); 15726: } 15726: 15726: static inline int 15726: __gthread_detach (__gthread_t __threadid) 15726: { 15726: return pthread_detach (__threadid); 15726: } 15726: 15726: static inline int 15726: __gthread_equal (__gthread_t __t1, __gthread_t __t2) 15726: { 15726: return pthread_equal (__t1, __t2); 15726: } 15726: 15726: static inline __gthread_t 15726: __gthread_self (void) 15726: { 15726: return pthread_self (); 15726: } 15726: 15726: static inline int 15726: __gthread_yield (void) 15726: { 15726: return sched_yield (); 15726: } 15726: 15726: static inline int 15726: __gthread_once (__gthread_once_t *__once, void (*__func) (void)) 15726: { 15726: if (__gthread_active_p ()) 15726: return pthread_once (__once, __func); 15726: else 15726: return -1; 15726: } 15726: 15726: static inline int 15726: __gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *)) 15726: { 15726: return pthread_key_create (__key, __dtor); 15726: } 15726: 15726: static inline int 15726: __gthread_key_delete (__gthread_key_t __key) 15726: { 15726: return pthread_key_delete (__key); 15726: } 15726: 15726: static inline void * 15726: __gthread_getspecific (__gthread_key_t __key) 15726: { 15726: return pthread_getspecific (__key); 15726: } 15726: 15726: static inline int 15726: __gthread_setspecific (__gthread_key_t __key, const void *__ptr) 15726: { 15726: return pthread_setspecific (__key, __ptr); 15726: } 15726: 15726: static inline void 15726: __gthread_mutex_init_function (__gthread_mutex_t *__mutex) 15726: { 15726: if (__gthread_active_p ()) 15726: pthread_mutex_init (__mutex, __null); 15726: } 15726: 15726: static inline int 15726: __gthread_mutex_destroy (__gthread_mutex_t *__mutex) 15726: { 15726: if (__gthread_active_p ()) 15726: return pthread_mutex_destroy (__mutex); 15726: else 15726: return 0; 15726: } 15726: 15726: static inline int 15726: __gthread_mutex_lock (__gthread_mutex_t *__mutex) 15726: { 15726: if (__gthread_active_p ()) 15726: return pthread_mutex_lock (__mutex); 15726: else 15726: return 0; 15726: } 15726: 15726: static inline int 15726: __gthread_mutex_trylock (__gthread_mutex_t *__mutex) 15726: { 15726: if (__gthread_active_p ()) 15726: return pthread_mutex_trylock (__mutex); 15726: else 15726: return 0; 15726: } 15726: 15726: 15726: static inline int 15726: __gthread_mutex_timedlock (__gthread_mutex_t *__mutex, 15726: const __gthread_time_t *__abs_timeout) 15726: { 15726: if (__gthread_active_p ()) 15726: return pthread_mutex_timedlock (__mutex, __abs_timeout); 15726: else 15726: return 0; 15726: } 15726: 15726: 15726: static inline int 15726: __gthread_mutex_unlock (__gthread_mutex_t *__mutex) 15726: { 15726: if (__gthread_active_p ()) 15726: return pthread_mutex_unlock (__mutex); 15726: else 15726: return 0; 15726: } 15726: # 808 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr-default.h" 3 15726: static inline int 15726: __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex) 15726: { 15726: return __gthread_mutex_lock (__mutex); 15726: } 15726: 15726: static inline int 15726: __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex) 15726: { 15726: return __gthread_mutex_trylock (__mutex); 15726: } 15726: 15726: 15726: static inline int 15726: __gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex, 15726: const __gthread_time_t *__abs_timeout) 15726: { 15726: return __gthread_mutex_timedlock (__mutex, __abs_timeout); 15726: } 15726: 15726: 15726: static inline int 15726: __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex) 15726: { 15726: return __gthread_mutex_unlock (__mutex); 15726: } 15726: 15726: static inline int 15726: __gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex) 15726: { 15726: return __gthread_mutex_destroy (__mutex); 15726: } 15726: # 850 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr-default.h" 3 15726: static inline int 15726: __gthread_cond_broadcast (__gthread_cond_t *__cond) 15726: { 15726: return pthread_cond_broadcast (__cond); 15726: } 15726: 15726: static inline int 15726: __gthread_cond_signal (__gthread_cond_t *__cond) 15726: { 15726: return pthread_cond_signal (__cond); 15726: } 15726: 15726: static inline int 15726: __gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex) 15726: { 15726: return pthread_cond_wait (__cond, __mutex); 15726: } 15726: 15726: static inline int 15726: __gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex, 15726: const __gthread_time_t *__abs_timeout) 15726: { 15726: return pthread_cond_timedwait (__cond, __mutex, __abs_timeout); 15726: } 15726: 15726: static inline int 15726: __gthread_cond_wait_recursive (__gthread_cond_t *__cond, 15726: __gthread_recursive_mutex_t *__mutex) 15726: { 15726: return __gthread_cond_wait (__cond, __mutex); 15726: } 15726: 15726: static inline int 15726: __gthread_cond_destroy (__gthread_cond_t* __cond) 15726: { 15726: return pthread_cond_destroy (__cond); 15726: } 15726: # 149 "/usr/include/arm-linux-gnueabihf/c++/13/bits/gthr.h" 2 3 15726: 15726: 15726: #pragma GCC visibility pop 15726: # 36 "/usr/include/c++/13/ext/atomicity.h" 2 3 15726: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/atomic_word.h" 1 3 15726: # 32 "/usr/include/arm-linux-gnueabihf/c++/13/bits/atomic_word.h" 3 15726: typedef int _Atomic_word; 15726: # 37 "/usr/include/c++/13/ext/atomicity.h" 2 3 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/sys/single_threaded.h" 1 3 4 15726: # 24 "/usr/include/arm-linux-gnueabihf/sys/single_threaded.h" 3 4 15726: extern "C" { 15726: 15726: 15726: 15726: 15726: extern char __libc_single_threaded; 15726: 15726: } 15726: # 39 "/usr/include/c++/13/ext/atomicity.h" 2 3 15726: 15726: 15726: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: __attribute__((__always_inline__)) 15726: inline bool 15726: __is_single_threaded() noexcept 15726: { 15726: 15726: 15726: 15726: return ::__libc_single_threaded; 15726: 15726: 15726: 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline _Atomic_word 15726: __attribute__((__always_inline__)) 15726: __exchange_and_add(volatile _Atomic_word* __mem, int __val) 15726: { return __atomic_fetch_add(__mem, __val, 4); } 15726: 15726: inline void 15726: __attribute__((__always_inline__)) 15726: __atomic_add(volatile _Atomic_word* __mem, int __val) 15726: { __atomic_fetch_add(__mem, __val, 4); } 15726: # 80 "/usr/include/c++/13/ext/atomicity.h" 3 15726: inline _Atomic_word 15726: __attribute__((__always_inline__)) 15726: __exchange_and_add_single(_Atomic_word* __mem, int __val) 15726: { 15726: _Atomic_word __result = *__mem; 15726: *__mem += __val; 15726: return __result; 15726: } 15726: 15726: inline void 15726: __attribute__((__always_inline__)) 15726: __atomic_add_single(_Atomic_word* __mem, int __val) 15726: { *__mem += __val; } 15726: 15726: inline _Atomic_word 15726: __attribute__ ((__always_inline__)) 15726: __exchange_and_add_dispatch(_Atomic_word* __mem, int __val) 15726: { 15726: if (__is_single_threaded()) 15726: return __exchange_and_add_single(__mem, __val); 15726: else 15726: return __exchange_and_add(__mem, __val); 15726: } 15726: 15726: inline void 15726: __attribute__ ((__always_inline__)) 15726: __atomic_add_dispatch(_Atomic_word* __mem, int __val) 15726: { 15726: if (__is_single_threaded()) 15726: __atomic_add_single(__mem, __val); 15726: else 15726: __atomic_add(__mem, __val); 15726: } 15726: 15726: 15726: } 15726: # 62 "/usr/include/c++/13/bits/shared_ptr_base.h" 2 3 15726: # 1 "/usr/include/c++/13/ext/concurrence.h" 1 3 15726: # 32 "/usr/include/c++/13/ext/concurrence.h" 3 15726: 15726: # 33 "/usr/include/c++/13/ext/concurrence.h" 3 15726: 15726: # 1 "/usr/include/c++/13/exception" 1 3 15726: # 33 "/usr/include/c++/13/exception" 3 15726: 15726: # 34 "/usr/include/c++/13/exception" 3 15726: 15726: 15726: 15726: 15726: extern "C++" { 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: # 51 "/usr/include/c++/13/exception" 3 15726: class bad_exception : public exception 15726: { 15726: public: 15726: bad_exception() noexcept { } 15726: 15726: 15726: 15726: virtual ~bad_exception() noexcept; 15726: 15726: 15726: virtual const char* 15726: what() const noexcept; 15726: }; 15726: 15726: 15726: typedef void (*terminate_handler) (); 15726: 15726: 15726: terminate_handler set_terminate(terminate_handler) noexcept; 15726: 15726: 15726: 15726: terminate_handler get_terminate() noexcept; 15726: 15726: 15726: 15726: 15726: void terminate() noexcept __attribute__ ((__noreturn__)); 15726: 15726: 15726: 15726: typedef void (*__attribute__ ((__deprecated__)) unexpected_handler) (); 15726: 15726: 15726: 15726: 15726: 15726: __attribute__ ((__deprecated__)) 15726: unexpected_handler set_unexpected(unexpected_handler) noexcept; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: __attribute__ ((__deprecated__)) 15726: unexpected_handler get_unexpected() noexcept; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: __attribute__ ((__deprecated__)) 15726: void unexpected() __attribute__ ((__noreturn__)); 15726: # 121 "/usr/include/c++/13/exception" 3 15726: __attribute__ ((__deprecated__ ("use '" "std::uncaught_exceptions()" "' instead"))) 15726: bool uncaught_exception() noexcept __attribute__ ((__pure__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: int uncaught_exceptions() noexcept __attribute__ ((__pure__)); 15726: 15726: 15726: 15726: } 15726: 15726: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 156 "/usr/include/c++/13/exception" 3 15726: void __verbose_terminate_handler(); 15726: 15726: 15726: } 15726: 15726: } 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/exception_ptr.h" 1 3 15726: # 36 "/usr/include/c++/13/bits/exception_ptr.h" 3 15726: # 1 "/usr/include/c++/13/bits/cxxabi_init_exception.h" 1 3 15726: # 34 "/usr/include/c++/13/bits/cxxabi_init_exception.h" 3 15726: 15726: # 35 "/usr/include/c++/13/bits/cxxabi_init_exception.h" 3 15726: 15726: #pragma GCC visibility push(default) 15726: 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 39 "/usr/include/c++/13/bits/cxxabi_init_exception.h" 2 3 15726: # 50 "/usr/include/c++/13/bits/cxxabi_init_exception.h" 3 15726: namespace std 15726: { 15726: class type_info; 15726: } 15726: 15726: namespace __cxxabiv1 15726: { 15726: struct __cxa_refcounted_exception; 15726: 15726: extern "C" 15726: { 15726: 15726: void* 15726: __cxa_allocate_exception(size_t) noexcept; 15726: 15726: void 15726: __cxa_free_exception(void*) noexcept; 15726: 15726: 15726: __cxa_refcounted_exception* 15726: __cxa_init_primary_exception(void *__object, std::type_info *__tinfo, 15726: void ( *__dest) (void *)) 15726: noexcept; 15726: 15726: } 15726: } 15726: 15726: 15726: 15726: #pragma GCC visibility pop 15726: # 37 "/usr/include/c++/13/bits/exception_ptr.h" 2 3 15726: # 50 "/usr/include/c++/13/bits/exception_ptr.h" 3 15726: extern "C++" { 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: class type_info; 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace __exception_ptr 15726: { 15726: class exception_ptr; 15726: } 15726: 15726: using __exception_ptr::exception_ptr; 15726: # 75 "/usr/include/c++/13/bits/exception_ptr.h" 3 15726: exception_ptr current_exception() noexcept; 15726: 15726: template 15726: exception_ptr make_exception_ptr(_Ex) noexcept; 15726: 15726: 15726: void rethrow_exception(exception_ptr) __attribute__ ((__noreturn__)); 15726: 15726: namespace __exception_ptr 15726: { 15726: using std::rethrow_exception; 15726: # 97 "/usr/include/c++/13/bits/exception_ptr.h" 3 15726: class exception_ptr 15726: { 15726: void* _M_exception_object; 15726: 15726: explicit exception_ptr(void* __e) noexcept; 15726: 15726: void _M_addref() noexcept; 15726: void _M_release() noexcept; 15726: 15726: void *_M_get() const noexcept __attribute__ ((__pure__)); 15726: 15726: friend exception_ptr std::current_exception() noexcept; 15726: friend void std::rethrow_exception(exception_ptr); 15726: template 15726: friend exception_ptr std::make_exception_ptr(_Ex) noexcept; 15726: 15726: public: 15726: exception_ptr() noexcept; 15726: 15726: exception_ptr(const exception_ptr&) noexcept; 15726: 15726: 15726: exception_ptr(nullptr_t) noexcept 15726: : _M_exception_object(nullptr) 15726: { } 15726: 15726: exception_ptr(exception_ptr&& __o) noexcept 15726: : _M_exception_object(__o._M_exception_object) 15726: { __o._M_exception_object = nullptr; } 15726: # 135 "/usr/include/c++/13/bits/exception_ptr.h" 3 15726: exception_ptr& 15726: operator=(const exception_ptr&) noexcept; 15726: 15726: 15726: exception_ptr& 15726: operator=(exception_ptr&& __o) noexcept 15726: { 15726: exception_ptr(static_cast(__o)).swap(*this); 15726: return *this; 15726: } 15726: 15726: 15726: ~exception_ptr() noexcept; 15726: 15726: void 15726: swap(exception_ptr&) noexcept; 15726: # 162 "/usr/include/c++/13/bits/exception_ptr.h" 3 15726: explicit operator bool() const noexcept 15726: { return _M_exception_object; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const exception_ptr& __x, const exception_ptr& __y) 15726: noexcept 15726: { return __x._M_exception_object == __y._M_exception_object; } 15726: 15726: friend bool 15726: operator!=(const exception_ptr& __x, const exception_ptr& __y) 15726: noexcept 15726: { return __x._M_exception_object != __y._M_exception_object; } 15726: 15726: 15726: const class std::type_info* 15726: __cxa_exception_type() const noexcept 15726: __attribute__ ((__pure__)); 15726: }; 15726: 15726: 15726: inline 15726: exception_ptr::exception_ptr() noexcept 15726: : _M_exception_object(0) 15726: { } 15726: 15726: 15726: inline 15726: exception_ptr::exception_ptr(const exception_ptr& __other) 15726: noexcept 15726: : _M_exception_object(__other._M_exception_object) 15726: { 15726: if (_M_exception_object) 15726: _M_addref(); 15726: } 15726: 15726: 15726: inline 15726: exception_ptr::~exception_ptr() noexcept 15726: { 15726: if (_M_exception_object) 15726: _M_release(); 15726: } 15726: 15726: 15726: inline exception_ptr& 15726: exception_ptr::operator=(const exception_ptr& __other) noexcept 15726: { 15726: exception_ptr(__other).swap(*this); 15726: return *this; 15726: } 15726: 15726: 15726: inline void 15726: exception_ptr::swap(exception_ptr &__other) noexcept 15726: { 15726: void *__tmp = _M_exception_object; 15726: _M_exception_object = __other._M_exception_object; 15726: __other._M_exception_object = __tmp; 15726: } 15726: 15726: 15726: inline void 15726: swap(exception_ptr& __lhs, exception_ptr& __rhs) 15726: { __lhs.swap(__rhs); } 15726: 15726: 15726: template 15726: 15726: inline void 15726: __dest_thunk(void* __x) 15726: { static_cast<_Ex*>(__x)->~_Ex(); } 15726: 15726: 15726: } 15726: 15726: using __exception_ptr::swap; 15726: 15726: 15726: 15726: template 15726: exception_ptr 15726: make_exception_ptr(_Ex __ex) noexcept 15726: { 15726: 15726: using _Ex2 = typename decay<_Ex>::type; 15726: void* __e = __cxxabiv1::__cxa_allocate_exception(sizeof(_Ex)); 15726: (void) __cxxabiv1::__cxa_init_primary_exception( 15726: __e, const_cast(&typeid(_Ex)), 15726: __exception_ptr::__dest_thunk<_Ex2>); 15726: try 15726: { 15726: ::new (__e) _Ex2(__ex); 15726: return exception_ptr(__e); 15726: } 15726: catch(...) 15726: { 15726: __cxxabiv1::__cxa_free_exception(__e); 15726: return current_exception(); 15726: } 15726: # 277 "/usr/include/c++/13/bits/exception_ptr.h" 3 15726: } 15726: # 291 "/usr/include/c++/13/bits/exception_ptr.h" 3 15726: } 15726: 15726: } 15726: # 165 "/usr/include/c++/13/exception" 2 3 15726: # 1 "/usr/include/c++/13/bits/nested_exception.h" 1 3 15726: # 40 "/usr/include/c++/13/bits/nested_exception.h" 3 15726: extern "C++" { 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: # 59 "/usr/include/c++/13/bits/nested_exception.h" 3 15726: class nested_exception 15726: { 15726: exception_ptr _M_ptr; 15726: 15726: public: 15726: 15726: nested_exception() noexcept : _M_ptr(current_exception()) { } 15726: 15726: nested_exception(const nested_exception&) noexcept = default; 15726: 15726: nested_exception& operator=(const nested_exception&) noexcept = default; 15726: 15726: virtual ~nested_exception() noexcept; 15726: 15726: 15726: [[noreturn]] 15726: void 15726: rethrow_nested() const 15726: { 15726: if (_M_ptr) 15726: rethrow_exception(_M_ptr); 15726: std::terminate(); 15726: } 15726: 15726: 15726: exception_ptr 15726: nested_ptr() const noexcept 15726: { return _M_ptr; } 15726: }; 15726: 15726: 15726: 15726: template 15726: struct _Nested_exception : public _Except, public nested_exception 15726: { 15726: explicit _Nested_exception(const _Except& __ex) 15726: : _Except(__ex) 15726: { } 15726: 15726: explicit _Nested_exception(_Except&& __ex) 15726: : _Except(static_cast<_Except&&>(__ex)) 15726: { } 15726: }; 15726: # 145 "/usr/include/c++/13/bits/nested_exception.h" 3 15726: template 15726: [[noreturn]] 15726: inline void 15726: throw_with_nested(_Tp&& __t) 15726: { 15726: using _Up = typename decay<_Tp>::type; 15726: using _CopyConstructible 15726: = __and_, is_move_constructible<_Up>>; 15726: static_assert(_CopyConstructible::value, 15726: "throw_with_nested argument must be CopyConstructible"); 15726: 15726: 15726: if constexpr (is_class_v<_Up>) 15726: if constexpr (!is_final_v<_Up>) 15726: if constexpr (!is_base_of_v) 15726: throw _Nested_exception<_Up>{std::forward<_Tp>(__t)}; 15726: throw std::forward<_Tp>(__t); 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 203 "/usr/include/c++/13/bits/nested_exception.h" 3 15726: template 15726: 15726: 15726: 15726: inline void 15726: rethrow_if_nested(const _Ex& __ex) 15726: { 15726: const _Ex* __ptr = __builtin_addressof(__ex); 15726: # 223 "/usr/include/c++/13/bits/nested_exception.h" 3 15726: if constexpr (!is_polymorphic_v<_Ex>) 15726: return; 15726: else if constexpr (is_base_of_v 15726: && !is_convertible_v<_Ex*, nested_exception*>) 15726: return; 15726: 15726: 15726: 15726: 15726: else if (auto __ne_ptr = dynamic_cast(__ptr)) 15726: __ne_ptr->rethrow_nested(); 15726: 15726: } 15726: 15726: 15726: } 15726: 15726: } 15726: # 166 "/usr/include/c++/13/exception" 2 3 15726: # 35 "/usr/include/c++/13/ext/concurrence.h" 2 3 15726: 15726: 15726: 15726: 15726: 15726: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: enum _Lock_policy { _S_single, _S_mutex, _S_atomic }; 15726: 15726: 15726: 15726: inline const _Lock_policy __default_lock_policy = 15726: 15726: 15726: 15726: _S_atomic; 15726: 15726: 15726: 15726: 15726: 15726: 15726: class __concurrence_lock_error : public std::exception 15726: { 15726: public: 15726: virtual char const* 15726: what() const throw() 15726: { return "__gnu_cxx::__concurrence_lock_error"; } 15726: }; 15726: 15726: class __concurrence_unlock_error : public std::exception 15726: { 15726: public: 15726: virtual char const* 15726: what() const throw() 15726: { return "__gnu_cxx::__concurrence_unlock_error"; } 15726: }; 15726: 15726: class __concurrence_broadcast_error : public std::exception 15726: { 15726: public: 15726: virtual char const* 15726: what() const throw() 15726: { return "__gnu_cxx::__concurrence_broadcast_error"; } 15726: }; 15726: 15726: class __concurrence_wait_error : public std::exception 15726: { 15726: public: 15726: virtual char const* 15726: what() const throw() 15726: { return "__gnu_cxx::__concurrence_wait_error"; } 15726: }; 15726: 15726: 15726: inline void 15726: __throw_concurrence_lock_error() 15726: { (throw (__concurrence_lock_error())); } 15726: 15726: inline void 15726: __throw_concurrence_unlock_error() 15726: { (throw (__concurrence_unlock_error())); } 15726: 15726: 15726: inline void 15726: __throw_concurrence_broadcast_error() 15726: { (throw (__concurrence_broadcast_error())); } 15726: 15726: inline void 15726: __throw_concurrence_wait_error() 15726: { (throw (__concurrence_wait_error())); } 15726: 15726: 15726: class __mutex 15726: { 15726: private: 15726: 15726: __gthread_mutex_t _M_mutex = { { 0, 0, 0, PTHREAD_MUTEX_TIMED_NP, 0, { 0 } } }; 15726: 15726: 15726: 15726: 15726: __mutex(const __mutex&); 15726: __mutex& operator=(const __mutex&); 15726: 15726: public: 15726: __mutex() 15726: { 15726: 15726: 15726: 15726: 15726: } 15726: # 144 "/usr/include/c++/13/ext/concurrence.h" 3 15726: void lock() 15726: { 15726: 15726: if (__gthread_active_p()) 15726: { 15726: if (__gthread_mutex_lock(&_M_mutex) != 0) 15726: __throw_concurrence_lock_error(); 15726: } 15726: 15726: } 15726: 15726: void unlock() 15726: { 15726: 15726: if (__gthread_active_p()) 15726: { 15726: if (__gthread_mutex_unlock(&_M_mutex) != 0) 15726: __throw_concurrence_unlock_error(); 15726: } 15726: 15726: } 15726: 15726: __gthread_mutex_t* gthread_mutex(void) 15726: { return &_M_mutex; } 15726: }; 15726: 15726: class __recursive_mutex 15726: { 15726: private: 15726: 15726: __gthread_recursive_mutex_t _M_mutex = { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { 0 } } }; 15726: 15726: 15726: 15726: 15726: __recursive_mutex(const __recursive_mutex&); 15726: __recursive_mutex& operator=(const __recursive_mutex&); 15726: 15726: public: 15726: __recursive_mutex() 15726: { 15726: 15726: 15726: 15726: 15726: } 15726: # 199 "/usr/include/c++/13/ext/concurrence.h" 3 15726: void lock() 15726: { 15726: 15726: if (__gthread_active_p()) 15726: { 15726: if (__gthread_recursive_mutex_lock(&_M_mutex) != 0) 15726: __throw_concurrence_lock_error(); 15726: } 15726: 15726: } 15726: 15726: void unlock() 15726: { 15726: 15726: if (__gthread_active_p()) 15726: { 15726: if (__gthread_recursive_mutex_unlock(&_M_mutex) != 0) 15726: __throw_concurrence_unlock_error(); 15726: } 15726: 15726: } 15726: 15726: __gthread_recursive_mutex_t* gthread_recursive_mutex(void) 15726: { return &_M_mutex; } 15726: }; 15726: 15726: 15726: 15726: 15726: class __scoped_lock 15726: { 15726: public: 15726: typedef __mutex __mutex_type; 15726: 15726: private: 15726: __mutex_type& _M_device; 15726: 15726: __scoped_lock(const __scoped_lock&); 15726: __scoped_lock& operator=(const __scoped_lock&); 15726: 15726: public: 15726: explicit __scoped_lock(__mutex_type& __name) : _M_device(__name) 15726: { _M_device.lock(); } 15726: 15726: ~__scoped_lock() throw() 15726: { _M_device.unlock(); } 15726: }; 15726: 15726: 15726: class __cond 15726: { 15726: private: 15726: 15726: __gthread_cond_t _M_cond = { { {0}, {0}, {0, 0}, {0, 0}, 0, 0, {0, 0} } }; 15726: 15726: 15726: 15726: 15726: __cond(const __cond&); 15726: __cond& operator=(const __cond&); 15726: 15726: public: 15726: __cond() 15726: { 15726: 15726: 15726: 15726: 15726: } 15726: # 277 "/usr/include/c++/13/ext/concurrence.h" 3 15726: void broadcast() 15726: { 15726: 15726: if (__gthread_active_p()) 15726: { 15726: if (__gthread_cond_broadcast(&_M_cond) != 0) 15726: __throw_concurrence_broadcast_error(); 15726: } 15726: 15726: } 15726: 15726: void wait(__mutex *mutex) 15726: { 15726: 15726: { 15726: if (__gthread_cond_wait(&_M_cond, mutex->gthread_mutex()) != 0) 15726: __throw_concurrence_wait_error(); 15726: } 15726: 15726: } 15726: 15726: void wait_recursive(__recursive_mutex *mutex) 15726: { 15726: 15726: { 15726: if (__gthread_cond_wait_recursive(&_M_cond, 15726: mutex->gthread_recursive_mutex()) 15726: != 0) 15726: __throw_concurrence_wait_error(); 15726: } 15726: 15726: } 15726: }; 15726: 15726: 15726: 15726: } 15726: # 63 "/usr/include/c++/13/bits/shared_ptr_base.h" 2 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: # 75 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: template class auto_ptr; 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: 15726: 15726: 15726: 15726: class bad_weak_ptr : public std::exception 15726: { 15726: public: 15726: virtual char const* what() const noexcept; 15726: 15726: virtual ~bad_weak_ptr() noexcept; 15726: }; 15726: 15726: 15726: inline void 15726: __throw_bad_weak_ptr() 15726: { (throw (bad_weak_ptr())); } 15726: 15726: using __gnu_cxx::_Lock_policy; 15726: using __gnu_cxx::__default_lock_policy; 15726: using __gnu_cxx::_S_single; 15726: using __gnu_cxx::_S_mutex; 15726: using __gnu_cxx::_S_atomic; 15726: 15726: 15726: template<_Lock_policy _Lp> 15726: class _Mutex_base 15726: { 15726: protected: 15726: 15726: enum { _S_need_barriers = 0 }; 15726: }; 15726: 15726: template<> 15726: class _Mutex_base<_S_mutex> 15726: : public __gnu_cxx::__mutex 15726: { 15726: protected: 15726: 15726: 15726: 15726: enum { _S_need_barriers = 1 }; 15726: }; 15726: 15726: template<_Lock_policy _Lp = __default_lock_policy> 15726: class _Sp_counted_base 15726: : public _Mutex_base<_Lp> 15726: { 15726: public: 15726: _Sp_counted_base() noexcept 15726: : _M_use_count(1), _M_weak_count(1) { } 15726: 15726: virtual 15726: ~_Sp_counted_base() noexcept 15726: { } 15726: 15726: 15726: 15726: virtual void 15726: _M_dispose() noexcept = 0; 15726: 15726: 15726: virtual void 15726: _M_destroy() noexcept 15726: { delete this; } 15726: 15726: virtual void* 15726: _M_get_deleter(const std::type_info&) noexcept = 0; 15726: 15726: 15726: void 15726: _M_add_ref_copy() 15726: { __gnu_cxx::__atomic_add_dispatch(&_M_use_count, 1); } 15726: 15726: 15726: void 15726: _M_add_ref_lock() 15726: { 15726: if (!_M_add_ref_lock_nothrow()) 15726: __throw_bad_weak_ptr(); 15726: } 15726: 15726: 15726: bool 15726: _M_add_ref_lock_nothrow() noexcept; 15726: 15726: 15726: void 15726: _M_release() noexcept; 15726: 15726: 15726: void 15726: _M_release_last_use() noexcept 15726: { 15726: ; 15726: _M_dispose(); 15726: 15726: 15726: 15726: 15726: if (_Mutex_base<_Lp>::_S_need_barriers) 15726: { 15726: __atomic_thread_fence (4); 15726: } 15726: 15726: 15726: ; 15726: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count, 15726: -1) == 1) 15726: { 15726: ; 15726: _M_destroy(); 15726: } 15726: } 15726: 15726: 15726: __attribute__((__noinline__)) 15726: void 15726: _M_release_last_use_cold() noexcept 15726: { _M_release_last_use(); } 15726: 15726: 15726: void 15726: _M_weak_add_ref() noexcept 15726: { __gnu_cxx::__atomic_add_dispatch(&_M_weak_count, 1); } 15726: 15726: 15726: void 15726: _M_weak_release() noexcept 15726: { 15726: 15726: ; 15726: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count, -1) == 1) 15726: { 15726: ; 15726: if (_Mutex_base<_Lp>::_S_need_barriers) 15726: { 15726: 15726: 15726: __atomic_thread_fence (4); 15726: } 15726: _M_destroy(); 15726: } 15726: } 15726: 15726: long 15726: _M_get_use_count() const noexcept 15726: { 15726: 15726: 15726: return __atomic_load_n(&_M_use_count, 0); 15726: } 15726: 15726: private: 15726: _Sp_counted_base(_Sp_counted_base const&) = delete; 15726: _Sp_counted_base& operator=(_Sp_counted_base const&) = delete; 15726: 15726: _Atomic_word _M_use_count; 15726: _Atomic_word _M_weak_count; 15726: }; 15726: 15726: template<> 15726: inline bool 15726: _Sp_counted_base<_S_single>:: 15726: _M_add_ref_lock_nothrow() noexcept 15726: { 15726: if (_M_use_count == 0) 15726: return false; 15726: ++_M_use_count; 15726: return true; 15726: } 15726: 15726: template<> 15726: inline bool 15726: _Sp_counted_base<_S_mutex>:: 15726: _M_add_ref_lock_nothrow() noexcept 15726: { 15726: __gnu_cxx::__scoped_lock sentry(*this); 15726: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1) == 0) 15726: { 15726: _M_use_count = 0; 15726: return false; 15726: } 15726: return true; 15726: } 15726: 15726: template<> 15726: inline bool 15726: _Sp_counted_base<_S_atomic>:: 15726: _M_add_ref_lock_nothrow() noexcept 15726: { 15726: 15726: _Atomic_word __count = _M_get_use_count(); 15726: do 15726: { 15726: if (__count == 0) 15726: return false; 15726: 15726: 15726: } 15726: while (!__atomic_compare_exchange_n(&_M_use_count, &__count, __count + 1, 15726: true, 4, 15726: 0)); 15726: return true; 15726: } 15726: 15726: template<> 15726: inline void 15726: _Sp_counted_base<_S_single>::_M_add_ref_copy() 15726: { ++_M_use_count; } 15726: 15726: template<> 15726: inline void 15726: _Sp_counted_base<_S_single>::_M_release() noexcept 15726: { 15726: if (--_M_use_count == 0) 15726: { 15726: _M_dispose(); 15726: if (--_M_weak_count == 0) 15726: _M_destroy(); 15726: } 15726: } 15726: 15726: template<> 15726: inline void 15726: _Sp_counted_base<_S_mutex>::_M_release() noexcept 15726: { 15726: 15726: ; 15726: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1) 15726: { 15726: _M_release_last_use(); 15726: } 15726: } 15726: 15726: template<> 15726: inline void 15726: _Sp_counted_base<_S_atomic>::_M_release() noexcept 15726: { 15726: ; 15726: 15726: constexpr bool __lock_free 15726: = __atomic_always_lock_free(sizeof(long long), 0) 15726: && __atomic_always_lock_free(sizeof(_Atomic_word), 0); 15726: constexpr bool __double_word 15726: = sizeof(long long) == 2 * sizeof(_Atomic_word); 15726: 15726: 15726: constexpr bool __aligned = __alignof(long long) <= alignof(void*); 15726: if constexpr (__lock_free && __double_word && __aligned) 15726: { 15726: constexpr int __wordbits = 8 * sizeof(_Atomic_word); 15726: constexpr int __shiftbits = __double_word ? __wordbits : 0; 15726: constexpr long long __unique_ref = 1LL + (1LL << __shiftbits); 15726: auto __both_counts = reinterpret_cast(&_M_use_count); 15726: 15726: ; 15726: if (__atomic_load_n(__both_counts, 2) == __unique_ref) 15726: { 15726: 15726: 15726: 15726: 15726: _M_weak_count = _M_use_count = 0; 15726: ; 15726: ; 15726: _M_dispose(); 15726: _M_destroy(); 15726: return; 15726: } 15726: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1) 15726: [[__unlikely__]] 15726: { 15726: _M_release_last_use_cold(); 15726: return; 15726: } 15726: } 15726: else 15726: 15726: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1) 15726: { 15726: _M_release_last_use(); 15726: } 15726: } 15726: 15726: template<> 15726: inline void 15726: _Sp_counted_base<_S_single>::_M_weak_add_ref() noexcept 15726: { ++_M_weak_count; } 15726: 15726: template<> 15726: inline void 15726: _Sp_counted_base<_S_single>::_M_weak_release() noexcept 15726: { 15726: if (--_M_weak_count == 0) 15726: _M_destroy(); 15726: } 15726: 15726: template<> 15726: inline long 15726: _Sp_counted_base<_S_single>::_M_get_use_count() const noexcept 15726: { return _M_use_count; } 15726: 15726: 15726: 15726: template 15726: class __shared_ptr; 15726: 15726: template 15726: class __weak_ptr; 15726: 15726: template 15726: class __enable_shared_from_this; 15726: 15726: template 15726: class shared_ptr; 15726: 15726: template 15726: class weak_ptr; 15726: 15726: template 15726: struct owner_less; 15726: 15726: template 15726: class enable_shared_from_this; 15726: 15726: template<_Lock_policy _Lp = __default_lock_policy> 15726: class __weak_count; 15726: 15726: template<_Lock_policy _Lp = __default_lock_policy> 15726: class __shared_count; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: class _Sp_counted_ptr final : public _Sp_counted_base<_Lp> 15726: { 15726: public: 15726: explicit 15726: _Sp_counted_ptr(_Ptr __p) noexcept 15726: : _M_ptr(__p) { } 15726: 15726: virtual void 15726: _M_dispose() noexcept 15726: { delete _M_ptr; } 15726: 15726: virtual void 15726: _M_destroy() noexcept 15726: { delete this; } 15726: 15726: virtual void* 15726: _M_get_deleter(const std::type_info&) noexcept 15726: { return nullptr; } 15726: 15726: _Sp_counted_ptr(const _Sp_counted_ptr&) = delete; 15726: _Sp_counted_ptr& operator=(const _Sp_counted_ptr&) = delete; 15726: 15726: private: 15726: _Ptr _M_ptr; 15726: }; 15726: 15726: template<> 15726: inline void 15726: _Sp_counted_ptr::_M_dispose() noexcept { } 15726: 15726: template<> 15726: inline void 15726: _Sp_counted_ptr::_M_dispose() noexcept { } 15726: 15726: template<> 15726: inline void 15726: _Sp_counted_ptr::_M_dispose() noexcept { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Sp_ebo_helper; 15726: 15726: 15726: template 15726: struct _Sp_ebo_helper<_Nm, _Tp, true> : private _Tp 15726: { 15726: explicit _Sp_ebo_helper(const _Tp& __tp) : _Tp(__tp) { } 15726: explicit _Sp_ebo_helper(_Tp&& __tp) : _Tp(std::move(__tp)) { } 15726: 15726: static _Tp& 15726: _S_get(_Sp_ebo_helper& __eboh) { return static_cast<_Tp&>(__eboh); } 15726: }; 15726: 15726: 15726: template 15726: struct _Sp_ebo_helper<_Nm, _Tp, false> 15726: { 15726: explicit _Sp_ebo_helper(const _Tp& __tp) : _M_tp(__tp) { } 15726: explicit _Sp_ebo_helper(_Tp&& __tp) : _M_tp(std::move(__tp)) { } 15726: 15726: static _Tp& 15726: _S_get(_Sp_ebo_helper& __eboh) 15726: { return __eboh._M_tp; } 15726: 15726: private: 15726: _Tp _M_tp; 15726: }; 15726: 15726: 15726: template 15726: class _Sp_counted_deleter final : public _Sp_counted_base<_Lp> 15726: { 15726: class _Impl : _Sp_ebo_helper<0, _Deleter>, _Sp_ebo_helper<1, _Alloc> 15726: { 15726: typedef _Sp_ebo_helper<0, _Deleter> _Del_base; 15726: typedef _Sp_ebo_helper<1, _Alloc> _Alloc_base; 15726: 15726: public: 15726: _Impl(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept 15726: : _Del_base(std::move(__d)), _Alloc_base(__a), _M_ptr(__p) 15726: { } 15726: 15726: _Deleter& _M_del() noexcept { return _Del_base::_S_get(*this); } 15726: _Alloc& _M_alloc() noexcept { return _Alloc_base::_S_get(*this); } 15726: 15726: _Ptr _M_ptr; 15726: }; 15726: 15726: public: 15726: using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_deleter>; 15726: 15726: 15726: _Sp_counted_deleter(_Ptr __p, _Deleter __d) noexcept 15726: : _M_impl(__p, std::move(__d), _Alloc()) { } 15726: 15726: 15726: _Sp_counted_deleter(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept 15726: : _M_impl(__p, std::move(__d), __a) { } 15726: 15726: ~_Sp_counted_deleter() noexcept { } 15726: 15726: virtual void 15726: _M_dispose() noexcept 15726: { _M_impl._M_del()(_M_impl._M_ptr); } 15726: 15726: virtual void 15726: _M_destroy() noexcept 15726: { 15726: __allocator_type __a(_M_impl._M_alloc()); 15726: __allocated_ptr<__allocator_type> __guard_ptr{ __a, this }; 15726: this->~_Sp_counted_deleter(); 15726: } 15726: 15726: virtual void* 15726: _M_get_deleter(const type_info& __ti [[__gnu__::__unused__]]) noexcept 15726: { 15726: 15726: 15726: 15726: return __ti == typeid(_Deleter) 15726: ? std::__addressof(_M_impl._M_del()) 15726: : nullptr; 15726: 15726: 15726: 15726: } 15726: 15726: private: 15726: _Impl _M_impl; 15726: }; 15726: 15726: 15726: 15726: struct _Sp_make_shared_tag 15726: { 15726: private: 15726: template 15726: friend class _Sp_counted_ptr_inplace; 15726: 15726: static const type_info& 15726: _S_ti() noexcept __attribute__ ((__visibility__ ("default"))) 15726: { 15726: alignas(type_info) static constexpr char __tag[sizeof(type_info)] = { }; 15726: return reinterpret_cast(__tag); 15726: } 15726: 15726: static bool _S_eq(const type_info&) noexcept; 15726: }; 15726: 15726: template 15726: struct _Sp_alloc_shared_tag 15726: { 15726: const _Alloc& _M_a; 15726: }; 15726: 15726: template 15726: class _Sp_counted_ptr_inplace final : public _Sp_counted_base<_Lp> 15726: { 15726: class _Impl : _Sp_ebo_helper<0, _Alloc> 15726: { 15726: typedef _Sp_ebo_helper<0, _Alloc> _A_base; 15726: 15726: public: 15726: explicit _Impl(_Alloc __a) noexcept : _A_base(__a) { } 15726: 15726: _Alloc& _M_alloc() noexcept { return _A_base::_S_get(*this); } 15726: 15726: __gnu_cxx::__aligned_buffer<_Tp> _M_storage; 15726: }; 15726: 15726: public: 15726: using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_ptr_inplace>; 15726: 15726: 15726: template 15726: _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args) 15726: : _M_impl(__a) 15726: { 15726: 15726: 15726: allocator_traits<_Alloc>::construct(__a, _M_ptr(), 15726: std::forward<_Args>(__args)...); 15726: } 15726: 15726: ~_Sp_counted_ptr_inplace() noexcept { } 15726: 15726: virtual void 15726: _M_dispose() noexcept 15726: { 15726: allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr()); 15726: } 15726: 15726: 15726: virtual void 15726: _M_destroy() noexcept 15726: { 15726: __allocator_type __a(_M_impl._M_alloc()); 15726: __allocated_ptr<__allocator_type> __guard_ptr{ __a, this }; 15726: this->~_Sp_counted_ptr_inplace(); 15726: } 15726: 15726: private: 15726: friend class __shared_count<_Lp>; 15726: 15726: 15726: 15726: virtual void* 15726: _M_get_deleter(const std::type_info& __ti) noexcept override 15726: { 15726: auto __ptr = const_cast::type*>(_M_ptr()); 15726: 15726: 15726: 15726: 15726: if (&__ti == &_Sp_make_shared_tag::_S_ti() 15726: || 15726: 15726: __ti == typeid(_Sp_make_shared_tag) 15726: 15726: 15726: 15726: ) 15726: return __ptr; 15726: return nullptr; 15726: } 15726: 15726: _Tp* _M_ptr() noexcept { return _M_impl._M_storage._M_ptr(); } 15726: 15726: _Impl _M_impl; 15726: }; 15726: # 886 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 15726: struct __sp_array_delete 15726: { 15726: template 15726: void operator()(_Yp* __p) const { delete[] __p; } 15726: }; 15726: 15726: template<_Lock_policy _Lp> 15726: class __shared_count 15726: { 15726: 15726: template 15726: struct __not_alloc_shared_tag { using type = void; }; 15726: 15726: template 15726: struct __not_alloc_shared_tag<_Sp_alloc_shared_tag<_Tp>> { }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: public: 15726: constexpr __shared_count() noexcept : _M_pi(0) 15726: { } 15726: 15726: template 15726: explicit 15726: __shared_count(_Ptr __p) : _M_pi(0) 15726: { 15726: try 15726: { 15726: _M_pi = new _Sp_counted_ptr<_Ptr, _Lp>(__p); 15726: } 15726: catch(...) 15726: { 15726: delete __p; 15726: throw; 15726: } 15726: } 15726: 15726: template 15726: __shared_count(_Ptr __p, false_type) 15726: : __shared_count(__p) 15726: { } 15726: 15726: template 15726: __shared_count(_Ptr __p, true_type) 15726: : __shared_count(__p, __sp_array_delete{}, allocator()) 15726: { } 15726: 15726: template::type> 15726: __shared_count(_Ptr __p, _Deleter __d) 15726: : __shared_count(__p, std::move(__d), allocator()) 15726: { } 15726: 15726: template::type> 15726: __shared_count(_Ptr __p, _Deleter __d, _Alloc __a) : _M_pi(0) 15726: { 15726: typedef _Sp_counted_deleter<_Ptr, _Deleter, _Alloc, _Lp> _Sp_cd_type; 15726: try 15726: { 15726: typename _Sp_cd_type::__allocator_type __a2(__a); 15726: auto __guard = std::__allocate_guarded(__a2); 15726: _Sp_cd_type* __mem = __guard.get(); 15726: ::new (__mem) _Sp_cd_type(__p, std::move(__d), std::move(__a)); 15726: _M_pi = __mem; 15726: __guard = nullptr; 15726: } 15726: catch(...) 15726: { 15726: __d(__p); 15726: throw; 15726: } 15726: } 15726: 15726: template 15726: __shared_count(_Tp*& __p, _Sp_alloc_shared_tag<_Alloc> __a, 15726: _Args&&... __args) 15726: { 15726: typedef _Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp> _Sp_cp_type; 15726: typename _Sp_cp_type::__allocator_type __a2(__a._M_a); 15726: auto __guard = std::__allocate_guarded(__a2); 15726: _Sp_cp_type* __mem = __guard.get(); 15726: auto __pi = ::new (__mem) 15726: _Sp_cp_type(__a._M_a, std::forward<_Args>(__args)...); 15726: __guard = nullptr; 15726: _M_pi = __pi; 15726: __p = __pi->_M_ptr(); 15726: } 15726: # 1024 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: 15726: template 15726: explicit 15726: __shared_count(std::auto_ptr<_Tp>&& __r); 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: 15726: template 15726: explicit 15726: __shared_count(std::unique_ptr<_Tp, _Del>&& __r) : _M_pi(0) 15726: { 15726: 15726: 15726: if (__r.get() == nullptr) 15726: return; 15726: 15726: using _Ptr = typename unique_ptr<_Tp, _Del>::pointer; 15726: using _Del2 = __conditional_t::value, 15726: reference_wrapper::type>, 15726: _Del>; 15726: using _Sp_cd_type 15726: = _Sp_counted_deleter<_Ptr, _Del2, allocator, _Lp>; 15726: using _Alloc = allocator<_Sp_cd_type>; 15726: using _Alloc_traits = allocator_traits<_Alloc>; 15726: _Alloc __a; 15726: _Sp_cd_type* __mem = _Alloc_traits::allocate(__a, 1); 15726: 15726: 15726: 15726: _Alloc_traits::construct(__a, __mem, __r.release(), 15726: std::forward<_Del>(__r.get_deleter())); 15726: _M_pi = __mem; 15726: } 15726: 15726: 15726: explicit __shared_count(const __weak_count<_Lp>& __r); 15726: 15726: 15726: explicit 15726: __shared_count(const __weak_count<_Lp>& __r, std::nothrow_t) noexcept; 15726: 15726: ~__shared_count() noexcept 15726: { 15726: if (_M_pi != nullptr) 15726: _M_pi->_M_release(); 15726: } 15726: 15726: __shared_count(const __shared_count& __r) noexcept 15726: : _M_pi(__r._M_pi) 15726: { 15726: if (_M_pi != nullptr) 15726: _M_pi->_M_add_ref_copy(); 15726: } 15726: 15726: __shared_count& 15726: operator=(const __shared_count& __r) noexcept 15726: { 15726: _Sp_counted_base<_Lp>* __tmp = __r._M_pi; 15726: if (__tmp != _M_pi) 15726: { 15726: if (__tmp != nullptr) 15726: __tmp->_M_add_ref_copy(); 15726: if (_M_pi != nullptr) 15726: _M_pi->_M_release(); 15726: _M_pi = __tmp; 15726: } 15726: return *this; 15726: } 15726: 15726: void 15726: _M_swap(__shared_count& __r) noexcept 15726: { 15726: _Sp_counted_base<_Lp>* __tmp = __r._M_pi; 15726: __r._M_pi = _M_pi; 15726: _M_pi = __tmp; 15726: } 15726: 15726: long 15726: _M_get_use_count() const noexcept 15726: { return _M_pi ? _M_pi->_M_get_use_count() : 0; } 15726: 15726: bool 15726: _M_unique() const noexcept 15726: { return this->_M_get_use_count() == 1; } 15726: 15726: void* 15726: _M_get_deleter(const std::type_info& __ti) const noexcept 15726: { return _M_pi ? _M_pi->_M_get_deleter(__ti) : nullptr; } 15726: 15726: bool 15726: _M_less(const __shared_count& __rhs) const noexcept 15726: { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } 15726: 15726: bool 15726: _M_less(const __weak_count<_Lp>& __rhs) const noexcept 15726: { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } 15726: 15726: 15726: friend inline bool 15726: operator==(const __shared_count& __a, const __shared_count& __b) noexcept 15726: { return __a._M_pi == __b._M_pi; } 15726: 15726: private: 15726: friend class __weak_count<_Lp>; 15726: 15726: 15726: 15726: 15726: _Sp_counted_base<_Lp>* _M_pi; 15726: }; 15726: 15726: 15726: template<_Lock_policy _Lp> 15726: class __weak_count 15726: { 15726: public: 15726: constexpr __weak_count() noexcept : _M_pi(nullptr) 15726: { } 15726: 15726: __weak_count(const __shared_count<_Lp>& __r) noexcept 15726: : _M_pi(__r._M_pi) 15726: { 15726: if (_M_pi != nullptr) 15726: _M_pi->_M_weak_add_ref(); 15726: } 15726: 15726: __weak_count(const __weak_count& __r) noexcept 15726: : _M_pi(__r._M_pi) 15726: { 15726: if (_M_pi != nullptr) 15726: _M_pi->_M_weak_add_ref(); 15726: } 15726: 15726: __weak_count(__weak_count&& __r) noexcept 15726: : _M_pi(__r._M_pi) 15726: { __r._M_pi = nullptr; } 15726: 15726: ~__weak_count() noexcept 15726: { 15726: if (_M_pi != nullptr) 15726: _M_pi->_M_weak_release(); 15726: } 15726: 15726: __weak_count& 15726: operator=(const __shared_count<_Lp>& __r) noexcept 15726: { 15726: _Sp_counted_base<_Lp>* __tmp = __r._M_pi; 15726: if (__tmp != nullptr) 15726: __tmp->_M_weak_add_ref(); 15726: if (_M_pi != nullptr) 15726: _M_pi->_M_weak_release(); 15726: _M_pi = __tmp; 15726: return *this; 15726: } 15726: 15726: __weak_count& 15726: operator=(const __weak_count& __r) noexcept 15726: { 15726: _Sp_counted_base<_Lp>* __tmp = __r._M_pi; 15726: if (__tmp != nullptr) 15726: __tmp->_M_weak_add_ref(); 15726: if (_M_pi != nullptr) 15726: _M_pi->_M_weak_release(); 15726: _M_pi = __tmp; 15726: return *this; 15726: } 15726: 15726: __weak_count& 15726: operator=(__weak_count&& __r) noexcept 15726: { 15726: if (_M_pi != nullptr) 15726: _M_pi->_M_weak_release(); 15726: _M_pi = __r._M_pi; 15726: __r._M_pi = nullptr; 15726: return *this; 15726: } 15726: 15726: void 15726: _M_swap(__weak_count& __r) noexcept 15726: { 15726: _Sp_counted_base<_Lp>* __tmp = __r._M_pi; 15726: __r._M_pi = _M_pi; 15726: _M_pi = __tmp; 15726: } 15726: 15726: long 15726: _M_get_use_count() const noexcept 15726: { return _M_pi != nullptr ? _M_pi->_M_get_use_count() : 0; } 15726: 15726: bool 15726: _M_less(const __weak_count& __rhs) const noexcept 15726: { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } 15726: 15726: bool 15726: _M_less(const __shared_count<_Lp>& __rhs) const noexcept 15726: { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } 15726: 15726: 15726: friend inline bool 15726: operator==(const __weak_count& __a, const __weak_count& __b) noexcept 15726: { return __a._M_pi == __b._M_pi; } 15726: 15726: private: 15726: friend class __shared_count<_Lp>; 15726: 15726: 15726: 15726: 15726: _Sp_counted_base<_Lp>* _M_pi; 15726: }; 15726: 15726: 15726: template<_Lock_policy _Lp> 15726: inline 15726: __shared_count<_Lp>::__shared_count(const __weak_count<_Lp>& __r) 15726: : _M_pi(__r._M_pi) 15726: { 15726: if (_M_pi == nullptr || !_M_pi->_M_add_ref_lock_nothrow()) 15726: __throw_bad_weak_ptr(); 15726: } 15726: 15726: 15726: template<_Lock_policy _Lp> 15726: inline 15726: __shared_count<_Lp>:: 15726: __shared_count(const __weak_count<_Lp>& __r, std::nothrow_t) noexcept 15726: : _M_pi(__r._M_pi) 15726: { 15726: if (_M_pi && !_M_pi->_M_add_ref_lock_nothrow()) 15726: _M_pi = nullptr; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct __sp_compatible_with 15726: : false_type 15726: { }; 15726: 15726: template 15726: struct __sp_compatible_with<_Yp*, _Tp*> 15726: : is_convertible<_Yp*, _Tp*>::type 15726: { }; 15726: 15726: template 15726: struct __sp_compatible_with<_Up(*)[_Nm], _Up(*)[]> 15726: : true_type 15726: { }; 15726: 15726: template 15726: struct __sp_compatible_with<_Up(*)[_Nm], const _Up(*)[]> 15726: : true_type 15726: { }; 15726: 15726: template 15726: struct __sp_compatible_with<_Up(*)[_Nm], volatile _Up(*)[]> 15726: : true_type 15726: { }; 15726: 15726: template 15726: struct __sp_compatible_with<_Up(*)[_Nm], const volatile _Up(*)[]> 15726: : true_type 15726: { }; 15726: 15726: 15726: template 15726: struct __sp_is_constructible_arrN 15726: : false_type 15726: { }; 15726: 15726: template 15726: struct __sp_is_constructible_arrN<_Up, _Nm, _Yp, __void_t<_Yp[_Nm]>> 15726: : is_convertible<_Yp(*)[_Nm], _Up(*)[_Nm]>::type 15726: { }; 15726: 15726: 15726: template 15726: struct __sp_is_constructible_arr 15726: : false_type 15726: { }; 15726: 15726: template 15726: struct __sp_is_constructible_arr<_Up, _Yp, __void_t<_Yp[]>> 15726: : is_convertible<_Yp(*)[], _Up(*)[]>::type 15726: { }; 15726: 15726: 15726: template 15726: struct __sp_is_constructible; 15726: 15726: 15726: template 15726: struct __sp_is_constructible<_Up[_Nm], _Yp> 15726: : __sp_is_constructible_arrN<_Up, _Nm, _Yp>::type 15726: { }; 15726: 15726: 15726: template 15726: struct __sp_is_constructible<_Up[], _Yp> 15726: : __sp_is_constructible_arr<_Up, _Yp>::type 15726: { }; 15726: 15726: 15726: template 15726: struct __sp_is_constructible 15726: : is_convertible<_Yp*, _Tp*>::type 15726: { }; 15726: 15726: 15726: 15726: template::value, bool = is_void<_Tp>::value> 15726: class __shared_ptr_access 15726: { 15726: public: 15726: using element_type = _Tp; 15726: 15726: element_type& 15726: operator*() const noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(_M_get() != nullptr)) __builtin_unreachable(); } while (false); 15726: return *_M_get(); 15726: } 15726: 15726: element_type* 15726: operator->() const noexcept 15726: { 15726: ; 15726: return _M_get(); 15726: } 15726: 15726: private: 15726: element_type* 15726: _M_get() const noexcept 15726: { return static_cast*>(this)->get(); } 15726: }; 15726: 15726: 15726: template 15726: class __shared_ptr_access<_Tp, _Lp, false, true> 15726: { 15726: public: 15726: using element_type = _Tp; 15726: 15726: element_type* 15726: operator->() const noexcept 15726: { 15726: auto __ptr = static_cast*>(this)->get(); 15726: ; 15726: return __ptr; 15726: } 15726: }; 15726: 15726: 15726: template 15726: class __shared_ptr_access<_Tp, _Lp, true, false> 15726: { 15726: public: 15726: using element_type = typename remove_extent<_Tp>::type; 15726: # 1407 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 15726: element_type& 15726: operator[](ptrdiff_t __i) const noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(_M_get() != nullptr)) __builtin_unreachable(); } while (false); 15726: do { if (std::__is_constant_evaluated() && !bool(!extent<_Tp>::value || __i < extent<_Tp>::value)) __builtin_unreachable(); } while (false); 15726: return _M_get()[__i]; 15726: } 15726: 15726: private: 15726: element_type* 15726: _M_get() const noexcept 15726: { return static_cast*>(this)->get(); } 15726: }; 15726: 15726: template 15726: class __shared_ptr 15726: : public __shared_ptr_access<_Tp, _Lp> 15726: { 15726: public: 15726: using element_type = typename remove_extent<_Tp>::type; 15726: 15726: private: 15726: 15726: template 15726: using _SafeConv 15726: = typename enable_if<__sp_is_constructible<_Tp, _Yp>::value>::type; 15726: 15726: 15726: template 15726: using _Compatible = typename 15726: enable_if<__sp_compatible_with<_Yp*, _Tp*>::value, _Res>::type; 15726: 15726: 15726: template 15726: using _Assignable = _Compatible<_Yp, __shared_ptr&>; 15726: 15726: 15726: template::pointer> 15726: using _UniqCompatible = __enable_if_t<__and_< 15726: __sp_compatible_with<_Yp*, _Tp*>, 15726: is_convertible<_Ptr, element_type*>, 15726: is_move_constructible<_Del> 15726: >::value, _Res>; 15726: 15726: 15726: template 15726: using _UniqAssignable = _UniqCompatible<_Yp, _Del, __shared_ptr&>; 15726: 15726: public: 15726: 15726: 15726: using weak_type = __weak_ptr<_Tp, _Lp>; 15726: 15726: 15726: constexpr __shared_ptr() noexcept 15726: : _M_ptr(0), _M_refcount() 15726: { } 15726: 15726: template> 15726: explicit 15726: __shared_ptr(_Yp* __p) 15726: : _M_ptr(__p), _M_refcount(__p, typename is_array<_Tp>::type()) 15726: { 15726: static_assert( !is_void<_Yp>::value, "incomplete type" ); 15726: static_assert( sizeof(_Yp) > 0, "incomplete type" ); 15726: _M_enable_shared_from_this_with(__p); 15726: } 15726: 15726: template> 15726: __shared_ptr(_Yp* __p, _Deleter __d) 15726: : _M_ptr(__p), _M_refcount(__p, std::move(__d)) 15726: { 15726: static_assert(__is_invocable<_Deleter&, _Yp*&>::value, 15726: "deleter expression d(p) is well-formed"); 15726: _M_enable_shared_from_this_with(__p); 15726: } 15726: 15726: template> 15726: __shared_ptr(_Yp* __p, _Deleter __d, _Alloc __a) 15726: : _M_ptr(__p), _M_refcount(__p, std::move(__d), std::move(__a)) 15726: { 15726: static_assert(__is_invocable<_Deleter&, _Yp*&>::value, 15726: "deleter expression d(p) is well-formed"); 15726: _M_enable_shared_from_this_with(__p); 15726: } 15726: 15726: template 15726: __shared_ptr(nullptr_t __p, _Deleter __d) 15726: : _M_ptr(0), _M_refcount(__p, std::move(__d)) 15726: { } 15726: 15726: template 15726: __shared_ptr(nullptr_t __p, _Deleter __d, _Alloc __a) 15726: : _M_ptr(0), _M_refcount(__p, std::move(__d), std::move(__a)) 15726: { } 15726: 15726: 15726: template 15726: __shared_ptr(const __shared_ptr<_Yp, _Lp>& __r, 15726: element_type* __p) noexcept 15726: : _M_ptr(__p), _M_refcount(__r._M_refcount) 15726: { } 15726: 15726: 15726: template 15726: __shared_ptr(__shared_ptr<_Yp, _Lp>&& __r, 15726: element_type* __p) noexcept 15726: : _M_ptr(__p), _M_refcount() 15726: { 15726: _M_refcount._M_swap(__r._M_refcount); 15726: __r._M_ptr = nullptr; 15726: } 15726: 15726: __shared_ptr(const __shared_ptr&) noexcept = default; 15726: __shared_ptr& operator=(const __shared_ptr&) noexcept = default; 15726: ~__shared_ptr() = default; 15726: 15726: template> 15726: __shared_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept 15726: : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) 15726: { } 15726: 15726: __shared_ptr(__shared_ptr&& __r) noexcept 15726: : _M_ptr(__r._M_ptr), _M_refcount() 15726: { 15726: _M_refcount._M_swap(__r._M_refcount); 15726: __r._M_ptr = nullptr; 15726: } 15726: 15726: template> 15726: __shared_ptr(__shared_ptr<_Yp, _Lp>&& __r) noexcept 15726: : _M_ptr(__r._M_ptr), _M_refcount() 15726: { 15726: _M_refcount._M_swap(__r._M_refcount); 15726: __r._M_ptr = nullptr; 15726: } 15726: 15726: template> 15726: explicit __shared_ptr(const __weak_ptr<_Yp, _Lp>& __r) 15726: : _M_refcount(__r._M_refcount) 15726: { 15726: 15726: 15726: _M_ptr = __r._M_ptr; 15726: } 15726: 15726: 15726: template> 15726: __shared_ptr(unique_ptr<_Yp, _Del>&& __r) 15726: : _M_ptr(__r.get()), _M_refcount() 15726: { 15726: auto __raw = __to_address(__r.get()); 15726: _M_refcount = __shared_count<_Lp>(std::move(__r)); 15726: _M_enable_shared_from_this_with(__raw); 15726: } 15726: # 1585 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: 15726: template> 15726: __shared_ptr(auto_ptr<_Yp>&& __r); 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: constexpr __shared_ptr(nullptr_t) noexcept : __shared_ptr() { } 15726: 15726: template 15726: _Assignable<_Yp> 15726: operator=(const __shared_ptr<_Yp, _Lp>& __r) noexcept 15726: { 15726: _M_ptr = __r._M_ptr; 15726: _M_refcount = __r._M_refcount; 15726: return *this; 15726: } 15726: 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: template 15726: _Assignable<_Yp> 15726: operator=(auto_ptr<_Yp>&& __r) 15726: { 15726: __shared_ptr(std::move(__r)).swap(*this); 15726: return *this; 15726: } 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: __shared_ptr& 15726: operator=(__shared_ptr&& __r) noexcept 15726: { 15726: __shared_ptr(std::move(__r)).swap(*this); 15726: return *this; 15726: } 15726: 15726: template 15726: _Assignable<_Yp> 15726: operator=(__shared_ptr<_Yp, _Lp>&& __r) noexcept 15726: { 15726: __shared_ptr(std::move(__r)).swap(*this); 15726: return *this; 15726: } 15726: 15726: template 15726: _UniqAssignable<_Yp, _Del> 15726: operator=(unique_ptr<_Yp, _Del>&& __r) 15726: { 15726: __shared_ptr(std::move(__r)).swap(*this); 15726: return *this; 15726: } 15726: 15726: void 15726: reset() noexcept 15726: { __shared_ptr().swap(*this); } 15726: 15726: template 15726: _SafeConv<_Yp> 15726: reset(_Yp* __p) 15726: { 15726: 15726: do { if (std::__is_constant_evaluated() && !bool(__p == nullptr || __p != _M_ptr)) __builtin_unreachable(); } while (false); 15726: __shared_ptr(__p).swap(*this); 15726: } 15726: 15726: template 15726: _SafeConv<_Yp> 15726: reset(_Yp* __p, _Deleter __d) 15726: { __shared_ptr(__p, std::move(__d)).swap(*this); } 15726: 15726: template 15726: _SafeConv<_Yp> 15726: reset(_Yp* __p, _Deleter __d, _Alloc __a) 15726: { __shared_ptr(__p, std::move(__d), std::move(__a)).swap(*this); } 15726: 15726: 15726: element_type* 15726: get() const noexcept 15726: { return _M_ptr; } 15726: 15726: 15726: explicit operator bool() const noexcept 15726: { return _M_ptr != nullptr; } 15726: 15726: 15726: bool 15726: unique() const noexcept 15726: { return _M_refcount._M_unique(); } 15726: 15726: 15726: long 15726: use_count() const noexcept 15726: { return _M_refcount._M_get_use_count(); } 15726: 15726: 15726: void 15726: swap(__shared_ptr<_Tp, _Lp>& __other) noexcept 15726: { 15726: std::swap(_M_ptr, __other._M_ptr); 15726: _M_refcount._M_swap(__other._M_refcount); 15726: } 15726: # 1697 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 15726: template 15726: bool 15726: owner_before(__shared_ptr<_Tp1, _Lp> const& __rhs) const noexcept 15726: { return _M_refcount._M_less(__rhs._M_refcount); } 15726: 15726: template 15726: bool 15726: owner_before(__weak_ptr<_Tp1, _Lp> const& __rhs) const noexcept 15726: { return _M_refcount._M_less(__rhs._M_refcount); } 15726: 15726: 15726: protected: 15726: 15726: template 15726: __shared_ptr(_Sp_alloc_shared_tag<_Alloc> __tag, _Args&&... __args) 15726: : _M_ptr(), _M_refcount(_M_ptr, __tag, std::forward<_Args>(__args)...) 15726: { _M_enable_shared_from_this_with(_M_ptr); } 15726: 15726: template 15726: friend __shared_ptr<_Tp1, _Lp1> 15726: __allocate_shared(const _Alloc& __a, _Args&&... __args); 15726: # 1731 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 15726: __shared_ptr(const __weak_ptr<_Tp, _Lp>& __r, std::nothrow_t) noexcept 15726: : _M_refcount(__r._M_refcount, std::nothrow) 15726: { 15726: _M_ptr = _M_refcount._M_get_use_count() ? __r._M_ptr : nullptr; 15726: } 15726: 15726: friend class __weak_ptr<_Tp, _Lp>; 15726: 15726: private: 15726: 15726: template 15726: using __esft_base_t = decltype(__enable_shared_from_this_base( 15726: std::declval&>(), 15726: std::declval<_Yp*>())); 15726: 15726: 15726: template 15726: struct __has_esft_base 15726: : false_type { }; 15726: 15726: template 15726: struct __has_esft_base<_Yp, __void_t<__esft_base_t<_Yp>>> 15726: : __not_> { }; 15726: 15726: template::type> 15726: typename enable_if<__has_esft_base<_Yp2>::value>::type 15726: _M_enable_shared_from_this_with(_Yp* __p) noexcept 15726: { 15726: if (auto __base = __enable_shared_from_this_base(_M_refcount, __p)) 15726: __base->_M_weak_assign(const_cast<_Yp2*>(__p), _M_refcount); 15726: } 15726: 15726: template::type> 15726: typename enable_if::value>::type 15726: _M_enable_shared_from_this_with(_Yp*) noexcept 15726: { } 15726: 15726: void* 15726: _M_get_deleter(const std::type_info& __ti) const noexcept 15726: { return _M_refcount._M_get_deleter(__ti); } 15726: 15726: template friend class __shared_ptr; 15726: template friend class __weak_ptr; 15726: 15726: template 15726: friend _Del* get_deleter(const __shared_ptr<_Tp1, _Lp1>&) noexcept; 15726: 15726: template 15726: friend _Del* get_deleter(const shared_ptr<_Tp1>&) noexcept; 15726: 15726: 15726: 15726: 15726: 15726: element_type* _M_ptr; 15726: __shared_count<_Lp> _M_refcount; 15726: }; 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator==(const __shared_ptr<_Tp1, _Lp>& __a, 15726: const __shared_ptr<_Tp2, _Lp>& __b) noexcept 15726: { return __a.get() == __b.get(); } 15726: 15726: template 15726: inline bool 15726: operator==(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept 15726: { return !__a; } 15726: # 1817 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 15726: template 15726: inline bool 15726: operator==(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept 15726: { return !__a; } 15726: 15726: template 15726: inline bool 15726: operator!=(const __shared_ptr<_Tp1, _Lp>& __a, 15726: const __shared_ptr<_Tp2, _Lp>& __b) noexcept 15726: { return __a.get() != __b.get(); } 15726: 15726: template 15726: inline bool 15726: operator!=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept 15726: { return (bool)__a; } 15726: 15726: template 15726: inline bool 15726: operator!=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept 15726: { return (bool)__a; } 15726: 15726: template 15726: inline bool 15726: operator<(const __shared_ptr<_Tp, _Lp>& __a, 15726: const __shared_ptr<_Up, _Lp>& __b) noexcept 15726: { 15726: using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type; 15726: using _Up_elt = typename __shared_ptr<_Up, _Lp>::element_type; 15726: using _Vp = typename common_type<_Tp_elt*, _Up_elt*>::type; 15726: return less<_Vp>()(__a.get(), __b.get()); 15726: } 15726: 15726: template 15726: inline bool 15726: operator<(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept 15726: { 15726: using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type; 15726: return less<_Tp_elt*>()(__a.get(), nullptr); 15726: } 15726: 15726: template 15726: inline bool 15726: operator<(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept 15726: { 15726: using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type; 15726: return less<_Tp_elt*>()(nullptr, __a.get()); 15726: } 15726: 15726: template 15726: inline bool 15726: operator<=(const __shared_ptr<_Tp1, _Lp>& __a, 15726: const __shared_ptr<_Tp2, _Lp>& __b) noexcept 15726: { return !(__b < __a); } 15726: 15726: template 15726: inline bool 15726: operator<=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept 15726: { return !(nullptr < __a); } 15726: 15726: template 15726: inline bool 15726: operator<=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept 15726: { return !(__a < nullptr); } 15726: 15726: template 15726: inline bool 15726: operator>(const __shared_ptr<_Tp1, _Lp>& __a, 15726: const __shared_ptr<_Tp2, _Lp>& __b) noexcept 15726: { return (__b < __a); } 15726: 15726: template 15726: inline bool 15726: operator>(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept 15726: { return nullptr < __a; } 15726: 15726: template 15726: inline bool 15726: operator>(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept 15726: { return __a < nullptr; } 15726: 15726: template 15726: inline bool 15726: operator>=(const __shared_ptr<_Tp1, _Lp>& __a, 15726: const __shared_ptr<_Tp2, _Lp>& __b) noexcept 15726: { return !(__a < __b); } 15726: 15726: template 15726: inline bool 15726: operator>=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept 15726: { return !(__a < nullptr); } 15726: 15726: template 15726: inline bool 15726: operator>=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept 15726: { return !(nullptr < __a); } 15726: 15726: 15726: 15726: template 15726: inline void 15726: swap(__shared_ptr<_Tp, _Lp>& __a, __shared_ptr<_Tp, _Lp>& __b) noexcept 15726: { __a.swap(__b); } 15726: # 1927 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 15726: template 15726: inline __shared_ptr<_Tp, _Lp> 15726: static_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept 15726: { 15726: using _Sp = __shared_ptr<_Tp, _Lp>; 15726: return _Sp(__r, static_cast(__r.get())); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline __shared_ptr<_Tp, _Lp> 15726: const_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept 15726: { 15726: using _Sp = __shared_ptr<_Tp, _Lp>; 15726: return _Sp(__r, const_cast(__r.get())); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline __shared_ptr<_Tp, _Lp> 15726: dynamic_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept 15726: { 15726: using _Sp = __shared_ptr<_Tp, _Lp>; 15726: if (auto* __p = dynamic_cast(__r.get())) 15726: return _Sp(__r, __p); 15726: return _Sp(); 15726: } 15726: 15726: 15726: template 15726: inline __shared_ptr<_Tp, _Lp> 15726: reinterpret_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept 15726: { 15726: using _Sp = __shared_ptr<_Tp, _Lp>; 15726: return _Sp(__r, reinterpret_cast(__r.get())); 15726: } 15726: 15726: 15726: template 15726: class __weak_ptr 15726: { 15726: template 15726: using _Compatible = typename 15726: enable_if<__sp_compatible_with<_Yp*, _Tp*>::value, _Res>::type; 15726: 15726: 15726: template 15726: using _Assignable = _Compatible<_Yp, __weak_ptr&>; 15726: 15726: public: 15726: using element_type = typename remove_extent<_Tp>::type; 15726: 15726: constexpr __weak_ptr() noexcept 15726: : _M_ptr(nullptr), _M_refcount() 15726: { } 15726: 15726: __weak_ptr(const __weak_ptr&) noexcept = default; 15726: 15726: ~__weak_ptr() = default; 15726: # 2009 "/usr/include/c++/13/bits/shared_ptr_base.h" 3 15726: template> 15726: __weak_ptr(const __weak_ptr<_Yp, _Lp>& __r) noexcept 15726: : _M_refcount(__r._M_refcount) 15726: { _M_ptr = __r.lock().get(); } 15726: 15726: template> 15726: __weak_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept 15726: : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) 15726: { } 15726: 15726: __weak_ptr(__weak_ptr&& __r) noexcept 15726: : _M_ptr(__r._M_ptr), _M_refcount(std::move(__r._M_refcount)) 15726: { __r._M_ptr = nullptr; } 15726: 15726: template> 15726: __weak_ptr(__weak_ptr<_Yp, _Lp>&& __r) noexcept 15726: : _M_ptr(__r.lock().get()), _M_refcount(std::move(__r._M_refcount)) 15726: { __r._M_ptr = nullptr; } 15726: 15726: __weak_ptr& 15726: operator=(const __weak_ptr& __r) noexcept = default; 15726: 15726: template 15726: _Assignable<_Yp> 15726: operator=(const __weak_ptr<_Yp, _Lp>& __r) noexcept 15726: { 15726: _M_ptr = __r.lock().get(); 15726: _M_refcount = __r._M_refcount; 15726: return *this; 15726: } 15726: 15726: template 15726: _Assignable<_Yp> 15726: operator=(const __shared_ptr<_Yp, _Lp>& __r) noexcept 15726: { 15726: _M_ptr = __r._M_ptr; 15726: _M_refcount = __r._M_refcount; 15726: return *this; 15726: } 15726: 15726: __weak_ptr& 15726: operator=(__weak_ptr&& __r) noexcept 15726: { 15726: __weak_ptr(std::move(__r)).swap(*this); 15726: return *this; 15726: } 15726: 15726: template 15726: _Assignable<_Yp> 15726: operator=(__weak_ptr<_Yp, _Lp>&& __r) noexcept 15726: { 15726: _M_ptr = __r.lock().get(); 15726: _M_refcount = std::move(__r._M_refcount); 15726: __r._M_ptr = nullptr; 15726: return *this; 15726: } 15726: 15726: __shared_ptr<_Tp, _Lp> 15726: lock() const noexcept 15726: { return __shared_ptr(*this, std::nothrow); } 15726: 15726: long 15726: use_count() const noexcept 15726: { return _M_refcount._M_get_use_count(); } 15726: 15726: bool 15726: expired() const noexcept 15726: { return _M_refcount._M_get_use_count() == 0; } 15726: 15726: template 15726: bool 15726: owner_before(const __shared_ptr<_Tp1, _Lp>& __rhs) const noexcept 15726: { return _M_refcount._M_less(__rhs._M_refcount); } 15726: 15726: template 15726: bool 15726: owner_before(const __weak_ptr<_Tp1, _Lp>& __rhs) const noexcept 15726: { return _M_refcount._M_less(__rhs._M_refcount); } 15726: 15726: void 15726: reset() noexcept 15726: { __weak_ptr().swap(*this); } 15726: 15726: void 15726: swap(__weak_ptr& __s) noexcept 15726: { 15726: std::swap(_M_ptr, __s._M_ptr); 15726: _M_refcount._M_swap(__s._M_refcount); 15726: } 15726: 15726: private: 15726: 15726: void 15726: _M_assign(_Tp* __ptr, const __shared_count<_Lp>& __refcount) noexcept 15726: { 15726: if (use_count() == 0) 15726: { 15726: _M_ptr = __ptr; 15726: _M_refcount = __refcount; 15726: } 15726: } 15726: 15726: template friend class __shared_ptr; 15726: template friend class __weak_ptr; 15726: friend class __enable_shared_from_this<_Tp, _Lp>; 15726: friend class enable_shared_from_this<_Tp>; 15726: 15726: 15726: 15726: 15726: element_type* _M_ptr; 15726: __weak_count<_Lp> _M_refcount; 15726: }; 15726: 15726: 15726: template 15726: inline void 15726: swap(__weak_ptr<_Tp, _Lp>& __a, __weak_ptr<_Tp, _Lp>& __b) noexcept 15726: { __a.swap(__b); } 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: template 15726: struct _Sp_owner_less : public binary_function<_Tp, _Tp, bool> 15726: { 15726: bool 15726: operator()(const _Tp& __lhs, const _Tp& __rhs) const noexcept 15726: { return __lhs.owner_before(__rhs); } 15726: 15726: bool 15726: operator()(const _Tp& __lhs, const _Tp1& __rhs) const noexcept 15726: { return __lhs.owner_before(__rhs); } 15726: 15726: bool 15726: operator()(const _Tp1& __lhs, const _Tp& __rhs) const noexcept 15726: { return __lhs.owner_before(__rhs); } 15726: }; 15726: #pragma GCC diagnostic pop 15726: 15726: template<> 15726: struct _Sp_owner_less 15726: { 15726: template 15726: auto 15726: operator()(const _Tp& __lhs, const _Up& __rhs) const noexcept 15726: -> decltype(__lhs.owner_before(__rhs)) 15726: { return __lhs.owner_before(__rhs); } 15726: 15726: using is_transparent = void; 15726: }; 15726: 15726: template 15726: struct owner_less<__shared_ptr<_Tp, _Lp>> 15726: : public _Sp_owner_less<__shared_ptr<_Tp, _Lp>, __weak_ptr<_Tp, _Lp>> 15726: { }; 15726: 15726: template 15726: struct owner_less<__weak_ptr<_Tp, _Lp>> 15726: : public _Sp_owner_less<__weak_ptr<_Tp, _Lp>, __shared_ptr<_Tp, _Lp>> 15726: { }; 15726: 15726: 15726: template 15726: class __enable_shared_from_this 15726: { 15726: protected: 15726: constexpr __enable_shared_from_this() noexcept { } 15726: 15726: __enable_shared_from_this(const __enable_shared_from_this&) noexcept { } 15726: 15726: __enable_shared_from_this& 15726: operator=(const __enable_shared_from_this&) noexcept 15726: { return *this; } 15726: 15726: ~__enable_shared_from_this() { } 15726: 15726: public: 15726: __shared_ptr<_Tp, _Lp> 15726: shared_from_this() 15726: { return __shared_ptr<_Tp, _Lp>(this->_M_weak_this); } 15726: 15726: __shared_ptr 15726: shared_from_this() const 15726: { return __shared_ptr(this->_M_weak_this); } 15726: 15726: 15726: __weak_ptr<_Tp, _Lp> 15726: weak_from_this() noexcept 15726: { return this->_M_weak_this; } 15726: 15726: __weak_ptr 15726: weak_from_this() const noexcept 15726: { return this->_M_weak_this; } 15726: 15726: 15726: private: 15726: template 15726: void 15726: _M_weak_assign(_Tp1* __p, const __shared_count<_Lp>& __n) const noexcept 15726: { _M_weak_this._M_assign(__p, __n); } 15726: 15726: friend const __enable_shared_from_this* 15726: __enable_shared_from_this_base(const __shared_count<_Lp>&, 15726: const __enable_shared_from_this* __p) 15726: { return __p; } 15726: 15726: template 15726: friend class __shared_ptr; 15726: 15726: mutable __weak_ptr<_Tp, _Lp> _M_weak_this; 15726: }; 15726: 15726: template 15726: inline __shared_ptr<_Tp, _Lp> 15726: __allocate_shared(const _Alloc& __a, _Args&&... __args) 15726: { 15726: static_assert(!is_array<_Tp>::value, "make_shared not supported"); 15726: 15726: return __shared_ptr<_Tp, _Lp>(_Sp_alloc_shared_tag<_Alloc>{__a}, 15726: std::forward<_Args>(__args)...); 15726: } 15726: 15726: template 15726: inline __shared_ptr<_Tp, _Lp> 15726: __make_shared(_Args&&... __args) 15726: { 15726: typedef typename std::remove_const<_Tp>::type _Tp_nc; 15726: return std::__allocate_shared<_Tp, _Lp>(std::allocator<_Tp_nc>(), 15726: std::forward<_Args>(__args)...); 15726: } 15726: 15726: 15726: template 15726: struct hash<__shared_ptr<_Tp, _Lp>> 15726: : public __hash_base> 15726: { 15726: size_t 15726: operator()(const __shared_ptr<_Tp, _Lp>& __s) const noexcept 15726: { 15726: return hash::element_type*>()( 15726: __s.get()); 15726: } 15726: }; 15726: 15726: 15726: } 15726: # 54 "/usr/include/c++/13/bits/shared_ptr.h" 2 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 68 "/usr/include/c++/13/bits/shared_ptr.h" 3 15726: template 15726: inline std::basic_ostream<_Ch, _Tr>& 15726: operator<<(std::basic_ostream<_Ch, _Tr>& __os, 15726: const __shared_ptr<_Tp, _Lp>& __p) 15726: { 15726: __os << __p.get(); 15726: return __os; 15726: } 15726: 15726: template 15726: inline _Del* 15726: get_deleter(const __shared_ptr<_Tp, _Lp>& __p) noexcept 15726: { 15726: 15726: return static_cast<_Del*>(__p._M_get_deleter(typeid(_Del))); 15726: 15726: 15726: 15726: } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline _Del* 15726: get_deleter(const shared_ptr<_Tp>& __p) noexcept 15726: { 15726: 15726: return static_cast<_Del*>(__p._M_get_deleter(typeid(_Del))); 15726: 15726: 15726: 15726: } 15726: # 111 "/usr/include/c++/13/bits/shared_ptr.h" 3 15726: template 15726: using _NonArray = __enable_if_t::value, _Tp>; 15726: # 174 "/usr/include/c++/13/bits/shared_ptr.h" 3 15726: template 15726: class shared_ptr : public __shared_ptr<_Tp> 15726: { 15726: template 15726: using _Constructible = typename enable_if< 15726: is_constructible<__shared_ptr<_Tp>, _Args...>::value 15726: >::type; 15726: 15726: template 15726: using _Assignable = typename enable_if< 15726: is_assignable<__shared_ptr<_Tp>&, _Arg>::value, shared_ptr& 15726: >::type; 15726: 15726: public: 15726: 15726: 15726: using element_type = typename __shared_ptr<_Tp>::element_type; 15726: 15726: 15726: 15726: 15726: 15726: using weak_type = weak_ptr<_Tp>; 15726: 15726: 15726: 15726: 15726: 15726: constexpr shared_ptr() noexcept : __shared_ptr<_Tp>() { } 15726: 15726: shared_ptr(const shared_ptr&) noexcept = default; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template> 15726: explicit 15726: shared_ptr(_Yp* __p) : __shared_ptr<_Tp>(__p) { } 15726: # 229 "/usr/include/c++/13/bits/shared_ptr.h" 3 15726: template> 15726: shared_ptr(_Yp* __p, _Deleter __d) 15726: : __shared_ptr<_Tp>(__p, std::move(__d)) { } 15726: # 247 "/usr/include/c++/13/bits/shared_ptr.h" 3 15726: template 15726: shared_ptr(nullptr_t __p, _Deleter __d) 15726: : __shared_ptr<_Tp>(__p, std::move(__d)) { } 15726: # 266 "/usr/include/c++/13/bits/shared_ptr.h" 3 15726: template> 15726: shared_ptr(_Yp* __p, _Deleter __d, _Alloc __a) 15726: : __shared_ptr<_Tp>(__p, std::move(__d), std::move(__a)) { } 15726: # 286 "/usr/include/c++/13/bits/shared_ptr.h" 3 15726: template 15726: shared_ptr(nullptr_t __p, _Deleter __d, _Alloc __a) 15726: : __shared_ptr<_Tp>(__p, std::move(__d), std::move(__a)) { } 15726: # 310 "/usr/include/c++/13/bits/shared_ptr.h" 3 15726: template 15726: shared_ptr(const shared_ptr<_Yp>& __r, element_type* __p) noexcept 15726: : __shared_ptr<_Tp>(__r, __p) { } 15726: # 349 "/usr/include/c++/13/bits/shared_ptr.h" 3 15726: template&>> 15726: shared_ptr(const shared_ptr<_Yp>& __r) noexcept 15726: : __shared_ptr<_Tp>(__r) { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: shared_ptr(shared_ptr&& __r) noexcept 15726: : __shared_ptr<_Tp>(std::move(__r)) { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template>> 15726: shared_ptr(shared_ptr<_Yp>&& __r) noexcept 15726: : __shared_ptr<_Tp>(std::move(__r)) { } 15726: # 379 "/usr/include/c++/13/bits/shared_ptr.h" 3 15726: template&>> 15726: explicit shared_ptr(const weak_ptr<_Yp>& __r) 15726: : __shared_ptr<_Tp>(__r) { } 15726: 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: template>> 15726: shared_ptr(auto_ptr<_Yp>&& __r); 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: 15726: 15726: template>> 15726: shared_ptr(unique_ptr<_Yp, _Del>&& __r) 15726: : __shared_ptr<_Tp>(std::move(__r)) { } 15726: # 412 "/usr/include/c++/13/bits/shared_ptr.h" 3 15726: constexpr shared_ptr(nullptr_t) noexcept : shared_ptr() { } 15726: 15726: shared_ptr& operator=(const shared_ptr&) noexcept = default; 15726: 15726: template 15726: _Assignable&> 15726: operator=(const shared_ptr<_Yp>& __r) noexcept 15726: { 15726: this->__shared_ptr<_Tp>::operator=(__r); 15726: return *this; 15726: } 15726: 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: template 15726: _Assignable> 15726: operator=(auto_ptr<_Yp>&& __r) 15726: { 15726: this->__shared_ptr<_Tp>::operator=(std::move(__r)); 15726: return *this; 15726: } 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: shared_ptr& 15726: operator=(shared_ptr&& __r) noexcept 15726: { 15726: this->__shared_ptr<_Tp>::operator=(std::move(__r)); 15726: return *this; 15726: } 15726: 15726: template 15726: _Assignable> 15726: operator=(shared_ptr<_Yp>&& __r) noexcept 15726: { 15726: this->__shared_ptr<_Tp>::operator=(std::move(__r)); 15726: return *this; 15726: } 15726: 15726: template 15726: _Assignable> 15726: operator=(unique_ptr<_Yp, _Del>&& __r) 15726: { 15726: this->__shared_ptr<_Tp>::operator=(std::move(__r)); 15726: return *this; 15726: } 15726: 15726: private: 15726: 15726: template 15726: shared_ptr(_Sp_alloc_shared_tag<_Alloc> __tag, _Args&&... __args) 15726: : __shared_ptr<_Tp>(__tag, std::forward<_Args>(__args)...) 15726: { } 15726: 15726: template 15726: friend shared_ptr<_NonArray<_Yp>> 15726: allocate_shared(const _Alloc&, _Args&&...); 15726: 15726: template 15726: friend shared_ptr<_NonArray<_Yp>> 15726: make_shared(_Args&&...); 15726: # 535 "/usr/include/c++/13/bits/shared_ptr.h" 3 15726: shared_ptr(const weak_ptr<_Tp>& __r, std::nothrow_t) noexcept 15726: : __shared_ptr<_Tp>(__r, std::nothrow) { } 15726: 15726: friend class weak_ptr<_Tp>; 15726: }; 15726: 15726: 15726: template 15726: shared_ptr(weak_ptr<_Tp>) -> shared_ptr<_Tp>; 15726: template 15726: shared_ptr(unique_ptr<_Tp, _Del>) -> shared_ptr<_Tp>; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] inline bool 15726: operator==(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept 15726: { return __a.get() == __b.get(); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] inline bool 15726: operator==(const shared_ptr<_Tp>& __a, nullptr_t) noexcept 15726: { return !__a; } 15726: # 580 "/usr/include/c++/13/bits/shared_ptr.h" 3 15726: template 15726: [[__nodiscard__]] inline bool 15726: operator==(nullptr_t, const shared_ptr<_Tp>& __a) noexcept 15726: { return !__a; } 15726: 15726: 15726: template 15726: [[__nodiscard__]] inline bool 15726: operator!=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept 15726: { return __a.get() != __b.get(); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] inline bool 15726: operator!=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept 15726: { return (bool)__a; } 15726: 15726: 15726: template 15726: [[__nodiscard__]] inline bool 15726: operator!=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept 15726: { return (bool)__a; } 15726: 15726: 15726: template 15726: [[__nodiscard__]] inline bool 15726: operator<(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept 15726: { 15726: using _Tp_elt = typename shared_ptr<_Tp>::element_type; 15726: using _Up_elt = typename shared_ptr<_Up>::element_type; 15726: using _Vp = typename common_type<_Tp_elt*, _Up_elt*>::type; 15726: return less<_Vp>()(__a.get(), __b.get()); 15726: } 15726: 15726: 15726: template 15726: [[__nodiscard__]] inline bool 15726: operator<(const shared_ptr<_Tp>& __a, nullptr_t) noexcept 15726: { 15726: using _Tp_elt = typename shared_ptr<_Tp>::element_type; 15726: return less<_Tp_elt*>()(__a.get(), nullptr); 15726: } 15726: 15726: 15726: template 15726: [[__nodiscard__]] inline bool 15726: operator<(nullptr_t, const shared_ptr<_Tp>& __a) noexcept 15726: { 15726: using _Tp_elt = typename shared_ptr<_Tp>::element_type; 15726: return less<_Tp_elt*>()(nullptr, __a.get()); 15726: } 15726: 15726: 15726: template 15726: [[__nodiscard__]] inline bool 15726: operator<=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept 15726: { return !(__b < __a); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] inline bool 15726: operator<=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept 15726: { return !(nullptr < __a); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] inline bool 15726: operator<=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept 15726: { return !(__a < nullptr); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] inline bool 15726: operator>(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept 15726: { return (__b < __a); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] inline bool 15726: operator>(const shared_ptr<_Tp>& __a, nullptr_t) noexcept 15726: { return nullptr < __a; } 15726: 15726: 15726: template 15726: [[__nodiscard__]] inline bool 15726: operator>(nullptr_t, const shared_ptr<_Tp>& __a) noexcept 15726: { return __a < nullptr; } 15726: 15726: 15726: template 15726: [[__nodiscard__]] inline bool 15726: operator>=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept 15726: { return !(__a < __b); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] inline bool 15726: operator>=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept 15726: { return !(__a < nullptr); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] inline bool 15726: operator>=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept 15726: { return !(nullptr < __a); } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline void 15726: swap(shared_ptr<_Tp>& __a, shared_ptr<_Tp>& __b) noexcept 15726: { __a.swap(__b); } 15726: 15726: 15726: 15726: 15726: template 15726: inline shared_ptr<_Tp> 15726: static_pointer_cast(const shared_ptr<_Up>& __r) noexcept 15726: { 15726: using _Sp = shared_ptr<_Tp>; 15726: return _Sp(__r, static_cast(__r.get())); 15726: } 15726: 15726: 15726: template 15726: inline shared_ptr<_Tp> 15726: const_pointer_cast(const shared_ptr<_Up>& __r) noexcept 15726: { 15726: using _Sp = shared_ptr<_Tp>; 15726: return _Sp(__r, const_cast(__r.get())); 15726: } 15726: 15726: 15726: template 15726: inline shared_ptr<_Tp> 15726: dynamic_pointer_cast(const shared_ptr<_Up>& __r) noexcept 15726: { 15726: using _Sp = shared_ptr<_Tp>; 15726: if (auto* __p = dynamic_cast(__r.get())) 15726: return _Sp(__r, __p); 15726: return _Sp(); 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: inline shared_ptr<_Tp> 15726: reinterpret_pointer_cast(const shared_ptr<_Up>& __r) noexcept 15726: { 15726: using _Sp = shared_ptr<_Tp>; 15726: return _Sp(__r, reinterpret_cast(__r.get())); 15726: } 15726: # 810 "/usr/include/c++/13/bits/shared_ptr.h" 3 15726: template 15726: class weak_ptr : public __weak_ptr<_Tp> 15726: { 15726: template 15726: using _Constructible = typename enable_if< 15726: is_constructible<__weak_ptr<_Tp>, _Arg>::value 15726: >::type; 15726: 15726: template 15726: using _Assignable = typename enable_if< 15726: is_assignable<__weak_ptr<_Tp>&, _Arg>::value, weak_ptr& 15726: >::type; 15726: 15726: public: 15726: constexpr weak_ptr() noexcept = default; 15726: 15726: template&>> 15726: weak_ptr(const shared_ptr<_Yp>& __r) noexcept 15726: : __weak_ptr<_Tp>(__r) { } 15726: 15726: weak_ptr(const weak_ptr&) noexcept = default; 15726: 15726: template&>> 15726: weak_ptr(const weak_ptr<_Yp>& __r) noexcept 15726: : __weak_ptr<_Tp>(__r) { } 15726: 15726: weak_ptr(weak_ptr&&) noexcept = default; 15726: 15726: template>> 15726: weak_ptr(weak_ptr<_Yp>&& __r) noexcept 15726: : __weak_ptr<_Tp>(std::move(__r)) { } 15726: 15726: weak_ptr& 15726: operator=(const weak_ptr& __r) noexcept = default; 15726: 15726: template 15726: _Assignable&> 15726: operator=(const weak_ptr<_Yp>& __r) noexcept 15726: { 15726: this->__weak_ptr<_Tp>::operator=(__r); 15726: return *this; 15726: } 15726: 15726: template 15726: _Assignable&> 15726: operator=(const shared_ptr<_Yp>& __r) noexcept 15726: { 15726: this->__weak_ptr<_Tp>::operator=(__r); 15726: return *this; 15726: } 15726: 15726: weak_ptr& 15726: operator=(weak_ptr&& __r) noexcept = default; 15726: 15726: template 15726: _Assignable> 15726: operator=(weak_ptr<_Yp>&& __r) noexcept 15726: { 15726: this->__weak_ptr<_Tp>::operator=(std::move(__r)); 15726: return *this; 15726: } 15726: 15726: shared_ptr<_Tp> 15726: lock() const noexcept 15726: { return shared_ptr<_Tp>(*this, std::nothrow); } 15726: }; 15726: 15726: 15726: template 15726: weak_ptr(shared_ptr<_Tp>) -> weak_ptr<_Tp>; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline void 15726: swap(weak_ptr<_Tp>& __a, weak_ptr<_Tp>& __b) noexcept 15726: { __a.swap(__b); } 15726: 15726: 15726: 15726: template 15726: struct owner_less; 15726: 15726: 15726: template<> 15726: struct owner_less : _Sp_owner_less 15726: { }; 15726: 15726: 15726: template 15726: struct owner_less> 15726: : public _Sp_owner_less, weak_ptr<_Tp>> 15726: { }; 15726: 15726: 15726: template 15726: struct owner_less> 15726: : public _Sp_owner_less, shared_ptr<_Tp>> 15726: { }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: class enable_shared_from_this 15726: { 15726: protected: 15726: constexpr enable_shared_from_this() noexcept { } 15726: 15726: enable_shared_from_this(const enable_shared_from_this&) noexcept { } 15726: 15726: enable_shared_from_this& 15726: operator=(const enable_shared_from_this&) noexcept 15726: { return *this; } 15726: 15726: ~enable_shared_from_this() { } 15726: 15726: public: 15726: shared_ptr<_Tp> 15726: shared_from_this() 15726: { return shared_ptr<_Tp>(this->_M_weak_this); } 15726: 15726: shared_ptr 15726: shared_from_this() const 15726: { return shared_ptr(this->_M_weak_this); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: weak_ptr<_Tp> 15726: weak_from_this() noexcept 15726: { return this->_M_weak_this; } 15726: 15726: weak_ptr 15726: weak_from_this() const noexcept 15726: { return this->_M_weak_this; } 15726: 15726: 15726: 15726: private: 15726: template 15726: void 15726: _M_weak_assign(_Tp1* __p, const __shared_count<>& __n) const noexcept 15726: { _M_weak_this._M_assign(__p, __n); } 15726: 15726: 15726: friend const enable_shared_from_this* 15726: __enable_shared_from_this_base(const __shared_count<>&, 15726: const enable_shared_from_this* __p) 15726: { return __p; } 15726: 15726: template 15726: friend class __shared_ptr; 15726: 15726: mutable weak_ptr<_Tp> _M_weak_this; 15726: }; 15726: # 988 "/usr/include/c++/13/bits/shared_ptr.h" 3 15726: template 15726: inline shared_ptr<_NonArray<_Tp>> 15726: allocate_shared(const _Alloc& __a, _Args&&... __args) 15726: { 15726: return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a}, 15726: std::forward<_Args>(__args)...); 15726: } 15726: # 1003 "/usr/include/c++/13/bits/shared_ptr.h" 3 15726: template 15726: inline shared_ptr<_NonArray<_Tp>> 15726: make_shared(_Args&&... __args) 15726: { 15726: using _Alloc = allocator; 15726: _Alloc __a; 15726: return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a}, 15726: std::forward<_Args>(__args)...); 15726: } 15726: # 1152 "/usr/include/c++/13/bits/shared_ptr.h" 3 15726: template 15726: struct hash> 15726: : public __hash_base> 15726: { 15726: size_t 15726: operator()(const shared_ptr<_Tp>& __s) const noexcept 15726: { 15726: return std::hash::element_type*>()(__s.get()); 15726: } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: namespace __detail::__variant 15726: { 15726: template struct _Never_valueless_alt; 15726: 15726: 15726: 15726: template 15726: struct _Never_valueless_alt> 15726: : std::true_type 15726: { }; 15726: 15726: 15726: 15726: template 15726: struct _Never_valueless_alt> 15726: : std::true_type 15726: { }; 15726: } 15726: 15726: 15726: 15726: } 15726: # 81 "/usr/include/c++/13/memory" 2 3 15726: # 1 "/usr/include/c++/13/bits/shared_ptr_atomic.h" 1 3 15726: # 61 "/usr/include/c++/13/bits/shared_ptr_atomic.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 73 "/usr/include/c++/13/bits/shared_ptr_atomic.h" 3 15726: struct _Sp_locker 15726: { 15726: _Sp_locker(const _Sp_locker&) = delete; 15726: _Sp_locker& operator=(const _Sp_locker&) = delete; 15726: 15726: 15726: explicit 15726: _Sp_locker(const void*) noexcept; 15726: _Sp_locker(const void*, const void*) noexcept; 15726: ~_Sp_locker(); 15726: 15726: private: 15726: unsigned char _M_key1; 15726: unsigned char _M_key2; 15726: 15726: 15726: 15726: }; 15726: # 100 "/usr/include/c++/13/bits/shared_ptr_atomic.h" 3 15726: template 15726: inline bool 15726: atomic_is_lock_free(const __shared_ptr<_Tp, _Lp>*) 15726: { 15726: 15726: return __gthread_active_p() == 0; 15726: 15726: 15726: 15726: } 15726: 15726: template 15726: inline bool 15726: atomic_is_lock_free(const shared_ptr<_Tp>* __p) 15726: { return std::atomic_is_lock_free<_Tp, __default_lock_policy>(__p); } 15726: # 127 "/usr/include/c++/13/bits/shared_ptr_atomic.h" 3 15726: template 15726: inline shared_ptr<_Tp> 15726: atomic_load_explicit(const shared_ptr<_Tp>* __p, memory_order) 15726: { 15726: _Sp_locker __lock{__p}; 15726: return *__p; 15726: } 15726: 15726: template 15726: inline shared_ptr<_Tp> 15726: atomic_load(const shared_ptr<_Tp>* __p) 15726: { return std::atomic_load_explicit(__p, memory_order_seq_cst); } 15726: 15726: template 15726: inline __shared_ptr<_Tp, _Lp> 15726: atomic_load_explicit(const __shared_ptr<_Tp, _Lp>* __p, memory_order) 15726: { 15726: _Sp_locker __lock{__p}; 15726: return *__p; 15726: } 15726: 15726: template 15726: inline __shared_ptr<_Tp, _Lp> 15726: atomic_load(const __shared_ptr<_Tp, _Lp>* __p) 15726: { return std::atomic_load_explicit(__p, memory_order_seq_cst); } 15726: # 163 "/usr/include/c++/13/bits/shared_ptr_atomic.h" 3 15726: template 15726: inline void 15726: atomic_store_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r, 15726: memory_order) 15726: { 15726: _Sp_locker __lock{__p}; 15726: __p->swap(__r); 15726: } 15726: 15726: template 15726: inline void 15726: atomic_store(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r) 15726: { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); } 15726: 15726: template 15726: inline void 15726: atomic_store_explicit(__shared_ptr<_Tp, _Lp>* __p, 15726: __shared_ptr<_Tp, _Lp> __r, 15726: memory_order) 15726: { 15726: _Sp_locker __lock{__p}; 15726: __p->swap(__r); 15726: } 15726: 15726: template 15726: inline void 15726: atomic_store(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r) 15726: { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); } 15726: # 200 "/usr/include/c++/13/bits/shared_ptr_atomic.h" 3 15726: template 15726: inline shared_ptr<_Tp> 15726: atomic_exchange_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r, 15726: memory_order) 15726: { 15726: _Sp_locker __lock{__p}; 15726: __p->swap(__r); 15726: return __r; 15726: } 15726: 15726: template 15726: inline shared_ptr<_Tp> 15726: atomic_exchange(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r) 15726: { 15726: return std::atomic_exchange_explicit(__p, std::move(__r), 15726: memory_order_seq_cst); 15726: } 15726: 15726: template 15726: inline __shared_ptr<_Tp, _Lp> 15726: atomic_exchange_explicit(__shared_ptr<_Tp, _Lp>* __p, 15726: __shared_ptr<_Tp, _Lp> __r, 15726: memory_order) 15726: { 15726: _Sp_locker __lock{__p}; 15726: __p->swap(__r); 15726: return __r; 15726: } 15726: 15726: template 15726: inline __shared_ptr<_Tp, _Lp> 15726: atomic_exchange(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r) 15726: { 15726: return std::atomic_exchange_explicit(__p, std::move(__r), 15726: memory_order_seq_cst); 15726: } 15726: # 249 "/usr/include/c++/13/bits/shared_ptr_atomic.h" 3 15726: template 15726: bool 15726: atomic_compare_exchange_strong_explicit(shared_ptr<_Tp>* __p, 15726: shared_ptr<_Tp>* __v, 15726: shared_ptr<_Tp> __w, 15726: memory_order, 15726: memory_order) 15726: { 15726: shared_ptr<_Tp> __x; 15726: _Sp_locker __lock{__p, __v}; 15726: owner_less> __less; 15726: if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p)) 15726: { 15726: __x = std::move(*__p); 15726: *__p = std::move(__w); 15726: return true; 15726: } 15726: __x = std::move(*__v); 15726: *__v = *__p; 15726: return false; 15726: } 15726: 15726: template 15726: inline bool 15726: atomic_compare_exchange_strong(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v, 15726: shared_ptr<_Tp> __w) 15726: { 15726: return std::atomic_compare_exchange_strong_explicit(__p, __v, 15726: std::move(__w), memory_order_seq_cst, memory_order_seq_cst); 15726: } 15726: 15726: template 15726: inline bool 15726: atomic_compare_exchange_weak_explicit(shared_ptr<_Tp>* __p, 15726: shared_ptr<_Tp>* __v, 15726: shared_ptr<_Tp> __w, 15726: memory_order __success, 15726: memory_order __failure) 15726: { 15726: return std::atomic_compare_exchange_strong_explicit(__p, __v, 15726: std::move(__w), __success, __failure); 15726: } 15726: 15726: template 15726: inline bool 15726: atomic_compare_exchange_weak(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v, 15726: shared_ptr<_Tp> __w) 15726: { 15726: return std::atomic_compare_exchange_weak_explicit(__p, __v, 15726: std::move(__w), memory_order_seq_cst, memory_order_seq_cst); 15726: } 15726: 15726: template 15726: bool 15726: atomic_compare_exchange_strong_explicit(__shared_ptr<_Tp, _Lp>* __p, 15726: __shared_ptr<_Tp, _Lp>* __v, 15726: __shared_ptr<_Tp, _Lp> __w, 15726: memory_order, 15726: memory_order) 15726: { 15726: __shared_ptr<_Tp, _Lp> __x; 15726: _Sp_locker __lock{__p, __v}; 15726: owner_less<__shared_ptr<_Tp, _Lp>> __less; 15726: if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p)) 15726: { 15726: __x = std::move(*__p); 15726: *__p = std::move(__w); 15726: return true; 15726: } 15726: __x = std::move(*__v); 15726: *__v = *__p; 15726: return false; 15726: } 15726: 15726: template 15726: inline bool 15726: atomic_compare_exchange_strong(__shared_ptr<_Tp, _Lp>* __p, 15726: __shared_ptr<_Tp, _Lp>* __v, 15726: __shared_ptr<_Tp, _Lp> __w) 15726: { 15726: return std::atomic_compare_exchange_strong_explicit(__p, __v, 15726: std::move(__w), memory_order_seq_cst, memory_order_seq_cst); 15726: } 15726: 15726: template 15726: inline bool 15726: atomic_compare_exchange_weak_explicit(__shared_ptr<_Tp, _Lp>* __p, 15726: __shared_ptr<_Tp, _Lp>* __v, 15726: __shared_ptr<_Tp, _Lp> __w, 15726: memory_order __success, 15726: memory_order __failure) 15726: { 15726: return std::atomic_compare_exchange_strong_explicit(__p, __v, 15726: std::move(__w), __success, __failure); 15726: } 15726: 15726: template 15726: inline bool 15726: atomic_compare_exchange_weak(__shared_ptr<_Tp, _Lp>* __p, 15726: __shared_ptr<_Tp, _Lp>* __v, 15726: __shared_ptr<_Tp, _Lp> __w) 15726: { 15726: return std::atomic_compare_exchange_weak_explicit(__p, __v, 15726: std::move(__w), memory_order_seq_cst, memory_order_seq_cst); 15726: } 15726: # 850 "/usr/include/c++/13/bits/shared_ptr_atomic.h" 3 15726: 15726: } 15726: # 82 "/usr/include/c++/13/memory" 2 3 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/backward/auto_ptr.h" 1 3 15726: # 36 "/usr/include/c++/13/backward/auto_ptr.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 47 "/usr/include/c++/13/backward/auto_ptr.h" 3 15726: template 15726: struct auto_ptr_ref 15726: { 15726: _Tp1* _M_ptr; 15726: 15726: explicit 15726: auto_ptr_ref(_Tp1* __p): _M_ptr(__p) { } 15726: } __attribute__ ((__deprecated__)); 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: # 92 "/usr/include/c++/13/backward/auto_ptr.h" 3 15726: template 15726: class auto_ptr 15726: { 15726: private: 15726: _Tp* _M_ptr; 15726: 15726: public: 15726: 15726: typedef _Tp element_type; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { } 15726: # 118 "/usr/include/c++/13/backward/auto_ptr.h" 3 15726: auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { } 15726: # 130 "/usr/include/c++/13/backward/auto_ptr.h" 3 15726: template 15726: auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { } 15726: # 141 "/usr/include/c++/13/backward/auto_ptr.h" 3 15726: auto_ptr& 15726: operator=(auto_ptr& __a) throw() 15726: { 15726: reset(__a.release()); 15726: return *this; 15726: } 15726: # 158 "/usr/include/c++/13/backward/auto_ptr.h" 3 15726: template 15726: auto_ptr& 15726: operator=(auto_ptr<_Tp1>& __a) throw() 15726: { 15726: reset(__a.release()); 15726: return *this; 15726: } 15726: # 176 "/usr/include/c++/13/backward/auto_ptr.h" 3 15726: ~auto_ptr() { delete _M_ptr; } 15726: # 186 "/usr/include/c++/13/backward/auto_ptr.h" 3 15726: element_type& 15726: operator*() const throw() 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(_M_ptr != 0)) __builtin_unreachable(); } while (false); 15726: return *_M_ptr; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: element_type* 15726: operator->() const throw() 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(_M_ptr != 0)) __builtin_unreachable(); } while (false); 15726: return _M_ptr; 15726: } 15726: # 216 "/usr/include/c++/13/backward/auto_ptr.h" 3 15726: element_type* 15726: get() const throw() { return _M_ptr; } 15726: # 230 "/usr/include/c++/13/backward/auto_ptr.h" 3 15726: element_type* 15726: release() throw() 15726: { 15726: element_type* __tmp = _M_ptr; 15726: _M_ptr = 0; 15726: return __tmp; 15726: } 15726: # 245 "/usr/include/c++/13/backward/auto_ptr.h" 3 15726: void 15726: reset(element_type* __p = 0) throw() 15726: { 15726: if (__p != _M_ptr) 15726: { 15726: delete _M_ptr; 15726: _M_ptr = __p; 15726: } 15726: } 15726: # 270 "/usr/include/c++/13/backward/auto_ptr.h" 3 15726: auto_ptr(auto_ptr_ref __ref) throw() 15726: : _M_ptr(__ref._M_ptr) { } 15726: 15726: auto_ptr& 15726: operator=(auto_ptr_ref __ref) throw() 15726: { 15726: if (__ref._M_ptr != this->get()) 15726: { 15726: delete _M_ptr; 15726: _M_ptr = __ref._M_ptr; 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: operator auto_ptr_ref<_Tp1>() throw() 15726: { return auto_ptr_ref<_Tp1>(this->release()); } 15726: 15726: template 15726: operator auto_ptr<_Tp1>() throw() 15726: { return auto_ptr<_Tp1>(this->release()); } 15726: } __attribute__ ((__deprecated__ ("use '" "std::unique_ptr" "' instead"))); 15726: 15726: 15726: 15726: template<> 15726: class auto_ptr 15726: { 15726: public: 15726: typedef void element_type; 15726: } __attribute__ ((__deprecated__)); 15726: 15726: 15726: 15726: template<_Lock_policy _Lp> 15726: template 15726: inline 15726: __shared_count<_Lp>::__shared_count(std::auto_ptr<_Tp>&& __r) 15726: : _M_pi(new _Sp_counted_ptr<_Tp*, _Lp>(__r.get())) 15726: { __r.release(); } 15726: 15726: template 15726: template 15726: inline 15726: __shared_ptr<_Tp, _Lp>::__shared_ptr(std::auto_ptr<_Tp1>&& __r) 15726: : _M_ptr(__r.get()), _M_refcount() 15726: { 15726: 15726: static_assert( sizeof(_Tp1) > 0, "incomplete type" ); 15726: _Tp1* __tmp = __r.get(); 15726: _M_refcount = __shared_count<_Lp>(std::move(__r)); 15726: _M_enable_shared_from_this_with(__tmp); 15726: } 15726: 15726: template 15726: template 15726: inline 15726: shared_ptr<_Tp>::shared_ptr(std::auto_ptr<_Tp1>&& __r) 15726: : __shared_ptr<_Tp>(std::move(__r)) { } 15726: 15726: 15726: template 15726: template 15726: inline 15726: unique_ptr<_Tp, _Dp>::unique_ptr(auto_ptr<_Up>&& __u) noexcept 15726: : _M_t(__u.release(), deleter_type()) { } 15726: 15726: 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: } 15726: # 87 "/usr/include/c++/13/memory" 2 3 15726: # 101 "/usr/include/c++/13/memory" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 119 "/usr/include/c++/13/memory" 3 15726: enum class pointer_safety { relaxed, preferred, strict }; 15726: 15726: 15726: inline void 15726: declare_reachable(void*) { } 15726: 15726: 15726: template 15726: inline _Tp* 15726: undeclare_reachable(_Tp* __p) { return __p; } 15726: 15726: 15726: inline void 15726: declare_no_pointers(char*, size_t) { } 15726: 15726: 15726: inline void 15726: undeclare_no_pointers(char*, size_t) { } 15726: 15726: 15726: inline pointer_safety 15726: get_pointer_safety() noexcept { return pointer_safety::relaxed; } 15726: 15726: 15726: 15726: } 15726: # 154 "/usr/include/c++/13/memory" 3 15726: # 1 "/usr/include/c++/13/pstl/glue_memory_defs.h" 1 3 15726: # 13 "/usr/include/c++/13/pstl/glue_memory_defs.h" 3 15726: # 1 "/usr/include/c++/13/pstl/execution_defs.h" 1 3 15726: # 15 "/usr/include/c++/13/pstl/execution_defs.h" 3 15726: namespace __pstl 15726: { 15726: namespace execution 15726: { 15726: inline namespace v1 15726: { 15726: 15726: 15726: class sequenced_policy 15726: { 15726: public: 15726: 15726: static constexpr std::false_type 15726: __allow_unsequenced() 15726: { 15726: return std::false_type{}; 15726: } 15726: static constexpr std::false_type 15726: __allow_vector() 15726: { 15726: return std::false_type{}; 15726: } 15726: static constexpr std::false_type 15726: __allow_parallel() 15726: { 15726: return std::false_type{}; 15726: } 15726: }; 15726: 15726: 15726: class parallel_policy 15726: { 15726: public: 15726: 15726: static constexpr std::false_type 15726: __allow_unsequenced() 15726: { 15726: return std::false_type{}; 15726: } 15726: static constexpr std::false_type 15726: __allow_vector() 15726: { 15726: return std::false_type{}; 15726: } 15726: static constexpr std::true_type 15726: __allow_parallel() 15726: { 15726: return std::true_type{}; 15726: } 15726: }; 15726: 15726: 15726: class parallel_unsequenced_policy 15726: { 15726: public: 15726: 15726: static constexpr std::true_type 15726: __allow_unsequenced() 15726: { 15726: return std::true_type{}; 15726: } 15726: static constexpr std::true_type 15726: __allow_vector() 15726: { 15726: return std::true_type{}; 15726: } 15726: static constexpr std::true_type 15726: __allow_parallel() 15726: { 15726: return std::true_type{}; 15726: } 15726: }; 15726: 15726: class unsequenced_policy 15726: { 15726: public: 15726: 15726: static constexpr std::true_type 15726: __allow_unsequenced() 15726: { 15726: return std::true_type{}; 15726: } 15726: static constexpr std::true_type 15726: __allow_vector() 15726: { 15726: return std::true_type{}; 15726: } 15726: static constexpr std::false_type 15726: __allow_parallel() 15726: { 15726: return std::false_type{}; 15726: } 15726: }; 15726: 15726: 15726: inline constexpr sequenced_policy seq{}; 15726: inline constexpr parallel_policy par{}; 15726: inline constexpr parallel_unsequenced_policy par_unseq{}; 15726: inline constexpr unsequenced_policy unseq{}; 15726: 15726: 15726: template 15726: struct is_execution_policy : std::false_type 15726: { 15726: }; 15726: 15726: template <> 15726: struct is_execution_policy<__pstl::execution::sequenced_policy> : std::true_type 15726: { 15726: }; 15726: template <> 15726: struct is_execution_policy<__pstl::execution::parallel_policy> : std::true_type 15726: { 15726: }; 15726: template <> 15726: struct is_execution_policy<__pstl::execution::parallel_unsequenced_policy> : std::true_type 15726: { 15726: }; 15726: template <> 15726: struct is_execution_policy<__pstl::execution::unsequenced_policy> : std::true_type 15726: { 15726: }; 15726: 15726: 15726: template 15726: constexpr bool is_execution_policy_v = __pstl::execution::is_execution_policy<_Tp>::value; 15726: 15726: 15726: } 15726: } 15726: 15726: namespace __internal 15726: { 15726: template 15726: 15726: using __enable_if_execution_policy = 15726: typename std::enable_if<__pstl::execution::is_execution_policy>::value, 15726: _Tp>::type; 15726: 15726: 15726: 15726: 15726: 15726: } 15726: 15726: } 15726: # 14 "/usr/include/c++/13/pstl/glue_memory_defs.h" 2 3 15726: 15726: namespace std 15726: { 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: uninitialized_copy(_ExecutionPolicy&& __exec, _InputIterator __first, _InputIterator __last, _ForwardIterator __result); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: uninitialized_copy_n(_ExecutionPolicy&& __exec, _InputIterator __first, _Size __n, _ForwardIterator __result); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: uninitialized_move(_ExecutionPolicy&& __exec, _InputIterator __first, _InputIterator __last, _ForwardIterator __result); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: uninitialized_move_n(_ExecutionPolicy&& __exec, _InputIterator __first, _Size __n, _ForwardIterator __result); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: uninitialized_fill(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: uninitialized_fill_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size __n, const _Tp& __value); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: destroy(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: destroy_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size __n); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: uninitialized_default_construct(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: uninitialized_default_construct_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size __n); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: uninitialized_value_construct(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: uninitialized_value_construct_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size __n); 15726: 15726: } 15726: # 155 "/usr/include/c++/13/memory" 2 3 15726: # 15 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 15726: # 1 "/usr/include/c++/13/string" 1 3 15726: # 36 "/usr/include/c++/13/string" 3 15726: 15726: # 37 "/usr/include/c++/13/string" 3 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/char_traits.h" 1 3 15726: # 37 "/usr/include/c++/13/bits/char_traits.h" 3 15726: 15726: # 38 "/usr/include/c++/13/bits/char_traits.h" 3 15726: # 46 "/usr/include/c++/13/bits/char_traits.h" 3 15726: # 1 "/usr/include/c++/13/cwchar" 1 3 15726: # 39 "/usr/include/c++/13/cwchar" 3 15726: 15726: # 40 "/usr/include/c++/13/cwchar" 3 15726: # 47 "/usr/include/c++/13/bits/char_traits.h" 2 3 15726: # 64 "/usr/include/c++/13/bits/char_traits.h" 3 15726: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: # 68 "/usr/include/c++/13/bits/char_traits.h" 3 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wstringop-overflow" 15726: #pragma GCC diagnostic ignored "-Wstringop-overread" 15726: #pragma GCC diagnostic ignored "-Warray-bounds" 15726: # 83 "/usr/include/c++/13/bits/char_traits.h" 3 15726: template 15726: struct _Char_types 15726: { 15726: typedef unsigned long int_type; 15726: 15726: typedef std::streampos pos_type; 15726: typedef std::streamoff off_type; 15726: typedef std::mbstate_t state_type; 15726: 15726: }; 15726: # 110 "/usr/include/c++/13/bits/char_traits.h" 3 15726: template 15726: struct char_traits 15726: { 15726: typedef _CharT char_type; 15726: typedef typename _Char_types<_CharT>::int_type int_type; 15726: 15726: typedef typename _Char_types<_CharT>::pos_type pos_type; 15726: typedef typename _Char_types<_CharT>::off_type off_type; 15726: typedef typename _Char_types<_CharT>::state_type state_type; 15726: 15726: 15726: 15726: 15726: 15726: static constexpr void 15726: assign(char_type& __c1, const char_type& __c2) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: __c1 = __c2; 15726: } 15726: 15726: static constexpr bool 15726: eq(const char_type& __c1, const char_type& __c2) 15726: { return __c1 == __c2; } 15726: 15726: static constexpr bool 15726: lt(const char_type& __c1, const char_type& __c2) 15726: { return __c1 < __c2; } 15726: 15726: static constexpr int 15726: compare(const char_type* __s1, const char_type* __s2, std::size_t __n); 15726: 15726: static constexpr std::size_t 15726: length(const char_type* __s); 15726: 15726: static constexpr const char_type* 15726: find(const char_type* __s, std::size_t __n, const char_type& __a); 15726: 15726: static char_type* 15726: move(char_type* __s1, const char_type* __s2, std::size_t __n); 15726: 15726: static char_type* 15726: copy(char_type* __s1, const char_type* __s2, std::size_t __n); 15726: 15726: static char_type* 15726: assign(char_type* __s, std::size_t __n, char_type __a); 15726: 15726: static constexpr char_type 15726: to_char_type(const int_type& __c) 15726: { return static_cast(__c); } 15726: 15726: static constexpr int_type 15726: to_int_type(const char_type& __c) 15726: { return static_cast(__c); } 15726: 15726: static constexpr bool 15726: eq_int_type(const int_type& __c1, const int_type& __c2) 15726: { return __c1 == __c2; } 15726: 15726: 15726: static constexpr int_type 15726: eof() 15726: { return static_cast(-1); } 15726: 15726: static constexpr int_type 15726: not_eof(const int_type& __c) 15726: { return !eq_int_type(__c, eof()) ? __c : to_int_type(char_type()); } 15726: 15726: }; 15726: 15726: template 15726: constexpr int 15726: char_traits<_CharT>:: 15726: compare(const char_type* __s1, const char_type* __s2, std::size_t __n) 15726: { 15726: for (std::size_t __i = 0; __i < __n; ++__i) 15726: if (lt(__s1[__i], __s2[__i])) 15726: return -1; 15726: else if (lt(__s2[__i], __s1[__i])) 15726: return 1; 15726: return 0; 15726: } 15726: 15726: template 15726: constexpr std::size_t 15726: char_traits<_CharT>:: 15726: length(const char_type* __p) 15726: { 15726: std::size_t __i = 0; 15726: while (!eq(__p[__i], char_type())) 15726: ++__i; 15726: return __i; 15726: } 15726: 15726: template 15726: constexpr const typename char_traits<_CharT>::char_type* 15726: char_traits<_CharT>:: 15726: find(const char_type* __s, std::size_t __n, const char_type& __a) 15726: { 15726: for (std::size_t __i = 0; __i < __n; ++__i) 15726: if (eq(__s[__i], __a)) 15726: return __s + __i; 15726: return 0; 15726: } 15726: 15726: template 15726: 15726: typename char_traits<_CharT>::char_type* 15726: char_traits<_CharT>:: 15726: move(char_type* __s1, const char_type* __s2, std::size_t __n) 15726: { 15726: if (__n == 0) 15726: return __s1; 15726: # 246 "/usr/include/c++/13/bits/char_traits.h" 3 15726: __builtin_memmove(__s1, __s2, __n * sizeof(char_type)); 15726: return __s1; 15726: } 15726: 15726: template 15726: 15726: typename char_traits<_CharT>::char_type* 15726: char_traits<_CharT>:: 15726: copy(char_type* __s1, const char_type* __s2, std::size_t __n) 15726: { 15726: if (__n == 0) 15726: return __s1; 15726: # 266 "/usr/include/c++/13/bits/char_traits.h" 3 15726: __builtin_memcpy(__s1, __s2, __n * sizeof(char_type)); 15726: return __s1; 15726: } 15726: 15726: template 15726: 15726: typename char_traits<_CharT>::char_type* 15726: char_traits<_CharT>:: 15726: assign(char_type* __s, std::size_t __n, char_type __a) 15726: { 15726: # 285 "/usr/include/c++/13/bits/char_traits.h" 3 15726: if constexpr (sizeof(_CharT) == 1 && __is_trivial(_CharT)) 15726: { 15726: if (__n) 15726: { 15726: unsigned char __c; 15726: __builtin_memcpy(&__c, __builtin_addressof(__a), 1); 15726: __builtin_memset(__s, __c, __n); 15726: } 15726: } 15726: else 15726: { 15726: for (std::size_t __i = 0; __i < __n; ++__i) 15726: __s[__i] = __a; 15726: } 15726: return __s; 15726: } 15726: 15726: 15726: } 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 330 "/usr/include/c++/13/bits/char_traits.h" 3 15726: template 15726: struct char_traits : public __gnu_cxx::char_traits<_CharT> 15726: { }; 15726: 15726: 15726: 15726: template<> 15726: struct char_traits 15726: { 15726: typedef char char_type; 15726: typedef int int_type; 15726: 15726: typedef streampos pos_type; 15726: typedef streamoff off_type; 15726: typedef mbstate_t state_type; 15726: 15726: 15726: 15726: 15726: 15726: static constexpr void 15726: assign(char_type& __c1, const char_type& __c2) noexcept 15726: { 15726: 15726: 15726: 15726: 15726: 15726: __c1 = __c2; 15726: } 15726: 15726: static constexpr bool 15726: eq(const char_type& __c1, const char_type& __c2) noexcept 15726: { return __c1 == __c2; } 15726: 15726: static constexpr bool 15726: lt(const char_type& __c1, const char_type& __c2) noexcept 15726: { 15726: 15726: return (static_cast(__c1) 15726: < static_cast(__c2)); 15726: } 15726: 15726: static constexpr int 15726: compare(const char_type* __s1, const char_type* __s2, size_t __n) 15726: { 15726: if (__n == 0) 15726: return 0; 15726: 15726: if (std::__is_constant_evaluated()) 15726: { 15726: for (size_t __i = 0; __i < __n; ++__i) 15726: if (lt(__s1[__i], __s2[__i])) 15726: return -1; 15726: else if (lt(__s2[__i], __s1[__i])) 15726: return 1; 15726: return 0; 15726: } 15726: 15726: return __builtin_memcmp(__s1, __s2, __n); 15726: } 15726: 15726: static constexpr size_t 15726: length(const char_type* __s) 15726: { 15726: 15726: if (std::__is_constant_evaluated()) 15726: return __gnu_cxx::char_traits::length(__s); 15726: 15726: return __builtin_strlen(__s); 15726: } 15726: 15726: static constexpr const char_type* 15726: find(const char_type* __s, size_t __n, const char_type& __a) 15726: { 15726: if (__n == 0) 15726: return 0; 15726: 15726: if (std::__is_constant_evaluated()) 15726: return __gnu_cxx::char_traits::find(__s, __n, __a); 15726: 15726: return static_cast(__builtin_memchr(__s, __a, __n)); 15726: } 15726: 15726: static char_type* 15726: move(char_type* __s1, const char_type* __s2, size_t __n) 15726: { 15726: if (__n == 0) 15726: return __s1; 15726: 15726: 15726: 15726: 15726: return static_cast(__builtin_memmove(__s1, __s2, __n)); 15726: } 15726: 15726: static char_type* 15726: copy(char_type* __s1, const char_type* __s2, size_t __n) 15726: { 15726: if (__n == 0) 15726: return __s1; 15726: 15726: 15726: 15726: 15726: return static_cast(__builtin_memcpy(__s1, __s2, __n)); 15726: } 15726: 15726: static char_type* 15726: assign(char_type* __s, size_t __n, char_type __a) 15726: { 15726: if (__n == 0) 15726: return __s; 15726: 15726: 15726: 15726: 15726: return static_cast(__builtin_memset(__s, __a, __n)); 15726: } 15726: 15726: static constexpr char_type 15726: to_char_type(const int_type& __c) noexcept 15726: { return static_cast(__c); } 15726: 15726: 15726: 15726: static constexpr int_type 15726: to_int_type(const char_type& __c) noexcept 15726: { return static_cast(static_cast(__c)); } 15726: 15726: static constexpr bool 15726: eq_int_type(const int_type& __c1, const int_type& __c2) noexcept 15726: { return __c1 == __c2; } 15726: 15726: 15726: static constexpr int_type 15726: eof() noexcept 15726: { return static_cast(-1); } 15726: 15726: static constexpr int_type 15726: not_eof(const int_type& __c) noexcept 15726: { return (__c == eof()) ? 0 : __c; } 15726: 15726: }; 15726: 15726: 15726: 15726: 15726: template<> 15726: struct char_traits 15726: { 15726: typedef wchar_t char_type; 15726: typedef wint_t int_type; 15726: 15726: typedef streamoff off_type; 15726: typedef wstreampos pos_type; 15726: typedef mbstate_t state_type; 15726: 15726: 15726: 15726: 15726: 15726: static constexpr void 15726: assign(char_type& __c1, const char_type& __c2) noexcept 15726: { 15726: 15726: 15726: 15726: 15726: 15726: __c1 = __c2; 15726: } 15726: 15726: static constexpr bool 15726: eq(const char_type& __c1, const char_type& __c2) noexcept 15726: { return __c1 == __c2; } 15726: 15726: static constexpr bool 15726: lt(const char_type& __c1, const char_type& __c2) noexcept 15726: { return __c1 < __c2; } 15726: 15726: static constexpr int 15726: compare(const char_type* __s1, const char_type* __s2, size_t __n) 15726: { 15726: if (__n == 0) 15726: return 0; 15726: 15726: if (std::__is_constant_evaluated()) 15726: return __gnu_cxx::char_traits::compare(__s1, __s2, __n); 15726: 15726: return wmemcmp(__s1, __s2, __n); 15726: } 15726: 15726: static constexpr size_t 15726: length(const char_type* __s) 15726: { 15726: 15726: if (std::__is_constant_evaluated()) 15726: return __gnu_cxx::char_traits::length(__s); 15726: 15726: return wcslen(__s); 15726: } 15726: 15726: static constexpr const char_type* 15726: find(const char_type* __s, size_t __n, const char_type& __a) 15726: { 15726: if (__n == 0) 15726: return 0; 15726: 15726: if (std::__is_constant_evaluated()) 15726: return __gnu_cxx::char_traits::find(__s, __n, __a); 15726: 15726: return wmemchr(__s, __a, __n); 15726: } 15726: 15726: static char_type* 15726: move(char_type* __s1, const char_type* __s2, size_t __n) 15726: { 15726: if (__n == 0) 15726: return __s1; 15726: 15726: 15726: 15726: 15726: return wmemmove(__s1, __s2, __n); 15726: } 15726: 15726: static char_type* 15726: copy(char_type* __s1, const char_type* __s2, size_t __n) 15726: { 15726: if (__n == 0) 15726: return __s1; 15726: 15726: 15726: 15726: 15726: return wmemcpy(__s1, __s2, __n); 15726: } 15726: 15726: static char_type* 15726: assign(char_type* __s, size_t __n, char_type __a) 15726: { 15726: if (__n == 0) 15726: return __s; 15726: 15726: 15726: 15726: 15726: return wmemset(__s, __a, __n); 15726: } 15726: 15726: static constexpr char_type 15726: to_char_type(const int_type& __c) noexcept 15726: { return char_type(__c); } 15726: 15726: static constexpr int_type 15726: to_int_type(const char_type& __c) noexcept 15726: { return int_type(__c); } 15726: 15726: static constexpr bool 15726: eq_int_type(const int_type& __c1, const int_type& __c2) noexcept 15726: { return __c1 == __c2; } 15726: 15726: 15726: static constexpr int_type 15726: eof() noexcept 15726: { return static_cast((0xffffffffu)); } 15726: 15726: static constexpr int_type 15726: not_eof(const int_type& __c) noexcept 15726: { return eq_int_type(__c, eof()) ? 0 : __c; } 15726: 15726: }; 15726: # 740 "/usr/include/c++/13/bits/char_traits.h" 3 15726: 15726: } 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: template<> 15726: struct char_traits 15726: { 15726: typedef char16_t char_type; 15726: 15726: typedef short unsigned int int_type; 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef streamoff off_type; 15726: typedef u16streampos pos_type; 15726: typedef mbstate_t state_type; 15726: 15726: 15726: 15726: 15726: 15726: static constexpr void 15726: assign(char_type& __c1, const char_type& __c2) noexcept 15726: { 15726: 15726: 15726: 15726: 15726: 15726: __c1 = __c2; 15726: } 15726: 15726: static constexpr bool 15726: eq(const char_type& __c1, const char_type& __c2) noexcept 15726: { return __c1 == __c2; } 15726: 15726: static constexpr bool 15726: lt(const char_type& __c1, const char_type& __c2) noexcept 15726: { return __c1 < __c2; } 15726: 15726: static constexpr int 15726: compare(const char_type* __s1, const char_type* __s2, size_t __n) 15726: { 15726: for (size_t __i = 0; __i < __n; ++__i) 15726: if (lt(__s1[__i], __s2[__i])) 15726: return -1; 15726: else if (lt(__s2[__i], __s1[__i])) 15726: return 1; 15726: return 0; 15726: } 15726: 15726: static constexpr size_t 15726: length(const char_type* __s) 15726: { 15726: size_t __i = 0; 15726: while (!eq(__s[__i], char_type())) 15726: ++__i; 15726: return __i; 15726: } 15726: 15726: static constexpr const char_type* 15726: find(const char_type* __s, size_t __n, const char_type& __a) 15726: { 15726: for (size_t __i = 0; __i < __n; ++__i) 15726: if (eq(__s[__i], __a)) 15726: return __s + __i; 15726: return 0; 15726: } 15726: 15726: static char_type* 15726: move(char_type* __s1, const char_type* __s2, size_t __n) 15726: { 15726: if (__n == 0) 15726: return __s1; 15726: 15726: 15726: 15726: 15726: return (static_cast 15726: (__builtin_memmove(__s1, __s2, __n * sizeof(char_type)))); 15726: } 15726: 15726: static char_type* 15726: copy(char_type* __s1, const char_type* __s2, size_t __n) 15726: { 15726: if (__n == 0) 15726: return __s1; 15726: 15726: 15726: 15726: 15726: return (static_cast 15726: (__builtin_memcpy(__s1, __s2, __n * sizeof(char_type)))); 15726: } 15726: 15726: static char_type* 15726: assign(char_type* __s, size_t __n, char_type __a) 15726: { 15726: for (size_t __i = 0; __i < __n; ++__i) 15726: assign(__s[__i], __a); 15726: return __s; 15726: } 15726: 15726: static constexpr char_type 15726: to_char_type(const int_type& __c) noexcept 15726: { return char_type(__c); } 15726: 15726: static constexpr bool 15726: eq_int_type(const int_type& __c1, const int_type& __c2) noexcept 15726: { return __c1 == __c2; } 15726: 15726: 15726: static constexpr int_type 15726: to_int_type(const char_type& __c) noexcept 15726: { return __c == eof() ? int_type(0xfffd) : int_type(__c); } 15726: 15726: static constexpr int_type 15726: eof() noexcept 15726: { return static_cast(-1); } 15726: 15726: static constexpr int_type 15726: not_eof(const int_type& __c) noexcept 15726: { return eq_int_type(__c, eof()) ? 0 : __c; } 15726: 15726: 15726: 15726: 15726: 15726: }; 15726: 15726: template<> 15726: struct char_traits 15726: { 15726: typedef char32_t char_type; 15726: 15726: typedef unsigned int int_type; 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef streamoff off_type; 15726: typedef u32streampos pos_type; 15726: typedef mbstate_t state_type; 15726: 15726: 15726: 15726: 15726: 15726: static constexpr void 15726: assign(char_type& __c1, const char_type& __c2) noexcept 15726: { 15726: 15726: 15726: 15726: 15726: 15726: __c1 = __c2; 15726: } 15726: 15726: static constexpr bool 15726: eq(const char_type& __c1, const char_type& __c2) noexcept 15726: { return __c1 == __c2; } 15726: 15726: static constexpr bool 15726: lt(const char_type& __c1, const char_type& __c2) noexcept 15726: { return __c1 < __c2; } 15726: 15726: static constexpr int 15726: compare(const char_type* __s1, const char_type* __s2, size_t __n) 15726: { 15726: for (size_t __i = 0; __i < __n; ++__i) 15726: if (lt(__s1[__i], __s2[__i])) 15726: return -1; 15726: else if (lt(__s2[__i], __s1[__i])) 15726: return 1; 15726: return 0; 15726: } 15726: 15726: static constexpr size_t 15726: length(const char_type* __s) 15726: { 15726: size_t __i = 0; 15726: while (!eq(__s[__i], char_type())) 15726: ++__i; 15726: return __i; 15726: } 15726: 15726: static constexpr const char_type* 15726: find(const char_type* __s, size_t __n, const char_type& __a) 15726: { 15726: for (size_t __i = 0; __i < __n; ++__i) 15726: if (eq(__s[__i], __a)) 15726: return __s + __i; 15726: return 0; 15726: } 15726: 15726: static char_type* 15726: move(char_type* __s1, const char_type* __s2, size_t __n) 15726: { 15726: if (__n == 0) 15726: return __s1; 15726: 15726: 15726: 15726: 15726: return (static_cast 15726: (__builtin_memmove(__s1, __s2, __n * sizeof(char_type)))); 15726: } 15726: 15726: static char_type* 15726: copy(char_type* __s1, const char_type* __s2, size_t __n) 15726: { 15726: if (__n == 0) 15726: return __s1; 15726: 15726: 15726: 15726: 15726: return (static_cast 15726: (__builtin_memcpy(__s1, __s2, __n * sizeof(char_type)))); 15726: } 15726: 15726: static char_type* 15726: assign(char_type* __s, size_t __n, char_type __a) 15726: { 15726: for (size_t __i = 0; __i < __n; ++__i) 15726: assign(__s[__i], __a); 15726: return __s; 15726: } 15726: 15726: static constexpr char_type 15726: to_char_type(const int_type& __c) noexcept 15726: { return char_type(__c); } 15726: 15726: static constexpr int_type 15726: to_int_type(const char_type& __c) noexcept 15726: { return int_type(__c); } 15726: 15726: static constexpr bool 15726: eq_int_type(const int_type& __c1, const int_type& __c2) noexcept 15726: { return __c1 == __c2; } 15726: 15726: 15726: static constexpr int_type 15726: eof() noexcept 15726: { return static_cast(-1); } 15726: 15726: static constexpr int_type 15726: not_eof(const int_type& __c) noexcept 15726: { return eq_int_type(__c, eof()) ? 0 : __c; } 15726: 15726: }; 15726: # 1022 "/usr/include/c++/13/bits/char_traits.h" 3 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: } 15726: # 43 "/usr/include/c++/13/string" 2 3 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/localefwd.h" 1 3 15726: # 37 "/usr/include/c++/13/bits/localefwd.h" 3 15726: 15726: # 38 "/usr/include/c++/13/bits/localefwd.h" 3 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++locale.h" 1 3 15726: # 39 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++locale.h" 3 15726: 15726: # 40 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++locale.h" 3 15726: 15726: # 1 "/usr/include/c++/13/clocale" 1 3 15726: # 39 "/usr/include/c++/13/clocale" 3 15726: 15726: # 40 "/usr/include/c++/13/clocale" 3 15726: 15726: 15726: # 1 "/usr/include/locale.h" 1 3 4 15726: # 28 "/usr/include/locale.h" 3 4 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 29 "/usr/include/locale.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/locale.h" 1 3 4 15726: # 30 "/usr/include/locale.h" 2 3 4 15726: 15726: extern "C" { 15726: # 51 "/usr/include/locale.h" 3 4 15726: struct lconv 15726: { 15726: 15726: 15726: char *decimal_point; 15726: char *thousands_sep; 15726: 15726: 15726: 15726: 15726: 15726: char *grouping; 15726: 15726: 15726: 15726: 15726: 15726: char *int_curr_symbol; 15726: char *currency_symbol; 15726: char *mon_decimal_point; 15726: char *mon_thousands_sep; 15726: char *mon_grouping; 15726: char *positive_sign; 15726: char *negative_sign; 15726: char int_frac_digits; 15726: char frac_digits; 15726: 15726: char p_cs_precedes; 15726: 15726: char p_sep_by_space; 15726: 15726: char n_cs_precedes; 15726: 15726: char n_sep_by_space; 15726: 15726: 15726: 15726: 15726: 15726: 15726: char p_sign_posn; 15726: char n_sign_posn; 15726: 15726: 15726: char int_p_cs_precedes; 15726: 15726: char int_p_sep_by_space; 15726: 15726: char int_n_cs_precedes; 15726: 15726: char int_n_sep_by_space; 15726: 15726: 15726: 15726: 15726: 15726: 15726: char int_p_sign_posn; 15726: char int_n_sign_posn; 15726: # 118 "/usr/include/locale.h" 3 4 15726: }; 15726: 15726: 15726: 15726: extern char *setlocale (int __category, const char *__locale) noexcept (true); 15726: 15726: 15726: extern struct lconv *localeconv (void) noexcept (true); 15726: # 141 "/usr/include/locale.h" 3 4 15726: extern locale_t newlocale (int __category_mask, const char *__locale, 15726: locale_t __base) noexcept (true); 15726: # 176 "/usr/include/locale.h" 3 4 15726: extern locale_t duplocale (locale_t __dataset) noexcept (true); 15726: 15726: 15726: 15726: extern void freelocale (locale_t __dataset) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern locale_t uselocale (locale_t __dataset) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 43 "/usr/include/c++/13/clocale" 2 3 15726: # 51 "/usr/include/c++/13/clocale" 3 15726: namespace std 15726: { 15726: using ::lconv; 15726: using ::setlocale; 15726: using ::localeconv; 15726: } 15726: # 42 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++locale.h" 2 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: extern "C" __typeof(uselocale) __uselocale; 15726: 15726: 15726: } 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: typedef __locale_t __c_locale; 15726: # 73 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++locale.h" 3 15726: inline int 15726: __convert_from_v(const __c_locale& __cloc __attribute__ ((__unused__)), 15726: char* __out, 15726: const int __size __attribute__ ((__unused__)), 15726: const char* __fmt, ...) 15726: { 15726: 15726: __c_locale __old = __gnu_cxx::__uselocale(__cloc); 15726: # 93 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++locale.h" 3 15726: __builtin_va_list __args; 15726: __builtin_va_start(__args, __fmt); 15726: 15726: 15726: const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args); 15726: 15726: 15726: 15726: 15726: __builtin_va_end(__args); 15726: 15726: 15726: __gnu_cxx::__uselocale(__old); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: return __ret; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 41 "/usr/include/c++/13/bits/localefwd.h" 2 3 15726: 15726: # 1 "/usr/include/c++/13/cctype" 1 3 15726: # 39 "/usr/include/c++/13/cctype" 3 15726: 15726: # 40 "/usr/include/c++/13/cctype" 3 15726: 15726: 15726: # 1 "/usr/include/ctype.h" 1 3 4 15726: # 28 "/usr/include/ctype.h" 3 4 15726: extern "C" { 15726: # 46 "/usr/include/ctype.h" 3 4 15726: enum 15726: { 15726: _ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)), 15726: _ISlower = ((1) < 8 ? ((1 << (1)) << 8) : ((1 << (1)) >> 8)), 15726: _ISalpha = ((2) < 8 ? ((1 << (2)) << 8) : ((1 << (2)) >> 8)), 15726: _ISdigit = ((3) < 8 ? ((1 << (3)) << 8) : ((1 << (3)) >> 8)), 15726: _ISxdigit = ((4) < 8 ? ((1 << (4)) << 8) : ((1 << (4)) >> 8)), 15726: _ISspace = ((5) < 8 ? ((1 << (5)) << 8) : ((1 << (5)) >> 8)), 15726: _ISprint = ((6) < 8 ? ((1 << (6)) << 8) : ((1 << (6)) >> 8)), 15726: _ISgraph = ((7) < 8 ? ((1 << (7)) << 8) : ((1 << (7)) >> 8)), 15726: _ISblank = ((8) < 8 ? ((1 << (8)) << 8) : ((1 << (8)) >> 8)), 15726: _IScntrl = ((9) < 8 ? ((1 << (9)) << 8) : ((1 << (9)) >> 8)), 15726: _ISpunct = ((10) < 8 ? ((1 << (10)) << 8) : ((1 << (10)) >> 8)), 15726: _ISalnum = ((11) < 8 ? ((1 << (11)) << 8) : ((1 << (11)) >> 8)) 15726: }; 15726: # 79 "/usr/include/ctype.h" 3 4 15726: extern const unsigned short int **__ctype_b_loc (void) 15726: noexcept (true) __attribute__ ((__const__)); 15726: extern const __int32_t **__ctype_tolower_loc (void) 15726: noexcept (true) __attribute__ ((__const__)); 15726: extern const __int32_t **__ctype_toupper_loc (void) 15726: noexcept (true) __attribute__ ((__const__)); 15726: # 108 "/usr/include/ctype.h" 3 4 15726: extern int isalnum (int) noexcept (true); 15726: extern int isalpha (int) noexcept (true); 15726: extern int iscntrl (int) noexcept (true); 15726: extern int isdigit (int) noexcept (true); 15726: extern int islower (int) noexcept (true); 15726: extern int isgraph (int) noexcept (true); 15726: extern int isprint (int) noexcept (true); 15726: extern int ispunct (int) noexcept (true); 15726: extern int isspace (int) noexcept (true); 15726: extern int isupper (int) noexcept (true); 15726: extern int isxdigit (int) noexcept (true); 15726: 15726: 15726: 15726: extern int tolower (int __c) noexcept (true); 15726: 15726: 15726: extern int toupper (int __c) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int isblank (int) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int isctype (int __c, int __mask) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int isascii (int __c) noexcept (true); 15726: 15726: 15726: 15726: extern int toascii (int __c) noexcept (true); 15726: 15726: 15726: 15726: extern int _toupper (int) noexcept (true); 15726: extern int _tolower (int) noexcept (true); 15726: # 251 "/usr/include/ctype.h" 3 4 15726: extern int isalnum_l (int, locale_t) noexcept (true); 15726: extern int isalpha_l (int, locale_t) noexcept (true); 15726: extern int iscntrl_l (int, locale_t) noexcept (true); 15726: extern int isdigit_l (int, locale_t) noexcept (true); 15726: extern int islower_l (int, locale_t) noexcept (true); 15726: extern int isgraph_l (int, locale_t) noexcept (true); 15726: extern int isprint_l (int, locale_t) noexcept (true); 15726: extern int ispunct_l (int, locale_t) noexcept (true); 15726: extern int isspace_l (int, locale_t) noexcept (true); 15726: extern int isupper_l (int, locale_t) noexcept (true); 15726: extern int isxdigit_l (int, locale_t) noexcept (true); 15726: 15726: extern int isblank_l (int, locale_t) noexcept (true); 15726: 15726: 15726: 15726: extern int __tolower_l (int __c, locale_t __l) noexcept (true); 15726: extern int tolower_l (int __c, locale_t __l) noexcept (true); 15726: 15726: 15726: extern int __toupper_l (int __c, locale_t __l) noexcept (true); 15726: extern int toupper_l (int __c, locale_t __l) noexcept (true); 15726: # 327 "/usr/include/ctype.h" 3 4 15726: } 15726: # 43 "/usr/include/c++/13/cctype" 2 3 15726: # 62 "/usr/include/c++/13/cctype" 3 15726: namespace std 15726: { 15726: using ::isalnum; 15726: using ::isalpha; 15726: using ::iscntrl; 15726: using ::isdigit; 15726: using ::isgraph; 15726: using ::islower; 15726: using ::isprint; 15726: using ::ispunct; 15726: using ::isspace; 15726: using ::isupper; 15726: using ::isxdigit; 15726: using ::tolower; 15726: using ::toupper; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace std 15726: { 15726: using ::isblank; 15726: } 15726: # 43 "/usr/include/c++/13/bits/localefwd.h" 2 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 55 "/usr/include/c++/13/bits/localefwd.h" 3 15726: class locale; 15726: 15726: template 15726: bool 15726: has_facet(const locale&) throw(); 15726: 15726: template 15726: const _Facet& 15726: use_facet(const locale&); 15726: 15726: 15726: template 15726: bool 15726: isspace(_CharT, const locale&); 15726: 15726: template 15726: bool 15726: isprint(_CharT, const locale&); 15726: 15726: template 15726: bool 15726: iscntrl(_CharT, const locale&); 15726: 15726: template 15726: bool 15726: isupper(_CharT, const locale&); 15726: 15726: template 15726: bool 15726: islower(_CharT, const locale&); 15726: 15726: template 15726: bool 15726: isalpha(_CharT, const locale&); 15726: 15726: template 15726: bool 15726: isdigit(_CharT, const locale&); 15726: 15726: template 15726: bool 15726: ispunct(_CharT, const locale&); 15726: 15726: template 15726: bool 15726: isxdigit(_CharT, const locale&); 15726: 15726: template 15726: bool 15726: isalnum(_CharT, const locale&); 15726: 15726: template 15726: bool 15726: isgraph(_CharT, const locale&); 15726: 15726: 15726: template 15726: bool 15726: isblank(_CharT, const locale&); 15726: 15726: 15726: template 15726: _CharT 15726: toupper(_CharT, const locale&); 15726: 15726: template 15726: _CharT 15726: tolower(_CharT, const locale&); 15726: 15726: 15726: struct ctype_base; 15726: template 15726: class ctype; 15726: template<> class ctype; 15726: 15726: template<> class ctype; 15726: 15726: template 15726: class ctype_byname; 15726: 15726: 15726: class codecvt_base; 15726: template 15726: class codecvt; 15726: template<> class codecvt; 15726: 15726: template<> class codecvt; 15726: 15726: 15726: template<> class codecvt; 15726: template<> class codecvt; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: class codecvt_byname; 15726: 15726: 15726: 15726: template > 15726: class num_get; 15726: template > 15726: class num_put; 15726: 15726: namespace __cxx11 { 15726: template class numpunct; 15726: template class numpunct_byname; 15726: } 15726: 15726: namespace __cxx11 { 15726: 15726: template 15726: class collate; 15726: template 15726: class collate_byname; 15726: } 15726: 15726: 15726: class time_base; 15726: namespace __cxx11 { 15726: template > 15726: class time_get; 15726: template > 15726: class time_get_byname; 15726: } 15726: template > 15726: class time_put; 15726: template > 15726: class time_put_byname; 15726: 15726: 15726: class money_base; 15726: namespace __cxx11 { 15726: template > 15726: class money_get; 15726: template > 15726: class money_put; 15726: } 15726: namespace __cxx11 { 15726: template 15726: class moneypunct; 15726: template 15726: class moneypunct_byname; 15726: } 15726: 15726: 15726: struct messages_base; 15726: namespace __cxx11 { 15726: template 15726: class messages; 15726: template 15726: class messages_byname; 15726: } 15726: 15726: 15726: } 15726: # 46 "/usr/include/c++/13/string" 2 3 15726: # 1 "/usr/include/c++/13/bits/ostream_insert.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/ostream_insert.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/ostream_insert.h" 3 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/cxxabi_forced.h" 1 3 15726: # 34 "/usr/include/c++/13/bits/cxxabi_forced.h" 3 15726: 15726: # 35 "/usr/include/c++/13/bits/cxxabi_forced.h" 3 15726: 15726: #pragma GCC visibility push(default) 15726: 15726: 15726: namespace __cxxabiv1 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: class __forced_unwind 15726: { 15726: virtual ~__forced_unwind() throw(); 15726: 15726: 15726: virtual void __pure_dummy() = 0; 15726: }; 15726: } 15726: 15726: 15726: #pragma GCC visibility pop 15726: # 37 "/usr/include/c++/13/bits/ostream_insert.h" 2 3 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: template 15726: inline void 15726: __ostream_write(basic_ostream<_CharT, _Traits>& __out, 15726: const _CharT* __s, streamsize __n) 15726: { 15726: typedef basic_ostream<_CharT, _Traits> __ostream_type; 15726: typedef typename __ostream_type::ios_base __ios_base; 15726: 15726: const streamsize __put = __out.rdbuf()->sputn(__s, __n); 15726: if (__put != __n) 15726: __out.setstate(__ios_base::badbit); 15726: } 15726: 15726: template 15726: inline void 15726: __ostream_fill(basic_ostream<_CharT, _Traits>& __out, streamsize __n) 15726: { 15726: typedef basic_ostream<_CharT, _Traits> __ostream_type; 15726: typedef typename __ostream_type::ios_base __ios_base; 15726: 15726: const _CharT __c = __out.fill(); 15726: for (; __n > 0; --__n) 15726: { 15726: const typename _Traits::int_type __put = __out.rdbuf()->sputc(__c); 15726: if (_Traits::eq_int_type(__put, _Traits::eof())) 15726: { 15726: __out.setstate(__ios_base::badbit); 15726: break; 15726: } 15726: } 15726: } 15726: 15726: template 15726: basic_ostream<_CharT, _Traits>& 15726: __ostream_insert(basic_ostream<_CharT, _Traits>& __out, 15726: const _CharT* __s, streamsize __n) 15726: { 15726: typedef basic_ostream<_CharT, _Traits> __ostream_type; 15726: typedef typename __ostream_type::ios_base __ios_base; 15726: 15726: typename __ostream_type::sentry __cerb(__out); 15726: if (__cerb) 15726: { 15726: try 15726: { 15726: const streamsize __w = __out.width(); 15726: if (__w > __n) 15726: { 15726: const bool __left = ((__out.flags() 15726: & __ios_base::adjustfield) 15726: == __ios_base::left); 15726: if (!__left) 15726: __ostream_fill(__out, __w - __n); 15726: if (__out.good()) 15726: __ostream_write(__out, __s, __n); 15726: if (__left && __out.good()) 15726: __ostream_fill(__out, __w - __n); 15726: } 15726: else 15726: __ostream_write(__out, __s, __n); 15726: __out.width(0); 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: __out._M_setstate(__ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { __out._M_setstate(__ios_base::badbit); } 15726: } 15726: return __out; 15726: } 15726: 15726: 15726: 15726: 15726: extern template ostream& __ostream_insert(ostream&, const char*, streamsize); 15726: 15726: 15726: extern template wostream& __ostream_insert(wostream&, const wchar_t*, 15726: streamsize); 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 47 "/usr/include/c++/13/string" 2 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/basic_string.h" 1 3 15726: # 37 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: # 38 "/usr/include/c++/13/bits/basic_string.h" 3 15726: # 47 "/usr/include/c++/13/bits/basic_string.h" 3 15726: # 1 "/usr/include/c++/13/string_view" 1 3 15726: # 36 "/usr/include/c++/13/string_view" 3 15726: 15726: # 37 "/usr/include/c++/13/string_view" 3 15726: # 56 "/usr/include/c++/13/string_view" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 69 "/usr/include/c++/13/string_view" 3 15726: constexpr size_t 15726: __sv_check(size_t __size, size_t __pos, const char* __s) 15726: { 15726: if (__pos > __size) 15726: __throw_out_of_range_fmt(("%s: __pos (which is %zu) > __size " "(which is %zu)") 15726: , __s, __pos, __size); 15726: return __pos; 15726: } 15726: 15726: 15726: 15726: constexpr size_t 15726: __sv_limit(size_t __size, size_t __pos, size_t __off) noexcept 15726: { 15726: const bool __testoff = __off < __size - __pos; 15726: return __testoff ? __off : __size - __pos; 15726: } 15726: # 105 "/usr/include/c++/13/string_view" 3 15726: template> 15726: class basic_string_view 15726: { 15726: static_assert(!is_array_v<_CharT>); 15726: static_assert(is_trivial_v<_CharT> && is_standard_layout_v<_CharT>); 15726: static_assert(is_same_v<_CharT, typename _Traits::char_type>); 15726: 15726: public: 15726: 15726: 15726: using traits_type = _Traits; 15726: using value_type = _CharT; 15726: using pointer = value_type*; 15726: using const_pointer = const value_type*; 15726: using reference = value_type&; 15726: using const_reference = const value_type&; 15726: using const_iterator = const value_type*; 15726: using iterator = const_iterator; 15726: using const_reverse_iterator = std::reverse_iterator; 15726: using reverse_iterator = const_reverse_iterator; 15726: using size_type = size_t; 15726: using difference_type = ptrdiff_t; 15726: static constexpr size_type npos = size_type(-1); 15726: 15726: 15726: 15726: constexpr 15726: basic_string_view() noexcept 15726: : _M_len{0}, _M_str{nullptr} 15726: { } 15726: 15726: constexpr basic_string_view(const basic_string_view&) noexcept = default; 15726: 15726: [[__gnu__::__nonnull__]] 15726: constexpr 15726: basic_string_view(const _CharT* __str) noexcept 15726: : _M_len{traits_type::length(__str)}, 15726: _M_str{__str} 15726: { } 15726: 15726: constexpr 15726: basic_string_view(const _CharT* __str, size_type __len) noexcept 15726: : _M_len{__len}, _M_str{__str} 15726: { } 15726: # 180 "/usr/include/c++/13/string_view" 3 15726: constexpr basic_string_view& 15726: operator=(const basic_string_view&) noexcept = default; 15726: 15726: 15726: 15726: [[nodiscard]] 15726: constexpr const_iterator 15726: begin() const noexcept 15726: { return this->_M_str; } 15726: 15726: [[nodiscard]] 15726: constexpr const_iterator 15726: end() const noexcept 15726: { return this->_M_str + this->_M_len; } 15726: 15726: [[nodiscard]] 15726: constexpr const_iterator 15726: cbegin() const noexcept 15726: { return this->_M_str; } 15726: 15726: [[nodiscard]] 15726: constexpr const_iterator 15726: cend() const noexcept 15726: { return this->_M_str + this->_M_len; } 15726: 15726: [[nodiscard]] 15726: constexpr const_reverse_iterator 15726: rbegin() const noexcept 15726: { return const_reverse_iterator(this->end()); } 15726: 15726: [[nodiscard]] 15726: constexpr const_reverse_iterator 15726: rend() const noexcept 15726: { return const_reverse_iterator(this->begin()); } 15726: 15726: [[nodiscard]] 15726: constexpr const_reverse_iterator 15726: crbegin() const noexcept 15726: { return const_reverse_iterator(this->end()); } 15726: 15726: [[nodiscard]] 15726: constexpr const_reverse_iterator 15726: crend() const noexcept 15726: { return const_reverse_iterator(this->begin()); } 15726: 15726: 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: size() const noexcept 15726: { return this->_M_len; } 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: length() const noexcept 15726: { return _M_len; } 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: max_size() const noexcept 15726: { 15726: return (npos - sizeof(size_type) - sizeof(void*)) 15726: / sizeof(value_type) / 4; 15726: } 15726: 15726: [[nodiscard]] 15726: constexpr bool 15726: empty() const noexcept 15726: { return this->_M_len == 0; } 15726: 15726: 15726: 15726: [[nodiscard]] 15726: constexpr const_reference 15726: operator[](size_type __pos) const noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__pos < this->_M_len)) __builtin_unreachable(); } while (false); 15726: return *(this->_M_str + __pos); 15726: } 15726: 15726: [[nodiscard]] 15726: constexpr const_reference 15726: at(size_type __pos) const 15726: { 15726: if (__pos >= _M_len) 15726: __throw_out_of_range_fmt(("basic_string_view::at: __pos " "(which is %zu) >= this->size() " "(which is %zu)") 15726: 15726: , __pos, this->size()); 15726: return *(this->_M_str + __pos); 15726: } 15726: 15726: [[nodiscard]] 15726: constexpr const_reference 15726: front() const noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(this->_M_len > 0)) __builtin_unreachable(); } while (false); 15726: return *this->_M_str; 15726: } 15726: 15726: [[nodiscard]] 15726: constexpr const_reference 15726: back() const noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(this->_M_len > 0)) __builtin_unreachable(); } while (false); 15726: return *(this->_M_str + this->_M_len - 1); 15726: } 15726: 15726: [[nodiscard]] 15726: constexpr const_pointer 15726: data() const noexcept 15726: { return this->_M_str; } 15726: 15726: 15726: 15726: constexpr void 15726: remove_prefix(size_type __n) noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(this->_M_len >= __n)) __builtin_unreachable(); } while (false); 15726: this->_M_str += __n; 15726: this->_M_len -= __n; 15726: } 15726: 15726: constexpr void 15726: remove_suffix(size_type __n) noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(this->_M_len >= __n)) __builtin_unreachable(); } while (false); 15726: this->_M_len -= __n; 15726: } 15726: 15726: constexpr void 15726: swap(basic_string_view& __sv) noexcept 15726: { 15726: auto __tmp = *this; 15726: *this = __sv; 15726: __sv = __tmp; 15726: } 15726: 15726: 15726: 15726: 15726: size_type 15726: copy(_CharT* __str, size_type __n, size_type __pos = 0) const 15726: { 15726: ; 15726: __pos = std::__sv_check(size(), __pos, "basic_string_view::copy"); 15726: const size_type __rlen = std::min(__n, _M_len - __pos); 15726: 15726: 15726: traits_type::copy(__str, data() + __pos, __rlen); 15726: return __rlen; 15726: } 15726: 15726: [[nodiscard]] 15726: constexpr basic_string_view 15726: substr(size_type __pos = 0, size_type __n = npos) const noexcept(false) 15726: { 15726: __pos = std::__sv_check(size(), __pos, "basic_string_view::substr"); 15726: const size_type __rlen = std::min(__n, _M_len - __pos); 15726: return basic_string_view{_M_str + __pos, __rlen}; 15726: } 15726: 15726: [[nodiscard]] 15726: constexpr int 15726: compare(basic_string_view __str) const noexcept 15726: { 15726: const size_type __rlen = std::min(this->_M_len, __str._M_len); 15726: int __ret = traits_type::compare(this->_M_str, __str._M_str, __rlen); 15726: if (__ret == 0) 15726: __ret = _S_compare(this->_M_len, __str._M_len); 15726: return __ret; 15726: } 15726: 15726: [[nodiscard]] 15726: constexpr int 15726: compare(size_type __pos1, size_type __n1, basic_string_view __str) const 15726: { return this->substr(__pos1, __n1).compare(__str); } 15726: 15726: [[nodiscard]] 15726: constexpr int 15726: compare(size_type __pos1, size_type __n1, 15726: basic_string_view __str, size_type __pos2, size_type __n2) const 15726: { 15726: return this->substr(__pos1, __n1).compare(__str.substr(__pos2, __n2)); 15726: } 15726: 15726: [[nodiscard, __gnu__::__nonnull__]] 15726: constexpr int 15726: compare(const _CharT* __str) const noexcept 15726: { return this->compare(basic_string_view{__str}); } 15726: 15726: [[nodiscard, __gnu__::__nonnull__]] 15726: constexpr int 15726: compare(size_type __pos1, size_type __n1, const _CharT* __str) const 15726: { return this->substr(__pos1, __n1).compare(basic_string_view{__str}); } 15726: 15726: [[nodiscard]] 15726: constexpr int 15726: compare(size_type __pos1, size_type __n1, 15726: const _CharT* __str, size_type __n2) const noexcept(false) 15726: { 15726: return this->substr(__pos1, __n1) 15726: .compare(basic_string_view(__str, __n2)); 15726: } 15726: # 446 "/usr/include/c++/13/string_view" 3 15726: [[nodiscard]] 15726: constexpr size_type 15726: find(basic_string_view __str, size_type __pos = 0) const noexcept 15726: { return this->find(__str._M_str, __pos, __str._M_len); } 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: find(_CharT __c, size_type __pos = 0) const noexcept; 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: find(const _CharT* __str, size_type __pos, size_type __n) const noexcept; 15726: 15726: [[nodiscard, __gnu__::__nonnull__]] 15726: constexpr size_type 15726: find(const _CharT* __str, size_type __pos = 0) const noexcept 15726: { return this->find(__str, __pos, traits_type::length(__str)); } 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: rfind(basic_string_view __str, size_type __pos = npos) const noexcept 15726: { return this->rfind(__str._M_str, __pos, __str._M_len); } 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: rfind(_CharT __c, size_type __pos = npos) const noexcept; 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept; 15726: 15726: [[nodiscard, __gnu__::__nonnull__]] 15726: constexpr size_type 15726: rfind(const _CharT* __str, size_type __pos = npos) const noexcept 15726: { return this->rfind(__str, __pos, traits_type::length(__str)); } 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: find_first_of(basic_string_view __str, size_type __pos = 0) const noexcept 15726: { return this->find_first_of(__str._M_str, __pos, __str._M_len); } 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: find_first_of(_CharT __c, size_type __pos = 0) const noexcept 15726: { return this->find(__c, __pos); } 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: find_first_of(const _CharT* __str, size_type __pos, 15726: size_type __n) const noexcept; 15726: 15726: [[nodiscard, __gnu__::__nonnull__]] 15726: constexpr size_type 15726: find_first_of(const _CharT* __str, size_type __pos = 0) const noexcept 15726: { return this->find_first_of(__str, __pos, traits_type::length(__str)); } 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: find_last_of(basic_string_view __str, 15726: size_type __pos = npos) const noexcept 15726: { return this->find_last_of(__str._M_str, __pos, __str._M_len); } 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: find_last_of(_CharT __c, size_type __pos=npos) const noexcept 15726: { return this->rfind(__c, __pos); } 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: find_last_of(const _CharT* __str, size_type __pos, 15726: size_type __n) const noexcept; 15726: 15726: [[nodiscard, __gnu__::__nonnull__]] 15726: constexpr size_type 15726: find_last_of(const _CharT* __str, size_type __pos = npos) const noexcept 15726: { return this->find_last_of(__str, __pos, traits_type::length(__str)); } 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: find_first_not_of(basic_string_view __str, 15726: size_type __pos = 0) const noexcept 15726: { return this->find_first_not_of(__str._M_str, __pos, __str._M_len); } 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: find_first_not_of(_CharT __c, size_type __pos = 0) const noexcept; 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: find_first_not_of(const _CharT* __str, 15726: size_type __pos, size_type __n) const noexcept; 15726: 15726: [[nodiscard, __gnu__::__nonnull__]] 15726: constexpr size_type 15726: find_first_not_of(const _CharT* __str, size_type __pos = 0) const noexcept 15726: { 15726: return this->find_first_not_of(__str, __pos, 15726: traits_type::length(__str)); 15726: } 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: find_last_not_of(basic_string_view __str, 15726: size_type __pos = npos) const noexcept 15726: { return this->find_last_not_of(__str._M_str, __pos, __str._M_len); } 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: find_last_not_of(_CharT __c, size_type __pos = npos) const noexcept; 15726: 15726: [[nodiscard]] 15726: constexpr size_type 15726: find_last_not_of(const _CharT* __str, 15726: size_type __pos, size_type __n) const noexcept; 15726: 15726: [[nodiscard, __gnu__::__nonnull__]] 15726: constexpr size_type 15726: find_last_not_of(const _CharT* __str, 15726: size_type __pos = npos) const noexcept 15726: { 15726: return this->find_last_not_of(__str, __pos, 15726: traits_type::length(__str)); 15726: } 15726: 15726: private: 15726: 15726: static constexpr int 15726: _S_compare(size_type __n1, size_type __n2) noexcept 15726: { 15726: using __limits = __gnu_cxx::__int_traits; 15726: const difference_type __diff = __n1 - __n2; 15726: if (__diff > __limits::__max) 15726: return __limits::__max; 15726: if (__diff < __limits::__min) 15726: return __limits::__min; 15726: return static_cast(__diff); 15726: } 15726: 15726: size_t _M_len; 15726: const _CharT* _M_str; 15726: }; 15726: # 606 "/usr/include/c++/13/string_view" 3 15726: template 15726: [[nodiscard]] 15726: constexpr bool 15726: operator==(basic_string_view<_CharT, _Traits> __x, 15726: basic_string_view<_CharT, _Traits> __y) noexcept 15726: { return __x.size() == __y.size() && __x.compare(__y) == 0; } 15726: 15726: template 15726: [[nodiscard]] 15726: constexpr bool 15726: operator==(basic_string_view<_CharT, _Traits> __x, 15726: __type_identity_t> __y) 15726: noexcept 15726: { return __x.size() == __y.size() && __x.compare(__y) == 0; } 15726: # 639 "/usr/include/c++/13/string_view" 3 15726: template 15726: [[nodiscard]] 15726: constexpr bool 15726: operator==(__type_identity_t> __x, 15726: basic_string_view<_CharT, _Traits> __y) noexcept 15726: { return __x.size() == __y.size() && __x.compare(__y) == 0; } 15726: 15726: template 15726: [[nodiscard]] 15726: constexpr bool 15726: operator!=(basic_string_view<_CharT, _Traits> __x, 15726: basic_string_view<_CharT, _Traits> __y) noexcept 15726: { return !(__x == __y); } 15726: 15726: template 15726: [[nodiscard]] 15726: constexpr bool 15726: operator!=(basic_string_view<_CharT, _Traits> __x, 15726: __type_identity_t> __y) 15726: noexcept 15726: { return !(__x == __y); } 15726: 15726: template 15726: [[nodiscard]] 15726: constexpr bool 15726: operator!=(__type_identity_t> __x, 15726: basic_string_view<_CharT, _Traits> __y) noexcept 15726: { return !(__x == __y); } 15726: 15726: template 15726: [[nodiscard]] 15726: constexpr bool 15726: operator< (basic_string_view<_CharT, _Traits> __x, 15726: basic_string_view<_CharT, _Traits> __y) noexcept 15726: { return __x.compare(__y) < 0; } 15726: 15726: template 15726: [[nodiscard]] 15726: constexpr bool 15726: operator< (basic_string_view<_CharT, _Traits> __x, 15726: __type_identity_t> __y) 15726: noexcept 15726: { return __x.compare(__y) < 0; } 15726: 15726: template 15726: [[nodiscard]] 15726: constexpr bool 15726: operator< (__type_identity_t> __x, 15726: basic_string_view<_CharT, _Traits> __y) noexcept 15726: { return __x.compare(__y) < 0; } 15726: 15726: template 15726: [[nodiscard]] 15726: constexpr bool 15726: operator> (basic_string_view<_CharT, _Traits> __x, 15726: basic_string_view<_CharT, _Traits> __y) noexcept 15726: { return __x.compare(__y) > 0; } 15726: 15726: template 15726: [[nodiscard]] 15726: constexpr bool 15726: operator> (basic_string_view<_CharT, _Traits> __x, 15726: __type_identity_t> __y) 15726: noexcept 15726: { return __x.compare(__y) > 0; } 15726: 15726: template 15726: [[nodiscard]] 15726: constexpr bool 15726: operator> (__type_identity_t> __x, 15726: basic_string_view<_CharT, _Traits> __y) noexcept 15726: { return __x.compare(__y) > 0; } 15726: 15726: template 15726: [[nodiscard]] 15726: constexpr bool 15726: operator<=(basic_string_view<_CharT, _Traits> __x, 15726: basic_string_view<_CharT, _Traits> __y) noexcept 15726: { return __x.compare(__y) <= 0; } 15726: 15726: template 15726: [[nodiscard]] 15726: constexpr bool 15726: operator<=(basic_string_view<_CharT, _Traits> __x, 15726: __type_identity_t> __y) 15726: noexcept 15726: { return __x.compare(__y) <= 0; } 15726: 15726: template 15726: [[nodiscard]] 15726: constexpr bool 15726: operator<=(__type_identity_t> __x, 15726: basic_string_view<_CharT, _Traits> __y) noexcept 15726: { return __x.compare(__y) <= 0; } 15726: 15726: template 15726: [[nodiscard]] 15726: constexpr bool 15726: operator>=(basic_string_view<_CharT, _Traits> __x, 15726: basic_string_view<_CharT, _Traits> __y) noexcept 15726: { return __x.compare(__y) >= 0; } 15726: 15726: template 15726: [[nodiscard]] 15726: constexpr bool 15726: operator>=(basic_string_view<_CharT, _Traits> __x, 15726: __type_identity_t> __y) 15726: noexcept 15726: { return __x.compare(__y) >= 0; } 15726: 15726: template 15726: [[nodiscard]] 15726: constexpr bool 15726: operator>=(__type_identity_t> __x, 15726: basic_string_view<_CharT, _Traits> __y) noexcept 15726: { return __x.compare(__y) >= 0; } 15726: 15726: 15726: 15726: 15726: template 15726: inline basic_ostream<_CharT, _Traits>& 15726: operator<<(basic_ostream<_CharT, _Traits>& __os, 15726: basic_string_view<_CharT,_Traits> __str) 15726: { return __ostream_insert(__os, __str.data(), __str.size()); } 15726: 15726: 15726: 15726: 15726: using string_view = basic_string_view; 15726: using wstring_view = basic_string_view; 15726: 15726: 15726: 15726: using u16string_view = basic_string_view; 15726: using u32string_view = basic_string_view; 15726: 15726: 15726: 15726: template 15726: struct hash; 15726: 15726: template<> 15726: struct hash 15726: : public __hash_base 15726: { 15726: [[nodiscard]] 15726: size_t 15726: operator()(const string_view& __str) const noexcept 15726: { return std::_Hash_impl::hash(__str.data(), __str.length()); } 15726: }; 15726: 15726: template<> 15726: struct __is_fast_hash> : std::false_type 15726: { }; 15726: 15726: template<> 15726: struct hash 15726: : public __hash_base 15726: { 15726: [[nodiscard]] 15726: size_t 15726: operator()(const wstring_view& __s) const noexcept 15726: { return std::_Hash_impl::hash(__s.data(), 15726: __s.length() * sizeof(wchar_t)); } 15726: }; 15726: 15726: template<> 15726: struct __is_fast_hash> : std::false_type 15726: { }; 15726: # 826 "/usr/include/c++/13/string_view" 3 15726: template<> 15726: struct hash 15726: : public __hash_base 15726: { 15726: [[nodiscard]] 15726: size_t 15726: operator()(const u16string_view& __s) const noexcept 15726: { return std::_Hash_impl::hash(__s.data(), 15726: __s.length() * sizeof(char16_t)); } 15726: }; 15726: 15726: template<> 15726: struct __is_fast_hash> : std::false_type 15726: { }; 15726: 15726: template<> 15726: struct hash 15726: : public __hash_base 15726: { 15726: [[nodiscard]] 15726: size_t 15726: operator()(const u32string_view& __s) const noexcept 15726: { return std::_Hash_impl::hash(__s.data(), 15726: __s.length() * sizeof(char32_t)); } 15726: }; 15726: 15726: template<> 15726: struct __is_fast_hash> : std::false_type 15726: { }; 15726: 15726: inline namespace literals 15726: { 15726: inline namespace string_view_literals 15726: { 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wliteral-suffix" 15726: inline constexpr basic_string_view 15726: operator""sv(const char* __str, size_t __len) noexcept 15726: { return basic_string_view{__str, __len}; } 15726: 15726: inline constexpr basic_string_view 15726: operator""sv(const wchar_t* __str, size_t __len) noexcept 15726: { return basic_string_view{__str, __len}; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline constexpr basic_string_view 15726: operator""sv(const char16_t* __str, size_t __len) noexcept 15726: { return basic_string_view{__str, __len}; } 15726: 15726: inline constexpr basic_string_view 15726: operator""sv(const char32_t* __str, size_t __len) noexcept 15726: { return basic_string_view{__str, __len}; } 15726: 15726: #pragma GCC diagnostic pop 15726: } 15726: } 15726: # 902 "/usr/include/c++/13/string_view" 3 15726: 15726: } 15726: 15726: # 1 "/usr/include/c++/13/bits/string_view.tcc" 1 3 15726: # 37 "/usr/include/c++/13/bits/string_view.tcc" 3 15726: 15726: # 38 "/usr/include/c++/13/bits/string_view.tcc" 3 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: template 15726: constexpr typename basic_string_view<_CharT, _Traits>::size_type 15726: basic_string_view<_CharT, _Traits>:: 15726: find(const _CharT* __str, size_type __pos, size_type __n) const noexcept 15726: { 15726: ; 15726: 15726: if (__n == 0) 15726: return __pos <= _M_len ? __pos : npos; 15726: if (__pos >= _M_len) 15726: return npos; 15726: 15726: const _CharT __elem0 = __str[0]; 15726: const _CharT* __first = _M_str + __pos; 15726: const _CharT* const __last = _M_str + _M_len; 15726: size_type __len = _M_len - __pos; 15726: 15726: while (__len >= __n) 15726: { 15726: 15726: __first = traits_type::find(__first, __len - __n + 1, __elem0); 15726: if (!__first) 15726: return npos; 15726: 15726: 15726: 15726: if (traits_type::compare(__first, __str, __n) == 0) 15726: return __first - _M_str; 15726: __len = __last - ++__first; 15726: } 15726: return npos; 15726: } 15726: 15726: template 15726: constexpr typename basic_string_view<_CharT, _Traits>::size_type 15726: basic_string_view<_CharT, _Traits>:: 15726: find(_CharT __c, size_type __pos) const noexcept 15726: { 15726: size_type __ret = npos; 15726: if (__pos < this->_M_len) 15726: { 15726: const size_type __n = this->_M_len - __pos; 15726: const _CharT* __p = traits_type::find(this->_M_str + __pos, __n, __c); 15726: if (__p) 15726: __ret = __p - this->_M_str; 15726: } 15726: return __ret; 15726: } 15726: 15726: template 15726: constexpr typename basic_string_view<_CharT, _Traits>::size_type 15726: basic_string_view<_CharT, _Traits>:: 15726: rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept 15726: { 15726: ; 15726: 15726: if (__n <= this->_M_len) 15726: { 15726: __pos = std::min(size_type(this->_M_len - __n), __pos); 15726: do 15726: { 15726: if (traits_type::compare(this->_M_str + __pos, __str, __n) == 0) 15726: return __pos; 15726: } 15726: while (__pos-- > 0); 15726: } 15726: return npos; 15726: } 15726: 15726: template 15726: constexpr typename basic_string_view<_CharT, _Traits>::size_type 15726: basic_string_view<_CharT, _Traits>:: 15726: rfind(_CharT __c, size_type __pos) const noexcept 15726: { 15726: size_type __size = this->_M_len; 15726: if (__size > 0) 15726: { 15726: if (--__size > __pos) 15726: __size = __pos; 15726: for (++__size; __size-- > 0; ) 15726: if (traits_type::eq(this->_M_str[__size], __c)) 15726: return __size; 15726: } 15726: return npos; 15726: } 15726: 15726: template 15726: constexpr typename basic_string_view<_CharT, _Traits>::size_type 15726: basic_string_view<_CharT, _Traits>:: 15726: find_first_of(const _CharT* __str, size_type __pos, 15726: size_type __n) const noexcept 15726: { 15726: ; 15726: for (; __n && __pos < this->_M_len; ++__pos) 15726: { 15726: const _CharT* __p = traits_type::find(__str, __n, 15726: this->_M_str[__pos]); 15726: if (__p) 15726: return __pos; 15726: } 15726: return npos; 15726: } 15726: 15726: template 15726: constexpr typename basic_string_view<_CharT, _Traits>::size_type 15726: basic_string_view<_CharT, _Traits>:: 15726: find_last_of(const _CharT* __str, size_type __pos, 15726: size_type __n) const noexcept 15726: { 15726: ; 15726: size_type __size = this->size(); 15726: if (__size && __n) 15726: { 15726: if (--__size > __pos) 15726: __size = __pos; 15726: do 15726: { 15726: if (traits_type::find(__str, __n, this->_M_str[__size])) 15726: return __size; 15726: } 15726: while (__size-- != 0); 15726: } 15726: return npos; 15726: } 15726: 15726: template 15726: constexpr typename basic_string_view<_CharT, _Traits>::size_type 15726: basic_string_view<_CharT, _Traits>:: 15726: find_first_not_of(const _CharT* __str, size_type __pos, 15726: size_type __n) const noexcept 15726: { 15726: ; 15726: for (; __pos < this->_M_len; ++__pos) 15726: if (!traits_type::find(__str, __n, this->_M_str[__pos])) 15726: return __pos; 15726: return npos; 15726: } 15726: 15726: template 15726: constexpr typename basic_string_view<_CharT, _Traits>::size_type 15726: basic_string_view<_CharT, _Traits>:: 15726: find_first_not_of(_CharT __c, size_type __pos) const noexcept 15726: { 15726: for (; __pos < this->_M_len; ++__pos) 15726: if (!traits_type::eq(this->_M_str[__pos], __c)) 15726: return __pos; 15726: return npos; 15726: } 15726: 15726: template 15726: constexpr typename basic_string_view<_CharT, _Traits>::size_type 15726: basic_string_view<_CharT, _Traits>:: 15726: find_last_not_of(const _CharT* __str, size_type __pos, 15726: size_type __n) const noexcept 15726: { 15726: ; 15726: size_type __size = this->_M_len; 15726: if (__size) 15726: { 15726: if (--__size > __pos) 15726: __size = __pos; 15726: do 15726: { 15726: if (!traits_type::find(__str, __n, this->_M_str[__size])) 15726: return __size; 15726: } 15726: while (__size--); 15726: } 15726: return npos; 15726: } 15726: 15726: template 15726: constexpr typename basic_string_view<_CharT, _Traits>::size_type 15726: basic_string_view<_CharT, _Traits>:: 15726: find_last_not_of(_CharT __c, size_type __pos) const noexcept 15726: { 15726: size_type __size = this->_M_len; 15726: if (__size) 15726: { 15726: if (--__size > __pos) 15726: __size = __pos; 15726: do 15726: { 15726: if (!traits_type::eq(this->_M_str[__size], __c)) 15726: return __size; 15726: } 15726: while (__size--); 15726: } 15726: return npos; 15726: } 15726: 15726: 15726: } 15726: # 906 "/usr/include/c++/13/string_view" 2 3 15726: # 48 "/usr/include/c++/13/bits/basic_string.h" 2 3 15726: 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: namespace __cxx11 { 15726: # 86 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: class basic_string 15726: { 15726: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 15726: rebind<_CharT>::other _Char_alloc_type; 15726: 15726: typedef __gnu_cxx::__alloc_traits<_Char_alloc_type> _Alloc_traits; 15726: 15726: 15726: public: 15726: typedef _Traits traits_type; 15726: typedef typename _Traits::char_type value_type; 15726: typedef _Char_alloc_type allocator_type; 15726: typedef typename _Alloc_traits::size_type size_type; 15726: typedef typename _Alloc_traits::difference_type difference_type; 15726: typedef typename _Alloc_traits::reference reference; 15726: typedef typename _Alloc_traits::const_reference const_reference; 15726: typedef typename _Alloc_traits::pointer pointer; 15726: typedef typename _Alloc_traits::const_pointer const_pointer; 15726: typedef __gnu_cxx::__normal_iterator iterator; 15726: typedef __gnu_cxx::__normal_iterator 15726: const_iterator; 15726: typedef std::reverse_iterator const_reverse_iterator; 15726: typedef std::reverse_iterator reverse_iterator; 15726: 15726: 15726: static const size_type npos = static_cast(-1); 15726: 15726: protected: 15726: 15726: 15726: 15726: 15726: typedef const_iterator __const_iterator; 15726: 15726: 15726: private: 15726: static pointer 15726: _S_allocate(_Char_alloc_type& __a, size_type __n) 15726: { 15726: pointer __p = _Alloc_traits::allocate(__a, __n); 15726: # 136 "/usr/include/c++/13/bits/basic_string.h" 3 15726: return __p; 15726: } 15726: 15726: 15726: 15726: typedef basic_string_view<_CharT, _Traits> __sv_type; 15726: 15726: template 15726: using _If_sv = enable_if_t< 15726: __and_, 15726: __not_>, 15726: __not_>>::value, 15726: _Res>; 15726: 15726: 15726: 15726: static __sv_type 15726: _S_to_string_view(__sv_type __svt) noexcept 15726: { return __svt; } 15726: 15726: 15726: 15726: 15726: 15726: struct __sv_wrapper 15726: { 15726: explicit 15726: __sv_wrapper(__sv_type __sv) noexcept : _M_sv(__sv) { } 15726: 15726: __sv_type _M_sv; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: basic_string(__sv_wrapper __svw, const _Alloc& __a) 15726: : basic_string(__svw._M_sv.data(), __svw._M_sv.size(), __a) { } 15726: 15726: 15726: 15726: struct _Alloc_hider : allocator_type 15726: { 15726: 15726: 15726: 15726: 15726: 15726: _Alloc_hider(pointer __dat, const _Alloc& __a) 15726: : allocator_type(__a), _M_p(__dat) { } 15726: 15726: 15726: _Alloc_hider(pointer __dat, _Alloc&& __a = _Alloc()) 15726: : allocator_type(std::move(__a)), _M_p(__dat) { } 15726: 15726: 15726: pointer _M_p; 15726: }; 15726: 15726: _Alloc_hider _M_dataplus; 15726: size_type _M_string_length; 15726: 15726: enum { _S_local_capacity = 15 / sizeof(_CharT) }; 15726: 15726: union 15726: { 15726: _CharT _M_local_buf[_S_local_capacity + 1]; 15726: size_type _M_allocated_capacity; 15726: }; 15726: 15726: 15726: void 15726: _M_data(pointer __p) 15726: { _M_dataplus._M_p = __p; } 15726: 15726: 15726: void 15726: _M_length(size_type __length) 15726: { _M_string_length = __length; } 15726: 15726: 15726: pointer 15726: _M_data() const 15726: { return _M_dataplus._M_p; } 15726: 15726: 15726: pointer 15726: _M_local_data() 15726: { 15726: 15726: return std::pointer_traits::pointer_to(*_M_local_buf); 15726: 15726: 15726: 15726: } 15726: 15726: 15726: const_pointer 15726: _M_local_data() const 15726: { 15726: 15726: return std::pointer_traits::pointer_to(*_M_local_buf); 15726: 15726: 15726: 15726: } 15726: 15726: 15726: void 15726: _M_capacity(size_type __capacity) 15726: { _M_allocated_capacity = __capacity; } 15726: 15726: 15726: void 15726: _M_set_length(size_type __n) 15726: { 15726: _M_length(__n); 15726: traits_type::assign(_M_data()[__n], _CharT()); 15726: } 15726: 15726: 15726: bool 15726: _M_is_local() const 15726: { 15726: if (_M_data() == _M_local_data()) 15726: { 15726: if (_M_string_length > _S_local_capacity) 15726: __builtin_unreachable(); 15726: return true; 15726: } 15726: return false; 15726: } 15726: 15726: 15726: 15726: pointer 15726: _M_create(size_type&, size_type); 15726: 15726: 15726: void 15726: _M_dispose() 15726: { 15726: if (!_M_is_local()) 15726: _M_destroy(_M_allocated_capacity); 15726: } 15726: 15726: 15726: void 15726: _M_destroy(size_type __size) throw() 15726: { _Alloc_traits::deallocate(_M_get_allocator(), _M_data(), __size + 1); } 15726: # 316 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: 15726: void 15726: _M_construct(_InIterator __beg, _InIterator __end, 15726: std::input_iterator_tag); 15726: 15726: 15726: 15726: template 15726: 15726: void 15726: _M_construct(_FwdIterator __beg, _FwdIterator __end, 15726: std::forward_iterator_tag); 15726: 15726: 15726: void 15726: _M_construct(size_type __req, _CharT __c); 15726: 15726: 15726: allocator_type& 15726: _M_get_allocator() 15726: { return _M_dataplus; } 15726: 15726: 15726: const allocator_type& 15726: _M_get_allocator() const 15726: { return _M_dataplus; } 15726: 15726: 15726: __attribute__((__always_inline__)) 15726: constexpr 15726: void 15726: _M_init_local_buf() noexcept 15726: { 15726: 15726: 15726: 15726: 15726: 15726: } 15726: 15726: __attribute__((__always_inline__)) 15726: constexpr 15726: pointer 15726: _M_use_local_data() noexcept 15726: { 15726: 15726: 15726: 15726: return _M_local_data(); 15726: } 15726: 15726: private: 15726: # 384 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: size_type 15726: _M_check(size_type __pos, const char* __s) const 15726: { 15726: if (__pos > this->size()) 15726: __throw_out_of_range_fmt(("%s: __pos (which is %zu) > " "this->size() (which is %zu)") 15726: , 15726: __s, __pos, this->size()); 15726: return __pos; 15726: } 15726: 15726: 15726: void 15726: _M_check_length(size_type __n1, size_type __n2, const char* __s) const 15726: { 15726: if (this->max_size() - (this->size() - __n1) < __n2) 15726: __throw_length_error((__s)); 15726: } 15726: 15726: 15726: 15726: 15726: size_type 15726: _M_limit(size_type __pos, size_type __off) const noexcept 15726: { 15726: const bool __testoff = __off < this->size() - __pos; 15726: return __testoff ? __off : this->size() - __pos; 15726: } 15726: 15726: 15726: bool 15726: _M_disjunct(const _CharT* __s) const noexcept 15726: { 15726: return (less()(__s, _M_data()) 15726: || less()(_M_data() + this->size(), __s)); 15726: } 15726: 15726: 15726: 15726: 15726: static void 15726: _S_copy(_CharT* __d, const _CharT* __s, size_type __n) 15726: { 15726: if (__n == 1) 15726: traits_type::assign(*__d, *__s); 15726: else 15726: traits_type::copy(__d, __s, __n); 15726: } 15726: 15726: 15726: static void 15726: _S_move(_CharT* __d, const _CharT* __s, size_type __n) 15726: { 15726: if (__n == 1) 15726: traits_type::assign(*__d, *__s); 15726: else 15726: traits_type::move(__d, __s, __n); 15726: } 15726: 15726: 15726: static void 15726: _S_assign(_CharT* __d, size_type __n, _CharT __c) 15726: { 15726: if (__n == 1) 15726: traits_type::assign(*__d, __c); 15726: else 15726: traits_type::assign(__d, __n, __c); 15726: } 15726: 15726: 15726: 15726: template 15726: 15726: static void 15726: _S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2) 15726: { 15726: for (; __k1 != __k2; ++__k1, (void)++__p) 15726: traits_type::assign(*__p, *__k1); 15726: } 15726: 15726: 15726: static void 15726: _S_copy_chars(_CharT* __p, iterator __k1, iterator __k2) noexcept 15726: { _S_copy_chars(__p, __k1.base(), __k2.base()); } 15726: 15726: 15726: static void 15726: _S_copy_chars(_CharT* __p, const_iterator __k1, const_iterator __k2) 15726: noexcept 15726: { _S_copy_chars(__p, __k1.base(), __k2.base()); } 15726: 15726: 15726: static void 15726: _S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2) noexcept 15726: { _S_copy(__p, __k1, __k2 - __k1); } 15726: 15726: 15726: static void 15726: _S_copy_chars(_CharT* __p, const _CharT* __k1, const _CharT* __k2) 15726: noexcept 15726: { _S_copy(__p, __k1, __k2 - __k1); } 15726: 15726: 15726: static int 15726: _S_compare(size_type __n1, size_type __n2) noexcept 15726: { 15726: const difference_type __d = difference_type(__n1 - __n2); 15726: 15726: if (__d > __gnu_cxx::__numeric_traits::__max) 15726: return __gnu_cxx::__numeric_traits::__max; 15726: else if (__d < __gnu_cxx::__numeric_traits::__min) 15726: return __gnu_cxx::__numeric_traits::__min; 15726: else 15726: return int(__d); 15726: } 15726: 15726: 15726: void 15726: _M_assign(const basic_string&); 15726: 15726: 15726: void 15726: _M_mutate(size_type __pos, size_type __len1, const _CharT* __s, 15726: size_type __len2); 15726: 15726: 15726: void 15726: _M_erase(size_type __pos, size_type __n); 15726: 15726: public: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: basic_string() 15726: noexcept(is_nothrow_default_constructible<_Alloc>::value) 15726: : _M_dataplus(_M_local_data()) 15726: { 15726: _M_init_local_buf(); 15726: _M_set_length(0); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: basic_string(const _Alloc& __a) noexcept 15726: : _M_dataplus(_M_local_data(), __a) 15726: { 15726: _M_init_local_buf(); 15726: _M_set_length(0); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: basic_string(const basic_string& __str) 15726: : _M_dataplus(_M_local_data(), 15726: _Alloc_traits::_S_select_on_copy(__str._M_get_allocator())) 15726: { 15726: _M_construct(__str._M_data(), __str._M_data() + __str.length(), 15726: std::forward_iterator_tag()); 15726: } 15726: # 563 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string(const basic_string& __str, size_type __pos, 15726: const _Alloc& __a = _Alloc()) 15726: : _M_dataplus(_M_local_data(), __a) 15726: { 15726: const _CharT* __start = __str._M_data() 15726: + __str._M_check(__pos, "basic_string::basic_string"); 15726: _M_construct(__start, __start + __str._M_limit(__pos, npos), 15726: std::forward_iterator_tag()); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: basic_string(const basic_string& __str, size_type __pos, 15726: size_type __n) 15726: : _M_dataplus(_M_local_data()) 15726: { 15726: const _CharT* __start = __str._M_data() 15726: + __str._M_check(__pos, "basic_string::basic_string"); 15726: _M_construct(__start, __start + __str._M_limit(__pos, __n), 15726: std::forward_iterator_tag()); 15726: } 15726: # 598 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string(const basic_string& __str, size_type __pos, 15726: size_type __n, const _Alloc& __a) 15726: : _M_dataplus(_M_local_data(), __a) 15726: { 15726: const _CharT* __start 15726: = __str._M_data() + __str._M_check(__pos, "string::string"); 15726: _M_construct(__start, __start + __str._M_limit(__pos, __n), 15726: std::forward_iterator_tag()); 15726: } 15726: # 618 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string(const _CharT* __s, size_type __n, 15726: const _Alloc& __a = _Alloc()) 15726: : _M_dataplus(_M_local_data(), __a) 15726: { 15726: 15726: if (__s == 0 && __n > 0) 15726: std::__throw_logic_error(("basic_string: " "construction from null is not valid") 15726: ); 15726: _M_construct(__s, __s + __n, std::forward_iterator_tag()); 15726: } 15726: # 638 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template> 15726: 15726: 15726: basic_string(const _CharT* __s, const _Alloc& __a = _Alloc()) 15726: : _M_dataplus(_M_local_data(), __a) 15726: { 15726: 15726: if (__s == 0) 15726: std::__throw_logic_error(("basic_string: " "construction from null is not valid") 15726: ); 15726: const _CharT* __end = __s + traits_type::length(__s); 15726: _M_construct(__s, __end, forward_iterator_tag()); 15726: } 15726: # 661 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template> 15726: 15726: 15726: basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc()) 15726: : _M_dataplus(_M_local_data(), __a) 15726: { _M_construct(__n, __c); } 15726: # 676 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string(basic_string&& __str) noexcept 15726: : _M_dataplus(_M_local_data(), std::move(__str._M_get_allocator())) 15726: { 15726: if (__str._M_is_local()) 15726: { 15726: _M_init_local_buf(); 15726: traits_type::copy(_M_local_buf, __str._M_local_buf, 15726: __str.length() + 1); 15726: } 15726: else 15726: { 15726: _M_data(__str._M_data()); 15726: _M_capacity(__str._M_allocated_capacity); 15726: } 15726: 15726: 15726: 15726: 15726: _M_length(__str.length()); 15726: __str._M_data(__str._M_use_local_data()); 15726: __str._M_set_length(0); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc()) 15726: : _M_dataplus(_M_local_data(), __a) 15726: { _M_construct(__l.begin(), __l.end(), std::forward_iterator_tag()); } 15726: 15726: 15726: basic_string(const basic_string& __str, const _Alloc& __a) 15726: : _M_dataplus(_M_local_data(), __a) 15726: { _M_construct(__str.begin(), __str.end(), std::forward_iterator_tag()); } 15726: 15726: 15726: basic_string(basic_string&& __str, const _Alloc& __a) 15726: noexcept(_Alloc_traits::_S_always_equal()) 15726: : _M_dataplus(_M_local_data(), __a) 15726: { 15726: if (__str._M_is_local()) 15726: { 15726: _M_init_local_buf(); 15726: traits_type::copy(_M_local_buf, __str._M_local_buf, 15726: __str.length() + 1); 15726: _M_length(__str.length()); 15726: __str._M_set_length(0); 15726: } 15726: else if (_Alloc_traits::_S_always_equal() 15726: || __str.get_allocator() == __a) 15726: { 15726: _M_data(__str._M_data()); 15726: _M_length(__str.length()); 15726: _M_capacity(__str._M_allocated_capacity); 15726: __str._M_data(__str._M_use_local_data()); 15726: __str._M_set_length(0); 15726: } 15726: else 15726: _M_construct(__str.begin(), __str.end(), std::forward_iterator_tag()); 15726: } 15726: # 754 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template> 15726: 15726: 15726: 15726: 15726: basic_string(_InputIterator __beg, _InputIterator __end, 15726: const _Alloc& __a = _Alloc()) 15726: : _M_dataplus(_M_local_data(), __a), _M_string_length(0) 15726: { 15726: 15726: _M_construct(__beg, __end, std::__iterator_category(__beg)); 15726: 15726: 15726: 15726: 15726: } 15726: # 780 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template>> 15726: 15726: basic_string(const _Tp& __t, size_type __pos, size_type __n, 15726: const _Alloc& __a = _Alloc()) 15726: : basic_string(_S_to_string_view(__t).substr(__pos, __n), __a) { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template> 15726: 15726: explicit 15726: basic_string(const _Tp& __t, const _Alloc& __a = _Alloc()) 15726: : basic_string(__sv_wrapper(_S_to_string_view(__t)), __a) { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: ~basic_string() 15726: { _M_dispose(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: basic_string& 15726: operator=(const basic_string& __str) 15726: { 15726: return this->assign(__str); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: basic_string& 15726: operator=(const _CharT* __s) 15726: { return this->assign(__s); } 15726: # 833 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: operator=(_CharT __c) 15726: { 15726: this->assign(1, __c); 15726: return *this; 15726: } 15726: # 851 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: operator=(basic_string&& __str) 15726: noexcept(_Alloc_traits::_S_nothrow_move()) 15726: { 15726: const bool __equal_allocs = _Alloc_traits::_S_always_equal() 15726: || _M_get_allocator() == __str._M_get_allocator(); 15726: if (!_M_is_local() && _Alloc_traits::_S_propagate_on_move_assign() 15726: && !__equal_allocs) 15726: { 15726: 15726: _M_destroy(_M_allocated_capacity); 15726: _M_data(_M_local_data()); 15726: _M_set_length(0); 15726: } 15726: 15726: std::__alloc_on_move(_M_get_allocator(), __str._M_get_allocator()); 15726: 15726: if (__str._M_is_local()) 15726: { 15726: 15726: 15726: 15726: if (__builtin_expect(std::__addressof(__str) != this, true)) 15726: { 15726: if (__str.size()) 15726: this->_S_copy(_M_data(), __str._M_data(), __str.size()); 15726: _M_set_length(__str.size()); 15726: } 15726: } 15726: else if (_Alloc_traits::_S_propagate_on_move_assign() || __equal_allocs) 15726: { 15726: 15726: pointer __data = nullptr; 15726: size_type __capacity; 15726: if (!_M_is_local()) 15726: { 15726: if (__equal_allocs) 15726: { 15726: 15726: __data = _M_data(); 15726: __capacity = _M_allocated_capacity; 15726: } 15726: else 15726: _M_destroy(_M_allocated_capacity); 15726: } 15726: 15726: _M_data(__str._M_data()); 15726: _M_length(__str.length()); 15726: _M_capacity(__str._M_allocated_capacity); 15726: if (__data) 15726: { 15726: __str._M_data(__data); 15726: __str._M_capacity(__capacity); 15726: } 15726: else 15726: __str._M_data(__str._M_use_local_data()); 15726: } 15726: else 15726: assign(__str); 15726: __str.clear(); 15726: return *this; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: basic_string& 15726: operator=(initializer_list<_CharT> __l) 15726: { 15726: this->assign(__l.begin(), __l.size()); 15726: return *this; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: _If_sv<_Tp, basic_string&> 15726: operator=(const _Tp& __svt) 15726: { return this->assign(__svt); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: operator __sv_type() const noexcept 15726: { return __sv_type(data(), size()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: iterator 15726: begin() noexcept 15726: { return iterator(_M_data()); } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: begin() const noexcept 15726: { return const_iterator(_M_data()); } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: iterator 15726: end() noexcept 15726: { return iterator(_M_data() + this->size()); } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: end() const noexcept 15726: { return const_iterator(_M_data() + this->size()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: reverse_iterator 15726: rbegin() noexcept 15726: { return reverse_iterator(this->end()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: rbegin() const noexcept 15726: { return const_reverse_iterator(this->end()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: reverse_iterator 15726: rend() noexcept 15726: { return reverse_iterator(this->begin()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: rend() const noexcept 15726: { return const_reverse_iterator(this->begin()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: cbegin() const noexcept 15726: { return const_iterator(this->_M_data()); } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: cend() const noexcept 15726: { return const_iterator(this->_M_data() + this->size()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: crbegin() const noexcept 15726: { return const_reverse_iterator(this->end()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: crend() const noexcept 15726: { return const_reverse_iterator(this->begin()); } 15726: 15726: 15726: public: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: size_type 15726: size() const noexcept 15726: { return _M_string_length; } 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: size_type 15726: length() const noexcept 15726: { return _M_string_length; } 15726: 15726: 15726: [[__nodiscard__]] 15726: size_type 15726: max_size() const noexcept 15726: { return (_Alloc_traits::max_size(_M_get_allocator()) - 1) / 2; } 15726: # 1097 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: void 15726: resize(size_type __n, _CharT __c); 15726: # 1111 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: void 15726: resize(size_type __n) 15726: { this->resize(__n, _CharT()); } 15726: 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: 15726: 15726: void 15726: shrink_to_fit() noexcept 15726: { reserve(); } 15726: #pragma GCC diagnostic pop 15726: # 1167 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: capacity() const noexcept 15726: { 15726: return _M_is_local() ? size_type(_S_local_capacity) 15726: : _M_allocated_capacity; 15726: } 15726: # 1192 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: void 15726: reserve(size_type __res_arg); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: reserve(); 15726: 15726: 15726: 15726: 15726: 15726: void 15726: clear() noexcept 15726: { _M_set_length(0); } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: bool 15726: empty() const noexcept 15726: { return this->size() == 0; } 15726: # 1234 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: const_reference 15726: operator[] (size_type __pos) const noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__pos <= size())) __builtin_unreachable(); } while (false); 15726: return _M_data()[__pos]; 15726: } 15726: # 1252 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: reference 15726: operator[](size_type __pos) 15726: { 15726: 15726: 15726: do { if (std::__is_constant_evaluated() && !bool(__pos <= size())) __builtin_unreachable(); } while (false); 15726: 15726: ; 15726: return _M_data()[__pos]; 15726: } 15726: # 1274 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: const_reference 15726: at(size_type __n) const 15726: { 15726: if (__n >= this->size()) 15726: __throw_out_of_range_fmt(("basic_string::at: __n " "(which is %zu) >= this->size() " "(which is %zu)") 15726: 15726: , 15726: __n, this->size()); 15726: return _M_data()[__n]; 15726: } 15726: # 1296 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: reference 15726: at(size_type __n) 15726: { 15726: if (__n >= size()) 15726: __throw_out_of_range_fmt(("basic_string::at: __n " "(which is %zu) >= this->size() " "(which is %zu)") 15726: 15726: , 15726: __n, this->size()); 15726: return _M_data()[__n]; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: reference 15726: front() noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(!empty())) __builtin_unreachable(); } while (false); 15726: return operator[](0); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reference 15726: front() const noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(!empty())) __builtin_unreachable(); } while (false); 15726: return operator[](0); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: reference 15726: back() noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(!empty())) __builtin_unreachable(); } while (false); 15726: return operator[](this->size() - 1); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reference 15726: back() const noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(!empty())) __builtin_unreachable(); } while (false); 15726: return operator[](this->size() - 1); 15726: } 15726: # 1364 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: operator+=(const basic_string& __str) 15726: { return this->append(__str); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: basic_string& 15726: operator+=(const _CharT* __s) 15726: { return this->append(__s); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: basic_string& 15726: operator+=(_CharT __c) 15726: { 15726: this->push_back(__c); 15726: return *this; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: basic_string& 15726: operator+=(initializer_list<_CharT> __l) 15726: { return this->append(__l.begin(), __l.size()); } 15726: # 1410 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: 15726: _If_sv<_Tp, basic_string&> 15726: operator+=(const _Tp& __svt) 15726: { return this->append(__svt); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: basic_string& 15726: append(const basic_string& __str) 15726: { return this->append(__str._M_data(), __str.size()); } 15726: # 1440 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: append(const basic_string& __str, size_type __pos, size_type __n = npos) 15726: { return this->append(__str._M_data() 15726: + __str._M_check(__pos, "basic_string::append"), 15726: __str._M_limit(__pos, __n)); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: basic_string& 15726: append(const _CharT* __s, size_type __n) 15726: { 15726: ; 15726: _M_check_length(size_type(0), __n, "basic_string::append"); 15726: return _M_append(__s, __n); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: basic_string& 15726: append(const _CharT* __s) 15726: { 15726: ; 15726: const size_type __n = traits_type::length(__s); 15726: _M_check_length(size_type(0), __n, "basic_string::append"); 15726: return _M_append(__s, __n); 15726: } 15726: # 1485 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: append(size_type __n, _CharT __c) 15726: { return _M_replace_aux(this->size(), size_type(0), __n, __c); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: basic_string& 15726: append(initializer_list<_CharT> __l) 15726: { return this->append(__l.begin(), __l.size()); } 15726: # 1511 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template> 15726: 15726: 15726: 15726: 15726: basic_string& 15726: append(_InputIterator __first, _InputIterator __last) 15726: { return this->replace(end(), end(), __first, __last); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: _If_sv<_Tp, basic_string&> 15726: append(const _Tp& __svt) 15726: { 15726: __sv_type __sv = __svt; 15726: return this->append(__sv.data(), __sv.size()); 15726: } 15726: # 1543 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: 15726: _If_sv<_Tp, basic_string&> 15726: append(const _Tp& __svt, size_type __pos, size_type __n = npos) 15726: { 15726: __sv_type __sv = __svt; 15726: return _M_append(__sv.data() 15726: + std::__sv_check(__sv.size(), __pos, "basic_string::append"), 15726: std::__sv_limit(__sv.size(), __pos, __n)); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: push_back(_CharT __c) 15726: { 15726: const size_type __size = this->size(); 15726: if (__size + 1 > this->capacity()) 15726: this->_M_mutate(__size, size_type(0), 0, size_type(1)); 15726: traits_type::assign(this->_M_data()[__size], __c); 15726: this->_M_set_length(__size + 1); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: basic_string& 15726: assign(const basic_string& __str) 15726: { 15726: 15726: if (_Alloc_traits::_S_propagate_on_copy_assign()) 15726: { 15726: if (!_Alloc_traits::_S_always_equal() && !_M_is_local() 15726: && _M_get_allocator() != __str._M_get_allocator()) 15726: { 15726: 15726: 15726: if (__str.size() <= _S_local_capacity) 15726: { 15726: _M_destroy(_M_allocated_capacity); 15726: _M_data(_M_use_local_data()); 15726: _M_set_length(0); 15726: } 15726: else 15726: { 15726: const auto __len = __str.size(); 15726: auto __alloc = __str._M_get_allocator(); 15726: 15726: auto __ptr = _S_allocate(__alloc, __len + 1); 15726: _M_destroy(_M_allocated_capacity); 15726: _M_data(__ptr); 15726: _M_capacity(__len); 15726: _M_set_length(__len); 15726: } 15726: } 15726: std::__alloc_on_copy(_M_get_allocator(), __str._M_get_allocator()); 15726: } 15726: 15726: this->_M_assign(__str); 15726: return *this; 15726: } 15726: # 1621 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: assign(basic_string&& __str) 15726: noexcept(_Alloc_traits::_S_nothrow_move()) 15726: { 15726: 15726: 15726: return *this = std::move(__str); 15726: } 15726: # 1645 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: assign(const basic_string& __str, size_type __pos, size_type __n = npos) 15726: { return _M_replace(size_type(0), this->size(), __str._M_data() 15726: + __str._M_check(__pos, "basic_string::assign"), 15726: __str._M_limit(__pos, __n)); } 15726: # 1662 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: assign(const _CharT* __s, size_type __n) 15726: { 15726: ; 15726: return _M_replace(size_type(0), this->size(), __s, __n); 15726: } 15726: # 1679 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: assign(const _CharT* __s) 15726: { 15726: ; 15726: return _M_replace(size_type(0), this->size(), __s, 15726: traits_type::length(__s)); 15726: } 15726: # 1697 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: assign(size_type __n, _CharT __c) 15726: { return _M_replace_aux(size_type(0), this->size(), __n, __c); } 15726: # 1711 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template> 15726: 15726: 15726: 15726: 15726: basic_string& 15726: assign(_InputIterator __first, _InputIterator __last) 15726: { return this->replace(begin(), end(), __first, __last); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: basic_string& 15726: assign(initializer_list<_CharT> __l) 15726: { return this->assign(__l.begin(), __l.size()); } 15726: # 1739 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: 15726: _If_sv<_Tp, basic_string&> 15726: assign(const _Tp& __svt) 15726: { 15726: __sv_type __sv = __svt; 15726: return this->assign(__sv.data(), __sv.size()); 15726: } 15726: # 1755 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: 15726: _If_sv<_Tp, basic_string&> 15726: assign(const _Tp& __svt, size_type __pos, size_type __n = npos) 15726: { 15726: __sv_type __sv = __svt; 15726: return _M_replace(size_type(0), this->size(), 15726: __sv.data() 15726: + std::__sv_check(__sv.size(), __pos, "basic_string::assign"), 15726: std::__sv_limit(__sv.size(), __pos, __n)); 15726: } 15726: # 1784 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: iterator 15726: insert(const_iterator __p, size_type __n, _CharT __c) 15726: { 15726: ; 15726: const size_type __pos = __p - begin(); 15726: this->replace(__p, __p, __n, __c); 15726: return iterator(this->_M_data() + __pos); 15726: } 15726: # 1827 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template> 15726: 15726: iterator 15726: insert(const_iterator __p, _InputIterator __beg, _InputIterator __end) 15726: { 15726: ; 15726: const size_type __pos = __p - begin(); 15726: this->replace(__p, __p, __beg, __end); 15726: return iterator(this->_M_data() + __pos); 15726: } 15726: # 1864 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: iterator 15726: insert(const_iterator __p, initializer_list<_CharT> __l) 15726: { return this->insert(__p, __l.begin(), __l.end()); } 15726: # 1892 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: insert(size_type __pos1, const basic_string& __str) 15726: { return this->replace(__pos1, size_type(0), 15726: __str._M_data(), __str.size()); } 15726: # 1916 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: insert(size_type __pos1, const basic_string& __str, 15726: size_type __pos2, size_type __n = npos) 15726: { return this->replace(__pos1, size_type(0), __str._M_data() 15726: + __str._M_check(__pos2, "basic_string::insert"), 15726: __str._M_limit(__pos2, __n)); } 15726: # 1940 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: insert(size_type __pos, const _CharT* __s, size_type __n) 15726: { return this->replace(__pos, size_type(0), __s, __n); } 15726: # 1960 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: insert(size_type __pos, const _CharT* __s) 15726: { 15726: ; 15726: return this->replace(__pos, size_type(0), __s, 15726: traits_type::length(__s)); 15726: } 15726: # 1985 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: insert(size_type __pos, size_type __n, _CharT __c) 15726: { return _M_replace_aux(_M_check(__pos, "basic_string::insert"), 15726: size_type(0), __n, __c); } 15726: # 2004 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: iterator 15726: insert(__const_iterator __p, _CharT __c) 15726: { 15726: ; 15726: const size_type __pos = __p - begin(); 15726: _M_replace_aux(__pos, size_type(0), size_type(1), __c); 15726: return iterator(_M_data() + __pos); 15726: } 15726: # 2021 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: 15726: _If_sv<_Tp, basic_string&> 15726: insert(size_type __pos, const _Tp& __svt) 15726: { 15726: __sv_type __sv = __svt; 15726: return this->insert(__pos, __sv.data(), __sv.size()); 15726: } 15726: # 2038 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: 15726: _If_sv<_Tp, basic_string&> 15726: insert(size_type __pos1, const _Tp& __svt, 15726: size_type __pos2, size_type __n = npos) 15726: { 15726: __sv_type __sv = __svt; 15726: return this->replace(__pos1, size_type(0), 15726: __sv.data() 15726: + std::__sv_check(__sv.size(), __pos2, "basic_string::insert"), 15726: std::__sv_limit(__sv.size(), __pos2, __n)); 15726: } 15726: # 2067 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: erase(size_type __pos = 0, size_type __n = npos) 15726: { 15726: _M_check(__pos, "basic_string::erase"); 15726: if (__n == npos) 15726: this->_M_set_length(__pos); 15726: else if (__n != 0) 15726: this->_M_erase(__pos, _M_limit(__pos, __n)); 15726: return *this; 15726: } 15726: # 2087 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: iterator 15726: erase(__const_iterator __position) 15726: { 15726: 15726: ; 15726: const size_type __pos = __position - begin(); 15726: this->_M_erase(__pos, size_type(1)); 15726: return iterator(_M_data() + __pos); 15726: } 15726: # 2107 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: iterator 15726: erase(__const_iterator __first, __const_iterator __last) 15726: { 15726: 15726: ; 15726: const size_type __pos = __first - begin(); 15726: if (__last == end()) 15726: this->_M_set_length(__pos); 15726: else 15726: this->_M_erase(__pos, __last - __first); 15726: return iterator(this->_M_data() + __pos); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: pop_back() noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(!empty())) __builtin_unreachable(); } while (false); 15726: _M_erase(size() - 1, 1); 15726: } 15726: # 2153 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: replace(size_type __pos, size_type __n, const basic_string& __str) 15726: { return this->replace(__pos, __n, __str._M_data(), __str.size()); } 15726: # 2176 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: replace(size_type __pos1, size_type __n1, const basic_string& __str, 15726: size_type __pos2, size_type __n2 = npos) 15726: { return this->replace(__pos1, __n1, __str._M_data() 15726: + __str._M_check(__pos2, "basic_string::replace"), 15726: __str._M_limit(__pos2, __n2)); } 15726: # 2202 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: replace(size_type __pos, size_type __n1, const _CharT* __s, 15726: size_type __n2) 15726: { 15726: ; 15726: return _M_replace(_M_check(__pos, "basic_string::replace"), 15726: _M_limit(__pos, __n1), __s, __n2); 15726: } 15726: # 2228 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: replace(size_type __pos, size_type __n1, const _CharT* __s) 15726: { 15726: ; 15726: return this->replace(__pos, __n1, __s, traits_type::length(__s)); 15726: } 15726: # 2253 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c) 15726: { return _M_replace_aux(_M_check(__pos, "basic_string::replace"), 15726: _M_limit(__pos, __n1), __n2, __c); } 15726: # 2272 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: replace(__const_iterator __i1, __const_iterator __i2, 15726: const basic_string& __str) 15726: { return this->replace(__i1, __i2, __str._M_data(), __str.size()); } 15726: # 2293 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: replace(__const_iterator __i1, __const_iterator __i2, 15726: const _CharT* __s, size_type __n) 15726: { 15726: 15726: ; 15726: return this->replace(__i1 - begin(), __i2 - __i1, __s, __n); 15726: } 15726: # 2316 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: replace(__const_iterator __i1, __const_iterator __i2, const _CharT* __s) 15726: { 15726: ; 15726: return this->replace(__i1, __i2, __s, traits_type::length(__s)); 15726: } 15726: # 2338 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: replace(__const_iterator __i1, __const_iterator __i2, size_type __n, 15726: _CharT __c) 15726: { 15726: 15726: ; 15726: return _M_replace_aux(__i1 - begin(), __i2 - __i1, __n, __c); 15726: } 15726: # 2364 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template> 15726: 15726: basic_string& 15726: replace(const_iterator __i1, const_iterator __i2, 15726: _InputIterator __k1, _InputIterator __k2) 15726: { 15726: 15726: ; 15726: ; 15726: return this->_M_replace_dispatch(__i1, __i2, __k1, __k2, 15726: std::__false_type()); 15726: } 15726: # 2397 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& 15726: replace(__const_iterator __i1, __const_iterator __i2, 15726: _CharT* __k1, _CharT* __k2) 15726: { 15726: 15726: ; 15726: ; 15726: return this->replace(__i1 - begin(), __i2 - __i1, 15726: __k1, __k2 - __k1); 15726: } 15726: 15726: 15726: basic_string& 15726: replace(__const_iterator __i1, __const_iterator __i2, 15726: const _CharT* __k1, const _CharT* __k2) 15726: { 15726: 15726: ; 15726: ; 15726: return this->replace(__i1 - begin(), __i2 - __i1, 15726: __k1, __k2 - __k1); 15726: } 15726: 15726: 15726: basic_string& 15726: replace(__const_iterator __i1, __const_iterator __i2, 15726: iterator __k1, iterator __k2) 15726: { 15726: 15726: ; 15726: ; 15726: return this->replace(__i1 - begin(), __i2 - __i1, 15726: __k1.base(), __k2 - __k1); 15726: } 15726: 15726: 15726: basic_string& 15726: replace(__const_iterator __i1, __const_iterator __i2, 15726: const_iterator __k1, const_iterator __k2) 15726: { 15726: 15726: ; 15726: ; 15726: return this->replace(__i1 - begin(), __i2 - __i1, 15726: __k1.base(), __k2 - __k1); 15726: } 15726: # 2460 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: basic_string& replace(const_iterator __i1, const_iterator __i2, 15726: initializer_list<_CharT> __l) 15726: { return this->replace(__i1, __i2, __l.begin(), __l.size()); } 15726: # 2474 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: 15726: _If_sv<_Tp, basic_string&> 15726: replace(size_type __pos, size_type __n, const _Tp& __svt) 15726: { 15726: __sv_type __sv = __svt; 15726: return this->replace(__pos, __n, __sv.data(), __sv.size()); 15726: } 15726: # 2492 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: 15726: _If_sv<_Tp, basic_string&> 15726: replace(size_type __pos1, size_type __n1, const _Tp& __svt, 15726: size_type __pos2, size_type __n2 = npos) 15726: { 15726: __sv_type __sv = __svt; 15726: return this->replace(__pos1, __n1, 15726: __sv.data() 15726: + std::__sv_check(__sv.size(), __pos2, "basic_string::replace"), 15726: std::__sv_limit(__sv.size(), __pos2, __n2)); 15726: } 15726: # 2514 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: 15726: _If_sv<_Tp, basic_string&> 15726: replace(const_iterator __i1, const_iterator __i2, const _Tp& __svt) 15726: { 15726: __sv_type __sv = __svt; 15726: return this->replace(__i1 - begin(), __i2 - __i1, __sv); 15726: } 15726: 15726: 15726: private: 15726: template 15726: 15726: basic_string& 15726: _M_replace_dispatch(const_iterator __i1, const_iterator __i2, 15726: _Integer __n, _Integer __val, __true_type) 15726: { return _M_replace_aux(__i1 - begin(), __i2 - __i1, __n, __val); } 15726: 15726: template 15726: 15726: basic_string& 15726: _M_replace_dispatch(const_iterator __i1, const_iterator __i2, 15726: _InputIterator __k1, _InputIterator __k2, 15726: __false_type); 15726: 15726: 15726: basic_string& 15726: _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2, 15726: _CharT __c); 15726: 15726: __attribute__((__noinline__, __noclone__, __cold__)) void 15726: _M_replace_cold(pointer __p, size_type __len1, const _CharT* __s, 15726: const size_type __len2, const size_type __how_much); 15726: 15726: 15726: basic_string& 15726: _M_replace(size_type __pos, size_type __len1, const _CharT* __s, 15726: const size_type __len2); 15726: 15726: 15726: basic_string& 15726: _M_append(const _CharT* __s, size_type __n); 15726: 15726: public: 15726: # 2571 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: size_type 15726: copy(_CharT* __s, size_type __n, size_type __pos = 0) const; 15726: # 2582 "/usr/include/c++/13/bits/basic_string.h" 3 15726: 15726: void 15726: swap(basic_string& __s) noexcept; 15726: # 2593 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: const _CharT* 15726: c_str() const noexcept 15726: { return _M_data(); } 15726: # 2606 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: const _CharT* 15726: data() const noexcept 15726: { return _M_data(); } 15726: # 2618 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: _CharT* 15726: data() noexcept 15726: { return _M_data(); } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: allocator_type 15726: get_allocator() const noexcept 15726: { return _M_get_allocator(); } 15726: # 2644 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find(const _CharT* __s, size_type __pos, size_type __n) const 15726: noexcept; 15726: # 2659 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find(const basic_string& __str, size_type __pos = 0) const 15726: noexcept 15726: { return this->find(__str.data(), __pos, __str.size()); } 15726: # 2672 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: [[__nodiscard__]] 15726: _If_sv<_Tp, size_type> 15726: find(const _Tp& __svt, size_type __pos = 0) const 15726: noexcept(is_same<_Tp, __sv_type>::value) 15726: { 15726: __sv_type __sv = __svt; 15726: return this->find(__sv.data(), __pos, __sv.size()); 15726: } 15726: # 2693 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find(const _CharT* __s, size_type __pos = 0) const noexcept 15726: { 15726: ; 15726: return this->find(__s, __pos, traits_type::length(__s)); 15726: } 15726: # 2711 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find(_CharT __c, size_type __pos = 0) const noexcept; 15726: # 2725 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: rfind(const basic_string& __str, size_type __pos = npos) const 15726: noexcept 15726: { return this->rfind(__str.data(), __pos, __str.size()); } 15726: # 2738 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: [[__nodiscard__]] 15726: _If_sv<_Tp, size_type> 15726: rfind(const _Tp& __svt, size_type __pos = npos) const 15726: noexcept(is_same<_Tp, __sv_type>::value) 15726: { 15726: __sv_type __sv = __svt; 15726: return this->rfind(__sv.data(), __pos, __sv.size()); 15726: } 15726: # 2761 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: rfind(const _CharT* __s, size_type __pos, size_type __n) const 15726: noexcept; 15726: # 2776 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: rfind(const _CharT* __s, size_type __pos = npos) const 15726: { 15726: ; 15726: return this->rfind(__s, __pos, traits_type::length(__s)); 15726: } 15726: # 2794 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: rfind(_CharT __c, size_type __pos = npos) const noexcept; 15726: # 2809 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find_first_of(const basic_string& __str, size_type __pos = 0) const 15726: noexcept 15726: { return this->find_first_of(__str.data(), __pos, __str.size()); } 15726: # 2823 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: [[__nodiscard__]] 15726: _If_sv<_Tp, size_type> 15726: find_first_of(const _Tp& __svt, size_type __pos = 0) const 15726: noexcept(is_same<_Tp, __sv_type>::value) 15726: { 15726: __sv_type __sv = __svt; 15726: return this->find_first_of(__sv.data(), __pos, __sv.size()); 15726: } 15726: # 2846 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find_first_of(const _CharT* __s, size_type __pos, size_type __n) const 15726: noexcept; 15726: # 2861 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find_first_of(const _CharT* __s, size_type __pos = 0) const 15726: noexcept 15726: { 15726: ; 15726: return this->find_first_of(__s, __pos, traits_type::length(__s)); 15726: } 15726: # 2882 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find_first_of(_CharT __c, size_type __pos = 0) const noexcept 15726: { return this->find(__c, __pos); } 15726: # 2898 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find_last_of(const basic_string& __str, size_type __pos = npos) const 15726: noexcept 15726: { return this->find_last_of(__str.data(), __pos, __str.size()); } 15726: # 2912 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: [[__nodiscard__]] 15726: _If_sv<_Tp, size_type> 15726: find_last_of(const _Tp& __svt, size_type __pos = npos) const 15726: noexcept(is_same<_Tp, __sv_type>::value) 15726: { 15726: __sv_type __sv = __svt; 15726: return this->find_last_of(__sv.data(), __pos, __sv.size()); 15726: } 15726: # 2935 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find_last_of(const _CharT* __s, size_type __pos, size_type __n) const 15726: noexcept; 15726: # 2950 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find_last_of(const _CharT* __s, size_type __pos = npos) const 15726: noexcept 15726: { 15726: ; 15726: return this->find_last_of(__s, __pos, traits_type::length(__s)); 15726: } 15726: # 2971 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find_last_of(_CharT __c, size_type __pos = npos) const noexcept 15726: { return this->rfind(__c, __pos); } 15726: # 2986 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find_first_not_of(const basic_string& __str, size_type __pos = 0) const 15726: noexcept 15726: { return this->find_first_not_of(__str.data(), __pos, __str.size()); } 15726: # 3000 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: [[__nodiscard__]] 15726: _If_sv<_Tp, size_type> 15726: find_first_not_of(const _Tp& __svt, size_type __pos = 0) const 15726: noexcept(is_same<_Tp, __sv_type>::value) 15726: { 15726: __sv_type __sv = __svt; 15726: return this->find_first_not_of(__sv.data(), __pos, __sv.size()); 15726: } 15726: # 3023 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find_first_not_of(const _CharT* __s, size_type __pos, 15726: size_type __n) const noexcept; 15726: # 3038 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find_first_not_of(const _CharT* __s, size_type __pos = 0) const 15726: noexcept 15726: { 15726: ; 15726: return this->find_first_not_of(__s, __pos, traits_type::length(__s)); 15726: } 15726: # 3057 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find_first_not_of(_CharT __c, size_type __pos = 0) const 15726: noexcept; 15726: # 3073 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find_last_not_of(const basic_string& __str, size_type __pos = npos) const 15726: noexcept 15726: { return this->find_last_not_of(__str.data(), __pos, __str.size()); } 15726: # 3087 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: [[__nodiscard__]] 15726: _If_sv<_Tp, size_type> 15726: find_last_not_of(const _Tp& __svt, size_type __pos = npos) const 15726: noexcept(is_same<_Tp, __sv_type>::value) 15726: { 15726: __sv_type __sv = __svt; 15726: return this->find_last_not_of(__sv.data(), __pos, __sv.size()); 15726: } 15726: # 3110 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find_last_not_of(const _CharT* __s, size_type __pos, 15726: size_type __n) const noexcept; 15726: # 3125 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find_last_not_of(const _CharT* __s, size_type __pos = npos) const 15726: noexcept 15726: { 15726: ; 15726: return this->find_last_not_of(__s, __pos, traits_type::length(__s)); 15726: } 15726: # 3144 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: size_type 15726: find_last_not_of(_CharT __c, size_type __pos = npos) const 15726: noexcept; 15726: # 3161 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: basic_string 15726: substr(size_type __pos = 0, size_type __n = npos) const 15726: { return basic_string(*this, 15726: _M_check(__pos, "basic_string::substr"), __n); } 15726: # 3181 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: int 15726: compare(const basic_string& __str) const 15726: { 15726: const size_type __size = this->size(); 15726: const size_type __osize = __str.size(); 15726: const size_type __len = std::min(__size, __osize); 15726: 15726: int __r = traits_type::compare(_M_data(), __str.data(), __len); 15726: if (!__r) 15726: __r = _S_compare(__size, __osize); 15726: return __r; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: _If_sv<_Tp, int> 15726: compare(const _Tp& __svt) const 15726: noexcept(is_same<_Tp, __sv_type>::value) 15726: { 15726: __sv_type __sv = __svt; 15726: const size_type __size = this->size(); 15726: const size_type __osize = __sv.size(); 15726: const size_type __len = std::min(__size, __osize); 15726: 15726: int __r = traits_type::compare(_M_data(), __sv.data(), __len); 15726: if (!__r) 15726: __r = _S_compare(__size, __osize); 15726: return __r; 15726: } 15726: # 3226 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: [[__nodiscard__]] 15726: _If_sv<_Tp, int> 15726: compare(size_type __pos, size_type __n, const _Tp& __svt) const 15726: noexcept(is_same<_Tp, __sv_type>::value) 15726: { 15726: __sv_type __sv = __svt; 15726: return __sv_type(*this).substr(__pos, __n).compare(__sv); 15726: } 15726: # 3246 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: [[__nodiscard__]] 15726: _If_sv<_Tp, int> 15726: compare(size_type __pos1, size_type __n1, const _Tp& __svt, 15726: size_type __pos2, size_type __n2 = npos) const 15726: noexcept(is_same<_Tp, __sv_type>::value) 15726: { 15726: __sv_type __sv = __svt; 15726: return __sv_type(*this) 15726: .substr(__pos1, __n1).compare(__sv.substr(__pos2, __n2)); 15726: } 15726: # 3278 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: int 15726: compare(size_type __pos, size_type __n, const basic_string& __str) const 15726: { 15726: _M_check(__pos, "basic_string::compare"); 15726: __n = _M_limit(__pos, __n); 15726: const size_type __osize = __str.size(); 15726: const size_type __len = std::min(__n, __osize); 15726: int __r = traits_type::compare(_M_data() + __pos, __str.data(), __len); 15726: if (!__r) 15726: __r = _S_compare(__n, __osize); 15726: return __r; 15726: } 15726: # 3315 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: int 15726: compare(size_type __pos1, size_type __n1, const basic_string& __str, 15726: size_type __pos2, size_type __n2 = npos) const 15726: { 15726: _M_check(__pos1, "basic_string::compare"); 15726: __str._M_check(__pos2, "basic_string::compare"); 15726: __n1 = _M_limit(__pos1, __n1); 15726: __n2 = __str._M_limit(__pos2, __n2); 15726: const size_type __len = std::min(__n1, __n2); 15726: int __r = traits_type::compare(_M_data() + __pos1, 15726: __str.data() + __pos2, __len); 15726: if (!__r) 15726: __r = _S_compare(__n1, __n2); 15726: return __r; 15726: } 15726: # 3346 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: int 15726: compare(const _CharT* __s) const noexcept 15726: { 15726: ; 15726: const size_type __size = this->size(); 15726: const size_type __osize = traits_type::length(__s); 15726: const size_type __len = std::min(__size, __osize); 15726: int __r = traits_type::compare(_M_data(), __s, __len); 15726: if (!__r) 15726: __r = _S_compare(__size, __osize); 15726: return __r; 15726: } 15726: # 3381 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: int 15726: compare(size_type __pos, size_type __n1, const _CharT* __s) const 15726: { 15726: ; 15726: _M_check(__pos, "basic_string::compare"); 15726: __n1 = _M_limit(__pos, __n1); 15726: const size_type __osize = traits_type::length(__s); 15726: const size_type __len = std::min(__n1, __osize); 15726: int __r = traits_type::compare(_M_data() + __pos, __s, __len); 15726: if (!__r) 15726: __r = _S_compare(__n1, __osize); 15726: return __r; 15726: } 15726: # 3420 "/usr/include/c++/13/bits/basic_string.h" 3 15726: [[__nodiscard__]] 15726: int 15726: compare(size_type __pos, size_type __n1, const _CharT* __s, 15726: size_type __n2) const 15726: { 15726: ; 15726: _M_check(__pos, "basic_string::compare"); 15726: __n1 = _M_limit(__pos, __n1); 15726: const size_type __len = std::min(__n1, __n2); 15726: int __r = traits_type::compare(_M_data() + __pos, __s, __len); 15726: if (!__r) 15726: __r = _S_compare(__n1, __n2); 15726: return __r; 15726: } 15726: # 3485 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template friend class basic_stringbuf; 15726: }; 15726: } 15726: 15726: } 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: namespace __cxx11 { 15726: template::value_type, 15726: typename _Allocator = allocator<_CharT>, 15726: typename = _RequireInputIter<_InputIterator>, 15726: typename = _RequireAllocator<_Allocator>> 15726: basic_string(_InputIterator, _InputIterator, _Allocator = _Allocator()) 15726: -> basic_string<_CharT, char_traits<_CharT>, _Allocator>; 15726: 15726: 15726: 15726: template, 15726: typename = _RequireAllocator<_Allocator>> 15726: basic_string(basic_string_view<_CharT, _Traits>, const _Allocator& = _Allocator()) 15726: -> basic_string<_CharT, _Traits, _Allocator>; 15726: 15726: template, 15726: typename = _RequireAllocator<_Allocator>> 15726: basic_string(basic_string_view<_CharT, _Traits>, 15726: typename basic_string<_CharT, _Traits, _Allocator>::size_type, 15726: typename basic_string<_CharT, _Traits, _Allocator>::size_type, 15726: const _Allocator& = _Allocator()) 15726: -> basic_string<_CharT, _Traits, _Allocator>; 15726: } 15726: 15726: 15726: template 15726: 15726: inline _Str 15726: __str_concat(typename _Str::value_type const* __lhs, 15726: typename _Str::size_type __lhs_len, 15726: typename _Str::value_type const* __rhs, 15726: typename _Str::size_type __rhs_len, 15726: typename _Str::allocator_type const& __a) 15726: { 15726: typedef typename _Str::allocator_type allocator_type; 15726: typedef __gnu_cxx::__alloc_traits _Alloc_traits; 15726: _Str __str(_Alloc_traits::_S_select_on_copy(__a)); 15726: __str.reserve(__lhs_len + __rhs_len); 15726: __str.append(__lhs, __lhs_len); 15726: __str.append(__rhs, __rhs_len); 15726: return __str; 15726: } 15726: # 3550 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline basic_string<_CharT, _Traits, _Alloc> 15726: operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 15726: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 15726: { 15726: typedef basic_string<_CharT, _Traits, _Alloc> _Str; 15726: return std::__str_concat<_Str>(__lhs.c_str(), __lhs.size(), 15726: __rhs.c_str(), __rhs.size(), 15726: __lhs.get_allocator()); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline basic_string<_CharT,_Traits,_Alloc> 15726: operator+(const _CharT* __lhs, 15726: const basic_string<_CharT,_Traits,_Alloc>& __rhs) 15726: { 15726: ; 15726: typedef basic_string<_CharT, _Traits, _Alloc> _Str; 15726: return std::__str_concat<_Str>(__lhs, _Traits::length(__lhs), 15726: __rhs.c_str(), __rhs.size(), 15726: __rhs.get_allocator()); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline basic_string<_CharT,_Traits,_Alloc> 15726: operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs) 15726: { 15726: typedef basic_string<_CharT, _Traits, _Alloc> _Str; 15726: return std::__str_concat<_Str>(__builtin_addressof(__lhs), 1, 15726: __rhs.c_str(), __rhs.size(), 15726: __rhs.get_allocator()); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline basic_string<_CharT, _Traits, _Alloc> 15726: operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 15726: const _CharT* __rhs) 15726: { 15726: ; 15726: typedef basic_string<_CharT, _Traits, _Alloc> _Str; 15726: return std::__str_concat<_Str>(__lhs.c_str(), __lhs.size(), 15726: __rhs, _Traits::length(__rhs), 15726: __lhs.get_allocator()); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline basic_string<_CharT, _Traits, _Alloc> 15726: operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs) 15726: { 15726: typedef basic_string<_CharT, _Traits, _Alloc> _Str; 15726: return std::__str_concat<_Str>(__lhs.c_str(), __lhs.size(), 15726: __builtin_addressof(__rhs), 1, 15726: __lhs.get_allocator()); 15726: } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline basic_string<_CharT, _Traits, _Alloc> 15726: operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, 15726: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 15726: { return std::move(__lhs.append(__rhs)); } 15726: 15726: template 15726: 15726: inline basic_string<_CharT, _Traits, _Alloc> 15726: operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 15726: basic_string<_CharT, _Traits, _Alloc>&& __rhs) 15726: { return std::move(__rhs.insert(0, __lhs)); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline basic_string<_CharT, _Traits, _Alloc> 15726: operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, 15726: basic_string<_CharT, _Traits, _Alloc>&& __rhs) 15726: { 15726: 15726: using _Alloc_traits = allocator_traits<_Alloc>; 15726: bool __use_rhs = false; 15726: if constexpr (typename _Alloc_traits::is_always_equal{}) 15726: __use_rhs = true; 15726: else if (__lhs.get_allocator() == __rhs.get_allocator()) 15726: __use_rhs = true; 15726: if (__use_rhs) 15726: 15726: { 15726: const auto __size = __lhs.size() + __rhs.size(); 15726: if (__size > __lhs.capacity() && __size <= __rhs.capacity()) 15726: return std::move(__rhs.insert(0, __lhs)); 15726: } 15726: return std::move(__lhs.append(__rhs)); 15726: } 15726: 15726: template 15726: [[__nodiscard__]] [[__nodiscard__]] 15726: inline basic_string<_CharT, _Traits, _Alloc> 15726: operator+(const _CharT* __lhs, 15726: basic_string<_CharT, _Traits, _Alloc>&& __rhs) 15726: { return std::move(__rhs.insert(0, __lhs)); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline basic_string<_CharT, _Traits, _Alloc> 15726: operator+(_CharT __lhs, 15726: basic_string<_CharT, _Traits, _Alloc>&& __rhs) 15726: { return std::move(__rhs.insert(0, 1, __lhs)); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline basic_string<_CharT, _Traits, _Alloc> 15726: operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, 15726: const _CharT* __rhs) 15726: { return std::move(__lhs.append(__rhs)); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline basic_string<_CharT, _Traits, _Alloc> 15726: operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, 15726: _CharT __rhs) 15726: { return std::move(__lhs.append(1, __rhs)); } 15726: # 3707 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 15726: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 15726: noexcept 15726: { 15726: return __lhs.size() == __rhs.size() 15726: && !_Traits::compare(__lhs.data(), __rhs.data(), __lhs.size()); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 15726: const _CharT* __rhs) 15726: { 15726: return __lhs.size() == _Traits::length(__rhs) 15726: && !_Traits::compare(__lhs.data(), __rhs, __lhs.size()); 15726: } 15726: # 3771 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator==(const _CharT* __lhs, 15726: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 15726: { return __rhs == __lhs; } 15726: # 3785 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 15726: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 15726: noexcept 15726: { return !(__lhs == __rhs); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator!=(const _CharT* __lhs, 15726: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 15726: { return !(__rhs == __lhs); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 15726: const _CharT* __rhs) 15726: { return !(__lhs == __rhs); } 15726: # 3826 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 15726: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 15726: noexcept 15726: { return __lhs.compare(__rhs) < 0; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 15726: const _CharT* __rhs) 15726: { return __lhs.compare(__rhs) < 0; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<(const _CharT* __lhs, 15726: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 15726: { return __rhs.compare(__lhs) > 0; } 15726: # 3867 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 15726: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 15726: noexcept 15726: { return __lhs.compare(__rhs) > 0; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 15726: const _CharT* __rhs) 15726: { return __lhs.compare(__rhs) > 0; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator>(const _CharT* __lhs, 15726: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 15726: { return __rhs.compare(__lhs) < 0; } 15726: # 3908 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 15726: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 15726: noexcept 15726: { return __lhs.compare(__rhs) <= 0; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 15726: const _CharT* __rhs) 15726: { return __lhs.compare(__rhs) <= 0; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<=(const _CharT* __lhs, 15726: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 15726: { return __rhs.compare(__lhs) >= 0; } 15726: # 3949 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 15726: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 15726: noexcept 15726: { return __lhs.compare(__rhs) >= 0; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 15726: const _CharT* __rhs) 15726: { return __lhs.compare(__rhs) >= 0; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator>=(const _CharT* __lhs, 15726: const basic_string<_CharT, _Traits, _Alloc>& __rhs) 15726: { return __rhs.compare(__lhs) <= 0; } 15726: # 3991 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: 15726: inline void 15726: swap(basic_string<_CharT, _Traits, _Alloc>& __lhs, 15726: basic_string<_CharT, _Traits, _Alloc>& __rhs) 15726: noexcept(noexcept(__lhs.swap(__rhs))) 15726: { __lhs.swap(__rhs); } 15726: # 4012 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: operator>>(basic_istream<_CharT, _Traits>& __is, 15726: basic_string<_CharT, _Traits, _Alloc>& __str); 15726: 15726: template<> 15726: basic_istream& 15726: operator>>(basic_istream& __is, basic_string& __str); 15726: # 4030 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: inline basic_ostream<_CharT, _Traits>& 15726: operator<<(basic_ostream<_CharT, _Traits>& __os, 15726: const basic_string<_CharT, _Traits, _Alloc>& __str) 15726: { 15726: 15726: 15726: return __ostream_insert(__os, __str.data(), __str.size()); 15726: } 15726: # 4053 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: getline(basic_istream<_CharT, _Traits>& __is, 15726: basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim); 15726: # 4070 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: inline basic_istream<_CharT, _Traits>& 15726: getline(basic_istream<_CharT, _Traits>& __is, 15726: basic_string<_CharT, _Traits, _Alloc>& __str) 15726: { return std::getline(__is, __str, __is.widen('\n')); } 15726: 15726: 15726: 15726: template 15726: inline basic_istream<_CharT, _Traits>& 15726: getline(basic_istream<_CharT, _Traits>&& __is, 15726: basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim) 15726: { return std::getline(__is, __str, __delim); } 15726: 15726: 15726: template 15726: inline basic_istream<_CharT, _Traits>& 15726: getline(basic_istream<_CharT, _Traits>&& __is, 15726: basic_string<_CharT, _Traits, _Alloc>& __str) 15726: { return std::getline(__is, __str); } 15726: 15726: 15726: template<> 15726: basic_istream& 15726: getline(basic_istream& __in, basic_string& __str, 15726: char __delim); 15726: 15726: 15726: template<> 15726: basic_istream& 15726: getline(basic_istream& __in, basic_string& __str, 15726: wchar_t __delim); 15726: 15726: 15726: 15726: } 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/ext/string_conversions.h" 1 3 15726: # 32 "/usr/include/c++/13/ext/string_conversions.h" 3 15726: 15726: # 33 "/usr/include/c++/13/ext/string_conversions.h" 3 15726: # 43 "/usr/include/c++/13/ext/string_conversions.h" 3 15726: # 1 "/usr/include/c++/13/cstdlib" 1 3 15726: # 39 "/usr/include/c++/13/cstdlib" 3 15726: 15726: # 40 "/usr/include/c++/13/cstdlib" 3 15726: # 44 "/usr/include/c++/13/ext/string_conversions.h" 2 3 15726: # 1 "/usr/include/c++/13/cwchar" 1 3 15726: # 39 "/usr/include/c++/13/cwchar" 3 15726: 15726: # 40 "/usr/include/c++/13/cwchar" 3 15726: # 45 "/usr/include/c++/13/ext/string_conversions.h" 2 3 15726: # 1 "/usr/include/c++/13/cstdio" 1 3 15726: # 39 "/usr/include/c++/13/cstdio" 3 15726: 15726: # 40 "/usr/include/c++/13/cstdio" 3 15726: 15726: 15726: # 1 "/usr/include/stdio.h" 1 3 4 15726: # 28 "/usr/include/stdio.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 15726: # 29 "/usr/include/stdio.h" 2 3 4 15726: 15726: extern "C" { 15726: 15726: 15726: 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 35 "/usr/include/stdio.h" 2 3 4 15726: 15726: 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stdarg.h" 1 3 4 15726: # 38 "/usr/include/stdio.h" 2 3 4 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/__fpos_t.h" 1 3 4 15726: # 10 "/usr/include/arm-linux-gnueabihf/bits/types/__fpos_t.h" 3 4 15726: typedef struct _G_fpos_t 15726: { 15726: __off_t __pos; 15726: __mbstate_t __state; 15726: } __fpos_t; 15726: # 41 "/usr/include/stdio.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/__fpos64_t.h" 1 3 4 15726: # 10 "/usr/include/arm-linux-gnueabihf/bits/types/__fpos64_t.h" 3 4 15726: typedef struct _G_fpos64_t 15726: { 15726: __off64_t __pos; 15726: __mbstate_t __state; 15726: } __fpos64_t; 15726: # 42 "/usr/include/stdio.h" 2 3 4 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_FILE.h" 1 3 4 15726: # 35 "/usr/include/arm-linux-gnueabihf/bits/types/struct_FILE.h" 3 4 15726: struct _IO_FILE; 15726: struct _IO_marker; 15726: struct _IO_codecvt; 15726: struct _IO_wide_data; 15726: 15726: 15726: 15726: 15726: typedef void _IO_lock_t; 15726: 15726: 15726: 15726: 15726: 15726: struct _IO_FILE 15726: { 15726: int _flags; 15726: 15726: 15726: char *_IO_read_ptr; 15726: char *_IO_read_end; 15726: char *_IO_read_base; 15726: char *_IO_write_base; 15726: char *_IO_write_ptr; 15726: char *_IO_write_end; 15726: char *_IO_buf_base; 15726: char *_IO_buf_end; 15726: 15726: 15726: char *_IO_save_base; 15726: char *_IO_backup_base; 15726: char *_IO_save_end; 15726: 15726: struct _IO_marker *_markers; 15726: 15726: struct _IO_FILE *_chain; 15726: 15726: int _fileno; 15726: int _flags2; 15726: __off_t _old_offset; 15726: 15726: 15726: unsigned short _cur_column; 15726: signed char _vtable_offset; 15726: char _shortbuf[1]; 15726: 15726: _IO_lock_t *_lock; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: __off64_t _offset; 15726: 15726: struct _IO_codecvt *_codecvt; 15726: struct _IO_wide_data *_wide_data; 15726: struct _IO_FILE *_freeres_list; 15726: void *_freeres_buf; 15726: size_t __pad5; 15726: int _mode; 15726: 15726: char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)]; 15726: }; 15726: # 45 "/usr/include/stdio.h" 2 3 4 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/cookie_io_functions_t.h" 1 3 4 15726: # 27 "/usr/include/arm-linux-gnueabihf/bits/types/cookie_io_functions_t.h" 3 4 15726: typedef __ssize_t cookie_read_function_t (void *__cookie, char *__buf, 15726: size_t __nbytes); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef __ssize_t cookie_write_function_t (void *__cookie, const char *__buf, 15726: size_t __nbytes); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef int cookie_seek_function_t (void *__cookie, __off64_t *__pos, int __w); 15726: 15726: 15726: typedef int cookie_close_function_t (void *__cookie); 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef struct _IO_cookie_io_functions_t 15726: { 15726: cookie_read_function_t *read; 15726: cookie_write_function_t *write; 15726: cookie_seek_function_t *seek; 15726: cookie_close_function_t *close; 15726: } cookie_io_functions_t; 15726: # 48 "/usr/include/stdio.h" 2 3 4 15726: # 87 "/usr/include/stdio.h" 3 4 15726: typedef __fpos64_t fpos_t; 15726: 15726: 15726: typedef __fpos64_t fpos64_t; 15726: # 129 "/usr/include/stdio.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdio_lim.h" 1 3 4 15726: # 130 "/usr/include/stdio.h" 2 3 4 15726: # 149 "/usr/include/stdio.h" 3 4 15726: extern FILE *stdin; 15726: extern FILE *stdout; 15726: extern FILE *stderr; 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int remove (const char *__filename) noexcept (true); 15726: 15726: extern int rename (const char *__old, const char *__new) noexcept (true); 15726: 15726: 15726: 15726: extern int renameat (int __oldfd, const char *__old, int __newfd, 15726: const char *__new) noexcept (true); 15726: # 176 "/usr/include/stdio.h" 3 4 15726: extern int renameat2 (int __oldfd, const char *__old, int __newfd, 15726: const char *__new, unsigned int __flags) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int fclose (FILE *__stream) __attribute__ ((__nonnull__ (1))); 15726: # 198 "/usr/include/stdio.h" 3 4 15726: extern FILE *tmpfile (void) __asm__ ("" "tmpfile64") 15726: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern FILE *tmpfile64 (void) 15726: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: extern char *tmpnam (char[20]) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern char *tmpnam_r (char __s[20]) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: # 228 "/usr/include/stdio.h" 3 4 15726: extern char *tempnam (const char *__dir, const char *__pfx) 15726: noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__malloc__ (__builtin_free, 1))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int fflush (FILE *__stream); 15726: # 245 "/usr/include/stdio.h" 3 4 15726: extern int fflush_unlocked (FILE *__stream); 15726: # 255 "/usr/include/stdio.h" 3 4 15726: extern int fcloseall (void); 15726: # 276 "/usr/include/stdio.h" 3 4 15726: extern FILE *fopen (const char *__restrict __filename, const char *__restrict __modes) __asm__ ("" "fopen64") 15726: 15726: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__)); 15726: extern FILE *freopen (const char *__restrict __filename, const char *__restrict __modes, FILE *__restrict __stream) __asm__ ("" "freopen64") 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (3))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern FILE *fopen64 (const char *__restrict __filename, 15726: const char *__restrict __modes) 15726: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__)); 15726: extern FILE *freopen64 (const char *__restrict __filename, 15726: const char *__restrict __modes, 15726: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (3))); 15726: 15726: 15726: 15726: 15726: extern FILE *fdopen (int __fd, const char *__modes) noexcept (true) 15726: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: extern FILE *fopencookie (void *__restrict __magic_cookie, 15726: const char *__restrict __modes, 15726: cookie_io_functions_t __io_funcs) noexcept (true) 15726: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern FILE *fmemopen (void *__s, size_t __len, const char *__modes) 15726: noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) noexcept (true) 15726: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) noexcept (true) 15726: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))); 15726: 15726: 15726: 15726: 15726: 15726: extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) noexcept (true) 15726: __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf, 15726: int __modes, size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf, 15726: size_t __size) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern void setlinebuf (FILE *__stream) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int fprintf (FILE *__restrict __stream, 15726: const char *__restrict __format, ...) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: extern int printf (const char *__restrict __format, ...); 15726: 15726: extern int sprintf (char *__restrict __s, 15726: const char *__restrict __format, ...) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern int vfprintf (FILE *__restrict __s, const char *__restrict __format, 15726: __gnuc_va_list __arg) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg); 15726: 15726: extern int vsprintf (char *__restrict __s, const char *__restrict __format, 15726: __gnuc_va_list __arg) noexcept (true); 15726: 15726: 15726: 15726: extern int snprintf (char *__restrict __s, size_t __maxlen, 15726: const char *__restrict __format, ...) 15726: noexcept (true) __attribute__ ((__format__ (__printf__, 3, 4))); 15726: 15726: extern int vsnprintf (char *__restrict __s, size_t __maxlen, 15726: const char *__restrict __format, __gnuc_va_list __arg) 15726: noexcept (true) __attribute__ ((__format__ (__printf__, 3, 0))); 15726: 15726: 15726: 15726: 15726: 15726: extern int vasprintf (char **__restrict __ptr, const char *__restrict __f, 15726: __gnuc_va_list __arg) 15726: noexcept (true) __attribute__ ((__format__ (__printf__, 2, 0))) __attribute__ ((__warn_unused_result__)); 15726: extern int __asprintf (char **__restrict __ptr, 15726: const char *__restrict __fmt, ...) 15726: noexcept (true) __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__)); 15726: extern int asprintf (char **__restrict __ptr, 15726: const char *__restrict __fmt, ...) 15726: noexcept (true) __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern int vdprintf (int __fd, const char *__restrict __fmt, 15726: __gnuc_va_list __arg) 15726: __attribute__ ((__format__ (__printf__, 2, 0))); 15726: extern int dprintf (int __fd, const char *__restrict __fmt, ...) 15726: __attribute__ ((__format__ (__printf__, 2, 3))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int fscanf (FILE *__restrict __stream, 15726: const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: extern int scanf (const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__)); 15726: 15726: extern int sscanf (const char *__restrict __s, 15726: const char *__restrict __format, ...) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/floatn.h" 1 3 4 15726: # 438 "/usr/include/stdio.h" 2 3 4 15726: 15726: 15726: 15726: 15726: extern int fscanf (FILE *__restrict __stream, const char *__restrict __format, ...) __asm__ ("" "__isoc23_fscanf") 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 15726: extern int scanf (const char *__restrict __format, ...) __asm__ ("" "__isoc23_scanf") 15726: __attribute__ ((__warn_unused_result__)); 15726: extern int sscanf (const char *__restrict __s, const char *__restrict __format, ...) noexcept (true) __asm__ ("" "__isoc23_sscanf") 15726: 15726: ; 15726: # 490 "/usr/include/stdio.h" 3 4 15726: extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, 15726: __gnuc_va_list __arg) 15726: __attribute__ ((__format__ (__scanf__, 2, 0))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) 15726: __attribute__ ((__format__ (__scanf__, 1, 0))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: extern int vsscanf (const char *__restrict __s, 15726: const char *__restrict __format, __gnuc_va_list __arg) 15726: noexcept (true) __attribute__ ((__format__ (__scanf__, 2, 0))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc23_vfscanf") 15726: 15726: 15726: 15726: __attribute__ ((__format__ (__scanf__, 2, 0))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 15726: extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc23_vscanf") 15726: 15726: __attribute__ ((__format__ (__scanf__, 1, 0))) __attribute__ ((__warn_unused_result__)); 15726: extern int vsscanf (const char *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) noexcept (true) __asm__ ("" "__isoc23_vsscanf") 15726: 15726: 15726: 15726: __attribute__ ((__format__ (__scanf__, 2, 0))); 15726: # 575 "/usr/include/stdio.h" 3 4 15726: extern int fgetc (FILE *__stream) __attribute__ ((__nonnull__ (1))); 15726: extern int getc (FILE *__stream) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: extern int getchar (void); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int getc_unlocked (FILE *__stream) __attribute__ ((__nonnull__ (1))); 15726: extern int getchar_unlocked (void); 15726: # 600 "/usr/include/stdio.h" 3 4 15726: extern int fgetc_unlocked (FILE *__stream) __attribute__ ((__nonnull__ (1))); 15726: # 611 "/usr/include/stdio.h" 3 4 15726: extern int fputc (int __c, FILE *__stream) __attribute__ ((__nonnull__ (2))); 15726: extern int putc (int __c, FILE *__stream) __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: 15726: 15726: 15726: extern int putchar (int __c); 15726: # 627 "/usr/include/stdio.h" 3 4 15726: extern int fputc_unlocked (int __c, FILE *__stream) __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int putc_unlocked (int __c, FILE *__stream) __attribute__ ((__nonnull__ (2))); 15726: extern int putchar_unlocked (int __c); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int getw (FILE *__stream) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int putw (int __w, FILE *__stream) __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream) 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))) __attribute__ ((__nonnull__ (3))); 15726: # 677 "/usr/include/stdio.h" 3 4 15726: extern char *fgets_unlocked (char *__restrict __s, int __n, 15726: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)) 15726: __attribute__ ((__access__ (__write_only__, 1, 2))) __attribute__ ((__nonnull__ (3))); 15726: # 694 "/usr/include/stdio.h" 3 4 15726: extern __ssize_t __getdelim (char **__restrict __lineptr, 15726: size_t *__restrict __n, int __delimiter, 15726: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (4))); 15726: extern __ssize_t getdelim (char **__restrict __lineptr, 15726: size_t *__restrict __n, int __delimiter, 15726: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (4))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern __ssize_t getline (char **__restrict __lineptr, 15726: size_t *__restrict __n, 15726: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (3))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int fputs (const char *__restrict __s, FILE *__restrict __stream) 15726: __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: 15726: 15726: 15726: extern int puts (const char *__s); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int ungetc (int __c, FILE *__stream) __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern size_t fread (void *__restrict __ptr, size_t __size, 15726: size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)) 15726: __attribute__ ((__nonnull__ (4))); 15726: 15726: 15726: 15726: 15726: extern size_t fwrite (const void *__restrict __ptr, size_t __size, 15726: size_t __n, FILE *__restrict __s) __attribute__ ((__nonnull__ (4))); 15726: # 755 "/usr/include/stdio.h" 3 4 15726: extern int fputs_unlocked (const char *__restrict __s, 15726: FILE *__restrict __stream) __attribute__ ((__nonnull__ (2))); 15726: # 766 "/usr/include/stdio.h" 3 4 15726: extern size_t fread_unlocked (void *__restrict __ptr, size_t __size, 15726: size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)) 15726: __attribute__ ((__nonnull__ (4))); 15726: extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size, 15726: size_t __n, FILE *__restrict __stream) 15726: __attribute__ ((__nonnull__ (4))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int fseek (FILE *__stream, long int __off, int __whence) 15726: __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: extern long int ftell (FILE *__stream) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: extern void rewind (FILE *__stream) __attribute__ ((__nonnull__ (1))); 15726: # 812 "/usr/include/stdio.h" 3 4 15726: extern int fseeko (FILE *__stream, __off64_t __off, int __whence) __asm__ ("" "fseeko64") 15726: 15726: __attribute__ ((__nonnull__ (1))); 15726: extern __off64_t ftello (FILE *__stream) __asm__ ("" "ftello64") 15726: __attribute__ ((__nonnull__ (1))); 15726: # 838 "/usr/include/stdio.h" 3 4 15726: extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos) __asm__ ("" "fgetpos64") 15726: 15726: __attribute__ ((__nonnull__ (1))); 15726: extern int fsetpos (FILE *__stream, const fpos_t *__pos) __asm__ ("" "fsetpos64") 15726: 15726: __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence) 15726: __attribute__ ((__nonnull__ (1))); 15726: extern __off64_t ftello64 (FILE *__stream) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 15726: extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos) 15726: __attribute__ ((__nonnull__ (1))); 15726: extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern void clearerr (FILE *__stream) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: extern int feof (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 15726: 15726: extern int ferror (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern void clearerr_unlocked (FILE *__stream) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: extern int feof_unlocked (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 15726: extern int ferror_unlocked (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern void perror (const char *__s) __attribute__ ((__cold__)); 15726: 15726: 15726: 15726: 15726: extern int fileno (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: extern int fileno_unlocked (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 15726: # 897 "/usr/include/stdio.h" 3 4 15726: extern int pclose (FILE *__stream) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: extern FILE *popen (const char *__command, const char *__modes) 15726: __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (pclose, 1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern char *ctermid (char *__s) noexcept (true) 15726: __attribute__ ((__access__ (__write_only__, 1))); 15726: 15726: 15726: 15726: 15726: 15726: extern char *cuserid (char *__s) 15726: __attribute__ ((__access__ (__write_only__, 1))); 15726: 15726: 15726: 15726: 15726: struct obstack; 15726: 15726: 15726: extern int obstack_printf (struct obstack *__restrict __obstack, 15726: const char *__restrict __format, ...) 15726: noexcept (true) __attribute__ ((__format__ (__printf__, 2, 3))); 15726: extern int obstack_vprintf (struct obstack *__restrict __obstack, 15726: const char *__restrict __format, 15726: __gnuc_va_list __args) 15726: noexcept (true) __attribute__ ((__format__ (__printf__, 2, 0))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern void flockfile (FILE *__stream) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern int ftrylockfile (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern void funlockfile (FILE *__stream) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: # 959 "/usr/include/stdio.h" 3 4 15726: extern int __uflow (FILE *); 15726: extern int __overflow (FILE *, int); 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdio2-decl.h" 1 3 4 15726: # 26 "/usr/include/arm-linux-gnueabihf/bits/stdio2-decl.h" 3 4 15726: extern int __sprintf_chk (char *__restrict __s, int __flag, size_t __slen, 15726: const char *__restrict __format, ...) noexcept (true) 15726: __attribute__ ((__access__ (__write_only__, 1, 3))); 15726: extern int __vsprintf_chk (char *__restrict __s, int __flag, size_t __slen, 15726: const char *__restrict __format, 15726: __gnuc_va_list __ap) noexcept (true) 15726: __attribute__ ((__access__ (__write_only__, 1, 3))); 15726: 15726: 15726: 15726: extern int __snprintf_chk (char *__restrict __s, size_t __n, int __flag, 15726: size_t __slen, const char *__restrict __format, 15726: ...) noexcept (true) 15726: __attribute__ ((__access__ (__write_only__, 1, 2))); 15726: extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag, 15726: size_t __slen, const char *__restrict __format, 15726: __gnuc_va_list __ap) noexcept (true) 15726: __attribute__ ((__access__ (__write_only__, 1, 2))); 15726: 15726: 15726: 15726: 15726: 15726: extern int __fprintf_chk (FILE *__restrict __stream, int __flag, 15726: const char *__restrict __format, ...) 15726: __attribute__ ((__nonnull__ (1))); 15726: extern int __printf_chk (int __flag, const char *__restrict __format, ...); 15726: extern int __vfprintf_chk (FILE *__restrict __stream, int __flag, 15726: const char *__restrict __format, 15726: __gnuc_va_list __ap) __attribute__ ((__nonnull__ (1))); 15726: extern int __vprintf_chk (int __flag, const char *__restrict __format, 15726: __gnuc_va_list __ap); 15726: 15726: 15726: extern int __dprintf_chk (int __fd, int __flag, const char *__restrict __fmt, 15726: ...) __attribute__ ((__format__ (__printf__, 3, 4))); 15726: extern int __vdprintf_chk (int __fd, int __flag, 15726: const char *__restrict __fmt, __gnuc_va_list __arg) 15726: __attribute__ ((__format__ (__printf__, 3, 0))); 15726: 15726: 15726: 15726: 15726: extern int __asprintf_chk (char **__restrict __ptr, int __flag, 15726: const char *__restrict __fmt, ...) 15726: noexcept (true) __attribute__ ((__format__ (__printf__, 3, 4))) __attribute__ ((__warn_unused_result__)); 15726: extern int __vasprintf_chk (char **__restrict __ptr, int __flag, 15726: const char *__restrict __fmt, __gnuc_va_list __arg) 15726: noexcept (true) __attribute__ ((__format__ (__printf__, 3, 0))) __attribute__ ((__warn_unused_result__)); 15726: extern int __obstack_printf_chk (struct obstack *__restrict __obstack, 15726: int __flag, const char *__restrict __format, 15726: ...) 15726: noexcept (true) __attribute__ ((__format__ (__printf__, 3, 4))); 15726: extern int __obstack_vprintf_chk (struct obstack *__restrict __obstack, 15726: int __flag, 15726: const char *__restrict __format, 15726: __gnuc_va_list __args) 15726: noexcept (true) __attribute__ ((__format__ (__printf__, 3, 0))); 15726: # 96 "/usr/include/arm-linux-gnueabihf/bits/stdio2-decl.h" 3 4 15726: extern char *__fgets_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets") 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))); 15726: extern char *__fgets_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_chk") 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets called with bigger size than length " "of destination buffer"))) 15726: ; 15726: 15726: extern char *__fgets_chk (char *__restrict __s, size_t __size, int __n, 15726: FILE *__restrict __stream) 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__nonnull__ (4))); 15726: 15726: extern size_t __fread_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread") 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)); 15726: extern size_t __fread_chk_warn (void *__restrict __ptr, size_t __ptrlen, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "__fread_chk") 15726: 15726: 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread called with bigger size * nmemb than length " "of destination buffer"))) 15726: ; 15726: 15726: extern size_t __fread_chk (void *__restrict __ptr, size_t __ptrlen, 15726: size_t __size, size_t __n, 15726: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (5))); 15726: 15726: 15726: extern char *__fgets_unlocked_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets_unlocked") 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))); 15726: extern char *__fgets_unlocked_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_unlocked_chk") 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets_unlocked called with bigger size than length " "of destination buffer"))) 15726: ; 15726: 15726: 15726: extern char *__fgets_unlocked_chk (char *__restrict __s, size_t __size, 15726: int __n, FILE *__restrict __stream) 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__nonnull__ (4))); 15726: 15726: 15726: 15726: 15726: extern size_t __fread_unlocked_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread_unlocked") 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)); 15726: extern size_t __fread_unlocked_chk_warn (void *__restrict __ptr, size_t __ptrlen, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "__fread_unlocked_chk") 15726: 15726: 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread_unlocked called with bigger size * nmemb than " "length of destination buffer"))) 15726: ; 15726: 15726: extern size_t __fread_unlocked_chk (void *__restrict __ptr, size_t __ptrlen, 15726: size_t __size, size_t __n, 15726: FILE *__restrict __stream) 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (5))); 15726: # 965 "/usr/include/stdio.h" 2 3 4 15726: # 976 "/usr/include/stdio.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdio.h" 1 3 4 15726: # 46 "/usr/include/arm-linux-gnueabihf/bits/stdio.h" 3 4 15726: extern __inline __attribute__ ((__gnu_inline__)) int 15726: getchar (void) 15726: { 15726: return getc (stdin); 15726: } 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__gnu_inline__)) int 15726: fgetc_unlocked (FILE *__fp) 15726: { 15726: return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__gnu_inline__)) int 15726: getc_unlocked (FILE *__fp) 15726: { 15726: return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++); 15726: } 15726: 15726: 15726: extern __inline __attribute__ ((__gnu_inline__)) int 15726: getchar_unlocked (void) 15726: { 15726: return (__builtin_expect (((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end), 0) ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++); 15726: } 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__gnu_inline__)) int 15726: putchar (int __c) 15726: { 15726: return putc (__c, stdout); 15726: } 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__gnu_inline__)) int 15726: fputc_unlocked (int __c, FILE *__stream) 15726: { 15726: return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c))); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__gnu_inline__)) int 15726: putc_unlocked (int __c, FILE *__stream) 15726: { 15726: return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c))); 15726: } 15726: 15726: 15726: extern __inline __attribute__ ((__gnu_inline__)) int 15726: putchar_unlocked (int __c) 15726: { 15726: return (__builtin_expect (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end), 0) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c))); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__gnu_inline__)) __ssize_t 15726: getline (char **__lineptr, size_t *__n, FILE *__stream) 15726: { 15726: return __getdelim (__lineptr, __n, '\n', __stream); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__gnu_inline__)) int 15726: __attribute__ ((__leaf__)) feof_unlocked (FILE *__stream) noexcept (true) 15726: { 15726: return (((__stream)->_flags & 0x0010) != 0); 15726: } 15726: 15726: 15726: extern __inline __attribute__ ((__gnu_inline__)) int 15726: __attribute__ ((__leaf__)) ferror_unlocked (FILE *__stream) noexcept (true) 15726: { 15726: return (((__stream)->_flags & 0x0020) != 0); 15726: } 15726: # 977 "/usr/include/stdio.h" 2 3 4 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdio2.h" 1 3 4 15726: # 27 "/usr/include/arm-linux-gnueabihf/bits/stdio2.h" 3 4 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: __attribute__ ((__leaf__)) sprintf (char *__restrict __s, const char *__restrict __fmt, ...) noexcept (true) 15726: { 15726: return __builtin___sprintf_chk (__s, 2 - 1, 15726: __builtin_object_size (__s, 2 > 1), __fmt, 15726: __builtin_va_arg_pack ()); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: __attribute__ ((__leaf__)) vsprintf (char *__restrict __s, const char *__restrict __fmt, __gnuc_va_list __ap) noexcept (true) 15726: 15726: { 15726: return __builtin___vsprintf_chk (__s, 2 - 1, 15726: __builtin_object_size (__s, 2 > 1), __fmt, __ap); 15726: } 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: __attribute__ ((__leaf__)) snprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, ...) noexcept (true) 15726: 15726: { 15726: return __builtin___snprintf_chk (__s, __n, 2 - 1, 15726: __builtin_object_size (__s, 2 > 1), __fmt, 15726: __builtin_va_arg_pack ()); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: __attribute__ ((__leaf__)) vsnprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, __gnuc_va_list __ap) noexcept (true) 15726: 15726: { 15726: return __builtin___vsnprintf_chk (__s, __n, 2 - 1, 15726: __builtin_object_size (__s, 2 > 1), __fmt, __ap); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__nonnull__ (1))) int 15726: fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...) 15726: { 15726: return __fprintf_chk (__stream, 2 - 1, __fmt, 15726: __builtin_va_arg_pack ()); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: printf (const char *__restrict __fmt, ...) 15726: { 15726: return __printf_chk (2 - 1, __fmt, __builtin_va_arg_pack ()); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: vprintf (const char *__restrict __fmt, __gnuc_va_list __ap) 15726: { 15726: 15726: return __vfprintf_chk (stdout, 2 - 1, __fmt, __ap); 15726: 15726: 15726: 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__nonnull__ (1))) int 15726: vfprintf (FILE *__restrict __stream, 15726: const char *__restrict __fmt, __gnuc_va_list __ap) 15726: { 15726: return __vfprintf_chk (__stream, 2 - 1, __fmt, __ap); 15726: } 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: dprintf (int __fd, const char *__restrict __fmt, ...) 15726: { 15726: return __dprintf_chk (__fd, 2 - 1, __fmt, 15726: __builtin_va_arg_pack ()); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: vdprintf (int __fd, const char *__restrict __fmt, __gnuc_va_list __ap) 15726: { 15726: return __vdprintf_chk (__fd, 2 - 1, __fmt, __ap); 15726: } 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: __attribute__ ((__leaf__)) asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...) noexcept (true) 15726: { 15726: return __asprintf_chk (__ptr, 2 - 1, __fmt, 15726: __builtin_va_arg_pack ()); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: __attribute__ ((__leaf__)) __asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...) noexcept (true) 15726: 15726: { 15726: return __asprintf_chk (__ptr, 2 - 1, __fmt, 15726: __builtin_va_arg_pack ()); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: __attribute__ ((__leaf__)) obstack_printf (struct obstack *__restrict __obstack, const char *__restrict __fmt, ...) noexcept (true) 15726: 15726: { 15726: return __obstack_printf_chk (__obstack, 2 - 1, __fmt, 15726: __builtin_va_arg_pack ()); 15726: } 15726: # 165 "/usr/include/arm-linux-gnueabihf/bits/stdio2.h" 3 4 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: __attribute__ ((__leaf__)) vasprintf (char **__restrict __ptr, const char *__restrict __fmt, __gnuc_va_list __ap) noexcept (true) 15726: 15726: { 15726: return __vasprintf_chk (__ptr, 2 - 1, __fmt, __ap); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: __attribute__ ((__leaf__)) obstack_vprintf (struct obstack *__restrict __obstack, const char *__restrict __fmt, __gnuc_va_list __ap) noexcept (true) 15726: 15726: { 15726: return __obstack_vprintf_chk (__obstack, 2 - 1, __fmt, 15726: __ap); 15726: } 15726: # 194 "/usr/include/arm-linux-gnueabihf/bits/stdio2.h" 3 4 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))) 15726: __attribute__ ((__nonnull__ (3))) char * 15726: fgets (char *__restrict __s, int __n, FILE *__restrict __stream) 15726: { 15726: size_t sz = __builtin_object_size (__s, 2 > 1); 15726: if (((__builtin_constant_p (sz) && (sz) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((sz)) / ((sizeof (char))))) && (((unsigned int) (__n)) <= ((sz)) / ((sizeof (char))))))) 15726: return __fgets_alias (__s, __n, __stream); 15726: if ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (sz) / (sizeof (char)))) && !(((unsigned int) (__n)) <= (sz) / (sizeof (char))))) 15726: return __fgets_chk_warn (__s, sz, __n, __stream); 15726: return __fgets_chk (__s, sz, __n, __stream); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (4))) size_t 15726: fread (void *__restrict __ptr, size_t __size, size_t __n, 15726: FILE *__restrict __stream) 15726: { 15726: size_t sz = __builtin_object_size (__ptr, 0); 15726: if (((__builtin_constant_p (sz) && (sz) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((sz)) / ((__size)))) && (((unsigned int) (__n)) <= ((sz)) / ((__size)))))) 15726: return __fread_alias (__ptr, __size, __n, __stream); 15726: if ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (sz) / (__size))) && !(((unsigned int) (__n)) <= (sz) / (__size)))) 15726: return __fread_chk_warn (__ptr, sz, __size, __n, __stream); 15726: return __fread_chk (__ptr, sz, __size, __n, __stream); 15726: } 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))) 15726: __attribute__ ((__nonnull__ (3))) char * 15726: fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream) 15726: { 15726: size_t sz = __builtin_object_size (__s, 2 > 1); 15726: if (((__builtin_constant_p (sz) && (sz) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((sz)) / ((sizeof (char))))) && (((unsigned int) (__n)) <= ((sz)) / ((sizeof (char))))))) 15726: return __fgets_unlocked_alias (__s, __n, __stream); 15726: if ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (sz) / (sizeof (char)))) && !(((unsigned int) (__n)) <= (sz) / (sizeof (char))))) 15726: return __fgets_unlocked_chk_warn (__s, sz, __n, __stream); 15726: return __fgets_unlocked_chk (__s, sz, __n, __stream); 15726: } 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__nonnull__ (4))) size_t 15726: fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n, 15726: FILE *__restrict __stream) 15726: { 15726: size_t sz = __builtin_object_size (__ptr, 0); 15726: if (((__builtin_constant_p (sz) && (sz) == (unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= ((sz)) / ((__size)))) && (((unsigned int) (__n)) <= ((sz)) / ((__size)))))) 15726: { 15726: 15726: if (__builtin_constant_p (__size) 15726: && __builtin_constant_p (__n) 15726: && (__size | __n) < (((size_t) 1) << (8 * sizeof (size_t) / 2)) 15726: && __size * __n <= 8) 15726: { 15726: size_t __cnt = __size * __n; 15726: char *__cptr = (char *) __ptr; 15726: if (__cnt == 0) 15726: return 0; 15726: 15726: for (; __cnt > 0; --__cnt) 15726: { 15726: int __c = getc_unlocked (__stream); 15726: if (__c == (-1)) 15726: break; 15726: *__cptr++ = __c; 15726: } 15726: return (__cptr - (char *) __ptr) / __size; 15726: } 15726: 15726: return __fread_unlocked_alias (__ptr, __size, __n, __stream); 15726: } 15726: if ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((unsigned int) (__n)) <= (sz) / (__size))) && !(((unsigned int) (__n)) <= (sz) / (__size)))) 15726: return __fread_unlocked_chk_warn (__ptr, sz, __size, __n, __stream); 15726: return __fread_unlocked_chk (__ptr, sz, __size, __n, __stream); 15726: 15726: } 15726: # 981 "/usr/include/stdio.h" 2 3 4 15726: 15726: 15726: } 15726: # 43 "/usr/include/c++/13/cstdio" 2 3 15726: # 96 "/usr/include/c++/13/cstdio" 3 15726: namespace std 15726: { 15726: using ::FILE; 15726: using ::fpos_t; 15726: 15726: using ::clearerr; 15726: using ::fclose; 15726: using ::feof; 15726: using ::ferror; 15726: using ::fflush; 15726: using ::fgetc; 15726: using ::fgetpos; 15726: using ::fgets; 15726: using ::fopen; 15726: using ::fprintf; 15726: using ::fputc; 15726: using ::fputs; 15726: using ::fread; 15726: using ::freopen; 15726: using ::fscanf; 15726: using ::fseek; 15726: using ::fsetpos; 15726: using ::ftell; 15726: using ::fwrite; 15726: using ::getc; 15726: using ::getchar; 15726: 15726: 15726: 15726: 15726: using ::perror; 15726: using ::printf; 15726: using ::putc; 15726: using ::putchar; 15726: using ::puts; 15726: using ::remove; 15726: using ::rename; 15726: using ::rewind; 15726: using ::scanf; 15726: using ::setbuf; 15726: using ::setvbuf; 15726: using ::sprintf; 15726: using ::sscanf; 15726: using ::tmpfile; 15726: 15726: using ::tmpnam; 15726: 15726: using ::ungetc; 15726: using ::vfprintf; 15726: using ::vprintf; 15726: using ::vsprintf; 15726: } 15726: # 157 "/usr/include/c++/13/cstdio" 3 15726: namespace __gnu_cxx 15726: { 15726: # 175 "/usr/include/c++/13/cstdio" 3 15726: using ::snprintf; 15726: using ::vfscanf; 15726: using ::vscanf; 15726: using ::vsnprintf; 15726: using ::vsscanf; 15726: 15726: } 15726: 15726: namespace std 15726: { 15726: using ::__gnu_cxx::snprintf; 15726: using ::__gnu_cxx::vfscanf; 15726: using ::__gnu_cxx::vscanf; 15726: using ::__gnu_cxx::vsnprintf; 15726: using ::__gnu_cxx::vsscanf; 15726: } 15726: # 46 "/usr/include/c++/13/ext/string_conversions.h" 2 3 15726: # 1 "/usr/include/c++/13/cerrno" 1 3 15726: # 39 "/usr/include/c++/13/cerrno" 3 15726: 15726: # 40 "/usr/include/c++/13/cerrno" 3 15726: 15726: 15726: # 1 "/usr/include/errno.h" 1 3 4 15726: # 28 "/usr/include/errno.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/errno.h" 1 3 4 15726: # 26 "/usr/include/arm-linux-gnueabihf/bits/errno.h" 3 4 15726: # 1 "/usr/include/linux/errno.h" 1 3 4 15726: # 1 "/usr/lib/linux/uapi/arm/asm/errno.h" 1 3 4 15726: # 1 "/usr/include/asm-generic/errno.h" 1 3 4 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/asm-generic/errno-base.h" 1 3 4 15726: # 6 "/usr/include/asm-generic/errno.h" 2 3 4 15726: # 2 "/usr/lib/linux/uapi/arm/asm/errno.h" 2 3 4 15726: # 2 "/usr/include/linux/errno.h" 2 3 4 15726: # 27 "/usr/include/arm-linux-gnueabihf/bits/errno.h" 2 3 4 15726: # 29 "/usr/include/errno.h" 2 3 4 15726: 15726: 15726: 15726: 15726: 15726: extern "C" { 15726: 15726: 15726: extern int *__errno_location (void) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern char *program_invocation_name; 15726: extern char *program_invocation_short_name; 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/error_t.h" 1 3 4 15726: # 22 "/usr/include/arm-linux-gnueabihf/bits/types/error_t.h" 3 4 15726: typedef int error_t; 15726: # 49 "/usr/include/errno.h" 2 3 4 15726: 15726: 15726: 15726: } 15726: # 43 "/usr/include/c++/13/cerrno" 2 3 15726: # 47 "/usr/include/c++/13/ext/string_conversions.h" 2 3 15726: 15726: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: template 15726: _Ret 15726: __stoa(_TRet (*__convf) (const _CharT*, _CharT**, _Base...), 15726: const char* __name, const _CharT* __str, std::size_t* __idx, 15726: _Base... __base) 15726: { 15726: _Ret __ret; 15726: 15726: _CharT* __endptr; 15726: 15726: struct _Save_errno { 15726: _Save_errno() : _M_errno((*__errno_location ())) { (*__errno_location ()) = 0; } 15726: ~_Save_errno() { if ((*__errno_location ()) == 0) (*__errno_location ()) = _M_errno; } 15726: int _M_errno; 15726: } const __save_errno; 15726: 15726: struct _Range_chk { 15726: static bool 15726: _S_chk(_TRet, std::false_type) { return false; } 15726: 15726: static bool 15726: _S_chk(_TRet __val, std::true_type) 15726: { 15726: return __val < _TRet(__numeric_traits::__min) 15726: || __val > _TRet(__numeric_traits::__max); 15726: } 15726: }; 15726: 15726: const _TRet __tmp = __convf(__str, &__endptr, __base...); 15726: 15726: if (__endptr == __str) 15726: std::__throw_invalid_argument(__name); 15726: else if ((*__errno_location ()) == 34 15726: || _Range_chk::_S_chk(__tmp, std::is_same<_Ret, int>{})) 15726: std::__throw_out_of_range(__name); 15726: else 15726: __ret = __tmp; 15726: 15726: if (__idx) 15726: *__idx = __endptr - __str; 15726: 15726: return __ret; 15726: } 15726: 15726: 15726: template 15726: _String 15726: __to_xstring(int (*__convf) (_CharT*, std::size_t, const _CharT*, 15726: __builtin_va_list), std::size_t __n, 15726: const _CharT* __fmt, ...) 15726: { 15726: 15726: 15726: _CharT* __s = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) 15726: * __n)); 15726: 15726: __builtin_va_list __args; 15726: __builtin_va_start(__args, __fmt); 15726: 15726: const int __len = __convf(__s, __n, __fmt, __args); 15726: 15726: __builtin_va_end(__args); 15726: 15726: return _String(__s, __s + __len); 15726: } 15726: 15726: 15726: } 15726: # 4110 "/usr/include/c++/13/bits/basic_string.h" 2 3 15726: # 1 "/usr/include/c++/13/bits/charconv.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/charconv.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/charconv.h" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: namespace __detail 15726: { 15726: 15726: 15726: template 15726: constexpr bool __integer_to_chars_is_unsigned 15726: = ! __gnu_cxx::__int_traits<_Tp>::__is_signed; 15726: 15726: 15726: 15726: template 15726: constexpr unsigned 15726: __to_chars_len(_Tp __value, int __base = 10) noexcept 15726: { 15726: 15726: static_assert(__integer_to_chars_is_unsigned<_Tp>, "implementation bug"); 15726: 15726: 15726: unsigned __n = 1; 15726: const unsigned __b2 = __base * __base; 15726: const unsigned __b3 = __b2 * __base; 15726: const unsigned long __b4 = __b3 * __base; 15726: for (;;) 15726: { 15726: if (__value < (unsigned)__base) return __n; 15726: if (__value < __b2) return __n + 1; 15726: if (__value < __b3) return __n + 2; 15726: if (__value < __b4) return __n + 3; 15726: __value /= __b4; 15726: __n += 4; 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: void 15726: __to_chars_10_impl(char* __first, unsigned __len, _Tp __val) noexcept 15726: { 15726: 15726: static_assert(__integer_to_chars_is_unsigned<_Tp>, "implementation bug"); 15726: 15726: 15726: constexpr char __digits[201] = 15726: "0001020304050607080910111213141516171819" 15726: "2021222324252627282930313233343536373839" 15726: "4041424344454647484950515253545556575859" 15726: "6061626364656667686970717273747576777879" 15726: "8081828384858687888990919293949596979899"; 15726: unsigned __pos = __len - 1; 15726: while (__val >= 100) 15726: { 15726: auto const __num = (__val % 100) * 2; 15726: __val /= 100; 15726: __first[__pos] = __digits[__num + 1]; 15726: __first[__pos - 1] = __digits[__num]; 15726: __pos -= 2; 15726: } 15726: if (__val >= 10) 15726: { 15726: auto const __num = __val * 2; 15726: __first[1] = __digits[__num + 1]; 15726: __first[0] = __digits[__num]; 15726: } 15726: else 15726: __first[0] = '0' + __val; 15726: } 15726: 15726: } 15726: 15726: } 15726: # 4111 "/usr/include/c++/13/bits/basic_string.h" 2 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: namespace __cxx11 { 15726: 15726: 15726: 15726: inline int 15726: stoi(const string& __str, size_t* __idx = 0, int __base = 10) 15726: { return __gnu_cxx::__stoa(&std::strtol, "stoi", __str.c_str(), 15726: __idx, __base); } 15726: 15726: inline long 15726: stol(const string& __str, size_t* __idx = 0, int __base = 10) 15726: { return __gnu_cxx::__stoa(&std::strtol, "stol", __str.c_str(), 15726: __idx, __base); } 15726: 15726: inline unsigned long 15726: stoul(const string& __str, size_t* __idx = 0, int __base = 10) 15726: { return __gnu_cxx::__stoa(&std::strtoul, "stoul", __str.c_str(), 15726: __idx, __base); } 15726: 15726: inline long long 15726: stoll(const string& __str, size_t* __idx = 0, int __base = 10) 15726: { return __gnu_cxx::__stoa(&std::strtoll, "stoll", __str.c_str(), 15726: __idx, __base); } 15726: 15726: inline unsigned long long 15726: stoull(const string& __str, size_t* __idx = 0, int __base = 10) 15726: { return __gnu_cxx::__stoa(&std::strtoull, "stoull", __str.c_str(), 15726: __idx, __base); } 15726: 15726: 15726: inline float 15726: stof(const string& __str, size_t* __idx = 0) 15726: { return __gnu_cxx::__stoa(&std::strtof, "stof", __str.c_str(), __idx); } 15726: 15726: inline double 15726: stod(const string& __str, size_t* __idx = 0) 15726: { return __gnu_cxx::__stoa(&std::strtod, "stod", __str.c_str(), __idx); } 15726: 15726: inline long double 15726: stold(const string& __str, size_t* __idx = 0) 15726: { return __gnu_cxx::__stoa(&std::strtold, "stold", __str.c_str(), __idx); } 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: inline string 15726: to_string(int __val) 15726: 15726: noexcept 15726: 15726: { 15726: const bool __neg = __val < 0; 15726: const unsigned __uval = __neg ? (unsigned)~__val + 1u : __val; 15726: const auto __len = __detail::__to_chars_len(__uval); 15726: string __str(__neg + __len, '-'); 15726: __detail::__to_chars_10_impl(&__str[__neg], __len, __uval); 15726: return __str; 15726: } 15726: 15726: [[__nodiscard__]] 15726: inline string 15726: to_string(unsigned __val) 15726: 15726: noexcept 15726: 15726: { 15726: string __str(__detail::__to_chars_len(__val), '\0'); 15726: __detail::__to_chars_10_impl(&__str[0], __str.size(), __val); 15726: return __str; 15726: } 15726: 15726: [[__nodiscard__]] 15726: inline string 15726: to_string(long __val) 15726: 15726: noexcept 15726: 15726: { 15726: const bool __neg = __val < 0; 15726: const unsigned long __uval = __neg ? (unsigned long)~__val + 1ul : __val; 15726: const auto __len = __detail::__to_chars_len(__uval); 15726: string __str(__neg + __len, '-'); 15726: __detail::__to_chars_10_impl(&__str[__neg], __len, __uval); 15726: return __str; 15726: } 15726: 15726: [[__nodiscard__]] 15726: inline string 15726: to_string(unsigned long __val) 15726: 15726: noexcept 15726: 15726: { 15726: string __str(__detail::__to_chars_len(__val), '\0'); 15726: __detail::__to_chars_10_impl(&__str[0], __str.size(), __val); 15726: return __str; 15726: } 15726: 15726: [[__nodiscard__]] 15726: inline string 15726: to_string(long long __val) 15726: { 15726: const bool __neg = __val < 0; 15726: const unsigned long long __uval 15726: = __neg ? (unsigned long long)~__val + 1ull : __val; 15726: const auto __len = __detail::__to_chars_len(__uval); 15726: string __str(__neg + __len, '-'); 15726: __detail::__to_chars_10_impl(&__str[__neg], __len, __uval); 15726: return __str; 15726: } 15726: 15726: [[__nodiscard__]] 15726: inline string 15726: to_string(unsigned long long __val) 15726: { 15726: string __str(__detail::__to_chars_len(__val), '\0'); 15726: __detail::__to_chars_10_impl(&__str[0], __str.size(), __val); 15726: return __str; 15726: } 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: inline string 15726: to_string(float __val) 15726: { 15726: const int __n = 15726: __gnu_cxx::__numeric_traits::__max_exponent10 + 20; 15726: return __gnu_cxx::__to_xstring(&std::vsnprintf, __n, 15726: "%f", __val); 15726: } 15726: 15726: [[__nodiscard__]] 15726: inline string 15726: to_string(double __val) 15726: { 15726: const int __n = 15726: __gnu_cxx::__numeric_traits::__max_exponent10 + 20; 15726: return __gnu_cxx::__to_xstring(&std::vsnprintf, __n, 15726: "%f", __val); 15726: } 15726: 15726: [[__nodiscard__]] 15726: inline string 15726: to_string(long double __val) 15726: { 15726: const int __n = 15726: __gnu_cxx::__numeric_traits::__max_exponent10 + 20; 15726: return __gnu_cxx::__to_xstring(&std::vsnprintf, __n, 15726: "%Lf", __val); 15726: } 15726: 15726: 15726: 15726: inline int 15726: stoi(const wstring& __str, size_t* __idx = 0, int __base = 10) 15726: { return __gnu_cxx::__stoa(&std::wcstol, "stoi", __str.c_str(), 15726: __idx, __base); } 15726: 15726: inline long 15726: stol(const wstring& __str, size_t* __idx = 0, int __base = 10) 15726: { return __gnu_cxx::__stoa(&std::wcstol, "stol", __str.c_str(), 15726: __idx, __base); } 15726: 15726: inline unsigned long 15726: stoul(const wstring& __str, size_t* __idx = 0, int __base = 10) 15726: { return __gnu_cxx::__stoa(&std::wcstoul, "stoul", __str.c_str(), 15726: __idx, __base); } 15726: 15726: inline long long 15726: stoll(const wstring& __str, size_t* __idx = 0, int __base = 10) 15726: { return __gnu_cxx::__stoa(&std::wcstoll, "stoll", __str.c_str(), 15726: __idx, __base); } 15726: 15726: inline unsigned long long 15726: stoull(const wstring& __str, size_t* __idx = 0, int __base = 10) 15726: { return __gnu_cxx::__stoa(&std::wcstoull, "stoull", __str.c_str(), 15726: __idx, __base); } 15726: 15726: 15726: inline float 15726: stof(const wstring& __str, size_t* __idx = 0) 15726: { return __gnu_cxx::__stoa(&std::wcstof, "stof", __str.c_str(), __idx); } 15726: 15726: inline double 15726: stod(const wstring& __str, size_t* __idx = 0) 15726: { return __gnu_cxx::__stoa(&std::wcstod, "stod", __str.c_str(), __idx); } 15726: 15726: inline long double 15726: stold(const wstring& __str, size_t* __idx = 0) 15726: { return __gnu_cxx::__stoa(&std::wcstold, "stold", __str.c_str(), __idx); } 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: inline wstring 15726: to_wstring(int __val) 15726: { return __gnu_cxx::__to_xstring(&std::vswprintf, 4 * sizeof(int), 15726: L"%d", __val); } 15726: 15726: [[__nodiscard__]] 15726: inline wstring 15726: to_wstring(unsigned __val) 15726: { return __gnu_cxx::__to_xstring(&std::vswprintf, 15726: 4 * sizeof(unsigned), 15726: L"%u", __val); } 15726: 15726: [[__nodiscard__]] 15726: inline wstring 15726: to_wstring(long __val) 15726: { return __gnu_cxx::__to_xstring(&std::vswprintf, 4 * sizeof(long), 15726: L"%ld", __val); } 15726: 15726: [[__nodiscard__]] 15726: inline wstring 15726: to_wstring(unsigned long __val) 15726: { return __gnu_cxx::__to_xstring(&std::vswprintf, 15726: 4 * sizeof(unsigned long), 15726: L"%lu", __val); } 15726: 15726: [[__nodiscard__]] 15726: inline wstring 15726: to_wstring(long long __val) 15726: { return __gnu_cxx::__to_xstring(&std::vswprintf, 15726: 4 * sizeof(long long), 15726: L"%lld", __val); } 15726: 15726: [[__nodiscard__]] 15726: inline wstring 15726: to_wstring(unsigned long long __val) 15726: { return __gnu_cxx::__to_xstring(&std::vswprintf, 15726: 4 * sizeof(unsigned long long), 15726: L"%llu", __val); } 15726: 15726: [[__nodiscard__]] 15726: inline wstring 15726: to_wstring(float __val) 15726: { 15726: const int __n = 15726: __gnu_cxx::__numeric_traits::__max_exponent10 + 20; 15726: return __gnu_cxx::__to_xstring(&std::vswprintf, __n, 15726: L"%f", __val); 15726: } 15726: 15726: [[__nodiscard__]] 15726: inline wstring 15726: to_wstring(double __val) 15726: { 15726: const int __n = 15726: __gnu_cxx::__numeric_traits::__max_exponent10 + 20; 15726: return __gnu_cxx::__to_xstring(&std::vswprintf, __n, 15726: L"%f", __val); 15726: } 15726: 15726: [[__nodiscard__]] 15726: inline wstring 15726: to_wstring(long double __val) 15726: { 15726: const int __n = 15726: __gnu_cxx::__numeric_traits::__max_exponent10 + 20; 15726: return __gnu_cxx::__to_xstring(&std::vswprintf, __n, 15726: L"%Lf", __val); 15726: } 15726: 15726: 15726: 15726: } 15726: 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: template, _Alloc>> 15726: struct __str_hash_base 15726: : public __hash_base 15726: { 15726: [[__nodiscard__]] 15726: size_t 15726: operator()(const _StrT& __s) const noexcept 15726: { return _Hash_impl::hash(__s.data(), __s.length() * sizeof(_CharT)); } 15726: }; 15726: 15726: 15726: 15726: template 15726: struct hash, _Alloc>> 15726: : public __str_hash_base 15726: { }; 15726: 15726: 15726: template 15726: struct hash, _Alloc>> 15726: : public __str_hash_base 15726: { }; 15726: 15726: template 15726: struct __is_fast_hash, 15726: _Alloc>>> 15726: : std::false_type 15726: { }; 15726: # 4440 "/usr/include/c++/13/bits/basic_string.h" 3 15726: template 15726: struct hash, _Alloc>> 15726: : public __str_hash_base 15726: { }; 15726: 15726: 15726: template 15726: struct hash, _Alloc>> 15726: : public __str_hash_base 15726: { }; 15726: 15726: 15726: 15726: template<> struct __is_fast_hash> : std::false_type { }; 15726: template<> struct __is_fast_hash> : std::false_type { }; 15726: template<> struct __is_fast_hash> : std::false_type { }; 15726: template<> struct __is_fast_hash> : std::false_type { }; 15726: # 4472 "/usr/include/c++/13/bits/basic_string.h" 3 15726: inline namespace literals 15726: { 15726: inline namespace string_literals 15726: { 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wliteral-suffix" 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: inline basic_string 15726: operator""s(const char* __str, size_t __len) 15726: { return basic_string{__str, __len}; } 15726: 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: inline basic_string 15726: operator""s(const wchar_t* __str, size_t __len) 15726: { return basic_string{__str, __len}; } 15726: # 4502 "/usr/include/c++/13/bits/basic_string.h" 3 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: inline basic_string 15726: operator""s(const char16_t* __str, size_t __len) 15726: { return basic_string{__str, __len}; } 15726: 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: inline basic_string 15726: operator""s(const char32_t* __str, size_t __len) 15726: { return basic_string{__str, __len}; } 15726: 15726: 15726: #pragma GCC diagnostic pop 15726: } 15726: } 15726: 15726: 15726: namespace __detail::__variant 15726: { 15726: template struct _Never_valueless_alt; 15726: 15726: 15726: 15726: template 15726: struct _Never_valueless_alt> 15726: : __and_< 15726: is_nothrow_move_constructible>, 15726: is_nothrow_move_assignable> 15726: >::type 15726: { }; 15726: } 15726: 15726: 15726: 15726: 15726: } 15726: # 55 "/usr/include/c++/13/string" 2 3 15726: # 1 "/usr/include/c++/13/bits/basic_string.tcc" 1 3 15726: # 42 "/usr/include/c++/13/bits/basic_string.tcc" 3 15726: 15726: # 43 "/usr/include/c++/13/bits/basic_string.tcc" 3 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: template 15726: const typename basic_string<_CharT, _Traits, _Alloc>::size_type 15726: basic_string<_CharT, _Traits, _Alloc>::npos; 15726: 15726: template 15726: 15726: void 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: swap(basic_string& __s) noexcept 15726: { 15726: if (this == std::__addressof(__s)) 15726: return; 15726: 15726: _Alloc_traits::_S_on_swap(_M_get_allocator(), __s._M_get_allocator()); 15726: 15726: if (_M_is_local()) 15726: if (__s._M_is_local()) 15726: { 15726: if (length() && __s.length()) 15726: { 15726: _CharT __tmp_data[_S_local_capacity + 1]; 15726: traits_type::copy(__tmp_data, __s._M_local_buf, 15726: __s.length() + 1); 15726: traits_type::copy(__s._M_local_buf, _M_local_buf, 15726: length() + 1); 15726: traits_type::copy(_M_local_buf, __tmp_data, 15726: __s.length() + 1); 15726: } 15726: else if (__s.length()) 15726: { 15726: _M_init_local_buf(); 15726: traits_type::copy(_M_local_buf, __s._M_local_buf, 15726: __s.length() + 1); 15726: _M_length(__s.length()); 15726: __s._M_set_length(0); 15726: return; 15726: } 15726: else if (length()) 15726: { 15726: __s._M_init_local_buf(); 15726: traits_type::copy(__s._M_local_buf, _M_local_buf, 15726: length() + 1); 15726: __s._M_length(length()); 15726: _M_set_length(0); 15726: return; 15726: } 15726: } 15726: else 15726: { 15726: const size_type __tmp_capacity = __s._M_allocated_capacity; 15726: __s._M_init_local_buf(); 15726: traits_type::copy(__s._M_local_buf, _M_local_buf, 15726: length() + 1); 15726: _M_data(__s._M_data()); 15726: __s._M_data(__s._M_local_buf); 15726: _M_capacity(__tmp_capacity); 15726: } 15726: else 15726: { 15726: const size_type __tmp_capacity = _M_allocated_capacity; 15726: if (__s._M_is_local()) 15726: { 15726: _M_init_local_buf(); 15726: traits_type::copy(_M_local_buf, __s._M_local_buf, 15726: __s.length() + 1); 15726: __s._M_data(_M_data()); 15726: _M_data(_M_local_buf); 15726: } 15726: else 15726: { 15726: pointer __tmp_ptr = _M_data(); 15726: _M_data(__s._M_data()); 15726: __s._M_data(__tmp_ptr); 15726: _M_capacity(__s._M_allocated_capacity); 15726: } 15726: __s._M_capacity(__tmp_capacity); 15726: } 15726: 15726: const size_type __tmp_length = length(); 15726: _M_length(__s.length()); 15726: __s._M_length(__tmp_length); 15726: } 15726: 15726: template 15726: 15726: typename basic_string<_CharT, _Traits, _Alloc>::pointer 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: _M_create(size_type& __capacity, size_type __old_capacity) 15726: { 15726: 15726: 15726: if (__capacity > max_size()) 15726: std::__throw_length_error(("basic_string::_M_create")); 15726: 15726: 15726: 15726: 15726: if (__capacity > __old_capacity && __capacity < 2 * __old_capacity) 15726: { 15726: __capacity = 2 * __old_capacity; 15726: 15726: if (__capacity > max_size()) 15726: __capacity = max_size(); 15726: } 15726: 15726: 15726: 15726: return _S_allocate(_M_get_allocator(), __capacity + 1); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: template 15726: 15726: void 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: _M_construct(_InIterator __beg, _InIterator __end, 15726: std::input_iterator_tag) 15726: { 15726: size_type __len = 0; 15726: size_type __capacity = size_type(_S_local_capacity); 15726: 15726: _M_init_local_buf(); 15726: 15726: while (__beg != __end && __len < __capacity) 15726: { 15726: _M_local_buf[__len++] = *__beg; 15726: ++__beg; 15726: } 15726: 15726: struct _Guard 15726: { 15726: 15726: explicit _Guard(basic_string* __s) : _M_guarded(__s) { } 15726: 15726: 15726: ~_Guard() { if (_M_guarded) _M_guarded->_M_dispose(); } 15726: 15726: basic_string* _M_guarded; 15726: } __guard(this); 15726: 15726: while (__beg != __end) 15726: { 15726: if (__len == __capacity) 15726: { 15726: 15726: __capacity = __len + 1; 15726: pointer __another = _M_create(__capacity, __len); 15726: this->_S_copy(__another, _M_data(), __len); 15726: _M_dispose(); 15726: _M_data(__another); 15726: _M_capacity(__capacity); 15726: } 15726: traits_type::assign(_M_data()[__len++], *__beg); 15726: ++__beg; 15726: } 15726: 15726: __guard._M_guarded = 0; 15726: 15726: _M_set_length(__len); 15726: } 15726: 15726: template 15726: template 15726: 15726: void 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: _M_construct(_InIterator __beg, _InIterator __end, 15726: std::forward_iterator_tag) 15726: { 15726: size_type __dnew = static_cast(std::distance(__beg, __end)); 15726: 15726: if (__dnew > size_type(_S_local_capacity)) 15726: { 15726: _M_data(_M_create(__dnew, size_type(0))); 15726: _M_capacity(__dnew); 15726: } 15726: else 15726: _M_init_local_buf(); 15726: 15726: 15726: struct _Guard 15726: { 15726: 15726: explicit _Guard(basic_string* __s) : _M_guarded(__s) { } 15726: 15726: 15726: ~_Guard() { if (_M_guarded) _M_guarded->_M_dispose(); } 15726: 15726: basic_string* _M_guarded; 15726: } __guard(this); 15726: 15726: this->_S_copy_chars(_M_data(), __beg, __end); 15726: 15726: __guard._M_guarded = 0; 15726: 15726: _M_set_length(__dnew); 15726: } 15726: 15726: template 15726: 15726: void 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: _M_construct(size_type __n, _CharT __c) 15726: { 15726: if (__n > size_type(_S_local_capacity)) 15726: { 15726: _M_data(_M_create(__n, size_type(0))); 15726: _M_capacity(__n); 15726: } 15726: else 15726: _M_init_local_buf(); 15726: 15726: if (__n) 15726: this->_S_assign(_M_data(), __n, __c); 15726: 15726: _M_set_length(__n); 15726: } 15726: 15726: template 15726: 15726: void 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: _M_assign(const basic_string& __str) 15726: { 15726: if (this != std::__addressof(__str)) 15726: { 15726: const size_type __rsize = __str.length(); 15726: const size_type __capacity = capacity(); 15726: 15726: if (__rsize > __capacity) 15726: { 15726: size_type __new_capacity = __rsize; 15726: pointer __tmp = _M_create(__new_capacity, __capacity); 15726: _M_dispose(); 15726: _M_data(__tmp); 15726: _M_capacity(__new_capacity); 15726: } 15726: 15726: if (__rsize) 15726: this->_S_copy(_M_data(), __str._M_data(), __rsize); 15726: 15726: _M_set_length(__rsize); 15726: } 15726: } 15726: 15726: template 15726: 15726: void 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: reserve(size_type __res) 15726: { 15726: const size_type __capacity = capacity(); 15726: 15726: 15726: 15726: 15726: if (__res <= __capacity) 15726: return; 15726: 15726: pointer __tmp = _M_create(__res, __capacity); 15726: this->_S_copy(__tmp, _M_data(), length() + 1); 15726: _M_dispose(); 15726: _M_data(__tmp); 15726: _M_capacity(__res); 15726: } 15726: 15726: template 15726: 15726: void 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: _M_mutate(size_type __pos, size_type __len1, const _CharT* __s, 15726: size_type __len2) 15726: { 15726: const size_type __how_much = length() - __pos - __len1; 15726: 15726: size_type __new_capacity = length() + __len2 - __len1; 15726: pointer __r = _M_create(__new_capacity, capacity()); 15726: 15726: if (__pos) 15726: this->_S_copy(__r, _M_data(), __pos); 15726: if (__s && __len2) 15726: this->_S_copy(__r + __pos, __s, __len2); 15726: if (__how_much) 15726: this->_S_copy(__r + __pos + __len2, 15726: _M_data() + __pos + __len1, __how_much); 15726: 15726: _M_dispose(); 15726: _M_data(__r); 15726: _M_capacity(__new_capacity); 15726: } 15726: 15726: template 15726: 15726: void 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: _M_erase(size_type __pos, size_type __n) 15726: { 15726: const size_type __how_much = length() - __pos - __n; 15726: 15726: if (__how_much && __n) 15726: this->_S_move(_M_data() + __pos, _M_data() + __pos + __n, __how_much); 15726: 15726: _M_set_length(length() - __n); 15726: } 15726: 15726: template 15726: 15726: void 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: reserve() 15726: { 15726: if (_M_is_local()) 15726: return; 15726: 15726: const size_type __length = length(); 15726: const size_type __capacity = _M_allocated_capacity; 15726: 15726: if (__length <= size_type(_S_local_capacity)) 15726: { 15726: _M_init_local_buf(); 15726: this->_S_copy(_M_local_buf, _M_data(), __length + 1); 15726: _M_destroy(__capacity); 15726: _M_data(_M_local_data()); 15726: } 15726: 15726: else if (__length < __capacity) 15726: try 15726: { 15726: pointer __tmp = _S_allocate(_M_get_allocator(), __length + 1); 15726: this->_S_copy(__tmp, _M_data(), __length + 1); 15726: _M_dispose(); 15726: _M_data(__tmp); 15726: _M_capacity(__length); 15726: } 15726: catch (const __cxxabiv1::__forced_unwind&) 15726: { throw; } 15726: catch (...) 15726: { } 15726: 15726: } 15726: 15726: template 15726: 15726: void 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: resize(size_type __n, _CharT __c) 15726: { 15726: const size_type __size = this->size(); 15726: if (__size < __n) 15726: this->append(__n - __size, __c); 15726: else if (__n < __size) 15726: this->_M_set_length(__n); 15726: } 15726: 15726: template 15726: 15726: basic_string<_CharT, _Traits, _Alloc>& 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: _M_append(const _CharT* __s, size_type __n) 15726: { 15726: const size_type __len = __n + this->size(); 15726: 15726: if (__len <= this->capacity()) 15726: { 15726: if (__n) 15726: this->_S_copy(this->_M_data() + this->size(), __s, __n); 15726: } 15726: else 15726: this->_M_mutate(this->size(), size_type(0), __s, __n); 15726: 15726: this->_M_set_length(__len); 15726: return *this; 15726: } 15726: 15726: template 15726: template 15726: 15726: basic_string<_CharT, _Traits, _Alloc>& 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: _M_replace_dispatch(const_iterator __i1, const_iterator __i2, 15726: _InputIterator __k1, _InputIterator __k2, 15726: std::__false_type) 15726: { 15726: 15726: 15726: const basic_string __s(__k1, __k2, this->get_allocator()); 15726: const size_type __n1 = __i2 - __i1; 15726: return _M_replace(__i1 - begin(), __n1, __s._M_data(), 15726: __s.size()); 15726: } 15726: 15726: template 15726: 15726: basic_string<_CharT, _Traits, _Alloc>& 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2, 15726: _CharT __c) 15726: { 15726: _M_check_length(__n1, __n2, "basic_string::_M_replace_aux"); 15726: 15726: const size_type __old_size = this->size(); 15726: const size_type __new_size = __old_size + __n2 - __n1; 15726: 15726: if (__new_size <= this->capacity()) 15726: { 15726: pointer __p = this->_M_data() + __pos1; 15726: 15726: const size_type __how_much = __old_size - __pos1 - __n1; 15726: if (__how_much && __n1 != __n2) 15726: this->_S_move(__p + __n2, __p + __n1, __how_much); 15726: } 15726: else 15726: this->_M_mutate(__pos1, __n1, 0, __n2); 15726: 15726: if (__n2) 15726: this->_S_assign(this->_M_data() + __pos1, __n2, __c); 15726: 15726: this->_M_set_length(__new_size); 15726: return *this; 15726: } 15726: 15726: template 15726: __attribute__((__noinline__, __noclone__, __cold__)) void 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: _M_replace_cold(pointer __p, size_type __len1, const _CharT* __s, 15726: const size_type __len2, const size_type __how_much) 15726: { 15726: 15726: if (__len2 && __len2 <= __len1) 15726: this->_S_move(__p, __s, __len2); 15726: if (__how_much && __len1 != __len2) 15726: this->_S_move(__p + __len2, __p + __len1, __how_much); 15726: if (__len2 > __len1) 15726: { 15726: if (__s + __len2 <= __p + __len1) 15726: this->_S_move(__p, __s, __len2); 15726: else if (__s >= __p + __len1) 15726: { 15726: 15726: 15726: const size_type __poff = (__s - __p) + (__len2 - __len1); 15726: this->_S_copy(__p, __p + __poff, __len2); 15726: } 15726: else 15726: { 15726: const size_type __nleft = (__p + __len1) - __s; 15726: this->_S_move(__p, __s, __nleft); 15726: this->_S_copy(__p + __nleft, __p + __len2, __len2 - __nleft); 15726: } 15726: } 15726: } 15726: 15726: template 15726: 15726: basic_string<_CharT, _Traits, _Alloc>& 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: _M_replace(size_type __pos, size_type __len1, const _CharT* __s, 15726: const size_type __len2) 15726: { 15726: _M_check_length(__len1, __len2, "basic_string::_M_replace"); 15726: 15726: const size_type __old_size = this->size(); 15726: const size_type __new_size = __old_size + __len2 - __len1; 15726: 15726: if (__new_size <= this->capacity()) 15726: { 15726: pointer __p = this->_M_data() + __pos; 15726: 15726: const size_type __how_much = __old_size - __pos - __len1; 15726: # 537 "/usr/include/c++/13/bits/basic_string.tcc" 3 15726: if (__builtin_expect(_M_disjunct(__s), true)) 15726: { 15726: if (__how_much && __len1 != __len2) 15726: this->_S_move(__p + __len2, __p + __len1, __how_much); 15726: if (__len2) 15726: this->_S_copy(__p, __s, __len2); 15726: } 15726: else 15726: _M_replace_cold(__p, __len1, __s, __len2, __how_much); 15726: } 15726: else 15726: this->_M_mutate(__pos, __len1, __s, __len2); 15726: 15726: this->_M_set_length(__new_size); 15726: return *this; 15726: } 15726: 15726: template 15726: 15726: typename basic_string<_CharT, _Traits, _Alloc>::size_type 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: copy(_CharT* __s, size_type __n, size_type __pos) const 15726: { 15726: _M_check(__pos, "basic_string::copy"); 15726: __n = _M_limit(__pos, __n); 15726: ; 15726: if (__n) 15726: _S_copy(__s, _M_data() + __pos, __n); 15726: 15726: return __n; 15726: } 15726: # 615 "/usr/include/c++/13/bits/basic_string.tcc" 3 15726: template 15726: 15726: typename basic_string<_CharT, _Traits, _Alloc>::size_type 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: find(const _CharT* __s, size_type __pos, size_type __n) const 15726: noexcept 15726: { 15726: ; 15726: const size_type __size = this->size(); 15726: 15726: if (__n == 0) 15726: return __pos <= __size ? __pos : npos; 15726: if (__pos >= __size) 15726: return npos; 15726: 15726: const _CharT __elem0 = __s[0]; 15726: const _CharT* const __data = data(); 15726: const _CharT* __first = __data + __pos; 15726: const _CharT* const __last = __data + __size; 15726: size_type __len = __size - __pos; 15726: 15726: while (__len >= __n) 15726: { 15726: 15726: __first = traits_type::find(__first, __len - __n + 1, __elem0); 15726: if (!__first) 15726: return npos; 15726: 15726: 15726: 15726: if (traits_type::compare(__first, __s, __n) == 0) 15726: return __first - __data; 15726: __len = __last - ++__first; 15726: } 15726: return npos; 15726: } 15726: 15726: template 15726: 15726: typename basic_string<_CharT, _Traits, _Alloc>::size_type 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: find(_CharT __c, size_type __pos) const noexcept 15726: { 15726: size_type __ret = npos; 15726: const size_type __size = this->size(); 15726: if (__pos < __size) 15726: { 15726: const _CharT* __data = _M_data(); 15726: const size_type __n = __size - __pos; 15726: const _CharT* __p = traits_type::find(__data + __pos, __n, __c); 15726: if (__p) 15726: __ret = __p - __data; 15726: } 15726: return __ret; 15726: } 15726: 15726: template 15726: 15726: typename basic_string<_CharT, _Traits, _Alloc>::size_type 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: rfind(const _CharT* __s, size_type __pos, size_type __n) const 15726: noexcept 15726: { 15726: ; 15726: const size_type __size = this->size(); 15726: if (__n <= __size) 15726: { 15726: __pos = std::min(size_type(__size - __n), __pos); 15726: const _CharT* __data = _M_data(); 15726: do 15726: { 15726: if (traits_type::compare(__data + __pos, __s, __n) == 0) 15726: return __pos; 15726: } 15726: while (__pos-- > 0); 15726: } 15726: return npos; 15726: } 15726: 15726: template 15726: 15726: typename basic_string<_CharT, _Traits, _Alloc>::size_type 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: rfind(_CharT __c, size_type __pos) const noexcept 15726: { 15726: size_type __size = this->size(); 15726: if (__size) 15726: { 15726: if (--__size > __pos) 15726: __size = __pos; 15726: for (++__size; __size-- > 0; ) 15726: if (traits_type::eq(_M_data()[__size], __c)) 15726: return __size; 15726: } 15726: return npos; 15726: } 15726: 15726: template 15726: 15726: typename basic_string<_CharT, _Traits, _Alloc>::size_type 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: find_first_of(const _CharT* __s, size_type __pos, size_type __n) const 15726: noexcept 15726: { 15726: ; 15726: for (; __n && __pos < this->size(); ++__pos) 15726: { 15726: const _CharT* __p = traits_type::find(__s, __n, _M_data()[__pos]); 15726: if (__p) 15726: return __pos; 15726: } 15726: return npos; 15726: } 15726: 15726: template 15726: 15726: typename basic_string<_CharT, _Traits, _Alloc>::size_type 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: find_last_of(const _CharT* __s, size_type __pos, size_type __n) const 15726: noexcept 15726: { 15726: ; 15726: size_type __size = this->size(); 15726: if (__size && __n) 15726: { 15726: if (--__size > __pos) 15726: __size = __pos; 15726: do 15726: { 15726: if (traits_type::find(__s, __n, _M_data()[__size])) 15726: return __size; 15726: } 15726: while (__size-- != 0); 15726: } 15726: return npos; 15726: } 15726: 15726: template 15726: 15726: typename basic_string<_CharT, _Traits, _Alloc>::size_type 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const 15726: noexcept 15726: { 15726: ; 15726: for (; __pos < this->size(); ++__pos) 15726: if (!traits_type::find(__s, __n, _M_data()[__pos])) 15726: return __pos; 15726: return npos; 15726: } 15726: 15726: template 15726: 15726: typename basic_string<_CharT, _Traits, _Alloc>::size_type 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: find_first_not_of(_CharT __c, size_type __pos) const noexcept 15726: { 15726: for (; __pos < this->size(); ++__pos) 15726: if (!traits_type::eq(_M_data()[__pos], __c)) 15726: return __pos; 15726: return npos; 15726: } 15726: 15726: template 15726: 15726: typename basic_string<_CharT, _Traits, _Alloc>::size_type 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const 15726: noexcept 15726: { 15726: ; 15726: size_type __size = this->size(); 15726: if (__size) 15726: { 15726: if (--__size > __pos) 15726: __size = __pos; 15726: do 15726: { 15726: if (!traits_type::find(__s, __n, _M_data()[__size])) 15726: return __size; 15726: } 15726: while (__size--); 15726: } 15726: return npos; 15726: } 15726: 15726: template 15726: 15726: typename basic_string<_CharT, _Traits, _Alloc>::size_type 15726: basic_string<_CharT, _Traits, _Alloc>:: 15726: find_last_not_of(_CharT __c, size_type __pos) const noexcept 15726: { 15726: size_type __size = this->size(); 15726: if (__size) 15726: { 15726: if (--__size > __pos) 15726: __size = __pos; 15726: do 15726: { 15726: if (!traits_type::eq(_M_data()[__size], __c)) 15726: return __size; 15726: } 15726: while (__size--); 15726: } 15726: return npos; 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: operator>>(basic_istream<_CharT, _Traits>& __in, 15726: basic_string<_CharT, _Traits, _Alloc>& __str) 15726: { 15726: typedef basic_istream<_CharT, _Traits> __istream_type; 15726: typedef basic_string<_CharT, _Traits, _Alloc> __string_type; 15726: typedef typename __istream_type::ios_base __ios_base; 15726: typedef typename __istream_type::int_type __int_type; 15726: typedef typename __string_type::size_type __size_type; 15726: typedef ctype<_CharT> __ctype_type; 15726: typedef typename __ctype_type::ctype_base __ctype_base; 15726: 15726: __size_type __extracted = 0; 15726: typename __ios_base::iostate __err = __ios_base::goodbit; 15726: typename __istream_type::sentry __cerb(__in, false); 15726: if (__cerb) 15726: { 15726: try 15726: { 15726: 15726: __str.erase(); 15726: _CharT __buf[128]; 15726: __size_type __len = 0; 15726: const streamsize __w = __in.width(); 15726: const __size_type __n = __w > 0 ? static_cast<__size_type>(__w) 15726: : __str.max_size(); 15726: const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); 15726: const __int_type __eof = _Traits::eof(); 15726: __int_type __c = __in.rdbuf()->sgetc(); 15726: 15726: while (__extracted < __n 15726: && !_Traits::eq_int_type(__c, __eof) 15726: && !__ct.is(__ctype_base::space, 15726: _Traits::to_char_type(__c))) 15726: { 15726: if (__len == sizeof(__buf) / sizeof(_CharT)) 15726: { 15726: __str.append(__buf, sizeof(__buf) / sizeof(_CharT)); 15726: __len = 0; 15726: } 15726: __buf[__len++] = _Traits::to_char_type(__c); 15726: ++__extracted; 15726: __c = __in.rdbuf()->snextc(); 15726: } 15726: __str.append(__buf, __len); 15726: 15726: if (__extracted < __n && _Traits::eq_int_type(__c, __eof)) 15726: __err |= __ios_base::eofbit; 15726: __in.width(0); 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: __in._M_setstate(__ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { 15726: 15726: 15726: 15726: __in._M_setstate(__ios_base::badbit); 15726: } 15726: } 15726: 15726: if (!__extracted) 15726: __err |= __ios_base::failbit; 15726: if (__err) 15726: __in.setstate(__err); 15726: return __in; 15726: } 15726: 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: getline(basic_istream<_CharT, _Traits>& __in, 15726: basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim) 15726: { 15726: typedef basic_istream<_CharT, _Traits> __istream_type; 15726: typedef basic_string<_CharT, _Traits, _Alloc> __string_type; 15726: typedef typename __istream_type::ios_base __ios_base; 15726: typedef typename __istream_type::int_type __int_type; 15726: typedef typename __string_type::size_type __size_type; 15726: 15726: __size_type __extracted = 0; 15726: const __size_type __n = __str.max_size(); 15726: typename __ios_base::iostate __err = __ios_base::goodbit; 15726: typename __istream_type::sentry __cerb(__in, true); 15726: if (__cerb) 15726: { 15726: try 15726: { 15726: __str.erase(); 15726: const __int_type __idelim = _Traits::to_int_type(__delim); 15726: const __int_type __eof = _Traits::eof(); 15726: __int_type __c = __in.rdbuf()->sgetc(); 15726: 15726: while (__extracted < __n 15726: && !_Traits::eq_int_type(__c, __eof) 15726: && !_Traits::eq_int_type(__c, __idelim)) 15726: { 15726: __str += _Traits::to_char_type(__c); 15726: ++__extracted; 15726: __c = __in.rdbuf()->snextc(); 15726: } 15726: 15726: if (_Traits::eq_int_type(__c, __eof)) 15726: __err |= __ios_base::eofbit; 15726: else if (_Traits::eq_int_type(__c, __idelim)) 15726: { 15726: ++__extracted; 15726: __in.rdbuf()->sbumpc(); 15726: } 15726: else 15726: __err |= __ios_base::failbit; 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: __in._M_setstate(__ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { 15726: 15726: 15726: 15726: __in._M_setstate(__ios_base::badbit); 15726: } 15726: } 15726: if (!__extracted) 15726: __err |= __ios_base::failbit; 15726: if (__err) 15726: __in.setstate(__err); 15726: return __in; 15726: } 15726: # 969 "/usr/include/c++/13/bits/basic_string.tcc" 3 15726: extern template class basic_string; 15726: # 982 "/usr/include/c++/13/bits/basic_string.tcc" 3 15726: extern template 15726: basic_istream& 15726: operator>>(basic_istream&, string&); 15726: extern template 15726: basic_ostream& 15726: operator<<(basic_ostream&, const string&); 15726: extern template 15726: basic_istream& 15726: getline(basic_istream&, string&, char); 15726: extern template 15726: basic_istream& 15726: getline(basic_istream&, string&); 15726: 15726: 15726: 15726: extern template class basic_string; 15726: # 1008 "/usr/include/c++/13/bits/basic_string.tcc" 3 15726: extern template 15726: basic_istream& 15726: operator>>(basic_istream&, wstring&); 15726: extern template 15726: basic_ostream& 15726: operator<<(basic_ostream&, const wstring&); 15726: extern template 15726: basic_istream& 15726: getline(basic_istream&, wstring&, wchar_t); 15726: extern template 15726: basic_istream& 15726: getline(basic_istream&, wstring&); 15726: 15726: 15726: 15726: 15726: } 15726: # 56 "/usr/include/c++/13/string" 2 3 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: namespace pmr { 15726: template> 15726: using basic_string = std::basic_string<_CharT, _Traits, 15726: polymorphic_allocator<_CharT>>; 15726: using string = basic_string; 15726: 15726: 15726: 15726: using u16string = basic_string; 15726: using u32string = basic_string; 15726: using wstring = basic_string; 15726: } 15726: 15726: } 15726: # 16 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 15726: # 1 "/usr/include/c++/13/unordered_set" 1 3 15726: # 32 "/usr/include/c++/13/unordered_set" 3 15726: 15726: # 33 "/usr/include/c++/13/unordered_set" 3 15726: # 41 "/usr/include/c++/13/unordered_set" 3 15726: # 1 "/usr/include/c++/13/bits/unordered_set.h" 1 3 15726: # 38 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: template 15726: using __uset_traits = __detail::_Hashtable_traits<_Cache, true, true>; 15726: 15726: template, 15726: typename _Pred = std::equal_to<_Value>, 15726: typename _Alloc = std::allocator<_Value>, 15726: typename _Tr = __uset_traits<__cache_default<_Value, _Hash>::value>> 15726: using __uset_hashtable = _Hashtable<_Value, _Value, _Alloc, 15726: __detail::_Identity, _Pred, _Hash, 15726: __detail::_Mod_range_hashing, 15726: __detail::_Default_ranged_hash, 15726: __detail::_Prime_rehash_policy, _Tr>; 15726: 15726: 15726: template 15726: using __umset_traits = __detail::_Hashtable_traits<_Cache, true, false>; 15726: 15726: template, 15726: typename _Pred = std::equal_to<_Value>, 15726: typename _Alloc = std::allocator<_Value>, 15726: typename _Tr = __umset_traits<__cache_default<_Value, _Hash>::value>> 15726: using __umset_hashtable = _Hashtable<_Value, _Value, _Alloc, 15726: __detail::_Identity, 15726: _Pred, _Hash, 15726: __detail::_Mod_range_hashing, 15726: __detail::_Default_ranged_hash, 15726: __detail::_Prime_rehash_policy, _Tr>; 15726: 15726: template 15726: class unordered_multiset; 15726: # 100 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: template, 15726: typename _Pred = equal_to<_Value>, 15726: typename _Alloc = allocator<_Value>> 15726: class unordered_set 15726: { 15726: typedef __uset_hashtable<_Value, _Hash, _Pred, _Alloc> _Hashtable; 15726: _Hashtable _M_h; 15726: 15726: public: 15726: 15726: 15726: 15726: typedef typename _Hashtable::key_type key_type; 15726: typedef typename _Hashtable::value_type value_type; 15726: typedef typename _Hashtable::hasher hasher; 15726: typedef typename _Hashtable::key_equal key_equal; 15726: typedef typename _Hashtable::allocator_type allocator_type; 15726: 15726: 15726: 15726: 15726: typedef typename _Hashtable::pointer pointer; 15726: typedef typename _Hashtable::const_pointer const_pointer; 15726: typedef typename _Hashtable::reference reference; 15726: typedef typename _Hashtable::const_reference const_reference; 15726: typedef typename _Hashtable::iterator iterator; 15726: typedef typename _Hashtable::const_iterator const_iterator; 15726: typedef typename _Hashtable::local_iterator local_iterator; 15726: typedef typename _Hashtable::const_local_iterator const_local_iterator; 15726: typedef typename _Hashtable::size_type size_type; 15726: typedef typename _Hashtable::difference_type difference_type; 15726: 15726: 15726: 15726: using node_type = typename _Hashtable::node_type; 15726: using insert_return_type = typename _Hashtable::insert_return_type; 15726: 15726: 15726: 15726: 15726: 15726: unordered_set() = default; 15726: # 151 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: explicit 15726: unordered_set(size_type __n, 15726: const hasher& __hf = hasher(), 15726: const key_equal& __eql = key_equal(), 15726: const allocator_type& __a = allocator_type()) 15726: : _M_h(__n, __hf, __eql, __a) 15726: { } 15726: # 172 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: template 15726: unordered_set(_InputIterator __first, _InputIterator __last, 15726: size_type __n = 0, 15726: const hasher& __hf = hasher(), 15726: const key_equal& __eql = key_equal(), 15726: const allocator_type& __a = allocator_type()) 15726: : _M_h(__first, __last, __n, __hf, __eql, __a) 15726: { } 15726: 15726: 15726: unordered_set(const unordered_set&) = default; 15726: 15726: 15726: unordered_set(unordered_set&&) = default; 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: unordered_set(const allocator_type& __a) 15726: : _M_h(__a) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: unordered_set(const unordered_set& __uset, 15726: const allocator_type& __a) 15726: : _M_h(__uset._M_h, __a) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: unordered_set(unordered_set&& __uset, 15726: const allocator_type& __a) 15726: noexcept( noexcept(_Hashtable(std::move(__uset._M_h), __a)) ) 15726: : _M_h(std::move(__uset._M_h), __a) 15726: { } 15726: # 228 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: unordered_set(initializer_list __l, 15726: size_type __n = 0, 15726: const hasher& __hf = hasher(), 15726: const key_equal& __eql = key_equal(), 15726: const allocator_type& __a = allocator_type()) 15726: : _M_h(__l, __n, __hf, __eql, __a) 15726: { } 15726: 15726: unordered_set(size_type __n, const allocator_type& __a) 15726: : unordered_set(__n, hasher(), key_equal(), __a) 15726: { } 15726: 15726: unordered_set(size_type __n, const hasher& __hf, 15726: const allocator_type& __a) 15726: : unordered_set(__n, __hf, key_equal(), __a) 15726: { } 15726: 15726: template 15726: unordered_set(_InputIterator __first, _InputIterator __last, 15726: size_type __n, 15726: const allocator_type& __a) 15726: : unordered_set(__first, __last, __n, hasher(), key_equal(), __a) 15726: { } 15726: 15726: template 15726: unordered_set(_InputIterator __first, _InputIterator __last, 15726: size_type __n, const hasher& __hf, 15726: const allocator_type& __a) 15726: : unordered_set(__first, __last, __n, __hf, key_equal(), __a) 15726: { } 15726: 15726: unordered_set(initializer_list __l, 15726: size_type __n, 15726: const allocator_type& __a) 15726: : unordered_set(__l, __n, hasher(), key_equal(), __a) 15726: { } 15726: 15726: unordered_set(initializer_list __l, 15726: size_type __n, const hasher& __hf, 15726: const allocator_type& __a) 15726: : unordered_set(__l, __n, __hf, key_equal(), __a) 15726: { } 15726: 15726: 15726: unordered_set& 15726: operator=(const unordered_set&) = default; 15726: 15726: 15726: unordered_set& 15726: operator=(unordered_set&&) = default; 15726: # 290 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: unordered_set& 15726: operator=(initializer_list __l) 15726: { 15726: _M_h = __l; 15726: return *this; 15726: } 15726: 15726: 15726: allocator_type 15726: get_allocator() const noexcept 15726: { return _M_h.get_allocator(); } 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] bool 15726: empty() const noexcept 15726: { return _M_h.empty(); } 15726: 15726: 15726: size_type 15726: size() const noexcept 15726: { return _M_h.size(); } 15726: 15726: 15726: size_type 15726: max_size() const noexcept 15726: { return _M_h.max_size(); } 15726: # 326 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: iterator 15726: begin() noexcept 15726: { return _M_h.begin(); } 15726: 15726: const_iterator 15726: begin() const noexcept 15726: { return _M_h.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: iterator 15726: end() noexcept 15726: { return _M_h.end(); } 15726: 15726: const_iterator 15726: end() const noexcept 15726: { return _M_h.end(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_iterator 15726: cbegin() const noexcept 15726: { return _M_h.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: const_iterator 15726: cend() const noexcept 15726: { return _M_h.end(); } 15726: # 382 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: template 15726: std::pair 15726: emplace(_Args&&... __args) 15726: { return _M_h.emplace(std::forward<_Args>(__args)...); } 15726: # 408 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: template 15726: iterator 15726: emplace_hint(const_iterator __pos, _Args&&... __args) 15726: { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); } 15726: # 427 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: std::pair 15726: insert(const value_type& __x) 15726: { return _M_h.insert(__x); } 15726: 15726: std::pair 15726: insert(value_type&& __x) 15726: { return _M_h.insert(std::move(__x)); } 15726: # 456 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: iterator 15726: insert(const_iterator __hint, const value_type& __x) 15726: { return _M_h.insert(__hint, __x); } 15726: 15726: iterator 15726: insert(const_iterator __hint, value_type&& __x) 15726: { return _M_h.insert(__hint, std::move(__x)); } 15726: # 474 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: template 15726: void 15726: insert(_InputIterator __first, _InputIterator __last) 15726: { _M_h.insert(__first, __last); } 15726: # 486 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: void 15726: insert(initializer_list __l) 15726: { _M_h.insert(__l); } 15726: 15726: 15726: 15726: node_type 15726: extract(const_iterator __pos) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__pos != end())) __builtin_unreachable(); } while (false); 15726: return _M_h.extract(__pos); 15726: } 15726: 15726: 15726: node_type 15726: extract(const key_type& __key) 15726: { return _M_h.extract(__key); } 15726: 15726: 15726: insert_return_type 15726: insert(node_type&& __nh) 15726: { return _M_h._M_reinsert_node(std::move(__nh)); } 15726: 15726: 15726: iterator 15726: insert(const_iterator, node_type&& __nh) 15726: { return _M_h._M_reinsert_node(std::move(__nh)).position; } 15726: # 529 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: iterator 15726: erase(const_iterator __position) 15726: { return _M_h.erase(__position); } 15726: 15726: 15726: iterator 15726: erase(iterator __position) 15726: { return _M_h.erase(__position); } 15726: # 551 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: size_type 15726: erase(const key_type& __x) 15726: { return _M_h.erase(__x); } 15726: # 569 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: iterator 15726: erase(const_iterator __first, const_iterator __last) 15726: { return _M_h.erase(__first, __last); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: clear() noexcept 15726: { _M_h.clear(); } 15726: # 592 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: void 15726: swap(unordered_set& __x) 15726: noexcept( noexcept(_M_h.swap(__x._M_h)) ) 15726: { _M_h.swap(__x._M_h); } 15726: 15726: 15726: template 15726: friend class std::_Hash_merge_helper; 15726: 15726: template 15726: void 15726: merge(unordered_set<_Value, _H2, _P2, _Alloc>& __source) 15726: { 15726: using _Merge_helper = _Hash_merge_helper; 15726: _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); 15726: } 15726: 15726: template 15726: void 15726: merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source) 15726: { merge(__source); } 15726: 15726: template 15726: void 15726: merge(unordered_multiset<_Value, _H2, _P2, _Alloc>& __source) 15726: { 15726: using _Merge_helper = _Hash_merge_helper; 15726: _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); 15726: } 15726: 15726: template 15726: void 15726: merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source) 15726: { merge(__source); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: hasher 15726: hash_function() const 15726: { return _M_h.hash_function(); } 15726: 15726: 15726: 15726: key_equal 15726: key_eq() const 15726: { return _M_h.key_eq(); } 15726: # 656 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: iterator 15726: find(const key_type& __x) 15726: { return _M_h.find(__x); } 15726: # 668 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: const_iterator 15726: find(const key_type& __x) const 15726: { return _M_h.find(__x); } 15726: # 691 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: size_type 15726: count(const key_type& __x) const 15726: { return _M_h.count(__x); } 15726: # 732 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: std::pair 15726: equal_range(const key_type& __x) 15726: { return _M_h.equal_range(__x); } 15726: # 744 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: std::pair 15726: equal_range(const key_type& __x) const 15726: { return _M_h.equal_range(__x); } 15726: # 760 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: size_type 15726: bucket_count() const noexcept 15726: { return _M_h.bucket_count(); } 15726: 15726: 15726: size_type 15726: max_bucket_count() const noexcept 15726: { return _M_h.max_bucket_count(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_type 15726: bucket_size(size_type __n) const 15726: { return _M_h.bucket_size(__n); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_type 15726: bucket(const key_type& __key) const 15726: { return _M_h.bucket(__key); } 15726: # 794 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: local_iterator 15726: begin(size_type __n) 15726: { return _M_h.begin(__n); } 15726: 15726: const_local_iterator 15726: begin(size_type __n) const 15726: { return _M_h.begin(__n); } 15726: 15726: const_local_iterator 15726: cbegin(size_type __n) const 15726: { return _M_h.cbegin(__n); } 15726: # 814 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: local_iterator 15726: end(size_type __n) 15726: { return _M_h.end(__n); } 15726: 15726: const_local_iterator 15726: end(size_type __n) const 15726: { return _M_h.end(__n); } 15726: 15726: const_local_iterator 15726: cend(size_type __n) const 15726: { return _M_h.cend(__n); } 15726: 15726: 15726: 15726: 15726: 15726: float 15726: load_factor() const noexcept 15726: { return _M_h.load_factor(); } 15726: 15726: 15726: 15726: float 15726: max_load_factor() const noexcept 15726: { return _M_h.max_load_factor(); } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: max_load_factor(float __z) 15726: { _M_h.max_load_factor(__z); } 15726: # 855 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: void 15726: rehash(size_type __n) 15726: { _M_h.rehash(__n); } 15726: # 866 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: void 15726: reserve(size_type __n) 15726: { _M_h.reserve(__n); } 15726: 15726: template 15726: friend bool 15726: operator==(const unordered_set<_Value1, _Hash1, _Pred1, _Alloc1>&, 15726: const unordered_set<_Value1, _Hash1, _Pred1, _Alloc1>&); 15726: }; 15726: 15726: 15726: 15726: template::value_type>, 15726: typename _Pred = 15726: equal_to::value_type>, 15726: typename _Allocator = 15726: allocator::value_type>, 15726: typename = _RequireInputIter<_InputIterator>, 15726: typename = _RequireNotAllocatorOrIntegral<_Hash>, 15726: typename = _RequireNotAllocator<_Pred>, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_set(_InputIterator, _InputIterator, 15726: unordered_set::size_type = {}, 15726: _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) 15726: -> unordered_set::value_type, 15726: _Hash, _Pred, _Allocator>; 15726: 15726: template, 15726: typename _Pred = equal_to<_Tp>, 15726: typename _Allocator = allocator<_Tp>, 15726: typename = _RequireNotAllocatorOrIntegral<_Hash>, 15726: typename = _RequireNotAllocator<_Pred>, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_set(initializer_list<_Tp>, 15726: unordered_set::size_type = {}, 15726: _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) 15726: -> unordered_set<_Tp, _Hash, _Pred, _Allocator>; 15726: 15726: template, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_set(_InputIterator, _InputIterator, 15726: unordered_set::size_type, _Allocator) 15726: -> unordered_set::value_type, 15726: hash< 15726: typename iterator_traits<_InputIterator>::value_type>, 15726: equal_to< 15726: typename iterator_traits<_InputIterator>::value_type>, 15726: _Allocator>; 15726: 15726: template, 15726: typename = _RequireNotAllocatorOrIntegral<_Hash>, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_set(_InputIterator, _InputIterator, 15726: unordered_set::size_type, 15726: _Hash, _Allocator) 15726: -> unordered_set::value_type, 15726: _Hash, 15726: equal_to< 15726: typename iterator_traits<_InputIterator>::value_type>, 15726: _Allocator>; 15726: 15726: template> 15726: unordered_set(initializer_list<_Tp>, 15726: unordered_set::size_type, _Allocator) 15726: -> unordered_set<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>; 15726: 15726: template, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_set(initializer_list<_Tp>, 15726: unordered_set::size_type, _Hash, _Allocator) 15726: -> unordered_set<_Tp, _Hash, equal_to<_Tp>, _Allocator>; 15726: # 968 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: template, 15726: typename _Pred = equal_to<_Value>, 15726: typename _Alloc = allocator<_Value>> 15726: class unordered_multiset 15726: { 15726: typedef __umset_hashtable<_Value, _Hash, _Pred, _Alloc> _Hashtable; 15726: _Hashtable _M_h; 15726: 15726: public: 15726: 15726: 15726: 15726: typedef typename _Hashtable::key_type key_type; 15726: typedef typename _Hashtable::value_type value_type; 15726: typedef typename _Hashtable::hasher hasher; 15726: typedef typename _Hashtable::key_equal key_equal; 15726: typedef typename _Hashtable::allocator_type allocator_type; 15726: 15726: 15726: 15726: 15726: typedef typename _Hashtable::pointer pointer; 15726: typedef typename _Hashtable::const_pointer const_pointer; 15726: typedef typename _Hashtable::reference reference; 15726: typedef typename _Hashtable::const_reference const_reference; 15726: typedef typename _Hashtable::iterator iterator; 15726: typedef typename _Hashtable::const_iterator const_iterator; 15726: typedef typename _Hashtable::local_iterator local_iterator; 15726: typedef typename _Hashtable::const_local_iterator const_local_iterator; 15726: typedef typename _Hashtable::size_type size_type; 15726: typedef typename _Hashtable::difference_type difference_type; 15726: 15726: 15726: 15726: using node_type = typename _Hashtable::node_type; 15726: 15726: 15726: 15726: 15726: 15726: unordered_multiset() = default; 15726: # 1018 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: explicit 15726: unordered_multiset(size_type __n, 15726: const hasher& __hf = hasher(), 15726: const key_equal& __eql = key_equal(), 15726: const allocator_type& __a = allocator_type()) 15726: : _M_h(__n, __hf, __eql, __a) 15726: { } 15726: # 1039 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: template 15726: unordered_multiset(_InputIterator __first, _InputIterator __last, 15726: size_type __n = 0, 15726: const hasher& __hf = hasher(), 15726: const key_equal& __eql = key_equal(), 15726: const allocator_type& __a = allocator_type()) 15726: : _M_h(__first, __last, __n, __hf, __eql, __a) 15726: { } 15726: 15726: 15726: unordered_multiset(const unordered_multiset&) = default; 15726: 15726: 15726: unordered_multiset(unordered_multiset&&) = default; 15726: # 1065 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: unordered_multiset(initializer_list __l, 15726: size_type __n = 0, 15726: const hasher& __hf = hasher(), 15726: const key_equal& __eql = key_equal(), 15726: const allocator_type& __a = allocator_type()) 15726: : _M_h(__l, __n, __hf, __eql, __a) 15726: { } 15726: 15726: 15726: unordered_multiset& 15726: operator=(const unordered_multiset&) = default; 15726: 15726: 15726: unordered_multiset& 15726: operator=(unordered_multiset&&) = default; 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: unordered_multiset(const allocator_type& __a) 15726: : _M_h(__a) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: unordered_multiset(const unordered_multiset& __umset, 15726: const allocator_type& __a) 15726: : _M_h(__umset._M_h, __a) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: unordered_multiset(unordered_multiset&& __umset, 15726: const allocator_type& __a) 15726: noexcept( noexcept(_Hashtable(std::move(__umset._M_h), __a)) ) 15726: : _M_h(std::move(__umset._M_h), __a) 15726: { } 15726: 15726: unordered_multiset(size_type __n, const allocator_type& __a) 15726: : unordered_multiset(__n, hasher(), key_equal(), __a) 15726: { } 15726: 15726: unordered_multiset(size_type __n, const hasher& __hf, 15726: const allocator_type& __a) 15726: : unordered_multiset(__n, __hf, key_equal(), __a) 15726: { } 15726: 15726: template 15726: unordered_multiset(_InputIterator __first, _InputIterator __last, 15726: size_type __n, 15726: const allocator_type& __a) 15726: : unordered_multiset(__first, __last, __n, hasher(), key_equal(), __a) 15726: { } 15726: 15726: template 15726: unordered_multiset(_InputIterator __first, _InputIterator __last, 15726: size_type __n, const hasher& __hf, 15726: const allocator_type& __a) 15726: : unordered_multiset(__first, __last, __n, __hf, key_equal(), __a) 15726: { } 15726: 15726: unordered_multiset(initializer_list __l, 15726: size_type __n, 15726: const allocator_type& __a) 15726: : unordered_multiset(__l, __n, hasher(), key_equal(), __a) 15726: { } 15726: 15726: unordered_multiset(initializer_list __l, 15726: size_type __n, const hasher& __hf, 15726: const allocator_type& __a) 15726: : unordered_multiset(__l, __n, __hf, key_equal(), __a) 15726: { } 15726: # 1157 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: unordered_multiset& 15726: operator=(initializer_list __l) 15726: { 15726: _M_h = __l; 15726: return *this; 15726: } 15726: 15726: 15726: allocator_type 15726: get_allocator() const noexcept 15726: { return _M_h.get_allocator(); } 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] bool 15726: empty() const noexcept 15726: { return _M_h.empty(); } 15726: 15726: 15726: size_type 15726: size() const noexcept 15726: { return _M_h.size(); } 15726: 15726: 15726: size_type 15726: max_size() const noexcept 15726: { return _M_h.max_size(); } 15726: # 1193 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: iterator 15726: begin() noexcept 15726: { return _M_h.begin(); } 15726: 15726: const_iterator 15726: begin() const noexcept 15726: { return _M_h.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: iterator 15726: end() noexcept 15726: { return _M_h.end(); } 15726: 15726: const_iterator 15726: end() const noexcept 15726: { return _M_h.end(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_iterator 15726: cbegin() const noexcept 15726: { return _M_h.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: const_iterator 15726: cend() const noexcept 15726: { return _M_h.end(); } 15726: # 1241 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: template 15726: iterator 15726: emplace(_Args&&... __args) 15726: { return _M_h.emplace(std::forward<_Args>(__args)...); } 15726: # 1263 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: template 15726: iterator 15726: emplace_hint(const_iterator __pos, _Args&&... __args) 15726: { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); } 15726: # 1276 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: iterator 15726: insert(const value_type& __x) 15726: { return _M_h.insert(__x); } 15726: 15726: iterator 15726: insert(value_type&& __x) 15726: { return _M_h.insert(std::move(__x)); } 15726: # 1302 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: iterator 15726: insert(const_iterator __hint, const value_type& __x) 15726: { return _M_h.insert(__hint, __x); } 15726: 15726: iterator 15726: insert(const_iterator __hint, value_type&& __x) 15726: { return _M_h.insert(__hint, std::move(__x)); } 15726: # 1319 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: template 15726: void 15726: insert(_InputIterator __first, _InputIterator __last) 15726: { _M_h.insert(__first, __last); } 15726: # 1331 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: void 15726: insert(initializer_list __l) 15726: { _M_h.insert(__l); } 15726: 15726: 15726: 15726: node_type 15726: extract(const_iterator __pos) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__pos != end())) __builtin_unreachable(); } while (false); 15726: return _M_h.extract(__pos); 15726: } 15726: 15726: 15726: node_type 15726: extract(const key_type& __key) 15726: { return _M_h.extract(__key); } 15726: 15726: 15726: iterator 15726: insert(node_type&& __nh) 15726: { return _M_h._M_reinsert_node_multi(cend(), std::move(__nh)); } 15726: 15726: 15726: iterator 15726: insert(const_iterator __hint, node_type&& __nh) 15726: { return _M_h._M_reinsert_node_multi(__hint, std::move(__nh)); } 15726: # 1375 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: iterator 15726: erase(const_iterator __position) 15726: { return _M_h.erase(__position); } 15726: 15726: 15726: iterator 15726: erase(iterator __position) 15726: { return _M_h.erase(__position); } 15726: # 1398 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: size_type 15726: erase(const key_type& __x) 15726: { return _M_h.erase(__x); } 15726: # 1418 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: iterator 15726: erase(const_iterator __first, const_iterator __last) 15726: { return _M_h.erase(__first, __last); } 15726: # 1429 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: void 15726: clear() noexcept 15726: { _M_h.clear(); } 15726: # 1442 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: void 15726: swap(unordered_multiset& __x) 15726: noexcept( noexcept(_M_h.swap(__x._M_h)) ) 15726: { _M_h.swap(__x._M_h); } 15726: 15726: 15726: template 15726: friend class std::_Hash_merge_helper; 15726: 15726: template 15726: void 15726: merge(unordered_multiset<_Value, _H2, _P2, _Alloc>& __source) 15726: { 15726: using _Merge_helper 15726: = _Hash_merge_helper; 15726: _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); 15726: } 15726: 15726: template 15726: void 15726: merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source) 15726: { merge(__source); } 15726: 15726: template 15726: void 15726: merge(unordered_set<_Value, _H2, _P2, _Alloc>& __source) 15726: { 15726: using _Merge_helper 15726: = _Hash_merge_helper; 15726: _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); 15726: } 15726: 15726: template 15726: void 15726: merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source) 15726: { merge(__source); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: hasher 15726: hash_function() const 15726: { return _M_h.hash_function(); } 15726: 15726: 15726: 15726: key_equal 15726: key_eq() const 15726: { return _M_h.key_eq(); } 15726: # 1508 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: iterator 15726: find(const key_type& __x) 15726: { return _M_h.find(__x); } 15726: # 1520 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: const_iterator 15726: find(const key_type& __x) const 15726: { return _M_h.find(__x); } 15726: # 1539 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: size_type 15726: count(const key_type& __x) const 15726: { return _M_h.count(__x); } 15726: # 1577 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: std::pair 15726: equal_range(const key_type& __x) 15726: { return _M_h.equal_range(__x); } 15726: # 1589 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: std::pair 15726: equal_range(const key_type& __x) const 15726: { return _M_h.equal_range(__x); } 15726: # 1605 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: size_type 15726: bucket_count() const noexcept 15726: { return _M_h.bucket_count(); } 15726: 15726: 15726: size_type 15726: max_bucket_count() const noexcept 15726: { return _M_h.max_bucket_count(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_type 15726: bucket_size(size_type __n) const 15726: { return _M_h.bucket_size(__n); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_type 15726: bucket(const key_type& __key) const 15726: { return _M_h.bucket(__key); } 15726: # 1639 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: local_iterator 15726: begin(size_type __n) 15726: { return _M_h.begin(__n); } 15726: 15726: const_local_iterator 15726: begin(size_type __n) const 15726: { return _M_h.begin(__n); } 15726: 15726: const_local_iterator 15726: cbegin(size_type __n) const 15726: { return _M_h.cbegin(__n); } 15726: # 1659 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: local_iterator 15726: end(size_type __n) 15726: { return _M_h.end(__n); } 15726: 15726: const_local_iterator 15726: end(size_type __n) const 15726: { return _M_h.end(__n); } 15726: 15726: const_local_iterator 15726: cend(size_type __n) const 15726: { return _M_h.cend(__n); } 15726: 15726: 15726: 15726: 15726: 15726: float 15726: load_factor() const noexcept 15726: { return _M_h.load_factor(); } 15726: 15726: 15726: 15726: float 15726: max_load_factor() const noexcept 15726: { return _M_h.max_load_factor(); } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: max_load_factor(float __z) 15726: { _M_h.max_load_factor(__z); } 15726: # 1700 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: void 15726: rehash(size_type __n) 15726: { _M_h.rehash(__n); } 15726: # 1711 "/usr/include/c++/13/bits/unordered_set.h" 3 15726: void 15726: reserve(size_type __n) 15726: { _M_h.reserve(__n); } 15726: 15726: template 15726: friend bool 15726: operator==(const unordered_multiset<_Value1, _Hash1, _Pred1, _Alloc1>&, 15726: const unordered_multiset<_Value1, _Hash1, _Pred1, _Alloc1>&); 15726: }; 15726: 15726: 15726: 15726: 15726: template::value_type>, 15726: typename _Pred = 15726: equal_to::value_type>, 15726: typename _Allocator = 15726: allocator::value_type>, 15726: typename = _RequireInputIter<_InputIterator>, 15726: typename = _RequireNotAllocatorOrIntegral<_Hash>, 15726: typename = _RequireNotAllocator<_Pred>, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_multiset(_InputIterator, _InputIterator, 15726: unordered_multiset::size_type = {}, 15726: _Hash = _Hash(), _Pred = _Pred(), 15726: _Allocator = _Allocator()) 15726: -> unordered_multiset::value_type, 15726: _Hash, _Pred, _Allocator>; 15726: 15726: template, 15726: typename _Pred = equal_to<_Tp>, 15726: typename _Allocator = allocator<_Tp>, 15726: typename = _RequireNotAllocatorOrIntegral<_Hash>, 15726: typename = _RequireNotAllocator<_Pred>, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_multiset(initializer_list<_Tp>, 15726: unordered_multiset::size_type = {}, 15726: _Hash = _Hash(), _Pred = _Pred(), 15726: _Allocator = _Allocator()) 15726: -> unordered_multiset<_Tp, _Hash, _Pred, _Allocator>; 15726: 15726: template, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_multiset(_InputIterator, _InputIterator, 15726: unordered_multiset::size_type, _Allocator) 15726: -> unordered_multiset::value_type, 15726: hash::value_type>, 15726: equal_to::value_type>, 15726: _Allocator>; 15726: 15726: template, 15726: typename = _RequireNotAllocatorOrIntegral<_Hash>, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_multiset(_InputIterator, _InputIterator, 15726: unordered_multiset::size_type, 15726: _Hash, _Allocator) 15726: -> unordered_multiset::value_type, 15726: _Hash, 15726: equal_to< 15726: typename 15726: iterator_traits<_InputIterator>::value_type>, 15726: _Allocator>; 15726: 15726: template> 15726: unordered_multiset(initializer_list<_Tp>, 15726: unordered_multiset::size_type, _Allocator) 15726: -> unordered_multiset<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>; 15726: 15726: template, 15726: typename = _RequireAllocator<_Allocator>> 15726: unordered_multiset(initializer_list<_Tp>, 15726: unordered_multiset::size_type, _Hash, _Allocator) 15726: -> unordered_multiset<_Tp, _Hash, equal_to<_Tp>, _Allocator>; 15726: 15726: 15726: 15726: template 15726: inline void 15726: swap(unordered_set<_Value, _Hash, _Pred, _Alloc>& __x, 15726: unordered_set<_Value, _Hash, _Pred, _Alloc>& __y) 15726: noexcept(noexcept(__x.swap(__y))) 15726: { __x.swap(__y); } 15726: 15726: template 15726: inline void 15726: swap(unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, 15726: unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) 15726: noexcept(noexcept(__x.swap(__y))) 15726: { __x.swap(__y); } 15726: 15726: template 15726: inline bool 15726: operator==(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x, 15726: const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y) 15726: { return __x._M_h._M_equal(__y._M_h); } 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x, 15726: const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y) 15726: { return !(__x == __y); } 15726: 15726: 15726: template 15726: inline bool 15726: operator==(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, 15726: const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) 15726: { return __x._M_h._M_equal(__y._M_h); } 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, 15726: const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) 15726: { return !(__x == __y); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Hash_merge_helper< 15726: std::unordered_set<_Val, _Hash1, _Eq1, _Alloc>, _Hash2, _Eq2> 15726: { 15726: private: 15726: template 15726: using unordered_set = std::unordered_set<_Tp...>; 15726: template 15726: using unordered_multiset = std::unordered_multiset<_Tp...>; 15726: 15726: friend unordered_set<_Val, _Hash1, _Eq1, _Alloc>; 15726: 15726: static auto& 15726: _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set) 15726: { return __set._M_h; } 15726: 15726: static auto& 15726: _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set) 15726: { return __set._M_h; } 15726: }; 15726: 15726: 15726: template 15726: struct _Hash_merge_helper< 15726: std::unordered_multiset<_Val, _Hash1, _Eq1, _Alloc>, 15726: _Hash2, _Eq2> 15726: { 15726: private: 15726: template 15726: using unordered_set = std::unordered_set<_Tp...>; 15726: template 15726: using unordered_multiset = std::unordered_multiset<_Tp...>; 15726: 15726: friend unordered_multiset<_Val, _Hash1, _Eq1, _Alloc>; 15726: 15726: static auto& 15726: _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set) 15726: { return __set._M_h; } 15726: 15726: static auto& 15726: _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set) 15726: { return __set._M_h; } 15726: }; 15726: 15726: 15726: 15726: } 15726: # 42 "/usr/include/c++/13/unordered_set" 2 3 15726: # 51 "/usr/include/c++/13/unordered_set" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: namespace pmr 15726: { 15726: template, 15726: typename _Pred = std::equal_to<_Key>> 15726: using unordered_set 15726: = std::unordered_set<_Key, _Hash, _Pred, 15726: polymorphic_allocator<_Key>>; 15726: template, 15726: typename _Pred = std::equal_to<_Key>> 15726: using unordered_multiset 15726: = std::unordered_multiset<_Key, _Hash, _Pred, 15726: polymorphic_allocator<_Key>>; 15726: } 15726: 15726: } 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/optional" 1 3 15726: # 33 "/usr/include/c++/13/optional" 3 15726: 15726: # 34 "/usr/include/c++/13/optional" 3 15726: # 54 "/usr/include/c++/13/optional" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 71 "/usr/include/c++/13/optional" 3 15726: template 15726: class optional; 15726: 15726: 15726: struct nullopt_t 15726: { 15726: 15726: 15726: 15726: 15726: 15726: enum class _Construct { _Token }; 15726: 15726: 15726: explicit constexpr nullopt_t(_Construct) noexcept { } 15726: }; 15726: 15726: 15726: inline constexpr nullopt_t nullopt { nullopt_t::_Construct::_Token }; 15726: 15726: template struct _Optional_func { _Fn& _M_f; }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: class bad_optional_access : public exception 15726: { 15726: public: 15726: bad_optional_access() = default; 15726: virtual ~bad_optional_access() = default; 15726: 15726: const char* what() const noexcept override 15726: { return "bad optional access"; } 15726: }; 15726: 15726: 15726: [[__noreturn__]] inline void 15726: __throw_bad_optional_access() 15726: { (throw (bad_optional_access())); } 15726: 15726: 15726: 15726: template 15726: struct _Optional_payload_base 15726: { 15726: using _Stored_type = remove_const_t<_Tp>; 15726: 15726: _Optional_payload_base() = default; 15726: ~_Optional_payload_base() = default; 15726: 15726: template 15726: constexpr 15726: _Optional_payload_base(in_place_t __tag, _Args&&... __args) 15726: : _M_payload(__tag, std::forward<_Args>(__args)...), 15726: _M_engaged(true) 15726: { } 15726: 15726: template 15726: constexpr 15726: _Optional_payload_base(std::initializer_list<_Up> __il, 15726: _Args&&... __args) 15726: : _M_payload(__il, std::forward<_Args>(__args)...), 15726: _M_engaged(true) 15726: { } 15726: 15726: 15726: 15726: constexpr 15726: _Optional_payload_base(bool , 15726: const _Optional_payload_base& __other) 15726: { 15726: if (__other._M_engaged) 15726: this->_M_construct(__other._M_get()); 15726: } 15726: 15726: 15726: 15726: constexpr 15726: _Optional_payload_base(bool , 15726: _Optional_payload_base&& __other) 15726: { 15726: if (__other._M_engaged) 15726: this->_M_construct(std::move(__other._M_get())); 15726: } 15726: 15726: 15726: 15726: _Optional_payload_base(const _Optional_payload_base&) = default; 15726: 15726: 15726: 15726: _Optional_payload_base(_Optional_payload_base&&) = default; 15726: 15726: _Optional_payload_base& 15726: operator=(const _Optional_payload_base&) = default; 15726: 15726: _Optional_payload_base& 15726: operator=(_Optional_payload_base&&) = default; 15726: 15726: 15726: constexpr void 15726: _M_copy_assign(const _Optional_payload_base& __other) 15726: { 15726: if (this->_M_engaged && __other._M_engaged) 15726: this->_M_get() = __other._M_get(); 15726: else 15726: { 15726: if (__other._M_engaged) 15726: this->_M_construct(__other._M_get()); 15726: else 15726: this->_M_reset(); 15726: } 15726: } 15726: 15726: 15726: constexpr void 15726: _M_move_assign(_Optional_payload_base&& __other) 15726: noexcept(__and_v, 15726: is_nothrow_move_assignable<_Tp>>) 15726: { 15726: if (this->_M_engaged && __other._M_engaged) 15726: this->_M_get() = std::move(__other._M_get()); 15726: else 15726: { 15726: if (__other._M_engaged) 15726: this->_M_construct(std::move(__other._M_get())); 15726: else 15726: this->_M_reset(); 15726: } 15726: } 15726: 15726: struct _Empty_byte { }; 15726: 15726: template> 15726: union _Storage 15726: { 15726: constexpr _Storage() noexcept : _M_empty() { } 15726: 15726: template 15726: constexpr 15726: _Storage(in_place_t, _Args&&... __args) 15726: : _M_value(std::forward<_Args>(__args)...) 15726: { } 15726: 15726: template 15726: constexpr 15726: _Storage(std::initializer_list<_Vp> __il, _Args&&... __args) 15726: : _M_value(__il, std::forward<_Args>(__args)...) 15726: { } 15726: # 232 "/usr/include/c++/13/optional" 3 15726: _Empty_byte _M_empty; 15726: _Up _M_value; 15726: }; 15726: 15726: template 15726: union _Storage<_Up, false> 15726: { 15726: constexpr _Storage() noexcept : _M_empty() { } 15726: 15726: template 15726: constexpr 15726: _Storage(in_place_t, _Args&&... __args) 15726: : _M_value(std::forward<_Args>(__args)...) 15726: { } 15726: 15726: template 15726: constexpr 15726: _Storage(std::initializer_list<_Vp> __il, _Args&&... __args) 15726: : _M_value(__il, std::forward<_Args>(__args)...) 15726: { } 15726: # 263 "/usr/include/c++/13/optional" 3 15726: ~_Storage() { } 15726: 15726: _Empty_byte _M_empty; 15726: _Up _M_value; 15726: }; 15726: 15726: _Storage<_Stored_type> _M_payload; 15726: 15726: bool _M_engaged = false; 15726: 15726: template 15726: constexpr void 15726: _M_construct(_Args&&... __args) 15726: noexcept(is_nothrow_constructible_v<_Stored_type, _Args...>) 15726: { 15726: std::_Construct(std::__addressof(this->_M_payload._M_value), 15726: std::forward<_Args>(__args)...); 15726: this->_M_engaged = true; 15726: } 15726: 15726: constexpr void 15726: _M_destroy() noexcept 15726: { 15726: _M_engaged = false; 15726: _M_payload._M_value.~_Stored_type(); 15726: } 15726: # 305 "/usr/include/c++/13/optional" 3 15726: constexpr _Tp& 15726: _M_get() noexcept 15726: { return this->_M_payload._M_value; } 15726: 15726: constexpr const _Tp& 15726: _M_get() const noexcept 15726: { return this->_M_payload._M_value; } 15726: 15726: 15726: constexpr void 15726: _M_reset() noexcept 15726: { 15726: if (this->_M_engaged) 15726: _M_destroy(); 15726: else 15726: this->_M_engaged = false; 15726: } 15726: }; 15726: 15726: 15726: template , 15726: bool = 15726: is_trivially_copy_assignable_v<_Tp> 15726: && is_trivially_copy_constructible_v<_Tp>, 15726: bool = 15726: is_trivially_move_assignable_v<_Tp> 15726: && is_trivially_move_constructible_v<_Tp>> 15726: struct _Optional_payload; 15726: 15726: 15726: template 15726: struct _Optional_payload<_Tp, true, true, true> 15726: : _Optional_payload_base<_Tp> 15726: { 15726: using _Optional_payload_base<_Tp>::_Optional_payload_base; 15726: 15726: _Optional_payload() = default; 15726: }; 15726: 15726: 15726: template 15726: struct _Optional_payload<_Tp, true, false, true> 15726: : _Optional_payload_base<_Tp> 15726: { 15726: using _Optional_payload_base<_Tp>::_Optional_payload_base; 15726: 15726: _Optional_payload() = default; 15726: ~_Optional_payload() = default; 15726: _Optional_payload(const _Optional_payload&) = default; 15726: _Optional_payload(_Optional_payload&&) = default; 15726: _Optional_payload& operator=(_Optional_payload&&) = default; 15726: 15726: 15726: constexpr 15726: _Optional_payload& 15726: operator=(const _Optional_payload& __other) 15726: { 15726: this->_M_copy_assign(__other); 15726: return *this; 15726: } 15726: }; 15726: 15726: 15726: template 15726: struct _Optional_payload<_Tp, true, true, false> 15726: : _Optional_payload_base<_Tp> 15726: { 15726: using _Optional_payload_base<_Tp>::_Optional_payload_base; 15726: 15726: _Optional_payload() = default; 15726: ~_Optional_payload() = default; 15726: _Optional_payload(const _Optional_payload&) = default; 15726: _Optional_payload(_Optional_payload&&) = default; 15726: _Optional_payload& operator=(const _Optional_payload&) = default; 15726: 15726: 15726: constexpr 15726: _Optional_payload& 15726: operator=(_Optional_payload&& __other) 15726: noexcept(__and_v, 15726: is_nothrow_move_assignable<_Tp>>) 15726: { 15726: this->_M_move_assign(std::move(__other)); 15726: return *this; 15726: } 15726: }; 15726: 15726: 15726: template 15726: struct _Optional_payload<_Tp, true, false, false> 15726: : _Optional_payload_base<_Tp> 15726: { 15726: using _Optional_payload_base<_Tp>::_Optional_payload_base; 15726: 15726: _Optional_payload() = default; 15726: ~_Optional_payload() = default; 15726: _Optional_payload(const _Optional_payload&) = default; 15726: _Optional_payload(_Optional_payload&&) = default; 15726: 15726: 15726: constexpr 15726: _Optional_payload& 15726: operator=(const _Optional_payload& __other) 15726: { 15726: this->_M_copy_assign(__other); 15726: return *this; 15726: } 15726: 15726: 15726: constexpr 15726: _Optional_payload& 15726: operator=(_Optional_payload&& __other) 15726: noexcept(__and_v, 15726: is_nothrow_move_assignable<_Tp>>) 15726: { 15726: this->_M_move_assign(std::move(__other)); 15726: return *this; 15726: } 15726: }; 15726: 15726: 15726: template 15726: struct _Optional_payload<_Tp, false, _Copy, _Move> 15726: : _Optional_payload<_Tp, true, false, false> 15726: { 15726: 15726: using _Optional_payload<_Tp, true, false, false>::_Optional_payload; 15726: _Optional_payload() = default; 15726: _Optional_payload(const _Optional_payload&) = default; 15726: _Optional_payload(_Optional_payload&&) = default; 15726: _Optional_payload& operator=(const _Optional_payload&) = default; 15726: _Optional_payload& operator=(_Optional_payload&&) = default; 15726: 15726: 15726: ~_Optional_payload() { this->_M_reset(); } 15726: }; 15726: 15726: 15726: 15726: template 15726: class _Optional_base_impl 15726: { 15726: protected: 15726: using _Stored_type = remove_const_t<_Tp>; 15726: 15726: 15726: 15726: template 15726: constexpr void 15726: _M_construct(_Args&&... __args) 15726: noexcept(is_nothrow_constructible_v<_Stored_type, _Args...>) 15726: { 15726: static_cast<_Dp*>(this)->_M_payload._M_construct( 15726: std::forward<_Args>(__args)...); 15726: } 15726: 15726: constexpr void 15726: _M_destruct() noexcept 15726: { static_cast<_Dp*>(this)->_M_payload._M_destroy(); } 15726: 15726: 15726: constexpr void 15726: _M_reset() noexcept 15726: { static_cast<_Dp*>(this)->_M_payload._M_reset(); } 15726: 15726: constexpr bool _M_is_engaged() const noexcept 15726: { return static_cast(this)->_M_payload._M_engaged; } 15726: 15726: 15726: constexpr _Tp& 15726: _M_get() noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(this->_M_is_engaged())) __builtin_unreachable(); } while (false); 15726: return static_cast<_Dp*>(this)->_M_payload._M_get(); 15726: } 15726: 15726: constexpr const _Tp& 15726: _M_get() const noexcept 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(this->_M_is_engaged())) __builtin_unreachable(); } while (false); 15726: return static_cast(this)->_M_payload._M_get(); 15726: } 15726: }; 15726: # 509 "/usr/include/c++/13/optional" 3 15726: template, 15726: bool = is_trivially_move_constructible_v<_Tp>> 15726: struct _Optional_base 15726: : _Optional_base_impl<_Tp, _Optional_base<_Tp>> 15726: { 15726: 15726: constexpr _Optional_base() = default; 15726: 15726: 15726: template, bool> = false> 15726: constexpr explicit 15726: _Optional_base(in_place_t, _Args&&... __args) 15726: : _M_payload(in_place, std::forward<_Args>(__args)...) 15726: { } 15726: 15726: template&, 15726: _Args...>, bool> = false> 15726: constexpr explicit 15726: _Optional_base(in_place_t, 15726: initializer_list<_Up> __il, 15726: _Args&&... __args) 15726: : _M_payload(in_place, __il, std::forward<_Args>(__args)...) 15726: { } 15726: 15726: 15726: constexpr 15726: _Optional_base(const _Optional_base& __other) 15726: : _M_payload(__other._M_payload._M_engaged, __other._M_payload) 15726: { } 15726: 15726: constexpr 15726: _Optional_base(_Optional_base&& __other) 15726: noexcept(is_nothrow_move_constructible_v<_Tp>) 15726: : _M_payload(__other._M_payload._M_engaged, 15726: std::move(__other._M_payload)) 15726: { } 15726: 15726: 15726: _Optional_base& operator=(const _Optional_base&) = default; 15726: _Optional_base& operator=(_Optional_base&&) = default; 15726: 15726: _Optional_payload<_Tp> _M_payload; 15726: }; 15726: 15726: template 15726: struct _Optional_base<_Tp, false, true> 15726: : _Optional_base_impl<_Tp, _Optional_base<_Tp>> 15726: { 15726: 15726: constexpr _Optional_base() = default; 15726: 15726: 15726: template, bool> = false> 15726: constexpr explicit 15726: _Optional_base(in_place_t, _Args&&... __args) 15726: : _M_payload(in_place, std::forward<_Args>(__args)...) 15726: { } 15726: 15726: template&, 15726: _Args...>, bool> = false> 15726: constexpr explicit 15726: _Optional_base(in_place_t, 15726: initializer_list<_Up> __il, 15726: _Args... __args) 15726: : _M_payload(in_place, __il, std::forward<_Args>(__args)...) 15726: { } 15726: 15726: 15726: constexpr _Optional_base(const _Optional_base& __other) 15726: : _M_payload(__other._M_payload._M_engaged, __other._M_payload) 15726: { } 15726: 15726: constexpr _Optional_base(_Optional_base&& __other) = default; 15726: 15726: 15726: _Optional_base& operator=(const _Optional_base&) = default; 15726: _Optional_base& operator=(_Optional_base&&) = default; 15726: 15726: _Optional_payload<_Tp> _M_payload; 15726: }; 15726: 15726: template 15726: struct _Optional_base<_Tp, true, false> 15726: : _Optional_base_impl<_Tp, _Optional_base<_Tp>> 15726: { 15726: 15726: constexpr _Optional_base() = default; 15726: 15726: 15726: template, bool> = false> 15726: constexpr explicit 15726: _Optional_base(in_place_t, _Args&&... __args) 15726: : _M_payload(in_place, std::forward<_Args>(__args)...) 15726: { } 15726: 15726: template&, 15726: _Args...>, bool> = false> 15726: constexpr explicit 15726: _Optional_base(in_place_t, 15726: initializer_list<_Up> __il, 15726: _Args&&... __args) 15726: : _M_payload(in_place, __il, std::forward<_Args>(__args)...) 15726: { } 15726: 15726: 15726: constexpr _Optional_base(const _Optional_base& __other) = default; 15726: 15726: constexpr 15726: _Optional_base(_Optional_base&& __other) 15726: noexcept(is_nothrow_move_constructible_v<_Tp>) 15726: : _M_payload(__other._M_payload._M_engaged, 15726: std::move(__other._M_payload)) 15726: { } 15726: 15726: 15726: _Optional_base& operator=(const _Optional_base&) = default; 15726: _Optional_base& operator=(_Optional_base&&) = default; 15726: 15726: _Optional_payload<_Tp> _M_payload; 15726: }; 15726: 15726: template 15726: struct _Optional_base<_Tp, true, true> 15726: : _Optional_base_impl<_Tp, _Optional_base<_Tp>> 15726: { 15726: 15726: constexpr _Optional_base() = default; 15726: 15726: 15726: template, bool> = false> 15726: constexpr explicit 15726: _Optional_base(in_place_t, _Args&&... __args) 15726: : _M_payload(in_place, std::forward<_Args>(__args)...) 15726: { } 15726: 15726: template&, 15726: _Args...>, bool> = false> 15726: constexpr explicit 15726: _Optional_base(in_place_t, 15726: initializer_list<_Up> __il, 15726: _Args&&... __args) 15726: : _M_payload(in_place, __il, std::forward<_Args>(__args)...) 15726: { } 15726: 15726: 15726: constexpr _Optional_base(const _Optional_base& __other) = default; 15726: constexpr _Optional_base(_Optional_base&& __other) = default; 15726: 15726: 15726: _Optional_base& operator=(const _Optional_base&) = default; 15726: _Optional_base& operator=(_Optional_base&&) = default; 15726: 15726: _Optional_payload<_Tp> _M_payload; 15726: }; 15726: 15726: template 15726: class optional; 15726: 15726: template 15726: inline constexpr bool __is_optional_v = false; 15726: template 15726: inline constexpr bool __is_optional_v> = true; 15726: 15726: template 15726: using __converts_from_optional = 15726: __or_&>, 15726: is_constructible<_Tp, optional<_Up>&>, 15726: is_constructible<_Tp, const optional<_Up>&&>, 15726: is_constructible<_Tp, optional<_Up>&&>, 15726: is_convertible&, _Tp>, 15726: is_convertible&, _Tp>, 15726: is_convertible&&, _Tp>, 15726: is_convertible&&, _Tp>>; 15726: 15726: template 15726: using __assigns_from_optional = 15726: __or_&>, 15726: is_assignable<_Tp&, optional<_Up>&>, 15726: is_assignable<_Tp&, const optional<_Up>&&>, 15726: is_assignable<_Tp&, optional<_Up>&&>>; 15726: 15726: 15726: 15726: 15726: template 15726: class optional 15726: : private _Optional_base<_Tp>, 15726: private _Enable_copy_move< 15726: 15726: is_copy_constructible_v<_Tp>, 15726: 15726: __and_v, is_copy_assignable<_Tp>>, 15726: 15726: is_move_constructible_v<_Tp>, 15726: 15726: __and_v, is_move_assignable<_Tp>>, 15726: 15726: optional<_Tp>> 15726: { 15726: static_assert(!is_same_v, nullopt_t>); 15726: static_assert(!is_same_v, in_place_t>); 15726: static_assert(is_object_v<_Tp> && !is_array_v<_Tp>); 15726: 15726: private: 15726: using _Base = _Optional_base<_Tp>; 15726: 15726: 15726: template 15726: using __not_self = __not_>>; 15726: template 15726: using __not_tag = __not_>>; 15726: template 15726: using _Requires = enable_if_t<__and_v<_Cond...>, bool>; 15726: 15726: public: 15726: using value_type = _Tp; 15726: 15726: constexpr optional() noexcept { } 15726: 15726: constexpr optional(nullopt_t) noexcept { } 15726: 15726: 15726: template, __not_tag<_Up>, 15726: is_constructible<_Tp, _Up>, 15726: is_convertible<_Up, _Tp>> = true> 15726: constexpr 15726: optional(_Up&& __t) 15726: noexcept(is_nothrow_constructible_v<_Tp, _Up>) 15726: : _Base(std::in_place, std::forward<_Up>(__t)) { } 15726: 15726: template, __not_tag<_Up>, 15726: is_constructible<_Tp, _Up>, 15726: __not_>> = false> 15726: explicit constexpr 15726: optional(_Up&& __t) 15726: noexcept(is_nothrow_constructible_v<_Tp, _Up>) 15726: : _Base(std::in_place, std::forward<_Up>(__t)) { } 15726: 15726: template>, 15726: is_constructible<_Tp, const _Up&>, 15726: is_convertible, 15726: __not_<__converts_from_optional<_Tp, _Up>>> = true> 15726: constexpr 15726: optional(const optional<_Up>& __t) 15726: noexcept(is_nothrow_constructible_v<_Tp, const _Up&>) 15726: { 15726: if (__t) 15726: emplace(*__t); 15726: } 15726: 15726: template>, 15726: is_constructible<_Tp, const _Up&>, 15726: __not_>, 15726: __not_<__converts_from_optional<_Tp, _Up>>> = false> 15726: explicit constexpr 15726: optional(const optional<_Up>& __t) 15726: noexcept(is_nothrow_constructible_v<_Tp, const _Up&>) 15726: { 15726: if (__t) 15726: emplace(*__t); 15726: } 15726: 15726: template>, 15726: is_constructible<_Tp, _Up>, 15726: is_convertible<_Up, _Tp>, 15726: __not_<__converts_from_optional<_Tp, _Up>>> = true> 15726: constexpr 15726: optional(optional<_Up>&& __t) 15726: noexcept(is_nothrow_constructible_v<_Tp, _Up>) 15726: { 15726: if (__t) 15726: emplace(std::move(*__t)); 15726: } 15726: 15726: template>, 15726: is_constructible<_Tp, _Up>, 15726: __not_>, 15726: __not_<__converts_from_optional<_Tp, _Up>>> = false> 15726: explicit constexpr 15726: optional(optional<_Up>&& __t) 15726: noexcept(is_nothrow_constructible_v<_Tp, _Up>) 15726: { 15726: if (__t) 15726: emplace(std::move(*__t)); 15726: } 15726: 15726: template> = false> 15726: explicit constexpr 15726: optional(in_place_t, _Args&&... __args) 15726: noexcept(is_nothrow_constructible_v<_Tp, _Args...>) 15726: : _Base(std::in_place, std::forward<_Args>(__args)...) { } 15726: 15726: template&, 15726: _Args...>> = false> 15726: explicit constexpr 15726: optional(in_place_t, initializer_list<_Up> __il, _Args&&... __args) 15726: noexcept(is_nothrow_constructible_v<_Tp, initializer_list<_Up>&, 15726: _Args...>) 15726: : _Base(std::in_place, __il, std::forward<_Args>(__args)...) { } 15726: 15726: 15726: 15726: optional& 15726: operator=(nullopt_t) noexcept 15726: { 15726: this->_M_reset(); 15726: return *this; 15726: } 15726: 15726: template 15726: 15726: enable_if_t<__and_v<__not_self<_Up>, 15726: __not_<__and_, 15726: is_same<_Tp, decay_t<_Up>>>>, 15726: is_constructible<_Tp, _Up>, 15726: is_assignable<_Tp&, _Up>>, 15726: optional&> 15726: operator=(_Up&& __u) 15726: noexcept(__and_v, 15726: is_nothrow_assignable<_Tp&, _Up>>) 15726: { 15726: if (this->_M_is_engaged()) 15726: this->_M_get() = std::forward<_Up>(__u); 15726: else 15726: this->_M_construct(std::forward<_Up>(__u)); 15726: 15726: return *this; 15726: } 15726: 15726: template 15726: 15726: enable_if_t<__and_v<__not_>, 15726: is_constructible<_Tp, const _Up&>, 15726: is_assignable<_Tp&, const _Up&>, 15726: __not_<__converts_from_optional<_Tp, _Up>>, 15726: __not_<__assigns_from_optional<_Tp, _Up>>>, 15726: optional&> 15726: operator=(const optional<_Up>& __u) 15726: noexcept(__and_v, 15726: is_nothrow_assignable<_Tp&, const _Up&>>) 15726: { 15726: if (__u) 15726: { 15726: if (this->_M_is_engaged()) 15726: this->_M_get() = *__u; 15726: else 15726: this->_M_construct(*__u); 15726: } 15726: else 15726: { 15726: this->_M_reset(); 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: 15726: enable_if_t<__and_v<__not_>, 15726: is_constructible<_Tp, _Up>, 15726: is_assignable<_Tp&, _Up>, 15726: __not_<__converts_from_optional<_Tp, _Up>>, 15726: __not_<__assigns_from_optional<_Tp, _Up>>>, 15726: optional&> 15726: operator=(optional<_Up>&& __u) 15726: noexcept(__and_v, 15726: is_nothrow_assignable<_Tp&, _Up>>) 15726: { 15726: if (__u) 15726: { 15726: if (this->_M_is_engaged()) 15726: this->_M_get() = std::move(*__u); 15726: else 15726: this->_M_construct(std::move(*__u)); 15726: } 15726: else 15726: { 15726: this->_M_reset(); 15726: } 15726: 15726: return *this; 15726: } 15726: 15726: template 15726: 15726: enable_if_t, _Tp&> 15726: emplace(_Args&&... __args) 15726: noexcept(is_nothrow_constructible_v<_Tp, _Args...>) 15726: { 15726: this->_M_reset(); 15726: this->_M_construct(std::forward<_Args>(__args)...); 15726: return this->_M_get(); 15726: } 15726: 15726: template 15726: 15726: enable_if_t&, _Args...>, 15726: _Tp&> 15726: emplace(initializer_list<_Up> __il, _Args&&... __args) 15726: noexcept(is_nothrow_constructible_v<_Tp, initializer_list<_Up>&, 15726: _Args...>) 15726: { 15726: this->_M_reset(); 15726: this->_M_construct(__il, std::forward<_Args>(__args)...); 15726: return this->_M_get(); 15726: } 15726: 15726: 15726: 15726: 15726: void 15726: swap(optional& __other) 15726: noexcept(is_nothrow_move_constructible_v<_Tp> 15726: && is_nothrow_swappable_v<_Tp>) 15726: { 15726: using std::swap; 15726: 15726: if (this->_M_is_engaged() && __other._M_is_engaged()) 15726: swap(this->_M_get(), __other._M_get()); 15726: else if (this->_M_is_engaged()) 15726: { 15726: __other._M_construct(std::move(this->_M_get())); 15726: this->_M_destruct(); 15726: } 15726: else if (__other._M_is_engaged()) 15726: { 15726: this->_M_construct(std::move(__other._M_get())); 15726: __other._M_destruct(); 15726: } 15726: } 15726: 15726: 15726: constexpr const _Tp* 15726: operator->() const noexcept 15726: { return std::__addressof(this->_M_get()); } 15726: 15726: constexpr _Tp* 15726: operator->() noexcept 15726: { return std::__addressof(this->_M_get()); } 15726: 15726: constexpr const _Tp& 15726: operator*() const& noexcept 15726: { return this->_M_get(); } 15726: 15726: constexpr _Tp& 15726: operator*()& noexcept 15726: { return this->_M_get(); } 15726: 15726: constexpr _Tp&& 15726: operator*()&& noexcept 15726: { return std::move(this->_M_get()); } 15726: 15726: constexpr const _Tp&& 15726: operator*() const&& noexcept 15726: { return std::move(this->_M_get()); } 15726: 15726: constexpr explicit operator bool() const noexcept 15726: { return this->_M_is_engaged(); } 15726: 15726: constexpr bool has_value() const noexcept 15726: { return this->_M_is_engaged(); } 15726: 15726: constexpr const _Tp& 15726: value() const& 15726: { 15726: if (this->_M_is_engaged()) 15726: return this->_M_get(); 15726: __throw_bad_optional_access(); 15726: } 15726: 15726: constexpr _Tp& 15726: value()& 15726: { 15726: if (this->_M_is_engaged()) 15726: return this->_M_get(); 15726: __throw_bad_optional_access(); 15726: } 15726: 15726: constexpr _Tp&& 15726: value()&& 15726: { 15726: if (this->_M_is_engaged()) 15726: return std::move(this->_M_get()); 15726: __throw_bad_optional_access(); 15726: } 15726: 15726: constexpr const _Tp&& 15726: value() const&& 15726: { 15726: if (this->_M_is_engaged()) 15726: return std::move(this->_M_get()); 15726: __throw_bad_optional_access(); 15726: } 15726: 15726: template 15726: constexpr _Tp 15726: value_or(_Up&& __u) const& 15726: { 15726: static_assert(is_copy_constructible_v<_Tp>); 15726: static_assert(is_convertible_v<_Up&&, _Tp>); 15726: 15726: if (this->_M_is_engaged()) 15726: return this->_M_get(); 15726: else 15726: return static_cast<_Tp>(std::forward<_Up>(__u)); 15726: } 15726: 15726: template 15726: constexpr _Tp 15726: value_or(_Up&& __u) && 15726: { 15726: static_assert(is_move_constructible_v<_Tp>); 15726: static_assert(is_convertible_v<_Up&&, _Tp>); 15726: 15726: if (this->_M_is_engaged()) 15726: return std::move(this->_M_get()); 15726: else 15726: return static_cast<_Tp>(std::forward<_Up>(__u)); 15726: } 15726: # 1184 "/usr/include/c++/13/optional" 3 15726: void reset() noexcept { this->_M_reset(); } 15726: 15726: private: 15726: # 1197 "/usr/include/c++/13/optional" 3 15726: }; 15726: 15726: template 15726: using __optional_relop_t = 15726: enable_if_t::value, bool>; 15726: 15726: template 15726: using __optional_eq_t = __optional_relop_t< 15726: decltype(std::declval() == std::declval()) 15726: >; 15726: 15726: template 15726: using __optional_ne_t = __optional_relop_t< 15726: decltype(std::declval() != std::declval()) 15726: >; 15726: 15726: template 15726: using __optional_lt_t = __optional_relop_t< 15726: decltype(std::declval() < std::declval()) 15726: >; 15726: 15726: template 15726: using __optional_gt_t = __optional_relop_t< 15726: decltype(std::declval() > std::declval()) 15726: >; 15726: 15726: template 15726: using __optional_le_t = __optional_relop_t< 15726: decltype(std::declval() <= std::declval()) 15726: >; 15726: 15726: template 15726: using __optional_ge_t = __optional_relop_t< 15726: decltype(std::declval() >= std::declval()) 15726: >; 15726: 15726: 15726: template 15726: constexpr auto 15726: operator==(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) 15726: -> __optional_eq_t<_Tp, _Up> 15726: { 15726: return static_cast(__lhs) == static_cast(__rhs) 15726: && (!__lhs || *__lhs == *__rhs); 15726: } 15726: 15726: template 15726: constexpr auto 15726: operator!=(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) 15726: -> __optional_ne_t<_Tp, _Up> 15726: { 15726: return static_cast(__lhs) != static_cast(__rhs) 15726: || (static_cast(__lhs) && *__lhs != *__rhs); 15726: } 15726: 15726: template 15726: constexpr auto 15726: operator<(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) 15726: -> __optional_lt_t<_Tp, _Up> 15726: { 15726: return static_cast(__rhs) && (!__lhs || *__lhs < *__rhs); 15726: } 15726: 15726: template 15726: constexpr auto 15726: operator>(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) 15726: -> __optional_gt_t<_Tp, _Up> 15726: { 15726: return static_cast(__lhs) && (!__rhs || *__lhs > *__rhs); 15726: } 15726: 15726: template 15726: constexpr auto 15726: operator<=(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) 15726: -> __optional_le_t<_Tp, _Up> 15726: { 15726: return !__lhs || (static_cast(__rhs) && *__lhs <= *__rhs); 15726: } 15726: 15726: template 15726: constexpr auto 15726: operator>=(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) 15726: -> __optional_ge_t<_Tp, _Up> 15726: { 15726: return !__rhs || (static_cast(__lhs) && *__lhs >= *__rhs); 15726: } 15726: # 1294 "/usr/include/c++/13/optional" 3 15726: template 15726: constexpr bool 15726: operator==(const optional<_Tp>& __lhs, nullopt_t) noexcept 15726: { return !__lhs; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: constexpr bool 15726: operator==(nullopt_t, const optional<_Tp>& __rhs) noexcept 15726: { return !__rhs; } 15726: 15726: template 15726: constexpr bool 15726: operator!=(const optional<_Tp>& __lhs, nullopt_t) noexcept 15726: { return static_cast(__lhs); } 15726: 15726: template 15726: constexpr bool 15726: operator!=(nullopt_t, const optional<_Tp>& __rhs) noexcept 15726: { return static_cast(__rhs); } 15726: 15726: template 15726: constexpr bool 15726: operator<(const optional<_Tp>& , nullopt_t) noexcept 15726: { return false; } 15726: 15726: template 15726: constexpr bool 15726: operator<(nullopt_t, const optional<_Tp>& __rhs) noexcept 15726: { return static_cast(__rhs); } 15726: 15726: template 15726: constexpr bool 15726: operator>(const optional<_Tp>& __lhs, nullopt_t) noexcept 15726: { return static_cast(__lhs); } 15726: 15726: template 15726: constexpr bool 15726: operator>(nullopt_t, const optional<_Tp>& ) noexcept 15726: { return false; } 15726: 15726: template 15726: constexpr bool 15726: operator<=(const optional<_Tp>& __lhs, nullopt_t) noexcept 15726: { return !__lhs; } 15726: 15726: template 15726: constexpr bool 15726: operator<=(nullopt_t, const optional<_Tp>& ) noexcept 15726: { return true; } 15726: 15726: template 15726: constexpr bool 15726: operator>=(const optional<_Tp>& , nullopt_t) noexcept 15726: { return true; } 15726: 15726: template 15726: constexpr bool 15726: operator>=(nullopt_t, const optional<_Tp>& __rhs) noexcept 15726: { return !__rhs; } 15726: 15726: 15726: 15726: template 15726: constexpr auto 15726: operator==(const optional<_Tp>& __lhs, const _Up& __rhs) 15726: -> __optional_eq_t<_Tp, _Up> 15726: { return __lhs && *__lhs == __rhs; } 15726: 15726: template 15726: constexpr auto 15726: operator==(const _Up& __lhs, const optional<_Tp>& __rhs) 15726: -> __optional_eq_t<_Up, _Tp> 15726: { return __rhs && __lhs == *__rhs; } 15726: 15726: template 15726: constexpr auto 15726: operator!=(const optional<_Tp>& __lhs, const _Up& __rhs) 15726: -> __optional_ne_t<_Tp, _Up> 15726: { return !__lhs || *__lhs != __rhs; } 15726: 15726: template 15726: constexpr auto 15726: operator!=(const _Up& __lhs, const optional<_Tp>& __rhs) 15726: -> __optional_ne_t<_Up, _Tp> 15726: { return !__rhs || __lhs != *__rhs; } 15726: 15726: template 15726: constexpr auto 15726: operator<(const optional<_Tp>& __lhs, const _Up& __rhs) 15726: -> __optional_lt_t<_Tp, _Up> 15726: { return !__lhs || *__lhs < __rhs; } 15726: 15726: template 15726: constexpr auto 15726: operator<(const _Up& __lhs, const optional<_Tp>& __rhs) 15726: -> __optional_lt_t<_Up, _Tp> 15726: { return __rhs && __lhs < *__rhs; } 15726: 15726: template 15726: constexpr auto 15726: operator>(const optional<_Tp>& __lhs, const _Up& __rhs) 15726: -> __optional_gt_t<_Tp, _Up> 15726: { return __lhs && *__lhs > __rhs; } 15726: 15726: template 15726: constexpr auto 15726: operator>(const _Up& __lhs, const optional<_Tp>& __rhs) 15726: -> __optional_gt_t<_Up, _Tp> 15726: { return !__rhs || __lhs > *__rhs; } 15726: 15726: template 15726: constexpr auto 15726: operator<=(const optional<_Tp>& __lhs, const _Up& __rhs) 15726: -> __optional_le_t<_Tp, _Up> 15726: { return !__lhs || *__lhs <= __rhs; } 15726: 15726: template 15726: constexpr auto 15726: operator<=(const _Up& __lhs, const optional<_Tp>& __rhs) 15726: -> __optional_le_t<_Up, _Tp> 15726: { return __rhs && __lhs <= *__rhs; } 15726: 15726: template 15726: constexpr auto 15726: operator>=(const optional<_Tp>& __lhs, const _Up& __rhs) 15726: -> __optional_ge_t<_Tp, _Up> 15726: { return __lhs && *__lhs >= __rhs; } 15726: 15726: template 15726: constexpr auto 15726: operator>=(const _Up& __lhs, const optional<_Tp>& __rhs) 15726: -> __optional_ge_t<_Up, _Tp> 15726: { return !__rhs || __lhs >= *__rhs; } 15726: # 1447 "/usr/include/c++/13/optional" 3 15726: template 15726: 15726: inline enable_if_t && is_swappable_v<_Tp>> 15726: swap(optional<_Tp>& __lhs, optional<_Tp>& __rhs) 15726: noexcept(noexcept(__lhs.swap(__rhs))) 15726: { __lhs.swap(__rhs); } 15726: 15726: template 15726: enable_if_t && is_swappable_v<_Tp>)> 15726: swap(optional<_Tp>&, optional<_Tp>&) = delete; 15726: 15726: template 15726: constexpr 15726: enable_if_t, _Tp>, 15726: optional>> 15726: make_optional(_Tp&& __t) 15726: noexcept(is_nothrow_constructible_v>, _Tp>) 15726: { return optional>{ std::forward<_Tp>(__t) }; } 15726: 15726: template 15726: constexpr 15726: enable_if_t, 15726: optional<_Tp>> 15726: make_optional(_Args&&... __args) 15726: noexcept(is_nothrow_constructible_v<_Tp, _Args...>) 15726: { return optional<_Tp>{ in_place, std::forward<_Args>(__args)... }; } 15726: 15726: template 15726: constexpr 15726: enable_if_t&, _Args...>, 15726: optional<_Tp>> 15726: make_optional(initializer_list<_Up> __il, _Args&&... __args) 15726: noexcept(is_nothrow_constructible_v<_Tp, initializer_list<_Up>&, _Args...>) 15726: { return optional<_Tp>{ in_place, __il, std::forward<_Args>(__args)... }; } 15726: 15726: 15726: 15726: template, 15726: bool = __poison_hash<_Up>::__enable_hash_call> 15726: struct __optional_hash_call_base 15726: { 15726: size_t 15726: operator()(const optional<_Tp>& __t) const 15726: noexcept(noexcept(hash<_Up>{}(*__t))) 15726: { 15726: 15726: 15726: constexpr size_t __magic_disengaged_hash = static_cast(-3333); 15726: return __t ? hash<_Up>{}(*__t) : __magic_disengaged_hash; 15726: } 15726: }; 15726: 15726: template 15726: struct __optional_hash_call_base<_Tp, _Up, false> {}; 15726: 15726: template 15726: struct hash> 15726: : private __poison_hash>, 15726: public __optional_hash_call_base<_Tp> 15726: { 15726: using result_type [[__deprecated__]] = size_t; 15726: using argument_type [[__deprecated__]] = optional<_Tp>; 15726: }; 15726: 15726: template 15726: struct __is_fast_hash>> : __is_fast_hash> 15726: { }; 15726: 15726: 15726: 15726: 15726: template optional(_Tp) -> optional<_Tp>; 15726: 15726: 15726: 15726: } 15726: # 15 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 2 15726: 15726: # 1 "/usr/include/c++/13/utility" 1 3 15726: # 58 "/usr/include/c++/13/utility" 3 15726: 15726: # 59 "/usr/include/c++/13/utility" 3 15726: # 68 "/usr/include/c++/13/utility" 3 15726: # 1 "/usr/include/c++/13/bits/stl_relops.h" 1 3 15726: # 62 "/usr/include/c++/13/bits/stl_relops.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: namespace rel_ops 15726: { 15726: # 86 "/usr/include/c++/13/bits/stl_relops.h" 3 15726: template 15726: inline bool 15726: operator!=(const _Tp& __x, const _Tp& __y) 15726: { return !(__x == __y); } 15726: # 99 "/usr/include/c++/13/bits/stl_relops.h" 3 15726: template 15726: inline bool 15726: operator>(const _Tp& __x, const _Tp& __y) 15726: { return __y < __x; } 15726: # 112 "/usr/include/c++/13/bits/stl_relops.h" 3 15726: template 15726: inline bool 15726: operator<=(const _Tp& __x, const _Tp& __y) 15726: { return !(__y < __x); } 15726: # 125 "/usr/include/c++/13/bits/stl_relops.h" 3 15726: template 15726: inline bool 15726: operator>=(const _Tp& __x, const _Tp& __y) 15726: { return !(__x < __y); } 15726: } 15726: 15726: 15726: } 15726: # 69 "/usr/include/c++/13/utility" 2 3 15726: # 82 "/usr/include/c++/13/utility" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 94 "/usr/include/c++/13/utility" 3 15726: template 15726: 15726: inline _Tp 15726: exchange(_Tp& __obj, _Up&& __new_val) 15726: noexcept(__and_, 15726: is_nothrow_assignable<_Tp&, _Up>>::value) 15726: { return std::__exchange(__obj, std::forward<_Up>(__new_val)); } 15726: 15726: 15726: 15726: 15726: template 15726: [[nodiscard]] 15726: constexpr add_const_t<_Tp>& 15726: as_const(_Tp& __t) noexcept 15726: { return __t; } 15726: 15726: template 15726: void as_const(const _Tp&&) = delete; 15726: # 224 "/usr/include/c++/13/utility" 3 15726: 15726: } 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 1 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h" 1 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h" 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 1 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rocksdb_namespace.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 18 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/status.h" 1 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/status.h" 15726: 15726: # 31 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/status.h" 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 1 15726: # 19 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: 15726: 15726: # 1 "/usr/include/c++/13/cassert" 1 3 15726: # 41 "/usr/include/c++/13/cassert" 3 15726: 15726: # 42 "/usr/include/c++/13/cassert" 3 15726: 15726: 15726: # 1 "/usr/include/assert.h" 1 3 4 15726: # 66 "/usr/include/assert.h" 3 4 15726: extern "C" { 15726: 15726: 15726: extern void __assert_fail (const char *__assertion, const char *__file, 15726: unsigned int __line, const char *__function) 15726: noexcept (true) __attribute__ ((__noreturn__)); 15726: 15726: 15726: extern void __assert_perror_fail (int __errnum, const char *__file, 15726: unsigned int __line, const char *__function) 15726: noexcept (true) __attribute__ ((__noreturn__)); 15726: 15726: 15726: 15726: 15726: extern void __assert (const char *__assertion, const char *__file, int __line) 15726: noexcept (true) __attribute__ ((__noreturn__)); 15726: 15726: 15726: } 15726: # 45 "/usr/include/c++/13/cassert" 2 3 15726: # 22 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 2 15726: 15726: # 1 "/usr/include/c++/13/cstdio" 1 3 15726: # 39 "/usr/include/c++/13/cstdio" 3 15726: 15726: # 40 "/usr/include/c++/13/cstdio" 3 15726: # 24 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 2 15726: # 1 "/usr/include/c++/13/cstring" 1 3 15726: # 39 "/usr/include/c++/13/cstring" 3 15726: 15726: # 40 "/usr/include/c++/13/cstring" 3 15726: 15726: 15726: # 1 "/usr/include/string.h" 1 3 4 15726: # 26 "/usr/include/string.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 15726: # 27 "/usr/include/string.h" 2 3 4 15726: 15726: extern "C" { 15726: 15726: 15726: 15726: 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 34 "/usr/include/string.h" 2 3 4 15726: # 43 "/usr/include/string.h" 3 4 15726: extern void *memcpy (void *__restrict __dest, const void *__restrict __src, 15726: size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern void *memmove (void *__dest, const void *__src, size_t __n) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: 15726: 15726: extern void *memccpy (void *__restrict __dest, const void *__restrict __src, 15726: int __c, size_t __n) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__access__ (__write_only__, 1, 4))); 15726: 15726: 15726: 15726: 15726: extern void *memset (void *__s, int __c, size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int memcmp (const void *__s1, const void *__s2, size_t __n) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 15726: # 80 "/usr/include/string.h" 3 4 15726: extern int __memcmpeq (const void *__s1, const void *__s2, size_t __n) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: extern "C++" 15726: { 15726: extern void *memchr (void *__s, int __c, size_t __n) 15726: noexcept (true) __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 15726: extern const void *memchr (const void *__s, int __c, size_t __n) 15726: noexcept (true) __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) void * 15726: memchr (void *__s, int __c, size_t __n) noexcept (true) 15726: { 15726: return __builtin_memchr (__s, __c, __n); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const void * 15726: memchr (const void *__s, int __c, size_t __n) noexcept (true) 15726: { 15726: return __builtin_memchr (__s, __c, __n); 15726: } 15726: 15726: } 15726: # 115 "/usr/include/string.h" 3 4 15726: extern "C++" void *rawmemchr (void *__s, int __c) 15726: noexcept (true) __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 15726: extern "C++" const void *rawmemchr (const void *__s, int __c) 15726: noexcept (true) __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern "C++" void *memrchr (void *__s, int __c, size_t __n) 15726: noexcept (true) __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) 15726: __attribute__ ((__access__ (__read_only__, 1, 3))); 15726: extern "C++" const void *memrchr (const void *__s, int __c, size_t __n) 15726: noexcept (true) __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) 15726: __attribute__ ((__access__ (__read_only__, 1, 3))); 15726: # 141 "/usr/include/string.h" 3 4 15726: extern char *strcpy (char *__restrict __dest, const char *__restrict __src) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: extern char *strncpy (char *__restrict __dest, 15726: const char *__restrict __src, size_t __n) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern char *strcat (char *__restrict __dest, const char *__restrict __src) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: extern char *strncat (char *__restrict __dest, const char *__restrict __src, 15726: size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int strcmp (const char *__s1, const char *__s2) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: extern int strncmp (const char *__s1, const char *__s2, size_t __n) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int strcoll (const char *__s1, const char *__s2) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: extern size_t strxfrm (char *__restrict __dest, 15726: const char *__restrict __src, size_t __n) 15726: noexcept (true) __attribute__ ((__nonnull__ (2))) __attribute__ ((__access__ (__write_only__, 1, 3))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int strcoll_l (const char *__s1, const char *__s2, locale_t __l) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3))); 15726: 15726: 15726: extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n, 15726: locale_t __l) noexcept (true) __attribute__ ((__nonnull__ (2, 4))) 15726: __attribute__ ((__access__ (__write_only__, 1, 3))); 15726: 15726: 15726: 15726: 15726: 15726: extern char *strdup (const char *__s) 15726: noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern char *strndup (const char *__string, size_t __n) 15726: noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1))); 15726: # 224 "/usr/include/string.h" 3 4 15726: extern "C++" 15726: { 15726: extern char *strchr (char *__s, int __c) 15726: noexcept (true) __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 15726: extern const char *strchr (const char *__s, int __c) 15726: noexcept (true) __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * 15726: strchr (char *__s, int __c) noexcept (true) 15726: { 15726: return __builtin_strchr (__s, __c); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * 15726: strchr (const char *__s, int __c) noexcept (true) 15726: { 15726: return __builtin_strchr (__s, __c); 15726: } 15726: 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern "C++" 15726: { 15726: extern char *strrchr (char *__s, int __c) 15726: noexcept (true) __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 15726: extern const char *strrchr (const char *__s, int __c) 15726: noexcept (true) __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * 15726: strrchr (char *__s, int __c) noexcept (true) 15726: { 15726: return __builtin_strrchr (__s, __c); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * 15726: strrchr (const char *__s, int __c) noexcept (true) 15726: { 15726: return __builtin_strrchr (__s, __c); 15726: } 15726: 15726: } 15726: # 281 "/usr/include/string.h" 3 4 15726: extern "C++" char *strchrnul (char *__s, int __c) 15726: noexcept (true) __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 15726: extern "C++" const char *strchrnul (const char *__s, int __c) 15726: noexcept (true) __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 15726: # 293 "/usr/include/string.h" 3 4 15726: extern size_t strcspn (const char *__s, const char *__reject) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern size_t strspn (const char *__s, const char *__accept) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern "C++" 15726: { 15726: extern char *strpbrk (char *__s, const char *__accept) 15726: noexcept (true) __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 15726: extern const char *strpbrk (const char *__s, const char *__accept) 15726: noexcept (true) __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * 15726: strpbrk (char *__s, const char *__accept) noexcept (true) 15726: { 15726: return __builtin_strpbrk (__s, __accept); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * 15726: strpbrk (const char *__s, const char *__accept) noexcept (true) 15726: { 15726: return __builtin_strpbrk (__s, __accept); 15726: } 15726: 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern "C++" 15726: { 15726: extern char *strstr (char *__haystack, const char *__needle) 15726: noexcept (true) __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 15726: extern const char *strstr (const char *__haystack, const char *__needle) 15726: noexcept (true) __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * 15726: strstr (char *__haystack, const char *__needle) noexcept (true) 15726: { 15726: return __builtin_strstr (__haystack, __needle); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * 15726: strstr (const char *__haystack, const char *__needle) noexcept (true) 15726: { 15726: return __builtin_strstr (__haystack, __needle); 15726: } 15726: 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern char *strtok (char *__restrict __s, const char *__restrict __delim) 15726: noexcept (true) __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: 15726: extern char *__strtok_r (char *__restrict __s, 15726: const char *__restrict __delim, 15726: char **__restrict __save_ptr) 15726: noexcept (true) __attribute__ ((__nonnull__ (2, 3))); 15726: 15726: extern char *strtok_r (char *__restrict __s, const char *__restrict __delim, 15726: char **__restrict __save_ptr) 15726: noexcept (true) __attribute__ ((__nonnull__ (2, 3))); 15726: 15726: 15726: 15726: 15726: 15726: extern "C++" char *strcasestr (char *__haystack, const char *__needle) 15726: noexcept (true) __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 15726: extern "C++" const char *strcasestr (const char *__haystack, 15726: const char *__needle) 15726: noexcept (true) __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 15726: # 389 "/usr/include/string.h" 3 4 15726: extern void *memmem (const void *__haystack, size_t __haystacklen, 15726: const void *__needle, size_t __needlelen) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 3))) 15726: __attribute__ ((__access__ (__read_only__, 1, 2))) 15726: __attribute__ ((__access__ (__read_only__, 3, 4))); 15726: 15726: 15726: 15726: extern void *__mempcpy (void *__restrict __dest, 15726: const void *__restrict __src, size_t __n) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: extern void *mempcpy (void *__restrict __dest, 15726: const void *__restrict __src, size_t __n) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: 15726: extern size_t strlen (const char *__s) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: extern size_t strnlen (const char *__string, size_t __maxlen) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: extern char *strerror (int __errnum) noexcept (true); 15726: # 444 "/usr/include/string.h" 3 4 15726: extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) 15726: noexcept (true) __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: 15726: 15726: 15726: 15726: extern const char *strerrordesc_np (int __err) noexcept (true); 15726: 15726: extern const char *strerrorname_np (int __err) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern char *strerror_l (int __errnum, locale_t __l) noexcept (true); 15726: 15726: 15726: 15726: # 1 "/usr/include/strings.h" 1 3 4 15726: # 23 "/usr/include/strings.h" 3 4 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 24 "/usr/include/strings.h" 2 3 4 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern "C" { 15726: 15726: 15726: 15726: extern int bcmp (const void *__s1, const void *__s2, size_t __n) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern void bcopy (const void *__src, void *__dest, size_t __n) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern void bzero (void *__s, size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern "C++" 15726: { 15726: extern char *index (char *__s, int __c) 15726: noexcept (true) __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 15726: extern const char *index (const char *__s, int __c) 15726: noexcept (true) __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * 15726: index (char *__s, int __c) noexcept (true) 15726: { 15726: return __builtin_index (__s, __c); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * 15726: index (const char *__s, int __c) noexcept (true) 15726: { 15726: return __builtin_index (__s, __c); 15726: } 15726: 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern "C++" 15726: { 15726: extern char *rindex (char *__s, int __c) 15726: noexcept (true) __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 15726: extern const char *rindex (const char *__s, int __c) 15726: noexcept (true) __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * 15726: rindex (char *__s, int __c) noexcept (true) 15726: { 15726: return __builtin_rindex (__s, __c); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * 15726: rindex (const char *__s, int __c) noexcept (true) 15726: { 15726: return __builtin_rindex (__s, __c); 15726: } 15726: 15726: } 15726: # 104 "/usr/include/strings.h" 3 4 15726: extern int ffs (int __i) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: 15726: extern int ffsl (long int __l) noexcept (true) __attribute__ ((__const__)); 15726: __extension__ extern int ffsll (long long int __ll) 15726: noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern int strcasecmp (const char *__s1, const char *__s2) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern int strncasecmp (const char *__s1, const char *__s2, size_t __n) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int strcasecmp_l (const char *__s1, const char *__s2, locale_t __loc) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3))); 15726: 15726: 15726: 15726: extern int strncasecmp_l (const char *__s1, const char *__s2, 15726: size_t __n, locale_t __loc) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4))); 15726: 15726: 15726: } 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/strings_fortified.h" 1 3 4 15726: # 22 "/usr/include/arm-linux-gnueabihf/bits/strings_fortified.h" 3 4 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void 15726: __attribute__ ((__leaf__)) bcopy (const void *__src, void *__dest, size_t __len) noexcept (true) 15726: { 15726: (void) __builtin___memmove_chk (__dest, __src, __len, 15726: __builtin_object_size (__dest, 0)); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void 15726: __attribute__ ((__leaf__)) bzero (void *__dest, size_t __len) noexcept (true) 15726: { 15726: (void) __builtin___memset_chk (__dest, '\0', __len, 15726: __builtin_object_size (__dest, 0)); 15726: } 15726: # 145 "/usr/include/strings.h" 2 3 4 15726: # 463 "/usr/include/string.h" 2 3 4 15726: 15726: 15726: 15726: extern void explicit_bzero (void *__s, size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1))) 15726: __attribute__ ((__access__ (__write_only__, 1, 2))); 15726: 15726: 15726: 15726: extern char *strsep (char **__restrict __stringp, 15726: const char *__restrict __delim) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: 15726: extern char *strsignal (int __sig) noexcept (true); 15726: 15726: 15726: 15726: extern const char *sigabbrev_np (int __sig) noexcept (true); 15726: 15726: 15726: extern const char *sigdescr_np (int __sig) noexcept (true); 15726: 15726: 15726: 15726: extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: extern char *stpcpy (char *__restrict __dest, const char *__restrict __src) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: extern char *__stpncpy (char *__restrict __dest, 15726: const char *__restrict __src, size_t __n) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: extern char *stpncpy (char *__restrict __dest, 15726: const char *__restrict __src, size_t __n) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: 15726: extern size_t strlcpy (char *__restrict __dest, 15726: const char *__restrict __src, size_t __n) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__access__ (__write_only__, 1, 3))); 15726: 15726: 15726: 15726: extern size_t strlcat (char *__restrict __dest, 15726: const char *__restrict __src, size_t __n) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__access__ (__read_write__, 1, 3))); 15726: 15726: 15726: 15726: 15726: extern int strverscmp (const char *__s1, const char *__s2) 15726: noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: extern char *strfry (char *__string) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern void *memfrob (void *__s, size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1))) 15726: __attribute__ ((__access__ (__read_write__, 1, 2))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern "C++" char *basename (char *__filename) 15726: noexcept (true) __asm ("basename") __attribute__ ((__nonnull__ (1))); 15726: extern "C++" const char *basename (const char *__filename) 15726: noexcept (true) __asm ("basename") __attribute__ ((__nonnull__ (1))); 15726: # 548 "/usr/include/string.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/string_fortified.h" 1 3 4 15726: # 25 "/usr/include/arm-linux-gnueabihf/bits/string_fortified.h" 3 4 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void * 15726: __attribute__ ((__leaf__)) memcpy (void *__restrict __dest, const void *__restrict __src, size_t __len) noexcept (true) 15726: 15726: { 15726: return __builtin___memcpy_chk (__dest, __src, __len, 15726: __builtin_object_size (__dest, 0)); 15726: } 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void * 15726: __attribute__ ((__leaf__)) memmove (void *__dest, const void *__src, size_t __len) noexcept (true) 15726: { 15726: return __builtin___memmove_chk (__dest, __src, __len, 15726: __builtin_object_size (__dest, 0)); 15726: } 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void * 15726: __attribute__ ((__leaf__)) mempcpy (void *__restrict __dest, const void *__restrict __src, size_t __len) noexcept (true) 15726: 15726: { 15726: return __builtin___mempcpy_chk (__dest, __src, __len, 15726: __builtin_object_size (__dest, 0)); 15726: } 15726: # 56 "/usr/include/arm-linux-gnueabihf/bits/string_fortified.h" 3 4 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void * 15726: __attribute__ ((__leaf__)) memset (void *__dest, int __ch, size_t __len) noexcept (true) 15726: { 15726: return __builtin___memset_chk (__dest, __ch, __len, 15726: __builtin_object_size (__dest, 0)); 15726: } 15726: 15726: 15726: 15726: 15726: void __explicit_bzero_chk (void *__dest, size_t __len, size_t __destlen) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__access__ (__write_only__, 1, 2))); 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void 15726: __attribute__ ((__leaf__)) explicit_bzero (void *__dest, size_t __len) noexcept (true) 15726: { 15726: __explicit_bzero_chk (__dest, __len, __builtin_object_size (__dest, 0)); 15726: } 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * 15726: __attribute__ ((__leaf__)) strcpy (char *__restrict __dest, const char *__restrict __src) noexcept (true) 15726: { 15726: return __builtin___strcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1)); 15726: } 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * 15726: __attribute__ ((__leaf__)) stpcpy (char *__restrict __dest, const char *__restrict __src) noexcept (true) 15726: { 15726: return __builtin___stpcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1)); 15726: } 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * 15726: __attribute__ ((__leaf__)) strncpy (char *__restrict __dest, const char *__restrict __src, size_t __len) noexcept (true) 15726: 15726: { 15726: return __builtin___strncpy_chk (__dest, __src, __len, 15726: __builtin_object_size (__dest, 2 > 1)); 15726: } 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * 15726: __attribute__ ((__leaf__)) stpncpy (char *__dest, const char *__src, size_t __n) noexcept (true) 15726: { 15726: return __builtin___stpncpy_chk (__dest, __src, __n, 15726: __builtin_object_size (__dest, 2 > 1)); 15726: } 15726: # 127 "/usr/include/arm-linux-gnueabihf/bits/string_fortified.h" 3 4 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * 15726: __attribute__ ((__leaf__)) strcat (char *__restrict __dest, const char *__restrict __src) noexcept (true) 15726: { 15726: return __builtin___strcat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1)); 15726: } 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * 15726: __attribute__ ((__leaf__)) strncat (char *__restrict __dest, const char *__restrict __src, size_t __len) noexcept (true) 15726: 15726: { 15726: return __builtin___strncat_chk (__dest, __src, __len, 15726: __builtin_object_size (__dest, 2 > 1)); 15726: } 15726: 15726: 15726: extern size_t __strlcpy_chk (char *__dest, const char *__src, size_t __n, 15726: size_t __destlen) noexcept (true); 15726: extern size_t __strlcpy_alias (char *__dest, const char *__src, size_t __n) noexcept (true) __asm__ ("" "strlcpy") 15726: 15726: ; 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 15726: __attribute__ ((__leaf__)) strlcpy (char *__restrict __dest, const char *__restrict __src, size_t __n) noexcept (true) 15726: 15726: { 15726: if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1 15726: && (!__builtin_constant_p (__n > __builtin_object_size (__dest, 2 > 1)) 15726: || __n > __builtin_object_size (__dest, 2 > 1))) 15726: return __strlcpy_chk (__dest, __src, __n, __builtin_object_size (__dest, 2 > 1)); 15726: return __strlcpy_alias (__dest, __src, __n); 15726: } 15726: 15726: extern size_t __strlcat_chk (char *__dest, const char *__src, size_t __n, 15726: size_t __destlen) noexcept (true); 15726: extern size_t __strlcat_alias (char *__dest, const char *__src, size_t __n) noexcept (true) __asm__ ("" "strlcat") 15726: 15726: ; 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 15726: __attribute__ ((__leaf__)) strlcat (char *__restrict __dest, const char *__restrict __src, size_t __n) noexcept (true) 15726: 15726: { 15726: if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1 15726: && (!__builtin_constant_p (__n > __builtin_object_size (__dest, 2 > 1)) 15726: || __n > __builtin_object_size (__dest, 2 > 1))) 15726: return __strlcat_chk (__dest, __src, __n, __builtin_object_size (__dest, 2 > 1)); 15726: return __strlcat_alias (__dest, __src, __n); 15726: } 15726: # 549 "/usr/include/string.h" 2 3 4 15726: 15726: 15726: 15726: } 15726: # 43 "/usr/include/c++/13/cstring" 2 3 15726: # 71 "/usr/include/c++/13/cstring" 3 15726: extern "C++" 15726: { 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: using ::memchr; 15726: using ::memcmp; 15726: using ::memcpy; 15726: using ::memmove; 15726: using ::memset; 15726: using ::strcat; 15726: using ::strcmp; 15726: using ::strcoll; 15726: using ::strcpy; 15726: using ::strcspn; 15726: using ::strerror; 15726: using ::strlen; 15726: using ::strncat; 15726: using ::strncmp; 15726: using ::strncpy; 15726: using ::strspn; 15726: using ::strtok; 15726: using ::strxfrm; 15726: using ::strchr; 15726: using ::strpbrk; 15726: using ::strrchr; 15726: using ::strstr; 15726: # 122 "/usr/include/c++/13/cstring" 3 15726: 15726: } 15726: } 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 2 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cleanable.h" 1 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cleanable.h" 15726: 15726: 15726: 15726: 15726: 15726: # 13 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cleanable.h" 15726: namespace rocksdb { 15726: 15726: class Cleanable { 15726: public: 15726: Cleanable(); 15726: 15726: Cleanable(Cleanable&) = delete; 15726: Cleanable& operator=(Cleanable&) = delete; 15726: 15726: 15726: ~Cleanable(); 15726: 15726: 15726: Cleanable(Cleanable&&) noexcept; 15726: Cleanable& operator=(Cleanable&&) noexcept; 15726: 15726: 15726: 15726: 15726: 15726: 15726: using CleanupFunction = void (*)(void* arg1, void* arg2); 15726: 15726: 15726: void RegisterCleanup(CleanupFunction function, void* arg1, void* arg2); 15726: 15726: 15726: 15726: void DelegateCleanupsTo(Cleanable* other); 15726: 15726: 15726: inline void Reset() { 15726: DoCleanup(); 15726: cleanup_.function = nullptr; 15726: cleanup_.next = nullptr; 15726: } 15726: 15726: inline bool HasCleanups() { return cleanup_.function != nullptr; } 15726: 15726: protected: 15726: struct Cleanup { 15726: CleanupFunction function; 15726: void* arg1; 15726: void* arg2; 15726: Cleanup* next; 15726: }; 15726: Cleanup cleanup_; 15726: 15726: void RegisterCleanup(Cleanup* c); 15726: 15726: private: 15726: 15726: 15726: 15726: inline void DoCleanup() { 15726: if (cleanup_.function != nullptr) { 15726: (*cleanup_.function)(cleanup_.arg1, cleanup_.arg2); 15726: for (Cleanup* c = cleanup_.next; c != nullptr;) { 15726: (*c->function)(c->arg1, c->arg2); 15726: Cleanup* next = c->next; 15726: delete c; 15726: c = next; 15726: } 15726: } 15726: } 15726: }; 15726: # 89 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cleanable.h" 15726: class SharedCleanablePtr { 15726: public: 15726: 15726: SharedCleanablePtr() {} 15726: 15726: SharedCleanablePtr(const SharedCleanablePtr& from); 15726: SharedCleanablePtr(SharedCleanablePtr&& from) noexcept; 15726: SharedCleanablePtr& operator=(const SharedCleanablePtr& from); 15726: SharedCleanablePtr& operator=(SharedCleanablePtr&& from) noexcept; 15726: 15726: ~SharedCleanablePtr(); 15726: 15726: 15726: void Allocate(); 15726: 15726: void Reset(); 15726: 15726: Cleanable& operator*(); 15726: Cleanable* operator->(); 15726: 15726: Cleanable* get(); 15726: 15726: 15726: 15726: 15726: 15726: 15726: void RegisterCopyWith(Cleanable* target); 15726: 15726: 15726: 15726: 15726: void MoveAsCleanupTo(Cleanable* target); 15726: 15726: private: 15726: struct Impl; 15726: Impl* ptr_ = nullptr; 15726: }; 15726: 15726: } 15726: # 29 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: class Slice { 15726: public: 15726: 15726: Slice() : data_(""), size_(0) {} 15726: 15726: 15726: Slice(const char* d, size_t n) : data_(d), size_(n) {} 15726: 15726: 15726: 15726: Slice(const std::string& s) : data_(s.data()), size_(s.size()) {} 15726: 15726: 15726: 15726: Slice(const std::string_view& sv) : data_(sv.data()), size_(sv.size()) {} 15726: 15726: 15726: 15726: Slice(const char* s) : data_(s) { size_ = (s == nullptr) ? 0 : strlen(s); } 15726: 15726: 15726: 15726: Slice(const struct SliceParts& parts, std::string* buf); 15726: 15726: 15726: const char* data() const { return data_; } 15726: 15726: 15726: size_t size() const { return size_; } 15726: 15726: 15726: bool empty() const { return size_ == 0; } 15726: 15726: 15726: 15726: char operator[](size_t n) const { 15726: 15726: # 68 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: (static_cast ( 15726: # 68 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: n < size() 15726: # 68 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 68 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: "n < size()" 15726: # 68 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 68 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: ; 15726: return data_[n]; 15726: } 15726: 15726: 15726: void clear() { 15726: data_ = ""; 15726: size_ = 0; 15726: } 15726: 15726: 15726: void remove_prefix(size_t n) { 15726: 15726: # 80 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: (static_cast ( 15726: # 80 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: n <= size() 15726: # 80 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 80 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: "n <= size()" 15726: # 80 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 80 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: ; 15726: data_ += n; 15726: size_ -= n; 15726: } 15726: 15726: void remove_suffix(size_t n) { 15726: 15726: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: (static_cast ( 15726: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: n <= size() 15726: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: "n <= size()" 15726: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: ; 15726: size_ -= n; 15726: } 15726: 15726: 15726: 15726: std::string ToString(bool hex = false) const; 15726: 15726: 15726: std::string_view ToStringView() const { 15726: return std::string_view(data_, size_); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool DecodeHex(std::string* result) const; 15726: 15726: 15726: 15726: 15726: 15726: int compare(const Slice& b) const; 15726: 15726: 15726: bool starts_with(const Slice& x) const { 15726: return ((size_ >= x.size_) && (memcmp(data_, x.data_, x.size_) == 0)); 15726: } 15726: 15726: bool ends_with(const Slice& x) const { 15726: return ((size_ >= x.size_) && 15726: (memcmp(data_ + size_ - x.size_, x.data_, x.size_) == 0)); 15726: } 15726: 15726: 15726: size_t difference_offset(const Slice& b) const; 15726: 15726: 15726: const char* data_; 15726: size_t size_; 15726: 15726: 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: class PinnableSlice : public Slice, public Cleanable { 15726: public: 15726: PinnableSlice() { buf_ = &self_space_; } 15726: explicit PinnableSlice(std::string* buf) { buf_ = buf; } 15726: 15726: PinnableSlice(PinnableSlice&& other); 15726: PinnableSlice& operator=(PinnableSlice&& other); 15726: 15726: 15726: PinnableSlice(PinnableSlice&) = delete; 15726: PinnableSlice& operator=(PinnableSlice&) = delete; 15726: 15726: inline void PinSlice(const Slice& s, CleanupFunction f, void* arg1, 15726: void* arg2) { 15726: 15726: # 152 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: (static_cast ( 15726: # 152 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: !pinned_ 15726: # 152 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 152 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: "!pinned_" 15726: # 152 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 152 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: ; 15726: pinned_ = true; 15726: data_ = s.data(); 15726: size_ = s.size(); 15726: RegisterCleanup(f, arg1, arg2); 15726: 15726: # 157 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: (static_cast ( 15726: # 157 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: pinned_ 15726: # 157 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 157 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: "pinned_" 15726: # 157 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 157 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: ; 15726: } 15726: 15726: inline void PinSlice(const Slice& s, Cleanable* cleanable) { 15726: 15726: # 161 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: (static_cast ( 15726: # 161 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: !pinned_ 15726: # 161 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 161 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: "!pinned_" 15726: # 161 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 161 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: ; 15726: pinned_ = true; 15726: data_ = s.data(); 15726: size_ = s.size(); 15726: if (cleanable != nullptr) { 15726: cleanable->DelegateCleanupsTo(this); 15726: } 15726: 15726: # 168 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: (static_cast ( 15726: # 168 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: pinned_ 15726: # 168 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 168 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: "pinned_" 15726: # 168 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 168 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: ; 15726: } 15726: 15726: inline void PinSelf(const Slice& slice) { 15726: 15726: # 172 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: (static_cast ( 15726: # 172 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: !pinned_ 15726: # 172 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 172 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: "!pinned_" 15726: # 172 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 172 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: ; 15726: buf_->assign(slice.data(), slice.size()); 15726: data_ = buf_->data(); 15726: size_ = buf_->size(); 15726: 15726: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: (static_cast ( 15726: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: !pinned_ 15726: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: "!pinned_" 15726: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: ; 15726: } 15726: 15726: inline void PinSelf() { 15726: 15726: # 180 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: (static_cast ( 15726: # 180 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: !pinned_ 15726: # 180 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 180 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: "!pinned_" 15726: # 180 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 180 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: ; 15726: data_ = buf_->data(); 15726: size_ = buf_->size(); 15726: 15726: # 183 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: (static_cast ( 15726: # 183 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: !pinned_ 15726: # 183 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 183 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: "!pinned_" 15726: # 183 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 183 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: ; 15726: } 15726: 15726: void remove_suffix(size_t n) { 15726: 15726: # 187 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: (static_cast ( 15726: # 187 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: n <= size() 15726: # 187 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 187 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: "n <= size()" 15726: # 187 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 187 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: ; 15726: if (pinned_) { 15726: size_ -= n; 15726: } else { 15726: buf_->erase(size() - n, n); 15726: PinSelf(); 15726: } 15726: } 15726: 15726: void remove_prefix(size_t n) { 15726: 15726: # 197 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: (static_cast ( 15726: # 197 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: n <= size() 15726: # 197 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 197 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: "n <= size()" 15726: # 197 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 197 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: ; 15726: if (pinned_) { 15726: data_ += n; 15726: size_ -= n; 15726: } else { 15726: buf_->erase(0, n); 15726: PinSelf(); 15726: } 15726: } 15726: 15726: void Reset() { 15726: Cleanable::Reset(); 15726: pinned_ = false; 15726: size_ = 0; 15726: } 15726: 15726: inline std::string* GetSelf() { return buf_; } 15726: 15726: inline bool IsPinned() const { return pinned_; } 15726: 15726: private: 15726: friend class PinnableSlice4Test; 15726: std::string self_space_; 15726: std::string* buf_; 15726: bool pinned_ = false; 15726: }; 15726: 15726: 15726: 15726: struct SliceParts { 15726: SliceParts(const Slice* _parts, int _num_parts) 15726: : parts(_parts), num_parts(_num_parts) {} 15726: SliceParts() : parts(nullptr), num_parts(0) {} 15726: 15726: const Slice* parts; 15726: int num_parts; 15726: }; 15726: 15726: inline bool operator==(const Slice& x, const Slice& y) { 15726: return ((x.size() == y.size()) && 15726: (memcmp(x.data(), y.data(), x.size()) == 0)); 15726: } 15726: 15726: inline bool operator!=(const Slice& x, const Slice& y) { return !(x == y); } 15726: 15726: inline int Slice::compare(const Slice& b) const { 15726: 15726: # 243 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: (static_cast ( 15726: # 243 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: data_ != nullptr && b.data_ != nullptr 15726: # 243 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 243 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: "data_ != nullptr && b.data_ != nullptr" 15726: # 243 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 243 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice.h" 15726: ; 15726: const size_t min_len = (size_ < b.size_) ? size_ : b.size_; 15726: int r = memcmp(data_, b.data_, min_len); 15726: if (r == 0) { 15726: if (size_ < b.size_) 15726: r = -1; 15726: else if (size_ > b.size_) 15726: r = +1; 15726: } 15726: return r; 15726: } 15726: 15726: inline size_t Slice::difference_offset(const Slice& b) const { 15726: size_t off = 0; 15726: const size_t len = (size_ < b.size_) ? size_ : b.size_; 15726: for (; off < len; off++) { 15726: if (data_[off] != b.data_[off]) break; 15726: } 15726: return off; 15726: } 15726: 15726: } 15726: # 32 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/status.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: class Status { 15726: public: 15726: 15726: Status() 15726: : code_(kOk), 15726: subcode_(kNone), 15726: sev_(kNoError), 15726: retryable_(false), 15726: data_loss_(false), 15726: scope_(0), 15726: state_(nullptr) {} 15726: ~Status() { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: 15726: 15726: Status(const Status& s); 15726: Status& operator=(const Status& s); 15726: Status(Status&& s) noexcept; 15726: Status& operator=(Status&& s) noexcept; 15726: bool operator==(const Status& rhs) const; 15726: bool operator!=(const Status& rhs) const; 15726: 15726: 15726: 15726: 15726: inline void PermitUncheckedError() const { MarkChecked(); } 15726: 15726: inline void MustCheck() const { 15726: 15726: 15726: 15726: } 15726: 15726: enum Code : unsigned char { 15726: kOk = 0, 15726: kNotFound = 1, 15726: kCorruption = 2, 15726: kNotSupported = 3, 15726: kInvalidArgument = 4, 15726: kIOError = 5, 15726: kMergeInProgress = 6, 15726: kIncomplete = 7, 15726: kShutdownInProgress = 8, 15726: kTimedOut = 9, 15726: kAborted = 10, 15726: kBusy = 11, 15726: kExpired = 12, 15726: kTryAgain = 13, 15726: kCompactionTooLarge = 14, 15726: kColumnFamilyDropped = 15, 15726: kMaxCode 15726: }; 15726: 15726: Code code() const { 15726: MarkChecked(); 15726: return code_; 15726: } 15726: 15726: enum SubCode : unsigned char { 15726: kNone = 0, 15726: kMutexTimeout = 1, 15726: kLockTimeout = 2, 15726: kLockLimit = 3, 15726: kNoSpace = 4, 15726: kDeadlock = 5, 15726: kStaleFile = 6, 15726: kMemoryLimit = 7, 15726: kSpaceLimit = 8, 15726: kPathNotFound = 9, 15726: KMergeOperandsInsufficientCapacity = 10, 15726: kManualCompactionPaused = 11, 15726: kOverwritten = 12, 15726: kTxnNotPrepared = 13, 15726: kIOFenced = 14, 15726: kMergeOperatorFailed = 15, 15726: kMergeOperandThresholdExceeded = 16, 15726: kMaxSubCode 15726: }; 15726: 15726: SubCode subcode() const { 15726: MarkChecked(); 15726: return subcode_; 15726: } 15726: 15726: enum Severity : unsigned char { 15726: kNoError = 0, 15726: kSoftError = 1, 15726: kHardError = 2, 15726: kFatalError = 3, 15726: kUnrecoverableError = 4, 15726: kMaxSeverity 15726: }; 15726: 15726: Status(const Status& s, Severity sev); 15726: 15726: Status(Code _code, SubCode _subcode, Severity _sev, const Slice& msg) 15726: : Status(_code, _subcode, msg, "", _sev) {} 15726: 15726: static Status CopyAppendMessage(const Status& s, const Slice& delim, 15726: const Slice& msg); 15726: 15726: Severity severity() const { 15726: MarkChecked(); 15726: return sev_; 15726: } 15726: 15726: 15726: const char* getState() const { 15726: MarkChecked(); 15726: return state_.get(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: Status& UpdateIfOk(Status&& s) { 15726: if (code() == kOk) { 15726: *this = std::move(s); 15726: } else { 15726: 15726: s.PermitUncheckedError(); 15726: } 15726: MustCheck(); 15726: return *this; 15726: } 15726: 15726: Status& UpdateIfOk(const Status& s) { 15726: return UpdateIfOk(std::forward(Status(s))); 15726: } 15726: 15726: 15726: static Status OK() { return Status(); } 15726: 15726: 15726: 15726: 15726: 15726: static Status OkOverwritten() { return Status(kOk, kOverwritten); } 15726: 15726: 15726: 15726: 15726: 15726: static Status OkMergeOperandThresholdExceeded() { 15726: return Status(kOk, kMergeOperandThresholdExceeded); 15726: } 15726: 15726: 15726: static Status NotFound(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return Status(kNotFound, msg, msg2); 15726: } 15726: 15726: 15726: static Status NotFound(SubCode msg = kNone) { return Status(kNotFound, msg); } 15726: 15726: static Status NotFound(SubCode sc, const Slice& msg, 15726: const Slice& msg2 = Slice()) { 15726: return Status(kNotFound, sc, msg, msg2); 15726: } 15726: 15726: static Status Corruption(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return Status(kCorruption, msg, msg2); 15726: } 15726: static Status Corruption(SubCode msg = kNone) { 15726: return Status(kCorruption, msg); 15726: } 15726: 15726: static Status NotSupported(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return Status(kNotSupported, msg, msg2); 15726: } 15726: static Status NotSupported(SubCode msg = kNone) { 15726: return Status(kNotSupported, msg); 15726: } 15726: 15726: static Status InvalidArgument(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return Status(kInvalidArgument, msg, msg2); 15726: } 15726: static Status InvalidArgument(SubCode msg = kNone) { 15726: return Status(kInvalidArgument, msg); 15726: } 15726: 15726: static Status IOError(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return Status(kIOError, msg, msg2); 15726: } 15726: static Status IOError(SubCode msg = kNone) { return Status(kIOError, msg); } 15726: 15726: static Status MergeInProgress(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return Status(kMergeInProgress, msg, msg2); 15726: } 15726: static Status MergeInProgress(SubCode msg = kNone) { 15726: return Status(kMergeInProgress, msg); 15726: } 15726: 15726: static Status Incomplete(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return Status(kIncomplete, msg, msg2); 15726: } 15726: static Status Incomplete(SubCode msg = kNone) { 15726: return Status(kIncomplete, msg); 15726: } 15726: 15726: static Status ShutdownInProgress(SubCode msg = kNone) { 15726: return Status(kShutdownInProgress, msg); 15726: } 15726: static Status ShutdownInProgress(const Slice& msg, 15726: const Slice& msg2 = Slice()) { 15726: return Status(kShutdownInProgress, msg, msg2); 15726: } 15726: static Status Aborted(SubCode msg = kNone) { return Status(kAborted, msg); } 15726: static Status Aborted(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return Status(kAborted, msg, msg2); 15726: } 15726: 15726: static Status Busy(SubCode msg = kNone) { return Status(kBusy, msg); } 15726: static Status Busy(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return Status(kBusy, msg, msg2); 15726: } 15726: 15726: static Status TimedOut(SubCode msg = kNone) { return Status(kTimedOut, msg); } 15726: static Status TimedOut(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return Status(kTimedOut, msg, msg2); 15726: } 15726: 15726: static Status Expired(SubCode msg = kNone) { return Status(kExpired, msg); } 15726: static Status Expired(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return Status(kExpired, msg, msg2); 15726: } 15726: 15726: static Status TryAgain(SubCode msg = kNone) { return Status(kTryAgain, msg); } 15726: static Status TryAgain(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return Status(kTryAgain, msg, msg2); 15726: } 15726: 15726: static Status CompactionTooLarge(SubCode msg = kNone) { 15726: return Status(kCompactionTooLarge, msg); 15726: } 15726: static Status CompactionTooLarge(const Slice& msg, 15726: const Slice& msg2 = Slice()) { 15726: return Status(kCompactionTooLarge, msg, msg2); 15726: } 15726: 15726: static Status ColumnFamilyDropped(SubCode msg = kNone) { 15726: return Status(kColumnFamilyDropped, msg); 15726: } 15726: 15726: static Status ColumnFamilyDropped(const Slice& msg, 15726: const Slice& msg2 = Slice()) { 15726: return Status(kColumnFamilyDropped, msg, msg2); 15726: } 15726: 15726: static Status NoSpace() { return Status(kIOError, kNoSpace); } 15726: static Status NoSpace(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return Status(kIOError, kNoSpace, msg, msg2); 15726: } 15726: 15726: static Status MemoryLimit() { return Status(kAborted, kMemoryLimit); } 15726: static Status MemoryLimit(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return Status(kAborted, kMemoryLimit, msg, msg2); 15726: } 15726: 15726: static Status SpaceLimit() { return Status(kIOError, kSpaceLimit); } 15726: static Status SpaceLimit(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return Status(kIOError, kSpaceLimit, msg, msg2); 15726: } 15726: 15726: static Status PathNotFound() { return Status(kIOError, kPathNotFound); } 15726: static Status PathNotFound(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return Status(kIOError, kPathNotFound, msg, msg2); 15726: } 15726: 15726: static Status TxnNotPrepared() { 15726: return Status(kInvalidArgument, kTxnNotPrepared); 15726: } 15726: static Status TxnNotPrepared(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return Status(kInvalidArgument, kTxnNotPrepared, msg, msg2); 15726: } 15726: 15726: 15726: bool ok() const { 15726: MarkChecked(); 15726: return code() == kOk; 15726: } 15726: 15726: 15726: 15726: bool IsOkOverwritten() const { 15726: MarkChecked(); 15726: return code() == kOk && subcode() == kOverwritten; 15726: } 15726: 15726: 15726: 15726: bool IsOkMergeOperandThresholdExceeded() const { 15726: MarkChecked(); 15726: return code() == kOk && subcode() == kMergeOperandThresholdExceeded; 15726: } 15726: 15726: 15726: bool IsNotFound() const { 15726: MarkChecked(); 15726: return code() == kNotFound; 15726: } 15726: 15726: 15726: bool IsCorruption() const { 15726: MarkChecked(); 15726: return code() == kCorruption; 15726: } 15726: 15726: 15726: bool IsNotSupported() const { 15726: MarkChecked(); 15726: return code() == kNotSupported; 15726: } 15726: 15726: 15726: bool IsInvalidArgument() const { 15726: MarkChecked(); 15726: return code() == kInvalidArgument; 15726: } 15726: 15726: 15726: bool IsIOError() const { 15726: MarkChecked(); 15726: return code() == kIOError; 15726: } 15726: 15726: 15726: bool IsMergeInProgress() const { 15726: MarkChecked(); 15726: return code() == kMergeInProgress; 15726: } 15726: 15726: 15726: bool IsIncomplete() const { 15726: MarkChecked(); 15726: return code() == kIncomplete; 15726: } 15726: 15726: 15726: bool IsShutdownInProgress() const { 15726: MarkChecked(); 15726: return code() == kShutdownInProgress; 15726: } 15726: 15726: bool IsTimedOut() const { 15726: MarkChecked(); 15726: return code() == kTimedOut; 15726: } 15726: 15726: bool IsAborted() const { 15726: MarkChecked(); 15726: return code() == kAborted; 15726: } 15726: 15726: bool IsLockLimit() const { 15726: MarkChecked(); 15726: return code() == kAborted && subcode() == kLockLimit; 15726: } 15726: 15726: 15726: 15726: bool IsBusy() const { 15726: MarkChecked(); 15726: return code() == kBusy; 15726: } 15726: 15726: bool IsDeadlock() const { 15726: MarkChecked(); 15726: return code() == kBusy && subcode() == kDeadlock; 15726: } 15726: 15726: 15726: bool IsExpired() const { 15726: MarkChecked(); 15726: return code() == kExpired; 15726: } 15726: 15726: 15726: 15726: 15726: bool IsTryAgain() const { 15726: MarkChecked(); 15726: return code() == kTryAgain; 15726: } 15726: 15726: 15726: bool IsCompactionTooLarge() const { 15726: MarkChecked(); 15726: return code() == kCompactionTooLarge; 15726: } 15726: 15726: 15726: bool IsColumnFamilyDropped() const { 15726: MarkChecked(); 15726: return code() == kColumnFamilyDropped; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool IsNoSpace() const { 15726: MarkChecked(); 15726: return (code() == kIOError) && (subcode() == kNoSpace); 15726: } 15726: 15726: 15726: 15726: 15726: bool IsMemoryLimit() const { 15726: MarkChecked(); 15726: return (code() == kAborted) && (subcode() == kMemoryLimit); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: bool IsPathNotFound() const { 15726: MarkChecked(); 15726: return (code() == kIOError || code() == kNotFound) && 15726: (subcode() == kPathNotFound); 15726: } 15726: 15726: 15726: 15726: bool IsManualCompactionPaused() const { 15726: MarkChecked(); 15726: return (code() == kIncomplete) && (subcode() == kManualCompactionPaused); 15726: } 15726: 15726: 15726: bool IsTxnNotPrepared() const { 15726: MarkChecked(); 15726: return (code() == kInvalidArgument) && (subcode() == kTxnNotPrepared); 15726: } 15726: 15726: 15726: bool IsIOFenced() const { 15726: MarkChecked(); 15726: return (code() == kIOError) && (subcode() == kIOFenced); 15726: } 15726: 15726: 15726: 15726: std::string ToString() const; 15726: 15726: protected: 15726: Code code_; 15726: SubCode subcode_; 15726: Severity sev_; 15726: bool retryable_; 15726: bool data_loss_; 15726: unsigned char scope_; 15726: 15726: 15726: std::unique_ptr state_; 15726: 15726: 15726: 15726: 15726: explicit Status(Code _code, SubCode _subcode = kNone) 15726: : code_(_code), 15726: subcode_(_subcode), 15726: sev_(kNoError), 15726: retryable_(false), 15726: data_loss_(false), 15726: scope_(0) {} 15726: 15726: explicit Status(Code _code, SubCode _subcode, bool retryable, bool data_loss, 15726: unsigned char scope) 15726: : code_(_code), 15726: subcode_(_subcode), 15726: sev_(kNoError), 15726: retryable_(retryable), 15726: data_loss_(data_loss), 15726: scope_(scope) {} 15726: 15726: Status(Code _code, SubCode _subcode, const Slice& msg, const Slice& msg2, 15726: Severity sev = kNoError); 15726: Status(Code _code, const Slice& msg, const Slice& msg2) 15726: : Status(_code, kNone, msg, msg2) {} 15726: 15726: static std::unique_ptr CopyState(const char* s); 15726: 15726: inline void MarkChecked() const { 15726: 15726: 15726: 15726: } 15726: }; 15726: 15726: inline Status::Status(const Status& s) 15726: : code_(s.code_), 15726: subcode_(s.subcode_), 15726: sev_(s.sev_), 15726: retryable_(s.retryable_), 15726: data_loss_(s.data_loss_), 15726: scope_(s.scope_) { 15726: s.MarkChecked(); 15726: state_ = (s.state_ == nullptr) ? nullptr : CopyState(s.state_.get()); 15726: } 15726: inline Status::Status(const Status& s, Severity sev) 15726: : code_(s.code_), 15726: subcode_(s.subcode_), 15726: sev_(sev), 15726: retryable_(s.retryable_), 15726: data_loss_(s.data_loss_), 15726: scope_(s.scope_) { 15726: s.MarkChecked(); 15726: state_ = (s.state_ == nullptr) ? nullptr : CopyState(s.state_.get()); 15726: } 15726: inline Status& Status::operator=(const Status& s) { 15726: if (this != &s) { 15726: s.MarkChecked(); 15726: MustCheck(); 15726: code_ = s.code_; 15726: subcode_ = s.subcode_; 15726: sev_ = s.sev_; 15726: retryable_ = s.retryable_; 15726: data_loss_ = s.data_loss_; 15726: scope_ = s.scope_; 15726: state_ = (s.state_ == nullptr) ? nullptr : CopyState(s.state_.get()); 15726: } 15726: return *this; 15726: } 15726: 15726: inline Status::Status(Status&& s) noexcept : Status() { 15726: s.MarkChecked(); 15726: *this = std::move(s); 15726: } 15726: 15726: inline Status& Status::operator=(Status&& s) noexcept { 15726: if (this != &s) { 15726: s.MarkChecked(); 15726: MustCheck(); 15726: code_ = std::move(s.code_); 15726: s.code_ = kOk; 15726: subcode_ = std::move(s.subcode_); 15726: s.subcode_ = kNone; 15726: sev_ = std::move(s.sev_); 15726: s.sev_ = kNoError; 15726: retryable_ = std::move(s.retryable_); 15726: s.retryable_ = false; 15726: data_loss_ = std::move(s.data_loss_); 15726: s.data_loss_ = false; 15726: scope_ = std::move(s.scope_); 15726: s.scope_ = 0; 15726: state_ = std::move(s.state_); 15726: } 15726: return *this; 15726: } 15726: 15726: inline bool Status::operator==(const Status& rhs) const { 15726: MarkChecked(); 15726: rhs.MarkChecked(); 15726: return (code_ == rhs.code_); 15726: } 15726: 15726: inline bool Status::operator!=(const Status& rhs) const { 15726: MarkChecked(); 15726: rhs.MarkChecked(); 15726: return !(*this == rhs); 15726: } 15726: 15726: } 15726: # 19 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 2 15726: 15726: namespace rocksdb { 15726: class Logger; 15726: class ObjectRegistry; 15726: class OptionTypeInfo; 15726: struct ColumnFamilyOptions; 15726: struct ConfigOptions; 15726: struct DBOptions; 15726: # 44 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 15726: class Configurable { 15726: protected: 15726: friend class ConfigurableHelper; 15726: struct RegisteredOptions { 15726: 15726: std::string name; 15726: 15726: void* opt_ptr; 15726: 15726: const std::unordered_map* type_map; 15726: }; 15726: 15726: public: 15726: virtual ~Configurable() {} 15726: # 68 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 15726: template 15726: const T* GetOptions() const { 15726: return GetOptions(T::kName()); 15726: } 15726: template 15726: T* GetOptions() { 15726: return GetOptions(T::kName()); 15726: } 15726: template 15726: const T* GetOptions(const std::string& name) const { 15726: return reinterpret_cast(GetOptionsPtr(name)); 15726: } 15726: template 15726: T* GetOptions(const std::string& name) { 15726: return reinterpret_cast(const_cast(GetOptionsPtr(name))); 15726: } 15726: # 114 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 15726: Status ConfigureFromMap( 15726: const ConfigOptions& config_options, 15726: const std::unordered_map& opt_map); 15726: Status ConfigureFromMap( 15726: const ConfigOptions& config_options, 15726: const std::unordered_map& opt_map, 15726: std::unordered_map* unused); 15726: # 133 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 15726: Status ConfigureOption(const ConfigOptions& config_options, 15726: const std::string& name, const std::string& value); 15726: # 158 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 15726: Status ConfigureFromString(const ConfigOptions& config_options, 15726: const std::string& opts); 15726: # 168 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 15726: Status GetOptionString(const ConfigOptions& config_options, 15726: std::string* result) const; 15726: 15726: 15726: 15726: 15726: 15726: std::string ToString(const ConfigOptions& config_options) const { 15726: return ToString(config_options, ""); 15726: } 15726: std::string ToString(const ConfigOptions& config_options, 15726: const std::string& prefix) const; 15726: 15726: 15726: 15726: 15726: 15726: 15726: Status GetOptionNames(const ConfigOptions& config_options, 15726: std::unordered_set* result) const; 15726: # 198 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 15726: virtual Status GetOption(const ConfigOptions& config_options, 15726: const std::string& name, std::string* value) const; 15726: # 208 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 15726: virtual bool AreEquivalent(const ConfigOptions& config_options, 15726: const Configurable* other, 15726: std::string* name) const; 15726: 15726: 15726: 15726: 15726: virtual std::string GetPrintableOptions() const { return ""; } 15726: # 239 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 15726: virtual Status PrepareOptions(const ConfigOptions& config_options); 15726: # 255 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 15726: virtual Status ValidateOptions(const DBOptions& db_opts, 15726: const ColumnFamilyOptions& cf_opts) const; 15726: # 272 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 15726: static Status GetOptionsMap( 15726: const std::string& opt_value, const std::string& default_id, 15726: std::string* id, std::unordered_map* options); 15726: 15726: protected: 15726: # 287 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 15726: virtual const void* GetOptionsPtr(const std::string& name) const; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status ParseStringOptions(const ConfigOptions& config_options, 15726: const std::string& opts_str); 15726: # 309 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 15726: virtual Status ConfigureOptions( 15726: const ConfigOptions& config_options, 15726: const std::unordered_map& opts_map, 15726: std::unordered_map* unused); 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status ParseOption(const ConfigOptions& config_options, 15726: const OptionTypeInfo& opt_info, 15726: const std::string& opt_name, 15726: const std::string& opt_value, void* opt_ptr); 15726: # 338 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 15726: virtual bool OptionsAreEqual(const ConfigOptions& config_options, 15726: const OptionTypeInfo& opt_info, 15726: const std::string& name, 15726: const void* const this_ptr, 15726: const void* const that_ptr, 15726: std::string* bad_name) const; 15726: 15726: 15726: virtual std::string SerializeOptions(const ConfigOptions& config_options, 15726: const std::string& header) const; 15726: 15726: 15726: virtual std::string GetOptionName(const std::string& long_name) const; 15726: # 371 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/configurable.h" 15726: template 15726: void RegisterOptions( 15726: T* opt_ptr, 15726: const std::unordered_map* opt_map) { 15726: RegisterOptions(T::kName(), opt_ptr, opt_map); 15726: } 15726: void RegisterOptions( 15726: const std::string& name, void* opt_ptr, 15726: const std::unordered_map* opt_map); 15726: 15726: 15726: inline bool HasRegisteredOptions() const { return !options_.empty(); } 15726: 15726: private: 15726: 15726: 15726: 15726: std::vector options_; 15726: }; 15726: } 15726: # 12 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h" 2 15726: 15726: 15726: namespace rocksdb { 15726: # 56 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h" 15726: class Customizable : public Configurable { 15726: public: 15726: ~Customizable() override {} 15726: 15726: 15726: virtual const char* Name() const = 0; 15726: 15726: 15726: 15726: 15726: virtual std::string GetId() const { 15726: std::string id = Name(); 15726: return id; 15726: } 15726: # 89 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h" 15726: virtual bool IsInstanceOf(const std::string& name) const { 15726: if (name.empty()) { 15726: return false; 15726: } else if (name == Name()) { 15726: return true; 15726: } else { 15726: const char* nickname = NickName(); 15726: if (nickname != nullptr && name == nickname) { 15726: return true; 15726: } else { 15726: return false; 15726: } 15726: } 15726: } 15726: 15726: const void* GetOptionsPtr(const std::string& name) const override { 15726: const void* ptr = Configurable::GetOptionsPtr(name); 15726: if (ptr != nullptr) { 15726: return ptr; 15726: } else { 15726: const auto inner = Inner(); 15726: if (inner != nullptr) { 15726: return inner->GetOptionsPtr(name); 15726: } else { 15726: return nullptr; 15726: } 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: const T* CheckedCast() const { 15726: if (IsInstanceOf(T::kClassName())) { 15726: return static_cast(this); 15726: } else { 15726: const auto inner = Inner(); 15726: if (inner != nullptr) { 15726: return inner->CheckedCast(); 15726: } else { 15726: return nullptr; 15726: } 15726: } 15726: } 15726: 15726: template 15726: T* CheckedCast() { 15726: if (IsInstanceOf(T::kClassName())) { 15726: return static_cast(this); 15726: } else { 15726: auto inner = const_cast(Inner()); 15726: if (inner != nullptr) { 15726: return inner->CheckedCast(); 15726: } else { 15726: return nullptr; 15726: } 15726: } 15726: } 15726: # 157 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h" 15726: bool AreEquivalent(const ConfigOptions& config_options, 15726: const Configurable* other, 15726: std::string* mismatch) const override; 15726: 15726: 15726: Status GetOption(const ConfigOptions& config_options, const std::string& name, 15726: std::string* value) const override; 15726: # 183 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h" 15726: static Status GetOptionsMap( 15726: const ConfigOptions& config_options, const Customizable* custom, 15726: const std::string& opt_value, std::string* id, 15726: std::unordered_map* options); 15726: # 195 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h" 15726: static Status ConfigureNewObject( 15726: const ConfigOptions& config_options, Customizable* object, 15726: const std::unordered_map& options); 15726: 15726: 15726: 15726: 15726: virtual const Customizable* Inner() const { return nullptr; } 15726: 15726: protected: 15726: # 217 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/customizable.h" 15726: std::string GenerateIndividualId() const; 15726: 15726: 15726: 15726: 15726: virtual const char* NickName() const { return ""; } 15726: 15726: std::string GetOptionName(const std::string& long_name) const override; 15726: std::string SerializeOptions(const ConfigOptions& options, 15726: const std::string& prefix) const override; 15726: }; 15726: 15726: } 15726: # 14 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 2 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class Slice; 15726: 15726: 15726: 15726: class CompareInterface { 15726: public: 15726: virtual ~CompareInterface() {} 15726: # 33 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 15726: virtual int Compare(const Slice& a, const Slice& b) const = 0; 15726: }; 15726: # 44 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 15726: class Comparator : public Customizable, public CompareInterface { 15726: public: 15726: Comparator() : timestamp_size_(0) {} 15726: 15726: Comparator(size_t ts_sz) : timestamp_size_(ts_sz) {} 15726: 15726: Comparator(const Comparator& orig) : timestamp_size_(orig.timestamp_size_) {} 15726: 15726: Comparator& operator=(const Comparator& rhs) { 15726: if (this != &rhs) { 15726: timestamp_size_ = rhs.timestamp_size_; 15726: } 15726: return *this; 15726: } 15726: 15726: ~Comparator() override {} 15726: 15726: static Status CreateFromString(const ConfigOptions& opts, 15726: const std::string& id, 15726: const Comparator** comp); 15726: static const char* Type() { return "Comparator"; } 15726: # 76 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 15726: const char* Name() const override = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual bool Equal(const Slice& a, const Slice& b) const { 15726: return Compare(a, b) == 0; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void FindShortestSeparator(std::string* start, 15726: const Slice& limit) const = 0; 15726: 15726: 15726: 15726: 15726: virtual void FindShortSuccessor(std::string* key) const = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual bool IsSameLengthImmediateSuccessor(const Slice& , 15726: const Slice& ) const { 15726: return false; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: virtual bool CanKeysWithDifferentByteContentsBeEqual() const { return true; } 15726: 15726: 15726: 15726: virtual const Comparator* GetRootComparator() const { return this; } 15726: 15726: inline size_t timestamp_size() const { return timestamp_size_; } 15726: 15726: 15726: 15726: 15726: virtual Slice GetMaxTimestamp() const { 15726: if (timestamp_size_ == 0) { 15726: return Slice(); 15726: } 15726: 15726: # 130 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 3 4 15726: (static_cast ( 15726: # 130 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 15726: false 15726: # 130 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 130 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 15726: "false" 15726: # 130 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 130 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 15726: ; 15726: return Slice(); 15726: } 15726: 15726: 15726: 15726: 15726: virtual Slice GetMinTimestamp() const { 15726: if (timestamp_size_ == 0) { 15726: return Slice(); 15726: } 15726: 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 3 4 15726: (static_cast ( 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 15726: false 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 15726: "false" 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 15726: ; 15726: return Slice(); 15726: } 15726: 15726: 15726: virtual std::string TimestampToString(const Slice& ) const { 15726: return ""; 15726: } 15726: 15726: int CompareWithoutTimestamp(const Slice& a, const Slice& b) const { 15726: return CompareWithoutTimestamp(a, true, b, true); 15726: } 15726: # 163 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/comparator.h" 15726: virtual int CompareTimestamp(const Slice& , 15726: const Slice& ) const { 15726: return 0; 15726: } 15726: 15726: virtual int CompareWithoutTimestamp(const Slice& a, bool , 15726: const Slice& b, bool ) const { 15726: return Compare(a, b); 15726: } 15726: 15726: virtual bool EqualWithoutTimestamp(const Slice& a, const Slice& b) const { 15726: return 0 == 15726: CompareWithoutTimestamp(a, true, b, true); 15726: } 15726: 15726: private: 15726: size_t timestamp_size_; 15726: }; 15726: 15726: 15726: 15726: 15726: const Comparator* BytewiseComparator(); 15726: 15726: 15726: 15726: const Comparator* ReverseBytewiseComparator(); 15726: 15726: 15726: 15726: 15726: 15726: 15726: const Comparator* BytewiseComparatorWithU64Ts(); 15726: 15726: 15726: 15726: 15726: 15726: 15726: const Comparator* ReverseBytewiseComparatorWithU64Ts(); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: Status DecodeU64Ts(const Slice& ts, uint64_t* int_ts); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: Slice EncodeU64Ts(uint64_t ts, std::string* ts_buf); 15726: 15726: 15726: 15726: 15726: Slice MaxU64Ts(); 15726: 15726: 15726: 15726: 15726: Slice MinU64Ts(); 15726: 15726: } 15726: # 19 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice_transform.h" 1 15726: # 15 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice_transform.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class Slice; 15726: struct ConfigOptions; 15726: # 35 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice_transform.h" 15726: class SliceTransform : public Customizable { 15726: public: 15726: virtual ~SliceTransform(){} 15726: 15726: 15726: const char* Name() const override = 0; 15726: static const char* Type() { return "SliceTransform"; } 15726: 15726: 15726: static Status CreateFromString(const ConfigOptions& config_options, 15726: const std::string& id, 15726: std::shared_ptr* result); 15726: 15726: 15726: 15726: std::string AsString() const; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Slice Transform(const Slice& key) const = 0; 15726: # 71 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice_transform.h" 15726: virtual bool InDomain(const Slice& key) const = 0; 15726: 15726: 15726: 15726: virtual bool InRange(const Slice& ) const { return false; } 15726: # 92 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice_transform.h" 15726: virtual bool FullLengthEnabled(size_t* ) const { return false; } 15726: # 119 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/slice_transform.h" 15726: virtual bool SameResultWhenAppended(const Slice& ) const { 15726: return false; 15726: } 15726: }; 15726: 15726: 15726: 15726: const SliceTransform* NewFixedPrefixTransform(size_t prefix_len); 15726: 15726: 15726: 15726: const SliceTransform* NewCappedPrefixTransform(size_t cap_len); 15726: 15726: 15726: const SliceTransform* NewNoopTransform(); 15726: 15726: } 15726: # 21 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/types.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 15 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/types.h" 15726: namespace rocksdb { 15726: 15726: 15726: 15726: using ColumnFamilyId = uint32_t; 15726: 15726: 15726: using SequenceNumber = uint64_t; 15726: 15726: struct TableProperties; 15726: using TablePropertiesCollection = 15726: std::unordered_map>; 15726: 15726: const SequenceNumber kMinUnCommittedSeq = 1; 15726: 15726: enum class TableFileCreationReason { 15726: kFlush, 15726: kCompaction, 15726: kRecovery, 15726: kMisc, 15726: }; 15726: 15726: enum class BlobFileCreationReason { 15726: kFlush, 15726: kCompaction, 15726: kRecovery, 15726: }; 15726: 15726: 15726: 15726: enum FileType { 15726: kWalFile, 15726: kDBLockFile, 15726: kTableFile, 15726: kDescriptorFile, 15726: kCurrentFile, 15726: kTempFile, 15726: kInfoLogFile, 15726: kMetaDatabase, 15726: kIdentityFile, 15726: kOptionsFile, 15726: kBlobFile 15726: }; 15726: 15726: 15726: 15726: enum EntryType { 15726: kEntryPut, 15726: kEntryDelete, 15726: kEntrySingleDelete, 15726: kEntryMerge, 15726: kEntryRangeDeletion, 15726: kEntryBlobIndex, 15726: kEntryDeleteWithTimestamp, 15726: kEntryWideColumnEntity, 15726: kEntryTimedPut, 15726: kEntryOther, 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: struct ParsedEntryInfo { 15726: Slice user_key; 15726: Slice timestamp; 15726: SequenceNumber sequence; 15726: EntryType type; 15726: }; 15726: 15726: enum class WriteStallCause { 15726: 15726: 15726: 15726: kMemtableLimit, 15726: kL0FileCountLimit, 15726: kPendingCompactionBytes, 15726: kCFScopeWriteStallCauseEnumMax, 15726: 15726: 15726: 15726: 15726: 15726: kWriteBufferManagerLimit, 15726: kDBScopeWriteStallCauseEnumMax, 15726: 15726: 15726: 15726: kNone, 15726: }; 15726: 15726: enum class WriteStallCondition { 15726: kDelayed, 15726: kStopped, 15726: 15726: kNormal, 15726: }; 15726: 15726: } 15726: # 22 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/coding.h" 1 15726: # 18 "/build/reproducible-path/rocksdb-9.3.1/util/coding.h" 15726: 15726: # 1 "/usr/include/c++/13/algorithm" 1 3 15726: # 58 "/usr/include/c++/13/algorithm" 3 15726: 15726: # 59 "/usr/include/c++/13/algorithm" 3 15726: # 73 "/usr/include/c++/13/algorithm" 3 15726: # 1 "/usr/include/c++/13/pstl/glue_algorithm_defs.h" 1 3 15726: # 17 "/usr/include/c++/13/pstl/glue_algorithm_defs.h" 3 15726: 15726: # 17 "/usr/include/c++/13/pstl/glue_algorithm_defs.h" 3 15726: namespace std 15726: { 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 15726: any_of(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 15726: all_of(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 15726: none_of(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: for_each(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Function __f); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: for_each_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size __n, _Function __f); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: find_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: find_if_not(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: find(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1> 15726: find_end(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first, 15726: _ForwardIterator2 __s_last, _BinaryPredicate __pred); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1> 15726: find_end(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first, 15726: _ForwardIterator2 __s_last); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1> 15726: find_first_of(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 15726: _ForwardIterator2 __s_first, _ForwardIterator2 __s_last, _BinaryPredicate __pred); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1> 15726: find_first_of(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 15726: _ForwardIterator2 __s_first, _ForwardIterator2 __s_last); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: adjacent_find(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: adjacent_find(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __pred); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, 15726: typename iterator_traits<_ForwardIterator>::difference_type> 15726: count(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, 15726: typename iterator_traits<_ForwardIterator>::difference_type> 15726: count_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1> 15726: search(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first, 15726: _ForwardIterator2 __s_last, _BinaryPredicate __pred); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1> 15726: search(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first, 15726: _ForwardIterator2 __s_last); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: search_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Size __count, 15726: const _Tp& __value, _BinaryPredicate __pred); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: search_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Size __count, 15726: const _Tp& __value); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: copy_n(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _Size __n, _ForwardIterator2 __result); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: copy_if(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 result, 15726: _Predicate __pred); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: swap_ranges(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: transform(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result, 15726: _UnaryOperation __op); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: transform(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 15726: _ForwardIterator __result, _BinaryOperation __op); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: replace_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred, 15726: const _Tp& __new_value); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: replace(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __old_value, 15726: const _Tp& __new_value); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: replace_copy_if(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 15726: _ForwardIterator2 __result, _UnaryPredicate __pred, const _Tp& __new_value); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: replace_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result, 15726: const _Tp& __old_value, const _Tp& __new_value); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: fill(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: fill_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size __count, const _Tp& __value); 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: generate(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Generator __g); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: generate_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size count, _Generator __g); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: remove_copy_if(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 15726: _ForwardIterator2 __result, _Predicate __pred); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: remove_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result, 15726: const _Tp& __value); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: remove_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: remove(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: unique(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __pred); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: unique(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: unique_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result, 15726: _BinaryPredicate __pred); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: unique_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: reverse(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __last); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: reverse_copy(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __last, 15726: _ForwardIterator __d_first); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: rotate(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __middle, _ForwardIterator __last); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: rotate_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __middle, _ForwardIterator1 __last, 15726: _ForwardIterator2 __result); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 15726: is_partitioned(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: partition(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _BidirectionalIterator> 15726: stable_partition(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __last, 15726: _UnaryPredicate __pred); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>> 15726: partition_copy(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, 15726: _ForwardIterator1 __out_true, _ForwardIterator2 __out_false, _UnaryPredicate __pred); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: stable_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: stable_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>> 15726: mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 15726: _ForwardIterator2 __last2, _BinaryPredicate __pred); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>> 15726: mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 15726: _BinaryPredicate __pred); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>> 15726: mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 15726: _ForwardIterator2 __last2); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>> 15726: mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 15726: equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 15726: _BinaryPredicate __p); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 15726: equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 15726: equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 15726: _ForwardIterator2 __last2, _BinaryPredicate __p); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 15726: equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 15726: _ForwardIterator2 __last2); 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: move(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __d_first); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: partial_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __middle, 15726: _RandomAccessIterator __last, _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: partial_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __middle, 15726: _RandomAccessIterator __last); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _RandomAccessIterator> 15726: partial_sort_copy(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, 15726: _RandomAccessIterator __d_first, _RandomAccessIterator __d_last, _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _RandomAccessIterator> 15726: partial_sort_copy(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, 15726: _RandomAccessIterator __d_first, _RandomAccessIterator __d_last); 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: is_sorted_until(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: is_sorted_until(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 15726: is_sorted(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 15726: is_sorted(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: nth_element(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __nth, 15726: _RandomAccessIterator __last, _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: nth_element(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __nth, 15726: _RandomAccessIterator __last); 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: merge(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 15726: _ForwardIterator2 __last2, _ForwardIterator __d_first, _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: merge(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 15726: _ForwardIterator2 __last2, _ForwardIterator __d_first); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: inplace_merge(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __middle, 15726: _BidirectionalIterator __last, _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 15726: inplace_merge(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __middle, 15726: _BidirectionalIterator __last); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 15726: includes(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 15726: _ForwardIterator2 __last2, _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 15726: includes(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 15726: _ForwardIterator2 __last2); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: set_union(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 15726: _ForwardIterator2 __last2, _ForwardIterator __result, _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: set_union(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 15726: _ForwardIterator2 __last2, _ForwardIterator __result); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: set_intersection(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result, _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: set_intersection(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: set_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result, _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: set_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: set_symmetric_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator result, 15726: _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: set_symmetric_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result); 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _RandomAccessIterator> 15726: is_heap_until(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _RandomAccessIterator> 15726: is_heap_until(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 15726: is_heap(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 15726: is_heap(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: min_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: min_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: max_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 15726: max_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator, _ForwardIterator>> 15726: minmax_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator, _ForwardIterator>> 15726: minmax_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 15726: lexicographical_compare(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _ForwardIterator2 __last2, _Compare __comp); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 15726: lexicographical_compare(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _ForwardIterator2 __last2); 15726: 15726: } 15726: # 74 "/usr/include/c++/13/algorithm" 2 3 15726: # 20 "/build/reproducible-path/rocksdb-9.3.1/util/coding.h" 2 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/port/port.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/port/port.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 1 15726: # 12 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 15726: 15726: 15726: # 1 "/usr/include/c++/13/thread" 1 3 15726: # 32 "/usr/include/c++/13/thread" 3 15726: 15726: # 33 "/usr/include/c++/13/thread" 3 15726: # 45 "/usr/include/c++/13/thread" 3 15726: # 1 "/usr/include/c++/13/bits/std_thread.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/std_thread.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/std_thread.h" 3 15726: # 52 "/usr/include/c++/13/bits/std_thread.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 78 "/usr/include/c++/13/bits/std_thread.h" 3 15726: class thread 15726: { 15726: public: 15726: 15726: using native_handle_type = __gthread_t; 15726: # 92 "/usr/include/c++/13/bits/std_thread.h" 3 15726: class id 15726: { 15726: native_handle_type _M_thread; 15726: 15726: public: 15726: id() noexcept : _M_thread() { } 15726: 15726: explicit 15726: id(native_handle_type __id) : _M_thread(__id) { } 15726: 15726: private: 15726: friend class thread; 15726: friend struct hash; 15726: 15726: friend bool 15726: operator==(id __x, id __y) noexcept; 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator<(id __x, id __y) noexcept; 15726: 15726: 15726: template 15726: friend basic_ostream<_CharT, _Traits>& 15726: operator<<(basic_ostream<_CharT, _Traits>& __out, id __id); 15726: }; 15726: 15726: private: 15726: id _M_id; 15726: 15726: 15726: 15726: 15726: template 15726: using __not_same = __not_, thread>>; 15726: 15726: public: 15726: thread() noexcept = default; 15726: 15726: 15726: private: 15726: 15726: 15726: 15726: 15726: 15726: 15726: static void 15726: _M_thread_deps_never_run() { 15726: 15726: 15726: 15726: 15726: } 15726: 15726: public: 15726: template>> 15726: explicit 15726: thread(_Callable&& __f, _Args&&... __args) 15726: { 15726: static_assert( __is_invocable::type, 15726: typename decay<_Args>::type...>::value, 15726: "std::thread arguments must be invocable after conversion to rvalues" 15726: ); 15726: 15726: using _Wrapper = _Call_wrapper<_Callable, _Args...>; 15726: 15726: 15726: _M_start_thread(_State_ptr(new _State_impl<_Wrapper>( 15726: std::forward<_Callable>(__f), std::forward<_Args>(__args)...)), 15726: _M_thread_deps_never_run); 15726: } 15726: 15726: 15726: ~thread() 15726: { 15726: if (joinable()) 15726: std::__terminate(); 15726: } 15726: 15726: thread(const thread&) = delete; 15726: 15726: thread(thread&& __t) noexcept 15726: { swap(__t); } 15726: 15726: thread& operator=(const thread&) = delete; 15726: 15726: thread& operator=(thread&& __t) noexcept 15726: { 15726: if (joinable()) 15726: std::__terminate(); 15726: swap(__t); 15726: return *this; 15726: } 15726: 15726: void 15726: swap(thread& __t) noexcept 15726: { std::swap(_M_id, __t._M_id); } 15726: 15726: bool 15726: joinable() const noexcept 15726: { return !(_M_id == id()); } 15726: 15726: void 15726: join(); 15726: 15726: void 15726: detach(); 15726: 15726: id 15726: get_id() const noexcept 15726: { return _M_id; } 15726: 15726: 15726: 15726: native_handle_type 15726: native_handle() 15726: { return _M_id._M_thread; } 15726: 15726: 15726: static unsigned int 15726: hardware_concurrency() noexcept; 15726: 15726: 15726: 15726: private: 15726: 15726: 15726: 15726: struct _State 15726: { 15726: virtual ~_State(); 15726: virtual void _M_run() = 0; 15726: }; 15726: using _State_ptr = unique_ptr<_State>; 15726: 15726: private: 15726: template 15726: struct _State_impl : public _State 15726: { 15726: _Callable _M_func; 15726: 15726: template 15726: _State_impl(_Args&&... __args) 15726: : _M_func(std::forward<_Args>(__args)...) 15726: { } 15726: 15726: void 15726: _M_run() { _M_func(); } 15726: }; 15726: 15726: void 15726: _M_start_thread(_State_ptr, void (*)()); 15726: # 269 "/usr/include/c++/13/bits/std_thread.h" 3 15726: private: 15726: 15726: template 15726: struct _Invoker 15726: { 15726: template 15726: explicit 15726: _Invoker(_Args&&... __args) 15726: : _M_t(std::forward<_Args>(__args)...) 15726: { } 15726: 15726: _Tuple _M_t; 15726: 15726: template 15726: struct __result; 15726: template 15726: struct __result> 15726: : __invoke_result<_Fn, _Args...> 15726: { }; 15726: 15726: template 15726: typename __result<_Tuple>::type 15726: _M_invoke(_Index_tuple<_Ind...>) 15726: { return std::__invoke(std::get<_Ind>(std::move(_M_t))...); } 15726: 15726: typename __result<_Tuple>::type 15726: operator()() 15726: { 15726: using _Indices 15726: = typename _Build_index_tuple::value>::__type; 15726: return _M_invoke(_Indices()); 15726: } 15726: }; 15726: 15726: public: 15726: 15726: template 15726: using _Call_wrapper = _Invoker::type...>>; 15726: 15726: 15726: }; 15726: # 318 "/usr/include/c++/13/bits/std_thread.h" 3 15726: inline void 15726: swap(thread& __x, thread& __y) noexcept 15726: { __x.swap(__y); } 15726: 15726: 15726: inline bool 15726: operator==(thread::id __x, thread::id __y) noexcept 15726: { 15726: 15726: 15726: 15726: 15726: return __x._M_thread == __y._M_thread; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: template<> 15726: struct hash 15726: : public __hash_base 15726: { 15726: size_t 15726: operator()(const thread::id& __id) const noexcept 15726: { return std::_Hash_impl::hash(__id._M_thread); } 15726: }; 15726: 15726: namespace this_thread 15726: { 15726: 15726: inline thread::id 15726: get_id() noexcept 15726: { 15726: 15726: 15726: 15726: return thread::id(pthread_self()); 15726: 15726: 15726: 15726: } 15726: 15726: 15726: inline void 15726: yield() noexcept 15726: { 15726: 15726: __gthread_yield(); 15726: 15726: } 15726: 15726: } 15726: 15726: 15726: 15726: 15726: } 15726: # 46 "/usr/include/c++/13/thread" 2 3 15726: # 1 "/usr/include/c++/13/bits/this_thread_sleep.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/this_thread_sleep.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/this_thread_sleep.h" 3 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/chrono.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/chrono.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/chrono.h" 3 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/ratio" 1 3 15726: # 33 "/usr/include/c++/13/ratio" 3 15726: 15726: # 34 "/usr/include/c++/13/ratio" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/cstdint" 1 3 15726: # 32 "/usr/include/c++/13/cstdint" 3 15726: 15726: # 33 "/usr/include/c++/13/cstdint" 3 15726: # 48 "/usr/include/c++/13/cstdint" 3 15726: namespace std 15726: { 15726: 15726: using ::int8_t; 15726: using ::int16_t; 15726: using ::int32_t; 15726: using ::int64_t; 15726: 15726: using ::int_fast8_t; 15726: using ::int_fast16_t; 15726: using ::int_fast32_t; 15726: using ::int_fast64_t; 15726: 15726: using ::int_least8_t; 15726: using ::int_least16_t; 15726: using ::int_least32_t; 15726: using ::int_least64_t; 15726: 15726: using ::intmax_t; 15726: using ::intptr_t; 15726: 15726: using ::uint8_t; 15726: using ::uint16_t; 15726: using ::uint32_t; 15726: using ::uint64_t; 15726: 15726: using ::uint_fast8_t; 15726: using ::uint_fast16_t; 15726: using ::uint_fast32_t; 15726: using ::uint_fast64_t; 15726: 15726: using ::uint_least8_t; 15726: using ::uint_least16_t; 15726: using ::uint_least32_t; 15726: using ::uint_least64_t; 15726: 15726: using ::uintmax_t; 15726: using ::uintptr_t; 15726: # 142 "/usr/include/c++/13/cstdint" 3 15726: } 15726: # 41 "/usr/include/c++/13/ratio" 2 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 56 "/usr/include/c++/13/ratio" 3 15726: template 15726: struct __static_sign 15726: : integral_constant 15726: { }; 15726: 15726: template 15726: struct __static_abs 15726: : integral_constant::value> 15726: { }; 15726: 15726: template 15726: struct __static_gcd 15726: : __static_gcd<_Qn, (_Pn % _Qn)> 15726: { }; 15726: 15726: template 15726: struct __static_gcd<_Pn, 0> 15726: : integral_constant::value> 15726: { }; 15726: 15726: template 15726: struct __static_gcd<0, _Qn> 15726: : integral_constant::value> 15726: { }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct __safe_multiply 15726: { 15726: private: 15726: static const uintmax_t __c = uintmax_t(1) << (sizeof(intmax_t) * 4); 15726: 15726: static const uintmax_t __a0 = __static_abs<_Pn>::value % __c; 15726: static const uintmax_t __a1 = __static_abs<_Pn>::value / __c; 15726: static const uintmax_t __b0 = __static_abs<_Qn>::value % __c; 15726: static const uintmax_t __b1 = __static_abs<_Qn>::value / __c; 15726: 15726: static_assert(__a1 == 0 || __b1 == 0, 15726: "overflow in multiplication"); 15726: static_assert(__a0 * __b1 + __b0 * __a1 < (__c >> 1), 15726: "overflow in multiplication"); 15726: static_assert(__b0 * __a0 <= 0x7fffffffffffffffLL, 15726: "overflow in multiplication"); 15726: static_assert((__a0 * __b1 + __b0 * __a1) * __c 15726: <= 0x7fffffffffffffffLL - __b0 * __a0, 15726: "overflow in multiplication"); 15726: 15726: public: 15726: static const intmax_t value = _Pn * _Qn; 15726: }; 15726: 15726: 15726: 15726: template 15726: struct __big_less 15726: : integral_constant 15726: { }; 15726: 15726: template 15726: struct __big_add 15726: { 15726: static constexpr uintmax_t __lo = __lo1 + __lo2; 15726: static constexpr uintmax_t __hi = (__hi1 + __hi2 + 15726: (__lo1 + __lo2 < __lo1)); 15726: }; 15726: 15726: 15726: template 15726: struct __big_sub 15726: { 15726: static_assert(!__big_less<__hi1, __lo1, __hi2, __lo2>::value, 15726: "Internal library error"); 15726: static constexpr uintmax_t __lo = __lo1 - __lo2; 15726: static constexpr uintmax_t __hi = (__hi1 - __hi2 - 15726: (__lo1 < __lo2)); 15726: }; 15726: 15726: 15726: template 15726: struct __big_mul 15726: { 15726: private: 15726: static constexpr uintmax_t __c = uintmax_t(1) << (sizeof(intmax_t) * 4); 15726: static constexpr uintmax_t __x0 = __x % __c; 15726: static constexpr uintmax_t __x1 = __x / __c; 15726: static constexpr uintmax_t __y0 = __y % __c; 15726: static constexpr uintmax_t __y1 = __y / __c; 15726: static constexpr uintmax_t __x0y0 = __x0 * __y0; 15726: static constexpr uintmax_t __x0y1 = __x0 * __y1; 15726: static constexpr uintmax_t __x1y0 = __x1 * __y0; 15726: static constexpr uintmax_t __x1y1 = __x1 * __y1; 15726: static constexpr uintmax_t __mix = __x0y1 + __x1y0; 15726: static constexpr uintmax_t __mix_lo = __mix * __c; 15726: static constexpr uintmax_t __mix_hi 15726: = __mix / __c + ((__mix < __x0y1) ? __c : 0); 15726: typedef __big_add<__mix_hi, __mix_lo, __x1y1, __x0y0> _Res; 15726: public: 15726: static constexpr uintmax_t __hi = _Res::__hi; 15726: static constexpr uintmax_t __lo = _Res::__lo; 15726: }; 15726: 15726: 15726: 15726: template 15726: struct __big_div_impl 15726: { 15726: private: 15726: static_assert(__d >= (uintmax_t(1) << (sizeof(intmax_t) * 8 - 1)), 15726: "Internal library error"); 15726: static_assert(__n1 < __d, "Internal library error"); 15726: static constexpr uintmax_t __c = uintmax_t(1) << (sizeof(intmax_t) * 4); 15726: static constexpr uintmax_t __d1 = __d / __c; 15726: static constexpr uintmax_t __d0 = __d % __c; 15726: 15726: static constexpr uintmax_t __q1x = __n1 / __d1; 15726: static constexpr uintmax_t __r1x = __n1 % __d1; 15726: static constexpr uintmax_t __m = __q1x * __d0; 15726: static constexpr uintmax_t __r1y = __r1x * __c + __n0 / __c; 15726: static constexpr uintmax_t __r1z = __r1y + __d; 15726: static constexpr uintmax_t __r1 15726: = ((__r1y < __m) ? ((__r1z >= __d) && (__r1z < __m)) 15726: ? (__r1z + __d) : __r1z : __r1y) - __m; 15726: static constexpr uintmax_t __q1 15726: = __q1x - ((__r1y < __m) 15726: ? ((__r1z >= __d) && (__r1z < __m)) ? 2 : 1 : 0); 15726: static constexpr uintmax_t __q0x = __r1 / __d1; 15726: static constexpr uintmax_t __r0x = __r1 % __d1; 15726: static constexpr uintmax_t __n = __q0x * __d0; 15726: static constexpr uintmax_t __r0y = __r0x * __c + __n0 % __c; 15726: static constexpr uintmax_t __r0z = __r0y + __d; 15726: static constexpr uintmax_t __r0 15726: = ((__r0y < __n) ? ((__r0z >= __d) && (__r0z < __n)) 15726: ? (__r0z + __d) : __r0z : __r0y) - __n; 15726: static constexpr uintmax_t __q0 15726: = __q0x - ((__r0y < __n) ? ((__r0z >= __d) 15726: && (__r0z < __n)) ? 2 : 1 : 0); 15726: 15726: public: 15726: static constexpr uintmax_t __quot = __q1 * __c + __q0; 15726: static constexpr uintmax_t __rem = __r0; 15726: 15726: private: 15726: typedef __big_mul<__quot, __d> _Prod; 15726: typedef __big_add<_Prod::__hi, _Prod::__lo, 0, __rem> _Sum; 15726: static_assert(_Sum::__hi == __n1 && _Sum::__lo == __n0, 15726: "Internal library error"); 15726: }; 15726: 15726: template 15726: struct __big_div 15726: { 15726: private: 15726: static_assert(__d != 0, "Internal library error"); 15726: static_assert(sizeof (uintmax_t) == sizeof (unsigned long long), 15726: "This library calls __builtin_clzll on uintmax_t, which " 15726: "is unsafe on your platform. Please complain to " 15726: "http://gcc.gnu.org/bugzilla/"); 15726: static constexpr int __shift = __builtin_clzll(__d); 15726: static constexpr int __coshift_ = sizeof(uintmax_t) * 8 - __shift; 15726: static constexpr int __coshift = (__shift != 0) ? __coshift_ : 0; 15726: static constexpr uintmax_t __c1 = uintmax_t(1) << __shift; 15726: static constexpr uintmax_t __c2 = uintmax_t(1) << __coshift; 15726: static constexpr uintmax_t __new_d = __d * __c1; 15726: static constexpr uintmax_t __new_n0 = __n0 * __c1; 15726: static constexpr uintmax_t __n1_shifted = (__n1 % __d) * __c1; 15726: static constexpr uintmax_t __n0_top = (__shift != 0) ? (__n0 / __c2) : 0; 15726: static constexpr uintmax_t __new_n1 = __n1_shifted + __n0_top; 15726: typedef __big_div_impl<__new_n1, __new_n0, __new_d> _Res; 15726: 15726: public: 15726: static constexpr uintmax_t __quot_hi = __n1 / __d; 15726: static constexpr uintmax_t __quot_lo = _Res::__quot; 15726: static constexpr uintmax_t __rem = _Res::__rem / __c1; 15726: 15726: private: 15726: typedef __big_mul<__quot_lo, __d> _P0; 15726: typedef __big_mul<__quot_hi, __d> _P1; 15726: typedef __big_add<_P0::__hi, _P0::__lo, _P1::__lo, __rem> _Sum; 15726: 15726: static_assert(_P1::__hi == 0, "Internal library error"); 15726: static_assert(_Sum::__hi >= _P0::__hi, "Internal library error"); 15726: 15726: static_assert(_Sum::__hi == __n1 && _Sum::__lo == __n0, 15726: "Internal library error"); 15726: static_assert(__rem < __d, "Internal library error"); 15726: }; 15726: # 265 "/usr/include/c++/13/ratio" 3 15726: template 15726: struct ratio 15726: { 15726: static_assert(_Den != 0, "denominator cannot be zero"); 15726: static_assert(_Num >= -0x7fffffffffffffffLL && _Den >= -0x7fffffffffffffffLL, 15726: "out of range"); 15726: 15726: 15726: static constexpr intmax_t num = 15726: _Num * __static_sign<_Den>::value / __static_gcd<_Num, _Den>::value; 15726: 15726: static constexpr intmax_t den = 15726: __static_abs<_Den>::value / __static_gcd<_Num, _Den>::value; 15726: 15726: typedef ratio type; 15726: }; 15726: # 292 "/usr/include/c++/13/ratio" 3 15726: template 15726: struct __is_ratio 15726: : std::false_type 15726: { }; 15726: 15726: template 15726: struct __is_ratio> 15726: : std::true_type 15726: { }; 15726: 15726: 15726: template 15726: constexpr bool __is_ratio_v = false; 15726: template 15726: constexpr bool __is_ratio_v> = true; 15726: 15726: 15726: template 15726: constexpr bool 15726: __are_both_ratios() noexcept 15726: { 15726: 15726: if constexpr (__is_ratio_v<_R1>) 15726: if constexpr (__is_ratio_v<_R2>) 15726: return true; 15726: return false; 15726: 15726: 15726: 15726: } 15726: 15726: template 15726: struct __ratio_multiply 15726: { 15726: static_assert(std::__are_both_ratios<_R1, _R2>(), 15726: "both template arguments must be a std::ratio"); 15726: 15726: private: 15726: static const intmax_t __gcd1 = 15726: __static_gcd<_R1::num, _R2::den>::value; 15726: static const intmax_t __gcd2 = 15726: __static_gcd<_R2::num, _R1::den>::value; 15726: 15726: public: 15726: typedef ratio< 15726: __safe_multiply<(_R1::num / __gcd1), 15726: (_R2::num / __gcd2)>::value, 15726: __safe_multiply<(_R1::den / __gcd2), 15726: (_R2::den / __gcd1)>::value> type; 15726: 15726: static constexpr intmax_t num = type::num; 15726: static constexpr intmax_t den = type::den; 15726: }; 15726: # 357 "/usr/include/c++/13/ratio" 3 15726: template 15726: using ratio_multiply = typename __ratio_multiply<_R1, _R2>::type; 15726: 15726: 15726: 15726: template 15726: struct __ratio_divide 15726: { 15726: static_assert(_R2::num != 0, "division by 0"); 15726: 15726: typedef typename __ratio_multiply< 15726: _R1, 15726: ratio<_R2::den, _R2::num>>::type type; 15726: 15726: static constexpr intmax_t num = type::num; 15726: static constexpr intmax_t den = type::den; 15726: }; 15726: # 386 "/usr/include/c++/13/ratio" 3 15726: template 15726: using ratio_divide = typename __ratio_divide<_R1, _R2>::type; 15726: 15726: 15726: template 15726: struct ratio_equal 15726: : integral_constant 15726: { 15726: static_assert(std::__are_both_ratios<_R1, _R2>(), 15726: "both template arguments must be a std::ratio"); 15726: }; 15726: 15726: 15726: template 15726: struct ratio_not_equal 15726: : integral_constant::value> 15726: { }; 15726: 15726: 15726: 15726: 15726: template, 15726: typename _Right = __big_mul<_R2::num,_R1::den> > 15726: struct __ratio_less_impl_1 15726: : integral_constant::value> 15726: { }; 15726: 15726: template::value 15726: != __static_sign<_R2::num>::value)), 15726: bool = (__static_sign<_R1::num>::value == -1 15726: && __static_sign<_R2::num>::value == -1)> 15726: struct __ratio_less_impl 15726: : __ratio_less_impl_1<_R1, _R2>::type 15726: { }; 15726: 15726: template 15726: struct __ratio_less_impl<_R1, _R2, true, false> 15726: : integral_constant 15726: { }; 15726: 15726: template 15726: struct __ratio_less_impl<_R1, _R2, false, true> 15726: : __ratio_less_impl_1, 15726: ratio<-_R1::num, _R1::den> >::type 15726: { }; 15726: 15726: 15726: 15726: 15726: template 15726: struct ratio_less 15726: : __ratio_less_impl<_R1, _R2>::type 15726: { 15726: static_assert(std::__are_both_ratios<_R1, _R2>(), 15726: "both template arguments must be a std::ratio"); 15726: }; 15726: 15726: 15726: template 15726: struct ratio_less_equal 15726: : integral_constant::value> 15726: { }; 15726: 15726: 15726: template 15726: struct ratio_greater 15726: : integral_constant::value> 15726: { }; 15726: 15726: 15726: template 15726: struct ratio_greater_equal 15726: : integral_constant::value> 15726: { }; 15726: 15726: 15726: template 15726: inline constexpr bool ratio_equal_v = ratio_equal<_R1, _R2>::value; 15726: template 15726: inline constexpr bool ratio_not_equal_v = ratio_not_equal<_R1, _R2>::value; 15726: template 15726: inline constexpr bool ratio_less_v = ratio_less<_R1, _R2>::value; 15726: template 15726: inline constexpr bool ratio_less_equal_v 15726: = ratio_less_equal<_R1, _R2>::value; 15726: template 15726: inline constexpr bool ratio_greater_v = ratio_greater<_R1, _R2>::value; 15726: template 15726: inline constexpr bool ratio_greater_equal_v 15726: = ratio_greater_equal<_R1, _R2>::value; 15726: 15726: 15726: 15726: 15726: template= 0), 15726: bool = (_R2::num >= 0), 15726: bool = ratio_less::value, _R1::den>, 15726: ratio<__static_abs<_R2::num>::value, _R2::den> >::value> 15726: struct __ratio_add_impl 15726: { 15726: private: 15726: typedef typename __ratio_add_impl< 15726: ratio<-_R1::num, _R1::den>, 15726: ratio<-_R2::num, _R2::den> >::type __t; 15726: public: 15726: typedef ratio<-__t::num, __t::den> type; 15726: }; 15726: 15726: 15726: template 15726: struct __ratio_add_impl<_R1, _R2, true, true, __b> 15726: { 15726: private: 15726: static constexpr uintmax_t __g = __static_gcd<_R1::den, _R2::den>::value; 15726: static constexpr uintmax_t __d2 = _R2::den / __g; 15726: typedef __big_mul<_R1::den, __d2> __d; 15726: typedef __big_mul<_R1::num, _R2::den / __g> __x; 15726: typedef __big_mul<_R2::num, _R1::den / __g> __y; 15726: typedef __big_add<__x::__hi, __x::__lo, __y::__hi, __y::__lo> __n; 15726: static_assert(__n::__hi >= __x::__hi, "Internal library error"); 15726: typedef __big_div<__n::__hi, __n::__lo, __g> __ng; 15726: static constexpr uintmax_t __g2 = __static_gcd<__ng::__rem, __g>::value; 15726: typedef __big_div<__n::__hi, __n::__lo, __g2> __n_final; 15726: static_assert(__n_final::__rem == 0, "Internal library error"); 15726: static_assert(__n_final::__quot_hi == 0 && 15726: __n_final::__quot_lo <= 0x7fffffffffffffffLL, "overflow in addition"); 15726: typedef __big_mul<_R1::den / __g2, __d2> __d_final; 15726: static_assert(__d_final::__hi == 0 && 15726: __d_final::__lo <= 0x7fffffffffffffffLL, "overflow in addition"); 15726: public: 15726: typedef ratio<__n_final::__quot_lo, __d_final::__lo> type; 15726: }; 15726: 15726: template 15726: struct __ratio_add_impl<_R1, _R2, false, true, true> 15726: : __ratio_add_impl<_R2, _R1> 15726: { }; 15726: 15726: 15726: template 15726: struct __ratio_add_impl<_R1, _R2, true, false, false> 15726: { 15726: private: 15726: static constexpr uintmax_t __g = __static_gcd<_R1::den, _R2::den>::value; 15726: static constexpr uintmax_t __d2 = _R2::den / __g; 15726: typedef __big_mul<_R1::den, __d2> __d; 15726: typedef __big_mul<_R1::num, _R2::den / __g> __x; 15726: typedef __big_mul<-_R2::num, _R1::den / __g> __y; 15726: typedef __big_sub<__x::__hi, __x::__lo, __y::__hi, __y::__lo> __n; 15726: typedef __big_div<__n::__hi, __n::__lo, __g> __ng; 15726: static constexpr uintmax_t __g2 = __static_gcd<__ng::__rem, __g>::value; 15726: typedef __big_div<__n::__hi, __n::__lo, __g2> __n_final; 15726: static_assert(__n_final::__rem == 0, "Internal library error"); 15726: static_assert(__n_final::__quot_hi == 0 && 15726: __n_final::__quot_lo <= 0x7fffffffffffffffLL, "overflow in addition"); 15726: typedef __big_mul<_R1::den / __g2, __d2> __d_final; 15726: static_assert(__d_final::__hi == 0 && 15726: __d_final::__lo <= 0x7fffffffffffffffLL, "overflow in addition"); 15726: public: 15726: typedef ratio<__n_final::__quot_lo, __d_final::__lo> type; 15726: }; 15726: 15726: template 15726: struct __ratio_add 15726: { 15726: static_assert(std::__are_both_ratios<_R1, _R2>(), 15726: "both template arguments must be a std::ratio"); 15726: 15726: typedef typename __ratio_add_impl<_R1, _R2>::type type; 15726: static constexpr intmax_t num = type::num; 15726: static constexpr intmax_t den = type::den; 15726: }; 15726: # 575 "/usr/include/c++/13/ratio" 3 15726: template 15726: using ratio_add = typename __ratio_add<_R1, _R2>::type; 15726: 15726: 15726: 15726: template 15726: struct __ratio_subtract 15726: { 15726: typedef typename __ratio_add< 15726: _R1, 15726: ratio<-_R2::num, _R2::den>>::type type; 15726: 15726: static constexpr intmax_t num = type::num; 15726: static constexpr intmax_t den = type::den; 15726: }; 15726: # 602 "/usr/include/c++/13/ratio" 3 15726: template 15726: using ratio_subtract = typename __ratio_subtract<_R1, _R2>::type; 15726: 15726: 15726: typedef ratio<1, 1000000000000000000> atto; 15726: typedef ratio<1, 1000000000000000> femto; 15726: typedef ratio<1, 1000000000000> pico; 15726: typedef ratio<1, 1000000000> nano; 15726: typedef ratio<1, 1000000> micro; 15726: typedef ratio<1, 1000> milli; 15726: typedef ratio<1, 100> centi; 15726: typedef ratio<1, 10> deci; 15726: typedef ratio< 10, 1> deca; 15726: typedef ratio< 100, 1> hecto; 15726: typedef ratio< 1000, 1> kilo; 15726: typedef ratio< 1000000, 1> mega; 15726: typedef ratio< 1000000000, 1> giga; 15726: typedef ratio< 1000000000000, 1> tera; 15726: typedef ratio< 1000000000000000, 1> peta; 15726: typedef ratio< 1000000000000000000, 1> exa; 15726: 15726: 15726: 15726: } 15726: # 38 "/usr/include/c++/13/bits/chrono.h" 2 3 15726: 15726: # 1 "/usr/include/c++/13/limits" 1 3 15726: # 40 "/usr/include/c++/13/limits" 3 15726: 15726: # 41 "/usr/include/c++/13/limits" 3 15726: # 158 "/usr/include/c++/13/limits" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: enum float_round_style 15726: { 15726: round_indeterminate = -1, 15726: round_toward_zero = 0, 15726: round_to_nearest = 1, 15726: round_toward_infinity = 2, 15726: round_toward_neg_infinity = 3 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: enum float_denorm_style 15726: { 15726: 15726: denorm_indeterminate = -1, 15726: 15726: denorm_absent = 0, 15726: 15726: denorm_present = 1 15726: }; 15726: # 202 "/usr/include/c++/13/limits" 3 15726: struct __numeric_limits_base 15726: { 15726: 15726: 15726: static constexpr bool is_specialized = false; 15726: 15726: 15726: 15726: 15726: static constexpr int digits = 0; 15726: 15726: 15726: static constexpr int digits10 = 0; 15726: 15726: 15726: 15726: 15726: static constexpr int max_digits10 = 0; 15726: 15726: 15726: 15726: static constexpr bool is_signed = false; 15726: 15726: 15726: static constexpr bool is_integer = false; 15726: 15726: 15726: 15726: 15726: static constexpr bool is_exact = false; 15726: 15726: 15726: 15726: static constexpr int radix = 0; 15726: 15726: 15726: 15726: static constexpr int min_exponent = 0; 15726: 15726: 15726: 15726: static constexpr int min_exponent10 = 0; 15726: 15726: 15726: 15726: 15726: static constexpr int max_exponent = 0; 15726: 15726: 15726: 15726: static constexpr int max_exponent10 = 0; 15726: 15726: 15726: static constexpr bool has_infinity = false; 15726: 15726: 15726: 15726: static constexpr bool has_quiet_NaN = false; 15726: 15726: 15726: 15726: static constexpr bool has_signaling_NaN = false; 15726: 15726: 15726: static constexpr float_denorm_style has_denorm = denorm_absent; 15726: 15726: 15726: 15726: static constexpr bool has_denorm_loss = false; 15726: 15726: 15726: 15726: static constexpr bool is_iec559 = false; 15726: 15726: 15726: 15726: 15726: static constexpr bool is_bounded = false; 15726: # 288 "/usr/include/c++/13/limits" 3 15726: static constexpr bool is_modulo = false; 15726: 15726: 15726: static constexpr bool traps = false; 15726: 15726: 15726: static constexpr bool tinyness_before = false; 15726: 15726: 15726: 15726: 15726: static constexpr float_round_style round_style = 15726: round_toward_zero; 15726: }; 15726: # 311 "/usr/include/c++/13/limits" 3 15726: template 15726: struct numeric_limits : public __numeric_limits_base 15726: { 15726: 15726: 15726: static constexpr _Tp 15726: min() noexcept { return _Tp(); } 15726: 15726: 15726: static constexpr _Tp 15726: max() noexcept { return _Tp(); } 15726: 15726: 15726: 15726: 15726: static constexpr _Tp 15726: lowest() noexcept { return _Tp(); } 15726: 15726: 15726: 15726: 15726: static constexpr _Tp 15726: epsilon() noexcept { return _Tp(); } 15726: 15726: 15726: static constexpr _Tp 15726: round_error() noexcept { return _Tp(); } 15726: 15726: 15726: static constexpr _Tp 15726: infinity() noexcept { return _Tp(); } 15726: 15726: 15726: 15726: static constexpr _Tp 15726: quiet_NaN() noexcept { return _Tp(); } 15726: 15726: 15726: 15726: static constexpr _Tp 15726: signaling_NaN() noexcept { return _Tp(); } 15726: 15726: 15726: 15726: 15726: static constexpr _Tp 15726: denorm_min() noexcept { return _Tp(); } 15726: }; 15726: 15726: 15726: 15726: 15726: template 15726: struct numeric_limits 15726: : public numeric_limits<_Tp> { }; 15726: 15726: template 15726: struct numeric_limits 15726: : public numeric_limits<_Tp> { }; 15726: 15726: template 15726: struct numeric_limits 15726: : public numeric_limits<_Tp> { }; 15726: # 383 "/usr/include/c++/13/limits" 3 15726: template<> 15726: struct numeric_limits 15726: { 15726: static constexpr bool is_specialized = true; 15726: 15726: static constexpr bool 15726: min() noexcept { return false; } 15726: 15726: static constexpr bool 15726: max() noexcept { return true; } 15726: 15726: 15726: static constexpr bool 15726: lowest() noexcept { return min(); } 15726: 15726: static constexpr int digits = 1; 15726: static constexpr int digits10 = 0; 15726: 15726: static constexpr int max_digits10 = 0; 15726: 15726: static constexpr bool is_signed = false; 15726: static constexpr bool is_integer = true; 15726: static constexpr bool is_exact = true; 15726: static constexpr int radix = 2; 15726: 15726: static constexpr bool 15726: epsilon() noexcept { return false; } 15726: 15726: static constexpr bool 15726: round_error() noexcept { return false; } 15726: 15726: static constexpr int min_exponent = 0; 15726: static constexpr int min_exponent10 = 0; 15726: static constexpr int max_exponent = 0; 15726: static constexpr int max_exponent10 = 0; 15726: 15726: static constexpr bool has_infinity = false; 15726: static constexpr bool has_quiet_NaN = false; 15726: static constexpr bool has_signaling_NaN = false; 15726: static constexpr float_denorm_style has_denorm 15726: = denorm_absent; 15726: static constexpr bool has_denorm_loss = false; 15726: 15726: static constexpr bool 15726: infinity() noexcept { return false; } 15726: 15726: static constexpr bool 15726: quiet_NaN() noexcept { return false; } 15726: 15726: static constexpr bool 15726: signaling_NaN() noexcept { return false; } 15726: 15726: static constexpr bool 15726: denorm_min() noexcept { return false; } 15726: 15726: static constexpr bool is_iec559 = false; 15726: static constexpr bool is_bounded = true; 15726: static constexpr bool is_modulo = false; 15726: 15726: 15726: 15726: 15726: static constexpr bool traps = false; 15726: static constexpr bool tinyness_before = false; 15726: static constexpr float_round_style round_style 15726: = round_toward_zero; 15726: }; 15726: 15726: 15726: template<> 15726: struct numeric_limits 15726: { 15726: static constexpr bool is_specialized = true; 15726: 15726: static constexpr char 15726: min() noexcept { return (((char)(-1) < 0) ? -(((char)(-1) < 0) ? (((((char)1 << ((sizeof(char) * 8 - ((char)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char)0) - 1 : (char)0); } 15726: 15726: static constexpr char 15726: max() noexcept { return (((char)(-1) < 0) ? (((((char)1 << ((sizeof(char) * 8 - ((char)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char)0); } 15726: 15726: 15726: static constexpr char 15726: lowest() noexcept { return min(); } 15726: 15726: 15726: static constexpr int digits = (sizeof(char) * 8 - ((char)(-1) < 0)); 15726: static constexpr int digits10 = ((sizeof(char) * 8 - ((char)(-1) < 0)) * 643L / 2136); 15726: 15726: static constexpr int max_digits10 = 0; 15726: 15726: static constexpr bool is_signed = ((char)(-1) < 0); 15726: static constexpr bool is_integer = true; 15726: static constexpr bool is_exact = true; 15726: static constexpr int radix = 2; 15726: 15726: static constexpr char 15726: epsilon() noexcept { return 0; } 15726: 15726: static constexpr char 15726: round_error() noexcept { return 0; } 15726: 15726: static constexpr int min_exponent = 0; 15726: static constexpr int min_exponent10 = 0; 15726: static constexpr int max_exponent = 0; 15726: static constexpr int max_exponent10 = 0; 15726: 15726: static constexpr bool has_infinity = false; 15726: static constexpr bool has_quiet_NaN = false; 15726: static constexpr bool has_signaling_NaN = false; 15726: static constexpr float_denorm_style has_denorm 15726: = denorm_absent; 15726: static constexpr bool has_denorm_loss = false; 15726: 15726: static constexpr 15726: char infinity() noexcept { return char(); } 15726: 15726: static constexpr char 15726: quiet_NaN() noexcept { return char(); } 15726: 15726: static constexpr char 15726: signaling_NaN() noexcept { return char(); } 15726: 15726: static constexpr char 15726: denorm_min() noexcept { return static_cast(0); } 15726: 15726: static constexpr bool is_iec559 = false; 15726: static constexpr bool is_bounded = true; 15726: static constexpr bool is_modulo = !is_signed; 15726: 15726: static constexpr bool traps = false; 15726: static constexpr bool tinyness_before = false; 15726: static constexpr float_round_style round_style 15726: = round_toward_zero; 15726: }; 15726: 15726: 15726: template<> 15726: struct numeric_limits 15726: { 15726: static constexpr bool is_specialized = true; 15726: 15726: static constexpr signed char 15726: min() noexcept { return -0x7f - 1; } 15726: 15726: static constexpr signed char 15726: max() noexcept { return 0x7f; } 15726: 15726: 15726: static constexpr signed char 15726: lowest() noexcept { return min(); } 15726: 15726: 15726: static constexpr int digits = (sizeof(signed char) * 8 - ((signed char)(-1) < 0)); 15726: static constexpr int digits10 15726: = ((sizeof(signed char) * 8 - ((signed char)(-1) < 0)) * 643L / 2136); 15726: 15726: static constexpr int max_digits10 = 0; 15726: 15726: static constexpr bool is_signed = true; 15726: static constexpr bool is_integer = true; 15726: static constexpr bool is_exact = true; 15726: static constexpr int radix = 2; 15726: 15726: static constexpr signed char 15726: epsilon() noexcept { return 0; } 15726: 15726: static constexpr signed char 15726: round_error() noexcept { return 0; } 15726: 15726: static constexpr int min_exponent = 0; 15726: static constexpr int min_exponent10 = 0; 15726: static constexpr int max_exponent = 0; 15726: static constexpr int max_exponent10 = 0; 15726: 15726: static constexpr bool has_infinity = false; 15726: static constexpr bool has_quiet_NaN = false; 15726: static constexpr bool has_signaling_NaN = false; 15726: static constexpr float_denorm_style has_denorm 15726: = denorm_absent; 15726: static constexpr bool has_denorm_loss = false; 15726: 15726: static constexpr signed char 15726: infinity() noexcept { return static_cast(0); } 15726: 15726: static constexpr signed char 15726: quiet_NaN() noexcept { return static_cast(0); } 15726: 15726: static constexpr signed char 15726: signaling_NaN() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr signed char 15726: denorm_min() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr bool is_iec559 = false; 15726: static constexpr bool is_bounded = true; 15726: static constexpr bool is_modulo = false; 15726: 15726: static constexpr bool traps = false; 15726: static constexpr bool tinyness_before = false; 15726: static constexpr float_round_style round_style 15726: = round_toward_zero; 15726: }; 15726: 15726: 15726: template<> 15726: struct numeric_limits 15726: { 15726: static constexpr bool is_specialized = true; 15726: 15726: static constexpr unsigned char 15726: min() noexcept { return 0; } 15726: 15726: static constexpr unsigned char 15726: max() noexcept { return 0x7f * 2U + 1; } 15726: 15726: 15726: static constexpr unsigned char 15726: lowest() noexcept { return min(); } 15726: 15726: 15726: static constexpr int digits 15726: = (sizeof(unsigned char) * 8 - ((unsigned char)(-1) < 0)); 15726: static constexpr int digits10 15726: = ((sizeof(unsigned char) * 8 - ((unsigned char)(-1) < 0)) * 643L / 2136); 15726: 15726: static constexpr int max_digits10 = 0; 15726: 15726: static constexpr bool is_signed = false; 15726: static constexpr bool is_integer = true; 15726: static constexpr bool is_exact = true; 15726: static constexpr int radix = 2; 15726: 15726: static constexpr unsigned char 15726: epsilon() noexcept { return 0; } 15726: 15726: static constexpr unsigned char 15726: round_error() noexcept { return 0; } 15726: 15726: static constexpr int min_exponent = 0; 15726: static constexpr int min_exponent10 = 0; 15726: static constexpr int max_exponent = 0; 15726: static constexpr int max_exponent10 = 0; 15726: 15726: static constexpr bool has_infinity = false; 15726: static constexpr bool has_quiet_NaN = false; 15726: static constexpr bool has_signaling_NaN = false; 15726: static constexpr float_denorm_style has_denorm 15726: = denorm_absent; 15726: static constexpr bool has_denorm_loss = false; 15726: 15726: static constexpr unsigned char 15726: infinity() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr unsigned char 15726: quiet_NaN() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr unsigned char 15726: signaling_NaN() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr unsigned char 15726: denorm_min() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr bool is_iec559 = false; 15726: static constexpr bool is_bounded = true; 15726: static constexpr bool is_modulo = true; 15726: 15726: static constexpr bool traps = false; 15726: static constexpr bool tinyness_before = false; 15726: static constexpr float_round_style round_style 15726: = round_toward_zero; 15726: }; 15726: 15726: 15726: template<> 15726: struct numeric_limits 15726: { 15726: static constexpr bool is_specialized = true; 15726: 15726: static constexpr wchar_t 15726: min() noexcept { return (((wchar_t)(-1) < 0) ? -(((wchar_t)(-1) < 0) ? (((((wchar_t)1 << ((sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(wchar_t)0) - 1 : (wchar_t)0); } 15726: 15726: static constexpr wchar_t 15726: max() noexcept { return (((wchar_t)(-1) < 0) ? (((((wchar_t)1 << ((sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(wchar_t)0); } 15726: 15726: 15726: static constexpr wchar_t 15726: lowest() noexcept { return min(); } 15726: 15726: 15726: static constexpr int digits = (sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)); 15726: static constexpr int digits10 15726: = ((sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) * 643L / 2136); 15726: 15726: static constexpr int max_digits10 = 0; 15726: 15726: static constexpr bool is_signed = ((wchar_t)(-1) < 0); 15726: static constexpr bool is_integer = true; 15726: static constexpr bool is_exact = true; 15726: static constexpr int radix = 2; 15726: 15726: static constexpr wchar_t 15726: epsilon() noexcept { return 0; } 15726: 15726: static constexpr wchar_t 15726: round_error() noexcept { return 0; } 15726: 15726: static constexpr int min_exponent = 0; 15726: static constexpr int min_exponent10 = 0; 15726: static constexpr int max_exponent = 0; 15726: static constexpr int max_exponent10 = 0; 15726: 15726: static constexpr bool has_infinity = false; 15726: static constexpr bool has_quiet_NaN = false; 15726: static constexpr bool has_signaling_NaN = false; 15726: static constexpr float_denorm_style has_denorm 15726: = denorm_absent; 15726: static constexpr bool has_denorm_loss = false; 15726: 15726: static constexpr wchar_t 15726: infinity() noexcept { return wchar_t(); } 15726: 15726: static constexpr wchar_t 15726: quiet_NaN() noexcept { return wchar_t(); } 15726: 15726: static constexpr wchar_t 15726: signaling_NaN() noexcept { return wchar_t(); } 15726: 15726: static constexpr wchar_t 15726: denorm_min() noexcept { return wchar_t(); } 15726: 15726: static constexpr bool is_iec559 = false; 15726: static constexpr bool is_bounded = true; 15726: static constexpr bool is_modulo = !is_signed; 15726: 15726: static constexpr bool traps = false; 15726: static constexpr bool tinyness_before = false; 15726: static constexpr float_round_style round_style 15726: = round_toward_zero; 15726: }; 15726: # 796 "/usr/include/c++/13/limits" 3 15726: template<> 15726: struct numeric_limits 15726: { 15726: static constexpr bool is_specialized = true; 15726: 15726: static constexpr char16_t 15726: min() noexcept { return (((char16_t)(-1) < 0) ? -(((char16_t)(-1) < 0) ? (((((char16_t)1 << ((sizeof(char16_t) * 8 - ((char16_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char16_t)0) - 1 : (char16_t)0); } 15726: 15726: static constexpr char16_t 15726: max() noexcept { return (((char16_t)(-1) < 0) ? (((((char16_t)1 << ((sizeof(char16_t) * 8 - ((char16_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char16_t)0); } 15726: 15726: static constexpr char16_t 15726: lowest() noexcept { return min(); } 15726: 15726: static constexpr int digits = (sizeof(char16_t) * 8 - ((char16_t)(-1) < 0)); 15726: static constexpr int digits10 = ((sizeof(char16_t) * 8 - ((char16_t)(-1) < 0)) * 643L / 2136); 15726: static constexpr int max_digits10 = 0; 15726: static constexpr bool is_signed = ((char16_t)(-1) < 0); 15726: static constexpr bool is_integer = true; 15726: static constexpr bool is_exact = true; 15726: static constexpr int radix = 2; 15726: 15726: static constexpr char16_t 15726: epsilon() noexcept { return 0; } 15726: 15726: static constexpr char16_t 15726: round_error() noexcept { return 0; } 15726: 15726: static constexpr int min_exponent = 0; 15726: static constexpr int min_exponent10 = 0; 15726: static constexpr int max_exponent = 0; 15726: static constexpr int max_exponent10 = 0; 15726: 15726: static constexpr bool has_infinity = false; 15726: static constexpr bool has_quiet_NaN = false; 15726: static constexpr bool has_signaling_NaN = false; 15726: static constexpr float_denorm_style has_denorm = denorm_absent; 15726: static constexpr bool has_denorm_loss = false; 15726: 15726: static constexpr char16_t 15726: infinity() noexcept { return char16_t(); } 15726: 15726: static constexpr char16_t 15726: quiet_NaN() noexcept { return char16_t(); } 15726: 15726: static constexpr char16_t 15726: signaling_NaN() noexcept { return char16_t(); } 15726: 15726: static constexpr char16_t 15726: denorm_min() noexcept { return char16_t(); } 15726: 15726: static constexpr bool is_iec559 = false; 15726: static constexpr bool is_bounded = true; 15726: static constexpr bool is_modulo = !is_signed; 15726: 15726: static constexpr bool traps = false; 15726: static constexpr bool tinyness_before = false; 15726: static constexpr float_round_style round_style = round_toward_zero; 15726: }; 15726: 15726: 15726: template<> 15726: struct numeric_limits 15726: { 15726: static constexpr bool is_specialized = true; 15726: 15726: static constexpr char32_t 15726: min() noexcept { return (((char32_t)(-1) < 0) ? -(((char32_t)(-1) < 0) ? (((((char32_t)1 << ((sizeof(char32_t) * 8 - ((char32_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char32_t)0) - 1 : (char32_t)0); } 15726: 15726: static constexpr char32_t 15726: max() noexcept { return (((char32_t)(-1) < 0) ? (((((char32_t)1 << ((sizeof(char32_t) * 8 - ((char32_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char32_t)0); } 15726: 15726: static constexpr char32_t 15726: lowest() noexcept { return min(); } 15726: 15726: static constexpr int digits = (sizeof(char32_t) * 8 - ((char32_t)(-1) < 0)); 15726: static constexpr int digits10 = ((sizeof(char32_t) * 8 - ((char32_t)(-1) < 0)) * 643L / 2136); 15726: static constexpr int max_digits10 = 0; 15726: static constexpr bool is_signed = ((char32_t)(-1) < 0); 15726: static constexpr bool is_integer = true; 15726: static constexpr bool is_exact = true; 15726: static constexpr int radix = 2; 15726: 15726: static constexpr char32_t 15726: epsilon() noexcept { return 0; } 15726: 15726: static constexpr char32_t 15726: round_error() noexcept { return 0; } 15726: 15726: static constexpr int min_exponent = 0; 15726: static constexpr int min_exponent10 = 0; 15726: static constexpr int max_exponent = 0; 15726: static constexpr int max_exponent10 = 0; 15726: 15726: static constexpr bool has_infinity = false; 15726: static constexpr bool has_quiet_NaN = false; 15726: static constexpr bool has_signaling_NaN = false; 15726: static constexpr float_denorm_style has_denorm = denorm_absent; 15726: static constexpr bool has_denorm_loss = false; 15726: 15726: static constexpr char32_t 15726: infinity() noexcept { return char32_t(); } 15726: 15726: static constexpr char32_t 15726: quiet_NaN() noexcept { return char32_t(); } 15726: 15726: static constexpr char32_t 15726: signaling_NaN() noexcept { return char32_t(); } 15726: 15726: static constexpr char32_t 15726: denorm_min() noexcept { return char32_t(); } 15726: 15726: static constexpr bool is_iec559 = false; 15726: static constexpr bool is_bounded = true; 15726: static constexpr bool is_modulo = !is_signed; 15726: 15726: static constexpr bool traps = false; 15726: static constexpr bool tinyness_before = false; 15726: static constexpr float_round_style round_style = round_toward_zero; 15726: }; 15726: 15726: 15726: 15726: template<> 15726: struct numeric_limits 15726: { 15726: static constexpr bool is_specialized = true; 15726: 15726: static constexpr short 15726: min() noexcept { return -0x7fff - 1; } 15726: 15726: static constexpr short 15726: max() noexcept { return 0x7fff; } 15726: 15726: 15726: static constexpr short 15726: lowest() noexcept { return min(); } 15726: 15726: 15726: static constexpr int digits = (sizeof(short) * 8 - ((short)(-1) < 0)); 15726: static constexpr int digits10 = ((sizeof(short) * 8 - ((short)(-1) < 0)) * 643L / 2136); 15726: 15726: static constexpr int max_digits10 = 0; 15726: 15726: static constexpr bool is_signed = true; 15726: static constexpr bool is_integer = true; 15726: static constexpr bool is_exact = true; 15726: static constexpr int radix = 2; 15726: 15726: static constexpr short 15726: epsilon() noexcept { return 0; } 15726: 15726: static constexpr short 15726: round_error() noexcept { return 0; } 15726: 15726: static constexpr int min_exponent = 0; 15726: static constexpr int min_exponent10 = 0; 15726: static constexpr int max_exponent = 0; 15726: static constexpr int max_exponent10 = 0; 15726: 15726: static constexpr bool has_infinity = false; 15726: static constexpr bool has_quiet_NaN = false; 15726: static constexpr bool has_signaling_NaN = false; 15726: static constexpr float_denorm_style has_denorm 15726: = denorm_absent; 15726: static constexpr bool has_denorm_loss = false; 15726: 15726: static constexpr short 15726: infinity() noexcept { return short(); } 15726: 15726: static constexpr short 15726: quiet_NaN() noexcept { return short(); } 15726: 15726: static constexpr short 15726: signaling_NaN() noexcept { return short(); } 15726: 15726: static constexpr short 15726: denorm_min() noexcept { return short(); } 15726: 15726: static constexpr bool is_iec559 = false; 15726: static constexpr bool is_bounded = true; 15726: static constexpr bool is_modulo = false; 15726: 15726: static constexpr bool traps = false; 15726: static constexpr bool tinyness_before = false; 15726: static constexpr float_round_style round_style 15726: = round_toward_zero; 15726: }; 15726: 15726: 15726: template<> 15726: struct numeric_limits 15726: { 15726: static constexpr bool is_specialized = true; 15726: 15726: static constexpr unsigned short 15726: min() noexcept { return 0; } 15726: 15726: static constexpr unsigned short 15726: max() noexcept { return 0x7fff * 2U + 1; } 15726: 15726: 15726: static constexpr unsigned short 15726: lowest() noexcept { return min(); } 15726: 15726: 15726: static constexpr int digits 15726: = (sizeof(unsigned short) * 8 - ((unsigned short)(-1) < 0)); 15726: static constexpr int digits10 15726: = ((sizeof(unsigned short) * 8 - ((unsigned short)(-1) < 0)) * 643L / 2136); 15726: 15726: static constexpr int max_digits10 = 0; 15726: 15726: static constexpr bool is_signed = false; 15726: static constexpr bool is_integer = true; 15726: static constexpr bool is_exact = true; 15726: static constexpr int radix = 2; 15726: 15726: static constexpr unsigned short 15726: epsilon() noexcept { return 0; } 15726: 15726: static constexpr unsigned short 15726: round_error() noexcept { return 0; } 15726: 15726: static constexpr int min_exponent = 0; 15726: static constexpr int min_exponent10 = 0; 15726: static constexpr int max_exponent = 0; 15726: static constexpr int max_exponent10 = 0; 15726: 15726: static constexpr bool has_infinity = false; 15726: static constexpr bool has_quiet_NaN = false; 15726: static constexpr bool has_signaling_NaN = false; 15726: static constexpr float_denorm_style has_denorm 15726: = denorm_absent; 15726: static constexpr bool has_denorm_loss = false; 15726: 15726: static constexpr unsigned short 15726: infinity() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr unsigned short 15726: quiet_NaN() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr unsigned short 15726: signaling_NaN() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr unsigned short 15726: denorm_min() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr bool is_iec559 = false; 15726: static constexpr bool is_bounded = true; 15726: static constexpr bool is_modulo = true; 15726: 15726: static constexpr bool traps = false; 15726: static constexpr bool tinyness_before = false; 15726: static constexpr float_round_style round_style 15726: = round_toward_zero; 15726: }; 15726: 15726: 15726: template<> 15726: struct numeric_limits 15726: { 15726: static constexpr bool is_specialized = true; 15726: 15726: static constexpr int 15726: min() noexcept { return -0x7fffffff - 1; } 15726: 15726: static constexpr int 15726: max() noexcept { return 0x7fffffff; } 15726: 15726: 15726: static constexpr int 15726: lowest() noexcept { return min(); } 15726: 15726: 15726: static constexpr int digits = (sizeof(int) * 8 - ((int)(-1) < 0)); 15726: static constexpr int digits10 = ((sizeof(int) * 8 - ((int)(-1) < 0)) * 643L / 2136); 15726: 15726: static constexpr int max_digits10 = 0; 15726: 15726: static constexpr bool is_signed = true; 15726: static constexpr bool is_integer = true; 15726: static constexpr bool is_exact = true; 15726: static constexpr int radix = 2; 15726: 15726: static constexpr int 15726: epsilon() noexcept { return 0; } 15726: 15726: static constexpr int 15726: round_error() noexcept { return 0; } 15726: 15726: static constexpr int min_exponent = 0; 15726: static constexpr int min_exponent10 = 0; 15726: static constexpr int max_exponent = 0; 15726: static constexpr int max_exponent10 = 0; 15726: 15726: static constexpr bool has_infinity = false; 15726: static constexpr bool has_quiet_NaN = false; 15726: static constexpr bool has_signaling_NaN = false; 15726: static constexpr float_denorm_style has_denorm 15726: = denorm_absent; 15726: static constexpr bool has_denorm_loss = false; 15726: 15726: static constexpr int 15726: infinity() noexcept { return static_cast(0); } 15726: 15726: static constexpr int 15726: quiet_NaN() noexcept { return static_cast(0); } 15726: 15726: static constexpr int 15726: signaling_NaN() noexcept { return static_cast(0); } 15726: 15726: static constexpr int 15726: denorm_min() noexcept { return static_cast(0); } 15726: 15726: static constexpr bool is_iec559 = false; 15726: static constexpr bool is_bounded = true; 15726: static constexpr bool is_modulo = false; 15726: 15726: static constexpr bool traps = false; 15726: static constexpr bool tinyness_before = false; 15726: static constexpr float_round_style round_style 15726: = round_toward_zero; 15726: }; 15726: 15726: 15726: template<> 15726: struct numeric_limits 15726: { 15726: static constexpr bool is_specialized = true; 15726: 15726: static constexpr unsigned int 15726: min() noexcept { return 0; } 15726: 15726: static constexpr unsigned int 15726: max() noexcept { return 0x7fffffff * 2U + 1; } 15726: 15726: 15726: static constexpr unsigned int 15726: lowest() noexcept { return min(); } 15726: 15726: 15726: static constexpr int digits 15726: = (sizeof(unsigned int) * 8 - ((unsigned int)(-1) < 0)); 15726: static constexpr int digits10 15726: = ((sizeof(unsigned int) * 8 - ((unsigned int)(-1) < 0)) * 643L / 2136); 15726: 15726: static constexpr int max_digits10 = 0; 15726: 15726: static constexpr bool is_signed = false; 15726: static constexpr bool is_integer = true; 15726: static constexpr bool is_exact = true; 15726: static constexpr int radix = 2; 15726: 15726: static constexpr unsigned int 15726: epsilon() noexcept { return 0; } 15726: 15726: static constexpr unsigned int 15726: round_error() noexcept { return 0; } 15726: 15726: static constexpr int min_exponent = 0; 15726: static constexpr int min_exponent10 = 0; 15726: static constexpr int max_exponent = 0; 15726: static constexpr int max_exponent10 = 0; 15726: 15726: static constexpr bool has_infinity = false; 15726: static constexpr bool has_quiet_NaN = false; 15726: static constexpr bool has_signaling_NaN = false; 15726: static constexpr float_denorm_style has_denorm 15726: = denorm_absent; 15726: static constexpr bool has_denorm_loss = false; 15726: 15726: static constexpr unsigned int 15726: infinity() noexcept { return static_cast(0); } 15726: 15726: static constexpr unsigned int 15726: quiet_NaN() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr unsigned int 15726: signaling_NaN() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr unsigned int 15726: denorm_min() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr bool is_iec559 = false; 15726: static constexpr bool is_bounded = true; 15726: static constexpr bool is_modulo = true; 15726: 15726: static constexpr bool traps = false; 15726: static constexpr bool tinyness_before = false; 15726: static constexpr float_round_style round_style 15726: = round_toward_zero; 15726: }; 15726: 15726: 15726: template<> 15726: struct numeric_limits 15726: { 15726: static constexpr bool is_specialized = true; 15726: 15726: static constexpr long 15726: min() noexcept { return -0x7fffffffL - 1; } 15726: 15726: static constexpr long 15726: max() noexcept { return 0x7fffffffL; } 15726: 15726: 15726: static constexpr long 15726: lowest() noexcept { return min(); } 15726: 15726: 15726: static constexpr int digits = (sizeof(long) * 8 - ((long)(-1) < 0)); 15726: static constexpr int digits10 = ((sizeof(long) * 8 - ((long)(-1) < 0)) * 643L / 2136); 15726: 15726: static constexpr int max_digits10 = 0; 15726: 15726: static constexpr bool is_signed = true; 15726: static constexpr bool is_integer = true; 15726: static constexpr bool is_exact = true; 15726: static constexpr int radix = 2; 15726: 15726: static constexpr long 15726: epsilon() noexcept { return 0; } 15726: 15726: static constexpr long 15726: round_error() noexcept { return 0; } 15726: 15726: static constexpr int min_exponent = 0; 15726: static constexpr int min_exponent10 = 0; 15726: static constexpr int max_exponent = 0; 15726: static constexpr int max_exponent10 = 0; 15726: 15726: static constexpr bool has_infinity = false; 15726: static constexpr bool has_quiet_NaN = false; 15726: static constexpr bool has_signaling_NaN = false; 15726: static constexpr float_denorm_style has_denorm 15726: = denorm_absent; 15726: static constexpr bool has_denorm_loss = false; 15726: 15726: static constexpr long 15726: infinity() noexcept { return static_cast(0); } 15726: 15726: static constexpr long 15726: quiet_NaN() noexcept { return static_cast(0); } 15726: 15726: static constexpr long 15726: signaling_NaN() noexcept { return static_cast(0); } 15726: 15726: static constexpr long 15726: denorm_min() noexcept { return static_cast(0); } 15726: 15726: static constexpr bool is_iec559 = false; 15726: static constexpr bool is_bounded = true; 15726: static constexpr bool is_modulo = false; 15726: 15726: static constexpr bool traps = false; 15726: static constexpr bool tinyness_before = false; 15726: static constexpr float_round_style round_style 15726: = round_toward_zero; 15726: }; 15726: 15726: 15726: template<> 15726: struct numeric_limits 15726: { 15726: static constexpr bool is_specialized = true; 15726: 15726: static constexpr unsigned long 15726: min() noexcept { return 0; } 15726: 15726: static constexpr unsigned long 15726: max() noexcept { return 0x7fffffffL * 2UL + 1; } 15726: 15726: 15726: static constexpr unsigned long 15726: lowest() noexcept { return min(); } 15726: 15726: 15726: static constexpr int digits 15726: = (sizeof(unsigned long) * 8 - ((unsigned long)(-1) < 0)); 15726: static constexpr int digits10 15726: = ((sizeof(unsigned long) * 8 - ((unsigned long)(-1) < 0)) * 643L / 2136); 15726: 15726: static constexpr int max_digits10 = 0; 15726: 15726: static constexpr bool is_signed = false; 15726: static constexpr bool is_integer = true; 15726: static constexpr bool is_exact = true; 15726: static constexpr int radix = 2; 15726: 15726: static constexpr unsigned long 15726: epsilon() noexcept { return 0; } 15726: 15726: static constexpr unsigned long 15726: round_error() noexcept { return 0; } 15726: 15726: static constexpr int min_exponent = 0; 15726: static constexpr int min_exponent10 = 0; 15726: static constexpr int max_exponent = 0; 15726: static constexpr int max_exponent10 = 0; 15726: 15726: static constexpr bool has_infinity = false; 15726: static constexpr bool has_quiet_NaN = false; 15726: static constexpr bool has_signaling_NaN = false; 15726: static constexpr float_denorm_style has_denorm 15726: = denorm_absent; 15726: static constexpr bool has_denorm_loss = false; 15726: 15726: static constexpr unsigned long 15726: infinity() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr unsigned long 15726: quiet_NaN() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr unsigned long 15726: signaling_NaN() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr unsigned long 15726: denorm_min() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr bool is_iec559 = false; 15726: static constexpr bool is_bounded = true; 15726: static constexpr bool is_modulo = true; 15726: 15726: static constexpr bool traps = false; 15726: static constexpr bool tinyness_before = false; 15726: static constexpr float_round_style round_style 15726: = round_toward_zero; 15726: }; 15726: 15726: 15726: template<> 15726: struct numeric_limits 15726: { 15726: static constexpr bool is_specialized = true; 15726: 15726: static constexpr long long 15726: min() noexcept { return -0x7fffffffffffffffLL - 1; } 15726: 15726: static constexpr long long 15726: max() noexcept { return 0x7fffffffffffffffLL; } 15726: 15726: 15726: static constexpr long long 15726: lowest() noexcept { return min(); } 15726: 15726: 15726: static constexpr int digits 15726: = (sizeof(long long) * 8 - ((long long)(-1) < 0)); 15726: static constexpr int digits10 15726: = ((sizeof(long long) * 8 - ((long long)(-1) < 0)) * 643L / 2136); 15726: 15726: static constexpr int max_digits10 = 0; 15726: 15726: static constexpr bool is_signed = true; 15726: static constexpr bool is_integer = true; 15726: static constexpr bool is_exact = true; 15726: static constexpr int radix = 2; 15726: 15726: static constexpr long long 15726: epsilon() noexcept { return 0; } 15726: 15726: static constexpr long long 15726: round_error() noexcept { return 0; } 15726: 15726: static constexpr int min_exponent = 0; 15726: static constexpr int min_exponent10 = 0; 15726: static constexpr int max_exponent = 0; 15726: static constexpr int max_exponent10 = 0; 15726: 15726: static constexpr bool has_infinity = false; 15726: static constexpr bool has_quiet_NaN = false; 15726: static constexpr bool has_signaling_NaN = false; 15726: static constexpr float_denorm_style has_denorm 15726: = denorm_absent; 15726: static constexpr bool has_denorm_loss = false; 15726: 15726: static constexpr long long 15726: infinity() noexcept { return static_cast(0); } 15726: 15726: static constexpr long long 15726: quiet_NaN() noexcept { return static_cast(0); } 15726: 15726: static constexpr long long 15726: signaling_NaN() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr long long 15726: denorm_min() noexcept { return static_cast(0); } 15726: 15726: static constexpr bool is_iec559 = false; 15726: static constexpr bool is_bounded = true; 15726: static constexpr bool is_modulo = false; 15726: 15726: static constexpr bool traps = false; 15726: static constexpr bool tinyness_before = false; 15726: static constexpr float_round_style round_style 15726: = round_toward_zero; 15726: }; 15726: 15726: 15726: template<> 15726: struct numeric_limits 15726: { 15726: static constexpr bool is_specialized = true; 15726: 15726: static constexpr unsigned long long 15726: min() noexcept { return 0; } 15726: 15726: static constexpr unsigned long long 15726: max() noexcept { return 0x7fffffffffffffffLL * 2ULL + 1; } 15726: 15726: 15726: static constexpr unsigned long long 15726: lowest() noexcept { return min(); } 15726: 15726: 15726: static constexpr int digits 15726: = (sizeof(unsigned long long) * 8 - ((unsigned long long)(-1) < 0)); 15726: static constexpr int digits10 15726: = ((sizeof(unsigned long long) * 8 - ((unsigned long long)(-1) < 0)) * 643L / 2136); 15726: 15726: static constexpr int max_digits10 = 0; 15726: 15726: static constexpr bool is_signed = false; 15726: static constexpr bool is_integer = true; 15726: static constexpr bool is_exact = true; 15726: static constexpr int radix = 2; 15726: 15726: static constexpr unsigned long long 15726: epsilon() noexcept { return 0; } 15726: 15726: static constexpr unsigned long long 15726: round_error() noexcept { return 0; } 15726: 15726: static constexpr int min_exponent = 0; 15726: static constexpr int min_exponent10 = 0; 15726: static constexpr int max_exponent = 0; 15726: static constexpr int max_exponent10 = 0; 15726: 15726: static constexpr bool has_infinity = false; 15726: static constexpr bool has_quiet_NaN = false; 15726: static constexpr bool has_signaling_NaN = false; 15726: static constexpr float_denorm_style has_denorm 15726: = denorm_absent; 15726: static constexpr bool has_denorm_loss = false; 15726: 15726: static constexpr unsigned long long 15726: infinity() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr unsigned long long 15726: quiet_NaN() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr unsigned long long 15726: signaling_NaN() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr unsigned long long 15726: denorm_min() noexcept 15726: { return static_cast(0); } 15726: 15726: static constexpr bool is_iec559 = false; 15726: static constexpr bool is_bounded = true; 15726: static constexpr bool is_modulo = true; 15726: 15726: static constexpr bool traps = false; 15726: static constexpr bool tinyness_before = false; 15726: static constexpr float_round_style round_style 15726: = round_toward_zero; 15726: }; 15726: # 1669 "/usr/include/c++/13/limits" 3 15726: template<> 15726: struct numeric_limits 15726: { 15726: static constexpr bool is_specialized = true; 15726: 15726: static constexpr float 15726: min() noexcept { return 1.1754943508222875e-38F; } 15726: 15726: static constexpr float 15726: max() noexcept { return 3.4028234663852886e+38F; } 15726: 15726: 15726: static constexpr float 15726: lowest() noexcept { return -3.4028234663852886e+38F; } 15726: 15726: 15726: static constexpr int digits = 24; 15726: static constexpr int digits10 = 6; 15726: 15726: static constexpr int max_digits10 15726: = (2 + (24) * 643L / 2136); 15726: 15726: static constexpr bool is_signed = true; 15726: static constexpr bool is_integer = false; 15726: static constexpr bool is_exact = false; 15726: static constexpr int radix = 2; 15726: 15726: static constexpr float 15726: epsilon() noexcept { return 1.1920928955078125e-7F; } 15726: 15726: static constexpr float 15726: round_error() noexcept { return 0.5F; } 15726: 15726: static constexpr int min_exponent = (-125); 15726: static constexpr int min_exponent10 = (-37); 15726: static constexpr int max_exponent = 128; 15726: static constexpr int max_exponent10 = 38; 15726: 15726: static constexpr bool has_infinity = 1; 15726: static constexpr bool has_quiet_NaN = 1; 15726: static constexpr bool has_signaling_NaN = has_quiet_NaN; 15726: static constexpr float_denorm_style has_denorm 15726: = bool(1) ? denorm_present : denorm_absent; 15726: static constexpr bool has_denorm_loss 15726: = false; 15726: 15726: static constexpr float 15726: infinity() noexcept { return __builtin_huge_valf(); } 15726: 15726: static constexpr float 15726: quiet_NaN() noexcept { return __builtin_nanf(""); } 15726: 15726: static constexpr float 15726: signaling_NaN() noexcept { return __builtin_nansf(""); } 15726: 15726: static constexpr float 15726: denorm_min() noexcept { return 1.4012984643248171e-45F; } 15726: 15726: static constexpr bool is_iec559 15726: = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 15726: static constexpr bool is_bounded = true; 15726: static constexpr bool is_modulo = false; 15726: 15726: static constexpr bool traps = false; 15726: static constexpr bool tinyness_before 15726: = false; 15726: static constexpr float_round_style round_style 15726: = round_to_nearest; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template<> 15726: struct numeric_limits 15726: { 15726: static constexpr bool is_specialized = true; 15726: 15726: static constexpr double 15726: min() noexcept { return double(2.2250738585072014e-308L); } 15726: 15726: static constexpr double 15726: max() noexcept { return double(1.7976931348623157e+308L); } 15726: 15726: 15726: static constexpr double 15726: lowest() noexcept { return -double(1.7976931348623157e+308L); } 15726: 15726: 15726: static constexpr int digits = 53; 15726: static constexpr int digits10 = 15; 15726: 15726: static constexpr int max_digits10 15726: = (2 + (53) * 643L / 2136); 15726: 15726: static constexpr bool is_signed = true; 15726: static constexpr bool is_integer = false; 15726: static constexpr bool is_exact = false; 15726: static constexpr int radix = 2; 15726: 15726: static constexpr double 15726: epsilon() noexcept { return double(2.2204460492503131e-16L); } 15726: 15726: static constexpr double 15726: round_error() noexcept { return 0.5; } 15726: 15726: static constexpr int min_exponent = (-1021); 15726: static constexpr int min_exponent10 = (-307); 15726: static constexpr int max_exponent = 1024; 15726: static constexpr int max_exponent10 = 308; 15726: 15726: static constexpr bool has_infinity = 1; 15726: static constexpr bool has_quiet_NaN = 1; 15726: static constexpr bool has_signaling_NaN = has_quiet_NaN; 15726: static constexpr float_denorm_style has_denorm 15726: = bool(1) ? denorm_present : denorm_absent; 15726: static constexpr bool has_denorm_loss 15726: = false; 15726: 15726: static constexpr double 15726: infinity() noexcept { return __builtin_huge_val(); } 15726: 15726: static constexpr double 15726: quiet_NaN() noexcept { return __builtin_nan(""); } 15726: 15726: static constexpr double 15726: signaling_NaN() noexcept { return __builtin_nans(""); } 15726: 15726: static constexpr double 15726: denorm_min() noexcept { return double(4.9406564584124654e-324L); } 15726: 15726: static constexpr bool is_iec559 15726: = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 15726: static constexpr bool is_bounded = true; 15726: static constexpr bool is_modulo = false; 15726: 15726: static constexpr bool traps = false; 15726: static constexpr bool tinyness_before 15726: = false; 15726: static constexpr float_round_style round_style 15726: = round_to_nearest; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template<> 15726: struct numeric_limits 15726: { 15726: static constexpr bool is_specialized = true; 15726: 15726: static constexpr long double 15726: min() noexcept { return 2.2250738585072014e-308L; } 15726: 15726: static constexpr long double 15726: max() noexcept { return 1.7976931348623157e+308L; } 15726: 15726: 15726: static constexpr long double 15726: lowest() noexcept { return -1.7976931348623157e+308L; } 15726: 15726: 15726: static constexpr int digits = 53; 15726: static constexpr int digits10 = 15; 15726: 15726: static constexpr int max_digits10 15726: = (2 + (53) * 643L / 2136); 15726: 15726: static constexpr bool is_signed = true; 15726: static constexpr bool is_integer = false; 15726: static constexpr bool is_exact = false; 15726: static constexpr int radix = 2; 15726: 15726: static constexpr long double 15726: epsilon() noexcept { return 2.2204460492503131e-16L; } 15726: 15726: static constexpr long double 15726: round_error() noexcept { return 0.5L; } 15726: 15726: static constexpr int min_exponent = (-1021); 15726: static constexpr int min_exponent10 = (-307); 15726: static constexpr int max_exponent = 1024; 15726: static constexpr int max_exponent10 = 308; 15726: 15726: static constexpr bool has_infinity = 1; 15726: static constexpr bool has_quiet_NaN = 1; 15726: static constexpr bool has_signaling_NaN = has_quiet_NaN; 15726: static constexpr float_denorm_style has_denorm 15726: = bool(1) ? denorm_present : denorm_absent; 15726: static constexpr bool has_denorm_loss 15726: = false; 15726: 15726: static constexpr long double 15726: infinity() noexcept { return __builtin_huge_vall(); } 15726: 15726: static constexpr long double 15726: quiet_NaN() noexcept { return __builtin_nanl(""); } 15726: 15726: static constexpr long double 15726: signaling_NaN() noexcept { return __builtin_nansl(""); } 15726: 15726: static constexpr long double 15726: denorm_min() noexcept { return 4.9406564584124654e-324L; } 15726: 15726: static constexpr bool is_iec559 15726: = has_infinity && has_quiet_NaN && has_denorm == denorm_present; 15726: static constexpr bool is_bounded = true; 15726: static constexpr bool is_modulo = false; 15726: 15726: static constexpr bool traps = false; 15726: static constexpr bool tinyness_before = 15726: false; 15726: static constexpr float_round_style round_style = 15726: round_to_nearest; 15726: }; 15726: # 2076 "/usr/include/c++/13/limits" 3 15726: 15726: } 15726: # 40 "/usr/include/c++/13/bits/chrono.h" 2 3 15726: # 1 "/usr/include/c++/13/ctime" 1 3 15726: # 39 "/usr/include/c++/13/ctime" 3 15726: 15726: # 40 "/usr/include/c++/13/ctime" 3 15726: # 58 "/usr/include/c++/13/ctime" 3 15726: namespace std 15726: { 15726: using ::clock_t; 15726: using ::time_t; 15726: using ::tm; 15726: 15726: using ::clock; 15726: using ::difftime; 15726: using ::mktime; 15726: using ::time; 15726: using ::asctime; 15726: using ::ctime; 15726: using ::gmtime; 15726: using ::localtime; 15726: using ::strftime; 15726: } 15726: 15726: 15726: 15726: namespace std 15726: { 15726: using ::timespec; 15726: using ::timespec_get; 15726: } 15726: # 41 "/usr/include/c++/13/bits/chrono.h" 2 3 15726: # 1 "/usr/include/c++/13/bits/parse_numbers.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/parse_numbers.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/parse_numbers.h" 3 15726: # 42 "/usr/include/c++/13/bits/parse_numbers.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: namespace __parse_int 15726: { 15726: template 15726: struct _Digit; 15726: 15726: template 15726: struct _Digit<_Base, '0'> : integral_constant 15726: { 15726: using __valid = true_type; 15726: }; 15726: 15726: template 15726: struct _Digit<_Base, '1'> : integral_constant 15726: { 15726: using __valid = true_type; 15726: }; 15726: 15726: template 15726: struct _Digit_impl : integral_constant 15726: { 15726: static_assert(_Base > _Val, "invalid digit"); 15726: using __valid = true_type; 15726: }; 15726: 15726: template 15726: struct _Digit<_Base, '2'> : _Digit_impl<_Base, 2> 15726: { }; 15726: 15726: template 15726: struct _Digit<_Base, '3'> : _Digit_impl<_Base, 3> 15726: { }; 15726: 15726: template 15726: struct _Digit<_Base, '4'> : _Digit_impl<_Base, 4> 15726: { }; 15726: 15726: template 15726: struct _Digit<_Base, '5'> : _Digit_impl<_Base, 5> 15726: { }; 15726: 15726: template 15726: struct _Digit<_Base, '6'> : _Digit_impl<_Base, 6> 15726: { }; 15726: 15726: template 15726: struct _Digit<_Base, '7'> : _Digit_impl<_Base, 7> 15726: { }; 15726: 15726: template 15726: struct _Digit<_Base, '8'> : _Digit_impl<_Base, 8> 15726: { }; 15726: 15726: template 15726: struct _Digit<_Base, '9'> : _Digit_impl<_Base, 9> 15726: { }; 15726: 15726: template 15726: struct _Digit<_Base, 'a'> : _Digit_impl<_Base, 0xa> 15726: { }; 15726: 15726: template 15726: struct _Digit<_Base, 'A'> : _Digit_impl<_Base, 0xa> 15726: { }; 15726: 15726: template 15726: struct _Digit<_Base, 'b'> : _Digit_impl<_Base, 0xb> 15726: { }; 15726: 15726: template 15726: struct _Digit<_Base, 'B'> : _Digit_impl<_Base, 0xb> 15726: { }; 15726: 15726: template 15726: struct _Digit<_Base, 'c'> : _Digit_impl<_Base, 0xc> 15726: { }; 15726: 15726: template 15726: struct _Digit<_Base, 'C'> : _Digit_impl<_Base, 0xc> 15726: { }; 15726: 15726: template 15726: struct _Digit<_Base, 'd'> : _Digit_impl<_Base, 0xd> 15726: { }; 15726: 15726: template 15726: struct _Digit<_Base, 'D'> : _Digit_impl<_Base, 0xd> 15726: { }; 15726: 15726: template 15726: struct _Digit<_Base, 'e'> : _Digit_impl<_Base, 0xe> 15726: { }; 15726: 15726: template 15726: struct _Digit<_Base, 'E'> : _Digit_impl<_Base, 0xe> 15726: { }; 15726: 15726: template 15726: struct _Digit<_Base, 'f'> : _Digit_impl<_Base, 0xf> 15726: { }; 15726: 15726: template 15726: struct _Digit<_Base, 'F'> : _Digit_impl<_Base, 0xf> 15726: { }; 15726: 15726: 15726: template 15726: struct _Digit<_Base, '\''> : integral_constant 15726: { 15726: using __valid = false_type; 15726: }; 15726: 15726: 15726: 15726: template 15726: using __ull_constant = integral_constant; 15726: 15726: template 15726: struct _Power_help 15726: { 15726: using __next = typename _Power_help<_Base, _Digs...>::type; 15726: using __valid_digit = typename _Digit<_Base, _Dig>::__valid; 15726: using type 15726: = __ull_constant<__next::value * (__valid_digit{} ? _Base : 1ULL)>; 15726: }; 15726: 15726: template 15726: struct _Power_help<_Base, _Dig> 15726: { 15726: using __valid_digit = typename _Digit<_Base, _Dig>::__valid; 15726: using type = __ull_constant<__valid_digit::value>; 15726: }; 15726: 15726: template 15726: struct _Power : _Power_help<_Base, _Digs...>::type 15726: { }; 15726: 15726: template 15726: struct _Power<_Base> : __ull_constant<0> 15726: { }; 15726: 15726: 15726: 15726: template 15726: struct _Number_help 15726: { 15726: using __digit = _Digit<_Base, _Dig>; 15726: using __valid_digit = typename __digit::__valid; 15726: using __next = _Number_help<_Base, 15726: __valid_digit::value ? _Pow / _Base : _Pow, 15726: _Digs...>; 15726: using type = __ull_constant<_Pow * __digit::value + __next::type::value>; 15726: static_assert((type::value / _Pow) == __digit::value, 15726: "integer literal does not fit in unsigned long long"); 15726: }; 15726: 15726: 15726: template 15726: struct _Number_help<_Base, _Pow, '\'', _Dig, _Digs...> 15726: : _Number_help<_Base, _Pow, _Dig, _Digs...> 15726: { }; 15726: 15726: 15726: template 15726: struct _Number_help<_Base, 1ULL, _Dig> 15726: { 15726: using type = __ull_constant<_Digit<_Base, _Dig>::value>; 15726: }; 15726: 15726: template 15726: struct _Number 15726: : _Number_help<_Base, _Power<_Base, _Digs...>::value, _Digs...>::type 15726: { }; 15726: 15726: template 15726: struct _Number<_Base> 15726: : __ull_constant<0> 15726: { }; 15726: 15726: 15726: 15726: template 15726: struct _Parse_int; 15726: 15726: template 15726: struct _Parse_int<'0', 'b', _Digs...> 15726: : _Number<2U, _Digs...>::type 15726: { }; 15726: 15726: template 15726: struct _Parse_int<'0', 'B', _Digs...> 15726: : _Number<2U, _Digs...>::type 15726: { }; 15726: 15726: template 15726: struct _Parse_int<'0', 'x', _Digs...> 15726: : _Number<16U, _Digs...>::type 15726: { }; 15726: 15726: template 15726: struct _Parse_int<'0', 'X', _Digs...> 15726: : _Number<16U, _Digs...>::type 15726: { }; 15726: 15726: template 15726: struct _Parse_int<'0', _Digs...> 15726: : _Number<8U, _Digs...>::type 15726: { }; 15726: 15726: template 15726: struct _Parse_int 15726: : _Number<10U, _Digs...>::type 15726: { }; 15726: 15726: } 15726: 15726: 15726: namespace __select_int 15726: { 15726: template 15726: struct _Select_int_base; 15726: 15726: template 15726: struct _Select_int_base<_Val, _IntType, _Ints...> 15726: : __conditional_t<(_Val <= __gnu_cxx::__int_traits<_IntType>::__max), 15726: integral_constant<_IntType, (_IntType)_Val>, 15726: _Select_int_base<_Val, _Ints...>> 15726: { }; 15726: 15726: template 15726: struct _Select_int_base<_Val> 15726: { }; 15726: 15726: template 15726: using _Select_int = typename _Select_int_base< 15726: __parse_int::_Parse_int<_Digs...>::value, 15726: unsigned char, 15726: unsigned short, 15726: unsigned int, 15726: unsigned long, 15726: unsigned long long 15726: >::type; 15726: 15726: } 15726: 15726: 15726: } 15726: # 42 "/usr/include/c++/13/bits/chrono.h" 2 3 15726: 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: namespace filesystem { struct __file_clock; }; 15726: 15726: 15726: namespace chrono 15726: { 15726: 15726: 15726: 15726: 15726: template> 15726: class duration; 15726: 15726: 15726: template 15726: class time_point; 15726: 15726: } 15726: # 77 "/usr/include/c++/13/bits/chrono.h" 3 15726: template 15726: struct __duration_common_type 15726: { }; 15726: 15726: template 15726: struct __duration_common_type<_CT, _Period1, _Period2, 15726: __void_t> 15726: { 15726: private: 15726: using __gcd_num = __static_gcd<_Period1::num, _Period2::num>; 15726: using __gcd_den = __static_gcd<_Period1::den, _Period2::den>; 15726: using __cr = typename _CT::type; 15726: using __r = ratio<__gcd_num::value, 15726: (_Period1::den / __gcd_den::value) * _Period2::den>; 15726: 15726: public: 15726: using type = chrono::duration<__cr, typename __r::type>; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct common_type, 15726: chrono::duration<_Rep2, _Period2>> 15726: : __duration_common_type, 15726: typename _Period1::type, 15726: typename _Period2::type> 15726: { }; 15726: 15726: 15726: template 15726: struct common_type, 15726: chrono::duration<_Rep, _Period>> 15726: { 15726: using type = chrono::duration::type, 15726: typename _Period::type>; 15726: }; 15726: 15726: 15726: template 15726: struct common_type> 15726: { 15726: using type = chrono::duration::type, 15726: typename _Period::type>; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct __timepoint_common_type 15726: { }; 15726: 15726: template 15726: struct __timepoint_common_type<_CT, _Clock, __void_t> 15726: { 15726: using type = chrono::time_point<_Clock, typename _CT::type>; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct common_type, 15726: chrono::time_point<_Clock, _Duration2>> 15726: : __timepoint_common_type, _Clock> 15726: { }; 15726: 15726: 15726: template 15726: struct common_type, 15726: chrono::time_point<_Clock, _Duration>> 15726: { using type = chrono::time_point<_Clock, _Duration>; }; 15726: 15726: 15726: template 15726: struct common_type> 15726: { using type = chrono::time_point<_Clock, _Duration>; }; 15726: 15726: 15726: 15726: 15726: namespace chrono 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct __duration_cast_impl 15726: { 15726: template 15726: static constexpr _ToDur 15726: __cast(const duration<_Rep, _Period>& __d) 15726: { 15726: typedef typename _ToDur::rep __to_rep; 15726: return _ToDur(static_cast<__to_rep>(static_cast<_CR>(__d.count()) 15726: * static_cast<_CR>(_CF::num) 15726: / static_cast<_CR>(_CF::den))); 15726: } 15726: }; 15726: 15726: template 15726: struct __duration_cast_impl<_ToDur, _CF, _CR, true, true> 15726: { 15726: template 15726: static constexpr _ToDur 15726: __cast(const duration<_Rep, _Period>& __d) 15726: { 15726: typedef typename _ToDur::rep __to_rep; 15726: return _ToDur(static_cast<__to_rep>(__d.count())); 15726: } 15726: }; 15726: 15726: template 15726: struct __duration_cast_impl<_ToDur, _CF, _CR, true, false> 15726: { 15726: template 15726: static constexpr _ToDur 15726: __cast(const duration<_Rep, _Period>& __d) 15726: { 15726: typedef typename _ToDur::rep __to_rep; 15726: return _ToDur(static_cast<__to_rep>( 15726: static_cast<_CR>(__d.count()) / static_cast<_CR>(_CF::den))); 15726: } 15726: }; 15726: 15726: template 15726: struct __duration_cast_impl<_ToDur, _CF, _CR, false, true> 15726: { 15726: template 15726: static constexpr _ToDur 15726: __cast(const duration<_Rep, _Period>& __d) 15726: { 15726: typedef typename _ToDur::rep __to_rep; 15726: return _ToDur(static_cast<__to_rep>( 15726: static_cast<_CR>(__d.count()) * static_cast<_CR>(_CF::num))); 15726: } 15726: }; 15726: 15726: template 15726: struct __is_duration 15726: : std::false_type 15726: { }; 15726: 15726: template 15726: struct __is_duration> 15726: : std::true_type 15726: { }; 15726: 15726: template 15726: using __enable_if_is_duration 15726: = typename enable_if<__is_duration<_Tp>::value, _Tp>::type; 15726: 15726: template 15726: using __disable_if_is_duration 15726: = typename enable_if::value, _Tp>::type; 15726: 15726: 15726: template 15726: inline constexpr bool __is_duration_v = false; 15726: template 15726: inline constexpr bool __is_duration_v> = true; 15726: template 15726: inline constexpr bool __is_time_point_v = false; 15726: template 15726: inline constexpr bool __is_time_point_v> = true; 15726: # 270 "/usr/include/c++/13/bits/chrono.h" 3 15726: template 15726: [[__nodiscard__]] 15726: constexpr __enable_if_is_duration<_ToDur> 15726: duration_cast(const duration<_Rep, _Period>& __d) 15726: { 15726: 15726: if constexpr (is_same_v<_ToDur, duration<_Rep, _Period>>) 15726: return __d; 15726: else 15726: { 15726: 15726: using __to_period = typename _ToDur::period; 15726: using __to_rep = typename _ToDur::rep; 15726: using __cf = ratio_divide<_Period, __to_period>; 15726: using __cr = typename common_type<__to_rep, _Rep, intmax_t>::type; 15726: using __dc = __duration_cast_impl<_ToDur, __cf, __cr, 15726: __cf::num == 1, __cf::den == 1>; 15726: return __dc::__cast(__d); 15726: 15726: } 15726: 15726: } 15726: # 304 "/usr/include/c++/13/bits/chrono.h" 3 15726: template 15726: struct treat_as_floating_point 15726: : is_floating_point<_Rep> 15726: { }; 15726: 15726: 15726: template 15726: inline constexpr bool treat_as_floating_point_v = 15726: treat_as_floating_point<_Rep>::value; 15726: 15726: template<> 15726: inline constexpr bool treat_as_floating_point_v = false; 15726: template<> 15726: inline constexpr bool treat_as_floating_point_v = false; 15726: template<> 15726: inline constexpr bool treat_as_floating_point_v = false; 15726: template<> 15726: inline constexpr bool treat_as_floating_point_v = true; 15726: template<> 15726: inline constexpr bool treat_as_floating_point_v = true; 15726: template<> 15726: inline constexpr bool treat_as_floating_point_v = true; 15726: # 386 "/usr/include/c++/13/bits/chrono.h" 3 15726: template 15726: [[nodiscard]] constexpr __enable_if_is_duration<_ToDur> 15726: floor(const duration<_Rep, _Period>& __d) 15726: { 15726: auto __to = chrono::duration_cast<_ToDur>(__d); 15726: if (__to > __d) 15726: return __to - _ToDur{1}; 15726: return __to; 15726: } 15726: # 406 "/usr/include/c++/13/bits/chrono.h" 3 15726: template 15726: [[nodiscard]] constexpr __enable_if_is_duration<_ToDur> 15726: ceil(const duration<_Rep, _Period>& __d) 15726: { 15726: auto __to = chrono::duration_cast<_ToDur>(__d); 15726: if (__to < __d) 15726: return __to + _ToDur{1}; 15726: return __to; 15726: } 15726: # 427 "/usr/include/c++/13/bits/chrono.h" 3 15726: template 15726: [[nodiscard]] constexpr 15726: enable_if_t< 15726: __and_<__is_duration<_ToDur>, 15726: __not_>>::value, 15726: _ToDur> 15726: round(const duration<_Rep, _Period>& __d) 15726: { 15726: _ToDur __t0 = chrono::floor<_ToDur>(__d); 15726: _ToDur __t1 = __t0 + _ToDur{1}; 15726: auto __diff0 = __d - __t0; 15726: auto __diff1 = __t1 - __d; 15726: if (__diff0 == __diff1) 15726: { 15726: if (__t0.count() & 1) 15726: return __t1; 15726: return __t0; 15726: } 15726: else if (__diff0 < __diff1) 15726: return __t0; 15726: return __t1; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: [[nodiscard]] constexpr 15726: enable_if_t::is_signed, duration<_Rep, _Period>> 15726: abs(duration<_Rep, _Period> __d) 15726: { 15726: if (__d >= __d.zero()) 15726: return __d; 15726: return -__d; 15726: } 15726: 15726: 15726: namespace __detail { using chrono::ceil; } 15726: # 494 "/usr/include/c++/13/bits/chrono.h" 3 15726: template 15726: struct duration_values 15726: { 15726: static constexpr _Rep 15726: zero() noexcept 15726: { return _Rep(0); } 15726: 15726: static constexpr _Rep 15726: max() noexcept 15726: { return numeric_limits<_Rep>::max(); } 15726: 15726: static constexpr _Rep 15726: min() noexcept 15726: { return numeric_limits<_Rep>::lowest(); } 15726: }; 15726: 15726: template 15726: class duration 15726: { 15726: static_assert(!__is_duration<_Rep>::value, 15726: "rep cannot be a std::chrono::duration"); 15726: static_assert(__is_ratio<_Period>::value, 15726: "period must be a specialization of std::ratio"); 15726: static_assert(_Period::num > 0, "period must be positive"); 15726: 15726: template 15726: using __is_float = treat_as_floating_point<_Rep2>; 15726: 15726: static constexpr intmax_t 15726: _S_gcd(intmax_t __m, intmax_t __n) noexcept 15726: { 15726: 15726: 15726: 15726: do 15726: { 15726: intmax_t __rem = __m % __n; 15726: __m = __n; 15726: __n = __rem; 15726: } 15726: while (__n != 0); 15726: return __m; 15726: 15726: 15726: 15726: 15726: 15726: } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: using __divide = ratio<(_R1::num / __gcd1) * (_R2::den / __gcd2), 15726: (_R1::den / __gcd2) * (_R2::num / __gcd1)>; 15726: 15726: 15726: template 15726: using __is_harmonic 15726: = __bool_constant<__divide<_Period2, _Period>::den == 1>; 15726: 15726: public: 15726: 15726: using rep = _Rep; 15726: using period = typename _Period::type; 15726: 15726: 15726: constexpr duration() = default; 15726: 15726: duration(const duration&) = default; 15726: 15726: 15726: 15726: template, 15726: __or_<__is_float, __not_<__is_float<_Rep2>>>>> 15726: constexpr explicit duration(const _Rep2& __rep) 15726: : __r(static_cast(__rep)) { } 15726: 15726: template, 15726: __or_<__is_float, 15726: __and_<__is_harmonic<_Period2>, 15726: __not_<__is_float<_Rep2>>>>>> 15726: constexpr duration(const duration<_Rep2, _Period2>& __d) 15726: : __r(duration_cast(__d).count()) { } 15726: 15726: ~duration() = default; 15726: duration& operator=(const duration&) = default; 15726: 15726: 15726: constexpr rep 15726: count() const 15726: { return __r; } 15726: 15726: 15726: 15726: constexpr duration::type, period> 15726: operator+() const 15726: { return duration::type, period>(__r); } 15726: 15726: constexpr duration::type, period> 15726: operator-() const 15726: { return duration::type, period>(-__r); } 15726: 15726: constexpr duration& 15726: operator++() 15726: { 15726: ++__r; 15726: return *this; 15726: } 15726: 15726: constexpr duration 15726: operator++(int) 15726: { return duration(__r++); } 15726: 15726: constexpr duration& 15726: operator--() 15726: { 15726: --__r; 15726: return *this; 15726: } 15726: 15726: constexpr duration 15726: operator--(int) 15726: { return duration(__r--); } 15726: 15726: constexpr duration& 15726: operator+=(const duration& __d) 15726: { 15726: __r += __d.count(); 15726: return *this; 15726: } 15726: 15726: constexpr duration& 15726: operator-=(const duration& __d) 15726: { 15726: __r -= __d.count(); 15726: return *this; 15726: } 15726: 15726: constexpr duration& 15726: operator*=(const rep& __rhs) 15726: { 15726: __r *= __rhs; 15726: return *this; 15726: } 15726: 15726: constexpr duration& 15726: operator/=(const rep& __rhs) 15726: { 15726: __r /= __rhs; 15726: return *this; 15726: } 15726: 15726: 15726: template 15726: constexpr 15726: __enable_if_t::value, duration&> 15726: operator%=(const rep& __rhs) 15726: { 15726: __r %= __rhs; 15726: return *this; 15726: } 15726: 15726: template 15726: constexpr 15726: __enable_if_t::value, duration&> 15726: operator%=(const duration& __d) 15726: { 15726: __r %= __d.count(); 15726: return *this; 15726: } 15726: 15726: 15726: static constexpr duration 15726: zero() noexcept 15726: { return duration(duration_values::zero()); } 15726: 15726: static constexpr duration 15726: min() noexcept 15726: { return duration(duration_values::min()); } 15726: 15726: static constexpr duration 15726: max() noexcept 15726: { return duration(duration_values::max()); } 15726: 15726: private: 15726: rep __r; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: constexpr typename common_type, 15726: duration<_Rep2, _Period2>>::type 15726: operator+(const duration<_Rep1, _Period1>& __lhs, 15726: const duration<_Rep2, _Period2>& __rhs) 15726: { 15726: typedef duration<_Rep1, _Period1> __dur1; 15726: typedef duration<_Rep2, _Period2> __dur2; 15726: typedef typename common_type<__dur1,__dur2>::type __cd; 15726: return __cd(__cd(__lhs).count() + __cd(__rhs).count()); 15726: } 15726: 15726: 15726: template 15726: constexpr typename common_type, 15726: duration<_Rep2, _Period2>>::type 15726: operator-(const duration<_Rep1, _Period1>& __lhs, 15726: const duration<_Rep2, _Period2>& __rhs) 15726: { 15726: typedef duration<_Rep1, _Period1> __dur1; 15726: typedef duration<_Rep2, _Period2> __dur2; 15726: typedef typename common_type<__dur1,__dur2>::type __cd; 15726: return __cd(__cd(__lhs).count() - __cd(__rhs).count()); 15726: } 15726: # 727 "/usr/include/c++/13/bits/chrono.h" 3 15726: template::type> 15726: using __common_rep_t = typename 15726: enable_if::value, _CRep>::type; 15726: # 739 "/usr/include/c++/13/bits/chrono.h" 3 15726: template 15726: constexpr duration<__common_rep_t<_Rep1, _Rep2>, _Period> 15726: operator*(const duration<_Rep1, _Period>& __d, const _Rep2& __s) 15726: { 15726: typedef duration::type, _Period> 15726: __cd; 15726: return __cd(__cd(__d).count() * __s); 15726: } 15726: 15726: template 15726: constexpr duration<__common_rep_t<_Rep2, _Rep1>, _Period> 15726: operator*(const _Rep1& __s, const duration<_Rep2, _Period>& __d) 15726: { return __d * __s; } 15726: 15726: template 15726: constexpr 15726: duration<__common_rep_t<_Rep1, __disable_if_is_duration<_Rep2>>, _Period> 15726: operator/(const duration<_Rep1, _Period>& __d, const _Rep2& __s) 15726: { 15726: typedef duration::type, _Period> 15726: __cd; 15726: return __cd(__cd(__d).count() / __s); 15726: } 15726: 15726: template 15726: constexpr typename common_type<_Rep1, _Rep2>::type 15726: operator/(const duration<_Rep1, _Period1>& __lhs, 15726: const duration<_Rep2, _Period2>& __rhs) 15726: { 15726: typedef duration<_Rep1, _Period1> __dur1; 15726: typedef duration<_Rep2, _Period2> __dur2; 15726: typedef typename common_type<__dur1,__dur2>::type __cd; 15726: return __cd(__lhs).count() / __cd(__rhs).count(); 15726: } 15726: 15726: 15726: template 15726: constexpr 15726: duration<__common_rep_t<_Rep1, __disable_if_is_duration<_Rep2>>, _Period> 15726: operator%(const duration<_Rep1, _Period>& __d, const _Rep2& __s) 15726: { 15726: typedef duration::type, _Period> 15726: __cd; 15726: return __cd(__cd(__d).count() % __s); 15726: } 15726: 15726: template 15726: constexpr typename common_type, 15726: duration<_Rep2, _Period2>>::type 15726: operator%(const duration<_Rep1, _Period1>& __lhs, 15726: const duration<_Rep2, _Period2>& __rhs) 15726: { 15726: typedef duration<_Rep1, _Period1> __dur1; 15726: typedef duration<_Rep2, _Period2> __dur2; 15726: typedef typename common_type<__dur1,__dur2>::type __cd; 15726: return __cd(__cd(__lhs).count() % __cd(__rhs).count()); 15726: } 15726: # 807 "/usr/include/c++/13/bits/chrono.h" 3 15726: template 15726: constexpr bool 15726: operator==(const duration<_Rep1, _Period1>& __lhs, 15726: const duration<_Rep2, _Period2>& __rhs) 15726: { 15726: typedef duration<_Rep1, _Period1> __dur1; 15726: typedef duration<_Rep2, _Period2> __dur2; 15726: typedef typename common_type<__dur1,__dur2>::type __ct; 15726: return __ct(__lhs).count() == __ct(__rhs).count(); 15726: } 15726: 15726: template 15726: constexpr bool 15726: operator<(const duration<_Rep1, _Period1>& __lhs, 15726: const duration<_Rep2, _Period2>& __rhs) 15726: { 15726: typedef duration<_Rep1, _Period1> __dur1; 15726: typedef duration<_Rep2, _Period2> __dur2; 15726: typedef typename common_type<__dur1,__dur2>::type __ct; 15726: return __ct(__lhs).count() < __ct(__rhs).count(); 15726: } 15726: # 844 "/usr/include/c++/13/bits/chrono.h" 3 15726: template 15726: constexpr bool 15726: operator!=(const duration<_Rep1, _Period1>& __lhs, 15726: const duration<_Rep2, _Period2>& __rhs) 15726: { return !(__lhs == __rhs); } 15726: 15726: 15726: template 15726: constexpr bool 15726: operator<=(const duration<_Rep1, _Period1>& __lhs, 15726: const duration<_Rep2, _Period2>& __rhs) 15726: { return !(__rhs < __lhs); } 15726: 15726: template 15726: constexpr bool 15726: operator>(const duration<_Rep1, _Period1>& __lhs, 15726: const duration<_Rep2, _Period2>& __rhs) 15726: { return __rhs < __lhs; } 15726: 15726: template 15726: constexpr bool 15726: operator>=(const duration<_Rep1, _Period1>& __lhs, 15726: const duration<_Rep2, _Period2>& __rhs) 15726: { return !(__lhs < __rhs); } 15726: # 888 "/usr/include/c++/13/bits/chrono.h" 3 15726: using nanoseconds = duration; 15726: 15726: 15726: using microseconds = duration; 15726: 15726: 15726: using milliseconds = duration; 15726: 15726: 15726: using seconds = duration; 15726: 15726: 15726: using minutes = duration>; 15726: 15726: 15726: using hours = duration>; 15726: # 921 "/usr/include/c++/13/bits/chrono.h" 3 15726: template 15726: class time_point 15726: { 15726: static_assert(__is_duration<_Dur>::value, 15726: "duration must be a specialization of std::chrono::duration"); 15726: 15726: public: 15726: typedef _Clock clock; 15726: typedef _Dur duration; 15726: typedef typename duration::rep rep; 15726: typedef typename duration::period period; 15726: 15726: constexpr time_point() : __d(duration::zero()) 15726: { } 15726: 15726: constexpr explicit time_point(const duration& __dur) 15726: : __d(__dur) 15726: { } 15726: 15726: 15726: template>> 15726: constexpr time_point(const time_point& __t) 15726: : __d(__t.time_since_epoch()) 15726: { } 15726: 15726: 15726: constexpr duration 15726: time_since_epoch() const 15726: { return __d; } 15726: # 977 "/usr/include/c++/13/bits/chrono.h" 3 15726: constexpr time_point& 15726: operator+=(const duration& __dur) 15726: { 15726: __d += __dur; 15726: return *this; 15726: } 15726: 15726: constexpr time_point& 15726: operator-=(const duration& __dur) 15726: { 15726: __d -= __dur; 15726: return *this; 15726: } 15726: 15726: 15726: static constexpr time_point 15726: min() noexcept 15726: { return time_point(duration::min()); } 15726: 15726: static constexpr time_point 15726: max() noexcept 15726: { return time_point(duration::max()); } 15726: 15726: private: 15726: duration __d; 15726: }; 15726: # 1016 "/usr/include/c++/13/bits/chrono.h" 3 15726: template 15726: [[__nodiscard__]] constexpr 15726: __enable_if_t<__is_duration<_ToDur>::value, time_point<_Clock, _ToDur>> 15726: time_point_cast(const time_point<_Clock, _Dur>& __t) 15726: { 15726: typedef time_point<_Clock, _ToDur> __time_point; 15726: return __time_point(duration_cast<_ToDur>(__t.time_since_epoch())); 15726: } 15726: # 1038 "/usr/include/c++/13/bits/chrono.h" 3 15726: template 15726: [[nodiscard]] constexpr 15726: enable_if_t<__is_duration_v<_ToDur>, time_point<_Clock, _ToDur>> 15726: floor(const time_point<_Clock, _Dur>& __tp) 15726: { 15726: return time_point<_Clock, _ToDur>{ 15726: chrono::floor<_ToDur>(__tp.time_since_epoch())}; 15726: } 15726: # 1059 "/usr/include/c++/13/bits/chrono.h" 3 15726: template 15726: [[nodiscard]] constexpr 15726: enable_if_t<__is_duration_v<_ToDur>, time_point<_Clock, _ToDur>> 15726: ceil(const time_point<_Clock, _Dur>& __tp) 15726: { 15726: return time_point<_Clock, _ToDur>{ 15726: chrono::ceil<_ToDur>(__tp.time_since_epoch())}; 15726: } 15726: # 1081 "/usr/include/c++/13/bits/chrono.h" 3 15726: template 15726: [[nodiscard]] constexpr 15726: enable_if_t<__is_duration_v<_ToDur> 15726: && !treat_as_floating_point_v, 15726: time_point<_Clock, _ToDur>> 15726: round(const time_point<_Clock, _Dur>& __tp) 15726: { 15726: return time_point<_Clock, _ToDur>{ 15726: chrono::round<_ToDur>(__tp.time_since_epoch())}; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: constexpr time_point<_Clock, 15726: typename common_type<_Dur1, duration<_Rep2, _Period2>>::type> 15726: operator+(const time_point<_Clock, _Dur1>& __lhs, 15726: const duration<_Rep2, _Period2>& __rhs) 15726: { 15726: typedef duration<_Rep2, _Period2> __dur2; 15726: typedef typename common_type<_Dur1,__dur2>::type __ct; 15726: typedef time_point<_Clock, __ct> __time_point; 15726: return __time_point(__lhs.time_since_epoch() + __rhs); 15726: } 15726: 15726: 15726: template 15726: constexpr time_point<_Clock, 15726: typename common_type, _Dur2>::type> 15726: operator+(const duration<_Rep1, _Period1>& __lhs, 15726: const time_point<_Clock, _Dur2>& __rhs) 15726: { 15726: typedef duration<_Rep1, _Period1> __dur1; 15726: typedef typename common_type<__dur1,_Dur2>::type __ct; 15726: typedef time_point<_Clock, __ct> __time_point; 15726: return __time_point(__rhs.time_since_epoch() + __lhs); 15726: } 15726: 15726: 15726: template 15726: constexpr time_point<_Clock, 15726: typename common_type<_Dur1, duration<_Rep2, _Period2>>::type> 15726: operator-(const time_point<_Clock, _Dur1>& __lhs, 15726: const duration<_Rep2, _Period2>& __rhs) 15726: { 15726: typedef duration<_Rep2, _Period2> __dur2; 15726: typedef typename common_type<_Dur1,__dur2>::type __ct; 15726: typedef time_point<_Clock, __ct> __time_point; 15726: return __time_point(__lhs.time_since_epoch() -__rhs); 15726: } 15726: 15726: 15726: template 15726: constexpr typename common_type<_Dur1, _Dur2>::type 15726: operator-(const time_point<_Clock, _Dur1>& __lhs, 15726: const time_point<_Clock, _Dur2>& __rhs) 15726: { return __lhs.time_since_epoch() - __rhs.time_since_epoch(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: constexpr bool 15726: operator==(const time_point<_Clock, _Dur1>& __lhs, 15726: const time_point<_Clock, _Dur2>& __rhs) 15726: { return __lhs.time_since_epoch() == __rhs.time_since_epoch(); } 15726: # 1165 "/usr/include/c++/13/bits/chrono.h" 3 15726: template 15726: constexpr bool 15726: operator!=(const time_point<_Clock, _Dur1>& __lhs, 15726: const time_point<_Clock, _Dur2>& __rhs) 15726: { return !(__lhs == __rhs); } 15726: 15726: 15726: template 15726: constexpr bool 15726: operator<(const time_point<_Clock, _Dur1>& __lhs, 15726: const time_point<_Clock, _Dur2>& __rhs) 15726: { return __lhs.time_since_epoch() < __rhs.time_since_epoch(); } 15726: 15726: template 15726: constexpr bool 15726: operator<=(const time_point<_Clock, _Dur1>& __lhs, 15726: const time_point<_Clock, _Dur2>& __rhs) 15726: { return !(__rhs < __lhs); } 15726: 15726: template 15726: constexpr bool 15726: operator>(const time_point<_Clock, _Dur1>& __lhs, 15726: const time_point<_Clock, _Dur2>& __rhs) 15726: { return __rhs < __lhs; } 15726: 15726: template 15726: constexpr bool 15726: operator>=(const time_point<_Clock, _Dur1>& __lhs, 15726: const time_point<_Clock, _Dur2>& __rhs) 15726: { return !(__lhs < __rhs); } 15726: # 1217 "/usr/include/c++/13/bits/chrono.h" 3 15726: inline namespace _V2 { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct system_clock 15726: { 15726: typedef chrono::nanoseconds duration; 15726: typedef duration::rep rep; 15726: typedef duration::period period; 15726: typedef chrono::time_point time_point; 15726: 15726: static_assert(system_clock::duration::min() 15726: < system_clock::duration::zero(), 15726: "a clock's minimum duration cannot be less than its epoch"); 15726: 15726: static constexpr bool is_steady = false; 15726: 15726: static time_point 15726: now() noexcept; 15726: 15726: 15726: 15726: static std::time_t 15726: to_time_t(const time_point& __t) noexcept 15726: { 15726: return std::time_t(duration_cast 15726: (__t.time_since_epoch()).count()); 15726: } 15726: 15726: 15726: static time_point 15726: from_time_t(std::time_t __t) noexcept 15726: { 15726: typedef chrono::time_point __from; 15726: return time_point_cast 15726: (__from(chrono::seconds(__t))); 15726: } 15726: }; 15726: # 1267 "/usr/include/c++/13/bits/chrono.h" 3 15726: struct steady_clock 15726: { 15726: typedef chrono::nanoseconds duration; 15726: typedef duration::rep rep; 15726: typedef duration::period period; 15726: typedef chrono::time_point time_point; 15726: 15726: static constexpr bool is_steady = true; 15726: 15726: static time_point 15726: now() noexcept; 15726: }; 15726: # 1289 "/usr/include/c++/13/bits/chrono.h" 3 15726: using high_resolution_clock = system_clock; 15726: 15726: } 15726: # 1315 "/usr/include/c++/13/bits/chrono.h" 3 15726: } 15726: 15726: 15726: 15726: 15726: inline namespace literals 15726: { 15726: # 1346 "/usr/include/c++/13/bits/chrono.h" 3 15726: inline namespace chrono_literals 15726: { 15726: 15726: 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wliteral-suffix" 15726: 15726: template 15726: constexpr _Dur __check_overflow() 15726: { 15726: using _Val = __parse_int::_Parse_int<_Digits...>; 15726: constexpr typename _Dur::rep __repval = _Val::value; 15726: static_assert(__repval >= 0 && __repval == _Val::value, 15726: "literal value cannot be represented by duration type"); 15726: return _Dur(__repval); 15726: } 15726: 15726: 15726: 15726: constexpr chrono::duration> 15726: operator""h(long double __hours) 15726: { return chrono::duration>{__hours}; } 15726: 15726: 15726: template 15726: constexpr chrono::hours 15726: operator""h() 15726: { return __check_overflow(); } 15726: 15726: 15726: constexpr chrono::duration> 15726: operator""min(long double __mins) 15726: { return chrono::duration>{__mins}; } 15726: 15726: 15726: template 15726: constexpr chrono::minutes 15726: operator""min() 15726: { return __check_overflow(); } 15726: 15726: 15726: constexpr chrono::duration 15726: operator""s(long double __secs) 15726: { return chrono::duration{__secs}; } 15726: 15726: 15726: template 15726: constexpr chrono::seconds 15726: operator""s() 15726: { return __check_overflow(); } 15726: 15726: 15726: constexpr chrono::duration 15726: operator""ms(long double __msecs) 15726: { return chrono::duration{__msecs}; } 15726: 15726: 15726: template 15726: constexpr chrono::milliseconds 15726: operator""ms() 15726: { return __check_overflow(); } 15726: 15726: 15726: constexpr chrono::duration 15726: operator""us(long double __usecs) 15726: { return chrono::duration{__usecs}; } 15726: 15726: 15726: template 15726: constexpr chrono::microseconds 15726: operator""us() 15726: { return __check_overflow(); } 15726: 15726: 15726: constexpr chrono::duration 15726: operator""ns(long double __nsecs) 15726: { return chrono::duration{__nsecs}; } 15726: 15726: 15726: template 15726: constexpr chrono::nanoseconds 15726: operator""ns() 15726: { return __check_overflow(); } 15726: 15726: #pragma GCC diagnostic pop 15726: 15726: } 15726: } 15726: 15726: namespace chrono 15726: { 15726: using namespace literals::chrono_literals; 15726: } 15726: 15726: 15726: 15726: namespace filesystem 15726: { 15726: struct __file_clock 15726: { 15726: using duration = chrono::nanoseconds; 15726: using rep = duration::rep; 15726: using period = duration::period; 15726: using time_point = chrono::time_point<__file_clock>; 15726: static constexpr bool is_steady = false; 15726: 15726: static time_point 15726: now() noexcept 15726: { return _S_from_sys(chrono::system_clock::now()); } 15726: # 1472 "/usr/include/c++/13/bits/chrono.h" 3 15726: private: 15726: using __sys_clock = chrono::system_clock; 15726: 15726: 15726: 15726: 15726: static constexpr chrono::seconds _S_epoch_diff{6437664000}; 15726: 15726: protected: 15726: 15726: template 15726: static 15726: chrono::time_point<__file_clock, common_type_t<_Dur, chrono::seconds>> 15726: _S_from_sys(const chrono::time_point<__sys_clock, _Dur>& __t) noexcept 15726: { 15726: using _CDur = common_type_t<_Dur, chrono::seconds>; 15726: using __file_time = chrono::time_point<__file_clock, _CDur>; 15726: return __file_time{__t.time_since_epoch()} - _S_epoch_diff; 15726: } 15726: 15726: 15726: template 15726: static 15726: chrono::time_point<__sys_clock, common_type_t<_Dur, chrono::seconds>> 15726: _S_to_sys(const chrono::time_point<__file_clock, _Dur>& __t) noexcept 15726: { 15726: using _CDur = common_type_t<_Dur, chrono::seconds>; 15726: using __sys_time = chrono::time_point<__sys_clock, _CDur>; 15726: return __sys_time{__t.time_since_epoch()} + _S_epoch_diff; 15726: } 15726: }; 15726: } 15726: 15726: 15726: 15726: } 15726: # 37 "/usr/include/c++/13/bits/this_thread_sleep.h" 2 3 15726: 15726: 15726: # 1 "/usr/include/c++/13/cerrno" 1 3 15726: # 39 "/usr/include/c++/13/cerrno" 3 15726: 15726: # 40 "/usr/include/c++/13/cerrno" 3 15726: # 40 "/usr/include/c++/13/bits/this_thread_sleep.h" 2 3 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 56 "/usr/include/c++/13/bits/this_thread_sleep.h" 3 15726: namespace this_thread 15726: { 15726: # 66 "/usr/include/c++/13/bits/this_thread_sleep.h" 3 15726: template 15726: inline void 15726: sleep_for(const chrono::duration<_Rep, _Period>& __rtime) 15726: { 15726: if (__rtime <= __rtime.zero()) 15726: return; 15726: auto __s = chrono::duration_cast(__rtime); 15726: auto __ns = chrono::duration_cast(__rtime - __s); 15726: 15726: struct ::timespec __ts = 15726: { 15726: static_cast(__s.count()), 15726: static_cast(__ns.count()) 15726: }; 15726: while (::nanosleep(&__ts, &__ts) == -1 && (*__errno_location ()) == 4) 15726: { } 15726: 15726: 15726: 15726: } 15726: 15726: 15726: template 15726: inline void 15726: sleep_until(const chrono::time_point<_Clock, _Duration>& __atime) 15726: { 15726: 15726: 15726: 15726: auto __now = _Clock::now(); 15726: if (_Clock::is_steady) 15726: { 15726: if (__now < __atime) 15726: sleep_for(__atime - __now); 15726: return; 15726: } 15726: while (__now < __atime) 15726: { 15726: sleep_for(__atime - __now); 15726: __now = _Clock::now(); 15726: } 15726: } 15726: 15726: } 15726: 15726: 15726: 15726: 15726: } 15726: # 47 "/usr/include/c++/13/thread" 2 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 70 "/usr/include/c++/13/thread" 3 15726: inline bool 15726: operator!=(thread::id __x, thread::id __y) noexcept 15726: { return !(__x == __y); } 15726: 15726: inline bool 15726: operator<(thread::id __x, thread::id __y) noexcept 15726: { 15726: 15726: 15726: return __x._M_thread < __y._M_thread; 15726: } 15726: 15726: inline bool 15726: operator<=(thread::id __x, thread::id __y) noexcept 15726: { return !(__y < __x); } 15726: 15726: inline bool 15726: operator>(thread::id __x, thread::id __y) noexcept 15726: { return __y < __x; } 15726: 15726: inline bool 15726: operator>=(thread::id __x, thread::id __y) noexcept 15726: { return !(__x < __y); } 15726: 15726: 15726: template 15726: inline basic_ostream<_CharT, _Traits>& 15726: operator<<(basic_ostream<_CharT, _Traits>& __out, thread::id __id) 15726: { 15726: if (__id == thread::id()) 15726: return __out << "thread::id of a non-executing thread"; 15726: else 15726: return __out << __id._M_thread; 15726: } 15726: # 283 "/usr/include/c++/13/thread" 3 15726: 15726: } 15726: # 15 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/port_defs.h" 1 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/port_defs.h" 15726: 15726: 15726: 15726: 15726: 15726: # 13 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/port_defs.h" 15726: namespace rocksdb { 15726: 15726: namespace port { 15726: class CondVar; 15726: } 15726: 15726: enum class CpuPriority { 15726: kIdle = 0, 15726: kLow = 1, 15726: kNormal = 2, 15726: kHigh = 3, 15726: }; 15726: 15726: } 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 2 15726: # 86 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 15726: namespace rocksdb { 15726: 15726: extern const bool kDefaultToAdaptiveMutex; 15726: 15726: namespace port { 15726: constexpr bool kLittleEndian = ( 15726: # 91 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 3 4 15726: 1234 15726: # 91 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 15726: == 15726: # 91 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 3 4 15726: 1234 15726: # 91 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 15726: ); 15726: 15726: 15726: class CondVar; 15726: 15726: class Mutex { 15726: public: 15726: static const char* kName() { return "pthread_mutex_t"; } 15726: 15726: explicit Mutex(bool adaptive = kDefaultToAdaptiveMutex); 15726: 15726: Mutex(const Mutex&) = delete; 15726: void operator=(const Mutex&) = delete; 15726: 15726: ~Mutex(); 15726: 15726: void Lock(); 15726: void Unlock(); 15726: 15726: bool TryLock(); 15726: 15726: 15726: 15726: void AssertHeld() const; 15726: 15726: 15726: inline void lock() { Lock(); } 15726: inline void unlock() { Unlock(); } 15726: inline bool try_lock() { return TryLock(); } 15726: 15726: private: 15726: friend class CondVar; 15726: pthread_mutex_t mu_; 15726: 15726: bool locked_ = false; 15726: 15726: }; 15726: 15726: class RWMutex { 15726: public: 15726: RWMutex(); 15726: 15726: RWMutex(const RWMutex&) = delete; 15726: void operator=(const RWMutex&) = delete; 15726: 15726: ~RWMutex(); 15726: 15726: void ReadLock(); 15726: void WriteLock(); 15726: void ReadUnlock(); 15726: void WriteUnlock(); 15726: void AssertHeld() const {} 15726: 15726: private: 15726: pthread_rwlock_t mu_; 15726: }; 15726: 15726: class CondVar { 15726: public: 15726: explicit CondVar(Mutex* mu); 15726: ~CondVar(); 15726: 15726: Mutex* GetMutex() const { return mu_; } 15726: 15726: void Wait(); 15726: 15726: bool TimedWait(uint64_t abs_time_us); 15726: void Signal(); 15726: void SignalAll(); 15726: 15726: private: 15726: pthread_cond_t cv_; 15726: Mutex* mu_; 15726: }; 15726: 15726: using Thread = std::thread; 15726: 15726: static inline void AsmVolatilePause() { 15726: # 179 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 15726: } 15726: 15726: 15726: int PhysicalCoreID(); 15726: 15726: using OnceType = pthread_once_t; 15726: 15726: void InitOnce(OnceType* once, void (*initializer)()); 15726: # 211 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 15726: static_assert((64U & (64U - 1)) == 0, 15726: "Cache line size must be a power of 2 number of bytes"); 15726: 15726: void* cacheline_aligned_alloc(size_t size); 15726: 15726: void cacheline_aligned_free(void* memblock); 15726: # 229 "/build/reproducible-path/rocksdb-9.3.1/port/port_posix.h" 15726: void Crash(const std::string& srcfile, int srcline); 15726: 15726: int GetMaxOpenFiles(); 15726: 15726: extern const size_t kPageSize; 15726: 15726: using ThreadId = pid_t; 15726: 15726: void SetCpuPriority(ThreadId id, CpuPriority priority); 15726: 15726: int64_t GetProcessID(); 15726: 15726: 15726: 15726: bool GenerateRfcUuid(std::string* output); 15726: 15726: } 15726: } 15726: # 19 "/build/reproducible-path/rocksdb-9.3.1/port/port.h" 2 15726: # 23 "/build/reproducible-path/rocksdb-9.3.1/util/coding.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/coding_lean.h" 1 15726: # 12 "/build/reproducible-path/rocksdb-9.3.1/util/coding_lean.h" 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/cstring" 1 3 15726: # 39 "/usr/include/c++/13/cstring" 3 15726: 15726: # 40 "/usr/include/c++/13/cstring" 3 15726: # 16 "/build/reproducible-path/rocksdb-9.3.1/util/coding_lean.h" 2 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: inline void EncodeFixed16(char* buf, uint16_t value) { 15726: if (port::kLittleEndian) { 15726: memcpy(buf, &value, sizeof(value)); 15726: } else { 15726: buf[0] = value & 0xff; 15726: buf[1] = (value >> 8) & 0xff; 15726: } 15726: } 15726: 15726: inline void EncodeFixed32(char* buf, uint32_t value) { 15726: if (port::kLittleEndian) { 15726: memcpy(buf, &value, sizeof(value)); 15726: } else { 15726: buf[0] = value & 0xff; 15726: buf[1] = (value >> 8) & 0xff; 15726: buf[2] = (value >> 16) & 0xff; 15726: buf[3] = (value >> 24) & 0xff; 15726: } 15726: } 15726: 15726: inline void EncodeFixed64(char* buf, uint64_t value) { 15726: if (port::kLittleEndian) { 15726: memcpy(buf, &value, sizeof(value)); 15726: } else { 15726: buf[0] = value & 0xff; 15726: buf[1] = (value >> 8) & 0xff; 15726: buf[2] = (value >> 16) & 0xff; 15726: buf[3] = (value >> 24) & 0xff; 15726: buf[4] = (value >> 32) & 0xff; 15726: buf[5] = (value >> 40) & 0xff; 15726: buf[6] = (value >> 48) & 0xff; 15726: buf[7] = (value >> 56) & 0xff; 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: inline uint16_t DecodeFixed16(const char* ptr) { 15726: if (port::kLittleEndian) { 15726: 15726: uint16_t result; 15726: memcpy(&result, ptr, sizeof(result)); 15726: return result; 15726: } else { 15726: return ((static_cast(static_cast(ptr[0]))) | 15726: (static_cast(static_cast(ptr[1])) << 8)); 15726: } 15726: } 15726: 15726: inline uint32_t DecodeFixed32(const char* ptr) { 15726: if (port::kLittleEndian) { 15726: 15726: uint32_t result; 15726: memcpy(&result, ptr, sizeof(result)); 15726: return result; 15726: } else { 15726: return ((static_cast(static_cast(ptr[0]))) | 15726: (static_cast(static_cast(ptr[1])) << 8) | 15726: (static_cast(static_cast(ptr[2])) << 16) | 15726: (static_cast(static_cast(ptr[3])) << 24)); 15726: } 15726: } 15726: 15726: inline uint64_t DecodeFixed64(const char* ptr) { 15726: if (port::kLittleEndian) { 15726: 15726: uint64_t result; 15726: memcpy(&result, ptr, sizeof(result)); 15726: return result; 15726: } else { 15726: uint64_t lo = DecodeFixed32(ptr); 15726: uint64_t hi = DecodeFixed32(ptr + 4); 15726: return (hi << 32) | lo; 15726: } 15726: } 15726: 15726: } 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/util/coding.h" 2 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: 15726: const uint32_t kMaxVarint64Length = 10; 15726: 15726: 15726: void PutFixed16(std::string* dst, uint16_t value); 15726: void PutFixed32(std::string* dst, uint32_t value); 15726: void PutFixed64(std::string* dst, uint64_t value); 15726: void PutVarint32(std::string* dst, uint32_t value); 15726: void PutVarint32Varint32(std::string* dst, uint32_t value1, uint32_t value2); 15726: void PutVarint32Varint32Varint32(std::string* dst, uint32_t value1, 15726: uint32_t value2, uint32_t value3); 15726: void PutVarint64(std::string* dst, uint64_t value); 15726: void PutVarint64Varint64(std::string* dst, uint64_t value1, uint64_t value2); 15726: void PutVarint32Varint64(std::string* dst, uint32_t value1, uint64_t value2); 15726: void PutVarint32Varint32Varint64(std::string* dst, uint32_t value1, 15726: uint32_t value2, uint64_t value3); 15726: void PutLengthPrefixedSlice(std::string* dst, const Slice& value); 15726: void PutLengthPrefixedSliceParts(std::string* dst, 15726: const SliceParts& slice_parts); 15726: void PutLengthPrefixedSlicePartsWithPadding(std::string* dst, 15726: const SliceParts& slice_parts, 15726: size_t pad_sz); 15726: 15726: 15726: 15726: bool GetFixed64(Slice* input, uint64_t* value); 15726: bool GetFixed32(Slice* input, uint32_t* value); 15726: bool GetFixed16(Slice* input, uint16_t* value); 15726: bool GetVarint32(Slice* input, uint32_t* value); 15726: bool GetVarint64(Slice* input, uint64_t* value); 15726: bool GetVarsignedint64(Slice* input, int64_t* value); 15726: bool GetLengthPrefixedSlice(Slice* input, Slice* result); 15726: 15726: Slice GetLengthPrefixedSlice(const char* data); 15726: 15726: Slice GetSliceUntil(Slice* slice, char delimiter); 15726: 15726: 15726: 15726: constexpr inline uint64_t i64ToZigzag(const int64_t l) { 15726: return (static_cast(l) << 1) ^ static_cast(l >> 63); 15726: } 15726: inline int64_t zigzagToI64(uint64_t n) { 15726: return (n >> 1) ^ -static_cast(n & 1); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: const char* GetVarint32Ptr(const char* p, const char* limit, uint32_t* v); 15726: const char* GetVarint64Ptr(const char* p, const char* limit, uint64_t* v); 15726: inline const char* GetVarsignedint64Ptr(const char* p, const char* limit, 15726: int64_t* value) { 15726: uint64_t u = 0; 15726: const char* ret = GetVarint64Ptr(p, limit, &u); 15726: *value = zigzagToI64(u); 15726: return ret; 15726: } 15726: 15726: 15726: int VarintLength(uint64_t v); 15726: 15726: 15726: 15726: 15726: char* EncodeVarint32(char* dst, uint32_t value); 15726: char* EncodeVarint64(char* dst, uint64_t value); 15726: 15726: 15726: const char* GetVarint32PtrFallback(const char* p, const char* limit, 15726: uint32_t* value); 15726: inline const char* GetVarint32Ptr(const char* p, const char* limit, 15726: uint32_t* value) { 15726: if (p < limit) { 15726: uint32_t result = *(reinterpret_cast(p)); 15726: if ((result & 128) == 0) { 15726: *value = result; 15726: return p + 1; 15726: } 15726: } 15726: return GetVarint32PtrFallback(p, limit, value); 15726: } 15726: 15726: 15726: inline void PutFixed16(std::string* dst, uint16_t value) { 15726: if (port::kLittleEndian) { 15726: dst->append(const_cast(reinterpret_cast(&value)), 15726: sizeof(value)); 15726: } else { 15726: char buf[sizeof(value)]; 15726: EncodeFixed16(buf, value); 15726: dst->append(buf, sizeof(buf)); 15726: } 15726: } 15726: 15726: inline void PutFixed32(std::string* dst, uint32_t value) { 15726: if (port::kLittleEndian) { 15726: dst->append(const_cast(reinterpret_cast(&value)), 15726: sizeof(value)); 15726: } else { 15726: char buf[sizeof(value)]; 15726: EncodeFixed32(buf, value); 15726: dst->append(buf, sizeof(buf)); 15726: } 15726: } 15726: 15726: inline void PutFixed64(std::string* dst, uint64_t value) { 15726: if (port::kLittleEndian) { 15726: dst->append(const_cast(reinterpret_cast(&value)), 15726: sizeof(value)); 15726: } else { 15726: char buf[sizeof(value)]; 15726: EncodeFixed64(buf, value); 15726: dst->append(buf, sizeof(buf)); 15726: } 15726: } 15726: 15726: inline void PutVarint32(std::string* dst, uint32_t v) { 15726: char buf[5]; 15726: char* ptr = EncodeVarint32(buf, v); 15726: dst->append(buf, static_cast(ptr - buf)); 15726: } 15726: 15726: inline void PutVarint32Varint32(std::string* dst, uint32_t v1, uint32_t v2) { 15726: char buf[10]; 15726: char* ptr = EncodeVarint32(buf, v1); 15726: ptr = EncodeVarint32(ptr, v2); 15726: dst->append(buf, static_cast(ptr - buf)); 15726: } 15726: 15726: inline void PutVarint32Varint32Varint32(std::string* dst, uint32_t v1, 15726: uint32_t v2, uint32_t v3) { 15726: char buf[15]; 15726: char* ptr = EncodeVarint32(buf, v1); 15726: ptr = EncodeVarint32(ptr, v2); 15726: ptr = EncodeVarint32(ptr, v3); 15726: dst->append(buf, static_cast(ptr - buf)); 15726: } 15726: 15726: inline char* EncodeVarint64(char* dst, uint64_t v) { 15726: static const unsigned int B = 128; 15726: unsigned char* ptr = reinterpret_cast(dst); 15726: while (v >= B) { 15726: *(ptr++) = (v & (B - 1)) | B; 15726: v >>= 7; 15726: } 15726: *(ptr++) = static_cast(v); 15726: return reinterpret_cast(ptr); 15726: } 15726: 15726: inline void PutVarint64(std::string* dst, uint64_t v) { 15726: char buf[kMaxVarint64Length]; 15726: char* ptr = EncodeVarint64(buf, v); 15726: dst->append(buf, static_cast(ptr - buf)); 15726: } 15726: 15726: inline void PutVarsignedint64(std::string* dst, int64_t v) { 15726: char buf[kMaxVarint64Length]; 15726: 15726: char* ptr = EncodeVarint64(buf, i64ToZigzag(v)); 15726: dst->append(buf, static_cast(ptr - buf)); 15726: } 15726: 15726: inline void PutVarint64Varint64(std::string* dst, uint64_t v1, uint64_t v2) { 15726: char buf[20]; 15726: char* ptr = EncodeVarint64(buf, v1); 15726: ptr = EncodeVarint64(ptr, v2); 15726: dst->append(buf, static_cast(ptr - buf)); 15726: } 15726: 15726: inline void PutVarint32Varint64(std::string* dst, uint32_t v1, uint64_t v2) { 15726: char buf[15]; 15726: char* ptr = EncodeVarint32(buf, v1); 15726: ptr = EncodeVarint64(ptr, v2); 15726: dst->append(buf, static_cast(ptr - buf)); 15726: } 15726: 15726: inline void PutVarint32Varint32Varint64(std::string* dst, uint32_t v1, 15726: uint32_t v2, uint64_t v3) { 15726: char buf[20]; 15726: char* ptr = EncodeVarint32(buf, v1); 15726: ptr = EncodeVarint32(ptr, v2); 15726: ptr = EncodeVarint64(ptr, v3); 15726: dst->append(buf, static_cast(ptr - buf)); 15726: } 15726: 15726: inline void PutLengthPrefixedSlice(std::string* dst, const Slice& value) { 15726: PutVarint32(dst, static_cast(value.size())); 15726: dst->append(value.data(), value.size()); 15726: } 15726: 15726: inline void PutLengthPrefixedSliceParts(std::string* dst, size_t total_bytes, 15726: const SliceParts& slice_parts) { 15726: for (int i = 0; i < slice_parts.num_parts; ++i) { 15726: total_bytes += slice_parts.parts[i].size(); 15726: } 15726: PutVarint32(dst, static_cast(total_bytes)); 15726: for (int i = 0; i < slice_parts.num_parts; ++i) { 15726: dst->append(slice_parts.parts[i].data(), slice_parts.parts[i].size()); 15726: } 15726: } 15726: 15726: inline void PutLengthPrefixedSliceParts(std::string* dst, 15726: const SliceParts& slice_parts) { 15726: PutLengthPrefixedSliceParts(dst, 0, slice_parts); 15726: } 15726: 15726: inline void PutLengthPrefixedSlicePartsWithPadding( 15726: std::string* dst, const SliceParts& slice_parts, size_t pad_sz) { 15726: PutLengthPrefixedSliceParts(dst, pad_sz, slice_parts); 15726: dst->append(pad_sz, '\0'); 15726: } 15726: 15726: inline int VarintLength(uint64_t v) { 15726: int len = 1; 15726: while (v >= 128) { 15726: v >>= 7; 15726: len++; 15726: } 15726: return len; 15726: } 15726: 15726: inline bool GetFixed64(Slice* input, uint64_t* value) { 15726: if (input->size() < sizeof(uint64_t)) { 15726: return false; 15726: } 15726: *value = DecodeFixed64(input->data()); 15726: input->remove_prefix(sizeof(uint64_t)); 15726: return true; 15726: } 15726: 15726: inline bool GetFixed32(Slice* input, uint32_t* value) { 15726: if (input->size() < sizeof(uint32_t)) { 15726: return false; 15726: } 15726: *value = DecodeFixed32(input->data()); 15726: input->remove_prefix(sizeof(uint32_t)); 15726: return true; 15726: } 15726: 15726: inline bool GetFixed16(Slice* input, uint16_t* value) { 15726: if (input->size() < sizeof(uint16_t)) { 15726: return false; 15726: } 15726: *value = DecodeFixed16(input->data()); 15726: input->remove_prefix(sizeof(uint16_t)); 15726: return true; 15726: } 15726: 15726: inline bool GetVarint32(Slice* input, uint32_t* value) { 15726: const char* p = input->data(); 15726: const char* limit = p + input->size(); 15726: const char* q = GetVarint32Ptr(p, limit, value); 15726: if (q == nullptr) { 15726: return false; 15726: } else { 15726: *input = Slice(q, static_cast(limit - q)); 15726: return true; 15726: } 15726: } 15726: 15726: inline bool GetVarint64(Slice* input, uint64_t* value) { 15726: const char* p = input->data(); 15726: const char* limit = p + input->size(); 15726: const char* q = GetVarint64Ptr(p, limit, value); 15726: if (q == nullptr) { 15726: return false; 15726: } else { 15726: *input = Slice(q, static_cast(limit - q)); 15726: return true; 15726: } 15726: } 15726: 15726: inline bool GetVarsignedint64(Slice* input, int64_t* value) { 15726: const char* p = input->data(); 15726: const char* limit = p + input->size(); 15726: const char* q = GetVarsignedint64Ptr(p, limit, value); 15726: if (q == nullptr) { 15726: return false; 15726: } else { 15726: *input = Slice(q, static_cast(limit - q)); 15726: return true; 15726: } 15726: } 15726: 15726: inline bool GetLengthPrefixedSlice(Slice* input, Slice* result) { 15726: uint32_t len = 0; 15726: if (GetVarint32(input, &len) && input->size() >= len) { 15726: *result = Slice(input->data(), len); 15726: input->remove_prefix(len); 15726: return true; 15726: } else { 15726: return false; 15726: } 15726: } 15726: 15726: inline Slice GetLengthPrefixedSlice(const char* data) { 15726: uint32_t len = 0; 15726: 15726: 15726: auto p = GetVarint32Ptr(data, data + 5 , &len); 15726: return Slice(p, len); 15726: } 15726: 15726: inline Slice GetSliceUntil(Slice* slice, char delimiter) { 15726: uint32_t len = 0; 15726: for (len = 0; len < slice->size() && slice->data()[len] != delimiter; ++len) { 15726: 15726: } 15726: 15726: Slice ret(slice->data(), len); 15726: slice->remove_prefix(len + ((len < slice->size()) ? 1 : 0)); 15726: return ret; 15726: } 15726: 15726: template 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline void 15726: PutUnaligned(T* memory, const T& value) { 15726: 15726: 15726: 15726: 15726: *memory = value; 15726: 15726: } 15726: 15726: template 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline void 15726: GetUnaligned(const T* memory, T* value) { 15726: 15726: 15726: 15726: 15726: *value = *memory; 15726: 15726: } 15726: 15726: } 15726: # 23 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/user_comparator_wrapper.h" 1 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/util/user_comparator_wrapper.h" 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_context_imp.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_step_timer.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_level_imp.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/perf_level.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: 15726: enum PerfLevel : unsigned char { 15726: kUninitialized = 0, 15726: kDisable = 1, 15726: kEnableCount = 2, 15726: kEnableWait = 3, 15726: 15726: 15726: kEnableTimeExceptForMutex = 4, 15726: 15726: 15726: 15726: kEnableTimeAndCPUTimeExceptForMutex = 5, 15726: kEnableTime = 6, 15726: kOutOfBounds = 7 15726: }; 15726: 15726: 15726: void SetPerfLevel(PerfLevel level); 15726: 15726: 15726: PerfLevel GetPerfLevel(); 15726: 15726: } 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_level_imp.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: extern thread_local PerfLevel perf_level; 15726: 15726: } 15726: # 8 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_step_timer.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/monitoring/statistics_impl.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/map" 1 3 15726: # 58 "/usr/include/c++/13/map" 3 15726: 15726: # 59 "/usr/include/c++/13/map" 3 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/stl_tree.h" 1 3 15726: # 61 "/usr/include/c++/13/bits/stl_tree.h" 3 15726: 15726: # 62 "/usr/include/c++/13/bits/stl_tree.h" 3 15726: # 75 "/usr/include/c++/13/bits/stl_tree.h" 3 15726: 15726: # 75 "/usr/include/c++/13/bits/stl_tree.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 99 "/usr/include/c++/13/bits/stl_tree.h" 3 15726: enum _Rb_tree_color { _S_red = false, _S_black = true }; 15726: 15726: struct _Rb_tree_node_base 15726: { 15726: typedef _Rb_tree_node_base* _Base_ptr; 15726: typedef const _Rb_tree_node_base* _Const_Base_ptr; 15726: 15726: _Rb_tree_color _M_color; 15726: _Base_ptr _M_parent; 15726: _Base_ptr _M_left; 15726: _Base_ptr _M_right; 15726: 15726: static _Base_ptr 15726: _S_minimum(_Base_ptr __x) noexcept 15726: { 15726: while (__x->_M_left != 0) __x = __x->_M_left; 15726: return __x; 15726: } 15726: 15726: static _Const_Base_ptr 15726: _S_minimum(_Const_Base_ptr __x) noexcept 15726: { 15726: while (__x->_M_left != 0) __x = __x->_M_left; 15726: return __x; 15726: } 15726: 15726: static _Base_ptr 15726: _S_maximum(_Base_ptr __x) noexcept 15726: { 15726: while (__x->_M_right != 0) __x = __x->_M_right; 15726: return __x; 15726: } 15726: 15726: static _Const_Base_ptr 15726: _S_maximum(_Const_Base_ptr __x) noexcept 15726: { 15726: while (__x->_M_right != 0) __x = __x->_M_right; 15726: return __x; 15726: } 15726: }; 15726: 15726: 15726: template 15726: struct _Rb_tree_key_compare 15726: { 15726: _Key_compare _M_key_compare; 15726: 15726: _Rb_tree_key_compare() 15726: noexcept(is_nothrow_default_constructible<_Key_compare>::value) 15726: 15726: : _M_key_compare() 15726: { } 15726: 15726: _Rb_tree_key_compare(const _Key_compare& __comp) 15726: : _M_key_compare(__comp) 15726: { } 15726: 15726: 15726: 15726: _Rb_tree_key_compare(const _Rb_tree_key_compare&) = default; 15726: 15726: _Rb_tree_key_compare(_Rb_tree_key_compare&& __x) 15726: noexcept(is_nothrow_copy_constructible<_Key_compare>::value) 15726: : _M_key_compare(__x._M_key_compare) 15726: { } 15726: 15726: }; 15726: 15726: 15726: struct _Rb_tree_header 15726: { 15726: _Rb_tree_node_base _M_header; 15726: size_t _M_node_count; 15726: 15726: _Rb_tree_header() noexcept 15726: { 15726: _M_header._M_color = _S_red; 15726: _M_reset(); 15726: } 15726: 15726: 15726: _Rb_tree_header(_Rb_tree_header&& __x) noexcept 15726: { 15726: if (__x._M_header._M_parent != nullptr) 15726: _M_move_data(__x); 15726: else 15726: { 15726: _M_header._M_color = _S_red; 15726: _M_reset(); 15726: } 15726: } 15726: 15726: 15726: void 15726: _M_move_data(_Rb_tree_header& __from) 15726: { 15726: _M_header._M_color = __from._M_header._M_color; 15726: _M_header._M_parent = __from._M_header._M_parent; 15726: _M_header._M_left = __from._M_header._M_left; 15726: _M_header._M_right = __from._M_header._M_right; 15726: _M_header._M_parent->_M_parent = &_M_header; 15726: _M_node_count = __from._M_node_count; 15726: 15726: __from._M_reset(); 15726: } 15726: 15726: void 15726: _M_reset() 15726: { 15726: _M_header._M_parent = 0; 15726: _M_header._M_left = &_M_header; 15726: _M_header._M_right = &_M_header; 15726: _M_node_count = 0; 15726: } 15726: }; 15726: 15726: template 15726: struct _Rb_tree_node : public _Rb_tree_node_base 15726: { 15726: typedef _Rb_tree_node<_Val>* _Link_type; 15726: # 231 "/usr/include/c++/13/bits/stl_tree.h" 3 15726: __gnu_cxx::__aligned_membuf<_Val> _M_storage; 15726: 15726: _Val* 15726: _M_valptr() 15726: { return _M_storage._M_ptr(); } 15726: 15726: const _Val* 15726: _M_valptr() const 15726: { return _M_storage._M_ptr(); } 15726: 15726: }; 15726: 15726: __attribute__ ((__pure__)) _Rb_tree_node_base* 15726: _Rb_tree_increment(_Rb_tree_node_base* __x) throw (); 15726: 15726: __attribute__ ((__pure__)) const _Rb_tree_node_base* 15726: _Rb_tree_increment(const _Rb_tree_node_base* __x) throw (); 15726: 15726: __attribute__ ((__pure__)) _Rb_tree_node_base* 15726: _Rb_tree_decrement(_Rb_tree_node_base* __x) throw (); 15726: 15726: __attribute__ ((__pure__)) const _Rb_tree_node_base* 15726: _Rb_tree_decrement(const _Rb_tree_node_base* __x) throw (); 15726: 15726: template 15726: struct _Rb_tree_iterator 15726: { 15726: typedef _Tp value_type; 15726: typedef _Tp& reference; 15726: typedef _Tp* pointer; 15726: 15726: typedef bidirectional_iterator_tag iterator_category; 15726: typedef ptrdiff_t difference_type; 15726: 15726: typedef _Rb_tree_iterator<_Tp> _Self; 15726: typedef _Rb_tree_node_base::_Base_ptr _Base_ptr; 15726: typedef _Rb_tree_node<_Tp>* _Link_type; 15726: 15726: _Rb_tree_iterator() noexcept 15726: : _M_node() { } 15726: 15726: explicit 15726: _Rb_tree_iterator(_Base_ptr __x) noexcept 15726: : _M_node(__x) { } 15726: 15726: reference 15726: operator*() const noexcept 15726: { return *static_cast<_Link_type>(_M_node)->_M_valptr(); } 15726: 15726: pointer 15726: operator->() const noexcept 15726: { return static_cast<_Link_type> (_M_node)->_M_valptr(); } 15726: 15726: _Self& 15726: operator++() noexcept 15726: { 15726: _M_node = _Rb_tree_increment(_M_node); 15726: return *this; 15726: } 15726: 15726: _Self 15726: operator++(int) noexcept 15726: { 15726: _Self __tmp = *this; 15726: _M_node = _Rb_tree_increment(_M_node); 15726: return __tmp; 15726: } 15726: 15726: _Self& 15726: operator--() noexcept 15726: { 15726: _M_node = _Rb_tree_decrement(_M_node); 15726: return *this; 15726: } 15726: 15726: _Self 15726: operator--(int) noexcept 15726: { 15726: _Self __tmp = *this; 15726: _M_node = _Rb_tree_decrement(_M_node); 15726: return __tmp; 15726: } 15726: 15726: friend bool 15726: operator==(const _Self& __x, const _Self& __y) noexcept 15726: { return __x._M_node == __y._M_node; } 15726: 15726: 15726: friend bool 15726: operator!=(const _Self& __x, const _Self& __y) noexcept 15726: { return __x._M_node != __y._M_node; } 15726: 15726: 15726: _Base_ptr _M_node; 15726: }; 15726: 15726: template 15726: struct _Rb_tree_const_iterator 15726: { 15726: typedef _Tp value_type; 15726: typedef const _Tp& reference; 15726: typedef const _Tp* pointer; 15726: 15726: typedef _Rb_tree_iterator<_Tp> iterator; 15726: 15726: typedef bidirectional_iterator_tag iterator_category; 15726: typedef ptrdiff_t difference_type; 15726: 15726: typedef _Rb_tree_const_iterator<_Tp> _Self; 15726: typedef _Rb_tree_node_base::_Const_Base_ptr _Base_ptr; 15726: typedef const _Rb_tree_node<_Tp>* _Link_type; 15726: 15726: _Rb_tree_const_iterator() noexcept 15726: : _M_node() { } 15726: 15726: explicit 15726: _Rb_tree_const_iterator(_Base_ptr __x) noexcept 15726: : _M_node(__x) { } 15726: 15726: _Rb_tree_const_iterator(const iterator& __it) noexcept 15726: : _M_node(__it._M_node) { } 15726: 15726: iterator 15726: _M_const_cast() const noexcept 15726: { return iterator(const_cast(_M_node)); } 15726: 15726: reference 15726: operator*() const noexcept 15726: { return *static_cast<_Link_type>(_M_node)->_M_valptr(); } 15726: 15726: pointer 15726: operator->() const noexcept 15726: { return static_cast<_Link_type>(_M_node)->_M_valptr(); } 15726: 15726: _Self& 15726: operator++() noexcept 15726: { 15726: _M_node = _Rb_tree_increment(_M_node); 15726: return *this; 15726: } 15726: 15726: _Self 15726: operator++(int) noexcept 15726: { 15726: _Self __tmp = *this; 15726: _M_node = _Rb_tree_increment(_M_node); 15726: return __tmp; 15726: } 15726: 15726: _Self& 15726: operator--() noexcept 15726: { 15726: _M_node = _Rb_tree_decrement(_M_node); 15726: return *this; 15726: } 15726: 15726: _Self 15726: operator--(int) noexcept 15726: { 15726: _Self __tmp = *this; 15726: _M_node = _Rb_tree_decrement(_M_node); 15726: return __tmp; 15726: } 15726: 15726: friend bool 15726: operator==(const _Self& __x, const _Self& __y) noexcept 15726: { return __x._M_node == __y._M_node; } 15726: 15726: 15726: friend bool 15726: operator!=(const _Self& __x, const _Self& __y) noexcept 15726: { return __x._M_node != __y._M_node; } 15726: 15726: 15726: _Base_ptr _M_node; 15726: }; 15726: 15726: __attribute__((__nonnull__)) 15726: void 15726: _Rb_tree_insert_and_rebalance(const bool __insert_left, 15726: _Rb_tree_node_base* __x, 15726: _Rb_tree_node_base* __p, 15726: _Rb_tree_node_base& __header) throw (); 15726: 15726: __attribute__((__nonnull__,__returns_nonnull__)) 15726: _Rb_tree_node_base* 15726: _Rb_tree_rebalance_for_erase(_Rb_tree_node_base* const __z, 15726: _Rb_tree_node_base& __header) throw (); 15726: 15726: 15726: template 15726: struct _Rb_tree_merge_helper { }; 15726: 15726: 15726: template > 15726: class _Rb_tree 15726: { 15726: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 15726: rebind<_Rb_tree_node<_Val> >::other _Node_allocator; 15726: 15726: typedef __gnu_cxx::__alloc_traits<_Node_allocator> _Alloc_traits; 15726: 15726: protected: 15726: typedef _Rb_tree_node_base* _Base_ptr; 15726: typedef const _Rb_tree_node_base* _Const_Base_ptr; 15726: typedef _Rb_tree_node<_Val>* _Link_type; 15726: typedef const _Rb_tree_node<_Val>* _Const_Link_type; 15726: 15726: private: 15726: 15726: 15726: struct _Reuse_or_alloc_node 15726: { 15726: _Reuse_or_alloc_node(_Rb_tree& __t) 15726: : _M_root(__t._M_root()), _M_nodes(__t._M_rightmost()), _M_t(__t) 15726: { 15726: if (_M_root) 15726: { 15726: _M_root->_M_parent = 0; 15726: 15726: if (_M_nodes->_M_left) 15726: _M_nodes = _M_nodes->_M_left; 15726: } 15726: else 15726: _M_nodes = 0; 15726: } 15726: 15726: 15726: _Reuse_or_alloc_node(const _Reuse_or_alloc_node&) = delete; 15726: 15726: 15726: ~_Reuse_or_alloc_node() 15726: { _M_t._M_erase(static_cast<_Link_type>(_M_root)); } 15726: 15726: template 15726: _Link_type 15726: operator()(_Arg&& __arg) 15726: { 15726: _Link_type __node = static_cast<_Link_type>(_M_extract()); 15726: if (__node) 15726: { 15726: _M_t._M_destroy_node(__node); 15726: _M_t._M_construct_node(__node, std::forward<_Arg>(__arg)); 15726: return __node; 15726: } 15726: 15726: return _M_t._M_create_node(std::forward<_Arg>(__arg)); 15726: } 15726: 15726: private: 15726: _Base_ptr 15726: _M_extract() 15726: { 15726: if (!_M_nodes) 15726: return _M_nodes; 15726: 15726: _Base_ptr __node = _M_nodes; 15726: _M_nodes = _M_nodes->_M_parent; 15726: if (_M_nodes) 15726: { 15726: if (_M_nodes->_M_right == __node) 15726: { 15726: _M_nodes->_M_right = 0; 15726: 15726: if (_M_nodes->_M_left) 15726: { 15726: _M_nodes = _M_nodes->_M_left; 15726: 15726: while (_M_nodes->_M_right) 15726: _M_nodes = _M_nodes->_M_right; 15726: 15726: if (_M_nodes->_M_left) 15726: _M_nodes = _M_nodes->_M_left; 15726: } 15726: } 15726: else 15726: _M_nodes->_M_left = 0; 15726: } 15726: else 15726: _M_root = 0; 15726: 15726: return __node; 15726: } 15726: 15726: _Base_ptr _M_root; 15726: _Base_ptr _M_nodes; 15726: _Rb_tree& _M_t; 15726: }; 15726: 15726: 15726: 15726: struct _Alloc_node 15726: { 15726: _Alloc_node(_Rb_tree& __t) 15726: : _M_t(__t) { } 15726: 15726: template 15726: _Link_type 15726: operator()(_Arg&& __arg) const 15726: { return _M_t._M_create_node(std::forward<_Arg>(__arg)); } 15726: 15726: private: 15726: _Rb_tree& _M_t; 15726: }; 15726: 15726: public: 15726: typedef _Key key_type; 15726: typedef _Val value_type; 15726: typedef value_type* pointer; 15726: typedef const value_type* const_pointer; 15726: typedef value_type& reference; 15726: typedef const value_type& const_reference; 15726: typedef size_t size_type; 15726: typedef ptrdiff_t difference_type; 15726: typedef _Alloc allocator_type; 15726: 15726: _Node_allocator& 15726: _M_get_Node_allocator() noexcept 15726: { return this->_M_impl; } 15726: 15726: const _Node_allocator& 15726: _M_get_Node_allocator() const noexcept 15726: { return this->_M_impl; } 15726: 15726: allocator_type 15726: get_allocator() const noexcept 15726: { return allocator_type(_M_get_Node_allocator()); } 15726: 15726: protected: 15726: _Link_type 15726: _M_get_node() 15726: { return _Alloc_traits::allocate(_M_get_Node_allocator(), 1); } 15726: 15726: void 15726: _M_put_node(_Link_type __p) noexcept 15726: { _Alloc_traits::deallocate(_M_get_Node_allocator(), __p, 1); } 15726: # 590 "/usr/include/c++/13/bits/stl_tree.h" 3 15726: template 15726: void 15726: _M_construct_node(_Link_type __node, _Args&&... __args) 15726: { 15726: try 15726: { 15726: ::new(__node) _Rb_tree_node<_Val>; 15726: _Alloc_traits::construct(_M_get_Node_allocator(), 15726: __node->_M_valptr(), 15726: std::forward<_Args>(__args)...); 15726: } 15726: catch(...) 15726: { 15726: __node->~_Rb_tree_node<_Val>(); 15726: _M_put_node(__node); 15726: throw; 15726: } 15726: } 15726: 15726: template 15726: _Link_type 15726: _M_create_node(_Args&&... __args) 15726: { 15726: _Link_type __tmp = _M_get_node(); 15726: _M_construct_node(__tmp, std::forward<_Args>(__args)...); 15726: return __tmp; 15726: } 15726: 15726: 15726: void 15726: _M_destroy_node(_Link_type __p) noexcept 15726: { 15726: 15726: 15726: 15726: _Alloc_traits::destroy(_M_get_Node_allocator(), __p->_M_valptr()); 15726: __p->~_Rb_tree_node<_Val>(); 15726: 15726: } 15726: 15726: void 15726: _M_drop_node(_Link_type __p) noexcept 15726: { 15726: _M_destroy_node(__p); 15726: _M_put_node(__p); 15726: } 15726: 15726: template 15726: _Link_type 15726: _M_clone_node(_Link_type __x, _NodeGen& __node_gen) 15726: { 15726: 15726: using _Vp = __conditional_t<_MoveValue, 15726: value_type&&, 15726: const value_type&>; 15726: 15726: _Link_type __tmp 15726: = __node_gen(std::forward<_Vp>(*__x->_M_valptr())); 15726: __tmp->_M_color = __x->_M_color; 15726: __tmp->_M_left = 0; 15726: __tmp->_M_right = 0; 15726: return __tmp; 15726: } 15726: 15726: protected: 15726: 15726: 15726: 15726: 15726: template 15726: 15726: struct _Rb_tree_impl 15726: : public _Node_allocator 15726: , public _Rb_tree_key_compare<_Key_compare> 15726: , public _Rb_tree_header 15726: { 15726: typedef _Rb_tree_key_compare<_Key_compare> _Base_key_compare; 15726: 15726: _Rb_tree_impl() 15726: noexcept(is_nothrow_default_constructible<_Node_allocator>::value && is_nothrow_default_constructible<_Base_key_compare>::value) 15726: 15726: 15726: : _Node_allocator() 15726: { } 15726: 15726: _Rb_tree_impl(const _Rb_tree_impl& __x) 15726: : _Node_allocator(_Alloc_traits::_S_select_on_copy(__x)) 15726: , _Base_key_compare(__x._M_key_compare) 15726: , _Rb_tree_header() 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: _Rb_tree_impl(_Rb_tree_impl&&) 15726: noexcept( is_nothrow_move_constructible<_Base_key_compare>::value ) 15726: = default; 15726: 15726: explicit 15726: _Rb_tree_impl(_Node_allocator&& __a) 15726: : _Node_allocator(std::move(__a)) 15726: { } 15726: 15726: _Rb_tree_impl(_Rb_tree_impl&& __x, _Node_allocator&& __a) 15726: : _Node_allocator(std::move(__a)), 15726: _Base_key_compare(std::move(__x)), 15726: _Rb_tree_header(std::move(__x)) 15726: { } 15726: 15726: _Rb_tree_impl(const _Key_compare& __comp, _Node_allocator&& __a) 15726: : _Node_allocator(std::move(__a)), _Base_key_compare(__comp) 15726: { } 15726: 15726: }; 15726: 15726: _Rb_tree_impl<_Compare> _M_impl; 15726: 15726: protected: 15726: _Base_ptr& 15726: _M_root() noexcept 15726: { return this->_M_impl._M_header._M_parent; } 15726: 15726: _Const_Base_ptr 15726: _M_root() const noexcept 15726: { return this->_M_impl._M_header._M_parent; } 15726: 15726: _Base_ptr& 15726: _M_leftmost() noexcept 15726: { return this->_M_impl._M_header._M_left; } 15726: 15726: _Const_Base_ptr 15726: _M_leftmost() const noexcept 15726: { return this->_M_impl._M_header._M_left; } 15726: 15726: _Base_ptr& 15726: _M_rightmost() noexcept 15726: { return this->_M_impl._M_header._M_right; } 15726: 15726: _Const_Base_ptr 15726: _M_rightmost() const noexcept 15726: { return this->_M_impl._M_header._M_right; } 15726: 15726: _Link_type 15726: _M_mbegin() const noexcept 15726: { return static_cast<_Link_type>(this->_M_impl._M_header._M_parent); } 15726: 15726: _Link_type 15726: _M_begin() noexcept 15726: { return _M_mbegin(); } 15726: 15726: _Const_Link_type 15726: _M_begin() const noexcept 15726: { 15726: return static_cast<_Const_Link_type> 15726: (this->_M_impl._M_header._M_parent); 15726: } 15726: 15726: _Base_ptr 15726: _M_end() noexcept 15726: { return &this->_M_impl._M_header; } 15726: 15726: _Const_Base_ptr 15726: _M_end() const noexcept 15726: { return &this->_M_impl._M_header; } 15726: 15726: static const _Key& 15726: _S_key(_Const_Link_type __x) 15726: { 15726: 15726: 15726: 15726: static_assert(__is_invocable<_Compare&, const _Key&, const _Key&>{}, 15726: "comparison object must be invocable " 15726: "with two arguments of key type"); 15726: 15726: 15726: 15726: if constexpr (__is_invocable<_Compare&, const _Key&, const _Key&>{}) 15726: static_assert( 15726: is_invocable_v, 15726: "comparison object must be invocable as const"); 15726: 15726: 15726: 15726: return _KeyOfValue()(*__x->_M_valptr()); 15726: } 15726: 15726: static _Link_type 15726: _S_left(_Base_ptr __x) noexcept 15726: { return static_cast<_Link_type>(__x->_M_left); } 15726: 15726: static _Const_Link_type 15726: _S_left(_Const_Base_ptr __x) noexcept 15726: { return static_cast<_Const_Link_type>(__x->_M_left); } 15726: 15726: static _Link_type 15726: _S_right(_Base_ptr __x) noexcept 15726: { return static_cast<_Link_type>(__x->_M_right); } 15726: 15726: static _Const_Link_type 15726: _S_right(_Const_Base_ptr __x) noexcept 15726: { return static_cast<_Const_Link_type>(__x->_M_right); } 15726: 15726: static const _Key& 15726: _S_key(_Const_Base_ptr __x) 15726: { return _S_key(static_cast<_Const_Link_type>(__x)); } 15726: 15726: static _Base_ptr 15726: _S_minimum(_Base_ptr __x) noexcept 15726: { return _Rb_tree_node_base::_S_minimum(__x); } 15726: 15726: static _Const_Base_ptr 15726: _S_minimum(_Const_Base_ptr __x) noexcept 15726: { return _Rb_tree_node_base::_S_minimum(__x); } 15726: 15726: static _Base_ptr 15726: _S_maximum(_Base_ptr __x) noexcept 15726: { return _Rb_tree_node_base::_S_maximum(__x); } 15726: 15726: static _Const_Base_ptr 15726: _S_maximum(_Const_Base_ptr __x) noexcept 15726: { return _Rb_tree_node_base::_S_maximum(__x); } 15726: 15726: public: 15726: typedef _Rb_tree_iterator iterator; 15726: typedef _Rb_tree_const_iterator const_iterator; 15726: 15726: typedef std::reverse_iterator reverse_iterator; 15726: typedef std::reverse_iterator const_reverse_iterator; 15726: 15726: 15726: using node_type = _Node_handle<_Key, _Val, _Node_allocator>; 15726: using insert_return_type = _Node_insert_return< 15726: __conditional_t, const_iterator, iterator>, 15726: node_type>; 15726: 15726: 15726: pair<_Base_ptr, _Base_ptr> 15726: _M_get_insert_unique_pos(const key_type& __k); 15726: 15726: pair<_Base_ptr, _Base_ptr> 15726: _M_get_insert_equal_pos(const key_type& __k); 15726: 15726: pair<_Base_ptr, _Base_ptr> 15726: _M_get_insert_hint_unique_pos(const_iterator __pos, 15726: const key_type& __k); 15726: 15726: pair<_Base_ptr, _Base_ptr> 15726: _M_get_insert_hint_equal_pos(const_iterator __pos, 15726: const key_type& __k); 15726: 15726: private: 15726: 15726: template 15726: iterator 15726: _M_insert_(_Base_ptr __x, _Base_ptr __y, _Arg&& __v, _NodeGen&); 15726: 15726: iterator 15726: _M_insert_node(_Base_ptr __x, _Base_ptr __y, _Link_type __z); 15726: 15726: template 15726: iterator 15726: _M_insert_lower(_Base_ptr __y, _Arg&& __v); 15726: 15726: template 15726: iterator 15726: _M_insert_equal_lower(_Arg&& __x); 15726: 15726: iterator 15726: _M_insert_lower_node(_Base_ptr __p, _Link_type __z); 15726: 15726: iterator 15726: _M_insert_equal_lower_node(_Link_type __z); 15726: # 881 "/usr/include/c++/13/bits/stl_tree.h" 3 15726: enum { __as_lvalue, __as_rvalue }; 15726: 15726: template 15726: _Link_type 15726: _M_copy(_Link_type, _Base_ptr, _NodeGen&); 15726: 15726: template 15726: _Link_type 15726: _M_copy(const _Rb_tree& __x, _NodeGen& __gen) 15726: { 15726: _Link_type __root = 15726: _M_copy<_MoveValues>(__x._M_mbegin(), _M_end(), __gen); 15726: _M_leftmost() = _S_minimum(__root); 15726: _M_rightmost() = _S_maximum(__root); 15726: _M_impl._M_node_count = __x._M_impl._M_node_count; 15726: return __root; 15726: } 15726: 15726: _Link_type 15726: _M_copy(const _Rb_tree& __x) 15726: { 15726: _Alloc_node __an(*this); 15726: return _M_copy<__as_lvalue>(__x, __an); 15726: } 15726: 15726: void 15726: _M_erase(_Link_type __x); 15726: 15726: iterator 15726: _M_lower_bound(_Link_type __x, _Base_ptr __y, 15726: const _Key& __k); 15726: 15726: const_iterator 15726: _M_lower_bound(_Const_Link_type __x, _Const_Base_ptr __y, 15726: const _Key& __k) const; 15726: 15726: iterator 15726: _M_upper_bound(_Link_type __x, _Base_ptr __y, 15726: const _Key& __k); 15726: 15726: const_iterator 15726: _M_upper_bound(_Const_Link_type __x, _Const_Base_ptr __y, 15726: const _Key& __k) const; 15726: 15726: public: 15726: 15726: 15726: 15726: 15726: _Rb_tree() = default; 15726: 15726: 15726: _Rb_tree(const _Compare& __comp, 15726: const allocator_type& __a = allocator_type()) 15726: : _M_impl(__comp, _Node_allocator(__a)) { } 15726: 15726: _Rb_tree(const _Rb_tree& __x) 15726: : _M_impl(__x._M_impl) 15726: { 15726: if (__x._M_root() != 0) 15726: _M_root() = _M_copy(__x); 15726: } 15726: 15726: 15726: _Rb_tree(const allocator_type& __a) 15726: : _M_impl(_Node_allocator(__a)) 15726: { } 15726: 15726: _Rb_tree(const _Rb_tree& __x, const allocator_type& __a) 15726: : _M_impl(__x._M_impl._M_key_compare, _Node_allocator(__a)) 15726: { 15726: if (__x._M_root() != nullptr) 15726: _M_root() = _M_copy(__x); 15726: } 15726: 15726: _Rb_tree(_Rb_tree&&) = default; 15726: 15726: _Rb_tree(_Rb_tree&& __x, const allocator_type& __a) 15726: : _Rb_tree(std::move(__x), _Node_allocator(__a)) 15726: { } 15726: 15726: private: 15726: _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a, true_type) 15726: noexcept(is_nothrow_default_constructible<_Compare>::value) 15726: : _M_impl(std::move(__x._M_impl), std::move(__a)) 15726: { } 15726: 15726: _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a, false_type) 15726: : _M_impl(__x._M_impl._M_key_compare, std::move(__a)) 15726: { 15726: if (__x._M_root() != nullptr) 15726: _M_move_data(__x, false_type{}); 15726: } 15726: 15726: public: 15726: _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a) 15726: noexcept( noexcept( 15726: _Rb_tree(std::declval<_Rb_tree&&>(), std::declval<_Node_allocator&&>(), 15726: std::declval())) ) 15726: : _Rb_tree(std::move(__x), std::move(__a), 15726: typename _Alloc_traits::is_always_equal{}) 15726: { } 15726: 15726: 15726: ~_Rb_tree() noexcept 15726: { _M_erase(_M_begin()); } 15726: 15726: _Rb_tree& 15726: operator=(const _Rb_tree& __x); 15726: 15726: 15726: _Compare 15726: key_comp() const 15726: { return _M_impl._M_key_compare; } 15726: 15726: iterator 15726: begin() noexcept 15726: { return iterator(this->_M_impl._M_header._M_left); } 15726: 15726: const_iterator 15726: begin() const noexcept 15726: { return const_iterator(this->_M_impl._M_header._M_left); } 15726: 15726: iterator 15726: end() noexcept 15726: { return iterator(&this->_M_impl._M_header); } 15726: 15726: const_iterator 15726: end() const noexcept 15726: { return const_iterator(&this->_M_impl._M_header); } 15726: 15726: reverse_iterator 15726: rbegin() noexcept 15726: { return reverse_iterator(end()); } 15726: 15726: const_reverse_iterator 15726: rbegin() const noexcept 15726: { return const_reverse_iterator(end()); } 15726: 15726: reverse_iterator 15726: rend() noexcept 15726: { return reverse_iterator(begin()); } 15726: 15726: const_reverse_iterator 15726: rend() const noexcept 15726: { return const_reverse_iterator(begin()); } 15726: 15726: [[__nodiscard__]] bool 15726: empty() const noexcept 15726: { return _M_impl._M_node_count == 0; } 15726: 15726: size_type 15726: size() const noexcept 15726: { return _M_impl._M_node_count; } 15726: 15726: size_type 15726: max_size() const noexcept 15726: { return _Alloc_traits::max_size(_M_get_Node_allocator()); } 15726: 15726: void 15726: swap(_Rb_tree& __t) 15726: noexcept(__is_nothrow_swappable<_Compare>::value); 15726: 15726: 15726: 15726: template 15726: pair 15726: _M_insert_unique(_Arg&& __x); 15726: 15726: template 15726: iterator 15726: _M_insert_equal(_Arg&& __x); 15726: 15726: template 15726: iterator 15726: _M_insert_unique_(const_iterator __pos, _Arg&& __x, _NodeGen&); 15726: 15726: template 15726: iterator 15726: _M_insert_unique_(const_iterator __pos, _Arg&& __x) 15726: { 15726: _Alloc_node __an(*this); 15726: return _M_insert_unique_(__pos, std::forward<_Arg>(__x), __an); 15726: } 15726: 15726: template 15726: iterator 15726: _M_insert_equal_(const_iterator __pos, _Arg&& __x, _NodeGen&); 15726: 15726: template 15726: iterator 15726: _M_insert_equal_(const_iterator __pos, _Arg&& __x) 15726: { 15726: _Alloc_node __an(*this); 15726: return _M_insert_equal_(__pos, std::forward<_Arg>(__x), __an); 15726: } 15726: 15726: template 15726: pair 15726: _M_emplace_unique(_Args&&... __args); 15726: 15726: template 15726: iterator 15726: _M_emplace_equal(_Args&&... __args); 15726: 15726: template 15726: iterator 15726: _M_emplace_hint_unique(const_iterator __pos, _Args&&... __args); 15726: 15726: template 15726: iterator 15726: _M_emplace_hint_equal(const_iterator __pos, _Args&&... __args); 15726: 15726: template 15726: using __same_value_type 15726: = is_same::value_type>; 15726: 15726: template 15726: __enable_if_t<__same_value_type<_InputIterator>::value> 15726: _M_insert_range_unique(_InputIterator __first, _InputIterator __last) 15726: { 15726: _Alloc_node __an(*this); 15726: for (; __first != __last; ++__first) 15726: _M_insert_unique_(end(), *__first, __an); 15726: } 15726: 15726: template 15726: __enable_if_t::value> 15726: _M_insert_range_unique(_InputIterator __first, _InputIterator __last) 15726: { 15726: for (; __first != __last; ++__first) 15726: _M_emplace_unique(*__first); 15726: } 15726: 15726: template 15726: __enable_if_t<__same_value_type<_InputIterator>::value> 15726: _M_insert_range_equal(_InputIterator __first, _InputIterator __last) 15726: { 15726: _Alloc_node __an(*this); 15726: for (; __first != __last; ++__first) 15726: _M_insert_equal_(end(), *__first, __an); 15726: } 15726: 15726: template 15726: __enable_if_t::value> 15726: _M_insert_range_equal(_InputIterator __first, _InputIterator __last) 15726: { 15726: for (; __first != __last; ++__first) 15726: _M_emplace_equal(*__first); 15726: } 15726: # 1180 "/usr/include/c++/13/bits/stl_tree.h" 3 15726: private: 15726: void 15726: _M_erase_aux(const_iterator __position); 15726: 15726: void 15726: _M_erase_aux(const_iterator __first, const_iterator __last); 15726: 15726: public: 15726: 15726: 15726: 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: iterator 15726: erase(const_iterator __position) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__position != end())) __builtin_unreachable(); } while (false); 15726: const_iterator __result = __position; 15726: ++__result; 15726: _M_erase_aux(__position); 15726: return __result._M_const_cast(); 15726: } 15726: 15726: 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: iterator 15726: erase(iterator __position) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__position != end())) __builtin_unreachable(); } while (false); 15726: iterator __result = __position; 15726: ++__result; 15726: _M_erase_aux(__position); 15726: return __result; 15726: } 15726: # 1229 "/usr/include/c++/13/bits/stl_tree.h" 3 15726: size_type 15726: erase(const key_type& __x); 15726: 15726: 15726: 15726: 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: iterator 15726: erase(const_iterator __first, const_iterator __last) 15726: { 15726: _M_erase_aux(__first, __last); 15726: return __last._M_const_cast(); 15726: } 15726: # 1252 "/usr/include/c++/13/bits/stl_tree.h" 3 15726: void 15726: clear() noexcept 15726: { 15726: _M_erase(_M_begin()); 15726: _M_impl._M_reset(); 15726: } 15726: 15726: 15726: iterator 15726: find(const key_type& __k); 15726: 15726: const_iterator 15726: find(const key_type& __k) const; 15726: 15726: size_type 15726: count(const key_type& __k) const; 15726: 15726: iterator 15726: lower_bound(const key_type& __k) 15726: { return _M_lower_bound(_M_begin(), _M_end(), __k); } 15726: 15726: const_iterator 15726: lower_bound(const key_type& __k) const 15726: { return _M_lower_bound(_M_begin(), _M_end(), __k); } 15726: 15726: iterator 15726: upper_bound(const key_type& __k) 15726: { return _M_upper_bound(_M_begin(), _M_end(), __k); } 15726: 15726: const_iterator 15726: upper_bound(const key_type& __k) const 15726: { return _M_upper_bound(_M_begin(), _M_end(), __k); } 15726: 15726: pair 15726: equal_range(const key_type& __k); 15726: 15726: pair 15726: equal_range(const key_type& __k) const; 15726: 15726: 15726: template> 15726: iterator 15726: _M_find_tr(const _Kt& __k) 15726: { 15726: const _Rb_tree* __const_this = this; 15726: return __const_this->_M_find_tr(__k)._M_const_cast(); 15726: } 15726: 15726: template> 15726: const_iterator 15726: _M_find_tr(const _Kt& __k) const 15726: { 15726: auto __j = _M_lower_bound_tr(__k); 15726: if (__j != end() && _M_impl._M_key_compare(__k, _S_key(__j._M_node))) 15726: __j = end(); 15726: return __j; 15726: } 15726: 15726: template> 15726: size_type 15726: _M_count_tr(const _Kt& __k) const 15726: { 15726: auto __p = _M_equal_range_tr(__k); 15726: return std::distance(__p.first, __p.second); 15726: } 15726: 15726: template> 15726: iterator 15726: _M_lower_bound_tr(const _Kt& __k) 15726: { 15726: const _Rb_tree* __const_this = this; 15726: return __const_this->_M_lower_bound_tr(__k)._M_const_cast(); 15726: } 15726: 15726: template> 15726: const_iterator 15726: _M_lower_bound_tr(const _Kt& __k) const 15726: { 15726: auto __x = _M_begin(); 15726: auto __y = _M_end(); 15726: while (__x != 0) 15726: if (!_M_impl._M_key_compare(_S_key(__x), __k)) 15726: { 15726: __y = __x; 15726: __x = _S_left(__x); 15726: } 15726: else 15726: __x = _S_right(__x); 15726: return const_iterator(__y); 15726: } 15726: 15726: template> 15726: iterator 15726: _M_upper_bound_tr(const _Kt& __k) 15726: { 15726: const _Rb_tree* __const_this = this; 15726: return __const_this->_M_upper_bound_tr(__k)._M_const_cast(); 15726: } 15726: 15726: template> 15726: const_iterator 15726: _M_upper_bound_tr(const _Kt& __k) const 15726: { 15726: auto __x = _M_begin(); 15726: auto __y = _M_end(); 15726: while (__x != 0) 15726: if (_M_impl._M_key_compare(__k, _S_key(__x))) 15726: { 15726: __y = __x; 15726: __x = _S_left(__x); 15726: } 15726: else 15726: __x = _S_right(__x); 15726: return const_iterator(__y); 15726: } 15726: 15726: template> 15726: pair 15726: _M_equal_range_tr(const _Kt& __k) 15726: { 15726: const _Rb_tree* __const_this = this; 15726: auto __ret = __const_this->_M_equal_range_tr(__k); 15726: return { __ret.first._M_const_cast(), __ret.second._M_const_cast() }; 15726: } 15726: 15726: template> 15726: pair 15726: _M_equal_range_tr(const _Kt& __k) const 15726: { 15726: auto __low = _M_lower_bound_tr(__k); 15726: auto __high = __low; 15726: auto& __cmp = _M_impl._M_key_compare; 15726: while (__high != end() && !__cmp(__k, _S_key(__high._M_node))) 15726: ++__high; 15726: return { __low, __high }; 15726: } 15726: 15726: 15726: 15726: bool 15726: __rb_verify() const; 15726: 15726: 15726: _Rb_tree& 15726: operator=(_Rb_tree&&) 15726: noexcept(_Alloc_traits::_S_nothrow_move() 15726: && is_nothrow_move_assignable<_Compare>::value); 15726: 15726: template 15726: void 15726: _M_assign_unique(_Iterator, _Iterator); 15726: 15726: template 15726: void 15726: _M_assign_equal(_Iterator, _Iterator); 15726: 15726: private: 15726: 15726: void 15726: _M_move_data(_Rb_tree& __x, true_type) 15726: { _M_impl._M_move_data(__x._M_impl); } 15726: 15726: 15726: 15726: void 15726: _M_move_data(_Rb_tree&, false_type); 15726: 15726: 15726: void 15726: _M_move_assign(_Rb_tree&, true_type); 15726: 15726: 15726: 15726: void 15726: _M_move_assign(_Rb_tree&, false_type); 15726: 15726: 15726: 15726: public: 15726: 15726: insert_return_type 15726: _M_reinsert_node_unique(node_type&& __nh) 15726: { 15726: insert_return_type __ret; 15726: if (__nh.empty()) 15726: __ret.position = end(); 15726: else 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(_M_get_Node_allocator() == *__nh._M_alloc)) __builtin_unreachable(); } while (false); 15726: 15726: auto __res = _M_get_insert_unique_pos(__nh._M_key()); 15726: if (__res.second) 15726: { 15726: __ret.position 15726: = _M_insert_node(__res.first, __res.second, __nh._M_ptr); 15726: __nh.release(); 15726: __ret.inserted = true; 15726: } 15726: else 15726: { 15726: __ret.node = std::move(__nh); 15726: __ret.position = iterator(__res.first); 15726: __ret.inserted = false; 15726: } 15726: } 15726: return __ret; 15726: } 15726: 15726: 15726: iterator 15726: _M_reinsert_node_equal(node_type&& __nh) 15726: { 15726: iterator __ret; 15726: if (__nh.empty()) 15726: __ret = end(); 15726: else 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(_M_get_Node_allocator() == *__nh._M_alloc)) __builtin_unreachable(); } while (false); 15726: auto __res = _M_get_insert_equal_pos(__nh._M_key()); 15726: if (__res.second) 15726: __ret = _M_insert_node(__res.first, __res.second, __nh._M_ptr); 15726: else 15726: __ret = _M_insert_equal_lower_node(__nh._M_ptr); 15726: __nh.release(); 15726: } 15726: return __ret; 15726: } 15726: 15726: 15726: iterator 15726: _M_reinsert_node_hint_unique(const_iterator __hint, node_type&& __nh) 15726: { 15726: iterator __ret; 15726: if (__nh.empty()) 15726: __ret = end(); 15726: else 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(_M_get_Node_allocator() == *__nh._M_alloc)) __builtin_unreachable(); } while (false); 15726: auto __res = _M_get_insert_hint_unique_pos(__hint, __nh._M_key()); 15726: if (__res.second) 15726: { 15726: __ret = _M_insert_node(__res.first, __res.second, __nh._M_ptr); 15726: __nh.release(); 15726: } 15726: else 15726: __ret = iterator(__res.first); 15726: } 15726: return __ret; 15726: } 15726: 15726: 15726: iterator 15726: _M_reinsert_node_hint_equal(const_iterator __hint, node_type&& __nh) 15726: { 15726: iterator __ret; 15726: if (__nh.empty()) 15726: __ret = end(); 15726: else 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(_M_get_Node_allocator() == *__nh._M_alloc)) __builtin_unreachable(); } while (false); 15726: auto __res = _M_get_insert_hint_equal_pos(__hint, __nh._M_key()); 15726: if (__res.second) 15726: __ret = _M_insert_node(__res.first, __res.second, __nh._M_ptr); 15726: else 15726: __ret = _M_insert_equal_lower_node(__nh._M_ptr); 15726: __nh.release(); 15726: } 15726: return __ret; 15726: } 15726: 15726: 15726: node_type 15726: extract(const_iterator __pos) 15726: { 15726: auto __ptr = _Rb_tree_rebalance_for_erase( 15726: __pos._M_const_cast()._M_node, _M_impl._M_header); 15726: --_M_impl._M_node_count; 15726: return { static_cast<_Link_type>(__ptr), _M_get_Node_allocator() }; 15726: } 15726: 15726: 15726: node_type 15726: extract(const key_type& __k) 15726: { 15726: node_type __nh; 15726: auto __pos = find(__k); 15726: if (__pos != end()) 15726: __nh = extract(const_iterator(__pos)); 15726: return __nh; 15726: } 15726: 15726: template 15726: using _Compatible_tree 15726: = _Rb_tree<_Key, _Val, _KeyOfValue, _Compare2, _Alloc>; 15726: 15726: template 15726: friend struct _Rb_tree_merge_helper; 15726: 15726: 15726: template 15726: void 15726: _M_merge_unique(_Compatible_tree<_Compare2>& __src) noexcept 15726: { 15726: using _Merge_helper = _Rb_tree_merge_helper<_Rb_tree, _Compare2>; 15726: for (auto __i = __src.begin(), __end = __src.end(); __i != __end;) 15726: { 15726: auto __pos = __i++; 15726: auto __res = _M_get_insert_unique_pos(_KeyOfValue()(*__pos)); 15726: if (__res.second) 15726: { 15726: auto& __src_impl = _Merge_helper::_S_get_impl(__src); 15726: auto __ptr = _Rb_tree_rebalance_for_erase( 15726: __pos._M_node, __src_impl._M_header); 15726: --__src_impl._M_node_count; 15726: _M_insert_node(__res.first, __res.second, 15726: static_cast<_Link_type>(__ptr)); 15726: } 15726: } 15726: } 15726: 15726: 15726: template 15726: void 15726: _M_merge_equal(_Compatible_tree<_Compare2>& __src) noexcept 15726: { 15726: using _Merge_helper = _Rb_tree_merge_helper<_Rb_tree, _Compare2>; 15726: for (auto __i = __src.begin(), __end = __src.end(); __i != __end;) 15726: { 15726: auto __pos = __i++; 15726: auto __res = _M_get_insert_equal_pos(_KeyOfValue()(*__pos)); 15726: if (__res.second) 15726: { 15726: auto& __src_impl = _Merge_helper::_S_get_impl(__src); 15726: auto __ptr = _Rb_tree_rebalance_for_erase( 15726: __pos._M_node, __src_impl._M_header); 15726: --__src_impl._M_node_count; 15726: _M_insert_node(__res.first, __res.second, 15726: static_cast<_Link_type>(__ptr)); 15726: } 15726: } 15726: } 15726: 15726: 15726: friend bool 15726: operator==(const _Rb_tree& __x, const _Rb_tree& __y) 15726: { 15726: return __x.size() == __y.size() 15726: && std::equal(__x.begin(), __x.end(), __y.begin()); 15726: } 15726: # 1621 "/usr/include/c++/13/bits/stl_tree.h" 3 15726: friend bool 15726: operator<(const _Rb_tree& __x, const _Rb_tree& __y) 15726: { 15726: return std::lexicographical_compare(__x.begin(), __x.end(), 15726: __y.begin(), __y.end()); 15726: } 15726: 15726: 15726: private: 15726: 15726: 15726: struct _Auto_node 15726: { 15726: template 15726: _Auto_node(_Rb_tree& __t, _Args&&... __args) 15726: : _M_t(__t), 15726: _M_node(__t._M_create_node(std::forward<_Args>(__args)...)) 15726: { } 15726: 15726: ~_Auto_node() 15726: { 15726: if (_M_node) 15726: _M_t._M_drop_node(_M_node); 15726: } 15726: 15726: _Auto_node(_Auto_node&& __n) 15726: : _M_t(__n._M_t), _M_node(__n._M_node) 15726: { __n._M_node = nullptr; } 15726: 15726: const _Key& 15726: _M_key() const 15726: { return _S_key(_M_node); } 15726: 15726: iterator 15726: _M_insert(pair<_Base_ptr, _Base_ptr> __p) 15726: { 15726: auto __it = _M_t._M_insert_node(__p.first, __p.second, _M_node); 15726: _M_node = nullptr; 15726: return __it; 15726: } 15726: 15726: iterator 15726: _M_insert_equal_lower() 15726: { 15726: auto __it = _M_t._M_insert_equal_lower_node(_M_node); 15726: _M_node = nullptr; 15726: return __it; 15726: } 15726: 15726: _Rb_tree& _M_t; 15726: _Link_type _M_node; 15726: }; 15726: 15726: }; 15726: 15726: template 15726: inline void 15726: swap(_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x, 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y) 15726: { __x.swap(__y); } 15726: 15726: 15726: template 15726: void 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_move_data(_Rb_tree& __x, false_type) 15726: { 15726: if (_M_get_Node_allocator() == __x._M_get_Node_allocator()) 15726: _M_move_data(__x, true_type()); 15726: else 15726: { 15726: constexpr bool __move = !__move_if_noexcept_cond::value; 15726: _Alloc_node __an(*this); 15726: _M_root() = _M_copy<__move>(__x, __an); 15726: if constexpr (__move) 15726: __x.clear(); 15726: } 15726: } 15726: 15726: template 15726: inline void 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_move_assign(_Rb_tree& __x, true_type) 15726: { 15726: clear(); 15726: if (__x._M_root() != nullptr) 15726: _M_move_data(__x, true_type()); 15726: std::__alloc_on_move(_M_get_Node_allocator(), 15726: __x._M_get_Node_allocator()); 15726: } 15726: 15726: template 15726: void 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_move_assign(_Rb_tree& __x, false_type) 15726: { 15726: if (_M_get_Node_allocator() == __x._M_get_Node_allocator()) 15726: return _M_move_assign(__x, true_type{}); 15726: 15726: 15726: 15726: _Reuse_or_alloc_node __roan(*this); 15726: _M_impl._M_reset(); 15726: if (__x._M_root() != nullptr) 15726: { 15726: _M_root() = _M_copy<__as_rvalue>(__x, __roan); 15726: __x.clear(); 15726: } 15726: } 15726: 15726: template 15726: inline _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: operator=(_Rb_tree&& __x) 15726: noexcept(_Alloc_traits::_S_nothrow_move() 15726: && is_nothrow_move_assignable<_Compare>::value) 15726: { 15726: _M_impl._M_key_compare = std::move(__x._M_impl._M_key_compare); 15726: _M_move_assign(__x, __bool_constant<_Alloc_traits::_S_nothrow_move()>()); 15726: return *this; 15726: } 15726: 15726: template 15726: template 15726: void 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_assign_unique(_Iterator __first, _Iterator __last) 15726: { 15726: _Reuse_or_alloc_node __roan(*this); 15726: _M_impl._M_reset(); 15726: for (; __first != __last; ++__first) 15726: _M_insert_unique_(end(), *__first, __roan); 15726: } 15726: 15726: template 15726: template 15726: void 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_assign_equal(_Iterator __first, _Iterator __last) 15726: { 15726: _Reuse_or_alloc_node __roan(*this); 15726: _M_impl._M_reset(); 15726: for (; __first != __last; ++__first) 15726: _M_insert_equal_(end(), *__first, __roan); 15726: } 15726: 15726: 15726: template 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: operator=(const _Rb_tree& __x) 15726: { 15726: if (this != std::__addressof(__x)) 15726: { 15726: 15726: 15726: if (_Alloc_traits::_S_propagate_on_copy_assign()) 15726: { 15726: auto& __this_alloc = this->_M_get_Node_allocator(); 15726: auto& __that_alloc = __x._M_get_Node_allocator(); 15726: if (!_Alloc_traits::_S_always_equal() 15726: && __this_alloc != __that_alloc) 15726: { 15726: 15726: 15726: clear(); 15726: std::__alloc_on_copy(__this_alloc, __that_alloc); 15726: } 15726: } 15726: 15726: 15726: _Reuse_or_alloc_node __roan(*this); 15726: _M_impl._M_reset(); 15726: _M_impl._M_key_compare = __x._M_impl._M_key_compare; 15726: if (__x._M_root() != 0) 15726: _M_root() = _M_copy<__as_lvalue>(__x, __roan); 15726: } 15726: 15726: return *this; 15726: } 15726: 15726: template 15726: 15726: template 15726: 15726: 15726: 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_insert_(_Base_ptr __x, _Base_ptr __p, 15726: 15726: _Arg&& __v, 15726: 15726: 15726: 15726: _NodeGen& __node_gen) 15726: { 15726: bool __insert_left = (__x != 0 || __p == _M_end() 15726: || _M_impl._M_key_compare(_KeyOfValue()(__v), 15726: _S_key(__p))); 15726: 15726: _Link_type __z = __node_gen(std::forward<_Arg>(__v)); 15726: 15726: _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, 15726: this->_M_impl._M_header); 15726: ++_M_impl._M_node_count; 15726: return iterator(__z); 15726: } 15726: 15726: template 15726: 15726: template 15726: 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: 15726: _M_insert_lower(_Base_ptr __p, _Arg&& __v) 15726: 15726: 15726: 15726: { 15726: bool __insert_left = (__p == _M_end() 15726: || !_M_impl._M_key_compare(_S_key(__p), 15726: _KeyOfValue()(__v))); 15726: 15726: _Link_type __z = _M_create_node(std::forward<_Arg>(__v)); 15726: 15726: _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, 15726: this->_M_impl._M_header); 15726: ++_M_impl._M_node_count; 15726: return iterator(__z); 15726: } 15726: 15726: template 15726: 15726: template 15726: 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: 15726: _M_insert_equal_lower(_Arg&& __v) 15726: 15726: 15726: 15726: { 15726: _Link_type __x = _M_begin(); 15726: _Base_ptr __y = _M_end(); 15726: while (__x != 0) 15726: { 15726: __y = __x; 15726: __x = !_M_impl._M_key_compare(_S_key(__x), _KeyOfValue()(__v)) ? 15726: _S_left(__x) : _S_right(__x); 15726: } 15726: return _M_insert_lower(__y, std::forward<_Arg>(__v)); 15726: } 15726: 15726: template 15726: template 15726: typename _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>::_Link_type 15726: _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>:: 15726: _M_copy(_Link_type __x, _Base_ptr __p, _NodeGen& __node_gen) 15726: { 15726: 15726: _Link_type __top = _M_clone_node<_MoveValues>(__x, __node_gen); 15726: __top->_M_parent = __p; 15726: 15726: try 15726: { 15726: if (__x->_M_right) 15726: __top->_M_right = 15726: _M_copy<_MoveValues>(_S_right(__x), __top, __node_gen); 15726: __p = __top; 15726: __x = _S_left(__x); 15726: 15726: while (__x != 0) 15726: { 15726: _Link_type __y = _M_clone_node<_MoveValues>(__x, __node_gen); 15726: __p->_M_left = __y; 15726: __y->_M_parent = __p; 15726: if (__x->_M_right) 15726: __y->_M_right = _M_copy<_MoveValues>(_S_right(__x), 15726: __y, __node_gen); 15726: __p = __y; 15726: __x = _S_left(__x); 15726: } 15726: } 15726: catch(...) 15726: { 15726: _M_erase(__top); 15726: throw; 15726: } 15726: return __top; 15726: } 15726: 15726: template 15726: void 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_erase(_Link_type __x) 15726: { 15726: 15726: while (__x != 0) 15726: { 15726: _M_erase(_S_right(__x)); 15726: _Link_type __y = _S_left(__x); 15726: _M_drop_node(__x); 15726: __x = __y; 15726: } 15726: } 15726: 15726: template 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, 15726: _Compare, _Alloc>::iterator 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_lower_bound(_Link_type __x, _Base_ptr __y, 15726: const _Key& __k) 15726: { 15726: while (__x != 0) 15726: if (!_M_impl._M_key_compare(_S_key(__x), __k)) 15726: __y = __x, __x = _S_left(__x); 15726: else 15726: __x = _S_right(__x); 15726: return iterator(__y); 15726: } 15726: 15726: template 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, 15726: _Compare, _Alloc>::const_iterator 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_lower_bound(_Const_Link_type __x, _Const_Base_ptr __y, 15726: const _Key& __k) const 15726: { 15726: while (__x != 0) 15726: if (!_M_impl._M_key_compare(_S_key(__x), __k)) 15726: __y = __x, __x = _S_left(__x); 15726: else 15726: __x = _S_right(__x); 15726: return const_iterator(__y); 15726: } 15726: 15726: template 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, 15726: _Compare, _Alloc>::iterator 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_upper_bound(_Link_type __x, _Base_ptr __y, 15726: const _Key& __k) 15726: { 15726: while (__x != 0) 15726: if (_M_impl._M_key_compare(__k, _S_key(__x))) 15726: __y = __x, __x = _S_left(__x); 15726: else 15726: __x = _S_right(__x); 15726: return iterator(__y); 15726: } 15726: 15726: template 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, 15726: _Compare, _Alloc>::const_iterator 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_upper_bound(_Const_Link_type __x, _Const_Base_ptr __y, 15726: const _Key& __k) const 15726: { 15726: while (__x != 0) 15726: if (_M_impl._M_key_compare(__k, _S_key(__x))) 15726: __y = __x, __x = _S_left(__x); 15726: else 15726: __x = _S_right(__x); 15726: return const_iterator(__y); 15726: } 15726: 15726: template 15726: pair::iterator, 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, 15726: _Compare, _Alloc>::iterator> 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: equal_range(const _Key& __k) 15726: { 15726: _Link_type __x = _M_begin(); 15726: _Base_ptr __y = _M_end(); 15726: while (__x != 0) 15726: { 15726: if (_M_impl._M_key_compare(_S_key(__x), __k)) 15726: __x = _S_right(__x); 15726: else if (_M_impl._M_key_compare(__k, _S_key(__x))) 15726: __y = __x, __x = _S_left(__x); 15726: else 15726: { 15726: _Link_type __xu(__x); 15726: _Base_ptr __yu(__y); 15726: __y = __x, __x = _S_left(__x); 15726: __xu = _S_right(__xu); 15726: return pair(_M_lower_bound(__x, __y, __k), 15726: _M_upper_bound(__xu, __yu, __k)); 15726: } 15726: } 15726: return pair(iterator(__y), 15726: iterator(__y)); 15726: } 15726: 15726: template 15726: pair::const_iterator, 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, 15726: _Compare, _Alloc>::const_iterator> 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: equal_range(const _Key& __k) const 15726: { 15726: _Const_Link_type __x = _M_begin(); 15726: _Const_Base_ptr __y = _M_end(); 15726: while (__x != 0) 15726: { 15726: if (_M_impl._M_key_compare(_S_key(__x), __k)) 15726: __x = _S_right(__x); 15726: else if (_M_impl._M_key_compare(__k, _S_key(__x))) 15726: __y = __x, __x = _S_left(__x); 15726: else 15726: { 15726: _Const_Link_type __xu(__x); 15726: _Const_Base_ptr __yu(__y); 15726: __y = __x, __x = _S_left(__x); 15726: __xu = _S_right(__xu); 15726: return pair(_M_lower_bound(__x, __y, __k), 15726: _M_upper_bound(__xu, __yu, __k)); 15726: } 15726: } 15726: return pair(const_iterator(__y), 15726: const_iterator(__y)); 15726: } 15726: 15726: template 15726: void 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: swap(_Rb_tree& __t) 15726: noexcept(__is_nothrow_swappable<_Compare>::value) 15726: { 15726: if (_M_root() == 0) 15726: { 15726: if (__t._M_root() != 0) 15726: _M_impl._M_move_data(__t._M_impl); 15726: } 15726: else if (__t._M_root() == 0) 15726: __t._M_impl._M_move_data(_M_impl); 15726: else 15726: { 15726: std::swap(_M_root(),__t._M_root()); 15726: std::swap(_M_leftmost(),__t._M_leftmost()); 15726: std::swap(_M_rightmost(),__t._M_rightmost()); 15726: 15726: _M_root()->_M_parent = _M_end(); 15726: __t._M_root()->_M_parent = __t._M_end(); 15726: std::swap(this->_M_impl._M_node_count, __t._M_impl._M_node_count); 15726: } 15726: 15726: std::swap(this->_M_impl._M_key_compare, __t._M_impl._M_key_compare); 15726: 15726: _Alloc_traits::_S_on_swap(_M_get_Node_allocator(), 15726: __t._M_get_Node_allocator()); 15726: } 15726: 15726: template 15726: pair::_Base_ptr, 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, 15726: _Compare, _Alloc>::_Base_ptr> 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_get_insert_unique_pos(const key_type& __k) 15726: { 15726: typedef pair<_Base_ptr, _Base_ptr> _Res; 15726: _Link_type __x = _M_begin(); 15726: _Base_ptr __y = _M_end(); 15726: bool __comp = true; 15726: while (__x != 0) 15726: { 15726: __y = __x; 15726: __comp = _M_impl._M_key_compare(__k, _S_key(__x)); 15726: __x = __comp ? _S_left(__x) : _S_right(__x); 15726: } 15726: iterator __j = iterator(__y); 15726: if (__comp) 15726: { 15726: if (__j == begin()) 15726: return _Res(__x, __y); 15726: else 15726: --__j; 15726: } 15726: if (_M_impl._M_key_compare(_S_key(__j._M_node), __k)) 15726: return _Res(__x, __y); 15726: return _Res(__j._M_node, 0); 15726: } 15726: 15726: template 15726: pair::_Base_ptr, 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, 15726: _Compare, _Alloc>::_Base_ptr> 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_get_insert_equal_pos(const key_type& __k) 15726: { 15726: typedef pair<_Base_ptr, _Base_ptr> _Res; 15726: _Link_type __x = _M_begin(); 15726: _Base_ptr __y = _M_end(); 15726: while (__x != 0) 15726: { 15726: __y = __x; 15726: __x = _M_impl._M_key_compare(__k, _S_key(__x)) ? 15726: _S_left(__x) : _S_right(__x); 15726: } 15726: return _Res(__x, __y); 15726: } 15726: 15726: template 15726: 15726: template 15726: 15726: pair::iterator, bool> 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: 15726: _M_insert_unique(_Arg&& __v) 15726: 15726: 15726: 15726: { 15726: typedef pair _Res; 15726: pair<_Base_ptr, _Base_ptr> __res 15726: = _M_get_insert_unique_pos(_KeyOfValue()(__v)); 15726: 15726: if (__res.second) 15726: { 15726: _Alloc_node __an(*this); 15726: return _Res(_M_insert_(__res.first, __res.second, 15726: std::forward<_Arg>(__v), __an), 15726: true); 15726: } 15726: 15726: return _Res(iterator(__res.first), false); 15726: } 15726: 15726: template 15726: 15726: template 15726: 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: 15726: _M_insert_equal(_Arg&& __v) 15726: 15726: 15726: 15726: { 15726: pair<_Base_ptr, _Base_ptr> __res 15726: = _M_get_insert_equal_pos(_KeyOfValue()(__v)); 15726: _Alloc_node __an(*this); 15726: return _M_insert_(__res.first, __res.second, 15726: std::forward<_Arg>(__v), __an); 15726: } 15726: 15726: template 15726: pair::_Base_ptr, 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, 15726: _Compare, _Alloc>::_Base_ptr> 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_get_insert_hint_unique_pos(const_iterator __position, 15726: const key_type& __k) 15726: { 15726: iterator __pos = __position._M_const_cast(); 15726: typedef pair<_Base_ptr, _Base_ptr> _Res; 15726: 15726: 15726: if (__pos._M_node == _M_end()) 15726: { 15726: if (size() > 0 15726: && _M_impl._M_key_compare(_S_key(_M_rightmost()), __k)) 15726: return _Res(0, _M_rightmost()); 15726: else 15726: return _M_get_insert_unique_pos(__k); 15726: } 15726: else if (_M_impl._M_key_compare(__k, _S_key(__pos._M_node))) 15726: { 15726: 15726: iterator __before = __pos; 15726: if (__pos._M_node == _M_leftmost()) 15726: return _Res(_M_leftmost(), _M_leftmost()); 15726: else if (_M_impl._M_key_compare(_S_key((--__before)._M_node), __k)) 15726: { 15726: if (_S_right(__before._M_node) == 0) 15726: return _Res(0, __before._M_node); 15726: else 15726: return _Res(__pos._M_node, __pos._M_node); 15726: } 15726: else 15726: return _M_get_insert_unique_pos(__k); 15726: } 15726: else if (_M_impl._M_key_compare(_S_key(__pos._M_node), __k)) 15726: { 15726: 15726: iterator __after = __pos; 15726: if (__pos._M_node == _M_rightmost()) 15726: return _Res(0, _M_rightmost()); 15726: else if (_M_impl._M_key_compare(__k, _S_key((++__after)._M_node))) 15726: { 15726: if (_S_right(__pos._M_node) == 0) 15726: return _Res(0, __pos._M_node); 15726: else 15726: return _Res(__after._M_node, __after._M_node); 15726: } 15726: else 15726: return _M_get_insert_unique_pos(__k); 15726: } 15726: else 15726: 15726: return _Res(__pos._M_node, 0); 15726: } 15726: 15726: template 15726: 15726: template 15726: 15726: 15726: 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_insert_unique_(const_iterator __position, 15726: 15726: _Arg&& __v, 15726: 15726: 15726: 15726: _NodeGen& __node_gen) 15726: { 15726: pair<_Base_ptr, _Base_ptr> __res 15726: = _M_get_insert_hint_unique_pos(__position, _KeyOfValue()(__v)); 15726: 15726: if (__res.second) 15726: return _M_insert_(__res.first, __res.second, 15726: std::forward<_Arg>(__v), 15726: __node_gen); 15726: return iterator(__res.first); 15726: } 15726: 15726: template 15726: pair::_Base_ptr, 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, 15726: _Compare, _Alloc>::_Base_ptr> 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_get_insert_hint_equal_pos(const_iterator __position, const key_type& __k) 15726: { 15726: iterator __pos = __position._M_const_cast(); 15726: typedef pair<_Base_ptr, _Base_ptr> _Res; 15726: 15726: 15726: if (__pos._M_node == _M_end()) 15726: { 15726: if (size() > 0 15726: && !_M_impl._M_key_compare(__k, _S_key(_M_rightmost()))) 15726: return _Res(0, _M_rightmost()); 15726: else 15726: return _M_get_insert_equal_pos(__k); 15726: } 15726: else if (!_M_impl._M_key_compare(_S_key(__pos._M_node), __k)) 15726: { 15726: 15726: iterator __before = __pos; 15726: if (__pos._M_node == _M_leftmost()) 15726: return _Res(_M_leftmost(), _M_leftmost()); 15726: else if (!_M_impl._M_key_compare(__k, _S_key((--__before)._M_node))) 15726: { 15726: if (_S_right(__before._M_node) == 0) 15726: return _Res(0, __before._M_node); 15726: else 15726: return _Res(__pos._M_node, __pos._M_node); 15726: } 15726: else 15726: return _M_get_insert_equal_pos(__k); 15726: } 15726: else 15726: { 15726: 15726: iterator __after = __pos; 15726: if (__pos._M_node == _M_rightmost()) 15726: return _Res(0, _M_rightmost()); 15726: else if (!_M_impl._M_key_compare(_S_key((++__after)._M_node), __k)) 15726: { 15726: if (_S_right(__pos._M_node) == 0) 15726: return _Res(0, __pos._M_node); 15726: else 15726: return _Res(__after._M_node, __after._M_node); 15726: } 15726: else 15726: return _Res(0, 0); 15726: } 15726: } 15726: 15726: template 15726: 15726: template 15726: 15726: 15726: 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_insert_equal_(const_iterator __position, 15726: 15726: _Arg&& __v, 15726: 15726: 15726: 15726: _NodeGen& __node_gen) 15726: { 15726: pair<_Base_ptr, _Base_ptr> __res 15726: = _M_get_insert_hint_equal_pos(__position, _KeyOfValue()(__v)); 15726: 15726: if (__res.second) 15726: return _M_insert_(__res.first, __res.second, 15726: std::forward<_Arg>(__v), 15726: __node_gen); 15726: 15726: return _M_insert_equal_lower(std::forward<_Arg>(__v)); 15726: } 15726: 15726: 15726: template 15726: auto 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_insert_node(_Base_ptr __x, _Base_ptr __p, _Link_type __z) 15726: -> iterator 15726: { 15726: bool __insert_left = (__x != 0 || __p == _M_end() 15726: || _M_impl._M_key_compare(_S_key(__z), 15726: _S_key(__p))); 15726: 15726: _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, 15726: this->_M_impl._M_header); 15726: ++_M_impl._M_node_count; 15726: return iterator(__z); 15726: } 15726: 15726: template 15726: auto 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_insert_lower_node(_Base_ptr __p, _Link_type __z) 15726: -> iterator 15726: { 15726: bool __insert_left = (__p == _M_end() 15726: || !_M_impl._M_key_compare(_S_key(__p), 15726: _S_key(__z))); 15726: 15726: _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, 15726: this->_M_impl._M_header); 15726: ++_M_impl._M_node_count; 15726: return iterator(__z); 15726: } 15726: 15726: template 15726: auto 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_insert_equal_lower_node(_Link_type __z) 15726: -> iterator 15726: { 15726: _Link_type __x = _M_begin(); 15726: _Base_ptr __y = _M_end(); 15726: while (__x != 0) 15726: { 15726: __y = __x; 15726: __x = !_M_impl._M_key_compare(_S_key(__x), _S_key(__z)) ? 15726: _S_left(__x) : _S_right(__x); 15726: } 15726: return _M_insert_lower_node(__y, __z); 15726: } 15726: 15726: template 15726: template 15726: auto 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_emplace_unique(_Args&&... __args) 15726: -> pair 15726: { 15726: _Auto_node __z(*this, std::forward<_Args>(__args)...); 15726: auto __res = _M_get_insert_unique_pos(__z._M_key()); 15726: if (__res.second) 15726: return {__z._M_insert(__res), true}; 15726: return {iterator(__res.first), false}; 15726: } 15726: 15726: template 15726: template 15726: auto 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_emplace_equal(_Args&&... __args) 15726: -> iterator 15726: { 15726: _Auto_node __z(*this, std::forward<_Args>(__args)...); 15726: auto __res = _M_get_insert_equal_pos(__z._M_key()); 15726: return __z._M_insert(__res); 15726: } 15726: 15726: template 15726: template 15726: auto 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_emplace_hint_unique(const_iterator __pos, _Args&&... __args) 15726: -> iterator 15726: { 15726: _Auto_node __z(*this, std::forward<_Args>(__args)...); 15726: auto __res = _M_get_insert_hint_unique_pos(__pos, __z._M_key()); 15726: if (__res.second) 15726: return __z._M_insert(__res); 15726: return iterator(__res.first); 15726: } 15726: 15726: template 15726: template 15726: auto 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_emplace_hint_equal(const_iterator __pos, _Args&&... __args) 15726: -> iterator 15726: { 15726: _Auto_node __z(*this, std::forward<_Args>(__args)...); 15726: auto __res = _M_get_insert_hint_equal_pos(__pos, __z._M_key()); 15726: if (__res.second) 15726: return __z._M_insert(__res); 15726: return __z._M_insert_equal_lower(); 15726: } 15726: 15726: 15726: 15726: template 15726: void 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_erase_aux(const_iterator __position) 15726: { 15726: _Link_type __y = 15726: static_cast<_Link_type>(_Rb_tree_rebalance_for_erase 15726: (const_cast<_Base_ptr>(__position._M_node), 15726: this->_M_impl._M_header)); 15726: _M_drop_node(__y); 15726: --_M_impl._M_node_count; 15726: } 15726: 15726: template 15726: void 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: _M_erase_aux(const_iterator __first, const_iterator __last) 15726: { 15726: if (__first == begin() && __last == end()) 15726: clear(); 15726: else 15726: while (__first != __last) 15726: _M_erase_aux(__first++); 15726: } 15726: 15726: template 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: erase(const _Key& __x) 15726: { 15726: pair __p = equal_range(__x); 15726: const size_type __old_size = size(); 15726: _M_erase_aux(__p.first, __p.second); 15726: return __old_size - size(); 15726: } 15726: 15726: template 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, 15726: _Compare, _Alloc>::iterator 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: find(const _Key& __k) 15726: { 15726: iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k); 15726: return (__j == end() 15726: || _M_impl._M_key_compare(__k, 15726: _S_key(__j._M_node))) ? end() : __j; 15726: } 15726: 15726: template 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, 15726: _Compare, _Alloc>::const_iterator 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: find(const _Key& __k) const 15726: { 15726: const_iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k); 15726: return (__j == end() 15726: || _M_impl._M_key_compare(__k, 15726: _S_key(__j._M_node))) ? end() : __j; 15726: } 15726: 15726: template 15726: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type 15726: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: 15726: count(const _Key& __k) const 15726: { 15726: pair __p = equal_range(__k); 15726: const size_type __n = std::distance(__p.first, __p.second); 15726: return __n; 15726: } 15726: 15726: __attribute__ ((__pure__)) unsigned int 15726: _Rb_tree_black_count(const _Rb_tree_node_base* __node, 15726: const _Rb_tree_node_base* __root) throw (); 15726: 15726: template 15726: bool 15726: _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::__rb_verify() const 15726: { 15726: if (_M_impl._M_node_count == 0 || begin() == end()) 15726: return _M_impl._M_node_count == 0 && begin() == end() 15726: && this->_M_impl._M_header._M_left == _M_end() 15726: && this->_M_impl._M_header._M_right == _M_end(); 15726: 15726: unsigned int __len = _Rb_tree_black_count(_M_leftmost(), _M_root()); 15726: for (const_iterator __it = begin(); __it != end(); ++__it) 15726: { 15726: _Const_Link_type __x = static_cast<_Const_Link_type>(__it._M_node); 15726: _Const_Link_type __L = _S_left(__x); 15726: _Const_Link_type __R = _S_right(__x); 15726: 15726: if (__x->_M_color == _S_red) 15726: if ((__L && __L->_M_color == _S_red) 15726: || (__R && __R->_M_color == _S_red)) 15726: return false; 15726: 15726: if (__L && _M_impl._M_key_compare(_S_key(__x), _S_key(__L))) 15726: return false; 15726: if (__R && _M_impl._M_key_compare(_S_key(__R), _S_key(__x))) 15726: return false; 15726: 15726: if (!__L && !__R && _Rb_tree_black_count(__x, _M_root()) != __len) 15726: return false; 15726: } 15726: 15726: if (_M_leftmost() != _Rb_tree_node_base::_S_minimum(_M_root())) 15726: return false; 15726: if (_M_rightmost() != _Rb_tree_node_base::_S_maximum(_M_root())) 15726: return false; 15726: return true; 15726: } 15726: 15726: 15726: 15726: template 15726: struct _Rb_tree_merge_helper<_Rb_tree<_Key, _Val, _Sel, _Cmp1, _Alloc>, 15726: _Cmp2> 15726: { 15726: private: 15726: friend class _Rb_tree<_Key, _Val, _Sel, _Cmp1, _Alloc>; 15726: 15726: static auto& 15726: _S_get_impl(_Rb_tree<_Key, _Val, _Sel, _Cmp2, _Alloc>& __tree) 15726: { return __tree._M_impl; } 15726: }; 15726: 15726: 15726: 15726: } 15726: # 63 "/usr/include/c++/13/map" 2 3 15726: # 1 "/usr/include/c++/13/bits/stl_map.h" 1 3 15726: # 66 "/usr/include/c++/13/bits/stl_map.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: template 15726: class multimap; 15726: # 100 "/usr/include/c++/13/bits/stl_map.h" 3 15726: template , 15726: typename _Alloc = std::allocator > > 15726: class map 15726: { 15726: public: 15726: typedef _Key key_type; 15726: typedef _Tp mapped_type; 15726: typedef std::pair value_type; 15726: typedef _Compare key_compare; 15726: typedef _Alloc allocator_type; 15726: 15726: private: 15726: # 130 "/usr/include/c++/13/bits/stl_map.h" 3 15726: public: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: class value_compare 15726: : public std::binary_function 15726: { 15726: friend class map<_Key, _Tp, _Compare, _Alloc>; 15726: protected: 15726: _Compare comp; 15726: 15726: value_compare(_Compare __c) 15726: : comp(__c) { } 15726: 15726: public: 15726: bool operator()(const value_type& __x, const value_type& __y) const 15726: { return comp(__x.first, __y.first); } 15726: }; 15726: #pragma GCC diagnostic pop 15726: 15726: private: 15726: 15726: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 15726: rebind::other _Pair_alloc_type; 15726: 15726: typedef _Rb_tree, 15726: key_compare, _Pair_alloc_type> _Rep_type; 15726: 15726: 15726: _Rep_type _M_t; 15726: 15726: typedef __gnu_cxx::__alloc_traits<_Pair_alloc_type> _Alloc_traits; 15726: 15726: 15726: template> 15726: static constexpr bool __usable_key 15726: = __or_v, 15726: __and_, is_scalar<_Key>>>; 15726: 15726: 15726: public: 15726: 15726: 15726: typedef typename _Alloc_traits::pointer pointer; 15726: typedef typename _Alloc_traits::const_pointer const_pointer; 15726: typedef typename _Alloc_traits::reference reference; 15726: typedef typename _Alloc_traits::const_reference const_reference; 15726: typedef typename _Rep_type::iterator iterator; 15726: typedef typename _Rep_type::const_iterator const_iterator; 15726: typedef typename _Rep_type::size_type size_type; 15726: typedef typename _Rep_type::difference_type difference_type; 15726: typedef typename _Rep_type::reverse_iterator reverse_iterator; 15726: typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; 15726: 15726: 15726: using node_type = typename _Rep_type::node_type; 15726: using insert_return_type = typename _Rep_type::insert_return_type; 15726: # 197 "/usr/include/c++/13/bits/stl_map.h" 3 15726: map() = default; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: map(const _Compare& __comp, 15726: const allocator_type& __a = allocator_type()) 15726: : _M_t(__comp, _Pair_alloc_type(__a)) { } 15726: # 219 "/usr/include/c++/13/bits/stl_map.h" 3 15726: map(const map&) = default; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: map(map&&) = default; 15726: # 240 "/usr/include/c++/13/bits/stl_map.h" 3 15726: map(initializer_list __l, 15726: const _Compare& __comp = _Compare(), 15726: const allocator_type& __a = allocator_type()) 15726: : _M_t(__comp, _Pair_alloc_type(__a)) 15726: { _M_t._M_insert_range_unique(__l.begin(), __l.end()); } 15726: 15726: 15726: explicit 15726: map(const allocator_type& __a) 15726: : _M_t(_Pair_alloc_type(__a)) { } 15726: 15726: 15726: map(const map& __m, const __type_identity_t& __a) 15726: : _M_t(__m._M_t, _Pair_alloc_type(__a)) { } 15726: 15726: 15726: map(map&& __m, const __type_identity_t& __a) 15726: noexcept(is_nothrow_copy_constructible<_Compare>::value 15726: && _Alloc_traits::_S_always_equal()) 15726: : _M_t(std::move(__m._M_t), _Pair_alloc_type(__a)) { } 15726: 15726: 15726: map(initializer_list __l, const allocator_type& __a) 15726: : _M_t(_Pair_alloc_type(__a)) 15726: { _M_t._M_insert_range_unique(__l.begin(), __l.end()); } 15726: 15726: 15726: template 15726: map(_InputIterator __first, _InputIterator __last, 15726: const allocator_type& __a) 15726: : _M_t(_Pair_alloc_type(__a)) 15726: { _M_t._M_insert_range_unique(__first, __last); } 15726: # 284 "/usr/include/c++/13/bits/stl_map.h" 3 15726: template 15726: map(_InputIterator __first, _InputIterator __last) 15726: : _M_t() 15726: { _M_t._M_insert_range_unique(__first, __last); } 15726: # 301 "/usr/include/c++/13/bits/stl_map.h" 3 15726: template 15726: map(_InputIterator __first, _InputIterator __last, 15726: const _Compare& __comp, 15726: const allocator_type& __a = allocator_type()) 15726: : _M_t(__comp, _Pair_alloc_type(__a)) 15726: { _M_t._M_insert_range_unique(__first, __last); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ~map() = default; 15726: # 330 "/usr/include/c++/13/bits/stl_map.h" 3 15726: map& 15726: operator=(const map&) = default; 15726: 15726: 15726: map& 15726: operator=(map&&) = default; 15726: # 348 "/usr/include/c++/13/bits/stl_map.h" 3 15726: map& 15726: operator=(initializer_list __l) 15726: { 15726: _M_t._M_assign_unique(__l.begin(), __l.end()); 15726: return *this; 15726: } 15726: 15726: 15726: 15726: allocator_type 15726: get_allocator() const noexcept 15726: { return allocator_type(_M_t.get_allocator()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: iterator 15726: begin() noexcept 15726: { return _M_t.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_iterator 15726: begin() const noexcept 15726: { return _M_t.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: iterator 15726: end() noexcept 15726: { return _M_t.end(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_iterator 15726: end() const noexcept 15726: { return _M_t.end(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: reverse_iterator 15726: rbegin() noexcept 15726: { return _M_t.rbegin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_reverse_iterator 15726: rbegin() const noexcept 15726: { return _M_t.rbegin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: reverse_iterator 15726: rend() noexcept 15726: { return _M_t.rend(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_reverse_iterator 15726: rend() const noexcept 15726: { return _M_t.rend(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_iterator 15726: cbegin() const noexcept 15726: { return _M_t.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_iterator 15726: cend() const noexcept 15726: { return _M_t.end(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_reverse_iterator 15726: crbegin() const noexcept 15726: { return _M_t.rbegin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_reverse_iterator 15726: crend() const noexcept 15726: { return _M_t.rend(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] bool 15726: empty() const noexcept 15726: { return _M_t.empty(); } 15726: 15726: 15726: size_type 15726: size() const noexcept 15726: { return _M_t.size(); } 15726: 15726: 15726: size_type 15726: max_size() const noexcept 15726: { return _M_t.max_size(); } 15726: # 503 "/usr/include/c++/13/bits/stl_map.h" 3 15726: mapped_type& 15726: operator[](const key_type& __k) 15726: { 15726: 15726: 15726: 15726: iterator __i = lower_bound(__k); 15726: 15726: if (__i == end() || key_comp()(__k, (*__i).first)) 15726: 15726: __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct, 15726: std::tuple(__k), 15726: std::tuple<>()); 15726: 15726: 15726: 15726: return (*__i).second; 15726: } 15726: 15726: 15726: mapped_type& 15726: operator[](key_type&& __k) 15726: { 15726: 15726: 15726: 15726: iterator __i = lower_bound(__k); 15726: 15726: if (__i == end() || key_comp()(__k, (*__i).first)) 15726: __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct, 15726: std::forward_as_tuple(std::move(__k)), 15726: std::tuple<>()); 15726: return (*__i).second; 15726: } 15726: # 548 "/usr/include/c++/13/bits/stl_map.h" 3 15726: mapped_type& 15726: at(const key_type& __k) 15726: { 15726: iterator __i = lower_bound(__k); 15726: if (__i == end() || key_comp()(__k, (*__i).first)) 15726: __throw_out_of_range(("map::at")); 15726: return (*__i).second; 15726: } 15726: 15726: const mapped_type& 15726: at(const key_type& __k) const 15726: { 15726: const_iterator __i = lower_bound(__k); 15726: if (__i == end() || key_comp()(__k, (*__i).first)) 15726: __throw_out_of_range(("map::at")); 15726: return (*__i).second; 15726: } 15726: # 586 "/usr/include/c++/13/bits/stl_map.h" 3 15726: template 15726: std::pair 15726: emplace(_Args&&... __args) 15726: { 15726: 15726: if constexpr (sizeof...(_Args) == 2) 15726: if constexpr (is_same_v>) 15726: { 15726: auto&& [__a, __v] = pair<_Args&...>(__args...); 15726: if constexpr (__usable_key) 15726: { 15726: const key_type& __k = __a; 15726: iterator __i = lower_bound(__k); 15726: if (__i == end() || key_comp()(__k, (*__i).first)) 15726: { 15726: __i = emplace_hint(__i, std::forward<_Args>(__args)...); 15726: return {__i, true}; 15726: } 15726: return {__i, false}; 15726: } 15726: } 15726: 15726: return _M_t._M_emplace_unique(std::forward<_Args>(__args)...); 15726: } 15726: # 636 "/usr/include/c++/13/bits/stl_map.h" 3 15726: template 15726: iterator 15726: emplace_hint(const_iterator __pos, _Args&&... __args) 15726: { 15726: return _M_t._M_emplace_hint_unique(__pos, 15726: std::forward<_Args>(__args)...); 15726: } 15726: 15726: 15726: 15726: 15726: node_type 15726: extract(const_iterator __pos) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__pos != end())) __builtin_unreachable(); } while (false); 15726: return _M_t.extract(__pos); 15726: } 15726: 15726: 15726: node_type 15726: extract(const key_type& __x) 15726: { return _M_t.extract(__x); } 15726: 15726: 15726: insert_return_type 15726: insert(node_type&& __nh) 15726: { return _M_t._M_reinsert_node_unique(std::move(__nh)); } 15726: 15726: 15726: iterator 15726: insert(const_iterator __hint, node_type&& __nh) 15726: { return _M_t._M_reinsert_node_hint_unique(__hint, std::move(__nh)); } 15726: 15726: template 15726: friend struct std::_Rb_tree_merge_helper; 15726: 15726: template 15726: void 15726: merge(map<_Key, _Tp, _Cmp2, _Alloc>& __source) 15726: { 15726: using _Merge_helper = _Rb_tree_merge_helper; 15726: _M_t._M_merge_unique(_Merge_helper::_S_get_tree(__source)); 15726: } 15726: 15726: template 15726: void 15726: merge(map<_Key, _Tp, _Cmp2, _Alloc>&& __source) 15726: { merge(__source); } 15726: 15726: template 15726: void 15726: merge(multimap<_Key, _Tp, _Cmp2, _Alloc>& __source) 15726: { 15726: using _Merge_helper = _Rb_tree_merge_helper; 15726: _M_t._M_merge_unique(_Merge_helper::_S_get_tree(__source)); 15726: } 15726: 15726: template 15726: void 15726: merge(multimap<_Key, _Tp, _Cmp2, _Alloc>&& __source) 15726: { merge(__source); } 15726: # 721 "/usr/include/c++/13/bits/stl_map.h" 3 15726: template 15726: pair 15726: try_emplace(const key_type& __k, _Args&&... __args) 15726: { 15726: iterator __i = lower_bound(__k); 15726: if (__i == end() || key_comp()(__k, (*__i).first)) 15726: { 15726: __i = emplace_hint(__i, std::piecewise_construct, 15726: std::forward_as_tuple(__k), 15726: std::forward_as_tuple( 15726: std::forward<_Args>(__args)...)); 15726: return {__i, true}; 15726: } 15726: return {__i, false}; 15726: } 15726: 15726: 15726: template 15726: pair 15726: try_emplace(key_type&& __k, _Args&&... __args) 15726: { 15726: iterator __i = lower_bound(__k); 15726: if (__i == end() || key_comp()(__k, (*__i).first)) 15726: { 15726: __i = emplace_hint(__i, std::piecewise_construct, 15726: std::forward_as_tuple(std::move(__k)), 15726: std::forward_as_tuple( 15726: std::forward<_Args>(__args)...)); 15726: return {__i, true}; 15726: } 15726: return {__i, false}; 15726: } 15726: # 781 "/usr/include/c++/13/bits/stl_map.h" 3 15726: template 15726: iterator 15726: try_emplace(const_iterator __hint, const key_type& __k, 15726: _Args&&... __args) 15726: { 15726: iterator __i; 15726: auto __true_hint = _M_t._M_get_insert_hint_unique_pos(__hint, __k); 15726: if (__true_hint.second) 15726: __i = emplace_hint(iterator(__true_hint.second), 15726: std::piecewise_construct, 15726: std::forward_as_tuple(__k), 15726: std::forward_as_tuple( 15726: std::forward<_Args>(__args)...)); 15726: else 15726: __i = iterator(__true_hint.first); 15726: return __i; 15726: } 15726: 15726: 15726: template 15726: iterator 15726: try_emplace(const_iterator __hint, key_type&& __k, _Args&&... __args) 15726: { 15726: iterator __i; 15726: auto __true_hint = _M_t._M_get_insert_hint_unique_pos(__hint, __k); 15726: if (__true_hint.second) 15726: __i = emplace_hint(iterator(__true_hint.second), 15726: std::piecewise_construct, 15726: std::forward_as_tuple(std::move(__k)), 15726: std::forward_as_tuple( 15726: std::forward<_Args>(__args)...)); 15726: else 15726: __i = iterator(__true_hint.first); 15726: return __i; 15726: } 15726: # 834 "/usr/include/c++/13/bits/stl_map.h" 3 15726: std::pair 15726: insert(const value_type& __x) 15726: { return _M_t._M_insert_unique(__x); } 15726: 15726: 15726: 15726: 15726: std::pair 15726: insert(value_type&& __x) 15726: { return _M_t._M_insert_unique(std::move(__x)); } 15726: 15726: template 15726: __enable_if_t::value, 15726: pair> 15726: insert(_Pair&& __x) 15726: { 15726: 15726: using _P2 = remove_reference_t<_Pair>; 15726: if constexpr (__is_pair>) 15726: if constexpr (is_same_v>) 15726: if constexpr (__usable_key) 15726: { 15726: const key_type& __k = __x.first; 15726: iterator __i = lower_bound(__k); 15726: if (__i == end() || key_comp()(__k, (*__i).first)) 15726: { 15726: __i = emplace_hint(__i, std::forward<_Pair>(__x)); 15726: return {__i, true}; 15726: } 15726: return {__i, false}; 15726: } 15726: 15726: return _M_t._M_emplace_unique(std::forward<_Pair>(__x)); 15726: } 15726: # 879 "/usr/include/c++/13/bits/stl_map.h" 3 15726: void 15726: insert(std::initializer_list __list) 15726: { insert(__list.begin(), __list.end()); } 15726: # 908 "/usr/include/c++/13/bits/stl_map.h" 3 15726: iterator 15726: 15726: insert(const_iterator __position, const value_type& __x) 15726: 15726: 15726: 15726: { return _M_t._M_insert_unique_(__position, __x); } 15726: 15726: 15726: 15726: 15726: iterator 15726: insert(const_iterator __position, value_type&& __x) 15726: { return _M_t._M_insert_unique_(__position, std::move(__x)); } 15726: 15726: template 15726: __enable_if_t::value, iterator> 15726: insert(const_iterator __position, _Pair&& __x) 15726: { 15726: return _M_t._M_emplace_hint_unique(__position, 15726: std::forward<_Pair>(__x)); 15726: } 15726: # 941 "/usr/include/c++/13/bits/stl_map.h" 3 15726: template 15726: void 15726: insert(_InputIterator __first, _InputIterator __last) 15726: { _M_t._M_insert_range_unique(__first, __last); } 15726: # 966 "/usr/include/c++/13/bits/stl_map.h" 3 15726: template 15726: pair 15726: insert_or_assign(const key_type& __k, _Obj&& __obj) 15726: { 15726: iterator __i = lower_bound(__k); 15726: if (__i == end() || key_comp()(__k, (*__i).first)) 15726: { 15726: __i = emplace_hint(__i, std::piecewise_construct, 15726: std::forward_as_tuple(__k), 15726: std::forward_as_tuple( 15726: std::forward<_Obj>(__obj))); 15726: return {__i, true}; 15726: } 15726: (*__i).second = std::forward<_Obj>(__obj); 15726: return {__i, false}; 15726: } 15726: 15726: 15726: template 15726: pair 15726: insert_or_assign(key_type&& __k, _Obj&& __obj) 15726: { 15726: iterator __i = lower_bound(__k); 15726: if (__i == end() || key_comp()(__k, (*__i).first)) 15726: { 15726: __i = emplace_hint(__i, std::piecewise_construct, 15726: std::forward_as_tuple(std::move(__k)), 15726: std::forward_as_tuple( 15726: std::forward<_Obj>(__obj))); 15726: return {__i, true}; 15726: } 15726: (*__i).second = std::forward<_Obj>(__obj); 15726: return {__i, false}; 15726: } 15726: # 1021 "/usr/include/c++/13/bits/stl_map.h" 3 15726: template 15726: iterator 15726: insert_or_assign(const_iterator __hint, 15726: const key_type& __k, _Obj&& __obj) 15726: { 15726: iterator __i; 15726: auto __true_hint = _M_t._M_get_insert_hint_unique_pos(__hint, __k); 15726: if (__true_hint.second) 15726: { 15726: return emplace_hint(iterator(__true_hint.second), 15726: std::piecewise_construct, 15726: std::forward_as_tuple(__k), 15726: std::forward_as_tuple( 15726: std::forward<_Obj>(__obj))); 15726: } 15726: __i = iterator(__true_hint.first); 15726: (*__i).second = std::forward<_Obj>(__obj); 15726: return __i; 15726: } 15726: 15726: 15726: template 15726: iterator 15726: insert_or_assign(const_iterator __hint, key_type&& __k, _Obj&& __obj) 15726: { 15726: iterator __i; 15726: auto __true_hint = _M_t._M_get_insert_hint_unique_pos(__hint, __k); 15726: if (__true_hint.second) 15726: { 15726: return emplace_hint(iterator(__true_hint.second), 15726: std::piecewise_construct, 15726: std::forward_as_tuple(std::move(__k)), 15726: std::forward_as_tuple( 15726: std::forward<_Obj>(__obj))); 15726: } 15726: __i = iterator(__true_hint.first); 15726: (*__i).second = std::forward<_Obj>(__obj); 15726: return __i; 15726: } 15726: # 1080 "/usr/include/c++/13/bits/stl_map.h" 3 15726: iterator 15726: erase(const_iterator __position) 15726: { return _M_t.erase(__position); } 15726: 15726: 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: iterator 15726: erase(iterator __position) 15726: { return _M_t.erase(__position); } 15726: # 1117 "/usr/include/c++/13/bits/stl_map.h" 3 15726: size_type 15726: erase(const key_type& __x) 15726: { return _M_t.erase(__x); } 15726: # 1137 "/usr/include/c++/13/bits/stl_map.h" 3 15726: iterator 15726: erase(const_iterator __first, const_iterator __last) 15726: { return _M_t.erase(__first, __last); } 15726: # 1171 "/usr/include/c++/13/bits/stl_map.h" 3 15726: void 15726: swap(map& __x) 15726: noexcept(__is_nothrow_swappable<_Compare>::value) 15726: { _M_t.swap(__x._M_t); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: clear() noexcept 15726: { _M_t.clear(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: key_compare 15726: key_comp() const 15726: { return _M_t.key_comp(); } 15726: 15726: 15726: 15726: 15726: 15726: value_compare 15726: value_comp() const 15726: { return value_compare(_M_t.key_comp()); } 15726: # 1218 "/usr/include/c++/13/bits/stl_map.h" 3 15726: iterator 15726: find(const key_type& __x) 15726: { return _M_t.find(__x); } 15726: 15726: 15726: template 15726: auto 15726: find(const _Kt& __x) -> decltype(_M_t._M_find_tr(__x)) 15726: { return _M_t._M_find_tr(__x); } 15726: # 1243 "/usr/include/c++/13/bits/stl_map.h" 3 15726: const_iterator 15726: find(const key_type& __x) const 15726: { return _M_t.find(__x); } 15726: 15726: 15726: template 15726: auto 15726: find(const _Kt& __x) const -> decltype(_M_t._M_find_tr(__x)) 15726: { return _M_t._M_find_tr(__x); } 15726: # 1264 "/usr/include/c++/13/bits/stl_map.h" 3 15726: size_type 15726: count(const key_type& __x) const 15726: { return _M_t.find(__x) == _M_t.end() ? 0 : 1; } 15726: 15726: 15726: template 15726: auto 15726: count(const _Kt& __x) const -> decltype(_M_t._M_count_tr(__x)) 15726: { return _M_t._M_count_tr(__x); } 15726: # 1307 "/usr/include/c++/13/bits/stl_map.h" 3 15726: iterator 15726: lower_bound(const key_type& __x) 15726: { return _M_t.lower_bound(__x); } 15726: 15726: 15726: template 15726: auto 15726: lower_bound(const _Kt& __x) 15726: -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) 15726: { return iterator(_M_t._M_lower_bound_tr(__x)); } 15726: # 1332 "/usr/include/c++/13/bits/stl_map.h" 3 15726: const_iterator 15726: lower_bound(const key_type& __x) const 15726: { return _M_t.lower_bound(__x); } 15726: 15726: 15726: template 15726: auto 15726: lower_bound(const _Kt& __x) const 15726: -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x))) 15726: { return const_iterator(_M_t._M_lower_bound_tr(__x)); } 15726: # 1352 "/usr/include/c++/13/bits/stl_map.h" 3 15726: iterator 15726: upper_bound(const key_type& __x) 15726: { return _M_t.upper_bound(__x); } 15726: 15726: 15726: template 15726: auto 15726: upper_bound(const _Kt& __x) 15726: -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) 15726: { return iterator(_M_t._M_upper_bound_tr(__x)); } 15726: # 1372 "/usr/include/c++/13/bits/stl_map.h" 3 15726: const_iterator 15726: upper_bound(const key_type& __x) const 15726: { return _M_t.upper_bound(__x); } 15726: 15726: 15726: template 15726: auto 15726: upper_bound(const _Kt& __x) const 15726: -> decltype(const_iterator(_M_t._M_upper_bound_tr(__x))) 15726: { return const_iterator(_M_t._M_upper_bound_tr(__x)); } 15726: # 1401 "/usr/include/c++/13/bits/stl_map.h" 3 15726: std::pair 15726: equal_range(const key_type& __x) 15726: { return _M_t.equal_range(__x); } 15726: 15726: 15726: template 15726: auto 15726: equal_range(const _Kt& __x) 15726: -> decltype(pair(_M_t._M_equal_range_tr(__x))) 15726: { return pair(_M_t._M_equal_range_tr(__x)); } 15726: # 1430 "/usr/include/c++/13/bits/stl_map.h" 3 15726: std::pair 15726: equal_range(const key_type& __x) const 15726: { return _M_t.equal_range(__x); } 15726: 15726: 15726: template 15726: auto 15726: equal_range(const _Kt& __x) const 15726: -> decltype(pair( 15726: _M_t._M_equal_range_tr(__x))) 15726: { 15726: return pair( 15726: _M_t._M_equal_range_tr(__x)); 15726: } 15726: 15726: 15726: 15726: template 15726: friend bool 15726: operator==(const map<_K1, _T1, _C1, _A1>&, 15726: const map<_K1, _T1, _C1, _A1>&); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: friend bool 15726: operator<(const map<_K1, _T1, _C1, _A1>&, 15726: const map<_K1, _T1, _C1, _A1>&); 15726: 15726: }; 15726: 15726: 15726: 15726: 15726: template>, 15726: typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, 15726: typename = _RequireInputIter<_InputIterator>, 15726: typename = _RequireNotAllocator<_Compare>, 15726: typename = _RequireAllocator<_Allocator>> 15726: map(_InputIterator, _InputIterator, 15726: _Compare = _Compare(), _Allocator = _Allocator()) 15726: -> map<__iter_key_t<_InputIterator>, __iter_val_t<_InputIterator>, 15726: _Compare, _Allocator>; 15726: 15726: template, 15726: typename _Allocator = allocator>, 15726: typename = _RequireNotAllocator<_Compare>, 15726: typename = _RequireAllocator<_Allocator>> 15726: map(initializer_list>, 15726: _Compare = _Compare(), _Allocator = _Allocator()) 15726: -> map<_Key, _Tp, _Compare, _Allocator>; 15726: 15726: template , 15726: typename = _RequireAllocator<_Allocator>> 15726: map(_InputIterator, _InputIterator, _Allocator) 15726: -> map<__iter_key_t<_InputIterator>, __iter_val_t<_InputIterator>, 15726: less<__iter_key_t<_InputIterator>>, _Allocator>; 15726: 15726: template> 15726: map(initializer_list>, _Allocator) 15726: -> map<_Key, _Tp, less<_Key>, _Allocator>; 15726: # 1511 "/usr/include/c++/13/bits/stl_map.h" 3 15726: template 15726: inline bool 15726: operator==(const map<_Key, _Tp, _Compare, _Alloc>& __x, 15726: const map<_Key, _Tp, _Compare, _Alloc>& __y) 15726: { return __x._M_t == __y._M_t; } 15726: # 1549 "/usr/include/c++/13/bits/stl_map.h" 3 15726: template 15726: inline bool 15726: operator<(const map<_Key, _Tp, _Compare, _Alloc>& __x, 15726: const map<_Key, _Tp, _Compare, _Alloc>& __y) 15726: { return __x._M_t < __y._M_t; } 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const map<_Key, _Tp, _Compare, _Alloc>& __x, 15726: const map<_Key, _Tp, _Compare, _Alloc>& __y) 15726: { return !(__x == __y); } 15726: 15726: 15726: template 15726: inline bool 15726: operator>(const map<_Key, _Tp, _Compare, _Alloc>& __x, 15726: const map<_Key, _Tp, _Compare, _Alloc>& __y) 15726: { return __y < __x; } 15726: 15726: 15726: template 15726: inline bool 15726: operator<=(const map<_Key, _Tp, _Compare, _Alloc>& __x, 15726: const map<_Key, _Tp, _Compare, _Alloc>& __y) 15726: { return !(__y < __x); } 15726: 15726: 15726: template 15726: inline bool 15726: operator>=(const map<_Key, _Tp, _Compare, _Alloc>& __x, 15726: const map<_Key, _Tp, _Compare, _Alloc>& __y) 15726: { return !(__x < __y); } 15726: 15726: 15726: 15726: template 15726: inline void 15726: swap(map<_Key, _Tp, _Compare, _Alloc>& __x, 15726: map<_Key, _Tp, _Compare, _Alloc>& __y) 15726: noexcept(noexcept(__x.swap(__y))) 15726: { __x.swap(__y); } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct 15726: _Rb_tree_merge_helper, 15726: _Cmp2> 15726: { 15726: private: 15726: friend class std::map<_Key, _Val, _Cmp1, _Alloc>; 15726: 15726: static auto& 15726: _S_get_tree(std::map<_Key, _Val, _Cmp2, _Alloc>& __map) 15726: { return __map._M_t; } 15726: 15726: static auto& 15726: _S_get_tree(std::multimap<_Key, _Val, _Cmp2, _Alloc>& __map) 15726: { return __map._M_t; } 15726: }; 15726: 15726: 15726: 15726: } 15726: # 64 "/usr/include/c++/13/map" 2 3 15726: # 1 "/usr/include/c++/13/bits/stl_multimap.h" 1 3 15726: # 64 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: template 15726: class map; 15726: # 98 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: template , 15726: typename _Alloc = std::allocator > > 15726: class multimap 15726: { 15726: public: 15726: typedef _Key key_type; 15726: typedef _Tp mapped_type; 15726: typedef std::pair value_type; 15726: typedef _Compare key_compare; 15726: typedef _Alloc allocator_type; 15726: 15726: private: 15726: # 129 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: public: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: class value_compare 15726: : public std::binary_function 15726: { 15726: friend class multimap<_Key, _Tp, _Compare, _Alloc>; 15726: protected: 15726: _Compare comp; 15726: 15726: value_compare(_Compare __c) 15726: : comp(__c) { } 15726: 15726: public: 15726: bool operator()(const value_type& __x, const value_type& __y) const 15726: { return comp(__x.first, __y.first); } 15726: }; 15726: #pragma GCC diagnostic pop 15726: 15726: private: 15726: 15726: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 15726: rebind::other _Pair_alloc_type; 15726: 15726: typedef _Rb_tree, 15726: key_compare, _Pair_alloc_type> _Rep_type; 15726: 15726: _Rep_type _M_t; 15726: 15726: typedef __gnu_cxx::__alloc_traits<_Pair_alloc_type> _Alloc_traits; 15726: 15726: public: 15726: 15726: 15726: typedef typename _Alloc_traits::pointer pointer; 15726: typedef typename _Alloc_traits::const_pointer const_pointer; 15726: typedef typename _Alloc_traits::reference reference; 15726: typedef typename _Alloc_traits::const_reference const_reference; 15726: typedef typename _Rep_type::iterator iterator; 15726: typedef typename _Rep_type::const_iterator const_iterator; 15726: typedef typename _Rep_type::size_type size_type; 15726: typedef typename _Rep_type::difference_type difference_type; 15726: typedef typename _Rep_type::reverse_iterator reverse_iterator; 15726: typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; 15726: 15726: 15726: using node_type = typename _Rep_type::node_type; 15726: # 187 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: multimap() = default; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: multimap(const _Compare& __comp, 15726: const allocator_type& __a = allocator_type()) 15726: : _M_t(__comp, _Pair_alloc_type(__a)) { } 15726: # 209 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: multimap(const multimap&) = default; 15726: # 218 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: multimap(multimap&&) = default; 15726: # 230 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: multimap(initializer_list __l, 15726: const _Compare& __comp = _Compare(), 15726: const allocator_type& __a = allocator_type()) 15726: : _M_t(__comp, _Pair_alloc_type(__a)) 15726: { _M_t._M_insert_range_equal(__l.begin(), __l.end()); } 15726: 15726: 15726: explicit 15726: multimap(const allocator_type& __a) 15726: : _M_t(_Pair_alloc_type(__a)) { } 15726: 15726: 15726: multimap(const multimap& __m, 15726: const __type_identity_t& __a) 15726: : _M_t(__m._M_t, _Pair_alloc_type(__a)) { } 15726: 15726: 15726: multimap(multimap&& __m, const __type_identity_t& __a) 15726: noexcept(is_nothrow_copy_constructible<_Compare>::value 15726: && _Alloc_traits::_S_always_equal()) 15726: : _M_t(std::move(__m._M_t), _Pair_alloc_type(__a)) { } 15726: 15726: 15726: multimap(initializer_list __l, const allocator_type& __a) 15726: : _M_t(_Pair_alloc_type(__a)) 15726: { _M_t._M_insert_range_equal(__l.begin(), __l.end()); } 15726: 15726: 15726: template 15726: multimap(_InputIterator __first, _InputIterator __last, 15726: const allocator_type& __a) 15726: : _M_t(_Pair_alloc_type(__a)) 15726: { _M_t._M_insert_range_equal(__first, __last); } 15726: # 274 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: template 15726: multimap(_InputIterator __first, _InputIterator __last) 15726: : _M_t() 15726: { _M_t._M_insert_range_equal(__first, __last); } 15726: # 290 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: template 15726: multimap(_InputIterator __first, _InputIterator __last, 15726: const _Compare& __comp, 15726: const allocator_type& __a = allocator_type()) 15726: : _M_t(__comp, _Pair_alloc_type(__a)) 15726: { _M_t._M_insert_range_equal(__first, __last); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ~multimap() = default; 15726: # 319 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: multimap& 15726: operator=(const multimap&) = default; 15726: 15726: 15726: multimap& 15726: operator=(multimap&&) = default; 15726: # 337 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: multimap& 15726: operator=(initializer_list __l) 15726: { 15726: _M_t._M_assign_equal(__l.begin(), __l.end()); 15726: return *this; 15726: } 15726: 15726: 15726: 15726: allocator_type 15726: get_allocator() const noexcept 15726: { return allocator_type(_M_t.get_allocator()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: iterator 15726: begin() noexcept 15726: { return _M_t.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_iterator 15726: begin() const noexcept 15726: { return _M_t.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: iterator 15726: end() noexcept 15726: { return _M_t.end(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_iterator 15726: end() const noexcept 15726: { return _M_t.end(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: reverse_iterator 15726: rbegin() noexcept 15726: { return _M_t.rbegin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_reverse_iterator 15726: rbegin() const noexcept 15726: { return _M_t.rbegin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: reverse_iterator 15726: rend() noexcept 15726: { return _M_t.rend(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_reverse_iterator 15726: rend() const noexcept 15726: { return _M_t.rend(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_iterator 15726: cbegin() const noexcept 15726: { return _M_t.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_iterator 15726: cend() const noexcept 15726: { return _M_t.end(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_reverse_iterator 15726: crbegin() const noexcept 15726: { return _M_t.rbegin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const_reverse_iterator 15726: crend() const noexcept 15726: { return _M_t.rend(); } 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] bool 15726: empty() const noexcept 15726: { return _M_t.empty(); } 15726: 15726: 15726: size_type 15726: size() const noexcept 15726: { return _M_t.size(); } 15726: 15726: 15726: size_type 15726: max_size() const noexcept 15726: { return _M_t.max_size(); } 15726: # 495 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: template 15726: iterator 15726: emplace(_Args&&... __args) 15726: { return _M_t._M_emplace_equal(std::forward<_Args>(__args)...); } 15726: # 522 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: template 15726: iterator 15726: emplace_hint(const_iterator __pos, _Args&&... __args) 15726: { 15726: return _M_t._M_emplace_hint_equal(__pos, 15726: std::forward<_Args>(__args)...); 15726: } 15726: # 544 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: iterator 15726: insert(const value_type& __x) 15726: { return _M_t._M_insert_equal(__x); } 15726: 15726: 15726: 15726: 15726: iterator 15726: insert(value_type&& __x) 15726: { return _M_t._M_insert_equal(std::move(__x)); } 15726: 15726: template 15726: __enable_if_t::value, iterator> 15726: insert(_Pair&& __x) 15726: { return _M_t._M_emplace_equal(std::forward<_Pair>(__x)); } 15726: # 583 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: iterator 15726: 15726: insert(const_iterator __position, const value_type& __x) 15726: 15726: 15726: 15726: { return _M_t._M_insert_equal_(__position, __x); } 15726: 15726: 15726: 15726: 15726: iterator 15726: insert(const_iterator __position, value_type&& __x) 15726: { return _M_t._M_insert_equal_(__position, std::move(__x)); } 15726: 15726: template 15726: __enable_if_t::value, iterator> 15726: insert(const_iterator __position, _Pair&& __x) 15726: { 15726: return _M_t._M_emplace_hint_equal(__position, 15726: std::forward<_Pair>(__x)); 15726: } 15726: # 617 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: template 15726: void 15726: insert(_InputIterator __first, _InputIterator __last) 15726: { _M_t._M_insert_range_equal(__first, __last); } 15726: # 630 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: void 15726: insert(initializer_list __l) 15726: { this->insert(__l.begin(), __l.end()); } 15726: 15726: 15726: 15726: 15726: node_type 15726: extract(const_iterator __pos) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__pos != end())) __builtin_unreachable(); } while (false); 15726: return _M_t.extract(__pos); 15726: } 15726: 15726: 15726: node_type 15726: extract(const key_type& __x) 15726: { return _M_t.extract(__x); } 15726: 15726: 15726: iterator 15726: insert(node_type&& __nh) 15726: { return _M_t._M_reinsert_node_equal(std::move(__nh)); } 15726: 15726: 15726: iterator 15726: insert(const_iterator __hint, node_type&& __nh) 15726: { return _M_t._M_reinsert_node_hint_equal(__hint, std::move(__nh)); } 15726: 15726: template 15726: friend struct std::_Rb_tree_merge_helper; 15726: 15726: template 15726: void 15726: merge(multimap<_Key, _Tp, _Cmp2, _Alloc>& __source) 15726: { 15726: using _Merge_helper = _Rb_tree_merge_helper; 15726: _M_t._M_merge_equal(_Merge_helper::_S_get_tree(__source)); 15726: } 15726: 15726: template 15726: void 15726: merge(multimap<_Key, _Tp, _Cmp2, _Alloc>&& __source) 15726: { merge(__source); } 15726: 15726: template 15726: void 15726: merge(map<_Key, _Tp, _Cmp2, _Alloc>& __source) 15726: { 15726: using _Merge_helper = _Rb_tree_merge_helper; 15726: _M_t._M_merge_equal(_Merge_helper::_S_get_tree(__source)); 15726: } 15726: 15726: template 15726: void 15726: merge(map<_Key, _Tp, _Cmp2, _Alloc>&& __source) 15726: { merge(__source); } 15726: # 707 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: iterator 15726: erase(const_iterator __position) 15726: { return _M_t.erase(__position); } 15726: 15726: 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: iterator 15726: erase(iterator __position) 15726: { return _M_t.erase(__position); } 15726: # 744 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: size_type 15726: erase(const key_type& __x) 15726: { return _M_t.erase(__x); } 15726: # 765 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: iterator 15726: erase(const_iterator __first, const_iterator __last) 15726: { return _M_t.erase(__first, __last); } 15726: # 802 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: void 15726: swap(multimap& __x) 15726: noexcept(__is_nothrow_swappable<_Compare>::value) 15726: { _M_t.swap(__x._M_t); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: clear() noexcept 15726: { _M_t.clear(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: key_compare 15726: key_comp() const 15726: { return _M_t.key_comp(); } 15726: 15726: 15726: 15726: 15726: 15726: value_compare 15726: value_comp() const 15726: { return value_compare(_M_t.key_comp()); } 15726: # 848 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: iterator 15726: find(const key_type& __x) 15726: { return _M_t.find(__x); } 15726: 15726: 15726: template 15726: auto 15726: find(const _Kt& __x) -> decltype(_M_t._M_find_tr(__x)) 15726: { return _M_t._M_find_tr(__x); } 15726: # 872 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: const_iterator 15726: find(const key_type& __x) const 15726: { return _M_t.find(__x); } 15726: 15726: 15726: template 15726: auto 15726: find(const _Kt& __x) const -> decltype(_M_t._M_find_tr(__x)) 15726: { return _M_t._M_find_tr(__x); } 15726: # 890 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: size_type 15726: count(const key_type& __x) const 15726: { return _M_t.count(__x); } 15726: 15726: 15726: template 15726: auto 15726: count(const _Kt& __x) const -> decltype(_M_t._M_count_tr(__x)) 15726: { return _M_t._M_count_tr(__x); } 15726: # 933 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: iterator 15726: lower_bound(const key_type& __x) 15726: { return _M_t.lower_bound(__x); } 15726: 15726: 15726: template 15726: auto 15726: lower_bound(const _Kt& __x) 15726: -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) 15726: { return iterator(_M_t._M_lower_bound_tr(__x)); } 15726: # 958 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: const_iterator 15726: lower_bound(const key_type& __x) const 15726: { return _M_t.lower_bound(__x); } 15726: 15726: 15726: template 15726: auto 15726: lower_bound(const _Kt& __x) const 15726: -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x))) 15726: { return const_iterator(_M_t._M_lower_bound_tr(__x)); } 15726: # 978 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: iterator 15726: upper_bound(const key_type& __x) 15726: { return _M_t.upper_bound(__x); } 15726: 15726: 15726: template 15726: auto 15726: upper_bound(const _Kt& __x) 15726: -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) 15726: { return iterator(_M_t._M_upper_bound_tr(__x)); } 15726: # 998 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: const_iterator 15726: upper_bound(const key_type& __x) const 15726: { return _M_t.upper_bound(__x); } 15726: 15726: 15726: template 15726: auto 15726: upper_bound(const _Kt& __x) const 15726: -> decltype(const_iterator(_M_t._M_upper_bound_tr(__x))) 15726: { return const_iterator(_M_t._M_upper_bound_tr(__x)); } 15726: # 1025 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: std::pair 15726: equal_range(const key_type& __x) 15726: { return _M_t.equal_range(__x); } 15726: 15726: 15726: template 15726: auto 15726: equal_range(const _Kt& __x) 15726: -> decltype(pair(_M_t._M_equal_range_tr(__x))) 15726: { return pair(_M_t._M_equal_range_tr(__x)); } 15726: # 1052 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: std::pair 15726: equal_range(const key_type& __x) const 15726: { return _M_t.equal_range(__x); } 15726: 15726: 15726: template 15726: auto 15726: equal_range(const _Kt& __x) const 15726: -> decltype(pair( 15726: _M_t._M_equal_range_tr(__x))) 15726: { 15726: return pair( 15726: _M_t._M_equal_range_tr(__x)); 15726: } 15726: 15726: 15726: 15726: template 15726: friend bool 15726: operator==(const multimap<_K1, _T1, _C1, _A1>&, 15726: const multimap<_K1, _T1, _C1, _A1>&); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: friend bool 15726: operator<(const multimap<_K1, _T1, _C1, _A1>&, 15726: const multimap<_K1, _T1, _C1, _A1>&); 15726: 15726: }; 15726: 15726: 15726: 15726: template>, 15726: typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, 15726: typename = _RequireInputIter<_InputIterator>, 15726: typename = _RequireNotAllocator<_Compare>, 15726: typename = _RequireAllocator<_Allocator>> 15726: multimap(_InputIterator, _InputIterator, 15726: _Compare = _Compare(), _Allocator = _Allocator()) 15726: -> multimap<__iter_key_t<_InputIterator>, __iter_val_t<_InputIterator>, 15726: _Compare, _Allocator>; 15726: 15726: template, 15726: typename _Allocator = allocator>, 15726: typename = _RequireNotAllocator<_Compare>, 15726: typename = _RequireAllocator<_Allocator>> 15726: multimap(initializer_list>, 15726: _Compare = _Compare(), _Allocator = _Allocator()) 15726: -> multimap<_Key, _Tp, _Compare, _Allocator>; 15726: 15726: template, 15726: typename = _RequireAllocator<_Allocator>> 15726: multimap(_InputIterator, _InputIterator, _Allocator) 15726: -> multimap<__iter_key_t<_InputIterator>, __iter_val_t<_InputIterator>, 15726: less<__iter_key_t<_InputIterator>>, _Allocator>; 15726: 15726: template> 15726: multimap(initializer_list>, _Allocator) 15726: -> multimap<_Key, _Tp, less<_Key>, _Allocator>; 15726: # 1132 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: template 15726: inline bool 15726: operator==(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, 15726: const multimap<_Key, _Tp, _Compare, _Alloc>& __y) 15726: { return __x._M_t == __y._M_t; } 15726: # 1170 "/usr/include/c++/13/bits/stl_multimap.h" 3 15726: template 15726: inline bool 15726: operator<(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, 15726: const multimap<_Key, _Tp, _Compare, _Alloc>& __y) 15726: { return __x._M_t < __y._M_t; } 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, 15726: const multimap<_Key, _Tp, _Compare, _Alloc>& __y) 15726: { return !(__x == __y); } 15726: 15726: 15726: template 15726: inline bool 15726: operator>(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, 15726: const multimap<_Key, _Tp, _Compare, _Alloc>& __y) 15726: { return __y < __x; } 15726: 15726: 15726: template 15726: inline bool 15726: operator<=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, 15726: const multimap<_Key, _Tp, _Compare, _Alloc>& __y) 15726: { return !(__y < __x); } 15726: 15726: 15726: template 15726: inline bool 15726: operator>=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, 15726: const multimap<_Key, _Tp, _Compare, _Alloc>& __y) 15726: { return !(__x < __y); } 15726: 15726: 15726: 15726: template 15726: inline void 15726: swap(multimap<_Key, _Tp, _Compare, _Alloc>& __x, 15726: multimap<_Key, _Tp, _Compare, _Alloc>& __y) 15726: noexcept(noexcept(__x.swap(__y))) 15726: { __x.swap(__y); } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct 15726: _Rb_tree_merge_helper, 15726: _Cmp2> 15726: { 15726: private: 15726: friend class std::multimap<_Key, _Val, _Cmp1, _Alloc>; 15726: 15726: static auto& 15726: _S_get_tree(std::map<_Key, _Val, _Cmp2, _Alloc>& __map) 15726: { return __map._M_t; } 15726: 15726: static auto& 15726: _S_get_tree(std::multimap<_Key, _Val, _Cmp2, _Alloc>& __map) 15726: { return __map._M_t; } 15726: }; 15726: 15726: 15726: 15726: } 15726: # 65 "/usr/include/c++/13/map" 2 3 15726: # 74 "/usr/include/c++/13/map" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: namespace pmr 15726: { 15726: template> 15726: using map 15726: = std::map<_Key, _Tp, _Cmp, 15726: polymorphic_allocator>>; 15726: template> 15726: using multimap 15726: = std::multimap<_Key, _Tp, _Cmp, 15726: polymorphic_allocator>>; 15726: } 15726: 15726: } 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/monitoring/statistics_impl.h" 2 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 15726: 15726: # 1 "/usr/include/c++/13/cassert" 1 3 15726: # 41 "/usr/include/c++/13/cassert" 3 15726: 15726: # 42 "/usr/include/c++/13/cassert" 3 15726: 15726: 15726: # 1 "/usr/include/assert.h" 1 3 4 15726: # 45 "/usr/include/c++/13/cassert" 2 3 15726: # 12 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 2 15726: 15726: # 1 "/usr/include/c++/13/mutex" 1 3 15726: # 32 "/usr/include/c++/13/mutex" 3 15726: 15726: # 33 "/usr/include/c++/13/mutex" 3 15726: # 44 "/usr/include/c++/13/mutex" 3 15726: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/error_constants.h" 1 3 15726: # 34 "/usr/include/arm-linux-gnueabihf/c++/13/bits/error_constants.h" 3 15726: # 1 "/usr/include/c++/13/cerrno" 1 3 15726: # 39 "/usr/include/c++/13/cerrno" 3 15726: 15726: # 40 "/usr/include/c++/13/cerrno" 3 15726: # 35 "/usr/include/arm-linux-gnueabihf/c++/13/bits/error_constants.h" 2 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: enum class errc 15726: { 15726: address_family_not_supported = 97, 15726: address_in_use = 98, 15726: address_not_available = 99, 15726: already_connected = 106, 15726: argument_list_too_long = 7, 15726: argument_out_of_domain = 33, 15726: bad_address = 14, 15726: bad_file_descriptor = 9, 15726: 15726: 15726: bad_message = 74, 15726: 15726: 15726: broken_pipe = 32, 15726: connection_aborted = 103, 15726: connection_already_in_progress = 114, 15726: connection_refused = 111, 15726: connection_reset = 104, 15726: cross_device_link = 18, 15726: destination_address_required = 89, 15726: device_or_resource_busy = 16, 15726: directory_not_empty = 39, 15726: executable_format_error = 8, 15726: file_exists = 17, 15726: file_too_large = 27, 15726: filename_too_long = 36, 15726: function_not_supported = 38, 15726: host_unreachable = 113, 15726: 15726: 15726: identifier_removed = 43, 15726: 15726: 15726: illegal_byte_sequence = 84, 15726: inappropriate_io_control_operation = 25, 15726: interrupted = 4, 15726: invalid_argument = 22, 15726: invalid_seek = 29, 15726: io_error = 5, 15726: is_a_directory = 21, 15726: message_size = 90, 15726: network_down = 100, 15726: network_reset = 102, 15726: network_unreachable = 101, 15726: no_buffer_space = 105, 15726: no_child_process = 10, 15726: 15726: 15726: no_link = 67, 15726: 15726: 15726: no_lock_available = 37, 15726: 15726: 15726: no_message_available = 61, 15726: 15726: 15726: no_message = 42, 15726: no_protocol_option = 92, 15726: no_space_on_device = 28, 15726: 15726: 15726: no_stream_resources = 63, 15726: 15726: 15726: no_such_device_or_address = 6, 15726: no_such_device = 19, 15726: no_such_file_or_directory = 2, 15726: no_such_process = 3, 15726: not_a_directory = 20, 15726: not_a_socket = 88, 15726: 15726: 15726: not_a_stream = 60, 15726: 15726: 15726: not_connected = 107, 15726: not_enough_memory = 12, 15726: 15726: 15726: not_supported = 95, 15726: 15726: 15726: 15726: operation_canceled = 125, 15726: 15726: 15726: operation_in_progress = 115, 15726: operation_not_permitted = 1, 15726: operation_not_supported = 95, 15726: operation_would_block = 11, 15726: 15726: 15726: owner_dead = 130, 15726: 15726: 15726: permission_denied = 13, 15726: 15726: 15726: protocol_error = 71, 15726: 15726: 15726: protocol_not_supported = 93, 15726: read_only_file_system = 30, 15726: resource_deadlock_would_occur = 35, 15726: resource_unavailable_try_again = 11, 15726: result_out_of_range = 34, 15726: 15726: 15726: state_not_recoverable = 131, 15726: 15726: 15726: 15726: stream_timeout = 62, 15726: 15726: 15726: 15726: text_file_busy = 26, 15726: 15726: 15726: timed_out = 110, 15726: too_many_files_open_in_system = 23, 15726: too_many_files_open = 24, 15726: too_many_links = 31, 15726: too_many_symbolic_link_levels = 40, 15726: 15726: 15726: value_too_large = 75, 15726: 15726: 15726: 15726: 15726: wrong_protocol_type = 91 15726: }; 15726: 15726: 15726: } 15726: # 45 "/usr/include/c++/13/mutex" 2 3 15726: # 1 "/usr/include/c++/13/bits/std_mutex.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/std_mutex.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/std_mutex.h" 3 15726: # 43 "/usr/include/c++/13/bits/std_mutex.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 59 "/usr/include/c++/13/bits/std_mutex.h" 3 15726: class __mutex_base 15726: { 15726: protected: 15726: typedef __gthread_mutex_t __native_type; 15726: 15726: 15726: __native_type _M_mutex = { { 0, 0, 0, PTHREAD_MUTEX_TIMED_NP, 0, { 0 } } }; 15726: 15726: constexpr __mutex_base() noexcept = default; 15726: # 80 "/usr/include/c++/13/bits/std_mutex.h" 3 15726: __mutex_base(const __mutex_base&) = delete; 15726: __mutex_base& operator=(const __mutex_base&) = delete; 15726: }; 15726: # 96 "/usr/include/c++/13/bits/std_mutex.h" 3 15726: class mutex : private __mutex_base 15726: { 15726: public: 15726: typedef __native_type* native_handle_type; 15726: 15726: 15726: constexpr 15726: 15726: mutex() noexcept = default; 15726: ~mutex() = default; 15726: 15726: mutex(const mutex&) = delete; 15726: mutex& operator=(const mutex&) = delete; 15726: 15726: void 15726: lock() 15726: { 15726: int __e = __gthread_mutex_lock(&_M_mutex); 15726: 15726: 15726: if (__e) 15726: __throw_system_error(__e); 15726: } 15726: 15726: [[__nodiscard__]] 15726: bool 15726: try_lock() noexcept 15726: { 15726: 15726: return !__gthread_mutex_trylock(&_M_mutex); 15726: } 15726: 15726: void 15726: unlock() 15726: { 15726: 15726: __gthread_mutex_unlock(&_M_mutex); 15726: } 15726: 15726: native_handle_type 15726: native_handle() noexcept 15726: { return &_M_mutex; } 15726: }; 15726: 15726: 15726: 15726: 15726: class __condvar 15726: { 15726: using timespec = __gthread_time_t; 15726: 15726: public: 15726: __condvar() noexcept 15726: { 15726: 15726: 15726: 15726: } 15726: 15726: ~__condvar() 15726: { 15726: int __e __attribute__((__unused__)) = __gthread_cond_destroy(&_M_cond); 15726: do { if (std::__is_constant_evaluated() && !bool(__e != 16)) __builtin_unreachable(); } while (false); 15726: } 15726: 15726: __condvar(const __condvar&) = delete; 15726: __condvar& operator=(const __condvar&) = delete; 15726: 15726: __gthread_cond_t* native_handle() noexcept { return &_M_cond; } 15726: 15726: 15726: void 15726: wait(mutex& __m) 15726: { 15726: int __e __attribute__((__unused__)) 15726: = __gthread_cond_wait(&_M_cond, __m.native_handle()); 15726: do { if (std::__is_constant_evaluated() && !bool(__e == 0)) __builtin_unreachable(); } while (false); 15726: } 15726: 15726: void 15726: wait_until(mutex& __m, timespec& __abs_time) 15726: { 15726: __gthread_cond_timedwait(&_M_cond, __m.native_handle(), &__abs_time); 15726: } 15726: 15726: 15726: void 15726: wait_until(mutex& __m, clockid_t __clock, timespec& __abs_time) 15726: { 15726: pthread_cond_clockwait(&_M_cond, __m.native_handle(), __clock, 15726: &__abs_time); 15726: } 15726: 15726: 15726: void 15726: notify_one() noexcept 15726: { 15726: int __e __attribute__((__unused__)) = __gthread_cond_signal(&_M_cond); 15726: do { if (std::__is_constant_evaluated() && !bool(__e == 0)) __builtin_unreachable(); } while (false); 15726: } 15726: 15726: void 15726: notify_all() noexcept 15726: { 15726: int __e __attribute__((__unused__)) = __gthread_cond_broadcast(&_M_cond); 15726: do { if (std::__is_constant_evaluated() && !bool(__e == 0)) __builtin_unreachable(); } while (false); 15726: } 15726: 15726: protected: 15726: 15726: __gthread_cond_t _M_cond = { { {0}, {0}, {0, 0}, {0, 0}, 0, 0, {0, 0} } }; 15726: 15726: 15726: 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: struct defer_lock_t { explicit defer_lock_t() = default; }; 15726: 15726: 15726: struct try_to_lock_t { explicit try_to_lock_t() = default; }; 15726: 15726: 15726: 15726: struct adopt_lock_t { explicit adopt_lock_t() = default; }; 15726: 15726: 15726: inline constexpr defer_lock_t defer_lock { }; 15726: 15726: 15726: inline constexpr try_to_lock_t try_to_lock { }; 15726: 15726: 15726: inline constexpr adopt_lock_t adopt_lock { }; 15726: # 242 "/usr/include/c++/13/bits/std_mutex.h" 3 15726: template 15726: class lock_guard 15726: { 15726: public: 15726: typedef _Mutex mutex_type; 15726: 15726: explicit lock_guard(mutex_type& __m) : _M_device(__m) 15726: { _M_device.lock(); } 15726: 15726: lock_guard(mutex_type& __m, adopt_lock_t) noexcept : _M_device(__m) 15726: { } 15726: 15726: ~lock_guard() 15726: { _M_device.unlock(); } 15726: 15726: lock_guard(const lock_guard&) = delete; 15726: lock_guard& operator=(const lock_guard&) = delete; 15726: 15726: private: 15726: mutex_type& _M_device; 15726: }; 15726: 15726: 15726: 15726: } 15726: # 46 "/usr/include/c++/13/mutex" 2 3 15726: # 1 "/usr/include/c++/13/bits/unique_lock.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/unique_lock.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/unique_lock.h" 3 15726: # 43 "/usr/include/c++/13/bits/unique_lock.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 58 "/usr/include/c++/13/bits/unique_lock.h" 3 15726: template 15726: class unique_lock 15726: { 15726: public: 15726: typedef _Mutex mutex_type; 15726: 15726: unique_lock() noexcept 15726: : _M_device(0), _M_owns(false) 15726: { } 15726: 15726: explicit unique_lock(mutex_type& __m) 15726: : _M_device(std::__addressof(__m)), _M_owns(false) 15726: { 15726: lock(); 15726: _M_owns = true; 15726: } 15726: 15726: unique_lock(mutex_type& __m, defer_lock_t) noexcept 15726: : _M_device(std::__addressof(__m)), _M_owns(false) 15726: { } 15726: 15726: unique_lock(mutex_type& __m, try_to_lock_t) 15726: : _M_device(std::__addressof(__m)), _M_owns(_M_device->try_lock()) 15726: { } 15726: 15726: unique_lock(mutex_type& __m, adopt_lock_t) noexcept 15726: : _M_device(std::__addressof(__m)), _M_owns(true) 15726: { 15726: 15726: } 15726: 15726: template 15726: unique_lock(mutex_type& __m, 15726: const chrono::time_point<_Clock, _Duration>& __atime) 15726: : _M_device(std::__addressof(__m)), 15726: _M_owns(_M_device->try_lock_until(__atime)) 15726: { } 15726: 15726: template 15726: unique_lock(mutex_type& __m, 15726: const chrono::duration<_Rep, _Period>& __rtime) 15726: : _M_device(std::__addressof(__m)), 15726: _M_owns(_M_device->try_lock_for(__rtime)) 15726: { } 15726: 15726: ~unique_lock() 15726: { 15726: if (_M_owns) 15726: unlock(); 15726: } 15726: 15726: unique_lock(const unique_lock&) = delete; 15726: unique_lock& operator=(const unique_lock&) = delete; 15726: 15726: unique_lock(unique_lock&& __u) noexcept 15726: : _M_device(__u._M_device), _M_owns(__u._M_owns) 15726: { 15726: __u._M_device = 0; 15726: __u._M_owns = false; 15726: } 15726: 15726: unique_lock& operator=(unique_lock&& __u) noexcept 15726: { 15726: if(_M_owns) 15726: unlock(); 15726: 15726: unique_lock(std::move(__u)).swap(*this); 15726: 15726: __u._M_device = 0; 15726: __u._M_owns = false; 15726: 15726: return *this; 15726: } 15726: 15726: void 15726: lock() 15726: { 15726: if (!_M_device) 15726: __throw_system_error(int(errc::operation_not_permitted)); 15726: else if (_M_owns) 15726: __throw_system_error(int(errc::resource_deadlock_would_occur)); 15726: else 15726: { 15726: _M_device->lock(); 15726: _M_owns = true; 15726: } 15726: } 15726: 15726: [[__nodiscard__]] 15726: bool 15726: try_lock() 15726: { 15726: if (!_M_device) 15726: __throw_system_error(int(errc::operation_not_permitted)); 15726: else if (_M_owns) 15726: __throw_system_error(int(errc::resource_deadlock_would_occur)); 15726: else 15726: { 15726: _M_owns = _M_device->try_lock(); 15726: return _M_owns; 15726: } 15726: } 15726: 15726: template 15726: [[__nodiscard__]] 15726: bool 15726: try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime) 15726: { 15726: if (!_M_device) 15726: __throw_system_error(int(errc::operation_not_permitted)); 15726: else if (_M_owns) 15726: __throw_system_error(int(errc::resource_deadlock_would_occur)); 15726: else 15726: { 15726: _M_owns = _M_device->try_lock_until(__atime); 15726: return _M_owns; 15726: } 15726: } 15726: 15726: template 15726: [[__nodiscard__]] 15726: bool 15726: try_lock_for(const chrono::duration<_Rep, _Period>& __rtime) 15726: { 15726: if (!_M_device) 15726: __throw_system_error(int(errc::operation_not_permitted)); 15726: else if (_M_owns) 15726: __throw_system_error(int(errc::resource_deadlock_would_occur)); 15726: else 15726: { 15726: _M_owns = _M_device->try_lock_for(__rtime); 15726: return _M_owns; 15726: } 15726: } 15726: 15726: void 15726: unlock() 15726: { 15726: if (!_M_owns) 15726: __throw_system_error(int(errc::operation_not_permitted)); 15726: else if (_M_device) 15726: { 15726: _M_device->unlock(); 15726: _M_owns = false; 15726: } 15726: } 15726: 15726: void 15726: swap(unique_lock& __u) noexcept 15726: { 15726: std::swap(_M_device, __u._M_device); 15726: std::swap(_M_owns, __u._M_owns); 15726: } 15726: 15726: mutex_type* 15726: release() noexcept 15726: { 15726: mutex_type* __ret = _M_device; 15726: _M_device = 0; 15726: _M_owns = false; 15726: return __ret; 15726: } 15726: 15726: [[__nodiscard__]] 15726: bool 15726: owns_lock() const noexcept 15726: { return _M_owns; } 15726: 15726: explicit operator bool() const noexcept 15726: { return owns_lock(); } 15726: 15726: [[__nodiscard__]] 15726: mutex_type* 15726: mutex() const noexcept 15726: { return _M_device; } 15726: 15726: private: 15726: mutex_type* _M_device; 15726: bool _M_owns; 15726: }; 15726: 15726: 15726: 15726: template 15726: inline void 15726: swap(unique_lock<_Mutex>& __x, unique_lock<_Mutex>& __y) noexcept 15726: { __x.swap(__y); } 15726: 15726: 15726: } 15726: # 47 "/usr/include/c++/13/mutex" 2 3 15726: # 57 "/usr/include/c++/13/mutex" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 70 "/usr/include/c++/13/mutex" 3 15726: class __recursive_mutex_base 15726: { 15726: protected: 15726: typedef __gthread_recursive_mutex_t __native_type; 15726: 15726: __recursive_mutex_base(const __recursive_mutex_base&) = delete; 15726: __recursive_mutex_base& operator=(const __recursive_mutex_base&) = delete; 15726: 15726: 15726: __native_type _M_mutex = { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { 0 } } }; 15726: 15726: __recursive_mutex_base() = default; 15726: # 94 "/usr/include/c++/13/mutex" 3 15726: }; 15726: # 106 "/usr/include/c++/13/mutex" 3 15726: class recursive_mutex : private __recursive_mutex_base 15726: { 15726: public: 15726: typedef __native_type* native_handle_type; 15726: 15726: recursive_mutex() = default; 15726: ~recursive_mutex() = default; 15726: 15726: recursive_mutex(const recursive_mutex&) = delete; 15726: recursive_mutex& operator=(const recursive_mutex&) = delete; 15726: 15726: void 15726: lock() 15726: { 15726: int __e = __gthread_recursive_mutex_lock(&_M_mutex); 15726: 15726: 15726: if (__e) 15726: __throw_system_error(__e); 15726: } 15726: 15726: [[__nodiscard__]] 15726: bool 15726: try_lock() noexcept 15726: { 15726: 15726: return !__gthread_recursive_mutex_trylock(&_M_mutex); 15726: } 15726: 15726: void 15726: unlock() 15726: { 15726: 15726: __gthread_recursive_mutex_unlock(&_M_mutex); 15726: } 15726: 15726: native_handle_type 15726: native_handle() noexcept 15726: { return &_M_mutex; } 15726: }; 15726: 15726: 15726: 15726: 15726: template 15726: class __timed_mutex_impl 15726: { 15726: protected: 15726: template 15726: bool 15726: _M_try_lock_for(const chrono::duration<_Rep, _Period>& __rtime) 15726: { 15726: 15726: using __clock = chrono::steady_clock; 15726: 15726: 15726: 15726: 15726: auto __rt = chrono::duration_cast<__clock::duration>(__rtime); 15726: if (ratio_greater<__clock::period, _Period>()) 15726: ++__rt; 15726: return _M_try_lock_until(__clock::now() + __rt); 15726: } 15726: 15726: template 15726: bool 15726: _M_try_lock_until(const chrono::time_point& __atime) 15726: { 15726: auto __s = chrono::time_point_cast(__atime); 15726: auto __ns = chrono::duration_cast(__atime - __s); 15726: 15726: __gthread_time_t __ts = { 15726: static_cast(__s.time_since_epoch().count()), 15726: static_cast(__ns.count()) 15726: }; 15726: 15726: return static_cast<_Derived*>(this)->_M_timedlock(__ts); 15726: } 15726: 15726: 15726: template 15726: bool 15726: _M_try_lock_until(const chrono::time_point& __atime) 15726: { 15726: auto __s = chrono::time_point_cast(__atime); 15726: auto __ns = chrono::duration_cast(__atime - __s); 15726: 15726: __gthread_time_t __ts = { 15726: static_cast(__s.time_since_epoch().count()), 15726: static_cast(__ns.count()) 15726: }; 15726: 15726: return static_cast<_Derived*>(this)->_M_clocklock(1, 15726: __ts); 15726: } 15726: 15726: 15726: template 15726: bool 15726: _M_try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: auto __now = _Clock::now(); 15726: do { 15726: auto __rtime = __atime - __now; 15726: if (_M_try_lock_for(__rtime)) 15726: return true; 15726: __now = _Clock::now(); 15726: } while (__atime > __now); 15726: return false; 15726: } 15726: }; 15726: # 235 "/usr/include/c++/13/mutex" 3 15726: class timed_mutex 15726: : private __mutex_base, public __timed_mutex_impl 15726: { 15726: public: 15726: typedef __native_type* native_handle_type; 15726: 15726: timed_mutex() = default; 15726: ~timed_mutex() = default; 15726: 15726: timed_mutex(const timed_mutex&) = delete; 15726: timed_mutex& operator=(const timed_mutex&) = delete; 15726: 15726: void 15726: lock() 15726: { 15726: int __e = __gthread_mutex_lock(&_M_mutex); 15726: 15726: 15726: if (__e) 15726: __throw_system_error(__e); 15726: } 15726: 15726: [[__nodiscard__]] 15726: bool 15726: try_lock() noexcept 15726: { 15726: 15726: return !__gthread_mutex_trylock(&_M_mutex); 15726: } 15726: 15726: template 15726: [[__nodiscard__]] 15726: bool 15726: try_lock_for(const chrono::duration<_Rep, _Period>& __rtime) 15726: { return _M_try_lock_for(__rtime); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: bool 15726: try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime) 15726: { return _M_try_lock_until(__atime); } 15726: 15726: void 15726: unlock() 15726: { 15726: 15726: __gthread_mutex_unlock(&_M_mutex); 15726: } 15726: 15726: native_handle_type 15726: native_handle() noexcept 15726: { return &_M_mutex; } 15726: 15726: private: 15726: friend class __timed_mutex_impl; 15726: 15726: bool 15726: _M_timedlock(const __gthread_time_t& __ts) 15726: { return !__gthread_mutex_timedlock(&_M_mutex, &__ts); } 15726: 15726: 15726: bool 15726: _M_clocklock(clockid_t __clockid, const __gthread_time_t& __ts) 15726: { return !pthread_mutex_clocklock(&_M_mutex, __clockid, &__ts); } 15726: 15726: }; 15726: # 312 "/usr/include/c++/13/mutex" 3 15726: class recursive_timed_mutex 15726: : private __recursive_mutex_base, 15726: public __timed_mutex_impl 15726: { 15726: public: 15726: typedef __native_type* native_handle_type; 15726: 15726: recursive_timed_mutex() = default; 15726: ~recursive_timed_mutex() = default; 15726: 15726: recursive_timed_mutex(const recursive_timed_mutex&) = delete; 15726: recursive_timed_mutex& operator=(const recursive_timed_mutex&) = delete; 15726: 15726: void 15726: lock() 15726: { 15726: int __e = __gthread_recursive_mutex_lock(&_M_mutex); 15726: 15726: 15726: if (__e) 15726: __throw_system_error(__e); 15726: } 15726: 15726: [[__nodiscard__]] 15726: bool 15726: try_lock() noexcept 15726: { 15726: 15726: return !__gthread_recursive_mutex_trylock(&_M_mutex); 15726: } 15726: 15726: template 15726: [[__nodiscard__]] 15726: bool 15726: try_lock_for(const chrono::duration<_Rep, _Period>& __rtime) 15726: { return _M_try_lock_for(__rtime); } 15726: 15726: template 15726: [[__nodiscard__]] 15726: bool 15726: try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime) 15726: { return _M_try_lock_until(__atime); } 15726: 15726: void 15726: unlock() 15726: { 15726: 15726: __gthread_recursive_mutex_unlock(&_M_mutex); 15726: } 15726: 15726: native_handle_type 15726: native_handle() noexcept 15726: { return &_M_mutex; } 15726: 15726: private: 15726: friend class __timed_mutex_impl; 15726: 15726: bool 15726: _M_timedlock(const __gthread_time_t& __ts) 15726: { return !__gthread_recursive_mutex_timedlock(&_M_mutex, &__ts); } 15726: 15726: 15726: bool 15726: _M_clocklock(clockid_t __clockid, const __gthread_time_t& __ts) 15726: { return !pthread_mutex_clocklock(&_M_mutex, __clockid, &__ts); } 15726: 15726: }; 15726: # 559 "/usr/include/c++/13/mutex" 3 15726: namespace __detail 15726: { 15726: 15726: template 15726: inline int 15726: __try_lock_impl(_Lockable& __l) 15726: { 15726: if (unique_lock<_Lockable> __lock{__l, try_to_lock}) 15726: { 15726: __lock.release(); 15726: return -1; 15726: } 15726: else 15726: return 0; 15726: } 15726: 15726: 15726: 15726: template 15726: inline int 15726: __try_lock_impl(_L0& __l0, _Lockables&... __lockables) 15726: { 15726: 15726: if constexpr ((is_same_v<_L0, _Lockables> && ...)) 15726: { 15726: constexpr int _Np = 1 + sizeof...(_Lockables); 15726: unique_lock<_L0> __locks[_Np] = { 15726: {__l0, defer_lock}, {__lockables, defer_lock}... 15726: }; 15726: for (int __i = 0; __i < _Np; ++__i) 15726: { 15726: if (!__locks[__i].try_lock()) 15726: { 15726: const int __failed = __i; 15726: while (__i--) 15726: __locks[__i].unlock(); 15726: return __failed; 15726: } 15726: } 15726: for (auto& __l : __locks) 15726: __l.release(); 15726: return -1; 15726: } 15726: else 15726: 15726: if (unique_lock<_L0> __lock{__l0, try_to_lock}) 15726: { 15726: int __idx = __detail::__try_lock_impl(__lockables...); 15726: if (__idx == -1) 15726: { 15726: __lock.release(); 15726: return -1; 15726: } 15726: return __idx + 1; 15726: } 15726: else 15726: return 0; 15726: } 15726: 15726: } 15726: # 631 "/usr/include/c++/13/mutex" 3 15726: template 15726: [[__nodiscard__]] 15726: inline int 15726: try_lock(_L1& __l1, _L2& __l2, _L3&... __l3) 15726: { 15726: return __detail::__try_lock_impl(__l1, __l2, __l3...); 15726: } 15726: 15726: 15726: namespace __detail 15726: { 15726: 15726: 15726: 15726: 15726: 15726: template 15726: void 15726: __lock_impl(int& __i, int __depth, _L0& __l0, _L1&... __l1) 15726: { 15726: while (__i >= __depth) 15726: { 15726: if (__i == __depth) 15726: { 15726: int __failed = 1; 15726: { 15726: unique_lock<_L0> __first(__l0); 15726: __failed += __detail::__try_lock_impl(__l1...); 15726: if (!__failed) 15726: { 15726: __i = -1; 15726: __first.release(); 15726: return; 15726: } 15726: } 15726: 15726: __gthread_yield(); 15726: 15726: constexpr auto __n = 1 + sizeof...(_L1); 15726: __i = (__depth + __failed) % __n; 15726: } 15726: else 15726: __detail::__lock_impl(__i, __depth + 1, __l1..., __l0); 15726: } 15726: } 15726: 15726: } 15726: # 691 "/usr/include/c++/13/mutex" 3 15726: template 15726: void 15726: lock(_L1& __l1, _L2& __l2, _L3&... __l3) 15726: { 15726: 15726: if constexpr (is_same_v<_L1, _L2> && (is_same_v<_L1, _L3> && ...)) 15726: { 15726: constexpr int _Np = 2 + sizeof...(_L3); 15726: unique_lock<_L1> __locks[] = { 15726: {__l1, defer_lock}, {__l2, defer_lock}, {__l3, defer_lock}... 15726: }; 15726: int __first = 0; 15726: do { 15726: __locks[__first].lock(); 15726: for (int __j = 1; __j < _Np; ++__j) 15726: { 15726: const int __idx = (__first + __j) % _Np; 15726: if (!__locks[__idx].try_lock()) 15726: { 15726: for (int __k = __j; __k != 0; --__k) 15726: __locks[(__first + __k - 1) % _Np].unlock(); 15726: __first = __idx; 15726: break; 15726: } 15726: } 15726: } while (!__locks[__first].owns_lock()); 15726: 15726: for (auto& __l : __locks) 15726: __l.release(); 15726: } 15726: else 15726: 15726: { 15726: int __i = 0; 15726: __detail::__lock_impl(__i, 0, __l1, __l2, __l3...); 15726: } 15726: } 15726: # 739 "/usr/include/c++/13/mutex" 3 15726: template 15726: class scoped_lock 15726: { 15726: public: 15726: explicit scoped_lock(_MutexTypes&... __m) : _M_devices(std::tie(__m...)) 15726: { std::lock(__m...); } 15726: 15726: explicit scoped_lock(adopt_lock_t, _MutexTypes&... __m) noexcept 15726: : _M_devices(std::tie(__m...)) 15726: { } 15726: 15726: ~scoped_lock() 15726: { std::apply([](auto&... __m) { (__m.unlock(), ...); }, _M_devices); } 15726: 15726: scoped_lock(const scoped_lock&) = delete; 15726: scoped_lock& operator=(const scoped_lock&) = delete; 15726: 15726: private: 15726: tuple<_MutexTypes&...> _M_devices; 15726: }; 15726: 15726: template<> 15726: class scoped_lock<> 15726: { 15726: public: 15726: explicit scoped_lock() = default; 15726: explicit scoped_lock(adopt_lock_t) noexcept { } 15726: ~scoped_lock() = default; 15726: 15726: scoped_lock(const scoped_lock&) = delete; 15726: scoped_lock& operator=(const scoped_lock&) = delete; 15726: }; 15726: 15726: template 15726: class scoped_lock<_Mutex> 15726: { 15726: public: 15726: using mutex_type = _Mutex; 15726: 15726: explicit scoped_lock(mutex_type& __m) : _M_device(__m) 15726: { _M_device.lock(); } 15726: 15726: explicit scoped_lock(adopt_lock_t, mutex_type& __m) noexcept 15726: : _M_device(__m) 15726: { } 15726: 15726: ~scoped_lock() 15726: { _M_device.unlock(); } 15726: 15726: scoped_lock(const scoped_lock&) = delete; 15726: scoped_lock& operator=(const scoped_lock&) = delete; 15726: 15726: private: 15726: mutex_type& _M_device; 15726: }; 15726: 15726: 15726: 15726: 15726: struct once_flag 15726: { 15726: constexpr once_flag() noexcept = default; 15726: 15726: 15726: once_flag(const once_flag&) = delete; 15726: 15726: once_flag& operator=(const once_flag&) = delete; 15726: 15726: private: 15726: 15726: 15726: __gthread_once_t _M_once = 0; 15726: 15726: struct _Prepare_execution; 15726: 15726: template 15726: friend void 15726: call_once(once_flag& __once, _Callable&& __f, _Args&&... __args); 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: extern __thread void* __once_callable; 15726: extern __thread void (*__once_call)(); 15726: 15726: 15726: struct once_flag::_Prepare_execution 15726: { 15726: template 15726: explicit 15726: _Prepare_execution(_Callable& __c) 15726: { 15726: 15726: __once_callable = std::__addressof(__c); 15726: 15726: __once_call = [] { (*static_cast<_Callable*>(__once_callable))(); }; 15726: } 15726: 15726: ~_Prepare_execution() 15726: { 15726: 15726: __once_callable = nullptr; 15726: __once_call = nullptr; 15726: } 15726: 15726: _Prepare_execution(const _Prepare_execution&) = delete; 15726: _Prepare_execution& operator=(const _Prepare_execution&) = delete; 15726: }; 15726: # 891 "/usr/include/c++/13/mutex" 3 15726: extern "C" void __once_proxy(void); 15726: 15726: 15726: template 15726: void 15726: call_once(once_flag& __once, _Callable&& __f, _Args&&... __args) 15726: { 15726: 15726: auto __callable = [&] { 15726: std::__invoke(std::forward<_Callable>(__f), 15726: std::forward<_Args>(__args)...); 15726: }; 15726: 15726: once_flag::_Prepare_execution __exec(__callable); 15726: 15726: 15726: if (int __e = __gthread_once(&__once._M_once, &__once_proxy)) 15726: __throw_system_error(__e); 15726: } 15726: # 1012 "/usr/include/c++/13/mutex" 3 15726: 15726: } 15726: # 14 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 2 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 19 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 15726: 15726: # 19 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 15726: namespace rocksdb { 15726: # 31 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 15726: enum Tickers : uint32_t { 15726: 15726: 15726: 15726: 15726: BLOCK_CACHE_MISS = 0, 15726: 15726: 15726: 15726: 15726: BLOCK_CACHE_HIT, 15726: 15726: BLOCK_CACHE_ADD, 15726: 15726: BLOCK_CACHE_ADD_FAILURES, 15726: 15726: BLOCK_CACHE_INDEX_MISS, 15726: 15726: BLOCK_CACHE_INDEX_HIT, 15726: 15726: BLOCK_CACHE_INDEX_ADD, 15726: 15726: BLOCK_CACHE_INDEX_BYTES_INSERT, 15726: 15726: BLOCK_CACHE_FILTER_MISS, 15726: 15726: BLOCK_CACHE_FILTER_HIT, 15726: 15726: BLOCK_CACHE_FILTER_ADD, 15726: 15726: BLOCK_CACHE_FILTER_BYTES_INSERT, 15726: 15726: BLOCK_CACHE_DATA_MISS, 15726: 15726: BLOCK_CACHE_DATA_HIT, 15726: 15726: BLOCK_CACHE_DATA_ADD, 15726: 15726: BLOCK_CACHE_DATA_BYTES_INSERT, 15726: 15726: BLOCK_CACHE_BYTES_READ, 15726: 15726: BLOCK_CACHE_BYTES_WRITE, 15726: 15726: BLOCK_CACHE_COMPRESSION_DICT_MISS, 15726: BLOCK_CACHE_COMPRESSION_DICT_HIT, 15726: BLOCK_CACHE_COMPRESSION_DICT_ADD, 15726: BLOCK_CACHE_COMPRESSION_DICT_BYTES_INSERT, 15726: 15726: 15726: 15726: BLOCK_CACHE_ADD_REDUNDANT, 15726: 15726: 15726: BLOCK_CACHE_INDEX_ADD_REDUNDANT, 15726: 15726: 15726: BLOCK_CACHE_FILTER_ADD_REDUNDANT, 15726: 15726: 15726: BLOCK_CACHE_DATA_ADD_REDUNDANT, 15726: 15726: 15726: 15726: BLOCK_CACHE_COMPRESSION_DICT_ADD_REDUNDANT, 15726: 15726: 15726: SECONDARY_CACHE_HITS, 15726: 15726: 15726: SECONDARY_CACHE_FILTER_HITS, 15726: SECONDARY_CACHE_INDEX_HITS, 15726: SECONDARY_CACHE_DATA_HITS, 15726: 15726: 15726: COMPRESSED_SECONDARY_CACHE_DUMMY_HITS, 15726: COMPRESSED_SECONDARY_CACHE_HITS, 15726: COMPRESSED_SECONDARY_CACHE_PROMOTIONS, 15726: COMPRESSED_SECONDARY_CACHE_PROMOTION_SKIPS, 15726: 15726: 15726: BLOOM_FILTER_USEFUL, 15726: 15726: BLOOM_FILTER_FULL_POSITIVE, 15726: 15726: 15726: BLOOM_FILTER_FULL_TRUE_POSITIVE, 15726: 15726: 15726: 15726: BLOOM_FILTER_PREFIX_CHECKED, 15726: 15726: BLOOM_FILTER_PREFIX_USEFUL, 15726: 15726: 15726: 15726: BLOOM_FILTER_PREFIX_TRUE_POSITIVE, 15726: 15726: 15726: PERSISTENT_CACHE_HIT, 15726: 15726: PERSISTENT_CACHE_MISS, 15726: 15726: 15726: SIM_BLOCK_CACHE_HIT, 15726: 15726: SIM_BLOCK_CACHE_MISS, 15726: 15726: 15726: MEMTABLE_HIT, 15726: 15726: MEMTABLE_MISS, 15726: 15726: 15726: GET_HIT_L0, 15726: 15726: GET_HIT_L1, 15726: 15726: GET_HIT_L2_AND_UP, 15726: 15726: 15726: 15726: 15726: 15726: COMPACTION_KEY_DROP_NEWER_ENTRY, 15726: 15726: COMPACTION_KEY_DROP_OBSOLETE, 15726: COMPACTION_KEY_DROP_RANGE_DEL, 15726: COMPACTION_KEY_DROP_USER, 15726: COMPACTION_RANGE_DEL_DROP_OBSOLETE, 15726: 15726: COMPACTION_OPTIMIZED_DEL_DROP_OBSOLETE, 15726: 15726: COMPACTION_CANCELLED, 15726: 15726: 15726: NUMBER_KEYS_WRITTEN, 15726: 15726: NUMBER_KEYS_READ, 15726: 15726: NUMBER_KEYS_UPDATED, 15726: 15726: 15726: BYTES_WRITTEN, 15726: 15726: 15726: 15726: 15726: BYTES_READ, 15726: 15726: NUMBER_DB_SEEK, 15726: NUMBER_DB_NEXT, 15726: NUMBER_DB_PREV, 15726: 15726: NUMBER_DB_SEEK_FOUND, 15726: NUMBER_DB_NEXT_FOUND, 15726: NUMBER_DB_PREV_FOUND, 15726: 15726: 15726: ITER_BYTES_READ, 15726: 15726: NUMBER_ITER_SKIP, 15726: 15726: 15726: NUMBER_OF_RESEEKS_IN_ITERATION, 15726: 15726: NO_ITERATOR_CREATED, 15726: NO_ITERATOR_DELETED, 15726: 15726: NO_FILE_OPENS, 15726: NO_FILE_ERRORS, 15726: 15726: STALL_MICROS, 15726: 15726: 15726: DB_MUTEX_WAIT_MICROS, 15726: 15726: 15726: NUMBER_MULTIGET_CALLS, 15726: NUMBER_MULTIGET_KEYS_READ, 15726: NUMBER_MULTIGET_BYTES_READ, 15726: 15726: 15726: 15726: NUMBER_MULTIGET_KEYS_FOUND, 15726: 15726: NUMBER_MERGE_FAILURES, 15726: 15726: 15726: 15726: GET_UPDATES_SINCE_CALLS, 15726: WAL_FILE_SYNCED, 15726: WAL_FILE_BYTES, 15726: 15726: 15726: 15726: WRITE_DONE_BY_SELF, 15726: WRITE_DONE_BY_OTHER, 15726: WRITE_WITH_WAL, 15726: COMPACT_READ_BYTES, 15726: COMPACT_WRITE_BYTES, 15726: FLUSH_WRITE_BYTES, 15726: 15726: 15726: COMPACT_READ_BYTES_MARKED, 15726: COMPACT_READ_BYTES_PERIODIC, 15726: COMPACT_READ_BYTES_TTL, 15726: COMPACT_WRITE_BYTES_MARKED, 15726: COMPACT_WRITE_BYTES_PERIODIC, 15726: COMPACT_WRITE_BYTES_TTL, 15726: 15726: 15726: 15726: NUMBER_DIRECT_LOAD_TABLE_PROPERTIES, 15726: NUMBER_SUPERVERSION_ACQUIRES, 15726: NUMBER_SUPERVERSION_RELEASES, 15726: NUMBER_SUPERVERSION_CLEANUPS, 15726: 15726: 15726: NUMBER_BLOCK_COMPRESSED, 15726: NUMBER_BLOCK_DECOMPRESSED, 15726: 15726: 15726: 15726: BYTES_COMPRESSED_FROM, 15726: 15726: 15726: BYTES_COMPRESSED_TO, 15726: 15726: 15726: 15726: 15726: BYTES_COMPRESSION_BYPASSED, 15726: 15726: 15726: 15726: 15726: 15726: BYTES_COMPRESSION_REJECTED, 15726: 15726: 15726: NUMBER_BLOCK_COMPRESSION_BYPASSED, 15726: 15726: NUMBER_BLOCK_COMPRESSION_REJECTED, 15726: 15726: 15726: 15726: BYTES_DECOMPRESSED_FROM, 15726: 15726: 15726: BYTES_DECOMPRESSED_TO, 15726: 15726: 15726: MERGE_OPERATION_TOTAL_TIME, 15726: FILTER_OPERATION_TOTAL_TIME, 15726: COMPACTION_CPU_TOTAL_TIME, 15726: 15726: 15726: ROW_CACHE_HIT, 15726: ROW_CACHE_MISS, 15726: 15726: 15726: 15726: 15726: 15726: 15726: READ_AMP_ESTIMATE_USEFUL_BYTES, 15726: READ_AMP_TOTAL_READ_BYTES, 15726: 15726: 15726: NUMBER_RATE_LIMITER_DRAINS, 15726: 15726: 15726: 15726: BLOB_DB_NUM_PUT, 15726: 15726: BLOB_DB_NUM_WRITE, 15726: 15726: BLOB_DB_NUM_GET, 15726: 15726: BLOB_DB_NUM_MULTIGET, 15726: 15726: 15726: BLOB_DB_NUM_SEEK, 15726: 15726: BLOB_DB_NUM_NEXT, 15726: 15726: BLOB_DB_NUM_PREV, 15726: 15726: BLOB_DB_NUM_KEYS_WRITTEN, 15726: 15726: BLOB_DB_NUM_KEYS_READ, 15726: 15726: 15726: BLOB_DB_BYTES_WRITTEN, 15726: 15726: 15726: BLOB_DB_BYTES_READ, 15726: 15726: 15726: BLOB_DB_WRITE_INLINED, 15726: 15726: 15726: BLOB_DB_WRITE_INLINED_TTL, 15726: 15726: 15726: BLOB_DB_WRITE_BLOB, 15726: 15726: 15726: BLOB_DB_WRITE_BLOB_TTL, 15726: 15726: BLOB_DB_BLOB_FILE_BYTES_WRITTEN, 15726: 15726: BLOB_DB_BLOB_FILE_BYTES_READ, 15726: 15726: BLOB_DB_BLOB_FILE_SYNCED, 15726: 15726: 15726: BLOB_DB_BLOB_INDEX_EXPIRED_COUNT, 15726: 15726: 15726: BLOB_DB_BLOB_INDEX_EXPIRED_SIZE, 15726: 15726: 15726: BLOB_DB_BLOB_INDEX_EVICTED_COUNT, 15726: 15726: 15726: BLOB_DB_BLOB_INDEX_EVICTED_SIZE, 15726: 15726: 15726: BLOB_DB_GC_NUM_FILES, 15726: 15726: 15726: BLOB_DB_GC_NUM_NEW_FILES, 15726: 15726: BLOB_DB_GC_FAILURES, 15726: 15726: BLOB_DB_GC_NUM_KEYS_RELOCATED, 15726: 15726: BLOB_DB_GC_BYTES_RELOCATED, 15726: 15726: 15726: BLOB_DB_FIFO_NUM_FILES_EVICTED, 15726: 15726: 15726: BLOB_DB_FIFO_NUM_KEYS_EVICTED, 15726: 15726: 15726: BLOB_DB_FIFO_BYTES_EVICTED, 15726: 15726: 15726: 15726: BLOB_DB_CACHE_MISS, 15726: 15726: BLOB_DB_CACHE_HIT, 15726: 15726: BLOB_DB_CACHE_ADD, 15726: 15726: BLOB_DB_CACHE_ADD_FAILURES, 15726: 15726: BLOB_DB_CACHE_BYTES_READ, 15726: 15726: BLOB_DB_CACHE_BYTES_WRITE, 15726: 15726: 15726: 15726: 15726: TXN_PREPARE_MUTEX_OVERHEAD, 15726: 15726: TXN_OLD_COMMIT_MAP_MUTEX_OVERHEAD, 15726: 15726: TXN_DUPLICATE_KEY_OVERHEAD, 15726: 15726: TXN_SNAPSHOT_MUTEX_OVERHEAD, 15726: 15726: TXN_GET_TRY_AGAIN, 15726: 15726: 15726: 15726: FILES_MARKED_TRASH, 15726: 15726: FILES_DELETED_FROM_TRASH_QUEUE, 15726: 15726: 15726: FILES_DELETED_IMMEDIATELY, 15726: 15726: 15726: 15726: ERROR_HANDLER_BG_ERROR_COUNT, 15726: ERROR_HANDLER_BG_IO_ERROR_COUNT, 15726: ERROR_HANDLER_BG_RETRYABLE_IO_ERROR_COUNT, 15726: ERROR_HANDLER_AUTORESUME_COUNT, 15726: ERROR_HANDLER_AUTORESUME_RETRY_TOTAL_COUNT, 15726: ERROR_HANDLER_AUTORESUME_SUCCESS_COUNT, 15726: 15726: 15726: 15726: MEMTABLE_PAYLOAD_BYTES_AT_FLUSH, 15726: 15726: MEMTABLE_GARBAGE_BYTES_AT_FLUSH, 15726: 15726: 15726: VERIFY_CHECKSUM_READ_BYTES, 15726: 15726: 15726: BACKUP_READ_BYTES, 15726: BACKUP_WRITE_BYTES, 15726: 15726: 15726: REMOTE_COMPACT_READ_BYTES, 15726: REMOTE_COMPACT_WRITE_BYTES, 15726: 15726: 15726: HOT_FILE_READ_BYTES, 15726: WARM_FILE_READ_BYTES, 15726: COLD_FILE_READ_BYTES, 15726: HOT_FILE_READ_COUNT, 15726: WARM_FILE_READ_COUNT, 15726: COLD_FILE_READ_COUNT, 15726: 15726: 15726: LAST_LEVEL_READ_BYTES, 15726: LAST_LEVEL_READ_COUNT, 15726: NON_LAST_LEVEL_READ_BYTES, 15726: NON_LAST_LEVEL_READ_COUNT, 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: LAST_LEVEL_SEEK_FILTERED, 15726: 15726: 15726: LAST_LEVEL_SEEK_FILTER_MATCH, 15726: 15726: 15726: LAST_LEVEL_SEEK_DATA, 15726: 15726: 15726: LAST_LEVEL_SEEK_DATA_USEFUL_NO_FILTER, 15726: 15726: 15726: LAST_LEVEL_SEEK_DATA_USEFUL_FILTER_MATCH, 15726: 15726: NON_LAST_LEVEL_SEEK_FILTERED, 15726: NON_LAST_LEVEL_SEEK_FILTER_MATCH, 15726: NON_LAST_LEVEL_SEEK_DATA, 15726: NON_LAST_LEVEL_SEEK_DATA_USEFUL_NO_FILTER, 15726: NON_LAST_LEVEL_SEEK_DATA_USEFUL_FILTER_MATCH, 15726: 15726: 15726: BLOCK_CHECKSUM_COMPUTE_COUNT, 15726: 15726: 15726: 15726: BLOCK_CHECKSUM_MISMATCH_COUNT, 15726: 15726: MULTIGET_COROUTINE_COUNT, 15726: 15726: 15726: READ_ASYNC_MICROS, 15726: 15726: ASYNC_READ_ERROR_COUNT, 15726: 15726: 15726: 15726: 15726: TABLE_OPEN_PREFETCH_TAIL_MISS, 15726: 15726: 15726: 15726: TABLE_OPEN_PREFETCH_TAIL_HIT, 15726: 15726: 15726: 15726: TIMESTAMP_FILTER_TABLE_CHECKED, 15726: 15726: TIMESTAMP_FILTER_TABLE_FILTERED, 15726: 15726: 15726: 15726: READAHEAD_TRIMMED, 15726: 15726: 15726: FIFO_MAX_SIZE_COMPACTIONS, 15726: FIFO_TTL_COMPACTIONS, 15726: 15726: 15726: PREFETCH_BYTES, 15726: 15726: 15726: PREFETCH_BYTES_USEFUL, 15726: 15726: 15726: PREFETCH_HITS, 15726: 15726: 15726: SST_FOOTER_CORRUPTION_COUNT, 15726: 15726: TICKER_ENUM_MAX 15726: }; 15726: 15726: 15726: 15726: extern const std::vector> TickersNameMap; 15726: # 550 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 15726: enum Histograms : uint32_t { 15726: DB_GET = 0, 15726: DB_WRITE, 15726: COMPACTION_TIME, 15726: COMPACTION_CPU_TIME, 15726: SUBCOMPACTION_SETUP_TIME, 15726: TABLE_SYNC_MICROS, 15726: COMPACTION_OUTFILE_SYNC_MICROS, 15726: WAL_FILE_SYNC_MICROS, 15726: MANIFEST_FILE_SYNC_MICROS, 15726: 15726: TABLE_OPEN_IO_MICROS, 15726: DB_MULTIGET, 15726: READ_BLOCK_COMPACTION_MICROS, 15726: READ_BLOCK_GET_MICROS, 15726: WRITE_RAW_BLOCK_MICROS, 15726: NUM_FILES_IN_SINGLE_COMPACTION, 15726: DB_SEEK, 15726: WRITE_STALL, 15726: 15726: SST_READ_MICROS, 15726: 15726: 15726: FILE_READ_FLUSH_MICROS, 15726: FILE_READ_COMPACTION_MICROS, 15726: FILE_READ_DB_OPEN_MICROS, 15726: 15726: 15726: FILE_READ_GET_MICROS, 15726: FILE_READ_MULTIGET_MICROS, 15726: FILE_READ_DB_ITERATOR_MICROS, 15726: FILE_READ_VERIFY_DB_CHECKSUM_MICROS, 15726: FILE_READ_VERIFY_FILE_CHECKSUMS_MICROS, 15726: 15726: 15726: SST_WRITE_MICROS, 15726: 15726: 15726: FILE_WRITE_FLUSH_MICROS, 15726: FILE_WRITE_COMPACTION_MICROS, 15726: FILE_WRITE_DB_OPEN_MICROS, 15726: 15726: 15726: NUM_SUBCOMPACTIONS_SCHEDULED, 15726: 15726: BYTES_PER_READ, 15726: BYTES_PER_WRITE, 15726: BYTES_PER_MULTIGET, 15726: 15726: COMPRESSION_TIMES_NANOS, 15726: DECOMPRESSION_TIMES_NANOS, 15726: 15726: 15726: READ_NUM_MERGE_OPERANDS, 15726: 15726: 15726: 15726: BLOB_DB_KEY_SIZE, 15726: 15726: BLOB_DB_VALUE_SIZE, 15726: 15726: 15726: BLOB_DB_WRITE_MICROS, 15726: 15726: BLOB_DB_GET_MICROS, 15726: 15726: BLOB_DB_MULTIGET_MICROS, 15726: 15726: 15726: BLOB_DB_SEEK_MICROS, 15726: 15726: BLOB_DB_NEXT_MICROS, 15726: 15726: BLOB_DB_PREV_MICROS, 15726: 15726: BLOB_DB_BLOB_FILE_WRITE_MICROS, 15726: 15726: BLOB_DB_BLOB_FILE_READ_MICROS, 15726: 15726: BLOB_DB_BLOB_FILE_SYNC_MICROS, 15726: 15726: BLOB_DB_COMPRESSION_MICROS, 15726: 15726: BLOB_DB_DECOMPRESSION_MICROS, 15726: 15726: FLUSH_TIME, 15726: SST_BATCH_SIZE, 15726: 15726: 15726: MULTIGET_IO_BATCH_SIZE, 15726: 15726: 15726: NUM_INDEX_AND_FILTER_BLOCKS_READ_PER_LEVEL, 15726: 15726: NUM_SST_READ_PER_LEVEL, 15726: 15726: NUM_LEVEL_READ_PER_MULTIGET, 15726: 15726: 15726: ERROR_HANDLER_AUTORESUME_RETRY_COUNT, 15726: 15726: 15726: ASYNC_READ_BYTES, 15726: POLL_WAIT_MICROS, 15726: 15726: 15726: PREFETCHED_BYTES_DISCARDED, 15726: 15726: 15726: ASYNC_PREFETCH_ABORT_MICROS, 15726: 15726: 15726: 15726: TABLE_OPEN_PREFETCH_TAIL_READ_BYTES, 15726: 15726: HISTOGRAM_ENUM_MAX 15726: }; 15726: 15726: extern const std::vector> HistogramsNameMap; 15726: 15726: struct HistogramData { 15726: double median; 15726: double percentile95; 15726: double percentile99; 15726: double average; 15726: double standard_deviation; 15726: 15726: 15726: double max = 0.0; 15726: uint64_t count = 0; 15726: uint64_t sum = 0; 15726: double min = 0.0; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: enum StatsLevel : uint8_t { 15726: 15726: kDisableAll, 15726: 15726: kExceptTickers = kDisableAll, 15726: 15726: kExceptHistogramOrTimers, 15726: 15726: kExceptTimers, 15726: 15726: 15726: kExceptDetailedTimers, 15726: 15726: 15726: kExceptTimeForMutex, 15726: 15726: 15726: 15726: kAll, 15726: }; 15726: # 722 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 15726: class Statistics : public Customizable { 15726: public: 15726: ~Statistics() override {} 15726: static const char* Type() { return "Statistics"; } 15726: static Status CreateFromString(const ConfigOptions& opts, 15726: const std::string& value, 15726: std::shared_ptr* result); 15726: 15726: 15726: 15726: const char* Name() const override { return ""; } 15726: virtual uint64_t getTickerCount(uint32_t tickerType) const = 0; 15726: virtual void histogramData(uint32_t type, 15726: HistogramData* const data) const = 0; 15726: virtual std::string getHistogramString(uint32_t ) const { return ""; } 15726: virtual void recordTick(uint32_t tickerType, uint64_t count = 1) = 0; 15726: virtual void setTickerCount(uint32_t tickerType, uint64_t count) = 0; 15726: virtual uint64_t getAndResetTickerCount(uint32_t tickerType) = 0; 15726: virtual void reportTimeToHistogram(uint32_t histogramType, uint64_t time) { 15726: if (get_stats_level() <= StatsLevel::kExceptTimers) { 15726: return; 15726: } 15726: recordInHistogram(histogramType, time); 15726: } 15726: 15726: 15726: 15726: virtual void measureTime(uint32_t , uint64_t ) { 15726: 15726: 15726: # 751 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 3 4 15726: (static_cast ( 15726: # 751 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 15726: false 15726: # 751 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 751 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 15726: "false" 15726: # 751 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 751 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/statistics.h" 15726: ; 15726: } 15726: virtual void recordInHistogram(uint32_t histogramType, uint64_t time) { 15726: 15726: 15726: 15726: 15726: measureTime(histogramType, time); 15726: } 15726: 15726: 15726: virtual Status Reset() { return Status::NotSupported("Not implemented"); } 15726: 15726: using Customizable::ToString; 15726: 15726: virtual std::string ToString() const { 15726: 15726: return std::string("ToString(): not implemented"); 15726: } 15726: 15726: virtual bool getTickerMap(std::map*) const { 15726: 15726: return false; 15726: } 15726: 15726: 15726: virtual bool HistEnabledForType(uint32_t type) const { 15726: return type < HISTOGRAM_ENUM_MAX; 15726: } 15726: void set_stats_level(StatsLevel sl) { 15726: stats_level_.store(sl, std::memory_order_relaxed); 15726: } 15726: StatsLevel get_stats_level() const { 15726: return stats_level_.load(std::memory_order_relaxed); 15726: } 15726: 15726: private: 15726: std::atomic stats_level_{kExceptDetailedTimers}; 15726: }; 15726: 15726: 15726: std::shared_ptr CreateDBStatistics(); 15726: 15726: } 15726: # 18 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: class HistogramBucketMapper { 15726: public: 15726: HistogramBucketMapper(); 15726: 15726: 15726: size_t IndexForValue(uint64_t value) const; 15726: 15726: 15726: size_t BucketCount() const { return bucketValues_.size(); } 15726: 15726: uint64_t LastValue() const { return maxBucketValue_; } 15726: 15726: uint64_t FirstValue() const { return minBucketValue_; } 15726: 15726: uint64_t BucketLimit(const size_t bucketNumber) const { 15726: 15726: # 36 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 3 4 15726: (static_cast ( 15726: # 36 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 15726: bucketNumber < BucketCount() 15726: # 36 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 36 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 15726: "bucketNumber < BucketCount()" 15726: # 36 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 36 "/build/reproducible-path/rocksdb-9.3.1/monitoring/histogram.h" 15726: ; 15726: return bucketValues_[bucketNumber]; 15726: } 15726: 15726: private: 15726: std::vector bucketValues_; 15726: uint64_t maxBucketValue_; 15726: uint64_t minBucketValue_; 15726: }; 15726: 15726: struct HistogramStat { 15726: HistogramStat(); 15726: ~HistogramStat() {} 15726: 15726: HistogramStat(const HistogramStat&) = delete; 15726: HistogramStat& operator=(const HistogramStat&) = delete; 15726: 15726: void Clear(); 15726: bool Empty() const; 15726: void Add(uint64_t value); 15726: void Merge(const HistogramStat& other); 15726: 15726: inline uint64_t min() const { return min_.load(std::memory_order_relaxed); } 15726: inline uint64_t max() const { return max_.load(std::memory_order_relaxed); } 15726: inline uint64_t num() const { return num_.load(std::memory_order_relaxed); } 15726: inline uint64_t sum() const { return sum_.load(std::memory_order_relaxed); } 15726: inline uint64_t sum_squares() const { 15726: return sum_squares_.load(std::memory_order_relaxed); 15726: } 15726: inline uint64_t bucket_at(size_t b) const { 15726: return buckets_[b].load(std::memory_order_relaxed); 15726: } 15726: 15726: double Median() const; 15726: double Percentile(double p) const; 15726: double Average() const; 15726: double StandardDeviation() const; 15726: void Data(HistogramData* const data) const; 15726: std::string ToString() const; 15726: 15726: 15726: 15726: 15726: std::atomic_uint_fast64_t min_; 15726: std::atomic_uint_fast64_t max_; 15726: std::atomic_uint_fast64_t num_; 15726: std::atomic_uint_fast64_t sum_; 15726: std::atomic_uint_fast64_t sum_squares_; 15726: std::atomic_uint_fast64_t buckets_[109]; 15726: const uint64_t num_buckets_; 15726: }; 15726: 15726: class Histogram { 15726: public: 15726: Histogram() {} 15726: virtual ~Histogram(){} 15726: 15726: virtual void Clear() = 0; 15726: virtual bool Empty() const = 0; 15726: virtual void Add(uint64_t value) = 0; 15726: virtual void Merge(const Histogram&) = 0; 15726: 15726: virtual std::string ToString() const = 0; 15726: virtual const char* Name() const = 0; 15726: virtual uint64_t min() const = 0; 15726: virtual uint64_t max() const = 0; 15726: virtual uint64_t num() const = 0; 15726: virtual double Median() const = 0; 15726: virtual double Percentile(double p) const = 0; 15726: virtual double Average() const = 0; 15726: virtual double StandardDeviation() const = 0; 15726: virtual void Data(HistogramData* const data) const = 0; 15726: }; 15726: 15726: class HistogramImpl : public Histogram { 15726: public: 15726: HistogramImpl() { Clear(); } 15726: 15726: HistogramImpl(const HistogramImpl&) = delete; 15726: HistogramImpl& operator=(const HistogramImpl&) = delete; 15726: 15726: void Clear() override; 15726: bool Empty() const override; 15726: void Add(uint64_t value) override; 15726: void Merge(const Histogram& other) override; 15726: void Merge(const HistogramImpl& other); 15726: 15726: std::string ToString() const override; 15726: const char* Name() const override { return "HistogramImpl"; } 15726: uint64_t min() const override { return stats_.min(); } 15726: uint64_t max() const override { return stats_.max(); } 15726: uint64_t num() const override { return stats_.num(); } 15726: double Median() const override; 15726: double Percentile(double p) const override; 15726: double Average() const override; 15726: double StandardDeviation() const override; 15726: void Data(HistogramData* const data) const override; 15726: 15726: virtual ~HistogramImpl() {} 15726: 15726: inline HistogramStat& TEST_GetStats() { return stats_; } 15726: 15726: private: 15726: HistogramStat stats_; 15726: std::mutex mutex_; 15726: }; 15726: 15726: } 15726: # 13 "/build/reproducible-path/rocksdb-9.3.1/monitoring/statistics_impl.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/port/likely.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/port/likely.h" 15726: 15726: # 14 "/build/reproducible-path/rocksdb-9.3.1/monitoring/statistics_impl.h" 2 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/cassert" 1 3 15726: # 41 "/usr/include/c++/13/cassert" 3 15726: 15726: # 42 "/usr/include/c++/13/cassert" 3 15726: 15726: 15726: # 1 "/usr/include/assert.h" 1 3 4 15726: # 45 "/usr/include/c++/13/cassert" 2 3 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 2 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/assert.h" 1 3 4 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 2 15726: # 19 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/port/lang.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 54 "/build/reproducible-path/rocksdb-9.3.1/port/lang.h" 15726: constexpr bool kMustFreeHeapAllocations = false; 15726: # 20 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 2 15726: 15726: 15726: static_assert(true, "Semicolon required"); 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: template 15726: inline T BottomNBits(T v, int nbits) { 15726: static_assert(std::is_integral_v, "non-integral type"); 15726: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 15726: 15726: # 32 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 15726: (static_cast ( 15726: # 32 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: nbits >= 0 15726: # 32 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 32 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: "nbits >= 0" 15726: # 32 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 32 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: ; 15726: 15726: # 33 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 15726: (static_cast ( 15726: # 33 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: nbits < int{8 * sizeof(T)} 15726: # 33 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 33 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: "nbits < int{8 * sizeof(T)}" 15726: # 33 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 33 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: ; 15726: # 44 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: return static_cast(v & ((T{1} << nbits) - 1)); 15726: } 15726: 15726: 15726: 15726: template 15726: inline int FloorLog2(T v) { 15726: static_assert(std::is_integral_v, "non-integral type"); 15726: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 15726: 15726: # 53 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 15726: (static_cast ( 15726: # 53 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: v > 0 15726: # 53 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 53 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: "v > 0" 15726: # 53 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 53 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: ; 15726: # 74 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: static_assert(sizeof(T) <= sizeof(unsigned long long), "type too big"); 15726: if (sizeof(T) <= sizeof(unsigned int)) { 15726: int lz = __builtin_clz(static_cast(v)); 15726: return int{sizeof(unsigned int)} * 8 - 1 - lz; 15726: } else if (sizeof(T) <= sizeof(unsigned long)) { 15726: int lz = __builtin_clzl(static_cast(v)); 15726: return int{sizeof(unsigned long)} * 8 - 1 - lz; 15726: } else { 15726: int lz = __builtin_clzll(static_cast(v)); 15726: return int{sizeof(unsigned long long)} * 8 - 1 - lz; 15726: } 15726: 15726: } 15726: 15726: 15726: template 15726: constexpr int ConstexprFloorLog2(T v) { 15726: 15726: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 15726: int rv = 0; 15726: while (v > T{1}) { 15726: ++rv; 15726: v >>= 1; 15726: } 15726: return rv; 15726: } 15726: 15726: 15726: template 15726: inline int CountTrailingZeroBits(T v) { 15726: static_assert(std::is_integral_v, "non-integral type"); 15726: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 15726: 15726: # 106 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 15726: (static_cast ( 15726: # 106 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: v != 0 15726: # 106 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 106 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: "v != 0" 15726: # 106 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 106 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: ; 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: static_assert(sizeof(T) <= sizeof(unsigned long long), "type too big"); 15726: if (sizeof(T) <= sizeof(unsigned int)) { 15726: return __builtin_ctz(static_cast(v)); 15726: } else if (sizeof(T) <= sizeof(unsigned long)) { 15726: return __builtin_ctzl(static_cast(v)); 15726: } else { 15726: return __builtin_ctzll(static_cast(v)); 15726: } 15726: 15726: } 15726: # 172 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: template 15726: inline int BitsSetToOne(T v) { 15726: static_assert(std::is_integral_v, "non-integral type"); 15726: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 15726: # 209 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: static_assert(sizeof(T) <= sizeof(unsigned long long), "type too big"); 15726: if (sizeof(T) < sizeof(unsigned int)) { 15726: 15726: constexpr auto mm = 8 * sizeof(unsigned int) - 1; 15726: 15726: constexpr unsigned int m = (1U << ((8 * sizeof(T)) & mm)) - 1; 15726: return __builtin_popcount(static_cast(v) & m); 15726: } else if (sizeof(T) == sizeof(unsigned int)) { 15726: return __builtin_popcount(static_cast(v)); 15726: } else if (sizeof(T) <= sizeof(unsigned long)) { 15726: return __builtin_popcountl(static_cast(v)); 15726: } else { 15726: return __builtin_popcountll(static_cast(v)); 15726: } 15726: 15726: } 15726: 15726: template 15726: inline int BitParity(T v) { 15726: static_assert(std::is_integral_v, "non-integral type"); 15726: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 15726: 15726: 15726: 15726: 15726: 15726: static_assert(sizeof(T) <= sizeof(unsigned long long), "type too big"); 15726: if (sizeof(T) <= sizeof(unsigned int)) { 15726: 15726: return __builtin_parity(static_cast(v)); 15726: } else if (sizeof(T) <= sizeof(unsigned long)) { 15726: return __builtin_parityl(static_cast(v)); 15726: } else { 15726: return __builtin_parityll(static_cast(v)); 15726: } 15726: 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: inline T EndianSwapValue(T v) { 15726: static_assert(std::is_integral_v, "non-integral type"); 15726: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 15726: # 264 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: if (sizeof(T) == 2) { 15726: return static_cast(__builtin_bswap16(static_cast(v))); 15726: } else if (sizeof(T) == 4) { 15726: return static_cast(__builtin_bswap32(static_cast(v))); 15726: } else if (sizeof(T) == 8) { 15726: return static_cast(__builtin_bswap64(static_cast(v))); 15726: } 15726: 15726: 15726: T ret_val = 0; 15726: for (std::size_t i = 0; i < sizeof(T); ++i) { 15726: ret_val |= ((v >> (8 * i)) & 0xff) << (8 * (sizeof(T) - 1 - i)); 15726: } 15726: return ret_val; 15726: } 15726: 15726: 15726: template 15726: inline T ReverseBits(T v) { 15726: static_assert(std::is_integral_v, "non-integral type"); 15726: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 15726: 15726: T r = EndianSwapValue(v); 15726: const T kHighestByte = T{1} << ((sizeof(T) - 1) * 8); 15726: const T kEveryByte = kHighestByte | (kHighestByte / 255); 15726: 15726: r = ((r & (kEveryByte * 0x0f)) << 4) | ((r >> 4) & (kEveryByte * 0x0f)); 15726: r = ((r & (kEveryByte * 0x33)) << 2) | ((r >> 2) & (kEveryByte * 0x33)); 15726: r = ((r & (kEveryByte * 0x55)) << 1) | ((r >> 1) & (kEveryByte * 0x55)); 15726: 15726: return r; 15726: } 15726: # 317 "/build/reproducible-path/rocksdb-9.3.1/util/math.h" 15726: template 15726: inline T DownwardInvolution(T v) { 15726: static_assert(std::is_integral_v, "non-integral type"); 15726: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 15726: static_assert(sizeof(T) <= 8, "only supported up to 64 bits"); 15726: 15726: uint64_t r = static_cast(v); 15726: if constexpr (sizeof(T) > 4) { 15726: r ^= r >> 32; 15726: } 15726: if constexpr (sizeof(T) > 2) { 15726: r ^= (r & 0xffff0000ffff0000U) >> 16; 15726: } 15726: if constexpr (sizeof(T) > 1) { 15726: r ^= (r & 0xff00ff00ff00ff00U) >> 8; 15726: } 15726: r ^= (r & 0xf0f0f0f0f0f0f0f0U) >> 4; 15726: r ^= (r & 0xccccccccccccccccU) >> 2; 15726: r ^= (r & 0xaaaaaaaaaaaaaaaaU) >> 1; 15726: return static_cast(r); 15726: } 15726: 15726: 15726: 15726: template 15726: inline std::conditional_t BitwiseAnd(A a, B b) { 15726: static_assert(std::is_integral_v, "non-integral type"); 15726: static_assert(std::is_integral_v, "non-integral type"); 15726: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 15726: static_assert(!std::is_reference_v, "use std::remove_reference_t"); 15726: using Smaller = std::conditional_t; 15726: return static_cast(a & b); 15726: } 15726: 15726: } 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/random.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/util/random.h" 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/random" 1 3 15726: # 32 "/usr/include/c++/13/random" 3 15726: 15726: # 33 "/usr/include/c++/13/random" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/cmath" 1 3 15726: # 39 "/usr/include/c++/13/cmath" 3 15726: 15726: # 40 "/usr/include/c++/13/cmath" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/math.h" 1 3 4 15726: # 27 "/usr/include/math.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 15726: # 28 "/usr/include/math.h" 2 3 4 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 34 "/usr/include/math.h" 3 4 15726: extern "C" { 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/math-vector.h" 1 3 4 15726: # 27 "/usr/include/arm-linux-gnueabihf/bits/math-vector.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/libm-simd-decl-stubs.h" 1 3 4 15726: # 28 "/usr/include/arm-linux-gnueabihf/bits/math-vector.h" 2 3 4 15726: # 41 "/usr/include/math.h" 2 3 4 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/floatn.h" 1 3 4 15726: # 44 "/usr/include/math.h" 2 3 4 15726: # 152 "/usr/include/math.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/flt-eval-method.h" 1 3 4 15726: # 153 "/usr/include/math.h" 2 3 4 15726: # 163 "/usr/include/math.h" 3 4 15726: typedef float float_t; 15726: typedef double double_t; 15726: # 204 "/usr/include/math.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/fp-logb.h" 1 3 4 15726: # 205 "/usr/include/math.h" 2 3 4 15726: # 247 "/usr/include/math.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/fp-fast.h" 1 3 4 15726: # 248 "/usr/include/math.h" 2 3 4 15726: 15726: 15726: 15726: enum 15726: { 15726: FP_INT_UPWARD = 15726: 15726: 0, 15726: FP_INT_DOWNWARD = 15726: 15726: 1, 15726: FP_INT_TOWARDZERO = 15726: 15726: 2, 15726: FP_INT_TONEARESTFROMZERO = 15726: 15726: 3, 15726: FP_INT_TONEAREST = 15726: 15726: 4, 15726: }; 15726: # 312 "/usr/include/math.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-helper-functions.h" 1 3 4 15726: # 20 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-helper-functions.h" 3 4 15726: extern int __fpclassify (double __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: extern int __signbit (double __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern int __isinf (double __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: extern int __finite (double __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: extern int __isnan (double __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: extern int __iseqsig (double __x, double __y) noexcept (true); 15726: 15726: 15726: extern int __issignaling (double __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: # 313 "/usr/include/math.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 1 3 4 15726: # 53 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern double acos (double __x) noexcept (true); extern double __acos (double __x) noexcept (true); 15726: 15726: extern double asin (double __x) noexcept (true); extern double __asin (double __x) noexcept (true); 15726: 15726: extern double atan (double __x) noexcept (true); extern double __atan (double __x) noexcept (true); 15726: 15726: extern double atan2 (double __y, double __x) noexcept (true); extern double __atan2 (double __y, double __x) noexcept (true); 15726: 15726: 15726: extern double cos (double __x) noexcept (true); extern double __cos (double __x) noexcept (true); 15726: 15726: extern double sin (double __x) noexcept (true); extern double __sin (double __x) noexcept (true); 15726: 15726: extern double tan (double __x) noexcept (true); extern double __tan (double __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern double cosh (double __x) noexcept (true); extern double __cosh (double __x) noexcept (true); 15726: 15726: extern double sinh (double __x) noexcept (true); extern double __sinh (double __x) noexcept (true); 15726: 15726: extern double tanh (double __x) noexcept (true); extern double __tanh (double __x) noexcept (true); 15726: 15726: 15726: 15726: extern void sincos (double __x, double *__sinx, double *__cosx) noexcept (true); extern void __sincos (double __x, double *__sinx, double *__cosx) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: 15726: extern double acosh (double __x) noexcept (true); extern double __acosh (double __x) noexcept (true); 15726: 15726: extern double asinh (double __x) noexcept (true); extern double __asinh (double __x) noexcept (true); 15726: 15726: extern double atanh (double __x) noexcept (true); extern double __atanh (double __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern double exp (double __x) noexcept (true); extern double __exp (double __x) noexcept (true); 15726: 15726: 15726: extern double frexp (double __x, int *__exponent) noexcept (true); extern double __frexp (double __x, int *__exponent) noexcept (true); 15726: 15726: 15726: extern double ldexp (double __x, int __exponent) noexcept (true); extern double __ldexp (double __x, int __exponent) noexcept (true); 15726: 15726: 15726: extern double log (double __x) noexcept (true); extern double __log (double __x) noexcept (true); 15726: 15726: 15726: extern double log10 (double __x) noexcept (true); extern double __log10 (double __x) noexcept (true); 15726: 15726: 15726: extern double modf (double __x, double *__iptr) noexcept (true); extern double __modf (double __x, double *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: 15726: extern double exp10 (double __x) noexcept (true); extern double __exp10 (double __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern double expm1 (double __x) noexcept (true); extern double __expm1 (double __x) noexcept (true); 15726: 15726: 15726: extern double log1p (double __x) noexcept (true); extern double __log1p (double __x) noexcept (true); 15726: 15726: 15726: extern double logb (double __x) noexcept (true); extern double __logb (double __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern double exp2 (double __x) noexcept (true); extern double __exp2 (double __x) noexcept (true); 15726: 15726: 15726: extern double log2 (double __x) noexcept (true); extern double __log2 (double __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern double pow (double __x, double __y) noexcept (true); extern double __pow (double __x, double __y) noexcept (true); 15726: 15726: 15726: extern double sqrt (double __x) noexcept (true); extern double __sqrt (double __x) noexcept (true); 15726: 15726: 15726: 15726: extern double hypot (double __x, double __y) noexcept (true); extern double __hypot (double __x, double __y) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern double cbrt (double __x) noexcept (true); extern double __cbrt (double __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern double ceil (double __x) noexcept (true) __attribute__ ((__const__)); extern double __ceil (double __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern double fabs (double __x) noexcept (true) __attribute__ ((__const__)); extern double __fabs (double __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern double floor (double __x) noexcept (true) __attribute__ ((__const__)); extern double __floor (double __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern double fmod (double __x, double __y) noexcept (true); extern double __fmod (double __x, double __y) noexcept (true); 15726: # 183 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern int finite (double __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: extern double drem (double __x, double __y) noexcept (true); extern double __drem (double __x, double __y) noexcept (true); 15726: 15726: 15726: 15726: extern double significand (double __x) noexcept (true); extern double __significand (double __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern double copysign (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __copysign (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern double nan (const char *__tagb) noexcept (true); extern double __nan (const char *__tagb) noexcept (true); 15726: # 220 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern double j0 (double) noexcept (true); extern double __j0 (double) noexcept (true); 15726: extern double j1 (double) noexcept (true); extern double __j1 (double) noexcept (true); 15726: extern double jn (int, double) noexcept (true); extern double __jn (int, double) noexcept (true); 15726: extern double y0 (double) noexcept (true); extern double __y0 (double) noexcept (true); 15726: extern double y1 (double) noexcept (true); extern double __y1 (double) noexcept (true); 15726: extern double yn (int, double) noexcept (true); extern double __yn (int, double) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern double erf (double) noexcept (true); extern double __erf (double) noexcept (true); 15726: extern double erfc (double) noexcept (true); extern double __erfc (double) noexcept (true); 15726: extern double lgamma (double) noexcept (true); extern double __lgamma (double) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern double tgamma (double) noexcept (true); extern double __tgamma (double) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern double gamma (double) noexcept (true); extern double __gamma (double) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern double lgamma_r (double, int *__signgamp) noexcept (true); extern double __lgamma_r (double, int *__signgamp) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern double rint (double __x) noexcept (true); extern double __rint (double __x) noexcept (true); 15726: 15726: 15726: extern double nextafter (double __x, double __y) noexcept (true); extern double __nextafter (double __x, double __y) noexcept (true); 15726: 15726: extern double nexttoward (double __x, long double __y) noexcept (true); extern double __nexttoward (double __x, long double __y) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern double nextdown (double __x) noexcept (true); extern double __nextdown (double __x) noexcept (true); 15726: 15726: extern double nextup (double __x) noexcept (true); extern double __nextup (double __x) noexcept (true); 15726: 15726: 15726: 15726: extern double remainder (double __x, double __y) noexcept (true); extern double __remainder (double __x, double __y) noexcept (true); 15726: 15726: 15726: 15726: extern double scalbn (double __x, int __n) noexcept (true); extern double __scalbn (double __x, int __n) noexcept (true); 15726: 15726: 15726: 15726: extern int ilogb (double __x) noexcept (true); extern int __ilogb (double __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern long int llogb (double __x) noexcept (true); extern long int __llogb (double __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern double scalbln (double __x, long int __n) noexcept (true); extern double __scalbln (double __x, long int __n) noexcept (true); 15726: 15726: 15726: 15726: extern double nearbyint (double __x) noexcept (true); extern double __nearbyint (double __x) noexcept (true); 15726: 15726: 15726: 15726: extern double round (double __x) noexcept (true) __attribute__ ((__const__)); extern double __round (double __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern double trunc (double __x) noexcept (true) __attribute__ ((__const__)); extern double __trunc (double __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern double remquo (double __x, double __y, int *__quo) noexcept (true); extern double __remquo (double __x, double __y, int *__quo) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern long int lrint (double __x) noexcept (true); extern long int __lrint (double __x) noexcept (true); 15726: __extension__ 15726: extern long long int llrint (double __x) noexcept (true); extern long long int __llrint (double __x) noexcept (true); 15726: 15726: 15726: 15726: extern long int lround (double __x) noexcept (true); extern long int __lround (double __x) noexcept (true); 15726: __extension__ 15726: extern long long int llround (double __x) noexcept (true); extern long long int __llround (double __x) noexcept (true); 15726: 15726: 15726: 15726: extern double fdim (double __x, double __y) noexcept (true); extern double __fdim (double __x, double __y) noexcept (true); 15726: 15726: 15726: 15726: extern double fmax (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmax (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern double fmin (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmin (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern double fma (double __x, double __y, double __z) noexcept (true); extern double __fma (double __x, double __y, double __z) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern double roundeven (double __x) noexcept (true) __attribute__ ((__const__)); extern double __roundeven (double __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern __intmax_t fromfp (double __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfp (double __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: extern __uintmax_t ufromfp (double __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfp (double __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: 15726: extern __intmax_t fromfpx (double __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpx (double __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: 15726: extern __uintmax_t ufromfpx (double __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpx (double __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: extern int canonicalize (double *__cx, const double *__x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern double fmaxmag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmaxmag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern double fminmag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fminmag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern double fmaximum (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmaximum (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern double fminimum (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fminimum (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern double fmaximum_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmaximum_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern double fminimum_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fminimum_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern double fmaximum_mag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmaximum_mag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern double fminimum_mag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fminimum_mag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern double fmaximum_mag_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmaximum_mag_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern double fminimum_mag_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fminimum_mag_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern int totalorder (const double *__x, const double *__y) noexcept (true) 15726: 15726: __attribute__ ((__pure__)); 15726: 15726: 15726: extern int totalordermag (const double *__x, const double *__y) noexcept (true) 15726: 15726: __attribute__ ((__pure__)); 15726: 15726: 15726: extern double getpayload (const double *__x) noexcept (true); extern double __getpayload (const double *__x) noexcept (true); 15726: 15726: 15726: extern int setpayload (double *__x, double __payload) noexcept (true); 15726: 15726: 15726: extern int setpayloadsig (double *__x, double __payload) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern double scalb (double __x, double __n) noexcept (true); extern double __scalb (double __x, double __n) noexcept (true); 15726: # 314 "/usr/include/math.h" 2 3 4 15726: # 329 "/usr/include/math.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-helper-functions.h" 1 3 4 15726: # 20 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-helper-functions.h" 3 4 15726: extern int __fpclassifyf (float __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: extern int __signbitf (float __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern int __isinff (float __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: extern int __finitef (float __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: extern int __isnanf (float __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: extern int __iseqsigf (float __x, float __y) noexcept (true); 15726: 15726: 15726: extern int __issignalingf (float __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: # 330 "/usr/include/math.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 1 3 4 15726: # 53 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern float acosf (float __x) noexcept (true); extern float __acosf (float __x) noexcept (true); 15726: 15726: extern float asinf (float __x) noexcept (true); extern float __asinf (float __x) noexcept (true); 15726: 15726: extern float atanf (float __x) noexcept (true); extern float __atanf (float __x) noexcept (true); 15726: 15726: extern float atan2f (float __y, float __x) noexcept (true); extern float __atan2f (float __y, float __x) noexcept (true); 15726: 15726: 15726: extern float cosf (float __x) noexcept (true); extern float __cosf (float __x) noexcept (true); 15726: 15726: extern float sinf (float __x) noexcept (true); extern float __sinf (float __x) noexcept (true); 15726: 15726: extern float tanf (float __x) noexcept (true); extern float __tanf (float __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern float coshf (float __x) noexcept (true); extern float __coshf (float __x) noexcept (true); 15726: 15726: extern float sinhf (float __x) noexcept (true); extern float __sinhf (float __x) noexcept (true); 15726: 15726: extern float tanhf (float __x) noexcept (true); extern float __tanhf (float __x) noexcept (true); 15726: 15726: 15726: 15726: extern void sincosf (float __x, float *__sinx, float *__cosx) noexcept (true); extern void __sincosf (float __x, float *__sinx, float *__cosx) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: 15726: extern float acoshf (float __x) noexcept (true); extern float __acoshf (float __x) noexcept (true); 15726: 15726: extern float asinhf (float __x) noexcept (true); extern float __asinhf (float __x) noexcept (true); 15726: 15726: extern float atanhf (float __x) noexcept (true); extern float __atanhf (float __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern float expf (float __x) noexcept (true); extern float __expf (float __x) noexcept (true); 15726: 15726: 15726: extern float frexpf (float __x, int *__exponent) noexcept (true); extern float __frexpf (float __x, int *__exponent) noexcept (true); 15726: 15726: 15726: extern float ldexpf (float __x, int __exponent) noexcept (true); extern float __ldexpf (float __x, int __exponent) noexcept (true); 15726: 15726: 15726: extern float logf (float __x) noexcept (true); extern float __logf (float __x) noexcept (true); 15726: 15726: 15726: extern float log10f (float __x) noexcept (true); extern float __log10f (float __x) noexcept (true); 15726: 15726: 15726: extern float modff (float __x, float *__iptr) noexcept (true); extern float __modff (float __x, float *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: 15726: extern float exp10f (float __x) noexcept (true); extern float __exp10f (float __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern float expm1f (float __x) noexcept (true); extern float __expm1f (float __x) noexcept (true); 15726: 15726: 15726: extern float log1pf (float __x) noexcept (true); extern float __log1pf (float __x) noexcept (true); 15726: 15726: 15726: extern float logbf (float __x) noexcept (true); extern float __logbf (float __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern float exp2f (float __x) noexcept (true); extern float __exp2f (float __x) noexcept (true); 15726: 15726: 15726: extern float log2f (float __x) noexcept (true); extern float __log2f (float __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern float powf (float __x, float __y) noexcept (true); extern float __powf (float __x, float __y) noexcept (true); 15726: 15726: 15726: extern float sqrtf (float __x) noexcept (true); extern float __sqrtf (float __x) noexcept (true); 15726: 15726: 15726: 15726: extern float hypotf (float __x, float __y) noexcept (true); extern float __hypotf (float __x, float __y) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern float cbrtf (float __x) noexcept (true); extern float __cbrtf (float __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern float ceilf (float __x) noexcept (true) __attribute__ ((__const__)); extern float __ceilf (float __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern float fabsf (float __x) noexcept (true) __attribute__ ((__const__)); extern float __fabsf (float __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern float floorf (float __x) noexcept (true) __attribute__ ((__const__)); extern float __floorf (float __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern float fmodf (float __x, float __y) noexcept (true); extern float __fmodf (float __x, float __y) noexcept (true); 15726: # 177 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern int isinff (float __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern int finitef (float __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: extern float dremf (float __x, float __y) noexcept (true); extern float __dremf (float __x, float __y) noexcept (true); 15726: 15726: 15726: 15726: extern float significandf (float __x) noexcept (true); extern float __significandf (float __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern float copysignf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __copysignf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern float nanf (const char *__tagb) noexcept (true); extern float __nanf (const char *__tagb) noexcept (true); 15726: # 213 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern int isnanf (float __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: 15726: extern float j0f (float) noexcept (true); extern float __j0f (float) noexcept (true); 15726: extern float j1f (float) noexcept (true); extern float __j1f (float) noexcept (true); 15726: extern float jnf (int, float) noexcept (true); extern float __jnf (int, float) noexcept (true); 15726: extern float y0f (float) noexcept (true); extern float __y0f (float) noexcept (true); 15726: extern float y1f (float) noexcept (true); extern float __y1f (float) noexcept (true); 15726: extern float ynf (int, float) noexcept (true); extern float __ynf (int, float) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern float erff (float) noexcept (true); extern float __erff (float) noexcept (true); 15726: extern float erfcf (float) noexcept (true); extern float __erfcf (float) noexcept (true); 15726: extern float lgammaf (float) noexcept (true); extern float __lgammaf (float) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern float tgammaf (float) noexcept (true); extern float __tgammaf (float) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern float gammaf (float) noexcept (true); extern float __gammaf (float) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern float lgammaf_r (float, int *__signgamp) noexcept (true); extern float __lgammaf_r (float, int *__signgamp) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern float rintf (float __x) noexcept (true); extern float __rintf (float __x) noexcept (true); 15726: 15726: 15726: extern float nextafterf (float __x, float __y) noexcept (true); extern float __nextafterf (float __x, float __y) noexcept (true); 15726: 15726: extern float nexttowardf (float __x, long double __y) noexcept (true); extern float __nexttowardf (float __x, long double __y) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern float nextdownf (float __x) noexcept (true); extern float __nextdownf (float __x) noexcept (true); 15726: 15726: extern float nextupf (float __x) noexcept (true); extern float __nextupf (float __x) noexcept (true); 15726: 15726: 15726: 15726: extern float remainderf (float __x, float __y) noexcept (true); extern float __remainderf (float __x, float __y) noexcept (true); 15726: 15726: 15726: 15726: extern float scalbnf (float __x, int __n) noexcept (true); extern float __scalbnf (float __x, int __n) noexcept (true); 15726: 15726: 15726: 15726: extern int ilogbf (float __x) noexcept (true); extern int __ilogbf (float __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern long int llogbf (float __x) noexcept (true); extern long int __llogbf (float __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern float scalblnf (float __x, long int __n) noexcept (true); extern float __scalblnf (float __x, long int __n) noexcept (true); 15726: 15726: 15726: 15726: extern float nearbyintf (float __x) noexcept (true); extern float __nearbyintf (float __x) noexcept (true); 15726: 15726: 15726: 15726: extern float roundf (float __x) noexcept (true) __attribute__ ((__const__)); extern float __roundf (float __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern float truncf (float __x) noexcept (true) __attribute__ ((__const__)); extern float __truncf (float __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern float remquof (float __x, float __y, int *__quo) noexcept (true); extern float __remquof (float __x, float __y, int *__quo) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern long int lrintf (float __x) noexcept (true); extern long int __lrintf (float __x) noexcept (true); 15726: __extension__ 15726: extern long long int llrintf (float __x) noexcept (true); extern long long int __llrintf (float __x) noexcept (true); 15726: 15726: 15726: 15726: extern long int lroundf (float __x) noexcept (true); extern long int __lroundf (float __x) noexcept (true); 15726: __extension__ 15726: extern long long int llroundf (float __x) noexcept (true); extern long long int __llroundf (float __x) noexcept (true); 15726: 15726: 15726: 15726: extern float fdimf (float __x, float __y) noexcept (true); extern float __fdimf (float __x, float __y) noexcept (true); 15726: 15726: 15726: 15726: extern float fmaxf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fmaxf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern float fminf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fminf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern float fmaf (float __x, float __y, float __z) noexcept (true); extern float __fmaf (float __x, float __y, float __z) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern float roundevenf (float __x) noexcept (true) __attribute__ ((__const__)); extern float __roundevenf (float __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern __intmax_t fromfpf (float __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpf (float __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: extern __uintmax_t ufromfpf (float __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpf (float __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: 15726: extern __intmax_t fromfpxf (float __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpxf (float __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: 15726: extern __uintmax_t ufromfpxf (float __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpxf (float __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: extern int canonicalizef (float *__cx, const float *__x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern float fmaxmagf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fmaxmagf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern float fminmagf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fminmagf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern float fmaximumf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fmaximumf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern float fminimumf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fminimumf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern float fmaximum_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fmaximum_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern float fminimum_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fminimum_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern float fmaximum_magf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fmaximum_magf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern float fminimum_magf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fminimum_magf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern float fmaximum_mag_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fmaximum_mag_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern float fminimum_mag_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fminimum_mag_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern int totalorderf (const float *__x, const float *__y) noexcept (true) 15726: 15726: __attribute__ ((__pure__)); 15726: 15726: 15726: extern int totalordermagf (const float *__x, const float *__y) noexcept (true) 15726: 15726: __attribute__ ((__pure__)); 15726: 15726: 15726: extern float getpayloadf (const float *__x) noexcept (true); extern float __getpayloadf (const float *__x) noexcept (true); 15726: 15726: 15726: extern int setpayloadf (float *__x, float __payload) noexcept (true); 15726: 15726: 15726: extern int setpayloadsigf (float *__x, float __payload) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern float scalbf (float __x, float __n) noexcept (true); extern float __scalbf (float __x, float __n) noexcept (true); 15726: # 331 "/usr/include/math.h" 2 3 4 15726: # 398 "/usr/include/math.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-helper-functions.h" 1 3 4 15726: # 20 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-helper-functions.h" 3 4 15726: extern int __fpclassifyl (long double __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: extern int __signbitl (long double __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern int __isinfl (long double __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: extern int __finitel (long double __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: extern int __isnanl (long double __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: extern int __iseqsigl (long double __x, long double __y) noexcept (true); 15726: 15726: 15726: extern int __issignalingl (long double __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: # 399 "/usr/include/math.h" 2 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 1 3 4 15726: # 53 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern long double acosl (long double __x) noexcept (true); extern long double __acosl (long double __x) noexcept (true); 15726: 15726: extern long double asinl (long double __x) noexcept (true); extern long double __asinl (long double __x) noexcept (true); 15726: 15726: extern long double atanl (long double __x) noexcept (true); extern long double __atanl (long double __x) noexcept (true); 15726: 15726: extern long double atan2l (long double __y, long double __x) noexcept (true); extern long double __atan2l (long double __y, long double __x) noexcept (true); 15726: 15726: 15726: extern long double cosl (long double __x) noexcept (true); extern long double __cosl (long double __x) noexcept (true); 15726: 15726: extern long double sinl (long double __x) noexcept (true); extern long double __sinl (long double __x) noexcept (true); 15726: 15726: extern long double tanl (long double __x) noexcept (true); extern long double __tanl (long double __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern long double coshl (long double __x) noexcept (true); extern long double __coshl (long double __x) noexcept (true); 15726: 15726: extern long double sinhl (long double __x) noexcept (true); extern long double __sinhl (long double __x) noexcept (true); 15726: 15726: extern long double tanhl (long double __x) noexcept (true); extern long double __tanhl (long double __x) noexcept (true); 15726: 15726: 15726: 15726: extern void sincosl (long double __x, long double *__sinx, long double *__cosx) noexcept (true); extern void __sincosl (long double __x, long double *__sinx, long double *__cosx) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: 15726: extern long double acoshl (long double __x) noexcept (true); extern long double __acoshl (long double __x) noexcept (true); 15726: 15726: extern long double asinhl (long double __x) noexcept (true); extern long double __asinhl (long double __x) noexcept (true); 15726: 15726: extern long double atanhl (long double __x) noexcept (true); extern long double __atanhl (long double __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern long double expl (long double __x) noexcept (true); extern long double __expl (long double __x) noexcept (true); 15726: 15726: 15726: extern long double frexpl (long double __x, int *__exponent) noexcept (true); extern long double __frexpl (long double __x, int *__exponent) noexcept (true); 15726: 15726: 15726: extern long double ldexpl (long double __x, int __exponent) noexcept (true); extern long double __ldexpl (long double __x, int __exponent) noexcept (true); 15726: 15726: 15726: extern long double logl (long double __x) noexcept (true); extern long double __logl (long double __x) noexcept (true); 15726: 15726: 15726: extern long double log10l (long double __x) noexcept (true); extern long double __log10l (long double __x) noexcept (true); 15726: 15726: 15726: extern long double modfl (long double __x, long double *__iptr) noexcept (true); extern long double __modfl (long double __x, long double *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: 15726: extern long double exp10l (long double __x) noexcept (true); extern long double __exp10l (long double __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern long double expm1l (long double __x) noexcept (true); extern long double __expm1l (long double __x) noexcept (true); 15726: 15726: 15726: extern long double log1pl (long double __x) noexcept (true); extern long double __log1pl (long double __x) noexcept (true); 15726: 15726: 15726: extern long double logbl (long double __x) noexcept (true); extern long double __logbl (long double __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern long double exp2l (long double __x) noexcept (true); extern long double __exp2l (long double __x) noexcept (true); 15726: 15726: 15726: extern long double log2l (long double __x) noexcept (true); extern long double __log2l (long double __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern long double powl (long double __x, long double __y) noexcept (true); extern long double __powl (long double __x, long double __y) noexcept (true); 15726: 15726: 15726: extern long double sqrtl (long double __x) noexcept (true); extern long double __sqrtl (long double __x) noexcept (true); 15726: 15726: 15726: 15726: extern long double hypotl (long double __x, long double __y) noexcept (true); extern long double __hypotl (long double __x, long double __y) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern long double cbrtl (long double __x) noexcept (true); extern long double __cbrtl (long double __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern long double ceill (long double __x) noexcept (true) __attribute__ ((__const__)); extern long double __ceill (long double __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern long double fabsl (long double __x) noexcept (true) __attribute__ ((__const__)); extern long double __fabsl (long double __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern long double floorl (long double __x) noexcept (true) __attribute__ ((__const__)); extern long double __floorl (long double __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern long double fmodl (long double __x, long double __y) noexcept (true); extern long double __fmodl (long double __x, long double __y) noexcept (true); 15726: # 177 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern int isinfl (long double __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern int finitel (long double __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: extern long double dreml (long double __x, long double __y) noexcept (true); extern long double __dreml (long double __x, long double __y) noexcept (true); 15726: 15726: 15726: 15726: extern long double significandl (long double __x) noexcept (true); extern long double __significandl (long double __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern long double copysignl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __copysignl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern long double nanl (const char *__tagb) noexcept (true); extern long double __nanl (const char *__tagb) noexcept (true); 15726: # 213 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern int isnanl (long double __value) noexcept (true) 15726: __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: 15726: extern long double j0l (long double) noexcept (true); extern long double __j0l (long double) noexcept (true); 15726: extern long double j1l (long double) noexcept (true); extern long double __j1l (long double) noexcept (true); 15726: extern long double jnl (int, long double) noexcept (true); extern long double __jnl (int, long double) noexcept (true); 15726: extern long double y0l (long double) noexcept (true); extern long double __y0l (long double) noexcept (true); 15726: extern long double y1l (long double) noexcept (true); extern long double __y1l (long double) noexcept (true); 15726: extern long double ynl (int, long double) noexcept (true); extern long double __ynl (int, long double) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern long double erfl (long double) noexcept (true); extern long double __erfl (long double) noexcept (true); 15726: extern long double erfcl (long double) noexcept (true); extern long double __erfcl (long double) noexcept (true); 15726: extern long double lgammal (long double) noexcept (true); extern long double __lgammal (long double) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern long double tgammal (long double) noexcept (true); extern long double __tgammal (long double) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern long double gammal (long double) noexcept (true); extern long double __gammal (long double) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern long double lgammal_r (long double, int *__signgamp) noexcept (true); extern long double __lgammal_r (long double, int *__signgamp) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern long double rintl (long double __x) noexcept (true); extern long double __rintl (long double __x) noexcept (true); 15726: 15726: 15726: extern long double nextafterl (long double __x, long double __y) noexcept (true); extern long double __nextafterl (long double __x, long double __y) noexcept (true); 15726: 15726: extern long double nexttowardl (long double __x, long double __y) noexcept (true); extern long double __nexttowardl (long double __x, long double __y) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern long double nextdownl (long double __x) noexcept (true); extern long double __nextdownl (long double __x) noexcept (true); 15726: 15726: extern long double nextupl (long double __x) noexcept (true); extern long double __nextupl (long double __x) noexcept (true); 15726: 15726: 15726: 15726: extern long double remainderl (long double __x, long double __y) noexcept (true); extern long double __remainderl (long double __x, long double __y) noexcept (true); 15726: 15726: 15726: 15726: extern long double scalbnl (long double __x, int __n) noexcept (true); extern long double __scalbnl (long double __x, int __n) noexcept (true); 15726: 15726: 15726: 15726: extern int ilogbl (long double __x) noexcept (true); extern int __ilogbl (long double __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern long int llogbl (long double __x) noexcept (true); extern long int __llogbl (long double __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern long double scalblnl (long double __x, long int __n) noexcept (true); extern long double __scalblnl (long double __x, long int __n) noexcept (true); 15726: 15726: 15726: 15726: extern long double nearbyintl (long double __x) noexcept (true); extern long double __nearbyintl (long double __x) noexcept (true); 15726: 15726: 15726: 15726: extern long double roundl (long double __x) noexcept (true) __attribute__ ((__const__)); extern long double __roundl (long double __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern long double truncl (long double __x) noexcept (true) __attribute__ ((__const__)); extern long double __truncl (long double __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern long double remquol (long double __x, long double __y, int *__quo) noexcept (true); extern long double __remquol (long double __x, long double __y, int *__quo) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern long int lrintl (long double __x) noexcept (true); extern long int __lrintl (long double __x) noexcept (true); 15726: __extension__ 15726: extern long long int llrintl (long double __x) noexcept (true); extern long long int __llrintl (long double __x) noexcept (true); 15726: 15726: 15726: 15726: extern long int lroundl (long double __x) noexcept (true); extern long int __lroundl (long double __x) noexcept (true); 15726: __extension__ 15726: extern long long int llroundl (long double __x) noexcept (true); extern long long int __llroundl (long double __x) noexcept (true); 15726: 15726: 15726: 15726: extern long double fdiml (long double __x, long double __y) noexcept (true); extern long double __fdiml (long double __x, long double __y) noexcept (true); 15726: 15726: 15726: 15726: extern long double fmaxl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fmaxl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern long double fminl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fminl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern long double fmal (long double __x, long double __y, long double __z) noexcept (true); extern long double __fmal (long double __x, long double __y, long double __z) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern long double roundevenl (long double __x) noexcept (true) __attribute__ ((__const__)); extern long double __roundevenl (long double __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern __intmax_t fromfpl (long double __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpl (long double __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: extern __uintmax_t ufromfpl (long double __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpl (long double __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: 15726: extern __intmax_t fromfpxl (long double __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpxl (long double __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: 15726: extern __uintmax_t ufromfpxl (long double __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpxl (long double __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: extern int canonicalizel (long double *__cx, const long double *__x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern long double fmaxmagl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fmaxmagl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern long double fminmagl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fminmagl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern long double fmaximuml (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fmaximuml (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern long double fminimuml (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fminimuml (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern long double fmaximum_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fmaximum_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern long double fminimum_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fminimum_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern long double fmaximum_magl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fmaximum_magl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern long double fminimum_magl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fminimum_magl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern long double fmaximum_mag_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fmaximum_mag_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern long double fminimum_mag_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fminimum_mag_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern int totalorderl (const long double *__x, const long double *__y) noexcept (true) 15726: 15726: __attribute__ ((__pure__)); 15726: 15726: 15726: extern int totalordermagl (const long double *__x, const long double *__y) noexcept (true) 15726: 15726: __attribute__ ((__pure__)); 15726: 15726: 15726: extern long double getpayloadl (const long double *__x) noexcept (true); extern long double __getpayloadl (const long double *__x) noexcept (true); 15726: 15726: 15726: extern int setpayloadl (long double *__x, long double __payload) noexcept (true); 15726: 15726: 15726: extern int setpayloadsigl (long double *__x, long double __payload) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern long double scalbl (long double __x, long double __n) noexcept (true); extern long double __scalbl (long double __x, long double __n) noexcept (true); 15726: # 400 "/usr/include/math.h" 2 3 4 15726: # 450 "/usr/include/math.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 1 3 4 15726: # 53 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern _Float32 acosf32 (_Float32 __x) noexcept (true); extern _Float32 __acosf32 (_Float32 __x) noexcept (true); 15726: 15726: extern _Float32 asinf32 (_Float32 __x) noexcept (true); extern _Float32 __asinf32 (_Float32 __x) noexcept (true); 15726: 15726: extern _Float32 atanf32 (_Float32 __x) noexcept (true); extern _Float32 __atanf32 (_Float32 __x) noexcept (true); 15726: 15726: extern _Float32 atan2f32 (_Float32 __y, _Float32 __x) noexcept (true); extern _Float32 __atan2f32 (_Float32 __y, _Float32 __x) noexcept (true); 15726: 15726: 15726: extern _Float32 cosf32 (_Float32 __x) noexcept (true); extern _Float32 __cosf32 (_Float32 __x) noexcept (true); 15726: 15726: extern _Float32 sinf32 (_Float32 __x) noexcept (true); extern _Float32 __sinf32 (_Float32 __x) noexcept (true); 15726: 15726: extern _Float32 tanf32 (_Float32 __x) noexcept (true); extern _Float32 __tanf32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float32 coshf32 (_Float32 __x) noexcept (true); extern _Float32 __coshf32 (_Float32 __x) noexcept (true); 15726: 15726: extern _Float32 sinhf32 (_Float32 __x) noexcept (true); extern _Float32 __sinhf32 (_Float32 __x) noexcept (true); 15726: 15726: extern _Float32 tanhf32 (_Float32 __x) noexcept (true); extern _Float32 __tanhf32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: 15726: extern void sincosf32 (_Float32 __x, _Float32 *__sinx, _Float32 *__cosx) noexcept (true); extern void __sincosf32 (_Float32 __x, _Float32 *__sinx, _Float32 *__cosx) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: 15726: extern _Float32 acoshf32 (_Float32 __x) noexcept (true); extern _Float32 __acoshf32 (_Float32 __x) noexcept (true); 15726: 15726: extern _Float32 asinhf32 (_Float32 __x) noexcept (true); extern _Float32 __asinhf32 (_Float32 __x) noexcept (true); 15726: 15726: extern _Float32 atanhf32 (_Float32 __x) noexcept (true); extern _Float32 __atanhf32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern _Float32 expf32 (_Float32 __x) noexcept (true); extern _Float32 __expf32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: extern _Float32 frexpf32 (_Float32 __x, int *__exponent) noexcept (true); extern _Float32 __frexpf32 (_Float32 __x, int *__exponent) noexcept (true); 15726: 15726: 15726: extern _Float32 ldexpf32 (_Float32 __x, int __exponent) noexcept (true); extern _Float32 __ldexpf32 (_Float32 __x, int __exponent) noexcept (true); 15726: 15726: 15726: extern _Float32 logf32 (_Float32 __x) noexcept (true); extern _Float32 __logf32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: extern _Float32 log10f32 (_Float32 __x) noexcept (true); extern _Float32 __log10f32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: extern _Float32 modff32 (_Float32 __x, _Float32 *__iptr) noexcept (true); extern _Float32 __modff32 (_Float32 __x, _Float32 *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: 15726: extern _Float32 exp10f32 (_Float32 __x) noexcept (true); extern _Float32 __exp10f32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float32 expm1f32 (_Float32 __x) noexcept (true); extern _Float32 __expm1f32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: extern _Float32 log1pf32 (_Float32 __x) noexcept (true); extern _Float32 __log1pf32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: extern _Float32 logbf32 (_Float32 __x) noexcept (true); extern _Float32 __logbf32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float32 exp2f32 (_Float32 __x) noexcept (true); extern _Float32 __exp2f32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: extern _Float32 log2f32 (_Float32 __x) noexcept (true); extern _Float32 __log2f32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern _Float32 powf32 (_Float32 __x, _Float32 __y) noexcept (true); extern _Float32 __powf32 (_Float32 __x, _Float32 __y) noexcept (true); 15726: 15726: 15726: extern _Float32 sqrtf32 (_Float32 __x) noexcept (true); extern _Float32 __sqrtf32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: 15726: extern _Float32 hypotf32 (_Float32 __x, _Float32 __y) noexcept (true); extern _Float32 __hypotf32 (_Float32 __x, _Float32 __y) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float32 cbrtf32 (_Float32 __x) noexcept (true); extern _Float32 __cbrtf32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern _Float32 ceilf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); extern _Float32 __ceilf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32 fabsf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fabsf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32 floorf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); extern _Float32 __floorf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32 fmodf32 (_Float32 __x, _Float32 __y) noexcept (true); extern _Float32 __fmodf32 (_Float32 __x, _Float32 __y) noexcept (true); 15726: # 198 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern _Float32 copysignf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __copysignf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern _Float32 nanf32 (const char *__tagb) noexcept (true); extern _Float32 __nanf32 (const char *__tagb) noexcept (true); 15726: # 220 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern _Float32 j0f32 (_Float32) noexcept (true); extern _Float32 __j0f32 (_Float32) noexcept (true); 15726: extern _Float32 j1f32 (_Float32) noexcept (true); extern _Float32 __j1f32 (_Float32) noexcept (true); 15726: extern _Float32 jnf32 (int, _Float32) noexcept (true); extern _Float32 __jnf32 (int, _Float32) noexcept (true); 15726: extern _Float32 y0f32 (_Float32) noexcept (true); extern _Float32 __y0f32 (_Float32) noexcept (true); 15726: extern _Float32 y1f32 (_Float32) noexcept (true); extern _Float32 __y1f32 (_Float32) noexcept (true); 15726: extern _Float32 ynf32 (int, _Float32) noexcept (true); extern _Float32 __ynf32 (int, _Float32) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern _Float32 erff32 (_Float32) noexcept (true); extern _Float32 __erff32 (_Float32) noexcept (true); 15726: extern _Float32 erfcf32 (_Float32) noexcept (true); extern _Float32 __erfcf32 (_Float32) noexcept (true); 15726: extern _Float32 lgammaf32 (_Float32) noexcept (true); extern _Float32 __lgammaf32 (_Float32) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float32 tgammaf32 (_Float32) noexcept (true); extern _Float32 __tgammaf32 (_Float32) noexcept (true); 15726: # 252 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern _Float32 lgammaf32_r (_Float32, int *__signgamp) noexcept (true); extern _Float32 __lgammaf32_r (_Float32, int *__signgamp) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern _Float32 rintf32 (_Float32 __x) noexcept (true); extern _Float32 __rintf32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: extern _Float32 nextafterf32 (_Float32 __x, _Float32 __y) noexcept (true); extern _Float32 __nextafterf32 (_Float32 __x, _Float32 __y) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern _Float32 nextdownf32 (_Float32 __x) noexcept (true); extern _Float32 __nextdownf32 (_Float32 __x) noexcept (true); 15726: 15726: extern _Float32 nextupf32 (_Float32 __x) noexcept (true); extern _Float32 __nextupf32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: 15726: extern _Float32 remainderf32 (_Float32 __x, _Float32 __y) noexcept (true); extern _Float32 __remainderf32 (_Float32 __x, _Float32 __y) noexcept (true); 15726: 15726: 15726: 15726: extern _Float32 scalbnf32 (_Float32 __x, int __n) noexcept (true); extern _Float32 __scalbnf32 (_Float32 __x, int __n) noexcept (true); 15726: 15726: 15726: 15726: extern int ilogbf32 (_Float32 __x) noexcept (true); extern int __ilogbf32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern long int llogbf32 (_Float32 __x) noexcept (true); extern long int __llogbf32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float32 scalblnf32 (_Float32 __x, long int __n) noexcept (true); extern _Float32 __scalblnf32 (_Float32 __x, long int __n) noexcept (true); 15726: 15726: 15726: 15726: extern _Float32 nearbyintf32 (_Float32 __x) noexcept (true); extern _Float32 __nearbyintf32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: 15726: extern _Float32 roundf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); extern _Float32 __roundf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern _Float32 truncf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); extern _Float32 __truncf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern _Float32 remquof32 (_Float32 __x, _Float32 __y, int *__quo) noexcept (true); extern _Float32 __remquof32 (_Float32 __x, _Float32 __y, int *__quo) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern long int lrintf32 (_Float32 __x) noexcept (true); extern long int __lrintf32 (_Float32 __x) noexcept (true); 15726: __extension__ 15726: extern long long int llrintf32 (_Float32 __x) noexcept (true); extern long long int __llrintf32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: 15726: extern long int lroundf32 (_Float32 __x) noexcept (true); extern long int __lroundf32 (_Float32 __x) noexcept (true); 15726: __extension__ 15726: extern long long int llroundf32 (_Float32 __x) noexcept (true); extern long long int __llroundf32 (_Float32 __x) noexcept (true); 15726: 15726: 15726: 15726: extern _Float32 fdimf32 (_Float32 __x, _Float32 __y) noexcept (true); extern _Float32 __fdimf32 (_Float32 __x, _Float32 __y) noexcept (true); 15726: 15726: 15726: 15726: extern _Float32 fmaxf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fmaxf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32 fminf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fminf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern _Float32 fmaf32 (_Float32 __x, _Float32 __y, _Float32 __z) noexcept (true); extern _Float32 __fmaf32 (_Float32 __x, _Float32 __y, _Float32 __z) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float32 roundevenf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); extern _Float32 __roundevenf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern __intmax_t fromfpf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: extern __uintmax_t ufromfpf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: 15726: extern __intmax_t fromfpxf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpxf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: 15726: extern __uintmax_t ufromfpxf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpxf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: extern int canonicalizef32 (_Float32 *__cx, const _Float32 *__x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern _Float32 fmaxmagf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fmaxmagf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32 fminmagf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fminmagf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern _Float32 fmaximumf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fmaximumf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32 fminimumf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fminimumf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32 fmaximum_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fmaximum_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32 fminimum_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fminimum_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32 fmaximum_magf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fmaximum_magf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32 fminimum_magf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fminimum_magf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32 fmaximum_mag_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fmaximum_mag_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32 fminimum_mag_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fminimum_mag_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern int totalorderf32 (const _Float32 *__x, const _Float32 *__y) noexcept (true) 15726: 15726: __attribute__ ((__pure__)); 15726: 15726: 15726: extern int totalordermagf32 (const _Float32 *__x, const _Float32 *__y) noexcept (true) 15726: 15726: __attribute__ ((__pure__)); 15726: 15726: 15726: extern _Float32 getpayloadf32 (const _Float32 *__x) noexcept (true); extern _Float32 __getpayloadf32 (const _Float32 *__x) noexcept (true); 15726: 15726: 15726: extern int setpayloadf32 (_Float32 *__x, _Float32 __payload) noexcept (true); 15726: 15726: 15726: extern int setpayloadsigf32 (_Float32 *__x, _Float32 __payload) noexcept (true); 15726: # 451 "/usr/include/math.h" 2 3 4 15726: # 467 "/usr/include/math.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 1 3 4 15726: # 53 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern _Float64 acosf64 (_Float64 __x) noexcept (true); extern _Float64 __acosf64 (_Float64 __x) noexcept (true); 15726: 15726: extern _Float64 asinf64 (_Float64 __x) noexcept (true); extern _Float64 __asinf64 (_Float64 __x) noexcept (true); 15726: 15726: extern _Float64 atanf64 (_Float64 __x) noexcept (true); extern _Float64 __atanf64 (_Float64 __x) noexcept (true); 15726: 15726: extern _Float64 atan2f64 (_Float64 __y, _Float64 __x) noexcept (true); extern _Float64 __atan2f64 (_Float64 __y, _Float64 __x) noexcept (true); 15726: 15726: 15726: extern _Float64 cosf64 (_Float64 __x) noexcept (true); extern _Float64 __cosf64 (_Float64 __x) noexcept (true); 15726: 15726: extern _Float64 sinf64 (_Float64 __x) noexcept (true); extern _Float64 __sinf64 (_Float64 __x) noexcept (true); 15726: 15726: extern _Float64 tanf64 (_Float64 __x) noexcept (true); extern _Float64 __tanf64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float64 coshf64 (_Float64 __x) noexcept (true); extern _Float64 __coshf64 (_Float64 __x) noexcept (true); 15726: 15726: extern _Float64 sinhf64 (_Float64 __x) noexcept (true); extern _Float64 __sinhf64 (_Float64 __x) noexcept (true); 15726: 15726: extern _Float64 tanhf64 (_Float64 __x) noexcept (true); extern _Float64 __tanhf64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: 15726: extern void sincosf64 (_Float64 __x, _Float64 *__sinx, _Float64 *__cosx) noexcept (true); extern void __sincosf64 (_Float64 __x, _Float64 *__sinx, _Float64 *__cosx) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: 15726: extern _Float64 acoshf64 (_Float64 __x) noexcept (true); extern _Float64 __acoshf64 (_Float64 __x) noexcept (true); 15726: 15726: extern _Float64 asinhf64 (_Float64 __x) noexcept (true); extern _Float64 __asinhf64 (_Float64 __x) noexcept (true); 15726: 15726: extern _Float64 atanhf64 (_Float64 __x) noexcept (true); extern _Float64 __atanhf64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern _Float64 expf64 (_Float64 __x) noexcept (true); extern _Float64 __expf64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: extern _Float64 frexpf64 (_Float64 __x, int *__exponent) noexcept (true); extern _Float64 __frexpf64 (_Float64 __x, int *__exponent) noexcept (true); 15726: 15726: 15726: extern _Float64 ldexpf64 (_Float64 __x, int __exponent) noexcept (true); extern _Float64 __ldexpf64 (_Float64 __x, int __exponent) noexcept (true); 15726: 15726: 15726: extern _Float64 logf64 (_Float64 __x) noexcept (true); extern _Float64 __logf64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: extern _Float64 log10f64 (_Float64 __x) noexcept (true); extern _Float64 __log10f64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: extern _Float64 modff64 (_Float64 __x, _Float64 *__iptr) noexcept (true); extern _Float64 __modff64 (_Float64 __x, _Float64 *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: 15726: extern _Float64 exp10f64 (_Float64 __x) noexcept (true); extern _Float64 __exp10f64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float64 expm1f64 (_Float64 __x) noexcept (true); extern _Float64 __expm1f64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: extern _Float64 log1pf64 (_Float64 __x) noexcept (true); extern _Float64 __log1pf64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: extern _Float64 logbf64 (_Float64 __x) noexcept (true); extern _Float64 __logbf64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float64 exp2f64 (_Float64 __x) noexcept (true); extern _Float64 __exp2f64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: extern _Float64 log2f64 (_Float64 __x) noexcept (true); extern _Float64 __log2f64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern _Float64 powf64 (_Float64 __x, _Float64 __y) noexcept (true); extern _Float64 __powf64 (_Float64 __x, _Float64 __y) noexcept (true); 15726: 15726: 15726: extern _Float64 sqrtf64 (_Float64 __x) noexcept (true); extern _Float64 __sqrtf64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: 15726: extern _Float64 hypotf64 (_Float64 __x, _Float64 __y) noexcept (true); extern _Float64 __hypotf64 (_Float64 __x, _Float64 __y) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float64 cbrtf64 (_Float64 __x) noexcept (true); extern _Float64 __cbrtf64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern _Float64 ceilf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); extern _Float64 __ceilf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float64 fabsf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fabsf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float64 floorf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); extern _Float64 __floorf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float64 fmodf64 (_Float64 __x, _Float64 __y) noexcept (true); extern _Float64 __fmodf64 (_Float64 __x, _Float64 __y) noexcept (true); 15726: # 198 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern _Float64 copysignf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __copysignf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern _Float64 nanf64 (const char *__tagb) noexcept (true); extern _Float64 __nanf64 (const char *__tagb) noexcept (true); 15726: # 220 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern _Float64 j0f64 (_Float64) noexcept (true); extern _Float64 __j0f64 (_Float64) noexcept (true); 15726: extern _Float64 j1f64 (_Float64) noexcept (true); extern _Float64 __j1f64 (_Float64) noexcept (true); 15726: extern _Float64 jnf64 (int, _Float64) noexcept (true); extern _Float64 __jnf64 (int, _Float64) noexcept (true); 15726: extern _Float64 y0f64 (_Float64) noexcept (true); extern _Float64 __y0f64 (_Float64) noexcept (true); 15726: extern _Float64 y1f64 (_Float64) noexcept (true); extern _Float64 __y1f64 (_Float64) noexcept (true); 15726: extern _Float64 ynf64 (int, _Float64) noexcept (true); extern _Float64 __ynf64 (int, _Float64) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern _Float64 erff64 (_Float64) noexcept (true); extern _Float64 __erff64 (_Float64) noexcept (true); 15726: extern _Float64 erfcf64 (_Float64) noexcept (true); extern _Float64 __erfcf64 (_Float64) noexcept (true); 15726: extern _Float64 lgammaf64 (_Float64) noexcept (true); extern _Float64 __lgammaf64 (_Float64) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float64 tgammaf64 (_Float64) noexcept (true); extern _Float64 __tgammaf64 (_Float64) noexcept (true); 15726: # 252 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern _Float64 lgammaf64_r (_Float64, int *__signgamp) noexcept (true); extern _Float64 __lgammaf64_r (_Float64, int *__signgamp) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern _Float64 rintf64 (_Float64 __x) noexcept (true); extern _Float64 __rintf64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: extern _Float64 nextafterf64 (_Float64 __x, _Float64 __y) noexcept (true); extern _Float64 __nextafterf64 (_Float64 __x, _Float64 __y) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern _Float64 nextdownf64 (_Float64 __x) noexcept (true); extern _Float64 __nextdownf64 (_Float64 __x) noexcept (true); 15726: 15726: extern _Float64 nextupf64 (_Float64 __x) noexcept (true); extern _Float64 __nextupf64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: 15726: extern _Float64 remainderf64 (_Float64 __x, _Float64 __y) noexcept (true); extern _Float64 __remainderf64 (_Float64 __x, _Float64 __y) noexcept (true); 15726: 15726: 15726: 15726: extern _Float64 scalbnf64 (_Float64 __x, int __n) noexcept (true); extern _Float64 __scalbnf64 (_Float64 __x, int __n) noexcept (true); 15726: 15726: 15726: 15726: extern int ilogbf64 (_Float64 __x) noexcept (true); extern int __ilogbf64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern long int llogbf64 (_Float64 __x) noexcept (true); extern long int __llogbf64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float64 scalblnf64 (_Float64 __x, long int __n) noexcept (true); extern _Float64 __scalblnf64 (_Float64 __x, long int __n) noexcept (true); 15726: 15726: 15726: 15726: extern _Float64 nearbyintf64 (_Float64 __x) noexcept (true); extern _Float64 __nearbyintf64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: 15726: extern _Float64 roundf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); extern _Float64 __roundf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern _Float64 truncf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); extern _Float64 __truncf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern _Float64 remquof64 (_Float64 __x, _Float64 __y, int *__quo) noexcept (true); extern _Float64 __remquof64 (_Float64 __x, _Float64 __y, int *__quo) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern long int lrintf64 (_Float64 __x) noexcept (true); extern long int __lrintf64 (_Float64 __x) noexcept (true); 15726: __extension__ 15726: extern long long int llrintf64 (_Float64 __x) noexcept (true); extern long long int __llrintf64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: 15726: extern long int lroundf64 (_Float64 __x) noexcept (true); extern long int __lroundf64 (_Float64 __x) noexcept (true); 15726: __extension__ 15726: extern long long int llroundf64 (_Float64 __x) noexcept (true); extern long long int __llroundf64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: 15726: extern _Float64 fdimf64 (_Float64 __x, _Float64 __y) noexcept (true); extern _Float64 __fdimf64 (_Float64 __x, _Float64 __y) noexcept (true); 15726: 15726: 15726: 15726: extern _Float64 fmaxf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fmaxf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float64 fminf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fminf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern _Float64 fmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) noexcept (true); extern _Float64 __fmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float64 roundevenf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); extern _Float64 __roundevenf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern __intmax_t fromfpf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: extern __uintmax_t ufromfpf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: 15726: extern __intmax_t fromfpxf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpxf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: 15726: extern __uintmax_t ufromfpxf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpxf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: extern int canonicalizef64 (_Float64 *__cx, const _Float64 *__x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern _Float64 fmaxmagf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fmaxmagf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float64 fminmagf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fminmagf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern _Float64 fmaximumf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fmaximumf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float64 fminimumf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fminimumf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float64 fmaximum_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fmaximum_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float64 fminimum_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fminimum_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float64 fmaximum_magf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fmaximum_magf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float64 fminimum_magf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fminimum_magf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float64 fmaximum_mag_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fmaximum_mag_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float64 fminimum_mag_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fminimum_mag_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern int totalorderf64 (const _Float64 *__x, const _Float64 *__y) noexcept (true) 15726: 15726: __attribute__ ((__pure__)); 15726: 15726: 15726: extern int totalordermagf64 (const _Float64 *__x, const _Float64 *__y) noexcept (true) 15726: 15726: __attribute__ ((__pure__)); 15726: 15726: 15726: extern _Float64 getpayloadf64 (const _Float64 *__x) noexcept (true); extern _Float64 __getpayloadf64 (const _Float64 *__x) noexcept (true); 15726: 15726: 15726: extern int setpayloadf64 (_Float64 *__x, _Float64 __payload) noexcept (true); 15726: 15726: 15726: extern int setpayloadsigf64 (_Float64 *__x, _Float64 __payload) noexcept (true); 15726: # 468 "/usr/include/math.h" 2 3 4 15726: # 501 "/usr/include/math.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 1 3 4 15726: # 53 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern _Float32x acosf32x (_Float32x __x) noexcept (true); extern _Float32x __acosf32x (_Float32x __x) noexcept (true); 15726: 15726: extern _Float32x asinf32x (_Float32x __x) noexcept (true); extern _Float32x __asinf32x (_Float32x __x) noexcept (true); 15726: 15726: extern _Float32x atanf32x (_Float32x __x) noexcept (true); extern _Float32x __atanf32x (_Float32x __x) noexcept (true); 15726: 15726: extern _Float32x atan2f32x (_Float32x __y, _Float32x __x) noexcept (true); extern _Float32x __atan2f32x (_Float32x __y, _Float32x __x) noexcept (true); 15726: 15726: 15726: extern _Float32x cosf32x (_Float32x __x) noexcept (true); extern _Float32x __cosf32x (_Float32x __x) noexcept (true); 15726: 15726: extern _Float32x sinf32x (_Float32x __x) noexcept (true); extern _Float32x __sinf32x (_Float32x __x) noexcept (true); 15726: 15726: extern _Float32x tanf32x (_Float32x __x) noexcept (true); extern _Float32x __tanf32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float32x coshf32x (_Float32x __x) noexcept (true); extern _Float32x __coshf32x (_Float32x __x) noexcept (true); 15726: 15726: extern _Float32x sinhf32x (_Float32x __x) noexcept (true); extern _Float32x __sinhf32x (_Float32x __x) noexcept (true); 15726: 15726: extern _Float32x tanhf32x (_Float32x __x) noexcept (true); extern _Float32x __tanhf32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: 15726: extern void sincosf32x (_Float32x __x, _Float32x *__sinx, _Float32x *__cosx) noexcept (true); extern void __sincosf32x (_Float32x __x, _Float32x *__sinx, _Float32x *__cosx) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: 15726: extern _Float32x acoshf32x (_Float32x __x) noexcept (true); extern _Float32x __acoshf32x (_Float32x __x) noexcept (true); 15726: 15726: extern _Float32x asinhf32x (_Float32x __x) noexcept (true); extern _Float32x __asinhf32x (_Float32x __x) noexcept (true); 15726: 15726: extern _Float32x atanhf32x (_Float32x __x) noexcept (true); extern _Float32x __atanhf32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern _Float32x expf32x (_Float32x __x) noexcept (true); extern _Float32x __expf32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: extern _Float32x frexpf32x (_Float32x __x, int *__exponent) noexcept (true); extern _Float32x __frexpf32x (_Float32x __x, int *__exponent) noexcept (true); 15726: 15726: 15726: extern _Float32x ldexpf32x (_Float32x __x, int __exponent) noexcept (true); extern _Float32x __ldexpf32x (_Float32x __x, int __exponent) noexcept (true); 15726: 15726: 15726: extern _Float32x logf32x (_Float32x __x) noexcept (true); extern _Float32x __logf32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: extern _Float32x log10f32x (_Float32x __x) noexcept (true); extern _Float32x __log10f32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: extern _Float32x modff32x (_Float32x __x, _Float32x *__iptr) noexcept (true); extern _Float32x __modff32x (_Float32x __x, _Float32x *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: 15726: extern _Float32x exp10f32x (_Float32x __x) noexcept (true); extern _Float32x __exp10f32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float32x expm1f32x (_Float32x __x) noexcept (true); extern _Float32x __expm1f32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: extern _Float32x log1pf32x (_Float32x __x) noexcept (true); extern _Float32x __log1pf32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: extern _Float32x logbf32x (_Float32x __x) noexcept (true); extern _Float32x __logbf32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float32x exp2f32x (_Float32x __x) noexcept (true); extern _Float32x __exp2f32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: extern _Float32x log2f32x (_Float32x __x) noexcept (true); extern _Float32x __log2f32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern _Float32x powf32x (_Float32x __x, _Float32x __y) noexcept (true); extern _Float32x __powf32x (_Float32x __x, _Float32x __y) noexcept (true); 15726: 15726: 15726: extern _Float32x sqrtf32x (_Float32x __x) noexcept (true); extern _Float32x __sqrtf32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: 15726: extern _Float32x hypotf32x (_Float32x __x, _Float32x __y) noexcept (true); extern _Float32x __hypotf32x (_Float32x __x, _Float32x __y) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float32x cbrtf32x (_Float32x __x) noexcept (true); extern _Float32x __cbrtf32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern _Float32x ceilf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); extern _Float32x __ceilf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32x fabsf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fabsf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32x floorf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); extern _Float32x __floorf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32x fmodf32x (_Float32x __x, _Float32x __y) noexcept (true); extern _Float32x __fmodf32x (_Float32x __x, _Float32x __y) noexcept (true); 15726: # 198 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern _Float32x copysignf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __copysignf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern _Float32x nanf32x (const char *__tagb) noexcept (true); extern _Float32x __nanf32x (const char *__tagb) noexcept (true); 15726: # 220 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern _Float32x j0f32x (_Float32x) noexcept (true); extern _Float32x __j0f32x (_Float32x) noexcept (true); 15726: extern _Float32x j1f32x (_Float32x) noexcept (true); extern _Float32x __j1f32x (_Float32x) noexcept (true); 15726: extern _Float32x jnf32x (int, _Float32x) noexcept (true); extern _Float32x __jnf32x (int, _Float32x) noexcept (true); 15726: extern _Float32x y0f32x (_Float32x) noexcept (true); extern _Float32x __y0f32x (_Float32x) noexcept (true); 15726: extern _Float32x y1f32x (_Float32x) noexcept (true); extern _Float32x __y1f32x (_Float32x) noexcept (true); 15726: extern _Float32x ynf32x (int, _Float32x) noexcept (true); extern _Float32x __ynf32x (int, _Float32x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern _Float32x erff32x (_Float32x) noexcept (true); extern _Float32x __erff32x (_Float32x) noexcept (true); 15726: extern _Float32x erfcf32x (_Float32x) noexcept (true); extern _Float32x __erfcf32x (_Float32x) noexcept (true); 15726: extern _Float32x lgammaf32x (_Float32x) noexcept (true); extern _Float32x __lgammaf32x (_Float32x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float32x tgammaf32x (_Float32x) noexcept (true); extern _Float32x __tgammaf32x (_Float32x) noexcept (true); 15726: # 252 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 15726: extern _Float32x lgammaf32x_r (_Float32x, int *__signgamp) noexcept (true); extern _Float32x __lgammaf32x_r (_Float32x, int *__signgamp) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern _Float32x rintf32x (_Float32x __x) noexcept (true); extern _Float32x __rintf32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: extern _Float32x nextafterf32x (_Float32x __x, _Float32x __y) noexcept (true); extern _Float32x __nextafterf32x (_Float32x __x, _Float32x __y) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern _Float32x nextdownf32x (_Float32x __x) noexcept (true); extern _Float32x __nextdownf32x (_Float32x __x) noexcept (true); 15726: 15726: extern _Float32x nextupf32x (_Float32x __x) noexcept (true); extern _Float32x __nextupf32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: 15726: extern _Float32x remainderf32x (_Float32x __x, _Float32x __y) noexcept (true); extern _Float32x __remainderf32x (_Float32x __x, _Float32x __y) noexcept (true); 15726: 15726: 15726: 15726: extern _Float32x scalbnf32x (_Float32x __x, int __n) noexcept (true); extern _Float32x __scalbnf32x (_Float32x __x, int __n) noexcept (true); 15726: 15726: 15726: 15726: extern int ilogbf32x (_Float32x __x) noexcept (true); extern int __ilogbf32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern long int llogbf32x (_Float32x __x) noexcept (true); extern long int __llogbf32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float32x scalblnf32x (_Float32x __x, long int __n) noexcept (true); extern _Float32x __scalblnf32x (_Float32x __x, long int __n) noexcept (true); 15726: 15726: 15726: 15726: extern _Float32x nearbyintf32x (_Float32x __x) noexcept (true); extern _Float32x __nearbyintf32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: 15726: extern _Float32x roundf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); extern _Float32x __roundf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern _Float32x truncf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); extern _Float32x __truncf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern _Float32x remquof32x (_Float32x __x, _Float32x __y, int *__quo) noexcept (true); extern _Float32x __remquof32x (_Float32x __x, _Float32x __y, int *__quo) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern long int lrintf32x (_Float32x __x) noexcept (true); extern long int __lrintf32x (_Float32x __x) noexcept (true); 15726: __extension__ 15726: extern long long int llrintf32x (_Float32x __x) noexcept (true); extern long long int __llrintf32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: 15726: extern long int lroundf32x (_Float32x __x) noexcept (true); extern long int __lroundf32x (_Float32x __x) noexcept (true); 15726: __extension__ 15726: extern long long int llroundf32x (_Float32x __x) noexcept (true); extern long long int __llroundf32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: 15726: extern _Float32x fdimf32x (_Float32x __x, _Float32x __y) noexcept (true); extern _Float32x __fdimf32x (_Float32x __x, _Float32x __y) noexcept (true); 15726: 15726: 15726: 15726: extern _Float32x fmaxf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fmaxf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32x fminf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fminf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern _Float32x fmaf32x (_Float32x __x, _Float32x __y, _Float32x __z) noexcept (true); extern _Float32x __fmaf32x (_Float32x __x, _Float32x __y, _Float32x __z) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern _Float32x roundevenf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); extern _Float32x __roundevenf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: extern __intmax_t fromfpf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: extern __uintmax_t ufromfpf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: 15726: extern __intmax_t fromfpxf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpxf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: 15726: 15726: extern __uintmax_t ufromfpxf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpxf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true) 15726: ; 15726: 15726: 15726: extern int canonicalizef32x (_Float32x *__cx, const _Float32x *__x) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern _Float32x fmaxmagf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fmaxmagf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32x fminmagf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fminmagf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern _Float32x fmaximumf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fmaximumf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32x fminimumf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fminimumf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32x fmaximum_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fmaximum_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32x fminimum_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fminimum_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32x fmaximum_magf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fmaximum_magf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32x fminimum_magf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fminimum_magf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32x fmaximum_mag_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fmaximum_mag_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern _Float32x fminimum_mag_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fminimum_mag_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern int totalorderf32x (const _Float32x *__x, const _Float32x *__y) noexcept (true) 15726: 15726: __attribute__ ((__pure__)); 15726: 15726: 15726: extern int totalordermagf32x (const _Float32x *__x, const _Float32x *__y) noexcept (true) 15726: 15726: __attribute__ ((__pure__)); 15726: 15726: 15726: extern _Float32x getpayloadf32x (const _Float32x *__x) noexcept (true); extern _Float32x __getpayloadf32x (const _Float32x *__x) noexcept (true); 15726: 15726: 15726: extern int setpayloadf32x (_Float32x *__x, _Float32x __payload) noexcept (true); 15726: 15726: 15726: extern int setpayloadsigf32x (_Float32x *__x, _Float32x __payload) noexcept (true); 15726: # 502 "/usr/include/math.h" 2 3 4 15726: # 566 "/usr/include/math.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 1 3 4 15726: # 24 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 3 4 15726: extern float fadd (double __x, double __y) noexcept (true); 15726: 15726: 15726: extern float fdiv (double __x, double __y) noexcept (true); 15726: 15726: 15726: extern float ffma (double __x, double __y, double __z) noexcept (true); 15726: 15726: 15726: extern float fmul (double __x, double __y) noexcept (true); 15726: 15726: 15726: extern float fsqrt (double __x) noexcept (true); 15726: 15726: 15726: extern float fsub (double __x, double __y) noexcept (true); 15726: # 567 "/usr/include/math.h" 2 3 4 15726: # 587 "/usr/include/math.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 1 3 4 15726: # 24 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 3 4 15726: extern float faddl (long double __x, long double __y) noexcept (true); 15726: 15726: 15726: extern float fdivl (long double __x, long double __y) noexcept (true); 15726: 15726: 15726: extern float ffmal (long double __x, long double __y, long double __z) noexcept (true); 15726: 15726: 15726: extern float fmull (long double __x, long double __y) noexcept (true); 15726: 15726: 15726: extern float fsqrtl (long double __x) noexcept (true); 15726: 15726: 15726: extern float fsubl (long double __x, long double __y) noexcept (true); 15726: # 588 "/usr/include/math.h" 2 3 4 15726: # 616 "/usr/include/math.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 1 3 4 15726: # 24 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 3 4 15726: extern double daddl (long double __x, long double __y) noexcept (true); 15726: 15726: 15726: extern double ddivl (long double __x, long double __y) noexcept (true); 15726: 15726: 15726: extern double dfmal (long double __x, long double __y, long double __z) noexcept (true); 15726: 15726: 15726: extern double dmull (long double __x, long double __y) noexcept (true); 15726: 15726: 15726: extern double dsqrtl (long double __x) noexcept (true); 15726: 15726: 15726: extern double dsubl (long double __x, long double __y) noexcept (true); 15726: # 617 "/usr/include/math.h" 2 3 4 15726: # 697 "/usr/include/math.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 1 3 4 15726: # 24 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 3 4 15726: extern _Float32 f32addf32x (_Float32x __x, _Float32x __y) noexcept (true); 15726: 15726: 15726: extern _Float32 f32divf32x (_Float32x __x, _Float32x __y) noexcept (true); 15726: 15726: 15726: extern _Float32 f32fmaf32x (_Float32x __x, _Float32x __y, _Float32x __z) noexcept (true); 15726: 15726: 15726: extern _Float32 f32mulf32x (_Float32x __x, _Float32x __y) noexcept (true); 15726: 15726: 15726: extern _Float32 f32sqrtf32x (_Float32x __x) noexcept (true); 15726: 15726: 15726: extern _Float32 f32subf32x (_Float32x __x, _Float32x __y) noexcept (true); 15726: # 698 "/usr/include/math.h" 2 3 4 15726: # 707 "/usr/include/math.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 1 3 4 15726: # 24 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 3 4 15726: extern _Float32 f32addf64 (_Float64 __x, _Float64 __y) noexcept (true); 15726: 15726: 15726: extern _Float32 f32divf64 (_Float64 __x, _Float64 __y) noexcept (true); 15726: 15726: 15726: extern _Float32 f32fmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) noexcept (true); 15726: 15726: 15726: extern _Float32 f32mulf64 (_Float64 __x, _Float64 __y) noexcept (true); 15726: 15726: 15726: extern _Float32 f32sqrtf64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: extern _Float32 f32subf64 (_Float64 __x, _Float64 __y) noexcept (true); 15726: # 708 "/usr/include/math.h" 2 3 4 15726: # 747 "/usr/include/math.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 1 3 4 15726: # 24 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 3 4 15726: extern _Float32x f32xaddf64 (_Float64 __x, _Float64 __y) noexcept (true); 15726: 15726: 15726: extern _Float32x f32xdivf64 (_Float64 __x, _Float64 __y) noexcept (true); 15726: 15726: 15726: extern _Float32x f32xfmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) noexcept (true); 15726: 15726: 15726: extern _Float32x f32xmulf64 (_Float64 __x, _Float64 __y) noexcept (true); 15726: 15726: 15726: extern _Float32x f32xsqrtf64 (_Float64 __x) noexcept (true); 15726: 15726: 15726: extern _Float32x f32xsubf64 (_Float64 __x, _Float64 __y) noexcept (true); 15726: # 748 "/usr/include/math.h" 2 3 4 15726: # 854 "/usr/include/math.h" 3 4 15726: extern int signgam; 15726: # 934 "/usr/include/math.h" 3 4 15726: enum 15726: { 15726: FP_NAN = 15726: 15726: 0, 15726: FP_INFINITE = 15726: 15726: 1, 15726: FP_ZERO = 15726: 15726: 2, 15726: FP_SUBNORMAL = 15726: 15726: 3, 15726: FP_NORMAL = 15726: 15726: 4 15726: }; 15726: # 1055 "/usr/include/math.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/iscanonical.h" 1 3 4 15726: # 1056 "/usr/include/math.h" 2 3 4 15726: # 1067 "/usr/include/math.h" 3 4 15726: extern "C++" { 15726: inline int issignaling (float __val) { return __issignalingf (__val); } 15726: inline int issignaling (double __val) { return __issignaling (__val); } 15726: inline int 15726: issignaling (long double __val) 15726: { 15726: 15726: return __issignaling (__val); 15726: 15726: 15726: 15726: } 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 1098 "/usr/include/math.h" 3 4 15726: extern "C++" { 15726: # 1129 "/usr/include/math.h" 3 4 15726: template inline bool 15726: iszero (__T __val) 15726: { 15726: return __val == 0; 15726: } 15726: 15726: } 15726: # 1364 "/usr/include/math.h" 3 4 15726: extern "C++" { 15726: template struct __iseqsig_type; 15726: 15726: template<> struct __iseqsig_type 15726: { 15726: static int __call (float __x, float __y) throw () 15726: { 15726: return __iseqsigf (__x, __y); 15726: } 15726: }; 15726: 15726: template<> struct __iseqsig_type 15726: { 15726: static int __call (double __x, double __y) throw () 15726: { 15726: return __iseqsig (__x, __y); 15726: } 15726: }; 15726: 15726: template<> struct __iseqsig_type 15726: { 15726: static int __call (long double __x, long double __y) throw () 15726: { 15726: 15726: 15726: 15726: return __iseqsig (__x, __y); 15726: 15726: } 15726: }; 15726: 15726: 15726: template<> struct __iseqsig_type<_Float32> 15726: { 15726: static int __call (_Float32 __x, _Float32 __y) throw () 15726: { 15726: return __iseqsigf (__x, __y); 15726: } 15726: }; 15726: 15726: 15726: 15726: template<> struct __iseqsig_type<_Float64> 15726: { 15726: static int __call (_Float64 __x, _Float64 __y) throw () 15726: { 15726: return __iseqsig (__x, __y); 15726: } 15726: }; 15726: # 1432 "/usr/include/math.h" 3 4 15726: template<> struct __iseqsig_type<_Float32x> 15726: { 15726: static int __call (_Float32x __x, _Float32x __y) throw () 15726: { 15726: return __iseqsig (__x, __y); 15726: } 15726: }; 15726: # 1455 "/usr/include/math.h" 3 4 15726: template 15726: inline int 15726: iseqsig (_T1 __x, _T2 __y) throw () 15726: { 15726: 15726: typedef decltype (((__x) + (__y) + 0.0f)) _T3; 15726: 15726: 15726: 15726: return __iseqsig_type<_T3>::__call (__x, __y); 15726: } 15726: 15726: } 15726: 15726: 15726: 15726: 15726: } 15726: # 48 "/usr/include/c++/13/cmath" 2 3 15726: # 79 "/usr/include/c++/13/cmath" 3 15726: extern "C++" 15726: { 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: using ::acos; 15726: 15726: 15726: inline constexpr float 15726: acos(float __x) 15726: { return __builtin_acosf(__x); } 15726: 15726: inline constexpr long double 15726: acos(long double __x) 15726: { return __builtin_acosl(__x); } 15726: 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: acos(_Tp __x) 15726: { return __builtin_acos(__x); } 15726: 15726: using ::asin; 15726: 15726: 15726: inline constexpr float 15726: asin(float __x) 15726: { return __builtin_asinf(__x); } 15726: 15726: inline constexpr long double 15726: asin(long double __x) 15726: { return __builtin_asinl(__x); } 15726: 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: asin(_Tp __x) 15726: { return __builtin_asin(__x); } 15726: 15726: using ::atan; 15726: 15726: 15726: inline constexpr float 15726: atan(float __x) 15726: { return __builtin_atanf(__x); } 15726: 15726: inline constexpr long double 15726: atan(long double __x) 15726: { return __builtin_atanl(__x); } 15726: 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: atan(_Tp __x) 15726: { return __builtin_atan(__x); } 15726: 15726: using ::atan2; 15726: 15726: 15726: inline constexpr float 15726: atan2(float __y, float __x) 15726: { return __builtin_atan2f(__y, __x); } 15726: 15726: inline constexpr long double 15726: atan2(long double __y, long double __x) 15726: { return __builtin_atan2l(__y, __x); } 15726: 15726: 15726: using ::ceil; 15726: 15726: 15726: inline constexpr float 15726: ceil(float __x) 15726: { return __builtin_ceilf(__x); } 15726: 15726: inline constexpr long double 15726: ceil(long double __x) 15726: { return __builtin_ceill(__x); } 15726: 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: ceil(_Tp __x) 15726: { return __builtin_ceil(__x); } 15726: 15726: using ::cos; 15726: 15726: 15726: inline constexpr float 15726: cos(float __x) 15726: { return __builtin_cosf(__x); } 15726: 15726: inline constexpr long double 15726: cos(long double __x) 15726: { return __builtin_cosl(__x); } 15726: 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: cos(_Tp __x) 15726: { return __builtin_cos(__x); } 15726: 15726: using ::cosh; 15726: 15726: 15726: inline constexpr float 15726: cosh(float __x) 15726: { return __builtin_coshf(__x); } 15726: 15726: inline constexpr long double 15726: cosh(long double __x) 15726: { return __builtin_coshl(__x); } 15726: 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: cosh(_Tp __x) 15726: { return __builtin_cosh(__x); } 15726: 15726: using ::exp; 15726: 15726: 15726: inline constexpr float 15726: exp(float __x) 15726: { return __builtin_expf(__x); } 15726: 15726: inline constexpr long double 15726: exp(long double __x) 15726: { return __builtin_expl(__x); } 15726: 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: exp(_Tp __x) 15726: { return __builtin_exp(__x); } 15726: 15726: using ::fabs; 15726: 15726: 15726: inline constexpr float 15726: fabs(float __x) 15726: { return __builtin_fabsf(__x); } 15726: 15726: inline constexpr long double 15726: fabs(long double __x) 15726: { return __builtin_fabsl(__x); } 15726: 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: fabs(_Tp __x) 15726: { return __builtin_fabs(__x); } 15726: 15726: using ::floor; 15726: 15726: 15726: inline constexpr float 15726: floor(float __x) 15726: { return __builtin_floorf(__x); } 15726: 15726: inline constexpr long double 15726: floor(long double __x) 15726: { return __builtin_floorl(__x); } 15726: 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: floor(_Tp __x) 15726: { return __builtin_floor(__x); } 15726: 15726: using ::fmod; 15726: 15726: 15726: inline constexpr float 15726: fmod(float __x, float __y) 15726: { return __builtin_fmodf(__x, __y); } 15726: 15726: inline constexpr long double 15726: fmod(long double __x, long double __y) 15726: { return __builtin_fmodl(__x, __y); } 15726: 15726: 15726: using ::frexp; 15726: 15726: 15726: inline float 15726: frexp(float __x, int* __exp) 15726: { return __builtin_frexpf(__x, __exp); } 15726: 15726: inline long double 15726: frexp(long double __x, int* __exp) 15726: { return __builtin_frexpl(__x, __exp); } 15726: 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: frexp(_Tp __x, int* __exp) 15726: { return __builtin_frexp(__x, __exp); } 15726: 15726: using ::ldexp; 15726: 15726: 15726: inline constexpr float 15726: ldexp(float __x, int __exp) 15726: { return __builtin_ldexpf(__x, __exp); } 15726: 15726: inline constexpr long double 15726: ldexp(long double __x, int __exp) 15726: { return __builtin_ldexpl(__x, __exp); } 15726: 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: ldexp(_Tp __x, int __exp) 15726: { return __builtin_ldexp(__x, __exp); } 15726: 15726: using ::log; 15726: 15726: 15726: inline constexpr float 15726: log(float __x) 15726: { return __builtin_logf(__x); } 15726: 15726: inline constexpr long double 15726: log(long double __x) 15726: { return __builtin_logl(__x); } 15726: 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: log(_Tp __x) 15726: { return __builtin_log(__x); } 15726: 15726: using ::log10; 15726: 15726: 15726: inline constexpr float 15726: log10(float __x) 15726: { return __builtin_log10f(__x); } 15726: 15726: inline constexpr long double 15726: log10(long double __x) 15726: { return __builtin_log10l(__x); } 15726: 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: log10(_Tp __x) 15726: { return __builtin_log10(__x); } 15726: 15726: using ::modf; 15726: 15726: 15726: inline float 15726: modf(float __x, float* __iptr) 15726: { return __builtin_modff(__x, __iptr); } 15726: 15726: inline long double 15726: modf(long double __x, long double* __iptr) 15726: { return __builtin_modfl(__x, __iptr); } 15726: 15726: 15726: using ::pow; 15726: 15726: 15726: inline constexpr float 15726: pow(float __x, float __y) 15726: { return __builtin_powf(__x, __y); } 15726: 15726: inline constexpr long double 15726: pow(long double __x, long double __y) 15726: { return __builtin_powl(__x, __y); } 15726: # 396 "/usr/include/c++/13/cmath" 3 15726: using ::sin; 15726: 15726: 15726: inline constexpr float 15726: sin(float __x) 15726: { return __builtin_sinf(__x); } 15726: 15726: inline constexpr long double 15726: sin(long double __x) 15726: { return __builtin_sinl(__x); } 15726: 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: sin(_Tp __x) 15726: { return __builtin_sin(__x); } 15726: 15726: using ::sinh; 15726: 15726: 15726: inline constexpr float 15726: sinh(float __x) 15726: { return __builtin_sinhf(__x); } 15726: 15726: inline constexpr long double 15726: sinh(long double __x) 15726: { return __builtin_sinhl(__x); } 15726: 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: sinh(_Tp __x) 15726: { return __builtin_sinh(__x); } 15726: 15726: using ::sqrt; 15726: 15726: 15726: inline constexpr float 15726: sqrt(float __x) 15726: { return __builtin_sqrtf(__x); } 15726: 15726: inline constexpr long double 15726: sqrt(long double __x) 15726: { return __builtin_sqrtl(__x); } 15726: 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: sqrt(_Tp __x) 15726: { return __builtin_sqrt(__x); } 15726: 15726: using ::tan; 15726: 15726: 15726: inline constexpr float 15726: tan(float __x) 15726: { return __builtin_tanf(__x); } 15726: 15726: inline constexpr long double 15726: tan(long double __x) 15726: { return __builtin_tanl(__x); } 15726: 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: tan(_Tp __x) 15726: { return __builtin_tan(__x); } 15726: 15726: using ::tanh; 15726: 15726: 15726: inline constexpr float 15726: tanh(float __x) 15726: { return __builtin_tanhf(__x); } 15726: 15726: inline constexpr long double 15726: tanh(long double __x) 15726: { return __builtin_tanhl(__x); } 15726: 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: tanh(_Tp __x) 15726: { return __builtin_tanh(__x); } 15726: # 1049 "/usr/include/c++/13/cmath" 3 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 15726: atan2(_Tp __y, _Up __x) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 15726: return atan2(__type(__y), __type(__x)); 15726: } 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 15726: fmod(_Tp __x, _Up __y) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 15726: return fmod(__type(__x), __type(__y)); 15726: } 15726: 15726: template 15726: inline constexpr 15726: typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 15726: pow(_Tp __x, _Up __y) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 15726: return pow(__type(__x), __type(__y)); 15726: } 15726: # 1096 "/usr/include/c++/13/cmath" 3 15726: constexpr int 15726: fpclassify(float __x) 15726: { return __builtin_fpclassify(0, 1, 4, 15726: 3, 2, __x); } 15726: 15726: constexpr int 15726: fpclassify(double __x) 15726: { return __builtin_fpclassify(0, 1, 4, 15726: 3, 2, __x); } 15726: 15726: constexpr int 15726: fpclassify(long double __x) 15726: { return __builtin_fpclassify(0, 1, 4, 15726: 3, 2, __x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: int>::__type 15726: fpclassify(_Tp __x) 15726: { return __x != 0 ? 4 : 2; } 15726: 15726: 15726: 15726: constexpr bool 15726: isfinite(float __x) 15726: { return __builtin_isfinite(__x); } 15726: 15726: constexpr bool 15726: isfinite(double __x) 15726: { return __builtin_isfinite(__x); } 15726: 15726: constexpr bool 15726: isfinite(long double __x) 15726: { return __builtin_isfinite(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: bool>::__type 15726: isfinite(_Tp) 15726: { return true; } 15726: 15726: 15726: 15726: constexpr bool 15726: isinf(float __x) 15726: { return __builtin_isinf(__x); } 15726: 15726: 15726: 15726: 15726: 15726: constexpr bool 15726: isinf(double __x) 15726: { return __builtin_isinf(__x); } 15726: 15726: 15726: constexpr bool 15726: isinf(long double __x) 15726: { return __builtin_isinf(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: bool>::__type 15726: isinf(_Tp) 15726: { return false; } 15726: 15726: 15726: 15726: constexpr bool 15726: isnan(float __x) 15726: { return __builtin_isnan(__x); } 15726: 15726: 15726: 15726: 15726: 15726: constexpr bool 15726: isnan(double __x) 15726: { return __builtin_isnan(__x); } 15726: 15726: 15726: constexpr bool 15726: isnan(long double __x) 15726: { return __builtin_isnan(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: bool>::__type 15726: isnan(_Tp) 15726: { return false; } 15726: 15726: 15726: 15726: constexpr bool 15726: isnormal(float __x) 15726: { return __builtin_isnormal(__x); } 15726: 15726: constexpr bool 15726: isnormal(double __x) 15726: { return __builtin_isnormal(__x); } 15726: 15726: constexpr bool 15726: isnormal(long double __x) 15726: { return __builtin_isnormal(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: bool>::__type 15726: isnormal(_Tp __x) 15726: { return __x != 0 ? true : false; } 15726: 15726: 15726: 15726: 15726: constexpr bool 15726: signbit(float __x) 15726: { return __builtin_signbit(__x); } 15726: 15726: constexpr bool 15726: signbit(double __x) 15726: { return __builtin_signbit(__x); } 15726: 15726: constexpr bool 15726: signbit(long double __x) 15726: { return __builtin_signbit(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: bool>::__type 15726: signbit(_Tp __x) 15726: { return __x < 0 ? true : false; } 15726: 15726: 15726: 15726: constexpr bool 15726: isgreater(float __x, float __y) 15726: { return __builtin_isgreater(__x, __y); } 15726: 15726: constexpr bool 15726: isgreater(double __x, double __y) 15726: { return __builtin_isgreater(__x, __y); } 15726: 15726: constexpr bool 15726: isgreater(long double __x, long double __y) 15726: { return __builtin_isgreater(__x, __y); } 15726: 15726: 15726: 15726: template 15726: constexpr typename 15726: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value 15726: && __is_arithmetic<_Up>::__value), bool>::__type 15726: isgreater(_Tp __x, _Up __y) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 15726: return __builtin_isgreater(__type(__x), __type(__y)); 15726: } 15726: 15726: 15726: 15726: constexpr bool 15726: isgreaterequal(float __x, float __y) 15726: { return __builtin_isgreaterequal(__x, __y); } 15726: 15726: constexpr bool 15726: isgreaterequal(double __x, double __y) 15726: { return __builtin_isgreaterequal(__x, __y); } 15726: 15726: constexpr bool 15726: isgreaterequal(long double __x, long double __y) 15726: { return __builtin_isgreaterequal(__x, __y); } 15726: 15726: 15726: 15726: template 15726: constexpr typename 15726: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value 15726: && __is_arithmetic<_Up>::__value), bool>::__type 15726: isgreaterequal(_Tp __x, _Up __y) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 15726: return __builtin_isgreaterequal(__type(__x), __type(__y)); 15726: } 15726: 15726: 15726: 15726: constexpr bool 15726: isless(float __x, float __y) 15726: { return __builtin_isless(__x, __y); } 15726: 15726: constexpr bool 15726: isless(double __x, double __y) 15726: { return __builtin_isless(__x, __y); } 15726: 15726: constexpr bool 15726: isless(long double __x, long double __y) 15726: { return __builtin_isless(__x, __y); } 15726: 15726: 15726: 15726: template 15726: constexpr typename 15726: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value 15726: && __is_arithmetic<_Up>::__value), bool>::__type 15726: isless(_Tp __x, _Up __y) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 15726: return __builtin_isless(__type(__x), __type(__y)); 15726: } 15726: 15726: 15726: 15726: constexpr bool 15726: islessequal(float __x, float __y) 15726: { return __builtin_islessequal(__x, __y); } 15726: 15726: constexpr bool 15726: islessequal(double __x, double __y) 15726: { return __builtin_islessequal(__x, __y); } 15726: 15726: constexpr bool 15726: islessequal(long double __x, long double __y) 15726: { return __builtin_islessequal(__x, __y); } 15726: 15726: 15726: 15726: template 15726: constexpr typename 15726: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value 15726: && __is_arithmetic<_Up>::__value), bool>::__type 15726: islessequal(_Tp __x, _Up __y) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 15726: return __builtin_islessequal(__type(__x), __type(__y)); 15726: } 15726: 15726: 15726: 15726: constexpr bool 15726: islessgreater(float __x, float __y) 15726: { return __builtin_islessgreater(__x, __y); } 15726: 15726: constexpr bool 15726: islessgreater(double __x, double __y) 15726: { return __builtin_islessgreater(__x, __y); } 15726: 15726: constexpr bool 15726: islessgreater(long double __x, long double __y) 15726: { return __builtin_islessgreater(__x, __y); } 15726: 15726: 15726: 15726: template 15726: constexpr typename 15726: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value 15726: && __is_arithmetic<_Up>::__value), bool>::__type 15726: islessgreater(_Tp __x, _Up __y) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 15726: return __builtin_islessgreater(__type(__x), __type(__y)); 15726: } 15726: 15726: 15726: 15726: constexpr bool 15726: isunordered(float __x, float __y) 15726: { return __builtin_isunordered(__x, __y); } 15726: 15726: constexpr bool 15726: isunordered(double __x, double __y) 15726: { return __builtin_isunordered(__x, __y); } 15726: 15726: constexpr bool 15726: isunordered(long double __x, long double __y) 15726: { return __builtin_isunordered(__x, __y); } 15726: 15726: 15726: 15726: template 15726: constexpr typename 15726: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value 15726: && __is_arithmetic<_Up>::__value), bool>::__type 15726: isunordered(_Tp __x, _Up __y) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 15726: return __builtin_isunordered(__type(__x), __type(__y)); 15726: } 15726: # 1881 "/usr/include/c++/13/cmath" 3 15726: using ::double_t; 15726: using ::float_t; 15726: 15726: 15726: using ::acosh; 15726: using ::acoshf; 15726: using ::acoshl; 15726: 15726: using ::asinh; 15726: using ::asinhf; 15726: using ::asinhl; 15726: 15726: using ::atanh; 15726: using ::atanhf; 15726: using ::atanhl; 15726: 15726: using ::cbrt; 15726: using ::cbrtf; 15726: using ::cbrtl; 15726: 15726: using ::copysign; 15726: using ::copysignf; 15726: using ::copysignl; 15726: 15726: using ::erf; 15726: using ::erff; 15726: using ::erfl; 15726: 15726: using ::erfc; 15726: using ::erfcf; 15726: using ::erfcl; 15726: 15726: using ::exp2; 15726: using ::exp2f; 15726: using ::exp2l; 15726: 15726: using ::expm1; 15726: using ::expm1f; 15726: using ::expm1l; 15726: 15726: using ::fdim; 15726: using ::fdimf; 15726: using ::fdiml; 15726: 15726: using ::fma; 15726: using ::fmaf; 15726: using ::fmal; 15726: 15726: using ::fmax; 15726: using ::fmaxf; 15726: using ::fmaxl; 15726: 15726: using ::fmin; 15726: using ::fminf; 15726: using ::fminl; 15726: 15726: using ::hypot; 15726: using ::hypotf; 15726: using ::hypotl; 15726: 15726: using ::ilogb; 15726: using ::ilogbf; 15726: using ::ilogbl; 15726: 15726: using ::lgamma; 15726: using ::lgammaf; 15726: using ::lgammal; 15726: 15726: 15726: using ::llrint; 15726: using ::llrintf; 15726: using ::llrintl; 15726: 15726: using ::llround; 15726: using ::llroundf; 15726: using ::llroundl; 15726: 15726: 15726: using ::log1p; 15726: using ::log1pf; 15726: using ::log1pl; 15726: 15726: using ::log2; 15726: using ::log2f; 15726: using ::log2l; 15726: 15726: using ::logb; 15726: using ::logbf; 15726: using ::logbl; 15726: 15726: using ::lrint; 15726: using ::lrintf; 15726: using ::lrintl; 15726: 15726: using ::lround; 15726: using ::lroundf; 15726: using ::lroundl; 15726: 15726: using ::nan; 15726: using ::nanf; 15726: using ::nanl; 15726: 15726: using ::nearbyint; 15726: using ::nearbyintf; 15726: using ::nearbyintl; 15726: 15726: using ::nextafter; 15726: using ::nextafterf; 15726: using ::nextafterl; 15726: 15726: using ::nexttoward; 15726: using ::nexttowardf; 15726: using ::nexttowardl; 15726: 15726: using ::remainder; 15726: using ::remainderf; 15726: using ::remainderl; 15726: 15726: using ::remquo; 15726: using ::remquof; 15726: using ::remquol; 15726: 15726: using ::rint; 15726: using ::rintf; 15726: using ::rintl; 15726: 15726: using ::round; 15726: using ::roundf; 15726: using ::roundl; 15726: 15726: using ::scalbln; 15726: using ::scalblnf; 15726: using ::scalblnl; 15726: 15726: using ::scalbn; 15726: using ::scalbnf; 15726: using ::scalbnl; 15726: 15726: using ::tgamma; 15726: using ::tgammaf; 15726: using ::tgammal; 15726: 15726: using ::trunc; 15726: using ::truncf; 15726: using ::truncl; 15726: 15726: 15726: 15726: constexpr float 15726: acosh(float __x) 15726: { return __builtin_acoshf(__x); } 15726: 15726: constexpr long double 15726: acosh(long double __x) 15726: { return __builtin_acoshl(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: acosh(_Tp __x) 15726: { return __builtin_acosh(__x); } 15726: 15726: 15726: 15726: constexpr float 15726: asinh(float __x) 15726: { return __builtin_asinhf(__x); } 15726: 15726: constexpr long double 15726: asinh(long double __x) 15726: { return __builtin_asinhl(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: asinh(_Tp __x) 15726: { return __builtin_asinh(__x); } 15726: 15726: 15726: 15726: constexpr float 15726: atanh(float __x) 15726: { return __builtin_atanhf(__x); } 15726: 15726: constexpr long double 15726: atanh(long double __x) 15726: { return __builtin_atanhl(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: atanh(_Tp __x) 15726: { return __builtin_atanh(__x); } 15726: 15726: 15726: 15726: constexpr float 15726: cbrt(float __x) 15726: { return __builtin_cbrtf(__x); } 15726: 15726: constexpr long double 15726: cbrt(long double __x) 15726: { return __builtin_cbrtl(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: cbrt(_Tp __x) 15726: { return __builtin_cbrt(__x); } 15726: 15726: 15726: 15726: constexpr float 15726: copysign(float __x, float __y) 15726: { return __builtin_copysignf(__x, __y); } 15726: 15726: constexpr long double 15726: copysign(long double __x, long double __y) 15726: { return __builtin_copysignl(__x, __y); } 15726: 15726: 15726: 15726: constexpr float 15726: erf(float __x) 15726: { return __builtin_erff(__x); } 15726: 15726: constexpr long double 15726: erf(long double __x) 15726: { return __builtin_erfl(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: erf(_Tp __x) 15726: { return __builtin_erf(__x); } 15726: 15726: 15726: 15726: constexpr float 15726: erfc(float __x) 15726: { return __builtin_erfcf(__x); } 15726: 15726: constexpr long double 15726: erfc(long double __x) 15726: { return __builtin_erfcl(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: erfc(_Tp __x) 15726: { return __builtin_erfc(__x); } 15726: 15726: 15726: 15726: constexpr float 15726: exp2(float __x) 15726: { return __builtin_exp2f(__x); } 15726: 15726: constexpr long double 15726: exp2(long double __x) 15726: { return __builtin_exp2l(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: exp2(_Tp __x) 15726: { return __builtin_exp2(__x); } 15726: 15726: 15726: 15726: constexpr float 15726: expm1(float __x) 15726: { return __builtin_expm1f(__x); } 15726: 15726: constexpr long double 15726: expm1(long double __x) 15726: { return __builtin_expm1l(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: expm1(_Tp __x) 15726: { return __builtin_expm1(__x); } 15726: 15726: 15726: 15726: constexpr float 15726: fdim(float __x, float __y) 15726: { return __builtin_fdimf(__x, __y); } 15726: 15726: constexpr long double 15726: fdim(long double __x, long double __y) 15726: { return __builtin_fdiml(__x, __y); } 15726: 15726: 15726: 15726: constexpr float 15726: fma(float __x, float __y, float __z) 15726: { return __builtin_fmaf(__x, __y, __z); } 15726: 15726: constexpr long double 15726: fma(long double __x, long double __y, long double __z) 15726: { return __builtin_fmal(__x, __y, __z); } 15726: 15726: 15726: 15726: constexpr float 15726: fmax(float __x, float __y) 15726: { return __builtin_fmaxf(__x, __y); } 15726: 15726: constexpr long double 15726: fmax(long double __x, long double __y) 15726: { return __builtin_fmaxl(__x, __y); } 15726: 15726: 15726: 15726: constexpr float 15726: fmin(float __x, float __y) 15726: { return __builtin_fminf(__x, __y); } 15726: 15726: constexpr long double 15726: fmin(long double __x, long double __y) 15726: { return __builtin_fminl(__x, __y); } 15726: 15726: 15726: 15726: constexpr float 15726: hypot(float __x, float __y) 15726: { return __builtin_hypotf(__x, __y); } 15726: 15726: constexpr long double 15726: hypot(long double __x, long double __y) 15726: { return __builtin_hypotl(__x, __y); } 15726: 15726: 15726: 15726: constexpr int 15726: ilogb(float __x) 15726: { return __builtin_ilogbf(__x); } 15726: 15726: constexpr int 15726: ilogb(long double __x) 15726: { return __builtin_ilogbl(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr 15726: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: int>::__type 15726: ilogb(_Tp __x) 15726: { return __builtin_ilogb(__x); } 15726: 15726: 15726: 15726: constexpr float 15726: lgamma(float __x) 15726: { return __builtin_lgammaf(__x); } 15726: 15726: constexpr long double 15726: lgamma(long double __x) 15726: { return __builtin_lgammal(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: lgamma(_Tp __x) 15726: { return __builtin_lgamma(__x); } 15726: 15726: 15726: 15726: constexpr long long 15726: llrint(float __x) 15726: { return __builtin_llrintf(__x); } 15726: 15726: constexpr long long 15726: llrint(long double __x) 15726: { return __builtin_llrintl(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: long long>::__type 15726: llrint(_Tp __x) 15726: { return __builtin_llrint(__x); } 15726: 15726: 15726: 15726: constexpr long long 15726: llround(float __x) 15726: { return __builtin_llroundf(__x); } 15726: 15726: constexpr long long 15726: llround(long double __x) 15726: { return __builtin_llroundl(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: long long>::__type 15726: llround(_Tp __x) 15726: { return __builtin_llround(__x); } 15726: 15726: 15726: 15726: constexpr float 15726: log1p(float __x) 15726: { return __builtin_log1pf(__x); } 15726: 15726: constexpr long double 15726: log1p(long double __x) 15726: { return __builtin_log1pl(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: log1p(_Tp __x) 15726: { return __builtin_log1p(__x); } 15726: 15726: 15726: 15726: 15726: constexpr float 15726: log2(float __x) 15726: { return __builtin_log2f(__x); } 15726: 15726: constexpr long double 15726: log2(long double __x) 15726: { return __builtin_log2l(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: log2(_Tp __x) 15726: { return __builtin_log2(__x); } 15726: 15726: 15726: 15726: constexpr float 15726: logb(float __x) 15726: { return __builtin_logbf(__x); } 15726: 15726: constexpr long double 15726: logb(long double __x) 15726: { return __builtin_logbl(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: logb(_Tp __x) 15726: { return __builtin_logb(__x); } 15726: 15726: 15726: 15726: constexpr long 15726: lrint(float __x) 15726: { return __builtin_lrintf(__x); } 15726: 15726: constexpr long 15726: lrint(long double __x) 15726: { return __builtin_lrintl(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: long>::__type 15726: lrint(_Tp __x) 15726: { return __builtin_lrint(__x); } 15726: 15726: 15726: 15726: constexpr long 15726: lround(float __x) 15726: { return __builtin_lroundf(__x); } 15726: 15726: constexpr long 15726: lround(long double __x) 15726: { return __builtin_lroundl(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: long>::__type 15726: lround(_Tp __x) 15726: { return __builtin_lround(__x); } 15726: 15726: 15726: 15726: constexpr float 15726: nearbyint(float __x) 15726: { return __builtin_nearbyintf(__x); } 15726: 15726: constexpr long double 15726: nearbyint(long double __x) 15726: { return __builtin_nearbyintl(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: nearbyint(_Tp __x) 15726: { return __builtin_nearbyint(__x); } 15726: 15726: 15726: 15726: constexpr float 15726: nextafter(float __x, float __y) 15726: { return __builtin_nextafterf(__x, __y); } 15726: 15726: constexpr long double 15726: nextafter(long double __x, long double __y) 15726: { return __builtin_nextafterl(__x, __y); } 15726: 15726: 15726: 15726: constexpr float 15726: nexttoward(float __x, long double __y) 15726: { return __builtin_nexttowardf(__x, __y); } 15726: 15726: constexpr long double 15726: nexttoward(long double __x, long double __y) 15726: { return __builtin_nexttowardl(__x, __y); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: nexttoward(_Tp __x, long double __y) 15726: { return __builtin_nexttoward(__x, __y); } 15726: 15726: 15726: 15726: constexpr float 15726: remainder(float __x, float __y) 15726: { return __builtin_remainderf(__x, __y); } 15726: 15726: constexpr long double 15726: remainder(long double __x, long double __y) 15726: { return __builtin_remainderl(__x, __y); } 15726: 15726: 15726: 15726: inline float 15726: remquo(float __x, float __y, int* __pquo) 15726: { return __builtin_remquof(__x, __y, __pquo); } 15726: 15726: inline long double 15726: remquo(long double __x, long double __y, int* __pquo) 15726: { return __builtin_remquol(__x, __y, __pquo); } 15726: 15726: 15726: 15726: constexpr float 15726: rint(float __x) 15726: { return __builtin_rintf(__x); } 15726: 15726: constexpr long double 15726: rint(long double __x) 15726: { return __builtin_rintl(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: rint(_Tp __x) 15726: { return __builtin_rint(__x); } 15726: 15726: 15726: 15726: constexpr float 15726: round(float __x) 15726: { return __builtin_roundf(__x); } 15726: 15726: constexpr long double 15726: round(long double __x) 15726: { return __builtin_roundl(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: round(_Tp __x) 15726: { return __builtin_round(__x); } 15726: 15726: 15726: 15726: constexpr float 15726: scalbln(float __x, long __ex) 15726: { return __builtin_scalblnf(__x, __ex); } 15726: 15726: constexpr long double 15726: scalbln(long double __x, long __ex) 15726: { return __builtin_scalblnl(__x, __ex); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: scalbln(_Tp __x, long __ex) 15726: { return __builtin_scalbln(__x, __ex); } 15726: 15726: 15726: 15726: constexpr float 15726: scalbn(float __x, int __ex) 15726: { return __builtin_scalbnf(__x, __ex); } 15726: 15726: constexpr long double 15726: scalbn(long double __x, int __ex) 15726: { return __builtin_scalbnl(__x, __ex); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: scalbn(_Tp __x, int __ex) 15726: { return __builtin_scalbn(__x, __ex); } 15726: 15726: 15726: 15726: constexpr float 15726: tgamma(float __x) 15726: { return __builtin_tgammaf(__x); } 15726: 15726: constexpr long double 15726: tgamma(long double __x) 15726: { return __builtin_tgammal(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: tgamma(_Tp __x) 15726: { return __builtin_tgamma(__x); } 15726: 15726: 15726: 15726: constexpr float 15726: trunc(float __x) 15726: { return __builtin_truncf(__x); } 15726: 15726: constexpr long double 15726: trunc(long double __x) 15726: { return __builtin_truncl(__x); } 15726: 15726: 15726: 15726: template 15726: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 15726: double>::__type 15726: trunc(_Tp __x) 15726: { return __builtin_trunc(__x); } 15726: # 3469 "/usr/include/c++/13/cmath" 3 15726: template 15726: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 15726: copysign(_Tp __x, _Up __y) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 15726: return copysign(__type(__x), __type(__y)); 15726: } 15726: 15726: template 15726: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 15726: fdim(_Tp __x, _Up __y) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 15726: return fdim(__type(__x), __type(__y)); 15726: } 15726: 15726: template 15726: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 15726: fmax(_Tp __x, _Up __y) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 15726: return fmax(__type(__x), __type(__y)); 15726: } 15726: 15726: template 15726: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 15726: fmin(_Tp __x, _Up __y) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 15726: return fmin(__type(__x), __type(__y)); 15726: } 15726: 15726: template 15726: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 15726: hypot(_Tp __x, _Up __y) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 15726: return hypot(__type(__x), __type(__y)); 15726: } 15726: 15726: template 15726: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 15726: nextafter(_Tp __x, _Up __y) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 15726: return nextafter(__type(__x), __type(__y)); 15726: } 15726: 15726: template 15726: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 15726: remainder(_Tp __x, _Up __y) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 15726: return remainder(__type(__x), __type(__y)); 15726: } 15726: 15726: template 15726: inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 15726: remquo(_Tp __x, _Up __y, int* __pquo) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 15726: return remquo(__type(__x), __type(__y), __pquo); 15726: } 15726: 15726: template 15726: constexpr typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type 15726: fma(_Tp __x, _Up __y, _Vp __z) 15726: { 15726: typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type; 15726: return fma(__type(__x), __type(__y), __type(__z)); 15726: } 15726: # 3550 "/usr/include/c++/13/cmath" 3 15726: template 15726: inline _Tp 15726: __hypot3(_Tp __x, _Tp __y, _Tp __z) 15726: { 15726: __x = std::abs(__x); 15726: __y = std::abs(__y); 15726: __z = std::abs(__z); 15726: if (_Tp __a = __x < __y ? __y < __z ? __z : __y : __x < __z ? __z : __x) 15726: return __a * std::sqrt((__x / __a) * (__x / __a) 15726: + (__y / __a) * (__y / __a) 15726: + (__z / __a) * (__z / __a)); 15726: else 15726: return {}; 15726: } 15726: 15726: inline float 15726: hypot(float __x, float __y, float __z) 15726: { return std::__hypot3(__x, __y, __z); } 15726: 15726: inline double 15726: hypot(double __x, double __y, double __z) 15726: { return std::__hypot3(__x, __y, __z); } 15726: 15726: inline long double 15726: hypot(long double __x, long double __y, long double __z) 15726: { return std::__hypot3(__x, __y, __z); } 15726: 15726: template 15726: __gnu_cxx::__promoted_t<_Tp, _Up, _Vp> 15726: hypot(_Tp __x, _Up __y, _Vp __z) 15726: { 15726: using __type = __gnu_cxx::__promoted_t<_Tp, _Up, _Vp>; 15726: return std::__hypot3<__type>(__x, __y, __z); 15726: } 15726: # 3695 "/usr/include/c++/13/cmath" 3 15726: 15726: } 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/specfun.h" 1 3 15726: # 47 "/usr/include/c++/13/bits/specfun.h" 3 15726: # 1 "/usr/include/c++/13/tr1/gamma.tcc" 1 3 15726: # 49 "/usr/include/c++/13/tr1/gamma.tcc" 3 15726: # 1 "/usr/include/c++/13/tr1/special_function_util.h" 1 3 15726: # 39 "/usr/include/c++/13/tr1/special_function_util.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 50 "/usr/include/c++/13/tr1/special_function_util.h" 3 15726: namespace __detail 15726: { 15726: 15726: 15726: 15726: template 15726: struct __floating_point_constant 15726: { 15726: static const _Tp __value; 15726: }; 15726: 15726: 15726: 15726: template 15726: struct __numeric_constants 15726: { 15726: 15726: static _Tp __pi() throw() 15726: { return static_cast<_Tp>(3.1415926535897932384626433832795029L); } 15726: 15726: static _Tp __pi_2() throw() 15726: { return static_cast<_Tp>(1.5707963267948966192313216916397514L); } 15726: 15726: static _Tp __pi_3() throw() 15726: { return static_cast<_Tp>(1.0471975511965977461542144610931676L); } 15726: 15726: static _Tp __pi_4() throw() 15726: { return static_cast<_Tp>(0.7853981633974483096156608458198757L); } 15726: 15726: static _Tp __1_pi() throw() 15726: { return static_cast<_Tp>(0.3183098861837906715377675267450287L); } 15726: 15726: static _Tp __2_sqrtpi() throw() 15726: { return static_cast<_Tp>(1.1283791670955125738961589031215452L); } 15726: 15726: static _Tp __sqrt2() throw() 15726: { return static_cast<_Tp>(1.4142135623730950488016887242096981L); } 15726: 15726: static _Tp __sqrt3() throw() 15726: { return static_cast<_Tp>(1.7320508075688772935274463415058723L); } 15726: 15726: static _Tp __sqrtpio2() throw() 15726: { return static_cast<_Tp>(1.2533141373155002512078826424055226L); } 15726: 15726: static _Tp __sqrt1_2() throw() 15726: { return static_cast<_Tp>(0.7071067811865475244008443621048490L); } 15726: 15726: static _Tp __lnpi() throw() 15726: { return static_cast<_Tp>(1.1447298858494001741434273513530587L); } 15726: 15726: static _Tp __gamma_e() throw() 15726: { return static_cast<_Tp>(0.5772156649015328606065120900824024L); } 15726: 15726: static _Tp __euler() throw() 15726: { return static_cast<_Tp>(2.7182818284590452353602874713526625L); } 15726: }; 15726: # 114 "/usr/include/c++/13/tr1/special_function_util.h" 3 15726: template 15726: inline bool __isnan(_Tp __x) 15726: { return std::isnan(__x); } 15726: # 133 "/usr/include/c++/13/tr1/special_function_util.h" 3 15726: } 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 50 "/usr/include/c++/13/tr1/gamma.tcc" 2 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 65 "/usr/include/c++/13/tr1/gamma.tcc" 3 15726: namespace __detail 15726: { 15726: # 76 "/usr/include/c++/13/tr1/gamma.tcc" 3 15726: template 15726: _Tp 15726: __bernoulli_series(unsigned int __n) 15726: { 15726: 15726: static const _Tp __num[28] = { 15726: _Tp(1UL), -_Tp(1UL) / _Tp(2UL), 15726: _Tp(1UL) / _Tp(6UL), _Tp(0UL), 15726: -_Tp(1UL) / _Tp(30UL), _Tp(0UL), 15726: _Tp(1UL) / _Tp(42UL), _Tp(0UL), 15726: -_Tp(1UL) / _Tp(30UL), _Tp(0UL), 15726: _Tp(5UL) / _Tp(66UL), _Tp(0UL), 15726: -_Tp(691UL) / _Tp(2730UL), _Tp(0UL), 15726: _Tp(7UL) / _Tp(6UL), _Tp(0UL), 15726: -_Tp(3617UL) / _Tp(510UL), _Tp(0UL), 15726: _Tp(43867UL) / _Tp(798UL), _Tp(0UL), 15726: -_Tp(174611) / _Tp(330UL), _Tp(0UL), 15726: _Tp(854513UL) / _Tp(138UL), _Tp(0UL), 15726: -_Tp(236364091UL) / _Tp(2730UL), _Tp(0UL), 15726: _Tp(8553103UL) / _Tp(6UL), _Tp(0UL) 15726: }; 15726: 15726: if (__n == 0) 15726: return _Tp(1); 15726: 15726: if (__n == 1) 15726: return -_Tp(1) / _Tp(2); 15726: 15726: 15726: if (__n % 2 == 1) 15726: return _Tp(0); 15726: 15726: 15726: if (__n < 28) 15726: return __num[__n]; 15726: 15726: 15726: _Tp __fact = _Tp(1); 15726: if ((__n / 2) % 2 == 0) 15726: __fact *= _Tp(-1); 15726: for (unsigned int __k = 1; __k <= __n; ++__k) 15726: __fact *= __k / (_Tp(2) * __numeric_constants<_Tp>::__pi()); 15726: __fact *= _Tp(2); 15726: 15726: _Tp __sum = _Tp(0); 15726: for (unsigned int __i = 1; __i < 1000; ++__i) 15726: { 15726: _Tp __term = std::pow(_Tp(__i), -_Tp(__n)); 15726: if (__term < std::numeric_limits<_Tp>::epsilon()) 15726: break; 15726: __sum += __term; 15726: } 15726: 15726: return __fact * __sum; 15726: } 15726: # 139 "/usr/include/c++/13/tr1/gamma.tcc" 3 15726: template 15726: inline _Tp 15726: __bernoulli(int __n) 15726: { return __bernoulli_series<_Tp>(__n); } 15726: # 153 "/usr/include/c++/13/tr1/gamma.tcc" 3 15726: template 15726: _Tp 15726: __log_gamma_bernoulli(_Tp __x) 15726: { 15726: _Tp __lg = (__x - _Tp(0.5L)) * std::log(__x) - __x 15726: + _Tp(0.5L) * std::log(_Tp(2) 15726: * __numeric_constants<_Tp>::__pi()); 15726: 15726: const _Tp __xx = __x * __x; 15726: _Tp __help = _Tp(1) / __x; 15726: for ( unsigned int __i = 1; __i < 20; ++__i ) 15726: { 15726: const _Tp __2i = _Tp(2 * __i); 15726: __help /= __2i * (__2i - _Tp(1)) * __xx; 15726: __lg += __bernoulli<_Tp>(2 * __i) * __help; 15726: } 15726: 15726: return __lg; 15726: } 15726: # 181 "/usr/include/c++/13/tr1/gamma.tcc" 3 15726: template 15726: _Tp 15726: __log_gamma_lanczos(_Tp __x) 15726: { 15726: const _Tp __xm1 = __x - _Tp(1); 15726: 15726: static const _Tp __lanczos_cheb_7[9] = { 15726: _Tp( 0.99999999999980993227684700473478L), 15726: _Tp( 676.520368121885098567009190444019L), 15726: _Tp(-1259.13921672240287047156078755283L), 15726: _Tp( 771.3234287776530788486528258894L), 15726: _Tp(-176.61502916214059906584551354L), 15726: _Tp( 12.507343278686904814458936853L), 15726: _Tp(-0.13857109526572011689554707L), 15726: _Tp( 9.984369578019570859563e-6L), 15726: _Tp( 1.50563273514931155834e-7L) 15726: }; 15726: 15726: static const _Tp __LOGROOT2PI 15726: = _Tp(0.9189385332046727417803297364056176L); 15726: 15726: _Tp __sum = __lanczos_cheb_7[0]; 15726: for(unsigned int __k = 1; __k < 9; ++__k) 15726: __sum += __lanczos_cheb_7[__k] / (__xm1 + __k); 15726: 15726: const _Tp __term1 = (__xm1 + _Tp(0.5L)) 15726: * std::log((__xm1 + _Tp(7.5L)) 15726: / __numeric_constants<_Tp>::__euler()); 15726: const _Tp __term2 = __LOGROOT2PI + std::log(__sum); 15726: const _Tp __result = __term1 + (__term2 - _Tp(7)); 15726: 15726: return __result; 15726: } 15726: # 225 "/usr/include/c++/13/tr1/gamma.tcc" 3 15726: template 15726: _Tp 15726: __log_gamma(_Tp __x) 15726: { 15726: if (__x > _Tp(0.5L)) 15726: return __log_gamma_lanczos(__x); 15726: else 15726: { 15726: const _Tp __sin_fact 15726: = std::abs(std::sin(__numeric_constants<_Tp>::__pi() * __x)); 15726: if (__sin_fact == _Tp(0)) 15726: std::__throw_domain_error(("Argument is nonpositive integer " "in __log_gamma") 15726: ); 15726: return __numeric_constants<_Tp>::__lnpi() 15726: - std::log(__sin_fact) 15726: - __log_gamma_lanczos(_Tp(1) - __x); 15726: } 15726: } 15726: # 252 "/usr/include/c++/13/tr1/gamma.tcc" 3 15726: template 15726: _Tp 15726: __log_gamma_sign(_Tp __x) 15726: { 15726: if (__x > _Tp(0)) 15726: return _Tp(1); 15726: else 15726: { 15726: const _Tp __sin_fact 15726: = std::sin(__numeric_constants<_Tp>::__pi() * __x); 15726: if (__sin_fact > _Tp(0)) 15726: return (1); 15726: else if (__sin_fact < _Tp(0)) 15726: return -_Tp(1); 15726: else 15726: return _Tp(0); 15726: } 15726: } 15726: # 283 "/usr/include/c++/13/tr1/gamma.tcc" 3 15726: template 15726: _Tp 15726: __log_bincoef(unsigned int __n, unsigned int __k) 15726: { 15726: 15726: static const _Tp __max_bincoeff 15726: = std::numeric_limits<_Tp>::max_exponent10 15726: * std::log(_Tp(10)) - _Tp(1); 15726: 15726: _Tp __coeff = ::std::lgamma(_Tp(1 + __n)) 15726: - ::std::lgamma(_Tp(1 + __k)) 15726: - ::std::lgamma(_Tp(1 + __n - __k)); 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 314 "/usr/include/c++/13/tr1/gamma.tcc" 3 15726: template 15726: _Tp 15726: __bincoef(unsigned int __n, unsigned int __k) 15726: { 15726: 15726: static const _Tp __max_bincoeff 15726: = std::numeric_limits<_Tp>::max_exponent10 15726: * std::log(_Tp(10)) - _Tp(1); 15726: 15726: const _Tp __log_coeff = __log_bincoef<_Tp>(__n, __k); 15726: if (__log_coeff > __max_bincoeff) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else 15726: return std::exp(__log_coeff); 15726: } 15726: # 337 "/usr/include/c++/13/tr1/gamma.tcc" 3 15726: template 15726: inline _Tp 15726: __gamma(_Tp __x) 15726: { return std::exp(__log_gamma(__x)); } 15726: # 356 "/usr/include/c++/13/tr1/gamma.tcc" 3 15726: template 15726: _Tp 15726: __psi_series(_Tp __x) 15726: { 15726: _Tp __sum = -__numeric_constants<_Tp>::__gamma_e() - _Tp(1) / __x; 15726: const unsigned int __max_iter = 100000; 15726: for (unsigned int __k = 1; __k < __max_iter; ++__k) 15726: { 15726: const _Tp __term = __x / (__k * (__k + __x)); 15726: __sum += __term; 15726: if (std::abs(__term / __sum) < std::numeric_limits<_Tp>::epsilon()) 15726: break; 15726: } 15726: return __sum; 15726: } 15726: # 386 "/usr/include/c++/13/tr1/gamma.tcc" 3 15726: template 15726: _Tp 15726: __psi_asymp(_Tp __x) 15726: { 15726: _Tp __sum = std::log(__x) - _Tp(0.5L) / __x; 15726: const _Tp __xx = __x * __x; 15726: _Tp __xp = __xx; 15726: const unsigned int __max_iter = 100; 15726: for (unsigned int __k = 1; __k < __max_iter; ++__k) 15726: { 15726: const _Tp __term = __bernoulli<_Tp>(2 * __k) / (2 * __k * __xp); 15726: __sum -= __term; 15726: if (std::abs(__term / __sum) < std::numeric_limits<_Tp>::epsilon()) 15726: break; 15726: __xp *= __xx; 15726: } 15726: return __sum; 15726: } 15726: # 417 "/usr/include/c++/13/tr1/gamma.tcc" 3 15726: template 15726: _Tp 15726: __psi(_Tp __x) 15726: { 15726: const int __n = static_cast(__x + 0.5L); 15726: const _Tp __eps = _Tp(4) * std::numeric_limits<_Tp>::epsilon(); 15726: if (__n <= 0 && std::abs(__x - _Tp(__n)) < __eps) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (__x < _Tp(0)) 15726: { 15726: const _Tp __pi = __numeric_constants<_Tp>::__pi(); 15726: return __psi(_Tp(1) - __x) 15726: - __pi * std::cos(__pi * __x) / std::sin(__pi * __x); 15726: } 15726: else if (__x > _Tp(100)) 15726: return __psi_asymp(__x); 15726: else 15726: return __psi_series(__x); 15726: } 15726: # 446 "/usr/include/c++/13/tr1/gamma.tcc" 3 15726: template 15726: _Tp 15726: __psi(unsigned int __n, _Tp __x) 15726: { 15726: if (__x <= _Tp(0)) 15726: std::__throw_domain_error(("Argument out of range " "in __psi") 15726: ); 15726: else if (__n == 0) 15726: return __psi(__x); 15726: else 15726: { 15726: const _Tp __hzeta = __hurwitz_zeta(_Tp(__n + 1), __x); 15726: 15726: const _Tp __ln_nfact = ::std::lgamma(_Tp(__n + 1)); 15726: 15726: 15726: 15726: _Tp __result = std::exp(__ln_nfact) * __hzeta; 15726: if (__n % 2 == 1) 15726: __result = -__result; 15726: return __result; 15726: } 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 48 "/usr/include/c++/13/bits/specfun.h" 2 3 15726: # 1 "/usr/include/c++/13/tr1/bessel_function.tcc" 1 3 15726: # 55 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 71 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 15726: namespace __detail 15726: { 15726: # 98 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 15726: template 15726: void 15726: __gamma_temme(_Tp __mu, 15726: _Tp & __gam1, _Tp & __gam2, _Tp & __gampl, _Tp & __gammi) 15726: { 15726: 15726: __gampl = _Tp(1) / ::std::tgamma(_Tp(1) + __mu); 15726: __gammi = _Tp(1) / ::std::tgamma(_Tp(1) - __mu); 15726: 15726: 15726: 15726: 15726: 15726: if (std::abs(__mu) < std::numeric_limits<_Tp>::epsilon()) 15726: __gam1 = -_Tp(__numeric_constants<_Tp>::__gamma_e()); 15726: else 15726: __gam1 = (__gammi - __gampl) / (_Tp(2) * __mu); 15726: 15726: __gam2 = (__gammi + __gampl) / (_Tp(2)); 15726: 15726: return; 15726: } 15726: # 136 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 15726: template 15726: void 15726: __bessel_jn(_Tp __nu, _Tp __x, 15726: _Tp & __Jnu, _Tp & __Nnu, _Tp & __Jpnu, _Tp & __Npnu) 15726: { 15726: if (__x == _Tp(0)) 15726: { 15726: if (__nu == _Tp(0)) 15726: { 15726: __Jnu = _Tp(1); 15726: __Jpnu = _Tp(0); 15726: } 15726: else if (__nu == _Tp(1)) 15726: { 15726: __Jnu = _Tp(0); 15726: __Jpnu = _Tp(0.5L); 15726: } 15726: else 15726: { 15726: __Jnu = _Tp(0); 15726: __Jpnu = _Tp(0); 15726: } 15726: __Nnu = -std::numeric_limits<_Tp>::infinity(); 15726: __Npnu = std::numeric_limits<_Tp>::infinity(); 15726: return; 15726: } 15726: 15726: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 15726: 15726: 15726: 15726: 15726: const _Tp __fp_min = std::sqrt(std::numeric_limits<_Tp>::min()); 15726: const int __max_iter = 15000; 15726: const _Tp __x_min = _Tp(2); 15726: 15726: const int __nl = (__x < __x_min 15726: ? static_cast(__nu + _Tp(0.5L)) 15726: : std::max(0, static_cast(__nu - __x + _Tp(1.5L)))); 15726: 15726: const _Tp __mu = __nu - __nl; 15726: const _Tp __mu2 = __mu * __mu; 15726: const _Tp __xi = _Tp(1) / __x; 15726: const _Tp __xi2 = _Tp(2) * __xi; 15726: _Tp __w = __xi2 / __numeric_constants<_Tp>::__pi(); 15726: int __isign = 1; 15726: _Tp __h = __nu * __xi; 15726: if (__h < __fp_min) 15726: __h = __fp_min; 15726: _Tp __b = __xi2 * __nu; 15726: _Tp __d = _Tp(0); 15726: _Tp __c = __h; 15726: int __i; 15726: for (__i = 1; __i <= __max_iter; ++__i) 15726: { 15726: __b += __xi2; 15726: __d = __b - __d; 15726: if (std::abs(__d) < __fp_min) 15726: __d = __fp_min; 15726: __c = __b - _Tp(1) / __c; 15726: if (std::abs(__c) < __fp_min) 15726: __c = __fp_min; 15726: __d = _Tp(1) / __d; 15726: const _Tp __del = __c * __d; 15726: __h *= __del; 15726: if (__d < _Tp(0)) 15726: __isign = -__isign; 15726: if (std::abs(__del - _Tp(1)) < __eps) 15726: break; 15726: } 15726: if (__i > __max_iter) 15726: std::__throw_runtime_error(("Argument x too large in __bessel_jn; " "try asymptotic expansion.") 15726: ); 15726: _Tp __Jnul = __isign * __fp_min; 15726: _Tp __Jpnul = __h * __Jnul; 15726: _Tp __Jnul1 = __Jnul; 15726: _Tp __Jpnu1 = __Jpnul; 15726: _Tp __fact = __nu * __xi; 15726: for ( int __l = __nl; __l >= 1; --__l ) 15726: { 15726: const _Tp __Jnutemp = __fact * __Jnul + __Jpnul; 15726: __fact -= __xi; 15726: __Jpnul = __fact * __Jnutemp - __Jnul; 15726: __Jnul = __Jnutemp; 15726: } 15726: if (__Jnul == _Tp(0)) 15726: __Jnul = __eps; 15726: _Tp __f= __Jpnul / __Jnul; 15726: _Tp __Nmu, __Nnu1, __Npmu, __Jmu; 15726: if (__x < __x_min) 15726: { 15726: const _Tp __x2 = __x / _Tp(2); 15726: const _Tp __pimu = __numeric_constants<_Tp>::__pi() * __mu; 15726: _Tp __fact = (std::abs(__pimu) < __eps 15726: ? _Tp(1) : __pimu / std::sin(__pimu)); 15726: _Tp __d = -std::log(__x2); 15726: _Tp __e = __mu * __d; 15726: _Tp __fact2 = (std::abs(__e) < __eps 15726: ? _Tp(1) : std::sinh(__e) / __e); 15726: _Tp __gam1, __gam2, __gampl, __gammi; 15726: __gamma_temme(__mu, __gam1, __gam2, __gampl, __gammi); 15726: _Tp __ff = (_Tp(2) / __numeric_constants<_Tp>::__pi()) 15726: * __fact * (__gam1 * std::cosh(__e) + __gam2 * __fact2 * __d); 15726: __e = std::exp(__e); 15726: _Tp __p = __e / (__numeric_constants<_Tp>::__pi() * __gampl); 15726: _Tp __q = _Tp(1) / (__e * __numeric_constants<_Tp>::__pi() * __gammi); 15726: const _Tp __pimu2 = __pimu / _Tp(2); 15726: _Tp __fact3 = (std::abs(__pimu2) < __eps 15726: ? _Tp(1) : std::sin(__pimu2) / __pimu2 ); 15726: _Tp __r = __numeric_constants<_Tp>::__pi() * __pimu2 * __fact3 * __fact3; 15726: _Tp __c = _Tp(1); 15726: __d = -__x2 * __x2; 15726: _Tp __sum = __ff + __r * __q; 15726: _Tp __sum1 = __p; 15726: for (__i = 1; __i <= __max_iter; ++__i) 15726: { 15726: __ff = (__i * __ff + __p + __q) / (__i * __i - __mu2); 15726: __c *= __d / _Tp(__i); 15726: __p /= _Tp(__i) - __mu; 15726: __q /= _Tp(__i) + __mu; 15726: const _Tp __del = __c * (__ff + __r * __q); 15726: __sum += __del; 15726: const _Tp __del1 = __c * __p - __i * __del; 15726: __sum1 += __del1; 15726: if ( std::abs(__del) < __eps * (_Tp(1) + std::abs(__sum)) ) 15726: break; 15726: } 15726: if ( __i > __max_iter ) 15726: std::__throw_runtime_error(("Bessel y series failed to converge " "in __bessel_jn.") 15726: ); 15726: __Nmu = -__sum; 15726: __Nnu1 = -__sum1 * __xi2; 15726: __Npmu = __mu * __xi * __Nmu - __Nnu1; 15726: __Jmu = __w / (__Npmu - __f * __Nmu); 15726: } 15726: else 15726: { 15726: _Tp __a = _Tp(0.25L) - __mu2; 15726: _Tp __q = _Tp(1); 15726: _Tp __p = -__xi / _Tp(2); 15726: _Tp __br = _Tp(2) * __x; 15726: _Tp __bi = _Tp(2); 15726: _Tp __fact = __a * __xi / (__p * __p + __q * __q); 15726: _Tp __cr = __br + __q * __fact; 15726: _Tp __ci = __bi + __p * __fact; 15726: _Tp __den = __br * __br + __bi * __bi; 15726: _Tp __dr = __br / __den; 15726: _Tp __di = -__bi / __den; 15726: _Tp __dlr = __cr * __dr - __ci * __di; 15726: _Tp __dli = __cr * __di + __ci * __dr; 15726: _Tp __temp = __p * __dlr - __q * __dli; 15726: __q = __p * __dli + __q * __dlr; 15726: __p = __temp; 15726: int __i; 15726: for (__i = 2; __i <= __max_iter; ++__i) 15726: { 15726: __a += _Tp(2 * (__i - 1)); 15726: __bi += _Tp(2); 15726: __dr = __a * __dr + __br; 15726: __di = __a * __di + __bi; 15726: if (std::abs(__dr) + std::abs(__di) < __fp_min) 15726: __dr = __fp_min; 15726: __fact = __a / (__cr * __cr + __ci * __ci); 15726: __cr = __br + __cr * __fact; 15726: __ci = __bi - __ci * __fact; 15726: if (std::abs(__cr) + std::abs(__ci) < __fp_min) 15726: __cr = __fp_min; 15726: __den = __dr * __dr + __di * __di; 15726: __dr /= __den; 15726: __di /= -__den; 15726: __dlr = __cr * __dr - __ci * __di; 15726: __dli = __cr * __di + __ci * __dr; 15726: __temp = __p * __dlr - __q * __dli; 15726: __q = __p * __dli + __q * __dlr; 15726: __p = __temp; 15726: if (std::abs(__dlr - _Tp(1)) + std::abs(__dli) < __eps) 15726: break; 15726: } 15726: if (__i > __max_iter) 15726: std::__throw_runtime_error(("Lentz's method failed " "in __bessel_jn.") 15726: ); 15726: const _Tp __gam = (__p - __f) / __q; 15726: __Jmu = std::sqrt(__w / ((__p - __f) * __gam + __q)); 15726: 15726: __Jmu = ::std::copysign(__Jmu, __Jnul); 15726: 15726: 15726: 15726: 15726: __Nmu = __gam * __Jmu; 15726: __Npmu = (__p + __q / __gam) * __Nmu; 15726: __Nnu1 = __mu * __xi * __Nmu - __Npmu; 15726: } 15726: __fact = __Jmu / __Jnul; 15726: __Jnu = __fact * __Jnul1; 15726: __Jpnu = __fact * __Jpnu1; 15726: for (__i = 1; __i <= __nl; ++__i) 15726: { 15726: const _Tp __Nnutemp = (__mu + __i) * __xi2 * __Nnu1 - __Nmu; 15726: __Nmu = __Nnu1; 15726: __Nnu1 = __Nnutemp; 15726: } 15726: __Nnu = __Nmu; 15726: __Npnu = __nu * __xi * __Nmu - __Nnu1; 15726: 15726: return; 15726: } 15726: # 361 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 15726: template 15726: void 15726: __cyl_bessel_jn_asymp(_Tp __nu, _Tp __x, _Tp & __Jnu, _Tp & __Nnu) 15726: { 15726: const _Tp __mu = _Tp(4) * __nu * __nu; 15726: const _Tp __8x = _Tp(8) * __x; 15726: 15726: _Tp __P = _Tp(0); 15726: _Tp __Q = _Tp(0); 15726: 15726: _Tp __k = _Tp(0); 15726: _Tp __term = _Tp(1); 15726: 15726: int __epsP = 0; 15726: int __epsQ = 0; 15726: 15726: _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 15726: 15726: do 15726: { 15726: __term *= (__k == 0 15726: ? _Tp(1) 15726: : -(__mu - (2 * __k - 1) * (2 * __k - 1)) / (__k * __8x)); 15726: 15726: __epsP = std::abs(__term) < __eps * std::abs(__P); 15726: __P += __term; 15726: 15726: __k++; 15726: 15726: __term *= (__mu - (2 * __k - 1) * (2 * __k - 1)) / (__k * __8x); 15726: __epsQ = std::abs(__term) < __eps * std::abs(__Q); 15726: __Q += __term; 15726: 15726: if (__epsP && __epsQ && __k > (__nu / 2.)) 15726: break; 15726: 15726: __k++; 15726: } 15726: while (__k < 1000); 15726: 15726: const _Tp __chi = __x - (__nu + _Tp(0.5L)) 15726: * __numeric_constants<_Tp>::__pi_2(); 15726: 15726: const _Tp __c = std::cos(__chi); 15726: const _Tp __s = std::sin(__chi); 15726: 15726: const _Tp __coef = std::sqrt(_Tp(2) 15726: / (__numeric_constants<_Tp>::__pi() * __x)); 15726: 15726: __Jnu = __coef * (__c * __P - __s * __Q); 15726: __Nnu = __coef * (__s * __P + __c * __Q); 15726: 15726: return; 15726: } 15726: # 444 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 15726: template 15726: _Tp 15726: __cyl_bessel_ij_series(_Tp __nu, _Tp __x, _Tp __sgn, 15726: unsigned int __max_iter) 15726: { 15726: if (__x == _Tp(0)) 15726: return __nu == _Tp(0) ? _Tp(1) : _Tp(0); 15726: 15726: const _Tp __x2 = __x / _Tp(2); 15726: _Tp __fact = __nu * std::log(__x2); 15726: 15726: __fact -= ::std::lgamma(__nu + _Tp(1)); 15726: 15726: 15726: 15726: __fact = std::exp(__fact); 15726: const _Tp __xx4 = __sgn * __x2 * __x2; 15726: _Tp __Jn = _Tp(1); 15726: _Tp __term = _Tp(1); 15726: 15726: for (unsigned int __i = 1; __i < __max_iter; ++__i) 15726: { 15726: __term *= __xx4 / (_Tp(__i) * (__nu + _Tp(__i))); 15726: __Jn += __term; 15726: if (std::abs(__term / __Jn) < std::numeric_limits<_Tp>::epsilon()) 15726: break; 15726: } 15726: 15726: return __fact * __Jn; 15726: } 15726: # 490 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 15726: template 15726: _Tp 15726: __cyl_bessel_j(_Tp __nu, _Tp __x) 15726: { 15726: if (__nu < _Tp(0) || __x < _Tp(0)) 15726: std::__throw_domain_error(("Bad argument " "in __cyl_bessel_j.") 15726: ); 15726: else if (__isnan(__nu) || __isnan(__x)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (__x * __x < _Tp(10) * (__nu + _Tp(1))) 15726: return __cyl_bessel_ij_series(__nu, __x, -_Tp(1), 200); 15726: else if (__x > _Tp(1000)) 15726: { 15726: _Tp __J_nu, __N_nu; 15726: __cyl_bessel_jn_asymp(__nu, __x, __J_nu, __N_nu); 15726: return __J_nu; 15726: } 15726: else 15726: { 15726: _Tp __J_nu, __N_nu, __Jp_nu, __Np_nu; 15726: __bessel_jn(__nu, __x, __J_nu, __N_nu, __Jp_nu, __Np_nu); 15726: return __J_nu; 15726: } 15726: } 15726: # 532 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 15726: template 15726: _Tp 15726: __cyl_neumann_n(_Tp __nu, _Tp __x) 15726: { 15726: if (__nu < _Tp(0) || __x < _Tp(0)) 15726: std::__throw_domain_error(("Bad argument " "in __cyl_neumann_n.") 15726: ); 15726: else if (__isnan(__nu) || __isnan(__x)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (__x > _Tp(1000)) 15726: { 15726: _Tp __J_nu, __N_nu; 15726: __cyl_bessel_jn_asymp(__nu, __x, __J_nu, __N_nu); 15726: return __N_nu; 15726: } 15726: else 15726: { 15726: _Tp __J_nu, __N_nu, __Jp_nu, __Np_nu; 15726: __bessel_jn(__nu, __x, __J_nu, __N_nu, __Jp_nu, __Np_nu); 15726: return __N_nu; 15726: } 15726: } 15726: # 569 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 15726: template 15726: void 15726: __sph_bessel_jn(unsigned int __n, _Tp __x, 15726: _Tp & __j_n, _Tp & __n_n, _Tp & __jp_n, _Tp & __np_n) 15726: { 15726: const _Tp __nu = _Tp(__n) + _Tp(0.5L); 15726: 15726: _Tp __J_nu, __N_nu, __Jp_nu, __Np_nu; 15726: __bessel_jn(__nu, __x, __J_nu, __N_nu, __Jp_nu, __Np_nu); 15726: 15726: const _Tp __factor = __numeric_constants<_Tp>::__sqrtpio2() 15726: / std::sqrt(__x); 15726: 15726: __j_n = __factor * __J_nu; 15726: __n_n = __factor * __N_nu; 15726: __jp_n = __factor * __Jp_nu - __j_n / (_Tp(2) * __x); 15726: __np_n = __factor * __Np_nu - __n_n / (_Tp(2) * __x); 15726: 15726: return; 15726: } 15726: # 604 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 15726: template 15726: _Tp 15726: __sph_bessel(unsigned int __n, _Tp __x) 15726: { 15726: if (__x < _Tp(0)) 15726: std::__throw_domain_error(("Bad argument " "in __sph_bessel.") 15726: ); 15726: else if (__isnan(__x)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (__x == _Tp(0)) 15726: { 15726: if (__n == 0) 15726: return _Tp(1); 15726: else 15726: return _Tp(0); 15726: } 15726: else 15726: { 15726: _Tp __j_n, __n_n, __jp_n, __np_n; 15726: __sph_bessel_jn(__n, __x, __j_n, __n_n, __jp_n, __np_n); 15726: return __j_n; 15726: } 15726: } 15726: # 642 "/usr/include/c++/13/tr1/bessel_function.tcc" 3 15726: template 15726: _Tp 15726: __sph_neumann(unsigned int __n, _Tp __x) 15726: { 15726: if (__x < _Tp(0)) 15726: std::__throw_domain_error(("Bad argument " "in __sph_neumann.") 15726: ); 15726: else if (__isnan(__x)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (__x == _Tp(0)) 15726: return -std::numeric_limits<_Tp>::infinity(); 15726: else 15726: { 15726: _Tp __j_n, __n_n, __jp_n, __np_n; 15726: __sph_bessel_jn(__n, __x, __j_n, __n_n, __jp_n, __np_n); 15726: return __n_n; 15726: } 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 49 "/usr/include/c++/13/bits/specfun.h" 2 3 15726: # 1 "/usr/include/c++/13/tr1/beta_function.tcc" 1 3 15726: # 49 "/usr/include/c++/13/tr1/beta_function.tcc" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 65 "/usr/include/c++/13/tr1/beta_function.tcc" 3 15726: namespace __detail 15726: { 15726: # 79 "/usr/include/c++/13/tr1/beta_function.tcc" 3 15726: template 15726: _Tp 15726: __beta_gamma(_Tp __x, _Tp __y) 15726: { 15726: 15726: _Tp __bet; 15726: 15726: if (__x > __y) 15726: { 15726: __bet = ::std::tgamma(__x) 15726: / ::std::tgamma(__x + __y); 15726: __bet *= ::std::tgamma(__y); 15726: } 15726: else 15726: { 15726: __bet = ::std::tgamma(__y) 15726: / ::std::tgamma(__x + __y); 15726: __bet *= ::std::tgamma(__x); 15726: } 15726: # 111 "/usr/include/c++/13/tr1/beta_function.tcc" 3 15726: return __bet; 15726: } 15726: # 127 "/usr/include/c++/13/tr1/beta_function.tcc" 3 15726: template 15726: _Tp 15726: __beta_lgamma(_Tp __x, _Tp __y) 15726: { 15726: 15726: _Tp __bet = ::std::lgamma(__x) 15726: + ::std::lgamma(__y) 15726: - ::std::lgamma(__x + __y); 15726: 15726: 15726: 15726: 15726: 15726: __bet = std::exp(__bet); 15726: return __bet; 15726: } 15726: # 158 "/usr/include/c++/13/tr1/beta_function.tcc" 3 15726: template 15726: _Tp 15726: __beta_product(_Tp __x, _Tp __y) 15726: { 15726: 15726: _Tp __bet = (__x + __y) / (__x * __y); 15726: 15726: unsigned int __max_iter = 1000000; 15726: for (unsigned int __k = 1; __k < __max_iter; ++__k) 15726: { 15726: _Tp __term = (_Tp(1) + (__x + __y) / __k) 15726: / ((_Tp(1) + __x / __k) * (_Tp(1) + __y / __k)); 15726: __bet *= __term; 15726: } 15726: 15726: return __bet; 15726: } 15726: # 189 "/usr/include/c++/13/tr1/beta_function.tcc" 3 15726: template 15726: inline _Tp 15726: __beta(_Tp __x, _Tp __y) 15726: { 15726: if (__isnan(__x) || __isnan(__y)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else 15726: return __beta_lgamma(__x, __y); 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 50 "/usr/include/c++/13/bits/specfun.h" 2 3 15726: # 1 "/usr/include/c++/13/tr1/ell_integral.tcc" 1 3 15726: # 45 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 59 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 15726: namespace __detail 15726: { 15726: # 76 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 15726: template 15726: _Tp 15726: __ellint_rf(_Tp __x, _Tp __y, _Tp __z) 15726: { 15726: const _Tp __min = std::numeric_limits<_Tp>::min(); 15726: const _Tp __lolim = _Tp(5) * __min; 15726: 15726: if (__x < _Tp(0) || __y < _Tp(0) || __z < _Tp(0)) 15726: std::__throw_domain_error(("Argument less than zero " "in __ellint_rf.") 15726: ); 15726: else if (__x + __y < __lolim || __x + __z < __lolim 15726: || __y + __z < __lolim) 15726: std::__throw_domain_error(("Argument too small in __ellint_rf")); 15726: else 15726: { 15726: const _Tp __c0 = _Tp(1) / _Tp(4); 15726: const _Tp __c1 = _Tp(1) / _Tp(24); 15726: const _Tp __c2 = _Tp(1) / _Tp(10); 15726: const _Tp __c3 = _Tp(3) / _Tp(44); 15726: const _Tp __c4 = _Tp(1) / _Tp(14); 15726: 15726: _Tp __xn = __x; 15726: _Tp __yn = __y; 15726: _Tp __zn = __z; 15726: 15726: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 15726: const _Tp __errtol = std::pow(__eps, _Tp(1) / _Tp(6)); 15726: _Tp __mu; 15726: _Tp __xndev, __yndev, __zndev; 15726: 15726: const unsigned int __max_iter = 100; 15726: for (unsigned int __iter = 0; __iter < __max_iter; ++__iter) 15726: { 15726: __mu = (__xn + __yn + __zn) / _Tp(3); 15726: __xndev = 2 - (__mu + __xn) / __mu; 15726: __yndev = 2 - (__mu + __yn) / __mu; 15726: __zndev = 2 - (__mu + __zn) / __mu; 15726: _Tp __epsilon = std::max(std::abs(__xndev), std::abs(__yndev)); 15726: __epsilon = std::max(__epsilon, std::abs(__zndev)); 15726: if (__epsilon < __errtol) 15726: break; 15726: const _Tp __xnroot = std::sqrt(__xn); 15726: const _Tp __ynroot = std::sqrt(__yn); 15726: const _Tp __znroot = std::sqrt(__zn); 15726: const _Tp __lambda = __xnroot * (__ynroot + __znroot) 15726: + __ynroot * __znroot; 15726: __xn = __c0 * (__xn + __lambda); 15726: __yn = __c0 * (__yn + __lambda); 15726: __zn = __c0 * (__zn + __lambda); 15726: } 15726: 15726: const _Tp __e2 = __xndev * __yndev - __zndev * __zndev; 15726: const _Tp __e3 = __xndev * __yndev * __zndev; 15726: const _Tp __s = _Tp(1) + (__c1 * __e2 - __c2 - __c3 * __e3) * __e2 15726: + __c4 * __e3; 15726: 15726: return __s / std::sqrt(__mu); 15726: } 15726: } 15726: # 153 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 15726: template 15726: _Tp 15726: __comp_ellint_1_series(_Tp __k) 15726: { 15726: 15726: const _Tp __kk = __k * __k; 15726: 15726: _Tp __term = __kk / _Tp(4); 15726: _Tp __sum = _Tp(1) + __term; 15726: 15726: const unsigned int __max_iter = 1000; 15726: for (unsigned int __i = 2; __i < __max_iter; ++__i) 15726: { 15726: __term *= (2 * __i - 1) * __kk / (2 * __i); 15726: if (__term < std::numeric_limits<_Tp>::epsilon()) 15726: break; 15726: __sum += __term; 15726: } 15726: 15726: return __numeric_constants<_Tp>::__pi_2() * __sum; 15726: } 15726: # 191 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 15726: template 15726: _Tp 15726: __comp_ellint_1(_Tp __k) 15726: { 15726: 15726: if (__isnan(__k)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (std::abs(__k) >= _Tp(1)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else 15726: return __ellint_rf(_Tp(0), _Tp(1) - __k * __k, _Tp(1)); 15726: } 15726: # 219 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 15726: template 15726: _Tp 15726: __ellint_1(_Tp __k, _Tp __phi) 15726: { 15726: 15726: if (__isnan(__k) || __isnan(__phi)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (std::abs(__k) > _Tp(1)) 15726: std::__throw_domain_error(("Bad argument in __ellint_1.")); 15726: else 15726: { 15726: 15726: const int __n = std::floor(__phi / __numeric_constants<_Tp>::__pi() 15726: + _Tp(0.5L)); 15726: const _Tp __phi_red = __phi 15726: - __n * __numeric_constants<_Tp>::__pi(); 15726: 15726: const _Tp __s = std::sin(__phi_red); 15726: const _Tp __c = std::cos(__phi_red); 15726: 15726: const _Tp __F = __s 15726: * __ellint_rf(__c * __c, 15726: _Tp(1) - __k * __k * __s * __s, _Tp(1)); 15726: 15726: if (__n == 0) 15726: return __F; 15726: else 15726: return __F + _Tp(2) * __n * __comp_ellint_1(__k); 15726: } 15726: } 15726: # 266 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 15726: template 15726: _Tp 15726: __comp_ellint_2_series(_Tp __k) 15726: { 15726: 15726: const _Tp __kk = __k * __k; 15726: 15726: _Tp __term = __kk; 15726: _Tp __sum = __term; 15726: 15726: const unsigned int __max_iter = 1000; 15726: for (unsigned int __i = 2; __i < __max_iter; ++__i) 15726: { 15726: const _Tp __i2m = 2 * __i - 1; 15726: const _Tp __i2 = 2 * __i; 15726: __term *= __i2m * __i2m * __kk / (__i2 * __i2); 15726: if (__term < std::numeric_limits<_Tp>::epsilon()) 15726: break; 15726: __sum += __term / __i2m; 15726: } 15726: 15726: return __numeric_constants<_Tp>::__pi_2() * (_Tp(1) - __sum); 15726: } 15726: # 314 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 15726: template 15726: _Tp 15726: __ellint_rd(_Tp __x, _Tp __y, _Tp __z) 15726: { 15726: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 15726: const _Tp __errtol = std::pow(__eps / _Tp(8), _Tp(1) / _Tp(6)); 15726: const _Tp __max = std::numeric_limits<_Tp>::max(); 15726: const _Tp __lolim = _Tp(2) / std::pow(__max, _Tp(2) / _Tp(3)); 15726: 15726: if (__x < _Tp(0) || __y < _Tp(0)) 15726: std::__throw_domain_error(("Argument less than zero " "in __ellint_rd.") 15726: ); 15726: else if (__x + __y < __lolim || __z < __lolim) 15726: std::__throw_domain_error(("Argument too small " "in __ellint_rd.") 15726: ); 15726: else 15726: { 15726: const _Tp __c0 = _Tp(1) / _Tp(4); 15726: const _Tp __c1 = _Tp(3) / _Tp(14); 15726: const _Tp __c2 = _Tp(1) / _Tp(6); 15726: const _Tp __c3 = _Tp(9) / _Tp(22); 15726: const _Tp __c4 = _Tp(3) / _Tp(26); 15726: 15726: _Tp __xn = __x; 15726: _Tp __yn = __y; 15726: _Tp __zn = __z; 15726: _Tp __sigma = _Tp(0); 15726: _Tp __power4 = _Tp(1); 15726: 15726: _Tp __mu; 15726: _Tp __xndev, __yndev, __zndev; 15726: 15726: const unsigned int __max_iter = 100; 15726: for (unsigned int __iter = 0; __iter < __max_iter; ++__iter) 15726: { 15726: __mu = (__xn + __yn + _Tp(3) * __zn) / _Tp(5); 15726: __xndev = (__mu - __xn) / __mu; 15726: __yndev = (__mu - __yn) / __mu; 15726: __zndev = (__mu - __zn) / __mu; 15726: _Tp __epsilon = std::max(std::abs(__xndev), std::abs(__yndev)); 15726: __epsilon = std::max(__epsilon, std::abs(__zndev)); 15726: if (__epsilon < __errtol) 15726: break; 15726: _Tp __xnroot = std::sqrt(__xn); 15726: _Tp __ynroot = std::sqrt(__yn); 15726: _Tp __znroot = std::sqrt(__zn); 15726: _Tp __lambda = __xnroot * (__ynroot + __znroot) 15726: + __ynroot * __znroot; 15726: __sigma += __power4 / (__znroot * (__zn + __lambda)); 15726: __power4 *= __c0; 15726: __xn = __c0 * (__xn + __lambda); 15726: __yn = __c0 * (__yn + __lambda); 15726: __zn = __c0 * (__zn + __lambda); 15726: } 15726: 15726: _Tp __ea = __xndev * __yndev; 15726: _Tp __eb = __zndev * __zndev; 15726: _Tp __ec = __ea - __eb; 15726: _Tp __ed = __ea - _Tp(6) * __eb; 15726: _Tp __ef = __ed + __ec + __ec; 15726: _Tp __s1 = __ed * (-__c1 + __c3 * __ed 15726: / _Tp(3) - _Tp(3) * __c4 * __zndev * __ef 15726: / _Tp(2)); 15726: _Tp __s2 = __zndev 15726: * (__c2 * __ef 15726: + __zndev * (-__c3 * __ec - __zndev * __c4 - __ea)); 15726: 15726: return _Tp(3) * __sigma + __power4 * (_Tp(1) + __s1 + __s2) 15726: / (__mu * std::sqrt(__mu)); 15726: } 15726: } 15726: # 399 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 15726: template 15726: _Tp 15726: __comp_ellint_2(_Tp __k) 15726: { 15726: 15726: if (__isnan(__k)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (std::abs(__k) == 1) 15726: return _Tp(1); 15726: else if (std::abs(__k) > _Tp(1)) 15726: std::__throw_domain_error(("Bad argument in __comp_ellint_2.")); 15726: else 15726: { 15726: const _Tp __kk = __k * __k; 15726: 15726: return __ellint_rf(_Tp(0), _Tp(1) - __kk, _Tp(1)) 15726: - __kk * __ellint_rd(_Tp(0), _Tp(1) - __kk, _Tp(1)) / _Tp(3); 15726: } 15726: } 15726: # 433 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 15726: template 15726: _Tp 15726: __ellint_2(_Tp __k, _Tp __phi) 15726: { 15726: 15726: if (__isnan(__k) || __isnan(__phi)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (std::abs(__k) > _Tp(1)) 15726: std::__throw_domain_error(("Bad argument in __ellint_2.")); 15726: else 15726: { 15726: 15726: const int __n = std::floor(__phi / __numeric_constants<_Tp>::__pi() 15726: + _Tp(0.5L)); 15726: const _Tp __phi_red = __phi 15726: - __n * __numeric_constants<_Tp>::__pi(); 15726: 15726: const _Tp __kk = __k * __k; 15726: const _Tp __s = std::sin(__phi_red); 15726: const _Tp __ss = __s * __s; 15726: const _Tp __sss = __ss * __s; 15726: const _Tp __c = std::cos(__phi_red); 15726: const _Tp __cc = __c * __c; 15726: 15726: const _Tp __E = __s 15726: * __ellint_rf(__cc, _Tp(1) - __kk * __ss, _Tp(1)) 15726: - __kk * __sss 15726: * __ellint_rd(__cc, _Tp(1) - __kk * __ss, _Tp(1)) 15726: / _Tp(3); 15726: 15726: if (__n == 0) 15726: return __E; 15726: else 15726: return __E + _Tp(2) * __n * __comp_ellint_2(__k); 15726: } 15726: } 15726: # 492 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 15726: template 15726: _Tp 15726: __ellint_rc(_Tp __x, _Tp __y) 15726: { 15726: const _Tp __min = std::numeric_limits<_Tp>::min(); 15726: const _Tp __lolim = _Tp(5) * __min; 15726: 15726: if (__x < _Tp(0) || __y < _Tp(0) || __x + __y < __lolim) 15726: std::__throw_domain_error(("Argument less than zero " "in __ellint_rc.") 15726: ); 15726: else 15726: { 15726: const _Tp __c0 = _Tp(1) / _Tp(4); 15726: const _Tp __c1 = _Tp(1) / _Tp(7); 15726: const _Tp __c2 = _Tp(9) / _Tp(22); 15726: const _Tp __c3 = _Tp(3) / _Tp(10); 15726: const _Tp __c4 = _Tp(3) / _Tp(8); 15726: 15726: _Tp __xn = __x; 15726: _Tp __yn = __y; 15726: 15726: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 15726: const _Tp __errtol = std::pow(__eps / _Tp(30), _Tp(1) / _Tp(6)); 15726: _Tp __mu; 15726: _Tp __sn; 15726: 15726: const unsigned int __max_iter = 100; 15726: for (unsigned int __iter = 0; __iter < __max_iter; ++__iter) 15726: { 15726: __mu = (__xn + _Tp(2) * __yn) / _Tp(3); 15726: __sn = (__yn + __mu) / __mu - _Tp(2); 15726: if (std::abs(__sn) < __errtol) 15726: break; 15726: const _Tp __lambda = _Tp(2) * std::sqrt(__xn) * std::sqrt(__yn) 15726: + __yn; 15726: __xn = __c0 * (__xn + __lambda); 15726: __yn = __c0 * (__yn + __lambda); 15726: } 15726: 15726: _Tp __s = __sn * __sn 15726: * (__c3 + __sn*(__c1 + __sn * (__c4 + __sn * __c2))); 15726: 15726: return (_Tp(1) + __s) / std::sqrt(__mu); 15726: } 15726: } 15726: # 561 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 15726: template 15726: _Tp 15726: __ellint_rj(_Tp __x, _Tp __y, _Tp __z, _Tp __p) 15726: { 15726: const _Tp __min = std::numeric_limits<_Tp>::min(); 15726: const _Tp __lolim = std::pow(_Tp(5) * __min, _Tp(1)/_Tp(3)); 15726: 15726: if (__x < _Tp(0) || __y < _Tp(0) || __z < _Tp(0)) 15726: std::__throw_domain_error(("Argument less than zero " "in __ellint_rj.") 15726: ); 15726: else if (__x + __y < __lolim || __x + __z < __lolim 15726: || __y + __z < __lolim || __p < __lolim) 15726: std::__throw_domain_error(("Argument too small " "in __ellint_rj") 15726: ); 15726: else 15726: { 15726: const _Tp __c0 = _Tp(1) / _Tp(4); 15726: const _Tp __c1 = _Tp(3) / _Tp(14); 15726: const _Tp __c2 = _Tp(1) / _Tp(3); 15726: const _Tp __c3 = _Tp(3) / _Tp(22); 15726: const _Tp __c4 = _Tp(3) / _Tp(26); 15726: 15726: _Tp __xn = __x; 15726: _Tp __yn = __y; 15726: _Tp __zn = __z; 15726: _Tp __pn = __p; 15726: _Tp __sigma = _Tp(0); 15726: _Tp __power4 = _Tp(1); 15726: 15726: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 15726: const _Tp __errtol = std::pow(__eps / _Tp(8), _Tp(1) / _Tp(6)); 15726: 15726: _Tp __mu; 15726: _Tp __xndev, __yndev, __zndev, __pndev; 15726: 15726: const unsigned int __max_iter = 100; 15726: for (unsigned int __iter = 0; __iter < __max_iter; ++__iter) 15726: { 15726: __mu = (__xn + __yn + __zn + _Tp(2) * __pn) / _Tp(5); 15726: __xndev = (__mu - __xn) / __mu; 15726: __yndev = (__mu - __yn) / __mu; 15726: __zndev = (__mu - __zn) / __mu; 15726: __pndev = (__mu - __pn) / __mu; 15726: _Tp __epsilon = std::max(std::abs(__xndev), std::abs(__yndev)); 15726: __epsilon = std::max(__epsilon, std::abs(__zndev)); 15726: __epsilon = std::max(__epsilon, std::abs(__pndev)); 15726: if (__epsilon < __errtol) 15726: break; 15726: const _Tp __xnroot = std::sqrt(__xn); 15726: const _Tp __ynroot = std::sqrt(__yn); 15726: const _Tp __znroot = std::sqrt(__zn); 15726: const _Tp __lambda = __xnroot * (__ynroot + __znroot) 15726: + __ynroot * __znroot; 15726: const _Tp __alpha1 = __pn * (__xnroot + __ynroot + __znroot) 15726: + __xnroot * __ynroot * __znroot; 15726: const _Tp __alpha2 = __alpha1 * __alpha1; 15726: const _Tp __beta = __pn * (__pn + __lambda) 15726: * (__pn + __lambda); 15726: __sigma += __power4 * __ellint_rc(__alpha2, __beta); 15726: __power4 *= __c0; 15726: __xn = __c0 * (__xn + __lambda); 15726: __yn = __c0 * (__yn + __lambda); 15726: __zn = __c0 * (__zn + __lambda); 15726: __pn = __c0 * (__pn + __lambda); 15726: } 15726: 15726: _Tp __ea = __xndev * (__yndev + __zndev) + __yndev * __zndev; 15726: _Tp __eb = __xndev * __yndev * __zndev; 15726: _Tp __ec = __pndev * __pndev; 15726: _Tp __e2 = __ea - _Tp(3) * __ec; 15726: _Tp __e3 = __eb + _Tp(2) * __pndev * (__ea - __ec); 15726: _Tp __s1 = _Tp(1) + __e2 * (-__c1 + _Tp(3) * __c3 * __e2 / _Tp(4) 15726: - _Tp(3) * __c4 * __e3 / _Tp(2)); 15726: _Tp __s2 = __eb * (__c2 / _Tp(2) 15726: + __pndev * (-__c3 - __c3 + __pndev * __c4)); 15726: _Tp __s3 = __pndev * __ea * (__c2 - __pndev * __c3) 15726: - __c2 * __pndev * __ec; 15726: 15726: return _Tp(3) * __sigma + __power4 * (__s1 + __s2 + __s3) 15726: / (__mu * std::sqrt(__mu)); 15726: } 15726: } 15726: # 661 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 15726: template 15726: _Tp 15726: __comp_ellint_3(_Tp __k, _Tp __nu) 15726: { 15726: 15726: if (__isnan(__k) || __isnan(__nu)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (__nu == _Tp(1)) 15726: return std::numeric_limits<_Tp>::infinity(); 15726: else if (std::abs(__k) > _Tp(1)) 15726: std::__throw_domain_error(("Bad argument in __comp_ellint_3.")); 15726: else 15726: { 15726: const _Tp __kk = __k * __k; 15726: 15726: return __ellint_rf(_Tp(0), _Tp(1) - __kk, _Tp(1)) 15726: + __nu 15726: * __ellint_rj(_Tp(0), _Tp(1) - __kk, _Tp(1), _Tp(1) - __nu) 15726: / _Tp(3); 15726: } 15726: } 15726: # 701 "/usr/include/c++/13/tr1/ell_integral.tcc" 3 15726: template 15726: _Tp 15726: __ellint_3(_Tp __k, _Tp __nu, _Tp __phi) 15726: { 15726: 15726: if (__isnan(__k) || __isnan(__nu) || __isnan(__phi)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (std::abs(__k) > _Tp(1)) 15726: std::__throw_domain_error(("Bad argument in __ellint_3.")); 15726: else 15726: { 15726: 15726: const int __n = std::floor(__phi / __numeric_constants<_Tp>::__pi() 15726: + _Tp(0.5L)); 15726: const _Tp __phi_red = __phi 15726: - __n * __numeric_constants<_Tp>::__pi(); 15726: 15726: const _Tp __kk = __k * __k; 15726: const _Tp __s = std::sin(__phi_red); 15726: const _Tp __ss = __s * __s; 15726: const _Tp __sss = __ss * __s; 15726: const _Tp __c = std::cos(__phi_red); 15726: const _Tp __cc = __c * __c; 15726: 15726: const _Tp __Pi = __s 15726: * __ellint_rf(__cc, _Tp(1) - __kk * __ss, _Tp(1)) 15726: + __nu * __sss 15726: * __ellint_rj(__cc, _Tp(1) - __kk * __ss, _Tp(1), 15726: _Tp(1) - __nu * __ss) / _Tp(3); 15726: 15726: if (__n == 0) 15726: return __Pi; 15726: else 15726: return __Pi + _Tp(2) * __n * __comp_ellint_3(__k, __nu); 15726: } 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 51 "/usr/include/c++/13/bits/specfun.h" 2 3 15726: # 1 "/usr/include/c++/13/tr1/exp_integral.tcc" 1 3 15726: # 50 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 64 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 15726: namespace __detail 15726: { 15726: template _Tp __expint_E1(_Tp); 15726: # 81 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 15726: template 15726: _Tp 15726: __expint_E1_series(_Tp __x) 15726: { 15726: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 15726: _Tp __term = _Tp(1); 15726: _Tp __esum = _Tp(0); 15726: _Tp __osum = _Tp(0); 15726: const unsigned int __max_iter = 1000; 15726: for (unsigned int __i = 1; __i < __max_iter; ++__i) 15726: { 15726: __term *= - __x / __i; 15726: if (std::abs(__term) < __eps) 15726: break; 15726: if (__term >= _Tp(0)) 15726: __esum += __term / __i; 15726: else 15726: __osum += __term / __i; 15726: } 15726: 15726: return - __esum - __osum 15726: - __numeric_constants<_Tp>::__gamma_e() - std::log(__x); 15726: } 15726: # 118 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 15726: template 15726: _Tp 15726: __expint_E1_asymp(_Tp __x) 15726: { 15726: _Tp __term = _Tp(1); 15726: _Tp __esum = _Tp(1); 15726: _Tp __osum = _Tp(0); 15726: const unsigned int __max_iter = 1000; 15726: for (unsigned int __i = 1; __i < __max_iter; ++__i) 15726: { 15726: _Tp __prev = __term; 15726: __term *= - __i / __x; 15726: if (std::abs(__term) > std::abs(__prev)) 15726: break; 15726: if (__term >= _Tp(0)) 15726: __esum += __term; 15726: else 15726: __osum += __term; 15726: } 15726: 15726: return std::exp(- __x) * (__esum + __osum) / __x; 15726: } 15726: # 155 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 15726: template 15726: _Tp 15726: __expint_En_series(unsigned int __n, _Tp __x) 15726: { 15726: const unsigned int __max_iter = 1000; 15726: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 15726: const int __nm1 = __n - 1; 15726: _Tp __ans = (__nm1 != 0 15726: ? _Tp(1) / __nm1 : -std::log(__x) 15726: - __numeric_constants<_Tp>::__gamma_e()); 15726: _Tp __fact = _Tp(1); 15726: for (int __i = 1; __i <= __max_iter; ++__i) 15726: { 15726: __fact *= -__x / _Tp(__i); 15726: _Tp __del; 15726: if ( __i != __nm1 ) 15726: __del = -__fact / _Tp(__i - __nm1); 15726: else 15726: { 15726: _Tp __psi = -__numeric_constants<_Tp>::gamma_e(); 15726: for (int __ii = 1; __ii <= __nm1; ++__ii) 15726: __psi += _Tp(1) / _Tp(__ii); 15726: __del = __fact * (__psi - std::log(__x)); 15726: } 15726: __ans += __del; 15726: if (std::abs(__del) < __eps * std::abs(__ans)) 15726: return __ans; 15726: } 15726: std::__throw_runtime_error(("Series summation failed " "in __expint_En_series.") 15726: ); 15726: } 15726: # 201 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 15726: template 15726: _Tp 15726: __expint_En_cont_frac(unsigned int __n, _Tp __x) 15726: { 15726: const unsigned int __max_iter = 1000; 15726: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 15726: const _Tp __fp_min = std::numeric_limits<_Tp>::min(); 15726: const int __nm1 = __n - 1; 15726: _Tp __b = __x + _Tp(__n); 15726: _Tp __c = _Tp(1) / __fp_min; 15726: _Tp __d = _Tp(1) / __b; 15726: _Tp __h = __d; 15726: for ( unsigned int __i = 1; __i <= __max_iter; ++__i ) 15726: { 15726: _Tp __a = -_Tp(__i * (__nm1 + __i)); 15726: __b += _Tp(2); 15726: __d = _Tp(1) / (__a * __d + __b); 15726: __c = __b + __a / __c; 15726: const _Tp __del = __c * __d; 15726: __h *= __del; 15726: if (std::abs(__del - _Tp(1)) < __eps) 15726: { 15726: const _Tp __ans = __h * std::exp(-__x); 15726: return __ans; 15726: } 15726: } 15726: std::__throw_runtime_error(("Continued fraction failed " "in __expint_En_cont_frac.") 15726: ); 15726: } 15726: # 246 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 15726: template 15726: _Tp 15726: __expint_En_recursion(unsigned int __n, _Tp __x) 15726: { 15726: _Tp __En; 15726: _Tp __E1 = __expint_E1(__x); 15726: if (__x < _Tp(__n)) 15726: { 15726: 15726: __En = __E1; 15726: for (unsigned int __j = 2; __j < __n; ++__j) 15726: __En = (std::exp(-__x) - __x * __En) / _Tp(__j - 1); 15726: } 15726: else 15726: { 15726: 15726: __En = _Tp(1); 15726: const int __N = __n + 20; 15726: _Tp __save = _Tp(0); 15726: for (int __j = __N; __j > 0; --__j) 15726: { 15726: __En = (std::exp(-__x) - __j * __En) / __x; 15726: if (__j == __n) 15726: __save = __En; 15726: } 15726: _Tp __norm = __En / __E1; 15726: __En /= __norm; 15726: } 15726: 15726: return __En; 15726: } 15726: # 290 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 15726: template 15726: _Tp 15726: __expint_Ei_series(_Tp __x) 15726: { 15726: _Tp __term = _Tp(1); 15726: _Tp __sum = _Tp(0); 15726: const unsigned int __max_iter = 1000; 15726: for (unsigned int __i = 1; __i < __max_iter; ++__i) 15726: { 15726: __term *= __x / __i; 15726: __sum += __term / __i; 15726: if (__term < std::numeric_limits<_Tp>::epsilon() * __sum) 15726: break; 15726: } 15726: 15726: return __numeric_constants<_Tp>::__gamma_e() + __sum + std::log(__x); 15726: } 15726: # 321 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 15726: template 15726: _Tp 15726: __expint_Ei_asymp(_Tp __x) 15726: { 15726: _Tp __term = _Tp(1); 15726: _Tp __sum = _Tp(1); 15726: const unsigned int __max_iter = 1000; 15726: for (unsigned int __i = 1; __i < __max_iter; ++__i) 15726: { 15726: _Tp __prev = __term; 15726: __term *= __i / __x; 15726: if (__term < std::numeric_limits<_Tp>::epsilon()) 15726: break; 15726: if (__term >= __prev) 15726: break; 15726: __sum += __term; 15726: } 15726: 15726: return std::exp(__x) * __sum / __x; 15726: } 15726: # 354 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 15726: template 15726: _Tp 15726: __expint_Ei(_Tp __x) 15726: { 15726: if (__x < _Tp(0)) 15726: return -__expint_E1(-__x); 15726: else if (__x < -std::log(std::numeric_limits<_Tp>::epsilon())) 15726: return __expint_Ei_series(__x); 15726: else 15726: return __expint_Ei_asymp(__x); 15726: } 15726: # 378 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 15726: template 15726: _Tp 15726: __expint_E1(_Tp __x) 15726: { 15726: if (__x < _Tp(0)) 15726: return -__expint_Ei(-__x); 15726: else if (__x < _Tp(1)) 15726: return __expint_E1_series(__x); 15726: else if (__x < _Tp(100)) 15726: return __expint_En_cont_frac(1, __x); 15726: else 15726: return __expint_E1_asymp(__x); 15726: } 15726: # 408 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 15726: template 15726: _Tp 15726: __expint_asymp(unsigned int __n, _Tp __x) 15726: { 15726: _Tp __term = _Tp(1); 15726: _Tp __sum = _Tp(1); 15726: for (unsigned int __i = 1; __i <= __n; ++__i) 15726: { 15726: _Tp __prev = __term; 15726: __term *= -(__n - __i + 1) / __x; 15726: if (std::abs(__term) > std::abs(__prev)) 15726: break; 15726: __sum += __term; 15726: } 15726: 15726: return std::exp(-__x) * __sum / __x; 15726: } 15726: # 442 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 15726: template 15726: _Tp 15726: __expint_large_n(unsigned int __n, _Tp __x) 15726: { 15726: const _Tp __xpn = __x + __n; 15726: const _Tp __xpn2 = __xpn * __xpn; 15726: _Tp __term = _Tp(1); 15726: _Tp __sum = _Tp(1); 15726: for (unsigned int __i = 1; __i <= __n; ++__i) 15726: { 15726: _Tp __prev = __term; 15726: __term *= (__n - 2 * (__i - 1) * __x) / __xpn2; 15726: if (std::abs(__term) < std::numeric_limits<_Tp>::epsilon()) 15726: break; 15726: __sum += __term; 15726: } 15726: 15726: return std::exp(-__x) * __sum / __xpn; 15726: } 15726: # 476 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 15726: template 15726: _Tp 15726: __expint(unsigned int __n, _Tp __x) 15726: { 15726: 15726: if (__isnan(__x)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (__n <= 1 && __x == _Tp(0)) 15726: return std::numeric_limits<_Tp>::infinity(); 15726: else 15726: { 15726: _Tp __E0 = std::exp(__x) / __x; 15726: if (__n == 0) 15726: return __E0; 15726: 15726: _Tp __E1 = __expint_E1(__x); 15726: if (__n == 1) 15726: return __E1; 15726: 15726: if (__x == _Tp(0)) 15726: return _Tp(1) / static_cast<_Tp>(__n - 1); 15726: 15726: _Tp __En = __expint_En_recursion(__n, __x); 15726: 15726: return __En; 15726: } 15726: } 15726: # 516 "/usr/include/c++/13/tr1/exp_integral.tcc" 3 15726: template 15726: inline _Tp 15726: __expint(_Tp __x) 15726: { 15726: if (__isnan(__x)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else 15726: return __expint_Ei(__x); 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 52 "/usr/include/c++/13/bits/specfun.h" 2 3 15726: # 1 "/usr/include/c++/13/tr1/hypergeometric.tcc" 1 3 15726: # 44 "/usr/include/c++/13/tr1/hypergeometric.tcc" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 60 "/usr/include/c++/13/tr1/hypergeometric.tcc" 3 15726: namespace __detail 15726: { 15726: # 83 "/usr/include/c++/13/tr1/hypergeometric.tcc" 3 15726: template 15726: _Tp 15726: __conf_hyperg_series(_Tp __a, _Tp __c, _Tp __x) 15726: { 15726: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 15726: 15726: _Tp __term = _Tp(1); 15726: _Tp __Fac = _Tp(1); 15726: const unsigned int __max_iter = 100000; 15726: unsigned int __i; 15726: for (__i = 0; __i < __max_iter; ++__i) 15726: { 15726: __term *= (__a + _Tp(__i)) * __x 15726: / ((__c + _Tp(__i)) * _Tp(1 + __i)); 15726: if (std::abs(__term) < __eps) 15726: { 15726: break; 15726: } 15726: __Fac += __term; 15726: } 15726: if (__i == __max_iter) 15726: std::__throw_runtime_error(("Series failed to converge " "in __conf_hyperg_series.") 15726: ); 15726: 15726: return __Fac; 15726: } 15726: # 120 "/usr/include/c++/13/tr1/hypergeometric.tcc" 3 15726: template 15726: _Tp 15726: __conf_hyperg_luke(_Tp __a, _Tp __c, _Tp __xin) 15726: { 15726: const _Tp __big = std::pow(std::numeric_limits<_Tp>::max(), _Tp(0.16L)); 15726: const int __nmax = 20000; 15726: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 15726: const _Tp __x = -__xin; 15726: const _Tp __x3 = __x * __x * __x; 15726: const _Tp __t0 = __a / __c; 15726: const _Tp __t1 = (__a + _Tp(1)) / (_Tp(2) * __c); 15726: const _Tp __t2 = (__a + _Tp(2)) / (_Tp(2) * (__c + _Tp(1))); 15726: _Tp __F = _Tp(1); 15726: _Tp __prec; 15726: 15726: _Tp __Bnm3 = _Tp(1); 15726: _Tp __Bnm2 = _Tp(1) + __t1 * __x; 15726: _Tp __Bnm1 = _Tp(1) + __t2 * __x * (_Tp(1) + __t1 / _Tp(3) * __x); 15726: 15726: _Tp __Anm3 = _Tp(1); 15726: _Tp __Anm2 = __Bnm2 - __t0 * __x; 15726: _Tp __Anm1 = __Bnm1 - __t0 * (_Tp(1) + __t2 * __x) * __x 15726: + __t0 * __t1 * (__c / (__c + _Tp(1))) * __x * __x; 15726: 15726: int __n = 3; 15726: while(1) 15726: { 15726: _Tp __npam1 = _Tp(__n - 1) + __a; 15726: _Tp __npcm1 = _Tp(__n - 1) + __c; 15726: _Tp __npam2 = _Tp(__n - 2) + __a; 15726: _Tp __npcm2 = _Tp(__n - 2) + __c; 15726: _Tp __tnm1 = _Tp(2 * __n - 1); 15726: _Tp __tnm3 = _Tp(2 * __n - 3); 15726: _Tp __tnm5 = _Tp(2 * __n - 5); 15726: _Tp __F1 = (_Tp(__n - 2) - __a) / (_Tp(2) * __tnm3 * __npcm1); 15726: _Tp __F2 = (_Tp(__n) + __a) * __npam1 15726: / (_Tp(4) * __tnm1 * __tnm3 * __npcm2 * __npcm1); 15726: _Tp __F3 = -__npam2 * __npam1 * (_Tp(__n - 2) - __a) 15726: / (_Tp(8) * __tnm3 * __tnm3 * __tnm5 15726: * (_Tp(__n - 3) + __c) * __npcm2 * __npcm1); 15726: _Tp __E = -__npam1 * (_Tp(__n - 1) - __c) 15726: / (_Tp(2) * __tnm3 * __npcm2 * __npcm1); 15726: 15726: _Tp __An = (_Tp(1) + __F1 * __x) * __Anm1 15726: + (__E + __F2 * __x) * __x * __Anm2 + __F3 * __x3 * __Anm3; 15726: _Tp __Bn = (_Tp(1) + __F1 * __x) * __Bnm1 15726: + (__E + __F2 * __x) * __x * __Bnm2 + __F3 * __x3 * __Bnm3; 15726: _Tp __r = __An / __Bn; 15726: 15726: __prec = std::abs((__F - __r) / __F); 15726: __F = __r; 15726: 15726: if (__prec < __eps || __n > __nmax) 15726: break; 15726: 15726: if (std::abs(__An) > __big || std::abs(__Bn) > __big) 15726: { 15726: __An /= __big; 15726: __Bn /= __big; 15726: __Anm1 /= __big; 15726: __Bnm1 /= __big; 15726: __Anm2 /= __big; 15726: __Bnm2 /= __big; 15726: __Anm3 /= __big; 15726: __Bnm3 /= __big; 15726: } 15726: else if (std::abs(__An) < _Tp(1) / __big 15726: || std::abs(__Bn) < _Tp(1) / __big) 15726: { 15726: __An *= __big; 15726: __Bn *= __big; 15726: __Anm1 *= __big; 15726: __Bnm1 *= __big; 15726: __Anm2 *= __big; 15726: __Bnm2 *= __big; 15726: __Anm3 *= __big; 15726: __Bnm3 *= __big; 15726: } 15726: 15726: ++__n; 15726: __Bnm3 = __Bnm2; 15726: __Bnm2 = __Bnm1; 15726: __Bnm1 = __Bn; 15726: __Anm3 = __Anm2; 15726: __Anm2 = __Anm1; 15726: __Anm1 = __An; 15726: } 15726: 15726: if (__n >= __nmax) 15726: std::__throw_runtime_error(("Iteration failed to converge " "in __conf_hyperg_luke.") 15726: ); 15726: 15726: return __F; 15726: } 15726: # 227 "/usr/include/c++/13/tr1/hypergeometric.tcc" 3 15726: template 15726: _Tp 15726: __conf_hyperg(_Tp __a, _Tp __c, _Tp __x) 15726: { 15726: 15726: const _Tp __c_nint = ::std::nearbyint(__c); 15726: 15726: 15726: 15726: if (__isnan(__a) || __isnan(__c) || __isnan(__x)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (__c_nint == __c && __c_nint <= 0) 15726: return std::numeric_limits<_Tp>::infinity(); 15726: else if (__a == _Tp(0)) 15726: return _Tp(1); 15726: else if (__c == __a) 15726: return std::exp(__x); 15726: else if (__x < _Tp(0)) 15726: return __conf_hyperg_luke(__a, __c, __x); 15726: else 15726: return __conf_hyperg_series(__a, __c, __x); 15726: } 15726: # 271 "/usr/include/c++/13/tr1/hypergeometric.tcc" 3 15726: template 15726: _Tp 15726: __hyperg_series(_Tp __a, _Tp __b, _Tp __c, _Tp __x) 15726: { 15726: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 15726: 15726: _Tp __term = _Tp(1); 15726: _Tp __Fabc = _Tp(1); 15726: const unsigned int __max_iter = 100000; 15726: unsigned int __i; 15726: for (__i = 0; __i < __max_iter; ++__i) 15726: { 15726: __term *= (__a + _Tp(__i)) * (__b + _Tp(__i)) * __x 15726: / ((__c + _Tp(__i)) * _Tp(1 + __i)); 15726: if (std::abs(__term) < __eps) 15726: { 15726: break; 15726: } 15726: __Fabc += __term; 15726: } 15726: if (__i == __max_iter) 15726: std::__throw_runtime_error(("Series failed to converge " "in __hyperg_series.") 15726: ); 15726: 15726: return __Fabc; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: _Tp 15726: __hyperg_luke(_Tp __a, _Tp __b, _Tp __c, _Tp __xin) 15726: { 15726: const _Tp __big = std::pow(std::numeric_limits<_Tp>::max(), _Tp(0.16L)); 15726: const int __nmax = 20000; 15726: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 15726: const _Tp __x = -__xin; 15726: const _Tp __x3 = __x * __x * __x; 15726: const _Tp __t0 = __a * __b / __c; 15726: const _Tp __t1 = (__a + _Tp(1)) * (__b + _Tp(1)) / (_Tp(2) * __c); 15726: const _Tp __t2 = (__a + _Tp(2)) * (__b + _Tp(2)) 15726: / (_Tp(2) * (__c + _Tp(1))); 15726: 15726: _Tp __F = _Tp(1); 15726: 15726: _Tp __Bnm3 = _Tp(1); 15726: _Tp __Bnm2 = _Tp(1) + __t1 * __x; 15726: _Tp __Bnm1 = _Tp(1) + __t2 * __x * (_Tp(1) + __t1 / _Tp(3) * __x); 15726: 15726: _Tp __Anm3 = _Tp(1); 15726: _Tp __Anm2 = __Bnm2 - __t0 * __x; 15726: _Tp __Anm1 = __Bnm1 - __t0 * (_Tp(1) + __t2 * __x) * __x 15726: + __t0 * __t1 * (__c / (__c + _Tp(1))) * __x * __x; 15726: 15726: int __n = 3; 15726: while (1) 15726: { 15726: const _Tp __npam1 = _Tp(__n - 1) + __a; 15726: const _Tp __npbm1 = _Tp(__n - 1) + __b; 15726: const _Tp __npcm1 = _Tp(__n - 1) + __c; 15726: const _Tp __npam2 = _Tp(__n - 2) + __a; 15726: const _Tp __npbm2 = _Tp(__n - 2) + __b; 15726: const _Tp __npcm2 = _Tp(__n - 2) + __c; 15726: const _Tp __tnm1 = _Tp(2 * __n - 1); 15726: const _Tp __tnm3 = _Tp(2 * __n - 3); 15726: const _Tp __tnm5 = _Tp(2 * __n - 5); 15726: const _Tp __n2 = __n * __n; 15726: const _Tp __F1 = (_Tp(3) * __n2 + (__a + __b - _Tp(6)) * __n 15726: + _Tp(2) - __a * __b - _Tp(2) * (__a + __b)) 15726: / (_Tp(2) * __tnm3 * __npcm1); 15726: const _Tp __F2 = -(_Tp(3) * __n2 - (__a + __b + _Tp(6)) * __n 15726: + _Tp(2) - __a * __b) * __npam1 * __npbm1 15726: / (_Tp(4) * __tnm1 * __tnm3 * __npcm2 * __npcm1); 15726: const _Tp __F3 = (__npam2 * __npam1 * __npbm2 * __npbm1 15726: * (_Tp(__n - 2) - __a) * (_Tp(__n - 2) - __b)) 15726: / (_Tp(8) * __tnm3 * __tnm3 * __tnm5 15726: * (_Tp(__n - 3) + __c) * __npcm2 * __npcm1); 15726: const _Tp __E = -__npam1 * __npbm1 * (_Tp(__n - 1) - __c) 15726: / (_Tp(2) * __tnm3 * __npcm2 * __npcm1); 15726: 15726: _Tp __An = (_Tp(1) + __F1 * __x) * __Anm1 15726: + (__E + __F2 * __x) * __x * __Anm2 + __F3 * __x3 * __Anm3; 15726: _Tp __Bn = (_Tp(1) + __F1 * __x) * __Bnm1 15726: + (__E + __F2 * __x) * __x * __Bnm2 + __F3 * __x3 * __Bnm3; 15726: const _Tp __r = __An / __Bn; 15726: 15726: const _Tp __prec = std::abs((__F - __r) / __F); 15726: __F = __r; 15726: 15726: if (__prec < __eps || __n > __nmax) 15726: break; 15726: 15726: if (std::abs(__An) > __big || std::abs(__Bn) > __big) 15726: { 15726: __An /= __big; 15726: __Bn /= __big; 15726: __Anm1 /= __big; 15726: __Bnm1 /= __big; 15726: __Anm2 /= __big; 15726: __Bnm2 /= __big; 15726: __Anm3 /= __big; 15726: __Bnm3 /= __big; 15726: } 15726: else if (std::abs(__An) < _Tp(1) / __big 15726: || std::abs(__Bn) < _Tp(1) / __big) 15726: { 15726: __An *= __big; 15726: __Bn *= __big; 15726: __Anm1 *= __big; 15726: __Bnm1 *= __big; 15726: __Anm2 *= __big; 15726: __Bnm2 *= __big; 15726: __Anm3 *= __big; 15726: __Bnm3 *= __big; 15726: } 15726: 15726: ++__n; 15726: __Bnm3 = __Bnm2; 15726: __Bnm2 = __Bnm1; 15726: __Bnm1 = __Bn; 15726: __Anm3 = __Anm2; 15726: __Anm2 = __Anm1; 15726: __Anm1 = __An; 15726: } 15726: 15726: if (__n >= __nmax) 15726: std::__throw_runtime_error(("Iteration failed to converge " "in __hyperg_luke.") 15726: ); 15726: 15726: return __F; 15726: } 15726: # 438 "/usr/include/c++/13/tr1/hypergeometric.tcc" 3 15726: template 15726: _Tp 15726: __hyperg_reflect(_Tp __a, _Tp __b, _Tp __c, _Tp __x) 15726: { 15726: const _Tp __d = __c - __a - __b; 15726: const int __intd = std::floor(__d + _Tp(0.5L)); 15726: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 15726: const _Tp __toler = _Tp(1000) * __eps; 15726: const _Tp __log_max = std::log(std::numeric_limits<_Tp>::max()); 15726: const bool __d_integer = (std::abs(__d - __intd) < __toler); 15726: 15726: if (__d_integer) 15726: { 15726: const _Tp __ln_omx = std::log(_Tp(1) - __x); 15726: const _Tp __ad = std::abs(__d); 15726: _Tp __F1, __F2; 15726: 15726: _Tp __d1, __d2; 15726: if (__d >= _Tp(0)) 15726: { 15726: __d1 = __d; 15726: __d2 = _Tp(0); 15726: } 15726: else 15726: { 15726: __d1 = _Tp(0); 15726: __d2 = __d; 15726: } 15726: 15726: const _Tp __lng_c = __log_gamma(__c); 15726: 15726: 15726: if (__ad < __eps) 15726: { 15726: 15726: __F1 = _Tp(0); 15726: } 15726: else 15726: { 15726: 15726: bool __ok_d1 = true; 15726: _Tp __lng_ad, __lng_ad1, __lng_bd1; 15726: try 15726: { 15726: __lng_ad = __log_gamma(__ad); 15726: __lng_ad1 = __log_gamma(__a + __d1); 15726: __lng_bd1 = __log_gamma(__b + __d1); 15726: } 15726: catch(...) 15726: { 15726: __ok_d1 = false; 15726: } 15726: 15726: if (__ok_d1) 15726: { 15726: 15726: 15726: 15726: _Tp __sum1 = _Tp(1); 15726: _Tp __term = _Tp(1); 15726: _Tp __ln_pre1 = __lng_ad + __lng_c + __d2 * __ln_omx 15726: - __lng_ad1 - __lng_bd1; 15726: 15726: 15726: 15726: for (int __i = 1; __i < __ad; ++__i) 15726: { 15726: const int __j = __i - 1; 15726: __term *= (__a + __d2 + __j) * (__b + __d2 + __j) 15726: / (_Tp(1) + __d2 + __j) / __i * (_Tp(1) - __x); 15726: __sum1 += __term; 15726: } 15726: 15726: if (__ln_pre1 > __log_max) 15726: std::__throw_runtime_error(("Overflow of gamma functions" " in __hyperg_luke.") 15726: ); 15726: else 15726: __F1 = std::exp(__ln_pre1) * __sum1; 15726: } 15726: else 15726: { 15726: 15726: 15726: __F1 = _Tp(0); 15726: } 15726: } 15726: 15726: 15726: bool __ok_d2 = true; 15726: _Tp __lng_ad2, __lng_bd2; 15726: try 15726: { 15726: __lng_ad2 = __log_gamma(__a + __d2); 15726: __lng_bd2 = __log_gamma(__b + __d2); 15726: } 15726: catch(...) 15726: { 15726: __ok_d2 = false; 15726: } 15726: 15726: if (__ok_d2) 15726: { 15726: 15726: 15726: const int __maxiter = 2000; 15726: const _Tp __psi_1 = -__numeric_constants<_Tp>::__gamma_e(); 15726: const _Tp __psi_1pd = __psi(_Tp(1) + __ad); 15726: const _Tp __psi_apd1 = __psi(__a + __d1); 15726: const _Tp __psi_bpd1 = __psi(__b + __d1); 15726: 15726: _Tp __psi_term = __psi_1 + __psi_1pd - __psi_apd1 15726: - __psi_bpd1 - __ln_omx; 15726: _Tp __fact = _Tp(1); 15726: _Tp __sum2 = __psi_term; 15726: _Tp __ln_pre2 = __lng_c + __d1 * __ln_omx 15726: - __lng_ad2 - __lng_bd2; 15726: 15726: 15726: int __j; 15726: for (__j = 1; __j < __maxiter; ++__j) 15726: { 15726: 15726: 15726: const _Tp __term1 = _Tp(1) / _Tp(__j) 15726: + _Tp(1) / (__ad + __j); 15726: const _Tp __term2 = _Tp(1) / (__a + __d1 + _Tp(__j - 1)) 15726: + _Tp(1) / (__b + __d1 + _Tp(__j - 1)); 15726: __psi_term += __term1 - __term2; 15726: __fact *= (__a + __d1 + _Tp(__j - 1)) 15726: * (__b + __d1 + _Tp(__j - 1)) 15726: / ((__ad + __j) * __j) * (_Tp(1) - __x); 15726: const _Tp __delta = __fact * __psi_term; 15726: __sum2 += __delta; 15726: if (std::abs(__delta) < __eps * std::abs(__sum2)) 15726: break; 15726: } 15726: if (__j == __maxiter) 15726: std::__throw_runtime_error(("Sum F2 failed to converge " "in __hyperg_reflect") 15726: ); 15726: 15726: if (__sum2 == _Tp(0)) 15726: __F2 = _Tp(0); 15726: else 15726: __F2 = std::exp(__ln_pre2) * __sum2; 15726: } 15726: else 15726: { 15726: 15726: 15726: __F2 = _Tp(0); 15726: } 15726: 15726: const _Tp __sgn_2 = (__intd % 2 == 1 ? -_Tp(1) : _Tp(1)); 15726: const _Tp __F = __F1 + __sgn_2 * __F2; 15726: 15726: return __F; 15726: } 15726: else 15726: { 15726: 15726: 15726: 15726: 15726: bool __ok1 = true; 15726: _Tp __sgn_g1ca = _Tp(0), __ln_g1ca = _Tp(0); 15726: _Tp __sgn_g1cb = _Tp(0), __ln_g1cb = _Tp(0); 15726: try 15726: { 15726: __sgn_g1ca = __log_gamma_sign(__c - __a); 15726: __ln_g1ca = __log_gamma(__c - __a); 15726: __sgn_g1cb = __log_gamma_sign(__c - __b); 15726: __ln_g1cb = __log_gamma(__c - __b); 15726: } 15726: catch(...) 15726: { 15726: __ok1 = false; 15726: } 15726: 15726: bool __ok2 = true; 15726: _Tp __sgn_g2a = _Tp(0), __ln_g2a = _Tp(0); 15726: _Tp __sgn_g2b = _Tp(0), __ln_g2b = _Tp(0); 15726: try 15726: { 15726: __sgn_g2a = __log_gamma_sign(__a); 15726: __ln_g2a = __log_gamma(__a); 15726: __sgn_g2b = __log_gamma_sign(__b); 15726: __ln_g2b = __log_gamma(__b); 15726: } 15726: catch(...) 15726: { 15726: __ok2 = false; 15726: } 15726: 15726: const _Tp __sgn_gc = __log_gamma_sign(__c); 15726: const _Tp __ln_gc = __log_gamma(__c); 15726: const _Tp __sgn_gd = __log_gamma_sign(__d); 15726: const _Tp __ln_gd = __log_gamma(__d); 15726: const _Tp __sgn_gmd = __log_gamma_sign(-__d); 15726: const _Tp __ln_gmd = __log_gamma(-__d); 15726: 15726: const _Tp __sgn1 = __sgn_gc * __sgn_gd * __sgn_g1ca * __sgn_g1cb; 15726: const _Tp __sgn2 = __sgn_gc * __sgn_gmd * __sgn_g2a * __sgn_g2b; 15726: 15726: _Tp __pre1, __pre2; 15726: if (__ok1 && __ok2) 15726: { 15726: _Tp __ln_pre1 = __ln_gc + __ln_gd - __ln_g1ca - __ln_g1cb; 15726: _Tp __ln_pre2 = __ln_gc + __ln_gmd - __ln_g2a - __ln_g2b 15726: + __d * std::log(_Tp(1) - __x); 15726: if (__ln_pre1 < __log_max && __ln_pre2 < __log_max) 15726: { 15726: __pre1 = std::exp(__ln_pre1); 15726: __pre2 = std::exp(__ln_pre2); 15726: __pre1 *= __sgn1; 15726: __pre2 *= __sgn2; 15726: } 15726: else 15726: { 15726: std::__throw_runtime_error(("Overflow of gamma functions " "in __hyperg_reflect") 15726: ); 15726: } 15726: } 15726: else if (__ok1 && !__ok2) 15726: { 15726: _Tp __ln_pre1 = __ln_gc + __ln_gd - __ln_g1ca - __ln_g1cb; 15726: if (__ln_pre1 < __log_max) 15726: { 15726: __pre1 = std::exp(__ln_pre1); 15726: __pre1 *= __sgn1; 15726: __pre2 = _Tp(0); 15726: } 15726: else 15726: { 15726: std::__throw_runtime_error(("Overflow of gamma functions " "in __hyperg_reflect") 15726: ); 15726: } 15726: } 15726: else if (!__ok1 && __ok2) 15726: { 15726: _Tp __ln_pre2 = __ln_gc + __ln_gmd - __ln_g2a - __ln_g2b 15726: + __d * std::log(_Tp(1) - __x); 15726: if (__ln_pre2 < __log_max) 15726: { 15726: __pre1 = _Tp(0); 15726: __pre2 = std::exp(__ln_pre2); 15726: __pre2 *= __sgn2; 15726: } 15726: else 15726: { 15726: std::__throw_runtime_error(("Overflow of gamma functions " "in __hyperg_reflect") 15726: ); 15726: } 15726: } 15726: else 15726: { 15726: __pre1 = _Tp(0); 15726: __pre2 = _Tp(0); 15726: std::__throw_runtime_error(("Underflow of gamma functions " "in __hyperg_reflect") 15726: ); 15726: } 15726: 15726: const _Tp __F1 = __hyperg_series(__a, __b, _Tp(1) - __d, 15726: _Tp(1) - __x); 15726: const _Tp __F2 = __hyperg_series(__c - __a, __c - __b, _Tp(1) + __d, 15726: _Tp(1) - __x); 15726: 15726: const _Tp __F = __pre1 * __F1 + __pre2 * __F2; 15726: 15726: return __F; 15726: } 15726: } 15726: # 728 "/usr/include/c++/13/tr1/hypergeometric.tcc" 3 15726: template 15726: _Tp 15726: __hyperg(_Tp __a, _Tp __b, _Tp __c, _Tp __x) 15726: { 15726: 15726: const _Tp __a_nint = ::std::nearbyint(__a); 15726: const _Tp __b_nint = ::std::nearbyint(__b); 15726: const _Tp __c_nint = ::std::nearbyint(__c); 15726: 15726: 15726: 15726: 15726: 15726: const _Tp __toler = _Tp(1000) * std::numeric_limits<_Tp>::epsilon(); 15726: if (std::abs(__x) >= _Tp(1)) 15726: std::__throw_domain_error(("Argument outside unit circle " "in __hyperg.") 15726: ); 15726: else if (__isnan(__a) || __isnan(__b) 15726: || __isnan(__c) || __isnan(__x)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (__c_nint == __c && __c_nint <= _Tp(0)) 15726: return std::numeric_limits<_Tp>::infinity(); 15726: else if (std::abs(__c - __b) < __toler || std::abs(__c - __a) < __toler) 15726: return std::pow(_Tp(1) - __x, __c - __a - __b); 15726: else if (__a >= _Tp(0) && __b >= _Tp(0) && __c >= _Tp(0) 15726: && __x >= _Tp(0) && __x < _Tp(0.995L)) 15726: return __hyperg_series(__a, __b, __c, __x); 15726: else if (std::abs(__a) < _Tp(10) && std::abs(__b) < _Tp(10)) 15726: { 15726: 15726: 15726: if (__a < _Tp(0) && std::abs(__a - __a_nint) < __toler) 15726: return __hyperg_series(__a_nint, __b, __c, __x); 15726: else if (__b < _Tp(0) && std::abs(__b - __b_nint) < __toler) 15726: return __hyperg_series(__a, __b_nint, __c, __x); 15726: else if (__x < -_Tp(0.25L)) 15726: return __hyperg_luke(__a, __b, __c, __x); 15726: else if (__x < _Tp(0.5L)) 15726: return __hyperg_series(__a, __b, __c, __x); 15726: else 15726: if (std::abs(__c) > _Tp(10)) 15726: return __hyperg_series(__a, __b, __c, __x); 15726: else 15726: return __hyperg_reflect(__a, __b, __c, __x); 15726: } 15726: else 15726: return __hyperg_luke(__a, __b, __c, __x); 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 53 "/usr/include/c++/13/bits/specfun.h" 2 3 15726: # 1 "/usr/include/c++/13/tr1/legendre_function.tcc" 1 3 15726: # 49 "/usr/include/c++/13/tr1/legendre_function.tcc" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 65 "/usr/include/c++/13/tr1/legendre_function.tcc" 3 15726: namespace __detail 15726: { 15726: # 80 "/usr/include/c++/13/tr1/legendre_function.tcc" 3 15726: template 15726: _Tp 15726: __poly_legendre_p(unsigned int __l, _Tp __x) 15726: { 15726: 15726: if (__isnan(__x)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (__x == +_Tp(1)) 15726: return +_Tp(1); 15726: else if (__x == -_Tp(1)) 15726: return (__l % 2 == 1 ? -_Tp(1) : +_Tp(1)); 15726: else 15726: { 15726: _Tp __p_lm2 = _Tp(1); 15726: if (__l == 0) 15726: return __p_lm2; 15726: 15726: _Tp __p_lm1 = __x; 15726: if (__l == 1) 15726: return __p_lm1; 15726: 15726: _Tp __p_l = 0; 15726: for (unsigned int __ll = 2; __ll <= __l; ++__ll) 15726: { 15726: 15726: 15726: __p_l = _Tp(2) * __x * __p_lm1 - __p_lm2 15726: - (__x * __p_lm1 - __p_lm2) / _Tp(__ll); 15726: __p_lm2 = __p_lm1; 15726: __p_lm1 = __p_l; 15726: } 15726: 15726: return __p_l; 15726: } 15726: } 15726: # 136 "/usr/include/c++/13/tr1/legendre_function.tcc" 3 15726: template 15726: _Tp 15726: __assoc_legendre_p(unsigned int __l, unsigned int __m, _Tp __x, 15726: _Tp __phase = _Tp(+1)) 15726: { 15726: 15726: if (__m > __l) 15726: return _Tp(0); 15726: else if (__isnan(__x)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (__m == 0) 15726: return __poly_legendre_p(__l, __x); 15726: else 15726: { 15726: _Tp __p_mm = _Tp(1); 15726: if (__m > 0) 15726: { 15726: 15726: 15726: _Tp __root = std::sqrt(_Tp(1) - __x) * std::sqrt(_Tp(1) + __x); 15726: _Tp __fact = _Tp(1); 15726: for (unsigned int __i = 1; __i <= __m; ++__i) 15726: { 15726: __p_mm *= __phase * __fact * __root; 15726: __fact += _Tp(2); 15726: } 15726: } 15726: if (__l == __m) 15726: return __p_mm; 15726: 15726: _Tp __p_mp1m = _Tp(2 * __m + 1) * __x * __p_mm; 15726: if (__l == __m + 1) 15726: return __p_mp1m; 15726: 15726: _Tp __p_lm2m = __p_mm; 15726: _Tp __P_lm1m = __p_mp1m; 15726: _Tp __p_lm = _Tp(0); 15726: for (unsigned int __j = __m + 2; __j <= __l; ++__j) 15726: { 15726: __p_lm = (_Tp(2 * __j - 1) * __x * __P_lm1m 15726: - _Tp(__j + __m - 1) * __p_lm2m) / _Tp(__j - __m); 15726: __p_lm2m = __P_lm1m; 15726: __P_lm1m = __p_lm; 15726: } 15726: 15726: return __p_lm; 15726: } 15726: } 15726: # 214 "/usr/include/c++/13/tr1/legendre_function.tcc" 3 15726: template 15726: _Tp 15726: __sph_legendre(unsigned int __l, unsigned int __m, _Tp __theta) 15726: { 15726: if (__isnan(__theta)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: 15726: const _Tp __x = std::cos(__theta); 15726: 15726: if (__m > __l) 15726: return _Tp(0); 15726: else if (__m == 0) 15726: { 15726: _Tp __P = __poly_legendre_p(__l, __x); 15726: _Tp __fact = std::sqrt(_Tp(2 * __l + 1) 15726: / (_Tp(4) * __numeric_constants<_Tp>::__pi())); 15726: __P *= __fact; 15726: return __P; 15726: } 15726: else if (__x == _Tp(1) || __x == -_Tp(1)) 15726: { 15726: 15726: return _Tp(0); 15726: } 15726: else 15726: { 15726: 15726: 15726: 15726: 15726: 15726: const _Tp __sgn = ( __m % 2 == 1 ? -_Tp(1) : _Tp(1)); 15726: const _Tp __y_mp1m_factor = __x * std::sqrt(_Tp(2 * __m + 3)); 15726: 15726: const _Tp __lncirc = ::std::log1p(-__x * __x); 15726: 15726: 15726: 15726: 15726: 15726: const _Tp __lnpoch = ::std::lgamma(_Tp(__m + _Tp(0.5L))) 15726: - ::std::lgamma(_Tp(__m)); 15726: 15726: 15726: 15726: 15726: const _Tp __lnpre_val = 15726: -_Tp(0.25L) * __numeric_constants<_Tp>::__lnpi() 15726: + _Tp(0.5L) * (__lnpoch + __m * __lncirc); 15726: const _Tp __sr = std::sqrt((_Tp(2) + _Tp(1) / __m) 15726: / (_Tp(4) * __numeric_constants<_Tp>::__pi())); 15726: _Tp __y_mm = __sgn * __sr * std::exp(__lnpre_val); 15726: _Tp __y_mp1m = __y_mp1m_factor * __y_mm; 15726: 15726: if (__l == __m) 15726: return __y_mm; 15726: else if (__l == __m + 1) 15726: return __y_mp1m; 15726: else 15726: { 15726: _Tp __y_lm = _Tp(0); 15726: 15726: 15726: for (unsigned int __ll = __m + 2; __ll <= __l; ++__ll) 15726: { 15726: const _Tp __rat1 = _Tp(__ll - __m) / _Tp(__ll + __m); 15726: const _Tp __rat2 = _Tp(__ll - __m - 1) / _Tp(__ll + __m - 1); 15726: const _Tp __fact1 = std::sqrt(__rat1 * _Tp(2 * __ll + 1) 15726: * _Tp(2 * __ll - 1)); 15726: const _Tp __fact2 = std::sqrt(__rat1 * __rat2 * _Tp(2 * __ll + 1) 15726: / _Tp(2 * __ll - 3)); 15726: __y_lm = (__x * __y_mp1m * __fact1 15726: - (__ll + __m - 1) * __y_mm * __fact2) / _Tp(__ll - __m); 15726: __y_mm = __y_mp1m; 15726: __y_mp1m = __y_lm; 15726: } 15726: 15726: return __y_lm; 15726: } 15726: } 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 54 "/usr/include/c++/13/bits/specfun.h" 2 3 15726: # 1 "/usr/include/c++/13/tr1/modified_bessel_func.tcc" 1 3 15726: # 51 "/usr/include/c++/13/tr1/modified_bessel_func.tcc" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 65 "/usr/include/c++/13/tr1/modified_bessel_func.tcc" 3 15726: namespace __detail 15726: { 15726: # 83 "/usr/include/c++/13/tr1/modified_bessel_func.tcc" 3 15726: template 15726: void 15726: __bessel_ik(_Tp __nu, _Tp __x, 15726: _Tp & __Inu, _Tp & __Knu, _Tp & __Ipnu, _Tp & __Kpnu) 15726: { 15726: if (__x == _Tp(0)) 15726: { 15726: if (__nu == _Tp(0)) 15726: { 15726: __Inu = _Tp(1); 15726: __Ipnu = _Tp(0); 15726: } 15726: else if (__nu == _Tp(1)) 15726: { 15726: __Inu = _Tp(0); 15726: __Ipnu = _Tp(0.5L); 15726: } 15726: else 15726: { 15726: __Inu = _Tp(0); 15726: __Ipnu = _Tp(0); 15726: } 15726: __Knu = std::numeric_limits<_Tp>::infinity(); 15726: __Kpnu = -std::numeric_limits<_Tp>::infinity(); 15726: return; 15726: } 15726: 15726: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 15726: const _Tp __fp_min = _Tp(10) * std::numeric_limits<_Tp>::epsilon(); 15726: const int __max_iter = 15000; 15726: const _Tp __x_min = _Tp(2); 15726: 15726: const int __nl = static_cast(__nu + _Tp(0.5L)); 15726: 15726: const _Tp __mu = __nu - __nl; 15726: const _Tp __mu2 = __mu * __mu; 15726: const _Tp __xi = _Tp(1) / __x; 15726: const _Tp __xi2 = _Tp(2) * __xi; 15726: _Tp __h = __nu * __xi; 15726: if ( __h < __fp_min ) 15726: __h = __fp_min; 15726: _Tp __b = __xi2 * __nu; 15726: _Tp __d = _Tp(0); 15726: _Tp __c = __h; 15726: int __i; 15726: for ( __i = 1; __i <= __max_iter; ++__i ) 15726: { 15726: __b += __xi2; 15726: __d = _Tp(1) / (__b + __d); 15726: __c = __b + _Tp(1) / __c; 15726: const _Tp __del = __c * __d; 15726: __h *= __del; 15726: if (std::abs(__del - _Tp(1)) < __eps) 15726: break; 15726: } 15726: if (__i > __max_iter) 15726: std::__throw_runtime_error(("Argument x too large " "in __bessel_ik; " "try asymptotic expansion.") 15726: 15726: ); 15726: _Tp __Inul = __fp_min; 15726: _Tp __Ipnul = __h * __Inul; 15726: _Tp __Inul1 = __Inul; 15726: _Tp __Ipnu1 = __Ipnul; 15726: _Tp __fact = __nu * __xi; 15726: for (int __l = __nl; __l >= 1; --__l) 15726: { 15726: const _Tp __Inutemp = __fact * __Inul + __Ipnul; 15726: __fact -= __xi; 15726: __Ipnul = __fact * __Inutemp + __Inul; 15726: __Inul = __Inutemp; 15726: } 15726: _Tp __f = __Ipnul / __Inul; 15726: _Tp __Kmu, __Knu1; 15726: if (__x < __x_min) 15726: { 15726: const _Tp __x2 = __x / _Tp(2); 15726: const _Tp __pimu = __numeric_constants<_Tp>::__pi() * __mu; 15726: const _Tp __fact = (std::abs(__pimu) < __eps 15726: ? _Tp(1) : __pimu / std::sin(__pimu)); 15726: _Tp __d = -std::log(__x2); 15726: _Tp __e = __mu * __d; 15726: const _Tp __fact2 = (std::abs(__e) < __eps 15726: ? _Tp(1) : std::sinh(__e) / __e); 15726: _Tp __gam1, __gam2, __gampl, __gammi; 15726: __gamma_temme(__mu, __gam1, __gam2, __gampl, __gammi); 15726: _Tp __ff = __fact 15726: * (__gam1 * std::cosh(__e) + __gam2 * __fact2 * __d); 15726: _Tp __sum = __ff; 15726: __e = std::exp(__e); 15726: _Tp __p = __e / (_Tp(2) * __gampl); 15726: _Tp __q = _Tp(1) / (_Tp(2) * __e * __gammi); 15726: _Tp __c = _Tp(1); 15726: __d = __x2 * __x2; 15726: _Tp __sum1 = __p; 15726: int __i; 15726: for (__i = 1; __i <= __max_iter; ++__i) 15726: { 15726: __ff = (__i * __ff + __p + __q) / (__i * __i - __mu2); 15726: __c *= __d / __i; 15726: __p /= __i - __mu; 15726: __q /= __i + __mu; 15726: const _Tp __del = __c * __ff; 15726: __sum += __del; 15726: const _Tp __del1 = __c * (__p - __i * __ff); 15726: __sum1 += __del1; 15726: if (std::abs(__del) < __eps * std::abs(__sum)) 15726: break; 15726: } 15726: if (__i > __max_iter) 15726: std::__throw_runtime_error(("Bessel k series failed to converge " "in __bessel_ik.") 15726: ); 15726: __Kmu = __sum; 15726: __Knu1 = __sum1 * __xi2; 15726: } 15726: else 15726: { 15726: _Tp __b = _Tp(2) * (_Tp(1) + __x); 15726: _Tp __d = _Tp(1) / __b; 15726: _Tp __delh = __d; 15726: _Tp __h = __delh; 15726: _Tp __q1 = _Tp(0); 15726: _Tp __q2 = _Tp(1); 15726: _Tp __a1 = _Tp(0.25L) - __mu2; 15726: _Tp __q = __c = __a1; 15726: _Tp __a = -__a1; 15726: _Tp __s = _Tp(1) + __q * __delh; 15726: int __i; 15726: for (__i = 2; __i <= __max_iter; ++__i) 15726: { 15726: __a -= 2 * (__i - 1); 15726: __c = -__a * __c / __i; 15726: const _Tp __qnew = (__q1 - __b * __q2) / __a; 15726: __q1 = __q2; 15726: __q2 = __qnew; 15726: __q += __c * __qnew; 15726: __b += _Tp(2); 15726: __d = _Tp(1) / (__b + __a * __d); 15726: __delh = (__b * __d - _Tp(1)) * __delh; 15726: __h += __delh; 15726: const _Tp __dels = __q * __delh; 15726: __s += __dels; 15726: if ( std::abs(__dels / __s) < __eps ) 15726: break; 15726: } 15726: if (__i > __max_iter) 15726: std::__throw_runtime_error(("Steed's method failed " "in __bessel_ik.") 15726: ); 15726: __h = __a1 * __h; 15726: __Kmu = std::sqrt(__numeric_constants<_Tp>::__pi() / (_Tp(2) * __x)) 15726: * std::exp(-__x) / __s; 15726: __Knu1 = __Kmu * (__mu + __x + _Tp(0.5L) - __h) * __xi; 15726: } 15726: 15726: _Tp __Kpmu = __mu * __xi * __Kmu - __Knu1; 15726: _Tp __Inumu = __xi / (__f * __Kmu - __Kpmu); 15726: __Inu = __Inumu * __Inul1 / __Inul; 15726: __Ipnu = __Inumu * __Ipnu1 / __Inul; 15726: for ( __i = 1; __i <= __nl; ++__i ) 15726: { 15726: const _Tp __Knutemp = (__mu + __i) * __xi2 * __Knu1 + __Kmu; 15726: __Kmu = __Knu1; 15726: __Knu1 = __Knutemp; 15726: } 15726: __Knu = __Kmu; 15726: __Kpnu = __nu * __xi * __Kmu - __Knu1; 15726: 15726: return; 15726: } 15726: # 267 "/usr/include/c++/13/tr1/modified_bessel_func.tcc" 3 15726: template 15726: _Tp 15726: __cyl_bessel_i(_Tp __nu, _Tp __x) 15726: { 15726: if (__nu < _Tp(0) || __x < _Tp(0)) 15726: std::__throw_domain_error(("Bad argument " "in __cyl_bessel_i.") 15726: ); 15726: else if (__isnan(__nu) || __isnan(__x)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (__x * __x < _Tp(10) * (__nu + _Tp(1))) 15726: return __cyl_bessel_ij_series(__nu, __x, +_Tp(1), 200); 15726: else 15726: { 15726: _Tp __I_nu, __K_nu, __Ip_nu, __Kp_nu; 15726: __bessel_ik(__nu, __x, __I_nu, __K_nu, __Ip_nu, __Kp_nu); 15726: return __I_nu; 15726: } 15726: } 15726: # 303 "/usr/include/c++/13/tr1/modified_bessel_func.tcc" 3 15726: template 15726: _Tp 15726: __cyl_bessel_k(_Tp __nu, _Tp __x) 15726: { 15726: if (__nu < _Tp(0) || __x < _Tp(0)) 15726: std::__throw_domain_error(("Bad argument " "in __cyl_bessel_k.") 15726: ); 15726: else if (__isnan(__nu) || __isnan(__x)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else 15726: { 15726: _Tp __I_nu, __K_nu, __Ip_nu, __Kp_nu; 15726: __bessel_ik(__nu, __x, __I_nu, __K_nu, __Ip_nu, __Kp_nu); 15726: return __K_nu; 15726: } 15726: } 15726: # 337 "/usr/include/c++/13/tr1/modified_bessel_func.tcc" 3 15726: template 15726: void 15726: __sph_bessel_ik(unsigned int __n, _Tp __x, 15726: _Tp & __i_n, _Tp & __k_n, _Tp & __ip_n, _Tp & __kp_n) 15726: { 15726: const _Tp __nu = _Tp(__n) + _Tp(0.5L); 15726: 15726: _Tp __I_nu, __Ip_nu, __K_nu, __Kp_nu; 15726: __bessel_ik(__nu, __x, __I_nu, __K_nu, __Ip_nu, __Kp_nu); 15726: 15726: const _Tp __factor = __numeric_constants<_Tp>::__sqrtpio2() 15726: / std::sqrt(__x); 15726: 15726: __i_n = __factor * __I_nu; 15726: __k_n = __factor * __K_nu; 15726: __ip_n = __factor * __Ip_nu - __i_n / (_Tp(2) * __x); 15726: __kp_n = __factor * __Kp_nu - __k_n / (_Tp(2) * __x); 15726: 15726: return; 15726: } 15726: # 373 "/usr/include/c++/13/tr1/modified_bessel_func.tcc" 3 15726: template 15726: void 15726: __airy(_Tp __x, _Tp & __Ai, _Tp & __Bi, _Tp & __Aip, _Tp & __Bip) 15726: { 15726: const _Tp __absx = std::abs(__x); 15726: const _Tp __rootx = std::sqrt(__absx); 15726: const _Tp __z = _Tp(2) * __absx * __rootx / _Tp(3); 15726: const _Tp _S_inf = std::numeric_limits<_Tp>::infinity(); 15726: 15726: if (__isnan(__x)) 15726: __Bip = __Aip = __Bi = __Ai = std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (__z == _S_inf) 15726: { 15726: __Aip = __Ai = _Tp(0); 15726: __Bip = __Bi = _S_inf; 15726: } 15726: else if (__z == -_S_inf) 15726: __Bip = __Aip = __Bi = __Ai = _Tp(0); 15726: else if (__x > _Tp(0)) 15726: { 15726: _Tp __I_nu, __Ip_nu, __K_nu, __Kp_nu; 15726: 15726: __bessel_ik(_Tp(1) / _Tp(3), __z, __I_nu, __K_nu, __Ip_nu, __Kp_nu); 15726: __Ai = __rootx * __K_nu 15726: / (__numeric_constants<_Tp>::__sqrt3() 15726: * __numeric_constants<_Tp>::__pi()); 15726: __Bi = __rootx * (__K_nu / __numeric_constants<_Tp>::__pi() 15726: + _Tp(2) * __I_nu / __numeric_constants<_Tp>::__sqrt3()); 15726: 15726: __bessel_ik(_Tp(2) / _Tp(3), __z, __I_nu, __K_nu, __Ip_nu, __Kp_nu); 15726: __Aip = -__x * __K_nu 15726: / (__numeric_constants<_Tp>::__sqrt3() 15726: * __numeric_constants<_Tp>::__pi()); 15726: __Bip = __x * (__K_nu / __numeric_constants<_Tp>::__pi() 15726: + _Tp(2) * __I_nu 15726: / __numeric_constants<_Tp>::__sqrt3()); 15726: } 15726: else if (__x < _Tp(0)) 15726: { 15726: _Tp __J_nu, __Jp_nu, __N_nu, __Np_nu; 15726: 15726: __bessel_jn(_Tp(1) / _Tp(3), __z, __J_nu, __N_nu, __Jp_nu, __Np_nu); 15726: __Ai = __rootx * (__J_nu 15726: - __N_nu / __numeric_constants<_Tp>::__sqrt3()) / _Tp(2); 15726: __Bi = -__rootx * (__N_nu 15726: + __J_nu / __numeric_constants<_Tp>::__sqrt3()) / _Tp(2); 15726: 15726: __bessel_jn(_Tp(2) / _Tp(3), __z, __J_nu, __N_nu, __Jp_nu, __Np_nu); 15726: __Aip = __absx * (__N_nu / __numeric_constants<_Tp>::__sqrt3() 15726: + __J_nu) / _Tp(2); 15726: __Bip = __absx * (__J_nu / __numeric_constants<_Tp>::__sqrt3() 15726: - __N_nu) / _Tp(2); 15726: } 15726: else 15726: { 15726: 15726: 15726: 15726: __Ai = _Tp(0.35502805388781723926L); 15726: __Bi = __Ai * __numeric_constants<_Tp>::__sqrt3(); 15726: 15726: 15726: 15726: 15726: __Aip = -_Tp(0.25881940379280679840L); 15726: __Bip = -__Aip * __numeric_constants<_Tp>::__sqrt3(); 15726: } 15726: 15726: return; 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 55 "/usr/include/c++/13/bits/specfun.h" 2 3 15726: # 1 "/usr/include/c++/13/tr1/poly_hermite.tcc" 1 3 15726: # 42 "/usr/include/c++/13/tr1/poly_hermite.tcc" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 56 "/usr/include/c++/13/tr1/poly_hermite.tcc" 3 15726: namespace __detail 15726: { 15726: # 72 "/usr/include/c++/13/tr1/poly_hermite.tcc" 3 15726: template 15726: _Tp 15726: __poly_hermite_recursion(unsigned int __n, _Tp __x) 15726: { 15726: 15726: _Tp __H_0 = 1; 15726: if (__n == 0) 15726: return __H_0; 15726: 15726: 15726: _Tp __H_1 = 2 * __x; 15726: if (__n == 1) 15726: return __H_1; 15726: 15726: 15726: _Tp __H_n, __H_nm1, __H_nm2; 15726: unsigned int __i; 15726: for (__H_nm2 = __H_0, __H_nm1 = __H_1, __i = 2; __i <= __n; ++__i) 15726: { 15726: __H_n = 2 * (__x * __H_nm1 - (__i - 1) * __H_nm2); 15726: __H_nm2 = __H_nm1; 15726: __H_nm1 = __H_n; 15726: } 15726: 15726: return __H_n; 15726: } 15726: # 114 "/usr/include/c++/13/tr1/poly_hermite.tcc" 3 15726: template 15726: inline _Tp 15726: __poly_hermite(unsigned int __n, _Tp __x) 15726: { 15726: if (__isnan(__x)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else 15726: return __poly_hermite_recursion(__n, __x); 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 56 "/usr/include/c++/13/bits/specfun.h" 2 3 15726: # 1 "/usr/include/c++/13/tr1/poly_laguerre.tcc" 1 3 15726: # 44 "/usr/include/c++/13/tr1/poly_laguerre.tcc" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 60 "/usr/include/c++/13/tr1/poly_laguerre.tcc" 3 15726: namespace __detail 15726: { 15726: # 75 "/usr/include/c++/13/tr1/poly_laguerre.tcc" 3 15726: template 15726: _Tp 15726: __poly_laguerre_large_n(unsigned __n, _Tpa __alpha1, _Tp __x) 15726: { 15726: const _Tp __a = -_Tp(__n); 15726: const _Tp __b = _Tp(__alpha1) + _Tp(1); 15726: const _Tp __eta = _Tp(2) * __b - _Tp(4) * __a; 15726: const _Tp __cos2th = __x / __eta; 15726: const _Tp __sin2th = _Tp(1) - __cos2th; 15726: const _Tp __th = std::acos(std::sqrt(__cos2th)); 15726: const _Tp __pre_h = __numeric_constants<_Tp>::__pi_2() 15726: * __numeric_constants<_Tp>::__pi_2() 15726: * __eta * __eta * __cos2th * __sin2th; 15726: 15726: 15726: const _Tp __lg_b = ::std::lgamma(_Tp(__n) + __b); 15726: const _Tp __lnfact = ::std::lgamma(_Tp(__n + 1)); 15726: 15726: 15726: 15726: 15726: 15726: _Tp __pre_term1 = _Tp(0.5L) * (_Tp(1) - __b) 15726: * std::log(_Tp(0.25L) * __x * __eta); 15726: _Tp __pre_term2 = _Tp(0.25L) * std::log(__pre_h); 15726: _Tp __lnpre = __lg_b - __lnfact + _Tp(0.5L) * __x 15726: + __pre_term1 - __pre_term2; 15726: _Tp __ser_term1 = std::sin(__a * __numeric_constants<_Tp>::__pi()); 15726: _Tp __ser_term2 = std::sin(_Tp(0.25L) * __eta 15726: * (_Tp(2) * __th 15726: - std::sin(_Tp(2) * __th)) 15726: + __numeric_constants<_Tp>::__pi_4()); 15726: _Tp __ser = __ser_term1 + __ser_term2; 15726: 15726: return std::exp(__lnpre) * __ser; 15726: } 15726: # 129 "/usr/include/c++/13/tr1/poly_laguerre.tcc" 3 15726: template 15726: _Tp 15726: __poly_laguerre_hyperg(unsigned int __n, _Tpa __alpha1, _Tp __x) 15726: { 15726: const _Tp __b = _Tp(__alpha1) + _Tp(1); 15726: const _Tp __mx = -__x; 15726: const _Tp __tc_sgn = (__x < _Tp(0) ? _Tp(1) 15726: : ((__n % 2 == 1) ? -_Tp(1) : _Tp(1))); 15726: 15726: _Tp __tc = _Tp(1); 15726: const _Tp __ax = std::abs(__x); 15726: for (unsigned int __k = 1; __k <= __n; ++__k) 15726: __tc *= (__ax / __k); 15726: 15726: _Tp __term = __tc * __tc_sgn; 15726: _Tp __sum = __term; 15726: for (int __k = int(__n) - 1; __k >= 0; --__k) 15726: { 15726: __term *= ((__b + _Tp(__k)) / _Tp(int(__n) - __k)) 15726: * _Tp(__k + 1) / __mx; 15726: __sum += __term; 15726: } 15726: 15726: return __sum; 15726: } 15726: # 185 "/usr/include/c++/13/tr1/poly_laguerre.tcc" 3 15726: template 15726: _Tp 15726: __poly_laguerre_recursion(unsigned int __n, _Tpa __alpha1, _Tp __x) 15726: { 15726: 15726: _Tp __l_0 = _Tp(1); 15726: if (__n == 0) 15726: return __l_0; 15726: 15726: 15726: _Tp __l_1 = -__x + _Tp(1) + _Tp(__alpha1); 15726: if (__n == 1) 15726: return __l_1; 15726: 15726: 15726: _Tp __l_n2 = __l_0; 15726: _Tp __l_n1 = __l_1; 15726: _Tp __l_n = _Tp(0); 15726: for (unsigned int __nn = 2; __nn <= __n; ++__nn) 15726: { 15726: __l_n = (_Tp(2 * __nn - 1) + _Tp(__alpha1) - __x) 15726: * __l_n1 / _Tp(__nn) 15726: - (_Tp(__nn - 1) + _Tp(__alpha1)) * __l_n2 / _Tp(__nn); 15726: __l_n2 = __l_n1; 15726: __l_n1 = __l_n; 15726: } 15726: 15726: return __l_n; 15726: } 15726: # 244 "/usr/include/c++/13/tr1/poly_laguerre.tcc" 3 15726: template 15726: _Tp 15726: __poly_laguerre(unsigned int __n, _Tpa __alpha1, _Tp __x) 15726: { 15726: if (__x < _Tp(0)) 15726: std::__throw_domain_error(("Negative argument " "in __poly_laguerre.") 15726: ); 15726: 15726: else if (__isnan(__x)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (__n == 0) 15726: return _Tp(1); 15726: else if (__n == 1) 15726: return _Tp(1) + _Tp(__alpha1) - __x; 15726: else if (__x == _Tp(0)) 15726: { 15726: _Tp __prod = _Tp(__alpha1) + _Tp(1); 15726: for (unsigned int __k = 2; __k <= __n; ++__k) 15726: __prod *= (_Tp(__alpha1) + _Tp(__k)) / _Tp(__k); 15726: return __prod; 15726: } 15726: else if (__n > 10000000 && _Tp(__alpha1) > -_Tp(1) 15726: && __x < _Tp(2) * (_Tp(__alpha1) + _Tp(1)) + _Tp(4 * __n)) 15726: return __poly_laguerre_large_n(__n, __alpha1, __x); 15726: else if (_Tp(__alpha1) >= _Tp(0) 15726: || (__x > _Tp(0) && _Tp(__alpha1) < -_Tp(__n + 1))) 15726: return __poly_laguerre_recursion(__n, __alpha1, __x); 15726: else 15726: return __poly_laguerre_hyperg(__n, __alpha1, __x); 15726: } 15726: # 296 "/usr/include/c++/13/tr1/poly_laguerre.tcc" 3 15726: template 15726: inline _Tp 15726: __assoc_laguerre(unsigned int __n, unsigned int __m, _Tp __x) 15726: { return __poly_laguerre(__n, __m, __x); } 15726: # 316 "/usr/include/c++/13/tr1/poly_laguerre.tcc" 3 15726: template 15726: inline _Tp 15726: __laguerre(unsigned int __n, _Tp __x) 15726: { return __poly_laguerre(__n, 0, __x); } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 57 "/usr/include/c++/13/bits/specfun.h" 2 3 15726: # 1 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 1 3 15726: # 47 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 63 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 3 15726: namespace __detail 15726: { 15726: # 78 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 3 15726: template 15726: _Tp 15726: __riemann_zeta_sum(_Tp __s) 15726: { 15726: 15726: if (__s < _Tp(1)) 15726: std::__throw_domain_error(("Bad argument in zeta sum.")); 15726: 15726: const unsigned int max_iter = 10000; 15726: _Tp __zeta = _Tp(0); 15726: for (unsigned int __k = 1; __k < max_iter; ++__k) 15726: { 15726: _Tp __term = std::pow(static_cast<_Tp>(__k), -__s); 15726: if (__term < std::numeric_limits<_Tp>::epsilon()) 15726: { 15726: break; 15726: } 15726: __zeta += __term; 15726: } 15726: 15726: return __zeta; 15726: } 15726: # 115 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 3 15726: template 15726: _Tp 15726: __riemann_zeta_alt(_Tp __s) 15726: { 15726: _Tp __sgn = _Tp(1); 15726: _Tp __zeta = _Tp(0); 15726: for (unsigned int __i = 1; __i < 10000000; ++__i) 15726: { 15726: _Tp __term = __sgn / std::pow(__i, __s); 15726: if (std::abs(__term) < std::numeric_limits<_Tp>::epsilon()) 15726: break; 15726: __zeta += __term; 15726: __sgn *= _Tp(-1); 15726: } 15726: __zeta /= _Tp(1) - std::pow(_Tp(2), _Tp(1) - __s); 15726: 15726: return __zeta; 15726: } 15726: # 157 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 3 15726: template 15726: _Tp 15726: __riemann_zeta_glob(_Tp __s) 15726: { 15726: _Tp __zeta = _Tp(0); 15726: 15726: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 15726: 15726: const _Tp __max_bincoeff = std::numeric_limits<_Tp>::max_exponent10 15726: * std::log(_Tp(10)) - _Tp(1); 15726: 15726: 15726: 15726: if (__s < _Tp(0)) 15726: { 15726: 15726: if (::std::fmod(__s,_Tp(2)) == _Tp(0)) 15726: return _Tp(0); 15726: else 15726: 15726: { 15726: _Tp __zeta = __riemann_zeta_glob(_Tp(1) - __s); 15726: __zeta *= std::pow(_Tp(2) 15726: * __numeric_constants<_Tp>::__pi(), __s) 15726: * std::sin(__numeric_constants<_Tp>::__pi_2() * __s) 15726: 15726: * std::exp(::std::lgamma(_Tp(1) - __s)) 15726: 15726: 15726: 15726: / __numeric_constants<_Tp>::__pi(); 15726: return __zeta; 15726: } 15726: } 15726: 15726: _Tp __num = _Tp(0.5L); 15726: const unsigned int __maxit = 10000; 15726: for (unsigned int __i = 0; __i < __maxit; ++__i) 15726: { 15726: bool __punt = false; 15726: _Tp __sgn = _Tp(1); 15726: _Tp __term = _Tp(0); 15726: for (unsigned int __j = 0; __j <= __i; ++__j) 15726: { 15726: 15726: _Tp __bincoeff = ::std::lgamma(_Tp(1 + __i)) 15726: - ::std::lgamma(_Tp(1 + __j)) 15726: - ::std::lgamma(_Tp(1 + __i - __j)); 15726: 15726: 15726: 15726: 15726: 15726: if (__bincoeff > __max_bincoeff) 15726: { 15726: 15726: __punt = true; 15726: break; 15726: } 15726: __bincoeff = std::exp(__bincoeff); 15726: __term += __sgn * __bincoeff * std::pow(_Tp(1 + __j), -__s); 15726: __sgn *= _Tp(-1); 15726: } 15726: if (__punt) 15726: break; 15726: __term *= __num; 15726: __zeta += __term; 15726: if (std::abs(__term/__zeta) < __eps) 15726: break; 15726: __num *= _Tp(0.5L); 15726: } 15726: 15726: __zeta /= _Tp(1) - std::pow(_Tp(2), _Tp(1) - __s); 15726: 15726: return __zeta; 15726: } 15726: # 252 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 3 15726: template 15726: _Tp 15726: __riemann_zeta_product(_Tp __s) 15726: { 15726: static const _Tp __prime[] = { 15726: _Tp(2), _Tp(3), _Tp(5), _Tp(7), _Tp(11), _Tp(13), _Tp(17), _Tp(19), 15726: _Tp(23), _Tp(29), _Tp(31), _Tp(37), _Tp(41), _Tp(43), _Tp(47), 15726: _Tp(53), _Tp(59), _Tp(61), _Tp(67), _Tp(71), _Tp(73), _Tp(79), 15726: _Tp(83), _Tp(89), _Tp(97), _Tp(101), _Tp(103), _Tp(107), _Tp(109) 15726: }; 15726: static const unsigned int __num_primes = sizeof(__prime) / sizeof(_Tp); 15726: 15726: _Tp __zeta = _Tp(1); 15726: for (unsigned int __i = 0; __i < __num_primes; ++__i) 15726: { 15726: const _Tp __fact = _Tp(1) - std::pow(__prime[__i], -__s); 15726: __zeta *= __fact; 15726: if (_Tp(1) - __fact < std::numeric_limits<_Tp>::epsilon()) 15726: break; 15726: } 15726: 15726: __zeta = _Tp(1) / __zeta; 15726: 15726: return __zeta; 15726: } 15726: # 293 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 3 15726: template 15726: _Tp 15726: __riemann_zeta(_Tp __s) 15726: { 15726: if (__isnan(__s)) 15726: return std::numeric_limits<_Tp>::quiet_NaN(); 15726: else if (__s == _Tp(1)) 15726: return std::numeric_limits<_Tp>::infinity(); 15726: else if (__s < -_Tp(19)) 15726: { 15726: _Tp __zeta = __riemann_zeta_product(_Tp(1) - __s); 15726: __zeta *= std::pow(_Tp(2) * __numeric_constants<_Tp>::__pi(), __s) 15726: * std::sin(__numeric_constants<_Tp>::__pi_2() * __s) 15726: 15726: * std::exp(::std::lgamma(_Tp(1) - __s)) 15726: 15726: 15726: 15726: / __numeric_constants<_Tp>::__pi(); 15726: return __zeta; 15726: } 15726: else if (__s < _Tp(20)) 15726: { 15726: 15726: bool __glob = true; 15726: if (__glob) 15726: return __riemann_zeta_glob(__s); 15726: else 15726: { 15726: if (__s > _Tp(1)) 15726: return __riemann_zeta_sum(__s); 15726: else 15726: { 15726: _Tp __zeta = std::pow(_Tp(2) 15726: * __numeric_constants<_Tp>::__pi(), __s) 15726: * std::sin(__numeric_constants<_Tp>::__pi_2() * __s) 15726: 15726: * ::std::tgamma(_Tp(1) - __s) 15726: 15726: 15726: 15726: * __riemann_zeta_sum(_Tp(1) - __s); 15726: return __zeta; 15726: } 15726: } 15726: } 15726: else 15726: return __riemann_zeta_product(__s); 15726: } 15726: # 365 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 3 15726: template 15726: _Tp 15726: __hurwitz_zeta_glob(_Tp __a, _Tp __s) 15726: { 15726: _Tp __zeta = _Tp(0); 15726: 15726: const _Tp __eps = std::numeric_limits<_Tp>::epsilon(); 15726: 15726: const _Tp __max_bincoeff = std::numeric_limits<_Tp>::max_exponent10 15726: * std::log(_Tp(10)) - _Tp(1); 15726: 15726: const unsigned int __maxit = 10000; 15726: for (unsigned int __i = 0; __i < __maxit; ++__i) 15726: { 15726: bool __punt = false; 15726: _Tp __sgn = _Tp(1); 15726: _Tp __term = _Tp(0); 15726: for (unsigned int __j = 0; __j <= __i; ++__j) 15726: { 15726: 15726: _Tp __bincoeff = ::std::lgamma(_Tp(1 + __i)) 15726: - ::std::lgamma(_Tp(1 + __j)) 15726: - ::std::lgamma(_Tp(1 + __i - __j)); 15726: 15726: 15726: 15726: 15726: 15726: if (__bincoeff > __max_bincoeff) 15726: { 15726: 15726: __punt = true; 15726: break; 15726: } 15726: __bincoeff = std::exp(__bincoeff); 15726: __term += __sgn * __bincoeff * std::pow(_Tp(__a + __j), -__s); 15726: __sgn *= _Tp(-1); 15726: } 15726: if (__punt) 15726: break; 15726: __term /= _Tp(__i + 1); 15726: if (std::abs(__term / __zeta) < __eps) 15726: break; 15726: __zeta += __term; 15726: } 15726: 15726: __zeta /= __s - _Tp(1); 15726: 15726: return __zeta; 15726: } 15726: # 430 "/usr/include/c++/13/tr1/riemann_zeta.tcc" 3 15726: template 15726: inline _Tp 15726: __hurwitz_zeta(_Tp __a, _Tp __s) 15726: { return __hurwitz_zeta_glob(__a, __s); } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 58 "/usr/include/c++/13/bits/specfun.h" 2 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 203 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: assoc_laguerref(unsigned int __n, unsigned int __m, float __x) 15726: { return __detail::__assoc_laguerre(__n, __m, __x); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: assoc_laguerrel(unsigned int __n, unsigned int __m, long double __x) 15726: { return __detail::__assoc_laguerre(__n, __m, __x); } 15726: # 248 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote<_Tp>::__type 15726: assoc_laguerre(unsigned int __n, unsigned int __m, _Tp __x) 15726: { 15726: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 15726: return __detail::__assoc_laguerre<__type>(__n, __m, __x); 15726: } 15726: # 264 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: assoc_legendref(unsigned int __l, unsigned int __m, float __x) 15726: { return __detail::__assoc_legendre_p(__l, __m, __x); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: assoc_legendrel(unsigned int __l, unsigned int __m, long double __x) 15726: { return __detail::__assoc_legendre_p(__l, __m, __x); } 15726: # 294 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote<_Tp>::__type 15726: assoc_legendre(unsigned int __l, unsigned int __m, _Tp __x) 15726: { 15726: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 15726: return __detail::__assoc_legendre_p<__type>(__l, __m, __x); 15726: } 15726: # 309 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: betaf(float __a, float __b) 15726: { return __detail::__beta(__a, __b); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: betal(long double __a, long double __b) 15726: { return __detail::__beta(__a, __b); } 15726: # 339 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote_2<_Tpa, _Tpb>::__type 15726: beta(_Tpa __a, _Tpb __b) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tpa, _Tpb>::__type __type; 15726: return __detail::__beta<__type>(__a, __b); 15726: } 15726: # 355 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: comp_ellint_1f(float __k) 15726: { return __detail::__comp_ellint_1(__k); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: comp_ellint_1l(long double __k) 15726: { return __detail::__comp_ellint_1(__k); } 15726: # 387 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote<_Tp>::__type 15726: comp_ellint_1(_Tp __k) 15726: { 15726: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 15726: return __detail::__comp_ellint_1<__type>(__k); 15726: } 15726: # 403 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: comp_ellint_2f(float __k) 15726: { return __detail::__comp_ellint_2(__k); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: comp_ellint_2l(long double __k) 15726: { return __detail::__comp_ellint_2(__k); } 15726: # 434 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote<_Tp>::__type 15726: comp_ellint_2(_Tp __k) 15726: { 15726: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 15726: return __detail::__comp_ellint_2<__type>(__k); 15726: } 15726: # 450 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: comp_ellint_3f(float __k, float __nu) 15726: { return __detail::__comp_ellint_3(__k, __nu); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: comp_ellint_3l(long double __k, long double __nu) 15726: { return __detail::__comp_ellint_3(__k, __nu); } 15726: # 485 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote_2<_Tp, _Tpn>::__type 15726: comp_ellint_3(_Tp __k, _Tpn __nu) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Tpn>::__type __type; 15726: return __detail::__comp_ellint_3<__type>(__k, __nu); 15726: } 15726: # 501 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: cyl_bessel_if(float __nu, float __x) 15726: { return __detail::__cyl_bessel_i(__nu, __x); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: cyl_bessel_il(long double __nu, long double __x) 15726: { return __detail::__cyl_bessel_i(__nu, __x); } 15726: # 531 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type 15726: cyl_bessel_i(_Tpnu __nu, _Tp __x) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type; 15726: return __detail::__cyl_bessel_i<__type>(__nu, __x); 15726: } 15726: # 547 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: cyl_bessel_jf(float __nu, float __x) 15726: { return __detail::__cyl_bessel_j(__nu, __x); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: cyl_bessel_jl(long double __nu, long double __x) 15726: { return __detail::__cyl_bessel_j(__nu, __x); } 15726: # 577 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type 15726: cyl_bessel_j(_Tpnu __nu, _Tp __x) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type; 15726: return __detail::__cyl_bessel_j<__type>(__nu, __x); 15726: } 15726: # 593 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: cyl_bessel_kf(float __nu, float __x) 15726: { return __detail::__cyl_bessel_k(__nu, __x); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: cyl_bessel_kl(long double __nu, long double __x) 15726: { return __detail::__cyl_bessel_k(__nu, __x); } 15726: # 629 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type 15726: cyl_bessel_k(_Tpnu __nu, _Tp __x) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type; 15726: return __detail::__cyl_bessel_k<__type>(__nu, __x); 15726: } 15726: # 645 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: cyl_neumannf(float __nu, float __x) 15726: { return __detail::__cyl_neumann_n(__nu, __x); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: cyl_neumannl(long double __nu, long double __x) 15726: { return __detail::__cyl_neumann_n(__nu, __x); } 15726: # 677 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type 15726: cyl_neumann(_Tpnu __nu, _Tp __x) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type; 15726: return __detail::__cyl_neumann_n<__type>(__nu, __x); 15726: } 15726: # 693 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: ellint_1f(float __k, float __phi) 15726: { return __detail::__ellint_1(__k, __phi); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: ellint_1l(long double __k, long double __phi) 15726: { return __detail::__ellint_1(__k, __phi); } 15726: # 725 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type 15726: ellint_1(_Tp __k, _Tpp __phi) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type __type; 15726: return __detail::__ellint_1<__type>(__k, __phi); 15726: } 15726: # 741 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: ellint_2f(float __k, float __phi) 15726: { return __detail::__ellint_2(__k, __phi); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: ellint_2l(long double __k, long double __phi) 15726: { return __detail::__ellint_2(__k, __phi); } 15726: # 773 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type 15726: ellint_2(_Tp __k, _Tpp __phi) 15726: { 15726: typedef typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type __type; 15726: return __detail::__ellint_2<__type>(__k, __phi); 15726: } 15726: # 789 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: ellint_3f(float __k, float __nu, float __phi) 15726: { return __detail::__ellint_3(__k, __nu, __phi); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: ellint_3l(long double __k, long double __nu, long double __phi) 15726: { return __detail::__ellint_3(__k, __nu, __phi); } 15726: # 826 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote_3<_Tp, _Tpn, _Tpp>::__type 15726: ellint_3(_Tp __k, _Tpn __nu, _Tpp __phi) 15726: { 15726: typedef typename __gnu_cxx::__promote_3<_Tp, _Tpn, _Tpp>::__type __type; 15726: return __detail::__ellint_3<__type>(__k, __nu, __phi); 15726: } 15726: # 841 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: expintf(float __x) 15726: { return __detail::__expint(__x); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: expintl(long double __x) 15726: { return __detail::__expint(__x); } 15726: # 866 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote<_Tp>::__type 15726: expint(_Tp __x) 15726: { 15726: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 15726: return __detail::__expint<__type>(__x); 15726: } 15726: # 882 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: hermitef(unsigned int __n, float __x) 15726: { return __detail::__poly_hermite(__n, __x); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: hermitel(unsigned int __n, long double __x) 15726: { return __detail::__poly_hermite(__n, __x); } 15726: # 914 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote<_Tp>::__type 15726: hermite(unsigned int __n, _Tp __x) 15726: { 15726: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 15726: return __detail::__poly_hermite<__type>(__n, __x); 15726: } 15726: # 930 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: laguerref(unsigned int __n, float __x) 15726: { return __detail::__laguerre(__n, __x); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: laguerrel(unsigned int __n, long double __x) 15726: { return __detail::__laguerre(__n, __x); } 15726: # 958 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote<_Tp>::__type 15726: laguerre(unsigned int __n, _Tp __x) 15726: { 15726: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 15726: return __detail::__laguerre<__type>(__n, __x); 15726: } 15726: # 974 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: legendref(unsigned int __l, float __x) 15726: { return __detail::__poly_legendre_p(__l, __x); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: legendrel(unsigned int __l, long double __x) 15726: { return __detail::__poly_legendre_p(__l, __x); } 15726: # 1003 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote<_Tp>::__type 15726: legendre(unsigned int __l, _Tp __x) 15726: { 15726: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 15726: return __detail::__poly_legendre_p<__type>(__l, __x); 15726: } 15726: # 1019 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: riemann_zetaf(float __s) 15726: { return __detail::__riemann_zeta(__s); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: riemann_zetal(long double __s) 15726: { return __detail::__riemann_zeta(__s); } 15726: # 1054 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote<_Tp>::__type 15726: riemann_zeta(_Tp __s) 15726: { 15726: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 15726: return __detail::__riemann_zeta<__type>(__s); 15726: } 15726: # 1070 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: sph_besself(unsigned int __n, float __x) 15726: { return __detail::__sph_bessel(__n, __x); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: sph_bessell(unsigned int __n, long double __x) 15726: { return __detail::__sph_bessel(__n, __x); } 15726: # 1098 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote<_Tp>::__type 15726: sph_bessel(unsigned int __n, _Tp __x) 15726: { 15726: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 15726: return __detail::__sph_bessel<__type>(__n, __x); 15726: } 15726: # 1114 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: sph_legendref(unsigned int __l, unsigned int __m, float __theta) 15726: { return __detail::__sph_legendre(__l, __m, __theta); } 15726: # 1125 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline long double 15726: sph_legendrel(unsigned int __l, unsigned int __m, long double __theta) 15726: { return __detail::__sph_legendre(__l, __m, __theta); } 15726: # 1145 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote<_Tp>::__type 15726: sph_legendre(unsigned int __l, unsigned int __m, _Tp __theta) 15726: { 15726: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 15726: return __detail::__sph_legendre<__type>(__l, __m, __theta); 15726: } 15726: # 1161 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: sph_neumannf(unsigned int __n, float __x) 15726: { return __detail::__sph_neumann(__n, __x); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline long double 15726: sph_neumannl(unsigned int __n, long double __x) 15726: { return __detail::__sph_neumann(__n, __x); } 15726: # 1189 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote<_Tp>::__type 15726: sph_neumann(unsigned int __n, _Tp __x) 15726: { 15726: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 15726: return __detail::__sph_neumann<__type>(__n, __x); 15726: } 15726: 15726: 15726: 15726: 15726: } 15726: 15726: 15726: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 1216 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: airy_aif(float __x) 15726: { 15726: float __Ai, __Bi, __Aip, __Bip; 15726: std::__detail::__airy(__x, __Ai, __Bi, __Aip, __Bip); 15726: return __Ai; 15726: } 15726: 15726: 15726: 15726: 15726: inline long double 15726: airy_ail(long double __x) 15726: { 15726: long double __Ai, __Bi, __Aip, __Bip; 15726: std::__detail::__airy(__x, __Ai, __Bi, __Aip, __Bip); 15726: return __Ai; 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: inline typename __gnu_cxx::__promote<_Tp>::__type 15726: airy_ai(_Tp __x) 15726: { 15726: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 15726: __type __Ai, __Bi, __Aip, __Bip; 15726: std::__detail::__airy<__type>(__x, __Ai, __Bi, __Aip, __Bip); 15726: return __Ai; 15726: } 15726: 15726: 15726: 15726: 15726: inline float 15726: airy_bif(float __x) 15726: { 15726: float __Ai, __Bi, __Aip, __Bip; 15726: std::__detail::__airy(__x, __Ai, __Bi, __Aip, __Bip); 15726: return __Bi; 15726: } 15726: 15726: 15726: 15726: 15726: inline long double 15726: airy_bil(long double __x) 15726: { 15726: long double __Ai, __Bi, __Aip, __Bip; 15726: std::__detail::__airy(__x, __Ai, __Bi, __Aip, __Bip); 15726: return __Bi; 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: inline typename __gnu_cxx::__promote<_Tp>::__type 15726: airy_bi(_Tp __x) 15726: { 15726: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 15726: __type __Ai, __Bi, __Aip, __Bip; 15726: std::__detail::__airy<__type>(__x, __Ai, __Bi, __Aip, __Bip); 15726: return __Bi; 15726: } 15726: # 1292 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: conf_hypergf(float __a, float __c, float __x) 15726: { return std::__detail::__conf_hyperg(__a, __c, __x); } 15726: # 1303 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline long double 15726: conf_hypergl(long double __a, long double __c, long double __x) 15726: { return std::__detail::__conf_hyperg(__a, __c, __x); } 15726: # 1323 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote_3<_Tpa, _Tpc, _Tp>::__type 15726: conf_hyperg(_Tpa __a, _Tpc __c, _Tp __x) 15726: { 15726: typedef typename __gnu_cxx::__promote_3<_Tpa, _Tpc, _Tp>::__type __type; 15726: return std::__detail::__conf_hyperg<__type>(__a, __c, __x); 15726: } 15726: # 1340 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline float 15726: hypergf(float __a, float __b, float __c, float __x) 15726: { return std::__detail::__hyperg(__a, __b, __c, __x); } 15726: # 1351 "/usr/include/c++/13/bits/specfun.h" 3 15726: inline long double 15726: hypergl(long double __a, long double __b, long double __c, long double __x) 15726: { return std::__detail::__hyperg(__a, __b, __c, __x); } 15726: # 1372 "/usr/include/c++/13/bits/specfun.h" 3 15726: template 15726: inline typename __gnu_cxx::__promote_4<_Tpa, _Tpb, _Tpc, _Tp>::__type 15726: hyperg(_Tpa __a, _Tpb __b, _Tpc __c, _Tp __x) 15726: { 15726: typedef typename __gnu_cxx::__promote_4<_Tpa, _Tpb, _Tpc, _Tp> 15726: ::__type __type; 15726: return std::__detail::__hyperg<__type>(__a, __b, __c, __x); 15726: } 15726: 15726: 15726: 15726: } 15726: # 3700 "/usr/include/c++/13/cmath" 2 3 15726: 15726: 15726: } 15726: # 41 "/usr/include/c++/13/random" 2 3 15726: # 1 "/usr/include/c++/13/cstdlib" 1 3 15726: # 39 "/usr/include/c++/13/cstdlib" 3 15726: 15726: # 40 "/usr/include/c++/13/cstdlib" 3 15726: # 42 "/usr/include/c++/13/random" 2 3 15726: # 51 "/usr/include/c++/13/random" 3 15726: # 1 "/usr/include/c++/13/bits/random.h" 1 3 15726: # 37 "/usr/include/c++/13/bits/random.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 58 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: _RealType 15726: generate_canonical(_UniformRandomNumberGenerator& __g); 15726: 15726: 15726: 15726: namespace __detail 15726: { 15726: template 15726: (std::numeric_limits<_UIntType>::digits)> 15726: struct _Shift 15726: { static constexpr _UIntType __value = 0; }; 15726: 15726: template 15726: struct _Shift<_UIntType, __w, true> 15726: { static constexpr _UIntType __value = _UIntType(1) << __w; }; 15726: 15726: template 15726: struct _Select_uint_least_t 15726: { 15726: static_assert(__which < 0, 15726: "sorry, would be too much trouble for a slow result"); 15726: }; 15726: 15726: template 15726: struct _Select_uint_least_t<__s, 4> 15726: { using type = unsigned int; }; 15726: 15726: template 15726: struct _Select_uint_least_t<__s, 3> 15726: { using type = unsigned long; }; 15726: 15726: template 15726: struct _Select_uint_least_t<__s, 2> 15726: { using type = unsigned long long; }; 15726: # 108 "/usr/include/c++/13/bits/random.h" 3 15726: template= __m - 1), 15726: bool __schrage_ok = __m % __a < __m / __a> 15726: struct _Mod 15726: { 15726: static _Tp 15726: __calc(_Tp __x) 15726: { 15726: using _Tp2 15726: = typename _Select_uint_least_t::type; 15726: return static_cast<_Tp>((_Tp2(__a) * __x + __c) % __m); 15726: } 15726: }; 15726: 15726: 15726: template 15726: struct _Mod<_Tp, __m, __a, __c, false, true> 15726: { 15726: static _Tp 15726: __calc(_Tp __x); 15726: }; 15726: 15726: 15726: 15726: 15726: template 15726: struct _Mod<_Tp, __m, __a, __c, true, __s> 15726: { 15726: static _Tp 15726: __calc(_Tp __x) 15726: { 15726: _Tp __res = __a * __x + __c; 15726: if (__m) 15726: __res %= __m; 15726: return __res; 15726: } 15726: }; 15726: 15726: template 15726: inline _Tp 15726: __mod(_Tp __x) 15726: { 15726: if constexpr (__a == 0) 15726: return __c; 15726: else 15726: { 15726: 15726: constexpr _Tp __a1 = __a ? __a : 1; 15726: return _Mod<_Tp, __m, __a1, __c>::__calc(__x); 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Adaptor 15726: { 15726: static_assert(std::is_floating_point<_DInputType>::value, 15726: "template argument must be a floating point type"); 15726: 15726: public: 15726: _Adaptor(_Engine& __g) 15726: : _M_g(__g) { } 15726: 15726: _DInputType 15726: min() const 15726: { return _DInputType(0); } 15726: 15726: _DInputType 15726: max() const 15726: { return _DInputType(1); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: _DInputType 15726: operator()() 15726: { 15726: return std::generate_canonical<_DInputType, 15726: std::numeric_limits<_DInputType>::digits, 15726: _Engine>(_M_g); 15726: } 15726: 15726: private: 15726: _Engine& _M_g; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: using __seed_seq_generate_t = decltype( 15726: std::declval<_Sseq&>().generate(std::declval(), 15726: std::declval())); 15726: 15726: template> 15726: using _If_seed_seq_for = _Require< 15726: __not_, _Engine>>, 15726: is_unsigned, 15726: __not_> 15726: >; 15726: 15726: } 15726: # 263 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class linear_congruential_engine 15726: { 15726: static_assert(std::is_unsigned<_UIntType>::value, 15726: "result_type must be an unsigned integral type"); 15726: static_assert(__m == 0u || (__a < __m && __c < __m), 15726: "template argument substituting __m out of bounds"); 15726: 15726: template 15726: using _If_seed_seq 15726: = __detail::_If_seed_seq_for<_Sseq, linear_congruential_engine, 15726: _UIntType>; 15726: 15726: public: 15726: 15726: typedef _UIntType result_type; 15726: 15726: 15726: static constexpr result_type multiplier = __a; 15726: 15726: static constexpr result_type increment = __c; 15726: 15726: static constexpr result_type modulus = __m; 15726: static constexpr result_type default_seed = 1u; 15726: 15726: 15726: 15726: 15726: 15726: linear_congruential_engine() : linear_congruential_engine(default_seed) 15726: { } 15726: # 302 "/usr/include/c++/13/bits/random.h" 3 15726: explicit 15726: linear_congruential_engine(result_type __s) 15726: { seed(__s); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template> 15726: explicit 15726: linear_congruential_engine(_Sseq& __q) 15726: { seed(__q); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: seed(result_type __s = default_seed); 15726: # 333 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: _If_seed_seq<_Sseq> 15726: seed(_Sseq& __q); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: static constexpr result_type 15726: min() 15726: { return __c == 0u ? 1u : 0u; } 15726: 15726: 15726: 15726: 15726: static constexpr result_type 15726: max() 15726: { return __m - 1u; } 15726: 15726: 15726: 15726: 15726: void 15726: discard(unsigned long long __z) 15726: { 15726: for (; __z != 0ULL; --__z) 15726: (*this)(); 15726: } 15726: 15726: 15726: 15726: 15726: result_type 15726: operator()() 15726: { 15726: _M_x = __detail::__mod<_UIntType, __m, __a, __c>(_M_x); 15726: return _M_x; 15726: } 15726: # 385 "/usr/include/c++/13/bits/random.h" 3 15726: friend bool 15726: operator==(const linear_congruential_engine& __lhs, 15726: const linear_congruential_engine& __rhs) 15726: { return __lhs._M_x == __rhs._M_x; } 15726: # 398 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::linear_congruential_engine<_UIntType1, 15726: __a1, __c1, __m1>& __lcr); 15726: # 418 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::linear_congruential_engine<_UIntType1, __a1, 15726: __c1, __m1>& __lcr); 15726: 15726: private: 15726: _UIntType _M_x; 15726: }; 15726: # 441 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: inline bool 15726: operator!=(const std::linear_congruential_engine<_UIntType, __a, 15726: __c, __m>& __lhs, 15726: const std::linear_congruential_engine<_UIntType, __a, 15726: __c, __m>& __rhs) 15726: { return !(__lhs == __rhs); } 15726: # 481 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class mersenne_twister_engine 15726: { 15726: static_assert(std::is_unsigned<_UIntType>::value, 15726: "result_type must be an unsigned integral type"); 15726: static_assert(1u <= __m && __m <= __n, 15726: "template argument substituting __m out of bounds"); 15726: static_assert(__r <= __w, "template argument substituting " 15726: "__r out of bound"); 15726: static_assert(__u <= __w, "template argument substituting " 15726: "__u out of bound"); 15726: static_assert(__s <= __w, "template argument substituting " 15726: "__s out of bound"); 15726: static_assert(__t <= __w, "template argument substituting " 15726: "__t out of bound"); 15726: static_assert(__l <= __w, "template argument substituting " 15726: "__l out of bound"); 15726: static_assert(__w <= std::numeric_limits<_UIntType>::digits, 15726: "template argument substituting __w out of bound"); 15726: static_assert(__a <= (__detail::_Shift<_UIntType, __w>::__value - 1), 15726: "template argument substituting __a out of bound"); 15726: static_assert(__b <= (__detail::_Shift<_UIntType, __w>::__value - 1), 15726: "template argument substituting __b out of bound"); 15726: static_assert(__c <= (__detail::_Shift<_UIntType, __w>::__value - 1), 15726: "template argument substituting __c out of bound"); 15726: static_assert(__d <= (__detail::_Shift<_UIntType, __w>::__value - 1), 15726: "template argument substituting __d out of bound"); 15726: static_assert(__f <= (__detail::_Shift<_UIntType, __w>::__value - 1), 15726: "template argument substituting __f out of bound"); 15726: 15726: template 15726: using _If_seed_seq 15726: = __detail::_If_seed_seq_for<_Sseq, mersenne_twister_engine, 15726: _UIntType>; 15726: 15726: public: 15726: 15726: typedef _UIntType result_type; 15726: 15726: 15726: static constexpr size_t word_size = __w; 15726: static constexpr size_t state_size = __n; 15726: static constexpr size_t shift_size = __m; 15726: static constexpr size_t mask_bits = __r; 15726: static constexpr result_type xor_mask = __a; 15726: static constexpr size_t tempering_u = __u; 15726: static constexpr result_type tempering_d = __d; 15726: static constexpr size_t tempering_s = __s; 15726: static constexpr result_type tempering_b = __b; 15726: static constexpr size_t tempering_t = __t; 15726: static constexpr result_type tempering_c = __c; 15726: static constexpr size_t tempering_l = __l; 15726: static constexpr result_type initialization_multiplier = __f; 15726: static constexpr result_type default_seed = 5489u; 15726: 15726: 15726: 15726: mersenne_twister_engine() : mersenne_twister_engine(default_seed) { } 15726: 15726: explicit 15726: mersenne_twister_engine(result_type __sd) 15726: { seed(__sd); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template> 15726: explicit 15726: mersenne_twister_engine(_Sseq& __q) 15726: { seed(__q); } 15726: 15726: void 15726: seed(result_type __sd = default_seed); 15726: 15726: template 15726: _If_seed_seq<_Sseq> 15726: seed(_Sseq& __q); 15726: 15726: 15726: 15726: 15726: static constexpr result_type 15726: min() 15726: { return 0; } 15726: 15726: 15726: 15726: 15726: static constexpr result_type 15726: max() 15726: { return __detail::_Shift<_UIntType, __w>::__value - 1; } 15726: 15726: 15726: 15726: 15726: void 15726: discard(unsigned long long __z); 15726: 15726: result_type 15726: operator()(); 15726: # 601 "/usr/include/c++/13/bits/random.h" 3 15726: friend bool 15726: operator==(const mersenne_twister_engine& __lhs, 15726: const mersenne_twister_engine& __rhs) 15726: { return (std::equal(__lhs._M_x, __lhs._M_x + state_size, __rhs._M_x) 15726: && __lhs._M_p == __rhs._M_p); } 15726: # 619 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::mersenne_twister_engine<_UIntType1, __w1, __n1, 15726: __m1, __r1, __a1, __u1, __d1, __s1, __b1, __t1, __c1, 15726: __l1, __f1>& __x); 15726: # 645 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::mersenne_twister_engine<_UIntType1, __w1, __n1, __m1, 15726: __r1, __a1, __u1, __d1, __s1, __b1, __t1, __c1, 15726: __l1, __f1>& __x); 15726: 15726: private: 15726: void _M_gen_rand(); 15726: 15726: _UIntType _M_x[state_size]; 15726: size_t _M_p; 15726: }; 15726: # 679 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: inline bool 15726: operator!=(const std::mersenne_twister_engine<_UIntType, __w, __n, __m, 15726: __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>& __lhs, 15726: const std::mersenne_twister_engine<_UIntType, __w, __n, __m, 15726: __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>& __rhs) 15726: { return !(__lhs == __rhs); } 15726: # 710 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class subtract_with_carry_engine 15726: { 15726: static_assert(std::is_unsigned<_UIntType>::value, 15726: "result_type must be an unsigned integral type"); 15726: static_assert(0u < __s && __s < __r, 15726: "0 < s < r"); 15726: static_assert(0u < __w && __w <= std::numeric_limits<_UIntType>::digits, 15726: "template argument substituting __w out of bounds"); 15726: 15726: template 15726: using _If_seed_seq 15726: = __detail::_If_seed_seq_for<_Sseq, subtract_with_carry_engine, 15726: _UIntType>; 15726: 15726: public: 15726: 15726: typedef _UIntType result_type; 15726: 15726: 15726: static constexpr size_t word_size = __w; 15726: static constexpr size_t short_lag = __s; 15726: static constexpr size_t long_lag = __r; 15726: static constexpr uint_least32_t default_seed = 19780503u; 15726: 15726: subtract_with_carry_engine() : subtract_with_carry_engine(0u) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: subtract_with_carry_engine(result_type __sd) 15726: { seed(__sd); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template> 15726: explicit 15726: subtract_with_carry_engine(_Sseq& __q) 15726: { seed(__q); } 15726: # 769 "/usr/include/c++/13/bits/random.h" 3 15726: void 15726: seed(result_type __sd = 0u); 15726: 15726: 15726: 15726: 15726: 15726: template 15726: _If_seed_seq<_Sseq> 15726: seed(_Sseq& __q); 15726: 15726: 15726: 15726: 15726: 15726: static constexpr result_type 15726: min() 15726: { return 0; } 15726: 15726: 15726: 15726: 15726: 15726: static constexpr result_type 15726: max() 15726: { return __detail::_Shift<_UIntType, __w>::__value - 1; } 15726: 15726: 15726: 15726: 15726: void 15726: discard(unsigned long long __z) 15726: { 15726: for (; __z != 0ULL; --__z) 15726: (*this)(); 15726: } 15726: 15726: 15726: 15726: 15726: result_type 15726: operator()(); 15726: # 824 "/usr/include/c++/13/bits/random.h" 3 15726: friend bool 15726: operator==(const subtract_with_carry_engine& __lhs, 15726: const subtract_with_carry_engine& __rhs) 15726: { return (std::equal(__lhs._M_x, __lhs._M_x + long_lag, __rhs._M_x) 15726: && __lhs._M_carry == __rhs._M_carry 15726: && __lhs._M_p == __rhs._M_p); } 15726: # 843 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::subtract_with_carry_engine<_UIntType1, __w1, 15726: __s1, __r1>& __x); 15726: # 862 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::subtract_with_carry_engine<_UIntType1, __w1, 15726: __s1, __r1>& __x); 15726: 15726: private: 15726: 15726: _UIntType _M_x[long_lag]; 15726: _UIntType _M_carry; 15726: size_t _M_p; 15726: }; 15726: # 889 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: inline bool 15726: operator!=(const std::subtract_with_carry_engine<_UIntType, __w, 15726: __s, __r>& __lhs, 15726: const std::subtract_with_carry_engine<_UIntType, __w, 15726: __s, __r>& __rhs) 15726: { return !(__lhs == __rhs); } 15726: # 907 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class discard_block_engine 15726: { 15726: static_assert(1 <= __r && __r <= __p, 15726: "template argument substituting __r out of bounds"); 15726: 15726: public: 15726: 15726: typedef typename _RandomNumberEngine::result_type result_type; 15726: 15726: template 15726: using _If_seed_seq 15726: = __detail::_If_seed_seq_for<_Sseq, discard_block_engine, 15726: result_type>; 15726: 15726: 15726: static constexpr size_t block_size = __p; 15726: static constexpr size_t used_block = __r; 15726: 15726: 15726: 15726: 15726: 15726: 15726: discard_block_engine() 15726: : _M_b(), _M_n(0) { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: discard_block_engine(const _RandomNumberEngine& __rng) 15726: : _M_b(__rng), _M_n(0) { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: discard_block_engine(_RandomNumberEngine&& __rng) 15726: : _M_b(std::move(__rng)), _M_n(0) { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: discard_block_engine(result_type __s) 15726: : _M_b(__s), _M_n(0) { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template> 15726: explicit 15726: discard_block_engine(_Sseq& __q) 15726: : _M_b(__q), _M_n(0) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: seed() 15726: { 15726: _M_b.seed(); 15726: _M_n = 0; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: seed(result_type __s) 15726: { 15726: _M_b.seed(__s); 15726: _M_n = 0; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: _If_seed_seq<_Sseq> 15726: seed(_Sseq& __q) 15726: { 15726: _M_b.seed(__q); 15726: _M_n = 0; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: const _RandomNumberEngine& 15726: base() const noexcept 15726: { return _M_b; } 15726: 15726: 15726: 15726: 15726: static constexpr result_type 15726: min() 15726: { return _RandomNumberEngine::min(); } 15726: 15726: 15726: 15726: 15726: static constexpr result_type 15726: max() 15726: { return _RandomNumberEngine::max(); } 15726: 15726: 15726: 15726: 15726: void 15726: discard(unsigned long long __z) 15726: { 15726: for (; __z != 0ULL; --__z) 15726: (*this)(); 15726: } 15726: 15726: 15726: 15726: 15726: result_type 15726: operator()(); 15726: # 1059 "/usr/include/c++/13/bits/random.h" 3 15726: friend bool 15726: operator==(const discard_block_engine& __lhs, 15726: const discard_block_engine& __rhs) 15726: { return __lhs._M_b == __rhs._M_b && __lhs._M_n == __rhs._M_n; } 15726: # 1075 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::discard_block_engine<_RandomNumberEngine1, 15726: __p1, __r1>& __x); 15726: # 1093 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::discard_block_engine<_RandomNumberEngine1, 15726: __p1, __r1>& __x); 15726: 15726: private: 15726: _RandomNumberEngine _M_b; 15726: size_t _M_n; 15726: }; 15726: # 1117 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: inline bool 15726: operator!=(const std::discard_block_engine<_RandomNumberEngine, __p, 15726: __r>& __lhs, 15726: const std::discard_block_engine<_RandomNumberEngine, __p, 15726: __r>& __rhs) 15726: { return !(__lhs == __rhs); } 15726: # 1133 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class independent_bits_engine 15726: { 15726: static_assert(std::is_unsigned<_UIntType>::value, 15726: "result_type must be an unsigned integral type"); 15726: static_assert(0u < __w && __w <= std::numeric_limits<_UIntType>::digits, 15726: "template argument substituting __w out of bounds"); 15726: 15726: template 15726: using _If_seed_seq 15726: = __detail::_If_seed_seq_for<_Sseq, independent_bits_engine, 15726: _UIntType>; 15726: 15726: public: 15726: 15726: typedef _UIntType result_type; 15726: 15726: 15726: 15726: 15726: 15726: 15726: independent_bits_engine() 15726: : _M_b() { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: independent_bits_engine(const _RandomNumberEngine& __rng) 15726: : _M_b(__rng) { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: independent_bits_engine(_RandomNumberEngine&& __rng) 15726: : _M_b(std::move(__rng)) { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: independent_bits_engine(result_type __s) 15726: : _M_b(__s) { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template> 15726: explicit 15726: independent_bits_engine(_Sseq& __q) 15726: : _M_b(__q) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: seed() 15726: { _M_b.seed(); } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: seed(result_type __s) 15726: { _M_b.seed(__s); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: _If_seed_seq<_Sseq> 15726: seed(_Sseq& __q) 15726: { _M_b.seed(__q); } 15726: 15726: 15726: 15726: 15726: 15726: const _RandomNumberEngine& 15726: base() const noexcept 15726: { return _M_b; } 15726: 15726: 15726: 15726: 15726: static constexpr result_type 15726: min() 15726: { return 0U; } 15726: 15726: 15726: 15726: 15726: static constexpr result_type 15726: max() 15726: { return __detail::_Shift<_UIntType, __w>::__value - 1; } 15726: 15726: 15726: 15726: 15726: void 15726: discard(unsigned long long __z) 15726: { 15726: for (; __z != 0ULL; --__z) 15726: (*this)(); 15726: } 15726: 15726: 15726: 15726: 15726: result_type 15726: operator()(); 15726: # 1275 "/usr/include/c++/13/bits/random.h" 3 15726: friend bool 15726: operator==(const independent_bits_engine& __lhs, 15726: const independent_bits_engine& __rhs) 15726: { return __lhs._M_b == __rhs._M_b; } 15726: # 1292 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::independent_bits_engine<_RandomNumberEngine, 15726: __w, _UIntType>& __x) 15726: { 15726: __is >> __x._M_b; 15726: return __is; 15726: } 15726: 15726: private: 15726: _RandomNumberEngine _M_b; 15726: }; 15726: # 1319 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: inline bool 15726: operator!=(const std::independent_bits_engine<_RandomNumberEngine, __w, 15726: _UIntType>& __lhs, 15726: const std::independent_bits_engine<_RandomNumberEngine, __w, 15726: _UIntType>& __rhs) 15726: { return !(__lhs == __rhs); } 15726: # 1338 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::independent_bits_engine<_RandomNumberEngine, 15726: __w, _UIntType>& __x) 15726: { 15726: __os << __x.base(); 15726: return __os; 15726: } 15726: # 1360 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class shuffle_order_engine 15726: { 15726: static_assert(1u <= __k, "template argument substituting " 15726: "__k out of bound"); 15726: 15726: public: 15726: 15726: typedef typename _RandomNumberEngine::result_type result_type; 15726: 15726: template 15726: using _If_seed_seq 15726: = __detail::_If_seed_seq_for<_Sseq, shuffle_order_engine, 15726: result_type>; 15726: 15726: static constexpr size_t table_size = __k; 15726: 15726: 15726: 15726: 15726: 15726: 15726: shuffle_order_engine() 15726: : _M_b() 15726: { _M_initialize(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: shuffle_order_engine(const _RandomNumberEngine& __rng) 15726: : _M_b(__rng) 15726: { _M_initialize(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: shuffle_order_engine(_RandomNumberEngine&& __rng) 15726: : _M_b(std::move(__rng)) 15726: { _M_initialize(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: shuffle_order_engine(result_type __s) 15726: : _M_b(__s) 15726: { _M_initialize(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template> 15726: explicit 15726: shuffle_order_engine(_Sseq& __q) 15726: : _M_b(__q) 15726: { _M_initialize(); } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: seed() 15726: { 15726: _M_b.seed(); 15726: _M_initialize(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: seed(result_type __s) 15726: { 15726: _M_b.seed(__s); 15726: _M_initialize(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: _If_seed_seq<_Sseq> 15726: seed(_Sseq& __q) 15726: { 15726: _M_b.seed(__q); 15726: _M_initialize(); 15726: } 15726: 15726: 15726: 15726: 15726: const _RandomNumberEngine& 15726: base() const noexcept 15726: { return _M_b; } 15726: 15726: 15726: 15726: 15726: static constexpr result_type 15726: min() 15726: { return _RandomNumberEngine::min(); } 15726: 15726: 15726: 15726: 15726: static constexpr result_type 15726: max() 15726: { return _RandomNumberEngine::max(); } 15726: 15726: 15726: 15726: 15726: void 15726: discard(unsigned long long __z) 15726: { 15726: for (; __z != 0ULL; --__z) 15726: (*this)(); 15726: } 15726: 15726: 15726: 15726: 15726: result_type 15726: operator()(); 15726: # 1513 "/usr/include/c++/13/bits/random.h" 3 15726: friend bool 15726: operator==(const shuffle_order_engine& __lhs, 15726: const shuffle_order_engine& __rhs) 15726: { return (__lhs._M_b == __rhs._M_b 15726: && std::equal(__lhs._M_v, __lhs._M_v + __k, __rhs._M_v) 15726: && __lhs._M_y == __rhs._M_y); } 15726: # 1531 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::shuffle_order_engine<_RandomNumberEngine1, 15726: __k1>& __x); 15726: # 1549 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::shuffle_order_engine<_RandomNumberEngine1, __k1>& __x); 15726: 15726: private: 15726: void _M_initialize() 15726: { 15726: for (size_t __i = 0; __i < __k; ++__i) 15726: _M_v[__i] = _M_b(); 15726: _M_y = _M_b(); 15726: } 15726: 15726: _RandomNumberEngine _M_b; 15726: result_type _M_v[__k]; 15726: result_type _M_y; 15726: }; 15726: # 1580 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: inline bool 15726: operator!=(const std::shuffle_order_engine<_RandomNumberEngine, 15726: __k>& __lhs, 15726: const std::shuffle_order_engine<_RandomNumberEngine, 15726: __k>& __rhs) 15726: { return !(__lhs == __rhs); } 15726: 15726: 15726: 15726: 15726: 15726: typedef linear_congruential_engine 15726: minstd_rand0; 15726: 15726: 15726: 15726: 15726: typedef linear_congruential_engine 15726: minstd_rand; 15726: # 1609 "/usr/include/c++/13/bits/random.h" 3 15726: typedef mersenne_twister_engine< 15726: uint_fast32_t, 15726: 32, 624, 397, 31, 15726: 0x9908b0dfUL, 11, 15726: 0xffffffffUL, 7, 15726: 0x9d2c5680UL, 15, 15726: 0xefc60000UL, 18, 1812433253UL> mt19937; 15726: 15726: 15726: 15726: 15726: typedef mersenne_twister_engine< 15726: uint_fast64_t, 15726: 64, 312, 156, 31, 15726: 0xb5026f5aa96619e9ULL, 29, 15726: 0x5555555555555555ULL, 17, 15726: 0x71d67fffeda60000ULL, 37, 15726: 0xfff7eee000000000ULL, 43, 15726: 6364136223846793005ULL> mt19937_64; 15726: 15726: typedef subtract_with_carry_engine 15726: ranlux24_base; 15726: 15726: typedef subtract_with_carry_engine 15726: ranlux48_base; 15726: 15726: typedef discard_block_engine ranlux24; 15726: 15726: typedef discard_block_engine ranlux48; 15726: 15726: typedef shuffle_order_engine knuth_b; 15726: 15726: typedef minstd_rand0 default_random_engine; 15726: # 1650 "/usr/include/c++/13/bits/random.h" 3 15726: class random_device 15726: { 15726: public: 15726: 15726: typedef unsigned int result_type; 15726: 15726: 15726: 15726: random_device() { _M_init("default"); } 15726: 15726: explicit 15726: random_device(const std::string& __token) { _M_init(__token); } 15726: 15726: ~random_device() 15726: { _M_fini(); } 15726: 15726: static constexpr result_type 15726: min() 15726: { return std::numeric_limits::min(); } 15726: 15726: static constexpr result_type 15726: max() 15726: { return std::numeric_limits::max(); } 15726: 15726: double 15726: entropy() const noexcept 15726: { return this->_M_getentropy(); } 15726: 15726: result_type 15726: operator()() 15726: { return this->_M_getval(); } 15726: 15726: 15726: random_device(const random_device&) = delete; 15726: void operator=(const random_device&) = delete; 15726: 15726: private: 15726: 15726: void _M_init(const std::string& __token); 15726: void _M_init_pretr1(const std::string& __token); 15726: void _M_fini(); 15726: 15726: result_type _M_getval(); 15726: result_type _M_getval_pretr1(); 15726: double _M_getentropy() const noexcept; 15726: 15726: void _M_init(const char*, size_t); 15726: 15726: __extension__ union 15726: { 15726: struct 15726: { 15726: void* _M_file; 15726: result_type (*_M_func)(void*); 15726: int _M_fd; 15726: }; 15726: mt19937 _M_mt; 15726: }; 15726: }; 15726: # 1731 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: inline bool 15726: operator!=(const std::uniform_int_distribution<_IntType>& __d1, 15726: const std::uniform_int_distribution<_IntType>& __d2) 15726: { return !(__d1 == __d2); } 15726: # 1748 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>&, 15726: const std::uniform_int_distribution<_IntType>&); 15726: # 1762 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>&, 15726: std::uniform_int_distribution<_IntType>&); 15726: # 1778 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class uniform_real_distribution 15726: { 15726: static_assert(std::is_floating_point<_RealType>::value, 15726: "result_type must be a floating point type"); 15726: 15726: public: 15726: 15726: typedef _RealType result_type; 15726: 15726: 15726: struct param_type 15726: { 15726: typedef uniform_real_distribution<_RealType> distribution_type; 15726: 15726: param_type() : param_type(0) { } 15726: 15726: explicit 15726: param_type(_RealType __a, _RealType __b = _RealType(1)) 15726: : _M_a(__a), _M_b(__b) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(_M_a <= _M_b)) __builtin_unreachable(); } while (false); 15726: } 15726: 15726: result_type 15726: a() const 15726: { return _M_a; } 15726: 15726: result_type 15726: b() const 15726: { return _M_b; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; } 15726: 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: 15726: private: 15726: _RealType _M_a; 15726: _RealType _M_b; 15726: }; 15726: 15726: public: 15726: 15726: 15726: 15726: 15726: 15726: uniform_real_distribution() : uniform_real_distribution(0.0) { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: uniform_real_distribution(_RealType __a, _RealType __b = _RealType(1)) 15726: : _M_param(__a, __b) 15726: { } 15726: 15726: explicit 15726: uniform_real_distribution(const param_type& __p) 15726: : _M_param(__p) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: reset() { } 15726: 15726: result_type 15726: a() const 15726: { return _M_param.a(); } 15726: 15726: result_type 15726: b() const 15726: { return _M_param.b(); } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { _M_param = __param; } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { return this->a(); } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { return this->b(); } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng) 15726: { return this->operator()(__urng, _M_param); } 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 15726: __aurng(__urng); 15726: return (__aurng() * (__p.b() - __p.a())) + __p.a(); 15726: } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate(__f, __t, __urng, _M_param); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const uniform_real_distribution& __d1, 15726: const uniform_real_distribution& __d2) 15726: { return __d1._M_param == __d2._M_param; } 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: param_type _M_param; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const std::uniform_real_distribution<_IntType>& __d1, 15726: const std::uniform_real_distribution<_IntType>& __d2) 15726: { return !(__d1 == __d2); } 15726: # 1976 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>&, 15726: const std::uniform_real_distribution<_RealType>&); 15726: # 1990 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>&, 15726: std::uniform_real_distribution<_RealType>&); 15726: # 2015 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class normal_distribution 15726: { 15726: static_assert(std::is_floating_point<_RealType>::value, 15726: "result_type must be a floating point type"); 15726: 15726: public: 15726: 15726: typedef _RealType result_type; 15726: 15726: 15726: struct param_type 15726: { 15726: typedef normal_distribution<_RealType> distribution_type; 15726: 15726: param_type() : param_type(0.0) { } 15726: 15726: explicit 15726: param_type(_RealType __mean, _RealType __stddev = _RealType(1)) 15726: : _M_mean(__mean), _M_stddev(__stddev) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(_M_stddev > _RealType(0))) __builtin_unreachable(); } while (false); 15726: } 15726: 15726: _RealType 15726: mean() const 15726: { return _M_mean; } 15726: 15726: _RealType 15726: stddev() const 15726: { return _M_stddev; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return (__p1._M_mean == __p2._M_mean 15726: && __p1._M_stddev == __p2._M_stddev); } 15726: 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: 15726: private: 15726: _RealType _M_mean; 15726: _RealType _M_stddev; 15726: }; 15726: 15726: public: 15726: normal_distribution() : normal_distribution(0.0) { } 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: normal_distribution(result_type __mean, 15726: result_type __stddev = result_type(1)) 15726: : _M_param(__mean, __stddev) 15726: { } 15726: 15726: explicit 15726: normal_distribution(const param_type& __p) 15726: : _M_param(__p) 15726: { } 15726: 15726: 15726: 15726: 15726: void 15726: reset() 15726: { _M_saved_available = false; } 15726: 15726: 15726: 15726: 15726: _RealType 15726: mean() const 15726: { return _M_param.mean(); } 15726: 15726: 15726: 15726: 15726: _RealType 15726: stddev() const 15726: { return _M_param.stddev(); } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { _M_param = __param; } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { return std::numeric_limits::lowest(); } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { return std::numeric_limits::max(); } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng) 15726: { return this->operator()(__urng, _M_param); } 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate(__f, __t, __urng, _M_param); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: friend bool 15726: operator==(const std::normal_distribution<_RealType1>& __d1, 15726: const std::normal_distribution<_RealType1>& __d2); 15726: # 2186 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::normal_distribution<_RealType1>& __x); 15726: # 2201 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::normal_distribution<_RealType1>& __x); 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: param_type _M_param; 15726: result_type _M_saved = 0; 15726: bool _M_saved_available = false; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const std::normal_distribution<_RealType>& __d1, 15726: const std::normal_distribution<_RealType>& __d2) 15726: { return !(__d1 == __d2); } 15726: # 2242 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class lognormal_distribution 15726: { 15726: static_assert(std::is_floating_point<_RealType>::value, 15726: "result_type must be a floating point type"); 15726: 15726: public: 15726: 15726: typedef _RealType result_type; 15726: 15726: 15726: struct param_type 15726: { 15726: typedef lognormal_distribution<_RealType> distribution_type; 15726: 15726: param_type() : param_type(0.0) { } 15726: 15726: explicit 15726: param_type(_RealType __m, _RealType __s = _RealType(1)) 15726: : _M_m(__m), _M_s(__s) 15726: { } 15726: 15726: _RealType 15726: m() const 15726: { return _M_m; } 15726: 15726: _RealType 15726: s() const 15726: { return _M_s; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return __p1._M_m == __p2._M_m && __p1._M_s == __p2._M_s; } 15726: 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: 15726: private: 15726: _RealType _M_m; 15726: _RealType _M_s; 15726: }; 15726: 15726: lognormal_distribution() : lognormal_distribution(0.0) { } 15726: 15726: explicit 15726: lognormal_distribution(_RealType __m, _RealType __s = _RealType(1)) 15726: : _M_param(__m, __s), _M_nd() 15726: { } 15726: 15726: explicit 15726: lognormal_distribution(const param_type& __p) 15726: : _M_param(__p), _M_nd() 15726: { } 15726: 15726: 15726: 15726: 15726: void 15726: reset() 15726: { _M_nd.reset(); } 15726: 15726: 15726: 15726: 15726: _RealType 15726: m() const 15726: { return _M_param.m(); } 15726: 15726: _RealType 15726: s() const 15726: { return _M_param.s(); } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { _M_param = __param; } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { return result_type(0); } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { return std::numeric_limits::max(); } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng) 15726: { return this->operator()(__urng, _M_param); } 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { return std::exp(__p.s() * _M_nd(__urng) + __p.m()); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate(__f, __t, __urng, _M_param); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const lognormal_distribution& __d1, 15726: const lognormal_distribution& __d2) 15726: { return (__d1._M_param == __d2._M_param 15726: && __d1._M_nd == __d2._M_nd); } 15726: # 2403 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::lognormal_distribution<_RealType1>& __x); 15726: # 2418 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::lognormal_distribution<_RealType1>& __x); 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: param_type _M_param; 15726: 15726: std::normal_distribution _M_nd; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const std::lognormal_distribution<_RealType>& __d1, 15726: const std::lognormal_distribution<_RealType>& __d2) 15726: { return !(__d1 == __d2); } 15726: # 2467 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class gamma_distribution 15726: { 15726: static_assert(std::is_floating_point<_RealType>::value, 15726: "result_type must be a floating point type"); 15726: 15726: public: 15726: 15726: typedef _RealType result_type; 15726: 15726: 15726: struct param_type 15726: { 15726: typedef gamma_distribution<_RealType> distribution_type; 15726: friend class gamma_distribution<_RealType>; 15726: 15726: param_type() : param_type(1.0) { } 15726: 15726: explicit 15726: param_type(_RealType __alpha_val, _RealType __beta_val = _RealType(1)) 15726: : _M_alpha(__alpha_val), _M_beta(__beta_val) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(_M_alpha > _RealType(0))) __builtin_unreachable(); } while (false); 15726: _M_initialize(); 15726: } 15726: 15726: _RealType 15726: alpha() const 15726: { return _M_alpha; } 15726: 15726: _RealType 15726: beta() const 15726: { return _M_beta; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return (__p1._M_alpha == __p2._M_alpha 15726: && __p1._M_beta == __p2._M_beta); } 15726: 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: 15726: private: 15726: void 15726: _M_initialize(); 15726: 15726: _RealType _M_alpha; 15726: _RealType _M_beta; 15726: 15726: _RealType _M_malpha, _M_a2; 15726: }; 15726: 15726: public: 15726: 15726: 15726: 15726: gamma_distribution() : gamma_distribution(1.0) { } 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: gamma_distribution(_RealType __alpha_val, 15726: _RealType __beta_val = _RealType(1)) 15726: : _M_param(__alpha_val, __beta_val), _M_nd() 15726: { } 15726: 15726: explicit 15726: gamma_distribution(const param_type& __p) 15726: : _M_param(__p), _M_nd() 15726: { } 15726: 15726: 15726: 15726: 15726: void 15726: reset() 15726: { _M_nd.reset(); } 15726: 15726: 15726: 15726: 15726: _RealType 15726: alpha() const 15726: { return _M_param.alpha(); } 15726: 15726: 15726: 15726: 15726: _RealType 15726: beta() const 15726: { return _M_param.beta(); } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { _M_param = __param; } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { return result_type(0); } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { return std::numeric_limits::max(); } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng) 15726: { return this->operator()(__urng, _M_param); } 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate(__f, __t, __urng, _M_param); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const gamma_distribution& __d1, 15726: const gamma_distribution& __d2) 15726: { return (__d1._M_param == __d2._M_param 15726: && __d1._M_nd == __d2._M_nd); } 15726: # 2649 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::gamma_distribution<_RealType1>& __x); 15726: # 2663 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::gamma_distribution<_RealType1>& __x); 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: param_type _M_param; 15726: 15726: std::normal_distribution _M_nd; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const std::gamma_distribution<_RealType>& __d1, 15726: const std::gamma_distribution<_RealType>& __d2) 15726: { return !(__d1 == __d2); } 15726: # 2709 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class chi_squared_distribution 15726: { 15726: static_assert(std::is_floating_point<_RealType>::value, 15726: "result_type must be a floating point type"); 15726: 15726: public: 15726: 15726: typedef _RealType result_type; 15726: 15726: 15726: struct param_type 15726: { 15726: typedef chi_squared_distribution<_RealType> distribution_type; 15726: 15726: param_type() : param_type(1) { } 15726: 15726: explicit 15726: param_type(_RealType __n) 15726: : _M_n(__n) 15726: { } 15726: 15726: _RealType 15726: n() const 15726: { return _M_n; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return __p1._M_n == __p2._M_n; } 15726: 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: 15726: private: 15726: _RealType _M_n; 15726: }; 15726: 15726: chi_squared_distribution() : chi_squared_distribution(1) { } 15726: 15726: explicit 15726: chi_squared_distribution(_RealType __n) 15726: : _M_param(__n), _M_gd(__n / 2) 15726: { } 15726: 15726: explicit 15726: chi_squared_distribution(const param_type& __p) 15726: : _M_param(__p), _M_gd(__p.n() / 2) 15726: { } 15726: 15726: 15726: 15726: 15726: void 15726: reset() 15726: { _M_gd.reset(); } 15726: 15726: 15726: 15726: 15726: _RealType 15726: n() const 15726: { return _M_param.n(); } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { 15726: _M_param = __param; 15726: typedef typename std::gamma_distribution::param_type 15726: param_type; 15726: _M_gd.param(param_type{__param.n() / 2}); 15726: } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { return result_type(0); } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { return std::numeric_limits::max(); } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng) 15726: { return 2 * _M_gd(__urng); } 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: typedef typename std::gamma_distribution::param_type 15726: param_type; 15726: return 2 * _M_gd(__urng, param_type(__p.n() / 2)); 15726: } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate_impl(__f, __t, __urng); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { typename std::gamma_distribution::param_type 15726: __p2(__p.n() / 2); 15726: this->__generate_impl(__f, __t, __urng, __p2); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate_impl(__f, __t, __urng); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { typename std::gamma_distribution::param_type 15726: __p2(__p.n() / 2); 15726: this->__generate_impl(__f, __t, __urng, __p2); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const chi_squared_distribution& __d1, 15726: const chi_squared_distribution& __d2) 15726: { return __d1._M_param == __d2._M_param && __d1._M_gd == __d2._M_gd; } 15726: # 2879 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::chi_squared_distribution<_RealType1>& __x); 15726: # 2894 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::chi_squared_distribution<_RealType1>& __x); 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng); 15726: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const typename 15726: std::gamma_distribution::param_type& __p); 15726: 15726: param_type _M_param; 15726: 15726: std::gamma_distribution _M_gd; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const std::chi_squared_distribution<_RealType>& __d1, 15726: const std::chi_squared_distribution<_RealType>& __d2) 15726: { return !(__d1 == __d2); } 15726: # 2939 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class cauchy_distribution 15726: { 15726: static_assert(std::is_floating_point<_RealType>::value, 15726: "result_type must be a floating point type"); 15726: 15726: public: 15726: 15726: typedef _RealType result_type; 15726: 15726: 15726: struct param_type 15726: { 15726: typedef cauchy_distribution<_RealType> distribution_type; 15726: 15726: param_type() : param_type(0) { } 15726: 15726: explicit 15726: param_type(_RealType __a, _RealType __b = _RealType(1)) 15726: : _M_a(__a), _M_b(__b) 15726: { } 15726: 15726: _RealType 15726: a() const 15726: { return _M_a; } 15726: 15726: _RealType 15726: b() const 15726: { return _M_b; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; } 15726: 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: 15726: private: 15726: _RealType _M_a; 15726: _RealType _M_b; 15726: }; 15726: 15726: cauchy_distribution() : cauchy_distribution(0.0) { } 15726: 15726: explicit 15726: cauchy_distribution(_RealType __a, _RealType __b = 1.0) 15726: : _M_param(__a, __b) 15726: { } 15726: 15726: explicit 15726: cauchy_distribution(const param_type& __p) 15726: : _M_param(__p) 15726: { } 15726: 15726: 15726: 15726: 15726: void 15726: reset() 15726: { } 15726: 15726: 15726: 15726: 15726: _RealType 15726: a() const 15726: { return _M_param.a(); } 15726: 15726: _RealType 15726: b() const 15726: { return _M_param.b(); } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { _M_param = __param; } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { return std::numeric_limits::lowest(); } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { return std::numeric_limits::max(); } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng) 15726: { return this->operator()(__urng, _M_param); } 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate(__f, __t, __urng, _M_param); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const cauchy_distribution& __d1, 15726: const cauchy_distribution& __d2) 15726: { return __d1._M_param == __d2._M_param; } 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: param_type _M_param; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const std::cauchy_distribution<_RealType>& __d1, 15726: const std::cauchy_distribution<_RealType>& __d2) 15726: { return !(__d1 == __d2); } 15726: # 3120 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::cauchy_distribution<_RealType>& __x); 15726: # 3135 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::cauchy_distribution<_RealType>& __x); 15726: # 3154 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class fisher_f_distribution 15726: { 15726: static_assert(std::is_floating_point<_RealType>::value, 15726: "result_type must be a floating point type"); 15726: 15726: public: 15726: 15726: typedef _RealType result_type; 15726: 15726: 15726: struct param_type 15726: { 15726: typedef fisher_f_distribution<_RealType> distribution_type; 15726: 15726: param_type() : param_type(1) { } 15726: 15726: explicit 15726: param_type(_RealType __m, _RealType __n = _RealType(1)) 15726: : _M_m(__m), _M_n(__n) 15726: { } 15726: 15726: _RealType 15726: m() const 15726: { return _M_m; } 15726: 15726: _RealType 15726: n() const 15726: { return _M_n; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return __p1._M_m == __p2._M_m && __p1._M_n == __p2._M_n; } 15726: 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: 15726: private: 15726: _RealType _M_m; 15726: _RealType _M_n; 15726: }; 15726: 15726: fisher_f_distribution() : fisher_f_distribution(1.0) { } 15726: 15726: explicit 15726: fisher_f_distribution(_RealType __m, 15726: _RealType __n = _RealType(1)) 15726: : _M_param(__m, __n), _M_gd_x(__m / 2), _M_gd_y(__n / 2) 15726: { } 15726: 15726: explicit 15726: fisher_f_distribution(const param_type& __p) 15726: : _M_param(__p), _M_gd_x(__p.m() / 2), _M_gd_y(__p.n() / 2) 15726: { } 15726: 15726: 15726: 15726: 15726: void 15726: reset() 15726: { 15726: _M_gd_x.reset(); 15726: _M_gd_y.reset(); 15726: } 15726: 15726: 15726: 15726: 15726: _RealType 15726: m() const 15726: { return _M_param.m(); } 15726: 15726: _RealType 15726: n() const 15726: { return _M_param.n(); } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { _M_param = __param; } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { return result_type(0); } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { return std::numeric_limits::max(); } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng) 15726: { return (_M_gd_x(__urng) * n()) / (_M_gd_y(__urng) * m()); } 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: typedef typename std::gamma_distribution::param_type 15726: param_type; 15726: return ((_M_gd_x(__urng, param_type(__p.m() / 2)) * n()) 15726: / (_M_gd_y(__urng, param_type(__p.n() / 2)) * m())); 15726: } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate_impl(__f, __t, __urng); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate_impl(__f, __t, __urng); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const fisher_f_distribution& __d1, 15726: const fisher_f_distribution& __d2) 15726: { return (__d1._M_param == __d2._M_param 15726: && __d1._M_gd_x == __d2._M_gd_x 15726: && __d1._M_gd_y == __d2._M_gd_y); } 15726: # 3331 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::fisher_f_distribution<_RealType1>& __x); 15726: # 3346 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::fisher_f_distribution<_RealType1>& __x); 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng); 15726: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: param_type _M_param; 15726: 15726: std::gamma_distribution _M_gd_x, _M_gd_y; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const std::fisher_f_distribution<_RealType>& __d1, 15726: const std::fisher_f_distribution<_RealType>& __d2) 15726: { return !(__d1 == __d2); } 15726: # 3393 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class student_t_distribution 15726: { 15726: static_assert(std::is_floating_point<_RealType>::value, 15726: "result_type must be a floating point type"); 15726: 15726: public: 15726: 15726: typedef _RealType result_type; 15726: 15726: 15726: struct param_type 15726: { 15726: typedef student_t_distribution<_RealType> distribution_type; 15726: 15726: param_type() : param_type(1) { } 15726: 15726: explicit 15726: param_type(_RealType __n) 15726: : _M_n(__n) 15726: { } 15726: 15726: _RealType 15726: n() const 15726: { return _M_n; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return __p1._M_n == __p2._M_n; } 15726: 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: 15726: private: 15726: _RealType _M_n; 15726: }; 15726: 15726: student_t_distribution() : student_t_distribution(1.0) { } 15726: 15726: explicit 15726: student_t_distribution(_RealType __n) 15726: : _M_param(__n), _M_nd(), _M_gd(__n / 2, 2) 15726: { } 15726: 15726: explicit 15726: student_t_distribution(const param_type& __p) 15726: : _M_param(__p), _M_nd(), _M_gd(__p.n() / 2, 2) 15726: { } 15726: 15726: 15726: 15726: 15726: void 15726: reset() 15726: { 15726: _M_nd.reset(); 15726: _M_gd.reset(); 15726: } 15726: 15726: 15726: 15726: 15726: _RealType 15726: n() const 15726: { return _M_param.n(); } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { _M_param = __param; } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { return std::numeric_limits::lowest(); } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { return std::numeric_limits::max(); } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng) 15726: { return _M_nd(__urng) * std::sqrt(n() / _M_gd(__urng)); } 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: typedef typename std::gamma_distribution::param_type 15726: param_type; 15726: 15726: const result_type __g = _M_gd(__urng, param_type(__p.n() / 2, 2)); 15726: return _M_nd(__urng) * std::sqrt(__p.n() / __g); 15726: } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate_impl(__f, __t, __urng); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate_impl(__f, __t, __urng); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const student_t_distribution& __d1, 15726: const student_t_distribution& __d2) 15726: { return (__d1._M_param == __d2._M_param 15726: && __d1._M_nd == __d2._M_nd && __d1._M_gd == __d2._M_gd); } 15726: # 3560 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::student_t_distribution<_RealType1>& __x); 15726: # 3575 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::student_t_distribution<_RealType1>& __x); 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng); 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: param_type _M_param; 15726: 15726: std::normal_distribution _M_nd; 15726: std::gamma_distribution _M_gd; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const std::student_t_distribution<_RealType>& __d1, 15726: const std::student_t_distribution<_RealType>& __d2) 15726: { return !(__d1 == __d2); } 15726: # 3627 "/usr/include/c++/13/bits/random.h" 3 15726: class bernoulli_distribution 15726: { 15726: public: 15726: 15726: typedef bool result_type; 15726: 15726: 15726: struct param_type 15726: { 15726: typedef bernoulli_distribution distribution_type; 15726: 15726: param_type() : param_type(0.5) { } 15726: 15726: explicit 15726: param_type(double __p) 15726: : _M_p(__p) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool((_M_p >= 0.0) && (_M_p <= 1.0))) __builtin_unreachable(); } while (false); 15726: } 15726: 15726: double 15726: p() const 15726: { return _M_p; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return __p1._M_p == __p2._M_p; } 15726: 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: 15726: private: 15726: double _M_p; 15726: }; 15726: 15726: public: 15726: 15726: 15726: 15726: bernoulli_distribution() : bernoulli_distribution(0.5) { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: bernoulli_distribution(double __p) 15726: : _M_param(__p) 15726: { } 15726: 15726: explicit 15726: bernoulli_distribution(const param_type& __p) 15726: : _M_param(__p) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: reset() { } 15726: 15726: 15726: 15726: 15726: double 15726: p() const 15726: { return _M_param.p(); } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { _M_param = __param; } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { return std::numeric_limits::min(); } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { return std::numeric_limits::max(); } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng) 15726: { return this->operator()(__urng, _M_param); } 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 15726: __aurng(__urng); 15726: if ((__aurng() - __aurng.min()) 15726: < __p.p() * (__aurng.max() - __aurng.min())) 15726: return true; 15726: return false; 15726: } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate(__f, __t, __urng, _M_param); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const bernoulli_distribution& __d1, 15726: const bernoulli_distribution& __d2) 15726: { return __d1._M_param == __d2._M_param; } 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: param_type _M_param; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline bool 15726: operator!=(const std::bernoulli_distribution& __d1, 15726: const std::bernoulli_distribution& __d2) 15726: { return !(__d1 == __d2); } 15726: # 3814 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::bernoulli_distribution& __x); 15726: # 3828 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: inline std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::bernoulli_distribution& __x) 15726: { 15726: double __p; 15726: if (__is >> __p) 15726: __x.param(bernoulli_distribution::param_type(__p)); 15726: return __is; 15726: } 15726: # 3850 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class binomial_distribution 15726: { 15726: static_assert(std::is_integral<_IntType>::value, 15726: "result_type must be an integral type"); 15726: 15726: public: 15726: 15726: typedef _IntType result_type; 15726: 15726: 15726: struct param_type 15726: { 15726: typedef binomial_distribution<_IntType> distribution_type; 15726: friend class binomial_distribution<_IntType>; 15726: 15726: param_type() : param_type(1) { } 15726: 15726: explicit 15726: param_type(_IntType __t, double __p = 0.5) 15726: : _M_t(__t), _M_p(__p) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool((_M_t >= _IntType(0)) && (_M_p >= 0.0) && (_M_p <= 1.0))) __builtin_unreachable(); } while (false) 15726: 15726: ; 15726: _M_initialize(); 15726: } 15726: 15726: _IntType 15726: t() const 15726: { return _M_t; } 15726: 15726: double 15726: p() const 15726: { return _M_p; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return __p1._M_t == __p2._M_t && __p1._M_p == __p2._M_p; } 15726: 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: 15726: private: 15726: void 15726: _M_initialize(); 15726: 15726: _IntType _M_t; 15726: double _M_p; 15726: 15726: double _M_q; 15726: 15726: double _M_d1, _M_d2, _M_s1, _M_s2, _M_c, 15726: _M_a1, _M_a123, _M_s, _M_lf, _M_lp1p; 15726: 15726: bool _M_easy; 15726: }; 15726: 15726: 15726: 15726: binomial_distribution() : binomial_distribution(1) { } 15726: 15726: explicit 15726: binomial_distribution(_IntType __t, double __p = 0.5) 15726: : _M_param(__t, __p), _M_nd() 15726: { } 15726: 15726: explicit 15726: binomial_distribution(const param_type& __p) 15726: : _M_param(__p), _M_nd() 15726: { } 15726: 15726: 15726: 15726: 15726: void 15726: reset() 15726: { _M_nd.reset(); } 15726: 15726: 15726: 15726: 15726: _IntType 15726: t() const 15726: { return _M_param.t(); } 15726: 15726: 15726: 15726: 15726: double 15726: p() const 15726: { return _M_param.p(); } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { _M_param = __param; } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { return 0; } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { return _M_param.t(); } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng) 15726: { return this->operator()(__urng, _M_param); } 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate(__f, __t, __urng, _M_param); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const binomial_distribution& __d1, 15726: const binomial_distribution& __d2) 15726: 15726: { return __d1._M_param == __d2._M_param && __d1._M_nd == __d2._M_nd; } 15726: # 4034 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::binomial_distribution<_IntType1>& __x); 15726: # 4050 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::binomial_distribution<_IntType1>& __x); 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: template 15726: result_type 15726: _M_waiting(_UniformRandomNumberGenerator& __urng, 15726: _IntType __t, double __q); 15726: 15726: param_type _M_param; 15726: 15726: 15726: std::normal_distribution _M_nd; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const std::binomial_distribution<_IntType>& __d1, 15726: const std::binomial_distribution<_IntType>& __d2) 15726: { return !(__d1 == __d2); } 15726: # 4096 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class geometric_distribution 15726: { 15726: static_assert(std::is_integral<_IntType>::value, 15726: "result_type must be an integral type"); 15726: 15726: public: 15726: 15726: typedef _IntType result_type; 15726: 15726: 15726: struct param_type 15726: { 15726: typedef geometric_distribution<_IntType> distribution_type; 15726: friend class geometric_distribution<_IntType>; 15726: 15726: param_type() : param_type(0.5) { } 15726: 15726: explicit 15726: param_type(double __p) 15726: : _M_p(__p) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool((_M_p > 0.0) && (_M_p < 1.0))) __builtin_unreachable(); } while (false); 15726: _M_initialize(); 15726: } 15726: 15726: double 15726: p() const 15726: { return _M_p; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return __p1._M_p == __p2._M_p; } 15726: 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: 15726: private: 15726: void 15726: _M_initialize() 15726: { _M_log_1_p = std::log(1.0 - _M_p); } 15726: 15726: double _M_p; 15726: 15726: double _M_log_1_p; 15726: }; 15726: 15726: 15726: 15726: geometric_distribution() : geometric_distribution(0.5) { } 15726: 15726: explicit 15726: geometric_distribution(double __p) 15726: : _M_param(__p) 15726: { } 15726: 15726: explicit 15726: geometric_distribution(const param_type& __p) 15726: : _M_param(__p) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: reset() { } 15726: 15726: 15726: 15726: 15726: double 15726: p() const 15726: { return _M_param.p(); } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { _M_param = __param; } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { return 0; } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { return std::numeric_limits::max(); } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng) 15726: { return this->operator()(__urng, _M_param); } 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate(__f, __t, __urng, _M_param); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const geometric_distribution& __d1, 15726: const geometric_distribution& __d2) 15726: { return __d1._M_param == __d2._M_param; } 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: param_type _M_param; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const std::geometric_distribution<_IntType>& __d1, 15726: const std::geometric_distribution<_IntType>& __d2) 15726: { return !(__d1 == __d2); } 15726: # 4281 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::geometric_distribution<_IntType>& __x); 15726: # 4296 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::geometric_distribution<_IntType>& __x); 15726: # 4313 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class negative_binomial_distribution 15726: { 15726: static_assert(std::is_integral<_IntType>::value, 15726: "result_type must be an integral type"); 15726: 15726: public: 15726: 15726: typedef _IntType result_type; 15726: 15726: 15726: struct param_type 15726: { 15726: typedef negative_binomial_distribution<_IntType> distribution_type; 15726: 15726: param_type() : param_type(1) { } 15726: 15726: explicit 15726: param_type(_IntType __k, double __p = 0.5) 15726: : _M_k(__k), _M_p(__p) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool((_M_k > 0) && (_M_p > 0.0) && (_M_p <= 1.0))) __builtin_unreachable(); } while (false); 15726: } 15726: 15726: _IntType 15726: k() const 15726: { return _M_k; } 15726: 15726: double 15726: p() const 15726: { return _M_p; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return __p1._M_k == __p2._M_k && __p1._M_p == __p2._M_p; } 15726: 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: 15726: private: 15726: _IntType _M_k; 15726: double _M_p; 15726: }; 15726: 15726: negative_binomial_distribution() : negative_binomial_distribution(1) { } 15726: 15726: explicit 15726: negative_binomial_distribution(_IntType __k, double __p = 0.5) 15726: : _M_param(__k, __p), _M_gd(__k, (1.0 - __p) / __p) 15726: { } 15726: 15726: explicit 15726: negative_binomial_distribution(const param_type& __p) 15726: : _M_param(__p), _M_gd(__p.k(), (1.0 - __p.p()) / __p.p()) 15726: { } 15726: 15726: 15726: 15726: 15726: void 15726: reset() 15726: { _M_gd.reset(); } 15726: 15726: 15726: 15726: 15726: _IntType 15726: k() const 15726: { return _M_param.k(); } 15726: 15726: 15726: 15726: 15726: double 15726: p() const 15726: { return _M_param.p(); } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { _M_param = __param; } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { return result_type(0); } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { return std::numeric_limits::max(); } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng); 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate_impl(__f, __t, __urng); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate_impl(__f, __t, __urng); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const negative_binomial_distribution& __d1, 15726: const negative_binomial_distribution& __d2) 15726: { return __d1._M_param == __d2._M_param && __d1._M_gd == __d2._M_gd; } 15726: # 4483 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::negative_binomial_distribution<_IntType1>& __x); 15726: # 4498 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::negative_binomial_distribution<_IntType1>& __x); 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng); 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: param_type _M_param; 15726: 15726: std::gamma_distribution _M_gd; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const std::negative_binomial_distribution<_IntType>& __d1, 15726: const std::negative_binomial_distribution<_IntType>& __d2) 15726: { return !(__d1 == __d2); } 15726: # 4550 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class poisson_distribution 15726: { 15726: static_assert(std::is_integral<_IntType>::value, 15726: "result_type must be an integral type"); 15726: 15726: public: 15726: 15726: typedef _IntType result_type; 15726: 15726: 15726: struct param_type 15726: { 15726: typedef poisson_distribution<_IntType> distribution_type; 15726: friend class poisson_distribution<_IntType>; 15726: 15726: param_type() : param_type(1.0) { } 15726: 15726: explicit 15726: param_type(double __mean) 15726: : _M_mean(__mean) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(_M_mean > 0.0)) __builtin_unreachable(); } while (false); 15726: _M_initialize(); 15726: } 15726: 15726: double 15726: mean() const 15726: { return _M_mean; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return __p1._M_mean == __p2._M_mean; } 15726: 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: 15726: private: 15726: 15726: void 15726: _M_initialize(); 15726: 15726: double _M_mean; 15726: 15726: double _M_lm_thr; 15726: 15726: double _M_lfm, _M_sm, _M_d, _M_scx, _M_1cx, _M_c2b, _M_cb; 15726: 15726: }; 15726: 15726: 15726: 15726: poisson_distribution() : poisson_distribution(1.0) { } 15726: 15726: explicit 15726: poisson_distribution(double __mean) 15726: : _M_param(__mean), _M_nd() 15726: { } 15726: 15726: explicit 15726: poisson_distribution(const param_type& __p) 15726: : _M_param(__p), _M_nd() 15726: { } 15726: 15726: 15726: 15726: 15726: void 15726: reset() 15726: { _M_nd.reset(); } 15726: 15726: 15726: 15726: 15726: double 15726: mean() const 15726: { return _M_param.mean(); } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { _M_param = __param; } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { return 0; } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { return std::numeric_limits::max(); } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng) 15726: { return this->operator()(__urng, _M_param); } 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate(__f, __t, __urng, _M_param); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const poisson_distribution& __d1, 15726: const poisson_distribution& __d2) 15726: 15726: { return __d1._M_param == __d2._M_param && __d1._M_nd == __d2._M_nd; } 15726: # 4719 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::poisson_distribution<_IntType1>& __x); 15726: # 4734 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::poisson_distribution<_IntType1>& __x); 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: param_type _M_param; 15726: 15726: 15726: std::normal_distribution _M_nd; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const std::poisson_distribution<_IntType>& __d1, 15726: const std::poisson_distribution<_IntType>& __d2) 15726: { return !(__d1 == __d2); } 15726: # 4782 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class exponential_distribution 15726: { 15726: static_assert(std::is_floating_point<_RealType>::value, 15726: "result_type must be a floating point type"); 15726: 15726: public: 15726: 15726: typedef _RealType result_type; 15726: 15726: 15726: struct param_type 15726: { 15726: typedef exponential_distribution<_RealType> distribution_type; 15726: 15726: param_type() : param_type(1.0) { } 15726: 15726: explicit 15726: param_type(_RealType __lambda) 15726: : _M_lambda(__lambda) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(_M_lambda > _RealType(0))) __builtin_unreachable(); } while (false); 15726: } 15726: 15726: _RealType 15726: lambda() const 15726: { return _M_lambda; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return __p1._M_lambda == __p2._M_lambda; } 15726: 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: 15726: private: 15726: _RealType _M_lambda; 15726: }; 15726: 15726: public: 15726: 15726: 15726: 15726: 15726: exponential_distribution() : exponential_distribution(1.0) { } 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: exponential_distribution(_RealType __lambda) 15726: : _M_param(__lambda) 15726: { } 15726: 15726: explicit 15726: exponential_distribution(const param_type& __p) 15726: : _M_param(__p) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: reset() { } 15726: 15726: 15726: 15726: 15726: _RealType 15726: lambda() const 15726: { return _M_param.lambda(); } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { _M_param = __param; } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { return result_type(0); } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { return std::numeric_limits::max(); } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng) 15726: { return this->operator()(__urng, _M_param); } 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 15726: __aurng(__urng); 15726: return -std::log(result_type(1) - __aurng()) / __p.lambda(); 15726: } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate(__f, __t, __urng, _M_param); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const exponential_distribution& __d1, 15726: const exponential_distribution& __d2) 15726: { return __d1._M_param == __d2._M_param; } 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: param_type _M_param; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const std::exponential_distribution<_RealType>& __d1, 15726: const std::exponential_distribution<_RealType>& __d2) 15726: { return !(__d1 == __d2); } 15726: # 4971 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::exponential_distribution<_RealType>& __x); 15726: # 4986 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::exponential_distribution<_RealType>& __x); 15726: # 5004 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class weibull_distribution 15726: { 15726: static_assert(std::is_floating_point<_RealType>::value, 15726: "result_type must be a floating point type"); 15726: 15726: public: 15726: 15726: typedef _RealType result_type; 15726: 15726: 15726: struct param_type 15726: { 15726: typedef weibull_distribution<_RealType> distribution_type; 15726: 15726: param_type() : param_type(1.0) { } 15726: 15726: explicit 15726: param_type(_RealType __a, _RealType __b = _RealType(1.0)) 15726: : _M_a(__a), _M_b(__b) 15726: { } 15726: 15726: _RealType 15726: a() const 15726: { return _M_a; } 15726: 15726: _RealType 15726: b() const 15726: { return _M_b; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; } 15726: 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: 15726: private: 15726: _RealType _M_a; 15726: _RealType _M_b; 15726: }; 15726: 15726: weibull_distribution() : weibull_distribution(1.0) { } 15726: 15726: explicit 15726: weibull_distribution(_RealType __a, _RealType __b = _RealType(1)) 15726: : _M_param(__a, __b) 15726: { } 15726: 15726: explicit 15726: weibull_distribution(const param_type& __p) 15726: : _M_param(__p) 15726: { } 15726: 15726: 15726: 15726: 15726: void 15726: reset() 15726: { } 15726: 15726: 15726: 15726: 15726: _RealType 15726: a() const 15726: { return _M_param.a(); } 15726: 15726: 15726: 15726: 15726: _RealType 15726: b() const 15726: { return _M_param.b(); } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { _M_param = __param; } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { return result_type(0); } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { return std::numeric_limits::max(); } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng) 15726: { return this->operator()(__urng, _M_param); } 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate(__f, __t, __urng, _M_param); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const weibull_distribution& __d1, 15726: const weibull_distribution& __d2) 15726: { return __d1._M_param == __d2._M_param; } 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: param_type _M_param; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const std::weibull_distribution<_RealType>& __d1, 15726: const std::weibull_distribution<_RealType>& __d2) 15726: { return !(__d1 == __d2); } 15726: # 5188 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::weibull_distribution<_RealType>& __x); 15726: # 5203 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::weibull_distribution<_RealType>& __x); 15726: # 5221 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class extreme_value_distribution 15726: { 15726: static_assert(std::is_floating_point<_RealType>::value, 15726: "result_type must be a floating point type"); 15726: 15726: public: 15726: 15726: typedef _RealType result_type; 15726: 15726: 15726: struct param_type 15726: { 15726: typedef extreme_value_distribution<_RealType> distribution_type; 15726: 15726: param_type() : param_type(0.0) { } 15726: 15726: explicit 15726: param_type(_RealType __a, _RealType __b = _RealType(1.0)) 15726: : _M_a(__a), _M_b(__b) 15726: { } 15726: 15726: _RealType 15726: a() const 15726: { return _M_a; } 15726: 15726: _RealType 15726: b() const 15726: { return _M_b; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; } 15726: 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: 15726: private: 15726: _RealType _M_a; 15726: _RealType _M_b; 15726: }; 15726: 15726: extreme_value_distribution() : extreme_value_distribution(0.0) { } 15726: 15726: explicit 15726: extreme_value_distribution(_RealType __a, _RealType __b = _RealType(1)) 15726: : _M_param(__a, __b) 15726: { } 15726: 15726: explicit 15726: extreme_value_distribution(const param_type& __p) 15726: : _M_param(__p) 15726: { } 15726: 15726: 15726: 15726: 15726: void 15726: reset() 15726: { } 15726: 15726: 15726: 15726: 15726: _RealType 15726: a() const 15726: { return _M_param.a(); } 15726: 15726: 15726: 15726: 15726: _RealType 15726: b() const 15726: { return _M_param.b(); } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { _M_param = __param; } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { return std::numeric_limits::lowest(); } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { return std::numeric_limits::max(); } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng) 15726: { return this->operator()(__urng, _M_param); } 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate(__f, __t, __urng, _M_param); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const extreme_value_distribution& __d1, 15726: const extreme_value_distribution& __d2) 15726: { return __d1._M_param == __d2._M_param; } 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: param_type _M_param; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const std::extreme_value_distribution<_RealType>& __d1, 15726: const std::extreme_value_distribution<_RealType>& __d2) 15726: { return !(__d1 == __d2); } 15726: # 5405 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::extreme_value_distribution<_RealType>& __x); 15726: # 5420 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::extreme_value_distribution<_RealType>& __x); 15726: # 5443 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class discrete_distribution 15726: { 15726: static_assert(std::is_integral<_IntType>::value, 15726: "result_type must be an integral type"); 15726: 15726: public: 15726: 15726: typedef _IntType result_type; 15726: 15726: 15726: struct param_type 15726: { 15726: typedef discrete_distribution<_IntType> distribution_type; 15726: friend class discrete_distribution<_IntType>; 15726: 15726: param_type() 15726: : _M_prob(), _M_cp() 15726: { } 15726: 15726: template 15726: param_type(_InputIterator __wbegin, 15726: _InputIterator __wend) 15726: : _M_prob(__wbegin, __wend), _M_cp() 15726: { _M_initialize(); } 15726: 15726: param_type(initializer_list __wil) 15726: : _M_prob(__wil.begin(), __wil.end()), _M_cp() 15726: { _M_initialize(); } 15726: 15726: template 15726: param_type(size_t __nw, double __xmin, double __xmax, 15726: _Func __fw); 15726: 15726: 15726: param_type(const param_type&) = default; 15726: param_type& operator=(const param_type&) = default; 15726: 15726: std::vector 15726: probabilities() const 15726: { return _M_prob.empty() ? std::vector(1, 1.0) : _M_prob; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return __p1._M_prob == __p2._M_prob; } 15726: 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: 15726: private: 15726: void 15726: _M_initialize(); 15726: 15726: std::vector _M_prob; 15726: std::vector _M_cp; 15726: }; 15726: 15726: discrete_distribution() 15726: : _M_param() 15726: { } 15726: 15726: template 15726: discrete_distribution(_InputIterator __wbegin, 15726: _InputIterator __wend) 15726: : _M_param(__wbegin, __wend) 15726: { } 15726: 15726: discrete_distribution(initializer_list __wl) 15726: : _M_param(__wl) 15726: { } 15726: 15726: template 15726: discrete_distribution(size_t __nw, double __xmin, double __xmax, 15726: _Func __fw) 15726: : _M_param(__nw, __xmin, __xmax, __fw) 15726: { } 15726: 15726: explicit 15726: discrete_distribution(const param_type& __p) 15726: : _M_param(__p) 15726: { } 15726: 15726: 15726: 15726: 15726: void 15726: reset() 15726: { } 15726: 15726: 15726: 15726: 15726: std::vector 15726: probabilities() const 15726: { 15726: return _M_param._M_prob.empty() 15726: ? std::vector(1, 1.0) : _M_param._M_prob; 15726: } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { _M_param = __param; } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { return result_type(0); } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { 15726: return _M_param._M_prob.empty() 15726: ? result_type(0) : result_type(_M_param._M_prob.size() - 1); 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng) 15726: { return this->operator()(__urng, _M_param); } 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate(__f, __t, __urng, _M_param); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const discrete_distribution& __d1, 15726: const discrete_distribution& __d2) 15726: { return __d1._M_param == __d2._M_param; } 15726: # 5631 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::discrete_distribution<_IntType1>& __x); 15726: # 5647 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::discrete_distribution<_IntType1>& __x); 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: param_type _M_param; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const std::discrete_distribution<_IntType>& __d1, 15726: const std::discrete_distribution<_IntType>& __d2) 15726: { return !(__d1 == __d2); } 15726: # 5691 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class piecewise_constant_distribution 15726: { 15726: static_assert(std::is_floating_point<_RealType>::value, 15726: "result_type must be a floating point type"); 15726: 15726: public: 15726: 15726: typedef _RealType result_type; 15726: 15726: 15726: struct param_type 15726: { 15726: typedef piecewise_constant_distribution<_RealType> distribution_type; 15726: friend class piecewise_constant_distribution<_RealType>; 15726: 15726: param_type() 15726: : _M_int(), _M_den(), _M_cp() 15726: { } 15726: 15726: template 15726: param_type(_InputIteratorB __bfirst, 15726: _InputIteratorB __bend, 15726: _InputIteratorW __wbegin); 15726: 15726: template 15726: param_type(initializer_list<_RealType> __bi, _Func __fw); 15726: 15726: template 15726: param_type(size_t __nw, _RealType __xmin, _RealType __xmax, 15726: _Func __fw); 15726: 15726: 15726: param_type(const param_type&) = default; 15726: param_type& operator=(const param_type&) = default; 15726: 15726: std::vector<_RealType> 15726: intervals() const 15726: { 15726: if (_M_int.empty()) 15726: { 15726: std::vector<_RealType> __tmp(2); 15726: __tmp[1] = _RealType(1); 15726: return __tmp; 15726: } 15726: else 15726: return _M_int; 15726: } 15726: 15726: std::vector 15726: densities() const 15726: { return _M_den.empty() ? std::vector(1, 1.0) : _M_den; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return __p1._M_int == __p2._M_int && __p1._M_den == __p2._M_den; } 15726: 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: 15726: private: 15726: void 15726: _M_initialize(); 15726: 15726: std::vector<_RealType> _M_int; 15726: std::vector _M_den; 15726: std::vector _M_cp; 15726: }; 15726: 15726: piecewise_constant_distribution() 15726: : _M_param() 15726: { } 15726: 15726: template 15726: piecewise_constant_distribution(_InputIteratorB __bfirst, 15726: _InputIteratorB __bend, 15726: _InputIteratorW __wbegin) 15726: : _M_param(__bfirst, __bend, __wbegin) 15726: { } 15726: 15726: template 15726: piecewise_constant_distribution(initializer_list<_RealType> __bl, 15726: _Func __fw) 15726: : _M_param(__bl, __fw) 15726: { } 15726: 15726: template 15726: piecewise_constant_distribution(size_t __nw, 15726: _RealType __xmin, _RealType __xmax, 15726: _Func __fw) 15726: : _M_param(__nw, __xmin, __xmax, __fw) 15726: { } 15726: 15726: explicit 15726: piecewise_constant_distribution(const param_type& __p) 15726: : _M_param(__p) 15726: { } 15726: 15726: 15726: 15726: 15726: void 15726: reset() 15726: { } 15726: 15726: 15726: 15726: 15726: std::vector<_RealType> 15726: intervals() const 15726: { 15726: if (_M_param._M_int.empty()) 15726: { 15726: std::vector<_RealType> __tmp(2); 15726: __tmp[1] = _RealType(1); 15726: return __tmp; 15726: } 15726: else 15726: return _M_param._M_int; 15726: } 15726: 15726: 15726: 15726: 15726: std::vector 15726: densities() const 15726: { 15726: return _M_param._M_den.empty() 15726: ? std::vector(1, 1.0) : _M_param._M_den; 15726: } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { _M_param = __param; } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { 15726: return _M_param._M_int.empty() 15726: ? result_type(0) : _M_param._M_int.front(); 15726: } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { 15726: return _M_param._M_int.empty() 15726: ? result_type(1) : _M_param._M_int.back(); 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng) 15726: { return this->operator()(__urng, _M_param); } 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate(__f, __t, __urng, _M_param); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const piecewise_constant_distribution& __d1, 15726: const piecewise_constant_distribution& __d2) 15726: { return __d1._M_param == __d2._M_param; } 15726: # 5915 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::piecewise_constant_distribution<_RealType1>& __x); 15726: # 5931 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::piecewise_constant_distribution<_RealType1>& __x); 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: param_type _M_param; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const std::piecewise_constant_distribution<_RealType>& __d1, 15726: const std::piecewise_constant_distribution<_RealType>& __d2) 15726: { return !(__d1 == __d2); } 15726: # 5971 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: class piecewise_linear_distribution 15726: { 15726: static_assert(std::is_floating_point<_RealType>::value, 15726: "result_type must be a floating point type"); 15726: 15726: public: 15726: 15726: typedef _RealType result_type; 15726: 15726: 15726: struct param_type 15726: { 15726: typedef piecewise_linear_distribution<_RealType> distribution_type; 15726: friend class piecewise_linear_distribution<_RealType>; 15726: 15726: param_type() 15726: : _M_int(), _M_den(), _M_cp(), _M_m() 15726: { } 15726: 15726: template 15726: param_type(_InputIteratorB __bfirst, 15726: _InputIteratorB __bend, 15726: _InputIteratorW __wbegin); 15726: 15726: template 15726: param_type(initializer_list<_RealType> __bl, _Func __fw); 15726: 15726: template 15726: param_type(size_t __nw, _RealType __xmin, _RealType __xmax, 15726: _Func __fw); 15726: 15726: 15726: param_type(const param_type&) = default; 15726: param_type& operator=(const param_type&) = default; 15726: 15726: std::vector<_RealType> 15726: intervals() const 15726: { 15726: if (_M_int.empty()) 15726: { 15726: std::vector<_RealType> __tmp(2); 15726: __tmp[1] = _RealType(1); 15726: return __tmp; 15726: } 15726: else 15726: return _M_int; 15726: } 15726: 15726: std::vector 15726: densities() const 15726: { return _M_den.empty() ? std::vector(2, 1.0) : _M_den; } 15726: 15726: friend bool 15726: operator==(const param_type& __p1, const param_type& __p2) 15726: { return __p1._M_int == __p2._M_int && __p1._M_den == __p2._M_den; } 15726: 15726: 15726: friend bool 15726: operator!=(const param_type& __p1, const param_type& __p2) 15726: { return !(__p1 == __p2); } 15726: 15726: 15726: private: 15726: void 15726: _M_initialize(); 15726: 15726: std::vector<_RealType> _M_int; 15726: std::vector _M_den; 15726: std::vector _M_cp; 15726: std::vector _M_m; 15726: }; 15726: 15726: piecewise_linear_distribution() 15726: : _M_param() 15726: { } 15726: 15726: template 15726: piecewise_linear_distribution(_InputIteratorB __bfirst, 15726: _InputIteratorB __bend, 15726: _InputIteratorW __wbegin) 15726: : _M_param(__bfirst, __bend, __wbegin) 15726: { } 15726: 15726: template 15726: piecewise_linear_distribution(initializer_list<_RealType> __bl, 15726: _Func __fw) 15726: : _M_param(__bl, __fw) 15726: { } 15726: 15726: template 15726: piecewise_linear_distribution(size_t __nw, 15726: _RealType __xmin, _RealType __xmax, 15726: _Func __fw) 15726: : _M_param(__nw, __xmin, __xmax, __fw) 15726: { } 15726: 15726: explicit 15726: piecewise_linear_distribution(const param_type& __p) 15726: : _M_param(__p) 15726: { } 15726: 15726: 15726: 15726: 15726: void 15726: reset() 15726: { } 15726: 15726: 15726: 15726: 15726: std::vector<_RealType> 15726: intervals() const 15726: { 15726: if (_M_param._M_int.empty()) 15726: { 15726: std::vector<_RealType> __tmp(2); 15726: __tmp[1] = _RealType(1); 15726: return __tmp; 15726: } 15726: else 15726: return _M_param._M_int; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: std::vector 15726: densities() const 15726: { 15726: return _M_param._M_den.empty() 15726: ? std::vector(2, 1.0) : _M_param._M_den; 15726: } 15726: 15726: 15726: 15726: 15726: param_type 15726: param() const 15726: { return _M_param; } 15726: 15726: 15726: 15726: 15726: 15726: void 15726: param(const param_type& __param) 15726: { _M_param = __param; } 15726: 15726: 15726: 15726: 15726: result_type 15726: min() const 15726: { 15726: return _M_param._M_int.empty() 15726: ? result_type(0) : _M_param._M_int.front(); 15726: } 15726: 15726: 15726: 15726: 15726: result_type 15726: max() const 15726: { 15726: return _M_param._M_int.empty() 15726: ? result_type(1) : _M_param._M_int.back(); 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng) 15726: { return this->operator()(__urng, _M_param); } 15726: 15726: template 15726: result_type 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { this->__generate(__f, __t, __urng, _M_param); } 15726: 15726: template 15726: void 15726: __generate(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: template 15726: void 15726: __generate(result_type* __f, result_type* __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { this->__generate_impl(__f, __t, __urng, __p); } 15726: 15726: 15726: 15726: 15726: 15726: friend bool 15726: operator==(const piecewise_linear_distribution& __d1, 15726: const piecewise_linear_distribution& __d2) 15726: { return __d1._M_param == __d2._M_param; } 15726: # 6197 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const std::piecewise_linear_distribution<_RealType1>& __x); 15726: # 6213 "/usr/include/c++/13/bits/random.h" 3 15726: template 15726: friend std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: std::piecewise_linear_distribution<_RealType1>& __x); 15726: 15726: private: 15726: template 15726: void 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p); 15726: 15726: param_type _M_param; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const std::piecewise_linear_distribution<_RealType>& __d1, 15726: const std::piecewise_linear_distribution<_RealType>& __d2) 15726: { return !(__d1 == __d2); } 15726: # 6258 "/usr/include/c++/13/bits/random.h" 3 15726: class seed_seq 15726: { 15726: public: 15726: 15726: typedef uint_least32_t result_type; 15726: 15726: 15726: seed_seq() noexcept 15726: : _M_v() 15726: { } 15726: 15726: template>> 15726: seed_seq(std::initializer_list<_IntType> __il); 15726: 15726: template 15726: seed_seq(_InputIterator __begin, _InputIterator __end); 15726: 15726: 15726: template 15726: void 15726: generate(_RandomAccessIterator __begin, _RandomAccessIterator __end); 15726: 15726: 15726: size_t size() const noexcept 15726: { return _M_v.size(); } 15726: 15726: template 15726: void 15726: param(_OutputIterator __dest) const 15726: { std::copy(_M_v.begin(), _M_v.end(), __dest); } 15726: 15726: 15726: seed_seq(const seed_seq&) = delete; 15726: seed_seq& operator=(const seed_seq&) = delete; 15726: 15726: private: 15726: std::vector _M_v; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 52 "/usr/include/c++/13/random" 2 3 15726: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/opt_random.h" 1 3 15726: # 33 "/usr/include/arm-linux-gnueabihf/c++/13/bits/opt_random.h" 3 15726: 15726: # 34 "/usr/include/arm-linux-gnueabihf/c++/13/bits/opt_random.h" 3 15726: # 53 "/usr/include/c++/13/random" 2 3 15726: # 1 "/usr/include/c++/13/bits/random.tcc" 1 3 15726: # 33 "/usr/include/c++/13/bits/random.tcc" 3 15726: # 1 "/usr/include/c++/13/numeric" 1 3 15726: # 58 "/usr/include/c++/13/numeric" 3 15726: 15726: # 59 "/usr/include/c++/13/numeric" 3 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/stl_numeric.h" 1 3 15726: # 64 "/usr/include/c++/13/bits/stl_numeric.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 85 "/usr/include/c++/13/bits/stl_numeric.h" 3 15726: template 15726: 15726: void 15726: iota(_ForwardIterator __first, _ForwardIterator __last, _Tp __value) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: for (; __first != __last; ++__first) 15726: { 15726: *__first = __value; 15726: ++__value; 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: # 131 "/usr/include/c++/13/bits/stl_numeric.h" 3 15726: template 15726: 15726: inline _Tp 15726: accumulate(_InputIterator __first, _InputIterator __last, _Tp __init) 15726: { 15726: 15726: 15726: ; 15726: 15726: for (; __first != __last; ++__first) 15726: __init = __init + *__first; 15726: return __init; 15726: } 15726: # 158 "/usr/include/c++/13/bits/stl_numeric.h" 3 15726: template 15726: 15726: inline _Tp 15726: accumulate(_InputIterator __first, _InputIterator __last, _Tp __init, 15726: _BinaryOperation __binary_op) 15726: { 15726: 15726: 15726: ; 15726: 15726: for (; __first != __last; ++__first) 15726: __init = __binary_op(__init, *__first); 15726: return __init; 15726: } 15726: # 187 "/usr/include/c++/13/bits/stl_numeric.h" 3 15726: template 15726: 15726: inline _Tp 15726: inner_product(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _Tp __init) 15726: { 15726: 15726: 15726: 15726: ; 15726: 15726: for (; __first1 != __last1; ++__first1, (void)++__first2) 15726: __init = __init + (*__first1 * *__first2); 15726: return __init; 15726: } 15726: # 219 "/usr/include/c++/13/bits/stl_numeric.h" 3 15726: template 15726: 15726: inline _Tp 15726: inner_product(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _Tp __init, 15726: _BinaryOperation1 __binary_op1, 15726: _BinaryOperation2 __binary_op2) 15726: { 15726: 15726: 15726: 15726: ; 15726: 15726: for (; __first1 != __last1; ++__first1, (void)++__first2) 15726: __init = __binary_op1(__init, 15726: __binary_op2(*__first1, *__first2)); 15726: return __init; 15726: } 15726: # 253 "/usr/include/c++/13/bits/stl_numeric.h" 3 15726: template 15726: 15726: _OutputIterator 15726: partial_sum(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result) 15726: { 15726: typedef typename iterator_traits<_InputIterator>::value_type _ValueType; 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: if (__first == __last) 15726: return __result; 15726: _ValueType __value = *__first; 15726: *__result = __value; 15726: while (++__first != __last) 15726: { 15726: __value = __value + *__first; 15726: *++__result = __value; 15726: } 15726: return ++__result; 15726: } 15726: # 294 "/usr/include/c++/13/bits/stl_numeric.h" 3 15726: template 15726: 15726: _OutputIterator 15726: partial_sum(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, _BinaryOperation __binary_op) 15726: { 15726: typedef typename iterator_traits<_InputIterator>::value_type _ValueType; 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: if (__first == __last) 15726: return __result; 15726: _ValueType __value = *__first; 15726: *__result = __value; 15726: while (++__first != __last) 15726: { 15726: __value = __binary_op(__value, *__first); 15726: *++__result = __value; 15726: } 15726: return ++__result; 15726: } 15726: # 334 "/usr/include/c++/13/bits/stl_numeric.h" 3 15726: template 15726: 15726: _OutputIterator 15726: adjacent_difference(_InputIterator __first, 15726: _InputIterator __last, _OutputIterator __result) 15726: { 15726: typedef typename iterator_traits<_InputIterator>::value_type _ValueType; 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: if (__first == __last) 15726: return __result; 15726: _ValueType __value = *__first; 15726: *__result = __value; 15726: while (++__first != __last) 15726: { 15726: _ValueType __tmp = *__first; 15726: *++__result = __tmp - __value; 15726: __value = std::move(__tmp); 15726: } 15726: return ++__result; 15726: } 15726: # 376 "/usr/include/c++/13/bits/stl_numeric.h" 3 15726: template 15726: 15726: _OutputIterator 15726: adjacent_difference(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, _BinaryOperation __binary_op) 15726: { 15726: typedef typename iterator_traits<_InputIterator>::value_type _ValueType; 15726: 15726: 15726: 15726: 15726: 15726: ; 15726: 15726: if (__first == __last) 15726: return __result; 15726: _ValueType __value = *__first; 15726: *__result = __value; 15726: while (++__first != __last) 15726: { 15726: _ValueType __tmp = *__first; 15726: *++__result = __binary_op(__tmp, __value); 15726: __value = std::move(__tmp); 15726: } 15726: return ++__result; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 63 "/usr/include/c++/13/numeric" 2 3 15726: # 90 "/usr/include/c++/13/numeric" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: namespace __detail 15726: { 15726: 15726: 15726: template 15726: constexpr _Res 15726: __abs_r(_Tp __val) 15726: { 15726: static_assert(sizeof(_Res) >= sizeof(_Tp), 15726: "result type must be at least as wide as the input type"); 15726: 15726: if (__val >= 0) 15726: return __val; 15726: 15726: 15726: 15726: 15726: return -static_cast<_Res>(__val); 15726: } 15726: 15726: template void __abs_r(bool) = delete; 15726: 15726: 15726: template 15726: constexpr _Tp 15726: __gcd(_Tp __m, _Tp __n) 15726: { 15726: static_assert(is_unsigned<_Tp>::value, "type must be unsigned"); 15726: 15726: if (__m == 0) 15726: return __n; 15726: if (__n == 0) 15726: return __m; 15726: 15726: const int __i = std::__countr_zero(__m); 15726: __m >>= __i; 15726: const int __j = std::__countr_zero(__n); 15726: __n >>= __j; 15726: const int __k = __i < __j ? __i : __j; 15726: 15726: while (true) 15726: { 15726: if (__m > __n) 15726: { 15726: _Tp __tmp = __m; 15726: __m = __n; 15726: __n = __tmp; 15726: } 15726: 15726: __n -= __m; 15726: 15726: if (__n == 0) 15726: return __m << __k; 15726: 15726: __n >>= std::__countr_zero(__n); 15726: } 15726: } 15726: } 15726: # 162 "/usr/include/c++/13/numeric" 3 15726: template 15726: constexpr common_type_t<_Mn, _Nn> 15726: gcd(_Mn __m, _Nn __n) noexcept 15726: { 15726: static_assert(is_integral_v<_Mn> && is_integral_v<_Nn>, 15726: "std::gcd arguments must be integers"); 15726: static_assert(_Mn(2) == 2 && _Nn(2) == 2, 15726: "std::gcd arguments must not be bool"); 15726: using _Ct = common_type_t<_Mn, _Nn>; 15726: const _Ct __m2 = __detail::__abs_r<_Ct>(__m); 15726: const _Ct __n2 = __detail::__abs_r<_Ct>(__n); 15726: return __detail::__gcd>(__m2, __n2); 15726: } 15726: 15726: 15726: template 15726: constexpr common_type_t<_Mn, _Nn> 15726: lcm(_Mn __m, _Nn __n) noexcept 15726: { 15726: static_assert(is_integral_v<_Mn> && is_integral_v<_Nn>, 15726: "std::lcm arguments must be integers"); 15726: static_assert(_Mn(2) == 2 && _Nn(2) == 2, 15726: "std::lcm arguments must not be bool"); 15726: using _Ct = common_type_t<_Mn, _Nn>; 15726: const _Ct __m2 = __detail::__abs_r<_Ct>(__m); 15726: const _Ct __n2 = __detail::__abs_r<_Ct>(__n); 15726: if (__m2 == 0 || __n2 == 0) 15726: return 0; 15726: _Ct __r = __m2 / __detail::__gcd>(__m2, __n2); 15726: 15726: if constexpr (is_signed_v<_Ct>) 15726: if (__is_constant_evaluated()) 15726: return __r * __n2; 15726: 15726: bool __overflow = __builtin_mul_overflow(__r, __n2, &__r); 15726: do { if (std::__is_constant_evaluated() && !bool(!__overflow)) __builtin_unreachable(); } while (false); 15726: return __r; 15726: } 15726: # 284 "/usr/include/c++/13/numeric" 3 15726: template 15726: 15726: _Tp 15726: reduce(_InputIterator __first, _InputIterator __last, _Tp __init, 15726: _BinaryOperation __binary_op) 15726: { 15726: using __ref = typename iterator_traits<_InputIterator>::reference; 15726: static_assert(is_invocable_r_v<_Tp, _BinaryOperation&, _Tp&, __ref>); 15726: static_assert(is_invocable_r_v<_Tp, _BinaryOperation&, __ref, _Tp&>); 15726: static_assert(is_invocable_r_v<_Tp, _BinaryOperation&, _Tp&, _Tp&>); 15726: static_assert(is_invocable_r_v<_Tp, _BinaryOperation&, __ref, __ref>); 15726: if constexpr (__is_random_access_iter<_InputIterator>::value) 15726: { 15726: while ((__last - __first) >= 4) 15726: { 15726: _Tp __v1 = __binary_op(__first[0], __first[1]); 15726: _Tp __v2 = __binary_op(__first[2], __first[3]); 15726: _Tp __v3 = __binary_op(__v1, __v2); 15726: __init = __binary_op(__init, __v3); 15726: __first += 4; 15726: } 15726: } 15726: for (; __first != __last; ++__first) 15726: __init = __binary_op(__init, *__first); 15726: return __init; 15726: } 15726: # 322 "/usr/include/c++/13/numeric" 3 15726: template 15726: 15726: inline _Tp 15726: reduce(_InputIterator __first, _InputIterator __last, _Tp __init) 15726: { return std::reduce(__first, __last, std::move(__init), plus<>()); } 15726: # 339 "/usr/include/c++/13/numeric" 3 15726: template 15726: 15726: inline typename iterator_traits<_InputIterator>::value_type 15726: reduce(_InputIterator __first, _InputIterator __last) 15726: { 15726: using value_type = typename iterator_traits<_InputIterator>::value_type; 15726: return std::reduce(__first, __last, value_type{}, plus<>()); 15726: } 15726: # 366 "/usr/include/c++/13/numeric" 3 15726: template 15726: 15726: _Tp 15726: transform_reduce(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _Tp __init, 15726: _BinaryOperation1 __binary_op1, 15726: _BinaryOperation2 __binary_op2) 15726: { 15726: if constexpr (__and_v<__is_random_access_iter<_InputIterator1>, 15726: __is_random_access_iter<_InputIterator2>>) 15726: { 15726: while ((__last1 - __first1) >= 4) 15726: { 15726: _Tp __v1 = __binary_op1(__binary_op2(__first1[0], __first2[0]), 15726: __binary_op2(__first1[1], __first2[1])); 15726: _Tp __v2 = __binary_op1(__binary_op2(__first1[2], __first2[2]), 15726: __binary_op2(__first1[3], __first2[3])); 15726: _Tp __v3 = __binary_op1(__v1, __v2); 15726: __init = __binary_op1(__init, __v3); 15726: __first1 += 4; 15726: __first2 += 4; 15726: } 15726: } 15726: for (; __first1 != __last1; ++__first1, (void) ++__first2) 15726: __init = __binary_op1(__init, __binary_op2(*__first1, *__first2)); 15726: return __init; 15726: } 15726: # 410 "/usr/include/c++/13/numeric" 3 15726: template 15726: 15726: inline _Tp 15726: transform_reduce(_InputIterator1 __first1, _InputIterator1 __last1, 15726: _InputIterator2 __first2, _Tp __init) 15726: { 15726: return std::transform_reduce(__first1, __last1, __first2, 15726: std::move(__init), 15726: plus<>(), multiplies<>()); 15726: } 15726: # 435 "/usr/include/c++/13/numeric" 3 15726: template 15726: 15726: _Tp 15726: transform_reduce(_InputIterator __first, _InputIterator __last, _Tp __init, 15726: _BinaryOperation __binary_op, _UnaryOperation __unary_op) 15726: { 15726: if constexpr (__is_random_access_iter<_InputIterator>::value) 15726: { 15726: while ((__last - __first) >= 4) 15726: { 15726: _Tp __v1 = __binary_op(__unary_op(__first[0]), 15726: __unary_op(__first[1])); 15726: _Tp __v2 = __binary_op(__unary_op(__first[2]), 15726: __unary_op(__first[3])); 15726: _Tp __v3 = __binary_op(__v1, __v2); 15726: __init = __binary_op(__init, __v3); 15726: __first += 4; 15726: } 15726: } 15726: for (; __first != __last; ++__first) 15726: __init = __binary_op(__init, __unary_op(*__first)); 15726: return __init; 15726: } 15726: # 478 "/usr/include/c++/13/numeric" 3 15726: template 15726: 15726: _OutputIterator 15726: exclusive_scan(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, _Tp __init, 15726: _BinaryOperation __binary_op) 15726: { 15726: while (__first != __last) 15726: { 15726: auto __v = __init; 15726: __init = __binary_op(__init, *__first); 15726: ++__first; 15726: *__result++ = std::move(__v); 15726: } 15726: return __result; 15726: } 15726: # 513 "/usr/include/c++/13/numeric" 3 15726: template 15726: 15726: inline _OutputIterator 15726: exclusive_scan(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, _Tp __init) 15726: { 15726: return std::exclusive_scan(__first, __last, __result, std::move(__init), 15726: plus<>()); 15726: } 15726: # 541 "/usr/include/c++/13/numeric" 3 15726: template 15726: 15726: _OutputIterator 15726: inclusive_scan(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, _BinaryOperation __binary_op, 15726: _Tp __init) 15726: { 15726: for (; __first != __last; ++__first) 15726: *__result++ = __init = __binary_op(__init, *__first); 15726: return __result; 15726: } 15726: # 570 "/usr/include/c++/13/numeric" 3 15726: template 15726: 15726: _OutputIterator 15726: inclusive_scan(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, _BinaryOperation __binary_op) 15726: { 15726: if (__first != __last) 15726: { 15726: auto __init = *__first; 15726: *__result++ = __init; 15726: ++__first; 15726: if (__first != __last) 15726: __result = std::inclusive_scan(__first, __last, __result, 15726: __binary_op, std::move(__init)); 15726: } 15726: return __result; 15726: } 15726: # 604 "/usr/include/c++/13/numeric" 3 15726: template 15726: 15726: inline _OutputIterator 15726: inclusive_scan(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result) 15726: { return std::inclusive_scan(__first, __last, __result, plus<>()); } 15726: # 631 "/usr/include/c++/13/numeric" 3 15726: template 15726: 15726: _OutputIterator 15726: transform_exclusive_scan(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, _Tp __init, 15726: _BinaryOperation __binary_op, 15726: _UnaryOperation __unary_op) 15726: { 15726: while (__first != __last) 15726: { 15726: auto __v = __init; 15726: __init = __binary_op(__init, __unary_op(*__first)); 15726: ++__first; 15726: *__result++ = std::move(__v); 15726: } 15726: return __result; 15726: } 15726: # 670 "/usr/include/c++/13/numeric" 3 15726: template 15726: 15726: _OutputIterator 15726: transform_inclusive_scan(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, 15726: _BinaryOperation __binary_op, 15726: _UnaryOperation __unary_op, 15726: _Tp __init) 15726: { 15726: for (; __first != __last; ++__first) 15726: *__result++ = __init = __binary_op(__init, __unary_op(*__first)); 15726: return __result; 15726: } 15726: # 704 "/usr/include/c++/13/numeric" 3 15726: template 15726: 15726: _OutputIterator 15726: transform_inclusive_scan(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, 15726: _BinaryOperation __binary_op, 15726: _UnaryOperation __unary_op) 15726: { 15726: if (__first != __last) 15726: { 15726: auto __init = __unary_op(*__first); 15726: *__result++ = __init; 15726: ++__first; 15726: if (__first != __last) 15726: __result = std::transform_inclusive_scan(__first, __last, __result, 15726: __binary_op, __unary_op, 15726: std::move(__init)); 15726: } 15726: return __result; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 739 "/usr/include/c++/13/numeric" 3 15726: # 1 "/usr/include/c++/13/pstl/glue_numeric_defs.h" 1 3 15726: # 15 "/usr/include/c++/13/pstl/glue_numeric_defs.h" 3 15726: namespace std 15726: { 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp> 15726: reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init, 15726: _BinaryOperation __binary_op); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp> 15726: reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, 15726: typename iterator_traits<_ForwardIterator>::value_type> 15726: reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp> 15726: transform_reduce(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _Tp __init); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp> 15726: transform_reduce(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 15726: _ForwardIterator2 __first2, _Tp __init, _BinaryOperation1 __binary_op1, 15726: _BinaryOperation2 __binary_op2); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp> 15726: transform_reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init, 15726: _BinaryOperation __binary_op, _UnaryOperation __unary_op); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: exclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 15726: _ForwardIterator2 __result, _Tp __init); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: exclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 15726: _ForwardIterator2 __result, _Tp __init, _BinaryOperation __binary_op); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 15726: _ForwardIterator2 __result); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 15726: _ForwardIterator2 __result, _BinaryOperation __binary_op); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 15726: _ForwardIterator2 __result, _BinaryOperation __binary_op, _Tp __init); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: transform_exclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 15726: _ForwardIterator2 __result, _Tp __init, _BinaryOperation __binary_op, 15726: _UnaryOperation __unary_op); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: transform_inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 15726: _ForwardIterator2 __result, _BinaryOperation __binary_op, _UnaryOperation __unary_op, 15726: _Tp __init); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: transform_inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 15726: _ForwardIterator2 __result, _BinaryOperation __binary_op, _UnaryOperation __unary_op); 15726: 15726: 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: adjacent_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 15726: _ForwardIterator2 __d_first, _BinaryOperation __op); 15726: 15726: template 15726: __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 15726: adjacent_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 15726: _ForwardIterator2 __d_first); 15726: 15726: } 15726: # 740 "/usr/include/c++/13/numeric" 2 3 15726: # 34 "/usr/include/c++/13/bits/random.tcc" 2 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: namespace __detail 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: _Tp 15726: _Mod<_Tp, __m, __a, __c, false, true>:: 15726: __calc(_Tp __x) 15726: { 15726: if (__a == 1) 15726: __x %= __m; 15726: else 15726: { 15726: static const _Tp __q = __m / __a; 15726: static const _Tp __r = __m % __a; 15726: 15726: _Tp __t1 = __a * (__x % __q); 15726: _Tp __t2 = __r * (__x / __q); 15726: if (__t1 >= __t2) 15726: __x = __t1 - __t2; 15726: else 15726: __x = __m - __t2 + __t1; 15726: } 15726: 15726: if (__c != 0) 15726: { 15726: const _Tp __d = __m - __x; 15726: if (__d > __c) 15726: __x += __c; 15726: else 15726: __x = __c - __d; 15726: } 15726: return __x; 15726: } 15726: 15726: template 15726: _OutputIterator 15726: __normalize(_InputIterator __first, _InputIterator __last, 15726: _OutputIterator __result, const _Tp& __factor) 15726: { 15726: for (; __first != __last; ++__first, ++__result) 15726: *__result = *__first / __factor; 15726: return __result; 15726: } 15726: 15726: } 15726: # 116 "/usr/include/c++/13/bits/random.tcc" 3 15726: template 15726: void 15726: linear_congruential_engine<_UIntType, __a, __c, __m>:: 15726: seed(result_type __s) 15726: { 15726: if ((__detail::__mod<_UIntType, __m>(__c) == 0) 15726: && (__detail::__mod<_UIntType, __m>(__s) == 0)) 15726: _M_x = 1; 15726: else 15726: _M_x = __detail::__mod<_UIntType, __m>(__s); 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: template 15726: auto 15726: linear_congruential_engine<_UIntType, __a, __c, __m>:: 15726: seed(_Sseq& __q) 15726: -> _If_seed_seq<_Sseq> 15726: { 15726: const _UIntType __k0 = __m == 0 ? std::numeric_limits<_UIntType>::digits 15726: : std::__lg(__m); 15726: const _UIntType __k = (__k0 + 31) / 32; 15726: uint_least32_t __arr[__k + 3]; 15726: __q.generate(__arr + 0, __arr + __k + 3); 15726: _UIntType __factor = 1u; 15726: _UIntType __sum = 0u; 15726: for (size_t __j = 0; __j < __k; ++__j) 15726: { 15726: __sum += __arr[__j + 3] * __factor; 15726: __factor *= __detail::_Shift<_UIntType, 32>::__value; 15726: } 15726: seed(__sum); 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const linear_congruential_engine<_UIntType, 15726: __a, __c, __m>& __lcr) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left); 15726: __os.fill(__os.widen(' ')); 15726: 15726: __os << __lcr._M_x; 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: linear_congruential_engine<_UIntType, __a, __c, __m>& __lcr) 15726: { 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec); 15726: 15726: __is >> __lcr._M_x; 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: # 320 "/usr/include/c++/13/bits/random.tcc" 3 15726: template 15726: void 15726: mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, 15726: __s, __b, __t, __c, __l, __f>:: 15726: seed(result_type __sd) 15726: { 15726: _M_x[0] = __detail::__mod<_UIntType, 15726: __detail::_Shift<_UIntType, __w>::__value>(__sd); 15726: 15726: for (size_t __i = 1; __i < state_size; ++__i) 15726: { 15726: _UIntType __x = _M_x[__i - 1]; 15726: __x ^= __x >> (__w - 2); 15726: __x *= __f; 15726: __x += __detail::__mod<_UIntType, __n>(__i); 15726: _M_x[__i] = __detail::__mod<_UIntType, 15726: __detail::_Shift<_UIntType, __w>::__value>(__x); 15726: } 15726: _M_p = state_size; 15726: } 15726: 15726: template 15726: template 15726: auto 15726: mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, 15726: __s, __b, __t, __c, __l, __f>:: 15726: seed(_Sseq& __q) 15726: -> _If_seed_seq<_Sseq> 15726: { 15726: const _UIntType __upper_mask = (~_UIntType()) << __r; 15726: const size_t __k = (__w + 31) / 32; 15726: uint_least32_t __arr[__n * __k]; 15726: __q.generate(__arr + 0, __arr + __n * __k); 15726: 15726: bool __zero = true; 15726: for (size_t __i = 0; __i < state_size; ++__i) 15726: { 15726: _UIntType __factor = 1u; 15726: _UIntType __sum = 0u; 15726: for (size_t __j = 0; __j < __k; ++__j) 15726: { 15726: __sum += __arr[__k * __i + __j] * __factor; 15726: __factor *= __detail::_Shift<_UIntType, 32>::__value; 15726: } 15726: _M_x[__i] = __detail::__mod<_UIntType, 15726: __detail::_Shift<_UIntType, __w>::__value>(__sum); 15726: 15726: if (__zero) 15726: { 15726: if (__i == 0) 15726: { 15726: if ((_M_x[0] & __upper_mask) != 0u) 15726: __zero = false; 15726: } 15726: else if (_M_x[__i] != 0u) 15726: __zero = false; 15726: } 15726: } 15726: if (__zero) 15726: _M_x[0] = __detail::_Shift<_UIntType, __w - 1>::__value; 15726: _M_p = state_size; 15726: } 15726: 15726: template 15726: void 15726: mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, 15726: __s, __b, __t, __c, __l, __f>:: 15726: _M_gen_rand(void) 15726: { 15726: const _UIntType __upper_mask = (~_UIntType()) << __r; 15726: const _UIntType __lower_mask = ~__upper_mask; 15726: 15726: for (size_t __k = 0; __k < (__n - __m); ++__k) 15726: { 15726: _UIntType __y = ((_M_x[__k] & __upper_mask) 15726: | (_M_x[__k + 1] & __lower_mask)); 15726: _M_x[__k] = (_M_x[__k + __m] ^ (__y >> 1) 15726: ^ ((__y & 0x01) ? __a : 0)); 15726: } 15726: 15726: for (size_t __k = (__n - __m); __k < (__n - 1); ++__k) 15726: { 15726: _UIntType __y = ((_M_x[__k] & __upper_mask) 15726: | (_M_x[__k + 1] & __lower_mask)); 15726: _M_x[__k] = (_M_x[__k + (__m - __n)] ^ (__y >> 1) 15726: ^ ((__y & 0x01) ? __a : 0)); 15726: } 15726: 15726: _UIntType __y = ((_M_x[__n - 1] & __upper_mask) 15726: | (_M_x[0] & __lower_mask)); 15726: _M_x[__n - 1] = (_M_x[__m - 1] ^ (__y >> 1) 15726: ^ ((__y & 0x01) ? __a : 0)); 15726: _M_p = 0; 15726: } 15726: 15726: template 15726: void 15726: mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, 15726: __s, __b, __t, __c, __l, __f>:: 15726: discard(unsigned long long __z) 15726: { 15726: while (__z > state_size - _M_p) 15726: { 15726: __z -= state_size - _M_p; 15726: _M_gen_rand(); 15726: } 15726: _M_p += __z; 15726: } 15726: 15726: template 15726: typename 15726: mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, 15726: __s, __b, __t, __c, __l, __f>::result_type 15726: mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, 15726: __s, __b, __t, __c, __l, __f>:: 15726: operator()() 15726: { 15726: 15726: if (_M_p >= state_size) 15726: _M_gen_rand(); 15726: 15726: 15726: result_type __z = _M_x[_M_p++]; 15726: __z ^= (__z >> __u) & __d; 15726: __z ^= (__z << __s) & __b; 15726: __z ^= (__z << __t) & __c; 15726: __z ^= (__z >> __l); 15726: 15726: return __z; 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const mersenne_twister_engine<_UIntType, __w, __n, __m, 15726: __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left); 15726: __os.fill(__space); 15726: 15726: for (size_t __i = 0; __i < __n; ++__i) 15726: __os << __x._M_x[__i] << __space; 15726: __os << __x._M_p; 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: mersenne_twister_engine<_UIntType, __w, __n, __m, 15726: __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>& __x) 15726: { 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec | __ios_base::skipws); 15726: 15726: for (size_t __i = 0; __i < __n; ++__i) 15726: __is >> __x._M_x[__i]; 15726: __is >> __x._M_p; 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: # 539 "/usr/include/c++/13/bits/random.tcc" 3 15726: template 15726: void 15726: subtract_with_carry_engine<_UIntType, __w, __s, __r>:: 15726: seed(result_type __value) 15726: { 15726: 15726: 15726: 15726: std::linear_congruential_engine 15726: __lcg(__value == 0u ? default_seed : __value % 2147483563u); 15726: 15726: const size_t __n = (__w + 31) / 32; 15726: 15726: for (size_t __i = 0; __i < long_lag; ++__i) 15726: { 15726: _UIntType __sum = 0u; 15726: _UIntType __factor = 1u; 15726: for (size_t __j = 0; __j < __n; ++__j) 15726: { 15726: __sum += __detail::__mod::__value> 15726: (__lcg()) * __factor; 15726: __factor *= __detail::_Shift<_UIntType, 32>::__value; 15726: } 15726: _M_x[__i] = __detail::__mod<_UIntType, 15726: __detail::_Shift<_UIntType, __w>::__value>(__sum); 15726: } 15726: _M_carry = (_M_x[long_lag - 1] == 0) ? 1 : 0; 15726: _M_p = 0; 15726: } 15726: 15726: template 15726: template 15726: auto 15726: subtract_with_carry_engine<_UIntType, __w, __s, __r>:: 15726: seed(_Sseq& __q) 15726: -> _If_seed_seq<_Sseq> 15726: { 15726: const size_t __k = (__w + 31) / 32; 15726: uint_least32_t __arr[__r * __k]; 15726: __q.generate(__arr + 0, __arr + __r * __k); 15726: 15726: for (size_t __i = 0; __i < long_lag; ++__i) 15726: { 15726: _UIntType __sum = 0u; 15726: _UIntType __factor = 1u; 15726: for (size_t __j = 0; __j < __k; ++__j) 15726: { 15726: __sum += __arr[__k * __i + __j] * __factor; 15726: __factor *= __detail::_Shift<_UIntType, 32>::__value; 15726: } 15726: _M_x[__i] = __detail::__mod<_UIntType, 15726: __detail::_Shift<_UIntType, __w>::__value>(__sum); 15726: } 15726: _M_carry = (_M_x[long_lag - 1] == 0) ? 1 : 0; 15726: _M_p = 0; 15726: } 15726: 15726: template 15726: typename subtract_with_carry_engine<_UIntType, __w, __s, __r>:: 15726: result_type 15726: subtract_with_carry_engine<_UIntType, __w, __s, __r>:: 15726: operator()() 15726: { 15726: 15726: long __ps = _M_p - short_lag; 15726: if (__ps < 0) 15726: __ps += long_lag; 15726: 15726: 15726: 15726: 15726: _UIntType __xi; 15726: if (_M_x[__ps] >= _M_x[_M_p] + _M_carry) 15726: { 15726: __xi = _M_x[__ps] - _M_x[_M_p] - _M_carry; 15726: _M_carry = 0; 15726: } 15726: else 15726: { 15726: __xi = (__detail::_Shift<_UIntType, __w>::__value 15726: - _M_x[_M_p] - _M_carry + _M_x[__ps]); 15726: _M_carry = 1; 15726: } 15726: _M_x[_M_p] = __xi; 15726: 15726: 15726: if (++_M_p >= long_lag) 15726: _M_p = 0; 15726: 15726: return __xi; 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const subtract_with_carry_engine<_UIntType, 15726: __w, __s, __r>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left); 15726: __os.fill(__space); 15726: 15726: for (size_t __i = 0; __i < __r; ++__i) 15726: __os << __x._M_x[__i] << __space; 15726: __os << __x._M_carry << __space << __x._M_p; 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: subtract_with_carry_engine<_UIntType, __w, __s, __r>& __x) 15726: { 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec | __ios_base::skipws); 15726: 15726: for (size_t __i = 0; __i < __r; ++__i) 15726: __is >> __x._M_x[__i]; 15726: __is >> __x._M_carry; 15726: __is >> __x._M_p; 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: # 686 "/usr/include/c++/13/bits/random.tcc" 3 15726: template 15726: typename discard_block_engine<_RandomNumberEngine, 15726: __p, __r>::result_type 15726: discard_block_engine<_RandomNumberEngine, __p, __r>:: 15726: operator()() 15726: { 15726: if (_M_n >= used_block) 15726: { 15726: _M_b.discard(block_size - _M_n); 15726: _M_n = 0; 15726: } 15726: ++_M_n; 15726: return _M_b(); 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const discard_block_engine<_RandomNumberEngine, 15726: __p, __r>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left); 15726: __os.fill(__space); 15726: 15726: __os << __x.base() << __space << __x._M_n; 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: discard_block_engine<_RandomNumberEngine, __p, __r>& __x) 15726: { 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec | __ios_base::skipws); 15726: 15726: __is >> __x._M_b >> __x._M_n; 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: 15726: template 15726: typename independent_bits_engine<_RandomNumberEngine, __w, _UIntType>:: 15726: result_type 15726: independent_bits_engine<_RandomNumberEngine, __w, _UIntType>:: 15726: operator()() 15726: { 15726: typedef typename _RandomNumberEngine::result_type _Eresult_type; 15726: const _Eresult_type __r 15726: = (_M_b.max() - _M_b.min() < std::numeric_limits<_Eresult_type>::max() 15726: ? _M_b.max() - _M_b.min() + 1 : 0); 15726: const unsigned __edig = std::numeric_limits<_Eresult_type>::digits; 15726: const unsigned __m = __r ? std::__lg(__r) : __edig; 15726: 15726: typedef typename std::common_type<_Eresult_type, result_type>::type 15726: __ctype; 15726: const unsigned __cdig = std::numeric_limits<__ctype>::digits; 15726: 15726: unsigned __n, __n0; 15726: __ctype __s0, __s1, __y0, __y1; 15726: 15726: for (size_t __i = 0; __i < 2; ++__i) 15726: { 15726: __n = (__w + __m - 1) / __m + __i; 15726: __n0 = __n - __w % __n; 15726: const unsigned __w0 = __w / __n; 15726: 15726: __s0 = 0; 15726: __s1 = 0; 15726: if (__w0 < __cdig) 15726: { 15726: __s0 = __ctype(1) << __w0; 15726: __s1 = __s0 << 1; 15726: } 15726: 15726: __y0 = 0; 15726: __y1 = 0; 15726: if (__r) 15726: { 15726: __y0 = __s0 * (__r / __s0); 15726: if (__s1) 15726: __y1 = __s1 * (__r / __s1); 15726: 15726: if (__r - __y0 <= __y0 / __n) 15726: break; 15726: } 15726: else 15726: break; 15726: } 15726: 15726: result_type __sum = 0; 15726: for (size_t __k = 0; __k < __n0; ++__k) 15726: { 15726: __ctype __u; 15726: do 15726: __u = _M_b() - _M_b.min(); 15726: while (__y0 && __u >= __y0); 15726: __sum = __s0 * __sum + (__s0 ? __u % __s0 : __u); 15726: } 15726: for (size_t __k = __n0; __k < __n; ++__k) 15726: { 15726: __ctype __u; 15726: do 15726: __u = _M_b() - _M_b.min(); 15726: while (__y1 && __u >= __y1); 15726: __sum = __s1 * __sum + (__s1 ? __u % __s1 : __u); 15726: } 15726: return __sum; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace __detail 15726: { 15726: 15726: template 15726: constexpr bool 15726: __representable_as_double(_Tp __x) noexcept 15726: { 15726: static_assert(numeric_limits<_Tp>::is_integer, ""); 15726: static_assert(!numeric_limits<_Tp>::is_signed, ""); 15726: 15726: return (__x <= (1ull << 53)) 15726: 15726: || (!(__x & 1) && __detail::__representable_as_double(__x >> 1)); 15726: } 15726: 15726: 15726: template 15726: constexpr bool 15726: __p1_representable_as_double(_Tp __x) noexcept 15726: { 15726: static_assert(numeric_limits<_Tp>::is_integer, ""); 15726: static_assert(!numeric_limits<_Tp>::is_signed, ""); 15726: return numeric_limits<_Tp>::digits < 53 15726: || (bool(__x + 1u) 15726: && __detail::__representable_as_double(__x + 1u)); 15726: } 15726: } 15726: 15726: template 15726: typename shuffle_order_engine<_RandomNumberEngine, __k>::result_type 15726: shuffle_order_engine<_RandomNumberEngine, __k>:: 15726: operator()() 15726: { 15726: constexpr result_type __range = max() - min(); 15726: size_t __j = __k; 15726: const result_type __y = _M_y - min(); 15726: 15726: if constexpr (__detail::__p1_representable_as_double(__range)) 15726: __j *= __y / (__range + 1.0); 15726: else 15726: __j *= __y / (__range + 1.0L); 15726: _M_y = _M_v[__j]; 15726: _M_v[__j] = _M_b(); 15726: 15726: return _M_y; 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const shuffle_order_engine<_RandomNumberEngine, __k>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left); 15726: __os.fill(__space); 15726: 15726: __os << __x.base(); 15726: for (size_t __i = 0; __i < __k; ++__i) 15726: __os << __space << __x._M_v[__i]; 15726: __os << __space << __x._M_y; 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: shuffle_order_engine<_RandomNumberEngine, __k>& __x) 15726: { 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec | __ios_base::skipws); 15726: 15726: __is >> __x._M_b; 15726: for (size_t __i = 0; __i < __k; ++__i) 15726: __is >> __x._M_v[__i]; 15726: __is >> __x._M_y; 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const uniform_int_distribution<_IntType>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__space); 15726: 15726: __os << __x.a() << __space << __x.b(); 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: uniform_int_distribution<_IntType>& __x) 15726: { 15726: using param_type 15726: = typename uniform_int_distribution<_IntType>::param_type; 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec | __ios_base::skipws); 15726: 15726: _IntType __a, __b; 15726: if (__is >> __a >> __b) 15726: __x.param(param_type(__a, __b)); 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: 15726: template 15726: template 15726: void 15726: uniform_real_distribution<_RealType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 15726: __aurng(__urng); 15726: auto __range = __p.b() - __p.a(); 15726: while (__f != __t) 15726: *__f++ = __aurng() * __range + __p.a(); 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const uniform_real_distribution<_RealType>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const std::streamsize __precision = __os.precision(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__space); 15726: __os.precision(std::numeric_limits<_RealType>::max_digits10); 15726: 15726: __os << __x.a() << __space << __x.b(); 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: __os.precision(__precision); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: uniform_real_distribution<_RealType>& __x) 15726: { 15726: using param_type 15726: = typename uniform_real_distribution<_RealType>::param_type; 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::skipws); 15726: 15726: _RealType __a, __b; 15726: if (__is >> __a >> __b) 15726: __x.param(param_type(__a, __b)); 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: 15726: template 15726: void 15726: std::bernoulli_distribution:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 15726: __aurng(__urng); 15726: auto __limit = __p.p() * (__aurng.max() - __aurng.min()); 15726: 15726: while (__f != __t) 15726: *__f++ = (__aurng() - __aurng.min()) < __limit; 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const bernoulli_distribution& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const std::streamsize __precision = __os.precision(); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__os.widen(' ')); 15726: __os.precision(std::numeric_limits::max_digits10); 15726: 15726: __os << __x.p(); 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: __os.precision(__precision); 15726: return __os; 15726: } 15726: 15726: 15726: template 15726: template 15726: typename geometric_distribution<_IntType>::result_type 15726: geometric_distribution<_IntType>:: 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __param) 15726: { 15726: 15726: 15726: const double __naf = 15726: (1 - std::numeric_limits::epsilon()) / 2; 15726: 15726: const double __thr = 15726: std::numeric_limits<_IntType>::max() + __naf; 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 15726: __aurng(__urng); 15726: 15726: double __cand; 15726: do 15726: __cand = std::floor(std::log(1.0 - __aurng()) / __param._M_log_1_p); 15726: while (__cand >= __thr); 15726: 15726: return result_type(__cand + __naf); 15726: } 15726: 15726: template 15726: template 15726: void 15726: geometric_distribution<_IntType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __param) 15726: { 15726: 15726: 15726: 15726: const double __naf = 15726: (1 - std::numeric_limits::epsilon()) / 2; 15726: 15726: const double __thr = 15726: std::numeric_limits<_IntType>::max() + __naf; 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 15726: __aurng(__urng); 15726: 15726: while (__f != __t) 15726: { 15726: double __cand; 15726: do 15726: __cand = std::floor(std::log(1.0 - __aurng()) 15726: / __param._M_log_1_p); 15726: while (__cand >= __thr); 15726: 15726: *__f++ = __cand + __naf; 15726: } 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const geometric_distribution<_IntType>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const std::streamsize __precision = __os.precision(); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__os.widen(' ')); 15726: __os.precision(std::numeric_limits::max_digits10); 15726: 15726: __os << __x.p(); 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: __os.precision(__precision); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: geometric_distribution<_IntType>& __x) 15726: { 15726: using param_type = typename geometric_distribution<_IntType>::param_type; 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::skipws); 15726: 15726: double __p; 15726: if (__is >> __p) 15726: __x.param(param_type(__p)); 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: 15726: template 15726: template 15726: typename negative_binomial_distribution<_IntType>::result_type 15726: negative_binomial_distribution<_IntType>:: 15726: operator()(_UniformRandomNumberGenerator& __urng) 15726: { 15726: const double __y = _M_gd(__urng); 15726: 15726: 15726: std::poisson_distribution __poisson(__y); 15726: return __poisson(__urng); 15726: } 15726: 15726: template 15726: template 15726: typename negative_binomial_distribution<_IntType>::result_type 15726: negative_binomial_distribution<_IntType>:: 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: typedef typename std::gamma_distribution::param_type 15726: param_type; 15726: 15726: const double __y = 15726: _M_gd(__urng, param_type(__p.k(), (1.0 - __p.p()) / __p.p())); 15726: 15726: std::poisson_distribution __poisson(__y); 15726: return __poisson(__urng); 15726: } 15726: 15726: template 15726: template 15726: void 15726: negative_binomial_distribution<_IntType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { 15726: 15726: while (__f != __t) 15726: { 15726: const double __y = _M_gd(__urng); 15726: 15726: 15726: std::poisson_distribution __poisson(__y); 15726: *__f++ = __poisson(__urng); 15726: } 15726: } 15726: 15726: template 15726: template 15726: void 15726: negative_binomial_distribution<_IntType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: 15726: typename std::gamma_distribution::param_type 15726: __p2(__p.k(), (1.0 - __p.p()) / __p.p()); 15726: 15726: while (__f != __t) 15726: { 15726: const double __y = _M_gd(__urng, __p2); 15726: 15726: std::poisson_distribution __poisson(__y); 15726: *__f++ = __poisson(__urng); 15726: } 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const negative_binomial_distribution<_IntType>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const std::streamsize __precision = __os.precision(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__os.widen(' ')); 15726: __os.precision(std::numeric_limits::max_digits10); 15726: 15726: __os << __x.k() << __space << __x.p() 15726: << __space << __x._M_gd; 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: __os.precision(__precision); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: negative_binomial_distribution<_IntType>& __x) 15726: { 15726: using param_type 15726: = typename negative_binomial_distribution<_IntType>::param_type; 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::skipws); 15726: 15726: _IntType __k; 15726: double __p; 15726: if (__is >> __k >> __p >> __x._M_gd) 15726: __x.param(param_type(__k, __p)); 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: 15726: template 15726: void 15726: poisson_distribution<_IntType>::param_type:: 15726: _M_initialize() 15726: { 15726: 15726: if (_M_mean >= 12) 15726: { 15726: const double __m = std::floor(_M_mean); 15726: _M_lm_thr = std::log(_M_mean); 15726: _M_lfm = std::lgamma(__m + 1); 15726: _M_sm = std::sqrt(__m); 15726: 15726: const double __pi_4 = 0.7853981633974483096156608458198757L; 15726: const double __dx = std::sqrt(2 * __m * std::log(32 * __m 15726: / __pi_4)); 15726: _M_d = std::round(std::max(6.0, std::min(__m, __dx))); 15726: const double __cx = 2 * __m + _M_d; 15726: _M_scx = std::sqrt(__cx / 2); 15726: _M_1cx = 1 / __cx; 15726: 15726: _M_c2b = std::sqrt(__pi_4 * __cx) * std::exp(_M_1cx); 15726: _M_cb = 2 * __cx * std::exp(-_M_d * _M_1cx * (1 + _M_d / 2)) 15726: / _M_d; 15726: } 15726: else 15726: 15726: _M_lm_thr = std::exp(-_M_mean); 15726: } 15726: # 1308 "/usr/include/c++/13/bits/random.tcc" 3 15726: template 15726: template 15726: typename poisson_distribution<_IntType>::result_type 15726: poisson_distribution<_IntType>:: 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __param) 15726: { 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 15726: __aurng(__urng); 15726: 15726: if (__param.mean() >= 12) 15726: { 15726: double __x; 15726: 15726: 15726: const double __naf = 15726: (1 - std::numeric_limits::epsilon()) / 2; 15726: const double __thr = 15726: std::numeric_limits<_IntType>::max() + __naf; 15726: 15726: const double __m = std::floor(__param.mean()); 15726: 15726: const double __spi_2 = 1.2533141373155002512078826424055226L; 15726: const double __c1 = __param._M_sm * __spi_2; 15726: const double __c2 = __param._M_c2b + __c1; 15726: const double __c3 = __c2 + 1; 15726: const double __c4 = __c3 + 1; 15726: 15726: const double __178 = 0.0128205128205128205128205128205128L; 15726: 15726: const double __e178 = 1.0129030479320018583185514777512983L; 15726: const double __c5 = __c4 + __e178; 15726: const double __c = __param._M_cb + __c5; 15726: const double __2cx = 2 * (2 * __m + __param._M_d); 15726: 15726: bool __reject = true; 15726: do 15726: { 15726: const double __u = __c * __aurng(); 15726: const double __e = -std::log(1.0 - __aurng()); 15726: 15726: double __w = 0.0; 15726: 15726: if (__u <= __c1) 15726: { 15726: const double __n = _M_nd(__urng); 15726: const double __y = -std::abs(__n) * __param._M_sm - 1; 15726: __x = std::floor(__y); 15726: __w = -__n * __n / 2; 15726: if (__x < -__m) 15726: continue; 15726: } 15726: else if (__u <= __c2) 15726: { 15726: const double __n = _M_nd(__urng); 15726: const double __y = 1 + std::abs(__n) * __param._M_scx; 15726: __x = std::ceil(__y); 15726: __w = __y * (2 - __y) * __param._M_1cx; 15726: if (__x > __param._M_d) 15726: continue; 15726: } 15726: else if (__u <= __c3) 15726: 15726: 15726: __x = -1; 15726: else if (__u <= __c4) 15726: __x = 0; 15726: else if (__u <= __c5) 15726: { 15726: __x = 1; 15726: 15726: __w = __178; 15726: } 15726: else 15726: { 15726: const double __v = -std::log(1.0 - __aurng()); 15726: const double __y = __param._M_d 15726: + __v * __2cx / __param._M_d; 15726: __x = std::ceil(__y); 15726: __w = -__param._M_d * __param._M_1cx * (1 + __y / 2); 15726: } 15726: 15726: __reject = (__w - __e - __x * __param._M_lm_thr 15726: > __param._M_lfm - std::lgamma(__x + __m + 1)); 15726: 15726: __reject |= __x + __m >= __thr; 15726: 15726: } while (__reject); 15726: 15726: return result_type(__x + __m + __naf); 15726: } 15726: else 15726: 15726: { 15726: _IntType __x = 0; 15726: double __prod = 1.0; 15726: 15726: do 15726: { 15726: __prod *= __aurng(); 15726: __x += 1; 15726: } 15726: while (__prod > __param._M_lm_thr); 15726: 15726: return __x - 1; 15726: } 15726: } 15726: 15726: template 15726: template 15726: void 15726: poisson_distribution<_IntType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __param) 15726: { 15726: 15726: 15726: while (__f != __t) 15726: *__f++ = this->operator()(__urng, __param); 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const poisson_distribution<_IntType>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const std::streamsize __precision = __os.precision(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__space); 15726: __os.precision(std::numeric_limits::max_digits10); 15726: 15726: __os << __x.mean() << __space << __x._M_nd; 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: __os.precision(__precision); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: poisson_distribution<_IntType>& __x) 15726: { 15726: using param_type = typename poisson_distribution<_IntType>::param_type; 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::skipws); 15726: 15726: double __mean; 15726: if (__is >> __mean >> __x._M_nd) 15726: __x.param(param_type(__mean)); 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: 15726: template 15726: void 15726: binomial_distribution<_IntType>::param_type:: 15726: _M_initialize() 15726: { 15726: const double __p12 = _M_p <= 0.5 ? _M_p : 1.0 - _M_p; 15726: 15726: _M_easy = true; 15726: 15726: 15726: if (_M_t * __p12 >= 8) 15726: { 15726: _M_easy = false; 15726: const double __np = std::floor(_M_t * __p12); 15726: const double __pa = __np / _M_t; 15726: const double __1p = 1 - __pa; 15726: 15726: const double __pi_4 = 0.7853981633974483096156608458198757L; 15726: const double __d1x = 15726: std::sqrt(__np * __1p * std::log(32 * __np 15726: / (81 * __pi_4 * __1p))); 15726: _M_d1 = std::round(std::max(1.0, __d1x)); 15726: const double __d2x = 15726: std::sqrt(__np * __1p * std::log(32 * _M_t * __1p 15726: / (__pi_4 * __pa))); 15726: _M_d2 = std::round(std::max(1.0, __d2x)); 15726: 15726: 15726: const double __spi_2 = 1.2533141373155002512078826424055226L; 15726: _M_s1 = std::sqrt(__np * __1p) * (1 + _M_d1 / (4 * __np)); 15726: _M_s2 = std::sqrt(__np * __1p) * (1 + _M_d2 / (4 * (_M_t * __1p))); 15726: _M_c = 2 * _M_d1 / __np; 15726: _M_a1 = std::exp(_M_c) * _M_s1 * __spi_2; 15726: const double __a12 = _M_a1 + _M_s2 * __spi_2; 15726: const double __s1s = _M_s1 * _M_s1; 15726: _M_a123 = __a12 + (std::exp(_M_d1 / (_M_t * __1p)) 15726: * 2 * __s1s / _M_d1 15726: * std::exp(-_M_d1 * _M_d1 / (2 * __s1s))); 15726: const double __s2s = _M_s2 * _M_s2; 15726: _M_s = (_M_a123 + 2 * __s2s / _M_d2 15726: * std::exp(-_M_d2 * _M_d2 / (2 * __s2s))); 15726: _M_lf = (std::lgamma(__np + 1) 15726: + std::lgamma(_M_t - __np + 1)); 15726: _M_lp1p = std::log(__pa / __1p); 15726: 15726: _M_q = -std::log(1 - (__p12 - __pa) / __1p); 15726: } 15726: else 15726: 15726: _M_q = -std::log(1 - __p12); 15726: } 15726: 15726: template 15726: template 15726: typename binomial_distribution<_IntType>::result_type 15726: binomial_distribution<_IntType>:: 15726: _M_waiting(_UniformRandomNumberGenerator& __urng, 15726: _IntType __t, double __q) 15726: { 15726: _IntType __x = 0; 15726: double __sum = 0.0; 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 15726: __aurng(__urng); 15726: 15726: do 15726: { 15726: if (__t == __x) 15726: return __x; 15726: const double __e = -std::log(1.0 - __aurng()); 15726: __sum += __e / (__t - __x); 15726: __x += 1; 15726: } 15726: while (__sum <= __q); 15726: 15726: return __x - 1; 15726: } 15726: # 1563 "/usr/include/c++/13/bits/random.tcc" 3 15726: template 15726: template 15726: typename binomial_distribution<_IntType>::result_type 15726: binomial_distribution<_IntType>:: 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __param) 15726: { 15726: result_type __ret; 15726: const _IntType __t = __param.t(); 15726: const double __p = __param.p(); 15726: const double __p12 = __p <= 0.5 ? __p : 1.0 - __p; 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 15726: __aurng(__urng); 15726: 15726: 15726: if (!__param._M_easy) 15726: { 15726: double __x; 15726: 15726: 15726: const double __naf = 15726: (1 - std::numeric_limits::epsilon()) / 2; 15726: const double __thr = 15726: std::numeric_limits<_IntType>::max() + __naf; 15726: 15726: const double __np = std::floor(__t * __p12); 15726: 15726: 15726: const double __spi_2 = 1.2533141373155002512078826424055226L; 15726: const double __a1 = __param._M_a1; 15726: const double __a12 = __a1 + __param._M_s2 * __spi_2; 15726: const double __a123 = __param._M_a123; 15726: const double __s1s = __param._M_s1 * __param._M_s1; 15726: const double __s2s = __param._M_s2 * __param._M_s2; 15726: 15726: bool __reject; 15726: do 15726: { 15726: const double __u = __param._M_s * __aurng(); 15726: 15726: double __v; 15726: 15726: if (__u <= __a1) 15726: { 15726: const double __n = _M_nd(__urng); 15726: const double __y = __param._M_s1 * std::abs(__n); 15726: __reject = __y >= __param._M_d1; 15726: if (!__reject) 15726: { 15726: const double __e = -std::log(1.0 - __aurng()); 15726: __x = std::floor(__y); 15726: __v = -__e - __n * __n / 2 + __param._M_c; 15726: } 15726: } 15726: else if (__u <= __a12) 15726: { 15726: const double __n = _M_nd(__urng); 15726: const double __y = __param._M_s2 * std::abs(__n); 15726: __reject = __y >= __param._M_d2; 15726: if (!__reject) 15726: { 15726: const double __e = -std::log(1.0 - __aurng()); 15726: __x = std::floor(-__y); 15726: __v = -__e - __n * __n / 2; 15726: } 15726: } 15726: else if (__u <= __a123) 15726: { 15726: const double __e1 = -std::log(1.0 - __aurng()); 15726: const double __e2 = -std::log(1.0 - __aurng()); 15726: 15726: const double __y = __param._M_d1 15726: + 2 * __s1s * __e1 / __param._M_d1; 15726: __x = std::floor(__y); 15726: __v = (-__e2 + __param._M_d1 * (1 / (__t - __np) 15726: -__y / (2 * __s1s))); 15726: __reject = false; 15726: } 15726: else 15726: { 15726: const double __e1 = -std::log(1.0 - __aurng()); 15726: const double __e2 = -std::log(1.0 - __aurng()); 15726: 15726: const double __y = __param._M_d2 15726: + 2 * __s2s * __e1 / __param._M_d2; 15726: __x = std::floor(-__y); 15726: __v = -__e2 - __param._M_d2 * __y / (2 * __s2s); 15726: __reject = false; 15726: } 15726: 15726: __reject = __reject || __x < -__np || __x > __t - __np; 15726: if (!__reject) 15726: { 15726: const double __lfx = 15726: std::lgamma(__np + __x + 1) 15726: + std::lgamma(__t - (__np + __x) + 1); 15726: __reject = __v > __param._M_lf - __lfx 15726: + __x * __param._M_lp1p; 15726: } 15726: 15726: __reject |= __x + __np >= __thr; 15726: } 15726: while (__reject); 15726: 15726: __x += __np + __naf; 15726: 15726: const _IntType __z = _M_waiting(__urng, __t - _IntType(__x), 15726: __param._M_q); 15726: __ret = _IntType(__x) + __z; 15726: } 15726: else 15726: 15726: __ret = _M_waiting(__urng, __t, __param._M_q); 15726: 15726: if (__p12 != __p) 15726: __ret = __t - __ret; 15726: return __ret; 15726: } 15726: 15726: template 15726: template 15726: void 15726: binomial_distribution<_IntType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __param) 15726: { 15726: 15726: 15726: while (__f != __t) 15726: *__f++ = this->operator()(__urng, __param); 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const binomial_distribution<_IntType>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const std::streamsize __precision = __os.precision(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__space); 15726: __os.precision(std::numeric_limits::max_digits10); 15726: 15726: __os << __x.t() << __space << __x.p() 15726: << __space << __x._M_nd; 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: __os.precision(__precision); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: binomial_distribution<_IntType>& __x) 15726: { 15726: using param_type = typename binomial_distribution<_IntType>::param_type; 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec | __ios_base::skipws); 15726: 15726: _IntType __t; 15726: double __p; 15726: if (__is >> __t >> __p >> __x._M_nd) 15726: __x.param(param_type(__t, __p)); 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: 15726: template 15726: template 15726: void 15726: std::exponential_distribution<_RealType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 15726: __aurng(__urng); 15726: while (__f != __t) 15726: *__f++ = -std::log(result_type(1) - __aurng()) / __p.lambda(); 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const exponential_distribution<_RealType>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const std::streamsize __precision = __os.precision(); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__os.widen(' ')); 15726: __os.precision(std::numeric_limits<_RealType>::max_digits10); 15726: 15726: __os << __x.lambda(); 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: __os.precision(__precision); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: exponential_distribution<_RealType>& __x) 15726: { 15726: using param_type 15726: = typename exponential_distribution<_RealType>::param_type; 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec | __ios_base::skipws); 15726: 15726: _RealType __lambda; 15726: if (__is >> __lambda) 15726: __x.param(param_type(__lambda)); 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: # 1809 "/usr/include/c++/13/bits/random.tcc" 3 15726: template 15726: template 15726: typename normal_distribution<_RealType>::result_type 15726: normal_distribution<_RealType>:: 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __param) 15726: { 15726: result_type __ret; 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 15726: __aurng(__urng); 15726: 15726: if (_M_saved_available) 15726: { 15726: _M_saved_available = false; 15726: __ret = _M_saved; 15726: } 15726: else 15726: { 15726: result_type __x, __y, __r2; 15726: do 15726: { 15726: __x = result_type(2.0) * __aurng() - 1.0; 15726: __y = result_type(2.0) * __aurng() - 1.0; 15726: __r2 = __x * __x + __y * __y; 15726: } 15726: while (__r2 > 1.0 || __r2 == 0.0); 15726: 15726: const result_type __mult = std::sqrt(-2 * std::log(__r2) / __r2); 15726: _M_saved = __x * __mult; 15726: _M_saved_available = true; 15726: __ret = __y * __mult; 15726: } 15726: 15726: __ret = __ret * __param.stddev() + __param.mean(); 15726: return __ret; 15726: } 15726: 15726: template 15726: template 15726: void 15726: normal_distribution<_RealType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __param) 15726: { 15726: 15726: 15726: if (__f == __t) 15726: return; 15726: 15726: if (_M_saved_available) 15726: { 15726: _M_saved_available = false; 15726: *__f++ = _M_saved * __param.stddev() + __param.mean(); 15726: 15726: if (__f == __t) 15726: return; 15726: } 15726: 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 15726: __aurng(__urng); 15726: 15726: while (__f + 1 < __t) 15726: { 15726: result_type __x, __y, __r2; 15726: do 15726: { 15726: __x = result_type(2.0) * __aurng() - 1.0; 15726: __y = result_type(2.0) * __aurng() - 1.0; 15726: __r2 = __x * __x + __y * __y; 15726: } 15726: while (__r2 > 1.0 || __r2 == 0.0); 15726: 15726: const result_type __mult = std::sqrt(-2 * std::log(__r2) / __r2); 15726: *__f++ = __y * __mult * __param.stddev() + __param.mean(); 15726: *__f++ = __x * __mult * __param.stddev() + __param.mean(); 15726: } 15726: 15726: if (__f != __t) 15726: { 15726: result_type __x, __y, __r2; 15726: do 15726: { 15726: __x = result_type(2.0) * __aurng() - 1.0; 15726: __y = result_type(2.0) * __aurng() - 1.0; 15726: __r2 = __x * __x + __y * __y; 15726: } 15726: while (__r2 > 1.0 || __r2 == 0.0); 15726: 15726: const result_type __mult = std::sqrt(-2 * std::log(__r2) / __r2); 15726: _M_saved = __x * __mult; 15726: _M_saved_available = true; 15726: *__f = __y * __mult * __param.stddev() + __param.mean(); 15726: } 15726: } 15726: 15726: template 15726: bool 15726: operator==(const std::normal_distribution<_RealType>& __d1, 15726: const std::normal_distribution<_RealType>& __d2) 15726: { 15726: if (__d1._M_param == __d2._M_param 15726: && __d1._M_saved_available == __d2._M_saved_available) 15726: return __d1._M_saved_available ? __d1._M_saved == __d2._M_saved : true; 15726: else 15726: return false; 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const normal_distribution<_RealType>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const std::streamsize __precision = __os.precision(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__space); 15726: __os.precision(std::numeric_limits<_RealType>::max_digits10); 15726: 15726: __os << __x.mean() << __space << __x.stddev() 15726: << __space << __x._M_saved_available; 15726: if (__x._M_saved_available) 15726: __os << __space << __x._M_saved; 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: __os.precision(__precision); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: normal_distribution<_RealType>& __x) 15726: { 15726: using param_type = typename normal_distribution<_RealType>::param_type; 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec | __ios_base::skipws); 15726: 15726: double __mean, __stddev; 15726: bool __saved_avail; 15726: if (__is >> __mean >> __stddev >> __saved_avail) 15726: { 15726: if (!__saved_avail || (__is >> __x._M_saved)) 15726: { 15726: __x._M_saved_available = __saved_avail; 15726: __x.param(param_type(__mean, __stddev)); 15726: } 15726: } 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: 15726: template 15726: template 15726: void 15726: lognormal_distribution<_RealType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: 15726: while (__f != __t) 15726: *__f++ = std::exp(__p.s() * _M_nd(__urng) + __p.m()); 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const lognormal_distribution<_RealType>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const std::streamsize __precision = __os.precision(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__space); 15726: __os.precision(std::numeric_limits<_RealType>::max_digits10); 15726: 15726: __os << __x.m() << __space << __x.s() 15726: << __space << __x._M_nd; 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: __os.precision(__precision); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: lognormal_distribution<_RealType>& __x) 15726: { 15726: using param_type 15726: = typename lognormal_distribution<_RealType>::param_type; 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec | __ios_base::skipws); 15726: 15726: _RealType __m, __s; 15726: if (__is >> __m >> __s >> __x._M_nd) 15726: __x.param(param_type(__m, __s)); 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: template 15726: template 15726: void 15726: std::chi_squared_distribution<_RealType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { 15726: 15726: while (__f != __t) 15726: *__f++ = 2 * _M_gd(__urng); 15726: } 15726: 15726: template 15726: template 15726: void 15726: std::chi_squared_distribution<_RealType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const typename 15726: std::gamma_distribution::param_type& __p) 15726: { 15726: 15726: while (__f != __t) 15726: *__f++ = 2 * _M_gd(__urng, __p); 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const chi_squared_distribution<_RealType>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const std::streamsize __precision = __os.precision(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__space); 15726: __os.precision(std::numeric_limits<_RealType>::max_digits10); 15726: 15726: __os << __x.n() << __space << __x._M_gd; 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: __os.precision(__precision); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: chi_squared_distribution<_RealType>& __x) 15726: { 15726: using param_type 15726: = typename chi_squared_distribution<_RealType>::param_type; 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec | __ios_base::skipws); 15726: 15726: _RealType __n; 15726: if (__is >> __n >> __x._M_gd) 15726: __x.param(param_type(__n)); 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: 15726: template 15726: template 15726: typename cauchy_distribution<_RealType>::result_type 15726: cauchy_distribution<_RealType>:: 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 15726: __aurng(__urng); 15726: _RealType __u; 15726: do 15726: __u = __aurng(); 15726: while (__u == 0.5); 15726: 15726: const _RealType __pi = 3.1415926535897932384626433832795029L; 15726: return __p.a() + __p.b() * std::tan(__pi * __u); 15726: } 15726: 15726: template 15726: template 15726: void 15726: cauchy_distribution<_RealType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: 15726: const _RealType __pi = 3.1415926535897932384626433832795029L; 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 15726: __aurng(__urng); 15726: while (__f != __t) 15726: { 15726: _RealType __u; 15726: do 15726: __u = __aurng(); 15726: while (__u == 0.5); 15726: 15726: *__f++ = __p.a() + __p.b() * std::tan(__pi * __u); 15726: } 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const cauchy_distribution<_RealType>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const std::streamsize __precision = __os.precision(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__space); 15726: __os.precision(std::numeric_limits<_RealType>::max_digits10); 15726: 15726: __os << __x.a() << __space << __x.b(); 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: __os.precision(__precision); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: cauchy_distribution<_RealType>& __x) 15726: { 15726: using param_type = typename cauchy_distribution<_RealType>::param_type; 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec | __ios_base::skipws); 15726: 15726: _RealType __a, __b; 15726: if (__is >> __a >> __b) 15726: __x.param(param_type(__a, __b)); 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: 15726: template 15726: template 15726: void 15726: std::fisher_f_distribution<_RealType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { 15726: 15726: while (__f != __t) 15726: *__f++ = ((_M_gd_x(__urng) * n()) / (_M_gd_y(__urng) * m())); 15726: } 15726: 15726: template 15726: template 15726: void 15726: std::fisher_f_distribution<_RealType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: 15726: typedef typename std::gamma_distribution::param_type 15726: param_type; 15726: param_type __p1(__p.m() / 2); 15726: param_type __p2(__p.n() / 2); 15726: while (__f != __t) 15726: *__f++ = ((_M_gd_x(__urng, __p1) * n()) 15726: / (_M_gd_y(__urng, __p2) * m())); 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const fisher_f_distribution<_RealType>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const std::streamsize __precision = __os.precision(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__space); 15726: __os.precision(std::numeric_limits<_RealType>::max_digits10); 15726: 15726: __os << __x.m() << __space << __x.n() 15726: << __space << __x._M_gd_x << __space << __x._M_gd_y; 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: __os.precision(__precision); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: fisher_f_distribution<_RealType>& __x) 15726: { 15726: using param_type 15726: = typename fisher_f_distribution<_RealType>::param_type; 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec | __ios_base::skipws); 15726: 15726: _RealType __m, __n; 15726: if (__is >> __m >> __n >> __x._M_gd_x >> __x._M_gd_y) 15726: __x.param(param_type(__m, __n)); 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: 15726: template 15726: template 15726: void 15726: std::student_t_distribution<_RealType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng) 15726: { 15726: 15726: while (__f != __t) 15726: *__f++ = _M_nd(__urng) * std::sqrt(n() / _M_gd(__urng)); 15726: } 15726: 15726: template 15726: template 15726: void 15726: std::student_t_distribution<_RealType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: 15726: typename std::gamma_distribution::param_type 15726: __p2(__p.n() / 2, 2); 15726: while (__f != __t) 15726: *__f++ = _M_nd(__urng) * std::sqrt(__p.n() / _M_gd(__urng, __p2)); 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const student_t_distribution<_RealType>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const std::streamsize __precision = __os.precision(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__space); 15726: __os.precision(std::numeric_limits<_RealType>::max_digits10); 15726: 15726: __os << __x.n() << __space << __x._M_nd << __space << __x._M_gd; 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: __os.precision(__precision); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: student_t_distribution<_RealType>& __x) 15726: { 15726: using param_type 15726: = typename student_t_distribution<_RealType>::param_type; 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec | __ios_base::skipws); 15726: 15726: _RealType __n; 15726: if (__is >> __n >> __x._M_nd >> __x._M_gd) 15726: __x.param(param_type(__n)); 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: 15726: template 15726: void 15726: gamma_distribution<_RealType>::param_type:: 15726: _M_initialize() 15726: { 15726: _M_malpha = _M_alpha < 1.0 ? _M_alpha + _RealType(1.0) : _M_alpha; 15726: 15726: const _RealType __a1 = _M_malpha - _RealType(1.0) / _RealType(3.0); 15726: _M_a2 = _RealType(1.0) / std::sqrt(_RealType(9.0) * __a1); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: template 15726: typename gamma_distribution<_RealType>::result_type 15726: gamma_distribution<_RealType>:: 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __param) 15726: { 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 15726: __aurng(__urng); 15726: 15726: result_type __u, __v, __n; 15726: const result_type __a1 = (__param._M_malpha 15726: - _RealType(1.0) / _RealType(3.0)); 15726: 15726: do 15726: { 15726: do 15726: { 15726: __n = _M_nd(__urng); 15726: __v = result_type(1.0) + __param._M_a2 * __n; 15726: } 15726: while (__v <= 0.0); 15726: 15726: __v = __v * __v * __v; 15726: __u = __aurng(); 15726: } 15726: while (__u > result_type(1.0) - 0.0331 * __n * __n * __n * __n 15726: && (std::log(__u) > (0.5 * __n * __n + __a1 15726: * (1.0 - __v + std::log(__v))))); 15726: 15726: if (__param.alpha() == __param._M_malpha) 15726: return __a1 * __v * __param.beta(); 15726: else 15726: { 15726: do 15726: __u = __aurng(); 15726: while (__u == 0.0); 15726: 15726: return (std::pow(__u, result_type(1.0) / __param.alpha()) 15726: * __a1 * __v * __param.beta()); 15726: } 15726: } 15726: 15726: template 15726: template 15726: void 15726: gamma_distribution<_RealType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __param) 15726: { 15726: 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 15726: __aurng(__urng); 15726: 15726: result_type __u, __v, __n; 15726: const result_type __a1 = (__param._M_malpha 15726: - _RealType(1.0) / _RealType(3.0)); 15726: 15726: if (__param.alpha() == __param._M_malpha) 15726: while (__f != __t) 15726: { 15726: do 15726: { 15726: do 15726: { 15726: __n = _M_nd(__urng); 15726: __v = result_type(1.0) + __param._M_a2 * __n; 15726: } 15726: while (__v <= 0.0); 15726: 15726: __v = __v * __v * __v; 15726: __u = __aurng(); 15726: } 15726: while (__u > result_type(1.0) - 0.0331 * __n * __n * __n * __n 15726: && (std::log(__u) > (0.5 * __n * __n + __a1 15726: * (1.0 - __v + std::log(__v))))); 15726: 15726: *__f++ = __a1 * __v * __param.beta(); 15726: } 15726: else 15726: while (__f != __t) 15726: { 15726: do 15726: { 15726: do 15726: { 15726: __n = _M_nd(__urng); 15726: __v = result_type(1.0) + __param._M_a2 * __n; 15726: } 15726: while (__v <= 0.0); 15726: 15726: __v = __v * __v * __v; 15726: __u = __aurng(); 15726: } 15726: while (__u > result_type(1.0) - 0.0331 * __n * __n * __n * __n 15726: && (std::log(__u) > (0.5 * __n * __n + __a1 15726: * (1.0 - __v + std::log(__v))))); 15726: 15726: do 15726: __u = __aurng(); 15726: while (__u == 0.0); 15726: 15726: *__f++ = (std::pow(__u, result_type(1.0) / __param.alpha()) 15726: * __a1 * __v * __param.beta()); 15726: } 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const gamma_distribution<_RealType>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const std::streamsize __precision = __os.precision(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__space); 15726: __os.precision(std::numeric_limits<_RealType>::max_digits10); 15726: 15726: __os << __x.alpha() << __space << __x.beta() 15726: << __space << __x._M_nd; 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: __os.precision(__precision); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: gamma_distribution<_RealType>& __x) 15726: { 15726: using param_type = typename gamma_distribution<_RealType>::param_type; 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec | __ios_base::skipws); 15726: 15726: _RealType __alpha_val, __beta_val; 15726: if (__is >> __alpha_val >> __beta_val >> __x._M_nd) 15726: __x.param(param_type(__alpha_val, __beta_val)); 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: 15726: template 15726: template 15726: typename weibull_distribution<_RealType>::result_type 15726: weibull_distribution<_RealType>:: 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 15726: __aurng(__urng); 15726: return __p.b() * std::pow(-std::log(result_type(1) - __aurng()), 15726: result_type(1) / __p.a()); 15726: } 15726: 15726: template 15726: template 15726: void 15726: weibull_distribution<_RealType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 15726: __aurng(__urng); 15726: auto __inv_a = result_type(1) / __p.a(); 15726: 15726: while (__f != __t) 15726: *__f++ = __p.b() * std::pow(-std::log(result_type(1) - __aurng()), 15726: __inv_a); 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const weibull_distribution<_RealType>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const std::streamsize __precision = __os.precision(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__space); 15726: __os.precision(std::numeric_limits<_RealType>::max_digits10); 15726: 15726: __os << __x.a() << __space << __x.b(); 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: __os.precision(__precision); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: weibull_distribution<_RealType>& __x) 15726: { 15726: using param_type = typename weibull_distribution<_RealType>::param_type; 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec | __ios_base::skipws); 15726: 15726: _RealType __a, __b; 15726: if (__is >> __a >> __b) 15726: __x.param(param_type(__a, __b)); 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: 15726: template 15726: template 15726: typename extreme_value_distribution<_RealType>::result_type 15726: extreme_value_distribution<_RealType>:: 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 15726: __aurng(__urng); 15726: return __p.a() - __p.b() * std::log(-std::log(result_type(1) 15726: - __aurng())); 15726: } 15726: 15726: template 15726: template 15726: void 15726: extreme_value_distribution<_RealType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __p) 15726: { 15726: 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, result_type> 15726: __aurng(__urng); 15726: 15726: while (__f != __t) 15726: *__f++ = __p.a() - __p.b() * std::log(-std::log(result_type(1) 15726: - __aurng())); 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const extreme_value_distribution<_RealType>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const std::streamsize __precision = __os.precision(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__space); 15726: __os.precision(std::numeric_limits<_RealType>::max_digits10); 15726: 15726: __os << __x.a() << __space << __x.b(); 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: __os.precision(__precision); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: extreme_value_distribution<_RealType>& __x) 15726: { 15726: using param_type 15726: = typename extreme_value_distribution<_RealType>::param_type; 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec | __ios_base::skipws); 15726: 15726: _RealType __a, __b; 15726: if (__is >> __a >> __b) 15726: __x.param(param_type(__a, __b)); 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: 15726: template 15726: void 15726: discrete_distribution<_IntType>::param_type:: 15726: _M_initialize() 15726: { 15726: if (_M_prob.size() < 2) 15726: { 15726: _M_prob.clear(); 15726: return; 15726: } 15726: 15726: const double __sum = std::accumulate(_M_prob.begin(), 15726: _M_prob.end(), 0.0); 15726: do { if (std::__is_constant_evaluated() && !bool(__sum > 0)) __builtin_unreachable(); } while (false); 15726: 15726: __detail::__normalize(_M_prob.begin(), _M_prob.end(), _M_prob.begin(), 15726: __sum); 15726: 15726: _M_cp.reserve(_M_prob.size()); 15726: std::partial_sum(_M_prob.begin(), _M_prob.end(), 15726: std::back_inserter(_M_cp)); 15726: 15726: _M_cp[_M_cp.size() - 1] = 1.0; 15726: } 15726: 15726: template 15726: template 15726: discrete_distribution<_IntType>::param_type:: 15726: param_type(size_t __nw, double __xmin, double __xmax, _Func __fw) 15726: : _M_prob(), _M_cp() 15726: { 15726: const size_t __n = __nw == 0 ? 1 : __nw; 15726: const double __delta = (__xmax - __xmin) / __n; 15726: 15726: _M_prob.reserve(__n); 15726: for (size_t __k = 0; __k < __nw; ++__k) 15726: _M_prob.push_back(__fw(__xmin + __k * __delta + 0.5 * __delta)); 15726: 15726: _M_initialize(); 15726: } 15726: 15726: template 15726: template 15726: typename discrete_distribution<_IntType>::result_type 15726: discrete_distribution<_IntType>:: 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __param) 15726: { 15726: if (__param._M_cp.empty()) 15726: return result_type(0); 15726: 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 15726: __aurng(__urng); 15726: 15726: const double __p = __aurng(); 15726: auto __pos = std::lower_bound(__param._M_cp.begin(), 15726: __param._M_cp.end(), __p); 15726: 15726: return __pos - __param._M_cp.begin(); 15726: } 15726: 15726: template 15726: template 15726: void 15726: discrete_distribution<_IntType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __param) 15726: { 15726: 15726: 15726: if (__param._M_cp.empty()) 15726: { 15726: while (__f != __t) 15726: *__f++ = result_type(0); 15726: return; 15726: } 15726: 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 15726: __aurng(__urng); 15726: 15726: while (__f != __t) 15726: { 15726: const double __p = __aurng(); 15726: auto __pos = std::lower_bound(__param._M_cp.begin(), 15726: __param._M_cp.end(), __p); 15726: 15726: *__f++ = __pos - __param._M_cp.begin(); 15726: } 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const discrete_distribution<_IntType>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const std::streamsize __precision = __os.precision(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__space); 15726: __os.precision(std::numeric_limits::max_digits10); 15726: 15726: std::vector __prob = __x.probabilities(); 15726: __os << __prob.size(); 15726: for (auto __dit = __prob.begin(); __dit != __prob.end(); ++__dit) 15726: __os << __space << *__dit; 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: __os.precision(__precision); 15726: return __os; 15726: } 15726: 15726: namespace __detail 15726: { 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: __extract_params(basic_istream<_CharT, _Traits>& __is, 15726: vector<_ValT>& __vals, size_t __n) 15726: { 15726: __vals.reserve(__n); 15726: while (__n--) 15726: { 15726: _ValT __val; 15726: if (__is >> __val) 15726: __vals.push_back(__val); 15726: else 15726: break; 15726: } 15726: return __is; 15726: } 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: discrete_distribution<_IntType>& __x) 15726: { 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec | __ios_base::skipws); 15726: 15726: size_t __n; 15726: if (__is >> __n) 15726: { 15726: std::vector __prob_vec; 15726: if (__detail::__extract_params(__is, __prob_vec, __n)) 15726: __x.param({__prob_vec.begin(), __prob_vec.end()}); 15726: } 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: 15726: template 15726: void 15726: piecewise_constant_distribution<_RealType>::param_type:: 15726: _M_initialize() 15726: { 15726: if (_M_int.size() < 2 15726: || (_M_int.size() == 2 15726: && _M_int[0] == _RealType(0) 15726: && _M_int[1] == _RealType(1))) 15726: { 15726: _M_int.clear(); 15726: _M_den.clear(); 15726: return; 15726: } 15726: 15726: const double __sum = std::accumulate(_M_den.begin(), 15726: _M_den.end(), 0.0); 15726: do { if (std::__is_constant_evaluated() && !bool(__sum > 0)) __builtin_unreachable(); } while (false); 15726: 15726: __detail::__normalize(_M_den.begin(), _M_den.end(), _M_den.begin(), 15726: __sum); 15726: 15726: _M_cp.reserve(_M_den.size()); 15726: std::partial_sum(_M_den.begin(), _M_den.end(), 15726: std::back_inserter(_M_cp)); 15726: 15726: 15726: _M_cp[_M_cp.size() - 1] = 1.0; 15726: 15726: for (size_t __k = 0; __k < _M_den.size(); ++__k) 15726: _M_den[__k] /= _M_int[__k + 1] - _M_int[__k]; 15726: } 15726: 15726: template 15726: template 15726: piecewise_constant_distribution<_RealType>::param_type:: 15726: param_type(_InputIteratorB __bbegin, 15726: _InputIteratorB __bend, 15726: _InputIteratorW __wbegin) 15726: : _M_int(), _M_den(), _M_cp() 15726: { 15726: if (__bbegin != __bend) 15726: { 15726: for (;;) 15726: { 15726: _M_int.push_back(*__bbegin); 15726: ++__bbegin; 15726: if (__bbegin == __bend) 15726: break; 15726: 15726: _M_den.push_back(*__wbegin); 15726: ++__wbegin; 15726: } 15726: } 15726: 15726: _M_initialize(); 15726: } 15726: 15726: template 15726: template 15726: piecewise_constant_distribution<_RealType>::param_type:: 15726: param_type(initializer_list<_RealType> __bl, _Func __fw) 15726: : _M_int(), _M_den(), _M_cp() 15726: { 15726: _M_int.reserve(__bl.size()); 15726: for (auto __biter = __bl.begin(); __biter != __bl.end(); ++__biter) 15726: _M_int.push_back(*__biter); 15726: 15726: _M_den.reserve(_M_int.size() - 1); 15726: for (size_t __k = 0; __k < _M_int.size() - 1; ++__k) 15726: _M_den.push_back(__fw(0.5 * (_M_int[__k + 1] + _M_int[__k]))); 15726: 15726: _M_initialize(); 15726: } 15726: 15726: template 15726: template 15726: piecewise_constant_distribution<_RealType>::param_type:: 15726: param_type(size_t __nw, _RealType __xmin, _RealType __xmax, _Func __fw) 15726: : _M_int(), _M_den(), _M_cp() 15726: { 15726: const size_t __n = __nw == 0 ? 1 : __nw; 15726: const _RealType __delta = (__xmax - __xmin) / __n; 15726: 15726: _M_int.reserve(__n + 1); 15726: for (size_t __k = 0; __k <= __nw; ++__k) 15726: _M_int.push_back(__xmin + __k * __delta); 15726: 15726: _M_den.reserve(__n); 15726: for (size_t __k = 0; __k < __nw; ++__k) 15726: _M_den.push_back(__fw(_M_int[__k] + 0.5 * __delta)); 15726: 15726: _M_initialize(); 15726: } 15726: 15726: template 15726: template 15726: typename piecewise_constant_distribution<_RealType>::result_type 15726: piecewise_constant_distribution<_RealType>:: 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __param) 15726: { 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 15726: __aurng(__urng); 15726: 15726: const double __p = __aurng(); 15726: if (__param._M_cp.empty()) 15726: return __p; 15726: 15726: auto __pos = std::lower_bound(__param._M_cp.begin(), 15726: __param._M_cp.end(), __p); 15726: const size_t __i = __pos - __param._M_cp.begin(); 15726: 15726: const double __pref = __i > 0 ? __param._M_cp[__i - 1] : 0.0; 15726: 15726: return __param._M_int[__i] + (__p - __pref) / __param._M_den[__i]; 15726: } 15726: 15726: template 15726: template 15726: void 15726: piecewise_constant_distribution<_RealType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __param) 15726: { 15726: 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 15726: __aurng(__urng); 15726: 15726: if (__param._M_cp.empty()) 15726: { 15726: while (__f != __t) 15726: *__f++ = __aurng(); 15726: return; 15726: } 15726: 15726: while (__f != __t) 15726: { 15726: const double __p = __aurng(); 15726: 15726: auto __pos = std::lower_bound(__param._M_cp.begin(), 15726: __param._M_cp.end(), __p); 15726: const size_t __i = __pos - __param._M_cp.begin(); 15726: 15726: const double __pref = __i > 0 ? __param._M_cp[__i - 1] : 0.0; 15726: 15726: *__f++ = (__param._M_int[__i] 15726: + (__p - __pref) / __param._M_den[__i]); 15726: } 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const piecewise_constant_distribution<_RealType>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const std::streamsize __precision = __os.precision(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__space); 15726: __os.precision(std::numeric_limits<_RealType>::max_digits10); 15726: 15726: std::vector<_RealType> __int = __x.intervals(); 15726: __os << __int.size() - 1; 15726: 15726: for (auto __xit = __int.begin(); __xit != __int.end(); ++__xit) 15726: __os << __space << *__xit; 15726: 15726: std::vector __den = __x.densities(); 15726: for (auto __dit = __den.begin(); __dit != __den.end(); ++__dit) 15726: __os << __space << *__dit; 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: __os.precision(__precision); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: piecewise_constant_distribution<_RealType>& __x) 15726: { 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec | __ios_base::skipws); 15726: 15726: size_t __n; 15726: if (__is >> __n) 15726: { 15726: std::vector<_RealType> __int_vec; 15726: if (__detail::__extract_params(__is, __int_vec, __n + 1)) 15726: { 15726: std::vector __den_vec; 15726: if (__detail::__extract_params(__is, __den_vec, __n)) 15726: { 15726: __x.param({ __int_vec.begin(), __int_vec.end(), 15726: __den_vec.begin() }); 15726: } 15726: } 15726: } 15726: 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: 15726: template 15726: void 15726: piecewise_linear_distribution<_RealType>::param_type:: 15726: _M_initialize() 15726: { 15726: if (_M_int.size() < 2 15726: || (_M_int.size() == 2 15726: && _M_int[0] == _RealType(0) 15726: && _M_int[1] == _RealType(1) 15726: && _M_den[0] == _M_den[1])) 15726: { 15726: _M_int.clear(); 15726: _M_den.clear(); 15726: return; 15726: } 15726: 15726: double __sum = 0.0; 15726: _M_cp.reserve(_M_int.size() - 1); 15726: _M_m.reserve(_M_int.size() - 1); 15726: for (size_t __k = 0; __k < _M_int.size() - 1; ++__k) 15726: { 15726: const _RealType __delta = _M_int[__k + 1] - _M_int[__k]; 15726: __sum += 0.5 * (_M_den[__k + 1] + _M_den[__k]) * __delta; 15726: _M_cp.push_back(__sum); 15726: _M_m.push_back((_M_den[__k + 1] - _M_den[__k]) / __delta); 15726: } 15726: do { if (std::__is_constant_evaluated() && !bool(__sum > 0)) __builtin_unreachable(); } while (false); 15726: 15726: 15726: __detail::__normalize(_M_den.begin(), _M_den.end(), _M_den.begin(), 15726: __sum); 15726: 15726: __detail::__normalize(_M_cp.begin(), _M_cp.end(), _M_cp.begin(), __sum); 15726: 15726: __detail::__normalize(_M_m.begin(), _M_m.end(), _M_m.begin(), __sum); 15726: 15726: 15726: _M_cp[_M_cp.size() - 1] = 1.0; 15726: } 15726: 15726: template 15726: template 15726: piecewise_linear_distribution<_RealType>::param_type:: 15726: param_type(_InputIteratorB __bbegin, 15726: _InputIteratorB __bend, 15726: _InputIteratorW __wbegin) 15726: : _M_int(), _M_den(), _M_cp(), _M_m() 15726: { 15726: for (; __bbegin != __bend; ++__bbegin, ++__wbegin) 15726: { 15726: _M_int.push_back(*__bbegin); 15726: _M_den.push_back(*__wbegin); 15726: } 15726: 15726: _M_initialize(); 15726: } 15726: 15726: template 15726: template 15726: piecewise_linear_distribution<_RealType>::param_type:: 15726: param_type(initializer_list<_RealType> __bl, _Func __fw) 15726: : _M_int(), _M_den(), _M_cp(), _M_m() 15726: { 15726: _M_int.reserve(__bl.size()); 15726: _M_den.reserve(__bl.size()); 15726: for (auto __biter = __bl.begin(); __biter != __bl.end(); ++__biter) 15726: { 15726: _M_int.push_back(*__biter); 15726: _M_den.push_back(__fw(*__biter)); 15726: } 15726: 15726: _M_initialize(); 15726: } 15726: 15726: template 15726: template 15726: piecewise_linear_distribution<_RealType>::param_type:: 15726: param_type(size_t __nw, _RealType __xmin, _RealType __xmax, _Func __fw) 15726: : _M_int(), _M_den(), _M_cp(), _M_m() 15726: { 15726: const size_t __n = __nw == 0 ? 1 : __nw; 15726: const _RealType __delta = (__xmax - __xmin) / __n; 15726: 15726: _M_int.reserve(__n + 1); 15726: _M_den.reserve(__n + 1); 15726: for (size_t __k = 0; __k <= __nw; ++__k) 15726: { 15726: _M_int.push_back(__xmin + __k * __delta); 15726: _M_den.push_back(__fw(_M_int[__k] + __delta)); 15726: } 15726: 15726: _M_initialize(); 15726: } 15726: 15726: template 15726: template 15726: typename piecewise_linear_distribution<_RealType>::result_type 15726: piecewise_linear_distribution<_RealType>:: 15726: operator()(_UniformRandomNumberGenerator& __urng, 15726: const param_type& __param) 15726: { 15726: __detail::_Adaptor<_UniformRandomNumberGenerator, double> 15726: __aurng(__urng); 15726: 15726: const double __p = __aurng(); 15726: if (__param._M_cp.empty()) 15726: return __p; 15726: 15726: auto __pos = std::lower_bound(__param._M_cp.begin(), 15726: __param._M_cp.end(), __p); 15726: const size_t __i = __pos - __param._M_cp.begin(); 15726: 15726: const double __pref = __i > 0 ? __param._M_cp[__i - 1] : 0.0; 15726: 15726: const double __a = 0.5 * __param._M_m[__i]; 15726: const double __b = __param._M_den[__i]; 15726: const double __cm = __p - __pref; 15726: 15726: _RealType __x = __param._M_int[__i]; 15726: if (__a == 0) 15726: __x += __cm / __b; 15726: else 15726: { 15726: const double __d = __b * __b + 4.0 * __a * __cm; 15726: __x += 0.5 * (std::sqrt(__d) - __b) / __a; 15726: } 15726: 15726: return __x; 15726: } 15726: 15726: template 15726: template 15726: void 15726: piecewise_linear_distribution<_RealType>:: 15726: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, 15726: _UniformRandomNumberGenerator& __urng, 15726: const param_type& __param) 15726: { 15726: 15726: 15726: while (__f != __t) 15726: *__f++ = this->operator()(__urng, __param); 15726: } 15726: 15726: template 15726: std::basic_ostream<_CharT, _Traits>& 15726: operator<<(std::basic_ostream<_CharT, _Traits>& __os, 15726: const piecewise_linear_distribution<_RealType>& __x) 15726: { 15726: using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __os.flags(); 15726: const _CharT __fill = __os.fill(); 15726: const std::streamsize __precision = __os.precision(); 15726: const _CharT __space = __os.widen(' '); 15726: __os.flags(__ios_base::scientific | __ios_base::left); 15726: __os.fill(__space); 15726: __os.precision(std::numeric_limits<_RealType>::max_digits10); 15726: 15726: std::vector<_RealType> __int = __x.intervals(); 15726: __os << __int.size() - 1; 15726: 15726: for (auto __xit = __int.begin(); __xit != __int.end(); ++__xit) 15726: __os << __space << *__xit; 15726: 15726: std::vector __den = __x.densities(); 15726: for (auto __dit = __den.begin(); __dit != __den.end(); ++__dit) 15726: __os << __space << *__dit; 15726: 15726: __os.flags(__flags); 15726: __os.fill(__fill); 15726: __os.precision(__precision); 15726: return __os; 15726: } 15726: 15726: template 15726: std::basic_istream<_CharT, _Traits>& 15726: operator>>(std::basic_istream<_CharT, _Traits>& __is, 15726: piecewise_linear_distribution<_RealType>& __x) 15726: { 15726: using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base; 15726: 15726: const typename __ios_base::fmtflags __flags = __is.flags(); 15726: __is.flags(__ios_base::dec | __ios_base::skipws); 15726: 15726: size_t __n; 15726: if (__is >> __n) 15726: { 15726: vector<_RealType> __int_vec; 15726: if (__detail::__extract_params(__is, __int_vec, __n + 1)) 15726: { 15726: vector __den_vec; 15726: if (__detail::__extract_params(__is, __den_vec, __n + 1)) 15726: { 15726: __x.param({ __int_vec.begin(), __int_vec.end(), 15726: __den_vec.begin() }); 15726: } 15726: } 15726: } 15726: __is.flags(__flags); 15726: return __is; 15726: } 15726: 15726: 15726: template 15726: seed_seq::seed_seq(std::initializer_list<_IntType> __il) 15726: { 15726: _M_v.reserve(__il.size()); 15726: for (auto __iter = __il.begin(); __iter != __il.end(); ++__iter) 15726: _M_v.push_back(__detail::__mod::__value>(*__iter)); 15726: } 15726: 15726: template 15726: seed_seq::seed_seq(_InputIterator __begin, _InputIterator __end) 15726: { 15726: if constexpr (__is_random_access_iter<_InputIterator>::value) 15726: _M_v.reserve(std::distance(__begin, __end)); 15726: 15726: for (_InputIterator __iter = __begin; __iter != __end; ++__iter) 15726: _M_v.push_back(__detail::__mod::__value>(*__iter)); 15726: } 15726: 15726: template 15726: void 15726: seed_seq::generate(_RandomAccessIterator __begin, 15726: _RandomAccessIterator __end) 15726: { 15726: typedef typename iterator_traits<_RandomAccessIterator>::value_type 15726: _Type; 15726: 15726: if (__begin == __end) 15726: return; 15726: 15726: std::fill(__begin, __end, _Type(0x8b8b8b8bu)); 15726: 15726: const size_t __n = __end - __begin; 15726: const size_t __s = _M_v.size(); 15726: const size_t __t = (__n >= 623) ? 11 15726: : (__n >= 68) ? 7 15726: : (__n >= 39) ? 5 15726: : (__n >= 7) ? 3 15726: : (__n - 1) / 2; 15726: const size_t __p = (__n - __t) / 2; 15726: const size_t __q = __p + __t; 15726: const size_t __m = std::max(size_t(__s + 1), __n); 15726: # 3292 "/usr/include/c++/13/bits/random.tcc" 3 15726: { 15726: uint32_t __r1 = 1371501266u; 15726: uint32_t __r2 = __r1 + __s; 15726: __begin[__p] += __r1; 15726: __begin[__q] = (uint32_t)__begin[__q] + __r2; 15726: __begin[0] = __r2; 15726: } 15726: 15726: for (size_t __k = 1; __k <= __s; ++__k) 15726: { 15726: const size_t __kn = __k % __n; 15726: const size_t __kpn = (__k + __p) % __n; 15726: const size_t __kqn = (__k + __q) % __n; 15726: uint32_t __arg = (__begin[__kn] 15726: ^ __begin[__kpn] 15726: ^ __begin[(__k - 1) % __n]); 15726: uint32_t __r1 = 1664525u * (__arg ^ (__arg >> 27)); 15726: uint32_t __r2 = __r1 + (uint32_t)__kn + _M_v[__k - 1]; 15726: __begin[__kpn] = (uint32_t)__begin[__kpn] + __r1; 15726: __begin[__kqn] = (uint32_t)__begin[__kqn] + __r2; 15726: __begin[__kn] = __r2; 15726: } 15726: 15726: for (size_t __k = __s + 1; __k < __m; ++__k) 15726: { 15726: const size_t __kn = __k % __n; 15726: const size_t __kpn = (__k + __p) % __n; 15726: const size_t __kqn = (__k + __q) % __n; 15726: uint32_t __arg = (__begin[__kn] 15726: ^ __begin[__kpn] 15726: ^ __begin[(__k - 1) % __n]); 15726: uint32_t __r1 = 1664525u * (__arg ^ (__arg >> 27)); 15726: uint32_t __r2 = __r1 + (uint32_t)__kn; 15726: __begin[__kpn] = (uint32_t)__begin[__kpn] + __r1; 15726: __begin[__kqn] = (uint32_t)__begin[__kqn] + __r2; 15726: __begin[__kn] = __r2; 15726: } 15726: 15726: for (size_t __k = __m; __k < __m + __n; ++__k) 15726: { 15726: const size_t __kn = __k % __n; 15726: const size_t __kpn = (__k + __p) % __n; 15726: const size_t __kqn = (__k + __q) % __n; 15726: uint32_t __arg = (__begin[__kn] 15726: + __begin[__kpn] 15726: + __begin[(__k - 1) % __n]); 15726: uint32_t __r3 = 1566083941u * (__arg ^ (__arg >> 27)); 15726: uint32_t __r4 = __r3 - __kn; 15726: __begin[__kpn] ^= __r3; 15726: __begin[__kqn] ^= __r4; 15726: __begin[__kn] = __r4; 15726: } 15726: } 15726: 15726: template 15726: _RealType 15726: generate_canonical(_UniformRandomNumberGenerator& __urng) 15726: { 15726: static_assert(std::is_floating_point<_RealType>::value, 15726: "template argument must be a floating point type"); 15726: 15726: const size_t __b 15726: = std::min(static_cast(std::numeric_limits<_RealType>::digits), 15726: __bits); 15726: const long double __r = static_cast(__urng.max()) 15726: - static_cast(__urng.min()) + 1.0L; 15726: const size_t __log2r = std::log(__r) / std::log(2.0L); 15726: const size_t __m = std::max(1UL, 15726: (__b + __log2r - 1UL) / __log2r); 15726: _RealType __ret; 15726: _RealType __sum = _RealType(0); 15726: _RealType __tmp = _RealType(1); 15726: for (size_t __k = __m; __k != 0; --__k) 15726: { 15726: __sum += _RealType(__urng() - __urng.min()) * __tmp; 15726: __tmp *= __r; 15726: } 15726: __ret = __sum / __tmp; 15726: if (__builtin_expect(__ret >= _RealType(1), 0)) 15726: { 15726: 15726: __ret = std::nextafter(_RealType(1), _RealType(0)); 15726: 15726: 15726: 15726: 15726: } 15726: return __ret; 15726: } 15726: 15726: 15726: } 15726: # 54 "/usr/include/c++/13/random" 2 3 15726: # 15 "/build/reproducible-path/rocksdb-9.3.1/util/random.h" 2 15726: 15726: 15726: 15726: 15726: # 18 "/build/reproducible-path/rocksdb-9.3.1/util/random.h" 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: class Random { 15726: private: 15726: enum : uint32_t { 15726: M = 2147483647L 15726: }; 15726: enum : uint64_t { 15726: A = 16807 15726: }; 15726: 15726: uint32_t seed_; 15726: 15726: static uint32_t GoodSeed(uint32_t s) { return (s & M) != 0 ? (s & M) : 1; } 15726: 15726: public: 15726: 15726: enum : uint32_t { kMaxNext = M }; 15726: 15726: explicit Random(uint32_t s) : seed_(GoodSeed(s)) {} 15726: 15726: void Reset(uint32_t s) { seed_ = GoodSeed(s); } 15726: 15726: uint32_t Next() { 15726: 15726: 15726: 15726: 15726: 15726: 15726: uint64_t product = seed_ * A; 15726: 15726: 15726: seed_ = static_cast((product >> 31) + (product & M)); 15726: 15726: 15726: 15726: if (seed_ > M) { 15726: seed_ -= M; 15726: } 15726: return seed_; 15726: } 15726: 15726: uint64_t Next64() { return (uint64_t{Next()} << 32) | Next(); } 15726: 15726: 15726: 15726: uint32_t Uniform(int n) { return Next() % n; } 15726: 15726: 15726: 15726: bool OneIn(int n) { return Uniform(n) == 0; } 15726: 15726: 15726: 15726: bool OneInOpt(int n) { return n > 0 && OneIn(n); } 15726: 15726: 15726: 15726: 15726: bool PercentTrue(int percentage) { 15726: return static_cast(Uniform(100)) < percentage; 15726: } 15726: 15726: 15726: 15726: 15726: uint32_t Skewed(int max_log) { return Uniform(1 << Uniform(max_log + 1)); } 15726: 15726: 15726: std::string RandomString(int len); 15726: 15726: 15726: std::string HumanReadableString(int len); 15726: 15726: 15726: std::string RandomBinaryString(int len); 15726: 15726: 15726: 15726: static Random* GetTLSInstance(); 15726: }; 15726: 15726: 15726: 15726: 15726: class Random32 { 15726: private: 15726: std::mt19937 generator_; 15726: 15726: public: 15726: explicit Random32(uint32_t s) : generator_(s) {} 15726: 15726: 15726: uint32_t Next() { return static_cast(generator_()); } 15726: 15726: 15726: 15726: uint32_t Uniform(uint32_t n) { 15726: return static_cast( 15726: std::uniform_int_distribution( 15726: 0, n - 1)(generator_)); 15726: } 15726: 15726: 15726: 15726: 15726: uint32_t Uniformish(uint32_t n) { 15726: 15726: return static_cast((uint64_t(generator_()) * uint64_t(n)) >> 32); 15726: } 15726: 15726: 15726: 15726: bool OneIn(uint32_t n) { return Uniform(n) == 0; } 15726: 15726: 15726: 15726: 15726: uint32_t Skewed(int max_log) { 15726: return Uniform(uint32_t{1} << Uniform(max_log + 1)); 15726: } 15726: 15726: 15726: void Seed(uint32_t new_seed) { generator_.seed(new_seed); } 15726: }; 15726: 15726: 15726: class Random64 { 15726: private: 15726: std::mt19937_64 generator_; 15726: 15726: public: 15726: explicit Random64(uint64_t s) : generator_(s) {} 15726: 15726: 15726: uint64_t Next() { return generator_(); } 15726: 15726: 15726: 15726: uint64_t Uniform(uint64_t n) { 15726: return std::uniform_int_distribution(0, n - 1)(generator_); 15726: } 15726: 15726: 15726: 15726: bool OneIn(uint64_t n) { return Uniform(n) == 0; } 15726: 15726: 15726: 15726: 15726: uint64_t Skewed(int max_log) { 15726: return Uniform(uint64_t(1) << Uniform(max_log + 1)); 15726: } 15726: }; 15726: 15726: 15726: template 15726: void RandomShuffle(RandomIt first, RandomIt last, uint32_t seed) { 15726: std::mt19937 rng(seed); 15726: std::shuffle(first, last, rng); 15726: } 15726: 15726: 15726: template 15726: void RandomShuffle(RandomIt first, RandomIt last) { 15726: RandomShuffle(first, last, std::random_device{}()); 15726: } 15726: 15726: } 15726: # 18 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: template 15726: class CoreLocalArray { 15726: public: 15726: CoreLocalArray(); 15726: 15726: size_t Size() const; 15726: 15726: 15726: T* Access() const; 15726: 15726: 15726: 15726: std::pair AccessElementAndIndex() const; 15726: 15726: 15726: T* AccessAtCore(size_t core_idx) const; 15726: 15726: private: 15726: std::unique_ptr data_; 15726: int size_shift_; 15726: }; 15726: 15726: template 15726: CoreLocalArray::CoreLocalArray() { 15726: int num_cpus = static_cast(std::thread::hardware_concurrency()); 15726: 15726: size_shift_ = 3; 15726: while (1 << size_shift_ < num_cpus) { 15726: ++size_shift_; 15726: } 15726: data_.reset(new T[static_cast(1) << size_shift_]); 15726: } 15726: 15726: template 15726: size_t CoreLocalArray::Size() const { 15726: return static_cast(1) << size_shift_; 15726: } 15726: 15726: template 15726: T* CoreLocalArray::Access() const { 15726: return AccessElementAndIndex().first; 15726: } 15726: 15726: template 15726: std::pair CoreLocalArray::AccessElementAndIndex() const { 15726: int cpuid = port::PhysicalCoreID(); 15726: size_t core_idx; 15726: if ((__builtin_expect((cpuid < 0), 0))) { 15726: 15726: core_idx = Random::GetTLSInstance()->Uniform(1 << size_shift_); 15726: } else { 15726: core_idx = static_cast(BottomNBits(cpuid, size_shift_)); 15726: } 15726: return {AccessAtCore(core_idx), core_idx}; 15726: } 15726: 15726: template 15726: T* CoreLocalArray::AccessAtCore(size_t core_idx) const { 15726: 15726: # 81 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 3 4 15726: (static_cast ( 15726: # 81 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 15726: core_idx < static_cast(1) << size_shift_ 15726: # 81 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 81 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 15726: "core_idx < static_cast(1) << size_shift_" 15726: # 81 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 81 "/build/reproducible-path/rocksdb-9.3.1/util/core_local.h" 15726: ; 15726: return &data_[core_idx]; 15726: } 15726: 15726: } 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/monitoring/statistics_impl.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/mutexlock.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/util/mutexlock.h" 15726: 15726: # 1 "/usr/include/assert.h" 1 3 4 15726: # 12 "/build/reproducible-path/rocksdb-9.3.1/util/mutexlock.h" 2 15726: # 20 "/build/reproducible-path/rocksdb-9.3.1/util/mutexlock.h" 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/fastrange.h" 1 15726: # 19 "/build/reproducible-path/rocksdb-9.3.1/util/fastrange.h" 15726: 15726: # 31 "/build/reproducible-path/rocksdb-9.3.1/util/fastrange.h" 15726: namespace rocksdb { 15726: 15726: namespace detail { 15726: 15726: 15726: template 15726: struct FastRangeGenericImpl { 15726: 15726: }; 15726: 15726: template 15726: struct FastRangeGenericImpl { 15726: static inline Range Fn(uint32_t hash, Range range) { 15726: static_assert(std::is_unsigned::value, "must be unsigned"); 15726: static_assert(sizeof(Range) <= sizeof(uint32_t), 15726: "cannot be larger than hash (32 bits)"); 15726: 15726: uint64_t product = uint64_t{range} * hash; 15726: return static_cast(product >> 32); 15726: } 15726: }; 15726: 15726: template 15726: struct FastRangeGenericImpl { 15726: static inline Range Fn(uint64_t hash, Range range) { 15726: static_assert(std::is_unsigned::value, "must be unsigned"); 15726: static_assert(sizeof(Range) <= sizeof(uint64_t), 15726: "cannot be larger than hash (64 bits)"); 15726: # 68 "/build/reproducible-path/rocksdb-9.3.1/util/fastrange.h" 15726: uint64_t range64 = range; 15726: uint64_t tmp = uint64_t{range64 & 0xffffFFFF} * uint64_t{hash & 0xffffFFFF}; 15726: tmp >>= 32; 15726: tmp += uint64_t{range64 & 0xffffFFFF} * uint64_t{hash >> 32}; 15726: 15726: uint64_t tmp2 = uint64_t{range64 >> 32} * uint64_t{hash & 0xffffFFFF}; 15726: tmp += static_cast(tmp2); 15726: tmp >>= 32; 15726: tmp += (tmp2 >> 32); 15726: tmp += uint64_t{range64 >> 32} * uint64_t{hash >> 32}; 15726: return static_cast(tmp); 15726: 15726: } 15726: }; 15726: 15726: } 15726: # 96 "/build/reproducible-path/rocksdb-9.3.1/util/fastrange.h" 15726: template 15726: inline Range FastRangeGeneric(Hash hash, Range range) { 15726: return detail::FastRangeGenericImpl::Fn(hash, range); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: inline size_t FastRange64(uint64_t hash, size_t range) { 15726: return FastRangeGeneric(hash, range); 15726: } 15726: 15726: 15726: inline uint32_t FastRange32(uint32_t hash, uint32_t range) { 15726: return FastRangeGeneric(hash, range); 15726: } 15726: 15726: } 15726: # 21 "/build/reproducible-path/rocksdb-9.3.1/util/mutexlock.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/hash.h" 1 15726: # 20 "/build/reproducible-path/rocksdb-9.3.1/util/hash.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: 15726: uint64_t Hash64(const char* data, size_t n, uint64_t seed); 15726: 15726: 15726: uint64_t Hash64(const char* data, size_t n); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline uint64_t NPHash64(const char* data, size_t n, uint64_t seed) { 15726: 15726: 15726: 15726: 15726: 15726: return Hash64(data, n, seed); 15726: 15726: } 15726: 15726: 15726: inline uint64_t NPHash64(const char* data, size_t n) { 15726: 15726: 15726: 15726: 15726: 15726: return Hash64(data, n); 15726: 15726: } 15726: 15726: 15726: 15726: void Hash2x64(const char* data, size_t n, uint64_t* high64, uint64_t* low64); 15726: void Hash2x64(const char* data, size_t n, uint64_t seed, uint64_t* high64, 15726: uint64_t* low64); 15726: 15726: 15726: 15726: void BijectiveHash2x64(uint64_t in_high64, uint64_t in_low64, 15726: uint64_t* out_high64, uint64_t* out_low64); 15726: void BijectiveHash2x64(uint64_t in_high64, uint64_t in_low64, uint64_t seed, 15726: uint64_t* out_high64, uint64_t* out_low64); 15726: 15726: 15726: void BijectiveUnhash2x64(uint64_t in_high64, uint64_t in_low64, 15726: uint64_t* out_high64, uint64_t* out_low64); 15726: void BijectiveUnhash2x64(uint64_t in_high64, uint64_t in_low64, uint64_t seed, 15726: uint64_t* out_high64, uint64_t* out_low64); 15726: 15726: 15726: 15726: 15726: 15726: 15726: uint32_t Hash(const char* data, size_t n, uint32_t seed); 15726: 15726: 15726: inline uint32_t BloomHash(const Slice& key) { 15726: return Hash(key.data(), key.size(), 0xbc9f1d34); 15726: } 15726: 15726: inline uint64_t GetSliceHash64(const Slice& key) { 15726: return Hash64(key.data(), key.size()); 15726: } 15726: 15726: 15726: extern uint64_t (*kGetSliceNPHash64UnseededFnPtr)(const Slice&); 15726: 15726: inline uint64_t GetSliceNPHash64(const Slice& s) { 15726: return NPHash64(s.data(), s.size()); 15726: } 15726: 15726: inline uint64_t GetSliceNPHash64(const Slice& s, uint64_t seed) { 15726: return NPHash64(s.data(), s.size(), seed); 15726: } 15726: 15726: 15726: 15726: uint64_t GetSlicePartsNPHash64(const SliceParts& data, uint64_t seed); 15726: 15726: inline size_t GetSliceRangedNPHash(const Slice& s, size_t range) { 15726: return FastRange64(NPHash64(s.data(), s.size()), range); 15726: } 15726: 15726: 15726: inline uint32_t GetSliceHash(const Slice& s) { 15726: return Hash(s.data(), s.size(), 397); 15726: } 15726: 15726: 15726: inline uint32_t Upper32of64(uint64_t v) { 15726: return static_cast(v >> 32); 15726: } 15726: inline uint32_t Lower32of64(uint64_t v) { return static_cast(v); } 15726: 15726: 15726: struct SliceHasher32 { 15726: uint32_t operator()(const Slice& s) const { return GetSliceHash(s); } 15726: }; 15726: struct SliceNPHasher64 { 15726: uint64_t operator()(const Slice& s, uint64_t seed = 0) const { 15726: return GetSliceNPHash64(s, seed); 15726: } 15726: }; 15726: 15726: } 15726: # 22 "/build/reproducible-path/rocksdb-9.3.1/util/mutexlock.h" 2 15726: 15726: namespace rocksdb { 15726: # 35 "/build/reproducible-path/rocksdb-9.3.1/util/mutexlock.h" 15726: class MutexLock { 15726: public: 15726: explicit MutexLock(port::Mutex *mu) : mu_(mu) { this->mu_->Lock(); } 15726: 15726: MutexLock(const MutexLock &) = delete; 15726: void operator=(const MutexLock &) = delete; 15726: 15726: ~MutexLock() { this->mu_->Unlock(); } 15726: 15726: private: 15726: port::Mutex *const mu_; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: class ReadLock { 15726: public: 15726: explicit ReadLock(port::RWMutex *mu) : mu_(mu) { this->mu_->ReadLock(); } 15726: 15726: ReadLock(const ReadLock &) = delete; 15726: void operator=(const ReadLock &) = delete; 15726: 15726: ~ReadLock() { this->mu_->ReadUnlock(); } 15726: 15726: private: 15726: port::RWMutex *const mu_; 15726: }; 15726: 15726: 15726: 15726: 15726: class ReadUnlock { 15726: public: 15726: explicit ReadUnlock(port::RWMutex *mu) : mu_(mu) { mu->AssertHeld(); } 15726: 15726: ReadUnlock(const ReadUnlock &) = delete; 15726: ReadUnlock &operator=(const ReadUnlock &) = delete; 15726: 15726: ~ReadUnlock() { mu_->ReadUnlock(); } 15726: 15726: private: 15726: port::RWMutex *const mu_; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: class WriteLock { 15726: public: 15726: explicit WriteLock(port::RWMutex *mu) : mu_(mu) { this->mu_->WriteLock(); } 15726: 15726: WriteLock(const WriteLock &) = delete; 15726: void operator=(const WriteLock &) = delete; 15726: 15726: ~WriteLock() { this->mu_->WriteUnlock(); } 15726: 15726: private: 15726: port::RWMutex *const mu_; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: class SpinMutex { 15726: public: 15726: SpinMutex() : locked_(false) {} 15726: 15726: bool try_lock() { 15726: auto currently_locked = locked_.load(std::memory_order_relaxed); 15726: return !currently_locked && 15726: locked_.compare_exchange_weak(currently_locked, true, 15726: std::memory_order_acquire, 15726: std::memory_order_relaxed); 15726: } 15726: 15726: void lock() { 15726: for (size_t tries = 0;; ++tries) { 15726: if (try_lock()) { 15726: 15726: break; 15726: } 15726: port::AsmVolatilePause(); 15726: if (tries > 100) { 15726: std::this_thread::yield(); 15726: } 15726: } 15726: } 15726: 15726: void unlock() { locked_.store(false, std::memory_order_release); } 15726: 15726: private: 15726: std::atomic locked_; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct alignas(64U) CacheAlignedWrapper { 15726: T obj_; 15726: }; 15726: template 15726: struct Unwrap { 15726: using type = T; 15726: static type &Go(T &t) { return t; } 15726: }; 15726: template 15726: struct Unwrap> { 15726: using type = T; 15726: static type &Go(CacheAlignedWrapper &t) { return t.obj_; } 15726: }; 15726: # 165 "/build/reproducible-path/rocksdb-9.3.1/util/mutexlock.h" 15726: template 15726: class Striped { 15726: public: 15726: explicit Striped(size_t stripe_count) 15726: : stripe_count_(stripe_count), data_(new T[stripe_count]) {} 15726: 15726: using Unwrapped = typename Unwrap::type; 15726: Unwrapped &Get(const Key &key, uint64_t seed = 0) { 15726: size_t index = FastRangeGeneric(hash_(key, seed), stripe_count_); 15726: return Unwrap::Go(data_[index]); 15726: } 15726: 15726: size_t ApproximateMemoryUsage() const { 15726: 15726: 15726: return sizeof(*this) + stripe_count_ * sizeof(T); 15726: } 15726: 15726: private: 15726: size_t stripe_count_; 15726: std::unique_ptr data_; 15726: Hash hash_; 15726: }; 15726: 15726: } 15726: # 18 "/build/reproducible-path/rocksdb-9.3.1/monitoring/statistics_impl.h" 2 15726: # 30 "/build/reproducible-path/rocksdb-9.3.1/monitoring/statistics_impl.h" 15726: namespace rocksdb { 15726: 15726: enum TickersInternal : uint32_t { 15726: INTERNAL_TICKER_ENUM_START = TICKER_ENUM_MAX, 15726: INTERNAL_TICKER_ENUM_MAX 15726: }; 15726: 15726: enum HistogramsInternal : uint32_t { 15726: INTERNAL_HISTOGRAM_START = HISTOGRAM_ENUM_MAX, 15726: INTERNAL_HISTOGRAM_ENUM_MAX 15726: }; 15726: 15726: class StatisticsImpl : public Statistics { 15726: public: 15726: StatisticsImpl(std::shared_ptr stats); 15726: virtual ~StatisticsImpl(); 15726: const char* Name() const override { return kClassName(); } 15726: static const char* kClassName() { return "BasicStatistics"; } 15726: 15726: uint64_t getTickerCount(uint32_t ticker_type) const override; 15726: void histogramData(uint32_t histogram_type, 15726: HistogramData* const data) const override; 15726: std::string getHistogramString(uint32_t histogram_type) const override; 15726: 15726: void setTickerCount(uint32_t ticker_type, uint64_t count) override; 15726: uint64_t getAndResetTickerCount(uint32_t ticker_type) override; 15726: void recordTick(uint32_t ticker_type, uint64_t count) override; 15726: 15726: 15726: 15726: 15726: void measureTime(uint32_t histogramType, uint64_t time) override { 15726: recordInHistogram(histogramType, time); 15726: } 15726: void recordInHistogram(uint32_t histogram_type, uint64_t value) override; 15726: 15726: Status Reset() override; 15726: std::string ToString() const override; 15726: bool getTickerMap(std::map*) const override; 15726: bool HistEnabledForType(uint32_t type) const override; 15726: 15726: const Customizable* Inner() const override { return stats_.get(); } 15726: 15726: private: 15726: 15726: std::shared_ptr stats_; 15726: 15726: 15726: mutable port::Mutex aggregate_lock_; 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct alignas(64U) StatisticsData { 15726: std::atomic_uint_fast64_t tickers_[INTERNAL_TICKER_ENUM_MAX] = {{0}}; 15726: HistogramImpl histograms_[INTERNAL_HISTOGRAM_ENUM_MAX]; 15726: 15726: char 15726: padding[(64U - 15726: (INTERNAL_TICKER_ENUM_MAX * sizeof(std::atomic_uint_fast64_t) + 15726: INTERNAL_HISTOGRAM_ENUM_MAX * sizeof(HistogramImpl)) % 15726: 64U)] ; 15726: 15726: void* operator new(size_t s) { return port::cacheline_aligned_alloc(s); } 15726: void* operator new[](size_t s) { return port::cacheline_aligned_alloc(s); } 15726: void operator delete(void* p) { port::cacheline_aligned_free(p); } 15726: void operator delete[](void* p) { port::cacheline_aligned_free(p); } 15726: }; 15726: 15726: 15726: static_assert(sizeof(StatisticsData) % 64U == 0, 15726: "Expected " "64U" "-byte aligned"); 15726: 15726: 15726: CoreLocalArray per_core_stats_; 15726: 15726: uint64_t getTickerCountLocked(uint32_t ticker_type) const; 15726: std::unique_ptr getHistogramImplLocked( 15726: uint32_t histogram_type) const; 15726: void setTickerCountLocked(uint32_t ticker_type, uint64_t count); 15726: }; 15726: 15726: 15726: inline void RecordInHistogram(Statistics* statistics, uint32_t histogram_type, 15726: uint64_t value) { 15726: if (statistics) { 15726: statistics->recordInHistogram(histogram_type, value); 15726: } 15726: } 15726: 15726: inline void RecordTimeToHistogram(Statistics* statistics, 15726: uint32_t histogram_type, uint64_t value) { 15726: if (statistics) { 15726: statistics->reportTimeToHistogram(histogram_type, value); 15726: } 15726: } 15726: 15726: inline void RecordTick(Statistics* statistics, uint32_t ticker_type, 15726: uint64_t count = 1) { 15726: if (statistics) { 15726: statistics->recordTick(ticker_type, count); 15726: } 15726: } 15726: 15726: inline void SetTickerCount(Statistics* statistics, uint32_t ticker_type, 15726: uint64_t count) { 15726: if (statistics) { 15726: statistics->setTickerCount(ticker_type, count); 15726: } 15726: } 15726: 15726: } 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_step_timer.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/system_clock.h" 1 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/system_clock.h" 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/chrono" 1 3 15726: # 33 "/usr/include/c++/13/chrono" 3 15726: 15726: # 34 "/usr/include/c++/13/chrono" 3 15726: # 59 "/usr/include/c++/13/chrono" 3 15726: 15726: # 59 "/usr/include/c++/13/chrono" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 76 "/usr/include/c++/13/chrono" 3 15726: namespace chrono 15726: { 15726: # 3338 "/usr/include/c++/13/chrono" 3 15726: } 15726: # 3366 "/usr/include/c++/13/chrono" 3 15726: 15726: } 15726: # 13 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/system_clock.h" 2 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/system_clock.h" 15726: 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/system_clock.h" 15726: namespace rocksdb { 15726: struct ConfigOptions; 15726: 15726: 15726: 15726: class SystemClock : public Customizable { 15726: public: 15726: ~SystemClock() override {} 15726: 15726: static const char* Type() { return "SystemClock"; } 15726: static Status CreateFromString(const ConfigOptions& options, 15726: const std::string& value, 15726: std::shared_ptr* result); 15726: 15726: const char* Name() const override = 0; 15726: 15726: 15726: 15726: static const char* kDefaultName() { return "DefaultClock"; } 15726: 15726: 15726: 15726: static const std::shared_ptr& Default(); 15726: 15726: 15726: 15726: 15726: virtual uint64_t NowMicros() = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual uint64_t NowNanos() { return NowMicros() * 1000; } 15726: 15726: 15726: 15726: virtual uint64_t CPUMicros() { return 0; } 15726: 15726: 15726: 15726: 15726: virtual uint64_t CPUNanos() { return CPUMicros() * 1000; } 15726: 15726: 15726: virtual void SleepForMicroseconds(int micros) = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual bool TimedWait(port::CondVar* cv, std::chrono::microseconds deadline); 15726: 15726: 15726: 15726: virtual Status GetCurrentTime(int64_t* unix_time) = 0; 15726: 15726: 15726: virtual std::string TimeToString(uint64_t time) = 0; 15726: }; 15726: 15726: 15726: 15726: class SystemClockWrapper : public SystemClock { 15726: public: 15726: explicit SystemClockWrapper(const std::shared_ptr& t); 15726: 15726: uint64_t NowMicros() override { return target_->NowMicros(); } 15726: 15726: uint64_t NowNanos() override { return target_->NowNanos(); } 15726: 15726: uint64_t CPUMicros() override { return target_->CPUMicros(); } 15726: 15726: uint64_t CPUNanos() override { return target_->CPUNanos(); } 15726: 15726: void SleepForMicroseconds(int micros) override { 15726: return target_->SleepForMicroseconds(micros); 15726: } 15726: 15726: bool TimedWait(port::CondVar* cv, 15726: std::chrono::microseconds deadline) override { 15726: return target_->TimedWait(cv, deadline); 15726: } 15726: 15726: Status GetCurrentTime(int64_t* unix_time) override { 15726: return target_->GetCurrentTime(unix_time); 15726: } 15726: 15726: std::string TimeToString(uint64_t time) override { 15726: return target_->TimeToString(time); 15726: } 15726: 15726: Status PrepareOptions(const ConfigOptions& options) override; 15726: std::string SerializeOptions(const ConfigOptions& config_options, 15726: const std::string& header) const override; 15726: const Customizable* Inner() const override { return target_.get(); } 15726: 15726: protected: 15726: std::shared_ptr target_; 15726: }; 15726: 15726: } 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_step_timer.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: class PerfStepTimer { 15726: public: 15726: explicit PerfStepTimer( 15726: uint64_t* metric, SystemClock* clock = nullptr, bool use_cpu_time = false, 15726: PerfLevel enable_level = PerfLevel::kEnableTimeExceptForMutex, 15726: Statistics* statistics = nullptr, uint32_t ticker_type = 0) 15726: : perf_counter_enabled_(perf_level >= enable_level), 15726: use_cpu_time_(use_cpu_time), 15726: ticker_type_(ticker_type), 15726: clock_((perf_counter_enabled_ || statistics != nullptr) 15726: ? (clock ? clock : SystemClock::Default().get()) 15726: : nullptr), 15726: start_(0), 15726: metric_(metric), 15726: statistics_(statistics) {} 15726: 15726: ~PerfStepTimer() { Stop(); } 15726: 15726: void Start() { 15726: if (perf_counter_enabled_ || statistics_ != nullptr) { 15726: start_ = time_now(); 15726: } 15726: } 15726: 15726: void Measure() { 15726: if (start_) { 15726: uint64_t now = time_now(); 15726: *metric_ += now - start_; 15726: start_ = now; 15726: } 15726: } 15726: 15726: void Stop() { 15726: if (start_) { 15726: uint64_t duration = time_now() - start_; 15726: if (perf_counter_enabled_) { 15726: *metric_ += duration; 15726: } 15726: 15726: if (statistics_ != nullptr) { 15726: RecordTick(statistics_, ticker_type_, duration); 15726: } 15726: start_ = 0; 15726: } 15726: } 15726: 15726: private: 15726: uint64_t time_now() { 15726: if (!use_cpu_time_) { 15726: return clock_->NowNanos(); 15726: } else { 15726: return clock_->CPUNanos(); 15726: } 15726: } 15726: 15726: const bool perf_counter_enabled_; 15726: const bool use_cpu_time_; 15726: uint32_t ticker_type_; 15726: SystemClock* const clock_; 15726: uint64_t start_; 15726: uint64_t* metric_; 15726: Statistics* statistics_; 15726: }; 15726: 15726: } 15726: # 8 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_context_imp.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/perf_context.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 15 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/perf_context.h" 15726: namespace rocksdb { 15726: # 27 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/perf_context.h" 15726: struct PerfContextByLevelBase { 15726: 15726: 15726: 15726: uint64_t bloom_filter_useful = 0; 15726: 15726: uint64_t bloom_filter_full_positive = 0; 15726: 15726: 15726: uint64_t bloom_filter_full_true_positive = 0; 15726: 15726: 15726: 15726: uint64_t user_key_return_count = 0; 15726: 15726: 15726: uint64_t get_from_table_nanos = 0; 15726: 15726: uint64_t block_cache_hit_count = 0; 15726: uint64_t block_cache_miss_count = 0; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct PerfContextByLevel : public PerfContextByLevelBase { 15726: void Reset(); 15726: }; 15726: # 67 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/perf_context.h" 15726: struct PerfContextBase { 15726: uint64_t user_key_comparison_count; 15726: uint64_t block_cache_hit_count; 15726: uint64_t block_read_count; 15726: uint64_t block_read_byte; 15726: uint64_t block_read_time; 15726: 15726: uint64_t block_read_cpu_time; 15726: uint64_t block_cache_index_hit_count; 15726: 15726: uint64_t block_cache_standalone_handle_count; 15726: 15726: 15726: uint64_t block_cache_real_handle_count; 15726: uint64_t index_block_read_count; 15726: uint64_t block_cache_filter_hit_count; 15726: uint64_t filter_block_read_count; 15726: uint64_t compression_dict_block_read_count; 15726: 15726: 15726: uint64_t block_cache_index_read_byte; 15726: uint64_t block_cache_filter_read_byte; 15726: uint64_t block_cache_compression_dict_read_byte; 15726: uint64_t block_cache_read_byte; 15726: 15726: uint64_t secondary_cache_hit_count; 15726: 15726: uint64_t compressed_sec_cache_insert_real_count; 15726: 15726: uint64_t compressed_sec_cache_insert_dummy_count; 15726: 15726: uint64_t compressed_sec_cache_uncompressed_bytes; 15726: 15726: uint64_t compressed_sec_cache_compressed_bytes; 15726: 15726: uint64_t block_checksum_time; 15726: uint64_t block_decompress_time; 15726: 15726: uint64_t get_read_bytes; 15726: uint64_t multiget_read_bytes; 15726: uint64_t iter_read_bytes; 15726: 15726: uint64_t blob_cache_hit_count; 15726: uint64_t blob_read_count; 15726: uint64_t blob_read_byte; 15726: uint64_t blob_read_time; 15726: uint64_t blob_checksum_time; 15726: uint64_t blob_decompress_time; 15726: # 133 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/perf_context.h" 15726: uint64_t internal_key_skipped_count; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: uint64_t internal_delete_skipped_count; 15726: 15726: 15726: 15726: uint64_t internal_recent_skipped_count; 15726: 15726: 15726: 15726: uint64_t internal_merge_count; 15726: 15726: 15726: 15726: uint64_t internal_merge_point_lookup_count; 15726: 15726: 15726: 15726: uint64_t internal_range_del_reseek_count; 15726: 15726: uint64_t get_snapshot_time; 15726: uint64_t get_from_memtable_time; 15726: uint64_t get_from_memtable_count; 15726: 15726: uint64_t get_post_process_time; 15726: uint64_t get_from_output_files_time; 15726: 15726: uint64_t seek_on_memtable_time; 15726: 15726: 15726: uint64_t seek_on_memtable_count; 15726: 15726: uint64_t next_on_memtable_count; 15726: 15726: uint64_t prev_on_memtable_count; 15726: 15726: uint64_t seek_child_seek_time; 15726: 15726: uint64_t seek_child_seek_count; 15726: uint64_t seek_min_heap_time; 15726: uint64_t seek_max_heap_time; 15726: 15726: uint64_t seek_internal_seek_time; 15726: 15726: uint64_t find_next_user_entry_time; 15726: 15726: 15726: 15726: 15726: 15726: 15726: uint64_t write_wal_time; 15726: 15726: uint64_t write_memtable_time; 15726: 15726: uint64_t write_delay_time; 15726: 15726: 15726: uint64_t write_scheduling_flushes_compactions_time; 15726: 15726: uint64_t write_pre_and_post_process_time; 15726: 15726: 15726: uint64_t write_thread_wait_nanos; 15726: 15726: 15726: uint64_t db_mutex_lock_nanos; 15726: 15726: uint64_t db_condition_wait_nanos; 15726: 15726: uint64_t merge_operator_time_nanos; 15726: 15726: 15726: uint64_t read_index_block_nanos; 15726: 15726: uint64_t read_filter_block_nanos; 15726: 15726: uint64_t new_table_block_iter_nanos; 15726: 15726: uint64_t new_table_iterator_nanos; 15726: 15726: uint64_t block_seek_nanos; 15726: 15726: uint64_t find_table_nanos; 15726: 15726: uint64_t bloom_memtable_hit_count; 15726: 15726: uint64_t bloom_memtable_miss_count; 15726: 15726: uint64_t bloom_sst_hit_count; 15726: 15726: uint64_t bloom_sst_miss_count; 15726: 15726: 15726: uint64_t key_lock_wait_time; 15726: 15726: uint64_t key_lock_wait_count; 15726: 15726: 15726: 15726: uint64_t env_new_sequential_file_nanos; 15726: uint64_t env_new_random_access_file_nanos; 15726: uint64_t env_new_writable_file_nanos; 15726: uint64_t env_reuse_writable_file_nanos; 15726: uint64_t env_new_random_rw_file_nanos; 15726: uint64_t env_new_directory_nanos; 15726: uint64_t env_file_exists_nanos; 15726: uint64_t env_get_children_nanos; 15726: uint64_t env_get_children_file_attributes_nanos; 15726: uint64_t env_delete_file_nanos; 15726: uint64_t env_create_dir_nanos; 15726: uint64_t env_create_dir_if_missing_nanos; 15726: uint64_t env_delete_dir_nanos; 15726: uint64_t env_get_file_size_nanos; 15726: uint64_t env_get_file_modification_time_nanos; 15726: uint64_t env_rename_file_nanos; 15726: uint64_t env_link_file_nanos; 15726: uint64_t env_lock_file_nanos; 15726: uint64_t env_unlock_file_nanos; 15726: uint64_t env_new_logger_nanos; 15726: 15726: uint64_t get_cpu_nanos; 15726: uint64_t iter_next_cpu_nanos; 15726: uint64_t iter_prev_cpu_nanos; 15726: uint64_t iter_seek_cpu_nanos; 15726: 15726: 15726: 15726: 15726: uint64_t iter_next_count; 15726: uint64_t iter_prev_count; 15726: uint64_t iter_seek_count; 15726: 15726: 15726: uint64_t encrypt_data_nanos; 15726: 15726: uint64_t decrypt_data_nanos; 15726: 15726: uint64_t number_async_seek; 15726: }; 15726: 15726: struct PerfContext : public PerfContextBase { 15726: ~PerfContext(); 15726: 15726: PerfContext() { Reset(); } 15726: 15726: PerfContext(const PerfContext&); 15726: PerfContext& operator=(const PerfContext&); 15726: PerfContext(PerfContext&&) noexcept; 15726: 15726: void Reset(); 15726: 15726: std::string ToString(bool exclude_zero_counters = false) const; 15726: 15726: 15726: void EnablePerLevelPerfContext(); 15726: 15726: 15726: void DisablePerLevelPerfContext(); 15726: 15726: 15726: void ClearPerLevelPerfContext(); 15726: 15726: std::map* level_to_perf_context = nullptr; 15726: bool per_level_perf_context_enabled = false; 15726: 15726: void copyMetrics(const PerfContext* other) noexcept; 15726: }; 15726: # 317 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/perf_context.h" 15726: PerfContext* get_perf_context(); 15726: 15726: } 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_context_imp.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/stop_watch.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: 15726: 15726: class StopWatch { 15726: public: 15726: StopWatch(SystemClock* clock, Statistics* statistics, 15726: const uint32_t hist_type_1, 15726: const uint32_t hist_type_2 = Histograms::HISTOGRAM_ENUM_MAX, 15726: uint64_t* elapsed = nullptr, bool overwrite = true, 15726: bool delay_enabled = false) 15726: : clock_(clock), 15726: statistics_(statistics), 15726: hist_type_1_(statistics && statistics->HistEnabledForType(hist_type_1) 15726: ? hist_type_1 15726: : Histograms::HISTOGRAM_ENUM_MAX), 15726: hist_type_2_(statistics && statistics->HistEnabledForType(hist_type_2) 15726: ? hist_type_2 15726: : Histograms::HISTOGRAM_ENUM_MAX), 15726: elapsed_(elapsed), 15726: overwrite_(overwrite), 15726: stats_enabled_(statistics && 15726: statistics->get_stats_level() > 15726: StatsLevel::kExceptTimers && 15726: (hist_type_1_ != Histograms::HISTOGRAM_ENUM_MAX || 15726: hist_type_2_ != Histograms::HISTOGRAM_ENUM_MAX)), 15726: delay_enabled_(delay_enabled), 15726: total_delay_(0), 15726: delay_start_time_(0), 15726: start_time_((stats_enabled_ || elapsed != nullptr) ? clock->NowMicros() 15726: : 0) {} 15726: 15726: ~StopWatch() { 15726: if (elapsed_) { 15726: if (overwrite_) { 15726: *elapsed_ = clock_->NowMicros() - start_time_; 15726: } else { 15726: *elapsed_ += clock_->NowMicros() - start_time_; 15726: } 15726: } 15726: if (elapsed_ && delay_enabled_) { 15726: *elapsed_ -= total_delay_; 15726: } 15726: if (stats_enabled_) { 15726: const auto time = (elapsed_ != nullptr) 15726: ? *elapsed_ 15726: : (clock_->NowMicros() - start_time_); 15726: if (hist_type_1_ != Histograms::HISTOGRAM_ENUM_MAX) { 15726: statistics_->reportTimeToHistogram(hist_type_1_, time); 15726: } 15726: if (hist_type_2_ != Histograms::HISTOGRAM_ENUM_MAX) { 15726: statistics_->reportTimeToHistogram(hist_type_2_, time); 15726: } 15726: } 15726: } 15726: 15726: void DelayStart() { 15726: 15726: 15726: if (elapsed_ && delay_enabled_ && delay_start_time_ == 0) { 15726: delay_start_time_ = clock_->NowMicros(); 15726: } 15726: } 15726: 15726: void DelayStop() { 15726: if (elapsed_ && delay_enabled_ && delay_start_time_ != 0) { 15726: total_delay_ += clock_->NowMicros() - delay_start_time_; 15726: } 15726: 15726: 15726: delay_start_time_ = 0; 15726: } 15726: 15726: uint64_t GetDelay() const { return delay_enabled_ ? total_delay_ : 0; } 15726: 15726: uint64_t start_time() const { return start_time_; } 15726: 15726: private: 15726: SystemClock* clock_; 15726: Statistics* statistics_; 15726: const uint32_t hist_type_1_; 15726: const uint32_t hist_type_2_; 15726: uint64_t* elapsed_; 15726: bool overwrite_; 15726: bool stats_enabled_; 15726: bool delay_enabled_; 15726: uint64_t total_delay_; 15726: uint64_t delay_start_time_; 15726: const uint64_t start_time_; 15726: }; 15726: 15726: 15726: class StopWatchNano { 15726: public: 15726: explicit StopWatchNano(SystemClock* clock, bool auto_start = false) 15726: : clock_(clock), start_(0) { 15726: if (auto_start) { 15726: Start(); 15726: } 15726: } 15726: 15726: void Start() { start_ = clock_->NowNanos(); } 15726: 15726: uint64_t ElapsedNanos(bool reset = false) { 15726: auto now = clock_->NowNanos(); 15726: auto elapsed = now - start_; 15726: if (reset) { 15726: start_ = now; 15726: } 15726: return elapsed; 15726: } 15726: 15726: uint64_t ElapsedNanosSafe(bool reset = false) { 15726: return (clock_ != nullptr) ? ElapsedNanos(reset) : 0U; 15726: } 15726: 15726: bool IsStarted() { return start_ != 0; } 15726: 15726: private: 15726: SystemClock* clock_; 15726: uint64_t start_; 15726: }; 15726: 15726: } 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_context_imp.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern thread_local PerfContext perf_context; 15726: # 103 "/build/reproducible-path/rocksdb-9.3.1/monitoring/perf_context_imp.h" 15726: } 15726: # 12 "/build/reproducible-path/rocksdb-9.3.1/util/user_comparator_wrapper.h" 2 15726: 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: class UserComparatorWrapper { 15726: public: 15726: 15726: 15726: UserComparatorWrapper() : user_comparator_(nullptr) {} 15726: 15726: explicit UserComparatorWrapper(const Comparator* const user_cmp) 15726: : user_comparator_(user_cmp) {} 15726: 15726: ~UserComparatorWrapper() = default; 15726: 15726: const Comparator* user_comparator() const { return user_comparator_; } 15726: 15726: int Compare(const Slice& a, const Slice& b) const { 15726: if (perf_level >= PerfLevel::kEnableCount) { perf_context.user_key_comparison_count += 1; } static_assert(true, "semicolon required"); 15726: return user_comparator_->Compare(a, b); 15726: } 15726: 15726: bool Equal(const Slice& a, const Slice& b) const { 15726: if (perf_level >= PerfLevel::kEnableCount) { perf_context.user_key_comparison_count += 1; } static_assert(true, "semicolon required"); 15726: return user_comparator_->Equal(a, b); 15726: } 15726: 15726: int CompareTimestamp(const Slice& ts1, const Slice& ts2) const { 15726: return user_comparator_->CompareTimestamp(ts1, ts2); 15726: } 15726: 15726: int CompareWithoutTimestamp(const Slice& a, const Slice& b) const { 15726: if (perf_level >= PerfLevel::kEnableCount) { perf_context.user_key_comparison_count += 1; } static_assert(true, "semicolon required"); 15726: return user_comparator_->CompareWithoutTimestamp(a, b); 15726: } 15726: 15726: int CompareWithoutTimestamp(const Slice& a, bool a_has_ts, const Slice& b, 15726: bool b_has_ts) const { 15726: if (perf_level >= PerfLevel::kEnableCount) { perf_context.user_key_comparison_count += 1; } static_assert(true, "semicolon required"); 15726: return user_comparator_->CompareWithoutTimestamp(a, a_has_ts, b, b_has_ts); 15726: } 15726: 15726: bool EqualWithoutTimestamp(const Slice& a, const Slice& b) const { 15726: return user_comparator_->EqualWithoutTimestamp(a, b); 15726: } 15726: 15726: private: 15726: const Comparator* user_comparator_; 15726: }; 15726: 15726: } 15726: # 24 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: class InternalKey; 15726: 15726: 15726: 15726: 15726: 15726: 15726: enum ValueType : unsigned char { 15726: kTypeDeletion = 0x0, 15726: kTypeValue = 0x1, 15726: kTypeMerge = 0x2, 15726: kTypeLogData = 0x3, 15726: kTypeColumnFamilyDeletion = 0x4, 15726: kTypeColumnFamilyValue = 0x5, 15726: kTypeColumnFamilyMerge = 0x6, 15726: kTypeSingleDeletion = 0x7, 15726: kTypeColumnFamilySingleDeletion = 0x8, 15726: kTypeBeginPrepareXID = 0x9, 15726: kTypeEndPrepareXID = 0xA, 15726: kTypeCommitXID = 0xB, 15726: kTypeRollbackXID = 0xC, 15726: kTypeNoop = 0xD, 15726: kTypeColumnFamilyRangeDeletion = 0xE, 15726: kTypeRangeDeletion = 0xF, 15726: kTypeColumnFamilyBlobIndex = 0x10, 15726: kTypeBlobIndex = 0x11, 15726: 15726: 15726: 15726: 15726: kTypeBeginPersistedPrepareXID = 0x12, 15726: 15726: 15726: 15726: kTypeBeginUnprepareXID = 0x13, 15726: kTypeDeletionWithTimestamp = 0x14, 15726: kTypeCommitXIDAndTimestamp = 0x15, 15726: kTypeWideColumnEntity = 0x16, 15726: kTypeColumnFamilyWideColumnEntity = 0x17, 15726: kTypeValuePreferredSeqno = 0x18, 15726: kTypeColumnFamilyValuePreferredSeqno = 0x19, 15726: kTypeMaxValid, 15726: 15726: kMaxValue = 0x7F 15726: }; 15726: 15726: 15726: extern const ValueType kValueTypeForSeek; 15726: extern const ValueType kValueTypeForSeekForPrev; 15726: 15726: 15726: 15726: struct UserKeyRange { 15726: 15726: 15726: Slice start; 15726: Slice limit; 15726: 15726: UserKeyRange() = default; 15726: UserKeyRange(const Slice& s, const Slice& l) : start(s), limit(l) {} 15726: }; 15726: 15726: 15726: 15726: struct UserKeyRangePtr { 15726: 15726: 15726: 15726: std::optional start; 15726: 15726: std::optional limit; 15726: 15726: UserKeyRangePtr(const std::optional& s, const std::optional& l) 15726: : start(s), limit(l) {} 15726: }; 15726: 15726: 15726: 15726: inline bool IsValueType(ValueType t) { 15726: return t <= kTypeMerge || kTypeSingleDeletion == t || kTypeBlobIndex == t || 15726: kTypeDeletionWithTimestamp == t || kTypeWideColumnEntity == t || 15726: kTypeValuePreferredSeqno == t; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: inline bool IsExtendedValueType(ValueType t) { 15726: return IsValueType(t) || t == kTypeRangeDeletion || t == kTypeMaxValid; 15726: } 15726: 15726: 15726: 15726: static const SequenceNumber kMaxSequenceNumber = ((0x1ull << 56) - 1); 15726: 15726: static const SequenceNumber kDisableGlobalSequenceNumber = 15726: std::numeric_limits::max(); 15726: 15726: constexpr uint64_t kNumInternalBytes = 8; 15726: 15726: 15726: extern const std::string kDisableUserTimestamp; 15726: 15726: 15726: 15726: struct ParsedInternalKey { 15726: Slice user_key; 15726: SequenceNumber sequence; 15726: ValueType type; 15726: 15726: ParsedInternalKey() 15726: : sequence(kMaxSequenceNumber), 15726: type(kTypeDeletion) 15726: {} 15726: 15726: ParsedInternalKey(const Slice& u, const SequenceNumber& seq, ValueType t) 15726: : user_key(u), sequence(seq), type(t) {} 15726: std::string DebugString(bool log_err_key, bool hex, 15726: const Comparator* ucmp = nullptr) const; 15726: 15726: void clear() { 15726: user_key.clear(); 15726: sequence = 0; 15726: type = kTypeDeletion; 15726: } 15726: 15726: void SetTimestamp(const Slice& ts) { 15726: 15726: # 161 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 161 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ts.size() <= user_key.size() 15726: # 161 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 161 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "ts.size() <= user_key.size()" 15726: # 161 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 161 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: const char* addr = user_key.data() + user_key.size() - ts.size(); 15726: memcpy(const_cast(addr), ts.data(), ts.size()); 15726: } 15726: 15726: Slice GetTimestamp(size_t ts_sz) { 15726: 15726: # 167 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 167 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ts_sz <= user_key.size() 15726: # 167 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 167 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "ts_sz <= user_key.size()" 15726: # 167 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 167 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: const char* addr = user_key.data() + user_key.size() - ts_sz; 15726: return Slice(const_cast(addr), ts_sz); 15726: } 15726: }; 15726: 15726: 15726: inline size_t InternalKeyEncodingLength(const ParsedInternalKey& key) { 15726: return key.user_key.size() + kNumInternalBytes; 15726: } 15726: 15726: 15726: inline uint64_t PackSequenceAndType(uint64_t seq, ValueType t) { 15726: 15726: # 180 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 180 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: seq <= kMaxSequenceNumber 15726: # 180 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 180 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "seq <= kMaxSequenceNumber" 15726: # 180 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 180 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: 15726: 15726: # 182 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 182 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: IsExtendedValueType(t) || t == kTypeMaxValid 15726: # 182 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 182 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "IsExtendedValueType(t) || t == kTypeMaxValid" 15726: # 182 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 182 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: return (seq << 8) | t; 15726: } 15726: 15726: 15726: 15726: inline void UnPackSequenceAndType(uint64_t packed, uint64_t* seq, 15726: ValueType* t) { 15726: *seq = packed >> 8; 15726: *t = static_cast(packed & 0xff); 15726: 15726: 15726: 15726: 15726: 15726: } 15726: 15726: const uint64_t kRangeTombstoneSentinel = 15726: PackSequenceAndType(kMaxSequenceNumber, kTypeRangeDeletion); 15726: 15726: EntryType GetEntryType(ValueType value_type); 15726: 15726: 15726: 15726: 15726: 15726: 15726: void AppendInternalKey(std::string* result, const ParsedInternalKey& key); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void AppendInternalKeyWithDifferentTimestamp(std::string* result, 15726: const ParsedInternalKey& key, 15726: const Slice& ts); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void AppendUserKeyWithDifferentTimestamp(std::string* result, const Slice& key, 15726: const Slice& ts); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void AppendInternalKeyFooter(std::string* result, SequenceNumber s, 15726: ValueType t); 15726: 15726: 15726: 15726: 15726: 15726: 15726: void AppendKeyWithMinTimestamp(std::string* result, const Slice& key, 15726: size_t ts_sz); 15726: 15726: 15726: 15726: 15726: 15726: 15726: void AppendKeyWithMaxTimestamp(std::string* result, const Slice& key, 15726: size_t ts_sz); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void AppendUserKeyWithMinTimestamp(std::string* result, const Slice& key, 15726: size_t ts_sz); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void AppendUserKeyWithMaxTimestamp(std::string* result, const Slice& key, 15726: size_t ts_sz); 15726: # 280 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: void PadInternalKeyWithMinTimestamp(std::string* result, const Slice& key, 15726: size_t ts_sz); 15726: # 290 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: void PadInternalKeyWithMaxTimestamp(std::string* result, const Slice& key, 15726: size_t ts_sz); 15726: # 300 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: void StripTimestampFromInternalKey(std::string* result, const Slice& key, 15726: size_t ts_sz); 15726: # 310 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: void ReplaceInternalKeyWithMinTimestamp(std::string* result, const Slice& key, 15726: size_t ts_sz); 15726: 15726: 15726: 15726: 15726: 15726: Status ParseInternalKey(const Slice& internal_key, ParsedInternalKey* result, 15726: bool log_err_key); 15726: 15726: 15726: 15726: 15726: 15726: inline Slice ExtractUserKey(const Slice& internal_key) { 15726: 15726: # 325 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 325 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: internal_key.size() >= kNumInternalBytes 15726: # 325 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 325 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "internal_key.size() >= kNumInternalBytes" 15726: # 325 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 325 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: return Slice(internal_key.data(), internal_key.size() - kNumInternalBytes); 15726: } 15726: 15726: 15726: 15726: inline Slice ExtractUserKeyAndStripTimestamp(const Slice& internal_key, 15726: size_t ts_sz) { 15726: Slice ret = internal_key; 15726: ret.remove_suffix(kNumInternalBytes + ts_sz); 15726: return ret; 15726: } 15726: 15726: 15726: 15726: inline Slice StripTimestampFromUserKey(const Slice& user_key, size_t ts_sz) { 15726: Slice ret = user_key; 15726: ret.remove_suffix(ts_sz); 15726: return ret; 15726: } 15726: 15726: 15726: 15726: inline Slice ExtractTimestampFromUserKey(const Slice& user_key, size_t ts_sz) { 15726: 15726: # 349 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 349 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: user_key.size() >= ts_sz 15726: # 349 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 349 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "user_key.size() >= ts_sz" 15726: # 349 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 349 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: return Slice(user_key.data() + user_key.size() - ts_sz, ts_sz); 15726: } 15726: 15726: 15726: 15726: inline Slice ExtractTimestampFromKey(const Slice& internal_key, size_t ts_sz) { 15726: const size_t key_size = internal_key.size(); 15726: 15726: # 357 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 357 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: key_size >= kNumInternalBytes + ts_sz 15726: # 357 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 357 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "key_size >= kNumInternalBytes + ts_sz" 15726: # 357 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 357 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: return Slice(internal_key.data() + key_size - ts_sz - kNumInternalBytes, 15726: ts_sz); 15726: } 15726: 15726: 15726: 15726: inline uint64_t ExtractInternalKeyFooter(const Slice& internal_key) { 15726: 15726: # 365 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 365 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: internal_key.size() >= kNumInternalBytes 15726: # 365 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 365 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "internal_key.size() >= kNumInternalBytes" 15726: # 365 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 365 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: const size_t n = internal_key.size(); 15726: return DecodeFixed64(internal_key.data() + n - kNumInternalBytes); 15726: } 15726: 15726: 15726: 15726: inline ValueType ExtractValueType(const Slice& internal_key) { 15726: uint64_t num = ExtractInternalKeyFooter(internal_key); 15726: unsigned char c = num & 0xff; 15726: return static_cast(c); 15726: } 15726: 15726: 15726: 15726: class InternalKeyComparator 15726: 15726: 15726: 15726: : public CompareInterface { 15726: private: 15726: UserComparatorWrapper user_comparator_; 15726: 15726: public: 15726: 15726: 15726: InternalKeyComparator() = default; 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit InternalKeyComparator(const Comparator* c) : user_comparator_(c) {} 15726: virtual ~InternalKeyComparator() {} 15726: 15726: int Compare(const Slice& a, const Slice& b) const override; 15726: 15726: bool Equal(const Slice& a, const Slice& b) const { 15726: 15726: 15726: return Compare(a, b) == 0; 15726: } 15726: 15726: 15726: int CompareKeySeq(const Slice& a, const Slice& b) const; 15726: int CompareKeySeq(const ParsedInternalKey& a, const Slice& b) const; 15726: 15726: const Comparator* user_comparator() const { 15726: return user_comparator_.user_comparator(); 15726: } 15726: 15726: int Compare(const InternalKey& a, const InternalKey& b) const; 15726: int Compare(const ParsedInternalKey& a, const ParsedInternalKey& b) const; 15726: int Compare(const Slice& a, const ParsedInternalKey& b) const; 15726: int Compare(const ParsedInternalKey& a, const Slice& b) const; 15726: 15726: 15726: 15726: 15726: int Compare(const Slice& a, SequenceNumber a_global_seqno, const Slice& b, 15726: SequenceNumber b_global_seqno) const; 15726: }; 15726: 15726: 15726: class InternalKey { 15726: private: 15726: std::string rep_; 15726: 15726: public: 15726: InternalKey() {} 15726: InternalKey(const Slice& _user_key, SequenceNumber s, ValueType t) { 15726: AppendInternalKey(&rep_, ParsedInternalKey(_user_key, s, t)); 15726: } 15726: InternalKey(const Slice& _user_key, SequenceNumber s, ValueType t, Slice ts) { 15726: AppendInternalKeyWithDifferentTimestamp( 15726: &rep_, ParsedInternalKey(_user_key, s, t), ts); 15726: } 15726: 15726: 15726: 15726: void SetMaxPossibleForUserKey(const Slice& _user_key) { 15726: AppendInternalKey( 15726: &rep_, ParsedInternalKey(_user_key, 0, static_cast(0))); 15726: } 15726: 15726: 15726: 15726: void SetMinPossibleForUserKey(const Slice& _user_key) { 15726: AppendInternalKey(&rep_, ParsedInternalKey(_user_key, kMaxSequenceNumber, 15726: kValueTypeForSeek)); 15726: } 15726: 15726: bool Valid() const { 15726: ParsedInternalKey parsed; 15726: return (ParseInternalKey(Slice(rep_), &parsed, false ) 15726: .ok()); 15726: } 15726: 15726: void DecodeFrom(const Slice& s) { rep_.assign(s.data(), s.size()); } 15726: Slice Encode() const { 15726: 15726: # 466 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 466 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: !rep_.empty() 15726: # 466 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 466 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "!rep_.empty()" 15726: # 466 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 466 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: return rep_; 15726: } 15726: 15726: Slice user_key() const { return ExtractUserKey(rep_); } 15726: size_t size() const { return rep_.size(); } 15726: 15726: void Set(const Slice& _user_key, SequenceNumber s, ValueType t) { 15726: SetFrom(ParsedInternalKey(_user_key, s, t)); 15726: } 15726: 15726: void Set(const Slice& _user_key_with_ts, SequenceNumber s, ValueType t, 15726: const Slice& ts) { 15726: ParsedInternalKey pik(_user_key_with_ts, s, t); 15726: 15726: 15726: SetFrom(pik, ts); 15726: } 15726: 15726: void SetFrom(const ParsedInternalKey& p) { 15726: rep_.clear(); 15726: AppendInternalKey(&rep_, p); 15726: } 15726: 15726: void SetFrom(const ParsedInternalKey& p, const Slice& ts) { 15726: rep_.clear(); 15726: AppendInternalKeyWithDifferentTimestamp(&rep_, p, ts); 15726: } 15726: 15726: void Clear() { rep_.clear(); } 15726: 15726: 15726: 15726: std::string* rep() { return &rep_; } 15726: 15726: 15726: 15726: void ConvertFromUserKey(SequenceNumber s, ValueType t) { 15726: AppendInternalKeyFooter(&rep_, s, t); 15726: } 15726: 15726: std::string DebugString(bool hex, const Comparator* ucmp = nullptr) const; 15726: }; 15726: 15726: inline int InternalKeyComparator::Compare(const InternalKey& a, 15726: const InternalKey& b) const { 15726: return Compare(a.Encode(), b.Encode()); 15726: } 15726: 15726: inline Status ParseInternalKey(const Slice& internal_key, 15726: ParsedInternalKey* result, bool log_err_key) { 15726: const size_t n = internal_key.size(); 15726: 15726: if (n < kNumInternalBytes) { 15726: return Status::Corruption("Corrupted Key: Internal Key too small. Size=" + 15726: std::to_string(n) + ". "); 15726: } 15726: 15726: uint64_t num = DecodeFixed64(internal_key.data() + n - kNumInternalBytes); 15726: unsigned char c = num & 0xff; 15726: result->sequence = num >> 8; 15726: result->type = static_cast(c); 15726: 15726: # 528 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 528 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: result->type <= ValueType::kMaxValue 15726: # 528 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 528 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "result->type <= ValueType::kMaxValue" 15726: # 528 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 528 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: result->user_key = Slice(internal_key.data(), n - kNumInternalBytes); 15726: 15726: if (IsExtendedValueType(result->type)) { 15726: return Status::OK(); 15726: } else { 15726: return Status::Corruption("Corrupted Key", 15726: result->DebugString(log_err_key, true)); 15726: } 15726: } 15726: 15726: 15726: 15726: inline void UpdateInternalKey(std::string* ikey, uint64_t seq, ValueType t) { 15726: size_t ikey_sz = ikey->size(); 15726: 15726: # 543 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 543 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ikey_sz >= kNumInternalBytes 15726: # 543 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 543 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "ikey_sz >= kNumInternalBytes" 15726: # 543 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 543 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: uint64_t newval = (seq << 8) | t; 15726: 15726: 15726: 15726: EncodeFixed64(&(*ikey)[ikey_sz - kNumInternalBytes], newval); 15726: } 15726: 15726: 15726: inline uint64_t GetInternalKeySeqno(const Slice& internal_key) { 15726: const size_t n = internal_key.size(); 15726: 15726: # 554 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 554 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: n >= kNumInternalBytes 15726: # 554 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 554 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "n >= kNumInternalBytes" 15726: # 554 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 554 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: uint64_t num = DecodeFixed64(internal_key.data() + n - kNumInternalBytes); 15726: return num >> 8; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: class IterKey { 15726: public: 15726: IterKey() 15726: : buf_(space_), 15726: key_(buf_), 15726: key_size_(0), 15726: buf_size_(sizeof(space_)), 15726: is_user_key_(true) {} 15726: 15726: IterKey(const IterKey&) = delete; 15726: void operator=(const IterKey&) = delete; 15726: 15726: ~IterKey() { ResetBuffer(); } 15726: 15726: 15726: void SetIsUserKey(bool is_user_key) { is_user_key_ = is_user_key; } 15726: 15726: 15726: 15726: 15726: Slice GetKey() const { return Slice(key_, key_size_); } 15726: 15726: Slice GetInternalKey() const { 15726: 15726: # 588 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 588 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: !IsUserKey() 15726: # 588 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 588 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "!IsUserKey()" 15726: # 588 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 588 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: return Slice(key_, key_size_); 15726: } 15726: 15726: 15726: 15726: Slice GetUserKey() const { 15726: if (IsUserKey()) { 15726: return Slice(key_, key_size_); 15726: } else { 15726: 15726: # 598 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 598 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: key_size_ >= kNumInternalBytes 15726: # 598 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 598 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "key_size_ >= kNumInternalBytes" 15726: # 598 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 598 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: return Slice(key_, key_size_ - kNumInternalBytes); 15726: } 15726: } 15726: 15726: size_t Size() const { return key_size_; } 15726: 15726: void Clear() { key_size_ = 0; } 15726: 15726: 15726: 15726: 15726: 15726: void TrimAppend(const size_t shared_len, const char* non_shared_data, 15726: const size_t non_shared_len) { 15726: 15726: # 613 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 613 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: shared_len <= key_size_ 15726: # 613 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 613 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "shared_len <= key_size_" 15726: # 613 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 613 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: size_t total_size = shared_len + non_shared_len; 15726: 15726: if (IsKeyPinned() ) { 15726: 15726: EnlargeBufferIfNeeded(total_size); 15726: memcpy(buf_, key_, shared_len); 15726: } else if (total_size > buf_size_) { 15726: 15726: char* p = new char[total_size]; 15726: memcpy(p, key_, shared_len); 15726: 15726: if (buf_ != space_) { 15726: delete[] buf_; 15726: } 15726: 15726: buf_ = p; 15726: buf_size_ = total_size; 15726: } 15726: 15726: memcpy(buf_ + shared_len, non_shared_data, non_shared_len); 15726: key_ = buf_; 15726: key_size_ = total_size; 15726: } 15726: 15726: 15726: 15726: 15726: void TrimAppendWithTimestamp(const size_t shared_len, 15726: const char* non_shared_data, 15726: const size_t non_shared_len, 15726: const size_t ts_sz) { 15726: std::string kTsMin(ts_sz, static_cast(0)); 15726: std::string key_with_ts; 15726: std::vector key_parts_with_ts; 15726: if (IsUserKey()) { 15726: key_parts_with_ts = {Slice(key_, shared_len), 15726: Slice(non_shared_data, non_shared_len), 15726: Slice(kTsMin)}; 15726: } else { 15726: 15726: # 653 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 653 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: shared_len + non_shared_len >= kNumInternalBytes 15726: # 653 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 653 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "shared_len + non_shared_len >= kNumInternalBytes" 15726: # 653 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 653 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: 15726: 15726: 15726: 15726: 15726: 15726: const size_t user_key_len = key_size_ - kNumInternalBytes; 15726: const size_t sharable_user_key_len = user_key_len - ts_sz; 15726: const size_t shared_user_key_len = 15726: std::min(shared_len, sharable_user_key_len); 15726: const size_t shared_internal_bytes_len = shared_len - shared_user_key_len; 15726: 15726: 15726: 15726: key_parts_with_ts.reserve(5); 15726: bool ts_added = false; 15726: 15726: MaybeAddKeyPartsWithTimestamp( 15726: key_, shared_user_key_len, 15726: shared_internal_bytes_len + non_shared_len < kNumInternalBytes, 15726: shared_len + non_shared_len - kNumInternalBytes, kTsMin, 15726: key_parts_with_ts, &ts_added); 15726: MaybeAddKeyPartsWithTimestamp( 15726: key_ + user_key_len, shared_internal_bytes_len, 15726: non_shared_len < kNumInternalBytes, 15726: shared_internal_bytes_len + non_shared_len - kNumInternalBytes, 15726: kTsMin, key_parts_with_ts, &ts_added); 15726: MaybeAddKeyPartsWithTimestamp(non_shared_data, non_shared_len, 15726: non_shared_len >= kNumInternalBytes, 15726: non_shared_len - kNumInternalBytes, kTsMin, 15726: key_parts_with_ts, &ts_added); 15726: 15726: # 685 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 685 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ts_added 15726: # 685 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 685 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "ts_added" 15726: # 685 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 685 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: } 15726: 15726: Slice new_key(SliceParts(&key_parts_with_ts.front(), 15726: static_cast(key_parts_with_ts.size())), 15726: &key_with_ts); 15726: SetKey(new_key); 15726: } 15726: 15726: Slice SetKey(const Slice& key, bool copy = true) { 15726: 15726: return SetKeyImpl(key, copy); 15726: } 15726: 15726: 15726: 15726: 15726: Slice SetUserKey(const Slice& key, bool copy = true) { 15726: is_user_key_ = true; 15726: return SetKeyImpl(key, copy); 15726: } 15726: 15726: Slice SetInternalKey(const Slice& key, bool copy = true) { 15726: is_user_key_ = false; 15726: return SetKeyImpl(key, copy); 15726: } 15726: 15726: 15726: 15726: Slice SetInternalKey(const Slice& key, ParsedInternalKey* ikey) { 15726: size_t key_n = key.size(); 15726: 15726: # 716 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 716 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: key_n >= kNumInternalBytes 15726: # 716 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 716 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "key_n >= kNumInternalBytes" 15726: # 716 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 716 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: SetInternalKey(key); 15726: ikey->user_key = Slice(key_, key_n - kNumInternalBytes); 15726: return Slice(key_, key_n); 15726: } 15726: 15726: 15726: void OwnKey() { 15726: 15726: # 724 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 724 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: IsKeyPinned() == true 15726: # 724 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 724 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "IsKeyPinned() == true" 15726: # 724 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 724 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: 15726: Reserve(key_size_); 15726: memcpy(buf_, key_, key_size_); 15726: key_ = buf_; 15726: } 15726: 15726: 15726: 15726: void UpdateInternalKey(uint64_t seq, ValueType t, const Slice* ts = nullptr) { 15726: 15726: # 734 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 734 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: !IsKeyPinned() 15726: # 734 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 734 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "!IsKeyPinned()" 15726: # 734 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 734 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: 15726: # 735 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 735 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: key_size_ >= kNumInternalBytes 15726: # 735 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 735 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "key_size_ >= kNumInternalBytes" 15726: # 735 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 735 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: if (ts) { 15726: 15726: # 737 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 737 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: key_size_ >= kNumInternalBytes + ts->size() 15726: # 737 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 737 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "key_size_ >= kNumInternalBytes + ts->size()" 15726: # 737 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 737 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: memcpy(&buf_[key_size_ - kNumInternalBytes - ts->size()], ts->data(), 15726: ts->size()); 15726: } 15726: uint64_t newval = (seq << 8) | t; 15726: EncodeFixed64(&buf_[key_size_ - kNumInternalBytes], newval); 15726: } 15726: 15726: bool IsKeyPinned() const { return (key_ != buf_); } 15726: 15726: 15726: 15726: 15726: void SetInternalKey(const Slice& key_prefix, const Slice& user_key, 15726: SequenceNumber s, 15726: ValueType value_type = kValueTypeForSeek, 15726: const Slice* ts = nullptr) { 15726: size_t psize = key_prefix.size(); 15726: size_t usize = user_key.size(); 15726: size_t ts_sz = (ts != nullptr ? ts->size() : 0); 15726: EnlargeBufferIfNeeded(psize + usize + sizeof(uint64_t) + ts_sz); 15726: if (psize > 0) { 15726: memcpy(buf_, key_prefix.data(), psize); 15726: } 15726: memcpy(buf_ + psize, user_key.data(), usize); 15726: if (ts) { 15726: memcpy(buf_ + psize + usize, ts->data(), ts_sz); 15726: } 15726: EncodeFixed64(buf_ + usize + psize + ts_sz, 15726: PackSequenceAndType(s, value_type)); 15726: 15726: key_ = buf_; 15726: key_size_ = psize + usize + sizeof(uint64_t) + ts_sz; 15726: is_user_key_ = false; 15726: } 15726: 15726: void SetInternalKey(const Slice& user_key, SequenceNumber s, 15726: ValueType value_type = kValueTypeForSeek, 15726: const Slice* ts = nullptr) { 15726: SetInternalKey(Slice(), user_key, s, value_type, ts); 15726: } 15726: 15726: void Reserve(size_t size) { 15726: EnlargeBufferIfNeeded(size); 15726: key_size_ = size; 15726: } 15726: 15726: void SetInternalKey(const ParsedInternalKey& parsed_key) { 15726: SetInternalKey(Slice(), parsed_key); 15726: } 15726: 15726: void SetInternalKey(const Slice& key_prefix, 15726: const ParsedInternalKey& parsed_key_suffix) { 15726: SetInternalKey(key_prefix, parsed_key_suffix.user_key, 15726: parsed_key_suffix.sequence, parsed_key_suffix.type); 15726: } 15726: 15726: void EncodeLengthPrefixedKey(const Slice& key) { 15726: auto size = key.size(); 15726: EnlargeBufferIfNeeded(size + static_cast(VarintLength(size))); 15726: char* ptr = EncodeVarint32(buf_, static_cast(size)); 15726: memcpy(ptr, key.data(), size); 15726: key_ = buf_; 15726: is_user_key_ = true; 15726: } 15726: 15726: bool IsUserKey() const { return is_user_key_; } 15726: 15726: private: 15726: char* buf_; 15726: const char* key_; 15726: size_t key_size_; 15726: size_t buf_size_; 15726: char space_[39]; 15726: bool is_user_key_; 15726: 15726: Slice SetKeyImpl(const Slice& key, bool copy) { 15726: size_t size = key.size(); 15726: if (copy) { 15726: 15726: EnlargeBufferIfNeeded(size); 15726: memcpy(buf_, key.data(), size); 15726: key_ = buf_; 15726: } else { 15726: 15726: key_ = key.data(); 15726: } 15726: key_size_ = size; 15726: return Slice(key_, key_size_); 15726: } 15726: 15726: void ResetBuffer() { 15726: if (buf_ != space_) { 15726: delete[] buf_; 15726: buf_ = space_; 15726: } 15726: buf_size_ = sizeof(space_); 15726: key_size_ = 0; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: void EnlargeBufferIfNeeded(size_t key_size) { 15726: 15726: 15726: if (key_size > buf_size_) { 15726: EnlargeBuffer(key_size); 15726: } 15726: } 15726: 15726: void EnlargeBuffer(size_t key_size); 15726: 15726: void MaybeAddKeyPartsWithTimestamp(const char* slice_data, 15726: const size_t slice_sz, bool add_timestamp, 15726: const size_t left_sz, 15726: const std::string& min_timestamp, 15726: std::vector& key_parts, 15726: bool* ts_added) { 15726: if (add_timestamp && !*ts_added) { 15726: 15726: # 859 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 859 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: slice_sz >= left_sz 15726: # 859 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 859 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "slice_sz >= left_sz" 15726: # 859 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 859 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: key_parts.emplace_back(slice_data, left_sz); 15726: key_parts.emplace_back(min_timestamp); 15726: key_parts.emplace_back(slice_data + left_sz, slice_sz - left_sz); 15726: *ts_added = true; 15726: } else { 15726: key_parts.emplace_back(slice_data, slice_sz); 15726: } 15726: } 15726: }; 15726: 15726: 15726: 15726: class InternalKeySliceTransform : public SliceTransform { 15726: public: 15726: explicit InternalKeySliceTransform(const SliceTransform* transform) 15726: : transform_(transform) {} 15726: 15726: const char* Name() const override { return transform_->Name(); } 15726: 15726: Slice Transform(const Slice& src) const override { 15726: auto user_key = ExtractUserKey(src); 15726: return transform_->Transform(user_key); 15726: } 15726: 15726: bool InDomain(const Slice& src) const override { 15726: auto user_key = ExtractUserKey(src); 15726: return transform_->InDomain(user_key); 15726: } 15726: 15726: bool InRange(const Slice& dst) const override { 15726: auto user_key = ExtractUserKey(dst); 15726: return transform_->InRange(user_key); 15726: } 15726: 15726: const SliceTransform* user_prefix_extractor() const { return transform_; } 15726: 15726: private: 15726: 15726: 15726: const SliceTransform* const transform_; 15726: }; 15726: 15726: 15726: 15726: 15726: bool ReadKeyFromWriteBatchEntry(Slice* input, Slice* key, bool cf_record); 15726: # 914 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: Status ReadRecordFromWriteBatch(Slice* input, char* tag, 15726: uint32_t* column_family, Slice* key, 15726: Slice* value, Slice* blob, Slice* xid, 15726: uint64_t* write_unix_time); 15726: 15726: 15726: 15726: 15726: 15726: struct RangeTombstone { 15726: Slice start_key_; 15726: Slice end_key_; 15726: SequenceNumber seq_; 15726: 15726: 15726: Slice ts_; 15726: std::string pinned_start_key_; 15726: std::string pinned_end_key_; 15726: 15726: RangeTombstone() = default; 15726: RangeTombstone(Slice sk, Slice ek, SequenceNumber sn) 15726: : start_key_(sk), end_key_(ek), seq_(sn) {} 15726: 15726: 15726: 15726: 15726: 15726: 15726: RangeTombstone(Slice sk, Slice ek, SequenceNumber sn, Slice ts, 15726: bool logical_strip_timestamp) 15726: : seq_(sn) { 15726: const size_t ts_sz = ts.size(); 15726: 15726: # 946 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: (static_cast ( 15726: # 946 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ts_sz > 0 15726: # 946 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 946 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: "ts_sz > 0" 15726: # 946 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 946 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: ; 15726: pinned_start_key_.reserve(sk.size()); 15726: pinned_end_key_.reserve(ek.size()); 15726: if (logical_strip_timestamp) { 15726: AppendUserKeyWithMinTimestamp(&pinned_start_key_, sk, ts_sz); 15726: AppendUserKeyWithMinTimestamp(&pinned_end_key_, ek, ts_sz); 15726: } else { 15726: AppendUserKeyWithDifferentTimestamp(&pinned_start_key_, sk, ts); 15726: AppendUserKeyWithDifferentTimestamp(&pinned_end_key_, ek, ts); 15726: } 15726: start_key_ = pinned_start_key_; 15726: end_key_ = pinned_end_key_; 15726: ts_ = Slice(pinned_start_key_.data() + sk.size() - ts_sz, ts_sz); 15726: } 15726: 15726: RangeTombstone(ParsedInternalKey parsed_key, Slice value) { 15726: start_key_ = parsed_key.user_key; 15726: seq_ = parsed_key.sequence; 15726: end_key_ = value; 15726: } 15726: 15726: 15726: std::pair Serialize() const { 15726: auto key = InternalKey(start_key_, seq_, kTypeRangeDeletion); 15726: return std::make_pair(std::move(key), end_key_); 15726: } 15726: 15726: 15726: InternalKey SerializeKey() const { 15726: return InternalKey(start_key_, seq_, kTypeRangeDeletion); 15726: } 15726: # 985 "/build/reproducible-path/rocksdb-9.3.1/db/dbformat.h" 15726: InternalKey SerializeEndKey() const { 15726: if (!ts_.empty()) { 15726: static constexpr char kTsMax[] = "\xff\xff\xff\xff\xff\xff\xff\xff\xff"; 15726: if (ts_.size() <= strlen(kTsMax)) { 15726: return InternalKey(end_key_, kMaxSequenceNumber, kTypeRangeDeletion, 15726: Slice(kTsMax, ts_.size())); 15726: } else { 15726: return InternalKey(end_key_, kMaxSequenceNumber, kTypeRangeDeletion, 15726: std::string(ts_.size(), '\xff')); 15726: } 15726: } 15726: return InternalKey(end_key_, kMaxSequenceNumber, kTypeRangeDeletion); 15726: } 15726: }; 15726: 15726: inline int InternalKeyComparator::Compare(const Slice& akey, 15726: const Slice& bkey) const { 15726: 15726: 15726: 15726: 15726: int r = user_comparator_.Compare(ExtractUserKey(akey), ExtractUserKey(bkey)); 15726: if (r == 0) { 15726: const uint64_t anum = 15726: DecodeFixed64(akey.data() + akey.size() - kNumInternalBytes); 15726: const uint64_t bnum = 15726: DecodeFixed64(bkey.data() + bkey.size() - kNumInternalBytes); 15726: if (anum > bnum) { 15726: r = -1; 15726: } else if (anum < bnum) { 15726: r = +1; 15726: } 15726: } 15726: return r; 15726: } 15726: 15726: inline int InternalKeyComparator::CompareKeySeq(const Slice& akey, 15726: const Slice& bkey) const { 15726: 15726: 15726: 15726: int r = user_comparator_.Compare(ExtractUserKey(akey), ExtractUserKey(bkey)); 15726: if (r == 0) { 15726: 15726: const uint64_t anum = 15726: DecodeFixed64(akey.data() + akey.size() - kNumInternalBytes) >> 8; 15726: const uint64_t bnum = 15726: DecodeFixed64(bkey.data() + bkey.size() - kNumInternalBytes) >> 8; 15726: if (anum > bnum) { 15726: r = -1; 15726: } else if (anum < bnum) { 15726: r = +1; 15726: } 15726: } 15726: return r; 15726: } 15726: 15726: inline int InternalKeyComparator::CompareKeySeq(const ParsedInternalKey& a, 15726: const Slice& b) const { 15726: 15726: 15726: 15726: int r = user_comparator_.Compare(a.user_key, ExtractUserKey(b)); 15726: if (r == 0) { 15726: 15726: const uint64_t anum = a.sequence; 15726: const uint64_t bnum = 15726: DecodeFixed64(b.data() + b.size() - kNumInternalBytes) >> 8; 15726: if (anum > bnum) { 15726: r = -1; 15726: } else if (anum < bnum) { 15726: r = +1; 15726: } 15726: } 15726: return r; 15726: } 15726: 15726: inline int InternalKeyComparator::Compare(const Slice& a, 15726: SequenceNumber a_global_seqno, 15726: const Slice& b, 15726: SequenceNumber b_global_seqno) const { 15726: int r = user_comparator_.Compare(ExtractUserKey(a), ExtractUserKey(b)); 15726: if (r == 0) { 15726: uint64_t a_footer, b_footer; 15726: if (a_global_seqno == kDisableGlobalSequenceNumber) { 15726: a_footer = ExtractInternalKeyFooter(a); 15726: } else { 15726: a_footer = PackSequenceAndType(a_global_seqno, ExtractValueType(a)); 15726: } 15726: if (b_global_seqno == kDisableGlobalSequenceNumber) { 15726: b_footer = ExtractInternalKeyFooter(b); 15726: } else { 15726: b_footer = PackSequenceAndType(b_global_seqno, ExtractValueType(b)); 15726: } 15726: if (a_footer > b_footer) { 15726: r = -1; 15726: } else if (a_footer < b_footer) { 15726: r = +1; 15726: } 15726: } 15726: return r; 15726: } 15726: 15726: 15726: struct ParsedInternalKeyComparator { 15726: explicit ParsedInternalKeyComparator(const InternalKeyComparator* c) 15726: : cmp(c) {} 15726: 15726: bool operator()(const ParsedInternalKey& a, 15726: const ParsedInternalKey& b) const { 15726: return cmp->Compare(a, b) < 0; 15726: } 15726: 15726: const InternalKeyComparator* cmp; 15726: }; 15726: 15726: } 15726: # 20 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 1 15726: # 31 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: template 15726: class ProtectionInfo; 15726: template 15726: class ProtectionInfoKVO; 15726: template 15726: class ProtectionInfoKVOC; 15726: template 15726: class ProtectionInfoKVOS; 15726: template 15726: class ProtectionInfoKV; 15726: 15726: 15726: using ProtectionInfo64 = ProtectionInfo; 15726: using ProtectionInfoKVO64 = ProtectionInfoKVO; 15726: using ProtectionInfoKVOC64 = ProtectionInfoKVOC; 15726: using ProtectionInfoKVOS64 = ProtectionInfoKVOS; 15726: 15726: template 15726: class ProtectionInfo { 15726: public: 15726: ProtectionInfo() = default; 15726: 15726: Status GetStatus() const; 15726: ProtectionInfoKVO ProtectKVO(const Slice& key, const Slice& value, 15726: ValueType op_type) const; 15726: ProtectionInfoKVO ProtectKVO(const SliceParts& key, 15726: const SliceParts& value, 15726: ValueType op_type) const; 15726: ProtectionInfoKV ProtectKV(const Slice& key, const Slice& value) const; 15726: 15726: private: 15726: friend class ProtectionInfoKVO; 15726: friend class ProtectionInfoKVOS; 15726: friend class ProtectionInfoKVOC; 15726: friend class ProtectionInfoKV; 15726: # 84 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 15726: static const uint64_t kSeedK = 0; 15726: static const uint64_t kSeedV = 0xD28AAD72F49BD50B; 15726: static const uint64_t kSeedO = 0xA5155AE5E937AA16; 15726: static const uint64_t kSeedS = 0x77A00858DDD37F21; 15726: static const uint64_t kSeedC = 0x4A2AB5CBD26F542C; 15726: 15726: ProtectionInfo(T val) : val_(val) { 15726: static_assert(sizeof(ProtectionInfo) == sizeof(T), ""); 15726: } 15726: 15726: T GetVal() const { return val_; } 15726: void SetVal(T val) { val_ = val; } 15726: 15726: void Encode(uint8_t len, char* dst) const { 15726: 15726: # 98 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 15726: (static_cast ( 15726: # 98 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 15726: sizeof(val_) >= len 15726: # 98 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 98 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 15726: "sizeof(val_) >= len" 15726: # 98 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 98 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 15726: ; 15726: switch (len) { 15726: case 1: 15726: dst[0] = static_cast(val_); 15726: break; 15726: case 2: 15726: EncodeFixed16(dst, static_cast(val_)); 15726: break; 15726: case 4: 15726: EncodeFixed32(dst, static_cast(val_)); 15726: break; 15726: case 8: 15726: EncodeFixed64(dst, static_cast(val_)); 15726: break; 15726: default: 15726: 15726: # 113 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 15726: (static_cast ( 15726: # 113 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 15726: false 15726: # 113 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 113 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 15726: "false" 15726: # 113 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 113 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 15726: ; 15726: } 15726: } 15726: 15726: bool Verify(uint8_t len, const char* checksum_ptr) const { 15726: 15726: # 118 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 15726: (static_cast ( 15726: # 118 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 15726: sizeof(val_) >= len 15726: # 118 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 118 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 15726: "sizeof(val_) >= len" 15726: # 118 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 118 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 15726: ; 15726: switch (len) { 15726: case 1: 15726: return static_cast(checksum_ptr[0]) == 15726: static_cast(val_); 15726: case 2: 15726: return DecodeFixed16(checksum_ptr) == static_cast(val_); 15726: case 4: 15726: return DecodeFixed32(checksum_ptr) == static_cast(val_); 15726: case 8: 15726: return DecodeFixed64(checksum_ptr) == static_cast(val_); 15726: default: 15726: 15726: # 130 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 15726: (static_cast ( 15726: # 130 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 15726: false 15726: # 130 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 130 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 15726: "false" 15726: # 130 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 130 "/build/reproducible-path/rocksdb-9.3.1/db/kv_checksum.h" 15726: ; 15726: return false; 15726: } 15726: } 15726: 15726: T val_ = 0; 15726: }; 15726: 15726: template 15726: class ProtectionInfoKVO { 15726: public: 15726: ProtectionInfoKVO() = default; 15726: 15726: ProtectionInfo StripKVO(const Slice& key, const Slice& value, 15726: ValueType op_type) const; 15726: ProtectionInfo StripKVO(const SliceParts& key, const SliceParts& value, 15726: ValueType op_type) const; 15726: 15726: ProtectionInfoKVOC ProtectC(ColumnFamilyId column_family_id) const; 15726: ProtectionInfoKVOS ProtectS(SequenceNumber sequence_number) const; 15726: 15726: void UpdateK(const Slice& old_key, const Slice& new_key); 15726: void UpdateK(const SliceParts& old_key, const SliceParts& new_key); 15726: void UpdateV(const Slice& old_value, const Slice& new_value); 15726: void UpdateV(const SliceParts& old_value, const SliceParts& new_value); 15726: void UpdateO(ValueType old_op_type, ValueType new_op_type); 15726: 15726: 15726: void Encode(uint8_t len, char* dst) const { info_.Encode(len, dst); } 15726: 15726: 15726: 15726: bool Verify(uint8_t len, const char* checksum_ptr) const { 15726: return info_.Verify(len, checksum_ptr); 15726: } 15726: 15726: private: 15726: friend class ProtectionInfo; 15726: friend class ProtectionInfoKVOS; 15726: friend class ProtectionInfoKVOC; 15726: 15726: explicit ProtectionInfoKVO(T val) : info_(val) { 15726: static_assert(sizeof(ProtectionInfoKVO) == sizeof(T), ""); 15726: } 15726: 15726: T GetVal() const { return info_.GetVal(); } 15726: void SetVal(T val) { info_.SetVal(val); } 15726: 15726: ProtectionInfo info_; 15726: }; 15726: 15726: template 15726: class ProtectionInfoKVOC { 15726: public: 15726: ProtectionInfoKVOC() = default; 15726: 15726: ProtectionInfoKVO StripC(ColumnFamilyId column_family_id) const; 15726: 15726: void UpdateK(const Slice& old_key, const Slice& new_key) { 15726: kvo_.UpdateK(old_key, new_key); 15726: } 15726: void UpdateK(const SliceParts& old_key, const SliceParts& new_key) { 15726: kvo_.UpdateK(old_key, new_key); 15726: } 15726: void UpdateV(const Slice& old_value, const Slice& new_value) { 15726: kvo_.UpdateV(old_value, new_value); 15726: } 15726: void UpdateV(const SliceParts& old_value, const SliceParts& new_value) { 15726: kvo_.UpdateV(old_value, new_value); 15726: } 15726: void UpdateO(ValueType old_op_type, ValueType new_op_type) { 15726: kvo_.UpdateO(old_op_type, new_op_type); 15726: } 15726: void UpdateC(ColumnFamilyId old_column_family_id, 15726: ColumnFamilyId new_column_family_id); 15726: 15726: void Encode(uint8_t len, char* dst) const { kvo_.Encode(len, dst); } 15726: bool Verify(uint8_t len, const char* checksum_ptr) const { 15726: return kvo_.Verify(len, checksum_ptr); 15726: } 15726: 15726: private: 15726: friend class ProtectionInfoKVO; 15726: 15726: explicit ProtectionInfoKVOC(T val) : kvo_(val) { 15726: static_assert(sizeof(ProtectionInfoKVOC) == sizeof(T), ""); 15726: } 15726: 15726: T GetVal() const { return kvo_.GetVal(); } 15726: void SetVal(T val) { kvo_.SetVal(val); } 15726: 15726: ProtectionInfoKVO kvo_; 15726: }; 15726: 15726: template 15726: class ProtectionInfoKVOS { 15726: public: 15726: ProtectionInfoKVOS() = default; 15726: 15726: ProtectionInfoKVO StripS(SequenceNumber sequence_number) const; 15726: 15726: void UpdateK(const Slice& old_key, const Slice& new_key) { 15726: kvo_.UpdateK(old_key, new_key); 15726: } 15726: void UpdateK(const SliceParts& old_key, const SliceParts& new_key) { 15726: kvo_.UpdateK(old_key, new_key); 15726: } 15726: void UpdateV(const Slice& old_value, const Slice& new_value) { 15726: kvo_.UpdateV(old_value, new_value); 15726: } 15726: void UpdateV(const SliceParts& old_value, const SliceParts& new_value) { 15726: kvo_.UpdateV(old_value, new_value); 15726: } 15726: void UpdateO(ValueType old_op_type, ValueType new_op_type) { 15726: kvo_.UpdateO(old_op_type, new_op_type); 15726: } 15726: void UpdateS(SequenceNumber old_sequence_number, 15726: SequenceNumber new_sequence_number); 15726: 15726: void Encode(uint8_t len, char* dst) const { kvo_.Encode(len, dst); } 15726: bool Verify(uint8_t len, const char* checksum_ptr) const { 15726: return kvo_.Verify(len, checksum_ptr); 15726: } 15726: 15726: private: 15726: friend class ProtectionInfoKVO; 15726: 15726: explicit ProtectionInfoKVOS(T val) : kvo_(val) { 15726: static_assert(sizeof(ProtectionInfoKVOS) == sizeof(T), ""); 15726: } 15726: 15726: T GetVal() const { return kvo_.GetVal(); } 15726: void SetVal(T val) { kvo_.SetVal(val); } 15726: 15726: ProtectionInfoKVO kvo_; 15726: }; 15726: 15726: template 15726: class ProtectionInfoKV { 15726: public: 15726: ProtectionInfoKV() = default; 15726: 15726: void Encode(uint8_t len, char* dst) const { info_.Encode(len, dst); } 15726: bool Verify(uint8_t len, const char* checksum_ptr) const { 15726: return info_.Verify(len, checksum_ptr); 15726: } 15726: 15726: private: 15726: friend class ProtectionInfo; 15726: 15726: explicit ProtectionInfoKV(T val) : info_(val) { 15726: static_assert(sizeof(ProtectionInfoKV) == sizeof(T)); 15726: } 15726: 15726: ProtectionInfo info_; 15726: }; 15726: 15726: template 15726: Status ProtectionInfo::GetStatus() const { 15726: if (val_ != 0) { 15726: return Status::Corruption("ProtectionInfo mismatch"); 15726: } 15726: return Status::OK(); 15726: } 15726: 15726: template 15726: ProtectionInfoKVO ProtectionInfo::ProtectKVO(const Slice& key, 15726: const Slice& value, 15726: ValueType op_type) const { 15726: T val = GetVal(); 15726: val = val ^ static_cast(GetSliceNPHash64(key, ProtectionInfo::kSeedK)); 15726: val = 15726: val ^ static_cast(GetSliceNPHash64(value, ProtectionInfo::kSeedV)); 15726: val = val ^ 15726: static_cast(NPHash64(reinterpret_cast(&op_type), 15726: sizeof(op_type), ProtectionInfo::kSeedO)); 15726: return ProtectionInfoKVO(val); 15726: } 15726: 15726: template 15726: ProtectionInfoKVO ProtectionInfo::ProtectKVO(const SliceParts& key, 15726: const SliceParts& value, 15726: ValueType op_type) const { 15726: T val = GetVal(); 15726: val = val ^ 15726: static_cast(GetSlicePartsNPHash64(key, ProtectionInfo::kSeedK)); 15726: val = val ^ 15726: static_cast(GetSlicePartsNPHash64(value, ProtectionInfo::kSeedV)); 15726: val = val ^ 15726: static_cast(NPHash64(reinterpret_cast(&op_type), 15726: sizeof(op_type), ProtectionInfo::kSeedO)); 15726: return ProtectionInfoKVO(val); 15726: } 15726: 15726: template 15726: ProtectionInfoKV ProtectionInfo::ProtectKV(const Slice& key, 15726: const Slice& value) const { 15726: T val = GetVal(); 15726: val = val ^ static_cast(GetSliceNPHash64(key, ProtectionInfo::kSeedK)); 15726: val = 15726: val ^ static_cast(GetSliceNPHash64(value, ProtectionInfo::kSeedV)); 15726: return ProtectionInfoKV(val); 15726: } 15726: 15726: template 15726: void ProtectionInfoKVO::UpdateK(const Slice& old_key, const Slice& new_key) { 15726: T val = GetVal(); 15726: val = val ^ 15726: static_cast(GetSliceNPHash64(old_key, ProtectionInfo::kSeedK)); 15726: val = val ^ 15726: static_cast(GetSliceNPHash64(new_key, ProtectionInfo::kSeedK)); 15726: SetVal(val); 15726: } 15726: 15726: template 15726: void ProtectionInfoKVO::UpdateK(const SliceParts& old_key, 15726: const SliceParts& new_key) { 15726: T val = GetVal(); 15726: val = val ^ static_cast( 15726: GetSlicePartsNPHash64(old_key, ProtectionInfo::kSeedK)); 15726: val = val ^ static_cast( 15726: GetSlicePartsNPHash64(new_key, ProtectionInfo::kSeedK)); 15726: SetVal(val); 15726: } 15726: 15726: template 15726: void ProtectionInfoKVO::UpdateV(const Slice& old_value, 15726: const Slice& new_value) { 15726: T val = GetVal(); 15726: val = val ^ 15726: static_cast(GetSliceNPHash64(old_value, ProtectionInfo::kSeedV)); 15726: val = val ^ 15726: static_cast(GetSliceNPHash64(new_value, ProtectionInfo::kSeedV)); 15726: SetVal(val); 15726: } 15726: 15726: template 15726: void ProtectionInfoKVO::UpdateV(const SliceParts& old_value, 15726: const SliceParts& new_value) { 15726: T val = GetVal(); 15726: val = val ^ static_cast( 15726: GetSlicePartsNPHash64(old_value, ProtectionInfo::kSeedV)); 15726: val = val ^ static_cast( 15726: GetSlicePartsNPHash64(new_value, ProtectionInfo::kSeedV)); 15726: SetVal(val); 15726: } 15726: 15726: template 15726: void ProtectionInfoKVO::UpdateO(ValueType old_op_type, 15726: ValueType new_op_type) { 15726: T val = GetVal(); 15726: val = val ^ static_cast(NPHash64(reinterpret_cast(&old_op_type), 15726: sizeof(old_op_type), 15726: ProtectionInfo::kSeedO)); 15726: val = val ^ static_cast(NPHash64(reinterpret_cast(&new_op_type), 15726: sizeof(new_op_type), 15726: ProtectionInfo::kSeedO)); 15726: SetVal(val); 15726: } 15726: 15726: template 15726: ProtectionInfo ProtectionInfoKVO::StripKVO(const Slice& key, 15726: const Slice& value, 15726: ValueType op_type) const { 15726: T val = GetVal(); 15726: val = val ^ static_cast(GetSliceNPHash64(key, ProtectionInfo::kSeedK)); 15726: val = 15726: val ^ static_cast(GetSliceNPHash64(value, ProtectionInfo::kSeedV)); 15726: val = val ^ 15726: static_cast(NPHash64(reinterpret_cast(&op_type), 15726: sizeof(op_type), ProtectionInfo::kSeedO)); 15726: return ProtectionInfo(val); 15726: } 15726: 15726: template 15726: ProtectionInfo ProtectionInfoKVO::StripKVO(const SliceParts& key, 15726: const SliceParts& value, 15726: ValueType op_type) const { 15726: T val = GetVal(); 15726: val = val ^ 15726: static_cast(GetSlicePartsNPHash64(key, ProtectionInfo::kSeedK)); 15726: val = val ^ 15726: static_cast(GetSlicePartsNPHash64(value, ProtectionInfo::kSeedV)); 15726: val = val ^ 15726: static_cast(NPHash64(reinterpret_cast(&op_type), 15726: sizeof(op_type), ProtectionInfo::kSeedO)); 15726: return ProtectionInfo(val); 15726: } 15726: 15726: template 15726: ProtectionInfoKVOC ProtectionInfoKVO::ProtectC( 15726: ColumnFamilyId column_family_id) const { 15726: T val = GetVal(); 15726: val = val ^ static_cast(NPHash64( 15726: reinterpret_cast(&column_family_id), 15726: sizeof(column_family_id), ProtectionInfo::kSeedC)); 15726: return ProtectionInfoKVOC(val); 15726: } 15726: 15726: template 15726: ProtectionInfoKVO ProtectionInfoKVOC::StripC( 15726: ColumnFamilyId column_family_id) const { 15726: T val = GetVal(); 15726: val = val ^ static_cast(NPHash64( 15726: reinterpret_cast(&column_family_id), 15726: sizeof(column_family_id), ProtectionInfo::kSeedC)); 15726: return ProtectionInfoKVO(val); 15726: } 15726: 15726: template 15726: void ProtectionInfoKVOC::UpdateC(ColumnFamilyId old_column_family_id, 15726: ColumnFamilyId new_column_family_id) { 15726: T val = GetVal(); 15726: val = val ^ static_cast(NPHash64( 15726: reinterpret_cast(&old_column_family_id), 15726: sizeof(old_column_family_id), ProtectionInfo::kSeedC)); 15726: val = val ^ static_cast(NPHash64( 15726: reinterpret_cast(&new_column_family_id), 15726: sizeof(new_column_family_id), ProtectionInfo::kSeedC)); 15726: SetVal(val); 15726: } 15726: 15726: template 15726: ProtectionInfoKVOS ProtectionInfoKVO::ProtectS( 15726: SequenceNumber sequence_number) const { 15726: T val = GetVal(); 15726: val = val ^ static_cast(NPHash64(reinterpret_cast(&sequence_number), 15726: sizeof(sequence_number), 15726: ProtectionInfo::kSeedS)); 15726: return ProtectionInfoKVOS(val); 15726: } 15726: 15726: template 15726: ProtectionInfoKVO ProtectionInfoKVOS::StripS( 15726: SequenceNumber sequence_number) const { 15726: T val = GetVal(); 15726: val = val ^ static_cast(NPHash64(reinterpret_cast(&sequence_number), 15726: sizeof(sequence_number), 15726: ProtectionInfo::kSeedS)); 15726: return ProtectionInfoKVO(val); 15726: } 15726: 15726: template 15726: void ProtectionInfoKVOS::UpdateS(SequenceNumber old_sequence_number, 15726: SequenceNumber new_sequence_number) { 15726: T val = GetVal(); 15726: val = val ^ static_cast(NPHash64( 15726: reinterpret_cast(&old_sequence_number), 15726: sizeof(old_sequence_number), ProtectionInfo::kSeedS)); 15726: val = val ^ static_cast(NPHash64( 15726: reinterpret_cast(&new_sequence_number), 15726: sizeof(new_sequence_number), ProtectionInfo::kSeedS)); 15726: SetVal(val); 15726: } 15726: } 15726: # 21 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/list" 1 3 15726: # 58 "/usr/include/c++/13/list" 3 15726: 15726: # 59 "/usr/include/c++/13/list" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/stl_list.h" 1 3 15726: # 68 "/usr/include/c++/13/bits/stl_list.h" 3 15726: 15726: # 68 "/usr/include/c++/13/bits/stl_list.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: namespace __detail 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct _List_node_base 15726: { 15726: _List_node_base* _M_next; 15726: _List_node_base* _M_prev; 15726: 15726: static void 15726: swap(_List_node_base& __x, _List_node_base& __y) noexcept; 15726: 15726: void 15726: _M_transfer(_List_node_base* const __first, 15726: _List_node_base* const __last) noexcept; 15726: 15726: void 15726: _M_reverse() noexcept; 15726: 15726: void 15726: _M_hook(_List_node_base* const __position) noexcept; 15726: 15726: void 15726: _M_unhook() noexcept; 15726: }; 15726: 15726: 15726: struct _List_node_header : public _List_node_base 15726: { 15726: 15726: std::size_t _M_size; 15726: 15726: 15726: _List_node_header() noexcept 15726: { _M_init(); } 15726: 15726: 15726: _List_node_header(_List_node_header&& __x) noexcept 15726: : _List_node_base{ __x._M_next, __x._M_prev } 15726: 15726: , _M_size(__x._M_size) 15726: 15726: { 15726: if (__x._M_base()->_M_next == __x._M_base()) 15726: this->_M_next = this->_M_prev = this; 15726: else 15726: { 15726: this->_M_next->_M_prev = this->_M_prev->_M_next = this->_M_base(); 15726: __x._M_init(); 15726: } 15726: } 15726: 15726: void 15726: _M_move_nodes(_List_node_header&& __x) 15726: { 15726: _List_node_base* const __xnode = __x._M_base(); 15726: if (__xnode->_M_next == __xnode) 15726: _M_init(); 15726: else 15726: { 15726: _List_node_base* const __node = this->_M_base(); 15726: __node->_M_next = __xnode->_M_next; 15726: __node->_M_prev = __xnode->_M_prev; 15726: __node->_M_next->_M_prev = __node->_M_prev->_M_next = __node; 15726: 15726: _M_size = __x._M_size; 15726: 15726: __x._M_init(); 15726: } 15726: } 15726: 15726: 15726: void 15726: _M_init() noexcept 15726: { 15726: this->_M_next = this->_M_prev = this; 15726: 15726: this->_M_size = 0; 15726: 15726: } 15726: 15726: private: 15726: _List_node_base* _M_base() { return this; } 15726: }; 15726: 15726: 15726: struct _Scratch_list : _List_node_base 15726: { 15726: _Scratch_list() { _M_next = _M_prev = this; } 15726: 15726: bool empty() const { return _M_next == this; } 15726: 15726: void swap(_List_node_base& __l) { _List_node_base::swap(*this, __l); } 15726: 15726: template 15726: struct _Ptr_cmp 15726: { 15726: _Cmp _M_cmp; 15726: 15726: bool 15726: operator()(__detail::_List_node_base* __lhs, 15726: __detail::_List_node_base* __rhs) 15726: { return _M_cmp(*_Iter(__lhs), *_Iter(__rhs)); } 15726: }; 15726: 15726: template 15726: struct _Ptr_cmp<_Iter, void> 15726: { 15726: bool 15726: operator()(__detail::_List_node_base* __lhs, 15726: __detail::_List_node_base* __rhs) const 15726: { return *_Iter(__lhs) < *_Iter(__rhs); } 15726: }; 15726: 15726: 15726: template 15726: void 15726: merge(_List_node_base& __x, _Cmp __comp) 15726: { 15726: _List_node_base* __first1 = _M_next; 15726: _List_node_base* const __last1 = this; 15726: _List_node_base* __first2 = __x._M_next; 15726: _List_node_base* const __last2 = std::__addressof(__x); 15726: 15726: while (__first1 != __last1 && __first2 != __last2) 15726: { 15726: if (__comp(__first2, __first1)) 15726: { 15726: _List_node_base* __next = __first2->_M_next; 15726: __first1->_M_transfer(__first2, __next); 15726: __first2 = __next; 15726: } 15726: else 15726: __first1 = __first1->_M_next; 15726: } 15726: if (__first2 != __last2) 15726: this->_M_transfer(__first2, __last2); 15726: } 15726: 15726: 15726: void _M_take_one(_List_node_base* __i) 15726: { this->_M_transfer(__i, __i->_M_next); } 15726: 15726: 15726: void _M_put_all(_List_node_base* __i) 15726: { 15726: if (!empty()) 15726: __i->_M_transfer(_M_next, this); 15726: } 15726: }; 15726: 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: struct _List_node : public __detail::_List_node_base 15726: { 15726: 15726: __gnu_cxx::__aligned_membuf<_Tp> _M_storage; 15726: _Tp* _M_valptr() { return _M_storage._M_ptr(); } 15726: _Tp const* _M_valptr() const { return _M_storage._M_ptr(); } 15726: 15726: 15726: 15726: 15726: 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _List_iterator 15726: { 15726: typedef _List_iterator<_Tp> _Self; 15726: typedef _List_node<_Tp> _Node; 15726: 15726: typedef ptrdiff_t difference_type; 15726: typedef std::bidirectional_iterator_tag iterator_category; 15726: typedef _Tp value_type; 15726: typedef _Tp* pointer; 15726: typedef _Tp& reference; 15726: 15726: _List_iterator() noexcept 15726: : _M_node() { } 15726: 15726: explicit 15726: _List_iterator(__detail::_List_node_base* __x) noexcept 15726: : _M_node(__x) { } 15726: 15726: _Self 15726: _M_const_cast() const noexcept 15726: { return *this; } 15726: 15726: 15726: [[__nodiscard__]] 15726: reference 15726: operator*() const noexcept 15726: { return *static_cast<_Node*>(_M_node)->_M_valptr(); } 15726: 15726: [[__nodiscard__]] 15726: pointer 15726: operator->() const noexcept 15726: { return static_cast<_Node*>(_M_node)->_M_valptr(); } 15726: 15726: _Self& 15726: operator++() noexcept 15726: { 15726: _M_node = _M_node->_M_next; 15726: return *this; 15726: } 15726: 15726: _Self 15726: operator++(int) noexcept 15726: { 15726: _Self __tmp = *this; 15726: _M_node = _M_node->_M_next; 15726: return __tmp; 15726: } 15726: 15726: _Self& 15726: operator--() noexcept 15726: { 15726: _M_node = _M_node->_M_prev; 15726: return *this; 15726: } 15726: 15726: _Self 15726: operator--(int) noexcept 15726: { 15726: _Self __tmp = *this; 15726: _M_node = _M_node->_M_prev; 15726: return __tmp; 15726: } 15726: 15726: [[__nodiscard__]] 15726: friend bool 15726: operator==(const _Self& __x, const _Self& __y) noexcept 15726: { return __x._M_node == __y._M_node; } 15726: 15726: 15726: [[__nodiscard__]] 15726: friend bool 15726: operator!=(const _Self& __x, const _Self& __y) noexcept 15726: { return __x._M_node != __y._M_node; } 15726: 15726: 15726: 15726: __detail::_List_node_base* _M_node; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _List_const_iterator 15726: { 15726: typedef _List_const_iterator<_Tp> _Self; 15726: typedef const _List_node<_Tp> _Node; 15726: typedef _List_iterator<_Tp> iterator; 15726: 15726: typedef ptrdiff_t difference_type; 15726: typedef std::bidirectional_iterator_tag iterator_category; 15726: typedef _Tp value_type; 15726: typedef const _Tp* pointer; 15726: typedef const _Tp& reference; 15726: 15726: _List_const_iterator() noexcept 15726: : _M_node() { } 15726: 15726: explicit 15726: _List_const_iterator(const __detail::_List_node_base* __x) 15726: noexcept 15726: : _M_node(__x) { } 15726: 15726: _List_const_iterator(const iterator& __x) noexcept 15726: : _M_node(__x._M_node) { } 15726: 15726: iterator 15726: _M_const_cast() const noexcept 15726: { return iterator(const_cast<__detail::_List_node_base*>(_M_node)); } 15726: 15726: 15726: [[__nodiscard__]] 15726: reference 15726: operator*() const noexcept 15726: { return *static_cast<_Node*>(_M_node)->_M_valptr(); } 15726: 15726: [[__nodiscard__]] 15726: pointer 15726: operator->() const noexcept 15726: { return static_cast<_Node*>(_M_node)->_M_valptr(); } 15726: 15726: _Self& 15726: operator++() noexcept 15726: { 15726: _M_node = _M_node->_M_next; 15726: return *this; 15726: } 15726: 15726: _Self 15726: operator++(int) noexcept 15726: { 15726: _Self __tmp = *this; 15726: _M_node = _M_node->_M_next; 15726: return __tmp; 15726: } 15726: 15726: _Self& 15726: operator--() noexcept 15726: { 15726: _M_node = _M_node->_M_prev; 15726: return *this; 15726: } 15726: 15726: _Self 15726: operator--(int) noexcept 15726: { 15726: _Self __tmp = *this; 15726: _M_node = _M_node->_M_prev; 15726: return __tmp; 15726: } 15726: 15726: [[__nodiscard__]] 15726: friend bool 15726: operator==(const _Self& __x, const _Self& __y) noexcept 15726: { return __x._M_node == __y._M_node; } 15726: 15726: 15726: [[__nodiscard__]] 15726: friend bool 15726: operator!=(const _Self& __x, const _Self& __y) noexcept 15726: { return __x._M_node != __y._M_node; } 15726: 15726: 15726: 15726: const __detail::_List_node_base* _M_node; 15726: }; 15726: 15726: namespace __cxx11 { 15726: 15726: template 15726: class _List_base 15726: { 15726: protected: 15726: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 15726: rebind<_Tp>::other _Tp_alloc_type; 15726: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tp_alloc_traits; 15726: typedef typename _Tp_alloc_traits::template 15726: rebind<_List_node<_Tp> >::other _Node_alloc_type; 15726: typedef __gnu_cxx::__alloc_traits<_Node_alloc_type> _Node_alloc_traits; 15726: 15726: 15726: static size_t 15726: _S_distance(const __detail::_List_node_base* __first, 15726: const __detail::_List_node_base* __last) 15726: { 15726: size_t __n = 0; 15726: while (__first != __last) 15726: { 15726: __first = __first->_M_next; 15726: ++__n; 15726: } 15726: return __n; 15726: } 15726: 15726: 15726: struct _List_impl 15726: : public _Node_alloc_type 15726: { 15726: __detail::_List_node_header _M_node; 15726: 15726: _List_impl() noexcept(is_nothrow_default_constructible<_Node_alloc_type>::value) 15726: 15726: : _Node_alloc_type() 15726: { } 15726: 15726: _List_impl(const _Node_alloc_type& __a) noexcept 15726: : _Node_alloc_type(__a) 15726: { } 15726: 15726: 15726: _List_impl(_List_impl&&) = default; 15726: 15726: _List_impl(_Node_alloc_type&& __a, _List_impl&& __x) 15726: : _Node_alloc_type(std::move(__a)), _M_node(std::move(__x._M_node)) 15726: { } 15726: 15726: _List_impl(_Node_alloc_type&& __a) noexcept 15726: : _Node_alloc_type(std::move(__a)) 15726: { } 15726: 15726: }; 15726: 15726: _List_impl _M_impl; 15726: 15726: 15726: size_t _M_get_size() const { return _M_impl._M_node._M_size; } 15726: 15726: void _M_set_size(size_t __n) { _M_impl._M_node._M_size = __n; } 15726: 15726: void _M_inc_size(size_t __n) { _M_impl._M_node._M_size += __n; } 15726: 15726: void _M_dec_size(size_t __n) { _M_impl._M_node._M_size -= __n; } 15726: 15726: 15726: size_t 15726: _M_distance(const __detail::_List_node_base* __first, 15726: const __detail::_List_node_base* __last) const 15726: { return _S_distance(__first, __last); } 15726: 15726: 15726: size_t _M_node_count() const { return _M_get_size(); } 15726: # 516 "/usr/include/c++/13/bits/stl_list.h" 3 15726: typename _Node_alloc_traits::pointer 15726: _M_get_node() 15726: { return _Node_alloc_traits::allocate(_M_impl, 1); } 15726: 15726: void 15726: _M_put_node(typename _Node_alloc_traits::pointer __p) noexcept 15726: { _Node_alloc_traits::deallocate(_M_impl, __p, 1); } 15726: 15726: public: 15726: typedef _Alloc allocator_type; 15726: 15726: _Node_alloc_type& 15726: _M_get_Node_allocator() noexcept 15726: { return _M_impl; } 15726: 15726: const _Node_alloc_type& 15726: _M_get_Node_allocator() const noexcept 15726: { return _M_impl; } 15726: 15726: 15726: _List_base() = default; 15726: 15726: 15726: 15726: 15726: _List_base(const _Node_alloc_type& __a) noexcept 15726: : _M_impl(__a) 15726: { } 15726: 15726: 15726: _List_base(_List_base&&) = default; 15726: 15726: 15726: _List_base(_List_base&& __x, _Node_alloc_type&& __a) 15726: : _M_impl(std::move(__a)) 15726: { 15726: if (__x._M_get_Node_allocator() == _M_get_Node_allocator()) 15726: _M_move_nodes(std::move(__x)); 15726: 15726: } 15726: 15726: 15726: 15726: _List_base(_Node_alloc_type&& __a, _List_base&& __x) 15726: : _M_impl(std::move(__a), std::move(__x._M_impl)) 15726: { } 15726: 15726: 15726: _List_base(_Node_alloc_type&& __a) 15726: : _M_impl(std::move(__a)) 15726: { } 15726: 15726: void 15726: _M_move_nodes(_List_base&& __x) 15726: { _M_impl._M_node._M_move_nodes(std::move(__x._M_impl._M_node)); } 15726: 15726: 15726: 15726: ~_List_base() noexcept 15726: { _M_clear(); } 15726: 15726: void 15726: _M_clear() noexcept; 15726: 15726: void 15726: _M_init() noexcept 15726: { this->_M_impl._M_node._M_init(); } 15726: }; 15726: # 631 "/usr/include/c++/13/bits/stl_list.h" 3 15726: template > 15726: class list : protected _List_base<_Tp, _Alloc> 15726: { 15726: # 644 "/usr/include/c++/13/bits/stl_list.h" 3 15726: static_assert(is_same::type, _Tp>::value, 15726: "std::list must have a non-const, non-volatile value_type"); 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef _List_base<_Tp, _Alloc> _Base; 15726: typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; 15726: typedef typename _Base::_Tp_alloc_traits _Tp_alloc_traits; 15726: typedef typename _Base::_Node_alloc_type _Node_alloc_type; 15726: typedef typename _Base::_Node_alloc_traits _Node_alloc_traits; 15726: 15726: public: 15726: typedef _Tp value_type; 15726: typedef typename _Tp_alloc_traits::pointer pointer; 15726: typedef typename _Tp_alloc_traits::const_pointer const_pointer; 15726: typedef typename _Tp_alloc_traits::reference reference; 15726: typedef typename _Tp_alloc_traits::const_reference const_reference; 15726: typedef _List_iterator<_Tp> iterator; 15726: typedef _List_const_iterator<_Tp> const_iterator; 15726: typedef std::reverse_iterator const_reverse_iterator; 15726: typedef std::reverse_iterator reverse_iterator; 15726: typedef size_t size_type; 15726: typedef ptrdiff_t difference_type; 15726: typedef _Alloc allocator_type; 15726: 15726: protected: 15726: 15726: 15726: typedef _List_node<_Tp> _Node; 15726: 15726: using _Base::_M_impl; 15726: using _Base::_M_put_node; 15726: using _Base::_M_get_node; 15726: using _Base::_M_get_Node_allocator; 15726: # 706 "/usr/include/c++/13/bits/stl_list.h" 3 15726: template 15726: _Node* 15726: _M_create_node(_Args&&... __args) 15726: { 15726: auto __p = this->_M_get_node(); 15726: auto& __alloc = _M_get_Node_allocator(); 15726: __allocated_ptr<_Node_alloc_type> __guard{__alloc, __p}; 15726: _Node_alloc_traits::construct(__alloc, __p->_M_valptr(), 15726: std::forward<_Args>(__args)...); 15726: __guard = nullptr; 15726: return __p; 15726: } 15726: 15726: 15726: 15726: static size_t 15726: _S_distance(const_iterator __first, const_iterator __last) 15726: { return std::distance(__first, __last); } 15726: 15726: 15726: size_t 15726: _M_node_count() const 15726: { return this->_M_get_size(); } 15726: # 741 "/usr/include/c++/13/bits/stl_list.h" 3 15726: public: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: list() = default; 15726: # 758 "/usr/include/c++/13/bits/stl_list.h" 3 15726: explicit 15726: list(const allocator_type& __a) noexcept 15726: : _Base(_Node_alloc_type(__a)) { } 15726: # 771 "/usr/include/c++/13/bits/stl_list.h" 3 15726: explicit 15726: list(size_type __n, const allocator_type& __a = allocator_type()) 15726: : _Base(_Node_alloc_type(__a)) 15726: { _M_default_initialize(__n); } 15726: # 784 "/usr/include/c++/13/bits/stl_list.h" 3 15726: list(size_type __n, const value_type& __value, 15726: const allocator_type& __a = allocator_type()) 15726: : _Base(_Node_alloc_type(__a)) 15726: { _M_fill_initialize(__n, __value); } 15726: # 811 "/usr/include/c++/13/bits/stl_list.h" 3 15726: list(const list& __x) 15726: : _Base(_Node_alloc_traits:: 15726: _S_select_on_copy(__x._M_get_Node_allocator())) 15726: { _M_initialize_dispatch(__x.begin(), __x.end(), __false_type()); } 15726: # 824 "/usr/include/c++/13/bits/stl_list.h" 3 15726: list(list&&) = default; 15726: # 834 "/usr/include/c++/13/bits/stl_list.h" 3 15726: list(initializer_list __l, 15726: const allocator_type& __a = allocator_type()) 15726: : _Base(_Node_alloc_type(__a)) 15726: { _M_initialize_dispatch(__l.begin(), __l.end(), __false_type()); } 15726: 15726: list(const list& __x, const __type_identity_t& __a) 15726: : _Base(_Node_alloc_type(__a)) 15726: { _M_initialize_dispatch(__x.begin(), __x.end(), __false_type()); } 15726: 15726: private: 15726: list(list&& __x, const allocator_type& __a, true_type) noexcept 15726: : _Base(_Node_alloc_type(__a), std::move(__x)) 15726: { } 15726: 15726: list(list&& __x, const allocator_type& __a, false_type) 15726: : _Base(_Node_alloc_type(__a)) 15726: { 15726: if (__x._M_get_Node_allocator() == this->_M_get_Node_allocator()) 15726: this->_M_move_nodes(std::move(__x)); 15726: else 15726: insert(begin(), std::__make_move_if_noexcept_iterator(__x.begin()), 15726: std::__make_move_if_noexcept_iterator(__x.end())); 15726: } 15726: 15726: public: 15726: list(list&& __x, const __type_identity_t& __a) 15726: noexcept(_Node_alloc_traits::_S_always_equal()) 15726: : list(std::move(__x), __a, 15726: typename _Node_alloc_traits::is_always_equal{}) 15726: { } 15726: # 877 "/usr/include/c++/13/bits/stl_list.h" 3 15726: template> 15726: list(_InputIterator __first, _InputIterator __last, 15726: const allocator_type& __a = allocator_type()) 15726: : _Base(_Node_alloc_type(__a)) 15726: { _M_initialize_dispatch(__first, __last, __false_type()); } 15726: # 903 "/usr/include/c++/13/bits/stl_list.h" 3 15726: ~list() = default; 15726: # 914 "/usr/include/c++/13/bits/stl_list.h" 3 15726: list& 15726: operator=(const list& __x); 15726: # 928 "/usr/include/c++/13/bits/stl_list.h" 3 15726: list& 15726: operator=(list&& __x) 15726: noexcept(_Node_alloc_traits::_S_nothrow_move()) 15726: { 15726: constexpr bool __move_storage = 15726: _Node_alloc_traits::_S_propagate_on_move_assign() 15726: || _Node_alloc_traits::_S_always_equal(); 15726: _M_move_assign(std::move(__x), __bool_constant<__move_storage>()); 15726: return *this; 15726: } 15726: # 946 "/usr/include/c++/13/bits/stl_list.h" 3 15726: list& 15726: operator=(initializer_list __l) 15726: { 15726: this->assign(__l.begin(), __l.end()); 15726: return *this; 15726: } 15726: # 964 "/usr/include/c++/13/bits/stl_list.h" 3 15726: void 15726: assign(size_type __n, const value_type& __val) 15726: { _M_fill_assign(__n, __val); } 15726: # 981 "/usr/include/c++/13/bits/stl_list.h" 3 15726: template> 15726: void 15726: assign(_InputIterator __first, _InputIterator __last) 15726: { _M_assign_dispatch(__first, __last, __false_type()); } 15726: # 1005 "/usr/include/c++/13/bits/stl_list.h" 3 15726: void 15726: assign(initializer_list __l) 15726: { this->_M_assign_dispatch(__l.begin(), __l.end(), __false_type()); } 15726: 15726: 15726: 15726: allocator_type 15726: get_allocator() const noexcept 15726: { return allocator_type(_Base::_M_get_Node_allocator()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: iterator 15726: begin() noexcept 15726: { return iterator(this->_M_impl._M_node._M_next); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: begin() const noexcept 15726: { return const_iterator(this->_M_impl._M_node._M_next); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: iterator 15726: end() noexcept 15726: { return iterator(&this->_M_impl._M_node); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: end() const noexcept 15726: { return const_iterator(&this->_M_impl._M_node); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: reverse_iterator 15726: rbegin() noexcept 15726: { return reverse_iterator(end()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: rbegin() const noexcept 15726: { return const_reverse_iterator(end()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: reverse_iterator 15726: rend() noexcept 15726: { return reverse_iterator(begin()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: rend() const noexcept 15726: { return const_reverse_iterator(begin()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: cbegin() const noexcept 15726: { return const_iterator(this->_M_impl._M_node._M_next); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_iterator 15726: cend() const noexcept 15726: { return const_iterator(&this->_M_impl._M_node); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: crbegin() const noexcept 15726: { return const_reverse_iterator(end()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reverse_iterator 15726: crend() const noexcept 15726: { return const_reverse_iterator(begin()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] bool 15726: empty() const noexcept 15726: { return this->_M_impl._M_node._M_next == &this->_M_impl._M_node; } 15726: 15726: 15726: [[__nodiscard__]] 15726: size_type 15726: size() const noexcept 15726: { return _M_node_count(); } 15726: 15726: 15726: [[__nodiscard__]] 15726: size_type 15726: max_size() const noexcept 15726: { return _Node_alloc_traits::max_size(_M_get_Node_allocator()); } 15726: # 1168 "/usr/include/c++/13/bits/stl_list.h" 3 15726: void 15726: resize(size_type __new_size); 15726: # 1181 "/usr/include/c++/13/bits/stl_list.h" 3 15726: void 15726: resize(size_type __new_size, const value_type& __x); 15726: # 1203 "/usr/include/c++/13/bits/stl_list.h" 3 15726: [[__nodiscard__]] 15726: reference 15726: front() noexcept 15726: { return *begin(); } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reference 15726: front() const noexcept 15726: { return *begin(); } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: reference 15726: back() noexcept 15726: { 15726: iterator __tmp = end(); 15726: --__tmp; 15726: return *__tmp; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: const_reference 15726: back() const noexcept 15726: { 15726: const_iterator __tmp = end(); 15726: --__tmp; 15726: return *__tmp; 15726: } 15726: # 1254 "/usr/include/c++/13/bits/stl_list.h" 3 15726: void 15726: push_front(const value_type& __x) 15726: { this->_M_insert(begin(), __x); } 15726: 15726: 15726: void 15726: push_front(value_type&& __x) 15726: { this->_M_insert(begin(), std::move(__x)); } 15726: 15726: template 15726: 15726: reference 15726: 15726: 15726: 15726: emplace_front(_Args&&... __args) 15726: { 15726: this->_M_insert(begin(), std::forward<_Args>(__args)...); 15726: 15726: return front(); 15726: 15726: } 15726: # 1290 "/usr/include/c++/13/bits/stl_list.h" 3 15726: void 15726: pop_front() noexcept 15726: { this->_M_erase(begin()); } 15726: # 1304 "/usr/include/c++/13/bits/stl_list.h" 3 15726: void 15726: push_back(const value_type& __x) 15726: { this->_M_insert(end(), __x); } 15726: 15726: 15726: void 15726: push_back(value_type&& __x) 15726: { this->_M_insert(end(), std::move(__x)); } 15726: 15726: template 15726: 15726: reference 15726: 15726: 15726: 15726: emplace_back(_Args&&... __args) 15726: { 15726: this->_M_insert(end(), std::forward<_Args>(__args)...); 15726: 15726: return back(); 15726: 15726: } 15726: # 1339 "/usr/include/c++/13/bits/stl_list.h" 3 15726: void 15726: pop_back() noexcept 15726: { this->_M_erase(iterator(this->_M_impl._M_node._M_prev)); } 15726: # 1356 "/usr/include/c++/13/bits/stl_list.h" 3 15726: template 15726: iterator 15726: emplace(const_iterator __position, _Args&&... __args); 15726: # 1371 "/usr/include/c++/13/bits/stl_list.h" 3 15726: iterator 15726: insert(const_iterator __position, const value_type& __x); 15726: # 1401 "/usr/include/c++/13/bits/stl_list.h" 3 15726: iterator 15726: insert(const_iterator __position, value_type&& __x) 15726: { return emplace(__position, std::move(__x)); } 15726: # 1420 "/usr/include/c++/13/bits/stl_list.h" 3 15726: iterator 15726: insert(const_iterator __p, initializer_list __l) 15726: { return this->insert(__p, __l.begin(), __l.end()); } 15726: # 1440 "/usr/include/c++/13/bits/stl_list.h" 3 15726: iterator 15726: insert(const_iterator __position, size_type __n, const value_type& __x); 15726: # 1479 "/usr/include/c++/13/bits/stl_list.h" 3 15726: template> 15726: iterator 15726: insert(const_iterator __position, _InputIterator __first, 15726: _InputIterator __last); 15726: # 1523 "/usr/include/c++/13/bits/stl_list.h" 3 15726: iterator 15726: 15726: erase(const_iterator __position) noexcept; 15726: # 1548 "/usr/include/c++/13/bits/stl_list.h" 3 15726: iterator 15726: 15726: erase(const_iterator __first, const_iterator __last) noexcept 15726: 15726: 15726: 15726: { 15726: while (__first != __last) 15726: __first = erase(__first); 15726: return __last._M_const_cast(); 15726: } 15726: # 1571 "/usr/include/c++/13/bits/stl_list.h" 3 15726: void 15726: swap(list& __x) noexcept 15726: { 15726: __detail::_List_node_base::swap(this->_M_impl._M_node, 15726: __x._M_impl._M_node); 15726: 15726: size_t __xsize = __x._M_get_size(); 15726: __x._M_set_size(this->_M_get_size()); 15726: this->_M_set_size(__xsize); 15726: 15726: _Node_alloc_traits::_S_on_swap(this->_M_get_Node_allocator(), 15726: __x._M_get_Node_allocator()); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: clear() noexcept 15726: { 15726: _Base::_M_clear(); 15726: _Base::_M_init(); 15726: } 15726: # 1610 "/usr/include/c++/13/bits/stl_list.h" 3 15726: void 15726: 15726: splice(const_iterator __position, list&& __x) noexcept 15726: 15726: 15726: 15726: { 15726: if (!__x.empty()) 15726: { 15726: _M_check_equal_allocators(__x); 15726: 15726: this->_M_transfer(__position._M_const_cast(), 15726: __x.begin(), __x.end()); 15726: 15726: this->_M_inc_size(__x._M_get_size()); 15726: __x._M_set_size(0); 15726: } 15726: } 15726: 15726: 15726: void 15726: splice(const_iterator __position, list& __x) noexcept 15726: { splice(__position, std::move(__x)); } 15726: # 1646 "/usr/include/c++/13/bits/stl_list.h" 3 15726: void 15726: splice(const_iterator __position, list&& __x, const_iterator __i) noexcept 15726: # 1661 "/usr/include/c++/13/bits/stl_list.h" 3 15726: { 15726: iterator __j = __i._M_const_cast(); 15726: ++__j; 15726: if (__position == __i || __position == __j) 15726: return; 15726: 15726: if (this != std::__addressof(__x)) 15726: _M_check_equal_allocators(__x); 15726: 15726: this->_M_transfer(__position._M_const_cast(), 15726: __i._M_const_cast(), __j); 15726: 15726: this->_M_inc_size(1); 15726: __x._M_dec_size(1); 15726: } 15726: # 1688 "/usr/include/c++/13/bits/stl_list.h" 3 15726: void 15726: splice(const_iterator __position, list& __x, const_iterator __i) noexcept 15726: { splice(__position, std::move(__x), __i); } 15726: # 1707 "/usr/include/c++/13/bits/stl_list.h" 3 15726: void 15726: splice(const_iterator __position, list&& __x, const_iterator __first, 15726: const_iterator __last) noexcept 15726: # 1727 "/usr/include/c++/13/bits/stl_list.h" 3 15726: { 15726: if (__first != __last) 15726: { 15726: if (this != std::__addressof(__x)) 15726: _M_check_equal_allocators(__x); 15726: 15726: size_t __n = _S_distance(__first, __last); 15726: this->_M_inc_size(__n); 15726: __x._M_dec_size(__n); 15726: 15726: this->_M_transfer(__position._M_const_cast(), 15726: __first._M_const_cast(), 15726: __last._M_const_cast()); 15726: } 15726: } 15726: # 1757 "/usr/include/c++/13/bits/stl_list.h" 3 15726: void 15726: splice(const_iterator __position, list& __x, const_iterator __first, 15726: const_iterator __last) noexcept 15726: { splice(__position, std::move(__x), __first, __last); } 15726: 15726: 15726: private: 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef void __remove_return_type; 15726: 15726: 15726: public: 15726: # 1786 "/usr/include/c++/13/bits/stl_list.h" 3 15726: 15726: __remove_return_type 15726: remove(const _Tp& __value); 15726: # 1801 "/usr/include/c++/13/bits/stl_list.h" 3 15726: template 15726: __remove_return_type 15726: remove_if(_Predicate); 15726: # 1815 "/usr/include/c++/13/bits/stl_list.h" 3 15726: 15726: __remove_return_type 15726: unique(); 15726: # 1831 "/usr/include/c++/13/bits/stl_list.h" 3 15726: template 15726: __remove_return_type 15726: unique(_BinaryPredicate); 15726: # 1847 "/usr/include/c++/13/bits/stl_list.h" 3 15726: void 15726: merge(list&& __x); 15726: 15726: void 15726: merge(list& __x) 15726: { merge(std::move(__x)); } 15726: # 1872 "/usr/include/c++/13/bits/stl_list.h" 3 15726: template 15726: void 15726: merge(list&& __x, _StrictWeakOrdering __comp); 15726: 15726: template 15726: void 15726: merge(list& __x, _StrictWeakOrdering __comp) 15726: { merge(std::move(__x), __comp); } 15726: # 1891 "/usr/include/c++/13/bits/stl_list.h" 3 15726: void 15726: reverse() noexcept 15726: { this->_M_impl._M_node._M_reverse(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: sort(); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: void 15726: sort(_StrictWeakOrdering); 15726: 15726: protected: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: void 15726: _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type) 15726: { _M_fill_initialize(static_cast(__n), __x); } 15726: 15726: 15726: template 15726: void 15726: _M_initialize_dispatch(_InputIterator __first, _InputIterator __last, 15726: __false_type) 15726: { 15726: for (; __first != __last; ++__first) 15726: 15726: emplace_back(*__first); 15726: 15726: 15726: 15726: } 15726: 15726: 15726: 15726: void 15726: _M_fill_initialize(size_type __n, const value_type& __x) 15726: { 15726: for (; __n; --__n) 15726: push_back(__x); 15726: } 15726: 15726: 15726: 15726: void 15726: _M_default_initialize(size_type __n) 15726: { 15726: for (; __n; --__n) 15726: emplace_back(); 15726: } 15726: 15726: 15726: void 15726: _M_default_append(size_type __n); 15726: # 1969 "/usr/include/c++/13/bits/stl_list.h" 3 15726: template 15726: void 15726: _M_assign_dispatch(_Integer __n, _Integer __val, __true_type) 15726: { _M_fill_assign(__n, __val); } 15726: 15726: 15726: template 15726: void 15726: _M_assign_dispatch(_InputIterator __first, _InputIterator __last, 15726: __false_type); 15726: 15726: 15726: 15726: void 15726: _M_fill_assign(size_type __n, const value_type& __val); 15726: 15726: 15726: 15726: void 15726: _M_transfer(iterator __position, iterator __first, iterator __last) 15726: { __position._M_node->_M_transfer(__first._M_node, __last._M_node); } 15726: # 2001 "/usr/include/c++/13/bits/stl_list.h" 3 15726: template 15726: void 15726: _M_insert(iterator __position, _Args&&... __args) 15726: { 15726: _Node* __tmp = _M_create_node(std::forward<_Args>(__args)...); 15726: __tmp->_M_hook(__position._M_node); 15726: this->_M_inc_size(1); 15726: } 15726: 15726: 15726: 15726: void 15726: _M_erase(iterator __position) noexcept 15726: { 15726: this->_M_dec_size(1); 15726: __position._M_node->_M_unhook(); 15726: _Node* __n = static_cast<_Node*>(__position._M_node); 15726: 15726: _Node_alloc_traits::destroy(_M_get_Node_allocator(), __n->_M_valptr()); 15726: 15726: 15726: 15726: 15726: _M_put_node(__n); 15726: } 15726: 15726: 15726: void 15726: _M_check_equal_allocators(const list& __x) noexcept 15726: { 15726: if (_M_get_Node_allocator() != __x._M_get_Node_allocator()) 15726: __builtin_abort(); 15726: } 15726: 15726: 15726: const_iterator 15726: _M_resize_pos(size_type& __new_size) const; 15726: 15726: 15726: void 15726: _M_move_assign(list&& __x, true_type) noexcept 15726: { 15726: this->clear(); 15726: this->_M_move_nodes(std::move(__x)); 15726: std::__alloc_on_move(this->_M_get_Node_allocator(), 15726: __x._M_get_Node_allocator()); 15726: } 15726: 15726: void 15726: _M_move_assign(list&& __x, false_type) 15726: { 15726: if (__x._M_get_Node_allocator() == this->_M_get_Node_allocator()) 15726: _M_move_assign(std::move(__x), true_type{}); 15726: else 15726: 15726: 15726: _M_assign_dispatch(std::make_move_iterator(__x.begin()), 15726: std::make_move_iterator(__x.end()), 15726: __false_type{}); 15726: } 15726: 15726: 15726: 15726: 15726: struct _Finalize_merge 15726: { 15726: explicit 15726: _Finalize_merge(list& __dest, list& __src, const iterator& __src_next) 15726: : _M_dest(__dest), _M_src(__src), _M_next(__src_next) 15726: { } 15726: 15726: ~_Finalize_merge() 15726: { 15726: 15726: 15726: 15726: const size_t __num_unmerged = std::distance(_M_next, _M_src.end()); 15726: const size_t __orig_size = _M_src._M_get_size(); 15726: _M_dest._M_inc_size(__orig_size - __num_unmerged); 15726: _M_src._M_set_size(__num_unmerged); 15726: } 15726: 15726: list& _M_dest; 15726: list& _M_src; 15726: const iterator& _M_next; 15726: 15726: 15726: _Finalize_merge(const _Finalize_merge&) = delete; 15726: 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: }; 15726: 15726: 15726: template::value_type, 15726: typename _Allocator = allocator<_ValT>, 15726: typename = _RequireInputIter<_InputIterator>, 15726: typename = _RequireAllocator<_Allocator>> 15726: list(_InputIterator, _InputIterator, _Allocator = _Allocator()) 15726: -> list<_ValT, _Allocator>; 15726: 15726: 15726: } 15726: # 2120 "/usr/include/c++/13/bits/stl_list.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator==(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) 15726: { 15726: 15726: if (__x.size() != __y.size()) 15726: return false; 15726: 15726: 15726: typedef typename list<_Tp, _Alloc>::const_iterator const_iterator; 15726: const_iterator __end1 = __x.end(); 15726: const_iterator __end2 = __y.end(); 15726: 15726: const_iterator __i1 = __x.begin(); 15726: const_iterator __i2 = __y.begin(); 15726: while (__i1 != __end1 && __i2 != __end2 && *__i1 == *__i2) 15726: { 15726: ++__i1; 15726: ++__i2; 15726: } 15726: return __i1 == __end1 && __i2 == __end2; 15726: } 15726: # 2177 "/usr/include/c++/13/bits/stl_list.h" 3 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) 15726: { return std::lexicographical_compare(__x.begin(), __x.end(), 15726: __y.begin(), __y.end()); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator!=(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) 15726: { return !(__x == __y); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator>(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) 15726: { return __y < __x; } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator<=(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) 15726: { return !(__y < __x); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator>=(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) 15726: { return !(__x < __y); } 15726: 15726: 15726: 15726: template 15726: inline void 15726: swap(list<_Tp, _Alloc>& __x, list<_Tp, _Alloc>& __y) 15726: noexcept(noexcept(__x.swap(__y))) 15726: { __x.swap(__y); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline ptrdiff_t 15726: __distance(std::_List_iterator<_Tp> __first, 15726: std::_List_iterator<_Tp> __last, 15726: input_iterator_tag __tag) 15726: { 15726: typedef std::_List_const_iterator<_Tp> _CIter; 15726: return std::__distance(_CIter(__first), _CIter(__last), __tag); 15726: } 15726: 15726: template 15726: inline ptrdiff_t 15726: __distance(std::_List_const_iterator<_Tp> __first, 15726: std::_List_const_iterator<_Tp> __last, 15726: input_iterator_tag) 15726: { 15726: typedef __detail::_List_node_header _Sentinel; 15726: std::_List_const_iterator<_Tp> __beyond = __last; 15726: ++__beyond; 15726: const bool __whole = __first == __beyond; 15726: if (__builtin_constant_p (__whole) && __whole) 15726: return static_cast(__last._M_node)->_M_size; 15726: 15726: ptrdiff_t __n = 0; 15726: while (__first != __last) 15726: { 15726: ++__first; 15726: ++__n; 15726: } 15726: return __n; 15726: } 15726: 15726: 15726: 15726: } 15726: # 66 "/usr/include/c++/13/list" 2 3 15726: # 1 "/usr/include/c++/13/bits/list.tcc" 1 3 15726: # 59 "/usr/include/c++/13/bits/list.tcc" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: template 15726: void 15726: _List_base<_Tp, _Alloc>:: 15726: _M_clear() noexcept 15726: { 15726: typedef _List_node<_Tp> _Node; 15726: __detail::_List_node_base* __cur = _M_impl._M_node._M_next; 15726: while (__cur != &_M_impl._M_node) 15726: { 15726: _Node* __tmp = static_cast<_Node*>(__cur); 15726: __cur = __tmp->_M_next; 15726: _Tp* __val = __tmp->_M_valptr(); 15726: 15726: _Node_alloc_traits::destroy(_M_get_Node_allocator(), __val); 15726: 15726: 15726: 15726: _M_put_node(__tmp); 15726: } 15726: } 15726: 15726: 15726: template 15726: template 15726: typename list<_Tp, _Alloc>::iterator 15726: list<_Tp, _Alloc>:: 15726: emplace(const_iterator __position, _Args&&... __args) 15726: { 15726: _Node* __tmp = _M_create_node(std::forward<_Args>(__args)...); 15726: __tmp->_M_hook(__position._M_const_cast()._M_node); 15726: this->_M_inc_size(1); 15726: return iterator(__tmp); 15726: } 15726: 15726: 15726: template 15726: typename list<_Tp, _Alloc>::iterator 15726: list<_Tp, _Alloc>:: 15726: 15726: insert(const_iterator __position, const value_type& __x) 15726: 15726: 15726: 15726: { 15726: _Node* __tmp = _M_create_node(__x); 15726: __tmp->_M_hook(__position._M_const_cast()._M_node); 15726: this->_M_inc_size(1); 15726: return iterator(__tmp); 15726: } 15726: 15726: 15726: template 15726: typename list<_Tp, _Alloc>::iterator 15726: list<_Tp, _Alloc>:: 15726: insert(const_iterator __position, size_type __n, const value_type& __x) 15726: { 15726: if (__n) 15726: { 15726: list __tmp(__n, __x, get_allocator()); 15726: iterator __it = __tmp.begin(); 15726: splice(__position, __tmp); 15726: return __it; 15726: } 15726: return __position._M_const_cast(); 15726: } 15726: 15726: template 15726: template 15726: typename list<_Tp, _Alloc>::iterator 15726: list<_Tp, _Alloc>:: 15726: insert(const_iterator __position, _InputIterator __first, 15726: _InputIterator __last) 15726: { 15726: list __tmp(__first, __last, get_allocator()); 15726: if (!__tmp.empty()) 15726: { 15726: iterator __it = __tmp.begin(); 15726: splice(__position, __tmp); 15726: return __it; 15726: } 15726: return __position._M_const_cast(); 15726: } 15726: 15726: 15726: template 15726: typename list<_Tp, _Alloc>::iterator 15726: list<_Tp, _Alloc>:: 15726: 15726: erase(const_iterator __position) noexcept 15726: 15726: 15726: 15726: { 15726: iterator __ret = iterator(__position._M_node->_M_next); 15726: _M_erase(__position._M_const_cast()); 15726: return __ret; 15726: } 15726: # 173 "/usr/include/c++/13/bits/list.tcc" 3 15726: template 15726: typename list<_Tp, _Alloc>::const_iterator 15726: list<_Tp, _Alloc>:: 15726: _M_resize_pos(size_type& __new_size) const 15726: { 15726: const_iterator __i; 15726: 15726: const size_type __len = size(); 15726: if (__new_size < __len) 15726: { 15726: if (__new_size <= __len / 2) 15726: { 15726: __i = begin(); 15726: std::advance(__i, __new_size); 15726: } 15726: else 15726: { 15726: __i = end(); 15726: ptrdiff_t __num_erase = __len - __new_size; 15726: std::advance(__i, -__num_erase); 15726: } 15726: __new_size = 0; 15726: return __i; 15726: } 15726: else 15726: __i = end(); 15726: 15726: 15726: 15726: 15726: 15726: __new_size -= __len; 15726: return __i; 15726: } 15726: 15726: 15726: template 15726: void 15726: list<_Tp, _Alloc>:: 15726: _M_default_append(size_type __n) 15726: { 15726: size_type __i = 0; 15726: try 15726: { 15726: for (; __i < __n; ++__i) 15726: emplace_back(); 15726: } 15726: catch(...) 15726: { 15726: for (; __i; --__i) 15726: pop_back(); 15726: throw; 15726: } 15726: } 15726: 15726: template 15726: void 15726: list<_Tp, _Alloc>:: 15726: resize(size_type __new_size) 15726: { 15726: const_iterator __i = _M_resize_pos(__new_size); 15726: if (__new_size) 15726: _M_default_append(__new_size); 15726: else 15726: erase(__i, end()); 15726: } 15726: 15726: template 15726: void 15726: list<_Tp, _Alloc>:: 15726: resize(size_type __new_size, const value_type& __x) 15726: { 15726: const_iterator __i = _M_resize_pos(__new_size); 15726: if (__new_size) 15726: insert(end(), __new_size, __x); 15726: else 15726: erase(__i, end()); 15726: } 15726: # 265 "/usr/include/c++/13/bits/list.tcc" 3 15726: template 15726: list<_Tp, _Alloc>& 15726: list<_Tp, _Alloc>:: 15726: operator=(const list& __x) 15726: { 15726: if (this != std::__addressof(__x)) 15726: { 15726: 15726: if (_Node_alloc_traits::_S_propagate_on_copy_assign()) 15726: { 15726: auto& __this_alloc = this->_M_get_Node_allocator(); 15726: auto& __that_alloc = __x._M_get_Node_allocator(); 15726: if (!_Node_alloc_traits::_S_always_equal() 15726: && __this_alloc != __that_alloc) 15726: { 15726: 15726: clear(); 15726: } 15726: std::__alloc_on_copy(__this_alloc, __that_alloc); 15726: } 15726: 15726: _M_assign_dispatch(__x.begin(), __x.end(), __false_type()); 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: void 15726: list<_Tp, _Alloc>:: 15726: _M_fill_assign(size_type __n, const value_type& __val) 15726: { 15726: iterator __i = begin(); 15726: for (; __i != end() && __n > 0; ++__i, --__n) 15726: *__i = __val; 15726: if (__n > 0) 15726: insert(end(), __n, __val); 15726: else 15726: erase(__i, end()); 15726: } 15726: 15726: template 15726: template 15726: void 15726: list<_Tp, _Alloc>:: 15726: _M_assign_dispatch(_InputIterator __first2, _InputIterator __last2, 15726: __false_type) 15726: { 15726: iterator __first1 = begin(); 15726: iterator __last1 = end(); 15726: for (; __first1 != __last1 && __first2 != __last2; 15726: ++__first1, (void)++__first2) 15726: *__first1 = *__first2; 15726: if (__first2 == __last2) 15726: erase(__first1, __last1); 15726: else 15726: insert(__last1, __first2, __last2); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: typename list<_Tp, _Alloc>::__remove_return_type 15726: list<_Tp, _Alloc>:: 15726: remove(const value_type& __value) 15726: { 15726: 15726: 15726: 15726: list __to_destroy(get_allocator()); 15726: iterator __first = begin(); 15726: iterator __last = end(); 15726: while (__first != __last) 15726: { 15726: iterator __next = __first; 15726: ++__next; 15726: if (*__first == __value) 15726: { 15726: 15726: 15726: 15726: __to_destroy.splice(__to_destroy.begin(), *this, __first); 15726: 15726: 15726: 15726: } 15726: 15726: __first = __next; 15726: } 15726: 15726: 15726: 15726: 15726: return ; 15726: 15726: } 15726: 15726: template 15726: typename list<_Tp, _Alloc>::__remove_return_type 15726: list<_Tp, _Alloc>:: 15726: unique() 15726: { 15726: iterator __first = begin(); 15726: iterator __last = end(); 15726: if (__first == __last) 15726: return ; 15726: 15726: 15726: 15726: list __to_destroy(get_allocator()); 15726: iterator __next = __first; 15726: while (++__next != __last) 15726: { 15726: if (*__first == *__next) 15726: { 15726: __to_destroy.splice(__to_destroy.begin(), *this, __next); 15726: 15726: 15726: 15726: } 15726: else 15726: __first = __next; 15726: __next = __first; 15726: } 15726: 15726: 15726: 15726: 15726: return ; 15726: 15726: } 15726: 15726: template 15726: void 15726: list<_Tp, _Alloc>:: 15726: 15726: merge(list&& __x) 15726: 15726: 15726: 15726: { 15726: 15726: 15726: if (this != std::__addressof(__x)) 15726: { 15726: _M_check_equal_allocators(__x); 15726: 15726: iterator __first1 = begin(); 15726: iterator __last1 = end(); 15726: iterator __first2 = __x.begin(); 15726: iterator __last2 = __x.end(); 15726: 15726: const _Finalize_merge __fin(*this, __x, __first2); 15726: 15726: while (__first1 != __last1 && __first2 != __last2) 15726: if (*__first2 < *__first1) 15726: { 15726: iterator __next = __first2; 15726: _M_transfer(__first1, __first2, ++__next); 15726: __first2 = __next; 15726: } 15726: else 15726: ++__first1; 15726: if (__first2 != __last2) 15726: { 15726: _M_transfer(__last1, __first2, __last2); 15726: __first2 = __last2; 15726: } 15726: } 15726: } 15726: 15726: template 15726: template 15726: void 15726: list<_Tp, _Alloc>:: 15726: 15726: merge(list&& __x, _StrictWeakOrdering __comp) 15726: 15726: 15726: 15726: { 15726: 15726: 15726: if (this != std::__addressof(__x)) 15726: { 15726: _M_check_equal_allocators(__x); 15726: 15726: iterator __first1 = begin(); 15726: iterator __last1 = end(); 15726: iterator __first2 = __x.begin(); 15726: iterator __last2 = __x.end(); 15726: 15726: const _Finalize_merge __fin(*this, __x, __first2); 15726: 15726: while (__first1 != __last1 && __first2 != __last2) 15726: if (__comp(*__first2, *__first1)) 15726: { 15726: iterator __next = __first2; 15726: _M_transfer(__first1, __first2, ++__next); 15726: __first2 = __next; 15726: } 15726: else 15726: ++__first1; 15726: if (__first2 != __last2) 15726: { 15726: _M_transfer(__last1, __first2, __last2); 15726: __first2 = __last2; 15726: } 15726: } 15726: } 15726: 15726: template 15726: void 15726: list<_Tp, _Alloc>:: 15726: sort() 15726: { 15726: 15726: if (this->_M_impl._M_node._M_next != &this->_M_impl._M_node 15726: && this->_M_impl._M_node._M_next->_M_next != &this->_M_impl._M_node) 15726: { 15726: using __detail::_Scratch_list; 15726: # 497 "/usr/include/c++/13/bits/list.tcc" 3 15726: _Scratch_list __carry; 15726: _Scratch_list __tmp[64]; 15726: _Scratch_list* __fill = __tmp; 15726: _Scratch_list* __counter; 15726: 15726: _Scratch_list::_Ptr_cmp __ptr_comp; 15726: 15726: try 15726: { 15726: do 15726: { 15726: __carry._M_take_one(begin()._M_node); 15726: 15726: for(__counter = __tmp; 15726: __counter != __fill && !__counter->empty(); 15726: ++__counter) 15726: { 15726: 15726: __counter->merge(__carry, __ptr_comp); 15726: __carry.swap(*__counter); 15726: } 15726: __carry.swap(*__counter); 15726: if (__counter == __fill) 15726: ++__fill; 15726: } 15726: while ( !empty() ); 15726: 15726: for (__counter = __tmp + 1; __counter != __fill; ++__counter) 15726: __counter->merge(__counter[-1], __ptr_comp); 15726: __fill[-1].swap(this->_M_impl._M_node); 15726: } 15726: catch(...) 15726: { 15726: 15726: __carry._M_put_all(end()._M_node); 15726: for (int __i = 0; __i < sizeof(__tmp)/sizeof(__tmp[0]); ++__i) 15726: __tmp[__i]._M_put_all(end()._M_node); 15726: throw; 15726: } 15726: } 15726: } 15726: 15726: template 15726: template 15726: typename list<_Tp, _Alloc>::__remove_return_type 15726: list<_Tp, _Alloc>:: 15726: remove_if(_Predicate __pred) 15726: { 15726: 15726: 15726: 15726: list __to_destroy(get_allocator()); 15726: iterator __first = begin(); 15726: iterator __last = end(); 15726: while (__first != __last) 15726: { 15726: iterator __next = __first; 15726: ++__next; 15726: if (__pred(*__first)) 15726: { 15726: __to_destroy.splice(__to_destroy.begin(), *this, __first); 15726: 15726: 15726: 15726: } 15726: __first = __next; 15726: } 15726: 15726: 15726: 15726: 15726: return ; 15726: 15726: } 15726: 15726: template 15726: template 15726: typename list<_Tp, _Alloc>::__remove_return_type 15726: list<_Tp, _Alloc>:: 15726: unique(_BinaryPredicate __binary_pred) 15726: { 15726: iterator __first = begin(); 15726: iterator __last = end(); 15726: if (__first == __last) 15726: return ; 15726: 15726: 15726: 15726: list __to_destroy(get_allocator()); 15726: iterator __next = __first; 15726: while (++__next != __last) 15726: { 15726: if (__binary_pred(*__first, *__next)) 15726: { 15726: __to_destroy.splice(__to_destroy.begin(), *this, __next); 15726: 15726: 15726: 15726: } 15726: else 15726: __first = __next; 15726: __next = __first; 15726: } 15726: 15726: 15726: 15726: 15726: return ; 15726: 15726: } 15726: 15726: 15726: 15726: template 15726: template 15726: void 15726: list<_Tp, _Alloc>:: 15726: sort(_StrictWeakOrdering __comp) 15726: { 15726: 15726: if (this->_M_impl._M_node._M_next != &this->_M_impl._M_node 15726: && this->_M_impl._M_node._M_next->_M_next != &this->_M_impl._M_node) 15726: { 15726: using __detail::_Scratch_list; 15726: _Scratch_list __carry; 15726: _Scratch_list __tmp[64]; 15726: _Scratch_list* __fill = __tmp; 15726: _Scratch_list* __counter; 15726: 15726: _Scratch_list::_Ptr_cmp __ptr_comp 15726: = { __comp }; 15726: 15726: try 15726: { 15726: do 15726: { 15726: __carry._M_take_one(begin()._M_node); 15726: 15726: for(__counter = __tmp; 15726: __counter != __fill && !__counter->empty(); 15726: ++__counter) 15726: { 15726: 15726: __counter->merge(__carry, __ptr_comp); 15726: __carry.swap(*__counter); 15726: } 15726: __carry.swap(*__counter); 15726: if (__counter == __fill) 15726: ++__fill; 15726: } 15726: while ( !empty() ); 15726: 15726: for (__counter = __tmp + 1; __counter != __fill; ++__counter) 15726: __counter->merge(__counter[-1], __ptr_comp); 15726: __fill[-1].swap(this->_M_impl._M_node); 15726: } 15726: catch(...) 15726: { 15726: 15726: __carry._M_put_all(end()._M_node); 15726: for (size_t __i = 0; __i < sizeof(__tmp)/sizeof(__tmp[0]); ++__i) 15726: __tmp[__i]._M_put_all(end()._M_node); 15726: throw; 15726: } 15726: } 15726: } 15726: 15726: 15726: 15726: } 15726: # 67 "/usr/include/c++/13/list" 2 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: namespace pmr 15726: { 15726: template 15726: using list = std::list<_Tp, polymorphic_allocator<_Tp>>; 15726: } 15726: 15726: } 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 2 15726: 15726: # 1 "/usr/include/c++/13/set" 1 3 15726: # 58 "/usr/include/c++/13/set" 3 15726: 15726: # 59 "/usr/include/c++/13/set" 3 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/stl_set.h" 1 3 15726: # 64 "/usr/include/c++/13/bits/stl_set.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: template 15726: class multiset; 15726: # 94 "/usr/include/c++/13/bits/stl_set.h" 3 15726: template, 15726: typename _Alloc = std::allocator<_Key> > 15726: class set 15726: { 15726: # 110 "/usr/include/c++/13/bits/stl_set.h" 3 15726: static_assert(is_same::type, _Key>::value, 15726: "std::set must have a non-const, non-volatile value_type"); 15726: 15726: 15726: 15726: 15726: 15726: 15726: public: 15726: 15726: 15726: 15726: typedef _Key key_type; 15726: typedef _Key value_type; 15726: typedef _Compare key_compare; 15726: typedef _Compare value_compare; 15726: typedef _Alloc allocator_type; 15726: 15726: 15726: private: 15726: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 15726: rebind<_Key>::other _Key_alloc_type; 15726: 15726: typedef _Rb_tree, 15726: key_compare, _Key_alloc_type> _Rep_type; 15726: _Rep_type _M_t; 15726: 15726: typedef __gnu_cxx::__alloc_traits<_Key_alloc_type> _Alloc_traits; 15726: 15726: public: 15726: 15726: 15726: typedef typename _Alloc_traits::pointer pointer; 15726: typedef typename _Alloc_traits::const_pointer const_pointer; 15726: typedef typename _Alloc_traits::reference reference; 15726: typedef typename _Alloc_traits::const_reference const_reference; 15726: 15726: 15726: 15726: typedef typename _Rep_type::const_iterator iterator; 15726: typedef typename _Rep_type::const_iterator const_iterator; 15726: typedef typename _Rep_type::const_reverse_iterator reverse_iterator; 15726: typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; 15726: typedef typename _Rep_type::size_type size_type; 15726: typedef typename _Rep_type::difference_type difference_type; 15726: 15726: 15726: 15726: using node_type = typename _Rep_type::node_type; 15726: using insert_return_type = typename _Rep_type::insert_return_type; 15726: # 169 "/usr/include/c++/13/bits/stl_set.h" 3 15726: set() = default; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: set(const _Compare& __comp, 15726: const allocator_type& __a = allocator_type()) 15726: : _M_t(__comp, _Key_alloc_type(__a)) { } 15726: # 192 "/usr/include/c++/13/bits/stl_set.h" 3 15726: template 15726: set(_InputIterator __first, _InputIterator __last) 15726: : _M_t() 15726: { _M_t._M_insert_range_unique(__first, __last); } 15726: # 209 "/usr/include/c++/13/bits/stl_set.h" 3 15726: template 15726: set(_InputIterator __first, _InputIterator __last, 15726: const _Compare& __comp, 15726: const allocator_type& __a = allocator_type()) 15726: : _M_t(__comp, _Key_alloc_type(__a)) 15726: { _M_t._M_insert_range_unique(__first, __last); } 15726: # 225 "/usr/include/c++/13/bits/stl_set.h" 3 15726: set(const set&) = default; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: set(set&&) = default; 15726: # 245 "/usr/include/c++/13/bits/stl_set.h" 3 15726: set(initializer_list __l, 15726: const _Compare& __comp = _Compare(), 15726: const allocator_type& __a = allocator_type()) 15726: : _M_t(__comp, _Key_alloc_type(__a)) 15726: { _M_t._M_insert_range_unique(__l.begin(), __l.end()); } 15726: 15726: 15726: explicit 15726: set(const allocator_type& __a) 15726: : _M_t(_Key_alloc_type(__a)) { } 15726: 15726: 15726: set(const set& __x, const __type_identity_t& __a) 15726: : _M_t(__x._M_t, _Key_alloc_type(__a)) { } 15726: 15726: 15726: set(set&& __x, const __type_identity_t& __a) 15726: noexcept(is_nothrow_copy_constructible<_Compare>::value 15726: && _Alloc_traits::_S_always_equal()) 15726: : _M_t(std::move(__x._M_t), _Key_alloc_type(__a)) { } 15726: 15726: 15726: set(initializer_list __l, const allocator_type& __a) 15726: : _M_t(_Key_alloc_type(__a)) 15726: { _M_t._M_insert_range_unique(__l.begin(), __l.end()); } 15726: 15726: 15726: template 15726: set(_InputIterator __first, _InputIterator __last, 15726: const allocator_type& __a) 15726: : _M_t(_Key_alloc_type(__a)) 15726: { _M_t._M_insert_range_unique(__first, __last); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: ~set() = default; 15726: # 299 "/usr/include/c++/13/bits/stl_set.h" 3 15726: set& 15726: operator=(const set&) = default; 15726: 15726: 15726: set& 15726: operator=(set&&) = default; 15726: # 317 "/usr/include/c++/13/bits/stl_set.h" 3 15726: set& 15726: operator=(initializer_list __l) 15726: { 15726: _M_t._M_assign_unique(__l.begin(), __l.end()); 15726: return *this; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: key_compare 15726: key_comp() const 15726: { return _M_t.key_comp(); } 15726: 15726: value_compare 15726: value_comp() const 15726: { return _M_t.key_comp(); } 15726: 15726: allocator_type 15726: get_allocator() const noexcept 15726: { return allocator_type(_M_t.get_allocator()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: iterator 15726: begin() const noexcept 15726: { return _M_t.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: iterator 15726: end() const noexcept 15726: { return _M_t.end(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: reverse_iterator 15726: rbegin() const noexcept 15726: { return _M_t.rbegin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: reverse_iterator 15726: rend() const noexcept 15726: { return _M_t.rend(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: iterator 15726: cbegin() const noexcept 15726: { return _M_t.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: iterator 15726: cend() const noexcept 15726: { return _M_t.end(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: reverse_iterator 15726: crbegin() const noexcept 15726: { return _M_t.rbegin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: reverse_iterator 15726: crend() const noexcept 15726: { return _M_t.rend(); } 15726: 15726: 15726: 15726: [[__nodiscard__]] bool 15726: empty() const noexcept 15726: { return _M_t.empty(); } 15726: 15726: 15726: size_type 15726: size() const noexcept 15726: { return _M_t.size(); } 15726: 15726: 15726: size_type 15726: max_size() const noexcept 15726: { return _M_t.max_size(); } 15726: # 442 "/usr/include/c++/13/bits/stl_set.h" 3 15726: void 15726: swap(set& __x) 15726: noexcept(__is_nothrow_swappable<_Compare>::value) 15726: { _M_t.swap(__x._M_t); } 15726: # 462 "/usr/include/c++/13/bits/stl_set.h" 3 15726: template 15726: std::pair 15726: emplace(_Args&&... __args) 15726: { return _M_t._M_emplace_unique(std::forward<_Args>(__args)...); } 15726: # 488 "/usr/include/c++/13/bits/stl_set.h" 3 15726: template 15726: iterator 15726: emplace_hint(const_iterator __pos, _Args&&... __args) 15726: { 15726: return _M_t._M_emplace_hint_unique(__pos, 15726: std::forward<_Args>(__args)...); 15726: } 15726: # 510 "/usr/include/c++/13/bits/stl_set.h" 3 15726: std::pair 15726: insert(const value_type& __x) 15726: { 15726: std::pair __p = 15726: _M_t._M_insert_unique(__x); 15726: return std::pair(__p.first, __p.second); 15726: } 15726: 15726: 15726: std::pair 15726: insert(value_type&& __x) 15726: { 15726: std::pair __p = 15726: _M_t._M_insert_unique(std::move(__x)); 15726: return std::pair(__p.first, __p.second); 15726: } 15726: # 547 "/usr/include/c++/13/bits/stl_set.h" 3 15726: iterator 15726: insert(const_iterator __position, const value_type& __x) 15726: { return _M_t._M_insert_unique_(__position, __x); } 15726: 15726: 15726: iterator 15726: insert(const_iterator __position, value_type&& __x) 15726: { return _M_t._M_insert_unique_(__position, std::move(__x)); } 15726: # 566 "/usr/include/c++/13/bits/stl_set.h" 3 15726: template 15726: void 15726: insert(_InputIterator __first, _InputIterator __last) 15726: { _M_t._M_insert_range_unique(__first, __last); } 15726: # 579 "/usr/include/c++/13/bits/stl_set.h" 3 15726: void 15726: insert(initializer_list __l) 15726: { this->insert(__l.begin(), __l.end()); } 15726: 15726: 15726: 15726: 15726: node_type 15726: extract(const_iterator __pos) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__pos != end())) __builtin_unreachable(); } while (false); 15726: return _M_t.extract(__pos); 15726: } 15726: 15726: 15726: node_type 15726: extract(const key_type& __x) 15726: { return _M_t.extract(__x); } 15726: 15726: 15726: insert_return_type 15726: insert(node_type&& __nh) 15726: { return _M_t._M_reinsert_node_unique(std::move(__nh)); } 15726: 15726: 15726: iterator 15726: insert(const_iterator __hint, node_type&& __nh) 15726: { return _M_t._M_reinsert_node_hint_unique(__hint, std::move(__nh)); } 15726: 15726: template 15726: friend struct std::_Rb_tree_merge_helper; 15726: 15726: template 15726: void 15726: merge(set<_Key, _Compare1, _Alloc>& __source) 15726: { 15726: using _Merge_helper = _Rb_tree_merge_helper; 15726: _M_t._M_merge_unique(_Merge_helper::_S_get_tree(__source)); 15726: } 15726: 15726: template 15726: void 15726: merge(set<_Key, _Compare1, _Alloc>&& __source) 15726: { merge(__source); } 15726: 15726: template 15726: void 15726: merge(multiset<_Key, _Compare1, _Alloc>& __source) 15726: { 15726: using _Merge_helper = _Rb_tree_merge_helper; 15726: _M_t._M_merge_unique(_Merge_helper::_S_get_tree(__source)); 15726: } 15726: 15726: template 15726: void 15726: merge(multiset<_Key, _Compare1, _Alloc>&& __source) 15726: { merge(__source); } 15726: # 654 "/usr/include/c++/13/bits/stl_set.h" 3 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: iterator 15726: erase(const_iterator __position) 15726: { return _M_t.erase(__position); } 15726: # 685 "/usr/include/c++/13/bits/stl_set.h" 3 15726: size_type 15726: erase(const key_type& __x) 15726: { return _M_t.erase(__x); } 15726: # 706 "/usr/include/c++/13/bits/stl_set.h" 3 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: iterator 15726: erase(const_iterator __first, const_iterator __last) 15726: { return _M_t.erase(__first, __last); } 15726: # 734 "/usr/include/c++/13/bits/stl_set.h" 3 15726: void 15726: clear() noexcept 15726: { _M_t.clear(); } 15726: # 749 "/usr/include/c++/13/bits/stl_set.h" 3 15726: size_type 15726: count(const key_type& __x) const 15726: { return _M_t.find(__x) == _M_t.end() ? 0 : 1; } 15726: 15726: 15726: template 15726: auto 15726: count(const _Kt& __x) const 15726: -> decltype(_M_t._M_count_tr(__x)) 15726: { return _M_t._M_count_tr(__x); } 15726: # 795 "/usr/include/c++/13/bits/stl_set.h" 3 15726: iterator 15726: find(const key_type& __x) 15726: { return _M_t.find(__x); } 15726: 15726: const_iterator 15726: find(const key_type& __x) const 15726: { return _M_t.find(__x); } 15726: 15726: 15726: template 15726: auto 15726: find(const _Kt& __x) 15726: -> decltype(iterator{_M_t._M_find_tr(__x)}) 15726: { return iterator{_M_t._M_find_tr(__x)}; } 15726: 15726: template 15726: auto 15726: find(const _Kt& __x) const 15726: -> decltype(const_iterator{_M_t._M_find_tr(__x)}) 15726: { return const_iterator{_M_t._M_find_tr(__x)}; } 15726: # 830 "/usr/include/c++/13/bits/stl_set.h" 3 15726: iterator 15726: lower_bound(const key_type& __x) 15726: { return _M_t.lower_bound(__x); } 15726: 15726: const_iterator 15726: lower_bound(const key_type& __x) const 15726: { return _M_t.lower_bound(__x); } 15726: 15726: 15726: template 15726: auto 15726: lower_bound(const _Kt& __x) 15726: -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) 15726: { return iterator(_M_t._M_lower_bound_tr(__x)); } 15726: 15726: template 15726: auto 15726: lower_bound(const _Kt& __x) const 15726: -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x))) 15726: { return const_iterator(_M_t._M_lower_bound_tr(__x)); } 15726: # 860 "/usr/include/c++/13/bits/stl_set.h" 3 15726: iterator 15726: upper_bound(const key_type& __x) 15726: { return _M_t.upper_bound(__x); } 15726: 15726: const_iterator 15726: upper_bound(const key_type& __x) const 15726: { return _M_t.upper_bound(__x); } 15726: 15726: 15726: template 15726: auto 15726: upper_bound(const _Kt& __x) 15726: -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) 15726: { return iterator(_M_t._M_upper_bound_tr(__x)); } 15726: 15726: template 15726: auto 15726: upper_bound(const _Kt& __x) const 15726: -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) 15726: { return const_iterator(_M_t._M_upper_bound_tr(__x)); } 15726: # 899 "/usr/include/c++/13/bits/stl_set.h" 3 15726: std::pair 15726: equal_range(const key_type& __x) 15726: { return _M_t.equal_range(__x); } 15726: 15726: std::pair 15726: equal_range(const key_type& __x) const 15726: { return _M_t.equal_range(__x); } 15726: 15726: 15726: template 15726: auto 15726: equal_range(const _Kt& __x) 15726: -> decltype(pair(_M_t._M_equal_range_tr(__x))) 15726: { return pair(_M_t._M_equal_range_tr(__x)); } 15726: 15726: template 15726: auto 15726: equal_range(const _Kt& __x) const 15726: -> decltype(pair(_M_t._M_equal_range_tr(__x))) 15726: { return pair(_M_t._M_equal_range_tr(__x)); } 15726: 15726: 15726: 15726: template 15726: friend bool 15726: operator==(const set<_K1, _C1, _A1>&, const set<_K1, _C1, _A1>&); 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: friend bool 15726: operator<(const set<_K1, _C1, _A1>&, const set<_K1, _C1, _A1>&); 15726: 15726: }; 15726: 15726: 15726: 15726: template::value_type>, 15726: typename _Allocator = 15726: allocator::value_type>, 15726: typename = _RequireInputIter<_InputIterator>, 15726: typename = _RequireNotAllocator<_Compare>, 15726: typename = _RequireAllocator<_Allocator>> 15726: set(_InputIterator, _InputIterator, 15726: _Compare = _Compare(), _Allocator = _Allocator()) 15726: -> set::value_type, 15726: _Compare, _Allocator>; 15726: 15726: template, 15726: typename _Allocator = allocator<_Key>, 15726: typename = _RequireNotAllocator<_Compare>, 15726: typename = _RequireAllocator<_Allocator>> 15726: set(initializer_list<_Key>, 15726: _Compare = _Compare(), _Allocator = _Allocator()) 15726: -> set<_Key, _Compare, _Allocator>; 15726: 15726: template, 15726: typename = _RequireAllocator<_Allocator>> 15726: set(_InputIterator, _InputIterator, _Allocator) 15726: -> set::value_type, 15726: less::value_type>, 15726: _Allocator>; 15726: 15726: template> 15726: set(initializer_list<_Key>, _Allocator) 15726: -> set<_Key, less<_Key>, _Allocator>; 15726: # 985 "/usr/include/c++/13/bits/stl_set.h" 3 15726: template 15726: inline bool 15726: operator==(const set<_Key, _Compare, _Alloc>& __x, 15726: const set<_Key, _Compare, _Alloc>& __y) 15726: { return __x._M_t == __y._M_t; } 15726: # 1023 "/usr/include/c++/13/bits/stl_set.h" 3 15726: template 15726: inline bool 15726: operator<(const set<_Key, _Compare, _Alloc>& __x, 15726: const set<_Key, _Compare, _Alloc>& __y) 15726: { return __x._M_t < __y._M_t; } 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const set<_Key, _Compare, _Alloc>& __x, 15726: const set<_Key, _Compare, _Alloc>& __y) 15726: { return !(__x == __y); } 15726: 15726: 15726: template 15726: inline bool 15726: operator>(const set<_Key, _Compare, _Alloc>& __x, 15726: const set<_Key, _Compare, _Alloc>& __y) 15726: { return __y < __x; } 15726: 15726: 15726: template 15726: inline bool 15726: operator<=(const set<_Key, _Compare, _Alloc>& __x, 15726: const set<_Key, _Compare, _Alloc>& __y) 15726: { return !(__y < __x); } 15726: 15726: 15726: template 15726: inline bool 15726: operator>=(const set<_Key, _Compare, _Alloc>& __x, 15726: const set<_Key, _Compare, _Alloc>& __y) 15726: { return !(__x < __y); } 15726: 15726: 15726: 15726: template 15726: inline void 15726: swap(set<_Key, _Compare, _Alloc>& __x, set<_Key, _Compare, _Alloc>& __y) 15726: noexcept(noexcept(__x.swap(__y))) 15726: { __x.swap(__y); } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct 15726: _Rb_tree_merge_helper, _Cmp2> 15726: { 15726: private: 15726: friend class std::set<_Val, _Cmp1, _Alloc>; 15726: 15726: static auto& 15726: _S_get_tree(std::set<_Val, _Cmp2, _Alloc>& __set) 15726: { return __set._M_t; } 15726: 15726: static auto& 15726: _S_get_tree(std::multiset<_Val, _Cmp2, _Alloc>& __set) 15726: { return __set._M_t; } 15726: }; 15726: 15726: 15726: 15726: } 15726: # 64 "/usr/include/c++/13/set" 2 3 15726: # 1 "/usr/include/c++/13/bits/stl_multiset.h" 1 3 15726: # 64 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: template 15726: class set; 15726: # 95 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: template , 15726: typename _Alloc = std::allocator<_Key> > 15726: class multiset 15726: { 15726: # 111 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: static_assert(is_same::type, _Key>::value, 15726: "std::multiset must have a non-const, non-volatile value_type"); 15726: 15726: 15726: 15726: 15726: 15726: 15726: public: 15726: 15726: typedef _Key key_type; 15726: typedef _Key value_type; 15726: typedef _Compare key_compare; 15726: typedef _Compare value_compare; 15726: typedef _Alloc allocator_type; 15726: 15726: private: 15726: 15726: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template 15726: rebind<_Key>::other _Key_alloc_type; 15726: 15726: typedef _Rb_tree, 15726: key_compare, _Key_alloc_type> _Rep_type; 15726: 15726: _Rep_type _M_t; 15726: 15726: typedef __gnu_cxx::__alloc_traits<_Key_alloc_type> _Alloc_traits; 15726: 15726: public: 15726: typedef typename _Alloc_traits::pointer pointer; 15726: typedef typename _Alloc_traits::const_pointer const_pointer; 15726: typedef typename _Alloc_traits::reference reference; 15726: typedef typename _Alloc_traits::const_reference const_reference; 15726: 15726: 15726: 15726: typedef typename _Rep_type::const_iterator iterator; 15726: typedef typename _Rep_type::const_iterator const_iterator; 15726: typedef typename _Rep_type::const_reverse_iterator reverse_iterator; 15726: typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; 15726: typedef typename _Rep_type::size_type size_type; 15726: typedef typename _Rep_type::difference_type difference_type; 15726: 15726: 15726: using node_type = typename _Rep_type::node_type; 15726: # 165 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: multiset() = default; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: multiset(const _Compare& __comp, 15726: const allocator_type& __a = allocator_type()) 15726: : _M_t(__comp, _Key_alloc_type(__a)) { } 15726: # 187 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: template 15726: multiset(_InputIterator __first, _InputIterator __last) 15726: : _M_t() 15726: { _M_t._M_insert_range_equal(__first, __last); } 15726: # 203 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: template 15726: multiset(_InputIterator __first, _InputIterator __last, 15726: const _Compare& __comp, 15726: const allocator_type& __a = allocator_type()) 15726: : _M_t(__comp, _Key_alloc_type(__a)) 15726: { _M_t._M_insert_range_equal(__first, __last); } 15726: # 219 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: multiset(const multiset&) = default; 15726: # 228 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: multiset(multiset&&) = default; 15726: # 240 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: multiset(initializer_list __l, 15726: const _Compare& __comp = _Compare(), 15726: const allocator_type& __a = allocator_type()) 15726: : _M_t(__comp, _Key_alloc_type(__a)) 15726: { _M_t._M_insert_range_equal(__l.begin(), __l.end()); } 15726: 15726: 15726: explicit 15726: multiset(const allocator_type& __a) 15726: : _M_t(_Key_alloc_type(__a)) { } 15726: 15726: 15726: multiset(const multiset& __m, 15726: const __type_identity_t& __a) 15726: : _M_t(__m._M_t, _Key_alloc_type(__a)) { } 15726: 15726: 15726: multiset(multiset&& __m, const __type_identity_t& __a) 15726: noexcept(is_nothrow_copy_constructible<_Compare>::value 15726: && _Alloc_traits::_S_always_equal()) 15726: : _M_t(std::move(__m._M_t), _Key_alloc_type(__a)) { } 15726: 15726: 15726: multiset(initializer_list __l, const allocator_type& __a) 15726: : _M_t(_Key_alloc_type(__a)) 15726: { _M_t._M_insert_range_equal(__l.begin(), __l.end()); } 15726: 15726: 15726: template 15726: multiset(_InputIterator __first, _InputIterator __last, 15726: const allocator_type& __a) 15726: : _M_t(_Key_alloc_type(__a)) 15726: { _M_t._M_insert_range_equal(__first, __last); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: ~multiset() = default; 15726: # 295 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: multiset& 15726: operator=(const multiset&) = default; 15726: 15726: 15726: multiset& 15726: operator=(multiset&&) = default; 15726: # 313 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: multiset& 15726: operator=(initializer_list __l) 15726: { 15726: _M_t._M_assign_equal(__l.begin(), __l.end()); 15726: return *this; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: key_compare 15726: key_comp() const 15726: { return _M_t.key_comp(); } 15726: 15726: value_compare 15726: value_comp() const 15726: { return _M_t.key_comp(); } 15726: 15726: allocator_type 15726: get_allocator() const noexcept 15726: { return allocator_type(_M_t.get_allocator()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: iterator 15726: begin() const noexcept 15726: { return _M_t.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: iterator 15726: end() const noexcept 15726: { return _M_t.end(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: reverse_iterator 15726: rbegin() const noexcept 15726: { return _M_t.rbegin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: reverse_iterator 15726: rend() const noexcept 15726: { return _M_t.rend(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: iterator 15726: cbegin() const noexcept 15726: { return _M_t.begin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: iterator 15726: cend() const noexcept 15726: { return _M_t.end(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: reverse_iterator 15726: crbegin() const noexcept 15726: { return _M_t.rbegin(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: reverse_iterator 15726: crend() const noexcept 15726: { return _M_t.rend(); } 15726: 15726: 15726: 15726: [[__nodiscard__]] bool 15726: empty() const noexcept 15726: { return _M_t.empty(); } 15726: 15726: 15726: size_type 15726: size() const noexcept 15726: { return _M_t.size(); } 15726: 15726: 15726: size_type 15726: max_size() const noexcept 15726: { return _M_t.max_size(); } 15726: # 438 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: void 15726: swap(multiset& __x) 15726: noexcept(__is_nothrow_swappable<_Compare>::value) 15726: { _M_t.swap(__x._M_t); } 15726: # 457 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: template 15726: iterator 15726: emplace(_Args&&... __args) 15726: { return _M_t._M_emplace_equal(std::forward<_Args>(__args)...); } 15726: # 483 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: template 15726: iterator 15726: emplace_hint(const_iterator __pos, _Args&&... __args) 15726: { 15726: return _M_t._M_emplace_hint_equal(__pos, 15726: std::forward<_Args>(__args)...); 15726: } 15726: # 503 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: iterator 15726: insert(const value_type& __x) 15726: { return _M_t._M_insert_equal(__x); } 15726: 15726: 15726: iterator 15726: insert(value_type&& __x) 15726: { return _M_t._M_insert_equal(std::move(__x)); } 15726: # 533 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: iterator 15726: insert(const_iterator __position, const value_type& __x) 15726: { return _M_t._M_insert_equal_(__position, __x); } 15726: 15726: 15726: iterator 15726: insert(const_iterator __position, value_type&& __x) 15726: { return _M_t._M_insert_equal_(__position, std::move(__x)); } 15726: # 551 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: template 15726: void 15726: insert(_InputIterator __first, _InputIterator __last) 15726: { _M_t._M_insert_range_equal(__first, __last); } 15726: # 564 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: void 15726: insert(initializer_list __l) 15726: { this->insert(__l.begin(), __l.end()); } 15726: 15726: 15726: 15726: 15726: node_type 15726: extract(const_iterator __pos) 15726: { 15726: do { if (std::__is_constant_evaluated() && !bool(__pos != end())) __builtin_unreachable(); } while (false); 15726: return _M_t.extract(__pos); 15726: } 15726: 15726: 15726: node_type 15726: extract(const key_type& __x) 15726: { return _M_t.extract(__x); } 15726: 15726: 15726: iterator 15726: insert(node_type&& __nh) 15726: { return _M_t._M_reinsert_node_equal(std::move(__nh)); } 15726: 15726: 15726: iterator 15726: insert(const_iterator __hint, node_type&& __nh) 15726: { return _M_t._M_reinsert_node_hint_equal(__hint, std::move(__nh)); } 15726: 15726: template 15726: friend struct std::_Rb_tree_merge_helper; 15726: 15726: template 15726: void 15726: merge(multiset<_Key, _Compare1, _Alloc>& __source) 15726: { 15726: using _Merge_helper = _Rb_tree_merge_helper; 15726: _M_t._M_merge_equal(_Merge_helper::_S_get_tree(__source)); 15726: } 15726: 15726: template 15726: void 15726: merge(multiset<_Key, _Compare1, _Alloc>&& __source) 15726: { merge(__source); } 15726: 15726: template 15726: void 15726: merge(set<_Key, _Compare1, _Alloc>& __source) 15726: { 15726: using _Merge_helper = _Rb_tree_merge_helper; 15726: _M_t._M_merge_equal(_Merge_helper::_S_get_tree(__source)); 15726: } 15726: 15726: template 15726: void 15726: merge(set<_Key, _Compare1, _Alloc>&& __source) 15726: { merge(__source); } 15726: # 639 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: iterator 15726: erase(const_iterator __position) 15726: { return _M_t.erase(__position); } 15726: # 670 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: size_type 15726: erase(const key_type& __x) 15726: { return _M_t.erase(__x); } 15726: # 691 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: iterator 15726: erase(const_iterator __first, const_iterator __last) 15726: { return _M_t.erase(__first, __last); } 15726: # 719 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: void 15726: clear() noexcept 15726: { _M_t.clear(); } 15726: # 731 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: size_type 15726: count(const key_type& __x) const 15726: { return _M_t.count(__x); } 15726: 15726: 15726: template 15726: auto 15726: count(const _Kt& __x) const -> decltype(_M_t._M_count_tr(__x)) 15726: { return _M_t._M_count_tr(__x); } 15726: # 776 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: iterator 15726: find(const key_type& __x) 15726: { return _M_t.find(__x); } 15726: 15726: const_iterator 15726: find(const key_type& __x) const 15726: { return _M_t.find(__x); } 15726: 15726: 15726: template 15726: auto 15726: find(const _Kt& __x) 15726: -> decltype(iterator{_M_t._M_find_tr(__x)}) 15726: { return iterator{_M_t._M_find_tr(__x)}; } 15726: 15726: template 15726: auto 15726: find(const _Kt& __x) const 15726: -> decltype(const_iterator{_M_t._M_find_tr(__x)}) 15726: { return const_iterator{_M_t._M_find_tr(__x)}; } 15726: # 811 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: iterator 15726: lower_bound(const key_type& __x) 15726: { return _M_t.lower_bound(__x); } 15726: 15726: const_iterator 15726: lower_bound(const key_type& __x) const 15726: { return _M_t.lower_bound(__x); } 15726: 15726: 15726: template 15726: auto 15726: lower_bound(const _Kt& __x) 15726: -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) 15726: { return iterator(_M_t._M_lower_bound_tr(__x)); } 15726: 15726: template 15726: auto 15726: lower_bound(const _Kt& __x) const 15726: -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) 15726: { return iterator(_M_t._M_lower_bound_tr(__x)); } 15726: # 841 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: iterator 15726: upper_bound(const key_type& __x) 15726: { return _M_t.upper_bound(__x); } 15726: 15726: const_iterator 15726: upper_bound(const key_type& __x) const 15726: { return _M_t.upper_bound(__x); } 15726: 15726: 15726: template 15726: auto 15726: upper_bound(const _Kt& __x) 15726: -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) 15726: { return iterator(_M_t._M_upper_bound_tr(__x)); } 15726: 15726: template 15726: auto 15726: upper_bound(const _Kt& __x) const 15726: -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) 15726: { return iterator(_M_t._M_upper_bound_tr(__x)); } 15726: # 880 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: std::pair 15726: equal_range(const key_type& __x) 15726: { return _M_t.equal_range(__x); } 15726: 15726: std::pair 15726: equal_range(const key_type& __x) const 15726: { return _M_t.equal_range(__x); } 15726: 15726: 15726: template 15726: auto 15726: equal_range(const _Kt& __x) 15726: -> decltype(pair(_M_t._M_equal_range_tr(__x))) 15726: { return pair(_M_t._M_equal_range_tr(__x)); } 15726: 15726: template 15726: auto 15726: equal_range(const _Kt& __x) const 15726: -> decltype(pair(_M_t._M_equal_range_tr(__x))) 15726: { return pair(_M_t._M_equal_range_tr(__x)); } 15726: 15726: 15726: 15726: template 15726: friend bool 15726: operator==(const multiset<_K1, _C1, _A1>&, 15726: const multiset<_K1, _C1, _A1>&); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: friend bool 15726: operator< (const multiset<_K1, _C1, _A1>&, 15726: const multiset<_K1, _C1, _A1>&); 15726: 15726: }; 15726: 15726: 15726: 15726: template::value_type>, 15726: typename _Allocator = 15726: allocator::value_type>, 15726: typename = _RequireInputIter<_InputIterator>, 15726: typename = _RequireNotAllocator<_Compare>, 15726: typename = _RequireAllocator<_Allocator>> 15726: multiset(_InputIterator, _InputIterator, 15726: _Compare = _Compare(), _Allocator = _Allocator()) 15726: -> multiset::value_type, 15726: _Compare, _Allocator>; 15726: 15726: template, 15726: typename _Allocator = allocator<_Key>, 15726: typename = _RequireNotAllocator<_Compare>, 15726: typename = _RequireAllocator<_Allocator>> 15726: multiset(initializer_list<_Key>, 15726: _Compare = _Compare(), _Allocator = _Allocator()) 15726: -> multiset<_Key, _Compare, _Allocator>; 15726: 15726: template, 15726: typename = _RequireAllocator<_Allocator>> 15726: multiset(_InputIterator, _InputIterator, _Allocator) 15726: -> multiset::value_type, 15726: less::value_type>, 15726: _Allocator>; 15726: 15726: template> 15726: multiset(initializer_list<_Key>, _Allocator) 15726: -> multiset<_Key, less<_Key>, _Allocator>; 15726: # 971 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: template 15726: inline bool 15726: operator==(const multiset<_Key, _Compare, _Alloc>& __x, 15726: const multiset<_Key, _Compare, _Alloc>& __y) 15726: { return __x._M_t == __y._M_t; } 15726: # 1009 "/usr/include/c++/13/bits/stl_multiset.h" 3 15726: template 15726: inline bool 15726: operator<(const multiset<_Key, _Compare, _Alloc>& __x, 15726: const multiset<_Key, _Compare, _Alloc>& __y) 15726: { return __x._M_t < __y._M_t; } 15726: 15726: 15726: template 15726: inline bool 15726: operator!=(const multiset<_Key, _Compare, _Alloc>& __x, 15726: const multiset<_Key, _Compare, _Alloc>& __y) 15726: { return !(__x == __y); } 15726: 15726: 15726: template 15726: inline bool 15726: operator>(const multiset<_Key,_Compare,_Alloc>& __x, 15726: const multiset<_Key,_Compare,_Alloc>& __y) 15726: { return __y < __x; } 15726: 15726: 15726: template 15726: inline bool 15726: operator<=(const multiset<_Key, _Compare, _Alloc>& __x, 15726: const multiset<_Key, _Compare, _Alloc>& __y) 15726: { return !(__y < __x); } 15726: 15726: 15726: template 15726: inline bool 15726: operator>=(const multiset<_Key, _Compare, _Alloc>& __x, 15726: const multiset<_Key, _Compare, _Alloc>& __y) 15726: { return !(__x < __y); } 15726: 15726: 15726: 15726: template 15726: inline void 15726: swap(multiset<_Key, _Compare, _Alloc>& __x, 15726: multiset<_Key, _Compare, _Alloc>& __y) 15726: noexcept(noexcept(__x.swap(__y))) 15726: { __x.swap(__y); } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct 15726: _Rb_tree_merge_helper, 15726: _Cmp2> 15726: { 15726: private: 15726: friend class std::multiset<_Val, _Cmp1, _Alloc>; 15726: 15726: static auto& 15726: _S_get_tree(std::set<_Val, _Cmp2, _Alloc>& __set) 15726: { return __set._M_t; } 15726: 15726: static auto& 15726: _S_get_tree(std::multiset<_Val, _Cmp2, _Alloc>& __set) 15726: { return __set._M_t; } 15726: }; 15726: 15726: 15726: 15726: } 15726: # 65 "/usr/include/c++/13/set" 2 3 15726: # 74 "/usr/include/c++/13/set" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: namespace pmr 15726: { 15726: template> 15726: using set = std::set<_Key, _Cmp, polymorphic_allocator<_Key>>; 15726: template> 15726: using multiset = std::multiset<_Key, _Cmp, polymorphic_allocator<_Key>>; 15726: } 15726: 15726: } 15726: # 11 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 2 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/file/readahead_file_info.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 13 "/build/reproducible-path/rocksdb-9.3.1/file/readahead_file_info.h" 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct ReadaheadFileInfo { 15726: struct ReadaheadInfo { 15726: size_t readahead_size = 0; 15726: int64_t num_file_reads = 0; 15726: }; 15726: 15726: 15726: ReadaheadInfo data_block_readahead_info; 15726: 15726: 15726: ReadaheadInfo index_block_readahead_info; 15726: }; 15726: 15726: } 15726: # 13 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 1 15726: # 19 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator_base.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class IteratorBase : public Cleanable { 15726: public: 15726: IteratorBase() {} 15726: 15726: IteratorBase(const IteratorBase&) = delete; 15726: void operator=(const IteratorBase&) = delete; 15726: 15726: virtual ~IteratorBase() {} 15726: 15726: 15726: 15726: 15726: virtual bool Valid() const = 0; 15726: 15726: 15726: 15726: virtual void SeekToFirst() = 0; 15726: 15726: 15726: 15726: virtual void SeekToLast() = 0; 15726: # 43 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator_base.h" 15726: virtual void Seek(const Slice& target) = 0; 15726: 15726: 15726: 15726: 15726: 15726: virtual void SeekForPrev(const Slice& target) = 0; 15726: 15726: 15726: 15726: 15726: virtual void Next() = 0; 15726: 15726: 15726: 15726: 15726: virtual void Prev() = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Slice key() const = 0; 15726: 15726: 15726: 15726: 15726: virtual Status status() const = 0; 15726: }; 15726: 15726: } 15726: # 24 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/ostream" 1 3 15726: # 36 "/usr/include/c++/13/ostream" 3 15726: 15726: # 37 "/usr/include/c++/13/ostream" 3 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/ios" 1 3 15726: # 36 "/usr/include/c++/13/ios" 3 15726: 15726: # 37 "/usr/include/c++/13/ios" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/ios_base.h" 1 3 15726: # 37 "/usr/include/c++/13/bits/ios_base.h" 3 15726: 15726: # 38 "/usr/include/c++/13/bits/ios_base.h" 3 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/locale_classes.h" 1 3 15726: # 37 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: 15726: # 38 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 43 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 62 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: class locale 15726: { 15726: public: 15726: 15726: 15726: typedef int category; 15726: 15726: 15726: class facet; 15726: class id; 15726: class _Impl; 15726: 15726: friend class facet; 15726: friend class _Impl; 15726: 15726: template 15726: friend bool 15726: has_facet(const locale&) throw(); 15726: 15726: template 15726: friend const _Facet& 15726: use_facet(const locale&); 15726: 15726: template 15726: friend const _Facet* 15726: __try_use_facet(const locale&) noexcept; 15726: 15726: template 15726: friend struct __use_cache; 15726: # 102 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: static const category none = 0; 15726: static const category ctype = 1L << 0; 15726: static const category numeric = 1L << 1; 15726: static const category collate = 1L << 2; 15726: static const category time = 1L << 3; 15726: static const category monetary = 1L << 4; 15726: static const category messages = 1L << 5; 15726: static const category all = (ctype | numeric | collate | 15726: time | monetary | messages); 15726: # 121 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: locale() throw(); 15726: # 130 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: locale(const locale& __other) throw(); 15726: # 140 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: explicit 15726: locale(const char* __s); 15726: # 155 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: locale(const locale& __base, const char* __s, category __cat); 15726: # 166 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: explicit 15726: locale(const std::string& __s) : locale(__s.c_str()) { } 15726: # 181 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: locale(const locale& __base, const std::string& __s, category __cat) 15726: : locale(__base, __s.c_str(), __cat) { } 15726: # 196 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: locale(const locale& __base, const locale& __add, category __cat); 15726: # 209 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: template 15726: locale(const locale& __other, _Facet* __f); 15726: 15726: 15726: ~locale() throw(); 15726: # 223 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: const locale& 15726: operator=(const locale& __other) throw(); 15726: # 238 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: template 15726: locale 15726: combine(const locale& __other) const; 15726: 15726: 15726: 15726: 15726: 15726: 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: string 15726: name() const; 15726: # 258 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: bool 15726: operator==(const locale& __other) const throw(); 15726: # 268 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: bool 15726: operator!=(const locale& __other) const throw() 15726: { return !(this->operator==(__other)); } 15726: # 288 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: template 15726: bool 15726: operator()(const basic_string<_Char, _Traits, _Alloc>& __s1, 15726: const basic_string<_Char, _Traits, _Alloc>& __s2) const; 15726: # 304 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: static locale 15726: global(const locale& __loc); 15726: 15726: 15726: 15726: 15726: static const locale& 15726: classic(); 15726: 15726: private: 15726: 15726: _Impl* _M_impl; 15726: 15726: 15726: static _Impl* _S_classic; 15726: 15726: 15726: static _Impl* _S_global; 15726: 15726: 15726: 15726: 15726: 15726: static const char* const* const _S_categories; 15726: # 339 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: enum { _S_categories_size = 6 + 6 }; 15726: 15726: 15726: static __gthread_once_t _S_once; 15726: 15726: 15726: explicit 15726: locale(_Impl*) throw(); 15726: 15726: static void 15726: _S_initialize(); 15726: 15726: static void 15726: _S_initialize_once() throw(); 15726: 15726: static category 15726: _S_normalize_category(category); 15726: 15726: void 15726: _M_coalesce(const locale& __base, const locale& __add, category __cat); 15726: 15726: 15726: static const id* const _S_twinned_facets[]; 15726: 15726: }; 15726: # 377 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: class locale::facet 15726: { 15726: private: 15726: friend class locale; 15726: friend class locale::_Impl; 15726: 15726: mutable _Atomic_word _M_refcount; 15726: 15726: 15726: static __c_locale _S_c_locale; 15726: 15726: 15726: static const char _S_c_name[2]; 15726: 15726: 15726: static __gthread_once_t _S_once; 15726: 15726: 15726: static void 15726: _S_initialize_once(); 15726: 15726: protected: 15726: # 408 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: explicit 15726: facet(size_t __refs = 0) throw() : _M_refcount(__refs ? 1 : 0) 15726: { } 15726: 15726: 15726: virtual 15726: ~facet(); 15726: 15726: static void 15726: _S_create_c_locale(__c_locale& __cloc, const char* __s, 15726: __c_locale __old = 0); 15726: 15726: static __c_locale 15726: _S_clone_c_locale(__c_locale& __cloc) throw(); 15726: 15726: static void 15726: _S_destroy_c_locale(__c_locale& __cloc); 15726: 15726: static __c_locale 15726: _S_lc_ctype_c_locale(__c_locale __cloc, const char* __s); 15726: 15726: 15726: 15726: static __c_locale 15726: _S_get_c_locale(); 15726: 15726: __attribute__ ((__const__)) static const char* 15726: _S_get_c_name() throw(); 15726: # 444 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: facet(const facet&) = delete; 15726: 15726: facet& 15726: operator=(const facet&) = delete; 15726: 15726: 15726: private: 15726: void 15726: _M_add_reference() const throw() 15726: { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); } 15726: 15726: void 15726: _M_remove_reference() const throw() 15726: { 15726: 15726: ; 15726: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1) 15726: { 15726: ; 15726: try 15726: { delete this; } 15726: catch(...) 15726: { } 15726: } 15726: } 15726: 15726: const facet* _M_sso_shim(const id*) const; 15726: const facet* _M_cow_shim(const id*) const; 15726: 15726: protected: 15726: class __shim; 15726: }; 15726: # 489 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: class locale::id 15726: { 15726: private: 15726: friend class locale; 15726: friend class locale::_Impl; 15726: 15726: template 15726: friend const _Facet& 15726: use_facet(const locale&); 15726: 15726: template 15726: friend bool 15726: has_facet(const locale&) throw(); 15726: 15726: template 15726: friend const _Facet* 15726: __try_use_facet(const locale&) noexcept; 15726: 15726: 15726: 15726: 15726: mutable size_t _M_index; 15726: 15726: 15726: static _Atomic_word _S_refcount; 15726: 15726: void 15726: operator=(const id&); 15726: 15726: id(const id&); 15726: 15726: public: 15726: 15726: 15726: 15726: id() { } 15726: 15726: size_t 15726: _M_id() const throw(); 15726: }; 15726: 15726: 15726: 15726: class locale::_Impl 15726: { 15726: public: 15726: 15726: friend class locale; 15726: friend class locale::facet; 15726: 15726: template 15726: friend bool 15726: has_facet(const locale&) throw(); 15726: 15726: template 15726: friend const _Facet& 15726: use_facet(const locale&); 15726: 15726: template 15726: friend const _Facet* 15726: __try_use_facet(const locale&) noexcept; 15726: 15726: template 15726: friend struct __use_cache; 15726: 15726: private: 15726: 15726: _Atomic_word _M_refcount; 15726: const facet** _M_facets; 15726: size_t _M_facets_size; 15726: const facet** _M_caches; 15726: char** _M_names; 15726: static const locale::id* const _S_id_ctype[]; 15726: static const locale::id* const _S_id_numeric[]; 15726: static const locale::id* const _S_id_collate[]; 15726: static const locale::id* const _S_id_time[]; 15726: static const locale::id* const _S_id_monetary[]; 15726: static const locale::id* const _S_id_messages[]; 15726: static const locale::id* const* const _S_facet_categories[]; 15726: 15726: void 15726: _M_add_reference() throw() 15726: { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); } 15726: 15726: void 15726: _M_remove_reference() throw() 15726: { 15726: 15726: ; 15726: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1) 15726: { 15726: ; 15726: try 15726: { delete this; } 15726: catch(...) 15726: { } 15726: } 15726: } 15726: 15726: _Impl(const _Impl&, size_t); 15726: _Impl(const char*, size_t); 15726: _Impl(size_t) throw(); 15726: 15726: ~_Impl() throw(); 15726: 15726: _Impl(const _Impl&); 15726: 15726: void 15726: operator=(const _Impl&); 15726: 15726: bool 15726: _M_check_same_name() 15726: { 15726: bool __ret = true; 15726: if (_M_names[1]) 15726: 15726: for (size_t __i = 0; __ret && __i < _S_categories_size - 1; ++__i) 15726: __ret = __builtin_strcmp(_M_names[__i], _M_names[__i + 1]) == 0; 15726: return __ret; 15726: } 15726: 15726: void 15726: _M_replace_categories(const _Impl*, category); 15726: 15726: void 15726: _M_replace_category(const _Impl*, const locale::id* const*); 15726: 15726: void 15726: _M_replace_facet(const _Impl*, const locale::id*); 15726: 15726: void 15726: _M_install_facet(const locale::id*, const facet*); 15726: 15726: template 15726: void 15726: _M_init_facet(_Facet* __facet) 15726: { _M_install_facet(&_Facet::id, __facet); } 15726: 15726: template 15726: void 15726: _M_init_facet_unchecked(_Facet* __facet) 15726: { 15726: __facet->_M_add_reference(); 15726: _M_facets[_Facet::id._M_id()] = __facet; 15726: } 15726: 15726: void 15726: _M_install_cache(const facet*, size_t); 15726: 15726: void _M_init_extra(facet**); 15726: void _M_init_extra(void*, void*, const char*, const char*); 15726: 15726: 15726: 15726: 15726: }; 15726: # 659 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: template 15726: class __cxx11:: collate : public locale::facet 15726: { 15726: public: 15726: 15726: 15726: 15726: typedef _CharT char_type; 15726: typedef basic_string<_CharT> string_type; 15726: 15726: 15726: protected: 15726: 15726: 15726: __c_locale _M_c_locale_collate; 15726: 15726: public: 15726: 15726: static locale::id id; 15726: # 686 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: explicit 15726: collate(size_t __refs = 0) 15726: : facet(__refs), _M_c_locale_collate(_S_get_c_locale()) 15726: { } 15726: # 700 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: explicit 15726: collate(__c_locale __cloc, size_t __refs = 0) 15726: : facet(__refs), _M_c_locale_collate(_S_clone_c_locale(__cloc)) 15726: { } 15726: # 717 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: int 15726: compare(const _CharT* __lo1, const _CharT* __hi1, 15726: const _CharT* __lo2, const _CharT* __hi2) const 15726: { return this->do_compare(__lo1, __hi1, __lo2, __hi2); } 15726: # 736 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: string_type 15726: transform(const _CharT* __lo, const _CharT* __hi) const 15726: { return this->do_transform(__lo, __hi); } 15726: # 750 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: long 15726: hash(const _CharT* __lo, const _CharT* __hi) const 15726: { return this->do_hash(__lo, __hi); } 15726: 15726: 15726: int 15726: _M_compare(const _CharT*, const _CharT*) const throw(); 15726: 15726: size_t 15726: _M_transform(_CharT*, const _CharT*, size_t) const throw(); 15726: 15726: protected: 15726: 15726: virtual 15726: ~collate() 15726: { _S_destroy_c_locale(_M_c_locale_collate); } 15726: # 779 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: virtual int 15726: do_compare(const _CharT* __lo1, const _CharT* __hi1, 15726: const _CharT* __lo2, const _CharT* __hi2) const; 15726: # 793 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: virtual string_type 15726: do_transform(const _CharT* __lo, const _CharT* __hi) const; 15726: # 806 "/usr/include/c++/13/bits/locale_classes.h" 3 15726: virtual long 15726: do_hash(const _CharT* __lo, const _CharT* __hi) const; 15726: }; 15726: 15726: template 15726: locale::id collate<_CharT>::id; 15726: 15726: 15726: template<> 15726: int 15726: collate::_M_compare(const char*, const char*) const throw(); 15726: 15726: template<> 15726: size_t 15726: collate::_M_transform(char*, const char*, size_t) const throw(); 15726: 15726: 15726: template<> 15726: int 15726: collate::_M_compare(const wchar_t*, const wchar_t*) const throw(); 15726: 15726: template<> 15726: size_t 15726: collate::_M_transform(wchar_t*, const wchar_t*, size_t) const throw(); 15726: 15726: 15726: 15726: template 15726: class __cxx11:: collate_byname : public collate<_CharT> 15726: { 15726: public: 15726: 15726: 15726: typedef _CharT char_type; 15726: typedef basic_string<_CharT> string_type; 15726: 15726: 15726: explicit 15726: collate_byname(const char* __s, size_t __refs = 0) 15726: : collate<_CharT>(__refs) 15726: { 15726: if (__builtin_strcmp(__s, "C") != 0 15726: && __builtin_strcmp(__s, "POSIX") != 0) 15726: { 15726: this->_S_destroy_c_locale(this->_M_c_locale_collate); 15726: this->_S_create_c_locale(this->_M_c_locale_collate, __s); 15726: } 15726: } 15726: 15726: 15726: explicit 15726: collate_byname(const string& __s, size_t __refs = 0) 15726: : collate_byname(__s.c_str(), __refs) { } 15726: 15726: 15726: protected: 15726: virtual 15726: ~collate_byname() { } 15726: }; 15726: 15726: 15726: } 15726: 15726: # 1 "/usr/include/c++/13/bits/locale_classes.tcc" 1 3 15726: # 37 "/usr/include/c++/13/bits/locale_classes.tcc" 3 15726: 15726: # 38 "/usr/include/c++/13/bits/locale_classes.tcc" 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: template 15726: locale:: 15726: locale(const locale& __other, _Facet* __f) 15726: { 15726: _M_impl = new _Impl(*__other._M_impl, 1); 15726: 15726: try 15726: { _M_impl->_M_install_facet(&_Facet::id, __f); } 15726: catch(...) 15726: { 15726: _M_impl->_M_remove_reference(); 15726: throw; 15726: } 15726: delete [] _M_impl->_M_names[0]; 15726: _M_impl->_M_names[0] = 0; 15726: } 15726: 15726: template 15726: locale 15726: locale:: 15726: combine(const locale& __other) const 15726: { 15726: _Impl* __tmp = new _Impl(*_M_impl, 1); 15726: try 15726: { 15726: __tmp->_M_replace_facet(__other._M_impl, &_Facet::id); 15726: } 15726: catch(...) 15726: { 15726: __tmp->_M_remove_reference(); 15726: throw; 15726: } 15726: return locale(__tmp); 15726: } 15726: 15726: template 15726: bool 15726: locale:: 15726: operator()(const basic_string<_CharT, _Traits, _Alloc>& __s1, 15726: const basic_string<_CharT, _Traits, _Alloc>& __s2) const 15726: { 15726: typedef std::collate<_CharT> __collate_type; 15726: const __collate_type& __collate = use_facet<__collate_type>(*this); 15726: return (__collate.compare(__s1.data(), __s1.data() + __s1.length(), 15726: __s2.data(), __s2.data() + __s2.length()) < 0); 15726: } 15726: 15726: template 15726: inline const _Facet* 15726: __try_use_facet(const locale& __loc) noexcept 15726: { 15726: const size_t __i = _Facet::id._M_id(); 15726: const locale::facet** __facets = __loc._M_impl->_M_facets; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: if constexpr (__is_same(_Facet, ctype)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, num_get)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, num_put)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, codecvt)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, collate)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, moneypunct)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, moneypunct)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, money_get)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, money_put)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, numpunct)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, time_get)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, time_put)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, messages)) return static_cast(__facets[__i]); 15726: 15726: 15726: if constexpr (__is_same(_Facet, ctype)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, num_get)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, num_put)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, codecvt)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, collate)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, moneypunct)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, moneypunct)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, money_get)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, money_put)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, numpunct)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, time_get)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, time_put)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, messages)) return static_cast(__facets[__i]); 15726: 15726: 15726: if constexpr (__is_same(_Facet, codecvt)) return static_cast(__facets[__i]); 15726: if constexpr (__is_same(_Facet, codecvt)) return static_cast(__facets[__i]); 15726: 15726: 15726: 15726: 15726: if (__i >= __loc._M_impl->_M_facets_size || !__facets[__i]) 15726: return 0; 15726: 15726: 15726: return dynamic_cast(__facets[__i]); 15726: 15726: 15726: 15726: } 15726: # 161 "/usr/include/c++/13/bits/locale_classes.tcc" 3 15726: template 15726: inline bool 15726: has_facet(const locale& __loc) throw() 15726: { 15726: 15726: static_assert(__is_base_of(locale::facet, _Facet), 15726: "template argument must be derived from locale::facet"); 15726: 15726: 15726: 15726: return std::__try_use_facet<_Facet>(__loc) != 0; 15726: } 15726: # 188 "/usr/include/c++/13/bits/locale_classes.tcc" 3 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdangling-reference" 15726: template 15726: inline const _Facet& 15726: use_facet(const locale& __loc) 15726: { 15726: 15726: static_assert(__is_base_of(locale::facet, _Facet), 15726: "template argument must be derived from locale::facet"); 15726: 15726: 15726: 15726: if (const _Facet* __f = std::__try_use_facet<_Facet>(__loc)) 15726: return *__f; 15726: __throw_bad_cast(); 15726: } 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: 15726: template 15726: int 15726: collate<_CharT>::_M_compare(const _CharT*, const _CharT*) const throw () 15726: { return 0; } 15726: 15726: 15726: template 15726: size_t 15726: collate<_CharT>::_M_transform(_CharT*, const _CharT*, size_t) const throw () 15726: { return 0; } 15726: 15726: template 15726: int 15726: collate<_CharT>:: 15726: do_compare(const _CharT* __lo1, const _CharT* __hi1, 15726: const _CharT* __lo2, const _CharT* __hi2) const 15726: { 15726: 15726: 15726: const string_type __one(__lo1, __hi1); 15726: const string_type __two(__lo2, __hi2); 15726: 15726: const _CharT* __p = __one.c_str(); 15726: const _CharT* __pend = __one.data() + __one.length(); 15726: const _CharT* __q = __two.c_str(); 15726: const _CharT* __qend = __two.data() + __two.length(); 15726: 15726: 15726: 15726: 15726: for (;;) 15726: { 15726: const int __res = _M_compare(__p, __q); 15726: if (__res) 15726: return __res; 15726: 15726: __p += char_traits<_CharT>::length(__p); 15726: __q += char_traits<_CharT>::length(__q); 15726: if (__p == __pend && __q == __qend) 15726: return 0; 15726: else if (__p == __pend) 15726: return -1; 15726: else if (__q == __qend) 15726: return 1; 15726: 15726: __p++; 15726: __q++; 15726: } 15726: } 15726: 15726: template 15726: typename collate<_CharT>::string_type 15726: collate<_CharT>:: 15726: do_transform(const _CharT* __lo, const _CharT* __hi) const 15726: { 15726: string_type __ret; 15726: 15726: 15726: const string_type __str(__lo, __hi); 15726: 15726: const _CharT* __p = __str.c_str(); 15726: const _CharT* __pend = __str.data() + __str.length(); 15726: 15726: size_t __len = (__hi - __lo) * 2; 15726: 15726: _CharT* __c = new _CharT[__len]; 15726: 15726: try 15726: { 15726: 15726: 15726: 15726: for (;;) 15726: { 15726: 15726: size_t __res = _M_transform(__c, __p, __len); 15726: 15726: 15726: if (__res >= __len) 15726: { 15726: __len = __res + 1; 15726: delete [] __c, __c = 0; 15726: __c = new _CharT[__len]; 15726: __res = _M_transform(__c, __p, __len); 15726: } 15726: 15726: __ret.append(__c, __res); 15726: __p += char_traits<_CharT>::length(__p); 15726: if (__p == __pend) 15726: break; 15726: 15726: __p++; 15726: __ret.push_back(_CharT()); 15726: } 15726: } 15726: catch(...) 15726: { 15726: delete [] __c; 15726: throw; 15726: } 15726: 15726: delete [] __c; 15726: 15726: return __ret; 15726: } 15726: 15726: template 15726: long 15726: collate<_CharT>:: 15726: do_hash(const _CharT* __lo, const _CharT* __hi) const 15726: { 15726: unsigned long __val = 0; 15726: for (; __lo < __hi; ++__lo) 15726: __val = 15726: *__lo + ((__val << 7) 15726: | (__val >> (__gnu_cxx::__numeric_traits:: 15726: __digits - 7))); 15726: return static_cast(__val); 15726: } 15726: 15726: 15726: 15726: 15726: extern template class collate; 15726: extern template class collate_byname; 15726: 15726: extern template 15726: const collate* 15726: __try_use_facet >(const locale&) noexcept; 15726: 15726: extern template 15726: const collate& 15726: use_facet >(const locale&); 15726: 15726: extern template 15726: bool 15726: has_facet >(const locale&); 15726: 15726: 15726: extern template class collate; 15726: extern template class collate_byname; 15726: 15726: extern template 15726: const collate* 15726: __try_use_facet >(const locale&) noexcept; 15726: 15726: extern template 15726: const collate& 15726: use_facet >(const locale&); 15726: 15726: extern template 15726: bool 15726: has_facet >(const locale&); 15726: 15726: 15726: 15726: 15726: } 15726: # 870 "/usr/include/c++/13/bits/locale_classes.h" 2 3 15726: # 42 "/usr/include/c++/13/bits/ios_base.h" 2 3 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/system_error" 1 3 15726: # 32 "/usr/include/c++/13/system_error" 3 15726: 15726: # 33 "/usr/include/c++/13/system_error" 3 15726: # 43 "/usr/include/c++/13/system_error" 3 15726: # 1 "/usr/include/c++/13/stdexcept" 1 3 15726: # 36 "/usr/include/c++/13/stdexcept" 3 15726: 15726: # 37 "/usr/include/c++/13/stdexcept" 3 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: struct __cow_string 15726: { 15726: union { 15726: const char* _M_p; 15726: char _M_bytes[sizeof(const char*)]; 15726: }; 15726: 15726: __cow_string(); 15726: __cow_string(const std::string&); 15726: __cow_string(const char*, size_t); 15726: __cow_string(const __cow_string&) noexcept; 15726: __cow_string& operator=(const __cow_string&) noexcept; 15726: ~__cow_string(); 15726: 15726: __cow_string(__cow_string&&) noexcept; 15726: __cow_string& operator=(__cow_string&&) noexcept; 15726: 15726: }; 15726: 15726: typedef basic_string __sso_string; 15726: # 113 "/usr/include/c++/13/stdexcept" 3 15726: class logic_error : public exception 15726: { 15726: __cow_string _M_msg; 15726: 15726: public: 15726: 15726: explicit 15726: logic_error(const string& __arg) ; 15726: 15726: 15726: explicit 15726: logic_error(const char*) ; 15726: 15726: logic_error(logic_error&&) noexcept; 15726: logic_error& operator=(logic_error&&) noexcept; 15726: 15726: 15726: 15726: logic_error(const logic_error&) noexcept; 15726: logic_error& operator=(const logic_error&) noexcept; 15726: 15726: 15726: 15726: 15726: 15726: virtual ~logic_error() noexcept; 15726: 15726: 15726: 15726: virtual const char* 15726: what() const noexcept; 15726: 15726: 15726: 15726: 15726: 15726: }; 15726: 15726: 15726: 15726: class domain_error : public logic_error 15726: { 15726: public: 15726: explicit domain_error(const string& __arg) ; 15726: 15726: explicit domain_error(const char*) ; 15726: domain_error(const domain_error&) = default; 15726: domain_error& operator=(const domain_error&) = default; 15726: domain_error(domain_error&&) = default; 15726: domain_error& operator=(domain_error&&) = default; 15726: 15726: virtual ~domain_error() noexcept; 15726: }; 15726: 15726: 15726: class invalid_argument : public logic_error 15726: { 15726: public: 15726: explicit invalid_argument(const string& __arg) ; 15726: 15726: explicit invalid_argument(const char*) ; 15726: invalid_argument(const invalid_argument&) = default; 15726: invalid_argument& operator=(const invalid_argument&) = default; 15726: invalid_argument(invalid_argument&&) = default; 15726: invalid_argument& operator=(invalid_argument&&) = default; 15726: 15726: virtual ~invalid_argument() noexcept; 15726: }; 15726: 15726: 15726: 15726: class length_error : public logic_error 15726: { 15726: public: 15726: explicit length_error(const string& __arg) ; 15726: 15726: explicit length_error(const char*) ; 15726: length_error(const length_error&) = default; 15726: length_error& operator=(const length_error&) = default; 15726: length_error(length_error&&) = default; 15726: length_error& operator=(length_error&&) = default; 15726: 15726: virtual ~length_error() noexcept; 15726: }; 15726: 15726: 15726: 15726: class out_of_range : public logic_error 15726: { 15726: public: 15726: explicit out_of_range(const string& __arg) ; 15726: 15726: explicit out_of_range(const char*) ; 15726: out_of_range(const out_of_range&) = default; 15726: out_of_range& operator=(const out_of_range&) = default; 15726: out_of_range(out_of_range&&) = default; 15726: out_of_range& operator=(out_of_range&&) = default; 15726: 15726: virtual ~out_of_range() noexcept; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: class runtime_error : public exception 15726: { 15726: __cow_string _M_msg; 15726: 15726: public: 15726: 15726: explicit 15726: runtime_error(const string& __arg) ; 15726: 15726: 15726: explicit 15726: runtime_error(const char*) ; 15726: 15726: runtime_error(runtime_error&&) noexcept; 15726: runtime_error& operator=(runtime_error&&) noexcept; 15726: 15726: 15726: 15726: runtime_error(const runtime_error&) noexcept; 15726: runtime_error& operator=(const runtime_error&) noexcept; 15726: 15726: 15726: 15726: 15726: 15726: virtual ~runtime_error() noexcept; 15726: 15726: 15726: 15726: virtual const char* 15726: what() const noexcept; 15726: 15726: 15726: 15726: 15726: 15726: }; 15726: 15726: 15726: class range_error : public runtime_error 15726: { 15726: public: 15726: explicit range_error(const string& __arg) ; 15726: 15726: explicit range_error(const char*) ; 15726: range_error(const range_error&) = default; 15726: range_error& operator=(const range_error&) = default; 15726: range_error(range_error&&) = default; 15726: range_error& operator=(range_error&&) = default; 15726: 15726: virtual ~range_error() noexcept; 15726: }; 15726: 15726: 15726: class overflow_error : public runtime_error 15726: { 15726: public: 15726: explicit overflow_error(const string& __arg) ; 15726: 15726: explicit overflow_error(const char*) ; 15726: overflow_error(const overflow_error&) = default; 15726: overflow_error& operator=(const overflow_error&) = default; 15726: overflow_error(overflow_error&&) = default; 15726: overflow_error& operator=(overflow_error&&) = default; 15726: 15726: virtual ~overflow_error() noexcept; 15726: }; 15726: 15726: 15726: class underflow_error : public runtime_error 15726: { 15726: public: 15726: explicit underflow_error(const string& __arg) ; 15726: 15726: explicit underflow_error(const char*) ; 15726: underflow_error(const underflow_error&) = default; 15726: underflow_error& operator=(const underflow_error&) = default; 15726: underflow_error(underflow_error&&) = default; 15726: underflow_error& operator=(underflow_error&&) = default; 15726: 15726: virtual ~underflow_error() noexcept; 15726: }; 15726: 15726: 15726: 15726: 15726: } 15726: # 44 "/usr/include/c++/13/system_error" 2 3 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: class error_code; 15726: class error_condition; 15726: class system_error; 15726: 15726: 15726: template 15726: struct is_error_code_enum : public false_type { }; 15726: 15726: 15726: template 15726: struct is_error_condition_enum : public false_type { }; 15726: 15726: template<> 15726: struct is_error_condition_enum 15726: : public true_type { }; 15726: 15726: 15726: template 15726: inline constexpr bool is_error_code_enum_v = 15726: is_error_code_enum<_Tp>::value; 15726: template 15726: inline constexpr bool is_error_condition_enum_v = 15726: is_error_condition_enum<_Tp>::value; 15726: 15726: 15726: 15726: inline namespace _V2 { 15726: # 106 "/usr/include/c++/13/system_error" 3 15726: class error_category 15726: { 15726: public: 15726: constexpr error_category() noexcept = default; 15726: 15726: virtual ~error_category(); 15726: 15726: error_category(const error_category&) = delete; 15726: error_category& operator=(const error_category&) = delete; 15726: 15726: 15726: virtual const char* 15726: name() const noexcept = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: private: 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: virtual __cow_string 15726: _M_message(int) const; 15726: 15726: public: 15726: 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: virtual string 15726: message(int) const = 0; 15726: # 144 "/usr/include/c++/13/system_error" 3 15726: public: 15726: 15726: virtual error_condition 15726: default_error_condition(int __i) const noexcept; 15726: 15726: 15726: virtual bool 15726: equivalent(int __i, const error_condition& __cond) const noexcept; 15726: 15726: 15726: virtual bool 15726: equivalent(const error_code& __code, int __i) const noexcept; 15726: 15726: 15726: [[__nodiscard__]] 15726: bool 15726: operator==(const error_category& __other) const noexcept 15726: { return this == &__other; } 15726: # 170 "/usr/include/c++/13/system_error" 3 15726: bool 15726: operator<(const error_category& __other) const noexcept 15726: { return less()(this, &__other); } 15726: 15726: bool 15726: operator!=(const error_category& __other) const noexcept 15726: { return this != &__other; } 15726: 15726: }; 15726: 15726: 15726: 15726: 15726: [[__nodiscard__, __gnu__::__const__]] 15726: const error_category& 15726: generic_category() noexcept; 15726: 15726: 15726: [[__nodiscard__, __gnu__::__const__]] 15726: const error_category& 15726: system_category() noexcept; 15726: 15726: 15726: 15726: } 15726: 15726: 15726: 15726: 15726: 15726: namespace __adl_only 15726: { 15726: void make_error_code() = delete; 15726: void make_error_condition() = delete; 15726: } 15726: # 223 "/usr/include/c++/13/system_error" 3 15726: class error_code 15726: { 15726: template 15726: using _Check 15726: = __enable_if_t::value>; 15726: 15726: public: 15726: error_code() noexcept 15726: : _M_value(0), _M_cat(&system_category()) { } 15726: 15726: error_code(int __v, const error_category& __cat) noexcept 15726: : _M_value(__v), _M_cat(&__cat) { } 15726: 15726: 15726: template> 15726: error_code(_ErrorCodeEnum __e) noexcept 15726: { 15726: using __adl_only::make_error_code; 15726: *this = make_error_code(__e); 15726: } 15726: 15726: error_code(const error_code&) = default; 15726: error_code& operator=(const error_code&) = default; 15726: 15726: void 15726: assign(int __v, const error_category& __cat) noexcept 15726: { 15726: _M_value = __v; 15726: _M_cat = &__cat; 15726: } 15726: 15726: void 15726: clear() noexcept 15726: { assign(0, system_category()); } 15726: 15726: 15726: [[__nodiscard__]] 15726: int 15726: value() const noexcept { return _M_value; } 15726: 15726: 15726: [[__nodiscard__]] 15726: const error_category& 15726: category() const noexcept { return *_M_cat; } 15726: 15726: 15726: error_condition 15726: default_error_condition() const noexcept; 15726: 15726: 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: string 15726: message() const 15726: { return category().message(value()); } 15726: 15726: 15726: [[__nodiscard__]] 15726: explicit operator bool() const noexcept 15726: { return _M_value != 0; } 15726: 15726: 15726: private: 15726: int _M_value; 15726: const error_category* _M_cat; 15726: }; 15726: # 300 "/usr/include/c++/13/system_error" 3 15726: [[__nodiscard__]] 15726: inline error_code 15726: make_error_code(errc __e) noexcept 15726: { return error_code(static_cast(__e), generic_category()); } 15726: # 323 "/usr/include/c++/13/system_error" 3 15726: inline bool 15726: operator<(const error_code& __lhs, const error_code& __rhs) noexcept 15726: { 15726: return (__lhs.category() < __rhs.category() 15726: || (__lhs.category() == __rhs.category() 15726: && __lhs.value() < __rhs.value())); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: basic_ostream<_CharT, _Traits>& 15726: operator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __e) 15726: { return (__os << __e.category().name() << ':' << __e.value()); } 15726: # 354 "/usr/include/c++/13/system_error" 3 15726: class error_condition 15726: { 15726: template 15726: using _Check 15726: = __enable_if_t::value>; 15726: 15726: public: 15726: 15726: error_condition() noexcept 15726: : _M_value(0), _M_cat(&generic_category()) { } 15726: 15726: 15726: error_condition(int __v, const error_category& __cat) noexcept 15726: : _M_value(__v), _M_cat(&__cat) { } 15726: 15726: 15726: template> 15726: error_condition(_ErrorConditionEnum __e) noexcept 15726: { 15726: using __adl_only::make_error_condition; 15726: *this = make_error_condition(__e); 15726: } 15726: 15726: error_condition(const error_condition&) = default; 15726: error_condition& operator=(const error_condition&) = default; 15726: 15726: 15726: void 15726: assign(int __v, const error_category& __cat) noexcept 15726: { 15726: _M_value = __v; 15726: _M_cat = &__cat; 15726: } 15726: 15726: 15726: void 15726: clear() noexcept 15726: { assign(0, generic_category()); } 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: int 15726: value() const noexcept { return _M_value; } 15726: 15726: 15726: [[__nodiscard__]] 15726: const error_category& 15726: category() const noexcept { return *_M_cat; } 15726: 15726: 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: string 15726: message() const 15726: { return category().message(value()); } 15726: 15726: 15726: [[__nodiscard__]] 15726: explicit operator bool() const noexcept 15726: { return _M_value != 0; } 15726: 15726: 15726: private: 15726: int _M_value; 15726: const error_category* _M_cat; 15726: }; 15726: # 433 "/usr/include/c++/13/system_error" 3 15726: [[__nodiscard__]] 15726: inline error_condition 15726: make_error_condition(errc __e) noexcept 15726: { return error_condition(static_cast(__e), generic_category()); } 15726: # 447 "/usr/include/c++/13/system_error" 3 15726: [[__nodiscard__]] 15726: inline bool 15726: operator==(const error_code& __lhs, const error_code& __rhs) noexcept 15726: { 15726: return __lhs.category() == __rhs.category() 15726: && __lhs.value() == __rhs.value(); 15726: } 15726: # 463 "/usr/include/c++/13/system_error" 3 15726: [[__nodiscard__]] 15726: inline bool 15726: operator==(const error_code& __lhs, const error_condition& __rhs) noexcept 15726: { 15726: return __lhs.category().equivalent(__lhs.value(), __rhs) 15726: || __rhs.category().equivalent(__lhs, __rhs.value()); 15726: } 15726: # 478 "/usr/include/c++/13/system_error" 3 15726: [[__nodiscard__]] 15726: inline bool 15726: operator==(const error_condition& __lhs, 15726: const error_condition& __rhs) noexcept 15726: { 15726: return __lhs.category() == __rhs.category() 15726: && __lhs.value() == __rhs.value(); 15726: } 15726: # 506 "/usr/include/c++/13/system_error" 3 15726: inline bool 15726: operator<(const error_condition& __lhs, 15726: const error_condition& __rhs) noexcept 15726: { 15726: return (__lhs.category() < __rhs.category() 15726: || (__lhs.category() == __rhs.category() 15726: && __lhs.value() < __rhs.value())); 15726: } 15726: 15726: 15726: inline bool 15726: operator==(const error_condition& __lhs, const error_code& __rhs) noexcept 15726: { 15726: return (__rhs.category().equivalent(__rhs.value(), __lhs) 15726: || __lhs.category().equivalent(__rhs, __lhs.value())); 15726: } 15726: 15726: 15726: inline bool 15726: operator!=(const error_code& __lhs, const error_code& __rhs) noexcept 15726: { return !(__lhs == __rhs); } 15726: 15726: 15726: inline bool 15726: operator!=(const error_code& __lhs, const error_condition& __rhs) noexcept 15726: { return !(__lhs == __rhs); } 15726: 15726: 15726: inline bool 15726: operator!=(const error_condition& __lhs, const error_code& __rhs) noexcept 15726: { return !(__lhs == __rhs); } 15726: 15726: 15726: inline bool 15726: operator!=(const error_condition& __lhs, 15726: const error_condition& __rhs) noexcept 15726: { return !(__lhs == __rhs); } 15726: # 556 "/usr/include/c++/13/system_error" 3 15726: class system_error : public std::runtime_error 15726: { 15726: private: 15726: error_code _M_code; 15726: 15726: public: 15726: system_error(error_code __ec = error_code()) 15726: : runtime_error(__ec.message()), _M_code(__ec) { } 15726: 15726: system_error(error_code __ec, const string& __what) 15726: : runtime_error(__what + (": " + __ec.message())), _M_code(__ec) { } 15726: 15726: system_error(error_code __ec, const char* __what) 15726: : runtime_error(__what + (": " + __ec.message())), _M_code(__ec) { } 15726: 15726: system_error(int __v, const error_category& __ecat, const char* __what) 15726: : system_error(error_code(__v, __ecat), __what) { } 15726: 15726: system_error(int __v, const error_category& __ecat) 15726: : runtime_error(error_code(__v, __ecat).message()), 15726: _M_code(__v, __ecat) { } 15726: 15726: system_error(int __v, const error_category& __ecat, const string& __what) 15726: : runtime_error(__what + (": " + error_code(__v, __ecat).message())), 15726: _M_code(__v, __ecat) { } 15726: 15726: 15726: system_error (const system_error &) = default; 15726: system_error &operator= (const system_error &) = default; 15726: 15726: 15726: virtual ~system_error() noexcept; 15726: 15726: const error_code& 15726: code() const noexcept { return _M_code; } 15726: }; 15726: 15726: 15726: } 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: template<> 15726: struct hash 15726: : public __hash_base 15726: { 15726: size_t 15726: operator()(const error_code& __e) const noexcept 15726: { 15726: const size_t __tmp = std::_Hash_impl::hash(__e.value()); 15726: return std::_Hash_impl::__hash_combine(&__e.category(), __tmp); 15726: } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template<> 15726: struct hash 15726: : public __hash_base 15726: { 15726: size_t 15726: operator()(const error_condition& __e) const noexcept 15726: { 15726: const size_t __tmp = std::_Hash_impl::hash(__e.value()); 15726: return std::_Hash_impl::__hash_combine(&__e.category(), __tmp); 15726: } 15726: }; 15726: 15726: 15726: 15726: } 15726: # 47 "/usr/include/c++/13/bits/ios_base.h" 2 3 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: enum _Ios_Fmtflags 15726: { 15726: _S_boolalpha = 1L << 0, 15726: _S_dec = 1L << 1, 15726: _S_fixed = 1L << 2, 15726: _S_hex = 1L << 3, 15726: _S_internal = 1L << 4, 15726: _S_left = 1L << 5, 15726: _S_oct = 1L << 6, 15726: _S_right = 1L << 7, 15726: _S_scientific = 1L << 8, 15726: _S_showbase = 1L << 9, 15726: _S_showpoint = 1L << 10, 15726: _S_showpos = 1L << 11, 15726: _S_skipws = 1L << 12, 15726: _S_unitbuf = 1L << 13, 15726: _S_uppercase = 1L << 14, 15726: _S_adjustfield = _S_left | _S_right | _S_internal, 15726: _S_basefield = _S_dec | _S_oct | _S_hex, 15726: _S_floatfield = _S_scientific | _S_fixed, 15726: _S_ios_fmtflags_end = 1L << 16, 15726: _S_ios_fmtflags_max = 0x7fffffff, 15726: _S_ios_fmtflags_min = ~0x7fffffff 15726: }; 15726: 15726: inline constexpr _Ios_Fmtflags 15726: operator&(_Ios_Fmtflags __a, _Ios_Fmtflags __b) 15726: { return _Ios_Fmtflags(static_cast(__a) & static_cast(__b)); } 15726: 15726: inline constexpr _Ios_Fmtflags 15726: operator|(_Ios_Fmtflags __a, _Ios_Fmtflags __b) 15726: { return _Ios_Fmtflags(static_cast(__a) | static_cast(__b)); } 15726: 15726: inline constexpr _Ios_Fmtflags 15726: operator^(_Ios_Fmtflags __a, _Ios_Fmtflags __b) 15726: { return _Ios_Fmtflags(static_cast(__a) ^ static_cast(__b)); } 15726: 15726: inline constexpr _Ios_Fmtflags 15726: operator~(_Ios_Fmtflags __a) 15726: { return _Ios_Fmtflags(~static_cast(__a)); } 15726: 15726: inline const _Ios_Fmtflags& 15726: operator|=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) 15726: { return __a = __a | __b; } 15726: 15726: inline const _Ios_Fmtflags& 15726: operator&=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) 15726: { return __a = __a & __b; } 15726: 15726: inline const _Ios_Fmtflags& 15726: operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) 15726: { return __a = __a ^ __b; } 15726: 15726: 15726: enum _Ios_Openmode 15726: { 15726: _S_app = 1L << 0, 15726: _S_ate = 1L << 1, 15726: _S_bin = 1L << 2, 15726: _S_in = 1L << 3, 15726: _S_out = 1L << 4, 15726: _S_trunc = 1L << 5, 15726: _S_noreplace = 1L << 6, 15726: _S_ios_openmode_end = 1L << 16, 15726: _S_ios_openmode_max = 0x7fffffff, 15726: _S_ios_openmode_min = ~0x7fffffff 15726: }; 15726: 15726: inline constexpr _Ios_Openmode 15726: operator&(_Ios_Openmode __a, _Ios_Openmode __b) 15726: { return _Ios_Openmode(static_cast(__a) & static_cast(__b)); } 15726: 15726: inline constexpr _Ios_Openmode 15726: operator|(_Ios_Openmode __a, _Ios_Openmode __b) 15726: { return _Ios_Openmode(static_cast(__a) | static_cast(__b)); } 15726: 15726: inline constexpr _Ios_Openmode 15726: operator^(_Ios_Openmode __a, _Ios_Openmode __b) 15726: { return _Ios_Openmode(static_cast(__a) ^ static_cast(__b)); } 15726: 15726: inline constexpr _Ios_Openmode 15726: operator~(_Ios_Openmode __a) 15726: { return _Ios_Openmode(~static_cast(__a)); } 15726: 15726: inline const _Ios_Openmode& 15726: operator|=(_Ios_Openmode& __a, _Ios_Openmode __b) 15726: { return __a = __a | __b; } 15726: 15726: inline const _Ios_Openmode& 15726: operator&=(_Ios_Openmode& __a, _Ios_Openmode __b) 15726: { return __a = __a & __b; } 15726: 15726: inline const _Ios_Openmode& 15726: operator^=(_Ios_Openmode& __a, _Ios_Openmode __b) 15726: { return __a = __a ^ __b; } 15726: 15726: 15726: enum _Ios_Iostate 15726: { 15726: _S_goodbit = 0, 15726: _S_badbit = 1L << 0, 15726: _S_eofbit = 1L << 1, 15726: _S_failbit = 1L << 2, 15726: _S_ios_iostate_end = 1L << 16, 15726: _S_ios_iostate_max = 0x7fffffff, 15726: _S_ios_iostate_min = ~0x7fffffff 15726: }; 15726: 15726: inline constexpr _Ios_Iostate 15726: operator&(_Ios_Iostate __a, _Ios_Iostate __b) 15726: { return _Ios_Iostate(static_cast(__a) & static_cast(__b)); } 15726: 15726: inline constexpr _Ios_Iostate 15726: operator|(_Ios_Iostate __a, _Ios_Iostate __b) 15726: { return _Ios_Iostate(static_cast(__a) | static_cast(__b)); } 15726: 15726: inline constexpr _Ios_Iostate 15726: operator^(_Ios_Iostate __a, _Ios_Iostate __b) 15726: { return _Ios_Iostate(static_cast(__a) ^ static_cast(__b)); } 15726: 15726: inline constexpr _Ios_Iostate 15726: operator~(_Ios_Iostate __a) 15726: { return _Ios_Iostate(~static_cast(__a)); } 15726: 15726: inline const _Ios_Iostate& 15726: operator|=(_Ios_Iostate& __a, _Ios_Iostate __b) 15726: { return __a = __a | __b; } 15726: 15726: inline const _Ios_Iostate& 15726: operator&=(_Ios_Iostate& __a, _Ios_Iostate __b) 15726: { return __a = __a & __b; } 15726: 15726: inline const _Ios_Iostate& 15726: operator^=(_Ios_Iostate& __a, _Ios_Iostate __b) 15726: { return __a = __a ^ __b; } 15726: 15726: 15726: enum _Ios_Seekdir 15726: { 15726: _S_beg = 0, 15726: _S_cur = 1, 15726: _S_end = 2, 15726: _S_ios_seekdir_end = 1L << 16 15726: }; 15726: 15726: 15726: 15726: enum class io_errc { stream = 1 }; 15726: 15726: template <> struct is_error_code_enum : public true_type { }; 15726: 15726: [[__nodiscard__, __gnu__::__const__]] 15726: const error_category& 15726: iostream_category() noexcept; 15726: 15726: [[__nodiscard__]] 15726: inline error_code 15726: make_error_code(io_errc __e) noexcept 15726: { return error_code(static_cast(__e), iostream_category()); } 15726: 15726: [[__nodiscard__]] 15726: inline error_condition 15726: make_error_condition(io_errc __e) noexcept 15726: { return error_condition(static_cast(__e), iostream_category()); } 15726: # 233 "/usr/include/c++/13/bits/ios_base.h" 3 15726: class ios_base 15726: { 15726: # 251 "/usr/include/c++/13/bits/ios_base.h" 3 15726: public: 15726: # 260 "/usr/include/c++/13/bits/ios_base.h" 3 15726: class __attribute ((__abi_tag__ ("cxx11"))) failure : public system_error 15726: { 15726: public: 15726: explicit 15726: failure(const string& __str); 15726: 15726: 15726: explicit 15726: failure(const string&, const error_code&); 15726: 15726: explicit 15726: failure(const char*, const error_code& = io_errc::stream); 15726: 15726: 15726: virtual 15726: ~failure() throw(); 15726: 15726: virtual const char* 15726: what() const throw(); 15726: }; 15726: # 346 "/usr/include/c++/13/bits/ios_base.h" 3 15726: typedef _Ios_Fmtflags fmtflags; 15726: 15726: 15726: static const fmtflags boolalpha = _S_boolalpha; 15726: 15726: 15726: static const fmtflags dec = _S_dec; 15726: 15726: 15726: static const fmtflags fixed = _S_fixed; 15726: 15726: 15726: static const fmtflags hex = _S_hex; 15726: 15726: 15726: 15726: 15726: static const fmtflags internal = _S_internal; 15726: 15726: 15726: 15726: static const fmtflags left = _S_left; 15726: 15726: 15726: static const fmtflags oct = _S_oct; 15726: 15726: 15726: 15726: static const fmtflags right = _S_right; 15726: 15726: 15726: static const fmtflags scientific = _S_scientific; 15726: 15726: 15726: 15726: static const fmtflags showbase = _S_showbase; 15726: 15726: 15726: 15726: static const fmtflags showpoint = _S_showpoint; 15726: 15726: 15726: static const fmtflags showpos = _S_showpos; 15726: 15726: 15726: static const fmtflags skipws = _S_skipws; 15726: 15726: 15726: static const fmtflags unitbuf = _S_unitbuf; 15726: 15726: 15726: 15726: static const fmtflags uppercase = _S_uppercase; 15726: 15726: 15726: static const fmtflags adjustfield = _S_adjustfield; 15726: 15726: 15726: static const fmtflags basefield = _S_basefield; 15726: 15726: 15726: static const fmtflags floatfield = _S_floatfield; 15726: # 421 "/usr/include/c++/13/bits/ios_base.h" 3 15726: typedef _Ios_Iostate iostate; 15726: 15726: 15726: 15726: static const iostate badbit = _S_badbit; 15726: 15726: 15726: static const iostate eofbit = _S_eofbit; 15726: 15726: 15726: 15726: 15726: static const iostate failbit = _S_failbit; 15726: 15726: 15726: static const iostate goodbit = _S_goodbit; 15726: # 452 "/usr/include/c++/13/bits/ios_base.h" 3 15726: typedef _Ios_Openmode openmode; 15726: 15726: 15726: static const openmode app = _S_app; 15726: 15726: 15726: static const openmode ate = _S_ate; 15726: 15726: 15726: 15726: 15726: static const openmode binary = _S_bin; 15726: 15726: 15726: static const openmode in = _S_in; 15726: 15726: 15726: static const openmode out = _S_out; 15726: 15726: 15726: static const openmode trunc = _S_trunc; 15726: 15726: static const openmode __noreplace = _S_noreplace; 15726: # 492 "/usr/include/c++/13/bits/ios_base.h" 3 15726: typedef _Ios_Seekdir seekdir; 15726: 15726: 15726: static const seekdir beg = _S_beg; 15726: 15726: 15726: static const seekdir cur = _S_cur; 15726: 15726: 15726: static const seekdir end = _S_end; 15726: # 525 "/usr/include/c++/13/bits/ios_base.h" 3 15726: enum event 15726: { 15726: erase_event, 15726: imbue_event, 15726: copyfmt_event 15726: }; 15726: # 542 "/usr/include/c++/13/bits/ios_base.h" 3 15726: typedef void (*event_callback) (event __e, ios_base& __b, int __i); 15726: # 554 "/usr/include/c++/13/bits/ios_base.h" 3 15726: void 15726: register_callback(event_callback __fn, int __index); 15726: 15726: protected: 15726: streamsize _M_precision; 15726: streamsize _M_width; 15726: fmtflags _M_flags; 15726: iostate _M_exception; 15726: iostate _M_streambuf_state; 15726: 15726: 15726: 15726: struct _Callback_list 15726: { 15726: 15726: _Callback_list* _M_next; 15726: ios_base::event_callback _M_fn; 15726: int _M_index; 15726: _Atomic_word _M_refcount; 15726: 15726: _Callback_list(ios_base::event_callback __fn, int __index, 15726: _Callback_list* __cb) 15726: : _M_next(__cb), _M_fn(__fn), _M_index(__index), _M_refcount(0) { } 15726: 15726: void 15726: _M_add_reference() { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); } 15726: 15726: 15726: int 15726: _M_remove_reference() 15726: { 15726: 15726: ; 15726: int __res = __gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1); 15726: if (__res == 0) 15726: { 15726: ; 15726: } 15726: return __res; 15726: } 15726: }; 15726: 15726: _Callback_list* _M_callbacks; 15726: 15726: void 15726: _M_call_callbacks(event __ev) throw(); 15726: 15726: void 15726: _M_dispose_callbacks(void) throw(); 15726: 15726: 15726: struct _Words 15726: { 15726: void* _M_pword; 15726: long _M_iword; 15726: _Words() : _M_pword(0), _M_iword(0) { } 15726: }; 15726: 15726: 15726: _Words _M_word_zero; 15726: 15726: 15726: 15726: enum { _S_local_word_size = 8 }; 15726: _Words _M_local_word[_S_local_word_size]; 15726: 15726: 15726: int _M_word_size; 15726: _Words* _M_word; 15726: 15726: _Words& 15726: _M_grow_words(int __index, bool __iword); 15726: 15726: 15726: locale _M_ios_locale; 15726: 15726: void 15726: _M_init() throw(); 15726: 15726: public: 15726: 15726: 15726: 15726: 15726: 15726: class Init 15726: { 15726: friend class ios_base; 15726: public: 15726: Init(); 15726: ~Init(); 15726: 15726: 15726: Init(const Init&) = default; 15726: Init& operator=(const Init&) = default; 15726: 15726: 15726: private: 15726: static _Atomic_word _S_refcount; 15726: static bool _S_synced_with_stdio; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: fmtflags 15726: flags() const 15726: { return _M_flags; } 15726: # 672 "/usr/include/c++/13/bits/ios_base.h" 3 15726: fmtflags 15726: flags(fmtflags __fmtfl) 15726: { 15726: fmtflags __old = _M_flags; 15726: _M_flags = __fmtfl; 15726: return __old; 15726: } 15726: # 688 "/usr/include/c++/13/bits/ios_base.h" 3 15726: fmtflags 15726: setf(fmtflags __fmtfl) 15726: { 15726: fmtflags __old = _M_flags; 15726: _M_flags |= __fmtfl; 15726: return __old; 15726: } 15726: # 705 "/usr/include/c++/13/bits/ios_base.h" 3 15726: fmtflags 15726: setf(fmtflags __fmtfl, fmtflags __mask) 15726: { 15726: fmtflags __old = _M_flags; 15726: _M_flags &= ~__mask; 15726: _M_flags |= (__fmtfl & __mask); 15726: return __old; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: unsetf(fmtflags __mask) 15726: { _M_flags &= ~__mask; } 15726: # 731 "/usr/include/c++/13/bits/ios_base.h" 3 15726: streamsize 15726: precision() const 15726: { return _M_precision; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: streamsize 15726: precision(streamsize __prec) 15726: { 15726: streamsize __old = _M_precision; 15726: _M_precision = __prec; 15726: return __old; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: streamsize 15726: width() const 15726: { return _M_width; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: streamsize 15726: width(streamsize __wide) 15726: { 15726: streamsize __old = _M_width; 15726: _M_width = __wide; 15726: return __old; 15726: } 15726: # 782 "/usr/include/c++/13/bits/ios_base.h" 3 15726: static bool 15726: sync_with_stdio(bool __sync = true); 15726: # 794 "/usr/include/c++/13/bits/ios_base.h" 3 15726: locale 15726: imbue(const locale& __loc) throw(); 15726: # 805 "/usr/include/c++/13/bits/ios_base.h" 3 15726: locale 15726: getloc() const 15726: { return _M_ios_locale; } 15726: # 816 "/usr/include/c++/13/bits/ios_base.h" 3 15726: const locale& 15726: _M_getloc() const 15726: { return _M_ios_locale; } 15726: # 835 "/usr/include/c++/13/bits/ios_base.h" 3 15726: static int 15726: xalloc() throw(); 15726: # 851 "/usr/include/c++/13/bits/ios_base.h" 3 15726: long& 15726: iword(int __ix) 15726: { 15726: _Words& __word = ((unsigned)__ix < (unsigned)_M_word_size) 15726: ? _M_word[__ix] : _M_grow_words(__ix, true); 15726: return __word._M_iword; 15726: } 15726: # 872 "/usr/include/c++/13/bits/ios_base.h" 3 15726: void*& 15726: pword(int __ix) 15726: { 15726: _Words& __word = ((unsigned)__ix < (unsigned)_M_word_size) 15726: ? _M_word[__ix] : _M_grow_words(__ix, false); 15726: return __word._M_pword; 15726: } 15726: # 889 "/usr/include/c++/13/bits/ios_base.h" 3 15726: virtual ~ios_base(); 15726: 15726: protected: 15726: ios_base() throw (); 15726: # 903 "/usr/include/c++/13/bits/ios_base.h" 3 15726: public: 15726: ios_base(const ios_base&) = delete; 15726: 15726: ios_base& 15726: operator=(const ios_base&) = delete; 15726: 15726: protected: 15726: void 15726: _M_move(ios_base&) noexcept; 15726: 15726: void 15726: _M_swap(ios_base& __rhs) noexcept; 15726: 15726: }; 15726: 15726: 15726: 15726: inline ios_base& 15726: boolalpha(ios_base& __base) 15726: { 15726: __base.setf(ios_base::boolalpha); 15726: return __base; 15726: } 15726: 15726: 15726: inline ios_base& 15726: noboolalpha(ios_base& __base) 15726: { 15726: __base.unsetf(ios_base::boolalpha); 15726: return __base; 15726: } 15726: 15726: 15726: inline ios_base& 15726: showbase(ios_base& __base) 15726: { 15726: __base.setf(ios_base::showbase); 15726: return __base; 15726: } 15726: 15726: 15726: inline ios_base& 15726: noshowbase(ios_base& __base) 15726: { 15726: __base.unsetf(ios_base::showbase); 15726: return __base; 15726: } 15726: 15726: 15726: inline ios_base& 15726: showpoint(ios_base& __base) 15726: { 15726: __base.setf(ios_base::showpoint); 15726: return __base; 15726: } 15726: 15726: 15726: inline ios_base& 15726: noshowpoint(ios_base& __base) 15726: { 15726: __base.unsetf(ios_base::showpoint); 15726: return __base; 15726: } 15726: 15726: 15726: inline ios_base& 15726: showpos(ios_base& __base) 15726: { 15726: __base.setf(ios_base::showpos); 15726: return __base; 15726: } 15726: 15726: 15726: inline ios_base& 15726: noshowpos(ios_base& __base) 15726: { 15726: __base.unsetf(ios_base::showpos); 15726: return __base; 15726: } 15726: 15726: 15726: inline ios_base& 15726: skipws(ios_base& __base) 15726: { 15726: __base.setf(ios_base::skipws); 15726: return __base; 15726: } 15726: 15726: 15726: inline ios_base& 15726: noskipws(ios_base& __base) 15726: { 15726: __base.unsetf(ios_base::skipws); 15726: return __base; 15726: } 15726: 15726: 15726: inline ios_base& 15726: uppercase(ios_base& __base) 15726: { 15726: __base.setf(ios_base::uppercase); 15726: return __base; 15726: } 15726: 15726: 15726: inline ios_base& 15726: nouppercase(ios_base& __base) 15726: { 15726: __base.unsetf(ios_base::uppercase); 15726: return __base; 15726: } 15726: 15726: 15726: inline ios_base& 15726: unitbuf(ios_base& __base) 15726: { 15726: __base.setf(ios_base::unitbuf); 15726: return __base; 15726: } 15726: 15726: 15726: inline ios_base& 15726: nounitbuf(ios_base& __base) 15726: { 15726: __base.unsetf(ios_base::unitbuf); 15726: return __base; 15726: } 15726: 15726: 15726: 15726: inline ios_base& 15726: internal(ios_base& __base) 15726: { 15726: __base.setf(ios_base::internal, ios_base::adjustfield); 15726: return __base; 15726: } 15726: 15726: 15726: inline ios_base& 15726: left(ios_base& __base) 15726: { 15726: __base.setf(ios_base::left, ios_base::adjustfield); 15726: return __base; 15726: } 15726: 15726: 15726: inline ios_base& 15726: right(ios_base& __base) 15726: { 15726: __base.setf(ios_base::right, ios_base::adjustfield); 15726: return __base; 15726: } 15726: 15726: 15726: 15726: inline ios_base& 15726: dec(ios_base& __base) 15726: { 15726: __base.setf(ios_base::dec, ios_base::basefield); 15726: return __base; 15726: } 15726: 15726: 15726: inline ios_base& 15726: hex(ios_base& __base) 15726: { 15726: __base.setf(ios_base::hex, ios_base::basefield); 15726: return __base; 15726: } 15726: 15726: 15726: inline ios_base& 15726: oct(ios_base& __base) 15726: { 15726: __base.setf(ios_base::oct, ios_base::basefield); 15726: return __base; 15726: } 15726: 15726: 15726: 15726: inline ios_base& 15726: fixed(ios_base& __base) 15726: { 15726: __base.setf(ios_base::fixed, ios_base::floatfield); 15726: return __base; 15726: } 15726: 15726: 15726: inline ios_base& 15726: scientific(ios_base& __base) 15726: { 15726: __base.setf(ios_base::scientific, ios_base::floatfield); 15726: return __base; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline ios_base& 15726: hexfloat(ios_base& __base) 15726: { 15726: __base.setf(ios_base::fixed | ios_base::scientific, ios_base::floatfield); 15726: return __base; 15726: } 15726: 15726: 15726: inline ios_base& 15726: defaultfloat(ios_base& __base) 15726: { 15726: __base.unsetf(ios_base::floatfield); 15726: return __base; 15726: } 15726: 15726: 15726: 15726: } 15726: # 45 "/usr/include/c++/13/ios" 2 3 15726: # 1 "/usr/include/c++/13/streambuf" 1 3 15726: # 36 "/usr/include/c++/13/streambuf" 3 15726: 15726: # 37 "/usr/include/c++/13/streambuf" 3 15726: # 47 "/usr/include/c++/13/streambuf" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: template 15726: streamsize 15726: __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>*, 15726: basic_streambuf<_CharT, _Traits>*, bool&); 15726: # 123 "/usr/include/c++/13/streambuf" 3 15726: template 15726: class basic_streambuf 15726: { 15726: public: 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef _CharT char_type; 15726: typedef _Traits traits_type; 15726: typedef typename traits_type::int_type int_type; 15726: typedef typename traits_type::pos_type pos_type; 15726: typedef typename traits_type::off_type off_type; 15726: 15726: 15726: 15726: 15726: typedef basic_streambuf __streambuf_type; 15726: 15726: 15726: friend class basic_ios; 15726: friend class basic_istream; 15726: friend class basic_ostream; 15726: friend class istreambuf_iterator; 15726: friend class ostreambuf_iterator; 15726: 15726: friend streamsize 15726: __copy_streambufs_eof<>(basic_streambuf*, basic_streambuf*, bool&); 15726: 15726: template 15726: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, 15726: _CharT2*>::__type 15726: __copy_move_a2(istreambuf_iterator<_CharT2>, 15726: istreambuf_iterator<_CharT2>, _CharT2*); 15726: 15726: template 15726: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, 15726: istreambuf_iterator<_CharT2> >::__type 15726: find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, 15726: const _CharT2&); 15726: 15726: template 15726: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, 15726: void>::__type 15726: advance(istreambuf_iterator<_CharT2>&, _Distance); 15726: 15726: friend void __istream_extract(istream&, char*, streamsize); 15726: 15726: template 15726: friend basic_istream<_CharT2, _Traits2>& 15726: operator>>(basic_istream<_CharT2, _Traits2>&, 15726: basic_string<_CharT2, _Traits2, _Alloc>&); 15726: 15726: template 15726: friend basic_istream<_CharT2, _Traits2>& 15726: getline(basic_istream<_CharT2, _Traits2>&, 15726: basic_string<_CharT2, _Traits2, _Alloc>&, _CharT2); 15726: 15726: protected: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: char_type* _M_in_beg; 15726: char_type* _M_in_cur; 15726: char_type* _M_in_end; 15726: char_type* _M_out_beg; 15726: char_type* _M_out_cur; 15726: char_type* _M_out_end; 15726: 15726: 15726: locale _M_buf_locale; 15726: 15726: public: 15726: 15726: virtual 15726: ~basic_streambuf() 15726: { } 15726: # 215 "/usr/include/c++/13/streambuf" 3 15726: locale 15726: pubimbue(const locale& __loc) 15726: { 15726: locale __tmp(this->getloc()); 15726: this->imbue(__loc); 15726: _M_buf_locale = __loc; 15726: return __tmp; 15726: } 15726: # 232 "/usr/include/c++/13/streambuf" 3 15726: locale 15726: getloc() const 15726: { return _M_buf_locale; } 15726: # 245 "/usr/include/c++/13/streambuf" 3 15726: basic_streambuf* 15726: pubsetbuf(char_type* __s, streamsize __n) 15726: { return this->setbuf(__s, __n); } 15726: # 257 "/usr/include/c++/13/streambuf" 3 15726: pos_type 15726: pubseekoff(off_type __off, ios_base::seekdir __way, 15726: ios_base::openmode __mode = ios_base::in | ios_base::out) 15726: { return this->seekoff(__off, __way, __mode); } 15726: # 269 "/usr/include/c++/13/streambuf" 3 15726: pos_type 15726: pubseekpos(pos_type __sp, 15726: ios_base::openmode __mode = ios_base::in | ios_base::out) 15726: { return this->seekpos(__sp, __mode); } 15726: 15726: 15726: 15726: 15726: int 15726: pubsync() { return this->sync(); } 15726: # 290 "/usr/include/c++/13/streambuf" 3 15726: streamsize 15726: in_avail() 15726: { 15726: const streamsize __ret = this->egptr() - this->gptr(); 15726: return __ret ? __ret : this->showmanyc(); 15726: } 15726: # 304 "/usr/include/c++/13/streambuf" 3 15726: int_type 15726: snextc() 15726: { 15726: int_type __ret = traits_type::eof(); 15726: if (__builtin_expect(!traits_type::eq_int_type(this->sbumpc(), 15726: __ret), true)) 15726: __ret = this->sgetc(); 15726: return __ret; 15726: } 15726: # 322 "/usr/include/c++/13/streambuf" 3 15726: int_type 15726: sbumpc() 15726: { 15726: int_type __ret; 15726: if (__builtin_expect(this->gptr() < this->egptr(), true)) 15726: { 15726: __ret = traits_type::to_int_type(*this->gptr()); 15726: this->gbump(1); 15726: } 15726: else 15726: __ret = this->uflow(); 15726: return __ret; 15726: } 15726: # 344 "/usr/include/c++/13/streambuf" 3 15726: int_type 15726: sgetc() 15726: { 15726: int_type __ret; 15726: if (__builtin_expect(this->gptr() < this->egptr(), true)) 15726: __ret = traits_type::to_int_type(*this->gptr()); 15726: else 15726: __ret = this->underflow(); 15726: return __ret; 15726: } 15726: # 363 "/usr/include/c++/13/streambuf" 3 15726: streamsize 15726: sgetn(char_type* __s, streamsize __n) 15726: { return this->xsgetn(__s, __n); } 15726: # 378 "/usr/include/c++/13/streambuf" 3 15726: int_type 15726: sputbackc(char_type __c) 15726: { 15726: int_type __ret; 15726: const bool __testpos = this->eback() < this->gptr(); 15726: if (__builtin_expect(!__testpos || 15726: !traits_type::eq(__c, this->gptr()[-1]), false)) 15726: __ret = this->pbackfail(traits_type::to_int_type(__c)); 15726: else 15726: { 15726: this->gbump(-1); 15726: __ret = traits_type::to_int_type(*this->gptr()); 15726: } 15726: return __ret; 15726: } 15726: # 403 "/usr/include/c++/13/streambuf" 3 15726: int_type 15726: sungetc() 15726: { 15726: int_type __ret; 15726: if (__builtin_expect(this->eback() < this->gptr(), true)) 15726: { 15726: this->gbump(-1); 15726: __ret = traits_type::to_int_type(*this->gptr()); 15726: } 15726: else 15726: __ret = this->pbackfail(); 15726: return __ret; 15726: } 15726: # 430 "/usr/include/c++/13/streambuf" 3 15726: int_type 15726: sputc(char_type __c) 15726: { 15726: int_type __ret; 15726: if (__builtin_expect(this->pptr() < this->epptr(), true)) 15726: { 15726: *this->pptr() = __c; 15726: this->pbump(1); 15726: __ret = traits_type::to_int_type(__c); 15726: } 15726: else 15726: __ret = this->overflow(traits_type::to_int_type(__c)); 15726: return __ret; 15726: } 15726: # 456 "/usr/include/c++/13/streambuf" 3 15726: streamsize 15726: sputn(const char_type* __s, streamsize __n) 15726: { return this->xsputn(__s, __n); } 15726: 15726: protected: 15726: # 470 "/usr/include/c++/13/streambuf" 3 15726: basic_streambuf() 15726: : _M_in_beg(0), _M_in_cur(0), _M_in_end(0), 15726: _M_out_beg(0), _M_out_cur(0), _M_out_end(0), 15726: _M_buf_locale(locale()) 15726: { } 15726: # 488 "/usr/include/c++/13/streambuf" 3 15726: char_type* 15726: eback() const { return _M_in_beg; } 15726: 15726: char_type* 15726: gptr() const { return _M_in_cur; } 15726: 15726: char_type* 15726: egptr() const { return _M_in_end; } 15726: # 504 "/usr/include/c++/13/streambuf" 3 15726: void 15726: gbump(int __n) { _M_in_cur += __n; } 15726: # 515 "/usr/include/c++/13/streambuf" 3 15726: void 15726: setg(char_type* __gbeg, char_type* __gnext, char_type* __gend) 15726: { 15726: _M_in_beg = __gbeg; 15726: _M_in_cur = __gnext; 15726: _M_in_end = __gend; 15726: } 15726: # 535 "/usr/include/c++/13/streambuf" 3 15726: char_type* 15726: pbase() const { return _M_out_beg; } 15726: 15726: char_type* 15726: pptr() const { return _M_out_cur; } 15726: 15726: char_type* 15726: epptr() const { return _M_out_end; } 15726: # 551 "/usr/include/c++/13/streambuf" 3 15726: void 15726: pbump(int __n) { _M_out_cur += __n; } 15726: # 561 "/usr/include/c++/13/streambuf" 3 15726: void 15726: setp(char_type* __pbeg, char_type* __pend) 15726: { 15726: _M_out_beg = _M_out_cur = __pbeg; 15726: _M_out_end = __pend; 15726: } 15726: # 582 "/usr/include/c++/13/streambuf" 3 15726: virtual void 15726: imbue(const locale& __loc __attribute__ ((__unused__))) 15726: { } 15726: # 597 "/usr/include/c++/13/streambuf" 3 15726: virtual basic_streambuf* 15726: setbuf(char_type*, streamsize) 15726: { return this; } 15726: # 608 "/usr/include/c++/13/streambuf" 3 15726: virtual pos_type 15726: seekoff(off_type, ios_base::seekdir, 15726: ios_base::openmode = ios_base::in | ios_base::out) 15726: { return pos_type(off_type(-1)); } 15726: # 620 "/usr/include/c++/13/streambuf" 3 15726: virtual pos_type 15726: seekpos(pos_type, 15726: ios_base::openmode = ios_base::in | ios_base::out) 15726: { return pos_type(off_type(-1)); } 15726: # 633 "/usr/include/c++/13/streambuf" 3 15726: virtual int 15726: sync() { return 0; } 15726: # 655 "/usr/include/c++/13/streambuf" 3 15726: virtual streamsize 15726: showmanyc() { return 0; } 15726: # 671 "/usr/include/c++/13/streambuf" 3 15726: virtual streamsize 15726: xsgetn(char_type* __s, streamsize __n); 15726: # 693 "/usr/include/c++/13/streambuf" 3 15726: virtual int_type 15726: underflow() 15726: { return traits_type::eof(); } 15726: # 706 "/usr/include/c++/13/streambuf" 3 15726: virtual int_type 15726: uflow() 15726: { 15726: int_type __ret = traits_type::eof(); 15726: const bool __testeof = traits_type::eq_int_type(this->underflow(), 15726: __ret); 15726: if (!__testeof) 15726: { 15726: __ret = traits_type::to_int_type(*this->gptr()); 15726: this->gbump(1); 15726: } 15726: return __ret; 15726: } 15726: # 730 "/usr/include/c++/13/streambuf" 3 15726: virtual int_type 15726: pbackfail(int_type __c __attribute__ ((__unused__)) = traits_type::eof()) 15726: { return traits_type::eof(); } 15726: # 748 "/usr/include/c++/13/streambuf" 3 15726: virtual streamsize 15726: xsputn(const char_type* __s, streamsize __n); 15726: # 774 "/usr/include/c++/13/streambuf" 3 15726: virtual int_type 15726: overflow(int_type __c __attribute__ ((__unused__)) = traits_type::eof()) 15726: { return traits_type::eof(); } 15726: # 801 "/usr/include/c++/13/streambuf" 3 15726: void 15726: __safe_gbump(streamsize __n) { _M_in_cur += __n; } 15726: 15726: void 15726: __safe_pbump(streamsize __n) { _M_out_cur += __n; } 15726: 15726: 15726: 15726: 15726: protected: 15726: 15726: basic_streambuf(const basic_streambuf&); 15726: 15726: basic_streambuf& 15726: operator=(const basic_streambuf&); 15726: 15726: 15726: void 15726: swap(basic_streambuf& __sb) 15726: { 15726: std::swap(_M_in_beg, __sb._M_in_beg); 15726: std::swap(_M_in_cur, __sb._M_in_cur); 15726: std::swap(_M_in_end, __sb._M_in_end); 15726: std::swap(_M_out_beg, __sb._M_out_beg); 15726: std::swap(_M_out_cur, __sb._M_out_cur); 15726: std::swap(_M_out_end, __sb._M_out_end); 15726: std::swap(_M_buf_locale, __sb._M_buf_locale); 15726: } 15726: 15726: }; 15726: 15726: 15726: template 15726: std::basic_streambuf<_CharT, _Traits>:: 15726: basic_streambuf(const basic_streambuf&) = default; 15726: 15726: template 15726: std::basic_streambuf<_CharT, _Traits>& 15726: std::basic_streambuf<_CharT, _Traits>:: 15726: operator=(const basic_streambuf&) = default; 15726: 15726: 15726: 15726: template<> 15726: streamsize 15726: __copy_streambufs_eof(basic_streambuf* __sbin, 15726: basic_streambuf* __sbout, bool& __ineof); 15726: 15726: template<> 15726: streamsize 15726: __copy_streambufs_eof(basic_streambuf* __sbin, 15726: basic_streambuf* __sbout, bool& __ineof); 15726: 15726: 15726: 15726: 15726: 15726: } 15726: 15726: # 1 "/usr/include/c++/13/bits/streambuf.tcc" 1 3 15726: # 37 "/usr/include/c++/13/bits/streambuf.tcc" 3 15726: 15726: # 38 "/usr/include/c++/13/bits/streambuf.tcc" 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: template 15726: streamsize 15726: basic_streambuf<_CharT, _Traits>:: 15726: xsgetn(char_type* __s, streamsize __n) 15726: { 15726: streamsize __ret = 0; 15726: while (__ret < __n) 15726: { 15726: const streamsize __buf_len = this->egptr() - this->gptr(); 15726: if (__buf_len) 15726: { 15726: const streamsize __remaining = __n - __ret; 15726: const streamsize __len = std::min(__buf_len, __remaining); 15726: traits_type::copy(__s, this->gptr(), __len); 15726: __ret += __len; 15726: __s += __len; 15726: this->__safe_gbump(__len); 15726: } 15726: 15726: if (__ret < __n) 15726: { 15726: const int_type __c = this->uflow(); 15726: if (!traits_type::eq_int_type(__c, traits_type::eof())) 15726: { 15726: traits_type::assign(*__s++, traits_type::to_char_type(__c)); 15726: ++__ret; 15726: } 15726: else 15726: break; 15726: } 15726: } 15726: return __ret; 15726: } 15726: 15726: template 15726: streamsize 15726: basic_streambuf<_CharT, _Traits>:: 15726: xsputn(const char_type* __s, streamsize __n) 15726: { 15726: streamsize __ret = 0; 15726: while (__ret < __n) 15726: { 15726: const streamsize __buf_len = this->epptr() - this->pptr(); 15726: if (__buf_len) 15726: { 15726: const streamsize __remaining = __n - __ret; 15726: const streamsize __len = std::min(__buf_len, __remaining); 15726: traits_type::copy(this->pptr(), __s, __len); 15726: __ret += __len; 15726: __s += __len; 15726: this->__safe_pbump(__len); 15726: } 15726: 15726: if (__ret < __n) 15726: { 15726: int_type __c = this->overflow(traits_type::to_int_type(*__s)); 15726: if (!traits_type::eq_int_type(__c, traits_type::eof())) 15726: { 15726: ++__ret; 15726: ++__s; 15726: } 15726: else 15726: break; 15726: } 15726: } 15726: return __ret; 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: streamsize 15726: __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>* __sbin, 15726: basic_streambuf<_CharT, _Traits>* __sbout, 15726: bool& __ineof) 15726: { 15726: streamsize __ret = 0; 15726: __ineof = true; 15726: typename _Traits::int_type __c = __sbin->sgetc(); 15726: while (!_Traits::eq_int_type(__c, _Traits::eof())) 15726: { 15726: __c = __sbout->sputc(_Traits::to_char_type(__c)); 15726: if (_Traits::eq_int_type(__c, _Traits::eof())) 15726: { 15726: __ineof = false; 15726: break; 15726: } 15726: ++__ret; 15726: __c = __sbin->snextc(); 15726: } 15726: return __ret; 15726: } 15726: 15726: template 15726: inline streamsize 15726: __copy_streambufs(basic_streambuf<_CharT, _Traits>* __sbin, 15726: basic_streambuf<_CharT, _Traits>* __sbout) 15726: { 15726: bool __ineof; 15726: return __copy_streambufs_eof(__sbin, __sbout, __ineof); 15726: } 15726: 15726: 15726: 15726: 15726: extern template class basic_streambuf; 15726: 15726: extern template 15726: streamsize 15726: __copy_streambufs(basic_streambuf*, 15726: basic_streambuf*); 15726: 15726: 15726: extern template class basic_streambuf; 15726: 15726: extern template 15726: streamsize 15726: __copy_streambufs(basic_streambuf*, 15726: basic_streambuf*); 15726: 15726: 15726: 15726: 15726: } 15726: # 861 "/usr/include/c++/13/streambuf" 2 3 15726: # 46 "/usr/include/c++/13/ios" 2 3 15726: # 1 "/usr/include/c++/13/bits/basic_ios.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/basic_ios.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/basic_ios.h" 3 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/locale_facets.h" 1 3 15726: # 37 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: 15726: # 38 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: 15726: # 1 "/usr/include/c++/13/cwctype" 1 3 15726: # 39 "/usr/include/c++/13/cwctype" 3 15726: 15726: # 40 "/usr/include/c++/13/cwctype" 3 15726: # 50 "/usr/include/c++/13/cwctype" 3 15726: # 1 "/usr/include/wctype.h" 1 3 4 15726: # 38 "/usr/include/wctype.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/wctype-wchar.h" 1 3 4 15726: # 38 "/usr/include/arm-linux-gnueabihf/bits/wctype-wchar.h" 3 4 15726: typedef unsigned long int wctype_t; 15726: # 56 "/usr/include/arm-linux-gnueabihf/bits/wctype-wchar.h" 3 4 15726: enum 15726: { 15726: __ISwupper = 0, 15726: __ISwlower = 1, 15726: __ISwalpha = 2, 15726: __ISwdigit = 3, 15726: __ISwxdigit = 4, 15726: __ISwspace = 5, 15726: __ISwprint = 6, 15726: __ISwgraph = 7, 15726: __ISwblank = 8, 15726: __ISwcntrl = 9, 15726: __ISwpunct = 10, 15726: __ISwalnum = 11, 15726: 15726: _ISwupper = ((__ISwupper) < 8 ? (int) ((1UL << (__ISwupper)) << 24) : ((__ISwupper) < 16 ? (int) ((1UL << (__ISwupper)) << 8) : ((__ISwupper) < 24 ? (int) ((1UL << (__ISwupper)) >> 8) : (int) ((1UL << (__ISwupper)) >> 24)))), 15726: _ISwlower = ((__ISwlower) < 8 ? (int) ((1UL << (__ISwlower)) << 24) : ((__ISwlower) < 16 ? (int) ((1UL << (__ISwlower)) << 8) : ((__ISwlower) < 24 ? (int) ((1UL << (__ISwlower)) >> 8) : (int) ((1UL << (__ISwlower)) >> 24)))), 15726: _ISwalpha = ((__ISwalpha) < 8 ? (int) ((1UL << (__ISwalpha)) << 24) : ((__ISwalpha) < 16 ? (int) ((1UL << (__ISwalpha)) << 8) : ((__ISwalpha) < 24 ? (int) ((1UL << (__ISwalpha)) >> 8) : (int) ((1UL << (__ISwalpha)) >> 24)))), 15726: _ISwdigit = ((__ISwdigit) < 8 ? (int) ((1UL << (__ISwdigit)) << 24) : ((__ISwdigit) < 16 ? (int) ((1UL << (__ISwdigit)) << 8) : ((__ISwdigit) < 24 ? (int) ((1UL << (__ISwdigit)) >> 8) : (int) ((1UL << (__ISwdigit)) >> 24)))), 15726: _ISwxdigit = ((__ISwxdigit) < 8 ? (int) ((1UL << (__ISwxdigit)) << 24) : ((__ISwxdigit) < 16 ? (int) ((1UL << (__ISwxdigit)) << 8) : ((__ISwxdigit) < 24 ? (int) ((1UL << (__ISwxdigit)) >> 8) : (int) ((1UL << (__ISwxdigit)) >> 24)))), 15726: _ISwspace = ((__ISwspace) < 8 ? (int) ((1UL << (__ISwspace)) << 24) : ((__ISwspace) < 16 ? (int) ((1UL << (__ISwspace)) << 8) : ((__ISwspace) < 24 ? (int) ((1UL << (__ISwspace)) >> 8) : (int) ((1UL << (__ISwspace)) >> 24)))), 15726: _ISwprint = ((__ISwprint) < 8 ? (int) ((1UL << (__ISwprint)) << 24) : ((__ISwprint) < 16 ? (int) ((1UL << (__ISwprint)) << 8) : ((__ISwprint) < 24 ? (int) ((1UL << (__ISwprint)) >> 8) : (int) ((1UL << (__ISwprint)) >> 24)))), 15726: _ISwgraph = ((__ISwgraph) < 8 ? (int) ((1UL << (__ISwgraph)) << 24) : ((__ISwgraph) < 16 ? (int) ((1UL << (__ISwgraph)) << 8) : ((__ISwgraph) < 24 ? (int) ((1UL << (__ISwgraph)) >> 8) : (int) ((1UL << (__ISwgraph)) >> 24)))), 15726: _ISwblank = ((__ISwblank) < 8 ? (int) ((1UL << (__ISwblank)) << 24) : ((__ISwblank) < 16 ? (int) ((1UL << (__ISwblank)) << 8) : ((__ISwblank) < 24 ? (int) ((1UL << (__ISwblank)) >> 8) : (int) ((1UL << (__ISwblank)) >> 24)))), 15726: _ISwcntrl = ((__ISwcntrl) < 8 ? (int) ((1UL << (__ISwcntrl)) << 24) : ((__ISwcntrl) < 16 ? (int) ((1UL << (__ISwcntrl)) << 8) : ((__ISwcntrl) < 24 ? (int) ((1UL << (__ISwcntrl)) >> 8) : (int) ((1UL << (__ISwcntrl)) >> 24)))), 15726: _ISwpunct = ((__ISwpunct) < 8 ? (int) ((1UL << (__ISwpunct)) << 24) : ((__ISwpunct) < 16 ? (int) ((1UL << (__ISwpunct)) << 8) : ((__ISwpunct) < 24 ? (int) ((1UL << (__ISwpunct)) >> 8) : (int) ((1UL << (__ISwpunct)) >> 24)))), 15726: _ISwalnum = ((__ISwalnum) < 8 ? (int) ((1UL << (__ISwalnum)) << 24) : ((__ISwalnum) < 16 ? (int) ((1UL << (__ISwalnum)) << 8) : ((__ISwalnum) < 24 ? (int) ((1UL << (__ISwalnum)) >> 8) : (int) ((1UL << (__ISwalnum)) >> 24)))) 15726: }; 15726: 15726: 15726: 15726: extern "C" { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int iswalnum (wint_t __wc) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern int iswalpha (wint_t __wc) noexcept (true); 15726: 15726: 15726: extern int iswcntrl (wint_t __wc) noexcept (true); 15726: 15726: 15726: 15726: extern int iswdigit (wint_t __wc) noexcept (true); 15726: 15726: 15726: 15726: extern int iswgraph (wint_t __wc) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int iswlower (wint_t __wc) noexcept (true); 15726: 15726: 15726: extern int iswprint (wint_t __wc) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int iswpunct (wint_t __wc) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int iswspace (wint_t __wc) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int iswupper (wint_t __wc) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int iswxdigit (wint_t __wc) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern int iswblank (wint_t __wc) noexcept (true); 15726: # 155 "/usr/include/arm-linux-gnueabihf/bits/wctype-wchar.h" 3 4 15726: extern wctype_t wctype (const char *__property) noexcept (true); 15726: 15726: 15726: 15726: extern int iswctype (wint_t __wc, wctype_t __desc) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern wint_t towlower (wint_t __wc) noexcept (true); 15726: 15726: 15726: extern wint_t towupper (wint_t __wc) noexcept (true); 15726: 15726: } 15726: # 39 "/usr/include/wctype.h" 2 3 4 15726: 15726: 15726: 15726: 15726: 15726: extern "C" { 15726: 15726: 15726: 15726: typedef const __int32_t *wctrans_t; 15726: 15726: 15726: 15726: extern wctrans_t wctrans (const char *__property) noexcept (true); 15726: 15726: 15726: extern wint_t towctrans (wint_t __wc, wctrans_t __desc) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int iswalnum_l (wint_t __wc, locale_t __locale) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern int iswalpha_l (wint_t __wc, locale_t __locale) noexcept (true); 15726: 15726: 15726: extern int iswcntrl_l (wint_t __wc, locale_t __locale) noexcept (true); 15726: 15726: 15726: 15726: extern int iswdigit_l (wint_t __wc, locale_t __locale) noexcept (true); 15726: 15726: 15726: 15726: extern int iswgraph_l (wint_t __wc, locale_t __locale) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int iswlower_l (wint_t __wc, locale_t __locale) noexcept (true); 15726: 15726: 15726: extern int iswprint_l (wint_t __wc, locale_t __locale) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int iswpunct_l (wint_t __wc, locale_t __locale) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int iswspace_l (wint_t __wc, locale_t __locale) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int iswupper_l (wint_t __wc, locale_t __locale) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int iswxdigit_l (wint_t __wc, locale_t __locale) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int iswblank_l (wint_t __wc, locale_t __locale) noexcept (true); 15726: 15726: 15726: 15726: extern wctype_t wctype_l (const char *__property, locale_t __locale) 15726: noexcept (true); 15726: 15726: 15726: 15726: extern int iswctype_l (wint_t __wc, wctype_t __desc, locale_t __locale) 15726: noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern wint_t towlower_l (wint_t __wc, locale_t __locale) noexcept (true); 15726: 15726: 15726: extern wint_t towupper_l (wint_t __wc, locale_t __locale) noexcept (true); 15726: 15726: 15726: 15726: extern wctrans_t wctrans_l (const char *__property, locale_t __locale) 15726: noexcept (true); 15726: 15726: 15726: extern wint_t towctrans_l (wint_t __wc, wctrans_t __desc, 15726: locale_t __locale) noexcept (true); 15726: 15726: 15726: 15726: } 15726: # 51 "/usr/include/c++/13/cwctype" 2 3 15726: # 80 "/usr/include/c++/13/cwctype" 3 15726: namespace std 15726: { 15726: using ::wctrans_t; 15726: using ::wctype_t; 15726: using ::wint_t; 15726: 15726: using ::iswalnum; 15726: using ::iswalpha; 15726: 15726: using ::iswblank; 15726: 15726: using ::iswcntrl; 15726: using ::iswctype; 15726: using ::iswdigit; 15726: using ::iswgraph; 15726: using ::iswlower; 15726: using ::iswprint; 15726: using ::iswpunct; 15726: using ::iswspace; 15726: using ::iswupper; 15726: using ::iswxdigit; 15726: using ::towctrans; 15726: using ::towlower; 15726: using ::towupper; 15726: using ::wctrans; 15726: using ::wctype; 15726: } 15726: # 40 "/usr/include/c++/13/bits/locale_facets.h" 2 3 15726: # 1 "/usr/include/c++/13/cctype" 1 3 15726: # 39 "/usr/include/c++/13/cctype" 3 15726: 15726: # 40 "/usr/include/c++/13/cctype" 3 15726: # 41 "/usr/include/c++/13/bits/locale_facets.h" 2 3 15726: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/ctype_base.h" 1 3 15726: # 36 "/usr/include/arm-linux-gnueabihf/c++/13/bits/ctype_base.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: struct ctype_base 15726: { 15726: 15726: typedef const int* __to_type; 15726: 15726: 15726: 15726: typedef unsigned short mask; 15726: static const mask upper = _ISupper; 15726: static const mask lower = _ISlower; 15726: static const mask alpha = _ISalpha; 15726: static const mask digit = _ISdigit; 15726: static const mask xdigit = _ISxdigit; 15726: static const mask space = _ISspace; 15726: static const mask print = _ISprint; 15726: static const mask graph = _ISalpha | _ISdigit | _ISpunct; 15726: static const mask cntrl = _IScntrl; 15726: static const mask punct = _ISpunct; 15726: static const mask alnum = _ISalpha | _ISdigit; 15726: 15726: static const mask blank = _ISblank; 15726: 15726: }; 15726: 15726: 15726: } 15726: # 42 "/usr/include/c++/13/bits/locale_facets.h" 2 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/streambuf_iterator.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/streambuf_iterator.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/streambuf_iterator.h" 3 15726: 15726: 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 49 "/usr/include/c++/13/bits/streambuf_iterator.h" 3 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: 15726: 15726: template 15726: class istreambuf_iterator 15726: : public iterator 15726: { 15726: public: 15726: # 70 "/usr/include/c++/13/bits/streambuf_iterator.h" 3 15726: typedef _CharT char_type; 15726: typedef _Traits traits_type; 15726: typedef typename _Traits::int_type int_type; 15726: typedef basic_streambuf<_CharT, _Traits> streambuf_type; 15726: typedef basic_istream<_CharT, _Traits> istream_type; 15726: 15726: 15726: template 15726: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, 15726: ostreambuf_iterator<_CharT2> >::__type 15726: copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, 15726: ostreambuf_iterator<_CharT2>); 15726: 15726: template 15726: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, 15726: _CharT2*>::__type 15726: __copy_move_a2(istreambuf_iterator<_CharT2>, 15726: istreambuf_iterator<_CharT2>, _CharT2*); 15726: 15726: template 15726: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, 15726: _CharT2*>::__type 15726: __copy_n_a(istreambuf_iterator<_CharT2>, _Size, _CharT2*, bool); 15726: 15726: template 15726: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, 15726: istreambuf_iterator<_CharT2> >::__type 15726: find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, 15726: const _CharT2&); 15726: 15726: template 15726: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, 15726: void>::__type 15726: advance(istreambuf_iterator<_CharT2>&, _Distance); 15726: 15726: private: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: mutable streambuf_type* _M_sbuf; 15726: int_type _M_c; 15726: 15726: public: 15726: 15726: constexpr istreambuf_iterator() noexcept 15726: : _M_sbuf(0), _M_c(traits_type::eof()) { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: istreambuf_iterator(const istreambuf_iterator&) noexcept = default; 15726: 15726: ~istreambuf_iterator() = default; 15726: 15726: 15726: 15726: istreambuf_iterator(istream_type& __s) noexcept 15726: : _M_sbuf(__s.rdbuf()), _M_c(traits_type::eof()) { } 15726: 15726: 15726: istreambuf_iterator(streambuf_type* __s) noexcept 15726: : _M_sbuf(__s), _M_c(traits_type::eof()) { } 15726: 15726: 15726: istreambuf_iterator& 15726: operator=(const istreambuf_iterator&) noexcept = default; 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: char_type 15726: operator*() const 15726: { 15726: int_type __c = _M_get(); 15726: # 161 "/usr/include/c++/13/bits/streambuf_iterator.h" 3 15726: return traits_type::to_char_type(__c); 15726: } 15726: 15726: 15726: istreambuf_iterator& 15726: operator++() 15726: { 15726: 15726: 15726: 15726: ; 15726: 15726: _M_sbuf->sbumpc(); 15726: _M_c = traits_type::eof(); 15726: return *this; 15726: } 15726: 15726: 15726: istreambuf_iterator 15726: operator++(int) 15726: { 15726: 15726: 15726: 15726: ; 15726: 15726: istreambuf_iterator __old = *this; 15726: __old._M_c = _M_sbuf->sbumpc(); 15726: _M_c = traits_type::eof(); 15726: return __old; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: bool 15726: equal(const istreambuf_iterator& __b) const 15726: { return _M_at_eof() == __b._M_at_eof(); } 15726: 15726: private: 15726: int_type 15726: _M_get() const 15726: { 15726: int_type __ret = _M_c; 15726: if (_M_sbuf && _S_is_eof(__ret) && _S_is_eof(__ret = _M_sbuf->sgetc())) 15726: _M_sbuf = 0; 15726: return __ret; 15726: } 15726: 15726: bool 15726: _M_at_eof() const 15726: { return _S_is_eof(_M_get()); } 15726: 15726: static bool 15726: _S_is_eof(int_type __c) 15726: { 15726: const int_type __eof = traits_type::eof(); 15726: return traits_type::eq_int_type(__c, __eof); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: }; 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator==(const istreambuf_iterator<_CharT, _Traits>& __a, 15726: const istreambuf_iterator<_CharT, _Traits>& __b) 15726: { return __a.equal(__b); } 15726: 15726: 15726: template 15726: [[__nodiscard__]] 15726: inline bool 15726: operator!=(const istreambuf_iterator<_CharT, _Traits>& __a, 15726: const istreambuf_iterator<_CharT, _Traits>& __b) 15726: { return !__a.equal(__b); } 15726: 15726: 15726: 15726: template 15726: class ostreambuf_iterator 15726: : public iterator 15726: { 15726: public: 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef _CharT char_type; 15726: typedef _Traits traits_type; 15726: typedef basic_streambuf<_CharT, _Traits> streambuf_type; 15726: typedef basic_ostream<_CharT, _Traits> ostream_type; 15726: 15726: 15726: template 15726: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, 15726: ostreambuf_iterator<_CharT2> >::__type 15726: copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, 15726: ostreambuf_iterator<_CharT2>); 15726: 15726: private: 15726: streambuf_type* _M_sbuf; 15726: bool _M_failed; 15726: 15726: public: 15726: # 284 "/usr/include/c++/13/bits/streambuf_iterator.h" 3 15726: ostreambuf_iterator(ostream_type& __s) noexcept 15726: : _M_sbuf(__s.rdbuf()), _M_failed(!_M_sbuf) { } 15726: 15726: 15726: ostreambuf_iterator(streambuf_type* __s) noexcept 15726: : _M_sbuf(__s), _M_failed(!_M_sbuf) { } 15726: 15726: 15726: ostreambuf_iterator& 15726: operator=(_CharT __c) 15726: { 15726: if (!_M_failed && 15726: _Traits::eq_int_type(_M_sbuf->sputc(__c), _Traits::eof())) 15726: _M_failed = true; 15726: return *this; 15726: } 15726: 15726: 15726: [[__nodiscard__]] 15726: ostreambuf_iterator& 15726: operator*() 15726: { return *this; } 15726: 15726: 15726: ostreambuf_iterator& 15726: operator++(int) 15726: { return *this; } 15726: 15726: 15726: ostreambuf_iterator& 15726: operator++() 15726: { return *this; } 15726: 15726: 15726: [[__nodiscard__]] 15726: bool 15726: failed() const noexcept 15726: { return _M_failed; } 15726: 15726: ostreambuf_iterator& 15726: _M_put(const _CharT* __ws, streamsize __len) 15726: { 15726: if (__builtin_expect(!_M_failed, true) 15726: && __builtin_expect(this->_M_sbuf->sputn(__ws, __len) != __len, 15726: false)) 15726: _M_failed = true; 15726: return *this; 15726: } 15726: }; 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: template 15726: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 15726: ostreambuf_iterator<_CharT> >::__type 15726: copy(istreambuf_iterator<_CharT> __first, 15726: istreambuf_iterator<_CharT> __last, 15726: ostreambuf_iterator<_CharT> __result) 15726: { 15726: if (__first._M_sbuf && !__last._M_sbuf && !__result._M_failed) 15726: { 15726: bool __ineof; 15726: __copy_streambufs_eof(__first._M_sbuf, __result._M_sbuf, __ineof); 15726: if (!__ineof) 15726: __result._M_failed = true; 15726: } 15726: return __result; 15726: } 15726: 15726: template 15726: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 15726: ostreambuf_iterator<_CharT> >::__type 15726: __copy_move_a2(_CharT* __first, _CharT* __last, 15726: ostreambuf_iterator<_CharT> __result) 15726: { 15726: const streamsize __num = __last - __first; 15726: if (__num > 0) 15726: __result._M_put(__first, __num); 15726: return __result; 15726: } 15726: 15726: template 15726: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 15726: ostreambuf_iterator<_CharT> >::__type 15726: __copy_move_a2(const _CharT* __first, const _CharT* __last, 15726: ostreambuf_iterator<_CharT> __result) 15726: { 15726: const streamsize __num = __last - __first; 15726: if (__num > 0) 15726: __result._M_put(__first, __num); 15726: return __result; 15726: } 15726: 15726: template 15726: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 15726: _CharT*>::__type 15726: __copy_move_a2(istreambuf_iterator<_CharT> __first, 15726: istreambuf_iterator<_CharT> __last, _CharT* __result) 15726: { 15726: typedef istreambuf_iterator<_CharT> __is_iterator_type; 15726: typedef typename __is_iterator_type::traits_type traits_type; 15726: typedef typename __is_iterator_type::streambuf_type streambuf_type; 15726: typedef typename traits_type::int_type int_type; 15726: 15726: if (__first._M_sbuf && !__last._M_sbuf) 15726: { 15726: streambuf_type* __sb = __first._M_sbuf; 15726: int_type __c = __sb->sgetc(); 15726: while (!traits_type::eq_int_type(__c, traits_type::eof())) 15726: { 15726: const streamsize __n = __sb->egptr() - __sb->gptr(); 15726: if (__n > 1) 15726: { 15726: traits_type::copy(__result, __sb->gptr(), __n); 15726: __sb->__safe_gbump(__n); 15726: __result += __n; 15726: __c = __sb->underflow(); 15726: } 15726: else 15726: { 15726: *__result++ = traits_type::to_char_type(__c); 15726: __c = __sb->snextc(); 15726: } 15726: } 15726: } 15726: return __result; 15726: } 15726: 15726: template 15726: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 15726: _CharT*>::__type 15726: __copy_n_a(istreambuf_iterator<_CharT> __it, _Size __n, _CharT* __result, 15726: bool __strict __attribute__((__unused__))) 15726: { 15726: if (__n == 0) 15726: return __result; 15726: 15726: 15726: 15726: ; 15726: _CharT* __beg = __result; 15726: __result += __it._M_sbuf->sgetn(__beg, __n); 15726: 15726: 15726: ; 15726: return __result; 15726: } 15726: 15726: template 15726: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 15726: istreambuf_iterator<_CharT> >::__type 15726: find(istreambuf_iterator<_CharT> __first, 15726: istreambuf_iterator<_CharT> __last, const _CharT& __val) 15726: { 15726: typedef istreambuf_iterator<_CharT> __is_iterator_type; 15726: typedef typename __is_iterator_type::traits_type traits_type; 15726: typedef typename __is_iterator_type::streambuf_type streambuf_type; 15726: typedef typename traits_type::int_type int_type; 15726: const int_type __eof = traits_type::eof(); 15726: 15726: if (__first._M_sbuf && !__last._M_sbuf) 15726: { 15726: const int_type __ival = traits_type::to_int_type(__val); 15726: streambuf_type* __sb = __first._M_sbuf; 15726: int_type __c = __sb->sgetc(); 15726: while (!traits_type::eq_int_type(__c, __eof) 15726: && !traits_type::eq_int_type(__c, __ival)) 15726: { 15726: streamsize __n = __sb->egptr() - __sb->gptr(); 15726: if (__n > 1) 15726: { 15726: const _CharT* __p = traits_type::find(__sb->gptr(), 15726: __n, __val); 15726: if (__p) 15726: __n = __p - __sb->gptr(); 15726: __sb->__safe_gbump(__n); 15726: __c = __sb->sgetc(); 15726: } 15726: else 15726: __c = __sb->snextc(); 15726: } 15726: 15726: __first._M_c = __eof; 15726: } 15726: 15726: return __first; 15726: } 15726: 15726: template 15726: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, 15726: void>::__type 15726: advance(istreambuf_iterator<_CharT>& __i, _Distance __n) 15726: { 15726: if (__n == 0) 15726: return; 15726: 15726: do { if (std::__is_constant_evaluated() && !bool(__n > 0)) __builtin_unreachable(); } while (false); 15726: 15726: 15726: ; 15726: 15726: typedef istreambuf_iterator<_CharT> __is_iterator_type; 15726: typedef typename __is_iterator_type::traits_type traits_type; 15726: typedef typename __is_iterator_type::streambuf_type streambuf_type; 15726: typedef typename traits_type::int_type int_type; 15726: const int_type __eof = traits_type::eof(); 15726: 15726: streambuf_type* __sb = __i._M_sbuf; 15726: while (__n > 0) 15726: { 15726: streamsize __size = __sb->egptr() - __sb->gptr(); 15726: if (__size > __n) 15726: { 15726: __sb->__safe_gbump(__n); 15726: break; 15726: } 15726: 15726: __sb->__safe_gbump(__size); 15726: __n -= __size; 15726: if (traits_type::eq_int_type(__sb->underflow(), __eof)) 15726: { 15726: 15726: 15726: ; 15726: break; 15726: } 15726: } 15726: 15726: __i._M_c = __eof; 15726: } 15726: 15726: 15726: 15726: 15726: } 15726: # 49 "/usr/include/c++/13/bits/locale_facets.h" 2 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 74 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: template 15726: void 15726: __convert_to_v(const char*, _Tp&, ios_base::iostate&, 15726: const __c_locale&) throw(); 15726: 15726: 15726: template<> 15726: void 15726: __convert_to_v(const char*, float&, ios_base::iostate&, 15726: const __c_locale&) throw(); 15726: 15726: template<> 15726: void 15726: __convert_to_v(const char*, double&, ios_base::iostate&, 15726: const __c_locale&) throw(); 15726: 15726: template<> 15726: void 15726: __convert_to_v(const char*, long double&, ios_base::iostate&, 15726: const __c_locale&) throw(); 15726: 15726: 15726: 15726: template 15726: struct __pad 15726: { 15726: static void 15726: _S_pad(ios_base& __io, _CharT __fill, _CharT* __news, 15726: const _CharT* __olds, streamsize __newlen, streamsize __oldlen); 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: _CharT* 15726: __add_grouping(_CharT* __s, _CharT __sep, 15726: const char* __gbeg, size_t __gsize, 15726: const _CharT* __first, const _CharT* __last); 15726: 15726: 15726: 15726: 15726: template 15726: inline 15726: ostreambuf_iterator<_CharT> 15726: __write(ostreambuf_iterator<_CharT> __s, const _CharT* __ws, int __len) 15726: { 15726: __s._M_put(__ws, __len); 15726: return __s; 15726: } 15726: 15726: 15726: template 15726: inline 15726: _OutIter 15726: __write(_OutIter __s, const _CharT* __ws, int __len) 15726: { 15726: for (int __j = 0; __j < __len; __j++, ++__s) 15726: *__s = __ws[__j]; 15726: return __s; 15726: } 15726: # 152 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: template 15726: class __ctype_abstract_base : public locale::facet, public ctype_base 15726: { 15726: public: 15726: 15726: 15726: typedef _CharT char_type; 15726: # 171 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: bool 15726: is(mask __m, char_type __c) const 15726: { return this->do_is(__m, __c); } 15726: # 188 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: const char_type* 15726: is(const char_type *__lo, const char_type *__hi, mask *__vec) const 15726: { return this->do_is(__lo, __hi, __vec); } 15726: # 204 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: const char_type* 15726: scan_is(mask __m, const char_type* __lo, const char_type* __hi) const 15726: { return this->do_scan_is(__m, __lo, __hi); } 15726: # 220 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: const char_type* 15726: scan_not(mask __m, const char_type* __lo, const char_type* __hi) const 15726: { return this->do_scan_not(__m, __lo, __hi); } 15726: # 234 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: char_type 15726: toupper(char_type __c) const 15726: { return this->do_toupper(__c); } 15726: # 249 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: const char_type* 15726: toupper(char_type *__lo, const char_type* __hi) const 15726: { return this->do_toupper(__lo, __hi); } 15726: # 263 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: char_type 15726: tolower(char_type __c) const 15726: { return this->do_tolower(__c); } 15726: # 278 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: const char_type* 15726: tolower(char_type* __lo, const char_type* __hi) const 15726: { return this->do_tolower(__lo, __hi); } 15726: # 295 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: char_type 15726: widen(char __c) const 15726: { return this->do_widen(__c); } 15726: # 314 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: const char* 15726: widen(const char* __lo, const char* __hi, char_type* __to) const 15726: { return this->do_widen(__lo, __hi, __to); } 15726: # 333 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: char 15726: narrow(char_type __c, char __dfault) const 15726: { return this->do_narrow(__c, __dfault); } 15726: # 355 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: const char_type* 15726: narrow(const char_type* __lo, const char_type* __hi, 15726: char __dfault, char* __to) const 15726: { return this->do_narrow(__lo, __hi, __dfault, __to); } 15726: 15726: protected: 15726: explicit 15726: __ctype_abstract_base(size_t __refs = 0): facet(__refs) { } 15726: 15726: virtual 15726: ~__ctype_abstract_base() { } 15726: # 380 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual bool 15726: do_is(mask __m, char_type __c) const = 0; 15726: # 399 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual const char_type* 15726: do_is(const char_type* __lo, const char_type* __hi, 15726: mask* __vec) const = 0; 15726: # 418 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual const char_type* 15726: do_scan_is(mask __m, const char_type* __lo, 15726: const char_type* __hi) const = 0; 15726: # 437 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual const char_type* 15726: do_scan_not(mask __m, const char_type* __lo, 15726: const char_type* __hi) const = 0; 15726: # 455 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual char_type 15726: do_toupper(char_type __c) const = 0; 15726: # 472 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual const char_type* 15726: do_toupper(char_type* __lo, const char_type* __hi) const = 0; 15726: # 488 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual char_type 15726: do_tolower(char_type __c) const = 0; 15726: # 505 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual const char_type* 15726: do_tolower(char_type* __lo, const char_type* __hi) const = 0; 15726: # 524 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual char_type 15726: do_widen(char __c) const = 0; 15726: # 545 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual const char* 15726: do_widen(const char* __lo, const char* __hi, char_type* __to) const = 0; 15726: # 566 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual char 15726: do_narrow(char_type __c, char __dfault) const = 0; 15726: # 591 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual const char_type* 15726: do_narrow(const char_type* __lo, const char_type* __hi, 15726: char __dfault, char* __to) const = 0; 15726: }; 15726: # 614 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: template 15726: class ctype : public __ctype_abstract_base<_CharT> 15726: { 15726: public: 15726: 15726: typedef _CharT char_type; 15726: typedef typename __ctype_abstract_base<_CharT>::mask mask; 15726: 15726: 15726: static locale::id id; 15726: 15726: explicit 15726: ctype(size_t __refs = 0) : __ctype_abstract_base<_CharT>(__refs) { } 15726: 15726: protected: 15726: virtual 15726: ~ctype(); 15726: 15726: virtual bool 15726: do_is(mask __m, char_type __c) const; 15726: 15726: virtual const char_type* 15726: do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const; 15726: 15726: virtual const char_type* 15726: do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const; 15726: 15726: virtual const char_type* 15726: do_scan_not(mask __m, const char_type* __lo, 15726: const char_type* __hi) const; 15726: 15726: virtual char_type 15726: do_toupper(char_type __c) const; 15726: 15726: virtual const char_type* 15726: do_toupper(char_type* __lo, const char_type* __hi) const; 15726: 15726: virtual char_type 15726: do_tolower(char_type __c) const; 15726: 15726: virtual const char_type* 15726: do_tolower(char_type* __lo, const char_type* __hi) const; 15726: 15726: virtual char_type 15726: do_widen(char __c) const; 15726: 15726: virtual const char* 15726: do_widen(const char* __lo, const char* __hi, char_type* __dest) const; 15726: 15726: virtual char 15726: do_narrow(char_type, char __dfault) const; 15726: 15726: virtual const char_type* 15726: do_narrow(const char_type* __lo, const char_type* __hi, 15726: char __dfault, char* __to) const; 15726: }; 15726: 15726: template 15726: locale::id ctype<_CharT>::id; 15726: 15726: 15726: 15726: template 15726: class ctype >; 15726: # 688 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: template<> 15726: class ctype : public locale::facet, public ctype_base 15726: { 15726: public: 15726: 15726: 15726: typedef char char_type; 15726: 15726: protected: 15726: 15726: __c_locale _M_c_locale_ctype; 15726: bool _M_del; 15726: __to_type _M_toupper; 15726: __to_type _M_tolower; 15726: const mask* _M_table; 15726: mutable char _M_widen_ok; 15726: mutable char _M_widen[1 + static_cast(-1)]; 15726: mutable char _M_narrow[1 + static_cast(-1)]; 15726: mutable char _M_narrow_ok; 15726: 15726: 15726: public: 15726: 15726: static locale::id id; 15726: 15726: static const size_t table_size = 1 + static_cast(-1); 15726: # 725 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: explicit 15726: ctype(const mask* __table = 0, bool __del = false, size_t __refs = 0); 15726: # 738 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: explicit 15726: ctype(__c_locale __cloc, const mask* __table = 0, bool __del = false, 15726: size_t __refs = 0); 15726: # 751 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: inline bool 15726: is(mask __m, char __c) const; 15726: # 766 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: inline const char* 15726: is(const char* __lo, const char* __hi, mask* __vec) const; 15726: # 780 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: inline const char* 15726: scan_is(mask __m, const char* __lo, const char* __hi) const; 15726: # 794 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: inline const char* 15726: scan_not(mask __m, const char* __lo, const char* __hi) const; 15726: # 809 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: char_type 15726: toupper(char_type __c) const 15726: { return this->do_toupper(__c); } 15726: # 826 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: const char_type* 15726: toupper(char_type *__lo, const char_type* __hi) const 15726: { return this->do_toupper(__lo, __hi); } 15726: # 842 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: char_type 15726: tolower(char_type __c) const 15726: { return this->do_tolower(__c); } 15726: # 859 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: const char_type* 15726: tolower(char_type* __lo, const char_type* __hi) const 15726: { return this->do_tolower(__lo, __hi); } 15726: # 879 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: char_type 15726: widen(char __c) const 15726: { 15726: if (_M_widen_ok) 15726: return _M_widen[static_cast(__c)]; 15726: this->_M_widen_init(); 15726: return this->do_widen(__c); 15726: } 15726: # 906 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: const char* 15726: widen(const char* __lo, const char* __hi, char_type* __to) const 15726: { 15726: if (_M_widen_ok == 1) 15726: { 15726: if (__builtin_expect(__hi != __lo, true)) 15726: __builtin_memcpy(__to, __lo, __hi - __lo); 15726: return __hi; 15726: } 15726: if (!_M_widen_ok) 15726: _M_widen_init(); 15726: return this->do_widen(__lo, __hi, __to); 15726: } 15726: # 938 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: char 15726: narrow(char_type __c, char __dfault) const 15726: { 15726: if (_M_narrow[static_cast(__c)]) 15726: return _M_narrow[static_cast(__c)]; 15726: const char __t = do_narrow(__c, __dfault); 15726: if (__t != __dfault) 15726: _M_narrow[static_cast(__c)] = __t; 15726: return __t; 15726: } 15726: # 971 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: const char_type* 15726: narrow(const char_type* __lo, const char_type* __hi, 15726: char __dfault, char* __to) const 15726: { 15726: if (__builtin_expect(_M_narrow_ok == 1, true)) 15726: { 15726: if (__builtin_expect(__hi != __lo, true)) 15726: __builtin_memcpy(__to, __lo, __hi - __lo); 15726: return __hi; 15726: } 15726: if (!_M_narrow_ok) 15726: _M_narrow_init(); 15726: return this->do_narrow(__lo, __hi, __dfault, __to); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: const mask* 15726: table() const throw() 15726: { return _M_table; } 15726: 15726: 15726: static const mask* 15726: classic_table() throw(); 15726: protected: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual 15726: ~ctype(); 15726: # 1021 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual char_type 15726: do_toupper(char_type __c) const; 15726: # 1038 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual const char_type* 15726: do_toupper(char_type* __lo, const char_type* __hi) const; 15726: # 1054 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual char_type 15726: do_tolower(char_type __c) const; 15726: # 1071 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual const char_type* 15726: do_tolower(char_type* __lo, const char_type* __hi) const; 15726: # 1091 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual char_type 15726: do_widen(char __c) const 15726: { return __c; } 15726: # 1114 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual const char* 15726: do_widen(const char* __lo, const char* __hi, char_type* __to) const 15726: { 15726: if (__builtin_expect(__hi != __lo, true)) 15726: __builtin_memcpy(__to, __lo, __hi - __lo); 15726: return __hi; 15726: } 15726: # 1141 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual char 15726: do_narrow(char_type __c, char __dfault __attribute__((__unused__))) const 15726: { return __c; } 15726: # 1167 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual const char_type* 15726: do_narrow(const char_type* __lo, const char_type* __hi, 15726: char __dfault __attribute__((__unused__)), char* __to) const 15726: { 15726: if (__builtin_expect(__hi != __lo, true)) 15726: __builtin_memcpy(__to, __lo, __hi - __lo); 15726: return __hi; 15726: } 15726: 15726: private: 15726: void _M_narrow_init() const; 15726: void _M_widen_init() const; 15726: }; 15726: # 1193 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: template<> 15726: class ctype : public __ctype_abstract_base 15726: { 15726: public: 15726: 15726: 15726: typedef wchar_t char_type; 15726: typedef wctype_t __wmask_type; 15726: 15726: protected: 15726: __c_locale _M_c_locale_ctype; 15726: 15726: 15726: bool _M_narrow_ok; 15726: char _M_narrow[128]; 15726: wint_t _M_widen[1 + static_cast(-1)]; 15726: 15726: 15726: mask _M_bit[16]; 15726: __wmask_type _M_wmask[16]; 15726: 15726: public: 15726: 15726: 15726: static locale::id id; 15726: # 1226 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: explicit 15726: ctype(size_t __refs = 0); 15726: # 1237 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: explicit 15726: ctype(__c_locale __cloc, size_t __refs = 0); 15726: 15726: protected: 15726: __wmask_type 15726: _M_convert_to_wmask(const mask __m) const throw(); 15726: 15726: 15726: virtual 15726: ~ctype(); 15726: # 1261 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual bool 15726: do_is(mask __m, char_type __c) const; 15726: # 1280 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual const char_type* 15726: do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const; 15726: # 1298 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual const char_type* 15726: do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const; 15726: # 1316 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual const char_type* 15726: do_scan_not(mask __m, const char_type* __lo, 15726: const char_type* __hi) const; 15726: # 1333 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual char_type 15726: do_toupper(char_type __c) const; 15726: # 1350 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual const char_type* 15726: do_toupper(char_type* __lo, const char_type* __hi) const; 15726: # 1366 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual char_type 15726: do_tolower(char_type __c) const; 15726: # 1383 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual const char_type* 15726: do_tolower(char_type* __lo, const char_type* __hi) const; 15726: # 1403 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual char_type 15726: do_widen(char __c) const; 15726: # 1425 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual const char* 15726: do_widen(const char* __lo, const char* __hi, char_type* __to) const; 15726: # 1448 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual char 15726: do_narrow(char_type __c, char __dfault) const; 15726: # 1474 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual const char_type* 15726: do_narrow(const char_type* __lo, const char_type* __hi, 15726: char __dfault, char* __to) const; 15726: 15726: 15726: void 15726: _M_initialize_ctype() throw(); 15726: }; 15726: 15726: 15726: 15726: template 15726: class ctype_byname : public ctype<_CharT> 15726: { 15726: public: 15726: typedef typename ctype<_CharT>::mask mask; 15726: 15726: explicit 15726: ctype_byname(const char* __s, size_t __refs = 0); 15726: 15726: 15726: explicit 15726: ctype_byname(const string& __s, size_t __refs = 0) 15726: : ctype_byname(__s.c_str(), __refs) { } 15726: 15726: 15726: protected: 15726: virtual 15726: ~ctype_byname() { } 15726: }; 15726: 15726: 15726: template<> 15726: class ctype_byname : public ctype 15726: { 15726: public: 15726: explicit 15726: ctype_byname(const char* __s, size_t __refs = 0); 15726: 15726: 15726: explicit 15726: ctype_byname(const string& __s, size_t __refs = 0); 15726: 15726: 15726: protected: 15726: virtual 15726: ~ctype_byname(); 15726: }; 15726: 15726: 15726: template<> 15726: class ctype_byname : public ctype 15726: { 15726: public: 15726: explicit 15726: ctype_byname(const char* __s, size_t __refs = 0); 15726: 15726: 15726: explicit 15726: ctype_byname(const string& __s, size_t __refs = 0); 15726: 15726: 15726: protected: 15726: virtual 15726: ~ctype_byname(); 15726: }; 15726: 15726: 15726: 15726: } 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/ctype_inline.h" 1 3 15726: # 37 "/usr/include/arm-linux-gnueabihf/c++/13/bits/ctype_inline.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: bool 15726: ctype:: 15726: is(mask __m, char __c) const 15726: { return _M_table[static_cast(__c)] & __m; } 15726: 15726: const char* 15726: ctype:: 15726: is(const char* __low, const char* __high, mask* __vec) const 15726: { 15726: while (__low < __high) 15726: *__vec++ = _M_table[static_cast(*__low++)]; 15726: return __high; 15726: } 15726: 15726: const char* 15726: ctype:: 15726: scan_is(mask __m, const char* __low, const char* __high) const 15726: { 15726: while (__low < __high 15726: && !(_M_table[static_cast(*__low)] & __m)) 15726: ++__low; 15726: return __low; 15726: } 15726: 15726: const char* 15726: ctype:: 15726: scan_not(mask __m, const char* __low, const char* __high) const 15726: { 15726: while (__low < __high 15726: && (_M_table[static_cast(*__low)] & __m) != 0) 15726: ++__low; 15726: return __low; 15726: } 15726: 15726: 15726: } 15726: # 1547 "/usr/include/c++/13/bits/locale_facets.h" 2 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: class __num_base 15726: { 15726: public: 15726: 15726: 15726: enum 15726: { 15726: _S_ominus, 15726: _S_oplus, 15726: _S_ox, 15726: _S_oX, 15726: _S_odigits, 15726: _S_odigits_end = _S_odigits + 16, 15726: _S_oudigits = _S_odigits_end, 15726: _S_oudigits_end = _S_oudigits + 16, 15726: _S_oe = _S_odigits + 14, 15726: _S_oE = _S_oudigits + 14, 15726: _S_oend = _S_oudigits_end 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: static const char* _S_atoms_out; 15726: 15726: 15726: 15726: static const char* _S_atoms_in; 15726: 15726: enum 15726: { 15726: _S_iminus, 15726: _S_iplus, 15726: _S_ix, 15726: _S_iX, 15726: _S_izero, 15726: _S_ie = _S_izero + 14, 15726: _S_iE = _S_izero + 20, 15726: _S_iend = 26 15726: }; 15726: 15726: 15726: 15726: static void 15726: _S_format_float(const ios_base& __io, char* __fptr, char __mod) throw(); 15726: }; 15726: 15726: template 15726: struct __numpunct_cache : public locale::facet 15726: { 15726: const char* _M_grouping; 15726: size_t _M_grouping_size; 15726: bool _M_use_grouping; 15726: const _CharT* _M_truename; 15726: size_t _M_truename_size; 15726: const _CharT* _M_falsename; 15726: size_t _M_falsename_size; 15726: _CharT _M_decimal_point; 15726: _CharT _M_thousands_sep; 15726: 15726: 15726: 15726: 15726: 15726: _CharT _M_atoms_out[__num_base::_S_oend]; 15726: 15726: 15726: 15726: 15726: 15726: _CharT _M_atoms_in[__num_base::_S_iend]; 15726: 15726: bool _M_allocated; 15726: 15726: __numpunct_cache(size_t __refs = 0) 15726: : facet(__refs), _M_grouping(0), _M_grouping_size(0), 15726: _M_use_grouping(false), 15726: _M_truename(0), _M_truename_size(0), _M_falsename(0), 15726: _M_falsename_size(0), _M_decimal_point(_CharT()), 15726: _M_thousands_sep(_CharT()), _M_allocated(false) 15726: { } 15726: 15726: ~__numpunct_cache(); 15726: 15726: void 15726: _M_cache(const locale& __loc); 15726: 15726: private: 15726: __numpunct_cache& 15726: operator=(const __numpunct_cache&); 15726: 15726: explicit 15726: __numpunct_cache(const __numpunct_cache&); 15726: }; 15726: 15726: template 15726: __numpunct_cache<_CharT>::~__numpunct_cache() 15726: { 15726: if (_M_allocated) 15726: { 15726: delete [] _M_grouping; 15726: delete [] _M_truename; 15726: delete [] _M_falsename; 15726: } 15726: } 15726: 15726: namespace __cxx11 { 15726: # 1677 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: template 15726: class numpunct : public locale::facet 15726: { 15726: public: 15726: 15726: 15726: 15726: typedef _CharT char_type; 15726: typedef basic_string<_CharT> string_type; 15726: 15726: typedef __numpunct_cache<_CharT> __cache_type; 15726: 15726: protected: 15726: __cache_type* _M_data; 15726: 15726: public: 15726: 15726: static locale::id id; 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: numpunct(size_t __refs = 0) 15726: : facet(__refs), _M_data(0) 15726: { _M_initialize_numpunct(); } 15726: # 1715 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: explicit 15726: numpunct(__cache_type* __cache, size_t __refs = 0) 15726: : facet(__refs), _M_data(__cache) 15726: { _M_initialize_numpunct(); } 15726: # 1729 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: explicit 15726: numpunct(__c_locale __cloc, size_t __refs = 0) 15726: : facet(__refs), _M_data(0) 15726: { _M_initialize_numpunct(__cloc); } 15726: # 1743 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: char_type 15726: decimal_point() const 15726: { return this->do_decimal_point(); } 15726: # 1756 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: char_type 15726: thousands_sep() const 15726: { return this->do_thousands_sep(); } 15726: # 1787 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: string 15726: grouping() const 15726: { return this->do_grouping(); } 15726: # 1800 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: string_type 15726: truename() const 15726: { return this->do_truename(); } 15726: # 1813 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: string_type 15726: falsename() const 15726: { return this->do_falsename(); } 15726: 15726: protected: 15726: 15726: virtual 15726: ~numpunct(); 15726: # 1830 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual char_type 15726: do_decimal_point() const 15726: { return _M_data->_M_decimal_point; } 15726: # 1842 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual char_type 15726: do_thousands_sep() const 15726: { return _M_data->_M_thousands_sep; } 15726: # 1855 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual string 15726: do_grouping() const 15726: { return _M_data->_M_grouping; } 15726: # 1868 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual string_type 15726: do_truename() const 15726: { return _M_data->_M_truename; } 15726: # 1881 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual string_type 15726: do_falsename() const 15726: { return _M_data->_M_falsename; } 15726: 15726: 15726: void 15726: _M_initialize_numpunct(__c_locale __cloc = 0); 15726: }; 15726: 15726: template 15726: locale::id numpunct<_CharT>::id; 15726: 15726: template<> 15726: numpunct::~numpunct(); 15726: 15726: template<> 15726: void 15726: numpunct::_M_initialize_numpunct(__c_locale __cloc); 15726: 15726: 15726: template<> 15726: numpunct::~numpunct(); 15726: 15726: template<> 15726: void 15726: numpunct::_M_initialize_numpunct(__c_locale __cloc); 15726: 15726: 15726: 15726: template 15726: class numpunct_byname : public numpunct<_CharT> 15726: { 15726: public: 15726: typedef _CharT char_type; 15726: typedef basic_string<_CharT> string_type; 15726: 15726: explicit 15726: numpunct_byname(const char* __s, size_t __refs = 0) 15726: : numpunct<_CharT>(__refs) 15726: { 15726: if (__builtin_strcmp(__s, "C") != 0 15726: && __builtin_strcmp(__s, "POSIX") != 0) 15726: { 15726: __c_locale __tmp; 15726: this->_S_create_c_locale(__tmp, __s); 15726: this->_M_initialize_numpunct(__tmp); 15726: this->_S_destroy_c_locale(__tmp); 15726: } 15726: } 15726: 15726: 15726: explicit 15726: numpunct_byname(const string& __s, size_t __refs = 0) 15726: : numpunct_byname(__s.c_str(), __refs) { } 15726: 15726: 15726: protected: 15726: virtual 15726: ~numpunct_byname() { } 15726: }; 15726: 15726: } 15726: 15726: 15726: # 1959 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: template 15726: class num_get : public locale::facet 15726: { 15726: public: 15726: 15726: 15726: 15726: typedef _CharT char_type; 15726: typedef _InIter iter_type; 15726: 15726: 15726: 15726: static locale::id id; 15726: # 1980 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: explicit 15726: num_get(size_t __refs = 0) : facet(__refs) { } 15726: # 2006 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: iter_type 15726: get(iter_type __in, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, bool& __v) const 15726: { return this->do_get(__in, __end, __io, __err, __v); } 15726: # 2043 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: iter_type 15726: get(iter_type __in, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, long& __v) const 15726: { return this->do_get(__in, __end, __io, __err, __v); } 15726: 15726: iter_type 15726: get(iter_type __in, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, unsigned short& __v) const 15726: { return this->do_get(__in, __end, __io, __err, __v); } 15726: 15726: iter_type 15726: get(iter_type __in, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, unsigned int& __v) const 15726: { return this->do_get(__in, __end, __io, __err, __v); } 15726: 15726: iter_type 15726: get(iter_type __in, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, unsigned long& __v) const 15726: { return this->do_get(__in, __end, __io, __err, __v); } 15726: 15726: 15726: iter_type 15726: get(iter_type __in, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, long long& __v) const 15726: { return this->do_get(__in, __end, __io, __err, __v); } 15726: 15726: iter_type 15726: get(iter_type __in, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, unsigned long long& __v) const 15726: { return this->do_get(__in, __end, __io, __err, __v); } 15726: # 2103 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: iter_type 15726: get(iter_type __in, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, float& __v) const 15726: { return this->do_get(__in, __end, __io, __err, __v); } 15726: 15726: iter_type 15726: get(iter_type __in, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, double& __v) const 15726: { return this->do_get(__in, __end, __io, __err, __v); } 15726: 15726: iter_type 15726: get(iter_type __in, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, long double& __v) const 15726: { return this->do_get(__in, __end, __io, __err, __v); } 15726: # 2146 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: iter_type 15726: get(iter_type __in, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, void*& __v) const 15726: { return this->do_get(__in, __end, __io, __err, __v); } 15726: 15726: protected: 15726: 15726: virtual ~num_get() { } 15726: 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: iter_type 15726: _M_extract_float(iter_type, iter_type, ios_base&, ios_base::iostate&, 15726: string&) const; 15726: 15726: template 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: iter_type 15726: _M_extract_int(iter_type, iter_type, ios_base&, ios_base::iostate&, 15726: _ValueT&) const; 15726: 15726: template 15726: typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, int>::__type 15726: _M_find(const _CharT2*, size_t __len, _CharT2 __c) const 15726: { 15726: int __ret = -1; 15726: if (__len <= 10) 15726: { 15726: if (__c >= _CharT2('0') && __c < _CharT2(_CharT2('0') + __len)) 15726: __ret = __c - _CharT2('0'); 15726: } 15726: else 15726: { 15726: if (__c >= _CharT2('0') && __c <= _CharT2('9')) 15726: __ret = __c - _CharT2('0'); 15726: else if (__c >= _CharT2('a') && __c <= _CharT2('f')) 15726: __ret = 10 + (__c - _CharT2('a')); 15726: else if (__c >= _CharT2('A') && __c <= _CharT2('F')) 15726: __ret = 10 + (__c - _CharT2('A')); 15726: } 15726: return __ret; 15726: } 15726: 15726: template 15726: typename __gnu_cxx::__enable_if::__value, 15726: int>::__type 15726: _M_find(const _CharT2* __zero, size_t __len, _CharT2 __c) const 15726: { 15726: int __ret = -1; 15726: const char_type* __q = char_traits<_CharT2>::find(__zero, __len, __c); 15726: if (__q) 15726: { 15726: __ret = __q - __zero; 15726: if (__ret > 15) 15726: __ret -= 6; 15726: } 15726: return __ret; 15726: } 15726: # 2219 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual iter_type 15726: do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, bool&) const; 15726: 15726: virtual iter_type 15726: do_get(iter_type __beg, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, long& __v) const 15726: { return _M_extract_int(__beg, __end, __io, __err, __v); } 15726: 15726: virtual iter_type 15726: do_get(iter_type __beg, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, unsigned short& __v) const 15726: { return _M_extract_int(__beg, __end, __io, __err, __v); } 15726: 15726: virtual iter_type 15726: do_get(iter_type __beg, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, unsigned int& __v) const 15726: { return _M_extract_int(__beg, __end, __io, __err, __v); } 15726: 15726: virtual iter_type 15726: do_get(iter_type __beg, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, unsigned long& __v) const 15726: { return _M_extract_int(__beg, __end, __io, __err, __v); } 15726: 15726: 15726: virtual iter_type 15726: do_get(iter_type __beg, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, long long& __v) const 15726: { return _M_extract_int(__beg, __end, __io, __err, __v); } 15726: 15726: virtual iter_type 15726: do_get(iter_type __beg, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, unsigned long long& __v) const 15726: { return _M_extract_int(__beg, __end, __io, __err, __v); } 15726: 15726: 15726: virtual iter_type 15726: do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, float&) const; 15726: 15726: virtual iter_type 15726: do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, 15726: double&) const; 15726: # 2271 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual iter_type 15726: do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, 15726: long double&) const; 15726: 15726: 15726: virtual iter_type 15726: do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, void*&) const; 15726: # 2299 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: }; 15726: 15726: template 15726: locale::id num_get<_CharT, _InIter>::id; 15726: # 2317 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: template 15726: class num_put : public locale::facet 15726: { 15726: public: 15726: 15726: 15726: 15726: typedef _CharT char_type; 15726: typedef _OutIter iter_type; 15726: 15726: 15726: 15726: static locale::id id; 15726: # 2338 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: explicit 15726: num_put(size_t __refs = 0) : facet(__refs) { } 15726: # 2356 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: iter_type 15726: put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const 15726: { return this->do_put(__s, __io, __fill, __v); } 15726: # 2398 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: iter_type 15726: put(iter_type __s, ios_base& __io, char_type __fill, long __v) const 15726: { return this->do_put(__s, __io, __fill, __v); } 15726: 15726: iter_type 15726: put(iter_type __s, ios_base& __io, char_type __fill, 15726: unsigned long __v) const 15726: { return this->do_put(__s, __io, __fill, __v); } 15726: 15726: 15726: iter_type 15726: put(iter_type __s, ios_base& __io, char_type __fill, long long __v) const 15726: { return this->do_put(__s, __io, __fill, __v); } 15726: 15726: iter_type 15726: put(iter_type __s, ios_base& __io, char_type __fill, 15726: unsigned long long __v) const 15726: { return this->do_put(__s, __io, __fill, __v); } 15726: # 2461 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: iter_type 15726: put(iter_type __s, ios_base& __io, char_type __fill, double __v) const 15726: { return this->do_put(__s, __io, __fill, __v); } 15726: 15726: iter_type 15726: put(iter_type __s, ios_base& __io, char_type __fill, 15726: long double __v) const 15726: { return this->do_put(__s, __io, __fill, __v); } 15726: # 2486 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: iter_type 15726: put(iter_type __s, ios_base& __io, char_type __fill, 15726: const void* __v) const 15726: { return this->do_put(__s, __io, __fill, __v); } 15726: 15726: protected: 15726: template 15726: iter_type 15726: _M_insert_float(iter_type, ios_base& __io, char_type __fill, 15726: char __mod, _ValueT __v) const; 15726: 15726: void 15726: _M_group_float(const char* __grouping, size_t __grouping_size, 15726: char_type __sep, const char_type* __p, char_type* __new, 15726: char_type* __cs, int& __len) const; 15726: 15726: template 15726: iter_type 15726: _M_insert_int(iter_type, ios_base& __io, char_type __fill, 15726: _ValueT __v) const; 15726: 15726: void 15726: _M_group_int(const char* __grouping, size_t __grouping_size, 15726: char_type __sep, ios_base& __io, char_type* __new, 15726: char_type* __cs, int& __len) const; 15726: 15726: void 15726: _M_pad(char_type __fill, streamsize __w, ios_base& __io, 15726: char_type* __new, const char_type* __cs, int& __len) const; 15726: 15726: 15726: virtual 15726: ~num_put() { } 15726: # 2534 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: virtual iter_type 15726: do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const; 15726: 15726: virtual iter_type 15726: do_put(iter_type __s, ios_base& __io, char_type __fill, long __v) const 15726: { return _M_insert_int(__s, __io, __fill, __v); } 15726: 15726: virtual iter_type 15726: do_put(iter_type __s, ios_base& __io, char_type __fill, 15726: unsigned long __v) const 15726: { return _M_insert_int(__s, __io, __fill, __v); } 15726: 15726: 15726: virtual iter_type 15726: do_put(iter_type __s, ios_base& __io, char_type __fill, 15726: long long __v) const 15726: { return _M_insert_int(__s, __io, __fill, __v); } 15726: 15726: virtual iter_type 15726: do_put(iter_type __s, ios_base& __io, char_type __fill, 15726: unsigned long long __v) const 15726: { return _M_insert_int(__s, __io, __fill, __v); } 15726: 15726: 15726: virtual iter_type 15726: do_put(iter_type, ios_base&, char_type, double) const; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual iter_type 15726: do_put(iter_type, ios_base&, char_type, long double) const; 15726: 15726: 15726: virtual iter_type 15726: do_put(iter_type, ios_base&, char_type, const void*) const; 15726: # 2586 "/usr/include/c++/13/bits/locale_facets.h" 3 15726: }; 15726: 15726: template 15726: locale::id num_put<_CharT, _OutIter>::id; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline bool 15726: isspace(_CharT __c, const locale& __loc) 15726: { return use_facet >(__loc).is(ctype_base::space, __c); } 15726: 15726: 15726: template 15726: inline bool 15726: isprint(_CharT __c, const locale& __loc) 15726: { return use_facet >(__loc).is(ctype_base::print, __c); } 15726: 15726: 15726: template 15726: inline bool 15726: iscntrl(_CharT __c, const locale& __loc) 15726: { return use_facet >(__loc).is(ctype_base::cntrl, __c); } 15726: 15726: 15726: template 15726: inline bool 15726: isupper(_CharT __c, const locale& __loc) 15726: { return use_facet >(__loc).is(ctype_base::upper, __c); } 15726: 15726: 15726: template 15726: inline bool 15726: islower(_CharT __c, const locale& __loc) 15726: { return use_facet >(__loc).is(ctype_base::lower, __c); } 15726: 15726: 15726: template 15726: inline bool 15726: isalpha(_CharT __c, const locale& __loc) 15726: { return use_facet >(__loc).is(ctype_base::alpha, __c); } 15726: 15726: 15726: template 15726: inline bool 15726: isdigit(_CharT __c, const locale& __loc) 15726: { return use_facet >(__loc).is(ctype_base::digit, __c); } 15726: 15726: 15726: template 15726: inline bool 15726: ispunct(_CharT __c, const locale& __loc) 15726: { return use_facet >(__loc).is(ctype_base::punct, __c); } 15726: 15726: 15726: template 15726: inline bool 15726: isxdigit(_CharT __c, const locale& __loc) 15726: { return use_facet >(__loc).is(ctype_base::xdigit, __c); } 15726: 15726: 15726: template 15726: inline bool 15726: isalnum(_CharT __c, const locale& __loc) 15726: { return use_facet >(__loc).is(ctype_base::alnum, __c); } 15726: 15726: 15726: template 15726: inline bool 15726: isgraph(_CharT __c, const locale& __loc) 15726: { return use_facet >(__loc).is(ctype_base::graph, __c); } 15726: 15726: 15726: 15726: template 15726: inline bool 15726: isblank(_CharT __c, const locale& __loc) 15726: { return use_facet >(__loc).is(ctype_base::blank, __c); } 15726: 15726: 15726: 15726: template 15726: inline _CharT 15726: toupper(_CharT __c, const locale& __loc) 15726: { return use_facet >(__loc).toupper(__c); } 15726: 15726: 15726: template 15726: inline _CharT 15726: tolower(_CharT __c, const locale& __loc) 15726: { return use_facet >(__loc).tolower(__c); } 15726: 15726: 15726: } 15726: 15726: # 1 "/usr/include/c++/13/bits/locale_facets.tcc" 1 3 15726: # 33 "/usr/include/c++/13/bits/locale_facets.tcc" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/locale_facets.tcc" 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: template 15726: struct __use_cache 15726: { 15726: const _Facet* 15726: operator() (const locale& __loc) const; 15726: }; 15726: 15726: 15726: template 15726: struct __use_cache<__numpunct_cache<_CharT> > 15726: { 15726: const __numpunct_cache<_CharT>* 15726: operator() (const locale& __loc) const 15726: { 15726: const size_t __i = numpunct<_CharT>::id._M_id(); 15726: const locale::facet** __caches = __loc._M_impl->_M_caches; 15726: if (!__caches[__i]) 15726: { 15726: __numpunct_cache<_CharT>* __tmp = 0; 15726: try 15726: { 15726: __tmp = new __numpunct_cache<_CharT>; 15726: __tmp->_M_cache(__loc); 15726: } 15726: catch(...) 15726: { 15726: delete __tmp; 15726: throw; 15726: } 15726: __loc._M_impl->_M_install_cache(__tmp, __i); 15726: } 15726: return static_cast*>(__caches[__i]); 15726: } 15726: }; 15726: 15726: template 15726: void 15726: __numpunct_cache<_CharT>::_M_cache(const locale& __loc) 15726: { 15726: const numpunct<_CharT>& __np = use_facet >(__loc); 15726: 15726: char* __grouping = 0; 15726: _CharT* __truename = 0; 15726: _CharT* __falsename = 0; 15726: try 15726: { 15726: const string& __g = __np.grouping(); 15726: _M_grouping_size = __g.size(); 15726: __grouping = new char[_M_grouping_size]; 15726: __g.copy(__grouping, _M_grouping_size); 15726: _M_use_grouping = (_M_grouping_size 15726: && static_cast(__grouping[0]) > 0 15726: && (__grouping[0] 15726: != __gnu_cxx::__numeric_traits::__max)); 15726: 15726: const basic_string<_CharT>& __tn = __np.truename(); 15726: _M_truename_size = __tn.size(); 15726: __truename = new _CharT[_M_truename_size]; 15726: __tn.copy(__truename, _M_truename_size); 15726: 15726: const basic_string<_CharT>& __fn = __np.falsename(); 15726: _M_falsename_size = __fn.size(); 15726: __falsename = new _CharT[_M_falsename_size]; 15726: __fn.copy(__falsename, _M_falsename_size); 15726: 15726: _M_decimal_point = __np.decimal_point(); 15726: _M_thousands_sep = __np.thousands_sep(); 15726: 15726: const ctype<_CharT>& __ct = use_facet >(__loc); 15726: __ct.widen(__num_base::_S_atoms_out, 15726: __num_base::_S_atoms_out 15726: + __num_base::_S_oend, _M_atoms_out); 15726: __ct.widen(__num_base::_S_atoms_in, 15726: __num_base::_S_atoms_in 15726: + __num_base::_S_iend, _M_atoms_in); 15726: 15726: _M_grouping = __grouping; 15726: _M_truename = __truename; 15726: _M_falsename = __falsename; 15726: _M_allocated = true; 15726: } 15726: catch(...) 15726: { 15726: delete [] __grouping; 15726: delete [] __truename; 15726: delete [] __falsename; 15726: throw; 15726: } 15726: } 15726: # 139 "/usr/include/c++/13/bits/locale_facets.tcc" 3 15726: __attribute__ ((__pure__)) bool 15726: __verify_grouping(const char* __grouping, size_t __grouping_size, 15726: const string& __grouping_tmp) throw (); 15726: 15726: 15726: 15726: template 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: _InIter 15726: num_get<_CharT, _InIter>:: 15726: _M_extract_float(_InIter __beg, _InIter __end, ios_base& __io, 15726: ios_base::iostate& __err, string& __xtrc) const 15726: { 15726: typedef char_traits<_CharT> __traits_type; 15726: typedef __numpunct_cache<_CharT> __cache_type; 15726: __use_cache<__cache_type> __uc; 15726: const locale& __loc = __io._M_getloc(); 15726: const __cache_type* __lc = __uc(__loc); 15726: const _CharT* __lit = __lc->_M_atoms_in; 15726: char_type __c = char_type(); 15726: 15726: 15726: bool __testeof = __beg == __end; 15726: 15726: 15726: if (!__testeof) 15726: { 15726: __c = *__beg; 15726: const bool __plus = __c == __lit[__num_base::_S_iplus]; 15726: if ((__plus || __c == __lit[__num_base::_S_iminus]) 15726: && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) 15726: && !(__c == __lc->_M_decimal_point)) 15726: { 15726: __xtrc += __plus ? '+' : '-'; 15726: if (++__beg != __end) 15726: __c = *__beg; 15726: else 15726: __testeof = true; 15726: } 15726: } 15726: 15726: 15726: bool __found_mantissa = false; 15726: int __sep_pos = 0; 15726: while (!__testeof) 15726: { 15726: if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) 15726: || __c == __lc->_M_decimal_point) 15726: break; 15726: else if (__c == __lit[__num_base::_S_izero]) 15726: { 15726: if (!__found_mantissa) 15726: { 15726: __xtrc += '0'; 15726: __found_mantissa = true; 15726: } 15726: ++__sep_pos; 15726: 15726: if (++__beg != __end) 15726: __c = *__beg; 15726: else 15726: __testeof = true; 15726: } 15726: else 15726: break; 15726: } 15726: 15726: 15726: bool __found_dec = false; 15726: bool __found_sci = false; 15726: string __found_grouping; 15726: if (__lc->_M_use_grouping) 15726: __found_grouping.reserve(32); 15726: const char_type* __lit_zero = __lit + __num_base::_S_izero; 15726: 15726: if (!__lc->_M_allocated) 15726: 15726: while (!__testeof) 15726: { 15726: const int __digit = _M_find(__lit_zero, 10, __c); 15726: if (__digit != -1) 15726: { 15726: __xtrc += '0' + __digit; 15726: __found_mantissa = true; 15726: } 15726: else if (__c == __lc->_M_decimal_point 15726: && !__found_dec && !__found_sci) 15726: { 15726: __xtrc += '.'; 15726: __found_dec = true; 15726: } 15726: else if ((__c == __lit[__num_base::_S_ie] 15726: || __c == __lit[__num_base::_S_iE]) 15726: && !__found_sci && __found_mantissa) 15726: { 15726: 15726: __xtrc += 'e'; 15726: __found_sci = true; 15726: 15726: 15726: if (++__beg != __end) 15726: { 15726: __c = *__beg; 15726: const bool __plus = __c == __lit[__num_base::_S_iplus]; 15726: if (__plus || __c == __lit[__num_base::_S_iminus]) 15726: __xtrc += __plus ? '+' : '-'; 15726: else 15726: continue; 15726: } 15726: else 15726: { 15726: __testeof = true; 15726: break; 15726: } 15726: } 15726: else 15726: break; 15726: 15726: if (++__beg != __end) 15726: __c = *__beg; 15726: else 15726: __testeof = true; 15726: } 15726: else 15726: while (!__testeof) 15726: { 15726: 15726: 15726: if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) 15726: { 15726: if (!__found_dec && !__found_sci) 15726: { 15726: 15726: 15726: if (__sep_pos) 15726: { 15726: __found_grouping += static_cast(__sep_pos); 15726: __sep_pos = 0; 15726: } 15726: else 15726: { 15726: 15726: 15726: __xtrc.clear(); 15726: break; 15726: } 15726: } 15726: else 15726: break; 15726: } 15726: else if (__c == __lc->_M_decimal_point) 15726: { 15726: if (!__found_dec && !__found_sci) 15726: { 15726: 15726: 15726: 15726: if (__found_grouping.size()) 15726: __found_grouping += static_cast(__sep_pos); 15726: __xtrc += '.'; 15726: __found_dec = true; 15726: } 15726: else 15726: break; 15726: } 15726: else 15726: { 15726: const char_type* __q = 15726: __traits_type::find(__lit_zero, 10, __c); 15726: if (__q) 15726: { 15726: __xtrc += '0' + (__q - __lit_zero); 15726: __found_mantissa = true; 15726: ++__sep_pos; 15726: } 15726: else if ((__c == __lit[__num_base::_S_ie] 15726: || __c == __lit[__num_base::_S_iE]) 15726: && !__found_sci && __found_mantissa) 15726: { 15726: 15726: if (__found_grouping.size() && !__found_dec) 15726: __found_grouping += static_cast(__sep_pos); 15726: __xtrc += 'e'; 15726: __found_sci = true; 15726: 15726: 15726: if (++__beg != __end) 15726: { 15726: __c = *__beg; 15726: const bool __plus = __c == __lit[__num_base::_S_iplus]; 15726: if ((__plus || __c == __lit[__num_base::_S_iminus]) 15726: && !(__lc->_M_use_grouping 15726: && __c == __lc->_M_thousands_sep) 15726: && !(__c == __lc->_M_decimal_point)) 15726: __xtrc += __plus ? '+' : '-'; 15726: else 15726: continue; 15726: } 15726: else 15726: { 15726: __testeof = true; 15726: break; 15726: } 15726: } 15726: else 15726: break; 15726: } 15726: 15726: if (++__beg != __end) 15726: __c = *__beg; 15726: else 15726: __testeof = true; 15726: } 15726: 15726: 15726: 15726: if (__found_grouping.size()) 15726: { 15726: 15726: if (!__found_dec && !__found_sci) 15726: __found_grouping += static_cast(__sep_pos); 15726: 15726: if (!std::__verify_grouping(__lc->_M_grouping, 15726: __lc->_M_grouping_size, 15726: __found_grouping)) 15726: __err = ios_base::failbit; 15726: } 15726: 15726: return __beg; 15726: } 15726: 15726: template 15726: template 15726: __attribute ((__abi_tag__ ("cxx11"))) 15726: _InIter 15726: num_get<_CharT, _InIter>:: 15726: _M_extract_int(_InIter __beg, _InIter __end, ios_base& __io, 15726: ios_base::iostate& __err, _ValueT& __v) const 15726: { 15726: typedef char_traits<_CharT> __traits_type; 15726: using __gnu_cxx::__add_unsigned; 15726: typedef typename __add_unsigned<_ValueT>::__type __unsigned_type; 15726: typedef __numpunct_cache<_CharT> __cache_type; 15726: __use_cache<__cache_type> __uc; 15726: const locale& __loc = __io._M_getloc(); 15726: const __cache_type* __lc = __uc(__loc); 15726: const _CharT* __lit = __lc->_M_atoms_in; 15726: char_type __c = char_type(); 15726: 15726: 15726: const ios_base::fmtflags __basefield = __io.flags() 15726: & ios_base::basefield; 15726: const bool __oct = __basefield == ios_base::oct; 15726: int __base = __oct ? 8 : (__basefield == ios_base::hex ? 16 : 10); 15726: 15726: 15726: bool __testeof = __beg == __end; 15726: 15726: 15726: bool __negative = false; 15726: if (!__testeof) 15726: { 15726: __c = *__beg; 15726: __negative = __c == __lit[__num_base::_S_iminus]; 15726: if ((__negative || __c == __lit[__num_base::_S_iplus]) 15726: && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) 15726: && !(__c == __lc->_M_decimal_point)) 15726: { 15726: if (++__beg != __end) 15726: __c = *__beg; 15726: else 15726: __testeof = true; 15726: } 15726: } 15726: 15726: 15726: 15726: bool __found_zero = false; 15726: int __sep_pos = 0; 15726: while (!__testeof) 15726: { 15726: if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) 15726: || __c == __lc->_M_decimal_point) 15726: break; 15726: else if (__c == __lit[__num_base::_S_izero] 15726: && (!__found_zero || __base == 10)) 15726: { 15726: __found_zero = true; 15726: ++__sep_pos; 15726: if (__basefield == 0) 15726: __base = 8; 15726: if (__base == 8) 15726: __sep_pos = 0; 15726: } 15726: else if (__found_zero 15726: && (__c == __lit[__num_base::_S_ix] 15726: || __c == __lit[__num_base::_S_iX])) 15726: { 15726: if (__basefield == 0) 15726: __base = 16; 15726: if (__base == 16) 15726: { 15726: __found_zero = false; 15726: __sep_pos = 0; 15726: } 15726: else 15726: break; 15726: } 15726: else 15726: break; 15726: 15726: if (++__beg != __end) 15726: { 15726: __c = *__beg; 15726: if (!__found_zero) 15726: break; 15726: } 15726: else 15726: __testeof = true; 15726: } 15726: 15726: 15726: 15726: const size_t __len = (__base == 16 ? __num_base::_S_iend 15726: - __num_base::_S_izero : __base); 15726: 15726: 15726: typedef __gnu_cxx::__numeric_traits<_ValueT> __num_traits; 15726: string __found_grouping; 15726: if (__lc->_M_use_grouping) 15726: __found_grouping.reserve(32); 15726: bool __testfail = false; 15726: bool __testoverflow = false; 15726: const __unsigned_type __max = 15726: (__negative && __num_traits::__is_signed) 15726: ? -static_cast<__unsigned_type>(__num_traits::__min) 15726: : __num_traits::__max; 15726: const __unsigned_type __smax = __max / __base; 15726: __unsigned_type __result = 0; 15726: int __digit = 0; 15726: const char_type* __lit_zero = __lit + __num_base::_S_izero; 15726: 15726: if (!__lc->_M_allocated) 15726: 15726: while (!__testeof) 15726: { 15726: __digit = _M_find(__lit_zero, __len, __c); 15726: if (__digit == -1) 15726: break; 15726: 15726: if (__result > __smax) 15726: __testoverflow = true; 15726: else 15726: { 15726: __result *= __base; 15726: __testoverflow |= __result > __max - __digit; 15726: __result += __digit; 15726: ++__sep_pos; 15726: } 15726: 15726: if (++__beg != __end) 15726: __c = *__beg; 15726: else 15726: __testeof = true; 15726: } 15726: else 15726: while (!__testeof) 15726: { 15726: 15726: 15726: if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) 15726: { 15726: 15726: 15726: if (__sep_pos) 15726: { 15726: __found_grouping += static_cast(__sep_pos); 15726: __sep_pos = 0; 15726: } 15726: else 15726: { 15726: __testfail = true; 15726: break; 15726: } 15726: } 15726: else if (__c == __lc->_M_decimal_point) 15726: break; 15726: else 15726: { 15726: const char_type* __q = 15726: __traits_type::find(__lit_zero, __len, __c); 15726: if (!__q) 15726: break; 15726: 15726: __digit = __q - __lit_zero; 15726: if (__digit > 15) 15726: __digit -= 6; 15726: if (__result > __smax) 15726: __testoverflow = true; 15726: else 15726: { 15726: __result *= __base; 15726: __testoverflow |= __result > __max - __digit; 15726: __result += __digit; 15726: ++__sep_pos; 15726: } 15726: } 15726: 15726: if (++__beg != __end) 15726: __c = *__beg; 15726: else 15726: __testeof = true; 15726: } 15726: 15726: 15726: 15726: if (__found_grouping.size()) 15726: { 15726: 15726: __found_grouping += static_cast(__sep_pos); 15726: 15726: if (!std::__verify_grouping(__lc->_M_grouping, 15726: __lc->_M_grouping_size, 15726: __found_grouping)) 15726: __err = ios_base::failbit; 15726: } 15726: 15726: 15726: 15726: if ((!__sep_pos && !__found_zero && !__found_grouping.size()) 15726: || __testfail) 15726: { 15726: __v = 0; 15726: __err = ios_base::failbit; 15726: } 15726: else if (__testoverflow) 15726: { 15726: if (__negative && __num_traits::__is_signed) 15726: __v = __num_traits::__min; 15726: else 15726: __v = __num_traits::__max; 15726: __err = ios_base::failbit; 15726: } 15726: else 15726: __v = __negative ? -__result : __result; 15726: 15726: if (__testeof) 15726: __err |= ios_base::eofbit; 15726: return __beg; 15726: } 15726: 15726: 15726: 15726: template 15726: _InIter 15726: num_get<_CharT, _InIter>:: 15726: do_get(iter_type __beg, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, bool& __v) const 15726: { 15726: if (!(__io.flags() & ios_base::boolalpha)) 15726: { 15726: 15726: 15726: 15726: long __l = -1; 15726: __beg = _M_extract_int(__beg, __end, __io, __err, __l); 15726: if (__l == 0 || __l == 1) 15726: __v = bool(__l); 15726: else 15726: { 15726: 15726: 15726: __v = true; 15726: __err = ios_base::failbit; 15726: if (__beg == __end) 15726: __err |= ios_base::eofbit; 15726: } 15726: } 15726: else 15726: { 15726: 15726: typedef __numpunct_cache<_CharT> __cache_type; 15726: __use_cache<__cache_type> __uc; 15726: const locale& __loc = __io._M_getloc(); 15726: const __cache_type* __lc = __uc(__loc); 15726: 15726: bool __testf = true; 15726: bool __testt = true; 15726: bool __donef = __lc->_M_falsename_size == 0; 15726: bool __donet = __lc->_M_truename_size == 0; 15726: bool __testeof = false; 15726: size_t __n = 0; 15726: while (!__donef || !__donet) 15726: { 15726: if (__beg == __end) 15726: { 15726: __testeof = true; 15726: break; 15726: } 15726: 15726: const char_type __c = *__beg; 15726: 15726: if (!__donef) 15726: __testf = __c == __lc->_M_falsename[__n]; 15726: 15726: if (!__testf && __donet) 15726: break; 15726: 15726: if (!__donet) 15726: __testt = __c == __lc->_M_truename[__n]; 15726: 15726: if (!__testt && __donef) 15726: break; 15726: 15726: if (!__testt && !__testf) 15726: break; 15726: 15726: ++__n; 15726: ++__beg; 15726: 15726: __donef = !__testf || __n >= __lc->_M_falsename_size; 15726: __donet = !__testt || __n >= __lc->_M_truename_size; 15726: } 15726: if (__testf && __n == __lc->_M_falsename_size && __n) 15726: { 15726: __v = false; 15726: if (__testt && __n == __lc->_M_truename_size) 15726: __err = ios_base::failbit; 15726: else 15726: __err = __testeof ? ios_base::eofbit : ios_base::goodbit; 15726: } 15726: else if (__testt && __n == __lc->_M_truename_size && __n) 15726: { 15726: __v = true; 15726: __err = __testeof ? ios_base::eofbit : ios_base::goodbit; 15726: } 15726: else 15726: { 15726: 15726: 15726: __v = false; 15726: __err = ios_base::failbit; 15726: if (__testeof) 15726: __err |= ios_base::eofbit; 15726: } 15726: } 15726: return __beg; 15726: } 15726: 15726: template 15726: _InIter 15726: num_get<_CharT, _InIter>:: 15726: do_get(iter_type __beg, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, float& __v) const 15726: { 15726: string __xtrc; 15726: __xtrc.reserve(32); 15726: __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); 15726: std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); 15726: if (__beg == __end) 15726: __err |= ios_base::eofbit; 15726: return __beg; 15726: } 15726: 15726: template 15726: _InIter 15726: num_get<_CharT, _InIter>:: 15726: do_get(iter_type __beg, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, double& __v) const 15726: { 15726: string __xtrc; 15726: __xtrc.reserve(32); 15726: __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); 15726: std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); 15726: if (__beg == __end) 15726: __err |= ios_base::eofbit; 15726: return __beg; 15726: } 15726: # 735 "/usr/include/c++/13/bits/locale_facets.tcc" 3 15726: template 15726: _InIter 15726: num_get<_CharT, _InIter>:: 15726: do_get(iter_type __beg, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, long double& __v) const 15726: { 15726: string __xtrc; 15726: __xtrc.reserve(32); 15726: __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); 15726: std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); 15726: if (__beg == __end) 15726: __err |= ios_base::eofbit; 15726: return __beg; 15726: } 15726: 15726: template 15726: _InIter 15726: num_get<_CharT, _InIter>:: 15726: do_get(iter_type __beg, iter_type __end, ios_base& __io, 15726: ios_base::iostate& __err, void*& __v) const 15726: { 15726: 15726: typedef ios_base::fmtflags fmtflags; 15726: const fmtflags __fmt = __io.flags(); 15726: __io.flags((__fmt & ~ios_base::basefield) | ios_base::hex); 15726: 15726: typedef __gnu_cxx::__conditional_type<(sizeof(void*) 15726: <= sizeof(unsigned long)), 15726: unsigned long, unsigned long long>::__type _UIntPtrType; 15726: 15726: _UIntPtrType __ul; 15726: __beg = _M_extract_int(__beg, __end, __io, __err, __ul); 15726: 15726: 15726: __io.flags(__fmt); 15726: 15726: __v = reinterpret_cast(__ul); 15726: return __beg; 15726: } 15726: # 795 "/usr/include/c++/13/bits/locale_facets.tcc" 3 15726: template 15726: void 15726: num_put<_CharT, _OutIter>:: 15726: _M_pad(_CharT __fill, streamsize __w, ios_base& __io, 15726: _CharT* __new, const _CharT* __cs, int& __len) const 15726: { 15726: 15726: 15726: __pad<_CharT, char_traits<_CharT> >::_S_pad(__io, __fill, __new, 15726: __cs, __w, __len); 15726: __len = static_cast(__w); 15726: } 15726: 15726: 15726: 15726: template 15726: int 15726: __int_to_char(_CharT* __bufend, _ValueT __v, const _CharT* __lit, 15726: ios_base::fmtflags __flags, bool __dec) 15726: { 15726: _CharT* __buf = __bufend; 15726: if (__builtin_expect(__dec, true)) 15726: { 15726: 15726: do 15726: { 15726: *--__buf = __lit[(__v % 10) + __num_base::_S_odigits]; 15726: __v /= 10; 15726: } 15726: while (__v != 0); 15726: } 15726: else if ((__flags & ios_base::basefield) == ios_base::oct) 15726: { 15726: 15726: do 15726: { 15726: *--__buf = __lit[(__v & 0x7) + __num_base::_S_odigits]; 15726: __v >>= 3; 15726: } 15726: while (__v != 0); 15726: } 15726: else 15726: { 15726: 15726: const bool __uppercase = __flags & ios_base::uppercase; 15726: const int __case_offset = __uppercase ? __num_base::_S_oudigits 15726: : __num_base::_S_odigits; 15726: do 15726: { 15726: *--__buf = __lit[(__v & 0xf) + __case_offset]; 15726: __v >>= 4; 15726: } 15726: while (__v != 0); 15726: } 15726: return __bufend - __buf; 15726: } 15726: 15726: 15726: 15726: template 15726: void 15726: num_put<_CharT, _OutIter>:: 15726: _M_group_int(const char* __grouping, size_t __grouping_size, _CharT __sep, 15726: ios_base&, _CharT* __new, _CharT* __cs, int& __len) const 15726: { 15726: _CharT* __p = std::__add_grouping(__new, __sep, __grouping, 15726: __grouping_size, __cs, __cs + __len); 15726: __len = __p - __new; 15726: } 15726: 15726: template 15726: template 15726: _OutIter 15726: num_put<_CharT, _OutIter>:: 15726: _M_insert_int(_OutIter __s, ios_base& __io, _CharT __fill, 15726: _ValueT __v) const 15726: { 15726: using __gnu_cxx::__add_unsigned; 15726: typedef typename __add_unsigned<_ValueT>::__type __unsigned_type; 15726: typedef __numpunct_cache<_CharT> __cache_type; 15726: __use_cache<__cache_type> __uc; 15726: const locale& __loc = __io._M_getloc(); 15726: const __cache_type* __lc = __uc(__loc); 15726: const _CharT* __lit = __lc->_M_atoms_out; 15726: const ios_base::fmtflags __flags = __io.flags(); 15726: 15726: 15726: const int __ilen = 5 * sizeof(_ValueT); 15726: _CharT* __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) 15726: * __ilen)); 15726: 15726: 15726: 15726: const ios_base::fmtflags __basefield = __flags & ios_base::basefield; 15726: const bool __dec = (__basefield != ios_base::oct 15726: && __basefield != ios_base::hex); 15726: const __unsigned_type __u = ((__v > 0 || !__dec) 15726: ? __unsigned_type(__v) 15726: : -__unsigned_type(__v)); 15726: int __len = __int_to_char(__cs + __ilen, __u, __lit, __flags, __dec); 15726: __cs += __ilen - __len; 15726: 15726: 15726: if (__lc->_M_use_grouping) 15726: { 15726: 15726: 15726: _CharT* __cs2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) 15726: * (__len + 1) 15726: * 2)); 15726: _M_group_int(__lc->_M_grouping, __lc->_M_grouping_size, 15726: __lc->_M_thousands_sep, __io, __cs2 + 2, __cs, __len); 15726: __cs = __cs2 + 2; 15726: } 15726: 15726: 15726: if (__builtin_expect(__dec, true)) 15726: { 15726: 15726: if (__v >= 0) 15726: { 15726: if (bool(__flags & ios_base::showpos) 15726: && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed) 15726: *--__cs = __lit[__num_base::_S_oplus], ++__len; 15726: } 15726: else 15726: *--__cs = __lit[__num_base::_S_ominus], ++__len; 15726: } 15726: else if (bool(__flags & ios_base::showbase) && __v) 15726: { 15726: if (__basefield == ios_base::oct) 15726: *--__cs = __lit[__num_base::_S_odigits], ++__len; 15726: else 15726: { 15726: 15726: const bool __uppercase = __flags & ios_base::uppercase; 15726: *--__cs = __lit[__num_base::_S_ox + __uppercase]; 15726: 15726: *--__cs = __lit[__num_base::_S_odigits]; 15726: __len += 2; 15726: } 15726: } 15726: 15726: 15726: const streamsize __w = __io.width(); 15726: if (__w > static_cast(__len)) 15726: { 15726: _CharT* __cs3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) 15726: * __w)); 15726: _M_pad(__fill, __w, __io, __cs3, __cs, __len); 15726: __cs = __cs3; 15726: } 15726: __io.width(0); 15726: 15726: 15726: 15726: return std::__write(__s, __cs, __len); 15726: } 15726: 15726: template 15726: void 15726: num_put<_CharT, _OutIter>:: 15726: _M_group_float(const char* __grouping, size_t __grouping_size, 15726: _CharT __sep, const _CharT* __p, _CharT* __new, 15726: _CharT* __cs, int& __len) const 15726: { 15726: 15726: 15726: 15726: const int __declen = __p ? __p - __cs : __len; 15726: _CharT* __p2 = std::__add_grouping(__new, __sep, __grouping, 15726: __grouping_size, 15726: __cs, __cs + __declen); 15726: 15726: 15726: int __newlen = __p2 - __new; 15726: if (__p) 15726: { 15726: char_traits<_CharT>::copy(__p2, __p, __len - __declen); 15726: __newlen += __len - __declen; 15726: } 15726: __len = __newlen; 15726: } 15726: # 989 "/usr/include/c++/13/bits/locale_facets.tcc" 3 15726: template 15726: template 15726: _OutIter 15726: num_put<_CharT, _OutIter>:: 15726: _M_insert_float(_OutIter __s, ios_base& __io, _CharT __fill, char __mod, 15726: _ValueT __v) const 15726: { 15726: typedef __numpunct_cache<_CharT> __cache_type; 15726: __use_cache<__cache_type> __uc; 15726: const locale& __loc = __io._M_getloc(); 15726: const __cache_type* __lc = __uc(__loc); 15726: 15726: 15726: const streamsize __prec = __io.precision() < 0 ? 6 : __io.precision(); 15726: 15726: const int __max_digits = 15726: __gnu_cxx::__numeric_traits<_ValueT>::__digits10; 15726: 15726: 15726: int __len; 15726: 15726: char __fbuf[16]; 15726: __num_base::_S_format_float(__io, __fbuf, __mod); 15726: 15726: 15726: 15726: const bool __use_prec = 15726: (__io.flags() & ios_base::floatfield) != ios_base::floatfield; 15726: 15726: 15726: 15726: int __cs_size = __max_digits * 3; 15726: char* __cs = static_cast(__builtin_alloca(__cs_size)); 15726: if (__use_prec) 15726: __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, 15726: __fbuf, __prec, __v); 15726: else 15726: __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, 15726: __fbuf, __v); 15726: 15726: 15726: if (__len >= __cs_size) 15726: { 15726: __cs_size = __len + 1; 15726: __cs = static_cast(__builtin_alloca(__cs_size)); 15726: if (__use_prec) 15726: __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, 15726: __fbuf, __prec, __v); 15726: else 15726: __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, 15726: __fbuf, __v); 15726: } 15726: # 1062 "/usr/include/c++/13/bits/locale_facets.tcc" 3 15726: const ctype<_CharT>& __ctype = use_facet >(__loc); 15726: 15726: _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) 15726: * __len)); 15726: __ctype.widen(__cs, __cs + __len, __ws); 15726: 15726: 15726: _CharT* __wp = 0; 15726: const char* __p = char_traits::find(__cs, __len, '.'); 15726: if (__p) 15726: { 15726: __wp = __ws + (__p - __cs); 15726: *__wp = __lc->_M_decimal_point; 15726: } 15726: 15726: 15726: 15726: 15726: if (__lc->_M_use_grouping 15726: && (__wp || __len < 3 || (__cs[1] <= '9' && __cs[2] <= '9' 15726: && __cs[1] >= '0' && __cs[2] >= '0'))) 15726: { 15726: 15726: 15726: _CharT* __ws2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) 15726: * __len * 2)); 15726: 15726: streamsize __off = 0; 15726: if (__cs[0] == '-' || __cs[0] == '+') 15726: { 15726: __off = 1; 15726: __ws2[0] = __ws[0]; 15726: __len -= 1; 15726: } 15726: 15726: _M_group_float(__lc->_M_grouping, __lc->_M_grouping_size, 15726: __lc->_M_thousands_sep, __wp, __ws2 + __off, 15726: __ws + __off, __len); 15726: __len += __off; 15726: 15726: __ws = __ws2; 15726: } 15726: 15726: 15726: const streamsize __w = __io.width(); 15726: if (__w > static_cast(__len)) 15726: { 15726: _CharT* __ws3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) 15726: * __w)); 15726: _M_pad(__fill, __w, __io, __ws3, __ws, __len); 15726: __ws = __ws3; 15726: } 15726: __io.width(0); 15726: 15726: 15726: 15726: return std::__write(__s, __ws, __len); 15726: } 15726: 15726: template 15726: _OutIter 15726: num_put<_CharT, _OutIter>:: 15726: do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const 15726: { 15726: const ios_base::fmtflags __flags = __io.flags(); 15726: if ((__flags & ios_base::boolalpha) == 0) 15726: { 15726: const long __l = __v; 15726: __s = _M_insert_int(__s, __io, __fill, __l); 15726: } 15726: else 15726: { 15726: typedef __numpunct_cache<_CharT> __cache_type; 15726: __use_cache<__cache_type> __uc; 15726: const locale& __loc = __io._M_getloc(); 15726: const __cache_type* __lc = __uc(__loc); 15726: 15726: const _CharT* __name = __v ? __lc->_M_truename 15726: : __lc->_M_falsename; 15726: int __len = __v ? __lc->_M_truename_size 15726: : __lc->_M_falsename_size; 15726: 15726: const streamsize __w = __io.width(); 15726: if (__w > static_cast(__len)) 15726: { 15726: const streamsize __plen = __w - __len; 15726: _CharT* __ps 15726: = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) 15726: * __plen)); 15726: 15726: char_traits<_CharT>::assign(__ps, __plen, __fill); 15726: __io.width(0); 15726: 15726: if ((__flags & ios_base::adjustfield) == ios_base::left) 15726: { 15726: __s = std::__write(__s, __name, __len); 15726: __s = std::__write(__s, __ps, __plen); 15726: } 15726: else 15726: { 15726: __s = std::__write(__s, __ps, __plen); 15726: __s = std::__write(__s, __name, __len); 15726: } 15726: return __s; 15726: } 15726: __io.width(0); 15726: __s = std::__write(__s, __name, __len); 15726: } 15726: return __s; 15726: } 15726: 15726: template 15726: _OutIter 15726: num_put<_CharT, _OutIter>:: 15726: do_put(iter_type __s, ios_base& __io, char_type __fill, double __v) const 15726: { return _M_insert_float(__s, __io, __fill, char(), __v); } 15726: # 1187 "/usr/include/c++/13/bits/locale_facets.tcc" 3 15726: template 15726: _OutIter 15726: num_put<_CharT, _OutIter>:: 15726: do_put(iter_type __s, ios_base& __io, char_type __fill, 15726: long double __v) const 15726: { return _M_insert_float(__s, __io, __fill, 'L', __v); } 15726: 15726: template 15726: _OutIter 15726: num_put<_CharT, _OutIter>:: 15726: do_put(iter_type __s, ios_base& __io, char_type __fill, 15726: const void* __v) const 15726: { 15726: const ios_base::fmtflags __flags = __io.flags(); 15726: const ios_base::fmtflags __fmt = ~(ios_base::basefield 15726: | ios_base::uppercase); 15726: __io.flags((__flags & __fmt) | (ios_base::hex | ios_base::showbase)); 15726: 15726: typedef __gnu_cxx::__conditional_type<(sizeof(const void*) 15726: <= sizeof(unsigned long)), 15726: unsigned long, unsigned long long>::__type _UIntPtrType; 15726: 15726: __s = _M_insert_int(__s, __io, __fill, 15726: reinterpret_cast<_UIntPtrType>(__v)); 15726: __io.flags(__flags); 15726: return __s; 15726: } 15726: # 1224 "/usr/include/c++/13/bits/locale_facets.tcc" 3 15726: 15726: # 1233 "/usr/include/c++/13/bits/locale_facets.tcc" 3 15726: template 15726: void 15726: __pad<_CharT, _Traits>::_S_pad(ios_base& __io, _CharT __fill, 15726: _CharT* __news, const _CharT* __olds, 15726: streamsize __newlen, streamsize __oldlen) 15726: { 15726: const size_t __plen = static_cast(__newlen - __oldlen); 15726: const ios_base::fmtflags __adjust = __io.flags() & ios_base::adjustfield; 15726: 15726: 15726: if (__adjust == ios_base::left) 15726: { 15726: _Traits::copy(__news, __olds, __oldlen); 15726: _Traits::assign(__news + __oldlen, __plen, __fill); 15726: return; 15726: } 15726: 15726: size_t __mod = 0; 15726: if (__adjust == ios_base::internal) 15726: { 15726: 15726: 15726: 15726: const locale& __loc = __io._M_getloc(); 15726: const ctype<_CharT>& __ctype = use_facet >(__loc); 15726: 15726: if (__ctype.widen('-') == __olds[0] 15726: || __ctype.widen('+') == __olds[0]) 15726: { 15726: __news[0] = __olds[0]; 15726: __mod = 1; 15726: ++__news; 15726: } 15726: else if (__ctype.widen('0') == __olds[0] 15726: && __oldlen > 1 15726: && (__ctype.widen('x') == __olds[1] 15726: || __ctype.widen('X') == __olds[1])) 15726: { 15726: __news[0] = __olds[0]; 15726: __news[1] = __olds[1]; 15726: __mod = 2; 15726: __news += 2; 15726: } 15726: 15726: } 15726: _Traits::assign(__news, __plen, __fill); 15726: _Traits::copy(__news + __plen, __olds + __mod, __oldlen - __mod); 15726: } 15726: 15726: template 15726: _CharT* 15726: __add_grouping(_CharT* __s, _CharT __sep, 15726: const char* __gbeg, size_t __gsize, 15726: const _CharT* __first, const _CharT* __last) 15726: { 15726: size_t __idx = 0; 15726: size_t __ctr = 0; 15726: 15726: while (__last - __first > __gbeg[__idx] 15726: && static_cast(__gbeg[__idx]) > 0 15726: && __gbeg[__idx] != __gnu_cxx::__numeric_traits::__max) 15726: { 15726: __last -= __gbeg[__idx]; 15726: __idx < __gsize - 1 ? ++__idx : ++__ctr; 15726: } 15726: 15726: while (__first != __last) 15726: *__s++ = *__first++; 15726: 15726: while (__ctr--) 15726: { 15726: *__s++ = __sep; 15726: for (char __i = __gbeg[__idx]; __i > 0; --__i) 15726: *__s++ = *__first++; 15726: } 15726: 15726: while (__idx--) 15726: { 15726: *__s++ = __sep; 15726: for (char __i = __gbeg[__idx]; __i > 0; --__i) 15726: *__s++ = *__first++; 15726: } 15726: 15726: return __s; 15726: } 15726: 15726: 15726: 15726: 15726: extern template class __cxx11:: numpunct; 15726: extern template class __cxx11:: numpunct_byname; 15726: extern template class num_get; 15726: extern template class num_put; 15726: extern template class ctype_byname; 15726: 15726: extern template 15726: const ctype* 15726: __try_use_facet >(const locale&) noexcept; 15726: 15726: extern template 15726: const numpunct* 15726: __try_use_facet >(const locale&) noexcept; 15726: 15726: extern template 15726: const num_put* 15726: __try_use_facet >(const locale&) noexcept; 15726: 15726: extern template 15726: const num_get* 15726: __try_use_facet >(const locale&) noexcept; 15726: 15726: extern template 15726: const ctype& 15726: use_facet >(const locale&); 15726: 15726: extern template 15726: const numpunct& 15726: use_facet >(const locale&); 15726: 15726: extern template 15726: const num_put& 15726: use_facet >(const locale&); 15726: 15726: extern template 15726: const num_get& 15726: use_facet >(const locale&); 15726: 15726: extern template 15726: bool 15726: has_facet >(const locale&); 15726: 15726: extern template 15726: bool 15726: has_facet >(const locale&); 15726: 15726: extern template 15726: bool 15726: has_facet >(const locale&); 15726: 15726: extern template 15726: bool 15726: has_facet >(const locale&); 15726: 15726: 15726: extern template class __cxx11:: numpunct; 15726: extern template class __cxx11:: numpunct_byname; 15726: extern template class num_get; 15726: extern template class num_put; 15726: extern template class ctype_byname; 15726: 15726: extern template 15726: const ctype* 15726: __try_use_facet >(const locale&) noexcept; 15726: 15726: extern template 15726: const numpunct* 15726: __try_use_facet >(const locale&) noexcept; 15726: 15726: extern template 15726: const num_put* 15726: __try_use_facet >(const locale&) noexcept; 15726: 15726: extern template 15726: const num_get* 15726: __try_use_facet >(const locale&) noexcept; 15726: 15726: extern template 15726: const ctype& 15726: use_facet >(const locale&); 15726: 15726: extern template 15726: const numpunct& 15726: use_facet >(const locale&); 15726: 15726: extern template 15726: const num_put& 15726: use_facet >(const locale&); 15726: 15726: extern template 15726: const num_get& 15726: use_facet >(const locale&); 15726: 15726: extern template 15726: bool 15726: has_facet >(const locale&); 15726: 15726: extern template 15726: bool 15726: has_facet >(const locale&); 15726: 15726: extern template 15726: bool 15726: has_facet >(const locale&); 15726: 15726: extern template 15726: bool 15726: has_facet >(const locale&); 15726: 15726: 15726: 15726: 15726: } 15726: # 2688 "/usr/include/c++/13/bits/locale_facets.h" 2 3 15726: # 38 "/usr/include/c++/13/bits/basic_ios.h" 2 3 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: template 15726: inline const _Facet& 15726: __check_facet(const _Facet* __f) 15726: { 15726: if (!__f) 15726: __throw_bad_cast(); 15726: return *__f; 15726: } 15726: # 66 "/usr/include/c++/13/bits/basic_ios.h" 3 15726: template 15726: class basic_ios : public ios_base 15726: { 15726: public: 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef _CharT char_type; 15726: typedef typename _Traits::int_type int_type; 15726: typedef typename _Traits::pos_type pos_type; 15726: typedef typename _Traits::off_type off_type; 15726: typedef _Traits traits_type; 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef ctype<_CharT> __ctype_type; 15726: typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> > 15726: __num_put_type; 15726: typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> > 15726: __num_get_type; 15726: 15726: 15726: 15726: protected: 15726: basic_ostream<_CharT, _Traits>* _M_tie; 15726: mutable char_type _M_fill; 15726: mutable bool _M_fill_init; 15726: basic_streambuf<_CharT, _Traits>* _M_streambuf; 15726: 15726: 15726: const __ctype_type* _M_ctype; 15726: 15726: const __num_put_type* _M_num_put; 15726: 15726: const __num_get_type* _M_num_get; 15726: 15726: public: 15726: # 117 "/usr/include/c++/13/bits/basic_ios.h" 3 15726: explicit operator bool() const 15726: { return !this->fail(); } 15726: 15726: 15726: 15726: 15726: 15726: bool 15726: operator!() const 15726: { return this->fail(); } 15726: # 136 "/usr/include/c++/13/bits/basic_ios.h" 3 15726: iostate 15726: rdstate() const 15726: { return _M_streambuf_state; } 15726: # 147 "/usr/include/c++/13/bits/basic_ios.h" 3 15726: void 15726: clear(iostate __state = goodbit); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: setstate(iostate __state) 15726: { this->clear(this->rdstate() | __state); } 15726: 15726: 15726: 15726: 15726: void 15726: _M_setstate(iostate __state) 15726: { 15726: 15726: 15726: _M_streambuf_state |= __state; 15726: if (this->exceptions() & __state) 15726: throw; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool 15726: good() const 15726: { return this->rdstate() == 0; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool 15726: eof() const 15726: { return (this->rdstate() & eofbit) != 0; } 15726: # 200 "/usr/include/c++/13/bits/basic_ios.h" 3 15726: bool 15726: fail() const 15726: { return (this->rdstate() & (badbit | failbit)) != 0; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool 15726: bad() const 15726: { return (this->rdstate() & badbit) != 0; } 15726: # 221 "/usr/include/c++/13/bits/basic_ios.h" 3 15726: iostate 15726: exceptions() const 15726: { return _M_exception; } 15726: # 256 "/usr/include/c++/13/bits/basic_ios.h" 3 15726: void 15726: exceptions(iostate __except) 15726: { 15726: _M_exception = __except; 15726: this->clear(_M_streambuf_state); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: basic_ios(basic_streambuf<_CharT, _Traits>* __sb) 15726: : ios_base(), _M_tie(0), _M_fill(), _M_fill_init(false), _M_streambuf(0), 15726: _M_ctype(0), _M_num_put(0), _M_num_get(0) 15726: { this->init(__sb); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual 15726: ~basic_ios() { } 15726: # 294 "/usr/include/c++/13/bits/basic_ios.h" 3 15726: basic_ostream<_CharT, _Traits>* 15726: tie() const 15726: { return _M_tie; } 15726: # 306 "/usr/include/c++/13/bits/basic_ios.h" 3 15726: basic_ostream<_CharT, _Traits>* 15726: tie(basic_ostream<_CharT, _Traits>* __tiestr) 15726: { 15726: basic_ostream<_CharT, _Traits>* __old = _M_tie; 15726: _M_tie = __tiestr; 15726: return __old; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: basic_streambuf<_CharT, _Traits>* 15726: rdbuf() const 15726: { return _M_streambuf; } 15726: # 346 "/usr/include/c++/13/bits/basic_ios.h" 3 15726: basic_streambuf<_CharT, _Traits>* 15726: rdbuf(basic_streambuf<_CharT, _Traits>* __sb); 15726: # 360 "/usr/include/c++/13/bits/basic_ios.h" 3 15726: basic_ios& 15726: copyfmt(const basic_ios& __rhs); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: char_type 15726: fill() const 15726: { 15726: if (!_M_fill_init) 15726: { 15726: _M_fill = this->widen(' '); 15726: _M_fill_init = true; 15726: } 15726: return _M_fill; 15726: } 15726: # 389 "/usr/include/c++/13/bits/basic_ios.h" 3 15726: char_type 15726: fill(char_type __ch) 15726: { 15726: char_type __old = this->fill(); 15726: _M_fill = __ch; 15726: return __old; 15726: } 15726: # 409 "/usr/include/c++/13/bits/basic_ios.h" 3 15726: locale 15726: imbue(const locale& __loc); 15726: # 429 "/usr/include/c++/13/bits/basic_ios.h" 3 15726: char 15726: narrow(char_type __c, char __dfault) const 15726: { return __check_facet(_M_ctype).narrow(__c, __dfault); } 15726: # 448 "/usr/include/c++/13/bits/basic_ios.h" 3 15726: char_type 15726: widen(char __c) const 15726: { return __check_facet(_M_ctype).widen(__c); } 15726: 15726: protected: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: basic_ios() 15726: : ios_base(), _M_tie(0), _M_fill(char_type()), _M_fill_init(false), 15726: _M_streambuf(0), _M_ctype(0), _M_num_put(0), _M_num_get(0) 15726: { } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: init(basic_streambuf<_CharT, _Traits>* __sb); 15726: 15726: 15726: basic_ios(const basic_ios&) = delete; 15726: basic_ios& operator=(const basic_ios&) = delete; 15726: 15726: void 15726: move(basic_ios& __rhs) 15726: { 15726: ios_base::_M_move(__rhs); 15726: _M_cache_locale(_M_ios_locale); 15726: this->tie(__rhs.tie(nullptr)); 15726: _M_fill = __rhs._M_fill; 15726: _M_fill_init = __rhs._M_fill_init; 15726: _M_streambuf = nullptr; 15726: } 15726: 15726: void 15726: move(basic_ios&& __rhs) 15726: { this->move(__rhs); } 15726: 15726: void 15726: swap(basic_ios& __rhs) noexcept 15726: { 15726: ios_base::_M_swap(__rhs); 15726: _M_cache_locale(_M_ios_locale); 15726: __rhs._M_cache_locale(__rhs._M_ios_locale); 15726: std::swap(_M_tie, __rhs._M_tie); 15726: std::swap(_M_fill, __rhs._M_fill); 15726: std::swap(_M_fill_init, __rhs._M_fill_init); 15726: } 15726: 15726: void 15726: set_rdbuf(basic_streambuf<_CharT, _Traits>* __sb) 15726: { _M_streambuf = __sb; } 15726: 15726: 15726: void 15726: _M_cache_locale(const locale& __loc); 15726: }; 15726: 15726: 15726: } 15726: 15726: # 1 "/usr/include/c++/13/bits/basic_ios.tcc" 1 3 15726: # 33 "/usr/include/c++/13/bits/basic_ios.tcc" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/basic_ios.tcc" 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: template 15726: void 15726: basic_ios<_CharT, _Traits>::clear(iostate __state) 15726: { 15726: if (this->rdbuf()) 15726: _M_streambuf_state = __state; 15726: else 15726: _M_streambuf_state = __state | badbit; 15726: if (this->exceptions() & this->rdstate()) 15726: __throw_ios_failure(("basic_ios::clear")); 15726: } 15726: 15726: template 15726: basic_streambuf<_CharT, _Traits>* 15726: basic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<_CharT, _Traits>* __sb) 15726: { 15726: basic_streambuf<_CharT, _Traits>* __old = _M_streambuf; 15726: _M_streambuf = __sb; 15726: this->clear(); 15726: return __old; 15726: } 15726: 15726: template 15726: basic_ios<_CharT, _Traits>& 15726: basic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs) 15726: { 15726: 15726: 15726: if (this != std::__addressof(__rhs)) 15726: { 15726: 15726: 15726: 15726: 15726: _Words* __words = (__rhs._M_word_size <= _S_local_word_size) ? 15726: _M_local_word : new _Words[__rhs._M_word_size]; 15726: 15726: 15726: _Callback_list* __cb = __rhs._M_callbacks; 15726: if (__cb) 15726: __cb->_M_add_reference(); 15726: _M_call_callbacks(erase_event); 15726: if (_M_word != _M_local_word) 15726: { 15726: delete [] _M_word; 15726: _M_word = 0; 15726: } 15726: _M_dispose_callbacks(); 15726: 15726: 15726: _M_callbacks = __cb; 15726: for (int __i = 0; __i < __rhs._M_word_size; ++__i) 15726: __words[__i] = __rhs._M_word[__i]; 15726: _M_word = __words; 15726: _M_word_size = __rhs._M_word_size; 15726: 15726: this->flags(__rhs.flags()); 15726: this->width(__rhs.width()); 15726: this->precision(__rhs.precision()); 15726: this->tie(__rhs.tie()); 15726: this->fill(__rhs.fill()); 15726: _M_ios_locale = __rhs.getloc(); 15726: _M_cache_locale(_M_ios_locale); 15726: 15726: _M_call_callbacks(copyfmt_event); 15726: 15726: 15726: this->exceptions(__rhs.exceptions()); 15726: } 15726: return *this; 15726: } 15726: 15726: 15726: template 15726: locale 15726: basic_ios<_CharT, _Traits>::imbue(const locale& __loc) 15726: { 15726: locale __old(this->getloc()); 15726: ios_base::imbue(__loc); 15726: _M_cache_locale(__loc); 15726: if (this->rdbuf() != 0) 15726: this->rdbuf()->pubimbue(__loc); 15726: return __old; 15726: } 15726: 15726: template 15726: void 15726: basic_ios<_CharT, _Traits>::init(basic_streambuf<_CharT, _Traits>* __sb) 15726: { 15726: 15726: ios_base::_M_init(); 15726: 15726: 15726: _M_cache_locale(_M_ios_locale); 15726: # 146 "/usr/include/c++/13/bits/basic_ios.tcc" 3 15726: _M_fill = _CharT(); 15726: _M_fill_init = false; 15726: 15726: _M_tie = 0; 15726: _M_exception = goodbit; 15726: _M_streambuf = __sb; 15726: _M_streambuf_state = __sb ? goodbit : badbit; 15726: } 15726: 15726: template 15726: void 15726: basic_ios<_CharT, _Traits>::_M_cache_locale(const locale& __loc) 15726: { 15726: _M_ctype = std::__try_use_facet<__ctype_type>(__loc); 15726: _M_num_put = std::__try_use_facet<__num_put_type>(__loc); 15726: _M_num_get = std::__try_use_facet<__num_get_type>(__loc); 15726: } 15726: 15726: 15726: 15726: 15726: extern template class basic_ios; 15726: 15726: 15726: extern template class basic_ios; 15726: 15726: 15726: 15726: 15726: } 15726: # 517 "/usr/include/c++/13/bits/basic_ios.h" 2 3 15726: # 47 "/usr/include/c++/13/ios" 2 3 15726: # 41 "/usr/include/c++/13/ostream" 2 3 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 59 "/usr/include/c++/13/ostream" 3 15726: template 15726: class basic_ostream : virtual public basic_ios<_CharT, _Traits> 15726: { 15726: public: 15726: 15726: typedef _CharT char_type; 15726: typedef typename _Traits::int_type int_type; 15726: typedef typename _Traits::pos_type pos_type; 15726: typedef typename _Traits::off_type off_type; 15726: typedef _Traits traits_type; 15726: 15726: 15726: typedef basic_streambuf<_CharT, _Traits> __streambuf_type; 15726: typedef basic_ios<_CharT, _Traits> __ios_type; 15726: typedef basic_ostream<_CharT, _Traits> __ostream_type; 15726: typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> > 15726: __num_put_type; 15726: typedef ctype<_CharT> __ctype_type; 15726: # 85 "/usr/include/c++/13/ostream" 3 15726: explicit 15726: basic_ostream(__streambuf_type* __sb) 15726: { this->init(__sb); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual 15726: ~basic_ostream() { } 15726: 15726: 15726: class sentry; 15726: friend class sentry; 15726: # 109 "/usr/include/c++/13/ostream" 3 15726: __ostream_type& 15726: operator<<(__ostream_type& (*__pf)(__ostream_type&)) 15726: { 15726: 15726: 15726: 15726: return __pf(*this); 15726: } 15726: 15726: __ostream_type& 15726: operator<<(__ios_type& (*__pf)(__ios_type&)) 15726: { 15726: 15726: 15726: 15726: __pf(*this); 15726: return *this; 15726: } 15726: 15726: __ostream_type& 15726: operator<<(ios_base& (*__pf) (ios_base&)) 15726: { 15726: 15726: 15726: 15726: __pf(*this); 15726: return *this; 15726: } 15726: # 167 "/usr/include/c++/13/ostream" 3 15726: __ostream_type& 15726: operator<<(long __n) 15726: { return _M_insert(__n); } 15726: 15726: __ostream_type& 15726: operator<<(unsigned long __n) 15726: { return _M_insert(__n); } 15726: 15726: __ostream_type& 15726: operator<<(bool __n) 15726: { return _M_insert(__n); } 15726: 15726: __ostream_type& 15726: operator<<(short __n); 15726: 15726: __ostream_type& 15726: operator<<(unsigned short __n) 15726: { 15726: 15726: 15726: return _M_insert(static_cast(__n)); 15726: } 15726: 15726: __ostream_type& 15726: operator<<(int __n); 15726: 15726: __ostream_type& 15726: operator<<(unsigned int __n) 15726: { 15726: 15726: 15726: return _M_insert(static_cast(__n)); 15726: } 15726: 15726: 15726: __ostream_type& 15726: operator<<(long long __n) 15726: { return _M_insert(__n); } 15726: 15726: __ostream_type& 15726: operator<<(unsigned long long __n) 15726: { return _M_insert(__n); } 15726: # 221 "/usr/include/c++/13/ostream" 3 15726: __ostream_type& 15726: operator<<(double __f) 15726: { return _M_insert(__f); } 15726: 15726: __ostream_type& 15726: operator<<(float __f) 15726: { 15726: 15726: 15726: return _M_insert(static_cast(__f)); 15726: } 15726: 15726: __ostream_type& 15726: operator<<(long double __f) 15726: { return _M_insert(__f); } 15726: # 291 "/usr/include/c++/13/ostream" 3 15726: __ostream_type& 15726: operator<<(const void* __p) 15726: { return _M_insert(__p); } 15726: 15726: 15726: __ostream_type& 15726: operator<<(nullptr_t) 15726: { return *this << "nullptr"; } 15726: # 329 "/usr/include/c++/13/ostream" 3 15726: __ostream_type& 15726: operator<<(__streambuf_type* __sb); 15726: # 362 "/usr/include/c++/13/ostream" 3 15726: __ostream_type& 15726: put(char_type __c); 15726: # 381 "/usr/include/c++/13/ostream" 3 15726: __ostream_type& 15726: write(const char_type* __s, streamsize __n); 15726: # 394 "/usr/include/c++/13/ostream" 3 15726: __ostream_type& 15726: flush(); 15726: # 404 "/usr/include/c++/13/ostream" 3 15726: pos_type 15726: tellp(); 15726: # 415 "/usr/include/c++/13/ostream" 3 15726: __ostream_type& 15726: seekp(pos_type); 15726: # 427 "/usr/include/c++/13/ostream" 3 15726: __ostream_type& 15726: seekp(off_type, ios_base::seekdir); 15726: 15726: protected: 15726: basic_ostream() 15726: { this->init(0); } 15726: 15726: 15726: 15726: basic_ostream(basic_iostream<_CharT, _Traits>&) { } 15726: 15726: basic_ostream(const basic_ostream&) = delete; 15726: 15726: basic_ostream(basic_ostream&& __rhs) 15726: : __ios_type() 15726: { __ios_type::move(__rhs); } 15726: 15726: 15726: 15726: basic_ostream& operator=(const basic_ostream&) = delete; 15726: 15726: basic_ostream& 15726: operator=(basic_ostream&& __rhs) 15726: { 15726: swap(__rhs); 15726: return *this; 15726: } 15726: 15726: void 15726: swap(basic_ostream& __rhs) 15726: { __ios_type::swap(__rhs); } 15726: 15726: 15726: template 15726: __ostream_type& 15726: _M_insert(_ValueT __v); 15726: 15726: private: 15726: 15726: void 15726: _M_write(const char_type* __s, streamsize __n) 15726: { std::__ostream_insert(*this, __s, __n); } 15726: 15726: }; 15726: # 479 "/usr/include/c++/13/ostream" 3 15726: template 15726: class basic_ostream<_CharT, _Traits>::sentry 15726: { 15726: 15726: bool _M_ok; 15726: basic_ostream<_CharT, _Traits>& _M_os; 15726: 15726: public: 15726: # 498 "/usr/include/c++/13/ostream" 3 15726: explicit 15726: sentry(basic_ostream<_CharT, _Traits>& __os); 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ~sentry() 15726: { 15726: 15726: if (bool(_M_os.flags() & ios_base::unitbuf) && !uncaught_exception()) 15726: { 15726: 15726: if (_M_os.rdbuf() && _M_os.rdbuf()->pubsync() == -1) 15726: _M_os.setstate(ios_base::badbit); 15726: } 15726: } 15726: #pragma GCC diagnostic pop 15726: # 530 "/usr/include/c++/13/ostream" 3 15726: explicit 15726: 15726: operator bool() const 15726: { return _M_ok; } 15726: }; 15726: # 552 "/usr/include/c++/13/ostream" 3 15726: template 15726: inline basic_ostream<_CharT, _Traits>& 15726: operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c) 15726: { 15726: if (__out.width() != 0) 15726: return __ostream_insert(__out, &__c, 1); 15726: __out.put(__c); 15726: return __out; 15726: } 15726: 15726: template 15726: inline basic_ostream<_CharT, _Traits>& 15726: operator<<(basic_ostream<_CharT, _Traits>& __out, char __c) 15726: { return (__out << __out.widen(__c)); } 15726: 15726: 15726: template 15726: inline basic_ostream& 15726: operator<<(basic_ostream& __out, char __c) 15726: { 15726: if (__out.width() != 0) 15726: return __ostream_insert(__out, &__c, 1); 15726: __out.put(__c); 15726: return __out; 15726: } 15726: 15726: 15726: template 15726: inline basic_ostream& 15726: operator<<(basic_ostream& __out, signed char __c) 15726: { return (__out << static_cast(__c)); } 15726: 15726: template 15726: inline basic_ostream& 15726: operator<<(basic_ostream& __out, unsigned char __c) 15726: { return (__out << static_cast(__c)); } 15726: # 643 "/usr/include/c++/13/ostream" 3 15726: template 15726: inline basic_ostream<_CharT, _Traits>& 15726: operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s) 15726: { 15726: if (!__s) 15726: __out.setstate(ios_base::badbit); 15726: else 15726: __ostream_insert(__out, __s, 15726: static_cast(_Traits::length(__s))); 15726: return __out; 15726: } 15726: 15726: template 15726: basic_ostream<_CharT, _Traits> & 15726: operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s); 15726: 15726: 15726: template 15726: inline basic_ostream& 15726: operator<<(basic_ostream& __out, const char* __s) 15726: { 15726: if (!__s) 15726: __out.setstate(ios_base::badbit); 15726: else 15726: __ostream_insert(__out, __s, 15726: static_cast(_Traits::length(__s))); 15726: return __out; 15726: } 15726: 15726: 15726: template 15726: inline basic_ostream& 15726: operator<<(basic_ostream& __out, const signed char* __s) 15726: { return (__out << reinterpret_cast(__s)); } 15726: 15726: template 15726: inline basic_ostream & 15726: operator<<(basic_ostream& __out, const unsigned char* __s) 15726: { return (__out << reinterpret_cast(__s)); } 15726: # 733 "/usr/include/c++/13/ostream" 3 15726: template 15726: inline basic_ostream<_CharT, _Traits>& 15726: endl(basic_ostream<_CharT, _Traits>& __os) 15726: { return flush(__os.put(__os.widen('\n'))); } 15726: # 745 "/usr/include/c++/13/ostream" 3 15726: template 15726: inline basic_ostream<_CharT, _Traits>& 15726: ends(basic_ostream<_CharT, _Traits>& __os) 15726: { return __os.put(_CharT()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline basic_ostream<_CharT, _Traits>& 15726: flush(basic_ostream<_CharT, _Traits>& __os) 15726: { return __os.flush(); } 15726: # 777 "/usr/include/c++/13/ostream" 3 15726: template 15726: using _Require_derived_from_ios_base 15726: = _Require, __not_>, 15726: is_convertible::type, ios_base*>>; 15726: 15726: template, 15726: typename 15726: = decltype(std::declval<_Os&>() << std::declval())> 15726: using __rvalue_stream_insertion_t = _Os&&; 15726: # 799 "/usr/include/c++/13/ostream" 3 15726: template 15726: inline __rvalue_stream_insertion_t<_Ostream, _Tp> 15726: operator<<(_Ostream&& __os, const _Tp& __x) 15726: { 15726: __os << __x; 15726: return std::move(__os); 15726: } 15726: # 877 "/usr/include/c++/13/ostream" 3 15726: 15726: } 15726: 15726: # 1 "/usr/include/c++/13/bits/ostream.tcc" 1 3 15726: # 37 "/usr/include/c++/13/bits/ostream.tcc" 3 15726: 15726: # 38 "/usr/include/c++/13/bits/ostream.tcc" 3 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: template 15726: basic_ostream<_CharT, _Traits>::sentry:: 15726: sentry(basic_ostream<_CharT, _Traits>& __os) 15726: : _M_ok(false), _M_os(__os) 15726: { 15726: 15726: if (__os.tie() && __os.good()) 15726: __os.tie()->flush(); 15726: 15726: if (__os.good()) 15726: _M_ok = true; 15726: else if (__os.bad()) 15726: __os.setstate(ios_base::failbit); 15726: } 15726: 15726: template 15726: template 15726: basic_ostream<_CharT, _Traits>& 15726: basic_ostream<_CharT, _Traits>:: 15726: _M_insert(_ValueT __v) 15726: { 15726: sentry __cerb(*this); 15726: if (__cerb) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: 15726: const __num_put_type& __np = __check_facet(this->_M_num_put); 15726: 15726: 15726: 15726: 15726: if (__np.put(*this, *this, this->fill(), __v).failed()) 15726: __err |= ios_base::badbit; 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: if (__err) 15726: this->setstate(__err); 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: basic_ostream<_CharT, _Traits>& 15726: basic_ostream<_CharT, _Traits>:: 15726: operator<<(short __n) 15726: { 15726: 15726: 15726: const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield; 15726: if (__fmt == ios_base::oct || __fmt == ios_base::hex) 15726: return _M_insert(static_cast(static_cast(__n))); 15726: else 15726: return _M_insert(static_cast(__n)); 15726: } 15726: 15726: template 15726: basic_ostream<_CharT, _Traits>& 15726: basic_ostream<_CharT, _Traits>:: 15726: operator<<(int __n) 15726: { 15726: 15726: 15726: const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield; 15726: if (__fmt == ios_base::oct || __fmt == ios_base::hex) 15726: return _M_insert(static_cast(static_cast(__n))); 15726: else 15726: return _M_insert(static_cast(__n)); 15726: } 15726: 15726: template 15726: basic_ostream<_CharT, _Traits>& 15726: basic_ostream<_CharT, _Traits>:: 15726: operator<<(__streambuf_type* __sbin) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: sentry __cerb(*this); 15726: if (__cerb && __sbin) 15726: { 15726: try 15726: { 15726: if (!__copy_streambufs(__sbin, this->rdbuf())) 15726: __err |= ios_base::failbit; 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::failbit); } 15726: } 15726: else if (!__sbin) 15726: __err |= ios_base::badbit; 15726: if (__err) 15726: this->setstate(__err); 15726: return *this; 15726: } 15726: 15726: template 15726: basic_ostream<_CharT, _Traits>& 15726: basic_ostream<_CharT, _Traits>:: 15726: put(char_type __c) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: sentry __cerb(*this); 15726: if (__cerb) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: const int_type __put = this->rdbuf()->sputc(__c); 15726: if (traits_type::eq_int_type(__put, traits_type::eof())) 15726: __err |= ios_base::badbit; 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: if (__err) 15726: this->setstate(__err); 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: basic_ostream<_CharT, _Traits>& 15726: basic_ostream<_CharT, _Traits>:: 15726: write(const _CharT* __s, streamsize __n) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: sentry __cerb(*this); 15726: if (__cerb) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: if (this->rdbuf()->sputn(__s, __n) != __n) 15726: __err = ios_base::badbit; 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: if (__err) 15726: this->setstate(ios_base::badbit); 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: basic_ostream<_CharT, _Traits>& 15726: basic_ostream<_CharT, _Traits>:: 15726: flush() 15726: { 15726: 15726: 15726: 15726: 15726: 15726: if (__streambuf_type* __buf = this->rdbuf()) 15726: { 15726: sentry __cerb(*this); 15726: if (__cerb) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: if (this->rdbuf()->pubsync() == -1) 15726: __err |= ios_base::badbit; 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: if (__err) 15726: this->setstate(__err); 15726: } 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: typename basic_ostream<_CharT, _Traits>::pos_type 15726: basic_ostream<_CharT, _Traits>:: 15726: tellp() 15726: { 15726: sentry __cerb(*this); 15726: pos_type __ret = pos_type(-1); 15726: if (!this->fail()) 15726: __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out); 15726: return __ret; 15726: } 15726: 15726: template 15726: basic_ostream<_CharT, _Traits>& 15726: basic_ostream<_CharT, _Traits>:: 15726: seekp(pos_type __pos) 15726: { 15726: sentry __cerb(*this); 15726: if (!this->fail()) 15726: { 15726: 15726: 15726: const pos_type __p = this->rdbuf()->pubseekpos(__pos, ios_base::out); 15726: 15726: 15726: if (__p == pos_type(off_type(-1))) 15726: this->setstate(ios_base::failbit); 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: basic_ostream<_CharT, _Traits>& 15726: basic_ostream<_CharT, _Traits>:: 15726: seekp(off_type __off, ios_base::seekdir __dir) 15726: { 15726: sentry __cerb(*this); 15726: if (!this->fail()) 15726: { 15726: 15726: 15726: const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir, 15726: ios_base::out); 15726: 15726: 15726: if (__p == pos_type(off_type(-1))) 15726: this->setstate(ios_base::failbit); 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: basic_ostream<_CharT, _Traits>& 15726: operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s) 15726: { 15726: if (!__s) 15726: __out.setstate(ios_base::badbit); 15726: else 15726: { 15726: 15726: 15726: const size_t __clen = char_traits::length(__s); 15726: try 15726: { 15726: struct __ptr_guard 15726: { 15726: _CharT *__p; 15726: __ptr_guard (_CharT *__ip): __p(__ip) { } 15726: ~__ptr_guard() { delete[] __p; } 15726: _CharT* __get() { return __p; } 15726: } __pg (new _CharT[__clen]); 15726: 15726: _CharT *__ws = __pg.__get(); 15726: for (size_t __i = 0; __i < __clen; ++__i) 15726: __ws[__i] = __out.widen(__s[__i]); 15726: __ostream_insert(__out, __ws, __clen); 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: __out._M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { __out._M_setstate(ios_base::badbit); } 15726: } 15726: return __out; 15726: } 15726: 15726: 15726: 15726: 15726: extern template class basic_ostream; 15726: extern template ostream& endl(ostream&); 15726: extern template ostream& ends(ostream&); 15726: extern template ostream& flush(ostream&); 15726: extern template ostream& operator<<(ostream&, char); 15726: extern template ostream& operator<<(ostream&, unsigned char); 15726: extern template ostream& operator<<(ostream&, signed char); 15726: extern template ostream& operator<<(ostream&, const char*); 15726: extern template ostream& operator<<(ostream&, const unsigned char*); 15726: extern template ostream& operator<<(ostream&, const signed char*); 15726: 15726: extern template ostream& ostream::_M_insert(long); 15726: extern template ostream& ostream::_M_insert(unsigned long); 15726: extern template ostream& ostream::_M_insert(bool); 15726: 15726: extern template ostream& ostream::_M_insert(long long); 15726: extern template ostream& ostream::_M_insert(unsigned long long); 15726: 15726: extern template ostream& ostream::_M_insert(double); 15726: extern template ostream& ostream::_M_insert(long double); 15726: extern template ostream& ostream::_M_insert(const void*); 15726: 15726: 15726: extern template class basic_ostream; 15726: extern template wostream& endl(wostream&); 15726: extern template wostream& ends(wostream&); 15726: extern template wostream& flush(wostream&); 15726: extern template wostream& operator<<(wostream&, wchar_t); 15726: extern template wostream& operator<<(wostream&, char); 15726: extern template wostream& operator<<(wostream&, const wchar_t*); 15726: extern template wostream& operator<<(wostream&, const char*); 15726: 15726: extern template wostream& wostream::_M_insert(long); 15726: extern template wostream& wostream::_M_insert(unsigned long); 15726: extern template wostream& wostream::_M_insert(bool); 15726: 15726: extern template wostream& wostream::_M_insert(long long); 15726: extern template wostream& wostream::_M_insert(unsigned long long); 15726: 15726: extern template wostream& wostream::_M_insert(double); 15726: extern template wostream& wostream::_M_insert(long double); 15726: extern template wostream& wostream::_M_insert(const void*); 15726: 15726: 15726: 15726: 15726: } 15726: # 881 "/usr/include/c++/13/ostream" 2 3 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 2 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 15726: 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 15726: namespace rocksdb { 15726: 15726: class ColumnFamilyHandle; 15726: 15726: 15726: 15726: class WideColumn { 15726: public: 15726: WideColumn() = default; 15726: # 35 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 15726: template 15726: WideColumn(N&& name, V&& value) 15726: : name_(std::forward(name)), value_(std::forward(value)) {} 15726: # 49 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 15726: template 15726: WideColumn(std::piecewise_construct_t, NTuple&& name_tuple, 15726: VTuple&& value_tuple) 15726: : name_(std::make_from_tuple(std::forward(name_tuple))), 15726: value_(std::make_from_tuple(std::forward(value_tuple))) { 15726: } 15726: 15726: const Slice& name() const { return name_; } 15726: const Slice& value() const { return value_; } 15726: 15726: Slice& name() { return name_; } 15726: Slice& value() { return value_; } 15726: 15726: private: 15726: Slice name_; 15726: Slice value_; 15726: }; 15726: 15726: 15726: inline bool operator==(const WideColumn& lhs, const WideColumn& rhs) { 15726: return lhs.name() == rhs.name() && lhs.value() == rhs.value(); 15726: } 15726: 15726: inline bool operator!=(const WideColumn& lhs, const WideColumn& rhs) { 15726: return !(lhs == rhs); 15726: } 15726: 15726: inline std::ostream& operator<<(std::ostream& os, const WideColumn& column) { 15726: const bool hex = 15726: (os.flags() & std::ios_base::basefield) == std::ios_base::hex; 15726: if (!column.name().empty()) { 15726: if (hex) { 15726: os << "0x"; 15726: } 15726: os << column.name().ToString(hex); 15726: } 15726: os << ':'; 15726: if (!column.value().empty()) { 15726: if (hex) { 15726: os << "0x"; 15726: } 15726: os << column.value().ToString(hex); 15726: } 15726: return os; 15726: } 15726: 15726: 15726: using WideColumns = std::vector; 15726: 15726: 15726: extern const Slice kDefaultWideColumnName; 15726: 15726: 15726: extern const WideColumns kNoWideColumns; 15726: 15726: 15726: 15726: class PinnableWideColumns { 15726: public: 15726: PinnableWideColumns() = default; 15726: 15726: PinnableWideColumns(const PinnableWideColumns&) = delete; 15726: PinnableWideColumns& operator=(const PinnableWideColumns&) = delete; 15726: 15726: PinnableWideColumns(PinnableWideColumns&&); 15726: PinnableWideColumns& operator=(PinnableWideColumns&&); 15726: 15726: ~PinnableWideColumns() = default; 15726: 15726: const WideColumns& columns() const { return columns_; } 15726: size_t serialized_size() const { return value_.size(); } 15726: 15726: void SetPlainValue(const Slice& value); 15726: void SetPlainValue(const Slice& value, Cleanable* cleanable); 15726: void SetPlainValue(PinnableSlice&& value); 15726: void SetPlainValue(std::string&& value); 15726: 15726: Status SetWideColumnValue(const Slice& value); 15726: Status SetWideColumnValue(const Slice& value, Cleanable* cleanable); 15726: Status SetWideColumnValue(PinnableSlice&& value); 15726: Status SetWideColumnValue(std::string&& value); 15726: 15726: void Reset(); 15726: 15726: private: 15726: void Move(PinnableWideColumns&& other); 15726: void CopyValue(const Slice& value); 15726: void PinOrCopyValue(const Slice& value, Cleanable* cleanable); 15726: void MoveValue(PinnableSlice&& value); 15726: void MoveValue(std::string&& value); 15726: 15726: void CreateIndexForPlainValue(); 15726: Status CreateIndexForWideColumns(); 15726: 15726: PinnableSlice value_; 15726: WideColumns columns_; 15726: }; 15726: 15726: inline void PinnableWideColumns::Reset() { 15726: value_.Reset(); 15726: columns_.clear(); 15726: } 15726: 15726: inline void PinnableWideColumns::Move(PinnableWideColumns&& other) { 15726: 15726: # 153 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 3 4 15726: (static_cast ( 15726: # 153 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 15726: columns_.empty() 15726: # 153 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 153 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 15726: "columns_.empty()" 15726: # 153 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 153 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 15726: ; 15726: 15726: if (other.columns_.empty()) { 15726: return; 15726: } 15726: 15726: const char* const data = other.value_.data(); 15726: const bool is_plain_value = 15726: other.columns_.size() == 1 && 15726: other.columns_.front().name() == kDefaultWideColumnName && 15726: other.columns_.front().value() == other.value_; 15726: 15726: MoveValue(std::move(other.value_)); 15726: 15726: if (value_.data() == data) { 15726: columns_ = std::move(other.columns_); 15726: } else { 15726: if (is_plain_value) { 15726: CreateIndexForPlainValue(); 15726: } else { 15726: const Status s = CreateIndexForWideColumns(); 15726: 15726: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 3 4 15726: (static_cast ( 15726: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 15726: s.ok() 15726: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 15726: "s.ok()" 15726: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 15726: ; 15726: 15726: s.PermitUncheckedError(); 15726: } 15726: } 15726: 15726: other.Reset(); 15726: } 15726: 15726: inline void PinnableWideColumns::CopyValue(const Slice& value) { 15726: value_.PinSelf(value); 15726: } 15726: 15726: inline void PinnableWideColumns::PinOrCopyValue(const Slice& value, 15726: Cleanable* cleanable) { 15726: if (!cleanable) { 15726: CopyValue(value); 15726: return; 15726: } 15726: 15726: value_.PinSlice(value, cleanable); 15726: } 15726: 15726: inline void PinnableWideColumns::MoveValue(PinnableSlice&& value) { 15726: value_ = std::move(value); 15726: } 15726: 15726: inline void PinnableWideColumns::MoveValue(std::string&& value) { 15726: std::string* const buf = value_.GetSelf(); 15726: 15726: # 203 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 3 4 15726: (static_cast ( 15726: # 203 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 15726: buf 15726: # 203 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 203 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 15726: "buf" 15726: # 203 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 203 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/wide_columns.h" 15726: ; 15726: 15726: *buf = std::move(value); 15726: value_.PinSelf(); 15726: } 15726: 15726: inline void PinnableWideColumns::CreateIndexForPlainValue() { 15726: columns_ = WideColumns{{kDefaultWideColumnName, value_}}; 15726: } 15726: 15726: inline void PinnableWideColumns::SetPlainValue(const Slice& value) { 15726: CopyValue(value); 15726: CreateIndexForPlainValue(); 15726: } 15726: 15726: inline void PinnableWideColumns::SetPlainValue(const Slice& value, 15726: Cleanable* cleanable) { 15726: PinOrCopyValue(value, cleanable); 15726: CreateIndexForPlainValue(); 15726: } 15726: 15726: inline void PinnableWideColumns::SetPlainValue(PinnableSlice&& value) { 15726: MoveValue(std::move(value)); 15726: CreateIndexForPlainValue(); 15726: } 15726: 15726: inline void PinnableWideColumns::SetPlainValue(std::string&& value) { 15726: MoveValue(std::move(value)); 15726: CreateIndexForPlainValue(); 15726: } 15726: 15726: inline Status PinnableWideColumns::SetWideColumnValue(const Slice& value) { 15726: CopyValue(value); 15726: 15726: const Status s = CreateIndexForWideColumns(); 15726: if (!s.ok()) { 15726: Reset(); 15726: } 15726: 15726: return s; 15726: } 15726: 15726: inline Status PinnableWideColumns::SetWideColumnValue(const Slice& value, 15726: Cleanable* cleanable) { 15726: PinOrCopyValue(value, cleanable); 15726: 15726: const Status s = CreateIndexForWideColumns(); 15726: if (!s.ok()) { 15726: Reset(); 15726: } 15726: 15726: return s; 15726: } 15726: 15726: inline Status PinnableWideColumns::SetWideColumnValue(PinnableSlice&& value) { 15726: MoveValue(std::move(value)); 15726: 15726: const Status s = CreateIndexForWideColumns(); 15726: if (!s.ok()) { 15726: Reset(); 15726: } 15726: 15726: return s; 15726: } 15726: 15726: inline Status PinnableWideColumns::SetWideColumnValue(std::string&& value) { 15726: MoveValue(std::move(value)); 15726: 15726: const Status s = CreateIndexForWideColumns(); 15726: if (!s.ok()) { 15726: Reset(); 15726: } 15726: 15726: return s; 15726: } 15726: 15726: inline PinnableWideColumns::PinnableWideColumns(PinnableWideColumns&& other) { 15726: Move(std::move(other)); 15726: } 15726: 15726: inline PinnableWideColumns& PinnableWideColumns::operator=( 15726: PinnableWideColumns&& other) { 15726: if (this != &other) { 15726: Reset(); 15726: Move(std::move(other)); 15726: } 15726: 15726: return *this; 15726: } 15726: 15726: inline bool operator==(const PinnableWideColumns& lhs, 15726: const PinnableWideColumns& rhs) { 15726: return lhs.columns() == rhs.columns(); 15726: } 15726: 15726: inline bool operator!=(const PinnableWideColumns& lhs, 15726: const PinnableWideColumns& rhs) { 15726: return !(lhs == rhs); 15726: } 15726: 15726: } 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: class Iterator : public IteratorBase { 15726: public: 15726: Iterator() {} 15726: 15726: Iterator(const Iterator&) = delete; 15726: void operator=(const Iterator&) = delete; 15726: 15726: virtual ~Iterator() override {} 15726: # 44 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 15726: virtual Slice value() const = 0; 15726: # 53 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 15726: virtual const WideColumns& columns() const { 15726: 15726: # 54 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 3 4 15726: (static_cast ( 15726: # 54 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 15726: false 15726: # 54 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 54 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 15726: "false" 15726: # 54 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 54 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 15726: ; 15726: return kNoWideColumns; 15726: } 15726: # 66 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 15726: virtual Status Refresh() { return Refresh(nullptr); } 15726: 15726: 15726: 15726: virtual Status Refresh(const class Snapshot*) { 15726: return Status::NotSupported("Refresh() is not supported"); 15726: } 15726: # 106 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 15726: virtual Status GetProperty(std::string prop_name, std::string* prop); 15726: 15726: virtual Slice timestamp() const { 15726: 15726: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 3 4 15726: (static_cast ( 15726: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 15726: false 15726: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 15726: "false" 15726: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/iterator.h" 15726: ; 15726: return Slice(); 15726: } 15726: }; 15726: 15726: 15726: Iterator* NewEmptyIterator(); 15726: 15726: 15726: Iterator* NewErrorIterator(const Status& status); 15726: 15726: } 15726: # 15 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/sstream" 1 3 15726: # 36 "/usr/include/c++/13/sstream" 3 15726: 15726: # 37 "/usr/include/c++/13/sstream" 3 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/istream" 1 3 15726: # 36 "/usr/include/c++/13/istream" 3 15726: 15726: # 37 "/usr/include/c++/13/istream" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 43 "/usr/include/c++/13/istream" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 59 "/usr/include/c++/13/istream" 3 15726: template 15726: class basic_istream : virtual public basic_ios<_CharT, _Traits> 15726: { 15726: public: 15726: 15726: typedef _CharT char_type; 15726: typedef typename _Traits::int_type int_type; 15726: typedef typename _Traits::pos_type pos_type; 15726: typedef typename _Traits::off_type off_type; 15726: typedef _Traits traits_type; 15726: 15726: 15726: typedef basic_streambuf<_CharT, _Traits> __streambuf_type; 15726: typedef basic_ios<_CharT, _Traits> __ios_type; 15726: typedef basic_istream<_CharT, _Traits> __istream_type; 15726: typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> > 15726: __num_get_type; 15726: typedef ctype<_CharT> __ctype_type; 15726: 15726: protected: 15726: 15726: 15726: 15726: 15726: 15726: streamsize _M_gcount; 15726: 15726: public: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: basic_istream(__streambuf_type* __sb) 15726: : _M_gcount(streamsize(0)) 15726: { this->init(__sb); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual 15726: ~basic_istream() 15726: { _M_gcount = streamsize(0); } 15726: 15726: 15726: class sentry; 15726: friend class sentry; 15726: # 121 "/usr/include/c++/13/istream" 3 15726: __istream_type& 15726: operator>>(__istream_type& (*__pf)(__istream_type&)) 15726: { return __pf(*this); } 15726: 15726: __istream_type& 15726: operator>>(__ios_type& (*__pf)(__ios_type&)) 15726: { 15726: __pf(*this); 15726: return *this; 15726: } 15726: 15726: __istream_type& 15726: operator>>(ios_base& (*__pf)(ios_base&)) 15726: { 15726: __pf(*this); 15726: return *this; 15726: } 15726: # 169 "/usr/include/c++/13/istream" 3 15726: __istream_type& 15726: operator>>(bool& __n) 15726: { return _M_extract(__n); } 15726: 15726: __istream_type& 15726: operator>>(short& __n); 15726: 15726: __istream_type& 15726: operator>>(unsigned short& __n) 15726: { return _M_extract(__n); } 15726: 15726: __istream_type& 15726: operator>>(int& __n); 15726: 15726: __istream_type& 15726: operator>>(unsigned int& __n) 15726: { return _M_extract(__n); } 15726: 15726: __istream_type& 15726: operator>>(long& __n) 15726: { return _M_extract(__n); } 15726: 15726: __istream_type& 15726: operator>>(unsigned long& __n) 15726: { return _M_extract(__n); } 15726: 15726: 15726: __istream_type& 15726: operator>>(long long& __n) 15726: { return _M_extract(__n); } 15726: 15726: __istream_type& 15726: operator>>(unsigned long long& __n) 15726: { return _M_extract(__n); } 15726: # 215 "/usr/include/c++/13/istream" 3 15726: __istream_type& 15726: operator>>(float& __f) 15726: { return _M_extract(__f); } 15726: 15726: __istream_type& 15726: operator>>(double& __f) 15726: { return _M_extract(__f); } 15726: 15726: __istream_type& 15726: operator>>(long double& __f) 15726: { return _M_extract(__f); } 15726: # 324 "/usr/include/c++/13/istream" 3 15726: __istream_type& 15726: operator>>(void*& __p) 15726: { return _M_extract(__p); } 15726: # 348 "/usr/include/c++/13/istream" 3 15726: __istream_type& 15726: operator>>(__streambuf_type* __sb); 15726: # 358 "/usr/include/c++/13/istream" 3 15726: streamsize 15726: gcount() const 15726: { return _M_gcount; } 15726: # 391 "/usr/include/c++/13/istream" 3 15726: int_type 15726: get(); 15726: # 405 "/usr/include/c++/13/istream" 3 15726: __istream_type& 15726: get(char_type& __c); 15726: # 432 "/usr/include/c++/13/istream" 3 15726: __istream_type& 15726: get(char_type* __s, streamsize __n, char_type __delim); 15726: # 443 "/usr/include/c++/13/istream" 3 15726: __istream_type& 15726: get(char_type* __s, streamsize __n) 15726: { return this->get(__s, __n, this->widen('\n')); } 15726: # 466 "/usr/include/c++/13/istream" 3 15726: __istream_type& 15726: get(__streambuf_type& __sb, char_type __delim); 15726: # 476 "/usr/include/c++/13/istream" 3 15726: __istream_type& 15726: get(__streambuf_type& __sb) 15726: { return this->get(__sb, this->widen('\n')); } 15726: # 505 "/usr/include/c++/13/istream" 3 15726: __istream_type& 15726: getline(char_type* __s, streamsize __n, char_type __delim); 15726: # 516 "/usr/include/c++/13/istream" 3 15726: __istream_type& 15726: getline(char_type* __s, streamsize __n) 15726: { return this->getline(__s, __n, this->widen('\n')); } 15726: # 540 "/usr/include/c++/13/istream" 3 15726: __istream_type& 15726: ignore(streamsize __n, int_type __delim); 15726: 15726: __istream_type& 15726: ignore(streamsize __n); 15726: 15726: __istream_type& 15726: ignore(); 15726: # 557 "/usr/include/c++/13/istream" 3 15726: int_type 15726: peek(); 15726: # 575 "/usr/include/c++/13/istream" 3 15726: __istream_type& 15726: read(char_type* __s, streamsize __n); 15726: # 594 "/usr/include/c++/13/istream" 3 15726: streamsize 15726: readsome(char_type* __s, streamsize __n); 15726: # 611 "/usr/include/c++/13/istream" 3 15726: __istream_type& 15726: putback(char_type __c); 15726: # 627 "/usr/include/c++/13/istream" 3 15726: __istream_type& 15726: unget(); 15726: # 645 "/usr/include/c++/13/istream" 3 15726: int 15726: sync(); 15726: # 660 "/usr/include/c++/13/istream" 3 15726: pos_type 15726: tellg(); 15726: # 675 "/usr/include/c++/13/istream" 3 15726: __istream_type& 15726: seekg(pos_type); 15726: # 691 "/usr/include/c++/13/istream" 3 15726: __istream_type& 15726: seekg(off_type, ios_base::seekdir); 15726: 15726: 15726: protected: 15726: basic_istream() 15726: : _M_gcount(streamsize(0)) 15726: { this->init(0); } 15726: 15726: 15726: basic_istream(const basic_istream&) = delete; 15726: 15726: basic_istream(basic_istream&& __rhs) 15726: : __ios_type(), _M_gcount(__rhs._M_gcount) 15726: { 15726: __ios_type::move(__rhs); 15726: __rhs._M_gcount = 0; 15726: } 15726: 15726: 15726: 15726: basic_istream& operator=(const basic_istream&) = delete; 15726: 15726: basic_istream& 15726: operator=(basic_istream&& __rhs) 15726: { 15726: swap(__rhs); 15726: return *this; 15726: } 15726: 15726: void 15726: swap(basic_istream& __rhs) 15726: { 15726: __ios_type::swap(__rhs); 15726: std::swap(_M_gcount, __rhs._M_gcount); 15726: } 15726: 15726: 15726: template 15726: __istream_type& 15726: _M_extract(_ValueT& __v); 15726: }; 15726: 15726: 15726: template<> 15726: basic_istream& 15726: basic_istream:: 15726: getline(char_type* __s, streamsize __n, char_type __delim); 15726: 15726: template<> 15726: basic_istream& 15726: basic_istream:: 15726: ignore(streamsize __n); 15726: 15726: template<> 15726: basic_istream& 15726: basic_istream:: 15726: ignore(streamsize __n, int_type __delim); 15726: 15726: 15726: template<> 15726: basic_istream& 15726: basic_istream:: 15726: getline(char_type* __s, streamsize __n, char_type __delim); 15726: 15726: template<> 15726: basic_istream& 15726: basic_istream:: 15726: ignore(streamsize __n); 15726: 15726: template<> 15726: basic_istream& 15726: basic_istream:: 15726: ignore(streamsize __n, int_type __delim); 15726: # 775 "/usr/include/c++/13/istream" 3 15726: template 15726: class basic_istream<_CharT, _Traits>::sentry 15726: { 15726: 15726: bool _M_ok; 15726: 15726: public: 15726: 15726: typedef _Traits traits_type; 15726: typedef basic_streambuf<_CharT, _Traits> __streambuf_type; 15726: typedef basic_istream<_CharT, _Traits> __istream_type; 15726: typedef typename __istream_type::__ctype_type __ctype_type; 15726: typedef typename _Traits::int_type __int_type; 15726: # 811 "/usr/include/c++/13/istream" 3 15726: explicit 15726: sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false); 15726: # 822 "/usr/include/c++/13/istream" 3 15726: explicit 15726: 15726: operator bool() const 15726: { return _M_ok; } 15726: }; 15726: # 840 "/usr/include/c++/13/istream" 3 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c); 15726: 15726: template 15726: inline basic_istream& 15726: operator>>(basic_istream& __in, unsigned char& __c) 15726: { return (__in >> reinterpret_cast(__c)); } 15726: 15726: template 15726: inline basic_istream& 15726: operator>>(basic_istream& __in, signed char& __c) 15726: { return (__in >> reinterpret_cast(__c)); } 15726: 15726: 15726: 15726: template 15726: void 15726: __istream_extract(basic_istream<_CharT, _Traits>&, _CharT*, streamsize); 15726: 15726: void __istream_extract(istream&, char*, streamsize); 15726: # 890 "/usr/include/c++/13/istream" 3 15726: template 15726: __attribute__((__nonnull__(2), __access__(__write_only__, 2))) 15726: inline basic_istream<_CharT, _Traits>& 15726: operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s) 15726: { 15726: 15726: 15726: 15726: size_t __n = __builtin_object_size(__s, 0); 15726: if (__n < sizeof(_CharT)) 15726: { 15726: 15726: do { if (std::__is_constant_evaluated() && !bool(__n >= sizeof(_CharT))) __builtin_unreachable(); } while (false); 15726: 15726: __in.width(0); 15726: __in.setstate(ios_base::failbit); 15726: } 15726: else if (__n != (size_t)-1) 15726: { 15726: __n /= sizeof(_CharT); 15726: streamsize __w = __in.width(); 15726: std::__istream_extract(__in, __s, __n); 15726: if (__in.good() && (__w <= 0 || __n < __w)) 15726: { 15726: 15726: 15726: const typename _Traits::int_type __c = __in.rdbuf()->sgetc(); 15726: const bool __eof = _Traits::eq_int_type(__c, _Traits::eof()); 15726: if (__builtin_expect(__eof, true)) 15726: __in.setstate(ios_base::eofbit); 15726: } 15726: } 15726: else 15726: 15726: { 15726: 15726: streamsize __n = __gnu_cxx::__numeric_traits::__max; 15726: __n /= sizeof(_CharT); 15726: std::__istream_extract(__in, __s, __n); 15726: } 15726: return __in; 15726: } 15726: 15726: template 15726: __attribute__((__nonnull__(2), __access__(__write_only__, 2))) 15726: inline basic_istream& 15726: operator>>(basic_istream& __in, unsigned char* __s) 15726: { return __in >> reinterpret_cast(__s); } 15726: 15726: template 15726: __attribute__((__nonnull__(2), __access__(__write_only__, 2))) 15726: inline basic_istream& 15726: operator>>(basic_istream& __in, signed char* __s) 15726: { return __in >> reinterpret_cast(__s); } 15726: # 979 "/usr/include/c++/13/istream" 3 15726: template 15726: class basic_iostream 15726: : public basic_istream<_CharT, _Traits>, 15726: public basic_ostream<_CharT, _Traits> 15726: { 15726: public: 15726: 15726: 15726: 15726: typedef _CharT char_type; 15726: typedef typename _Traits::int_type int_type; 15726: typedef typename _Traits::pos_type pos_type; 15726: typedef typename _Traits::off_type off_type; 15726: typedef _Traits traits_type; 15726: 15726: 15726: typedef basic_istream<_CharT, _Traits> __istream_type; 15726: typedef basic_ostream<_CharT, _Traits> __ostream_type; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: basic_iostream(basic_streambuf<_CharT, _Traits>* __sb) 15726: : __istream_type(__sb), __ostream_type(__sb) { } 15726: 15726: 15726: 15726: 15726: virtual 15726: ~basic_iostream() { } 15726: 15726: protected: 15726: basic_iostream() 15726: : __istream_type(), __ostream_type() { } 15726: 15726: 15726: basic_iostream(const basic_iostream&) = delete; 15726: 15726: basic_iostream(basic_iostream&& __rhs) 15726: : __istream_type(std::move(__rhs)), __ostream_type(*this) 15726: { } 15726: 15726: 15726: 15726: basic_iostream& operator=(const basic_iostream&) = delete; 15726: 15726: basic_iostream& 15726: operator=(basic_iostream&& __rhs) 15726: { 15726: swap(__rhs); 15726: return *this; 15726: } 15726: 15726: void 15726: swap(basic_iostream& __rhs) 15726: { __istream_type::swap(__rhs); } 15726: 15726: }; 15726: # 1062 "/usr/include/c++/13/istream" 3 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: ws(basic_istream<_CharT, _Traits>& __is); 15726: # 1078 "/usr/include/c++/13/istream" 3 15726: template, 15726: typename = decltype(std::declval<_Is&>() >> std::declval<_Tp>())> 15726: using __rvalue_stream_extraction_t = _Is&&; 15726: # 1094 "/usr/include/c++/13/istream" 3 15726: template 15726: inline __rvalue_stream_extraction_t<_Istream, _Tp> 15726: operator>>(_Istream&& __is, _Tp&& __x) 15726: { 15726: __is >> std::forward<_Tp>(__x); 15726: return std::move(__is); 15726: } 15726: 15726: 15726: 15726: } 15726: 15726: # 1 "/usr/include/c++/13/bits/istream.tcc" 1 3 15726: # 37 "/usr/include/c++/13/bits/istream.tcc" 3 15726: 15726: # 38 "/usr/include/c++/13/bits/istream.tcc" 3 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: template 15726: basic_istream<_CharT, _Traits>::sentry:: 15726: sentry(basic_istream<_CharT, _Traits>& __in, bool __noskip) : _M_ok(false) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: if (__in.good()) 15726: { 15726: try 15726: { 15726: if (__in.tie()) 15726: __in.tie()->flush(); 15726: if (!__noskip && bool(__in.flags() & ios_base::skipws)) 15726: { 15726: const __int_type __eof = traits_type::eof(); 15726: __streambuf_type* __sb = __in.rdbuf(); 15726: __int_type __c = __sb->sgetc(); 15726: 15726: const __ctype_type& __ct = __check_facet(__in._M_ctype); 15726: while (!traits_type::eq_int_type(__c, __eof) 15726: && __ct.is(ctype_base::space, 15726: traits_type::to_char_type(__c))) 15726: __c = __sb->snextc(); 15726: 15726: 15726: 15726: 15726: if (traits_type::eq_int_type(__c, __eof)) 15726: __err |= ios_base::eofbit; 15726: } 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: __in._M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { __in._M_setstate(ios_base::badbit); } 15726: } 15726: 15726: if (__in.good() && __err == ios_base::goodbit) 15726: _M_ok = true; 15726: else 15726: { 15726: __err |= ios_base::failbit; 15726: __in.setstate(__err); 15726: } 15726: } 15726: 15726: template 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: basic_istream<_CharT, _Traits>:: 15726: _M_extract(_ValueT& __v) 15726: { 15726: sentry __cerb(*this, false); 15726: if (__cerb) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: 15726: const __num_get_type& __ng = __check_facet(this->_M_num_get); 15726: 15726: 15726: 15726: 15726: __ng.get(*this, 0, *this, __err, __v); 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: if (__err) 15726: this->setstate(__err); 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: basic_istream<_CharT, _Traits>:: 15726: operator>>(short& __n) 15726: { 15726: 15726: 15726: sentry __cerb(*this, false); 15726: if (__cerb) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: long __l; 15726: 15726: const __num_get_type& __ng = __check_facet(this->_M_num_get); 15726: 15726: 15726: 15726: 15726: __ng.get(*this, 0, *this, __err, __l); 15726: 15726: 15726: 15726: if (__l < __gnu_cxx::__numeric_traits::__min) 15726: { 15726: __err |= ios_base::failbit; 15726: __n = __gnu_cxx::__numeric_traits::__min; 15726: } 15726: else if (__l > __gnu_cxx::__numeric_traits::__max) 15726: { 15726: __err |= ios_base::failbit; 15726: __n = __gnu_cxx::__numeric_traits::__max; 15726: } 15726: else 15726: __n = short(__l); 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: if (__err) 15726: this->setstate(__err); 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: basic_istream<_CharT, _Traits>:: 15726: operator>>(int& __n) 15726: { 15726: 15726: 15726: sentry __cerb(*this, false); 15726: if (__cerb) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: long __l; 15726: 15726: const __num_get_type& __ng = __check_facet(this->_M_num_get); 15726: 15726: 15726: 15726: 15726: __ng.get(*this, 0, *this, __err, __l); 15726: 15726: 15726: 15726: if (__l < __gnu_cxx::__numeric_traits::__min) 15726: { 15726: __err |= ios_base::failbit; 15726: __n = __gnu_cxx::__numeric_traits::__min; 15726: } 15726: else if (__l > __gnu_cxx::__numeric_traits::__max) 15726: { 15726: __err |= ios_base::failbit; 15726: __n = __gnu_cxx::__numeric_traits::__max; 15726: } 15726: else 15726: __n = int(__l); 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: if (__err) 15726: this->setstate(__err); 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: basic_istream<_CharT, _Traits>:: 15726: operator>>(__streambuf_type* __sbout) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: sentry __cerb(*this, false); 15726: if (__cerb && __sbout) 15726: { 15726: try 15726: { 15726: bool __ineof; 15726: if (!__copy_streambufs_eof(this->rdbuf(), __sbout, __ineof)) 15726: __err |= ios_base::failbit; 15726: if (__ineof) 15726: __err |= ios_base::eofbit; 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::failbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::failbit); } 15726: } 15726: else if (!__sbout) 15726: __err |= ios_base::failbit; 15726: if (__err) 15726: this->setstate(__err); 15726: return *this; 15726: } 15726: 15726: template 15726: typename basic_istream<_CharT, _Traits>::int_type 15726: basic_istream<_CharT, _Traits>:: 15726: get(void) 15726: { 15726: const int_type __eof = traits_type::eof(); 15726: int_type __c = __eof; 15726: _M_gcount = 0; 15726: ios_base::iostate __err = ios_base::goodbit; 15726: sentry __cerb(*this, true); 15726: if (__cerb) 15726: { 15726: try 15726: { 15726: __c = this->rdbuf()->sbumpc(); 15726: 15726: if (!traits_type::eq_int_type(__c, __eof)) 15726: _M_gcount = 1; 15726: else 15726: __err |= ios_base::eofbit; 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: } 15726: if (!_M_gcount) 15726: __err |= ios_base::failbit; 15726: if (__err) 15726: this->setstate(__err); 15726: return __c; 15726: } 15726: 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: basic_istream<_CharT, _Traits>:: 15726: get(char_type& __c) 15726: { 15726: _M_gcount = 0; 15726: ios_base::iostate __err = ios_base::goodbit; 15726: sentry __cerb(*this, true); 15726: if (__cerb) 15726: { 15726: try 15726: { 15726: const int_type __cb = this->rdbuf()->sbumpc(); 15726: 15726: if (!traits_type::eq_int_type(__cb, traits_type::eof())) 15726: { 15726: _M_gcount = 1; 15726: __c = traits_type::to_char_type(__cb); 15726: } 15726: else 15726: __err |= ios_base::eofbit; 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: } 15726: if (!_M_gcount) 15726: __err |= ios_base::failbit; 15726: if (__err) 15726: this->setstate(__err); 15726: return *this; 15726: } 15726: 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: basic_istream<_CharT, _Traits>:: 15726: get(char_type* __s, streamsize __n, char_type __delim) 15726: { 15726: _M_gcount = 0; 15726: ios_base::iostate __err = ios_base::goodbit; 15726: sentry __cerb(*this, true); 15726: if (__cerb) 15726: { 15726: try 15726: { 15726: const int_type __idelim = traits_type::to_int_type(__delim); 15726: const int_type __eof = traits_type::eof(); 15726: __streambuf_type* __sb = this->rdbuf(); 15726: int_type __c = __sb->sgetc(); 15726: 15726: while (_M_gcount + 1 < __n 15726: && !traits_type::eq_int_type(__c, __eof) 15726: && !traits_type::eq_int_type(__c, __idelim)) 15726: { 15726: *__s++ = traits_type::to_char_type(__c); 15726: ++_M_gcount; 15726: __c = __sb->snextc(); 15726: } 15726: if (traits_type::eq_int_type(__c, __eof)) 15726: __err |= ios_base::eofbit; 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: } 15726: 15726: 15726: if (__n > 0) 15726: *__s = char_type(); 15726: if (!_M_gcount) 15726: __err |= ios_base::failbit; 15726: if (__err) 15726: this->setstate(__err); 15726: return *this; 15726: } 15726: 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: basic_istream<_CharT, _Traits>:: 15726: get(__streambuf_type& __sb, char_type __delim) 15726: { 15726: _M_gcount = 0; 15726: ios_base::iostate __err = ios_base::goodbit; 15726: sentry __cerb(*this, true); 15726: if (__cerb) 15726: { 15726: try 15726: { 15726: const int_type __idelim = traits_type::to_int_type(__delim); 15726: const int_type __eof = traits_type::eof(); 15726: __streambuf_type* __this_sb = this->rdbuf(); 15726: int_type __c = __this_sb->sgetc(); 15726: char_type __c2 = traits_type::to_char_type(__c); 15726: unsigned long long __gcount = 0; 15726: 15726: while (!traits_type::eq_int_type(__c, __eof) 15726: && !traits_type::eq_int_type(__c, __idelim) 15726: && !traits_type::eq_int_type(__sb.sputc(__c2), __eof)) 15726: { 15726: ++__gcount; 15726: __c = __this_sb->snextc(); 15726: __c2 = traits_type::to_char_type(__c); 15726: } 15726: if (traits_type::eq_int_type(__c, __eof)) 15726: __err |= ios_base::eofbit; 15726: 15726: 15726: if (__gcount <= __gnu_cxx::__numeric_traits::__max) 15726: _M_gcount = __gcount; 15726: else 15726: _M_gcount = __gnu_cxx::__numeric_traits::__max; 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: } 15726: if (!_M_gcount) 15726: __err |= ios_base::failbit; 15726: if (__err) 15726: this->setstate(__err); 15726: return *this; 15726: } 15726: 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: basic_istream<_CharT, _Traits>:: 15726: getline(char_type* __s, streamsize __n, char_type __delim) 15726: { 15726: _M_gcount = 0; 15726: ios_base::iostate __err = ios_base::goodbit; 15726: sentry __cerb(*this, true); 15726: if (__cerb) 15726: { 15726: try 15726: { 15726: const int_type __idelim = traits_type::to_int_type(__delim); 15726: const int_type __eof = traits_type::eof(); 15726: __streambuf_type* __sb = this->rdbuf(); 15726: int_type __c = __sb->sgetc(); 15726: 15726: while (_M_gcount + 1 < __n 15726: && !traits_type::eq_int_type(__c, __eof) 15726: && !traits_type::eq_int_type(__c, __idelim)) 15726: { 15726: *__s++ = traits_type::to_char_type(__c); 15726: __c = __sb->snextc(); 15726: ++_M_gcount; 15726: } 15726: if (traits_type::eq_int_type(__c, __eof)) 15726: __err |= ios_base::eofbit; 15726: else 15726: { 15726: if (traits_type::eq_int_type(__c, __idelim)) 15726: { 15726: __sb->sbumpc(); 15726: ++_M_gcount; 15726: } 15726: else 15726: __err |= ios_base::failbit; 15726: } 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: } 15726: 15726: 15726: if (__n > 0) 15726: *__s = char_type(); 15726: if (!_M_gcount) 15726: __err |= ios_base::failbit; 15726: if (__err) 15726: this->setstate(__err); 15726: return *this; 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: basic_istream<_CharT, _Traits>:: 15726: ignore(void) 15726: { 15726: _M_gcount = 0; 15726: sentry __cerb(*this, true); 15726: if (__cerb) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: const int_type __eof = traits_type::eof(); 15726: __streambuf_type* __sb = this->rdbuf(); 15726: 15726: if (traits_type::eq_int_type(__sb->sbumpc(), __eof)) 15726: __err |= ios_base::eofbit; 15726: else 15726: _M_gcount = 1; 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: if (__err) 15726: this->setstate(__err); 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: basic_istream<_CharT, _Traits>:: 15726: ignore(streamsize __n) 15726: { 15726: _M_gcount = 0; 15726: sentry __cerb(*this, true); 15726: if (__cerb && __n > 0) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: const int_type __eof = traits_type::eof(); 15726: __streambuf_type* __sb = this->rdbuf(); 15726: int_type __c = __sb->sgetc(); 15726: # 545 "/usr/include/c++/13/bits/istream.tcc" 3 15726: bool __large_ignore = false; 15726: while (true) 15726: { 15726: while (_M_gcount < __n 15726: && !traits_type::eq_int_type(__c, __eof)) 15726: { 15726: ++_M_gcount; 15726: __c = __sb->snextc(); 15726: } 15726: if (__n == __gnu_cxx::__numeric_traits::__max 15726: && !traits_type::eq_int_type(__c, __eof)) 15726: { 15726: _M_gcount = 15726: __gnu_cxx::__numeric_traits::__min; 15726: __large_ignore = true; 15726: } 15726: else 15726: break; 15726: } 15726: 15726: if (__n == __gnu_cxx::__numeric_traits::__max) 15726: { 15726: if (__large_ignore) 15726: _M_gcount = __gnu_cxx::__numeric_traits::__max; 15726: 15726: if (traits_type::eq_int_type(__c, __eof)) 15726: __err |= ios_base::eofbit; 15726: } 15726: else if (_M_gcount < __n) 15726: { 15726: if (traits_type::eq_int_type(__c, __eof)) 15726: __err |= ios_base::eofbit; 15726: } 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: if (__err) 15726: this->setstate(__err); 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: basic_istream<_CharT, _Traits>:: 15726: ignore(streamsize __n, int_type __delim) 15726: { 15726: _M_gcount = 0; 15726: sentry __cerb(*this, true); 15726: if (__cerb && __n > 0) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: const int_type __eof = traits_type::eof(); 15726: __streambuf_type* __sb = this->rdbuf(); 15726: int_type __c = __sb->sgetc(); 15726: 15726: 15726: bool __large_ignore = false; 15726: while (true) 15726: { 15726: while (_M_gcount < __n 15726: && !traits_type::eq_int_type(__c, __eof) 15726: && !traits_type::eq_int_type(__c, __delim)) 15726: { 15726: ++_M_gcount; 15726: __c = __sb->snextc(); 15726: } 15726: if (__n == __gnu_cxx::__numeric_traits::__max 15726: && !traits_type::eq_int_type(__c, __eof) 15726: && !traits_type::eq_int_type(__c, __delim)) 15726: { 15726: _M_gcount = 15726: __gnu_cxx::__numeric_traits::__min; 15726: __large_ignore = true; 15726: } 15726: else 15726: break; 15726: } 15726: 15726: if (__n == __gnu_cxx::__numeric_traits::__max) 15726: { 15726: if (__large_ignore) 15726: _M_gcount = __gnu_cxx::__numeric_traits::__max; 15726: 15726: if (traits_type::eq_int_type(__c, __eof)) 15726: __err |= ios_base::eofbit; 15726: else 15726: { 15726: if (_M_gcount != __n) 15726: ++_M_gcount; 15726: __sb->sbumpc(); 15726: } 15726: } 15726: else if (_M_gcount < __n) 15726: { 15726: if (traits_type::eq_int_type(__c, __eof)) 15726: __err |= ios_base::eofbit; 15726: else 15726: { 15726: ++_M_gcount; 15726: __sb->sbumpc(); 15726: } 15726: } 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: if (__err) 15726: this->setstate(__err); 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: typename basic_istream<_CharT, _Traits>::int_type 15726: basic_istream<_CharT, _Traits>:: 15726: peek(void) 15726: { 15726: int_type __c = traits_type::eof(); 15726: _M_gcount = 0; 15726: sentry __cerb(*this, true); 15726: if (__cerb) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: __c = this->rdbuf()->sgetc(); 15726: if (traits_type::eq_int_type(__c, traits_type::eof())) 15726: __err |= ios_base::eofbit; 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: if (__err) 15726: this->setstate(__err); 15726: } 15726: return __c; 15726: } 15726: 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: basic_istream<_CharT, _Traits>:: 15726: read(char_type* __s, streamsize __n) 15726: { 15726: _M_gcount = 0; 15726: sentry __cerb(*this, true); 15726: if (__cerb) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: _M_gcount = this->rdbuf()->sgetn(__s, __n); 15726: if (_M_gcount != __n) 15726: __err |= (ios_base::eofbit | ios_base::failbit); 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: if (__err) 15726: this->setstate(__err); 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: streamsize 15726: basic_istream<_CharT, _Traits>:: 15726: readsome(char_type* __s, streamsize __n) 15726: { 15726: _M_gcount = 0; 15726: sentry __cerb(*this, true); 15726: if (__cerb) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: 15726: const streamsize __num = this->rdbuf()->in_avail(); 15726: if (__num > 0) 15726: _M_gcount = this->rdbuf()->sgetn(__s, std::min(__num, __n)); 15726: else if (__num == -1) 15726: __err |= ios_base::eofbit; 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: if (__err) 15726: this->setstate(__err); 15726: } 15726: return _M_gcount; 15726: } 15726: 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: basic_istream<_CharT, _Traits>:: 15726: putback(char_type __c) 15726: { 15726: 15726: 15726: _M_gcount = 0; 15726: 15726: this->clear(this->rdstate() & ~ios_base::eofbit); 15726: sentry __cerb(*this, true); 15726: if (__cerb) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: const int_type __eof = traits_type::eof(); 15726: __streambuf_type* __sb = this->rdbuf(); 15726: if (!__sb 15726: || traits_type::eq_int_type(__sb->sputbackc(__c), __eof)) 15726: __err |= ios_base::badbit; 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: if (__err) 15726: this->setstate(__err); 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: basic_istream<_CharT, _Traits>:: 15726: unget(void) 15726: { 15726: 15726: 15726: _M_gcount = 0; 15726: 15726: this->clear(this->rdstate() & ~ios_base::eofbit); 15726: sentry __cerb(*this, true); 15726: if (__cerb) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: const int_type __eof = traits_type::eof(); 15726: __streambuf_type* __sb = this->rdbuf(); 15726: if (!__sb 15726: || traits_type::eq_int_type(__sb->sungetc(), __eof)) 15726: __err |= ios_base::badbit; 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: if (__err) 15726: this->setstate(__err); 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: int 15726: basic_istream<_CharT, _Traits>:: 15726: sync(void) 15726: { 15726: 15726: 15726: int __ret = -1; 15726: sentry __cerb(*this, true); 15726: if (__cerb) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: __streambuf_type* __sb = this->rdbuf(); 15726: if (__sb) 15726: { 15726: if (__sb->pubsync() == -1) 15726: __err |= ios_base::badbit; 15726: else 15726: __ret = 0; 15726: } 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: if (__err) 15726: this->setstate(__err); 15726: } 15726: return __ret; 15726: } 15726: 15726: template 15726: typename basic_istream<_CharT, _Traits>::pos_type 15726: basic_istream<_CharT, _Traits>:: 15726: tellg(void) 15726: { 15726: 15726: 15726: pos_type __ret = pos_type(-1); 15726: sentry __cerb(*this, true); 15726: if (__cerb) 15726: { 15726: try 15726: { 15726: if (!this->fail()) 15726: __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, 15726: ios_base::in); 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: } 15726: return __ret; 15726: } 15726: 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: basic_istream<_CharT, _Traits>:: 15726: seekg(pos_type __pos) 15726: { 15726: 15726: 15726: 15726: this->clear(this->rdstate() & ~ios_base::eofbit); 15726: sentry __cerb(*this, true); 15726: if (__cerb) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: if (!this->fail()) 15726: { 15726: 15726: const pos_type __p = this->rdbuf()->pubseekpos(__pos, 15726: ios_base::in); 15726: 15726: 15726: if (__p == pos_type(off_type(-1))) 15726: __err |= ios_base::failbit; 15726: } 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: if (__err) 15726: this->setstate(__err); 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: basic_istream<_CharT, _Traits>:: 15726: seekg(off_type __off, ios_base::seekdir __dir) 15726: { 15726: 15726: 15726: 15726: this->clear(this->rdstate() & ~ios_base::eofbit); 15726: sentry __cerb(*this, true); 15726: if (__cerb) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: if (!this->fail()) 15726: { 15726: 15726: const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir, 15726: ios_base::in); 15726: 15726: 15726: if (__p == pos_type(off_type(-1))) 15726: __err |= ios_base::failbit; 15726: } 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: this->_M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { this->_M_setstate(ios_base::badbit); } 15726: if (__err) 15726: this->setstate(__err); 15726: } 15726: return *this; 15726: } 15726: 15726: 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c) 15726: { 15726: typedef basic_istream<_CharT, _Traits> __istream_type; 15726: typedef typename __istream_type::int_type __int_type; 15726: 15726: typename __istream_type::sentry __cerb(__in, false); 15726: if (__cerb) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: const __int_type __cb = __in.rdbuf()->sbumpc(); 15726: if (!_Traits::eq_int_type(__cb, _Traits::eof())) 15726: __c = _Traits::to_char_type(__cb); 15726: else 15726: __err |= (ios_base::eofbit | ios_base::failbit); 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: __in._M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { __in._M_setstate(ios_base::badbit); } 15726: if (__err) 15726: __in.setstate(__err); 15726: } 15726: return __in; 15726: } 15726: 15726: template 15726: void 15726: __istream_extract(basic_istream<_CharT, _Traits>& __in, _CharT* __s, 15726: streamsize __num) 15726: { 15726: typedef basic_istream<_CharT, _Traits> __istream_type; 15726: typedef basic_streambuf<_CharT, _Traits> __streambuf_type; 15726: typedef typename _Traits::int_type int_type; 15726: typedef _CharT char_type; 15726: typedef ctype<_CharT> __ctype_type; 15726: 15726: streamsize __extracted = 0; 15726: ios_base::iostate __err = ios_base::goodbit; 15726: typename __istream_type::sentry __cerb(__in, false); 15726: if (__cerb) 15726: { 15726: try 15726: { 15726: 15726: streamsize __width = __in.width(); 15726: if (0 < __width && __width < __num) 15726: __num = __width; 15726: 15726: const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); 15726: 15726: const int_type __eof = _Traits::eof(); 15726: __streambuf_type* __sb = __in.rdbuf(); 15726: int_type __c = __sb->sgetc(); 15726: 15726: while (__extracted < __num - 1 15726: && !_Traits::eq_int_type(__c, __eof) 15726: && !__ct.is(ctype_base::space, 15726: _Traits::to_char_type(__c))) 15726: { 15726: *__s++ = _Traits::to_char_type(__c); 15726: ++__extracted; 15726: __c = __sb->snextc(); 15726: } 15726: 15726: if (__extracted < __num - 1 15726: && _Traits::eq_int_type(__c, __eof)) 15726: __err |= ios_base::eofbit; 15726: 15726: 15726: 15726: *__s = char_type(); 15726: __in.width(0); 15726: } 15726: catch(__cxxabiv1::__forced_unwind&) 15726: { 15726: __in._M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { __in._M_setstate(ios_base::badbit); } 15726: } 15726: if (!__extracted) 15726: __err |= ios_base::failbit; 15726: if (__err) 15726: __in.setstate(__err); 15726: } 15726: 15726: 15726: template 15726: basic_istream<_CharT, _Traits>& 15726: ws(basic_istream<_CharT, _Traits>& __in) 15726: { 15726: typedef basic_istream<_CharT, _Traits> __istream_type; 15726: typedef basic_streambuf<_CharT, _Traits> __streambuf_type; 15726: typedef typename __istream_type::int_type __int_type; 15726: typedef ctype<_CharT> __ctype_type; 15726: 15726: 15726: 15726: typename __istream_type::sentry __cerb(__in, true); 15726: if (__cerb) 15726: { 15726: ios_base::iostate __err = ios_base::goodbit; 15726: try 15726: { 15726: const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); 15726: const __int_type __eof = _Traits::eof(); 15726: __streambuf_type* __sb = __in.rdbuf(); 15726: __int_type __c = __sb->sgetc(); 15726: 15726: while (true) 15726: { 15726: if (_Traits::eq_int_type(__c, __eof)) 15726: { 15726: __err = ios_base::eofbit; 15726: break; 15726: } 15726: if (!__ct.is(ctype_base::space, _Traits::to_char_type(__c))) 15726: break; 15726: __c = __sb->snextc(); 15726: } 15726: } 15726: catch(const __cxxabiv1::__forced_unwind&) 15726: { 15726: __in._M_setstate(ios_base::badbit); 15726: throw; 15726: } 15726: catch(...) 15726: { 15726: __in._M_setstate(ios_base::badbit); 15726: } 15726: if (__err) 15726: __in.setstate(__err); 15726: } 15726: return __in; 15726: } 15726: 15726: 15726: 15726: 15726: extern template class basic_istream; 15726: extern template istream& ws(istream&); 15726: extern template istream& operator>>(istream&, char&); 15726: extern template istream& operator>>(istream&, unsigned char&); 15726: extern template istream& operator>>(istream&, signed char&); 15726: 15726: extern template istream& istream::_M_extract(unsigned short&); 15726: extern template istream& istream::_M_extract(unsigned int&); 15726: extern template istream& istream::_M_extract(long&); 15726: extern template istream& istream::_M_extract(unsigned long&); 15726: extern template istream& istream::_M_extract(bool&); 15726: 15726: extern template istream& istream::_M_extract(long long&); 15726: extern template istream& istream::_M_extract(unsigned long long&); 15726: 15726: extern template istream& istream::_M_extract(float&); 15726: extern template istream& istream::_M_extract(double&); 15726: extern template istream& istream::_M_extract(long double&); 15726: extern template istream& istream::_M_extract(void*&); 15726: 15726: extern template class basic_iostream; 15726: 15726: 15726: extern template class basic_istream; 15726: extern template wistream& ws(wistream&); 15726: extern template wistream& operator>>(wistream&, wchar_t&); 15726: extern template void __istream_extract(wistream&, wchar_t*, streamsize); 15726: 15726: extern template wistream& wistream::_M_extract(unsigned short&); 15726: extern template wistream& wistream::_M_extract(unsigned int&); 15726: extern template wistream& wistream::_M_extract(long&); 15726: extern template wistream& wistream::_M_extract(unsigned long&); 15726: extern template wistream& wistream::_M_extract(bool&); 15726: 15726: extern template wistream& wistream::_M_extract(long long&); 15726: extern template wistream& wistream::_M_extract(unsigned long long&); 15726: 15726: extern template wistream& wistream::_M_extract(float&); 15726: extern template wistream& wistream::_M_extract(double&); 15726: extern template wistream& wistream::_M_extract(long double&); 15726: extern template wistream& wistream::_M_extract(void*&); 15726: 15726: extern template class basic_iostream; 15726: 15726: 15726: 15726: 15726: } 15726: # 1107 "/usr/include/c++/13/istream" 2 3 15726: # 41 "/usr/include/c++/13/sstream" 2 3 15726: # 55 "/usr/include/c++/13/sstream" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: namespace __cxx11 { 15726: # 78 "/usr/include/c++/13/sstream" 3 15726: template 15726: class basic_stringbuf : public basic_streambuf<_CharT, _Traits> 15726: { 15726: struct __xfer_bufptrs; 15726: 15726: 15726: using allocator_traits = std::allocator_traits<_Alloc>; 15726: using _Noexcept_swap 15726: = __or_; 15726: 15726: 15726: public: 15726: 15726: typedef _CharT char_type; 15726: typedef _Traits traits_type; 15726: 15726: 15726: typedef _Alloc allocator_type; 15726: typedef typename traits_type::int_type int_type; 15726: typedef typename traits_type::pos_type pos_type; 15726: typedef typename traits_type::off_type off_type; 15726: 15726: typedef basic_streambuf __streambuf_type; 15726: typedef basic_string __string_type; 15726: typedef typename __string_type::size_type __size_type; 15726: 15726: protected: 15726: 15726: ios_base::openmode _M_mode; 15726: 15726: 15726: __string_type _M_string; 15726: 15726: public: 15726: # 121 "/usr/include/c++/13/sstream" 3 15726: basic_stringbuf() 15726: : __streambuf_type(), _M_mode(ios_base::in | ios_base::out), _M_string() 15726: { } 15726: # 132 "/usr/include/c++/13/sstream" 3 15726: explicit 15726: basic_stringbuf(ios_base::openmode __mode) 15726: : __streambuf_type(), _M_mode(__mode), _M_string() 15726: { } 15726: # 145 "/usr/include/c++/13/sstream" 3 15726: explicit 15726: basic_stringbuf(const __string_type& __str, 15726: ios_base::openmode __mode = ios_base::in | ios_base::out) 15726: : __streambuf_type(), _M_mode(), 15726: _M_string(__str.data(), __str.size(), __str.get_allocator()) 15726: { _M_stringbuf_init(__mode); } 15726: 15726: 15726: basic_stringbuf(const basic_stringbuf&) = delete; 15726: 15726: basic_stringbuf(basic_stringbuf&& __rhs) 15726: : basic_stringbuf(std::move(__rhs), __xfer_bufptrs(__rhs, this)) 15726: { __rhs._M_sync(const_cast(__rhs._M_string.data()), 0, 0); } 15726: # 209 "/usr/include/c++/13/sstream" 3 15726: basic_stringbuf& 15726: operator=(const basic_stringbuf&) = delete; 15726: 15726: basic_stringbuf& 15726: operator=(basic_stringbuf&& __rhs) 15726: { 15726: __xfer_bufptrs __st{__rhs, this}; 15726: const __streambuf_type& __base = __rhs; 15726: __streambuf_type::operator=(__base); 15726: this->pubimbue(__rhs.getloc()); 15726: _M_mode = __rhs._M_mode; 15726: _M_string = std::move(__rhs._M_string); 15726: __rhs._M_sync(const_cast(__rhs._M_string.data()), 0, 0); 15726: return *this; 15726: } 15726: 15726: void 15726: swap(basic_stringbuf& __rhs) noexcept(_Noexcept_swap::value) 15726: { 15726: __xfer_bufptrs __l_st{*this, std::__addressof(__rhs)}; 15726: __xfer_bufptrs __r_st{__rhs, this}; 15726: __streambuf_type& __base = __rhs; 15726: __streambuf_type::swap(__base); 15726: __rhs.pubimbue(this->pubimbue(__rhs.getloc())); 15726: std::swap(_M_mode, __rhs._M_mode); 15726: std::swap(_M_string, __rhs._M_string); 15726: } 15726: # 248 "/usr/include/c++/13/sstream" 3 15726: __string_type 15726: str() const 15726: { 15726: __string_type __ret(_M_string.get_allocator()); 15726: if (char_type* __hi = _M_high_mark()) 15726: __ret.assign(this->pbase(), __hi); 15726: else 15726: __ret = _M_string; 15726: return __ret; 15726: } 15726: # 304 "/usr/include/c++/13/sstream" 3 15726: void 15726: str(const __string_type& __s) 15726: { 15726: 15726: 15726: _M_string.assign(__s.data(), __s.size()); 15726: _M_stringbuf_init(_M_mode); 15726: } 15726: # 333 "/usr/include/c++/13/sstream" 3 15726: protected: 15726: 15726: void 15726: _M_stringbuf_init(ios_base::openmode __mode) 15726: { 15726: _M_mode = __mode; 15726: __size_type __len = 0; 15726: if (_M_mode & (ios_base::ate | ios_base::app)) 15726: __len = _M_string.size(); 15726: _M_sync(const_cast(_M_string.data()), 0, __len); 15726: } 15726: 15726: virtual streamsize 15726: showmanyc() 15726: { 15726: streamsize __ret = -1; 15726: if (_M_mode & ios_base::in) 15726: { 15726: _M_update_egptr(); 15726: __ret = this->egptr() - this->gptr(); 15726: } 15726: return __ret; 15726: } 15726: 15726: virtual int_type 15726: underflow(); 15726: 15726: virtual int_type 15726: pbackfail(int_type __c = traits_type::eof()); 15726: 15726: virtual int_type 15726: overflow(int_type __c = traits_type::eof()); 15726: # 377 "/usr/include/c++/13/sstream" 3 15726: virtual __streambuf_type* 15726: setbuf(char_type* __s, streamsize __n) 15726: { 15726: if (__s && __n >= 0) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: _M_string.clear(); 15726: 15726: 15726: _M_sync(__s, __n, 0); 15726: } 15726: return this; 15726: } 15726: 15726: virtual pos_type 15726: seekoff(off_type __off, ios_base::seekdir __way, 15726: ios_base::openmode __mode = ios_base::in | ios_base::out); 15726: 15726: virtual pos_type 15726: seekpos(pos_type __sp, 15726: ios_base::openmode __mode = ios_base::in | ios_base::out); 15726: 15726: 15726: 15726: 15726: void 15726: _M_sync(char_type* __base, __size_type __i, __size_type __o); 15726: 15726: 15726: 15726: void 15726: _M_update_egptr() 15726: { 15726: if (char_type* __pptr = this->pptr()) 15726: { 15726: char_type* __egptr = this->egptr(); 15726: if (!__egptr || __pptr > __egptr) 15726: { 15726: if (_M_mode & ios_base::in) 15726: this->setg(this->eback(), this->gptr(), __pptr); 15726: else 15726: this->setg(__pptr, __pptr, __pptr); 15726: } 15726: } 15726: } 15726: 15726: 15726: 15726: void 15726: _M_pbump(char_type* __pbeg, char_type* __pend, off_type __off); 15726: 15726: private: 15726: 15726: 15726: 15726: 15726: __attribute__((__always_inline__)) 15726: char_type* 15726: _M_high_mark() const noexcept 15726: { 15726: if (char_type* __pptr = this->pptr()) 15726: { 15726: char_type* __egptr = this->egptr(); 15726: if (!__egptr || __pptr > __egptr) 15726: return __pptr; 15726: else 15726: return __egptr; 15726: } 15726: return 0; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: struct __xfer_bufptrs 15726: { 15726: __xfer_bufptrs(const basic_stringbuf& __from, basic_stringbuf* __to) 15726: : _M_to{__to}, _M_goff{-1, -1, -1}, _M_poff{-1, -1, -1} 15726: { 15726: const _CharT* const __str = __from._M_string.data(); 15726: const _CharT* __end = nullptr; 15726: if (__from.eback()) 15726: { 15726: _M_goff[0] = __from.eback() - __str; 15726: _M_goff[1] = __from.gptr() - __str; 15726: _M_goff[2] = __from.egptr() - __str; 15726: __end = __from.egptr(); 15726: } 15726: if (__from.pbase()) 15726: { 15726: _M_poff[0] = __from.pbase() - __str; 15726: _M_poff[1] = __from.pptr() - __from.pbase(); 15726: _M_poff[2] = __from.epptr() - __str; 15726: if (!__end || __from.pptr() > __end) 15726: __end = __from.pptr(); 15726: } 15726: 15726: 15726: if (__end) 15726: { 15726: 15726: 15726: auto& __mut_from = const_cast(__from); 15726: __mut_from._M_string._M_length(__end - __str); 15726: } 15726: } 15726: 15726: ~__xfer_bufptrs() 15726: { 15726: char_type* __str = const_cast(_M_to->_M_string.data()); 15726: if (_M_goff[0] != -1) 15726: _M_to->setg(__str+_M_goff[0], __str+_M_goff[1], __str+_M_goff[2]); 15726: if (_M_poff[0] != -1) 15726: _M_to->_M_pbump(__str+_M_poff[0], __str+_M_poff[2], _M_poff[1]); 15726: } 15726: 15726: basic_stringbuf* _M_to; 15726: off_type _M_goff[3]; 15726: off_type _M_poff[3]; 15726: }; 15726: # 513 "/usr/include/c++/13/sstream" 3 15726: basic_stringbuf(basic_stringbuf&& __rhs, __xfer_bufptrs&&) 15726: : __streambuf_type(static_cast(__rhs)), 15726: _M_mode(__rhs._M_mode), _M_string(std::move(__rhs._M_string)) 15726: { } 15726: # 528 "/usr/include/c++/13/sstream" 3 15726: }; 15726: # 546 "/usr/include/c++/13/sstream" 3 15726: template 15726: class basic_istringstream : public basic_istream<_CharT, _Traits> 15726: { 15726: public: 15726: 15726: typedef _CharT char_type; 15726: typedef _Traits traits_type; 15726: 15726: 15726: typedef _Alloc allocator_type; 15726: typedef typename traits_type::int_type int_type; 15726: typedef typename traits_type::pos_type pos_type; 15726: typedef typename traits_type::off_type off_type; 15726: 15726: 15726: typedef basic_string<_CharT, _Traits, _Alloc> __string_type; 15726: typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type; 15726: typedef basic_istream __istream_type; 15726: 15726: private: 15726: __stringbuf_type _M_stringbuf; 15726: 15726: public: 15726: # 580 "/usr/include/c++/13/sstream" 3 15726: basic_istringstream() 15726: : __istream_type(), _M_stringbuf(ios_base::in) 15726: { this->init(&_M_stringbuf); } 15726: # 596 "/usr/include/c++/13/sstream" 3 15726: explicit 15726: basic_istringstream(ios_base::openmode __mode) 15726: : __istream_type(), _M_stringbuf(__mode | ios_base::in) 15726: { this->init(&_M_stringbuf); } 15726: # 614 "/usr/include/c++/13/sstream" 3 15726: explicit 15726: basic_istringstream(const __string_type& __str, 15726: ios_base::openmode __mode = ios_base::in) 15726: : __istream_type(), _M_stringbuf(__str, __mode | ios_base::in) 15726: { this->init(&_M_stringbuf); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ~basic_istringstream() 15726: { } 15726: 15726: 15726: basic_istringstream(const basic_istringstream&) = delete; 15726: 15726: basic_istringstream(basic_istringstream&& __rhs) 15726: : __istream_type(std::move(__rhs)), 15726: _M_stringbuf(std::move(__rhs._M_stringbuf)) 15726: { __istream_type::set_rdbuf(&_M_stringbuf); } 15726: # 671 "/usr/include/c++/13/sstream" 3 15726: basic_istringstream& 15726: operator=(const basic_istringstream&) = delete; 15726: 15726: basic_istringstream& 15726: operator=(basic_istringstream&& __rhs) 15726: { 15726: __istream_type::operator=(std::move(__rhs)); 15726: _M_stringbuf = std::move(__rhs._M_stringbuf); 15726: return *this; 15726: } 15726: 15726: void 15726: swap(basic_istringstream& __rhs) 15726: { 15726: __istream_type::swap(__rhs); 15726: _M_stringbuf.swap(__rhs._M_stringbuf); 15726: } 15726: # 697 "/usr/include/c++/13/sstream" 3 15726: __stringbuf_type* 15726: rdbuf() const 15726: { return const_cast<__stringbuf_type*>(&_M_stringbuf); } 15726: 15726: 15726: 15726: 15726: 15726: __string_type 15726: str() const 15726: { return _M_stringbuf.str(); } 15726: # 735 "/usr/include/c++/13/sstream" 3 15726: void 15726: str(const __string_type& __s) 15726: { _M_stringbuf.str(__s); } 15726: # 752 "/usr/include/c++/13/sstream" 3 15726: }; 15726: # 770 "/usr/include/c++/13/sstream" 3 15726: template 15726: class basic_ostringstream : public basic_ostream<_CharT, _Traits> 15726: { 15726: public: 15726: 15726: typedef _CharT char_type; 15726: typedef _Traits traits_type; 15726: 15726: 15726: typedef _Alloc allocator_type; 15726: typedef typename traits_type::int_type int_type; 15726: typedef typename traits_type::pos_type pos_type; 15726: typedef typename traits_type::off_type off_type; 15726: 15726: 15726: typedef basic_string<_CharT, _Traits, _Alloc> __string_type; 15726: typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type; 15726: typedef basic_ostream __ostream_type; 15726: 15726: private: 15726: __stringbuf_type _M_stringbuf; 15726: 15726: public: 15726: # 804 "/usr/include/c++/13/sstream" 3 15726: basic_ostringstream() 15726: : __ostream_type(), _M_stringbuf(ios_base::out) 15726: { this->init(&_M_stringbuf); } 15726: # 820 "/usr/include/c++/13/sstream" 3 15726: explicit 15726: basic_ostringstream(ios_base::openmode __mode) 15726: : __ostream_type(), _M_stringbuf(__mode | ios_base::out) 15726: { this->init(&_M_stringbuf); } 15726: # 838 "/usr/include/c++/13/sstream" 3 15726: explicit 15726: basic_ostringstream(const __string_type& __str, 15726: ios_base::openmode __mode = ios_base::out) 15726: : __ostream_type(), _M_stringbuf(__str, __mode | ios_base::out) 15726: { this->init(&_M_stringbuf); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ~basic_ostringstream() 15726: { } 15726: 15726: 15726: basic_ostringstream(const basic_ostringstream&) = delete; 15726: 15726: basic_ostringstream(basic_ostringstream&& __rhs) 15726: : __ostream_type(std::move(__rhs)), 15726: _M_stringbuf(std::move(__rhs._M_stringbuf)) 15726: { __ostream_type::set_rdbuf(&_M_stringbuf); } 15726: # 895 "/usr/include/c++/13/sstream" 3 15726: basic_ostringstream& 15726: operator=(const basic_ostringstream&) = delete; 15726: 15726: basic_ostringstream& 15726: operator=(basic_ostringstream&& __rhs) 15726: { 15726: __ostream_type::operator=(std::move(__rhs)); 15726: _M_stringbuf = std::move(__rhs._M_stringbuf); 15726: return *this; 15726: } 15726: 15726: void 15726: swap(basic_ostringstream& __rhs) 15726: { 15726: __ostream_type::swap(__rhs); 15726: _M_stringbuf.swap(__rhs._M_stringbuf); 15726: } 15726: # 921 "/usr/include/c++/13/sstream" 3 15726: __stringbuf_type* 15726: rdbuf() const 15726: { return const_cast<__stringbuf_type*>(&_M_stringbuf); } 15726: 15726: 15726: 15726: 15726: 15726: __string_type 15726: str() const 15726: { return _M_stringbuf.str(); } 15726: # 959 "/usr/include/c++/13/sstream" 3 15726: void 15726: str(const __string_type& __s) 15726: { _M_stringbuf.str(__s); } 15726: # 976 "/usr/include/c++/13/sstream" 3 15726: }; 15726: # 994 "/usr/include/c++/13/sstream" 3 15726: template 15726: class basic_stringstream : public basic_iostream<_CharT, _Traits> 15726: { 15726: public: 15726: 15726: typedef _CharT char_type; 15726: typedef _Traits traits_type; 15726: 15726: 15726: typedef _Alloc allocator_type; 15726: typedef typename traits_type::int_type int_type; 15726: typedef typename traits_type::pos_type pos_type; 15726: typedef typename traits_type::off_type off_type; 15726: 15726: 15726: typedef basic_string<_CharT, _Traits, _Alloc> __string_type; 15726: typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type; 15726: typedef basic_iostream __iostream_type; 15726: 15726: private: 15726: __stringbuf_type _M_stringbuf; 15726: 15726: public: 15726: # 1028 "/usr/include/c++/13/sstream" 3 15726: basic_stringstream() 15726: : __iostream_type(), _M_stringbuf(ios_base::out | ios_base::in) 15726: { this->init(&_M_stringbuf); } 15726: # 1042 "/usr/include/c++/13/sstream" 3 15726: explicit 15726: basic_stringstream(ios_base::openmode __m) 15726: : __iostream_type(), _M_stringbuf(__m) 15726: { this->init(&_M_stringbuf); } 15726: # 1058 "/usr/include/c++/13/sstream" 3 15726: explicit 15726: basic_stringstream(const __string_type& __str, 15726: ios_base::openmode __m = ios_base::out | ios_base::in) 15726: : __iostream_type(), _M_stringbuf(__str, __m) 15726: { this->init(&_M_stringbuf); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ~basic_stringstream() 15726: { } 15726: 15726: 15726: basic_stringstream(const basic_stringstream&) = delete; 15726: 15726: basic_stringstream(basic_stringstream&& __rhs) 15726: : __iostream_type(std::move(__rhs)), 15726: _M_stringbuf(std::move(__rhs._M_stringbuf)) 15726: { __iostream_type::set_rdbuf(&_M_stringbuf); } 15726: # 1117 "/usr/include/c++/13/sstream" 3 15726: basic_stringstream& 15726: operator=(const basic_stringstream&) = delete; 15726: 15726: basic_stringstream& 15726: operator=(basic_stringstream&& __rhs) 15726: { 15726: __iostream_type::operator=(std::move(__rhs)); 15726: _M_stringbuf = std::move(__rhs._M_stringbuf); 15726: return *this; 15726: } 15726: 15726: void 15726: swap(basic_stringstream& __rhs) 15726: { 15726: __iostream_type::swap(__rhs); 15726: _M_stringbuf.swap(__rhs._M_stringbuf); 15726: } 15726: # 1143 "/usr/include/c++/13/sstream" 3 15726: __stringbuf_type* 15726: rdbuf() const 15726: { return const_cast<__stringbuf_type*>(&_M_stringbuf); } 15726: 15726: 15726: 15726: 15726: 15726: __string_type 15726: str() const 15726: { return _M_stringbuf.str(); } 15726: # 1181 "/usr/include/c++/13/sstream" 3 15726: void 15726: str(const __string_type& __s) 15726: { _M_stringbuf.str(__s); } 15726: # 1198 "/usr/include/c++/13/sstream" 3 15726: }; 15726: 15726: 15726: 15726: template 15726: inline void 15726: swap(basic_stringbuf<_CharT, _Traits, _Allocator>& __x, 15726: basic_stringbuf<_CharT, _Traits, _Allocator>& __y) 15726: noexcept(noexcept(__x.swap(__y))) 15726: { __x.swap(__y); } 15726: 15726: 15726: template 15726: inline void 15726: swap(basic_istringstream<_CharT, _Traits, _Allocator>& __x, 15726: basic_istringstream<_CharT, _Traits, _Allocator>& __y) 15726: { __x.swap(__y); } 15726: 15726: 15726: template 15726: inline void 15726: swap(basic_ostringstream<_CharT, _Traits, _Allocator>& __x, 15726: basic_ostringstream<_CharT, _Traits, _Allocator>& __y) 15726: { __x.swap(__y); } 15726: 15726: 15726: template 15726: inline void 15726: swap(basic_stringstream<_CharT, _Traits, _Allocator>& __x, 15726: basic_stringstream<_CharT, _Traits, _Allocator>& __y) 15726: { __x.swap(__y); } 15726: 15726: 15726: } 15726: 15726: } 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/sstream.tcc" 1 3 15726: # 37 "/usr/include/c++/13/bits/sstream.tcc" 3 15726: 15726: # 38 "/usr/include/c++/13/bits/sstream.tcc" 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: template 15726: typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type 15726: basic_stringbuf<_CharT, _Traits, _Alloc>:: 15726: pbackfail(int_type __c) 15726: { 15726: int_type __ret = traits_type::eof(); 15726: if (this->eback() < this->gptr()) 15726: { 15726: 15726: 15726: const bool __testeof = traits_type::eq_int_type(__c, __ret); 15726: if (!__testeof) 15726: { 15726: const bool __testeq = traits_type::eq(traits_type:: 15726: to_char_type(__c), 15726: this->gptr()[-1]); 15726: const bool __testout = this->_M_mode & ios_base::out; 15726: if (__testeq || __testout) 15726: { 15726: this->gbump(-1); 15726: if (!__testeq) 15726: *this->gptr() = traits_type::to_char_type(__c); 15726: __ret = __c; 15726: } 15726: } 15726: else 15726: { 15726: this->gbump(-1); 15726: __ret = traits_type::not_eof(__c); 15726: } 15726: } 15726: return __ret; 15726: } 15726: 15726: template 15726: typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type 15726: basic_stringbuf<_CharT, _Traits, _Alloc>:: 15726: overflow(int_type __c) 15726: { 15726: const bool __testout = this->_M_mode & ios_base::out; 15726: if (__builtin_expect(!__testout, false)) 15726: return traits_type::eof(); 15726: 15726: const bool __testeof = traits_type::eq_int_type(__c, traits_type::eof()); 15726: if (__builtin_expect(__testeof, false)) 15726: return traits_type::not_eof(__c); 15726: 15726: const __size_type __capacity = _M_string.capacity(); 15726: 15726: 15726: if (size_t(this->epptr() - this->pbase()) < __capacity) 15726: { 15726: 15726: char_type* __base = const_cast(_M_string.data()); 15726: _M_pbump(__base, __base + __capacity, this->pptr() - this->pbase()); 15726: if (_M_mode & ios_base::in) 15726: { 15726: const __size_type __nget = this->gptr() - this->eback(); 15726: const __size_type __eget = this->egptr() - this->eback(); 15726: this->setg(__base, __base + __nget, __base + __eget + 1); 15726: } 15726: *this->pptr() = traits_type::to_char_type(__c); 15726: this->pbump(1); 15726: return __c; 15726: } 15726: 15726: 15726: const __size_type __max_size = _M_string.max_size(); 15726: const bool __testput = this->pptr() < this->epptr(); 15726: if (__builtin_expect(!__testput && __capacity == __max_size, false)) 15726: return traits_type::eof(); 15726: 15726: 15726: 15726: const char_type __conv = traits_type::to_char_type(__c); 15726: if (!__testput) 15726: { 15726: # 129 "/usr/include/c++/13/bits/sstream.tcc" 3 15726: const __size_type __opt_len = std::max(__size_type(2 * __capacity), 15726: __size_type(512)); 15726: const __size_type __len = std::min(__opt_len, __max_size); 15726: __string_type __tmp(_M_string.get_allocator()); 15726: __tmp.reserve(__len); 15726: if (this->pbase()) 15726: __tmp.assign(this->pbase(), this->epptr() - this->pbase()); 15726: __tmp.push_back(__conv); 15726: _M_string.swap(__tmp); 15726: _M_sync(const_cast(_M_string.data()), 15726: this->gptr() - this->eback(), this->pptr() - this->pbase()); 15726: } 15726: else 15726: *this->pptr() = __conv; 15726: this->pbump(1); 15726: return __c; 15726: } 15726: 15726: template 15726: typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type 15726: basic_stringbuf<_CharT, _Traits, _Alloc>:: 15726: underflow() 15726: { 15726: int_type __ret = traits_type::eof(); 15726: const bool __testin = this->_M_mode & ios_base::in; 15726: if (__testin) 15726: { 15726: 15726: _M_update_egptr(); 15726: 15726: if (this->gptr() < this->egptr()) 15726: __ret = traits_type::to_int_type(*this->gptr()); 15726: } 15726: return __ret; 15726: } 15726: 15726: template 15726: typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type 15726: basic_stringbuf<_CharT, _Traits, _Alloc>:: 15726: seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __mode) 15726: { 15726: pos_type __ret = pos_type(off_type(-1)); 15726: bool __testin = (ios_base::in & this->_M_mode & __mode) != 0; 15726: bool __testout = (ios_base::out & this->_M_mode & __mode) != 0; 15726: const bool __testboth = __testin && __testout && __way != ios_base::cur; 15726: __testin &= !(__mode & ios_base::out); 15726: __testout &= !(__mode & ios_base::in); 15726: 15726: 15726: 15726: const char_type* __beg = __testin ? this->eback() : this->pbase(); 15726: if ((__beg || !__off) && (__testin || __testout || __testboth)) 15726: { 15726: _M_update_egptr(); 15726: 15726: off_type __newoffi = __off; 15726: off_type __newoffo = __newoffi; 15726: if (__way == ios_base::cur) 15726: { 15726: __newoffi += this->gptr() - __beg; 15726: __newoffo += this->pptr() - __beg; 15726: } 15726: else if (__way == ios_base::end) 15726: __newoffo = __newoffi += this->egptr() - __beg; 15726: 15726: if ((__testin || __testboth) 15726: && __newoffi >= 0 15726: && this->egptr() - __beg >= __newoffi) 15726: { 15726: this->setg(this->eback(), this->eback() + __newoffi, 15726: this->egptr()); 15726: __ret = pos_type(__newoffi); 15726: } 15726: if ((__testout || __testboth) 15726: && __newoffo >= 0 15726: && this->egptr() - __beg >= __newoffo) 15726: { 15726: _M_pbump(this->pbase(), this->epptr(), __newoffo); 15726: __ret = pos_type(__newoffo); 15726: } 15726: } 15726: return __ret; 15726: } 15726: 15726: template 15726: typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type 15726: basic_stringbuf<_CharT, _Traits, _Alloc>:: 15726: seekpos(pos_type __sp, ios_base::openmode __mode) 15726: { 15726: pos_type __ret = pos_type(off_type(-1)); 15726: const bool __testin = (ios_base::in & this->_M_mode & __mode) != 0; 15726: const bool __testout = (ios_base::out & this->_M_mode & __mode) != 0; 15726: 15726: const char_type* __beg = __testin ? this->eback() : this->pbase(); 15726: if ((__beg || !off_type(__sp)) && (__testin || __testout)) 15726: { 15726: _M_update_egptr(); 15726: 15726: const off_type __pos(__sp); 15726: const bool __testpos = (0 <= __pos 15726: && __pos <= this->egptr() - __beg); 15726: if (__testpos) 15726: { 15726: if (__testin) 15726: this->setg(this->eback(), this->eback() + __pos, 15726: this->egptr()); 15726: if (__testout) 15726: _M_pbump(this->pbase(), this->epptr(), __pos); 15726: __ret = __sp; 15726: } 15726: } 15726: return __ret; 15726: } 15726: 15726: template 15726: void 15726: basic_stringbuf<_CharT, _Traits, _Alloc>:: 15726: _M_sync(char_type* __base, __size_type __i, __size_type __o) 15726: { 15726: const bool __testin = _M_mode & ios_base::in; 15726: const bool __testout = _M_mode & ios_base::out; 15726: char_type* __endg = __base + _M_string.size(); 15726: char_type* __endp = __base + _M_string.capacity(); 15726: 15726: if (__base != _M_string.data()) 15726: { 15726: 15726: __endg += __i; 15726: __i = 0; 15726: __endp = __endg; 15726: } 15726: 15726: if (__testin) 15726: this->setg(__base, __base + __i, __endg); 15726: if (__testout) 15726: { 15726: _M_pbump(__base, __endp, __o); 15726: 15726: 15726: 15726: if (!__testin) 15726: this->setg(__endg, __endg, __endg); 15726: } 15726: } 15726: 15726: template 15726: void 15726: basic_stringbuf<_CharT, _Traits, _Alloc>:: 15726: _M_pbump(char_type* __pbeg, char_type* __pend, off_type __off) 15726: { 15726: this->setp(__pbeg, __pend); 15726: while (__off > __gnu_cxx::__numeric_traits::__max) 15726: { 15726: this->pbump(__gnu_cxx::__numeric_traits::__max); 15726: __off -= __gnu_cxx::__numeric_traits::__max; 15726: } 15726: this->pbump(__off); 15726: } 15726: 15726: 15726: 15726: 15726: extern template class basic_stringbuf; 15726: extern template class basic_istringstream; 15726: extern template class basic_ostringstream; 15726: extern template class basic_stringstream; 15726: 15726: 15726: extern template class basic_stringbuf; 15726: extern template class basic_istringstream; 15726: extern template class basic_ostringstream; 15726: extern template class basic_stringstream; 15726: 15726: 15726: 15726: 15726: } 15726: # 1239 "/usr/include/c++/13/sstream" 2 3 15726: # 16 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 2 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 1 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/cstdarg" 1 3 15726: # 39 "/usr/include/c++/13/cstdarg" 3 15726: 15726: # 40 "/usr/include/c++/13/cstdarg" 3 15726: 15726: 15726: 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stdarg.h" 1 3 4 15726: # 44 "/usr/include/c++/13/cstdarg" 2 3 15726: # 53 "/usr/include/c++/13/cstdarg" 3 15726: namespace std 15726: { 15726: using ::va_list; 15726: } 15726: # 22 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 2 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/functor_wrapper.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 14 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/functor_wrapper.h" 15726: namespace rocksdb { 15726: 15726: namespace detail { 15726: template 15726: struct IndexSequence {}; 15726: 15726: template 15726: struct IndexSequenceHelper 15726: : public IndexSequenceHelper {}; 15726: 15726: template 15726: struct IndexSequenceHelper<0U, Next...> { 15726: using type = IndexSequence; 15726: }; 15726: 15726: template 15726: using make_index_sequence = typename IndexSequenceHelper::type; 15726: 15726: template 15726: void call(Function f, Tuple t, IndexSequence) { 15726: f(std::get(t)...); 15726: } 15726: 15726: template 15726: void call(Function f, Tuple t) { 15726: static constexpr auto size = std::tuple_size::value; 15726: call(f, t, make_index_sequence{}); 15726: } 15726: } 15726: 15726: template 15726: class FunctorWrapper { 15726: public: 15726: explicit FunctorWrapper(std::function functor, Args &&...args) 15726: : functor_(std::move(functor)), args_(std::forward(args)...) {} 15726: 15726: void invoke() { detail::call(functor_, args_); } 15726: 15726: private: 15726: std::function functor_; 15726: std::tuple args_; 15726: }; 15726: } 15726: # 30 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 2 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/thread_status.h" 1 15726: # 14 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/thread_status.h" 15726: 15726: # 29 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/thread_status.h" 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: template 15726: struct constexpr_max { 15726: static const int result = (A > B) ? A : B; 15726: }; 15726: 15726: 15726: 15726: 15726: struct ThreadStatus { 15726: 15726: enum ThreadType : int { 15726: HIGH_PRIORITY = 0, 15726: LOW_PRIORITY, 15726: USER, 15726: BOTTOM_PRIORITY, 15726: NUM_THREAD_TYPES 15726: }; 15726: 15726: 15726: 15726: 15726: enum OperationType : int { 15726: OP_UNKNOWN = 0, 15726: OP_COMPACTION, 15726: OP_FLUSH, 15726: OP_DBOPEN, 15726: OP_GET, 15726: OP_MULTIGET, 15726: OP_DBITERATOR, 15726: OP_VERIFY_DB_CHECKSUM, 15726: OP_VERIFY_FILE_CHECKSUMS, 15726: OP_GETENTITY, 15726: OP_MULTIGETENTITY, 15726: NUM_OP_TYPES 15726: }; 15726: 15726: enum OperationStage : int { 15726: STAGE_UNKNOWN = 0, 15726: STAGE_FLUSH_RUN, 15726: STAGE_FLUSH_WRITE_L0, 15726: STAGE_COMPACTION_PREPARE, 15726: STAGE_COMPACTION_RUN, 15726: STAGE_COMPACTION_PROCESS_KV, 15726: STAGE_COMPACTION_INSTALL, 15726: STAGE_COMPACTION_SYNC_FILE, 15726: STAGE_PICK_MEMTABLES_TO_FLUSH, 15726: STAGE_MEMTABLE_ROLLBACK, 15726: STAGE_MEMTABLE_INSTALL_FLUSH_RESULTS, 15726: NUM_OP_STAGES 15726: }; 15726: 15726: enum CompactionPropertyType : int { 15726: COMPACTION_JOB_ID = 0, 15726: COMPACTION_INPUT_OUTPUT_LEVEL, 15726: COMPACTION_PROP_FLAGS, 15726: COMPACTION_TOTAL_INPUT_BYTES, 15726: COMPACTION_BYTES_READ, 15726: COMPACTION_BYTES_WRITTEN, 15726: NUM_COMPACTION_PROPERTIES 15726: }; 15726: 15726: enum FlushPropertyType : int { 15726: FLUSH_JOB_ID = 0, 15726: FLUSH_BYTES_MEMTABLES, 15726: FLUSH_BYTES_WRITTEN, 15726: NUM_FLUSH_PROPERTIES 15726: }; 15726: 15726: 15726: 15726: static const int kNumOperationProperties = 15726: constexpr_max::result; 15726: 15726: 15726: 15726: 15726: enum StateType : int { 15726: STATE_UNKNOWN = 0, 15726: STATE_MUTEX_WAIT = 1, 15726: NUM_STATE_TYPES 15726: }; 15726: 15726: ThreadStatus(const uint64_t _id, const ThreadType _thread_type, 15726: const std::string& _db_name, const std::string& _cf_name, 15726: const OperationType _operation_type, 15726: const uint64_t _op_elapsed_micros, 15726: const OperationStage _operation_stage, 15726: const uint64_t _op_props[], const StateType _state_type) 15726: : thread_id(_id), 15726: thread_type(_thread_type), 15726: db_name(_db_name), 15726: cf_name(_cf_name), 15726: operation_type(_operation_type), 15726: op_elapsed_micros(_op_elapsed_micros), 15726: operation_stage(_operation_stage), 15726: state_type(_state_type) { 15726: for (int i = 0; i < kNumOperationProperties; ++i) { 15726: op_properties[i] = _op_props[i]; 15726: } 15726: } 15726: 15726: 15726: const uint64_t thread_id; 15726: 15726: 15726: 15726: const ThreadType thread_type; 15726: 15726: 15726: 15726: 15726: const std::string db_name; 15726: 15726: 15726: 15726: 15726: const std::string cf_name; 15726: 15726: 15726: const OperationType operation_type; 15726: 15726: 15726: const uint64_t op_elapsed_micros; 15726: 15726: 15726: 15726: const OperationStage operation_stage; 15726: 15726: 15726: 15726: 15726: uint64_t op_properties[kNumOperationProperties]; 15726: 15726: 15726: const StateType state_type; 15726: 15726: 15726: 15726: 15726: static std::string GetThreadTypeName(ThreadType thread_type); 15726: 15726: 15726: static const std::string& GetOperationName(OperationType op_type); 15726: 15726: static const std::string MicrosToString(uint64_t op_elapsed_time); 15726: 15726: 15726: static const std::string& GetOperationStageName(OperationStage stage); 15726: 15726: 15726: 15726: static const std::string& GetOperationPropertyName(OperationType op_type, 15726: int i); 15726: 15726: 15726: 15726: static std::map InterpretOperationProperties( 15726: OperationType op_type, const uint64_t* op_properties); 15726: 15726: 15726: static const std::string& GetStateName(StateType state_type); 15726: }; 15726: 15726: } 15726: # 33 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 2 15726: # 48 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: namespace rocksdb { 15726: 15726: class DynamicLibrary; 15726: class FileLock; 15726: class Logger; 15726: class RandomAccessFile; 15726: class SequentialFile; 15726: class Slice; 15726: struct DataVerificationInfo; 15726: class WritableFile; 15726: class RandomRWFile; 15726: class MemoryMappedFileBuffer; 15726: class Directory; 15726: struct DBOptions; 15726: struct ImmutableDBOptions; 15726: struct MutableDBOptions; 15726: class RateLimiter; 15726: class ThreadStatusUpdater; 15726: struct ThreadStatus; 15726: class FileSystem; 15726: class SystemClock; 15726: struct ConfigOptions; 15726: struct IOOptions; 15726: 15726: const size_t kDefaultPageSize = 4 * 1024; 15726: 15726: 15726: struct EnvOptions { 15726: 15726: EnvOptions(); 15726: 15726: 15726: explicit EnvOptions(const DBOptions& options); 15726: 15726: 15726: 15726: bool use_mmap_reads = false; 15726: 15726: 15726: bool use_mmap_writes = true; 15726: 15726: 15726: bool use_direct_reads = false; 15726: 15726: 15726: bool use_direct_writes = false; 15726: 15726: 15726: bool allow_fallocate = true; 15726: 15726: 15726: bool set_fd_cloexec = true; 15726: 15726: 15726: 15726: 15726: 15726: uint64_t bytes_per_sync = 0; 15726: # 122 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: bool strict_bytes_per_sync = false; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool fallocate_with_keep_size = true; 15726: 15726: 15726: size_t compaction_readahead_size = 0; 15726: 15726: 15726: size_t random_access_max_buffer_size = 0; 15726: 15726: 15726: size_t writable_file_max_buffer_size = 1024 * 1024; 15726: 15726: 15726: RateLimiter* rate_limiter = nullptr; 15726: }; 15726: 15726: 15726: 15726: 15726: class Env : public Customizable { 15726: public: 15726: static const char* kDefaultName() { return "DefaultEnv"; } 15726: struct FileAttributes { 15726: 15726: std::string name; 15726: 15726: 15726: uint64_t size_bytes; 15726: }; 15726: 15726: Env(); 15726: 15726: 15726: explicit Env(const std::shared_ptr& fs); 15726: Env(const std::shared_ptr& fs, 15726: const std::shared_ptr& clock); 15726: 15726: Env(const Env&) = delete; 15726: void operator=(const Env&) = delete; 15726: 15726: ~Env() override; 15726: 15726: static const char* Type() { return "Environment"; } 15726: 15726: 15726: 15726: const char* Name() const override { return ""; } 15726: # 190 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: static Status CreateFromString(const ConfigOptions& config_options, 15726: const std::string& value, Env** result); 15726: static Status CreateFromString(const ConfigOptions& config_options, 15726: const std::string& value, Env** result, 15726: std::shared_ptr* guard); 15726: 15726: 15726: 15726: 15726: 15726: static Status CreateFromUri(const ConfigOptions& options, 15726: const std::string& env_uri, 15726: const std::string& fs_uri, Env** result, 15726: std::shared_ptr* guard); 15726: 15726: 15726: 15726: 15726: 15726: 15726: static Env* Default(); 15726: 15726: 15726: virtual Status RegisterDbPaths(const std::vector& ) { 15726: return Status::OK(); 15726: } 15726: 15726: virtual Status UnregisterDbPaths(const std::vector& ) { 15726: return Status::OK(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status NewSequentialFile(const std::string& fname, 15726: std::unique_ptr* result, 15726: const EnvOptions& options) = 0; 15726: # 238 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: virtual Status NewRandomAccessFile(const std::string& fname, 15726: std::unique_ptr* result, 15726: const EnvOptions& options) = 0; 15726: 15726: 15726: enum WriteLifeTimeHint { 15726: WLTH_NOT_SET = 0, 15726: WLTH_NONE, 15726: WLTH_SHORT, 15726: WLTH_MEDIUM, 15726: WLTH_LONG, 15726: WLTH_EXTREME, 15726: }; 15726: # 259 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: virtual Status NewWritableFile(const std::string& fname, 15726: std::unique_ptr* result, 15726: const EnvOptions& options) = 0; 15726: # 271 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: virtual Status ReopenWritableFile(const std::string& , 15726: std::unique_ptr* , 15726: const EnvOptions& ) { 15726: return Status::NotSupported("Env::ReopenWritableFile() not supported."); 15726: } 15726: 15726: 15726: virtual Status ReuseWritableFile(const std::string& fname, 15726: const std::string& old_fname, 15726: std::unique_ptr* result, 15726: const EnvOptions& options); 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status NewRandomRWFile(const std::string& , 15726: std::unique_ptr* , 15726: const EnvOptions& ) { 15726: return Status::NotSupported("RandomRWFile is not implemented in this Env"); 15726: } 15726: 15726: 15726: 15726: 15726: virtual Status NewMemoryMappedFileBuffer( 15726: const std::string& , 15726: std::unique_ptr* ) { 15726: return Status::NotSupported( 15726: "MemoryMappedFileBuffer is not implemented in this Env"); 15726: } 15726: # 311 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: virtual Status NewDirectory(const std::string& name, 15726: std::unique_ptr* result) = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status FileExists(const std::string& fname) = 0; 15726: # 329 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: virtual Status GetChildren(const std::string& dir, 15726: std::vector* result) = 0; 15726: # 343 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: virtual Status GetChildrenFileAttributes(const std::string& dir, 15726: std::vector* result); 15726: 15726: 15726: virtual Status DeleteFile(const std::string& fname) = 0; 15726: 15726: 15726: virtual Status Truncate(const std::string& , size_t ) { 15726: return Status::NotSupported("Truncate is not supported for this Env"); 15726: } 15726: 15726: 15726: virtual Status CreateDir(const std::string& dirname) = 0; 15726: 15726: 15726: 15726: virtual Status CreateDirIfMissing(const std::string& dirname) = 0; 15726: 15726: 15726: 15726: 15726: virtual Status DeleteDir(const std::string& dirname) = 0; 15726: 15726: 15726: virtual Status GetFileSize(const std::string& fname, uint64_t* file_size) = 0; 15726: 15726: 15726: virtual Status GetFileModificationTime(const std::string& fname, 15726: uint64_t* file_mtime) = 0; 15726: 15726: virtual Status RenameFile(const std::string& src, 15726: const std::string& target) = 0; 15726: 15726: 15726: virtual Status LinkFile(const std::string& , 15726: const std::string& ) { 15726: return Status::NotSupported("LinkFile is not supported for this Env"); 15726: } 15726: 15726: virtual Status NumFileLinks(const std::string& , 15726: uint64_t* ) { 15726: return Status::NotSupported( 15726: "Getting number of file links is not supported for this Env"); 15726: } 15726: 15726: virtual Status AreFilesSame(const std::string& , 15726: const std::string& , bool* ) { 15726: return Status::NotSupported("AreFilesSame is not supported for this Env"); 15726: } 15726: # 407 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: virtual Status LockFile(const std::string& fname, FileLock** lock) = 0; 15726: 15726: 15726: 15726: 15726: virtual Status UnlockFile(FileLock* lock) = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status LoadLibrary(const std::string& , 15726: const std::string& , 15726: std::shared_ptr* ) { 15726: return Status::NotSupported("LoadLibrary is not implemented in this Env"); 15726: } 15726: 15726: 15726: enum Priority { BOTTOM, LOW, HIGH, USER, TOTAL }; 15726: 15726: static std::string PriorityToString(Priority priority); 15726: 15726: 15726: enum IOPriority { 15726: IO_LOW = 0, 15726: IO_MID = 1, 15726: IO_HIGH = 2, 15726: IO_USER = 3, 15726: IO_TOTAL = 4 15726: }; 15726: 15726: 15726: enum class IOActivity : uint8_t { 15726: kFlush = 0, 15726: kCompaction = 1, 15726: kDBOpen = 2, 15726: kGet = 3, 15726: kMultiGet = 4, 15726: kDBIterator = 5, 15726: kVerifyDBChecksum = 6, 15726: kVerifyFileChecksums = 7, 15726: kGetEntity = 8, 15726: kMultiGetEntity = 9, 15726: kUnknown, 15726: }; 15726: # 465 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: virtual void Schedule(void (*function)(void* arg), void* arg, 15726: Priority pri = LOW, void* tag = nullptr, 15726: void (*unschedFunction)(void* arg) = nullptr) = 0; 15726: 15726: 15726: 15726: virtual int UnSchedule(void* , Priority ) { return 0; } 15726: 15726: 15726: 15726: virtual void StartThread(void (*function)(void* arg), void* arg) = 0; 15726: 15726: 15726: 15726: template 15726: void StartThreadTyped(FunctionT function, Args&&... args) { 15726: using FWType = FunctorWrapper; 15726: StartThread( 15726: [](void* arg) { 15726: auto* functor = static_cast(arg); 15726: functor->invoke(); 15726: delete functor; 15726: }, 15726: new FWType(std::function(function), 15726: std::forward(args)...)); 15726: } 15726: 15726: 15726: virtual void WaitForJoin() {} 15726: 15726: 15726: virtual int ReserveThreads(int , Priority ) { 15726: return 0; 15726: } 15726: 15726: 15726: 15726: virtual int ReleaseThreads(int , Priority ) { 15726: return 0; 15726: } 15726: 15726: 15726: virtual unsigned int GetThreadPoolQueueLen(Priority = LOW) const { 15726: return 0; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: virtual Status GetTestDirectory(std::string* path) = 0; 15726: 15726: 15726: 15726: 15726: virtual Status NewLogger(const std::string& fname, 15726: std::shared_ptr* result); 15726: 15726: 15726: 15726: 15726: virtual uint64_t NowMicros() = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual uint64_t NowNanos() { return NowMicros() * 1000; } 15726: 15726: 15726: virtual uint64_t NowCPUNanos() { return 0; } 15726: 15726: 15726: virtual void SleepForMicroseconds(int micros) = 0; 15726: 15726: 15726: 15726: virtual Status GetHostName(char* name, uint64_t len) = 0; 15726: 15726: 15726: 15726: 15726: virtual Status GetHostNameString(std::string* result); 15726: 15726: 15726: 15726: virtual Status GetCurrentTime(int64_t* unix_time) = 0; 15726: 15726: 15726: virtual Status GetAbsolutePath(const std::string& db_path, 15726: std::string* output_path) = 0; 15726: 15726: 15726: 15726: 15726: virtual void SetBackgroundThreads(int number, Priority pri = LOW) = 0; 15726: virtual int GetBackgroundThreads(Priority pri = LOW) = 0; 15726: 15726: virtual Status SetAllowNonOwnerAccess(bool ) { 15726: return Status::NotSupported("Env::SetAllowNonOwnerAccess() not supported."); 15726: } 15726: 15726: 15726: 15726: 15726: virtual void IncBackgroundThreadsIfNeeded(int number, Priority pri) = 0; 15726: 15726: 15726: virtual void LowerThreadPoolIOPriority(Priority = LOW) {} 15726: 15726: 15726: virtual Status LowerThreadPoolCPUPriority(Priority , 15726: CpuPriority ) { 15726: return Status::NotSupported( 15726: "Env::LowerThreadPoolCPUPriority(Priority, CpuPriority) not supported"); 15726: } 15726: 15726: 15726: virtual void LowerThreadPoolCPUPriority(Priority = LOW) {} 15726: 15726: 15726: virtual std::string TimeToString(uint64_t time) = 0; 15726: 15726: 15726: 15726: 15726: 15726: virtual std::string GenerateUniqueId(); 15726: 15726: 15726: 15726: virtual EnvOptions OptimizeForLogRead(const EnvOptions& env_options) const; 15726: 15726: 15726: 15726: 15726: virtual EnvOptions OptimizeForManifestRead( 15726: const EnvOptions& env_options) const; 15726: 15726: 15726: 15726: 15726: virtual EnvOptions OptimizeForLogWrite(const EnvOptions& env_options, 15726: const DBOptions& db_options) const; 15726: 15726: 15726: 15726: virtual EnvOptions OptimizeForManifestWrite( 15726: const EnvOptions& env_options) const; 15726: 15726: 15726: 15726: 15726: virtual EnvOptions OptimizeForCompactionTableWrite( 15726: const EnvOptions& env_options, 15726: const ImmutableDBOptions& immutable_ops) const; 15726: 15726: 15726: 15726: 15726: virtual EnvOptions OptimizeForCompactionTableRead( 15726: const EnvOptions& env_options, 15726: const ImmutableDBOptions& db_options) const; 15726: 15726: 15726: 15726: 15726: virtual EnvOptions OptimizeForBlobFileRead( 15726: const EnvOptions& env_options, 15726: const ImmutableDBOptions& db_options) const; 15726: 15726: 15726: virtual Status GetThreadList(std::vector* ) { 15726: return Status::NotSupported("Env::GetThreadList() not supported."); 15726: } 15726: 15726: 15726: 15726: 15726: virtual ThreadStatusUpdater* GetThreadStatusUpdater() const { 15726: return thread_status_updater_; 15726: } 15726: 15726: 15726: virtual uint64_t GetThreadID() const; 15726: 15726: 15726: 15726: 15726: 15726: virtual Status GetFreeSpace(const std::string& , 15726: uint64_t* ) { 15726: return Status::NotSupported("Env::GetFreeSpace() not supported."); 15726: } 15726: 15726: 15726: virtual Status IsDirectory(const std::string& , bool* ) { 15726: return Status::NotSupported("Env::IsDirectory() not supported."); 15726: } 15726: 15726: virtual void SanitizeEnvOptions(EnvOptions* ) const {} 15726: 15726: 15726: 15726: const std::shared_ptr& GetFileSystem() const; 15726: 15726: 15726: 15726: const std::shared_ptr& GetSystemClock() const; 15726: 15726: 15726: 15726: protected: 15726: 15726: 15726: ThreadStatusUpdater* thread_status_updater_; 15726: 15726: 15726: std::shared_ptr file_system_; 15726: 15726: 15726: std::shared_ptr system_clock_; 15726: 15726: private: 15726: static const size_t kMaxHostNameLen = 256; 15726: }; 15726: 15726: 15726: 15726: 15726: ThreadStatusUpdater* CreateThreadStatusUpdater(); 15726: 15726: 15726: class SequentialFile { 15726: public: 15726: SequentialFile() {} 15726: virtual ~SequentialFile(); 15726: # 716 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: virtual Status Read(size_t n, Slice* result, char* scratch) = 0; 15726: # 725 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: virtual Status Skip(uint64_t n) = 0; 15726: 15726: 15726: 15726: virtual bool use_direct_io() const { return false; } 15726: 15726: 15726: 15726: virtual size_t GetRequiredBufferAlignment() const { return kDefaultPageSize; } 15726: 15726: 15726: 15726: 15726: virtual Status InvalidateCache(size_t , size_t ) { 15726: return Status::NotSupported( 15726: "SequentialFile::InvalidateCache not supported."); 15726: } 15726: 15726: 15726: 15726: virtual Status PositionedRead(uint64_t , size_t , 15726: Slice* , char* ) { 15726: return Status::NotSupported( 15726: "SequentialFile::PositionedRead() not supported."); 15726: } 15726: 15726: 15726: 15726: }; 15726: 15726: 15726: struct ReadRequest { 15726: 15726: uint64_t offset; 15726: 15726: 15726: 15726: size_t len; 15726: 15726: 15726: 15726: char* scratch; 15726: 15726: 15726: 15726: Slice result; 15726: 15726: 15726: Status status; 15726: }; 15726: 15726: 15726: class RandomAccessFile { 15726: public: 15726: RandomAccessFile() {} 15726: virtual ~RandomAccessFile(); 15726: # 796 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: virtual Status Read(uint64_t offset, size_t n, Slice* result, 15726: char* scratch) const = 0; 15726: 15726: 15726: virtual Status Prefetch(uint64_t , size_t ) { 15726: return Status::OK(); 15726: } 15726: # 811 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: virtual Status MultiRead(ReadRequest* reqs, size_t num_reqs) { 15726: 15726: # 812 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 15726: (static_cast ( 15726: # 812 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: reqs != nullptr 15726: # 812 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 812 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: "reqs != nullptr" 15726: # 812 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 812 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: ; 15726: for (size_t i = 0; i < num_reqs; ++i) { 15726: ReadRequest& req = reqs[i]; 15726: req.status = Read(req.offset, req.len, &req.result, req.scratch); 15726: } 15726: return Status::OK(); 15726: } 15726: # 835 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: virtual size_t GetUniqueId(char* , size_t ) const { 15726: return 0; 15726: 15726: } 15726: 15726: enum AccessPattern { NORMAL, RANDOM, SEQUENTIAL, WILLNEED, DONTNEED }; 15726: 15726: virtual void Hint(AccessPattern ) {} 15726: 15726: 15726: 15726: virtual bool use_direct_io() const { return false; } 15726: 15726: 15726: 15726: virtual size_t GetRequiredBufferAlignment() const { return kDefaultPageSize; } 15726: 15726: 15726: 15726: 15726: virtual Status InvalidateCache(size_t , size_t ) { 15726: return Status::NotSupported( 15726: "RandomAccessFile::InvalidateCache not supported."); 15726: } 15726: 15726: 15726: 15726: }; 15726: 15726: 15726: 15726: 15726: class WritableFile { 15726: public: 15726: WritableFile() 15726: : last_preallocated_block_(0), 15726: preallocation_block_size_(0), 15726: io_priority_(Env::IO_TOTAL), 15726: write_hint_(Env::WLTH_NOT_SET), 15726: strict_bytes_per_sync_(false) {} 15726: 15726: explicit WritableFile(const EnvOptions& options) 15726: : last_preallocated_block_(0), 15726: preallocation_block_size_(0), 15726: io_priority_(Env::IO_TOTAL), 15726: write_hint_(Env::WLTH_NOT_SET), 15726: strict_bytes_per_sync_(options.strict_bytes_per_sync) {} 15726: 15726: WritableFile(const WritableFile&) = delete; 15726: void operator=(const WritableFile&) = delete; 15726: 15726: 15726: 15726: 15726: virtual ~WritableFile(); 15726: 15726: 15726: 15726: 15726: virtual Status Append(const Slice& data) = 0; 15726: # 903 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: virtual Status Append(const Slice& data, 15726: const DataVerificationInfo& ) { 15726: return Append(data); 15726: } 15726: # 928 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: virtual Status PositionedAppend(const Slice& , 15726: uint64_t ) { 15726: return Status::NotSupported( 15726: "WritableFile::PositionedAppend() not supported."); 15726: } 15726: # 941 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: virtual Status PositionedAppend( 15726: const Slice& , uint64_t , 15726: const DataVerificationInfo& ) { 15726: return Status::NotSupported("PositionedAppend"); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: virtual Status Truncate(uint64_t ) { return Status::OK(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status Close() = 0; 15726: virtual Status Flush() = 0; 15726: virtual Status Sync() = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status Fsync() { return Sync(); } 15726: 15726: 15726: 15726: virtual bool IsSyncThreadSafe() const { return false; } 15726: 15726: 15726: 15726: virtual bool use_direct_io() const { return false; } 15726: 15726: 15726: 15726: virtual size_t GetRequiredBufferAlignment() const { return kDefaultPageSize; } 15726: # 993 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: virtual void SetIOPriority(Env::IOPriority pri) { io_priority_ = pri; } 15726: 15726: virtual Env::IOPriority GetIOPriority() { return io_priority_; } 15726: 15726: virtual void SetWriteLifeTimeHint(Env::WriteLifeTimeHint hint) { 15726: write_hint_ = hint; 15726: } 15726: 15726: virtual Env::WriteLifeTimeHint GetWriteLifeTimeHint() { return write_hint_; } 15726: 15726: 15726: 15726: virtual uint64_t GetFileSize() = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void SetPreallocationBlockSize(size_t size) { 15726: preallocation_block_size_ = size; 15726: } 15726: 15726: virtual void GetPreallocationStatus(size_t* block_size, 15726: size_t* last_allocated_block) { 15726: *last_allocated_block = last_preallocated_block_; 15726: *block_size = preallocation_block_size_; 15726: } 15726: 15726: 15726: virtual size_t GetUniqueId(char* , size_t ) const { 15726: return 0; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: virtual Status InvalidateCache(size_t , size_t ) { 15726: return Status::NotSupported("WritableFile::InvalidateCache not supported."); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status RangeSync(uint64_t , uint64_t ) { 15726: if (strict_bytes_per_sync_) { 15726: return Sync(); 15726: } 15726: return Status::OK(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void PrepareWrite(size_t offset, size_t len) { 15726: if (preallocation_block_size_ == 0) { 15726: return; 15726: } 15726: 15726: 15726: 15726: const auto block_size = preallocation_block_size_; 15726: size_t new_last_preallocated_block = 15726: (offset + len + block_size - 1) / block_size; 15726: if (new_last_preallocated_block > last_preallocated_block_) { 15726: size_t num_spanned_blocks = 15726: new_last_preallocated_block - last_preallocated_block_; 15726: 15726: Allocate(block_size * last_preallocated_block_, 15726: block_size * num_spanned_blocks) 15726: .PermitUncheckedError(); 15726: last_preallocated_block_ = new_last_preallocated_block; 15726: } 15726: } 15726: 15726: 15726: virtual Status Allocate(uint64_t , uint64_t ) { 15726: return Status::OK(); 15726: } 15726: 15726: 15726: 15726: 15726: protected: 15726: size_t preallocation_block_size() { return preallocation_block_size_; } 15726: 15726: private: 15726: size_t last_preallocated_block_; 15726: size_t preallocation_block_size_; 15726: 15726: protected: 15726: Env::IOPriority io_priority_; 15726: Env::WriteLifeTimeHint write_hint_; 15726: const bool strict_bytes_per_sync_; 15726: }; 15726: 15726: 15726: class RandomRWFile { 15726: public: 15726: RandomRWFile() {} 15726: 15726: RandomRWFile(const RandomRWFile&) = delete; 15726: RandomRWFile& operator=(const RandomRWFile&) = delete; 15726: 15726: 15726: 15726: 15726: virtual ~RandomRWFile() {} 15726: 15726: 15726: 15726: virtual bool use_direct_io() const { return false; } 15726: 15726: 15726: 15726: virtual size_t GetRequiredBufferAlignment() const { return kDefaultPageSize; } 15726: 15726: 15726: 15726: virtual Status Write(uint64_t offset, const Slice& data) = 0; 15726: # 1129 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: virtual Status Read(uint64_t offset, size_t n, Slice* result, 15726: char* scratch) const = 0; 15726: 15726: virtual Status Flush() = 0; 15726: 15726: virtual Status Sync() = 0; 15726: 15726: virtual Status Fsync() { return Sync(); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status Close() = 0; 15726: 15726: 15726: 15726: }; 15726: 15726: 15726: 15726: class MemoryMappedFileBuffer { 15726: public: 15726: MemoryMappedFileBuffer(void* _base, size_t _length) 15726: : base_(_base), length_(_length) {} 15726: 15726: virtual ~MemoryMappedFileBuffer() = 0; 15726: 15726: 15726: 15726: MemoryMappedFileBuffer(const MemoryMappedFileBuffer&) = delete; 15726: MemoryMappedFileBuffer& operator=(const MemoryMappedFileBuffer&) = delete; 15726: 15726: void* GetBase() const { return base_; } 15726: size_t GetLen() const { return length_; } 15726: 15726: protected: 15726: void* base_; 15726: const size_t length_; 15726: }; 15726: 15726: 15726: 15726: class Directory { 15726: public: 15726: 15726: 15726: virtual ~Directory() {} 15726: 15726: virtual Status Fsync() = 0; 15726: 15726: 15726: 15726: virtual Status Close() { return Status::NotSupported("Close"); } 15726: 15726: virtual size_t GetUniqueId(char* , size_t ) const { 15726: return 0; 15726: } 15726: 15726: 15726: 15726: }; 15726: 15726: enum InfoLogLevel : unsigned char { 15726: DEBUG_LEVEL = 0, 15726: INFO_LEVEL, 15726: WARN_LEVEL, 15726: ERROR_LEVEL, 15726: FATAL_LEVEL, 15726: HEADER_LEVEL, 15726: NUM_INFO_LOG_LEVELS, 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: class Logger { 15726: public: 15726: static constexpr size_t kDoNotSupportGetLogFileSize = 15726: # 1210 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 15726: (4294967295U) 15726: # 1210 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: ; 15726: 15726: 15726: 15726: static const InfoLogLevel kDefaultLogLevel; 15726: 15726: explicit Logger(const InfoLogLevel log_level = InfoLogLevel::INFO_LEVEL) 15726: : closed_(false), log_level_(log_level) {} 15726: 15726: Logger(const Logger&) = delete; 15726: void operator=(const Logger&) = delete; 15726: 15726: virtual ~Logger(); 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status Close(); 15726: 15726: 15726: 15726: 15726: virtual void LogHeader(const char* format, va_list ap) { 15726: 15726: 15726: Logv(InfoLogLevel::INFO_LEVEL, format, ap); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void Logv(const char* , va_list ) { 15726: 15726: # 1246 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 15726: (static_cast ( 15726: # 1246 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: false 15726: # 1246 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1246 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: "false" 15726: # 1246 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1246 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: ; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: virtual void Logv(const InfoLogLevel log_level, const char* format, 15726: va_list ap); 15726: 15726: virtual size_t GetLogFileSize() const { return kDoNotSupportGetLogFileSize; } 15726: 15726: virtual void Flush() {} 15726: virtual InfoLogLevel GetInfoLogLevel() const { return log_level_; } 15726: virtual void SetInfoLogLevel(const InfoLogLevel log_level) { 15726: log_level_ = log_level; 15726: } 15726: 15726: 15726: 15726: protected: 15726: virtual Status CloseImpl(); 15726: bool closed_; 15726: 15726: private: 15726: InfoLogLevel log_level_; 15726: }; 15726: 15726: 15726: 15726: 15726: class FileLock { 15726: public: 15726: FileLock() {} 15726: virtual ~FileLock(); 15726: 15726: private: 15726: 15726: FileLock(const FileLock&) = delete; 15726: void operator=(const FileLock&) = delete; 15726: }; 15726: 15726: class DynamicLibrary { 15726: public: 15726: virtual ~DynamicLibrary() {} 15726: 15726: 15726: virtual const char* Name() const = 0; 15726: 15726: 15726: 15726: template 15726: Status LoadFunction(const std::string& sym_name, std::function* function) { 15726: 15726: # 1299 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 15726: (static_cast ( 15726: # 1299 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: nullptr != function 15726: # 1299 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1299 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: "nullptr != function" 15726: # 1299 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1299 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: ; 15726: void* ptr = nullptr; 15726: Status s = LoadSymbol(sym_name, &ptr); 15726: *function = reinterpret_cast(ptr); 15726: return s; 15726: } 15726: 15726: virtual Status LoadSymbol(const std::string& sym_name, void** func) = 0; 15726: }; 15726: 15726: void LogFlush(const std::shared_ptr& info_log); 15726: 15726: void Log(const InfoLogLevel log_level, const std::shared_ptr& info_log, 15726: const char* format, ...) __attribute__((__format__(__printf__, 3, 4))); 15726: 15726: 15726: void Header(const std::shared_ptr& info_log, const char* format, ...) 15726: __attribute__((__format__(__printf__, 2, 3))); 15726: void Debug(const std::shared_ptr& info_log, const char* format, ...) 15726: __attribute__((__format__(__printf__, 2, 3))); 15726: void Info(const std::shared_ptr& info_log, const char* format, ...) 15726: __attribute__((__format__(__printf__, 2, 3))); 15726: void Warn(const std::shared_ptr& info_log, const char* format, ...) 15726: __attribute__((__format__(__printf__, 2, 3))); 15726: void Error(const std::shared_ptr& info_log, const char* format, ...) 15726: __attribute__((__format__(__printf__, 2, 3))); 15726: void Fatal(const std::shared_ptr& info_log, const char* format, ...) 15726: __attribute__((__format__(__printf__, 2, 3))); 15726: 15726: 15726: 15726: void Log(const std::shared_ptr& info_log, const char* format, ...) 15726: __attribute__((__format__(__printf__, 2, 3))); 15726: 15726: void LogFlush(Logger* info_log); 15726: 15726: void Log(const InfoLogLevel log_level, Logger* info_log, const char* format, 15726: ...) __attribute__((__format__(__printf__, 3, 4))); 15726: 15726: 15726: void Log(Logger* info_log, const char* format, ...) 15726: __attribute__((__format__(__printf__, 2, 3))); 15726: 15726: 15726: void Header(Logger* info_log, const char* format, ...) 15726: __attribute__((__format__(__printf__, 2, 3))); 15726: void Debug(Logger* info_log, const char* format, ...) 15726: __attribute__((__format__(__printf__, 2, 3))); 15726: void Info(Logger* info_log, const char* format, ...) 15726: __attribute__((__format__(__printf__, 2, 3))); 15726: void Warn(Logger* info_log, const char* format, ...) 15726: __attribute__((__format__(__printf__, 2, 3))); 15726: void Error(Logger* info_log, const char* format, ...) 15726: __attribute__((__format__(__printf__, 2, 3))); 15726: void Fatal(Logger* info_log, const char* format, ...) 15726: __attribute__((__format__(__printf__, 2, 3))); 15726: 15726: 15726: Status WriteStringToFile(Env* env, const Slice& data, const std::string& fname, 15726: bool should_sync = false, 15726: const IOOptions* io_options = nullptr); 15726: 15726: 15726: Status ReadFileToString(Env* env, const std::string& fname, std::string* data); 15726: # 1392 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/env.h" 15726: class EnvWrapper : public Env { 15726: public: 15726: 15726: 15726: 15726: 15726: 15726: struct Target { 15726: Env* env; 15726: std::shared_ptr guard; 15726: 15726: 15726: explicit Target(Env* t) : env(t) {} 15726: 15726: 15726: explicit Target(std::unique_ptr&& t) : guard(t.release()) { 15726: env = guard.get(); 15726: } 15726: 15726: 15726: explicit Target(const std::shared_ptr& t) : guard(t) { 15726: env = guard.get(); 15726: } 15726: 15726: 15726: void Prepare() { 15726: if (guard.get() != nullptr) { 15726: env = guard.get(); 15726: } else if (env == nullptr) { 15726: env = Env::Default(); 15726: } 15726: } 15726: }; 15726: 15726: 15726: explicit EnvWrapper(Env* t); 15726: explicit EnvWrapper(std::unique_ptr&& t); 15726: explicit EnvWrapper(const std::shared_ptr& t); 15726: ~EnvWrapper() override; 15726: 15726: 15726: Env* target() const { return target_.env; } 15726: 15726: 15726: 15726: const char* Name() const override { return target_.env->Name(); } 15726: 15726: 15726: Status RegisterDbPaths(const std::vector& paths) override { 15726: return target_.env->RegisterDbPaths(paths); 15726: } 15726: 15726: Status UnregisterDbPaths(const std::vector& paths) override { 15726: return target_.env->UnregisterDbPaths(paths); 15726: } 15726: 15726: Status NewSequentialFile(const std::string& f, 15726: std::unique_ptr* r, 15726: const EnvOptions& options) override { 15726: return target_.env->NewSequentialFile(f, r, options); 15726: } 15726: Status NewRandomAccessFile(const std::string& f, 15726: std::unique_ptr* r, 15726: const EnvOptions& options) override { 15726: return target_.env->NewRandomAccessFile(f, r, options); 15726: } 15726: Status NewWritableFile(const std::string& f, std::unique_ptr* r, 15726: const EnvOptions& options) override { 15726: return target_.env->NewWritableFile(f, r, options); 15726: } 15726: Status ReopenWritableFile(const std::string& fname, 15726: std::unique_ptr* result, 15726: const EnvOptions& options) override { 15726: return target_.env->ReopenWritableFile(fname, result, options); 15726: } 15726: Status ReuseWritableFile(const std::string& fname, 15726: const std::string& old_fname, 15726: std::unique_ptr* r, 15726: const EnvOptions& options) override { 15726: return target_.env->ReuseWritableFile(fname, old_fname, r, options); 15726: } 15726: Status NewRandomRWFile(const std::string& fname, 15726: std::unique_ptr* result, 15726: const EnvOptions& options) override { 15726: return target_.env->NewRandomRWFile(fname, result, options); 15726: } 15726: Status NewMemoryMappedFileBuffer( 15726: const std::string& fname, 15726: std::unique_ptr* result) override { 15726: return target_.env->NewMemoryMappedFileBuffer(fname, result); 15726: } 15726: Status NewDirectory(const std::string& name, 15726: std::unique_ptr* result) override { 15726: return target_.env->NewDirectory(name, result); 15726: } 15726: Status FileExists(const std::string& f) override { 15726: return target_.env->FileExists(f); 15726: } 15726: Status GetChildren(const std::string& dir, 15726: std::vector* r) override { 15726: return target_.env->GetChildren(dir, r); 15726: } 15726: Status GetChildrenFileAttributes( 15726: const std::string& dir, std::vector* result) override { 15726: return target_.env->GetChildrenFileAttributes(dir, result); 15726: } 15726: Status DeleteFile(const std::string& f) override { 15726: return target_.env->DeleteFile(f); 15726: } 15726: Status Truncate(const std::string& fname, size_t size) override { 15726: return target_.env->Truncate(fname, size); 15726: } 15726: Status CreateDir(const std::string& d) override { 15726: return target_.env->CreateDir(d); 15726: } 15726: Status CreateDirIfMissing(const std::string& d) override { 15726: return target_.env->CreateDirIfMissing(d); 15726: } 15726: Status DeleteDir(const std::string& d) override { 15726: return target_.env->DeleteDir(d); 15726: } 15726: Status GetFileSize(const std::string& f, uint64_t* s) override { 15726: return target_.env->GetFileSize(f, s); 15726: } 15726: 15726: Status GetFileModificationTime(const std::string& fname, 15726: uint64_t* file_mtime) override { 15726: return target_.env->GetFileModificationTime(fname, file_mtime); 15726: } 15726: 15726: Status RenameFile(const std::string& s, const std::string& t) override { 15726: return target_.env->RenameFile(s, t); 15726: } 15726: 15726: Status LinkFile(const std::string& s, const std::string& t) override { 15726: return target_.env->LinkFile(s, t); 15726: } 15726: 15726: Status NumFileLinks(const std::string& fname, uint64_t* count) override { 15726: return target_.env->NumFileLinks(fname, count); 15726: } 15726: 15726: Status AreFilesSame(const std::string& first, const std::string& second, 15726: bool* res) override { 15726: return target_.env->AreFilesSame(first, second, res); 15726: } 15726: 15726: Status LockFile(const std::string& f, FileLock** l) override { 15726: return target_.env->LockFile(f, l); 15726: } 15726: 15726: Status UnlockFile(FileLock* l) override { return target_.env->UnlockFile(l); } 15726: 15726: Status IsDirectory(const std::string& path, bool* is_dir) override { 15726: return target_.env->IsDirectory(path, is_dir); 15726: } 15726: 15726: Status LoadLibrary(const std::string& lib_name, 15726: const std::string& search_path, 15726: std::shared_ptr* result) override { 15726: return target_.env->LoadLibrary(lib_name, search_path, result); 15726: } 15726: 15726: void Schedule(void (*f)(void* arg), void* a, Priority pri, 15726: void* tag = nullptr, void (*u)(void* arg) = nullptr) override { 15726: return target_.env->Schedule(f, a, pri, tag, u); 15726: } 15726: 15726: int UnSchedule(void* tag, Priority pri) override { 15726: return target_.env->UnSchedule(tag, pri); 15726: } 15726: 15726: void StartThread(void (*f)(void*), void* a) override { 15726: return target_.env->StartThread(f, a); 15726: } 15726: void WaitForJoin() override { return target_.env->WaitForJoin(); } 15726: unsigned int GetThreadPoolQueueLen(Priority pri = LOW) const override { 15726: return target_.env->GetThreadPoolQueueLen(pri); 15726: } 15726: 15726: int ReserveThreads(int threads_to_be_reserved, Priority pri) override { 15726: return target_.env->ReserveThreads(threads_to_be_reserved, pri); 15726: } 15726: 15726: int ReleaseThreads(int threads_to_be_released, Priority pri) override { 15726: return target_.env->ReleaseThreads(threads_to_be_released, pri); 15726: } 15726: 15726: Status GetTestDirectory(std::string* path) override { 15726: return target_.env->GetTestDirectory(path); 15726: } 15726: Status NewLogger(const std::string& fname, 15726: std::shared_ptr* result) override { 15726: return target_.env->NewLogger(fname, result); 15726: } 15726: uint64_t NowMicros() override { return target_.env->NowMicros(); } 15726: uint64_t NowNanos() override { return target_.env->NowNanos(); } 15726: uint64_t NowCPUNanos() override { return target_.env->NowCPUNanos(); } 15726: 15726: void SleepForMicroseconds(int micros) override { 15726: target_.env->SleepForMicroseconds(micros); 15726: } 15726: Status GetHostName(char* name, uint64_t len) override { 15726: return target_.env->GetHostName(name, len); 15726: } 15726: Status GetCurrentTime(int64_t* unix_time) override { 15726: return target_.env->GetCurrentTime(unix_time); 15726: } 15726: Status GetAbsolutePath(const std::string& db_path, 15726: std::string* output_path) override { 15726: return target_.env->GetAbsolutePath(db_path, output_path); 15726: } 15726: void SetBackgroundThreads(int num, Priority pri) override { 15726: return target_.env->SetBackgroundThreads(num, pri); 15726: } 15726: int GetBackgroundThreads(Priority pri) override { 15726: return target_.env->GetBackgroundThreads(pri); 15726: } 15726: 15726: Status SetAllowNonOwnerAccess(bool allow_non_owner_access) override { 15726: return target_.env->SetAllowNonOwnerAccess(allow_non_owner_access); 15726: } 15726: 15726: void IncBackgroundThreadsIfNeeded(int num, Priority pri) override { 15726: return target_.env->IncBackgroundThreadsIfNeeded(num, pri); 15726: } 15726: 15726: void LowerThreadPoolIOPriority(Priority pool) override { 15726: target_.env->LowerThreadPoolIOPriority(pool); 15726: } 15726: 15726: void LowerThreadPoolCPUPriority(Priority pool) override { 15726: target_.env->LowerThreadPoolCPUPriority(pool); 15726: } 15726: 15726: Status LowerThreadPoolCPUPriority(Priority pool, CpuPriority pri) override { 15726: return target_.env->LowerThreadPoolCPUPriority(pool, pri); 15726: } 15726: 15726: std::string TimeToString(uint64_t time) override { 15726: return target_.env->TimeToString(time); 15726: } 15726: 15726: Status GetThreadList(std::vector* thread_list) override { 15726: return target_.env->GetThreadList(thread_list); 15726: } 15726: 15726: ThreadStatusUpdater* GetThreadStatusUpdater() const override { 15726: return target_.env->GetThreadStatusUpdater(); 15726: } 15726: 15726: uint64_t GetThreadID() const override { return target_.env->GetThreadID(); } 15726: 15726: std::string GenerateUniqueId() override { 15726: return target_.env->GenerateUniqueId(); 15726: } 15726: 15726: EnvOptions OptimizeForLogRead(const EnvOptions& env_options) const override { 15726: return target_.env->OptimizeForLogRead(env_options); 15726: } 15726: EnvOptions OptimizeForManifestRead( 15726: const EnvOptions& env_options) const override { 15726: return target_.env->OptimizeForManifestRead(env_options); 15726: } 15726: EnvOptions OptimizeForLogWrite(const EnvOptions& env_options, 15726: const DBOptions& db_options) const override { 15726: return target_.env->OptimizeForLogWrite(env_options, db_options); 15726: } 15726: EnvOptions OptimizeForManifestWrite( 15726: const EnvOptions& env_options) const override { 15726: return target_.env->OptimizeForManifestWrite(env_options); 15726: } 15726: EnvOptions OptimizeForCompactionTableWrite( 15726: const EnvOptions& env_options, 15726: const ImmutableDBOptions& immutable_ops) const override { 15726: return target_.env->OptimizeForCompactionTableWrite(env_options, 15726: immutable_ops); 15726: } 15726: EnvOptions OptimizeForCompactionTableRead( 15726: const EnvOptions& env_options, 15726: const ImmutableDBOptions& db_options) const override { 15726: return target_.env->OptimizeForCompactionTableRead(env_options, db_options); 15726: } 15726: EnvOptions OptimizeForBlobFileRead( 15726: const EnvOptions& env_options, 15726: const ImmutableDBOptions& db_options) const override { 15726: return target_.env->OptimizeForBlobFileRead(env_options, db_options); 15726: } 15726: Status GetFreeSpace(const std::string& path, uint64_t* diskfree) override { 15726: return target_.env->GetFreeSpace(path, diskfree); 15726: } 15726: void SanitizeEnvOptions(EnvOptions* env_opts) const override { 15726: target_.env->SanitizeEnvOptions(env_opts); 15726: } 15726: Status PrepareOptions(const ConfigOptions& options) override; 15726: std::string SerializeOptions(const ConfigOptions& config_options, 15726: const std::string& header) const override; 15726: 15726: private: 15726: Target target_; 15726: }; 15726: 15726: class SequentialFileWrapper : public SequentialFile { 15726: public: 15726: explicit SequentialFileWrapper(SequentialFile* target) : target_(target) {} 15726: 15726: Status Read(size_t n, Slice* result, char* scratch) override { 15726: return target_->Read(n, result, scratch); 15726: } 15726: Status Skip(uint64_t n) override { return target_->Skip(n); } 15726: bool use_direct_io() const override { return target_->use_direct_io(); } 15726: size_t GetRequiredBufferAlignment() const override { 15726: return target_->GetRequiredBufferAlignment(); 15726: } 15726: Status InvalidateCache(size_t offset, size_t length) override { 15726: return target_->InvalidateCache(offset, length); 15726: } 15726: Status PositionedRead(uint64_t offset, size_t n, Slice* result, 15726: char* scratch) override { 15726: return target_->PositionedRead(offset, n, result, scratch); 15726: } 15726: 15726: private: 15726: SequentialFile* target_; 15726: }; 15726: 15726: class RandomAccessFileWrapper : public RandomAccessFile { 15726: public: 15726: explicit RandomAccessFileWrapper(RandomAccessFile* target) 15726: : target_(target) {} 15726: 15726: Status Read(uint64_t offset, size_t n, Slice* result, 15726: char* scratch) const override { 15726: return target_->Read(offset, n, result, scratch); 15726: } 15726: Status MultiRead(ReadRequest* reqs, size_t num_reqs) override { 15726: return target_->MultiRead(reqs, num_reqs); 15726: } 15726: Status Prefetch(uint64_t offset, size_t n) override { 15726: return target_->Prefetch(offset, n); 15726: } 15726: size_t GetUniqueId(char* id, size_t max_size) const override { 15726: return target_->GetUniqueId(id, max_size); 15726: } 15726: void Hint(AccessPattern pattern) override { target_->Hint(pattern); } 15726: bool use_direct_io() const override { return target_->use_direct_io(); } 15726: size_t GetRequiredBufferAlignment() const override { 15726: return target_->GetRequiredBufferAlignment(); 15726: } 15726: Status InvalidateCache(size_t offset, size_t length) override { 15726: return target_->InvalidateCache(offset, length); 15726: } 15726: 15726: private: 15726: RandomAccessFile* target_; 15726: }; 15726: 15726: class WritableFileWrapper : public WritableFile { 15726: public: 15726: explicit WritableFileWrapper(WritableFile* t) : target_(t) {} 15726: 15726: Status Append(const Slice& data) override { return target_->Append(data); } 15726: Status Append(const Slice& data, 15726: const DataVerificationInfo& verification_info) override { 15726: return target_->Append(data, verification_info); 15726: } 15726: Status PositionedAppend(const Slice& data, uint64_t offset) override { 15726: return target_->PositionedAppend(data, offset); 15726: } 15726: Status PositionedAppend( 15726: const Slice& data, uint64_t offset, 15726: const DataVerificationInfo& verification_info) override { 15726: return target_->PositionedAppend(data, offset, verification_info); 15726: } 15726: Status Truncate(uint64_t size) override { return target_->Truncate(size); } 15726: Status Close() override { return target_->Close(); } 15726: Status Flush() override { return target_->Flush(); } 15726: Status Sync() override { return target_->Sync(); } 15726: Status Fsync() override { return target_->Fsync(); } 15726: bool IsSyncThreadSafe() const override { return target_->IsSyncThreadSafe(); } 15726: 15726: bool use_direct_io() const override { return target_->use_direct_io(); } 15726: 15726: size_t GetRequiredBufferAlignment() const override { 15726: return target_->GetRequiredBufferAlignment(); 15726: } 15726: 15726: void SetIOPriority(Env::IOPriority pri) override { 15726: target_->SetIOPriority(pri); 15726: } 15726: 15726: Env::IOPriority GetIOPriority() override { return target_->GetIOPriority(); } 15726: 15726: void SetWriteLifeTimeHint(Env::WriteLifeTimeHint hint) override { 15726: target_->SetWriteLifeTimeHint(hint); 15726: } 15726: 15726: Env::WriteLifeTimeHint GetWriteLifeTimeHint() override { 15726: return target_->GetWriteLifeTimeHint(); 15726: } 15726: 15726: uint64_t GetFileSize() override { return target_->GetFileSize(); } 15726: 15726: void SetPreallocationBlockSize(size_t size) override { 15726: target_->SetPreallocationBlockSize(size); 15726: } 15726: 15726: void GetPreallocationStatus(size_t* block_size, 15726: size_t* last_allocated_block) override { 15726: target_->GetPreallocationStatus(block_size, last_allocated_block); 15726: } 15726: 15726: size_t GetUniqueId(char* id, size_t max_size) const override { 15726: return target_->GetUniqueId(id, max_size); 15726: } 15726: 15726: Status InvalidateCache(size_t offset, size_t length) override { 15726: return target_->InvalidateCache(offset, length); 15726: } 15726: 15726: Status RangeSync(uint64_t offset, uint64_t nbytes) override { 15726: return target_->RangeSync(offset, nbytes); 15726: } 15726: 15726: void PrepareWrite(size_t offset, size_t len) override { 15726: target_->PrepareWrite(offset, len); 15726: } 15726: 15726: Status Allocate(uint64_t offset, uint64_t len) override { 15726: return target_->Allocate(offset, len); 15726: } 15726: 15726: private: 15726: WritableFile* target_; 15726: }; 15726: 15726: class RandomRWFileWrapper : public RandomRWFile { 15726: public: 15726: explicit RandomRWFileWrapper(RandomRWFile* target) : target_(target) {} 15726: 15726: bool use_direct_io() const override { return target_->use_direct_io(); } 15726: size_t GetRequiredBufferAlignment() const override { 15726: return target_->GetRequiredBufferAlignment(); 15726: } 15726: Status Write(uint64_t offset, const Slice& data) override { 15726: return target_->Write(offset, data); 15726: } 15726: Status Read(uint64_t offset, size_t n, Slice* result, 15726: char* scratch) const override { 15726: return target_->Read(offset, n, result, scratch); 15726: } 15726: Status Flush() override { return target_->Flush(); } 15726: Status Sync() override { return target_->Sync(); } 15726: Status Fsync() override { return target_->Fsync(); } 15726: Status Close() override { return target_->Close(); } 15726: 15726: private: 15726: RandomRWFile* target_; 15726: }; 15726: 15726: class DirectoryWrapper : public Directory { 15726: public: 15726: explicit DirectoryWrapper(Directory* target) : target_(target) {} 15726: 15726: Status Fsync() override { return target_->Fsync(); } 15726: Status Close() override { return target_->Close(); } 15726: size_t GetUniqueId(char* id, size_t max_size) const override { 15726: return target_->GetUniqueId(id, max_size); 15726: } 15726: 15726: private: 15726: Directory* target_; 15726: }; 15726: 15726: class LoggerWrapper : public Logger { 15726: public: 15726: explicit LoggerWrapper(Logger* target) : target_(target) {} 15726: 15726: Status Close() override { return target_->Close(); } 15726: void LogHeader(const char* format, va_list ap) override { 15726: return target_->LogHeader(format, ap); 15726: } 15726: void Logv(const char* format, va_list ap) override { 15726: return target_->Logv(format, ap); 15726: } 15726: void Logv(const InfoLogLevel log_level, const char* format, 15726: va_list ap) override { 15726: return target_->Logv(log_level, format, ap); 15726: } 15726: size_t GetLogFileSize() const override { return target_->GetLogFileSize(); } 15726: void Flush() override { return target_->Flush(); } 15726: InfoLogLevel GetInfoLogLevel() const override { 15726: return target_->GetInfoLogLevel(); 15726: } 15726: void SetInfoLogLevel(const InfoLogLevel log_level) override { 15726: return target_->SetInfoLogLevel(log_level); 15726: } 15726: 15726: private: 15726: Logger* target_; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: Env* NewMemEnv(Env* base_env); 15726: 15726: 15726: 15726: 15726: Env* NewTimedEnv(Env* base_env); 15726: 15726: 15726: 15726: 15726: Status NewEnvLogger(const std::string& fname, Env* env, 15726: std::shared_ptr* result); 15726: 15726: 15726: 15726: std::unique_ptr NewCompositeEnv(const std::shared_ptr& fs); 15726: 15726: } 15726: # 22 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 1 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/cstdarg" 1 3 15726: # 39 "/usr/include/c++/13/cstdarg" 3 15726: 15726: # 40 "/usr/include/c++/13/cstdarg" 3 15726: # 23 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 2 15726: # 33 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 1 15726: # 14 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/cstring" 1 3 15726: # 39 "/usr/include/c++/13/cstring" 3 15726: 15726: # 40 "/usr/include/c++/13/cstring" 3 15726: # 23 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 2 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class IOStatus : public Status { 15726: public: 15726: using Code = Status::Code; 15726: using SubCode = Status::SubCode; 15726: 15726: enum IOErrorScope : unsigned char { 15726: kIOErrorScopeFileSystem, 15726: kIOErrorScopeFile, 15726: kIOErrorScopeRange, 15726: kIOErrorScopeMax, 15726: }; 15726: 15726: 15726: IOStatus() : IOStatus(kOk, kNone) {} 15726: ~IOStatus() {} 15726: 15726: 15726: IOStatus(const IOStatus& s); 15726: IOStatus& operator=(const IOStatus& s); 15726: IOStatus(IOStatus&& s) noexcept; 15726: IOStatus& operator=(IOStatus&& s) noexcept; 15726: bool operator==(const IOStatus& rhs) const; 15726: bool operator!=(const IOStatus& rhs) const; 15726: 15726: void SetRetryable(bool retryable) { retryable_ = retryable; } 15726: void SetDataLoss(bool data_loss) { data_loss_ = data_loss; } 15726: void SetScope(IOErrorScope scope) { 15726: scope_ = static_cast(scope); 15726: } 15726: 15726: bool GetRetryable() const { return retryable_; } 15726: bool GetDataLoss() const { return data_loss_; } 15726: IOErrorScope GetScope() const { return static_cast(scope_); } 15726: 15726: 15726: static IOStatus OK() { return IOStatus(); } 15726: 15726: static IOStatus NotSupported(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return IOStatus(kNotSupported, msg, msg2); 15726: } 15726: static IOStatus NotSupported(SubCode msg = kNone) { 15726: return IOStatus(kNotSupported, msg); 15726: } 15726: 15726: 15726: static IOStatus NotFound(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return IOStatus(kNotFound, msg, msg2); 15726: } 15726: 15726: static IOStatus NotFound(SubCode msg = kNone) { 15726: return IOStatus(kNotFound, msg); 15726: } 15726: 15726: static IOStatus Corruption(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return IOStatus(kCorruption, msg, msg2); 15726: } 15726: static IOStatus Corruption(SubCode msg = kNone) { 15726: return IOStatus(kCorruption, msg); 15726: } 15726: 15726: static IOStatus InvalidArgument(const Slice& msg, 15726: const Slice& msg2 = Slice()) { 15726: return IOStatus(kInvalidArgument, msg, msg2); 15726: } 15726: static IOStatus InvalidArgument(SubCode msg = kNone) { 15726: return IOStatus(kInvalidArgument, msg); 15726: } 15726: 15726: static IOStatus IOError(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return IOStatus(kIOError, msg, msg2); 15726: } 15726: static IOStatus IOError(SubCode msg = kNone) { 15726: return IOStatus(kIOError, msg); 15726: } 15726: 15726: static IOStatus Busy(SubCode msg = kNone) { return IOStatus(kBusy, msg); } 15726: static IOStatus Busy(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return IOStatus(kBusy, msg, msg2); 15726: } 15726: 15726: static IOStatus TimedOut(SubCode msg = kNone) { 15726: return IOStatus(kTimedOut, msg); 15726: } 15726: static IOStatus TimedOut(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return IOStatus(kTimedOut, msg, msg2); 15726: } 15726: 15726: static IOStatus NoSpace() { return IOStatus(kIOError, kNoSpace); } 15726: static IOStatus NoSpace(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return IOStatus(kIOError, kNoSpace, msg, msg2); 15726: } 15726: 15726: static IOStatus PathNotFound() { return IOStatus(kIOError, kPathNotFound); } 15726: static IOStatus PathNotFound(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return IOStatus(kIOError, kPathNotFound, msg, msg2); 15726: } 15726: 15726: static IOStatus IOFenced() { return IOStatus(kIOError, kIOFenced); } 15726: static IOStatus IOFenced(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return IOStatus(kIOError, kIOFenced, msg, msg2); 15726: } 15726: 15726: static IOStatus Aborted(SubCode msg = kNone) { 15726: return IOStatus(kAborted, msg); 15726: } 15726: static IOStatus Aborted(const Slice& msg, const Slice& msg2 = Slice()) { 15726: return IOStatus(kAborted, msg, msg2); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: private: 15726: friend IOStatus status_to_io_status(Status&&); 15726: 15726: explicit IOStatus(Code _code, SubCode _subcode = kNone) 15726: : Status(_code, _subcode, false, false, kIOErrorScopeFileSystem) {} 15726: 15726: IOStatus(Code _code, SubCode _subcode, const Slice& msg, const Slice& msg2); 15726: IOStatus(Code _code, const Slice& msg, const Slice& msg2) 15726: : IOStatus(_code, kNone, msg, msg2) {} 15726: }; 15726: 15726: inline IOStatus::IOStatus(Code _code, SubCode _subcode, const Slice& msg, 15726: const Slice& msg2) 15726: : Status(_code, _subcode, false, false, kIOErrorScopeFileSystem) { 15726: 15726: # 155 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 3 4 15726: (static_cast ( 15726: # 155 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 15726: code_ != kOk 15726: # 155 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 155 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 15726: "code_ != kOk" 15726: # 155 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 155 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 15726: ; 15726: 15726: # 156 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 3 4 15726: (static_cast ( 15726: # 156 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 15726: subcode_ != kMaxSubCode 15726: # 156 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 156 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 15726: "subcode_ != kMaxSubCode" 15726: # 156 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 156 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/io_status.h" 15726: ; 15726: const size_t len1 = msg.size(); 15726: const size_t len2 = msg2.size(); 15726: const size_t size = len1 + (len2 ? (2 + len2) : 0); 15726: char* const result = new char[size + 1]; 15726: memcpy(result, msg.data(), len1); 15726: if (len2) { 15726: result[len1] = ':'; 15726: result[len1 + 1] = ' '; 15726: memcpy(result + len1 + 2, msg2.data(), len2); 15726: } 15726: result[size] = '\0'; 15726: state_.reset(result); 15726: } 15726: 15726: inline IOStatus::IOStatus(const IOStatus& s) : Status(s.code_, s.subcode_) { 15726: 15726: 15726: 15726: retryable_ = s.retryable_; 15726: data_loss_ = s.data_loss_; 15726: scope_ = s.scope_; 15726: state_ = (s.state_ == nullptr) ? nullptr : CopyState(s.state_.get()); 15726: } 15726: inline IOStatus& IOStatus::operator=(const IOStatus& s) { 15726: 15726: 15726: if (this != &s) { 15726: 15726: 15726: 15726: 15726: code_ = s.code_; 15726: subcode_ = s.subcode_; 15726: retryable_ = s.retryable_; 15726: data_loss_ = s.data_loss_; 15726: scope_ = s.scope_; 15726: state_ = (s.state_ == nullptr) ? nullptr : CopyState(s.state_.get()); 15726: } 15726: return *this; 15726: } 15726: 15726: inline IOStatus::IOStatus(IOStatus&& s) noexcept : IOStatus() { 15726: *this = std::move(s); 15726: } 15726: 15726: inline IOStatus& IOStatus::operator=(IOStatus&& s) noexcept { 15726: if (this != &s) { 15726: 15726: 15726: 15726: 15726: code_ = std::move(s.code_); 15726: s.code_ = kOk; 15726: subcode_ = std::move(s.subcode_); 15726: s.subcode_ = kNone; 15726: retryable_ = s.retryable_; 15726: data_loss_ = s.data_loss_; 15726: scope_ = s.scope_; 15726: s.scope_ = kIOErrorScopeFileSystem; 15726: state_ = std::move(s.state_); 15726: } 15726: return *this; 15726: } 15726: 15726: inline bool IOStatus::operator==(const IOStatus& rhs) const { 15726: 15726: 15726: 15726: 15726: return (code_ == rhs.code_); 15726: } 15726: 15726: inline bool IOStatus::operator!=(const IOStatus& rhs) const { 15726: 15726: 15726: 15726: 15726: return !(*this == rhs); 15726: } 15726: 15726: inline IOStatus status_to_io_status(Status&& status) { 15726: IOStatus io_s; 15726: Status& s = io_s; 15726: s = std::move(status); 15726: return io_s; 15726: } 15726: 15726: } 15726: # 34 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 1 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: 15726: 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 12 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 2 15726: # 21 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 1 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 1 15726: # 12 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compression_type.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: 15726: 15726: enum CompressionType : unsigned char { 15726: 15726: 15726: kNoCompression = 0x0, 15726: kSnappyCompression = 0x1, 15726: kZlibCompression = 0x2, 15726: kBZip2Compression = 0x3, 15726: kLZ4Compression = 0x4, 15726: kLZ4HCCompression = 0x5, 15726: kXpressCompression = 0x6, 15726: kZSTD = 0x7, 15726: 15726: 15726: 15726: 15726: 15726: 15726: kZSTDNotFinalCompression = 0x40, 15726: 15726: 15726: kDisableCompressionOption = 0xff, 15726: }; 15726: 15726: 15726: struct CompressionOptions { 15726: # 53 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compression_type.h" 15726: static constexpr int kDefaultCompressionLevel = 32767; 15726: 15726: 15726: int window_bits = -14; 15726: # 68 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compression_type.h" 15726: int level = kDefaultCompressionLevel; 15726: 15726: 15726: int strategy = 0; 15726: # 93 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compression_type.h" 15726: uint32_t max_dict_bytes = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: uint32_t zstd_max_train_bytes = 0; 15726: # 113 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compression_type.h" 15726: uint32_t parallel_threads = 1; 15726: # 122 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compression_type.h" 15726: bool enabled = false; 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compression_type.h" 15726: uint64_t max_dict_buffer_bytes = 0; 15726: # 153 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compression_type.h" 15726: bool use_zstd_dict_trainer = true; 15726: # 168 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compression_type.h" 15726: int max_compressed_bytes_per_kb = 1024 * 7 / 8; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool checksum = false; 15726: 15726: 15726: 15726: 15726: void SetMinRatio(double min_ratio) { 15726: max_compressed_bytes_per_kb = static_cast(1024.0 / min_ratio + 0.5); 15726: } 15726: }; 15726: 15726: } 15726: # 20 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/assert.h" 1 3 4 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 2 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: namespace detail { 15726: int CountTrailingZeroBitsForSmallEnumSet(uint64_t); 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: class SmallEnumSet { 15726: private: 15726: using StateT = uint64_t; 15726: static constexpr int kStateBits = sizeof(StateT) * 8; 15726: static constexpr int kMaxMax = kStateBits - 1; 15726: static constexpr int kMaxValue = static_cast(MAX_ENUMERATOR); 15726: static_assert(kMaxValue >= 0); 15726: static_assert(kMaxValue <= kMaxMax); 15726: 15726: public: 15726: 15726: SmallEnumSet() : state_(0) {} 15726: 15726: template 15726: constexpr SmallEnumSet(const ENUM_TYPE e, TRest... rest) { 15726: *this = SmallEnumSet(rest...).With(e); 15726: } 15726: 15726: 15726: 15726: static constexpr SmallEnumSet All() { 15726: StateT tmp = StateT{1} << kMaxValue; 15726: return SmallEnumSet(RawStateMarker(), tmp | (tmp - 1)); 15726: } 15726: 15726: 15726: bool operator==(const SmallEnumSet& that) const { 15726: return this->state_ == that.state_; 15726: } 15726: bool operator!=(const SmallEnumSet& that) const { return !(*this == that); } 15726: 15726: 15726: 15726: 15726: bool Contains(const ENUM_TYPE e) const { 15726: int value = static_cast(e); 15726: 15726: # 62 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: (static_cast ( 15726: # 62 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: value >= 0 && value <= kMaxValue 15726: # 62 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 62 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: "value >= 0 && value <= kMaxValue" 15726: # 62 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 62 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: ; 15726: StateT tmp = 1; 15726: return state_ & (tmp << value); 15726: } 15726: 15726: bool empty() const { return state_ == 0; } 15726: 15726: 15726: class const_iterator { 15726: public: 15726: 15726: const_iterator(const const_iterator& that) = default; 15726: const_iterator& operator=(const const_iterator& that) = default; 15726: 15726: 15726: const_iterator(const_iterator&& that) noexcept = default; 15726: const_iterator& operator=(const_iterator&& that) noexcept = default; 15726: 15726: 15726: bool operator==(const const_iterator& that) const { 15726: 15726: # 82 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: (static_cast ( 15726: # 82 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: set_ == that.set_ 15726: # 82 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 82 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: "set_ == that.set_" 15726: # 82 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 82 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: ; 15726: return this->pos_ == that.pos_; 15726: } 15726: 15726: bool operator!=(const const_iterator& that) const { 15726: return !(*this == that); 15726: } 15726: 15726: 15726: const_iterator& operator++() { 15726: if (pos_ < kMaxValue) { 15726: pos_ = set_->SkipUnset(pos_ + 1); 15726: } else { 15726: pos_ = kStateBits; 15726: } 15726: return *this; 15726: } 15726: 15726: 15726: const_iterator operator++(int) { 15726: auto old = *this; 15726: ++*this; 15726: return old; 15726: } 15726: 15726: ENUM_TYPE operator*() const { 15726: 15726: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: (static_cast ( 15726: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: pos_ <= kMaxValue 15726: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: "pos_ <= kMaxValue" 15726: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: ; 15726: return static_cast(pos_); 15726: } 15726: 15726: private: 15726: friend class SmallEnumSet; 15726: const_iterator(const SmallEnumSet* set, int pos) : set_(set), pos_(pos) {} 15726: const SmallEnumSet* set_; 15726: int pos_; 15726: }; 15726: 15726: const_iterator begin() const { return const_iterator(this, SkipUnset(0)); } 15726: 15726: const_iterator end() const { return const_iterator(this, kStateBits); } 15726: 15726: 15726: 15726: 15726: 15726: bool Add(const ENUM_TYPE e) { 15726: int value = static_cast(e); 15726: 15726: # 129 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: (static_cast ( 15726: # 129 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: value >= 0 && value <= kMaxValue 15726: # 129 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 129 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: "value >= 0 && value <= kMaxValue" 15726: # 129 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 129 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: ; 15726: StateT old_state = state_; 15726: state_ |= (StateT{1} << value); 15726: return old_state != state_; 15726: } 15726: 15726: 15726: 15726: bool Remove(const ENUM_TYPE e) { 15726: int value = static_cast(e); 15726: 15726: # 139 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: (static_cast ( 15726: # 139 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: value >= 0 && value <= kMaxValue 15726: # 139 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 139 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: "value >= 0 && value <= kMaxValue" 15726: # 139 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 139 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: ; 15726: StateT old_state = state_; 15726: state_ &= ~(StateT{1} << value); 15726: return old_state != state_; 15726: } 15726: 15726: 15726: 15726: 15726: constexpr SmallEnumSet With(const ENUM_TYPE e) const { 15726: int value = static_cast(e); 15726: 15726: # 150 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: (static_cast ( 15726: # 150 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: value >= 0 && value <= kMaxValue 15726: # 150 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 150 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: "value >= 0 && value <= kMaxValue" 15726: # 150 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 150 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: ; 15726: return SmallEnumSet(RawStateMarker(), state_ | (StateT{1} << value)); 15726: } 15726: template 15726: constexpr SmallEnumSet With(const ENUM_TYPE e1, const ENUM_TYPE e2, 15726: TRest... rest) const { 15726: return With(e1).With(e2, rest...); 15726: } 15726: 15726: 15726: constexpr SmallEnumSet Without(const ENUM_TYPE e) const { 15726: int value = static_cast(e); 15726: 15726: # 162 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: (static_cast ( 15726: # 162 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: value >= 0 && value <= kMaxValue 15726: # 162 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 162 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: "value >= 0 && value <= kMaxValue" 15726: # 162 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 162 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/data_structure.h" 15726: ; 15726: return SmallEnumSet(RawStateMarker(), state_ & ~(StateT{1} << value)); 15726: } 15726: template 15726: constexpr SmallEnumSet Without(const ENUM_TYPE e1, const ENUM_TYPE e2, 15726: TRest... rest) const { 15726: return Without(e1).Without(e2, rest...); 15726: } 15726: 15726: private: 15726: int SkipUnset(int pos) const { 15726: StateT tmp = state_ >> pos; 15726: if (tmp == 0) { 15726: return kStateBits; 15726: } else { 15726: return pos + detail::CountTrailingZeroBitsForSmallEnumSet(tmp); 15726: } 15726: } 15726: struct RawStateMarker {}; 15726: explicit SmallEnumSet(RawStateMarker, StateT state) : state_(state) {} 15726: 15726: StateT state_; 15726: }; 15726: 15726: } 15726: # 21 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memory_allocator.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: 15726: class MemoryAllocator : public Customizable { 15726: public: 15726: static const char* Type() { return "MemoryAllocator"; } 15726: static Status CreateFromString(const ConfigOptions& options, 15726: const std::string& value, 15726: std::shared_ptr* result); 15726: 15726: 15726: virtual void* Allocate(size_t size) = 0; 15726: 15726: 15726: virtual void Deallocate(void* p) = 0; 15726: 15726: 15726: 15726: virtual size_t UsableSize(void* , size_t allocation_size) const { 15726: 15726: return allocation_size; 15726: } 15726: 15726: std::string GetId() const override { return GenerateIndividualId(); } 15726: }; 15726: 15726: struct JemallocAllocatorOptions { 15726: static const char* kName() { return "JemallocAllocatorOptions"; } 15726: 15726: 15726: 15726: 15726: 15726: bool limit_tcache_size = false; 15726: 15726: 15726: 15726: size_t tcache_size_lower_bound = 1024; 15726: 15726: 15726: 15726: size_t tcache_size_upper_bound = 16 * 1024; 15726: 15726: 15726: 15726: 15726: size_t num_arenas = 1; 15726: }; 15726: # 83 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memory_allocator.h" 15726: Status NewJemallocNodumpAllocator( 15726: const JemallocAllocatorOptions& options, 15726: std::shared_ptr* memory_allocator); 15726: 15726: } 15726: # 22 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: class Cache; 15726: struct ConfigOptions; 15726: class SecondaryCache; 15726: # 46 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 15726: using BlockCache = Cache; 15726: using RowCache = Cache; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: enum class CacheEntryRole { 15726: 15726: kDataBlock, 15726: 15726: kFilterBlock, 15726: 15726: kFilterMetaBlock, 15726: 15726: kDeprecatedFilterBlock, 15726: 15726: kIndexBlock, 15726: 15726: kOtherBlock, 15726: 15726: kWriteBuffer, 15726: 15726: 15726: kCompressionDictionaryBuildingBuffer, 15726: 15726: 15726: kFilterConstruction, 15726: 15726: kBlockBasedTableReader, 15726: 15726: kFileMetadata, 15726: 15726: kBlobValue, 15726: 15726: 15726: kBlobCache, 15726: 15726: 15726: kMisc, 15726: }; 15726: constexpr uint32_t kNumCacheEntryRoles = 15726: static_cast(CacheEntryRole::kMisc) + 1; 15726: 15726: 15726: const std::string& GetCacheEntryRoleName(CacheEntryRole); 15726: 15726: 15726: using CacheEntryRoleSet = SmallEnumSet; 15726: 15726: 15726: 15726: 15726: struct BlockCacheEntryStatsMapKeys { 15726: static const std::string& CacheId(); 15726: static const std::string& CacheCapacityBytes(); 15726: static const std::string& LastCollectionDurationSeconds(); 15726: static const std::string& LastCollectionAgeSeconds(); 15726: 15726: static std::string EntryCount(CacheEntryRole); 15726: static std::string UsedBytes(CacheEntryRole); 15726: static std::string UsedPercent(CacheEntryRole); 15726: }; 15726: 15726: extern const bool kDefaultToAdaptiveMutex; 15726: 15726: enum CacheMetadataChargePolicy { 15726: 15726: 15726: kDontChargeCacheMetadata, 15726: 15726: 15726: 15726: kFullChargeCacheMetadata 15726: }; 15726: const CacheMetadataChargePolicy kDefaultCacheMetadataChargePolicy = 15726: kFullChargeCacheMetadata; 15726: 15726: 15726: 15726: struct ShardedCacheOptions { 15726: 15726: 15726: 15726: size_t capacity = 0; 15726: 15726: 15726: 15726: 15726: 15726: int num_shard_bits = -1; 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool strict_capacity_limit = false; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: std::shared_ptr memory_allocator; 15726: 15726: 15726: CacheMetadataChargePolicy metadata_charge_policy = 15726: kDefaultCacheMetadataChargePolicy; 15726: 15726: 15726: 15726: std::shared_ptr secondary_cache; 15726: 15726: 15726: static constexpr int32_t kQuasiRandomHashSeed = -1; 15726: static constexpr int32_t kHostHashSeed = -2; 15726: # 190 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 15726: int32_t hash_seed = kHostHashSeed; 15726: 15726: ShardedCacheOptions() {} 15726: ShardedCacheOptions( 15726: size_t _capacity, int _num_shard_bits, bool _strict_capacity_limit, 15726: std::shared_ptr _memory_allocator = nullptr, 15726: CacheMetadataChargePolicy _metadata_charge_policy = 15726: kDefaultCacheMetadataChargePolicy) 15726: : capacity(_capacity), 15726: num_shard_bits(_num_shard_bits), 15726: strict_capacity_limit(_strict_capacity_limit), 15726: memory_allocator(std::move(_memory_allocator)), 15726: metadata_charge_policy(_metadata_charge_policy) {} 15726: 15726: virtual ~ShardedCacheOptions() = default; 15726: }; 15726: # 214 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 15726: struct LRUCacheOptions : public ShardedCacheOptions { 15726: # 237 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 15726: double high_pri_pool_ratio = 0.5; 15726: double low_pri_pool_ratio = 0.0; 15726: 15726: 15726: 15726: 15726: 15726: bool use_adaptive_mutex = kDefaultToAdaptiveMutex; 15726: 15726: LRUCacheOptions() {} 15726: LRUCacheOptions(size_t _capacity, int _num_shard_bits, 15726: bool _strict_capacity_limit, double _high_pri_pool_ratio, 15726: std::shared_ptr _memory_allocator = nullptr, 15726: bool _use_adaptive_mutex = kDefaultToAdaptiveMutex, 15726: CacheMetadataChargePolicy _metadata_charge_policy = 15726: kDefaultCacheMetadataChargePolicy, 15726: double _low_pri_pool_ratio = 0.0) 15726: : ShardedCacheOptions(_capacity, _num_shard_bits, _strict_capacity_limit, 15726: std::move(_memory_allocator), 15726: _metadata_charge_policy), 15726: high_pri_pool_ratio(_high_pri_pool_ratio), 15726: low_pri_pool_ratio(_low_pri_pool_ratio), 15726: use_adaptive_mutex(_use_adaptive_mutex) {} 15726: 15726: 15726: std::shared_ptr MakeSharedCache() const; 15726: 15726: 15726: 15726: std::shared_ptr MakeSharedRowCache() const; 15726: }; 15726: 15726: 15726: inline std::shared_ptr NewLRUCache( 15726: size_t capacity, int num_shard_bits = -1, 15726: bool strict_capacity_limit = false, double high_pri_pool_ratio = 0.5, 15726: std::shared_ptr memory_allocator = nullptr, 15726: bool use_adaptive_mutex = kDefaultToAdaptiveMutex, 15726: CacheMetadataChargePolicy metadata_charge_policy = 15726: kDefaultCacheMetadataChargePolicy, 15726: double low_pri_pool_ratio = 0.0) { 15726: return LRUCacheOptions(capacity, num_shard_bits, strict_capacity_limit, 15726: high_pri_pool_ratio, memory_allocator, 15726: use_adaptive_mutex, metadata_charge_policy, 15726: low_pri_pool_ratio) 15726: .MakeSharedCache(); 15726: } 15726: 15726: 15726: inline std::shared_ptr NewLRUCache(const LRUCacheOptions& cache_opts) { 15726: return cache_opts.MakeSharedCache(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: struct CompressedSecondaryCacheOptions : LRUCacheOptions { 15726: 15726: CompressionType compression_type = CompressionType::kLZ4Compression; 15726: 15726: 15726: CompressionOptions compression_opts; 15726: 15726: 15726: 15726: 15726: 15726: 15726: uint32_t compress_format_version = 2; 15726: 15726: 15726: 15726: bool enable_custom_split_merge = false; 15726: 15726: 15726: 15726: CacheEntryRoleSet do_not_compress_roles = {CacheEntryRole::kFilterBlock}; 15726: 15726: CompressedSecondaryCacheOptions() {} 15726: CompressedSecondaryCacheOptions( 15726: size_t _capacity, int _num_shard_bits, bool _strict_capacity_limit, 15726: double _high_pri_pool_ratio, double _low_pri_pool_ratio = 0.0, 15726: std::shared_ptr _memory_allocator = nullptr, 15726: bool _use_adaptive_mutex = kDefaultToAdaptiveMutex, 15726: CacheMetadataChargePolicy _metadata_charge_policy = 15726: kDefaultCacheMetadataChargePolicy, 15726: CompressionType _compression_type = CompressionType::kLZ4Compression, 15726: uint32_t _compress_format_version = 2, 15726: bool _enable_custom_split_merge = false, 15726: const CacheEntryRoleSet& _do_not_compress_roles = 15726: {CacheEntryRole::kFilterBlock}) 15726: : LRUCacheOptions(_capacity, _num_shard_bits, _strict_capacity_limit, 15726: _high_pri_pool_ratio, std::move(_memory_allocator), 15726: _use_adaptive_mutex, _metadata_charge_policy, 15726: _low_pri_pool_ratio), 15726: compression_type(_compression_type), 15726: compress_format_version(_compress_format_version), 15726: enable_custom_split_merge(_enable_custom_split_merge), 15726: do_not_compress_roles(_do_not_compress_roles) {} 15726: 15726: 15726: std::shared_ptr MakeSharedSecondaryCache() const; 15726: 15726: 15726: std::shared_ptr MakeSharedCache() const = delete; 15726: }; 15726: 15726: 15726: inline std::shared_ptr NewCompressedSecondaryCache( 15726: size_t capacity, int num_shard_bits = -1, 15726: bool strict_capacity_limit = false, double high_pri_pool_ratio = 0.5, 15726: double low_pri_pool_ratio = 0.0, 15726: std::shared_ptr memory_allocator = nullptr, 15726: bool use_adaptive_mutex = kDefaultToAdaptiveMutex, 15726: CacheMetadataChargePolicy metadata_charge_policy = 15726: kDefaultCacheMetadataChargePolicy, 15726: CompressionType compression_type = CompressionType::kLZ4Compression, 15726: uint32_t compress_format_version = 2, 15726: bool enable_custom_split_merge = false, 15726: const CacheEntryRoleSet& _do_not_compress_roles = { 15726: CacheEntryRole::kFilterBlock}) { 15726: return CompressedSecondaryCacheOptions( 15726: capacity, num_shard_bits, strict_capacity_limit, 15726: high_pri_pool_ratio, low_pri_pool_ratio, memory_allocator, 15726: use_adaptive_mutex, metadata_charge_policy, compression_type, 15726: compress_format_version, enable_custom_split_merge, 15726: _do_not_compress_roles) 15726: .MakeSharedSecondaryCache(); 15726: } 15726: 15726: 15726: inline std::shared_ptr NewCompressedSecondaryCache( 15726: const CompressedSecondaryCacheOptions& opts) { 15726: return opts.MakeSharedSecondaryCache(); 15726: } 15726: # 388 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 15726: struct HyperClockCacheOptions : public ShardedCacheOptions { 15726: # 425 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 15726: size_t estimated_entry_charge; 15726: # 442 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 15726: size_t min_avg_entry_charge = 450; 15726: # 479 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 15726: int eviction_effort_cap = 30; 15726: 15726: HyperClockCacheOptions( 15726: size_t _capacity, size_t _estimated_entry_charge, 15726: int _num_shard_bits = -1, bool _strict_capacity_limit = false, 15726: std::shared_ptr _memory_allocator = nullptr, 15726: CacheMetadataChargePolicy _metadata_charge_policy = 15726: kDefaultCacheMetadataChargePolicy) 15726: : ShardedCacheOptions(_capacity, _num_shard_bits, _strict_capacity_limit, 15726: std::move(_memory_allocator), 15726: _metadata_charge_policy), 15726: estimated_entry_charge(_estimated_entry_charge) {} 15726: 15726: 15726: std::shared_ptr MakeSharedCache() const; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: std::shared_ptr NewClockCache( 15726: size_t capacity, int num_shard_bits = -1, 15726: bool strict_capacity_limit = false, 15726: CacheMetadataChargePolicy metadata_charge_policy = 15726: kDefaultCacheMetadataChargePolicy); 15726: 15726: enum PrimaryCacheType { 15726: kCacheTypeLRU, 15726: kCacheTypeHCC, 15726: kCacheTypeMax, 15726: }; 15726: 15726: enum TieredAdmissionPolicy { 15726: 15726: kAdmPolicyAuto, 15726: 15726: 15726: 15726: kAdmPolicyPlaceholder, 15726: 15726: 15726: kAdmPolicyAllowCacheHits, 15726: 15726: 15726: 15726: kAdmPolicyThreeQueue, 15726: 15726: 15726: 15726: 15726: kAdmPolicyAllowAll, 15726: kAdmPolicyMax, 15726: }; 15726: # 543 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 15726: struct TieredCacheOptions { 15726: 15726: 15726: 15726: 15726: ShardedCacheOptions* cache_opts = nullptr; 15726: PrimaryCacheType cache_type = PrimaryCacheType::kCacheTypeLRU; 15726: TieredAdmissionPolicy adm_policy = TieredAdmissionPolicy::kAdmPolicyAuto; 15726: CompressedSecondaryCacheOptions comp_cache_opts; 15726: 15726: 15726: 15726: 15726: size_t total_capacity = 0; 15726: double compressed_secondary_ratio = 0.0; 15726: 15726: 15726: 15726: std::shared_ptr nvm_sec_cache; 15726: }; 15726: 15726: std::shared_ptr NewTieredCache(const TieredCacheOptions& cache_opts); 15726: # 575 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/cache.h" 15726: Status UpdateTieredCache( 15726: const std::shared_ptr& cache, int64_t total_capacity = -1, 15726: double compressed_secondary_ratio = std::numeric_limits::max(), 15726: TieredAdmissionPolicy adm_policy = TieredAdmissionPolicy::kAdmPolicyMax); 15726: } 15726: # 14 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 1 15726: # 36 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/stdlib.h" 1 3 15726: # 36 "/usr/include/c++/13/stdlib.h" 3 15726: # 1 "/usr/include/c++/13/cstdlib" 1 3 15726: # 39 "/usr/include/c++/13/cstdlib" 3 15726: 15726: # 40 "/usr/include/c++/13/cstdlib" 3 15726: # 37 "/usr/include/c++/13/stdlib.h" 2 3 15726: 15726: 15726: # 38 "/usr/include/c++/13/stdlib.h" 3 15726: using std::abort; 15726: using std::atexit; 15726: using std::exit; 15726: 15726: 15726: using std::at_quick_exit; 15726: 15726: 15726: using std::quick_exit; 15726: 15726: 15726: using std::_Exit; 15726: 15726: 15726: 15726: 15726: using std::div_t; 15726: using std::ldiv_t; 15726: 15726: using std::abs; 15726: using std::atof; 15726: using std::atoi; 15726: using std::atol; 15726: using std::bsearch; 15726: using std::calloc; 15726: using std::div; 15726: using std::free; 15726: using std::getenv; 15726: using std::labs; 15726: using std::ldiv; 15726: using std::malloc; 15726: 15726: using std::mblen; 15726: using std::mbstowcs; 15726: using std::mbtowc; 15726: 15726: using std::qsort; 15726: using std::rand; 15726: using std::realloc; 15726: using std::srand; 15726: using std::strtod; 15726: using std::strtol; 15726: using std::strtoul; 15726: using std::system; 15726: 15726: using std::wcstombs; 15726: using std::wctomb; 15726: # 40 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 2 15726: # 48 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 15726: 15726: # 48 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 15726: namespace rocksdb { 15726: 15726: class Arena; 15726: class Allocator; 15726: class LookupKey; 15726: class SliceTransform; 15726: class Logger; 15726: struct DBOptions; 15726: 15726: using KeyHandle = void*; 15726: 15726: Slice GetLengthPrefixedSlice(const char* data); 15726: 15726: class MemTableRep { 15726: public: 15726: 15726: 15726: class KeyComparator { 15726: public: 15726: using DecodedType = rocksdb::Slice; 15726: 15726: virtual DecodedType decode_key(const char* key) const { 15726: 15726: 15726: return GetLengthPrefixedSlice(key); 15726: } 15726: 15726: 15726: 15726: virtual int operator()(const char* prefix_len_key1, 15726: const char* prefix_len_key2) const = 0; 15726: 15726: virtual int operator()(const char* prefix_len_key, 15726: const Slice& key) const = 0; 15726: 15726: virtual ~KeyComparator() {} 15726: }; 15726: 15726: explicit MemTableRep(Allocator* allocator) : allocator_(allocator) {} 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual KeyHandle Allocate(const size_t len, char** buf); 15726: 15726: 15726: 15726: 15726: 15726: virtual void Insert(KeyHandle handle) = 0; 15726: 15726: 15726: 15726: 15726: virtual bool InsertKey(KeyHandle handle) { 15726: Insert(handle); 15726: return true; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void InsertWithHint(KeyHandle handle, void** ) { 15726: 15726: Insert(handle); 15726: } 15726: 15726: 15726: 15726: 15726: virtual bool InsertKeyWithHint(KeyHandle handle, void** hint) { 15726: InsertWithHint(handle, hint); 15726: return true; 15726: } 15726: # 137 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 15726: virtual void InsertWithHintConcurrently(KeyHandle handle, void** ) { 15726: 15726: InsertConcurrently(handle); 15726: } 15726: 15726: 15726: 15726: 15726: virtual bool InsertKeyWithHintConcurrently(KeyHandle handle, void** hint) { 15726: InsertWithHintConcurrently(handle, hint); 15726: return true; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void InsertConcurrently(KeyHandle handle); 15726: 15726: 15726: 15726: 15726: virtual bool InsertKeyConcurrently(KeyHandle handle) { 15726: InsertConcurrently(handle); 15726: return true; 15726: } 15726: 15726: 15726: virtual bool Contains(const char* key) const = 0; 15726: 15726: 15726: 15726: 15726: 15726: virtual void MarkReadOnly() {} 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void MarkFlushed() {} 15726: # 194 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 15726: virtual void Get(const LookupKey& k, void* callback_args, 15726: bool (*callback_func)(void* arg, const char* entry)); 15726: 15726: virtual uint64_t ApproximateNumEntries(const Slice& , 15726: const Slice& ) { 15726: return 0; 15726: } 15726: 15726: 15726: 15726: virtual void UniqueRandomSample(const uint64_t num_entries, 15726: const uint64_t target_sample_size, 15726: std::unordered_set* entries) { 15726: (void)num_entries; 15726: (void)target_sample_size; 15726: (void)entries; 15726: 15726: # 210 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 3 4 15726: (static_cast ( 15726: # 210 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 15726: false 15726: # 210 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 210 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 15726: "false" 15726: # 210 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 210 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 15726: ; 15726: } 15726: 15726: 15726: 15726: virtual size_t ApproximateMemoryUsage() = 0; 15726: 15726: virtual ~MemTableRep() {} 15726: 15726: 15726: class Iterator { 15726: public: 15726: 15726: 15726: 15726: virtual ~Iterator() {} 15726: 15726: 15726: virtual bool Valid() const = 0; 15726: 15726: 15726: 15726: virtual const char* key() const = 0; 15726: 15726: 15726: 15726: virtual void Next() = 0; 15726: 15726: 15726: 15726: virtual void Prev() = 0; 15726: 15726: 15726: virtual void Seek(const Slice& internal_key, const char* memtable_key) = 0; 15726: 15726: 15726: virtual void SeekForPrev(const Slice& internal_key, 15726: const char* memtable_key) = 0; 15726: 15726: virtual void RandomSeek() {} 15726: 15726: 15726: 15726: virtual void SeekToFirst() = 0; 15726: 15726: 15726: 15726: virtual void SeekToLast() = 0; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Iterator* GetIterator(Arena* arena = nullptr) = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Iterator* GetDynamicPrefixIterator(Arena* arena = nullptr) { 15726: return GetIterator(arena); 15726: } 15726: 15726: 15726: 15726: virtual bool IsMergeOperatorSupported() const { return true; } 15726: 15726: 15726: 15726: virtual bool IsSnapshotSupported() const { return true; } 15726: 15726: protected: 15726: 15726: 15726: virtual Slice UserKey(const char* key) const; 15726: 15726: Allocator* allocator_; 15726: }; 15726: 15726: 15726: 15726: class MemTableRepFactory : public Customizable { 15726: public: 15726: ~MemTableRepFactory() override {} 15726: 15726: static const char* Type() { return "MemTableRepFactory"; } 15726: static Status CreateFromString(const ConfigOptions& config_options, 15726: const std::string& id, 15726: std::unique_ptr* factory); 15726: static Status CreateFromString(const ConfigOptions& config_options, 15726: const std::string& id, 15726: std::shared_ptr* factory); 15726: 15726: virtual MemTableRep* CreateMemTableRep(const MemTableRep::KeyComparator&, 15726: Allocator*, const SliceTransform*, 15726: Logger* logger) = 0; 15726: virtual MemTableRep* CreateMemTableRep( 15726: const MemTableRep::KeyComparator& key_cmp, Allocator* allocator, 15726: const SliceTransform* slice_transform, Logger* logger, 15726: uint32_t ) { 15726: return CreateMemTableRep(key_cmp, allocator, slice_transform, logger); 15726: } 15726: 15726: const char* Name() const override = 0; 15726: 15726: 15726: 15726: virtual bool IsInsertConcurrentlySupported() const { return false; } 15726: 15726: 15726: 15726: 15726: 15726: virtual bool CanHandleDuplicatedKey() const { return false; } 15726: }; 15726: # 337 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 15726: class SkipListFactory : public MemTableRepFactory { 15726: public: 15726: explicit SkipListFactory(size_t lookahead = 0); 15726: 15726: 15726: static const char* kClassName() { return "SkipListFactory"; } 15726: static const char* kNickName() { return "skip_list"; } 15726: const char* Name() const override { return kClassName(); } 15726: const char* NickName() const override { return kNickName(); } 15726: std::string GetId() const override; 15726: 15726: 15726: using MemTableRepFactory::CreateMemTableRep; 15726: MemTableRep* CreateMemTableRep(const MemTableRep::KeyComparator&, Allocator*, 15726: const SliceTransform*, 15726: Logger* logger) override; 15726: 15726: bool IsInsertConcurrentlySupported() const override { return true; } 15726: 15726: bool CanHandleDuplicatedKey() const override { return true; } 15726: 15726: private: 15726: size_t lookahead_; 15726: }; 15726: # 370 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 15726: class VectorRepFactory : public MemTableRepFactory { 15726: size_t count_; 15726: 15726: public: 15726: explicit VectorRepFactory(size_t count = 0); 15726: 15726: 15726: static const char* kClassName() { return "VectorRepFactory"; } 15726: static const char* kNickName() { return "vector"; } 15726: const char* Name() const override { return kClassName(); } 15726: const char* NickName() const override { return kNickName(); } 15726: 15726: 15726: using MemTableRepFactory::CreateMemTableRep; 15726: MemTableRep* CreateMemTableRep(const MemTableRep::KeyComparator&, Allocator*, 15726: const SliceTransform*, 15726: Logger* logger) override; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: MemTableRepFactory* NewHashSkipListRepFactory( 15726: size_t bucket_count = 1000000, int32_t skiplist_height = 4, 15726: int32_t skiplist_branching_factor = 4); 15726: # 415 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/memtablerep.h" 15726: MemTableRepFactory* NewHashLinkListRepFactory( 15726: size_t bucket_count = 50000, size_t huge_page_tlb_size = 0, 15726: int bucket_entries_logging_threshold = 4096, 15726: bool if_log_bucket_dist_when_flash = true, 15726: uint32_t threshold_use_skiplist = 256); 15726: 15726: } 15726: # 16 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/universal_compaction.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/climits" 1 3 15726: # 39 "/usr/include/c++/13/climits" 3 15726: 15726: # 40 "/usr/include/c++/13/climits" 3 15726: 15726: 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/limits.h" 1 3 4 15726: # 34 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/limits.h" 3 4 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/syslimits.h" 1 3 4 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/limits.h" 1 3 4 15726: # 205 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/limits.h" 3 4 15726: # 1 "/usr/include/limits.h" 1 3 4 15726: # 26 "/usr/include/limits.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 15726: # 27 "/usr/include/limits.h" 2 3 4 15726: # 195 "/usr/include/limits.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/posix1_lim.h" 1 3 4 15726: # 27 "/usr/include/arm-linux-gnueabihf/bits/posix1_lim.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 15726: # 28 "/usr/include/arm-linux-gnueabihf/bits/posix1_lim.h" 2 3 4 15726: # 161 "/usr/include/arm-linux-gnueabihf/bits/posix1_lim.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/local_lim.h" 1 3 4 15726: # 38 "/usr/include/arm-linux-gnueabihf/bits/local_lim.h" 3 4 15726: # 1 "/usr/include/linux/limits.h" 1 3 4 15726: # 39 "/usr/include/arm-linux-gnueabihf/bits/local_lim.h" 2 3 4 15726: # 162 "/usr/include/arm-linux-gnueabihf/bits/posix1_lim.h" 2 3 4 15726: # 196 "/usr/include/limits.h" 2 3 4 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/posix2_lim.h" 1 3 4 15726: # 200 "/usr/include/limits.h" 2 3 4 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/xopen_lim.h" 1 3 4 15726: # 64 "/usr/include/arm-linux-gnueabihf/bits/xopen_lim.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/uio_lim.h" 1 3 4 15726: # 65 "/usr/include/arm-linux-gnueabihf/bits/xopen_lim.h" 2 3 4 15726: # 204 "/usr/include/limits.h" 2 3 4 15726: # 206 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/limits.h" 2 3 4 15726: # 8 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/syslimits.h" 2 3 4 15726: # 35 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/limits.h" 2 3 4 15726: # 43 "/usr/include/c++/13/climits" 2 3 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/universal_compaction.h" 2 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: 15726: enum CompactionStopStyle { 15726: kCompactionStopStyleSimilarSize, 15726: kCompactionStopStyleTotalSize 15726: }; 15726: 15726: class CompactionOptionsUniversal { 15726: public: 15726: 15726: 15726: 15726: unsigned int size_ratio; 15726: 15726: 15726: unsigned int min_merge_width; 15726: 15726: 15726: unsigned int max_merge_width; 15726: # 48 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/universal_compaction.h" 15726: unsigned int max_size_amplification_percent; 15726: # 66 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/universal_compaction.h" 15726: int compression_size_percent; 15726: 15726: 15726: 15726: CompactionStopStyle stop_style; 15726: 15726: 15726: 15726: 15726: bool allow_trivial_move; 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool incremental; 15726: 15726: 15726: CompactionOptionsUniversal() 15726: : size_ratio(1), 15726: min_merge_width(2), 15726: max_merge_width( 15726: # 88 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/universal_compaction.h" 3 4 15726: (0x7fffffff * 2U + 1U) 15726: # 88 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/universal_compaction.h" 15726: ), 15726: max_size_amplification_percent(200), 15726: compression_size_percent(-1), 15726: stop_style(kCompactionStopStyleTotalSize), 15726: allow_trivial_move(false), 15726: incremental(false) {} 15726: }; 15726: 15726: } 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: class Slice; 15726: class SliceTransform; 15726: class TablePropertiesCollectorFactory; 15726: class TableFactory; 15726: struct Options; 15726: 15726: enum CompactionStyle : char { 15726: 15726: kCompactionStyleLevel = 0x0, 15726: 15726: kCompactionStyleUniversal = 0x1, 15726: 15726: kCompactionStyleFIFO = 0x2, 15726: 15726: 15726: kCompactionStyleNone = 0x3, 15726: }; 15726: 15726: 15726: 15726: 15726: enum CompactionPri : char { 15726: 15726: kByCompensatedSize = 0x0, 15726: 15726: 15726: kOldestLargestSeqFirst = 0x1, 15726: 15726: 15726: 15726: kOldestSmallestSeqFirst = 0x2, 15726: 15726: 15726: 15726: 15726: 15726: kMinOverlappingRatio = 0x3, 15726: 15726: 15726: 15726: 15726: kRoundRobin = 0x4, 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: enum class Temperature : uint8_t { 15726: kUnknown = 0, 15726: kHot = 0x04, 15726: kWarm = 0x08, 15726: kCold = 0x0C, 15726: kLastTemperature, 15726: }; 15726: 15726: struct FileTemperatureAge { 15726: Temperature temperature = Temperature::kUnknown; 15726: uint64_t age = 0; 15726: }; 15726: 15726: struct CompactionOptionsFIFO { 15726: 15726: 15726: 15726: uint64_t max_table_files_size; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool allow_compaction = false; 15726: 15726: 15726: 15726: 15726: uint64_t age_for_warm = 0; 15726: # 122 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: std::vector file_temperature_age_thresholds{}; 15726: 15726: CompactionOptionsFIFO() : max_table_files_size(1 * 1024 * 1024 * 1024) {} 15726: CompactionOptionsFIFO(uint64_t _max_table_files_size, bool _allow_compaction) 15726: : max_table_files_size(_max_table_files_size), 15726: allow_compaction(_allow_compaction) {} 15726: }; 15726: 15726: 15726: 15726: 15726: enum class CacheTier : uint8_t { 15726: kVolatileTier = 0, 15726: kVolatileCompressedTier = 0x01, 15726: kNonVolatileBlockTier = 0x02, 15726: }; 15726: 15726: enum UpdateStatus { 15726: UPDATE_FAILED = 0, 15726: UPDATED_INPLACE = 1, 15726: UPDATED = 2, 15726: }; 15726: 15726: enum class PrepopulateBlobCache : uint8_t { 15726: kDisable = 0x0, 15726: kFlushOnly = 0x1, 15726: }; 15726: 15726: struct AdvancedColumnFamilyOptions { 15726: # 162 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: int max_write_buffer_number = 2; 15726: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: int min_write_buffer_number_to_merge = 1; 15726: # 183 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: int max_write_buffer_number_to_maintain = 0; 15726: # 230 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: int64_t max_write_buffer_size_to_maintain = 0; 15726: # 251 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: bool inplace_update_support = false; 15726: 15726: 15726: 15726: 15726: 15726: size_t inplace_update_num_locks = 10000; 15726: # 274 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: double experimental_mempurge_threshold = 0.0; 15726: # 317 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: UpdateStatus (*inplace_callback)(char* existing_value, 15726: uint32_t* existing_value_size, 15726: Slice delta_value, 15726: std::string* merged_value) = nullptr; 15726: # 336 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: double memtable_prefix_bloom_size_ratio = 0.0; 15726: # 345 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: bool memtable_whole_key_filtering = false; 15726: # 357 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: size_t memtable_huge_page_size = 0; 15726: # 378 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: std::shared_ptr 15726: memtable_insert_with_hint_prefix_extractor = nullptr; 15726: 15726: 15726: 15726: 15726: 15726: 15726: uint32_t bloom_locality = 0; 15726: # 404 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: size_t arena_block_size = 0; 15726: # 435 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: std::vector compression_per_level; 15726: 15726: 15726: int num_levels = 7; 15726: # 447 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: int level0_slowdown_writes_trigger = 20; 15726: 15726: 15726: 15726: 15726: 15726: 15726: int level0_stop_writes_trigger = 36; 15726: # 468 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: uint64_t target_file_size_base = 64 * 1048576; 15726: 15726: 15726: 15726: 15726: 15726: int target_file_size_multiplier = 1; 15726: # 555 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: bool level_compaction_dynamic_level_bytes = true; 15726: 15726: 15726: 15726: 15726: double max_bytes_for_level_multiplier = 10; 15726: # 571 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: std::vector max_bytes_for_level_multiplier_additional = 15726: std::vector(static_cast(num_levels), 1); 15726: # 581 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: uint64_t max_compaction_bytes = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: uint64_t soft_pending_compaction_bytes_limit = 64 * 1073741824ull; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: uint64_t hard_pending_compaction_bytes_limit = 256 * 1073741824ull; 15726: 15726: 15726: CompactionStyle compaction_style = kCompactionStyleLevel; 15726: 15726: 15726: 15726: 15726: CompactionPri compaction_pri = kMinOverlappingRatio; 15726: 15726: 15726: 15726: 15726: 15726: 15726: CompactionOptionsUniversal compaction_options_universal; 15726: 15726: 15726: 15726: 15726: 15726: 15726: CompactionOptionsFIFO compaction_options_fifo; 15726: # 629 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: uint64_t max_sequential_skip_in_iterations = 8; 15726: 15726: 15726: 15726: 15726: std::shared_ptr memtable_factory = 15726: std::shared_ptr(new SkipListFactory); 15726: # 654 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: using TablePropertiesCollectorFactories = 15726: std::vector>; 15726: TablePropertiesCollectorFactories table_properties_collector_factories; 15726: # 670 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: size_t max_successive_merges = 0; 15726: # 680 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: bool strict_max_successive_merges = false; 15726: # 696 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: bool optimize_filters_for_hits = false; 15726: # 705 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: bool paranoid_file_checks = false; 15726: # 715 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: bool force_consistency_checks = true; 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool report_bg_io_stats = false; 15726: # 756 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: uint64_t ttl = 0xfffffffffffffffe; 15726: # 804 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: uint64_t periodic_compaction_seconds = 0xfffffffffffffffe; 15726: 15726: 15726: 15726: 15726: 15726: uint64_t sample_for_compression = 0; 15726: # 819 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: Temperature last_level_temperature = Temperature::kUnknown; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: Temperature default_write_temperature = Temperature::kUnknown; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: Temperature default_temperature = Temperature::kUnknown; 15726: # 852 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: uint64_t preclude_last_level_data_seconds = 0; 15726: # 875 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: uint64_t preserve_internal_time_seconds = 0; 15726: # 889 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: bool enable_blob_files = false; 15726: # 901 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: uint64_t min_blob_size = 0; 15726: # 910 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: uint64_t blob_file_size = 1ULL << 28; 15726: # 919 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: CompressionType blob_compression_type = kNoCompression; 15726: # 931 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: bool enable_blob_garbage_collection = false; 15726: # 942 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: double blob_garbage_collection_age_cutoff = 0.25; 15726: # 955 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: double blob_garbage_collection_force_threshold = 1.0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: uint64_t blob_compaction_readahead_size = 0; 15726: # 977 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: int blob_file_starting_level = 0; 15726: # 987 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: std::shared_ptr blob_cache = nullptr; 15726: # 998 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: PrepopulateBlobCache prepopulate_blob_cache = PrepopulateBlobCache::kDisable; 15726: # 1014 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: uint32_t memtable_protection_bytes_per_key = 0; 15726: # 1062 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: bool persist_user_defined_timestamps = true; 15726: # 1077 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: uint8_t block_protection_bytes_per_key = 0; 15726: # 1089 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_options.h" 15726: uint32_t bottommost_file_compaction_delay = 0; 15726: 15726: 15726: AdvancedColumnFamilyOptions(); 15726: 15726: explicit AdvancedColumnFamilyOptions(const Options& options); 15726: 15726: 15726: }; 15726: 15726: } 15726: # 22 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 2 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_checksum.h" 1 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_checksum.h" 15726: 15726: 15726: # 1 "/usr/include/c++/13/cassert" 1 3 15726: # 41 "/usr/include/c++/13/cassert" 3 15726: 15726: # 42 "/usr/include/c++/13/cassert" 3 15726: 15726: 15726: # 1 "/usr/include/assert.h" 1 3 4 15726: # 45 "/usr/include/c++/13/cassert" 2 3 15726: # 12 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_checksum.h" 2 15726: # 20 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_checksum.h" 15726: namespace rocksdb { 15726: 15726: 15726: constexpr char kUnknownFileChecksum[] = ""; 15726: 15726: constexpr char kUnknownFileChecksumFuncName[] = "Unknown"; 15726: 15726: 15726: 15726: constexpr char kStandardDbFileChecksumFuncName[] = "FileChecksumCrc32c"; 15726: 15726: struct FileChecksumGenContext { 15726: std::string file_name; 15726: 15726: 15726: 15726: 15726: std::string requested_checksum_func_name; 15726: }; 15726: # 50 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_checksum.h" 15726: class FileChecksumGenerator { 15726: public: 15726: virtual ~FileChecksumGenerator() {} 15726: 15726: 15726: 15726: 15726: virtual void Update(const char* data, size_t n) = 0; 15726: 15726: 15726: virtual void Finalize() = 0; 15726: 15726: 15726: 15726: virtual std::string GetChecksum() const = 0; 15726: 15726: 15726: virtual const char* Name() const = 0; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: class FileChecksumGenFactory : public Customizable { 15726: public: 15726: ~FileChecksumGenFactory() override {} 15726: static const char* Type() { return "FileChecksumGenFactory"; } 15726: static Status CreateFromString( 15726: const ConfigOptions& options, const std::string& value, 15726: std::shared_ptr* result); 15726: 15726: 15726: virtual std::unique_ptr CreateFileChecksumGenerator( 15726: const FileChecksumGenContext& context) = 0; 15726: 15726: 15726: const char* Name() const override = 0; 15726: }; 15726: # 101 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_checksum.h" 15726: class FileChecksumList { 15726: public: 15726: virtual ~FileChecksumList() {} 15726: 15726: 15726: virtual void reset() = 0; 15726: 15726: 15726: virtual size_t size() const = 0; 15726: 15726: 15726: 15726: 15726: virtual Status GetAllFileChecksums( 15726: std::vector* file_numbers, std::vector* checksums, 15726: std::vector* checksum_func_names) = 0; 15726: 15726: 15726: 15726: virtual Status SearchOneFileChecksum(uint64_t file_number, 15726: std::string* checksum, 15726: std::string* checksum_func_name) = 0; 15726: 15726: 15726: virtual Status InsertOneFileChecksum( 15726: uint64_t file_number, const std::string& checksum, 15726: const std::string& checksum_func_name) = 0; 15726: 15726: 15726: virtual Status RemoveOneFileChecksum(uint64_t file_number) = 0; 15726: }; 15726: 15726: 15726: FileChecksumList* NewFileChecksumList(); 15726: # 143 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_checksum.h" 15726: extern std::shared_ptr 15726: GetFileChecksumGenCrc32cFactory(); 15726: 15726: } 15726: # 28 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 16 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_job_stats.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 8 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_job_stats.h" 2 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: struct CompactionJobStats { 15726: CompactionJobStats() { Reset(); } 15726: void Reset(); 15726: 15726: void Add(const CompactionJobStats& stats); 15726: 15726: 15726: uint64_t elapsed_micros; 15726: 15726: 15726: uint64_t cpu_micros; 15726: 15726: 15726: 15726: bool has_num_input_records; 15726: 15726: uint64_t num_input_records; 15726: 15726: uint64_t num_blobs_read; 15726: 15726: size_t num_input_files; 15726: 15726: size_t num_input_files_at_output_level; 15726: 15726: 15726: uint64_t num_output_records; 15726: 15726: size_t num_output_files; 15726: 15726: size_t num_output_files_blob; 15726: 15726: 15726: bool is_full_compaction; 15726: 15726: bool is_manual_compaction; 15726: 15726: 15726: uint64_t total_input_bytes; 15726: 15726: uint64_t total_blob_bytes_read; 15726: 15726: uint64_t total_output_bytes; 15726: 15726: uint64_t total_output_bytes_blob; 15726: 15726: 15726: 15726: 15726: uint64_t num_records_replaced; 15726: 15726: 15726: uint64_t total_input_raw_key_bytes; 15726: 15726: uint64_t total_input_raw_value_bytes; 15726: 15726: 15726: 15726: uint64_t num_input_deletion_records; 15726: 15726: 15726: 15726: uint64_t num_expired_deletion_records; 15726: 15726: 15726: 15726: uint64_t num_corrupt_keys; 15726: 15726: 15726: 15726: 15726: 15726: uint64_t file_write_nanos; 15726: 15726: 15726: uint64_t file_range_sync_nanos; 15726: 15726: 15726: uint64_t file_fsync_nanos; 15726: 15726: 15726: uint64_t file_prepare_write_nanos; 15726: 15726: 15726: 15726: static const size_t kMaxPrefixLength = 8; 15726: 15726: std::string smallest_output_key_prefix; 15726: std::string largest_output_key_prefix; 15726: 15726: 15726: uint64_t num_single_del_fallthru; 15726: 15726: 15726: uint64_t num_single_del_mismatch; 15726: 15726: 15726: }; 15726: } 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 2 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table_properties.h" 1 15726: 15726: 15726: 15726: 15726: 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table_properties.h" 15726: namespace rocksdb { 15726: 15726: class InternalTblPropColl; 15726: # 35 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table_properties.h" 15726: using UserCollectedProperties = std::map; 15726: 15726: 15726: struct TablePropertiesNames { 15726: static const std::string kDbId; 15726: static const std::string kDbSessionId; 15726: static const std::string kDbHostId; 15726: static const std::string kOriginalFileNumber; 15726: static const std::string kDataSize; 15726: static const std::string kIndexSize; 15726: static const std::string kIndexPartitions; 15726: static const std::string kTopLevelIndexSize; 15726: static const std::string kIndexKeyIsUserKey; 15726: static const std::string kIndexValueIsDeltaEncoded; 15726: static const std::string kFilterSize; 15726: static const std::string kRawKeySize; 15726: static const std::string kRawValueSize; 15726: static const std::string kNumDataBlocks; 15726: static const std::string kNumEntries; 15726: static const std::string kNumFilterEntries; 15726: static const std::string kDeletedKeys; 15726: static const std::string kMergeOperands; 15726: static const std::string kNumRangeDeletions; 15726: static const std::string kFormatVersion; 15726: static const std::string kFixedKeyLen; 15726: static const std::string kFilterPolicy; 15726: static const std::string kColumnFamilyName; 15726: static const std::string kColumnFamilyId; 15726: static const std::string kComparator; 15726: static const std::string kMergeOperator; 15726: static const std::string kPrefixExtractorName; 15726: static const std::string kPropertyCollectors; 15726: static const std::string kCompression; 15726: static const std::string kCompressionOptions; 15726: static const std::string kCreationTime; 15726: static const std::string kOldestKeyTime; 15726: static const std::string kFileCreationTime; 15726: static const std::string kSlowCompressionEstimatedDataSize; 15726: static const std::string kFastCompressionEstimatedDataSize; 15726: static const std::string kSequenceNumberTimeMapping; 15726: static const std::string kTailStartOffset; 15726: static const std::string kUserDefinedTimestampsPersisted; 15726: }; 15726: # 92 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table_properties.h" 15726: class TablePropertiesCollector { 15726: public: 15726: virtual ~TablePropertiesCollector() {} 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status Add(const Slice& , const Slice& ) { 15726: return Status::InvalidArgument( 15726: "TablePropertiesCollector::Add() deprecated."); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: virtual Status AddUserKey(const Slice& key, const Slice& value, 15726: EntryType , SequenceNumber , 15726: uint64_t ) { 15726: 15726: return Add(key, value); 15726: } 15726: 15726: 15726: virtual void BlockAdd(uint64_t , 15726: uint64_t , 15726: uint64_t ) { 15726: 15726: return; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status Finish(UserCollectedProperties* properties) = 0; 15726: 15726: 15726: 15726: 15726: virtual UserCollectedProperties GetReadableProperties() const = 0; 15726: 15726: 15726: virtual const char* Name() const = 0; 15726: 15726: 15726: virtual bool NeedCompact() const { return false; } 15726: 15726: 15726: virtual InternalTblPropColl* AsInternal() { return nullptr; } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: class TablePropertiesCollectorFactory : public Customizable { 15726: public: 15726: struct Context { 15726: uint32_t column_family_id; 15726: 15726: 15726: int level_at_creation = kUnknownLevelAtCreation; 15726: static const uint32_t kUnknownColumnFamily; 15726: static const int kUnknownLevelAtCreation = -1; 15726: }; 15726: 15726: ~TablePropertiesCollectorFactory() override {} 15726: static const char* Type() { return "TablePropertiesCollectorFactory"; } 15726: static Status CreateFromString( 15726: const ConfigOptions& options, const std::string& value, 15726: std::shared_ptr* result); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual TablePropertiesCollector* CreateTablePropertiesCollector( 15726: TablePropertiesCollectorFactory::Context context) = 0; 15726: 15726: 15726: const char* Name() const override = 0; 15726: 15726: 15726: 15726: 15726: virtual std::string ToString() const { return Name(); } 15726: }; 15726: 15726: 15726: 15726: struct TableProperties { 15726: public: 15726: 15726: 15726: uint64_t orig_file_number = 0; 15726: 15726: uint64_t data_size = 0; 15726: 15726: uint64_t index_size = 0; 15726: 15726: uint64_t index_partitions = 0; 15726: 15726: uint64_t top_level_index_size = 0; 15726: 15726: 15726: uint64_t index_key_is_user_key = 0; 15726: 15726: uint64_t index_value_is_delta_encoded = 0; 15726: 15726: uint64_t filter_size = 0; 15726: 15726: uint64_t raw_key_size = 0; 15726: 15726: uint64_t raw_value_size = 0; 15726: 15726: uint64_t num_data_blocks = 0; 15726: 15726: uint64_t num_entries = 0; 15726: 15726: uint64_t num_filter_entries = 0; 15726: 15726: uint64_t num_deletions = 0; 15726: 15726: uint64_t num_merge_operands = 0; 15726: 15726: uint64_t num_range_deletions = 0; 15726: 15726: uint64_t format_version = 0; 15726: 15726: uint64_t fixed_key_len = 0; 15726: 15726: 15726: uint64_t column_family_id = rocksdb:: 15726: TablePropertiesCollectorFactory::Context::kUnknownColumnFamily; 15726: # 248 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table_properties.h" 15726: uint64_t creation_time = 0; 15726: 15726: 15726: uint64_t oldest_key_time = 0; 15726: 15726: uint64_t file_creation_time = 0; 15726: 15726: 15726: 15726: uint64_t slow_compression_estimated_data_size = 0; 15726: 15726: 15726: 15726: uint64_t fast_compression_estimated_data_size = 0; 15726: 15726: 15726: 15726: uint64_t external_sst_file_global_seqno_offset = 0; 15726: 15726: 15726: 15726: uint64_t tail_start_offset = 0; 15726: 15726: 15726: 15726: 15726: uint64_t user_defined_timestamps_persisted = 1; 15726: 15726: 15726: 15726: 15726: std::string db_id; 15726: 15726: 15726: 15726: 15726: 15726: std::string db_session_id; 15726: 15726: 15726: 15726: 15726: 15726: std::string db_host_id; 15726: 15726: 15726: 15726: std::string column_family_name; 15726: 15726: 15726: 15726: std::string filter_policy_name; 15726: 15726: 15726: std::string comparator_name; 15726: 15726: 15726: 15726: std::string merge_operator_name; 15726: 15726: 15726: 15726: std::string prefix_extractor_name; 15726: 15726: 15726: 15726: 15726: std::string property_collectors_names; 15726: 15726: 15726: std::string compression_name; 15726: 15726: 15726: std::string compression_options; 15726: 15726: 15726: std::string seqno_to_time_mapping; 15726: 15726: 15726: UserCollectedProperties user_collected_properties; 15726: UserCollectedProperties readable_properties; 15726: 15726: 15726: 15726: std::string ToString(const std::string& prop_delim = "; ", 15726: const std::string& kv_delim = "=") const; 15726: 15726: 15726: 15726: void Add(const TableProperties& tp); 15726: 15726: 15726: 15726: 15726: std::map GetAggregatablePropertiesAsMap() const; 15726: 15726: 15726: 15726: std::size_t ApproximateMemoryUsage() const; 15726: }; 15726: # 357 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table_properties.h" 15726: uint64_t GetDeletedKeys(const UserCollectedProperties& props); 15726: uint64_t GetMergeOperands(const UserCollectedProperties& props, 15726: bool* property_present); 15726: 15726: } 15726: # 22 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 2 15726: 15726: 15726: namespace rocksdb { 15726: 15726: using TablePropertiesCollection = 15726: std::unordered_map>; 15726: 15726: class DB; 15726: class ColumnFamilyHandle; 15726: class Status; 15726: struct CompactionJobStats; 15726: 15726: struct FileCreationBriefInfo { 15726: FileCreationBriefInfo() = default; 15726: FileCreationBriefInfo(const std::string& _db_name, 15726: const std::string& _cf_name, 15726: const std::string& _file_path, int _job_id) 15726: : db_name(_db_name), 15726: cf_name(_cf_name), 15726: file_path(_file_path), 15726: job_id(_job_id) {} 15726: 15726: std::string db_name; 15726: 15726: std::string cf_name; 15726: 15726: std::string file_path; 15726: 15726: 15726: int job_id = 0; 15726: }; 15726: 15726: struct TableFileCreationBriefInfo : public FileCreationBriefInfo { 15726: 15726: TableFileCreationReason reason; 15726: }; 15726: 15726: struct TableFileCreationInfo : public TableFileCreationBriefInfo { 15726: TableFileCreationInfo() = default; 15726: explicit TableFileCreationInfo(TableProperties&& prop) 15726: : table_properties(prop) {} 15726: 15726: uint64_t file_size; 15726: 15726: TableProperties table_properties; 15726: 15726: Status status; 15726: 15726: std::string file_checksum; 15726: 15726: std::string file_checksum_func_name; 15726: }; 15726: 15726: struct BlobFileCreationBriefInfo : public FileCreationBriefInfo { 15726: BlobFileCreationBriefInfo(const std::string& _db_name, 15726: const std::string& _cf_name, 15726: const std::string& _file_path, int _job_id, 15726: BlobFileCreationReason _reason) 15726: : FileCreationBriefInfo(_db_name, _cf_name, _file_path, _job_id), 15726: reason(_reason) {} 15726: 15726: BlobFileCreationReason reason; 15726: }; 15726: 15726: struct BlobFileCreationInfo : public BlobFileCreationBriefInfo { 15726: BlobFileCreationInfo(const std::string& _db_name, const std::string& _cf_name, 15726: const std::string& _file_path, int _job_id, 15726: BlobFileCreationReason _reason, 15726: uint64_t _total_blob_count, uint64_t _total_blob_bytes, 15726: Status _status, const std::string& _file_checksum, 15726: const std::string& _file_checksum_func_name) 15726: : BlobFileCreationBriefInfo(_db_name, _cf_name, _file_path, _job_id, 15726: _reason), 15726: total_blob_count(_total_blob_count), 15726: total_blob_bytes(_total_blob_bytes), 15726: status(_status), 15726: file_checksum(_file_checksum), 15726: file_checksum_func_name(_file_checksum_func_name) {} 15726: 15726: 15726: uint64_t total_blob_count; 15726: 15726: uint64_t total_blob_bytes; 15726: 15726: Status status; 15726: 15726: std::string file_checksum; 15726: 15726: std::string file_checksum_func_name; 15726: }; 15726: 15726: enum class CompactionReason : int { 15726: kUnknown = 0, 15726: 15726: kLevelL0FilesNum, 15726: 15726: kLevelMaxLevelSize, 15726: 15726: kUniversalSizeAmplification, 15726: 15726: kUniversalSizeRatio, 15726: 15726: kUniversalSortedRunNum, 15726: 15726: kFIFOMaxSize, 15726: 15726: kFIFOReduceNumFiles, 15726: 15726: kFIFOTtl, 15726: 15726: kManualCompaction, 15726: 15726: kFilesMarkedForCompaction, 15726: 15726: 15726: kBottommostFiles, 15726: 15726: kTtl, 15726: 15726: 15726: kFlush, 15726: 15726: 15726: 15726: 15726: kExternalSstIngestion, 15726: 15726: kPeriodicCompaction, 15726: 15726: kChangeTemperature, 15726: 15726: kForcedBlobGC, 15726: 15726: 15726: kRoundRobinTtl, 15726: 15726: 15726: kRefitLevel, 15726: 15726: kNumOfReasons, 15726: }; 15726: 15726: const char* GetCompactionReasonString(CompactionReason compaction_reason); 15726: 15726: 15726: enum class FlushReason : int { 15726: kOthers = 0x00, 15726: kGetLiveFiles = 0x01, 15726: kShutDown = 0x02, 15726: kExternalFileIngestion = 0x03, 15726: kManualCompaction = 0x04, 15726: kWriteBufferManager = 0x05, 15726: kWriteBufferFull = 0x06, 15726: kTest = 0x07, 15726: kDeleteFiles = 0x08, 15726: kAutoCompaction = 0x09, 15726: kManualFlush = 0x0a, 15726: kErrorRecovery = 0xb, 15726: 15726: 15726: kErrorRecoveryRetryFlush = 0xc, 15726: kWalFull = 0xd, 15726: 15726: kCatchUpAfterErrorRecovery = 0xe, 15726: }; 15726: 15726: const char* GetFlushReasonString(FlushReason flush_reason); 15726: 15726: 15726: 15726: 15726: 15726: enum class BackgroundErrorReason { 15726: kFlush, 15726: kCompaction, 15726: kWriteCallback, 15726: kMemTable, 15726: kManifestWrite, 15726: kFlushNoWAL, 15726: kManifestWriteNoWAL, 15726: }; 15726: 15726: struct WriteStallInfo { 15726: 15726: std::string cf_name; 15726: 15726: struct { 15726: WriteStallCondition cur; 15726: WriteStallCondition prev; 15726: } condition; 15726: }; 15726: 15726: 15726: struct FileDeletionInfo { 15726: FileDeletionInfo() = default; 15726: 15726: FileDeletionInfo(const std::string& _db_name, const std::string& _file_path, 15726: int _job_id, Status _status) 15726: : db_name(_db_name), 15726: file_path(_file_path), 15726: job_id(_job_id), 15726: status(_status) {} 15726: 15726: std::string db_name; 15726: 15726: std::string file_path; 15726: 15726: int job_id = 0; 15726: 15726: Status status; 15726: }; 15726: 15726: struct TableFileDeletionInfo : public FileDeletionInfo {}; 15726: 15726: struct BlobFileDeletionInfo : public FileDeletionInfo { 15726: BlobFileDeletionInfo(const std::string& _db_name, 15726: const std::string& _file_path, int _job_id, 15726: Status _status) 15726: : FileDeletionInfo(_db_name, _file_path, _job_id, _status) {} 15726: }; 15726: 15726: enum class FileOperationType { 15726: kRead, 15726: kWrite, 15726: kTruncate, 15726: kClose, 15726: kFlush, 15726: kSync, 15726: kFsync, 15726: kRangeSync, 15726: kAppend, 15726: kPositionedAppend, 15726: kOpen, 15726: kVerify 15726: }; 15726: 15726: struct FileOperationInfo { 15726: using Duration = std::chrono::nanoseconds; 15726: using SteadyTimePoint = 15726: std::chrono::time_point; 15726: using SystemTimePoint = 15726: std::chrono::time_point; 15726: using StartTimePoint = std::pair; 15726: using FinishTimePoint = SteadyTimePoint; 15726: 15726: FileOperationType type; 15726: const std::string& path; 15726: 15726: 15726: Temperature temperature; 15726: uint64_t offset; 15726: size_t length; 15726: const Duration duration; 15726: const SystemTimePoint& start_ts; 15726: Status status; 15726: 15726: FileOperationInfo(const FileOperationType _type, const std::string& _path, 15726: const StartTimePoint& _start_ts, 15726: const FinishTimePoint& _finish_ts, const Status& _status, 15726: const Temperature _temperature = Temperature::kUnknown) 15726: : type(_type), 15726: path(_path), 15726: temperature(_temperature), 15726: duration(std::chrono::duration_cast( 15726: _finish_ts - _start_ts.second)), 15726: start_ts(_start_ts.first), 15726: status(_status) {} 15726: static StartTimePoint StartNow() { 15726: return std::make_pair( 15726: std::chrono::system_clock::now(), std::chrono::steady_clock::now()); 15726: } 15726: static FinishTimePoint FinishNow() { 15726: return std::chrono::steady_clock::now(); 15726: } 15726: }; 15726: 15726: struct BlobFileInfo { 15726: BlobFileInfo(const std::string& _blob_file_path, 15726: const uint64_t _blob_file_number) 15726: : blob_file_path(_blob_file_path), blob_file_number(_blob_file_number) {} 15726: 15726: std::string blob_file_path; 15726: uint64_t blob_file_number; 15726: }; 15726: 15726: struct BlobFileAdditionInfo : public BlobFileInfo { 15726: BlobFileAdditionInfo(const std::string& _blob_file_path, 15726: const uint64_t _blob_file_number, 15726: const uint64_t _total_blob_count, 15726: const uint64_t _total_blob_bytes) 15726: : BlobFileInfo(_blob_file_path, _blob_file_number), 15726: total_blob_count(_total_blob_count), 15726: total_blob_bytes(_total_blob_bytes) {} 15726: uint64_t total_blob_count; 15726: uint64_t total_blob_bytes; 15726: }; 15726: 15726: struct BlobFileGarbageInfo : public BlobFileInfo { 15726: BlobFileGarbageInfo(const std::string& _blob_file_path, 15726: const uint64_t _blob_file_number, 15726: const uint64_t _garbage_blob_count, 15726: const uint64_t _garbage_blob_bytes) 15726: : BlobFileInfo(_blob_file_path, _blob_file_number), 15726: garbage_blob_count(_garbage_blob_count), 15726: garbage_blob_bytes(_garbage_blob_bytes) {} 15726: uint64_t garbage_blob_count; 15726: uint64_t garbage_blob_bytes; 15726: }; 15726: 15726: struct FlushJobInfo { 15726: 15726: uint32_t cf_id; 15726: 15726: std::string cf_name; 15726: 15726: std::string file_path; 15726: 15726: uint64_t file_number; 15726: 15726: uint64_t oldest_blob_file_number; 15726: 15726: uint64_t thread_id; 15726: 15726: int job_id; 15726: 15726: 15726: 15726: 15726: bool triggered_writes_slowdown; 15726: 15726: 15726: 15726: 15726: bool triggered_writes_stop; 15726: 15726: SequenceNumber smallest_seqno; 15726: 15726: SequenceNumber largest_seqno; 15726: 15726: TableProperties table_properties; 15726: 15726: FlushReason flush_reason; 15726: 15726: 15726: CompressionType blob_compression_type; 15726: 15726: 15726: std::vector blob_file_addition_infos; 15726: }; 15726: 15726: struct CompactionFileInfo { 15726: 15726: int level; 15726: 15726: 15726: uint64_t file_number; 15726: 15726: 15726: uint64_t oldest_blob_file_number; 15726: }; 15726: 15726: struct SubcompactionJobInfo { 15726: ~SubcompactionJobInfo() { status.PermitUncheckedError(); } 15726: 15726: uint32_t cf_id; 15726: 15726: std::string cf_name; 15726: 15726: Status status; 15726: 15726: uint64_t thread_id; 15726: 15726: int job_id; 15726: 15726: 15726: 15726: 15726: 15726: int subcompaction_job_id; 15726: 15726: int base_input_level; 15726: 15726: int output_level; 15726: 15726: 15726: CompactionReason compaction_reason; 15726: 15726: 15726: CompressionType compression; 15726: 15726: 15726: CompactionJobStats stats; 15726: 15726: 15726: CompressionType blob_compression_type; 15726: }; 15726: 15726: struct CompactionJobInfo { 15726: ~CompactionJobInfo() { status.PermitUncheckedError(); } 15726: 15726: uint32_t cf_id; 15726: 15726: std::string cf_name; 15726: 15726: Status status; 15726: 15726: uint64_t thread_id; 15726: 15726: int job_id; 15726: 15726: 15726: int base_input_level; 15726: 15726: int output_level; 15726: # 444 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 15726: std::vector input_files; 15726: 15726: 15726: std::vector input_file_infos; 15726: 15726: 15726: std::vector output_files; 15726: 15726: 15726: std::vector output_file_infos; 15726: 15726: 15726: 15726: TablePropertiesCollection table_properties; 15726: 15726: 15726: CompactionReason compaction_reason; 15726: 15726: 15726: CompressionType compression; 15726: 15726: 15726: CompactionJobStats stats; 15726: 15726: 15726: CompressionType blob_compression_type; 15726: 15726: 15726: 15726: std::vector blob_file_addition_infos; 15726: 15726: 15726: 15726: std::vector blob_file_garbage_infos; 15726: }; 15726: 15726: struct MemTableInfo { 15726: 15726: std::string cf_name; 15726: 15726: 15726: SequenceNumber first_seqno; 15726: 15726: 15726: 15726: 15726: SequenceNumber earliest_seqno; 15726: 15726: uint64_t num_entries; 15726: 15726: uint64_t num_deletes; 15726: }; 15726: 15726: struct ExternalFileIngestionInfo { 15726: 15726: std::string cf_name; 15726: 15726: std::string external_file_path; 15726: 15726: std::string internal_file_path; 15726: 15726: SequenceNumber global_seqno; 15726: 15726: TableProperties table_properties; 15726: }; 15726: 15726: 15726: struct BackgroundErrorRecoveryInfo { 15726: 15726: Status old_bg_error; 15726: 15726: 15726: 15726: Status new_bg_error; 15726: }; 15726: 15726: struct IOErrorInfo { 15726: IOErrorInfo(const IOStatus& _io_status, FileOperationType _operation, 15726: const std::string& _file_path, size_t _length, uint64_t _offset) 15726: : io_status(_io_status), 15726: operation(_operation), 15726: file_path(_file_path), 15726: length(_length), 15726: offset(_offset) {} 15726: 15726: IOStatus io_status; 15726: FileOperationType operation; 15726: std::string file_path; 15726: size_t length; 15726: uint64_t offset; 15726: }; 15726: # 567 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 15726: class EventListener : public Customizable { 15726: public: 15726: static const char* Type() { return "EventListener"; } 15726: static Status CreateFromString(const ConfigOptions& options, 15726: const std::string& id, 15726: std::shared_ptr* result); 15726: const char* Name() const override { 15726: 15726: 15726: return ""; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void OnFlushCompleted(DB* , 15726: const FlushJobInfo& ) {} 15726: # 595 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 15726: virtual void OnFlushBegin(DB* , 15726: const FlushJobInfo& ) {} 15726: # 609 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 15726: virtual void OnTableFileDeleted(const TableFileDeletionInfo& ) {} 15726: # 618 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 15726: virtual void OnCompactionBegin(DB* , const CompactionJobInfo& ) {} 15726: # 633 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 15726: virtual void OnCompactionCompleted(DB* , 15726: const CompactionJobInfo& ) {} 15726: # 653 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 15726: virtual void OnSubcompactionBegin(const SubcompactionJobInfo& ) {} 15726: # 671 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 15726: virtual void OnSubcompactionCompleted(const SubcompactionJobInfo& ) {} 15726: # 688 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 15726: virtual void OnTableFileCreated(const TableFileCreationInfo& ) {} 15726: # 697 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 15726: virtual void OnTableFileCreationStarted( 15726: const TableFileCreationBriefInfo& ) {} 15726: # 710 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 15726: virtual void OnMemTableSealed(const MemTableInfo& ) {} 15726: # 720 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 15726: virtual void OnColumnFamilyHandleDeletionStarted( 15726: ColumnFamilyHandle* ) {} 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void OnExternalFileIngested( 15726: DB* , const ExternalFileIngestionInfo& ) {} 15726: # 743 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 15726: virtual void OnBackgroundError(BackgroundErrorReason , 15726: Status* ) {} 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void OnStallConditionsChanged(const WriteStallInfo& ) {} 15726: 15726: 15726: 15726: virtual void OnFileReadFinish(const FileOperationInfo& ) {} 15726: 15726: 15726: 15726: virtual void OnFileWriteFinish(const FileOperationInfo& ) {} 15726: 15726: 15726: 15726: virtual void OnFileFlushFinish(const FileOperationInfo& ) {} 15726: 15726: 15726: 15726: virtual void OnFileSyncFinish(const FileOperationInfo& ) {} 15726: 15726: 15726: 15726: virtual void OnFileRangeSyncFinish(const FileOperationInfo& ) {} 15726: 15726: 15726: 15726: virtual void OnFileTruncateFinish(const FileOperationInfo& ) {} 15726: 15726: 15726: 15726: virtual void OnFileCloseFinish(const FileOperationInfo& ) {} 15726: 15726: 15726: 15726: virtual bool ShouldBeNotifiedOnFileIO() { return false; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void OnErrorRecoveryBegin(BackgroundErrorReason , 15726: Status , 15726: bool* ) {} 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void OnErrorRecoveryCompleted(Status old_bg_error) { 15726: old_bg_error.PermitUncheckedError(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void OnErrorRecoveryEnd(const BackgroundErrorRecoveryInfo& ) { 15726: } 15726: # 819 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 15726: virtual void OnBlobFileCreationStarted( 15726: const BlobFileCreationBriefInfo& ) {} 15726: # 830 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/listener.h" 15726: virtual void OnBlobFileCreated(const BlobFileCreationInfo& ) {} 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void OnBlobFileDeleted(const BlobFileDeletionInfo& ) {} 15726: 15726: 15726: 15726: virtual void OnIOError(const IOErrorInfo& ) {} 15726: 15726: ~EventListener() override {} 15726: }; 15726: 15726: 15726: } 15726: # 29 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/sst_partitioner.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 16 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/sst_partitioner.h" 15726: namespace rocksdb { 15726: 15726: class Slice; 15726: 15726: enum PartitionerResult : char { 15726: 15726: kNotRequired = 0x0, 15726: 15726: kRequired = 0x1 15726: 15726: }; 15726: 15726: struct PartitionerRequest { 15726: PartitionerRequest(const Slice& prev_user_key_, 15726: const Slice& current_user_key_, 15726: uint64_t current_output_file_size_) 15726: : prev_user_key(&prev_user_key_), 15726: current_user_key(¤t_user_key_), 15726: current_output_file_size(current_output_file_size_) {} 15726: const Slice* prev_user_key; 15726: const Slice* current_user_key; 15726: uint64_t current_output_file_size; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: class SstPartitioner { 15726: public: 15726: virtual ~SstPartitioner() {} 15726: 15726: 15726: virtual const char* Name() const = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual PartitionerResult ShouldPartition( 15726: const PartitionerRequest& request) = 0; 15726: 15726: 15726: 15726: virtual bool CanDoTrivialMove(const Slice& smallest_user_key, 15726: const Slice& largest_user_key) = 0; 15726: 15726: 15726: struct Context { 15726: 15726: bool is_full_compaction; 15726: 15726: 15726: bool is_manual_compaction; 15726: 15726: int output_level; 15726: 15726: Slice smallest_user_key; 15726: 15726: Slice largest_user_key; 15726: }; 15726: }; 15726: 15726: 15726: 15726: 15726: class SstPartitionerFactory : public Customizable { 15726: public: 15726: ~SstPartitionerFactory() override {} 15726: static const char* Type() { return "SstPartitionerFactory"; } 15726: static Status CreateFromString( 15726: const ConfigOptions& options, const std::string& value, 15726: std::shared_ptr* result); 15726: 15726: virtual std::unique_ptr CreatePartitioner( 15726: const SstPartitioner::Context& context) const = 0; 15726: 15726: 15726: const char* Name() const override = 0; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: class SstPartitionerFixedPrefix : public SstPartitioner { 15726: public: 15726: explicit SstPartitionerFixedPrefix(size_t len) : len_(len) {} 15726: 15726: ~SstPartitionerFixedPrefix() override {} 15726: 15726: const char* Name() const override { return "SstPartitionerFixedPrefix"; } 15726: 15726: PartitionerResult ShouldPartition(const PartitionerRequest& request) override; 15726: 15726: bool CanDoTrivialMove(const Slice& smallest_user_key, 15726: const Slice& largest_user_key) override; 15726: 15726: private: 15726: size_t len_; 15726: }; 15726: 15726: 15726: 15726: 15726: class SstPartitionerFixedPrefixFactory : public SstPartitionerFactory { 15726: public: 15726: explicit SstPartitionerFixedPrefixFactory(size_t len); 15726: 15726: ~SstPartitionerFixedPrefixFactory() override {} 15726: 15726: static const char* kClassName() { return "SstPartitionerFixedPrefixFactory"; } 15726: const char* Name() const override { return kClassName(); } 15726: 15726: std::unique_ptr CreatePartitioner( 15726: const SstPartitioner::Context& ) const override; 15726: 15726: private: 15726: size_t len_; 15726: }; 15726: 15726: std::shared_ptr NewSstPartitionerFixedPrefixFactory( 15726: size_t prefix_len); 15726: 15726: } 15726: # 30 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 2 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/version.h" 1 15726: 15726: 15726: 15726: 15726: 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/version.h" 15726: namespace rocksdb { 15726: 15726: 15726: const std::unordered_map& GetRocksBuildProperties(); 15726: 15726: 15726: 15726: 15726: std::string GetRocksVersionAsString(bool with_patch = true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: std::string GetRocksBuildInfoAsString(const std::string& program, 15726: bool verbose = false); 15726: } 15726: # 33 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 1 15726: # 13 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/condition_variable" 1 3 15726: # 32 "/usr/include/c++/13/condition_variable" 3 15726: 15726: # 33 "/usr/include/c++/13/condition_variable" 3 15726: # 54 "/usr/include/c++/13/condition_variable" 3 15726: 15726: # 54 "/usr/include/c++/13/condition_variable" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: # 67 "/usr/include/c++/13/condition_variable" 3 15726: enum class cv_status { no_timeout, timeout }; 15726: 15726: 15726: class condition_variable 15726: { 15726: using steady_clock = chrono::steady_clock; 15726: using system_clock = chrono::system_clock; 15726: 15726: using __clock_t = steady_clock; 15726: 15726: 15726: 15726: 15726: __condvar _M_cond; 15726: 15726: public: 15726: typedef __gthread_cond_t* native_handle_type; 15726: 15726: condition_variable() noexcept; 15726: ~condition_variable() noexcept; 15726: 15726: condition_variable(const condition_variable&) = delete; 15726: condition_variable& operator=(const condition_variable&) = delete; 15726: 15726: void 15726: notify_one() noexcept; 15726: 15726: void 15726: notify_all() noexcept; 15726: 15726: void 15726: wait(unique_lock& __lock); 15726: 15726: template 15726: void 15726: wait(unique_lock& __lock, _Predicate __p) 15726: { 15726: while (!__p()) 15726: wait(__lock); 15726: } 15726: 15726: 15726: template 15726: cv_status 15726: wait_until(unique_lock& __lock, 15726: const chrono::time_point& __atime) 15726: { return __wait_until_impl(__lock, __atime); } 15726: 15726: 15726: template 15726: cv_status 15726: wait_until(unique_lock& __lock, 15726: const chrono::time_point& __atime) 15726: { return __wait_until_impl(__lock, __atime); } 15726: 15726: template 15726: cv_status 15726: wait_until(unique_lock& __lock, 15726: const chrono::time_point<_Clock, _Duration>& __atime) 15726: { 15726: 15726: 15726: 15726: using __s_dur = typename __clock_t::duration; 15726: const typename _Clock::time_point __c_entry = _Clock::now(); 15726: const __clock_t::time_point __s_entry = __clock_t::now(); 15726: const auto __delta = __atime - __c_entry; 15726: const auto __s_atime = __s_entry + 15726: chrono::__detail::ceil<__s_dur>(__delta); 15726: 15726: if (__wait_until_impl(__lock, __s_atime) == cv_status::no_timeout) 15726: return cv_status::no_timeout; 15726: 15726: 15726: 15726: if (_Clock::now() < __atime) 15726: return cv_status::no_timeout; 15726: return cv_status::timeout; 15726: } 15726: 15726: template 15726: bool 15726: wait_until(unique_lock& __lock, 15726: const chrono::time_point<_Clock, _Duration>& __atime, 15726: _Predicate __p) 15726: { 15726: while (!__p()) 15726: if (wait_until(__lock, __atime) == cv_status::timeout) 15726: return __p(); 15726: return true; 15726: } 15726: 15726: template 15726: cv_status 15726: wait_for(unique_lock& __lock, 15726: const chrono::duration<_Rep, _Period>& __rtime) 15726: { 15726: using __dur = typename steady_clock::duration; 15726: return wait_until(__lock, 15726: steady_clock::now() + 15726: chrono::__detail::ceil<__dur>(__rtime)); 15726: } 15726: 15726: template 15726: bool 15726: wait_for(unique_lock& __lock, 15726: const chrono::duration<_Rep, _Period>& __rtime, 15726: _Predicate __p) 15726: { 15726: using __dur = typename steady_clock::duration; 15726: return wait_until(__lock, 15726: steady_clock::now() + 15726: chrono::__detail::ceil<__dur>(__rtime), 15726: std::move(__p)); 15726: } 15726: 15726: native_handle_type 15726: native_handle() 15726: { return _M_cond.native_handle(); } 15726: 15726: private: 15726: 15726: template 15726: cv_status 15726: __wait_until_impl(unique_lock& __lock, 15726: const chrono::time_point& __atime) 15726: { 15726: auto __s = chrono::time_point_cast(__atime); 15726: auto __ns = chrono::duration_cast(__atime - __s); 15726: 15726: __gthread_time_t __ts = 15726: { 15726: static_cast(__s.time_since_epoch().count()), 15726: static_cast(__ns.count()) 15726: }; 15726: 15726: _M_cond.wait_until(*__lock.mutex(), 1, __ts); 15726: 15726: return (steady_clock::now() < __atime 15726: ? cv_status::no_timeout : cv_status::timeout); 15726: } 15726: 15726: 15726: template 15726: cv_status 15726: __wait_until_impl(unique_lock& __lock, 15726: const chrono::time_point& __atime) 15726: { 15726: auto __s = chrono::time_point_cast(__atime); 15726: auto __ns = chrono::duration_cast(__atime - __s); 15726: 15726: __gthread_time_t __ts = 15726: { 15726: static_cast(__s.time_since_epoch().count()), 15726: static_cast(__ns.count()) 15726: }; 15726: 15726: _M_cond.wait_until(*__lock.mutex(), __ts); 15726: 15726: return (system_clock::now() < __atime 15726: ? cv_status::no_timeout : cv_status::timeout); 15726: } 15726: }; 15726: 15726: void 15726: notify_all_at_thread_exit(condition_variable&, unique_lock); 15726: 15726: struct __at_thread_exit_elt 15726: { 15726: __at_thread_exit_elt* _M_next; 15726: void (*_M_cb)(void*); 15726: }; 15726: 15726: inline namespace _V2 { 15726: 15726: 15726: 15726: class condition_variable_any 15726: { 15726: 15726: using __clock_t = chrono::steady_clock; 15726: 15726: 15726: 15726: condition_variable _M_cond; 15726: shared_ptr _M_mutex; 15726: 15726: 15726: template 15726: struct _Unlock 15726: { 15726: explicit _Unlock(_Lock& __lk) : _M_lock(__lk) { __lk.unlock(); } 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: ~_Unlock() noexcept(false) 15726: { 15726: if (uncaught_exception()) 15726: { 15726: try 15726: { _M_lock.lock(); } 15726: catch(const __cxxabiv1::__forced_unwind&) 15726: { throw; } 15726: catch(...) 15726: { } 15726: } 15726: else 15726: _M_lock.lock(); 15726: } 15726: #pragma GCC diagnostic pop 15726: 15726: _Unlock(const _Unlock&) = delete; 15726: _Unlock& operator=(const _Unlock&) = delete; 15726: 15726: _Lock& _M_lock; 15726: }; 15726: 15726: public: 15726: condition_variable_any() : _M_mutex(std::make_shared()) { } 15726: ~condition_variable_any() = default; 15726: 15726: condition_variable_any(const condition_variable_any&) = delete; 15726: condition_variable_any& operator=(const condition_variable_any&) = delete; 15726: 15726: void 15726: notify_one() noexcept 15726: { 15726: lock_guard __lock(*_M_mutex); 15726: _M_cond.notify_one(); 15726: } 15726: 15726: void 15726: notify_all() noexcept 15726: { 15726: lock_guard __lock(*_M_mutex); 15726: _M_cond.notify_all(); 15726: } 15726: 15726: template 15726: void 15726: wait(_Lock& __lock) 15726: { 15726: shared_ptr __mutex = _M_mutex; 15726: unique_lock __my_lock(*__mutex); 15726: _Unlock<_Lock> __unlock(__lock); 15726: 15726: 15726: unique_lock __my_lock2(std::move(__my_lock)); 15726: _M_cond.wait(__my_lock2); 15726: } 15726: 15726: 15726: template 15726: void 15726: wait(_Lock& __lock, _Predicate __p) 15726: { 15726: while (!__p()) 15726: wait(__lock); 15726: } 15726: 15726: template 15726: cv_status 15726: wait_until(_Lock& __lock, 15726: const chrono::time_point<_Clock, _Duration>& __atime) 15726: { 15726: shared_ptr __mutex = _M_mutex; 15726: unique_lock __my_lock(*__mutex); 15726: _Unlock<_Lock> __unlock(__lock); 15726: 15726: 15726: unique_lock __my_lock2(std::move(__my_lock)); 15726: return _M_cond.wait_until(__my_lock2, __atime); 15726: } 15726: 15726: template 15726: bool 15726: wait_until(_Lock& __lock, 15726: const chrono::time_point<_Clock, _Duration>& __atime, 15726: _Predicate __p) 15726: { 15726: while (!__p()) 15726: if (wait_until(__lock, __atime) == cv_status::timeout) 15726: return __p(); 15726: return true; 15726: } 15726: 15726: template 15726: cv_status 15726: wait_for(_Lock& __lock, const chrono::duration<_Rep, _Period>& __rtime) 15726: { return wait_until(__lock, __clock_t::now() + __rtime); } 15726: 15726: template 15726: bool 15726: wait_for(_Lock& __lock, 15726: const chrono::duration<_Rep, _Period>& __rtime, _Predicate __p) 15726: { return wait_until(__lock, __clock_t::now() + __rtime, std::move(__p)); } 15726: # 443 "/usr/include/c++/13/condition_variable" 3 15726: }; 15726: 15726: } 15726: 15726: 15726: 15726: } 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 2 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 23 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 15726: namespace rocksdb { 15726: class CacheReservationManager; 15726: 15726: 15726: 15726: class StallInterface { 15726: public: 15726: virtual ~StallInterface() {} 15726: 15726: virtual void Block() = 0; 15726: 15726: virtual void Signal() = 0; 15726: }; 15726: 15726: class WriteBufferManager final { 15726: public: 15726: # 50 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 15726: explicit WriteBufferManager(size_t _buffer_size, 15726: std::shared_ptr cache = {}, 15726: bool allow_stall = false); 15726: 15726: WriteBufferManager(const WriteBufferManager&) = delete; 15726: WriteBufferManager& operator=(const WriteBufferManager&) = delete; 15726: 15726: ~WriteBufferManager(); 15726: 15726: 15726: 15726: bool enabled() const { return buffer_size() > 0; } 15726: 15726: 15726: bool cost_to_cache() const { return cache_res_mgr_ != nullptr; } 15726: 15726: 15726: 15726: size_t memory_usage() const { 15726: return memory_used_.load(std::memory_order_relaxed); 15726: } 15726: 15726: 15726: size_t mutable_memtable_memory_usage() const { 15726: return memory_active_.load(std::memory_order_relaxed); 15726: } 15726: 15726: size_t dummy_entries_in_cache_usage() const; 15726: 15726: 15726: size_t buffer_size() const { 15726: return buffer_size_.load(std::memory_order_relaxed); 15726: } 15726: 15726: 15726: void SetBufferSize(size_t new_size) { 15726: 15726: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 3 4 15726: (static_cast ( 15726: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 15726: new_size > 0 15726: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 15726: "new_size > 0" 15726: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 86 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 15726: ; 15726: buffer_size_.store(new_size, std::memory_order_relaxed); 15726: mutable_limit_.store(new_size * 7 / 8, std::memory_order_relaxed); 15726: 15726: MaybeEndWriteStall(); 15726: } 15726: 15726: void SetAllowStall(bool new_allow_stall) { 15726: allow_stall_.store(new_allow_stall, std::memory_order_relaxed); 15726: MaybeEndWriteStall(); 15726: } 15726: 15726: 15726: 15726: 15726: bool ShouldFlush() const { 15726: if (enabled()) { 15726: if (mutable_memtable_memory_usage() > 15726: mutable_limit_.load(std::memory_order_relaxed)) { 15726: return true; 15726: } 15726: size_t local_size = buffer_size(); 15726: if (memory_usage() >= local_size && 15726: mutable_memtable_memory_usage() >= local_size / 2) { 15726: 15726: 15726: 15726: return true; 15726: } 15726: } 15726: return false; 15726: } 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_buffer_manager.h" 15726: bool ShouldStall() const { 15726: if (!allow_stall_.load(std::memory_order_relaxed) || !enabled()) { 15726: return false; 15726: } 15726: 15726: return IsStallActive() || IsStallThresholdExceeded(); 15726: } 15726: 15726: 15726: bool IsStallActive() const { 15726: return stall_active_.load(std::memory_order_relaxed); 15726: } 15726: 15726: 15726: bool IsStallThresholdExceeded() const { 15726: return memory_usage() >= buffer_size_; 15726: } 15726: 15726: void ReserveMem(size_t mem); 15726: 15726: 15726: 15726: void ScheduleFreeMem(size_t mem); 15726: 15726: void FreeMem(size_t mem); 15726: 15726: 15726: 15726: void BeginWriteStall(StallInterface* wbm_stall); 15726: 15726: 15726: 15726: void MaybeEndWriteStall(); 15726: 15726: void RemoveDBFromQueue(StallInterface* wbm_stall); 15726: 15726: private: 15726: std::atomic buffer_size_; 15726: std::atomic mutable_limit_; 15726: std::atomic memory_used_; 15726: 15726: std::atomic memory_active_; 15726: std::shared_ptr cache_res_mgr_; 15726: 15726: std::mutex cache_res_mgr_mu_; 15726: 15726: std::list queue_; 15726: 15726: std::mutex mu_; 15726: std::atomic allow_stall_; 15726: 15726: 15726: std::atomic stall_active_; 15726: 15726: void ReserveMemWithCache(size_t mem); 15726: void FreeMemWithCache(size_t mem); 15726: }; 15726: } 15726: # 34 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 2 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class Cache; 15726: class CompactionFilter; 15726: class CompactionFilterFactory; 15726: class Comparator; 15726: class ConcurrentTaskLimiter; 15726: class Env; 15726: enum InfoLogLevel : unsigned char; 15726: class SstFileManager; 15726: class FilterPolicy; 15726: class Logger; 15726: class MergeOperator; 15726: class Snapshot; 15726: class MemTableRepFactory; 15726: class RateLimiter; 15726: class Slice; 15726: class Statistics; 15726: class InternalKeyComparator; 15726: class WalFilter; 15726: class FileSystem; 15726: 15726: struct Options; 15726: struct DbPath; 15726: 15726: using FileTypeSet = SmallEnumSet; 15726: 15726: struct ColumnFamilyOptions : public AdvancedColumnFamilyOptions { 15726: 15726: 15726: 15726: 15726: 15726: 15726: ColumnFamilyOptions* OldDefaults(int rocksdb_major_version = 4, 15726: int rocksdb_minor_version = 6); 15726: 15726: 15726: 15726: 15726: 15726: ColumnFamilyOptions* OptimizeForSmallDb( 15726: std::shared_ptr* cache = nullptr); 15726: 15726: 15726: 15726: 15726: ColumnFamilyOptions* OptimizeForPointLookup(uint64_t block_cache_size_mb); 15726: # 102 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: ColumnFamilyOptions* OptimizeLevelStyleCompaction( 15726: uint64_t memtable_memory_budget = 512 * 1024 * 1024); 15726: ColumnFamilyOptions* OptimizeUniversalStyleCompaction( 15726: uint64_t memtable_memory_budget = 512 * 1024 * 1024); 15726: # 116 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: const Comparator* comparator = BytewiseComparator(); 15726: # 128 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: std::shared_ptr merge_operator = nullptr; 15726: # 146 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: const CompactionFilter* compaction_filter = nullptr; 15726: # 165 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: std::shared_ptr compaction_filter_factory = nullptr; 15726: # 186 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: size_t write_buffer_size = 64 << 20; 15726: # 214 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: CompressionType compression; 15726: # 223 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: CompressionType bottommost_compression = kDisableCompressionOption; 15726: 15726: 15726: 15726: 15726: 15726: CompressionOptions bottommost_compression_opts; 15726: 15726: 15726: CompressionOptions compression_opts; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: int level0_file_num_compaction_trigger = 4; 15726: # 274 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: std::shared_ptr prefix_extractor = nullptr; 15726: # 288 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: uint64_t max_bytes_for_level_base = 256 * 1048576; 15726: 15726: 15726: uint64_t snap_refresh_nanos = 0; 15726: 15726: 15726: 15726: 15726: 15726: bool disable_auto_compactions = false; 15726: 15726: 15726: 15726: 15726: 15726: std::shared_ptr table_factory; 15726: # 317 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: std::vector cf_paths; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: std::shared_ptr compaction_thread_limiter = nullptr; 15726: # 334 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: std::shared_ptr sst_partitioner_factory = nullptr; 15726: # 345 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: uint32_t memtable_max_range_deletions = 0; 15726: 15726: 15726: ColumnFamilyOptions(); 15726: 15726: explicit ColumnFamilyOptions(const Options& options); 15726: 15726: void Dump(Logger* log) const; 15726: }; 15726: 15726: enum class WALRecoveryMode : char { 15726: # 375 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: kTolerateCorruptedTailRecords = 0x00, 15726: 15726: 15726: 15726: 15726: kAbsoluteConsistency = 0x01, 15726: 15726: 15726: 15726: 15726: kPointInTimeRecovery = 0x02, 15726: 15726: 15726: 15726: 15726: 15726: kSkipAnyCorruptedRecords = 0x03, 15726: }; 15726: 15726: struct DbPath { 15726: std::string path; 15726: uint64_t target_size; 15726: 15726: DbPath() : target_size(0) {} 15726: DbPath(const std::string& p, uint64_t t) : path(p), target_size(t) {} 15726: }; 15726: 15726: extern const char* kHostnameForDbHostId; 15726: 15726: enum class CompactionServiceJobStatus : char { 15726: kSuccess, 15726: kFailure, 15726: kUseLocal, 15726: }; 15726: 15726: struct CompactionServiceJobInfo { 15726: std::string db_name; 15726: std::string db_id; 15726: std::string db_session_id; 15726: uint64_t job_id; 15726: 15726: 15726: 15726: 15726: Env::Priority priority; 15726: 15726: CompactionServiceJobInfo(std::string db_name_, std::string db_id_, 15726: std::string db_session_id_, uint64_t job_id_, 15726: Env::Priority priority_) 15726: : db_name(std::move(db_name_)), 15726: db_id(std::move(db_id_)), 15726: db_session_id(std::move(db_session_id_)), 15726: job_id(job_id_), 15726: priority(priority_) {} 15726: }; 15726: 15726: struct CompactionServiceScheduleResponse { 15726: std::string scheduled_job_id; 15726: 15726: CompactionServiceJobStatus status; 15726: CompactionServiceScheduleResponse(std::string scheduled_job_id_, 15726: CompactionServiceJobStatus status_) 15726: : scheduled_job_id(scheduled_job_id_), status(status_) {} 15726: explicit CompactionServiceScheduleResponse(CompactionServiceJobStatus status_) 15726: : status(status_) {} 15726: }; 15726: 15726: 15726: 15726: 15726: class CompactionService : public Customizable { 15726: public: 15726: static const char* Type() { return "CompactionService"; } 15726: 15726: 15726: const char* Name() const override = 0; 15726: 15726: 15726: virtual CompactionServiceScheduleResponse Schedule( 15726: const CompactionServiceJobInfo& , 15726: const std::string& ) { 15726: CompactionServiceScheduleResponse response( 15726: CompactionServiceJobStatus::kUseLocal); 15726: return response; 15726: } 15726: 15726: 15726: virtual CompactionServiceJobStatus Wait( 15726: const std::string& , std::string* ) { 15726: return CompactionServiceJobStatus::kUseLocal; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual CompactionServiceJobStatus StartV2( 15726: const CompactionServiceJobInfo& , 15726: const std::string& ) { 15726: return CompactionServiceJobStatus::kUseLocal; 15726: } 15726: 15726: 15726: virtual CompactionServiceJobStatus WaitForCompleteV2( 15726: const CompactionServiceJobInfo& , 15726: std::string* ) { 15726: return CompactionServiceJobStatus::kUseLocal; 15726: } 15726: 15726: ~CompactionService() override = default; 15726: }; 15726: 15726: struct DBOptions { 15726: 15726: 15726: 15726: 15726: 15726: DBOptions* OldDefaults(int rocksdb_major_version = 4, 15726: int rocksdb_minor_version = 6); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: DBOptions* OptimizeForSmallDb(std::shared_ptr* cache = nullptr); 15726: 15726: 15726: 15726: 15726: 15726: 15726: DBOptions* IncreaseParallelism(int total_threads = 16); 15726: 15726: 15726: 15726: bool create_if_missing = false; 15726: 15726: 15726: 15726: 15726: bool create_missing_column_families = false; 15726: 15726: 15726: 15726: bool error_if_exists = false; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool paranoid_checks = true; 15726: # 544 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool flush_verify_memtable_count = true; 15726: # 561 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool compaction_verify_record_count = true; 15726: # 577 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool track_and_verify_wals_in_manifest = false; 15726: # 597 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool verify_sst_unique_id_in_manifest = true; 15726: 15726: 15726: 15726: 15726: 15726: 15726: Env* env = Env::Default(); 15726: # 622 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: std::shared_ptr rate_limiter = nullptr; 15726: # 638 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: std::shared_ptr sst_file_manager = nullptr; 15726: 15726: 15726: 15726: 15726: 15726: std::shared_ptr info_log = nullptr; 15726: 15726: 15726: 15726: 15726: InfoLogLevel info_log_level = Logger::kDefaultLogLevel; 15726: # 664 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: int max_open_files = -1; 15726: 15726: 15726: 15726: 15726: int max_file_opening_threads = 16; 15726: # 692 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: uint64_t max_total_wal_size = 0; 15726: 15726: 15726: std::shared_ptr statistics = nullptr; 15726: # 705 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool use_fsync = false; 15726: # 731 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: std::vector db_paths; 15726: 15726: 15726: 15726: 15726: 15726: 15726: std::string db_log_dir = ""; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: std::string wal_dir = ""; 15726: # 756 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: uint64_t delete_obsolete_files_period_micros = 6ULL * 60 * 60 * 1000000; 15726: 15726: 15726: 15726: 15726: 15726: 15726: int max_background_jobs = 2; 15726: # 781 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: int max_background_compactions = -1; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: uint32_t max_subcompactions = 1; 15726: # 811 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: int max_background_flushes = -1; 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_t max_log_file_size = 0; 15726: 15726: 15726: 15726: 15726: 15726: size_t log_file_time_to_roll = 0; 15726: 15726: 15726: 15726: size_t keep_log_file_num = 1000; 15726: # 838 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: size_t recycle_log_file_num = 0; 15726: 15726: 15726: 15726: 15726: 15726: uint64_t max_manifest_file_size = 1024 * 1024 * 1024; 15726: 15726: 15726: int table_cache_numshardbits = 6; 15726: # 866 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: uint64_t WAL_ttl_seconds = 0; 15726: uint64_t WAL_size_limit_MB = 0; 15726: 15726: 15726: 15726: 15726: 15726: size_t manifest_preallocation_size = 4 * 1024 * 1024; 15726: # 886 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool allow_mmap_reads = false; 15726: 15726: 15726: 15726: 15726: bool allow_mmap_writes = false; 15726: # 903 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool use_direct_reads = false; 15726: 15726: 15726: 15726: bool use_direct_io_for_flush_and_compaction = false; 15726: # 918 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool allow_fallocate = true; 15726: 15726: 15726: bool is_fd_close_on_exec = true; 15726: 15726: 15726: 15726: 15726: 15726: 15726: unsigned int stats_dump_period_sec = 600; 15726: 15726: 15726: 15726: unsigned int stats_persist_period_sec = 600; 15726: # 944 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool persist_stats_to_disk = false; 15726: 15726: 15726: 15726: 15726: size_t stats_history_buffer_size = 1024 * 1024; 15726: 15726: 15726: 15726: 15726: bool advise_random_on_open = true; 15726: # 966 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: size_t db_write_buffer_size = 0; 15726: # 983 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: std::shared_ptr write_buffer_manager = nullptr; 15726: # 992 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: size_t compaction_readahead_size = 2 * 1024 * 1024; 15726: # 1009 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: size_t random_access_max_buffer_size = 1024 * 1024; 15726: # 1020 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: size_t writable_file_max_buffer_size = 1024 * 1024; 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool use_adaptive_mutex = false; 15726: 15726: 15726: DBOptions(); 15726: 15726: explicit DBOptions(const Options& options); 15726: 15726: void Dump(Logger* log) const; 15726: # 1052 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: uint64_t bytes_per_sync = 0; 15726: # 1062 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: uint64_t wal_bytes_per_sync = 0; 15726: # 1083 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool strict_bytes_per_sync = false; 15726: 15726: 15726: 15726: std::vector> listeners; 15726: 15726: 15726: 15726: 15726: 15726: bool enable_thread_tracking = false; 15726: # 1111 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: uint64_t delayed_write_rate = 0; 15726: # 1126 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool enable_pipelined_write = false; 15726: # 1152 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool unordered_write = false; 15726: # 1162 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool allow_concurrent_memtable_write = true; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool enable_write_thread_adaptive_yield = true; 15726: 15726: 15726: 15726: 15726: 15726: 15726: uint64_t max_write_batch_group_size_bytes = 1 << 20; 15726: # 1186 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: uint64_t write_thread_max_yield_usec = 100; 15726: # 1196 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: uint64_t write_thread_slow_yield_usec = 3; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool skip_stats_update_on_db_open = false; 15726: # 1214 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool skip_checking_sst_file_sizes_on_db_open = false; 15726: 15726: 15726: 15726: WALRecoveryMode wal_recovery_mode = WALRecoveryMode::kPointInTimeRecovery; 15726: 15726: 15726: 15726: bool allow_2pc = false; 15726: 15726: 15726: 15726: 15726: 15726: std::shared_ptr row_cache = nullptr; 15726: 15726: 15726: 15726: 15726: 15726: 15726: WalFilter* wal_filter = nullptr; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool fail_if_options_file_error = true; 15726: 15726: 15726: 15726: 15726: bool dump_malloc_stats = false; 15726: # 1257 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool avoid_flush_during_recovery = false; 15726: # 1266 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool avoid_flush_during_shutdown = false; 15726: # 1281 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool allow_ingest_behind = false; 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool two_write_queues = false; 15726: 15726: 15726: 15726: 15726: bool manual_wal_flush = false; 15726: 15726: 15726: 15726: 15726: 15726: 15726: CompressionType wal_compression = kNoCompression; 15726: # 1314 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool atomic_flush = false; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool avoid_unnecessary_blocking_io = false; 15726: # 1333 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool write_dbid_to_manifest = false; 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_t log_readahead_size = 0; 15726: # 1349 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: std::shared_ptr file_checksum_gen_factory = nullptr; 15726: # 1388 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool best_efforts_recovery = false; 15726: # 1398 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: int max_bgerror_resume_count = 0x7fffffff 15726: # 1398 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: ; 15726: 15726: 15726: 15726: 15726: 15726: 15726: uint64_t bgerror_resume_retry_interval = 1000000; 15726: # 1414 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool allow_data_in_errors = false; 15726: # 1427 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: std::string db_host_id = kHostnameForDbHostId; 15726: # 1437 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: FileTypeSet checksum_handoff_file_types; 15726: # 1446 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: std::shared_ptr compaction_service = nullptr; 15726: # 1458 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: CacheTier lowest_used_cache_tier = CacheTier::kNonVolatileBlockTier; 15726: # 1473 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool enforce_single_del_contracts = true; 15726: # 1490 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: std::string daily_offpeak_time_utc = ""; 15726: # 1500 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: uint64_t follower_refresh_catchup_period_ms = 10000; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: uint64_t follower_catchup_retry_count = 10; 15726: 15726: 15726: 15726: uint64_t follower_catchup_retry_wait_ms = 100; 15726: 15726: 15726: }; 15726: 15726: 15726: struct Options : public DBOptions, public ColumnFamilyOptions { 15726: 15726: Options() : DBOptions(), ColumnFamilyOptions() {} 15726: 15726: Options(const DBOptions& db_options, 15726: const ColumnFamilyOptions& column_family_options) 15726: : DBOptions(db_options), ColumnFamilyOptions(column_family_options) {} 15726: 15726: 15726: 15726: 15726: 15726: 15726: Options* OldDefaults(int rocksdb_major_version = 4, 15726: int rocksdb_minor_version = 6); 15726: 15726: void Dump(Logger* log) const; 15726: 15726: void DumpCFOptions(Logger* log) const; 15726: # 1548 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: Options* PrepareForBulkLoad(); 15726: 15726: 15726: 15726: Options* OptimizeForSmallDb(); 15726: 15726: 15726: 15726: 15726: 15726: Options* DisableExtraChecks(); 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: enum ReadTier { 15726: kReadAllTier = 0x0, 15726: kBlockCacheTier = 0x1, 15726: kPersistedTier = 0x2, 15726: 15726: 15726: 15726: kMemtableTier = 0x3 15726: }; 15726: 15726: 15726: struct ReadOptions { 15726: 15726: 15726: 15726: 15726: 15726: 15726: const Snapshot* snapshot = nullptr; 15726: # 1597 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: const Slice* timestamp = nullptr; 15726: const Slice* iter_start_ts = nullptr; 15726: # 1609 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: std::chrono::microseconds deadline = std::chrono::microseconds::zero(); 15726: 15726: 15726: 15726: 15726: 15726: std::chrono::microseconds io_timeout = std::chrono::microseconds::zero(); 15726: 15726: 15726: 15726: 15726: ReadTier read_tier = kReadAllTier; 15726: # 1634 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: Env::IOPriority rate_limiter_priority = Env::IO_TOTAL; 15726: 15726: 15726: 15726: 15726: uint64_t value_size_soft_limit = std::numeric_limits::max(); 15726: 15726: 15726: 15726: 15726: 15726: std::optional merge_operand_count_threshold; 15726: 15726: 15726: 15726: bool verify_checksums = true; 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool fill_cache = true; 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool ignore_range_deletions = false; 15726: 15726: 15726: 15726: 15726: bool async_io = false; 15726: # 1677 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool optimize_multiget_for_io = true; 15726: # 1690 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: size_t readahead_size = 0; 15726: 15726: 15726: 15726: 15726: uint64_t max_skippable_internal_keys = 0; 15726: # 1708 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: const Slice* iterate_lower_bound = nullptr; 15726: # 1728 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: const Slice* iterate_upper_bound = nullptr; 15726: 15726: 15726: 15726: 15726: 15726: bool tailing = false; 15726: 15726: 15726: 15726: bool managed = false; 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool total_order_seek = false; 15726: # 1761 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool auto_prefix_mode = false; 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool prefix_same_as_start = false; 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool pin_data = false; 15726: # 1786 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool adaptive_readahead = false; 15726: 15726: 15726: 15726: 15726: bool background_purge_on_iterator_cleanup = false; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: std::function table_filter; 15726: # 1811 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool auto_readahead_size = true; 15726: 15726: 15726: 15726: 15726: 15726: 15726: Env::IOActivity io_activity = Env::IOActivity::kUnknown; 15726: 15726: 15726: 15726: ReadOptions() {} 15726: ReadOptions(bool _verify_checksums, bool _fill_cache); 15726: explicit ReadOptions(Env::IOActivity _io_activity); 15726: }; 15726: 15726: 15726: struct WriteOptions { 15726: # 1845 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool sync = false; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool disableWAL = false; 15726: 15726: 15726: 15726: 15726: 15726: bool ignore_missing_column_families = false; 15726: 15726: 15726: 15726: 15726: bool no_slowdown = false; 15726: # 1873 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool low_pri = false; 15726: # 1882 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool memtable_insert_hint_per_batch = false; 15726: # 1897 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: Env::IOPriority rate_limiter_priority = Env::IO_TOTAL; 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_t protection_bytes_per_key = 0; 15726: 15726: 15726: 15726: 15726: Env::IOActivity io_activity = Env::IOActivity::kUnknown; 15726: 15726: WriteOptions() {} 15726: explicit WriteOptions(Env::IOActivity _io_activity); 15726: explicit WriteOptions( 15726: Env::IOPriority _rate_limiter_priority, 15726: Env::IOActivity _io_activity = Env::IOActivity::kUnknown); 15726: }; 15726: 15726: 15726: struct FlushOptions { 15726: 15726: 15726: bool wait; 15726: 15726: 15726: 15726: 15726: 15726: bool allow_write_stall; 15726: FlushOptions() : wait(true), allow_write_stall(false) {} 15726: }; 15726: 15726: 15726: Status CreateLoggerFromOptions(const std::string& dbname, 15726: const DBOptions& options, 15726: std::shared_ptr* logger); 15726: 15726: 15726: struct CompactionOptions { 15726: # 1951 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: CompressionType compression; 15726: 15726: 15726: 15726: uint64_t output_file_size_limit; 15726: 15726: 15726: uint32_t max_subcompactions; 15726: 15726: CompactionOptions() 15726: : compression(kDisableCompressionOption), 15726: output_file_size_limit(std::numeric_limits::max()), 15726: max_subcompactions(0) {} 15726: }; 15726: 15726: 15726: 15726: enum class BottommostLevelCompaction { 15726: 15726: kSkip, 15726: 15726: 15726: 15726: 15726: 15726: kIfHaveCompactionFilter, 15726: 15726: kForce, 15726: 15726: 15726: kForceOptimized, 15726: }; 15726: 15726: 15726: 15726: enum class BlobGarbageCollectionPolicy { 15726: 15726: kForce, 15726: 15726: kDisable, 15726: 15726: kUseDefault, 15726: }; 15726: 15726: 15726: struct CompactRangeOptions { 15726: 15726: 15726: 15726: 15726: bool exclusive_manual_compaction = false; 15726: 15726: 15726: 15726: bool change_level = false; 15726: 15726: 15726: int target_level = -1; 15726: 15726: 15726: uint32_t target_path_id = 0; 15726: 15726: 15726: BottommostLevelCompaction bottommost_level_compaction = 15726: BottommostLevelCompaction::kIfHaveCompactionFilter; 15726: 15726: 15726: bool allow_write_stall = false; 15726: 15726: uint32_t max_subcompactions = 0; 15726: 15726: 15726: const Slice* full_history_ts_low = nullptr; 15726: 15726: 15726: 15726: 15726: 15726: std::atomic* canceled = nullptr; 15726: # 2042 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: BlobGarbageCollectionPolicy blob_garbage_collection_policy = 15726: BlobGarbageCollectionPolicy::kUseDefault; 15726: 15726: 15726: 15726: 15726: 15726: double blob_garbage_collection_age_cutoff = -1; 15726: }; 15726: 15726: 15726: struct IngestExternalFileOptions { 15726: 15726: bool move_files = false; 15726: 15726: bool failed_move_fall_back_to_copy = true; 15726: 15726: 15726: bool snapshot_consistency = true; 15726: 15726: 15726: 15726: 15726: bool allow_global_seqno = true; 15726: 15726: 15726: bool allow_blocking_flush = true; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool ingest_behind = false; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool write_global_seqno = false; 15726: 15726: 15726: 15726: 15726: bool verify_checksums_before_ingest = false; 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_t verify_checksums_readahead_size = 0; 15726: # 2116 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool verify_file_checksum = true; 15726: # 2126 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: bool fail_if_not_bottommost_level = false; 15726: }; 15726: 15726: enum TraceFilterType : uint64_t { 15726: 15726: kTraceFilterNone = 0x0, 15726: 15726: kTraceFilterGet = 0x1 << 0, 15726: 15726: kTraceFilterWrite = 0x1 << 1, 15726: 15726: kTraceFilterIteratorSeek = 0x1 << 2, 15726: 15726: kTraceFilterIteratorSeekForPrev = 0x1 << 3, 15726: 15726: kTraceFilterMultiGet = 0x1 << 4, 15726: }; 15726: 15726: 15726: struct TraceOptions { 15726: 15726: 15726: uint64_t max_trace_file_size = uint64_t{64} * 1024 * 1024 * 1024; 15726: 15726: 15726: uint64_t sampling_frequency = 1; 15726: 15726: uint64_t filter = kTraceFilterNone; 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool preserve_write_order = false; 15726: }; 15726: 15726: 15726: struct ImportColumnFamilyOptions { 15726: 15726: bool move_files = false; 15726: }; 15726: 15726: 15726: struct SizeApproximationOptions { 15726: 15726: 15726: bool include_memtables = false; 15726: 15726: 15726: bool include_files = true; 15726: # 2186 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/options.h" 15726: double files_size_error_margin = -1.0; 15726: }; 15726: 15726: struct CompactionServiceOptionsOverride { 15726: 15726: 15726: 15726: Env* env = Env::Default(); 15726: std::shared_ptr file_checksum_gen_factory = nullptr; 15726: 15726: const Comparator* comparator = BytewiseComparator(); 15726: std::shared_ptr merge_operator = nullptr; 15726: const CompactionFilter* compaction_filter = nullptr; 15726: std::shared_ptr compaction_filter_factory = nullptr; 15726: std::shared_ptr prefix_extractor = nullptr; 15726: std::shared_ptr table_factory; 15726: std::shared_ptr sst_partitioner_factory = nullptr; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: std::vector> listeners; 15726: 15726: 15726: 15726: 15726: std::shared_ptr statistics = nullptr; 15726: 15726: 15726: 15726: std::vector> 15726: table_properties_collector_factories; 15726: }; 15726: 15726: struct OpenAndCompactOptions { 15726: 15726: std::atomic* canceled = nullptr; 15726: }; 15726: 15726: struct LiveFilesStorageInfoOptions { 15726: 15726: bool include_checksum_info = false; 15726: 15726: 15726: 15726: uint64_t wal_size_for_flush = 0; 15726: }; 15726: 15726: struct WaitForCompactOptions { 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool abort_on_pause = false; 15726: 15726: 15726: bool flush = false; 15726: 15726: 15726: bool wait_for_purge = false; 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool close_db = false; 15726: 15726: 15726: 15726: 15726: 15726: std::chrono::microseconds timeout = std::chrono::microseconds::zero(); 15726: }; 15726: 15726: } 15726: # 35 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 1 15726: # 19 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: 15726: # 31 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: namespace rocksdb { 15726: 15726: 15726: class Cache; 15726: class FilterPolicy; 15726: class FlushBlockPolicyFactory; 15726: class PersistentCache; 15726: class RandomAccessFile; 15726: struct TableReaderOptions; 15726: struct TableBuilderOptions; 15726: class TableBuilder; 15726: class TableFactory; 15726: class TableReader; 15726: class WritableFileWriter; 15726: struct ConfigOptions; 15726: struct EnvOptions; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: enum ChecksumType : char { 15726: kNoChecksum = 0x0, 15726: kCRC32c = 0x1, 15726: kxxHash = 0x2, 15726: kxxHash64 = 0x3, 15726: kXXH3 = 0x4, 15726: }; 15726: 15726: 15726: 15726: 15726: enum class PinningTier { 15726: 15726: 15726: 15726: 15726: kFallback, 15726: 15726: 15726: kNone, 15726: 15726: 15726: 15726: 15726: 15726: 15726: kFlushedAndSimilar, 15726: 15726: 15726: kAll, 15726: }; 15726: 15726: 15726: 15726: struct MetadataCacheOptions { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: PinningTier top_level_index_pinning = PinningTier::kFallback; 15726: 15726: 15726: 15726: PinningTier partition_pinning = PinningTier::kFallback; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: PinningTier unpartitioned_pinning = PinningTier::kFallback; 15726: }; 15726: 15726: struct CacheEntryRoleOptions { 15726: enum class Decision { 15726: kEnabled, 15726: kDisabled, 15726: kFallback, 15726: }; 15726: Decision charged = Decision::kFallback; 15726: bool operator==(const CacheEntryRoleOptions& other) const { 15726: return charged == other.charged; 15726: } 15726: }; 15726: 15726: struct CacheUsageOptions { 15726: CacheEntryRoleOptions options; 15726: std::map options_overrides; 15726: }; 15726: 15726: 15726: struct BlockBasedTableOptions { 15726: static const char* kName() { return "BlockTableOptions"; } 15726: 15726: 15726: 15726: 15726: 15726: std::shared_ptr flush_block_policy_factory; 15726: # 149 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: bool cache_index_and_filter_blocks = false; 15726: 15726: 15726: 15726: 15726: 15726: bool cache_index_and_filter_blocks_with_high_priority = true; 15726: # 178 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: bool pin_l0_filter_and_index_blocks_in_cache = false; 15726: # 200 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: bool pin_top_level_index_and_filter = true; 15726: 15726: 15726: 15726: 15726: 15726: MetadataCacheOptions metadata_cache_options; 15726: 15726: 15726: enum IndexType : char { 15726: 15726: 15726: kBinarySearch = 0x00, 15726: 15726: 15726: 15726: kHashSearch = 0x01, 15726: 15726: 15726: 15726: 15726: kTwoLevelIndexSearch = 0x02, 15726: # 234 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: kBinarySearchWithFirstKey = 0x03, 15726: }; 15726: 15726: IndexType index_type = kBinarySearch; 15726: 15726: 15726: enum DataBlockIndexType : char { 15726: kDataBlockBinarySearch = 0, 15726: kDataBlockBinaryAndHash = 1, 15726: }; 15726: 15726: DataBlockIndexType data_block_index_type = kDataBlockBinarySearch; 15726: 15726: 15726: 15726: double data_block_hash_table_util_ratio = 0.75; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ChecksumType checksum = kXXH3; 15726: 15726: 15726: 15726: 15726: bool no_block_cache = false; 15726: 15726: 15726: 15726: std::shared_ptr block_cache = nullptr; 15726: 15726: 15726: 15726: std::shared_ptr persistent_cache = nullptr; 15726: 15726: 15726: 15726: 15726: 15726: uint64_t block_size = 4 * 1024; 15726: 15726: 15726: 15726: 15726: 15726: 15726: int block_size_deviation = 10; 15726: 15726: 15726: 15726: 15726: 15726: int block_restart_interval = 16; 15726: 15726: 15726: int index_block_restart_interval = 1; 15726: # 303 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: uint64_t metadata_block_size = 4096; 15726: # 391 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: CacheUsageOptions cache_usage_options; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool partition_filters = false; 15726: # 434 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: bool optimize_filters_for_memory = true; 15726: 15726: 15726: 15726: 15726: 15726: bool use_delta_encoding = true; 15726: 15726: 15726: 15726: 15726: std::shared_ptr filter_policy = nullptr; 15726: 15726: 15726: 15726: bool whole_key_filtering = true; 15726: # 463 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: bool detect_filter_construct_corruption = false; 15726: 15726: 15726: 15726: 15726: bool verify_compression = false; 15726: # 491 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: uint32_t read_amp_bytes_per_bit = 0; 15726: # 529 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: uint32_t format_version = 6; 15726: 15726: 15726: 15726: 15726: bool enable_index_compression = true; 15726: 15726: 15726: bool block_align = false; 15726: # 561 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: enum class IndexShorteningMode : char { 15726: 15726: kNoShortening, 15726: 15726: 15726: kShortenSeparators, 15726: 15726: kShortenSeparatorsAndSuccessor, 15726: }; 15726: 15726: IndexShorteningMode index_shortening = 15726: IndexShorteningMode::kShortenSeparators; 15726: # 600 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: size_t max_auto_readahead_size = 256 * 1024; 15726: # 614 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: enum class PrepopulateBlockCache : char { 15726: 15726: kDisable, 15726: 15726: kFlushOnly, 15726: }; 15726: 15726: PrepopulateBlockCache prepopulate_block_cache = 15726: PrepopulateBlockCache::kDisable; 15726: # 651 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: size_t initial_auto_readahead_size = 8 * 1024; 15726: # 671 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: uint64_t num_file_reads_for_auto_readahead = 2; 15726: }; 15726: 15726: 15726: struct BlockBasedTablePropertyNames { 15726: 15726: static const std::string kIndexType; 15726: 15726: static const std::string kWholeKeyFiltering; 15726: 15726: static const std::string kPrefixFiltering; 15726: }; 15726: 15726: 15726: TableFactory* NewBlockBasedTableFactory( 15726: const BlockBasedTableOptions& table_options = BlockBasedTableOptions()); 15726: 15726: enum EncodingType : char { 15726: 15726: kPlain, 15726: # 702 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: kPrefix, 15726: }; 15726: 15726: 15726: struct PlainTablePropertyNames { 15726: static const std::string kEncodingType; 15726: static const std::string kBloomVersion; 15726: static const std::string kNumBloomBlocks; 15726: }; 15726: 15726: const uint32_t kPlainTableVariableLength = 0; 15726: 15726: struct PlainTableOptions { 15726: static const char* kName() { return "PlainTableOptions"; } 15726: 15726: 15726: 15726: 15726: uint32_t user_key_len = kPlainTableVariableLength; 15726: 15726: 15726: 15726: int bloom_bits_per_key = 10; 15726: 15726: 15726: 15726: 15726: 15726: double hash_table_ratio = 0.75; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_t index_sparseness = 16; 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_t huge_page_tlb_size = 0; 15726: # 755 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: EncodingType encoding_type = kPlain; 15726: 15726: 15726: 15726: bool full_scan_mode = false; 15726: 15726: 15726: 15726: 15726: bool store_index_in_file = false; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: TableFactory* NewPlainTableFactory( 15726: const PlainTableOptions& options = PlainTableOptions()); 15726: 15726: struct CuckooTablePropertyNames { 15726: 15726: static const std::string kEmptyKey; 15726: 15726: static const std::string kValueLength; 15726: 15726: static const std::string kNumHashFunc; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: static const std::string kCuckooBlockSize; 15726: 15726: 15726: 15726: 15726: 15726: static const std::string kHashTableSize; 15726: 15726: 15726: static const std::string kIsLastLevel; 15726: 15726: static const std::string kIdentityAsFirstHash; 15726: 15726: static const std::string kUseModuleHash; 15726: 15726: static const std::string kUserKeyLength; 15726: }; 15726: 15726: struct CuckooTableOptions { 15726: static const char* kName() { return "CuckooTableOptions"; } 15726: 15726: 15726: 15726: double hash_table_ratio = 0.9; 15726: 15726: 15726: 15726: 15726: 15726: uint32_t max_search_depth = 100; 15726: 15726: 15726: 15726: 15726: 15726: uint32_t cuckoo_block_size = 5; 15726: 15726: 15726: 15726: 15726: bool identity_as_first_hash = false; 15726: 15726: 15726: 15726: 15726: 15726: bool use_module_hash = true; 15726: }; 15726: 15726: 15726: TableFactory* NewCuckooTableFactory( 15726: const CuckooTableOptions& table_options = CuckooTableOptions()); 15726: 15726: class RandomAccessFileReader; 15726: 15726: 15726: class TableFactory : public Customizable { 15726: public: 15726: ~TableFactory() override {} 15726: 15726: static const char* kBlockCacheOpts() { return "BlockCache"; } 15726: static const char* kBlockBasedTableName() { return "BlockBasedTable"; } 15726: static const char* kPlainTableName() { return "PlainTable"; } 15726: static const char* kCuckooTableName() { return "CuckooTable"; } 15726: 15726: 15726: static Status CreateFromString(const ConfigOptions& config_options, 15726: const std::string& id, 15726: std::shared_ptr* factory); 15726: 15726: static const char* Type() { return "TableFactory"; } 15726: # 879 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: virtual Status NewTableReader( 15726: const TableReaderOptions& table_reader_options, 15726: std::unique_ptr&& file, uint64_t file_size, 15726: std::unique_ptr* table_reader, 15726: bool prefetch_index_and_filter_in_cache = true) const { 15726: ReadOptions ro; 15726: return NewTableReader(ro, table_reader_options, std::move(file), file_size, 15726: table_reader, prefetch_index_and_filter_in_cache); 15726: } 15726: 15726: 15726: 15726: virtual Status NewTableReader( 15726: const ReadOptions& ro, const TableReaderOptions& table_reader_options, 15726: std::unique_ptr&& file, uint64_t file_size, 15726: std::unique_ptr* table_reader, 15726: bool prefetch_index_and_filter_in_cache) const = 0; 15726: # 915 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: virtual TableBuilder* NewTableBuilder( 15726: const TableBuilderOptions& table_builder_options, 15726: WritableFileWriter* file) const = 0; 15726: 15726: 15726: virtual bool IsDeleteRangeSupported() const { return false; } 15726: }; 15726: # 932 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table.h" 15726: TableFactory* NewAdaptiveTableFactory( 15726: std::shared_ptr table_factory_to_write = nullptr, 15726: std::shared_ptr block_based_table_factory = nullptr, 15726: std::shared_ptr plain_table_factory = nullptr, 15726: std::shared_ptr cuckoo_table_factory = nullptr); 15726: 15726: } 15726: # 36 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 2 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class FileLock; 15726: class FSDirectory; 15726: class FSRandomAccessFile; 15726: class FSRandomRWFile; 15726: class FSSequentialFile; 15726: class FSWritableFile; 15726: class Logger; 15726: class Slice; 15726: struct ImmutableDBOptions; 15726: struct MutableDBOptions; 15726: class RateLimiter; 15726: struct ConfigOptions; 15726: 15726: using AccessPattern = RandomAccessFile::AccessPattern; 15726: using FileAttributes = Env::FileAttributes; 15726: 15726: 15726: 15726: 15726: 15726: 15726: enum class IOPriority : uint8_t { 15726: kIOLow, 15726: kIOHigh, 15726: kIOTotal, 15726: }; 15726: 15726: 15726: 15726: 15726: enum class IOType : uint8_t { 15726: kData, 15726: kFilter, 15726: kIndex, 15726: kMetadata, 15726: kWAL, 15726: kManifest, 15726: kLog, 15726: kUnknown, 15726: kInvalid, 15726: }; 15726: 15726: 15726: 15726: enum FSSupportedOps { 15726: kAsyncIO, 15726: kFSBuffer, 15726: 15726: kVerifyAndReconstructRead, 15726: 15726: 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: struct IOOptions { 15726: 15726: std::chrono::microseconds timeout; 15726: 15726: 15726: 15726: IOPriority prio; 15726: 15726: 15726: 15726: 15726: 15726: Env::IOPriority rate_limiter_priority; 15726: 15726: 15726: IOType type; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: std::unordered_map property_bag; 15726: 15726: 15726: 15726: bool force_dir_fsync; 15726: 15726: 15726: 15726: bool do_not_recurse; 15726: # 140 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: bool verify_and_reconstruct_read; 15726: 15726: 15726: Env::IOActivity io_activity = Env::IOActivity::kUnknown; 15726: 15726: IOOptions() : IOOptions(false) {} 15726: 15726: explicit IOOptions(bool force_dir_fsync_) 15726: : timeout(std::chrono::microseconds::zero()), 15726: prio(IOPriority::kIOLow), 15726: rate_limiter_priority(Env::IO_TOTAL), 15726: type(IOType::kUnknown), 15726: force_dir_fsync(force_dir_fsync_), 15726: do_not_recurse(false), 15726: verify_and_reconstruct_read(false) {} 15726: }; 15726: 15726: struct DirFsyncOptions { 15726: enum FsyncReason : uint8_t { 15726: kNewFileSynced, 15726: kFileRenamed, 15726: kDirRenamed, 15726: kFileDeleted, 15726: kDefault, 15726: } reason; 15726: 15726: std::string renamed_new_name; 15726: 15726: 15726: DirFsyncOptions(); 15726: 15726: explicit DirFsyncOptions(std::string file_renamed_new_name); 15726: 15726: explicit DirFsyncOptions(FsyncReason fsync_reason); 15726: }; 15726: 15726: 15726: 15726: 15726: struct FileOptions : EnvOptions { 15726: 15726: 15726: IOOptions io_options; 15726: 15726: 15726: 15726: 15726: 15726: 15726: Temperature temperature = Temperature::kUnknown; 15726: 15726: 15726: 15726: ChecksumType handoff_checksum_type; 15726: 15726: FileOptions() : EnvOptions(), handoff_checksum_type(ChecksumType::kCRC32c) {} 15726: 15726: FileOptions(const DBOptions& opts) 15726: : EnvOptions(opts), handoff_checksum_type(ChecksumType::kCRC32c) {} 15726: 15726: FileOptions(const EnvOptions& opts) 15726: : EnvOptions(opts), handoff_checksum_type(ChecksumType::kCRC32c) {} 15726: 15726: FileOptions(const FileOptions& opts) 15726: : EnvOptions(opts), 15726: io_options(opts.io_options), 15726: temperature(opts.temperature), 15726: handoff_checksum_type(opts.handoff_checksum_type) {} 15726: 15726: FileOptions& operator=(const FileOptions&) = default; 15726: }; 15726: 15726: 15726: 15726: struct IODebugContext { 15726: 15726: std::string file_path; 15726: 15726: 15726: std::map counters; 15726: 15726: 15726: std::string msg; 15726: 15726: 15726: std::string request_id; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: enum TraceData : char { 15726: 15726: 15726: 15726: kRequestID = 0, 15726: }; 15726: uint64_t trace_data = 0; 15726: 15726: IODebugContext() {} 15726: 15726: void AddCounter(std::string& name, uint64_t value) { 15726: counters.emplace(name, value); 15726: } 15726: 15726: 15726: 15726: void SetRequestId(const std::string& _request_id) { 15726: request_id = _request_id; 15726: trace_data |= (1 << TraceData::kRequestID); 15726: } 15726: 15726: std::string ToString() { 15726: std::ostringstream ss; 15726: ss << file_path << ", "; 15726: for (auto counter : counters) { 15726: ss << counter.first << " = " << counter.second << ","; 15726: } 15726: ss << msg; 15726: return ss.str(); 15726: } 15726: }; 15726: 15726: 15726: 15726: 15726: using IOHandleDeleter = std::function; 15726: # 290 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: class FileSystem : public Customizable { 15726: public: 15726: FileSystem(); 15726: 15726: 15726: FileSystem(const FileSystem&) = delete; 15726: 15726: virtual ~FileSystem(); 15726: 15726: static const char* Type() { return "FileSystem"; } 15726: static const char* kDefaultName() { return "DefaultFileSystem"; } 15726: # 311 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: static Status CreateFromString(const ConfigOptions& options, 15726: const std::string& value, 15726: std::shared_ptr* result); 15726: 15726: 15726: 15726: static std::shared_ptr Default(); 15726: # 334 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual Status RegisterDbPaths(const std::vector& ) { 15726: return Status::OK(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status UnregisterDbPaths(const std::vector& ) { 15726: return Status::OK(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual IOStatus NewSequentialFile(const std::string& fname, 15726: const FileOptions& file_opts, 15726: std::unique_ptr* result, 15726: IODebugContext* dbg) = 0; 15726: # 366 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual IOStatus NewRandomAccessFile( 15726: const std::string& fname, const FileOptions& file_opts, 15726: std::unique_ptr* result, IODebugContext* dbg) = 0; 15726: 15726: 15726: enum WriteLifeTimeHint { 15726: kWLTHNotSet = 0, 15726: kWLTHNone, 15726: kWLTHShort, 15726: kWLTHMedium, 15726: kWLTHLong, 15726: kWLTHExtreme, 15726: }; 15726: # 387 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual IOStatus NewWritableFile(const std::string& fname, 15726: const FileOptions& file_opts, 15726: std::unique_ptr* result, 15726: IODebugContext* dbg) = 0; 15726: # 400 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual IOStatus ReopenWritableFile( 15726: const std::string& , const FileOptions& , 15726: std::unique_ptr* , IODebugContext* ) { 15726: return IOStatus::NotSupported("ReopenWritableFile"); 15726: } 15726: 15726: 15726: virtual IOStatus ReuseWritableFile(const std::string& fname, 15726: const std::string& old_fname, 15726: const FileOptions& file_opts, 15726: std::unique_ptr* result, 15726: IODebugContext* dbg); 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual IOStatus NewRandomRWFile(const std::string& , 15726: const FileOptions& , 15726: std::unique_ptr* , 15726: IODebugContext* ) { 15726: return IOStatus::NotSupported( 15726: "RandomRWFile is not implemented in this FileSystem"); 15726: } 15726: 15726: 15726: 15726: 15726: virtual IOStatus NewMemoryMappedFileBuffer( 15726: const std::string& , 15726: std::unique_ptr* ) { 15726: return IOStatus::NotSupported( 15726: "MemoryMappedFileBuffer is not implemented in this FileSystem"); 15726: } 15726: # 443 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual IOStatus NewDirectory(const std::string& name, 15726: const IOOptions& io_opts, 15726: std::unique_ptr* result, 15726: IODebugContext* dbg) = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual IOStatus FileExists(const std::string& fname, 15726: const IOOptions& options, 15726: IODebugContext* dbg) = 0; 15726: # 464 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual IOStatus GetChildren(const std::string& dir, const IOOptions& options, 15726: std::vector* result, 15726: IODebugContext* dbg) = 0; 15726: # 478 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual IOStatus GetChildrenFileAttributes( 15726: const std::string& dir, const IOOptions& options, 15726: std::vector* result, IODebugContext* dbg) { 15726: 15726: # 481 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 3 4 15726: (static_cast ( 15726: # 481 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: result != nullptr 15726: # 481 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 481 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: "result != nullptr" 15726: # 481 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 481 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: ; 15726: std::vector child_fnames; 15726: IOStatus s = GetChildren(dir, options, &child_fnames, dbg); 15726: if (!s.ok()) { 15726: return s; 15726: } 15726: result->resize(child_fnames.size()); 15726: size_t result_size = 0; 15726: for (size_t i = 0; i < child_fnames.size(); ++i) { 15726: const std::string path = dir + "/" + child_fnames[i]; 15726: if (!(s = GetFileSize(path, options, &(*result)[result_size].size_bytes, 15726: dbg)) 15726: .ok()) { 15726: if (FileExists(path, options, dbg).IsNotFound()) { 15726: 15726: continue; 15726: } 15726: return s; 15726: } 15726: (*result)[result_size].name = std::move(child_fnames[i]); 15726: result_size++; 15726: } 15726: result->resize(result_size); 15726: return IOStatus::OK(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual IOStatus DeleteFile(const std::string& fname, 15726: const IOOptions& options, 15726: IODebugContext* dbg) = 0; 15726: 15726: 15726: virtual IOStatus Truncate(const std::string& , size_t , 15726: const IOOptions& , 15726: IODebugContext* ) { 15726: return IOStatus::NotSupported( 15726: "Truncate is not supported for this FileSystem"); 15726: } 15726: 15726: 15726: virtual IOStatus CreateDir(const std::string& dirname, 15726: const IOOptions& options, IODebugContext* dbg) = 0; 15726: 15726: 15726: 15726: virtual IOStatus CreateDirIfMissing(const std::string& dirname, 15726: const IOOptions& options, 15726: IODebugContext* dbg) = 0; 15726: 15726: 15726: virtual IOStatus DeleteDir(const std::string& dirname, 15726: const IOOptions& options, IODebugContext* dbg) = 0; 15726: 15726: 15726: virtual IOStatus GetFileSize(const std::string& fname, 15726: const IOOptions& options, uint64_t* file_size, 15726: IODebugContext* dbg) = 0; 15726: 15726: 15726: virtual IOStatus GetFileModificationTime(const std::string& fname, 15726: const IOOptions& options, 15726: uint64_t* file_mtime, 15726: IODebugContext* dbg) = 0; 15726: 15726: virtual IOStatus RenameFile(const std::string& src, const std::string& target, 15726: const IOOptions& options, 15726: IODebugContext* dbg) = 0; 15726: 15726: 15726: virtual IOStatus LinkFile(const std::string& , 15726: const std::string& , 15726: const IOOptions& , 15726: IODebugContext* ) { 15726: return IOStatus::NotSupported( 15726: "LinkFile is not supported for this FileSystem"); 15726: } 15726: 15726: virtual IOStatus NumFileLinks(const std::string& , 15726: const IOOptions& , 15726: uint64_t* , IODebugContext* ) { 15726: return IOStatus::NotSupported( 15726: "Getting number of file links is not supported for this FileSystem"); 15726: } 15726: 15726: virtual IOStatus AreFilesSame(const std::string& , 15726: const std::string& , 15726: const IOOptions& , bool* , 15726: IODebugContext* ) { 15726: return IOStatus::NotSupported( 15726: "AreFilesSame is not supported for this FileSystem"); 15726: } 15726: # 591 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual IOStatus LockFile(const std::string& fname, const IOOptions& options, 15726: FileLock** lock, IODebugContext* dbg) = 0; 15726: 15726: 15726: 15726: 15726: virtual IOStatus UnlockFile(FileLock* lock, const IOOptions& options, 15726: IODebugContext* dbg) = 0; 15726: 15726: 15726: 15726: 15726: 15726: virtual IOStatus GetTestDirectory(const IOOptions& options, std::string* path, 15726: IODebugContext* dbg) = 0; 15726: 15726: 15726: 15726: 15726: virtual IOStatus NewLogger(const std::string& fname, const IOOptions& io_opts, 15726: std::shared_ptr* result, 15726: IODebugContext* dbg); 15726: 15726: 15726: virtual IOStatus GetAbsolutePath(const std::string& db_path, 15726: const IOOptions& options, 15726: std::string* output_path, 15726: IODebugContext* dbg) = 0; 15726: 15726: 15726: 15726: virtual void SanitizeFileOptions(FileOptions* ) const {} 15726: 15726: 15726: 15726: virtual FileOptions OptimizeForLogRead(const FileOptions& file_options) const; 15726: 15726: 15726: 15726: 15726: virtual FileOptions OptimizeForManifestRead( 15726: const FileOptions& file_options) const; 15726: 15726: 15726: 15726: 15726: virtual FileOptions OptimizeForLogWrite(const FileOptions& file_options, 15726: const DBOptions& db_options) const; 15726: 15726: 15726: 15726: 15726: 15726: virtual FileOptions OptimizeForManifestWrite( 15726: const FileOptions& file_options) const; 15726: 15726: 15726: 15726: 15726: virtual FileOptions OptimizeForCompactionTableWrite( 15726: const FileOptions& file_options, 15726: const ImmutableDBOptions& immutable_ops) const; 15726: 15726: 15726: 15726: 15726: virtual FileOptions OptimizeForCompactionTableRead( 15726: const FileOptions& file_options, 15726: const ImmutableDBOptions& db_options) const; 15726: 15726: 15726: 15726: 15726: virtual FileOptions OptimizeForBlobFileRead( 15726: const FileOptions& file_options, 15726: const ImmutableDBOptions& db_options) const; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual IOStatus GetFreeSpace(const std::string& , 15726: const IOOptions& , 15726: uint64_t* , 15726: IODebugContext* ) { 15726: return IOStatus::NotSupported("GetFreeSpace"); 15726: } 15726: 15726: virtual IOStatus IsDirectory(const std::string& , 15726: const IOOptions& options, bool* is_dir, 15726: IODebugContext* ) = 0; 15726: # 692 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual IOStatus Poll(std::vector& , 15726: size_t ) { 15726: return IOStatus::OK(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: virtual IOStatus AbortIO(std::vector& ) { 15726: return IOStatus::OK(); 15726: } 15726: # 713 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual void DiscardCacheForDirectory(const std::string& ) {} 15726: # 725 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual void SupportedOps(int64_t& supported_ops) { 15726: supported_ops = 0; 15726: supported_ops |= (1 << FSSupportedOps::kAsyncIO); 15726: } 15726: 15726: 15726: 15726: private: 15726: void operator=(const FileSystem&); 15726: }; 15726: 15726: 15726: class FSSequentialFile { 15726: public: 15726: FSSequentialFile() {} 15726: 15726: virtual ~FSSequentialFile() {} 15726: # 755 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual IOStatus Read(size_t n, const IOOptions& options, Slice* result, 15726: char* scratch, IODebugContext* dbg) = 0; 15726: # 765 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual IOStatus Skip(uint64_t n) = 0; 15726: 15726: 15726: 15726: virtual bool use_direct_io() const { return false; } 15726: 15726: 15726: 15726: virtual size_t GetRequiredBufferAlignment() const { return kDefaultPageSize; } 15726: 15726: 15726: 15726: 15726: virtual IOStatus InvalidateCache(size_t , size_t ) { 15726: return IOStatus::NotSupported("InvalidateCache not supported."); 15726: } 15726: 15726: 15726: 15726: virtual IOStatus PositionedRead(uint64_t , size_t , 15726: const IOOptions& , 15726: Slice* , char* , 15726: IODebugContext* ) { 15726: return IOStatus::NotSupported("PositionedRead"); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Temperature GetTemperature() const { return Temperature::kUnknown; } 15726: 15726: 15726: 15726: }; 15726: 15726: using FSAllocationPtr = std::unique_ptr>; 15726: 15726: 15726: struct FSReadRequest { 15726: 15726: uint64_t offset; 15726: 15726: 15726: 15726: size_t len; 15726: # 820 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: char* scratch; 15726: # 830 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: Slice result; 15726: 15726: 15726: 15726: IOStatus status; 15726: # 870 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: FSAllocationPtr fs_scratch; 15726: }; 15726: 15726: 15726: class FSRandomAccessFile { 15726: public: 15726: FSRandomAccessFile() {} 15726: 15726: virtual ~FSRandomAccessFile() {} 15726: # 894 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual IOStatus Read(uint64_t offset, size_t n, const IOOptions& options, 15726: Slice* result, char* scratch, 15726: IODebugContext* dbg) const = 0; 15726: 15726: 15726: 15726: 15726: virtual IOStatus Prefetch(uint64_t , size_t , 15726: const IOOptions& , 15726: IODebugContext* ) { 15726: return IOStatus::NotSupported("Prefetch"); 15726: } 15726: # 915 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual IOStatus MultiRead(FSReadRequest* reqs, size_t num_reqs, 15726: const IOOptions& options, IODebugContext* dbg) { 15726: 15726: # 917 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 3 4 15726: (static_cast ( 15726: # 917 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: reqs != nullptr 15726: # 917 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 917 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: "reqs != nullptr" 15726: # 917 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 917 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: ; 15726: for (size_t i = 0; i < num_reqs; ++i) { 15726: FSReadRequest& req = reqs[i]; 15726: req.status = 15726: Read(req.offset, req.len, options, &req.result, req.scratch, dbg); 15726: } 15726: return IOStatus::OK(); 15726: } 15726: # 941 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual size_t GetUniqueId(char* , size_t ) const { 15726: return 0; 15726: 15726: } 15726: 15726: enum AccessPattern { kNormal, kRandom, kSequential, kWillNeed, kWontNeed }; 15726: 15726: virtual void Hint(AccessPattern ) {} 15726: 15726: 15726: 15726: virtual bool use_direct_io() const { return false; } 15726: 15726: 15726: 15726: virtual size_t GetRequiredBufferAlignment() const { return kDefaultPageSize; } 15726: 15726: 15726: 15726: 15726: virtual IOStatus InvalidateCache(size_t , size_t ) { 15726: return IOStatus::NotSupported("InvalidateCache not supported."); 15726: } 15726: # 997 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual IOStatus ReadAsync(FSReadRequest& req, const IOOptions& opts, 15726: std::function cb, 15726: void* cb_arg, void** , 15726: IOHandleDeleter* , IODebugContext* dbg) { 15726: req.status = 15726: Read(req.offset, req.len, opts, &(req.result), req.scratch, dbg); 15726: cb(req, cb_arg); 15726: return IOStatus::OK(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Temperature GetTemperature() const { return Temperature::kUnknown; } 15726: 15726: 15726: 15726: }; 15726: 15726: 15726: 15726: struct DataVerificationInfo { 15726: 15726: Slice checksum; 15726: }; 15726: 15726: 15726: 15726: 15726: class FSWritableFile { 15726: public: 15726: FSWritableFile() 15726: : last_preallocated_block_(0), 15726: preallocation_block_size_(0), 15726: io_priority_(Env::IO_TOTAL), 15726: write_hint_(Env::WLTH_NOT_SET), 15726: strict_bytes_per_sync_(false) {} 15726: 15726: explicit FSWritableFile(const FileOptions& options) 15726: : last_preallocated_block_(0), 15726: preallocation_block_size_(0), 15726: io_priority_(Env::IO_TOTAL), 15726: write_hint_(Env::WLTH_NOT_SET), 15726: strict_bytes_per_sync_(options.strict_bytes_per_sync) {} 15726: 15726: 15726: 15726: 15726: virtual ~FSWritableFile() {} 15726: 15726: 15726: 15726: 15726: virtual IOStatus Append(const Slice& data, const IOOptions& options, 15726: IODebugContext* dbg) = 0; 15726: # 1063 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual IOStatus Append(const Slice& data, const IOOptions& options, 15726: const DataVerificationInfo& , 15726: IODebugContext* dbg) { 15726: return Append(data, options, dbg); 15726: } 15726: # 1089 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual IOStatus PositionedAppend(const Slice& , 15726: uint64_t , 15726: const IOOptions& , 15726: IODebugContext* ) { 15726: return IOStatus::NotSupported("PositionedAppend"); 15726: } 15726: # 1104 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual IOStatus PositionedAppend( 15726: const Slice& , uint64_t , 15726: const IOOptions& , 15726: const DataVerificationInfo& , 15726: IODebugContext* ) { 15726: return IOStatus::NotSupported("PositionedAppend"); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: virtual IOStatus Truncate(uint64_t , const IOOptions& , 15726: IODebugContext* ) { 15726: return IOStatus::OK(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual IOStatus Close(const IOOptions& , 15726: IODebugContext* ) = 0; 15726: 15726: virtual IOStatus Flush(const IOOptions& options, IODebugContext* dbg) = 0; 15726: virtual IOStatus Sync(const IOOptions& options, 15726: IODebugContext* dbg) = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual IOStatus Fsync(const IOOptions& options, IODebugContext* dbg) { 15726: return Sync(options, dbg); 15726: } 15726: 15726: 15726: 15726: virtual bool IsSyncThreadSafe() const { return false; } 15726: 15726: 15726: 15726: virtual bool use_direct_io() const { return false; } 15726: 15726: 15726: 15726: virtual size_t GetRequiredBufferAlignment() const { return kDefaultPageSize; } 15726: 15726: virtual void SetWriteLifeTimeHint(Env::WriteLifeTimeHint hint) { 15726: write_hint_ = hint; 15726: } 15726: # 1170 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual void SetIOPriority(Env::IOPriority pri) { io_priority_ = pri; } 15726: 15726: virtual Env::IOPriority GetIOPriority() { return io_priority_; } 15726: 15726: virtual Env::WriteLifeTimeHint GetWriteLifeTimeHint() { return write_hint_; } 15726: 15726: 15726: 15726: virtual uint64_t GetFileSize(const IOOptions& , 15726: IODebugContext* ) = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void SetPreallocationBlockSize(size_t size) { 15726: preallocation_block_size_ = size; 15726: } 15726: 15726: virtual void GetPreallocationStatus(size_t* block_size, 15726: size_t* last_allocated_block) { 15726: *last_allocated_block = last_preallocated_block_; 15726: *block_size = preallocation_block_size_; 15726: } 15726: 15726: 15726: virtual size_t GetUniqueId(char* , size_t ) const { 15726: return 0; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: virtual IOStatus InvalidateCache(size_t , size_t ) { 15726: return IOStatus::NotSupported("InvalidateCache not supported."); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual IOStatus RangeSync(uint64_t , uint64_t , 15726: const IOOptions& options, IODebugContext* dbg) { 15726: if (strict_bytes_per_sync_) { 15726: return Sync(options, dbg); 15726: } 15726: return IOStatus::OK(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void PrepareWrite(size_t offset, size_t len, const IOOptions& options, 15726: IODebugContext* dbg) { 15726: if (preallocation_block_size_ == 0) { 15726: return; 15726: } 15726: 15726: 15726: 15726: const auto block_size = preallocation_block_size_; 15726: size_t new_last_preallocated_block = 15726: (offset + len + block_size - 1) / block_size; 15726: if (new_last_preallocated_block > last_preallocated_block_) { 15726: size_t num_spanned_blocks = 15726: new_last_preallocated_block - last_preallocated_block_; 15726: Allocate(block_size * last_preallocated_block_, 15726: block_size * num_spanned_blocks, options, dbg) 15726: .PermitUncheckedError(); 15726: last_preallocated_block_ = new_last_preallocated_block; 15726: } 15726: } 15726: 15726: 15726: virtual IOStatus Allocate(uint64_t , uint64_t , 15726: const IOOptions& , 15726: IODebugContext* ) { 15726: return IOStatus::OK(); 15726: } 15726: 15726: 15726: 15726: 15726: protected: 15726: size_t preallocation_block_size() { return preallocation_block_size_; } 15726: 15726: private: 15726: size_t last_preallocated_block_; 15726: size_t preallocation_block_size_; 15726: 15726: FSWritableFile(const FSWritableFile&); 15726: void operator=(const FSWritableFile&); 15726: 15726: protected: 15726: Env::IOPriority io_priority_; 15726: Env::WriteLifeTimeHint write_hint_; 15726: const bool strict_bytes_per_sync_; 15726: }; 15726: 15726: 15726: class FSRandomRWFile { 15726: public: 15726: FSRandomRWFile() {} 15726: 15726: 15726: 15726: 15726: virtual ~FSRandomRWFile() {} 15726: 15726: 15726: 15726: virtual bool use_direct_io() const { return false; } 15726: 15726: 15726: 15726: virtual size_t GetRequiredBufferAlignment() const { return kDefaultPageSize; } 15726: 15726: 15726: 15726: virtual IOStatus Write(uint64_t offset, const Slice& data, 15726: const IOOptions& options, IODebugContext* dbg) = 0; 15726: # 1307 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: virtual IOStatus Read(uint64_t offset, size_t n, const IOOptions& options, 15726: Slice* result, char* scratch, 15726: IODebugContext* dbg) const = 0; 15726: 15726: virtual IOStatus Flush(const IOOptions& options, IODebugContext* dbg) = 0; 15726: 15726: virtual IOStatus Sync(const IOOptions& options, IODebugContext* dbg) = 0; 15726: 15726: virtual IOStatus Fsync(const IOOptions& options, IODebugContext* dbg) { 15726: return Sync(options, dbg); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual IOStatus Close(const IOOptions& options, IODebugContext* dbg) = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Temperature GetTemperature() const { return Temperature::kUnknown; } 15726: 15726: 15726: 15726: 15726: 15726: FSRandomRWFile(const RandomRWFile&) = delete; 15726: FSRandomRWFile& operator=(const RandomRWFile&) = delete; 15726: }; 15726: 15726: 15726: 15726: class FSMemoryMappedFileBuffer { 15726: public: 15726: FSMemoryMappedFileBuffer(void* _base, size_t _length) 15726: : base_(_base), length_(_length) {} 15726: 15726: virtual ~FSMemoryMappedFileBuffer() = 0; 15726: 15726: 15726: 15726: FSMemoryMappedFileBuffer(const FSMemoryMappedFileBuffer&) = delete; 15726: FSMemoryMappedFileBuffer& operator=(const FSMemoryMappedFileBuffer&) = delete; 15726: 15726: void* GetBase() const { return base_; } 15726: size_t GetLen() const { return length_; } 15726: 15726: protected: 15726: void* base_; 15726: const size_t length_; 15726: }; 15726: 15726: 15726: 15726: class FSDirectory { 15726: public: 15726: 15726: 15726: 15726: virtual ~FSDirectory() {} 15726: 15726: virtual IOStatus Fsync(const IOOptions& options, IODebugContext* dbg) = 0; 15726: 15726: 15726: 15726: 15726: virtual IOStatus FsyncWithDirOptions( 15726: const IOOptions& options, IODebugContext* dbg, 15726: const DirFsyncOptions& ) { 15726: return Fsync(options, dbg); 15726: } 15726: 15726: 15726: 15726: 15726: virtual IOStatus Close(const IOOptions& , 15726: IODebugContext* ) { 15726: return IOStatus::NotSupported("Close"); 15726: } 15726: 15726: virtual size_t GetUniqueId(char* , size_t ) const { 15726: return 0; 15726: } 15726: 15726: 15726: 15726: }; 15726: # 1429 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/file_system.h" 15726: class FileSystemWrapper : public FileSystem { 15726: public: 15726: 15726: explicit FileSystemWrapper(const std::shared_ptr& t); 15726: ~FileSystemWrapper() override {} 15726: 15726: 15726: FileSystem* target() const { return target_.get(); } 15726: 15726: 15726: IOStatus NewSequentialFile(const std::string& f, const FileOptions& file_opts, 15726: std::unique_ptr* r, 15726: IODebugContext* dbg) override { 15726: return target_->NewSequentialFile(f, file_opts, r, dbg); 15726: } 15726: IOStatus NewRandomAccessFile(const std::string& f, 15726: const FileOptions& file_opts, 15726: std::unique_ptr* r, 15726: IODebugContext* dbg) override { 15726: return target_->NewRandomAccessFile(f, file_opts, r, dbg); 15726: } 15726: IOStatus NewWritableFile(const std::string& f, const FileOptions& file_opts, 15726: std::unique_ptr* r, 15726: IODebugContext* dbg) override { 15726: return target_->NewWritableFile(f, file_opts, r, dbg); 15726: } 15726: IOStatus ReopenWritableFile(const std::string& fname, 15726: const FileOptions& file_opts, 15726: std::unique_ptr* result, 15726: IODebugContext* dbg) override { 15726: return target_->ReopenWritableFile(fname, file_opts, result, dbg); 15726: } 15726: IOStatus ReuseWritableFile(const std::string& fname, 15726: const std::string& old_fname, 15726: const FileOptions& file_opts, 15726: std::unique_ptr* r, 15726: IODebugContext* dbg) override { 15726: return target_->ReuseWritableFile(fname, old_fname, file_opts, r, dbg); 15726: } 15726: IOStatus NewRandomRWFile(const std::string& fname, 15726: const FileOptions& file_opts, 15726: std::unique_ptr* result, 15726: IODebugContext* dbg) override { 15726: return target_->NewRandomRWFile(fname, file_opts, result, dbg); 15726: } 15726: IOStatus NewMemoryMappedFileBuffer( 15726: const std::string& fname, 15726: std::unique_ptr* result) override { 15726: return target_->NewMemoryMappedFileBuffer(fname, result); 15726: } 15726: IOStatus NewDirectory(const std::string& name, const IOOptions& io_opts, 15726: std::unique_ptr* result, 15726: IODebugContext* dbg) override { 15726: return target_->NewDirectory(name, io_opts, result, dbg); 15726: } 15726: IOStatus FileExists(const std::string& f, const IOOptions& io_opts, 15726: IODebugContext* dbg) override { 15726: return target_->FileExists(f, io_opts, dbg); 15726: } 15726: IOStatus GetChildren(const std::string& dir, const IOOptions& io_opts, 15726: std::vector* r, 15726: IODebugContext* dbg) override { 15726: return target_->GetChildren(dir, io_opts, r, dbg); 15726: } 15726: IOStatus GetChildrenFileAttributes(const std::string& dir, 15726: const IOOptions& options, 15726: std::vector* result, 15726: IODebugContext* dbg) override { 15726: return target_->GetChildrenFileAttributes(dir, options, result, dbg); 15726: } 15726: IOStatus DeleteFile(const std::string& f, const IOOptions& options, 15726: IODebugContext* dbg) override { 15726: return target_->DeleteFile(f, options, dbg); 15726: } 15726: IOStatus Truncate(const std::string& fname, size_t size, 15726: const IOOptions& options, IODebugContext* dbg) override { 15726: return target_->Truncate(fname, size, options, dbg); 15726: } 15726: IOStatus CreateDir(const std::string& d, const IOOptions& options, 15726: IODebugContext* dbg) override { 15726: return target_->CreateDir(d, options, dbg); 15726: } 15726: IOStatus CreateDirIfMissing(const std::string& d, const IOOptions& options, 15726: IODebugContext* dbg) override { 15726: return target_->CreateDirIfMissing(d, options, dbg); 15726: } 15726: IOStatus DeleteDir(const std::string& d, const IOOptions& options, 15726: IODebugContext* dbg) override { 15726: return target_->DeleteDir(d, options, dbg); 15726: } 15726: IOStatus GetFileSize(const std::string& f, const IOOptions& options, 15726: uint64_t* s, IODebugContext* dbg) override { 15726: return target_->GetFileSize(f, options, s, dbg); 15726: } 15726: 15726: IOStatus GetFileModificationTime(const std::string& fname, 15726: const IOOptions& options, 15726: uint64_t* file_mtime, 15726: IODebugContext* dbg) override { 15726: return target_->GetFileModificationTime(fname, options, file_mtime, dbg); 15726: } 15726: 15726: IOStatus GetAbsolutePath(const std::string& db_path, const IOOptions& options, 15726: std::string* output_path, 15726: IODebugContext* dbg) override { 15726: return target_->GetAbsolutePath(db_path, options, output_path, dbg); 15726: } 15726: 15726: IOStatus RenameFile(const std::string& s, const std::string& t, 15726: const IOOptions& options, IODebugContext* dbg) override { 15726: return target_->RenameFile(s, t, options, dbg); 15726: } 15726: 15726: IOStatus LinkFile(const std::string& s, const std::string& t, 15726: const IOOptions& options, IODebugContext* dbg) override { 15726: return target_->LinkFile(s, t, options, dbg); 15726: } 15726: 15726: IOStatus NumFileLinks(const std::string& fname, const IOOptions& options, 15726: uint64_t* count, IODebugContext* dbg) override { 15726: return target_->NumFileLinks(fname, options, count, dbg); 15726: } 15726: 15726: IOStatus AreFilesSame(const std::string& first, const std::string& second, 15726: const IOOptions& options, bool* res, 15726: IODebugContext* dbg) override { 15726: return target_->AreFilesSame(first, second, options, res, dbg); 15726: } 15726: 15726: IOStatus LockFile(const std::string& f, const IOOptions& options, 15726: FileLock** l, IODebugContext* dbg) override { 15726: return target_->LockFile(f, options, l, dbg); 15726: } 15726: 15726: IOStatus UnlockFile(FileLock* l, const IOOptions& options, 15726: IODebugContext* dbg) override { 15726: return target_->UnlockFile(l, options, dbg); 15726: } 15726: 15726: IOStatus GetTestDirectory(const IOOptions& options, std::string* path, 15726: IODebugContext* dbg) override { 15726: return target_->GetTestDirectory(options, path, dbg); 15726: } 15726: IOStatus NewLogger(const std::string& fname, const IOOptions& options, 15726: std::shared_ptr* result, 15726: IODebugContext* dbg) override { 15726: return target_->NewLogger(fname, options, result, dbg); 15726: } 15726: 15726: void SanitizeFileOptions(FileOptions* opts) const override { 15726: target_->SanitizeFileOptions(opts); 15726: } 15726: 15726: FileOptions OptimizeForLogRead( 15726: const FileOptions& file_options) const override { 15726: return target_->OptimizeForLogRead(file_options); 15726: } 15726: FileOptions OptimizeForManifestRead( 15726: const FileOptions& file_options) const override { 15726: return target_->OptimizeForManifestRead(file_options); 15726: } 15726: FileOptions OptimizeForLogWrite(const FileOptions& file_options, 15726: const DBOptions& db_options) const override { 15726: return target_->OptimizeForLogWrite(file_options, db_options); 15726: } 15726: FileOptions OptimizeForManifestWrite( 15726: const FileOptions& file_options) const override { 15726: return target_->OptimizeForManifestWrite(file_options); 15726: } 15726: FileOptions OptimizeForCompactionTableWrite( 15726: const FileOptions& file_options, 15726: const ImmutableDBOptions& immutable_ops) const override { 15726: return target_->OptimizeForCompactionTableWrite(file_options, 15726: immutable_ops); 15726: } 15726: FileOptions OptimizeForCompactionTableRead( 15726: const FileOptions& file_options, 15726: const ImmutableDBOptions& db_options) const override { 15726: return target_->OptimizeForCompactionTableRead(file_options, db_options); 15726: } 15726: FileOptions OptimizeForBlobFileRead( 15726: const FileOptions& file_options, 15726: const ImmutableDBOptions& db_options) const override { 15726: return target_->OptimizeForBlobFileRead(file_options, db_options); 15726: } 15726: IOStatus GetFreeSpace(const std::string& path, const IOOptions& options, 15726: uint64_t* diskfree, IODebugContext* dbg) override { 15726: return target_->GetFreeSpace(path, options, diskfree, dbg); 15726: } 15726: IOStatus IsDirectory(const std::string& path, const IOOptions& options, 15726: bool* is_dir, IODebugContext* dbg) override { 15726: return target_->IsDirectory(path, options, is_dir, dbg); 15726: } 15726: 15726: const Customizable* Inner() const override { return target_.get(); } 15726: Status PrepareOptions(const ConfigOptions& options) override; 15726: std::string SerializeOptions(const ConfigOptions& config_options, 15726: const std::string& header) const override; 15726: 15726: IOStatus Poll(std::vector& io_handles, 15726: size_t min_completions) override { 15726: return target_->Poll(io_handles, min_completions); 15726: } 15726: 15726: IOStatus AbortIO(std::vector& io_handles) override { 15726: return target_->AbortIO(io_handles); 15726: } 15726: 15726: void DiscardCacheForDirectory(const std::string& path) override { 15726: target_->DiscardCacheForDirectory(path); 15726: } 15726: 15726: void SupportedOps(int64_t& supported_ops) override { 15726: return target_->SupportedOps(supported_ops); 15726: } 15726: 15726: protected: 15726: std::shared_ptr target_; 15726: }; 15726: 15726: class FSSequentialFileWrapper : public FSSequentialFile { 15726: public: 15726: 15726: 15726: explicit FSSequentialFileWrapper(FSSequentialFile* t) : target_(t) {} 15726: 15726: FSSequentialFile* target() const { return target_; } 15726: 15726: IOStatus Read(size_t n, const IOOptions& options, Slice* result, 15726: char* scratch, IODebugContext* dbg) override { 15726: return target_->Read(n, options, result, scratch, dbg); 15726: } 15726: IOStatus Skip(uint64_t n) override { return target_->Skip(n); } 15726: bool use_direct_io() const override { return target_->use_direct_io(); } 15726: size_t GetRequiredBufferAlignment() const override { 15726: return target_->GetRequiredBufferAlignment(); 15726: } 15726: IOStatus InvalidateCache(size_t offset, size_t length) override { 15726: return target_->InvalidateCache(offset, length); 15726: } 15726: IOStatus PositionedRead(uint64_t offset, size_t n, const IOOptions& options, 15726: Slice* result, char* scratch, 15726: IODebugContext* dbg) override { 15726: return target_->PositionedRead(offset, n, options, result, scratch, dbg); 15726: } 15726: Temperature GetTemperature() const override { 15726: return target_->GetTemperature(); 15726: } 15726: 15726: private: 15726: FSSequentialFile* target_; 15726: }; 15726: 15726: class FSSequentialFileOwnerWrapper : public FSSequentialFileWrapper { 15726: public: 15726: 15726: 15726: explicit FSSequentialFileOwnerWrapper(std::unique_ptr&& t) 15726: : FSSequentialFileWrapper(t.get()), guard_(std::move(t)) {} 15726: 15726: private: 15726: std::unique_ptr guard_; 15726: }; 15726: 15726: class FSRandomAccessFileWrapper : public FSRandomAccessFile { 15726: public: 15726: 15726: 15726: explicit FSRandomAccessFileWrapper(FSRandomAccessFile* t) : target_(t) {} 15726: 15726: FSRandomAccessFile* target() const { return target_; } 15726: 15726: IOStatus Read(uint64_t offset, size_t n, const IOOptions& options, 15726: Slice* result, char* scratch, 15726: IODebugContext* dbg) const override { 15726: return target_->Read(offset, n, options, result, scratch, dbg); 15726: } 15726: IOStatus MultiRead(FSReadRequest* reqs, size_t num_reqs, 15726: const IOOptions& options, IODebugContext* dbg) override { 15726: return target_->MultiRead(reqs, num_reqs, options, dbg); 15726: } 15726: IOStatus Prefetch(uint64_t offset, size_t n, const IOOptions& options, 15726: IODebugContext* dbg) override { 15726: return target_->Prefetch(offset, n, options, dbg); 15726: } 15726: size_t GetUniqueId(char* id, size_t max_size) const override { 15726: return target_->GetUniqueId(id, max_size); 15726: } 15726: void Hint(AccessPattern pattern) override { target_->Hint(pattern); } 15726: bool use_direct_io() const override { return target_->use_direct_io(); } 15726: size_t GetRequiredBufferAlignment() const override { 15726: return target_->GetRequiredBufferAlignment(); 15726: } 15726: IOStatus InvalidateCache(size_t offset, size_t length) override { 15726: return target_->InvalidateCache(offset, length); 15726: } 15726: IOStatus ReadAsync(FSReadRequest& req, const IOOptions& opts, 15726: std::function cb, 15726: void* cb_arg, void** io_handle, IOHandleDeleter* del_fn, 15726: IODebugContext* dbg) override { 15726: return target()->ReadAsync(req, opts, cb, cb_arg, io_handle, del_fn, dbg); 15726: } 15726: Temperature GetTemperature() const override { 15726: return target_->GetTemperature(); 15726: } 15726: 15726: private: 15726: std::unique_ptr guard_; 15726: FSRandomAccessFile* target_; 15726: }; 15726: 15726: class FSRandomAccessFileOwnerWrapper : public FSRandomAccessFileWrapper { 15726: public: 15726: 15726: 15726: explicit FSRandomAccessFileOwnerWrapper( 15726: std::unique_ptr&& t) 15726: : FSRandomAccessFileWrapper(t.get()), guard_(std::move(t)) {} 15726: 15726: private: 15726: std::unique_ptr guard_; 15726: }; 15726: 15726: class FSWritableFileWrapper : public FSWritableFile { 15726: public: 15726: 15726: 15726: explicit FSWritableFileWrapper(FSWritableFile* t) : target_(t) {} 15726: 15726: FSWritableFile* target() const { return target_; } 15726: 15726: IOStatus Append(const Slice& data, const IOOptions& options, 15726: IODebugContext* dbg) override { 15726: return target_->Append(data, options, dbg); 15726: } 15726: IOStatus Append(const Slice& data, const IOOptions& options, 15726: const DataVerificationInfo& verification_info, 15726: IODebugContext* dbg) override { 15726: return target_->Append(data, options, verification_info, dbg); 15726: } 15726: IOStatus PositionedAppend(const Slice& data, uint64_t offset, 15726: const IOOptions& options, 15726: IODebugContext* dbg) override { 15726: return target_->PositionedAppend(data, offset, options, dbg); 15726: } 15726: IOStatus PositionedAppend(const Slice& data, uint64_t offset, 15726: const IOOptions& options, 15726: const DataVerificationInfo& verification_info, 15726: IODebugContext* dbg) override { 15726: return target_->PositionedAppend(data, offset, options, verification_info, 15726: dbg); 15726: } 15726: IOStatus Truncate(uint64_t size, const IOOptions& options, 15726: IODebugContext* dbg) override { 15726: return target_->Truncate(size, options, dbg); 15726: } 15726: IOStatus Close(const IOOptions& options, IODebugContext* dbg) override { 15726: return target_->Close(options, dbg); 15726: } 15726: IOStatus Flush(const IOOptions& options, IODebugContext* dbg) override { 15726: return target_->Flush(options, dbg); 15726: } 15726: IOStatus Sync(const IOOptions& options, IODebugContext* dbg) override { 15726: return target_->Sync(options, dbg); 15726: } 15726: IOStatus Fsync(const IOOptions& options, IODebugContext* dbg) override { 15726: return target_->Fsync(options, dbg); 15726: } 15726: bool IsSyncThreadSafe() const override { return target_->IsSyncThreadSafe(); } 15726: 15726: bool use_direct_io() const override { return target_->use_direct_io(); } 15726: 15726: size_t GetRequiredBufferAlignment() const override { 15726: return target_->GetRequiredBufferAlignment(); 15726: } 15726: 15726: void SetWriteLifeTimeHint(Env::WriteLifeTimeHint hint) override { 15726: target_->SetWriteLifeTimeHint(hint); 15726: } 15726: 15726: Env::WriteLifeTimeHint GetWriteLifeTimeHint() override { 15726: return target_->GetWriteLifeTimeHint(); 15726: } 15726: 15726: uint64_t GetFileSize(const IOOptions& options, IODebugContext* dbg) override { 15726: return target_->GetFileSize(options, dbg); 15726: } 15726: 15726: void SetPreallocationBlockSize(size_t size) override { 15726: target_->SetPreallocationBlockSize(size); 15726: } 15726: 15726: void GetPreallocationStatus(size_t* block_size, 15726: size_t* last_allocated_block) override { 15726: target_->GetPreallocationStatus(block_size, last_allocated_block); 15726: } 15726: 15726: size_t GetUniqueId(char* id, size_t max_size) const override { 15726: return target_->GetUniqueId(id, max_size); 15726: } 15726: 15726: IOStatus InvalidateCache(size_t offset, size_t length) override { 15726: return target_->InvalidateCache(offset, length); 15726: } 15726: 15726: IOStatus RangeSync(uint64_t offset, uint64_t nbytes, const IOOptions& options, 15726: IODebugContext* dbg) override { 15726: return target_->RangeSync(offset, nbytes, options, dbg); 15726: } 15726: 15726: void PrepareWrite(size_t offset, size_t len, const IOOptions& options, 15726: IODebugContext* dbg) override { 15726: target_->PrepareWrite(offset, len, options, dbg); 15726: } 15726: 15726: IOStatus Allocate(uint64_t offset, uint64_t len, const IOOptions& options, 15726: IODebugContext* dbg) override { 15726: return target_->Allocate(offset, len, options, dbg); 15726: } 15726: 15726: private: 15726: FSWritableFile* target_; 15726: }; 15726: 15726: class FSWritableFileOwnerWrapper : public FSWritableFileWrapper { 15726: public: 15726: 15726: 15726: explicit FSWritableFileOwnerWrapper(std::unique_ptr&& t) 15726: : FSWritableFileWrapper(t.get()), guard_(std::move(t)) {} 15726: 15726: private: 15726: std::unique_ptr guard_; 15726: }; 15726: 15726: class FSRandomRWFileWrapper : public FSRandomRWFile { 15726: public: 15726: 15726: 15726: explicit FSRandomRWFileWrapper(FSRandomRWFile* t) : target_(t) {} 15726: 15726: FSRandomRWFile* target() const { return target_; } 15726: 15726: bool use_direct_io() const override { return target_->use_direct_io(); } 15726: size_t GetRequiredBufferAlignment() const override { 15726: return target_->GetRequiredBufferAlignment(); 15726: } 15726: IOStatus Write(uint64_t offset, const Slice& data, const IOOptions& options, 15726: IODebugContext* dbg) override { 15726: return target_->Write(offset, data, options, dbg); 15726: } 15726: IOStatus Read(uint64_t offset, size_t n, const IOOptions& options, 15726: Slice* result, char* scratch, 15726: IODebugContext* dbg) const override { 15726: return target_->Read(offset, n, options, result, scratch, dbg); 15726: } 15726: IOStatus Flush(const IOOptions& options, IODebugContext* dbg) override { 15726: return target_->Flush(options, dbg); 15726: } 15726: IOStatus Sync(const IOOptions& options, IODebugContext* dbg) override { 15726: return target_->Sync(options, dbg); 15726: } 15726: IOStatus Fsync(const IOOptions& options, IODebugContext* dbg) override { 15726: return target_->Fsync(options, dbg); 15726: } 15726: IOStatus Close(const IOOptions& options, IODebugContext* dbg) override { 15726: return target_->Close(options, dbg); 15726: } 15726: Temperature GetTemperature() const override { 15726: return target_->GetTemperature(); 15726: } 15726: 15726: private: 15726: FSRandomRWFile* target_; 15726: }; 15726: 15726: class FSRandomRWFileOwnerWrapper : public FSRandomRWFileWrapper { 15726: public: 15726: 15726: 15726: explicit FSRandomRWFileOwnerWrapper(std::unique_ptr&& t) 15726: : FSRandomRWFileWrapper(t.get()), guard_(std::move(t)) {} 15726: 15726: private: 15726: std::unique_ptr guard_; 15726: }; 15726: 15726: class FSDirectoryWrapper : public FSDirectory { 15726: public: 15726: 15726: 15726: explicit FSDirectoryWrapper(std::unique_ptr&& t) 15726: : guard_(std::move(t)) { 15726: target_ = guard_.get(); 15726: } 15726: 15726: 15726: 15726: explicit FSDirectoryWrapper(FSDirectory* t) : target_(t) {} 15726: 15726: IOStatus Fsync(const IOOptions& options, IODebugContext* dbg) override { 15726: return target_->Fsync(options, dbg); 15726: } 15726: 15726: IOStatus FsyncWithDirOptions( 15726: const IOOptions& options, IODebugContext* dbg, 15726: const DirFsyncOptions& dir_fsync_options) override { 15726: return target_->FsyncWithDirOptions(options, dbg, dir_fsync_options); 15726: } 15726: 15726: IOStatus Close(const IOOptions& options, IODebugContext* dbg) override { 15726: return target_->Close(options, dbg); 15726: } 15726: 15726: size_t GetUniqueId(char* id, size_t max_size) const override { 15726: return target_->GetUniqueId(id, max_size); 15726: } 15726: 15726: private: 15726: std::unique_ptr guard_; 15726: FSDirectory* target_; 15726: }; 15726: 15726: 15726: IOStatus WriteStringToFile(FileSystem* fs, const Slice& data, 15726: const std::string& fname, bool should_sync = false, 15726: const IOOptions& io_options = IOOptions()); 15726: 15726: 15726: IOStatus ReadFileToString(FileSystem* fs, const std::string& fname, 15726: std::string* data); 15726: 15726: } 15726: # 23 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 1 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/cassert" 1 3 15726: # 41 "/usr/include/c++/13/cassert" 3 15726: 15726: # 42 "/usr/include/c++/13/cassert" 3 15726: 15726: 15726: # 1 "/usr/include/assert.h" 1 3 4 15726: # 45 "/usr/include/c++/13/cassert" 2 3 15726: # 13 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 2 15726: 15726: 15726: 15726: namespace rocksdb { 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: inline size_t TruncateToPageBoundary(size_t page_size, size_t s) { 15726: s -= (s & (page_size - 1)); 15726: 15726: # 27 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: (static_cast ( 15726: # 27 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: (s % page_size) == 0 15726: # 27 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 27 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: "(s % page_size) == 0" 15726: # 27 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 27 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: ; 15726: return s; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: inline size_t Roundup(size_t x, size_t y) { return ((x + y - 1) / y) * y; } 15726: 15726: 15726: 15726: 15726: 15726: inline size_t Rounddown(size_t x, size_t y) { return (x / y) * y; } 15726: # 57 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: class AlignedBuffer { 15726: size_t alignment_; 15726: std::unique_ptr buf_; 15726: size_t capacity_; 15726: size_t cursize_; 15726: char* bufstart_; 15726: 15726: public: 15726: AlignedBuffer() 15726: : alignment_(), capacity_(0), cursize_(0), bufstart_(nullptr) {} 15726: 15726: AlignedBuffer(AlignedBuffer&& o) noexcept { *this = std::move(o); } 15726: 15726: AlignedBuffer& operator=(AlignedBuffer&& o) noexcept { 15726: alignment_ = std::move(o.alignment_); 15726: buf_ = std::move(o.buf_); 15726: capacity_ = std::move(o.capacity_); 15726: cursize_ = std::move(o.cursize_); 15726: bufstart_ = std::move(o.bufstart_); 15726: return *this; 15726: } 15726: 15726: AlignedBuffer(const AlignedBuffer&) = delete; 15726: 15726: AlignedBuffer& operator=(const AlignedBuffer&) = delete; 15726: 15726: static bool isAligned(const void* ptr, size_t alignment) { 15726: return reinterpret_cast(ptr) % alignment == 0; 15726: } 15726: 15726: static bool isAligned(size_t n, size_t alignment) { 15726: return n % alignment == 0; 15726: } 15726: 15726: size_t Alignment() const { return alignment_; } 15726: 15726: size_t Capacity() const { return capacity_; } 15726: 15726: size_t CurrentSize() const { return cursize_; } 15726: 15726: const char* BufferStart() const { return bufstart_; } 15726: 15726: char* BufferStart() { return bufstart_; } 15726: 15726: void Clear() { cursize_ = 0; } 15726: 15726: char* Release() { 15726: cursize_ = 0; 15726: capacity_ = 0; 15726: bufstart_ = nullptr; 15726: return buf_.release(); 15726: } 15726: 15726: void Alignment(size_t alignment) { 15726: 15726: # 111 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: (static_cast ( 15726: # 111 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: alignment > 0 15726: # 111 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 111 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: "alignment > 0" 15726: # 111 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 111 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: ; 15726: 15726: # 112 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: (static_cast ( 15726: # 112 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: (alignment & (alignment - 1)) == 0 15726: # 112 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 112 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: "(alignment & (alignment - 1)) == 0" 15726: # 112 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 112 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: ; 15726: alignment_ = alignment; 15726: } 15726: # 131 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: void AllocateNewBuffer(size_t requested_capacity, bool copy_data = false, 15726: uint64_t copy_offset = 0, size_t copy_len = 0) { 15726: 15726: # 133 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: (static_cast ( 15726: # 133 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: alignment_ > 0 15726: # 133 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 133 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: "alignment_ > 0" 15726: # 133 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 133 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: ; 15726: 15726: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: (static_cast ( 15726: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: (alignment_ & (alignment_ - 1)) == 0 15726: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: "(alignment_ & (alignment_ - 1)) == 0" 15726: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: ; 15726: 15726: copy_len = copy_len > 0 ? copy_len : cursize_; 15726: if (copy_data && requested_capacity < copy_len) { 15726: 15726: 15726: return; 15726: } 15726: 15726: size_t new_capacity = Roundup(requested_capacity, alignment_); 15726: char* new_buf = new char[new_capacity + alignment_]; 15726: char* new_bufstart = reinterpret_cast( 15726: (reinterpret_cast(new_buf) + (alignment_ - 1)) & 15726: ~static_cast(alignment_ - 1)); 15726: 15726: if (copy_data) { 15726: 15726: # 150 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: (static_cast ( 15726: # 150 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: bufstart_ + copy_offset + copy_len <= bufstart_ + cursize_ 15726: # 150 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 150 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: "bufstart_ + copy_offset + copy_len <= bufstart_ + cursize_" 15726: # 150 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 150 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: ; 15726: memcpy(new_bufstart, bufstart_ + copy_offset, copy_len); 15726: cursize_ = copy_len; 15726: } else { 15726: cursize_ = 0; 15726: } 15726: 15726: bufstart_ = new_bufstart; 15726: capacity_ = new_capacity; 15726: buf_.reset(new_buf); 15726: } 15726: # 170 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: size_t Append(const char* src, size_t append_size) { 15726: size_t buffer_remaining = capacity_ - cursize_; 15726: size_t to_copy = std::min(append_size, buffer_remaining); 15726: 15726: if (to_copy > 0) { 15726: memcpy(bufstart_ + cursize_, src, to_copy); 15726: cursize_ += to_copy; 15726: } 15726: return to_copy; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_t Read(char* dest, size_t offset, size_t read_size) const { 15726: 15726: # 188 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: (static_cast ( 15726: # 188 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: offset < cursize_ 15726: # 188 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 188 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: "offset < cursize_" 15726: # 188 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 188 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: ; 15726: 15726: size_t to_read = 0; 15726: if (offset < cursize_) { 15726: to_read = std::min(cursize_ - offset, read_size); 15726: } 15726: if (to_read > 0) { 15726: memcpy(dest, bufstart_ + offset, to_read); 15726: } 15726: return to_read; 15726: } 15726: 15726: 15726: void PadToAlignmentWith(int padding) { 15726: size_t total_size = Roundup(cursize_, alignment_); 15726: size_t pad_size = total_size - cursize_; 15726: 15726: if (pad_size > 0) { 15726: 15726: # 206 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: (static_cast ( 15726: # 206 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: (pad_size + cursize_) <= capacity_ 15726: # 206 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 206 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: "(pad_size + cursize_) <= capacity_" 15726: # 206 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 206 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: ; 15726: memset(bufstart_ + cursize_, padding, pad_size); 15726: cursize_ += pad_size; 15726: } 15726: } 15726: 15726: void PadWith(size_t pad_size, int padding) { 15726: 15726: # 213 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: (static_cast ( 15726: # 213 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: (pad_size + cursize_) <= capacity_ 15726: # 213 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 213 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: "(pad_size + cursize_) <= capacity_" 15726: # 213 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 213 "/build/reproducible-path/rocksdb-9.3.1/util/aligned_buffer.h" 15726: ; 15726: memset(bufstart_ + cursize_, padding, pad_size); 15726: cursize_ += pad_size; 15726: } 15726: 15726: 15726: void RefitTail(size_t tail_offset, size_t tail_size) { 15726: if (tail_size > 0) { 15726: memmove(bufstart_, bufstart_ + tail_offset, tail_size); 15726: } 15726: cursize_ = tail_size; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: char* Destination() { return bufstart_ + cursize_; } 15726: 15726: void Size(size_t cursize) { cursize_ = cursize; } 15726: }; 15726: } 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/cassert" 1 3 15726: # 41 "/usr/include/c++/13/cassert" 3 15726: 15726: # 42 "/usr/include/c++/13/cassert" 3 15726: 15726: 15726: # 1 "/usr/include/assert.h" 1 3 4 15726: # 45 "/usr/include/c++/13/cassert" 2 3 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 2 15726: 15726: # 1 "/usr/include/c++/13/iterator" 1 3 15726: # 58 "/usr/include/c++/13/iterator" 3 15726: 15726: # 59 "/usr/include/c++/13/iterator" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/stream_iterator.h" 1 3 15726: # 33 "/usr/include/c++/13/bits/stream_iterator.h" 3 15726: 15726: # 34 "/usr/include/c++/13/bits/stream_iterator.h" 3 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 40 "/usr/include/c++/13/bits/stream_iterator.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 50 "/usr/include/c++/13/bits/stream_iterator.h" 3 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 15726: 15726: 15726: template, typename _Dist = ptrdiff_t> 15726: class istream_iterator 15726: : public iterator 15726: { 15726: public: 15726: typedef _CharT char_type; 15726: typedef _Traits traits_type; 15726: typedef basic_istream<_CharT, _Traits> istream_type; 15726: 15726: private: 15726: istream_type* _M_stream; 15726: _Tp _M_value; 15726: 15726: 15726: 15726: bool _M_ok; 15726: 15726: public: 15726: 15726: constexpr istream_iterator() 15726: noexcept(is_nothrow_default_constructible<_Tp>::value) 15726: : _M_stream(0), _M_value(), _M_ok(false) {} 15726: 15726: 15726: istream_iterator(istream_type& __s) 15726: : _M_stream(std::__addressof(__s)), _M_ok(true) 15726: { _M_read(); } 15726: 15726: constexpr 15726: istream_iterator(const istream_iterator& __obj) 15726: noexcept(is_nothrow_copy_constructible<_Tp>::value) 15726: : _M_stream(__obj._M_stream), _M_value(__obj._M_value), 15726: _M_ok(__obj._M_ok) 15726: { } 15726: # 98 "/usr/include/c++/13/bits/stream_iterator.h" 3 15726: istream_iterator& operator=(const istream_iterator&) = default; 15726: ~istream_iterator() = default; 15726: 15726: 15726: [[__nodiscard__]] 15726: const _Tp& 15726: operator*() const noexcept 15726: { 15726: 15726: 15726: ; 15726: return _M_value; 15726: } 15726: 15726: [[__nodiscard__]] 15726: const _Tp* 15726: operator->() const noexcept 15726: { return std::__addressof((operator*())); } 15726: 15726: istream_iterator& 15726: operator++() 15726: { 15726: 15726: 15726: ; 15726: _M_read(); 15726: return *this; 15726: } 15726: 15726: istream_iterator 15726: operator++(int) 15726: { 15726: 15726: 15726: ; 15726: istream_iterator __tmp = *this; 15726: _M_read(); 15726: return __tmp; 15726: } 15726: 15726: private: 15726: bool 15726: _M_equal(const istream_iterator& __x) const noexcept 15726: { 15726: 15726: 15726: return (_M_ok == __x._M_ok) && (!_M_ok || _M_stream == __x._M_stream); 15726: } 15726: 15726: void 15726: _M_read() 15726: { 15726: if (_M_stream && !(*_M_stream >> _M_value)) 15726: { 15726: _M_stream = 0; 15726: _M_ok = false; 15726: } 15726: } 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: friend bool 15726: operator==(const istream_iterator& __x, const istream_iterator& __y) 15726: noexcept 15726: { return __x._M_equal(__y); } 15726: 15726: 15726: 15726: 15726: [[__nodiscard__]] 15726: friend bool 15726: operator!=(const istream_iterator& __x, const istream_iterator& __y) 15726: noexcept 15726: { return !__x._M_equal(__y); } 15726: # 181 "/usr/include/c++/13/bits/stream_iterator.h" 3 15726: }; 15726: # 194 "/usr/include/c++/13/bits/stream_iterator.h" 3 15726: template > 15726: class ostream_iterator 15726: : public iterator 15726: { 15726: public: 15726: 15726: 15726: 15726: 15726: 15726: typedef _CharT char_type; 15726: typedef _Traits traits_type; 15726: typedef basic_ostream<_CharT, _Traits> ostream_type; 15726: 15726: 15726: private: 15726: ostream_type* _M_stream; 15726: const _CharT* _M_string; 15726: 15726: public: 15726: 15726: ostream_iterator(ostream_type& __s) noexcept 15726: : _M_stream(std::__addressof(__s)), _M_string(0) {} 15726: # 229 "/usr/include/c++/13/bits/stream_iterator.h" 3 15726: ostream_iterator(ostream_type& __s, const _CharT* __c) noexcept 15726: : _M_stream(std::__addressof(__s)), _M_string(__c) { } 15726: 15726: 15726: ostream_iterator(const ostream_iterator& __obj) noexcept 15726: : _M_stream(__obj._M_stream), _M_string(__obj._M_string) { } 15726: 15726: 15726: ostream_iterator& operator=(const ostream_iterator&) = default; 15726: 15726: 15726: 15726: 15726: ostream_iterator& 15726: operator=(const _Tp& __value) 15726: { 15726: 15726: 15726: ; 15726: *_M_stream << __value; 15726: if (_M_string) 15726: *_M_stream << _M_string; 15726: return *this; 15726: } 15726: 15726: [[__nodiscard__]] 15726: ostream_iterator& 15726: operator*() noexcept 15726: { return *this; } 15726: 15726: ostream_iterator& 15726: operator++() noexcept 15726: { return *this; } 15726: 15726: ostream_iterator& 15726: operator++(int) noexcept 15726: { return *this; } 15726: }; 15726: #pragma GCC diagnostic pop 15726: 15726: 15726: 15726: 15726: } 15726: # 66 "/usr/include/c++/13/iterator" 2 3 15726: # 11 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 2 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: namespace rocksdb { 15726: # 39 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: template 15726: class autovector { 15726: public: 15726: 15726: using value_type = T; 15726: using difference_type = typename std::vector::difference_type; 15726: using size_type = typename std::vector::size_type; 15726: using reference = value_type&; 15726: using const_reference = const value_type&; 15726: using pointer = value_type*; 15726: using const_pointer = const value_type*; 15726: 15726: 15726: template 15726: class iterator_impl { 15726: public: 15726: 15726: using self_type = iterator_impl; 15726: using value_type = TValueType; 15726: using reference = TValueType&; 15726: using pointer = TValueType*; 15726: using difference_type = typename TAutoVector::difference_type; 15726: using iterator_category = std::random_access_iterator_tag; 15726: 15726: iterator_impl(TAutoVector* vect, size_t index) 15726: : vect_(vect), index_(index){} 15726: iterator_impl(const iterator_impl&) = default; 15726: ~iterator_impl() {} 15726: iterator_impl& operator=(const iterator_impl&) = default; 15726: 15726: 15726: 15726: self_type& operator++() { 15726: ++index_; 15726: return *this; 15726: } 15726: 15726: 15726: self_type operator++(int) { 15726: auto old = *this; 15726: ++index_; 15726: return old; 15726: } 15726: 15726: 15726: self_type& operator--() { 15726: --index_; 15726: return *this; 15726: } 15726: 15726: 15726: self_type operator--(int) { 15726: auto old = *this; 15726: --index_; 15726: return old; 15726: } 15726: 15726: self_type operator-(difference_type len) const { 15726: return self_type(vect_, index_ - len); 15726: } 15726: 15726: difference_type operator-(const self_type& other) const { 15726: 15726: # 101 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: (static_cast ( 15726: # 101 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: vect_ == other.vect_ 15726: # 101 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 101 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: "vect_ == other.vect_" 15726: # 101 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 101 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: ; 15726: return index_ - other.index_; 15726: } 15726: 15726: self_type operator+(difference_type len) const { 15726: return self_type(vect_, index_ + len); 15726: } 15726: 15726: self_type& operator+=(difference_type len) { 15726: index_ += len; 15726: return *this; 15726: } 15726: 15726: self_type& operator-=(difference_type len) { 15726: index_ -= len; 15726: return *this; 15726: } 15726: 15726: 15726: reference operator*() const { 15726: 15726: # 121 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: (static_cast ( 15726: # 121 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: vect_->size() >= index_ 15726: # 121 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 121 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: "vect_->size() >= index_" 15726: # 121 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 121 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: ; 15726: return (*vect_)[index_]; 15726: } 15726: 15726: pointer operator->() const { 15726: 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: (static_cast ( 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: vect_->size() >= index_ 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: "vect_->size() >= index_" 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: ; 15726: return &(*vect_)[index_]; 15726: } 15726: 15726: reference operator[](difference_type len) const { return *(*this + len); } 15726: 15726: 15726: bool operator==(const self_type& other) const { 15726: 15726: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: (static_cast ( 15726: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: vect_ == other.vect_ 15726: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: "vect_ == other.vect_" 15726: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 134 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: ; 15726: return index_ == other.index_; 15726: } 15726: 15726: bool operator!=(const self_type& other) const { return !(*this == other); } 15726: 15726: bool operator>(const self_type& other) const { 15726: 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: (static_cast ( 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: vect_ == other.vect_ 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: "vect_ == other.vect_" 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: ; 15726: return index_ > other.index_; 15726: } 15726: 15726: bool operator<(const self_type& other) const { 15726: 15726: # 146 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: (static_cast ( 15726: # 146 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: vect_ == other.vect_ 15726: # 146 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 146 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: "vect_ == other.vect_" 15726: # 146 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 146 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: ; 15726: return index_ < other.index_; 15726: } 15726: 15726: bool operator>=(const self_type& other) const { 15726: 15726: # 151 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: (static_cast ( 15726: # 151 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: vect_ == other.vect_ 15726: # 151 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 151 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: "vect_ == other.vect_" 15726: # 151 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 151 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: ; 15726: return index_ >= other.index_; 15726: } 15726: 15726: bool operator<=(const self_type& other) const { 15726: 15726: # 156 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: (static_cast ( 15726: # 156 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: vect_ == other.vect_ 15726: # 156 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 156 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: "vect_ == other.vect_" 15726: # 156 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 156 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: ; 15726: return index_ <= other.index_; 15726: } 15726: 15726: private: 15726: TAutoVector* vect_ = nullptr; 15726: size_t index_ = 0; 15726: }; 15726: 15726: using iterator = iterator_impl; 15726: using const_iterator = iterator_impl; 15726: using reverse_iterator = std::reverse_iterator; 15726: using const_reverse_iterator = std::reverse_iterator; 15726: 15726: autovector() : values_(reinterpret_cast(buf_)) {} 15726: 15726: autovector(std::initializer_list init_list) 15726: : values_(reinterpret_cast(buf_)) { 15726: for (const T& item : init_list) { 15726: push_back(item); 15726: } 15726: } 15726: 15726: ~autovector() { clear(); } 15726: 15726: 15726: 15726: bool only_in_stack() const { 15726: 15726: return vect_.capacity() == 0; 15726: } 15726: 15726: size_type size() const { return num_stack_items_ + vect_.size(); } 15726: 15726: 15726: 15726: void resize(size_type n) { 15726: if (n > kSize) { 15726: vect_.resize(n - kSize); 15726: while (num_stack_items_ < kSize) { 15726: new ((void*)(&values_[num_stack_items_++])) value_type(); 15726: } 15726: num_stack_items_ = kSize; 15726: } else { 15726: vect_.clear(); 15726: while (num_stack_items_ < n) { 15726: new ((void*)(&values_[num_stack_items_++])) value_type(); 15726: } 15726: while (num_stack_items_ > n) { 15726: values_[--num_stack_items_].~value_type(); 15726: } 15726: } 15726: } 15726: 15726: bool empty() const { return size() == 0; } 15726: 15726: size_type capacity() const { return kSize + vect_.capacity(); } 15726: 15726: void reserve(size_t cap) { 15726: if (cap > kSize) { 15726: vect_.reserve(cap - kSize); 15726: } 15726: 15726: 15726: # 219 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: (static_cast ( 15726: # 219 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: cap <= capacity() 15726: # 219 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 219 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: "cap <= capacity()" 15726: # 219 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 219 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: ; 15726: } 15726: 15726: const_reference operator[](size_type n) const { 15726: 15726: # 223 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: (static_cast ( 15726: # 223 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: n < size() 15726: # 223 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 223 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: "n < size()" 15726: # 223 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 223 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: ; 15726: if (n < kSize) { 15726: return values_[n]; 15726: } 15726: return vect_[n - kSize]; 15726: } 15726: 15726: reference operator[](size_type n) { 15726: 15726: # 231 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: (static_cast ( 15726: # 231 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: n < size() 15726: # 231 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 231 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: "n < size()" 15726: # 231 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 231 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: ; 15726: if (n < kSize) { 15726: return values_[n]; 15726: } 15726: return vect_[n - kSize]; 15726: } 15726: 15726: const_reference at(size_type n) const { 15726: 15726: # 239 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: (static_cast ( 15726: # 239 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: n < size() 15726: # 239 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 239 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: "n < size()" 15726: # 239 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 239 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: ; 15726: return (*this)[n]; 15726: } 15726: 15726: reference at(size_type n) { 15726: 15726: # 244 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: (static_cast ( 15726: # 244 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: n < size() 15726: # 244 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 244 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: "n < size()" 15726: # 244 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 244 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: ; 15726: return (*this)[n]; 15726: } 15726: 15726: reference front() { 15726: 15726: # 249 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: (static_cast ( 15726: # 249 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: !empty() 15726: # 249 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 249 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: "!empty()" 15726: # 249 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 249 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: ; 15726: return *begin(); 15726: } 15726: 15726: const_reference front() const { 15726: 15726: # 254 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: (static_cast ( 15726: # 254 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: !empty() 15726: # 254 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 254 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: "!empty()" 15726: # 254 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 254 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: ; 15726: return *begin(); 15726: } 15726: 15726: reference back() { 15726: 15726: # 259 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: (static_cast ( 15726: # 259 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: !empty() 15726: # 259 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 259 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: "!empty()" 15726: # 259 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 259 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: ; 15726: return *(end() - 1); 15726: } 15726: 15726: const_reference back() const { 15726: 15726: # 264 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: (static_cast ( 15726: # 264 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: !empty() 15726: # 264 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 264 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: "!empty()" 15726: # 264 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 264 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: ; 15726: return *(end() - 1); 15726: } 15726: 15726: 15726: void push_back(T&& item) { 15726: if (num_stack_items_ < kSize) { 15726: new ((void*)(&values_[num_stack_items_])) value_type(); 15726: values_[num_stack_items_++] = std::move(item); 15726: } else { 15726: vect_.push_back(item); 15726: } 15726: } 15726: 15726: void push_back(const T& item) { 15726: if (num_stack_items_ < kSize) { 15726: new ((void*)(&values_[num_stack_items_])) value_type(); 15726: values_[num_stack_items_++] = item; 15726: } else { 15726: vect_.push_back(item); 15726: } 15726: } 15726: 15726: template 15726: # 298 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: void emplace_back(Args&&... args) { 15726: if (num_stack_items_ < kSize) { 15726: new ((void*)(&values_[num_stack_items_++])) 15726: value_type(std::forward(args)...); 15726: } else { 15726: vect_.emplace_back(std::forward(args)...); 15726: } 15726: } 15726: 15726: 15726: void pop_back() { 15726: 15726: # 309 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: (static_cast ( 15726: # 309 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: !empty() 15726: # 309 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 309 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: "!empty()" 15726: # 309 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 309 "/build/reproducible-path/rocksdb-9.3.1/util/autovector.h" 15726: ; 15726: if (!vect_.empty()) { 15726: vect_.pop_back(); 15726: } else { 15726: values_[--num_stack_items_].~value_type(); 15726: } 15726: } 15726: 15726: void clear() { 15726: while (num_stack_items_ > 0) { 15726: values_[--num_stack_items_].~value_type(); 15726: } 15726: vect_.clear(); 15726: } 15726: 15726: 15726: autovector& assign(const autovector& other); 15726: 15726: autovector(const autovector& other) { assign(other); } 15726: 15726: autovector& operator=(const autovector& other) { return assign(other); } 15726: 15726: autovector(autovector&& other) noexcept { *this = std::move(other); } 15726: autovector& operator=(autovector&& other); 15726: 15726: 15726: iterator begin() { return iterator(this, 0); } 15726: 15726: const_iterator begin() const { return const_iterator(this, 0); } 15726: 15726: iterator end() { return iterator(this, this->size()); } 15726: 15726: const_iterator end() const { return const_iterator(this, this->size()); } 15726: 15726: reverse_iterator rbegin() { return reverse_iterator(end()); } 15726: 15726: const_reverse_iterator rbegin() const { 15726: return const_reverse_iterator(end()); 15726: } 15726: 15726: reverse_iterator rend() { return reverse_iterator(begin()); } 15726: 15726: const_reverse_iterator rend() const { 15726: return const_reverse_iterator(begin()); 15726: } 15726: 15726: private: 15726: size_type num_stack_items_ = 0; 15726: alignas(alignof( 15726: value_type)) char buf_[kSize * 15726: sizeof(value_type)]; 15726: pointer values_; 15726: 15726: std::vector vect_; 15726: }; 15726: 15726: template 15726: autovector& autovector::assign( 15726: const autovector& other) { 15726: values_ = reinterpret_cast(buf_); 15726: 15726: vect_.assign(other.vect_.begin(), other.vect_.end()); 15726: 15726: 15726: num_stack_items_ = other.num_stack_items_; 15726: for (size_t i = 0; i < num_stack_items_; ++i) { 15726: new ((void*)(&values_[i])) value_type(); 15726: } 15726: std::copy(other.values_, other.values_ + num_stack_items_, values_); 15726: 15726: return *this; 15726: } 15726: 15726: template 15726: autovector& autovector::operator=( 15726: autovector&& other) { 15726: values_ = reinterpret_cast(buf_); 15726: vect_ = std::move(other.vect_); 15726: size_t n = other.num_stack_items_; 15726: num_stack_items_ = n; 15726: other.num_stack_items_ = 0; 15726: for (size_t i = 0; i < n; ++i) { 15726: new ((void*)(&values_[i])) value_type(); 15726: values_[i] = std::move(other.values_[i]); 15726: } 15726: return *this; 15726: } 15726: 15726: } 15726: # 26 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 2 15726: 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: struct IOOptions; 15726: class RandomAccessFileReader; 15726: 15726: struct ReadaheadParams { 15726: ReadaheadParams() {} 15726: 15726: 15726: size_t initial_readahead_size = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_t max_readahead_size = 0; 15726: 15726: 15726: 15726: bool implicit_auto_readahead = false; 15726: 15726: 15726: uint64_t num_file_reads = 0; 15726: uint64_t num_file_reads_for_auto_readahead = 0; 15726: 15726: 15726: 15726: size_t num_buffers = 1; 15726: }; 15726: 15726: struct BufferInfo { 15726: void ClearBuffer() { 15726: buffer_.Clear(); 15726: initial_end_offset_ = 0; 15726: async_req_len_ = 0; 15726: } 15726: 15726: AlignedBuffer buffer_; 15726: 15726: uint64_t offset_ = 0; 15726: 15726: 15726: 15726: size_t async_req_len_ = 0; 15726: 15726: 15726: 15726: bool async_read_in_progress_ = false; 15726: 15726: 15726: 15726: void* io_handle_ = nullptr; 15726: 15726: IOHandleDeleter del_fn_ = nullptr; 15726: # 96 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: uint64_t initial_end_offset_ = 0; 15726: 15726: bool IsDataBlockInBuffer(uint64_t offset, size_t length) { 15726: 15726: # 99 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 15726: (static_cast ( 15726: # 99 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: async_read_in_progress_ == false 15726: # 99 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 99 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: "async_read_in_progress_ == false" 15726: # 99 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 99 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: ; 15726: return (offset >= offset_ && 15726: offset + length <= offset_ + buffer_.CurrentSize()); 15726: } 15726: 15726: bool IsOffsetInBuffer(uint64_t offset) { 15726: 15726: # 105 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 15726: (static_cast ( 15726: # 105 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: async_read_in_progress_ == false 15726: # 105 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 105 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: "async_read_in_progress_ == false" 15726: # 105 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 105 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: ; 15726: return (offset >= offset_ && offset < offset_ + buffer_.CurrentSize()); 15726: } 15726: 15726: bool DoesBufferContainData() { 15726: 15726: # 110 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 15726: (static_cast ( 15726: # 110 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: async_read_in_progress_ == false 15726: # 110 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 110 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: "async_read_in_progress_ == false" 15726: # 110 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 110 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: ; 15726: return buffer_.CurrentSize() > 0; 15726: } 15726: 15726: bool IsBufferOutdated(uint64_t offset) { 15726: return (!async_read_in_progress_ && DoesBufferContainData() && 15726: offset >= offset_ + buffer_.CurrentSize()); 15726: } 15726: 15726: bool IsBufferOutdatedWithAsyncProgress(uint64_t offset) { 15726: return (async_read_in_progress_ && io_handle_ != nullptr && 15726: offset >= offset_ + async_req_len_); 15726: } 15726: 15726: bool IsOffsetInBufferWithAsyncProgress(uint64_t offset) { 15726: return (async_read_in_progress_ && offset >= offset_ && 15726: offset < offset_ + async_req_len_); 15726: } 15726: 15726: size_t CurrentSize() { return buffer_.CurrentSize(); } 15726: }; 15726: 15726: enum class FilePrefetchBufferUsage { 15726: kTableOpenPrefetchTail, 15726: kUserScanPrefetch, 15726: kUnknown, 15726: }; 15726: # 161 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: class FilePrefetchBuffer { 15726: public: 15726: # 181 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: FilePrefetchBuffer( 15726: const ReadaheadParams& readahead_params = {}, bool enable = true, 15726: bool track_min_offset = false, FileSystem* fs = nullptr, 15726: SystemClock* clock = nullptr, Statistics* stats = nullptr, 15726: const std::function& cb = nullptr, 15726: FilePrefetchBufferUsage usage = FilePrefetchBufferUsage::kUnknown) 15726: : readahead_size_(readahead_params.initial_readahead_size), 15726: initial_auto_readahead_size_(readahead_params.initial_readahead_size), 15726: max_readahead_size_(readahead_params.max_readahead_size), 15726: min_offset_read_(std::numeric_limits::max()), 15726: enable_(enable), 15726: track_min_offset_(track_min_offset), 15726: implicit_auto_readahead_(readahead_params.implicit_auto_readahead), 15726: prev_offset_(0), 15726: prev_len_(0), 15726: num_file_reads_for_auto_readahead_( 15726: readahead_params.num_file_reads_for_auto_readahead), 15726: num_file_reads_(readahead_params.num_file_reads), 15726: explicit_prefetch_submitted_(false), 15726: fs_(fs), 15726: clock_(clock), 15726: stats_(stats), 15726: usage_(usage), 15726: readaheadsize_cb_(cb), 15726: num_buffers_(readahead_params.num_buffers) { 15726: 15726: # 206 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 15726: (static_cast ( 15726: # 206 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: (num_file_reads_ >= num_file_reads_for_auto_readahead_ + 1) || (num_file_reads_ == 0) 15726: # 206 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 206 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: "(num_file_reads_ >= num_file_reads_for_auto_readahead_ + 1) || (num_file_reads_ == 0)" 15726: # 206 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: 15726: # 207 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: ; 15726: 15726: 15726: 15726: 15726: if (num_buffers_ > 1) { 15726: overlap_buf_ = new BufferInfo(); 15726: } 15726: 15726: free_bufs_.resize(num_buffers_); 15726: for (uint32_t i = 0; i < num_buffers_; i++) { 15726: free_bufs_[i] = new BufferInfo(); 15726: } 15726: } 15726: 15726: ~FilePrefetchBuffer() { 15726: 15726: if (fs_ != nullptr) { 15726: std::vector handles; 15726: for (auto& buf : bufs_) { 15726: if (buf->async_read_in_progress_ && buf->io_handle_ != nullptr) { 15726: handles.emplace_back(buf->io_handle_); 15726: } 15726: } 15726: if (!handles.empty()) { 15726: StopWatch sw(clock_, stats_, ASYNC_PREFETCH_ABORT_MICROS); 15726: Status s = fs_->AbortIO(handles); 15726: 15726: # 234 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 15726: (static_cast ( 15726: # 234 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: s.ok() 15726: # 234 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 234 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: "s.ok()" 15726: # 234 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 234 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: ; 15726: } 15726: 15726: for (auto& buf : bufs_) { 15726: if (buf->io_handle_ != nullptr) { 15726: DestroyAndClearIOHandle(buf); 15726: buf->ClearBuffer(); 15726: } 15726: buf->async_read_in_progress_ = false; 15726: } 15726: } 15726: 15726: 15726: uint64_t bytes_discarded = 0; 15726: 15726: for (auto& buf : bufs_) { 15726: if (buf->DoesBufferContainData()) { 15726: 15726: if (prev_offset_ >= buf->offset_ && 15726: prev_offset_ + prev_len_ < buf->offset_ + buf->CurrentSize()) { 15726: bytes_discarded += 15726: buf->CurrentSize() - (prev_offset_ + prev_len_ - buf->offset_); 15726: } 15726: 15726: else if (prev_offset_ < buf->offset_ && 15726: prev_offset_ + prev_len_ <= buf->offset_) { 15726: bytes_discarded += buf->CurrentSize(); 15726: } 15726: } 15726: } 15726: 15726: RecordInHistogram(stats_, PREFETCHED_BYTES_DISCARDED, bytes_discarded); 15726: 15726: for (auto& buf : bufs_) { 15726: delete buf; 15726: buf = nullptr; 15726: } 15726: 15726: for (auto& buf : free_bufs_) { 15726: delete buf; 15726: buf = nullptr; 15726: } 15726: 15726: if (overlap_buf_ != nullptr) { 15726: delete overlap_buf_; 15726: overlap_buf_ = nullptr; 15726: } 15726: } 15726: 15726: bool Enabled() const { return enable_; } 15726: # 293 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: Status Prefetch(const IOOptions& opts, RandomAccessFileReader* reader, 15726: uint64_t offset, size_t n); 15726: # 306 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: Status PrefetchAsync(const IOOptions& opts, RandomAccessFileReader* reader, 15726: uint64_t offset, size_t n, Slice* result); 15726: # 322 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: bool TryReadFromCache(const IOOptions& opts, RandomAccessFileReader* reader, 15726: uint64_t offset, size_t n, Slice* result, Status* s, 15726: bool for_compaction = false); 15726: 15726: 15726: 15726: size_t min_offset_read() const { return min_offset_read_; } 15726: 15726: size_t GetPrefetchOffset() const { return bufs_.front()->offset_; } 15726: 15726: 15726: void UpdateReadPattern(const uint64_t& offset, const size_t& len, 15726: bool decrease_readaheadsize) { 15726: if (decrease_readaheadsize) { 15726: DecreaseReadAheadIfEligible(offset, len); 15726: } 15726: prev_offset_ = offset; 15726: prev_len_ = len; 15726: explicit_prefetch_submitted_ = false; 15726: } 15726: 15726: void GetReadaheadState(ReadaheadFileInfo::ReadaheadInfo* readahead_info) { 15726: readahead_info->readahead_size = readahead_size_; 15726: readahead_info->num_file_reads = num_file_reads_; 15726: } 15726: 15726: void DecreaseReadAheadIfEligible(uint64_t offset, size_t size, 15726: size_t value = 8 * 1024) { 15726: if (bufs_.empty()) { 15726: return; 15726: } 15726: # 364 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: size_t curr_size = bufs_.front()->async_read_in_progress_ 15726: ? bufs_.front()->async_req_len_ 15726: : bufs_.front()->CurrentSize(); 15726: if (implicit_auto_readahead_ && readahead_size_ > 0) { 15726: if ((offset + size > bufs_.front()->offset_ + curr_size) && 15726: IsBlockSequential(offset) && 15726: (num_file_reads_ + 1 > num_file_reads_for_auto_readahead_)) { 15726: readahead_size_ = 15726: std::max(initial_auto_readahead_size_, 15726: (readahead_size_ >= value ? readahead_size_ - value : 0)); 15726: } 15726: } 15726: } 15726: 15726: 15726: void PrefetchAsyncCallback(FSReadRequest& req, void* cb_arg); 15726: 15726: void TEST_GetBufferOffsetandSize( 15726: std::vector>& buffer_info) { 15726: for (size_t i = 0; i < bufs_.size(); i++) { 15726: buffer_info[i].first = bufs_[i]->offset_; 15726: buffer_info[i].second = bufs_[i]->async_read_in_progress_ 15726: ? bufs_[i]->async_req_len_ 15726: : bufs_[i]->CurrentSize(); 15726: } 15726: } 15726: 15726: private: 15726: 15726: 15726: 15726: void PrepareBufferForRead(BufferInfo* buf, size_t alignment, uint64_t offset, 15726: size_t roundup_len, bool refit_tail, 15726: uint64_t& aligned_useful_len); 15726: 15726: void AbortOutdatedIO(uint64_t offset); 15726: 15726: void AbortAllIOs(); 15726: 15726: void ClearOutdatedData(uint64_t offset, size_t len); 15726: 15726: 15726: void PollIfNeeded(uint64_t offset, size_t len); 15726: 15726: Status PrefetchInternal(const IOOptions& opts, RandomAccessFileReader* reader, 15726: uint64_t offset, size_t length, size_t readahead_size, 15726: bool& copy_to_third_buffer); 15726: 15726: Status Read(BufferInfo* buf, const IOOptions& opts, 15726: RandomAccessFileReader* reader, uint64_t read_len, 15726: uint64_t aligned_useful_len, uint64_t start_offset); 15726: 15726: Status ReadAsync(BufferInfo* buf, const IOOptions& opts, 15726: RandomAccessFileReader* reader, uint64_t read_len, 15726: uint64_t start_offset); 15726: 15726: 15726: void CopyDataToBuffer(BufferInfo* src, uint64_t& offset, size_t& length); 15726: 15726: bool IsBlockSequential(const size_t& offset) { 15726: return (prev_len_ == 0 || (prev_offset_ + prev_len_ == offset)); 15726: } 15726: 15726: 15726: void ResetValues() { 15726: num_file_reads_ = 1; 15726: readahead_size_ = initial_auto_readahead_size_; 15726: } 15726: 15726: 15726: bool IsEligibleForPrefetch(uint64_t offset, size_t n) { 15726: 15726: 15726: if (!IsBlockSequential(offset)) { 15726: UpdateReadPattern(offset, n, false ); 15726: ResetValues(); 15726: return false; 15726: } 15726: num_file_reads_++; 15726: 15726: 15726: 15726: 15726: if (explicit_prefetch_submitted_) { 15726: return true; 15726: } 15726: if (num_file_reads_ <= num_file_reads_for_auto_readahead_) { 15726: UpdateReadPattern(offset, n, false ); 15726: return false; 15726: } 15726: return true; 15726: } 15726: 15726: bool IsEligibleForFurtherPrefetching() { 15726: if (free_bufs_.empty()) { 15726: return false; 15726: } 15726: 15726: if (readahead_size_ == 0) { 15726: return false; 15726: } 15726: return true; 15726: } 15726: 15726: void DestroyAndClearIOHandle(BufferInfo* buf) { 15726: if (buf->io_handle_ != nullptr && buf->del_fn_ != nullptr) { 15726: buf->del_fn_(buf->io_handle_); 15726: buf->io_handle_ = nullptr; 15726: buf->del_fn_ = nullptr; 15726: } 15726: buf->async_read_in_progress_ = false; 15726: } 15726: 15726: Status HandleOverlappingData(const IOOptions& opts, 15726: RandomAccessFileReader* reader, uint64_t offset, 15726: size_t length, size_t readahead_size, 15726: bool& copy_to_third_buffer, uint64_t& tmp_offset, 15726: size_t& tmp_length); 15726: 15726: bool TryReadFromCacheUntracked(const IOOptions& opts, 15726: RandomAccessFileReader* reader, 15726: uint64_t offset, size_t n, Slice* result, 15726: Status* s, 15726: bool for_compaction = false); 15726: 15726: void ReadAheadSizeTuning(BufferInfo* buf, bool read_curr_block, 15726: bool refit_tail, uint64_t prev_buf_end_offset, 15726: size_t alignment, size_t length, 15726: size_t readahead_size, uint64_t& offset, 15726: uint64_t& end_offset, size_t& read_len, 15726: uint64_t& aligned_useful_len); 15726: 15726: void UpdateStats(bool found_in_buffer, size_t length_found) { 15726: if (found_in_buffer) { 15726: RecordTick(stats_, PREFETCH_HITS); 15726: } 15726: if (length_found > 0) { 15726: RecordTick(stats_, PREFETCH_BYTES_USEFUL, length_found); 15726: } 15726: } 15726: 15726: void UpdateReadAheadTrimmedStat(size_t initial_length, 15726: size_t updated_length) { 15726: if (initial_length != updated_length) { 15726: RecordTick(stats_, READAHEAD_TRIMMED); 15726: } 15726: } 15726: 15726: Status PrefetchRemBuffers(const IOOptions& opts, 15726: RandomAccessFileReader* reader, 15726: uint64_t end_offset1, size_t alignment, 15726: size_t readahead_size); 15726: 15726: 15726: bool IsBufferQueueEmpty() { return bufs_.empty(); } 15726: 15726: BufferInfo* GetFirstBuffer() { return bufs_.front(); } 15726: 15726: BufferInfo* GetLastBuffer() { return bufs_.back(); } 15726: 15726: size_t NumBuffersAllocated() { return bufs_.size(); } 15726: 15726: void AllocateBuffer() { 15726: 15726: # 527 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 15726: (static_cast ( 15726: # 527 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: !free_bufs_.empty() 15726: # 527 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 527 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: "!free_bufs_.empty()" 15726: # 527 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 527 "/build/reproducible-path/rocksdb-9.3.1/file/file_prefetch_buffer.h" 15726: ; 15726: BufferInfo* buf = free_bufs_.front(); 15726: free_bufs_.pop_front(); 15726: bufs_.emplace_back(buf); 15726: } 15726: 15726: void AllocateBufferIfEmpty() { 15726: if (bufs_.empty()) { 15726: AllocateBuffer(); 15726: } 15726: } 15726: 15726: void FreeFrontBuffer() { 15726: BufferInfo* buf = bufs_.front(); 15726: buf->ClearBuffer(); 15726: bufs_.pop_front(); 15726: free_bufs_.emplace_back(buf); 15726: } 15726: 15726: void FreeLastBuffer() { 15726: BufferInfo* buf = bufs_.back(); 15726: buf->ClearBuffer(); 15726: bufs_.pop_back(); 15726: free_bufs_.emplace_back(buf); 15726: } 15726: 15726: void FreeAllBuffers() { 15726: while (!bufs_.empty()) { 15726: BufferInfo* buf = bufs_.front(); 15726: buf->ClearBuffer(); 15726: bufs_.pop_front(); 15726: free_bufs_.emplace_back(buf); 15726: } 15726: } 15726: 15726: void FreeEmptyBuffers() { 15726: if (bufs_.empty()) { 15726: return; 15726: } 15726: 15726: std::deque tmp_buf; 15726: while (!bufs_.empty()) { 15726: BufferInfo* buf = bufs_.front(); 15726: bufs_.pop_front(); 15726: if (buf->async_read_in_progress_ || buf->DoesBufferContainData()) { 15726: tmp_buf.emplace_back(buf); 15726: } else { 15726: free_bufs_.emplace_back(buf); 15726: } 15726: } 15726: bufs_ = tmp_buf; 15726: } 15726: 15726: 15726: 15726: std::deque bufs_; 15726: std::deque free_bufs_; 15726: BufferInfo* overlap_buf_ = nullptr; 15726: 15726: size_t readahead_size_; 15726: size_t initial_auto_readahead_size_; 15726: 15726: 15726: size_t max_readahead_size_; 15726: 15726: 15726: size_t min_offset_read_; 15726: 15726: 15726: bool enable_; 15726: 15726: 15726: bool track_min_offset_; 15726: 15726: 15726: 15726: bool implicit_auto_readahead_; 15726: uint64_t prev_offset_; 15726: size_t prev_len_; 15726: 15726: 15726: uint64_t num_file_reads_for_auto_readahead_; 15726: uint64_t num_file_reads_; 15726: 15726: 15726: 15726: 15726: 15726: bool explicit_prefetch_submitted_; 15726: 15726: FileSystem* fs_; 15726: SystemClock* clock_; 15726: Statistics* stats_; 15726: 15726: FilePrefetchBufferUsage usage_; 15726: 15726: std::function readaheadsize_cb_; 15726: 15726: 15726: 15726: size_t num_buffers_; 15726: }; 15726: } 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/file/random_access_file_reader.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/file/random_access_file_reader.h" 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/env/file_system_tracer.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/io_tracer.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/fstream" 1 3 15726: # 36 "/usr/include/c++/13/fstream" 3 15726: 15726: # 37 "/usr/include/c++/13/fstream" 3 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/bits/codecvt.h" 1 3 15726: # 39 "/usr/include/c++/13/bits/codecvt.h" 3 15726: 15726: # 40 "/usr/include/c++/13/bits/codecvt.h" 3 15726: 15726: 15726: 15726: 15726: 15726: # 44 "/usr/include/c++/13/bits/codecvt.h" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: class codecvt_base 15726: { 15726: public: 15726: enum result 15726: { 15726: ok, 15726: partial, 15726: error, 15726: noconv 15726: }; 15726: }; 15726: # 70 "/usr/include/c++/13/bits/codecvt.h" 3 15726: template 15726: class __codecvt_abstract_base 15726: : public locale::facet, public codecvt_base 15726: { 15726: public: 15726: 15726: typedef codecvt_base::result result; 15726: typedef _InternT intern_type; 15726: typedef _ExternT extern_type; 15726: typedef _StateT state_type; 15726: # 118 "/usr/include/c++/13/bits/codecvt.h" 3 15726: result 15726: out(state_type& __state, const intern_type* __from, 15726: const intern_type* __from_end, const intern_type*& __from_next, 15726: extern_type* __to, extern_type* __to_end, 15726: extern_type*& __to_next) const 15726: { 15726: return this->do_out(__state, __from, __from_end, __from_next, 15726: __to, __to_end, __to_next); 15726: } 15726: # 157 "/usr/include/c++/13/bits/codecvt.h" 3 15726: result 15726: unshift(state_type& __state, extern_type* __to, extern_type* __to_end, 15726: extern_type*& __to_next) const 15726: { return this->do_unshift(__state, __to,__to_end,__to_next); } 15726: # 198 "/usr/include/c++/13/bits/codecvt.h" 3 15726: result 15726: in(state_type& __state, const extern_type* __from, 15726: const extern_type* __from_end, const extern_type*& __from_next, 15726: intern_type* __to, intern_type* __to_end, 15726: intern_type*& __to_next) const 15726: { 15726: return this->do_in(__state, __from, __from_end, __from_next, 15726: __to, __to_end, __to_next); 15726: } 15726: 15726: int 15726: encoding() const throw() 15726: { return this->do_encoding(); } 15726: 15726: bool 15726: always_noconv() const throw() 15726: { return this->do_always_noconv(); } 15726: 15726: int 15726: length(state_type& __state, const extern_type* __from, 15726: const extern_type* __end, size_t __max) const 15726: { return this->do_length(__state, __from, __end, __max); } 15726: 15726: int 15726: max_length() const throw() 15726: { return this->do_max_length(); } 15726: 15726: protected: 15726: explicit 15726: __codecvt_abstract_base(size_t __refs = 0) : locale::facet(__refs) { } 15726: 15726: virtual 15726: ~__codecvt_abstract_base() { } 15726: # 239 "/usr/include/c++/13/bits/codecvt.h" 3 15726: virtual result 15726: do_out(state_type& __state, const intern_type* __from, 15726: const intern_type* __from_end, const intern_type*& __from_next, 15726: extern_type* __to, extern_type* __to_end, 15726: extern_type*& __to_next) const = 0; 15726: 15726: virtual result 15726: do_unshift(state_type& __state, extern_type* __to, 15726: extern_type* __to_end, extern_type*& __to_next) const = 0; 15726: 15726: virtual result 15726: do_in(state_type& __state, const extern_type* __from, 15726: const extern_type* __from_end, const extern_type*& __from_next, 15726: intern_type* __to, intern_type* __to_end, 15726: intern_type*& __to_next) const = 0; 15726: 15726: virtual int 15726: do_encoding() const throw() = 0; 15726: 15726: virtual bool 15726: do_always_noconv() const throw() = 0; 15726: 15726: virtual int 15726: do_length(state_type&, const extern_type* __from, 15726: const extern_type* __end, size_t __max) const = 0; 15726: 15726: virtual int 15726: do_max_length() const throw() = 0; 15726: }; 15726: # 276 "/usr/include/c++/13/bits/codecvt.h" 3 15726: template 15726: class codecvt 15726: : public __codecvt_abstract_base<_InternT, _ExternT, _StateT> 15726: { 15726: public: 15726: 15726: typedef codecvt_base::result result; 15726: typedef _InternT intern_type; 15726: typedef _ExternT extern_type; 15726: typedef _StateT state_type; 15726: 15726: protected: 15726: __c_locale _M_c_locale_codecvt; 15726: 15726: public: 15726: static locale::id id; 15726: 15726: explicit 15726: codecvt(size_t __refs = 0) 15726: : __codecvt_abstract_base<_InternT, _ExternT, _StateT> (__refs), 15726: _M_c_locale_codecvt(0) 15726: { } 15726: 15726: explicit 15726: codecvt(__c_locale __cloc, size_t __refs = 0); 15726: 15726: protected: 15726: virtual 15726: ~codecvt() { } 15726: 15726: virtual result 15726: do_out(state_type& __state, const intern_type* __from, 15726: const intern_type* __from_end, const intern_type*& __from_next, 15726: extern_type* __to, extern_type* __to_end, 15726: extern_type*& __to_next) const; 15726: 15726: virtual result 15726: do_unshift(state_type& __state, extern_type* __to, 15726: extern_type* __to_end, extern_type*& __to_next) const; 15726: 15726: virtual result 15726: do_in(state_type& __state, const extern_type* __from, 15726: const extern_type* __from_end, const extern_type*& __from_next, 15726: intern_type* __to, intern_type* __to_end, 15726: intern_type*& __to_next) const; 15726: 15726: virtual int 15726: do_encoding() const throw(); 15726: 15726: virtual bool 15726: do_always_noconv() const throw(); 15726: 15726: virtual int 15726: do_length(state_type&, const extern_type* __from, 15726: const extern_type* __end, size_t __max) const; 15726: 15726: virtual int 15726: do_max_length() const throw(); 15726: }; 15726: 15726: template 15726: locale::id codecvt<_InternT, _ExternT, _StateT>::id; 15726: 15726: 15726: template<> 15726: class codecvt 15726: : public __codecvt_abstract_base 15726: { 15726: friend class messages; 15726: 15726: public: 15726: 15726: typedef char intern_type; 15726: typedef char extern_type; 15726: typedef mbstate_t state_type; 15726: 15726: protected: 15726: __c_locale _M_c_locale_codecvt; 15726: 15726: public: 15726: static locale::id id; 15726: 15726: explicit 15726: codecvt(size_t __refs = 0); 15726: 15726: explicit 15726: codecvt(__c_locale __cloc, size_t __refs = 0); 15726: 15726: protected: 15726: virtual 15726: ~codecvt(); 15726: 15726: virtual result 15726: do_out(state_type& __state, const intern_type* __from, 15726: const intern_type* __from_end, const intern_type*& __from_next, 15726: extern_type* __to, extern_type* __to_end, 15726: extern_type*& __to_next) const; 15726: 15726: virtual result 15726: do_unshift(state_type& __state, extern_type* __to, 15726: extern_type* __to_end, extern_type*& __to_next) const; 15726: 15726: virtual result 15726: do_in(state_type& __state, const extern_type* __from, 15726: const extern_type* __from_end, const extern_type*& __from_next, 15726: intern_type* __to, intern_type* __to_end, 15726: intern_type*& __to_next) const; 15726: 15726: virtual int 15726: do_encoding() const throw(); 15726: 15726: virtual bool 15726: do_always_noconv() const throw(); 15726: 15726: virtual int 15726: do_length(state_type&, const extern_type* __from, 15726: const extern_type* __end, size_t __max) const; 15726: 15726: virtual int 15726: do_max_length() const throw(); 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template<> 15726: class codecvt 15726: : public __codecvt_abstract_base 15726: { 15726: friend class messages; 15726: 15726: public: 15726: 15726: typedef wchar_t intern_type; 15726: typedef char extern_type; 15726: typedef mbstate_t state_type; 15726: 15726: protected: 15726: __c_locale _M_c_locale_codecvt; 15726: 15726: public: 15726: static locale::id id; 15726: 15726: explicit 15726: codecvt(size_t __refs = 0); 15726: 15726: explicit 15726: codecvt(__c_locale __cloc, size_t __refs = 0); 15726: 15726: protected: 15726: virtual 15726: ~codecvt(); 15726: 15726: virtual result 15726: do_out(state_type& __state, const intern_type* __from, 15726: const intern_type* __from_end, const intern_type*& __from_next, 15726: extern_type* __to, extern_type* __to_end, 15726: extern_type*& __to_next) const; 15726: 15726: virtual result 15726: do_unshift(state_type& __state, 15726: extern_type* __to, extern_type* __to_end, 15726: extern_type*& __to_next) const; 15726: 15726: virtual result 15726: do_in(state_type& __state, 15726: const extern_type* __from, const extern_type* __from_end, 15726: const extern_type*& __from_next, 15726: intern_type* __to, intern_type* __to_end, 15726: intern_type*& __to_next) const; 15726: 15726: virtual 15726: int do_encoding() const throw(); 15726: 15726: virtual 15726: bool do_always_noconv() const throw(); 15726: 15726: virtual 15726: int do_length(state_type&, const extern_type* __from, 15726: const extern_type* __end, size_t __max) const; 15726: 15726: virtual int 15726: do_max_length() const throw(); 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template<> 15726: class codecvt 15726: : public __codecvt_abstract_base 15726: { 15726: public: 15726: 15726: typedef char16_t intern_type; 15726: typedef char extern_type; 15726: typedef mbstate_t state_type; 15726: 15726: public: 15726: static locale::id id; 15726: 15726: explicit 15726: codecvt(size_t __refs = 0) 15726: : __codecvt_abstract_base(__refs) { } 15726: 15726: protected: 15726: virtual 15726: ~codecvt(); 15726: 15726: virtual result 15726: do_out(state_type& __state, const intern_type* __from, 15726: const intern_type* __from_end, const intern_type*& __from_next, 15726: extern_type* __to, extern_type* __to_end, 15726: extern_type*& __to_next) const; 15726: 15726: virtual result 15726: do_unshift(state_type& __state, 15726: extern_type* __to, extern_type* __to_end, 15726: extern_type*& __to_next) const; 15726: 15726: virtual result 15726: do_in(state_type& __state, 15726: const extern_type* __from, const extern_type* __from_end, 15726: const extern_type*& __from_next, 15726: intern_type* __to, intern_type* __to_end, 15726: intern_type*& __to_next) const; 15726: 15726: virtual 15726: int do_encoding() const throw(); 15726: 15726: virtual 15726: bool do_always_noconv() const throw(); 15726: 15726: virtual 15726: int do_length(state_type&, const extern_type* __from, 15726: const extern_type* __end, size_t __max) const; 15726: 15726: virtual int 15726: do_max_length() const throw(); 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: template<> 15726: class codecvt 15726: : public __codecvt_abstract_base 15726: { 15726: public: 15726: 15726: typedef char32_t intern_type; 15726: typedef char extern_type; 15726: typedef mbstate_t state_type; 15726: 15726: public: 15726: static locale::id id; 15726: 15726: explicit 15726: codecvt(size_t __refs = 0) 15726: : __codecvt_abstract_base(__refs) { } 15726: 15726: protected: 15726: virtual 15726: ~codecvt(); 15726: 15726: virtual result 15726: do_out(state_type& __state, const intern_type* __from, 15726: const intern_type* __from_end, const intern_type*& __from_next, 15726: extern_type* __to, extern_type* __to_end, 15726: extern_type*& __to_next) const; 15726: 15726: virtual result 15726: do_unshift(state_type& __state, 15726: extern_type* __to, extern_type* __to_end, 15726: extern_type*& __to_next) const; 15726: 15726: virtual result 15726: do_in(state_type& __state, 15726: const extern_type* __from, const extern_type* __from_end, 15726: const extern_type*& __from_next, 15726: intern_type* __to, intern_type* __to_end, 15726: intern_type*& __to_next) const; 15726: 15726: virtual 15726: int do_encoding() const throw(); 15726: 15726: virtual 15726: bool do_always_noconv() const throw(); 15726: 15726: virtual 15726: int do_length(state_type&, const extern_type* __from, 15726: const extern_type* __end, size_t __max) const; 15726: 15726: virtual int 15726: do_max_length() const throw(); 15726: }; 15726: # 698 "/usr/include/c++/13/bits/codecvt.h" 3 15726: template 15726: class codecvt_byname : public codecvt<_InternT, _ExternT, _StateT> 15726: { 15726: public: 15726: explicit 15726: codecvt_byname(const char* __s, size_t __refs = 0) 15726: : codecvt<_InternT, _ExternT, _StateT>(__refs) 15726: { 15726: if (__builtin_strcmp(__s, "C") != 0 15726: && __builtin_strcmp(__s, "POSIX") != 0) 15726: { 15726: this->_S_destroy_c_locale(this->_M_c_locale_codecvt); 15726: this->_S_create_c_locale(this->_M_c_locale_codecvt, __s); 15726: } 15726: } 15726: 15726: 15726: explicit 15726: codecvt_byname(const string& __s, size_t __refs = 0) 15726: : codecvt_byname(__s.c_str(), __refs) { } 15726: 15726: 15726: protected: 15726: virtual 15726: ~codecvt_byname() { } 15726: }; 15726: 15726: 15726: template<> 15726: class codecvt_byname 15726: : public codecvt 15726: { 15726: public: 15726: explicit 15726: codecvt_byname(const char*, size_t __refs = 0) 15726: : codecvt(__refs) { } 15726: 15726: explicit 15726: codecvt_byname(const string& __s, size_t __refs = 0) 15726: : codecvt_byname(__s.c_str(), __refs) { } 15726: 15726: protected: 15726: virtual 15726: ~codecvt_byname() { } 15726: }; 15726: 15726: template<> 15726: class codecvt_byname 15726: : public codecvt 15726: { 15726: public: 15726: explicit 15726: codecvt_byname(const char*, size_t __refs = 0) 15726: : codecvt(__refs) { } 15726: 15726: explicit 15726: codecvt_byname(const string& __s, size_t __refs = 0) 15726: : codecvt_byname(__s.c_str(), __refs) { } 15726: 15726: protected: 15726: virtual 15726: ~codecvt_byname() { } 15726: }; 15726: # 805 "/usr/include/c++/13/bits/codecvt.h" 3 15726: extern template class codecvt_byname; 15726: 15726: extern template 15726: const codecvt& 15726: use_facet >(const locale&); 15726: 15726: extern template 15726: bool 15726: has_facet >(const locale&); 15726: 15726: 15726: extern template class codecvt_byname; 15726: 15726: extern template 15726: const codecvt& 15726: use_facet >(const locale&); 15726: 15726: extern template 15726: bool 15726: has_facet >(const locale&); 15726: 15726: 15726: 15726: extern template class codecvt_byname; 15726: extern template class codecvt_byname; 15726: # 840 "/usr/include/c++/13/bits/codecvt.h" 3 15726: 15726: } 15726: # 43 "/usr/include/c++/13/fstream" 2 3 15726: # 1 "/usr/include/c++/13/cstdio" 1 3 15726: # 39 "/usr/include/c++/13/cstdio" 3 15726: 15726: # 40 "/usr/include/c++/13/cstdio" 3 15726: # 44 "/usr/include/c++/13/fstream" 2 3 15726: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/basic_file.h" 1 3 15726: # 37 "/usr/include/arm-linux-gnueabihf/c++/13/bits/basic_file.h" 3 15726: 15726: # 38 "/usr/include/arm-linux-gnueabihf/c++/13/bits/basic_file.h" 3 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++io.h" 1 3 15726: # 35 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++io.h" 3 15726: # 1 "/usr/include/c++/13/cstdio" 1 3 15726: # 39 "/usr/include/c++/13/cstdio" 3 15726: 15726: # 40 "/usr/include/c++/13/cstdio" 3 15726: # 36 "/usr/include/arm-linux-gnueabihf/c++/13/bits/c++io.h" 2 3 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef __gthread_mutex_t __c_lock; 15726: 15726: 15726: 15726: typedef FILE __c_file; 15726: 15726: 15726: } 15726: # 41 "/usr/include/arm-linux-gnueabihf/c++/13/bits/basic_file.h" 2 3 15726: 15726: 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: template 15726: class __basic_file; 15726: 15726: 15726: template<> 15726: class __basic_file 15726: { 15726: 15726: __c_file* _M_cfile; 15726: 15726: 15726: bool _M_cfile_created; 15726: 15726: public: 15726: __basic_file(__c_lock* __lock = 0) throw (); 15726: 15726: 15726: __basic_file(__basic_file&& __rv, __c_lock* = 0) noexcept 15726: : _M_cfile(__rv._M_cfile), _M_cfile_created(__rv._M_cfile_created) 15726: { 15726: __rv._M_cfile = nullptr; 15726: __rv._M_cfile_created = false; 15726: } 15726: 15726: __basic_file& operator=(const __basic_file&) = delete; 15726: __basic_file& operator=(__basic_file&&) = delete; 15726: 15726: void 15726: swap(__basic_file& __f) noexcept 15726: { 15726: std::swap(_M_cfile, __f._M_cfile); 15726: std::swap(_M_cfile_created, __f._M_cfile_created); 15726: } 15726: 15726: 15726: __basic_file* 15726: open(const char* __name, ios_base::openmode __mode, int __prot = 0664); 15726: 15726: 15726: 15726: 15726: 15726: 15726: __basic_file* 15726: sys_open(__c_file* __file, ios_base::openmode); 15726: 15726: __basic_file* 15726: sys_open(int __fd, ios_base::openmode __mode) throw (); 15726: 15726: __basic_file* 15726: close(); 15726: 15726: __attribute__ ((__pure__)) bool 15726: is_open() const throw (); 15726: 15726: __attribute__ ((__pure__)) int 15726: fd() throw (); 15726: 15726: __attribute__ ((__pure__)) __c_file* 15726: file() throw (); 15726: 15726: ~__basic_file(); 15726: 15726: streamsize 15726: xsputn(const char* __s, streamsize __n); 15726: 15726: streamsize 15726: xsputn_2(const char* __s1, streamsize __n1, 15726: const char* __s2, streamsize __n2); 15726: 15726: streamsize 15726: xsgetn(char* __s, streamsize __n); 15726: 15726: streamoff 15726: seekoff(streamoff __off, ios_base::seekdir __way) throw (); 15726: 15726: int 15726: sync(); 15726: 15726: streamsize 15726: showmanyc(); 15726: }; 15726: 15726: 15726: } 15726: # 45 "/usr/include/c++/13/fstream" 2 3 15726: # 54 "/usr/include/c++/13/fstream" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: 15726: 15726: template().make_preferred().filename())> 15726: using _If_fs_path = enable_if_t, _Result>; 15726: # 86 "/usr/include/c++/13/fstream" 3 15726: template 15726: class basic_filebuf : public basic_streambuf<_CharT, _Traits> 15726: { 15726: 15726: template 15726: using __chk_state = __and_, 15726: is_copy_constructible<_Tp>, 15726: is_default_constructible<_Tp>>; 15726: 15726: static_assert(__chk_state::value, 15726: "state_type must be CopyAssignable, CopyConstructible" 15726: " and DefaultConstructible"); 15726: 15726: static_assert(is_same>::value, 15726: "pos_type must be fpos"); 15726: 15726: public: 15726: 15726: typedef _CharT char_type; 15726: typedef _Traits traits_type; 15726: typedef typename traits_type::int_type int_type; 15726: typedef typename traits_type::pos_type pos_type; 15726: typedef typename traits_type::off_type off_type; 15726: 15726: typedef basic_streambuf __streambuf_type; 15726: typedef basic_filebuf __filebuf_type; 15726: typedef __basic_file __file_type; 15726: typedef typename traits_type::state_type __state_type; 15726: typedef codecvt __codecvt_type; 15726: 15726: friend class ios_base; 15726: 15726: protected: 15726: 15726: 15726: __c_lock _M_lock; 15726: 15726: 15726: __file_type _M_file; 15726: 15726: 15726: ios_base::openmode _M_mode; 15726: 15726: 15726: __state_type _M_state_beg; 15726: 15726: 15726: 15726: 15726: __state_type _M_state_cur; 15726: 15726: 15726: 15726: __state_type _M_state_last; 15726: 15726: 15726: char_type* _M_buf; 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_t _M_buf_size; 15726: 15726: 15726: bool _M_buf_allocated; 15726: # 162 "/usr/include/c++/13/fstream" 3 15726: bool _M_reading; 15726: bool _M_writing; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: char_type _M_pback; 15726: char_type* _M_pback_cur_save; 15726: char_type* _M_pback_end_save; 15726: bool _M_pback_init; 15726: 15726: 15726: 15726: const __codecvt_type* _M_codecvt; 15726: 15726: 15726: 15726: 15726: 15726: 15726: char* _M_ext_buf; 15726: 15726: 15726: 15726: 15726: streamsize _M_ext_buf_size; 15726: 15726: 15726: 15726: 15726: 15726: 15726: const char* _M_ext_next; 15726: char* _M_ext_end; 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: _M_create_pback() 15726: { 15726: if (!_M_pback_init) 15726: { 15726: _M_pback_cur_save = this->gptr(); 15726: _M_pback_end_save = this->egptr(); 15726: this->setg(&_M_pback, &_M_pback, &_M_pback + 1); 15726: _M_pback_init = true; 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: void 15726: _M_destroy_pback() throw() 15726: { 15726: if (_M_pback_init) 15726: { 15726: 15726: _M_pback_cur_save += this->gptr() != this->eback(); 15726: this->setg(_M_buf, _M_pback_cur_save, _M_pback_end_save); 15726: _M_pback_init = false; 15726: } 15726: } 15726: 15726: public: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: basic_filebuf(); 15726: 15726: 15726: basic_filebuf(const basic_filebuf&) = delete; 15726: basic_filebuf(basic_filebuf&&); 15726: 15726: 15726: 15726: 15726: 15726: virtual 15726: ~basic_filebuf() 15726: { 15726: try 15726: { this->close(); } 15726: catch(...) 15726: { } 15726: } 15726: 15726: 15726: basic_filebuf& operator=(const basic_filebuf&) = delete; 15726: basic_filebuf& operator=(basic_filebuf&&); 15726: void swap(basic_filebuf&); 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool 15726: is_open() const throw() 15726: { return _M_file.is_open(); } 15726: # 316 "/usr/include/c++/13/fstream" 3 15726: __filebuf_type* 15726: open(const char* __s, ios_base::openmode __mode); 15726: # 337 "/usr/include/c++/13/fstream" 3 15726: __filebuf_type* 15726: open(const std::string& __s, ios_base::openmode __mode) 15726: { return open(__s.c_str(), __mode); } 15726: # 348 "/usr/include/c++/13/fstream" 3 15726: template 15726: _If_fs_path<_Path, __filebuf_type*> 15726: open(const _Path& __s, ios_base::openmode __mode) 15726: { return open(__s.c_str(), __mode); } 15726: # 367 "/usr/include/c++/13/fstream" 3 15726: __filebuf_type* 15726: close(); 15726: 15726: protected: 15726: void 15726: _M_allocate_internal_buffer(); 15726: 15726: void 15726: _M_destroy_internal_buffer() throw(); 15726: 15726: 15726: virtual streamsize 15726: showmanyc(); 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual int_type 15726: underflow(); 15726: 15726: virtual int_type 15726: pbackfail(int_type __c = _Traits::eof()); 15726: # 399 "/usr/include/c++/13/fstream" 3 15726: virtual int_type 15726: overflow(int_type __c = _Traits::eof()); 15726: 15726: 15726: 15726: bool 15726: _M_convert_to_external(char_type*, streamsize); 15726: # 419 "/usr/include/c++/13/fstream" 3 15726: virtual __streambuf_type* 15726: setbuf(char_type* __s, streamsize __n); 15726: 15726: virtual pos_type 15726: seekoff(off_type __off, ios_base::seekdir __way, 15726: ios_base::openmode __mode = ios_base::in | ios_base::out); 15726: 15726: virtual pos_type 15726: seekpos(pos_type __pos, 15726: ios_base::openmode __mode = ios_base::in | ios_base::out); 15726: 15726: 15726: pos_type 15726: _M_seek(off_type __off, ios_base::seekdir __way, __state_type __state); 15726: 15726: int 15726: _M_get_ext_pos(__state_type &__state); 15726: 15726: virtual int 15726: sync(); 15726: 15726: virtual void 15726: imbue(const locale& __loc); 15726: 15726: virtual streamsize 15726: xsgetn(char_type* __s, streamsize __n); 15726: 15726: virtual streamsize 15726: xsputn(const char_type* __s, streamsize __n); 15726: 15726: 15726: bool 15726: _M_terminate_output(); 15726: # 465 "/usr/include/c++/13/fstream" 3 15726: void 15726: _M_set_buffer(streamsize __off) 15726: { 15726: const bool __testin = _M_mode & ios_base::in; 15726: const bool __testout = (_M_mode & ios_base::out 15726: || _M_mode & ios_base::app); 15726: 15726: if (__testin && __off > 0) 15726: this->setg(_M_buf, _M_buf, _M_buf + __off); 15726: else 15726: this->setg(_M_buf, _M_buf, _M_buf); 15726: 15726: if (__testout && __off == 0 && _M_buf_size > 1 ) 15726: this->setp(_M_buf, _M_buf + _M_buf_size - 1); 15726: else 15726: this->setp(0, 0); 15726: } 15726: }; 15726: # 498 "/usr/include/c++/13/fstream" 3 15726: template 15726: class basic_ifstream : public basic_istream<_CharT, _Traits> 15726: { 15726: public: 15726: 15726: typedef _CharT char_type; 15726: typedef _Traits traits_type; 15726: typedef typename traits_type::int_type int_type; 15726: typedef typename traits_type::pos_type pos_type; 15726: typedef typename traits_type::off_type off_type; 15726: 15726: 15726: typedef basic_filebuf __filebuf_type; 15726: typedef basic_istream __istream_type; 15726: 15726: private: 15726: __filebuf_type _M_filebuf; 15726: 15726: public: 15726: # 525 "/usr/include/c++/13/fstream" 3 15726: basic_ifstream() : __istream_type(), _M_filebuf() 15726: { this->init(&_M_filebuf); } 15726: # 535 "/usr/include/c++/13/fstream" 3 15726: explicit 15726: basic_ifstream(const char* __s, ios_base::openmode __mode = ios_base::in) 15726: : __istream_type(), _M_filebuf() 15726: { 15726: this->init(&_M_filebuf); 15726: this->open(__s, __mode); 15726: } 15726: # 568 "/usr/include/c++/13/fstream" 3 15726: explicit 15726: basic_ifstream(const std::string& __s, 15726: ios_base::openmode __mode = ios_base::in) 15726: : __istream_type(), _M_filebuf() 15726: { 15726: this->init(&_M_filebuf); 15726: this->open(__s, __mode); 15726: } 15726: # 585 "/usr/include/c++/13/fstream" 3 15726: template> 15726: basic_ifstream(const _Path& __s, 15726: ios_base::openmode __mode = ios_base::in) 15726: : basic_ifstream(__s.c_str(), __mode) 15726: { } 15726: 15726: 15726: basic_ifstream(const basic_ifstream&) = delete; 15726: 15726: basic_ifstream(basic_ifstream&& __rhs) 15726: : __istream_type(std::move(__rhs)), 15726: _M_filebuf(std::move(__rhs._M_filebuf)) 15726: { __istream_type::set_rdbuf(&_M_filebuf); } 15726: # 606 "/usr/include/c++/13/fstream" 3 15726: ~basic_ifstream() 15726: { } 15726: 15726: 15726: 15726: 15726: basic_ifstream& 15726: operator=(const basic_ifstream&) = delete; 15726: 15726: basic_ifstream& 15726: operator=(basic_ifstream&& __rhs) 15726: { 15726: __istream_type::operator=(std::move(__rhs)); 15726: _M_filebuf = std::move(__rhs._M_filebuf); 15726: return *this; 15726: } 15726: 15726: void 15726: swap(basic_ifstream& __rhs) 15726: { 15726: __istream_type::swap(__rhs); 15726: _M_filebuf.swap(__rhs._M_filebuf); 15726: } 15726: # 638 "/usr/include/c++/13/fstream" 3 15726: __filebuf_type* 15726: rdbuf() const 15726: { return const_cast<__filebuf_type*>(&_M_filebuf); } 15726: 15726: 15726: 15726: 15726: 15726: bool 15726: is_open() 15726: { return _M_filebuf.is_open(); } 15726: 15726: 15726: 15726: bool 15726: is_open() const 15726: { return _M_filebuf.is_open(); } 15726: # 664 "/usr/include/c++/13/fstream" 3 15726: void 15726: open(const char* __s, ios_base::openmode __mode = ios_base::in) 15726: { 15726: if (!_M_filebuf.open(__s, __mode | ios_base::in)) 15726: this->setstate(ios_base::failbit); 15726: else 15726: 15726: 15726: this->clear(); 15726: } 15726: # 703 "/usr/include/c++/13/fstream" 3 15726: void 15726: open(const std::string& __s, ios_base::openmode __mode = ios_base::in) 15726: { 15726: if (!_M_filebuf.open(__s, __mode | ios_base::in)) 15726: this->setstate(ios_base::failbit); 15726: else 15726: 15726: 15726: this->clear(); 15726: } 15726: # 723 "/usr/include/c++/13/fstream" 3 15726: template 15726: _If_fs_path<_Path, void> 15726: open(const _Path& __s, ios_base::openmode __mode = ios_base::in) 15726: { open(__s.c_str(), __mode); } 15726: # 736 "/usr/include/c++/13/fstream" 3 15726: void 15726: close() 15726: { 15726: if (!_M_filebuf.close()) 15726: this->setstate(ios_base::failbit); 15726: } 15726: }; 15726: # 759 "/usr/include/c++/13/fstream" 3 15726: template 15726: class basic_ofstream : public basic_ostream<_CharT,_Traits> 15726: { 15726: public: 15726: 15726: typedef _CharT char_type; 15726: typedef _Traits traits_type; 15726: typedef typename traits_type::int_type int_type; 15726: typedef typename traits_type::pos_type pos_type; 15726: typedef typename traits_type::off_type off_type; 15726: 15726: 15726: typedef basic_filebuf __filebuf_type; 15726: typedef basic_ostream __ostream_type; 15726: 15726: private: 15726: __filebuf_type _M_filebuf; 15726: 15726: public: 15726: # 786 "/usr/include/c++/13/fstream" 3 15726: basic_ofstream(): __ostream_type(), _M_filebuf() 15726: { this->init(&_M_filebuf); } 15726: # 796 "/usr/include/c++/13/fstream" 3 15726: explicit 15726: basic_ofstream(const char* __s, 15726: ios_base::openmode __mode = ios_base::out) 15726: : __ostream_type(), _M_filebuf() 15726: { 15726: this->init(&_M_filebuf); 15726: this->open(__s, __mode); 15726: } 15726: # 831 "/usr/include/c++/13/fstream" 3 15726: explicit 15726: basic_ofstream(const std::string& __s, 15726: ios_base::openmode __mode = ios_base::out) 15726: : __ostream_type(), _M_filebuf() 15726: { 15726: this->init(&_M_filebuf); 15726: this->open(__s, __mode); 15726: } 15726: # 848 "/usr/include/c++/13/fstream" 3 15726: template> 15726: basic_ofstream(const _Path& __s, 15726: ios_base::openmode __mode = ios_base::out) 15726: : basic_ofstream(__s.c_str(), __mode) 15726: { } 15726: 15726: 15726: basic_ofstream(const basic_ofstream&) = delete; 15726: 15726: basic_ofstream(basic_ofstream&& __rhs) 15726: : __ostream_type(std::move(__rhs)), 15726: _M_filebuf(std::move(__rhs._M_filebuf)) 15726: { __ostream_type::set_rdbuf(&_M_filebuf); } 15726: # 869 "/usr/include/c++/13/fstream" 3 15726: ~basic_ofstream() 15726: { } 15726: 15726: 15726: 15726: 15726: basic_ofstream& 15726: operator=(const basic_ofstream&) = delete; 15726: 15726: basic_ofstream& 15726: operator=(basic_ofstream&& __rhs) 15726: { 15726: __ostream_type::operator=(std::move(__rhs)); 15726: _M_filebuf = std::move(__rhs._M_filebuf); 15726: return *this; 15726: } 15726: 15726: void 15726: swap(basic_ofstream& __rhs) 15726: { 15726: __ostream_type::swap(__rhs); 15726: _M_filebuf.swap(__rhs._M_filebuf); 15726: } 15726: # 901 "/usr/include/c++/13/fstream" 3 15726: __filebuf_type* 15726: rdbuf() const 15726: { return const_cast<__filebuf_type*>(&_M_filebuf); } 15726: 15726: 15726: 15726: 15726: 15726: bool 15726: is_open() 15726: { return _M_filebuf.is_open(); } 15726: 15726: 15726: 15726: bool 15726: is_open() const 15726: { return _M_filebuf.is_open(); } 15726: # 927 "/usr/include/c++/13/fstream" 3 15726: void 15726: open(const char* __s, ios_base::openmode __mode = ios_base::out) 15726: { 15726: if (!_M_filebuf.open(__s, __mode | ios_base::out)) 15726: this->setstate(ios_base::failbit); 15726: else 15726: 15726: 15726: this->clear(); 15726: } 15726: # 966 "/usr/include/c++/13/fstream" 3 15726: void 15726: open(const std::string& __s, ios_base::openmode __mode = ios_base::out) 15726: { 15726: if (!_M_filebuf.open(__s, __mode | ios_base::out)) 15726: this->setstate(ios_base::failbit); 15726: else 15726: 15726: 15726: this->clear(); 15726: } 15726: # 986 "/usr/include/c++/13/fstream" 3 15726: template 15726: _If_fs_path<_Path, void> 15726: open(const _Path& __s, ios_base::openmode __mode = ios_base::out) 15726: { open(__s.c_str(), __mode); } 15726: # 999 "/usr/include/c++/13/fstream" 3 15726: void 15726: close() 15726: { 15726: if (!_M_filebuf.close()) 15726: this->setstate(ios_base::failbit); 15726: } 15726: }; 15726: # 1022 "/usr/include/c++/13/fstream" 3 15726: template 15726: class basic_fstream : public basic_iostream<_CharT, _Traits> 15726: { 15726: public: 15726: 15726: typedef _CharT char_type; 15726: typedef _Traits traits_type; 15726: typedef typename traits_type::int_type int_type; 15726: typedef typename traits_type::pos_type pos_type; 15726: typedef typename traits_type::off_type off_type; 15726: 15726: 15726: typedef basic_filebuf __filebuf_type; 15726: typedef basic_ios __ios_type; 15726: typedef basic_iostream __iostream_type; 15726: 15726: private: 15726: __filebuf_type _M_filebuf; 15726: 15726: public: 15726: # 1050 "/usr/include/c++/13/fstream" 3 15726: basic_fstream() 15726: : __iostream_type(), _M_filebuf() 15726: { this->init(&_M_filebuf); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: explicit 15726: basic_fstream(const char* __s, 15726: ios_base::openmode __mode = ios_base::in | ios_base::out) 15726: : __iostream_type(0), _M_filebuf() 15726: { 15726: this->init(&_M_filebuf); 15726: this->open(__s, __mode); 15726: } 15726: # 1089 "/usr/include/c++/13/fstream" 3 15726: explicit 15726: basic_fstream(const std::string& __s, 15726: ios_base::openmode __mode = ios_base::in | ios_base::out) 15726: : __iostream_type(0), _M_filebuf() 15726: { 15726: this->init(&_M_filebuf); 15726: this->open(__s, __mode); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template> 15726: basic_fstream(const _Path& __s, 15726: ios_base::openmode __mode = ios_base::in | ios_base::out) 15726: : basic_fstream(__s.c_str(), __mode) 15726: { } 15726: 15726: 15726: basic_fstream(const basic_fstream&) = delete; 15726: 15726: basic_fstream(basic_fstream&& __rhs) 15726: : __iostream_type(std::move(__rhs)), 15726: _M_filebuf(std::move(__rhs._M_filebuf)) 15726: { __iostream_type::set_rdbuf(&_M_filebuf); } 15726: # 1125 "/usr/include/c++/13/fstream" 3 15726: ~basic_fstream() 15726: { } 15726: 15726: 15726: 15726: 15726: basic_fstream& 15726: operator=(const basic_fstream&) = delete; 15726: 15726: basic_fstream& 15726: operator=(basic_fstream&& __rhs) 15726: { 15726: __iostream_type::operator=(std::move(__rhs)); 15726: _M_filebuf = std::move(__rhs._M_filebuf); 15726: return *this; 15726: } 15726: 15726: void 15726: swap(basic_fstream& __rhs) 15726: { 15726: __iostream_type::swap(__rhs); 15726: _M_filebuf.swap(__rhs._M_filebuf); 15726: } 15726: # 1157 "/usr/include/c++/13/fstream" 3 15726: __filebuf_type* 15726: rdbuf() const 15726: { return const_cast<__filebuf_type*>(&_M_filebuf); } 15726: 15726: 15726: 15726: 15726: 15726: bool 15726: is_open() 15726: { return _M_filebuf.is_open(); } 15726: 15726: 15726: 15726: bool 15726: is_open() const 15726: { return _M_filebuf.is_open(); } 15726: # 1183 "/usr/include/c++/13/fstream" 3 15726: void 15726: open(const char* __s, 15726: ios_base::openmode __mode = ios_base::in | ios_base::out) 15726: { 15726: if (!_M_filebuf.open(__s, __mode)) 15726: this->setstate(ios_base::failbit); 15726: else 15726: 15726: 15726: this->clear(); 15726: } 15726: # 1224 "/usr/include/c++/13/fstream" 3 15726: void 15726: open(const std::string& __s, 15726: ios_base::openmode __mode = ios_base::in | ios_base::out) 15726: { 15726: if (!_M_filebuf.open(__s, __mode)) 15726: this->setstate(ios_base::failbit); 15726: else 15726: 15726: 15726: this->clear(); 15726: } 15726: # 1245 "/usr/include/c++/13/fstream" 3 15726: template 15726: _If_fs_path<_Path, void> 15726: open(const _Path& __s, 15726: ios_base::openmode __mode = ios_base::in | ios_base::out) 15726: { open(__s.c_str(), __mode); } 15726: # 1259 "/usr/include/c++/13/fstream" 3 15726: void 15726: close() 15726: { 15726: if (!_M_filebuf.close()) 15726: this->setstate(ios_base::failbit); 15726: } 15726: }; 15726: 15726: 15726: 15726: template 15726: inline void 15726: swap(basic_filebuf<_CharT, _Traits>& __x, 15726: basic_filebuf<_CharT, _Traits>& __y) 15726: { __x.swap(__y); } 15726: 15726: 15726: template 15726: inline void 15726: swap(basic_ifstream<_CharT, _Traits>& __x, 15726: basic_ifstream<_CharT, _Traits>& __y) 15726: { __x.swap(__y); } 15726: 15726: 15726: template 15726: inline void 15726: swap(basic_ofstream<_CharT, _Traits>& __x, 15726: basic_ofstream<_CharT, _Traits>& __y) 15726: { __x.swap(__y); } 15726: 15726: 15726: template 15726: inline void 15726: swap(basic_fstream<_CharT, _Traits>& __x, 15726: basic_fstream<_CharT, _Traits>& __y) 15726: { __x.swap(__y); } 15726: 15726: 15726: 15726: } 15726: 15726: # 1 "/usr/include/c++/13/bits/fstream.tcc" 1 3 15726: # 37 "/usr/include/c++/13/bits/fstream.tcc" 3 15726: 15726: # 38 "/usr/include/c++/13/bits/fstream.tcc" 3 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/cerrno" 1 3 15726: # 39 "/usr/include/c++/13/cerrno" 3 15726: 15726: # 40 "/usr/include/c++/13/cerrno" 3 15726: # 42 "/usr/include/c++/13/bits/fstream.tcc" 2 3 15726: 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: template 15726: void 15726: basic_filebuf<_CharT, _Traits>:: 15726: _M_allocate_internal_buffer() 15726: { 15726: 15726: 15726: if (!_M_buf_allocated && !_M_buf) 15726: { 15726: _M_buf = new char_type[_M_buf_size]; 15726: _M_buf_allocated = true; 15726: } 15726: } 15726: 15726: template 15726: void 15726: basic_filebuf<_CharT, _Traits>:: 15726: _M_destroy_internal_buffer() throw() 15726: { 15726: if (_M_buf_allocated) 15726: { 15726: delete [] _M_buf; 15726: _M_buf = 0; 15726: _M_buf_allocated = false; 15726: } 15726: delete [] _M_ext_buf; 15726: _M_ext_buf = 0; 15726: _M_ext_buf_size = 0; 15726: _M_ext_next = 0; 15726: _M_ext_end = 0; 15726: } 15726: 15726: template 15726: basic_filebuf<_CharT, _Traits>:: 15726: basic_filebuf() : __streambuf_type(), _M_lock(), _M_file(&_M_lock), 15726: _M_mode(ios_base::openmode(0)), _M_state_beg(), _M_state_cur(), 15726: _M_state_last(), _M_buf(0), _M_buf_size(8192), 15726: _M_buf_allocated(false), _M_reading(false), _M_writing(false), _M_pback(), 15726: _M_pback_cur_save(0), _M_pback_end_save(0), _M_pback_init(false), 15726: _M_codecvt(0), _M_ext_buf(0), _M_ext_buf_size(0), _M_ext_next(0), 15726: _M_ext_end(0) 15726: { 15726: _M_codecvt = std::__try_use_facet<__codecvt_type>(this->_M_buf_locale); 15726: } 15726: 15726: 15726: template 15726: basic_filebuf<_CharT, _Traits>:: 15726: basic_filebuf(basic_filebuf&& __rhs) 15726: : __streambuf_type(__rhs), 15726: _M_lock(), _M_file(std::move(__rhs._M_file), &_M_lock), 15726: _M_mode(std::__exchange(__rhs._M_mode, ios_base::openmode(0))), 15726: _M_state_beg(std::move(__rhs._M_state_beg)), 15726: _M_state_cur(std::move(__rhs._M_state_cur)), 15726: _M_state_last(std::move(__rhs._M_state_last)), 15726: _M_buf(std::__exchange(__rhs._M_buf, nullptr)), 15726: _M_buf_size(std::__exchange(__rhs._M_buf_size, 1)), 15726: _M_buf_allocated(std::__exchange(__rhs._M_buf_allocated, false)), 15726: _M_reading(std::__exchange(__rhs._M_reading, false)), 15726: _M_writing(std::__exchange(__rhs._M_writing, false)), 15726: _M_pback(__rhs._M_pback), 15726: _M_pback_cur_save(std::__exchange(__rhs._M_pback_cur_save, nullptr)), 15726: _M_pback_end_save(std::__exchange(__rhs._M_pback_end_save, nullptr)), 15726: _M_pback_init(std::__exchange(__rhs._M_pback_init, false)), 15726: _M_codecvt(__rhs._M_codecvt), 15726: _M_ext_buf(std::__exchange(__rhs._M_ext_buf, nullptr)), 15726: _M_ext_buf_size(std::__exchange(__rhs._M_ext_buf_size, 0)), 15726: _M_ext_next(std::__exchange(__rhs._M_ext_next, nullptr)), 15726: _M_ext_end(std::__exchange(__rhs._M_ext_end, nullptr)) 15726: { 15726: __rhs._M_set_buffer(-1); 15726: __rhs._M_state_last = __rhs._M_state_cur = __rhs._M_state_beg; 15726: } 15726: 15726: template 15726: basic_filebuf<_CharT, _Traits>& 15726: basic_filebuf<_CharT, _Traits>:: 15726: operator=(basic_filebuf&& __rhs) 15726: { 15726: this->close(); 15726: __streambuf_type::operator=(__rhs); 15726: _M_file.swap(__rhs._M_file); 15726: _M_mode = std::__exchange(__rhs._M_mode, ios_base::openmode(0)); 15726: _M_state_beg = std::move(__rhs._M_state_beg); 15726: _M_state_cur = std::move(__rhs._M_state_cur); 15726: _M_state_last = std::move(__rhs._M_state_last); 15726: _M_buf = std::__exchange(__rhs._M_buf, nullptr); 15726: _M_buf_size = std::__exchange(__rhs._M_buf_size, 1); 15726: _M_buf_allocated = std::__exchange(__rhs._M_buf_allocated, false); 15726: _M_ext_buf = std::__exchange(__rhs._M_ext_buf, nullptr); 15726: _M_ext_buf_size = std::__exchange(__rhs._M_ext_buf_size, 0); 15726: _M_ext_next = std::__exchange(__rhs._M_ext_next, nullptr); 15726: _M_ext_end = std::__exchange(__rhs._M_ext_end, nullptr); 15726: _M_reading = std::__exchange(__rhs._M_reading, false); 15726: _M_writing = std::__exchange(__rhs._M_writing, false); 15726: _M_pback_cur_save = std::__exchange(__rhs._M_pback_cur_save, nullptr); 15726: _M_pback_end_save = std::__exchange(__rhs._M_pback_end_save, nullptr); 15726: _M_pback_init = std::__exchange(__rhs._M_pback_init, false); 15726: __rhs._M_set_buffer(-1); 15726: __rhs._M_state_last = __rhs._M_state_cur = __rhs._M_state_beg; 15726: return *this; 15726: } 15726: 15726: template 15726: void 15726: basic_filebuf<_CharT, _Traits>:: 15726: swap(basic_filebuf& __rhs) 15726: { 15726: __streambuf_type::swap(__rhs); 15726: _M_file.swap(__rhs._M_file); 15726: std::swap(_M_mode, __rhs._M_mode); 15726: std::swap(_M_state_beg, __rhs._M_state_beg); 15726: std::swap(_M_state_cur, __rhs._M_state_cur); 15726: std::swap(_M_state_last, __rhs._M_state_last); 15726: std::swap(_M_buf, __rhs._M_buf); 15726: std::swap(_M_buf_size, __rhs._M_buf_size); 15726: std::swap(_M_buf_allocated, __rhs._M_buf_allocated); 15726: std::swap(_M_ext_buf, __rhs._M_ext_buf); 15726: std::swap(_M_ext_buf_size, __rhs._M_ext_buf_size); 15726: std::swap(_M_ext_next, __rhs._M_ext_next); 15726: std::swap(_M_ext_end, __rhs._M_ext_end); 15726: std::swap(_M_reading, __rhs._M_reading); 15726: std::swap(_M_writing, __rhs._M_writing); 15726: std::swap(_M_pback_cur_save, __rhs._M_pback_cur_save); 15726: std::swap(_M_pback_end_save, __rhs._M_pback_end_save); 15726: std::swap(_M_pback_init, __rhs._M_pback_init); 15726: } 15726: 15726: 15726: template 15726: typename basic_filebuf<_CharT, _Traits>::__filebuf_type* 15726: basic_filebuf<_CharT, _Traits>:: 15726: open(const char* __s, ios_base::openmode __mode) 15726: { 15726: __filebuf_type *__ret = 0; 15726: if (!this->is_open()) 15726: { 15726: _M_file.open(__s, __mode); 15726: if (this->is_open()) 15726: { 15726: _M_allocate_internal_buffer(); 15726: _M_mode = __mode; 15726: 15726: 15726: _M_reading = false; 15726: _M_writing = false; 15726: _M_set_buffer(-1); 15726: 15726: 15726: _M_state_last = _M_state_cur = _M_state_beg; 15726: 15726: 15726: if ((__mode & ios_base::ate) 15726: && this->seekoff(0, ios_base::end, __mode) 15726: == pos_type(off_type(-1))) 15726: this->close(); 15726: else 15726: __ret = this; 15726: } 15726: } 15726: return __ret; 15726: } 15726: # 246 "/usr/include/c++/13/bits/fstream.tcc" 3 15726: template 15726: typename basic_filebuf<_CharT, _Traits>::__filebuf_type* 15726: basic_filebuf<_CharT, _Traits>:: 15726: close() 15726: { 15726: if (!this->is_open()) 15726: return 0; 15726: 15726: bool __testfail = false; 15726: { 15726: 15726: struct __close_sentry 15726: { 15726: basic_filebuf *__fb; 15726: __close_sentry (basic_filebuf *__fbi): __fb(__fbi) { } 15726: ~__close_sentry () 15726: { 15726: __fb->_M_mode = ios_base::openmode(0); 15726: __fb->_M_pback_init = false; 15726: __fb->_M_destroy_internal_buffer(); 15726: __fb->_M_reading = false; 15726: __fb->_M_writing = false; 15726: __fb->_M_set_buffer(-1); 15726: __fb->_M_state_last = __fb->_M_state_cur = __fb->_M_state_beg; 15726: } 15726: } __cs (this); 15726: 15726: try 15726: { 15726: if (!_M_terminate_output()) 15726: __testfail = true; 15726: } 15726: catch(...) 15726: { 15726: _M_file.close(); 15726: throw; 15726: } 15726: } 15726: 15726: if (!_M_file.close()) 15726: __testfail = true; 15726: 15726: if (__testfail) 15726: return 0; 15726: else 15726: return this; 15726: } 15726: 15726: template 15726: streamsize 15726: basic_filebuf<_CharT, _Traits>:: 15726: showmanyc() 15726: { 15726: streamsize __ret = -1; 15726: const bool __testin = _M_mode & ios_base::in; 15726: if (__testin && this->is_open()) 15726: { 15726: 15726: 15726: __ret = this->egptr() - this->gptr(); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: if (__check_facet(_M_codecvt).encoding() >= 0) 15726: 15726: __ret += _M_file.showmanyc() / _M_codecvt->max_length(); 15726: } 15726: return __ret; 15726: } 15726: 15726: template 15726: typename basic_filebuf<_CharT, _Traits>::int_type 15726: basic_filebuf<_CharT, _Traits>:: 15726: underflow() 15726: { 15726: int_type __ret = traits_type::eof(); 15726: const bool __testin = _M_mode & ios_base::in; 15726: if (__testin) 15726: { 15726: if (_M_writing) 15726: { 15726: if (overflow() == traits_type::eof()) 15726: return __ret; 15726: _M_set_buffer(-1); 15726: _M_writing = false; 15726: } 15726: 15726: 15726: 15726: _M_destroy_pback(); 15726: 15726: if (this->gptr() < this->egptr()) 15726: return traits_type::to_int_type(*this->gptr()); 15726: 15726: 15726: const size_t __buflen = _M_buf_size > 1 ? _M_buf_size - 1 : 1; 15726: 15726: 15726: bool __got_eof = false; 15726: 15726: streamsize __ilen = 0; 15726: codecvt_base::result __r = codecvt_base::ok; 15726: if (__check_facet(_M_codecvt).always_noconv()) 15726: { 15726: __ilen = _M_file.xsgetn(reinterpret_cast(this->eback()), 15726: __buflen); 15726: if (__ilen == 0) 15726: __got_eof = true; 15726: } 15726: else 15726: { 15726: 15726: 15726: const int __enc = _M_codecvt->encoding(); 15726: streamsize __blen; 15726: streamsize __rlen; 15726: if (__enc > 0) 15726: __blen = __rlen = __buflen * __enc; 15726: else 15726: { 15726: __blen = __buflen + _M_codecvt->max_length() - 1; 15726: __rlen = __buflen; 15726: } 15726: const streamsize __remainder = _M_ext_end - _M_ext_next; 15726: __rlen = __rlen > __remainder ? __rlen - __remainder : 0; 15726: 15726: 15726: 15726: if (_M_reading && this->egptr() == this->eback() && __remainder) 15726: __rlen = 0; 15726: 15726: 15726: 15726: if (_M_ext_buf_size < __blen) 15726: { 15726: char* __buf = new char[__blen]; 15726: if (__remainder) 15726: __builtin_memcpy(__buf, _M_ext_next, __remainder); 15726: 15726: delete [] _M_ext_buf; 15726: _M_ext_buf = __buf; 15726: _M_ext_buf_size = __blen; 15726: } 15726: else if (__remainder) 15726: __builtin_memmove(_M_ext_buf, _M_ext_next, __remainder); 15726: 15726: _M_ext_next = _M_ext_buf; 15726: _M_ext_end = _M_ext_buf + __remainder; 15726: _M_state_last = _M_state_cur; 15726: 15726: do 15726: { 15726: if (__rlen > 0) 15726: { 15726: 15726: 15726: 15726: if (_M_ext_end - _M_ext_buf + __rlen > _M_ext_buf_size) 15726: { 15726: __throw_ios_failure(("basic_filebuf::underflow " "codecvt::max_length() " "is not valid") 15726: 15726: ); 15726: } 15726: streamsize __elen = _M_file.xsgetn(_M_ext_end, __rlen); 15726: if (__elen == 0) 15726: __got_eof = true; 15726: else if (__elen == -1) 15726: break; 15726: _M_ext_end += __elen; 15726: } 15726: 15726: char_type* __iend = this->eback(); 15726: if (_M_ext_next < _M_ext_end) 15726: __r = _M_codecvt->in(_M_state_cur, _M_ext_next, 15726: _M_ext_end, _M_ext_next, 15726: this->eback(), 15726: this->eback() + __buflen, __iend); 15726: if (__r == codecvt_base::noconv) 15726: { 15726: size_t __avail = _M_ext_end - _M_ext_buf; 15726: __ilen = std::min(__avail, __buflen); 15726: traits_type::copy(this->eback(), 15726: reinterpret_cast 15726: (_M_ext_buf), __ilen); 15726: _M_ext_next = _M_ext_buf + __ilen; 15726: } 15726: else 15726: __ilen = __iend - this->eback(); 15726: 15726: 15726: 15726: 15726: if (__r == codecvt_base::error) 15726: break; 15726: 15726: __rlen = 1; 15726: } 15726: while (__ilen == 0 && !__got_eof); 15726: } 15726: 15726: if (__ilen > 0) 15726: { 15726: _M_set_buffer(__ilen); 15726: _M_reading = true; 15726: __ret = traits_type::to_int_type(*this->gptr()); 15726: } 15726: else if (__got_eof) 15726: { 15726: 15726: 15726: 15726: _M_set_buffer(-1); 15726: _M_reading = false; 15726: 15726: 15726: if (__r == codecvt_base::partial) 15726: __throw_ios_failure(("basic_filebuf::underflow " "incomplete character in file") 15726: ); 15726: } 15726: else if (__r == codecvt_base::error) 15726: __throw_ios_failure(("basic_filebuf::underflow " "invalid byte sequence in file") 15726: ); 15726: else 15726: __throw_ios_failure(("basic_filebuf::underflow " "error reading the file") 15726: , (*__errno_location ())); 15726: } 15726: return __ret; 15726: } 15726: 15726: template 15726: typename basic_filebuf<_CharT, _Traits>::int_type 15726: basic_filebuf<_CharT, _Traits>:: 15726: pbackfail(int_type __i) 15726: { 15726: int_type __ret = traits_type::eof(); 15726: const bool __testin = _M_mode & ios_base::in; 15726: if (__testin) 15726: { 15726: if (_M_writing) 15726: { 15726: if (overflow() == traits_type::eof()) 15726: return __ret; 15726: _M_set_buffer(-1); 15726: _M_writing = false; 15726: } 15726: 15726: 15726: const bool __testpb = _M_pback_init; 15726: const bool __testeof = traits_type::eq_int_type(__i, __ret); 15726: int_type __tmp; 15726: if (this->eback() < this->gptr()) 15726: { 15726: this->gbump(-1); 15726: __tmp = traits_type::to_int_type(*this->gptr()); 15726: } 15726: else if (this->seekoff(-1, ios_base::cur) != pos_type(off_type(-1))) 15726: { 15726: __tmp = this->underflow(); 15726: if (traits_type::eq_int_type(__tmp, __ret)) 15726: return __ret; 15726: } 15726: else 15726: { 15726: 15726: 15726: 15726: 15726: 15726: return __ret; 15726: } 15726: 15726: 15726: 15726: if (!__testeof && traits_type::eq_int_type(__i, __tmp)) 15726: __ret = __i; 15726: else if (__testeof) 15726: __ret = traits_type::not_eof(__i); 15726: else if (!__testpb) 15726: { 15726: _M_create_pback(); 15726: _M_reading = true; 15726: *this->gptr() = traits_type::to_char_type(__i); 15726: __ret = __i; 15726: } 15726: } 15726: return __ret; 15726: } 15726: 15726: template 15726: typename basic_filebuf<_CharT, _Traits>::int_type 15726: basic_filebuf<_CharT, _Traits>:: 15726: overflow(int_type __c) 15726: { 15726: int_type __ret = traits_type::eof(); 15726: const bool __testeof = traits_type::eq_int_type(__c, __ret); 15726: const bool __testout = (_M_mode & ios_base::out 15726: || _M_mode & ios_base::app); 15726: if (__testout) 15726: { 15726: if (_M_reading) 15726: { 15726: _M_destroy_pback(); 15726: const int __gptr_off = _M_get_ext_pos(_M_state_last); 15726: if (_M_seek(__gptr_off, ios_base::cur, _M_state_last) 15726: == pos_type(off_type(-1))) 15726: return __ret; 15726: } 15726: if (this->pbase() < this->pptr()) 15726: { 15726: 15726: if (!__testeof) 15726: { 15726: *this->pptr() = traits_type::to_char_type(__c); 15726: this->pbump(1); 15726: } 15726: 15726: 15726: 15726: if (_M_convert_to_external(this->pbase(), 15726: this->pptr() - this->pbase())) 15726: { 15726: _M_set_buffer(0); 15726: __ret = traits_type::not_eof(__c); 15726: } 15726: } 15726: else if (_M_buf_size > 1) 15726: { 15726: 15726: 15726: 15726: _M_set_buffer(0); 15726: _M_writing = true; 15726: if (!__testeof) 15726: { 15726: *this->pptr() = traits_type::to_char_type(__c); 15726: this->pbump(1); 15726: } 15726: __ret = traits_type::not_eof(__c); 15726: } 15726: else 15726: { 15726: 15726: char_type __conv = traits_type::to_char_type(__c); 15726: if (__testeof || _M_convert_to_external(&__conv, 1)) 15726: { 15726: _M_writing = true; 15726: __ret = traits_type::not_eof(__c); 15726: } 15726: } 15726: } 15726: return __ret; 15726: } 15726: 15726: template 15726: bool 15726: basic_filebuf<_CharT, _Traits>:: 15726: _M_convert_to_external(_CharT* __ibuf, streamsize __ilen) 15726: { 15726: 15726: streamsize __elen; 15726: streamsize __plen; 15726: if (__check_facet(_M_codecvt).always_noconv()) 15726: { 15726: __elen = _M_file.xsputn(reinterpret_cast(__ibuf), __ilen); 15726: __plen = __ilen; 15726: } 15726: else 15726: { 15726: 15726: 15726: streamsize __blen = __ilen * _M_codecvt->max_length(); 15726: char* __buf = static_cast(__builtin_alloca(__blen)); 15726: 15726: char* __bend; 15726: const char_type* __iend; 15726: codecvt_base::result __r; 15726: __r = _M_codecvt->out(_M_state_cur, __ibuf, __ibuf + __ilen, 15726: __iend, __buf, __buf + __blen, __bend); 15726: 15726: if (__r == codecvt_base::ok || __r == codecvt_base::partial) 15726: __blen = __bend - __buf; 15726: else if (__r == codecvt_base::noconv) 15726: { 15726: 15726: __buf = reinterpret_cast(__ibuf); 15726: __blen = __ilen; 15726: } 15726: else 15726: __throw_ios_failure(("basic_filebuf::_M_convert_to_external " "conversion error") 15726: ); 15726: 15726: __elen = _M_file.xsputn(__buf, __blen); 15726: __plen = __blen; 15726: 15726: 15726: if (__r == codecvt_base::partial && __elen == __plen) 15726: { 15726: const char_type* __iresume = __iend; 15726: streamsize __rlen = this->pptr() - __iend; 15726: __r = _M_codecvt->out(_M_state_cur, __iresume, 15726: __iresume + __rlen, __iend, __buf, 15726: __buf + __blen, __bend); 15726: if (__r != codecvt_base::error) 15726: { 15726: __rlen = __bend - __buf; 15726: __elen = _M_file.xsputn(__buf, __rlen); 15726: __plen = __rlen; 15726: } 15726: else 15726: __throw_ios_failure(("basic_filebuf::_M_convert_to_external " "conversion error") 15726: ); 15726: } 15726: } 15726: return __elen == __plen; 15726: } 15726: 15726: template 15726: streamsize 15726: basic_filebuf<_CharT, _Traits>:: 15726: xsgetn(_CharT* __s, streamsize __n) 15726: { 15726: 15726: streamsize __ret = 0; 15726: if (_M_pback_init) 15726: { 15726: if (__n > 0 && this->gptr() == this->eback()) 15726: { 15726: *__s++ = *this->gptr(); 15726: this->gbump(1); 15726: __ret = 1; 15726: --__n; 15726: } 15726: _M_destroy_pback(); 15726: } 15726: else if (_M_writing) 15726: { 15726: if (overflow() == traits_type::eof()) 15726: return __ret; 15726: _M_set_buffer(-1); 15726: _M_writing = false; 15726: } 15726: 15726: 15726: 15726: 15726: const bool __testin = _M_mode & ios_base::in; 15726: const streamsize __buflen = _M_buf_size > 1 ? _M_buf_size - 1 : 1; 15726: 15726: if (__n > __buflen && __check_facet(_M_codecvt).always_noconv() 15726: && __testin) 15726: { 15726: 15726: const streamsize __avail = this->egptr() - this->gptr(); 15726: if (__avail != 0) 15726: { 15726: traits_type::copy(__s, this->gptr(), __avail); 15726: __s += __avail; 15726: this->setg(this->eback(), this->gptr() + __avail, this->egptr()); 15726: __ret += __avail; 15726: __n -= __avail; 15726: } 15726: 15726: 15726: 15726: streamsize __len; 15726: for (;;) 15726: { 15726: __len = _M_file.xsgetn(reinterpret_cast(__s), __n); 15726: if (__len == -1) 15726: __throw_ios_failure(("basic_filebuf::xsgetn " "error reading the file") 15726: , (*__errno_location ())); 15726: if (__len == 0) 15726: break; 15726: 15726: __n -= __len; 15726: __ret += __len; 15726: if (__n == 0) 15726: break; 15726: 15726: __s += __len; 15726: } 15726: 15726: if (__n == 0) 15726: { 15726: 15726: _M_reading = true; 15726: } 15726: else if (__len == 0) 15726: { 15726: 15726: 15726: 15726: _M_set_buffer(-1); 15726: _M_reading = false; 15726: } 15726: } 15726: else 15726: __ret += __streambuf_type::xsgetn(__s, __n); 15726: 15726: return __ret; 15726: } 15726: 15726: template 15726: streamsize 15726: basic_filebuf<_CharT, _Traits>:: 15726: xsputn(const _CharT* __s, streamsize __n) 15726: { 15726: streamsize __ret = 0; 15726: 15726: 15726: 15726: const bool __testout = (_M_mode & ios_base::out 15726: || _M_mode & ios_base::app); 15726: if (__check_facet(_M_codecvt).always_noconv() 15726: && __testout && !_M_reading) 15726: { 15726: streamsize __bufavail = this->epptr() - this->pptr(); 15726: 15726: 15726: if (!_M_writing && _M_buf_size > 1) 15726: __bufavail = _M_buf_size - 1; 15726: 15726: if (__n >= __bufavail) 15726: { 15726: const streamsize __buffill = this->pptr() - this->pbase(); 15726: const char* __buf = reinterpret_cast(this->pbase()); 15726: __ret = _M_file.xsputn_2(__buf, __buffill, 15726: reinterpret_cast(__s), 15726: __n); 15726: if (__ret == __buffill + __n) 15726: { 15726: _M_set_buffer(0); 15726: _M_writing = true; 15726: } 15726: if (__ret > __buffill) 15726: __ret -= __buffill; 15726: else 15726: __ret = 0; 15726: } 15726: else 15726: __ret = __streambuf_type::xsputn(__s, __n); 15726: } 15726: else 15726: __ret = __streambuf_type::xsputn(__s, __n); 15726: return __ret; 15726: } 15726: 15726: template 15726: typename basic_filebuf<_CharT, _Traits>::__streambuf_type* 15726: basic_filebuf<_CharT, _Traits>:: 15726: setbuf(char_type* __s, streamsize __n) 15726: { 15726: if (!this->is_open()) 15726: { 15726: if (__s == 0 && __n == 0) 15726: _M_buf_size = 1; 15726: else if (__s && __n > 0) 15726: { 15726: # 816 "/usr/include/c++/13/bits/fstream.tcc" 3 15726: _M_buf = __s; 15726: _M_buf_size = __n; 15726: } 15726: } 15726: return this; 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: typename basic_filebuf<_CharT, _Traits>::pos_type 15726: basic_filebuf<_CharT, _Traits>:: 15726: seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode) 15726: { 15726: int __width = 0; 15726: if (_M_codecvt) 15726: __width = _M_codecvt->encoding(); 15726: if (__width < 0) 15726: __width = 0; 15726: 15726: pos_type __ret = pos_type(off_type(-1)); 15726: const bool __testfail = __off != 0 && __width <= 0; 15726: if (this->is_open() && !__testfail) 15726: { 15726: 15726: 15726: 15726: 15726: bool __no_movement = __way == ios_base::cur && __off == 0 15726: && (!_M_writing || _M_codecvt->always_noconv()); 15726: 15726: 15726: if (!__no_movement) 15726: _M_destroy_pback(); 15726: 15726: 15726: 15726: 15726: 15726: 15726: __state_type __state = _M_state_beg; 15726: off_type __computed_off = __off * __width; 15726: if (_M_reading && __way == ios_base::cur) 15726: { 15726: __state = _M_state_last; 15726: __computed_off += _M_get_ext_pos(__state); 15726: } 15726: if (!__no_movement) 15726: __ret = _M_seek(__computed_off, __way, __state); 15726: else 15726: { 15726: if (_M_writing) 15726: __computed_off = this->pptr() - this->pbase(); 15726: 15726: off_type __file_off = _M_file.seekoff(0, ios_base::cur); 15726: if (__file_off != off_type(-1)) 15726: { 15726: __ret = __file_off + __computed_off; 15726: __ret.state(__state); 15726: } 15726: } 15726: } 15726: return __ret; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: typename basic_filebuf<_CharT, _Traits>::pos_type 15726: basic_filebuf<_CharT, _Traits>:: 15726: seekpos(pos_type __pos, ios_base::openmode) 15726: { 15726: pos_type __ret = pos_type(off_type(-1)); 15726: if (this->is_open()) 15726: { 15726: 15726: _M_destroy_pback(); 15726: __ret = _M_seek(off_type(__pos), ios_base::beg, __pos.state()); 15726: } 15726: return __ret; 15726: } 15726: 15726: template 15726: typename basic_filebuf<_CharT, _Traits>::pos_type 15726: basic_filebuf<_CharT, _Traits>:: 15726: _M_seek(off_type __off, ios_base::seekdir __way, __state_type __state) 15726: { 15726: pos_type __ret = pos_type(off_type(-1)); 15726: if (_M_terminate_output()) 15726: { 15726: off_type __file_off = _M_file.seekoff(__off, __way); 15726: if (__file_off != off_type(-1)) 15726: { 15726: _M_reading = false; 15726: _M_writing = false; 15726: _M_ext_next = _M_ext_end = _M_ext_buf; 15726: _M_set_buffer(-1); 15726: _M_state_cur = __state; 15726: __ret = __file_off; 15726: __ret.state(_M_state_cur); 15726: } 15726: } 15726: return __ret; 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: int basic_filebuf<_CharT, _Traits>:: 15726: _M_get_ext_pos(__state_type& __state) 15726: { 15726: if (_M_codecvt->always_noconv()) 15726: return this->gptr() - this->egptr(); 15726: else 15726: { 15726: 15726: 15726: 15726: const int __gptr_off = 15726: _M_codecvt->length(__state, _M_ext_buf, _M_ext_next, 15726: this->gptr() - this->eback()); 15726: return _M_ext_buf + __gptr_off - _M_ext_end; 15726: } 15726: } 15726: 15726: template 15726: bool 15726: basic_filebuf<_CharT, _Traits>:: 15726: _M_terminate_output() 15726: { 15726: 15726: bool __testvalid = true; 15726: if (this->pbase() < this->pptr()) 15726: { 15726: const int_type __tmp = this->overflow(); 15726: if (traits_type::eq_int_type(__tmp, traits_type::eof())) 15726: __testvalid = false; 15726: } 15726: 15726: 15726: if (_M_writing && !__check_facet(_M_codecvt).always_noconv() 15726: && __testvalid) 15726: { 15726: 15726: 15726: 15726: const size_t __blen = 128; 15726: char __buf[__blen]; 15726: codecvt_base::result __r; 15726: streamsize __ilen = 0; 15726: 15726: do 15726: { 15726: char* __next; 15726: __r = _M_codecvt->unshift(_M_state_cur, __buf, 15726: __buf + __blen, __next); 15726: if (__r == codecvt_base::error) 15726: __testvalid = false; 15726: else if (__r == codecvt_base::ok || 15726: __r == codecvt_base::partial) 15726: { 15726: __ilen = __next - __buf; 15726: if (__ilen > 0) 15726: { 15726: const streamsize __elen = _M_file.xsputn(__buf, __ilen); 15726: if (__elen != __ilen) 15726: __testvalid = false; 15726: } 15726: } 15726: } 15726: while (__r == codecvt_base::partial && __ilen > 0 && __testvalid); 15726: 15726: if (__testvalid) 15726: { 15726: 15726: 15726: 15726: 15726: const int_type __tmp = this->overflow(); 15726: if (traits_type::eq_int_type(__tmp, traits_type::eof())) 15726: __testvalid = false; 15726: } 15726: } 15726: return __testvalid; 15726: } 15726: 15726: template 15726: int 15726: basic_filebuf<_CharT, _Traits>:: 15726: sync() 15726: { 15726: 15726: 15726: int __ret = 0; 15726: if (this->pbase() < this->pptr()) 15726: { 15726: const int_type __tmp = this->overflow(); 15726: if (traits_type::eq_int_type(__tmp, traits_type::eof())) 15726: __ret = -1; 15726: } 15726: return __ret; 15726: } 15726: 15726: template 15726: void 15726: basic_filebuf<_CharT, _Traits>:: 15726: imbue(const locale& __loc) 15726: { 15726: bool __testvalid = true; 15726: 15726: const __codecvt_type* const _M_codecvt_tmp 15726: = __try_use_facet<__codecvt_type>(__loc); 15726: 15726: if (this->is_open()) 15726: { 15726: 15726: if ((_M_reading || _M_writing) 15726: && __check_facet(_M_codecvt).encoding() == -1) 15726: __testvalid = false; 15726: else 15726: { 15726: if (_M_reading) 15726: { 15726: if (__check_facet(_M_codecvt).always_noconv()) 15726: { 15726: if (_M_codecvt_tmp 15726: && !__check_facet(_M_codecvt_tmp).always_noconv()) 15726: __testvalid = this->seekoff(0, ios_base::cur, _M_mode) 15726: != pos_type(off_type(-1)); 15726: } 15726: else 15726: { 15726: 15726: _M_ext_next = _M_ext_buf 15726: + _M_codecvt->length(_M_state_last, _M_ext_buf, 15726: _M_ext_next, 15726: this->gptr() - this->eback()); 15726: const streamsize __remainder = _M_ext_end - _M_ext_next; 15726: if (__remainder) 15726: __builtin_memmove(_M_ext_buf, _M_ext_next, __remainder); 15726: 15726: _M_ext_next = _M_ext_buf; 15726: _M_ext_end = _M_ext_buf + __remainder; 15726: _M_set_buffer(-1); 15726: _M_state_last = _M_state_cur = _M_state_beg; 15726: } 15726: } 15726: else if (_M_writing && (__testvalid = _M_terminate_output())) 15726: _M_set_buffer(-1); 15726: } 15726: } 15726: 15726: if (__testvalid) 15726: _M_codecvt = _M_codecvt_tmp; 15726: else 15726: _M_codecvt = 0; 15726: } 15726: 15726: 15726: 15726: 15726: extern template class basic_filebuf; 15726: extern template class basic_ifstream; 15726: extern template class basic_ofstream; 15726: extern template class basic_fstream; 15726: 15726: 15726: extern template class basic_filebuf; 15726: extern template class basic_ifstream; 15726: extern template class basic_ofstream; 15726: extern template class basic_fstream; 15726: 15726: 15726: 15726: 15726: } 15726: # 1301 "/usr/include/c++/13/fstream" 2 3 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/io_tracer.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/monitoring/instrumented_mutex.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 15 "/build/reproducible-path/rocksdb-9.3.1/monitoring/instrumented_mutex.h" 15726: 15726: # 15 "/build/reproducible-path/rocksdb-9.3.1/monitoring/instrumented_mutex.h" 15726: namespace rocksdb { 15726: class InstrumentedCondVar; 15726: 15726: 15726: 15726: class InstrumentedMutex { 15726: public: 15726: explicit InstrumentedMutex(bool adaptive = false) 15726: : mutex_(adaptive), stats_(nullptr), clock_(nullptr), stats_code_(0) {} 15726: 15726: explicit InstrumentedMutex(SystemClock* clock, bool adaptive = false) 15726: : mutex_(adaptive), stats_(nullptr), clock_(clock), stats_code_(0) {} 15726: 15726: InstrumentedMutex(Statistics* stats, SystemClock* clock, int stats_code, 15726: bool adaptive = false) 15726: : mutex_(adaptive), 15726: stats_(stats), 15726: clock_(clock), 15726: stats_code_(stats_code) {} 15726: # 45 "/build/reproducible-path/rocksdb-9.3.1/monitoring/instrumented_mutex.h" 15726: void Lock(); 15726: 15726: void Unlock() { mutex_.Unlock(); } 15726: 15726: void AssertHeld() const { mutex_.AssertHeld(); } 15726: 15726: private: 15726: void LockInternal(); 15726: friend class InstrumentedCondVar; 15726: port::Mutex mutex_; 15726: Statistics* stats_; 15726: SystemClock* clock_; 15726: int stats_code_; 15726: 15726: 15726: 15726: }; 15726: 15726: class alignas(64U) CacheAlignedInstrumentedMutex 15726: : public InstrumentedMutex { 15726: using InstrumentedMutex::InstrumentedMutex; 15726: }; 15726: static_assert(alignof(CacheAlignedInstrumentedMutex) != 64U || 15726: sizeof(CacheAlignedInstrumentedMutex) % 64U == 0); 15726: 15726: 15726: class InstrumentedMutexLock { 15726: public: 15726: explicit InstrumentedMutexLock(InstrumentedMutex* mutex) : mutex_(mutex) { 15726: mutex_->Lock(); 15726: } 15726: 15726: ~InstrumentedMutexLock() { mutex_->Unlock(); } 15726: 15726: private: 15726: InstrumentedMutex* const mutex_; 15726: InstrumentedMutexLock(const InstrumentedMutexLock&) = delete; 15726: void operator=(const InstrumentedMutexLock&) = delete; 15726: }; 15726: 15726: 15726: 15726: class InstrumentedMutexUnlock { 15726: public: 15726: explicit InstrumentedMutexUnlock(InstrumentedMutex* mutex) : mutex_(mutex) { 15726: mutex_->Unlock(); 15726: } 15726: 15726: ~InstrumentedMutexUnlock() { mutex_->Lock(); } 15726: 15726: private: 15726: InstrumentedMutex* const mutex_; 15726: InstrumentedMutexUnlock(const InstrumentedMutexUnlock&) = delete; 15726: void operator=(const InstrumentedMutexUnlock&) = delete; 15726: }; 15726: 15726: class InstrumentedCondVar { 15726: public: 15726: explicit InstrumentedCondVar(InstrumentedMutex* instrumented_mutex) 15726: : cond_(&(instrumented_mutex->mutex_)), 15726: stats_(instrumented_mutex->stats_), 15726: clock_(instrumented_mutex->clock_), 15726: stats_code_(instrumented_mutex->stats_code_) {} 15726: 15726: void Wait(); 15726: 15726: bool TimedWait(uint64_t abs_time_us); 15726: 15726: void Signal() { cond_.Signal(); } 15726: 15726: void SignalAll() { cond_.SignalAll(); } 15726: 15726: private: 15726: void WaitInternal(); 15726: bool TimedWaitInternal(uint64_t abs_time_us); 15726: port::CondVar cond_; 15726: Statistics* stats_; 15726: SystemClock* clock_; 15726: int stats_code_; 15726: }; 15726: 15726: } 15726: # 12 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/io_tracer.h" 2 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/trace_record.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 16 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/trace_record.h" 15726: namespace rocksdb { 15726: 15726: class ColumnFamilyHandle; 15726: class DB; 15726: 15726: 15726: enum TraceType : char { 15726: kTraceNone = 0, 15726: kTraceBegin = 1, 15726: kTraceEnd = 2, 15726: 15726: kTraceWrite = 3, 15726: kTraceGet = 4, 15726: kTraceIteratorSeek = 5, 15726: kTraceIteratorSeekForPrev = 6, 15726: 15726: kBlockTraceIndexBlock = 7, 15726: 15726: kBlockTraceFilterBlock = 8, 15726: kBlockTraceDataBlock = 9, 15726: kBlockTraceUncompressionDictBlock = 10, 15726: kBlockTraceRangeDeletionBlock = 11, 15726: 15726: kIOTracer = 12, 15726: 15726: kTraceMultiGet = 13, 15726: 15726: kTraceMax, 15726: }; 15726: 15726: class GetQueryTraceRecord; 15726: class IteratorSeekQueryTraceRecord; 15726: class MultiGetQueryTraceRecord; 15726: class TraceRecordResult; 15726: class WriteQueryTraceRecord; 15726: 15726: 15726: class TraceRecord { 15726: public: 15726: explicit TraceRecord(uint64_t timestamp); 15726: 15726: virtual ~TraceRecord() = default; 15726: 15726: 15726: virtual TraceType GetTraceType() const = 0; 15726: 15726: 15726: virtual uint64_t GetTimestamp() const; 15726: 15726: class Handler { 15726: public: 15726: virtual ~Handler() = default; 15726: 15726: virtual Status Handle(const WriteQueryTraceRecord& record, 15726: std::unique_ptr* result) = 0; 15726: 15726: virtual Status Handle(const GetQueryTraceRecord& record, 15726: std::unique_ptr* result) = 0; 15726: 15726: virtual Status Handle(const IteratorSeekQueryTraceRecord& record, 15726: std::unique_ptr* result) = 0; 15726: 15726: virtual Status Handle(const MultiGetQueryTraceRecord& record, 15726: std::unique_ptr* result) = 0; 15726: }; 15726: 15726: 15726: virtual Status Accept(Handler* handler, 15726: std::unique_ptr* result) = 0; 15726: 15726: 15726: static Handler* NewExecutionHandler( 15726: DB* db, const std::vector& handles); 15726: 15726: private: 15726: uint64_t timestamp_; 15726: }; 15726: 15726: 15726: class QueryTraceRecord : public TraceRecord { 15726: public: 15726: explicit QueryTraceRecord(uint64_t timestamp); 15726: }; 15726: 15726: 15726: class WriteQueryTraceRecord : public QueryTraceRecord { 15726: public: 15726: WriteQueryTraceRecord(PinnableSlice&& write_batch_rep, uint64_t timestamp); 15726: 15726: WriteQueryTraceRecord(const std::string& write_batch_rep, uint64_t timestamp); 15726: 15726: ~WriteQueryTraceRecord() override; 15726: 15726: TraceType GetTraceType() const override { return kTraceWrite; } 15726: 15726: 15726: virtual Slice GetWriteBatchRep() const; 15726: 15726: Status Accept(Handler* handler, 15726: std::unique_ptr* result) override; 15726: 15726: private: 15726: PinnableSlice rep_; 15726: }; 15726: 15726: 15726: class GetQueryTraceRecord : public QueryTraceRecord { 15726: public: 15726: GetQueryTraceRecord(uint32_t column_family_id, PinnableSlice&& key, 15726: uint64_t timestamp); 15726: 15726: GetQueryTraceRecord(uint32_t column_family_id, const std::string& key, 15726: uint64_t timestamp); 15726: 15726: ~GetQueryTraceRecord() override; 15726: 15726: TraceType GetTraceType() const override { return kTraceGet; } 15726: 15726: 15726: virtual uint32_t GetColumnFamilyID() const; 15726: 15726: 15726: virtual Slice GetKey() const; 15726: 15726: Status Accept(Handler* handler, 15726: std::unique_ptr* result) override; 15726: 15726: private: 15726: uint32_t cf_id_; 15726: PinnableSlice key_; 15726: }; 15726: 15726: 15726: class IteratorQueryTraceRecord : public QueryTraceRecord { 15726: public: 15726: explicit IteratorQueryTraceRecord(uint64_t timestamp); 15726: 15726: IteratorQueryTraceRecord(PinnableSlice&& lower_bound, 15726: PinnableSlice&& upper_bound, uint64_t timestamp); 15726: 15726: IteratorQueryTraceRecord(const std::string& lower_bound, 15726: const std::string& upper_bound, uint64_t timestamp); 15726: 15726: ~IteratorQueryTraceRecord() override; 15726: 15726: 15726: 15726: virtual Slice GetLowerBound() const; 15726: virtual Slice GetUpperBound() const; 15726: 15726: private: 15726: PinnableSlice lower_; 15726: PinnableSlice upper_; 15726: }; 15726: 15726: 15726: class IteratorSeekQueryTraceRecord : public IteratorQueryTraceRecord { 15726: public: 15726: 15726: enum SeekType { 15726: kSeek = kTraceIteratorSeek, 15726: kSeekForPrev = kTraceIteratorSeekForPrev 15726: }; 15726: 15726: IteratorSeekQueryTraceRecord(SeekType seekType, uint32_t column_family_id, 15726: PinnableSlice&& key, uint64_t timestamp); 15726: 15726: IteratorSeekQueryTraceRecord(SeekType seekType, uint32_t column_family_id, 15726: const std::string& key, uint64_t timestamp); 15726: 15726: IteratorSeekQueryTraceRecord(SeekType seekType, uint32_t column_family_id, 15726: PinnableSlice&& key, PinnableSlice&& lower_bound, 15726: PinnableSlice&& upper_bound, uint64_t timestamp); 15726: 15726: IteratorSeekQueryTraceRecord(SeekType seekType, uint32_t column_family_id, 15726: const std::string& key, 15726: const std::string& lower_bound, 15726: const std::string& upper_bound, 15726: uint64_t timestamp); 15726: 15726: ~IteratorSeekQueryTraceRecord() override; 15726: 15726: 15726: TraceType GetTraceType() const override; 15726: 15726: 15726: virtual SeekType GetSeekType() const; 15726: 15726: 15726: virtual uint32_t GetColumnFamilyID() const; 15726: 15726: 15726: virtual Slice GetKey() const; 15726: 15726: Status Accept(Handler* handler, 15726: std::unique_ptr* result) override; 15726: 15726: private: 15726: SeekType type_; 15726: uint32_t cf_id_; 15726: PinnableSlice key_; 15726: }; 15726: 15726: 15726: class MultiGetQueryTraceRecord : public QueryTraceRecord { 15726: public: 15726: MultiGetQueryTraceRecord(std::vector column_family_ids, 15726: std::vector&& keys, 15726: uint64_t timestamp); 15726: 15726: MultiGetQueryTraceRecord(std::vector column_family_ids, 15726: const std::vector& keys, 15726: uint64_t timestamp); 15726: 15726: ~MultiGetQueryTraceRecord() override; 15726: 15726: TraceType GetTraceType() const override { return kTraceMultiGet; } 15726: 15726: 15726: virtual std::vector GetColumnFamilyIDs() const; 15726: 15726: 15726: virtual std::vector GetKeys() const; 15726: 15726: Status Accept(Handler* handler, 15726: std::unique_ptr* result) override; 15726: 15726: private: 15726: std::vector cf_ids_; 15726: std::vector keys_; 15726: }; 15726: 15726: } 15726: # 16 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/io_tracer.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/trace_replay.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 18 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/trace_replay.h" 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/utilities/replayer.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class TraceRecord; 15726: class TraceRecordResult; 15726: 15726: struct ReplayOptions { 15726: 15726: 15726: uint32_t num_threads; 15726: 15726: 15726: 15726: 15726: 15726: 15726: double fast_forward; 15726: 15726: ReplayOptions() : num_threads(1), fast_forward(1.0) {} 15726: 15726: ReplayOptions(uint32_t num_of_threads, double fast_forward_ratio) 15726: : num_threads(num_of_threads), fast_forward(fast_forward_ratio) {} 15726: }; 15726: 15726: 15726: 15726: 15726: class Replayer { 15726: public: 15726: virtual ~Replayer() = default; 15726: 15726: 15726: 15726: virtual Status Prepare() = 0; 15726: 15726: 15726: virtual uint64_t GetHeaderTimestamp() const = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status Next(std::unique_ptr* record) = 0; 15726: # 71 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/utilities/replayer.h" 15726: virtual Status Execute(const std::unique_ptr& record, 15726: std::unique_ptr* result) = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status Replay( 15726: const ReplayOptions& options, 15726: const std::function&&)>& 15726: result_callback) = 0; 15726: }; 15726: 15726: } 15726: # 19 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/trace_replay.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: class ColumnFamilyHandle; 15726: class ColumnFamilyData; 15726: class DB; 15726: class DBImpl; 15726: class Env; 15726: class Slice; 15726: class SystemClock; 15726: class TraceReader; 15726: class TraceWriter; 15726: class WriteBatch; 15726: 15726: struct ReadOptions; 15726: struct TraceOptions; 15726: struct WriteOptions; 15726: 15726: extern const std::string kTraceMagic; 15726: const unsigned int kTraceTimestampSize = 8; 15726: const unsigned int kTraceTypeSize = 1; 15726: const unsigned int kTracePayloadLengthSize = 4; 15726: const unsigned int kTraceMetadataSize = 15726: kTraceTimestampSize + kTraceTypeSize + kTracePayloadLengthSize; 15726: 15726: static const int kTraceFileMajorVersion = 0; 15726: static const int kTraceFileMinorVersion = 2; 15726: 15726: 15726: struct Trace { 15726: uint64_t ts; 15726: TraceType type; 15726: 15726: 15726: 15726: 15726: uint64_t payload_map = 0; 15726: 15726: 15726: std::string payload; 15726: 15726: void reset() { 15726: ts = 0; 15726: type = kTraceMax; 15726: payload_map = 0; 15726: payload.clear(); 15726: } 15726: }; 15726: 15726: enum TracePayloadType : char { 15726: 15726: 15726: kEmptyPayload = 0, 15726: kWriteBatchData = 1, 15726: kGetCFID = 2, 15726: kGetKey = 3, 15726: kIterCFID = 4, 15726: kIterKey = 5, 15726: kIterLowerBound = 6, 15726: kIterUpperBound = 7, 15726: kMultiGetSize = 8, 15726: kMultiGetCFIDs = 9, 15726: kMultiGetKeys = 10, 15726: }; 15726: 15726: class TracerHelper { 15726: public: 15726: 15726: static Status ParseVersionStr(std::string& v_string, int* v_num); 15726: 15726: 15726: static Status ParseTraceHeader(const Trace& header, int* trace_version, 15726: int* db_version); 15726: 15726: 15726: static void EncodeTrace(const Trace& trace, std::string* encoded_trace); 15726: 15726: 15726: static Status DecodeTrace(const std::string& encoded_trace, Trace* trace); 15726: 15726: 15726: static Status DecodeHeader(const std::string& encoded_trace, Trace* header); 15726: 15726: 15726: static bool SetPayloadMap(uint64_t& payload_map, 15726: const TracePayloadType payload_type); 15726: 15726: 15726: 15726: 15726: 15726: static Status DecodeTraceRecord(Trace* trace, int trace_file_version, 15726: std::unique_ptr* record); 15726: }; 15726: 15726: 15726: 15726: 15726: class Tracer { 15726: public: 15726: Tracer(SystemClock* clock, const TraceOptions& trace_options, 15726: std::unique_ptr&& trace_writer); 15726: ~Tracer(); 15726: 15726: 15726: Status Write(WriteBatch* write_batch); 15726: 15726: 15726: Status Get(ColumnFamilyHandle* cfname, const Slice& key); 15726: 15726: 15726: Status IteratorSeek(const uint32_t& cf_id, const Slice& key, 15726: const Slice& lower_bound, const Slice upper_bound); 15726: Status IteratorSeekForPrev(const uint32_t& cf_id, const Slice& key, 15726: const Slice& lower_bound, const Slice upper_bound); 15726: 15726: 15726: 15726: Status MultiGet(const size_t num_keys, ColumnFamilyHandle** column_families, 15726: const Slice* keys); 15726: 15726: Status MultiGet(const size_t num_keys, ColumnFamilyHandle* column_family, 15726: const Slice* keys); 15726: 15726: Status MultiGet(const std::vector& column_family, 15726: const std::vector& keys); 15726: 15726: 15726: 15726: bool IsTraceFileOverMax(); 15726: 15726: 15726: 15726: bool IsWriteOrderPreserved() { return trace_options_.preserve_write_order; } 15726: 15726: 15726: Status Close(); 15726: 15726: private: 15726: 15726: 15726: 15726: Status WriteHeader(); 15726: 15726: 15726: Status WriteFooter(); 15726: 15726: 15726: 15726: Status WriteTrace(const Trace& trace); 15726: 15726: 15726: 15726: bool ShouldSkipTrace(const TraceType& type); 15726: 15726: SystemClock* clock_; 15726: TraceOptions trace_options_; 15726: std::unique_ptr trace_writer_; 15726: uint64_t trace_request_count_; 15726: Status trace_write_status_; 15726: }; 15726: 15726: } 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/io_tracer.h" 2 15726: 15726: namespace rocksdb { 15726: class SystemClock; 15726: class TraceReader; 15726: class TraceWriter; 15726: # 32 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/io_tracer.h" 15726: enum IOTraceOp : char { 15726: 15726: 15726: kIOFileSize = 0, 15726: kIOLen = 1, 15726: kIOOffset = 2, 15726: }; 15726: 15726: struct IOTraceRecord { 15726: 15726: uint64_t access_timestamp = 0; 15726: TraceType trace_type = TraceType::kTraceMax; 15726: 15726: 15726: 15726: uint64_t io_op_data = 0; 15726: std::string file_operation; 15726: uint64_t latency = 0; 15726: std::string io_status; 15726: 15726: std::string file_name; 15726: 15726: 15726: uint64_t len = 0; 15726: uint64_t offset = 0; 15726: uint64_t file_size = 0; 15726: 15726: 15726: uint64_t trace_data = 0; 15726: std::string request_id; 15726: 15726: IOTraceRecord() {} 15726: 15726: IOTraceRecord(const uint64_t& _access_timestamp, const TraceType& _trace_type, 15726: const uint64_t& _io_op_data, const std::string& _file_operation, 15726: const uint64_t& _latency, const std::string& _io_status, 15726: const std::string& _file_name, const uint64_t& _file_size = 0) 15726: : access_timestamp(_access_timestamp), 15726: trace_type(_trace_type), 15726: io_op_data(_io_op_data), 15726: file_operation(_file_operation), 15726: latency(_latency), 15726: io_status(_io_status), 15726: file_name(_file_name), 15726: file_size(_file_size) {} 15726: 15726: IOTraceRecord(const uint64_t& _access_timestamp, const TraceType& _trace_type, 15726: const uint64_t& _io_op_data, const std::string& _file_operation, 15726: const uint64_t& _latency, const std::string& _io_status, 15726: const std::string& _file_name, const uint64_t& _len, 15726: const uint64_t& _offset) 15726: : access_timestamp(_access_timestamp), 15726: trace_type(_trace_type), 15726: io_op_data(_io_op_data), 15726: file_operation(_file_operation), 15726: latency(_latency), 15726: io_status(_io_status), 15726: file_name(_file_name), 15726: len(_len), 15726: offset(_offset) {} 15726: }; 15726: 15726: struct IOTraceHeader { 15726: uint64_t start_time; 15726: uint32_t rocksdb_major_version; 15726: uint32_t rocksdb_minor_version; 15726: }; 15726: 15726: 15726: 15726: class IOTraceWriter { 15726: public: 15726: IOTraceWriter(SystemClock* clock, const TraceOptions& trace_options, 15726: std::unique_ptr&& trace_writer); 15726: ~IOTraceWriter() = default; 15726: 15726: IOTraceWriter(const IOTraceWriter&) = delete; 15726: IOTraceWriter& operator=(const IOTraceWriter&) = delete; 15726: IOTraceWriter(IOTraceWriter&&) = delete; 15726: IOTraceWriter& operator=(IOTraceWriter&&) = delete; 15726: 15726: Status WriteIOOp(const IOTraceRecord& record, IODebugContext* dbg); 15726: 15726: 15726: 15726: Status WriteHeader(); 15726: 15726: private: 15726: SystemClock* clock_; 15726: TraceOptions trace_options_; 15726: std::unique_ptr trace_writer_; 15726: }; 15726: 15726: 15726: class IOTraceReader { 15726: public: 15726: explicit IOTraceReader(std::unique_ptr&& reader); 15726: ~IOTraceReader() = default; 15726: 15726: IOTraceReader(const IOTraceReader&) = delete; 15726: IOTraceReader& operator=(const IOTraceReader&) = delete; 15726: IOTraceReader(IOTraceReader&&) = delete; 15726: IOTraceReader& operator=(IOTraceReader&&) = delete; 15726: 15726: Status ReadHeader(IOTraceHeader* header); 15726: 15726: Status ReadIOOp(IOTraceRecord* record); 15726: 15726: private: 15726: std::unique_ptr trace_reader_; 15726: }; 15726: 15726: 15726: 15726: class IOTracer { 15726: public: 15726: IOTracer(); 15726: ~IOTracer(); 15726: 15726: IOTracer(const IOTracer&) = delete; 15726: IOTracer& operator=(const IOTracer&) = delete; 15726: IOTracer(IOTracer&&) = delete; 15726: IOTracer& operator=(IOTracer&&) = delete; 15726: # 163 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/io_tracer.h" 15726: Status 15726: StartIOTrace(SystemClock* clock, const TraceOptions& trace_options, 15726: std::unique_ptr&& trace_writer); 15726: 15726: 15726: void EndIOTrace(); 15726: 15726: bool is_tracing_enabled() const { return tracing_enabled; } 15726: 15726: void WriteIOOp(const IOTraceRecord& record, IODebugContext* dbg); 15726: 15726: private: 15726: TraceOptions trace_options_; 15726: 15726: InstrumentedMutex trace_writer_mutex_; 15726: std::atomic writer_; 15726: 15726: 15726: 15726: bool tracing_enabled; 15726: }; 15726: 15726: } 15726: # 11 "/build/reproducible-path/rocksdb-9.3.1/env/file_system_tracer.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: class FileSystemTracingWrapper : public FileSystemWrapper { 15726: public: 15726: FileSystemTracingWrapper(const std::shared_ptr& t, 15726: const std::shared_ptr& io_tracer) 15726: : FileSystemWrapper(t), 15726: io_tracer_(io_tracer), 15726: clock_(SystemClock::Default().get()) {} 15726: 15726: ~FileSystemTracingWrapper() override {} 15726: 15726: static const char* kClassName() { return "FileSystemTracing"; } 15726: const char* Name() const override { return kClassName(); } 15726: 15726: IOStatus NewSequentialFile(const std::string& fname, 15726: const FileOptions& file_opts, 15726: std::unique_ptr* result, 15726: IODebugContext* dbg) override; 15726: 15726: IOStatus NewRandomAccessFile(const std::string& fname, 15726: const FileOptions& file_opts, 15726: std::unique_ptr* result, 15726: IODebugContext* dbg) override; 15726: 15726: IOStatus NewWritableFile(const std::string& fname, 15726: const FileOptions& file_opts, 15726: std::unique_ptr* result, 15726: IODebugContext* dbg) override; 15726: 15726: IOStatus ReopenWritableFile(const std::string& fname, 15726: const FileOptions& file_opts, 15726: std::unique_ptr* result, 15726: IODebugContext* dbg) override; 15726: 15726: IOStatus ReuseWritableFile(const std::string& fname, 15726: const std::string& old_fname, 15726: const FileOptions& file_opts, 15726: std::unique_ptr* result, 15726: IODebugContext* dbg) override; 15726: 15726: IOStatus NewRandomRWFile(const std::string& fname, const FileOptions& options, 15726: std::unique_ptr* result, 15726: IODebugContext* dbg) override; 15726: 15726: IOStatus NewDirectory(const std::string& name, const IOOptions& io_opts, 15726: std::unique_ptr* result, 15726: IODebugContext* dbg) override; 15726: 15726: IOStatus GetChildren(const std::string& dir, const IOOptions& io_opts, 15726: std::vector* r, 15726: IODebugContext* dbg) override; 15726: 15726: IOStatus DeleteFile(const std::string& fname, const IOOptions& options, 15726: IODebugContext* dbg) override; 15726: 15726: IOStatus CreateDir(const std::string& dirname, const IOOptions& options, 15726: IODebugContext* dbg) override; 15726: 15726: IOStatus CreateDirIfMissing(const std::string& dirname, 15726: const IOOptions& options, 15726: IODebugContext* dbg) override; 15726: 15726: IOStatus DeleteDir(const std::string& dirname, const IOOptions& options, 15726: IODebugContext* dbg) override; 15726: 15726: IOStatus GetFileSize(const std::string& fname, const IOOptions& options, 15726: uint64_t* file_size, IODebugContext* dbg) override; 15726: 15726: IOStatus Truncate(const std::string& fname, size_t size, 15726: const IOOptions& options, IODebugContext* dbg) override; 15726: 15726: private: 15726: std::shared_ptr io_tracer_; 15726: SystemClock* clock_; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: class FileSystemPtr { 15726: public: 15726: FileSystemPtr(std::shared_ptr fs, 15726: const std::shared_ptr& io_tracer) 15726: : fs_(fs), io_tracer_(io_tracer) { 15726: fs_tracer_ = std::make_shared(fs_, io_tracer_); 15726: } 15726: 15726: std::shared_ptr operator->() const { 15726: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 15726: return fs_tracer_; 15726: } else { 15726: return fs_; 15726: } 15726: } 15726: 15726: 15726: FileSystem* get() const { 15726: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 15726: return fs_tracer_.get(); 15726: } else { 15726: return fs_.get(); 15726: } 15726: } 15726: 15726: private: 15726: std::shared_ptr fs_; 15726: std::shared_ptr io_tracer_; 15726: std::shared_ptr fs_tracer_; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: class FSSequentialFileTracingWrapper : public FSSequentialFileOwnerWrapper { 15726: public: 15726: FSSequentialFileTracingWrapper(std::unique_ptr&& t, 15726: std::shared_ptr io_tracer, 15726: const std::string& file_name) 15726: : FSSequentialFileOwnerWrapper(std::move(t)), 15726: io_tracer_(io_tracer), 15726: clock_(SystemClock::Default().get()), 15726: file_name_(file_name) {} 15726: 15726: ~FSSequentialFileTracingWrapper() override {} 15726: 15726: IOStatus Read(size_t n, const IOOptions& options, Slice* result, 15726: char* scratch, IODebugContext* dbg) override; 15726: 15726: IOStatus InvalidateCache(size_t offset, size_t length) override; 15726: 15726: IOStatus PositionedRead(uint64_t offset, size_t n, const IOOptions& options, 15726: Slice* result, char* scratch, 15726: IODebugContext* dbg) override; 15726: 15726: private: 15726: std::shared_ptr io_tracer_; 15726: SystemClock* clock_; 15726: std::string file_name_; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: class FSSequentialFilePtr { 15726: public: 15726: FSSequentialFilePtr() = delete; 15726: FSSequentialFilePtr(std::unique_ptr&& fs, 15726: const std::shared_ptr& io_tracer, 15726: const std::string& file_name) 15726: : io_tracer_(io_tracer), 15726: fs_tracer_(std::move(fs), io_tracer_, 15726: file_name.substr(file_name.find_last_of("/\\") + 15726: 1) ) {} 15726: 15726: FSSequentialFile* operator->() const { 15726: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 15726: return const_cast(&fs_tracer_); 15726: } else { 15726: return fs_tracer_.target(); 15726: } 15726: } 15726: 15726: FSSequentialFile* get() const { 15726: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 15726: return const_cast(&fs_tracer_); 15726: } else { 15726: return fs_tracer_.target(); 15726: } 15726: } 15726: 15726: private: 15726: std::shared_ptr io_tracer_; 15726: FSSequentialFileTracingWrapper fs_tracer_; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: class FSRandomAccessFileTracingWrapper : public FSRandomAccessFileOwnerWrapper { 15726: public: 15726: FSRandomAccessFileTracingWrapper(std::unique_ptr&& t, 15726: std::shared_ptr io_tracer, 15726: const std::string& file_name) 15726: : FSRandomAccessFileOwnerWrapper(std::move(t)), 15726: io_tracer_(io_tracer), 15726: clock_(SystemClock::Default().get()), 15726: file_name_(file_name) {} 15726: 15726: ~FSRandomAccessFileTracingWrapper() override {} 15726: 15726: IOStatus Read(uint64_t offset, size_t n, const IOOptions& options, 15726: Slice* result, char* scratch, 15726: IODebugContext* dbg) const override; 15726: 15726: IOStatus MultiRead(FSReadRequest* reqs, size_t num_reqs, 15726: const IOOptions& options, IODebugContext* dbg) override; 15726: 15726: IOStatus Prefetch(uint64_t offset, size_t n, const IOOptions& options, 15726: IODebugContext* dbg) override; 15726: 15726: IOStatus InvalidateCache(size_t offset, size_t length) override; 15726: 15726: IOStatus ReadAsync(FSReadRequest& req, const IOOptions& opts, 15726: std::function cb, 15726: void* cb_arg, void** io_handle, IOHandleDeleter* del_fn, 15726: IODebugContext* dbg) override; 15726: 15726: void ReadAsyncCallback(FSReadRequest& req, void* cb_arg); 15726: 15726: private: 15726: std::shared_ptr io_tracer_; 15726: SystemClock* clock_; 15726: 15726: std::string file_name_; 15726: 15726: struct ReadAsyncCallbackInfo { 15726: uint64_t start_time_; 15726: std::function cb_; 15726: void* cb_arg_; 15726: std::string file_op_; 15726: }; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: class FSRandomAccessFilePtr { 15726: public: 15726: FSRandomAccessFilePtr(std::unique_ptr&& fs, 15726: const std::shared_ptr& io_tracer, 15726: const std::string& file_name) 15726: : io_tracer_(io_tracer), 15726: fs_tracer_(std::move(fs), io_tracer_, 15726: file_name.substr(file_name.find_last_of("/\\") + 15726: 1) ) {} 15726: 15726: FSRandomAccessFile* operator->() const { 15726: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 15726: return const_cast(&fs_tracer_); 15726: } else { 15726: return fs_tracer_.target(); 15726: } 15726: } 15726: 15726: FSRandomAccessFile* get() const { 15726: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 15726: return const_cast(&fs_tracer_); 15726: } else { 15726: return fs_tracer_.target(); 15726: } 15726: } 15726: 15726: private: 15726: std::shared_ptr io_tracer_; 15726: FSRandomAccessFileTracingWrapper fs_tracer_; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: class FSWritableFileTracingWrapper : public FSWritableFileOwnerWrapper { 15726: public: 15726: FSWritableFileTracingWrapper(std::unique_ptr&& t, 15726: std::shared_ptr io_tracer, 15726: const std::string& file_name) 15726: : FSWritableFileOwnerWrapper(std::move(t)), 15726: io_tracer_(io_tracer), 15726: clock_(SystemClock::Default().get()), 15726: file_name_(file_name) {} 15726: 15726: ~FSWritableFileTracingWrapper() override {} 15726: 15726: IOStatus Append(const Slice& data, const IOOptions& options, 15726: IODebugContext* dbg) override; 15726: IOStatus Append(const Slice& data, const IOOptions& options, 15726: const DataVerificationInfo& , 15726: IODebugContext* dbg) override { 15726: return Append(data, options, dbg); 15726: } 15726: 15726: IOStatus PositionedAppend(const Slice& data, uint64_t offset, 15726: const IOOptions& options, 15726: IODebugContext* dbg) override; 15726: IOStatus PositionedAppend(const Slice& data, uint64_t offset, 15726: const IOOptions& options, 15726: const DataVerificationInfo& , 15726: IODebugContext* dbg) override { 15726: return PositionedAppend(data, offset, options, dbg); 15726: } 15726: 15726: IOStatus Truncate(uint64_t size, const IOOptions& options, 15726: IODebugContext* dbg) override; 15726: 15726: IOStatus Close(const IOOptions& options, IODebugContext* dbg) override; 15726: 15726: uint64_t GetFileSize(const IOOptions& options, IODebugContext* dbg) override; 15726: 15726: IOStatus InvalidateCache(size_t offset, size_t length) override; 15726: 15726: private: 15726: std::shared_ptr io_tracer_; 15726: SystemClock* clock_; 15726: 15726: std::string file_name_; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: class FSWritableFilePtr { 15726: public: 15726: FSWritableFilePtr(std::unique_ptr&& fs, 15726: const std::shared_ptr& io_tracer, 15726: const std::string& file_name) 15726: : io_tracer_(io_tracer) { 15726: fs_tracer_.reset(new FSWritableFileTracingWrapper( 15726: std::move(fs), io_tracer_, 15726: file_name.substr(file_name.find_last_of("/\\") + 15726: 1) )); 15726: } 15726: 15726: FSWritableFile* operator->() const { 15726: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 15726: return fs_tracer_.get(); 15726: } else { 15726: return fs_tracer_->target(); 15726: } 15726: } 15726: 15726: FSWritableFile* get() const { 15726: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 15726: return fs_tracer_.get(); 15726: } else if (fs_tracer_) { 15726: return fs_tracer_->target(); 15726: } else { 15726: return nullptr; 15726: } 15726: } 15726: 15726: void reset() { 15726: fs_tracer_.reset(); 15726: io_tracer_ = nullptr; 15726: } 15726: 15726: private: 15726: std::shared_ptr io_tracer_; 15726: std::unique_ptr fs_tracer_; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: class FSRandomRWFileTracingWrapper : public FSRandomRWFileOwnerWrapper { 15726: public: 15726: FSRandomRWFileTracingWrapper(std::unique_ptr&& t, 15726: std::shared_ptr io_tracer, 15726: const std::string& file_name) 15726: : FSRandomRWFileOwnerWrapper(std::move(t)), 15726: io_tracer_(io_tracer), 15726: clock_(SystemClock::Default().get()), 15726: file_name_(file_name) {} 15726: 15726: ~FSRandomRWFileTracingWrapper() override {} 15726: 15726: IOStatus Write(uint64_t offset, const Slice& data, const IOOptions& options, 15726: IODebugContext* dbg) override; 15726: 15726: IOStatus Read(uint64_t offset, size_t n, const IOOptions& options, 15726: Slice* result, char* scratch, 15726: IODebugContext* dbg) const override; 15726: 15726: IOStatus Flush(const IOOptions& options, IODebugContext* dbg) override; 15726: 15726: IOStatus Close(const IOOptions& options, IODebugContext* dbg) override; 15726: 15726: IOStatus Sync(const IOOptions& options, IODebugContext* dbg) override; 15726: 15726: IOStatus Fsync(const IOOptions& options, IODebugContext* dbg) override; 15726: 15726: private: 15726: std::shared_ptr io_tracer_; 15726: SystemClock* clock_; 15726: 15726: std::string file_name_; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: class FSRandomRWFilePtr { 15726: public: 15726: FSRandomRWFilePtr(std::unique_ptr&& fs, 15726: std::shared_ptr io_tracer, 15726: const std::string& file_name) 15726: : io_tracer_(io_tracer), 15726: fs_tracer_(std::move(fs), io_tracer_, 15726: file_name.substr(file_name.find_last_of("/\\") + 15726: 1) ) {} 15726: 15726: FSRandomRWFile* operator->() const { 15726: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 15726: return const_cast(&fs_tracer_); 15726: } else { 15726: return fs_tracer_.target(); 15726: } 15726: } 15726: 15726: FSRandomRWFile* get() const { 15726: if (io_tracer_ && io_tracer_->is_tracing_enabled()) { 15726: return const_cast(&fs_tracer_); 15726: } else { 15726: return fs_tracer_.target(); 15726: } 15726: } 15726: 15726: private: 15726: std::shared_ptr io_tracer_; 15726: FSRandomRWFileTracingWrapper fs_tracer_; 15726: }; 15726: 15726: } 15726: # 16 "/build/reproducible-path/rocksdb-9.3.1/file/random_access_file_reader.h" 2 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: class RateLimiter { 15726: public: 15726: enum class OpType { 15726: kRead, 15726: kWrite, 15726: }; 15726: 15726: enum class Mode { 15726: kReadsOnly = 0, 15726: kWritesOnly = 1, 15726: kAllIo = 2, 15726: }; 15726: 15726: 15726: explicit RateLimiter(Mode mode = Mode::kWritesOnly) : mode_(mode) {} 15726: 15726: virtual ~RateLimiter() {} 15726: 15726: 15726: 15726: virtual void SetBytesPerSecond(int64_t bytes_per_second) = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status SetSingleBurstBytes(int64_t ) { 15726: return Status::NotSupported(); 15726: } 15726: # 62 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 15726: virtual void Request(const int64_t , const Env::IOPriority ) { 15726: 15726: # 63 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 3 4 15726: (static_cast ( 15726: # 63 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 15726: false 15726: # 63 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 63 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 15726: "false" 15726: # 63 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 63 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 15726: ; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: virtual void Request(const int64_t bytes, const Env::IOPriority pri, 15726: Statistics* ) { 15726: 15726: 15726: Request(bytes, pri); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void Request(const int64_t bytes, const Env::IOPriority pri, 15726: Statistics* stats, OpType op_type) { 15726: if (IsRateLimited(op_type)) { 15726: Request(bytes, pri, stats); 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: virtual size_t RequestToken(size_t bytes, size_t alignment, 15726: Env::IOPriority io_priority, Statistics* stats, 15726: RateLimiter::OpType op_type); 15726: 15726: 15726: virtual int64_t GetSingleBurstBytes() const = 0; 15726: 15726: 15726: virtual int64_t GetTotalBytesThrough( 15726: const Env::IOPriority pri = Env::IO_TOTAL) const = 0; 15726: 15726: 15726: virtual int64_t GetTotalRequests( 15726: const Env::IOPriority pri = Env::IO_TOTAL) const = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status GetTotalPendingRequests( 15726: int64_t* total_pending_requests, 15726: const Env::IOPriority pri = Env::IO_TOTAL) const { 15726: 15726: # 116 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 3 4 15726: (static_cast ( 15726: # 116 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 15726: total_pending_requests != nullptr 15726: # 116 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 116 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 15726: "total_pending_requests != nullptr" 15726: # 116 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 116 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 15726: ; 15726: (void)total_pending_requests; 15726: (void)pri; 15726: return Status::NotSupported(); 15726: } 15726: 15726: virtual int64_t GetBytesPerSecond() const = 0; 15726: 15726: virtual bool IsRateLimited(OpType op_type) { 15726: if ((mode_ == RateLimiter::Mode::kWritesOnly && 15726: op_type == RateLimiter::OpType::kRead) || 15726: (mode_ == RateLimiter::Mode::kReadsOnly && 15726: op_type == RateLimiter::OpType::kWrite)) { 15726: return false; 15726: } 15726: return true; 15726: } 15726: 15726: protected: 15726: Mode GetMode() { return mode_; } 15726: 15726: private: 15726: const Mode mode_; 15726: }; 15726: # 166 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/rate_limiter.h" 15726: RateLimiter* NewGenericRateLimiter( 15726: int64_t rate_bytes_per_sec, int64_t refill_period_us = 100 * 1000, 15726: int32_t fairness = 10, 15726: RateLimiter::Mode mode = RateLimiter::Mode::kWritesOnly, 15726: bool auto_tuned = false, int64_t single_burst_bytes = 0); 15726: 15726: } 15726: # 21 "/build/reproducible-path/rocksdb-9.3.1/file/random_access_file_reader.h" 2 15726: 15726: 15726: namespace rocksdb { 15726: class Statistics; 15726: class HistogramImpl; 15726: class SystemClock; 15726: 15726: using AlignedBuf = std::unique_ptr; 15726: 15726: 15726: FSReadRequest Align(const FSReadRequest& r, size_t alignment); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool TryMerge(FSReadRequest* dest, const FSReadRequest& src); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: class RandomAccessFileReader { 15726: private: 15726: void NotifyOnFileReadFinish( 15726: uint64_t offset, size_t length, 15726: const FileOperationInfo::StartTimePoint& start_ts, 15726: const FileOperationInfo::FinishTimePoint& finish_ts, 15726: const Status& status) const { 15726: FileOperationInfo info(FileOperationType::kRead, file_name_, start_ts, 15726: finish_ts, status, file_temperature_); 15726: info.offset = offset; 15726: info.length = length; 15726: 15726: for (auto& listener : listeners_) { 15726: listener->OnFileReadFinish(info); 15726: } 15726: info.status.PermitUncheckedError(); 15726: } 15726: 15726: void NotifyOnIOError(const IOStatus& io_status, FileOperationType operation, 15726: const std::string& file_path, size_t length, 15726: uint64_t offset) const { 15726: if (listeners_.empty()) { 15726: return; 15726: } 15726: IOErrorInfo io_error_info(io_status, operation, file_path, length, offset); 15726: 15726: for (auto& listener : listeners_) { 15726: listener->OnIOError(io_error_info); 15726: } 15726: io_status.PermitUncheckedError(); 15726: } 15726: 15726: 15726: bool ShouldNotifyListeners() const { return !listeners_.empty(); } 15726: 15726: FSRandomAccessFilePtr file_; 15726: std::string file_name_; 15726: SystemClock* clock_; 15726: Statistics* stats_; 15726: uint32_t hist_type_; 15726: HistogramImpl* file_read_hist_; 15726: RateLimiter* rate_limiter_; 15726: std::vector> listeners_; 15726: const Temperature file_temperature_; 15726: const bool is_last_level_; 15726: 15726: struct ReadAsyncInfo { 15726: ReadAsyncInfo(std::function cb, void* cb_arg, 15726: uint64_t start_time) 15726: : cb_(cb), 15726: cb_arg_(cb_arg), 15726: start_time_(start_time), 15726: user_scratch_(nullptr), 15726: user_aligned_buf_(nullptr), 15726: user_offset_(0), 15726: user_len_(0), 15726: is_aligned_(false) {} 15726: 15726: std::function cb_; 15726: void* cb_arg_; 15726: uint64_t start_time_; 15726: FileOperationInfo::StartTimePoint fs_start_ts_; 15726: 15726: char* user_scratch_; 15726: AlignedBuf* user_aligned_buf_; 15726: uint64_t user_offset_; 15726: size_t user_len_; 15726: Slice user_result_; 15726: 15726: AlignedBuffer buf_; 15726: bool is_aligned_; 15726: }; 15726: 15726: public: 15726: explicit RandomAccessFileReader( 15726: std::unique_ptr&& raf, const std::string& _file_name, 15726: SystemClock* clock = nullptr, 15726: const std::shared_ptr& io_tracer = nullptr, 15726: Statistics* stats = nullptr, 15726: uint32_t hist_type = Histograms::HISTOGRAM_ENUM_MAX, 15726: HistogramImpl* file_read_hist = nullptr, 15726: RateLimiter* rate_limiter = nullptr, 15726: const std::vector>& listeners = {}, 15726: Temperature file_temperature = Temperature::kUnknown, 15726: bool is_last_level = false) 15726: : file_(std::move(raf), io_tracer, _file_name), 15726: file_name_(std::move(_file_name)), 15726: clock_(clock), 15726: stats_(stats), 15726: hist_type_(hist_type), 15726: file_read_hist_(file_read_hist), 15726: rate_limiter_(rate_limiter), 15726: listeners_(), 15726: file_temperature_(file_temperature), 15726: is_last_level_(is_last_level) { 15726: std::for_each(listeners.begin(), listeners.end(), 15726: [this](const std::shared_ptr& e) { 15726: if (e->ShouldBeNotifiedOnFileIO()) { 15726: listeners_.emplace_back(e); 15726: } 15726: }); 15726: } 15726: 15726: static IOStatus Create(const std::shared_ptr& fs, 15726: const std::string& fname, const FileOptions& file_opts, 15726: std::unique_ptr* reader, 15726: IODebugContext* dbg); 15726: RandomAccessFileReader(const RandomAccessFileReader&) = delete; 15726: RandomAccessFileReader& operator=(const RandomAccessFileReader&) = delete; 15726: # 167 "/build/reproducible-path/rocksdb-9.3.1/file/random_access_file_reader.h" 15726: IOStatus Read(const IOOptions& opts, uint64_t offset, size_t n, Slice* result, 15726: char* scratch, AlignedBuf* aligned_buf) const; 15726: 15726: 15726: 15726: 15726: 15726: 15726: IOStatus MultiRead(const IOOptions& opts, FSReadRequest* reqs, 15726: size_t num_reqs, AlignedBuf* aligned_buf) const; 15726: 15726: IOStatus Prefetch(const IOOptions& opts, uint64_t offset, size_t n) const { 15726: return file_->Prefetch(offset, n, opts, nullptr); 15726: } 15726: 15726: FSRandomAccessFile* file() { return file_.get(); } 15726: 15726: const std::string& file_name() const { return file_name_; } 15726: 15726: bool use_direct_io() const { return file_->use_direct_io(); } 15726: 15726: IOStatus PrepareIOOptions(const ReadOptions& ro, IOOptions& opts) const; 15726: 15726: IOStatus ReadAsync(FSReadRequest& req, const IOOptions& opts, 15726: std::function cb, 15726: void* cb_arg, void** io_handle, IOHandleDeleter* del_fn, 15726: AlignedBuf* aligned_buf); 15726: 15726: void ReadAsyncCallback(FSReadRequest& req, void* cb_arg); 15726: }; 15726: } 15726: # 18 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/memory/memory_allocator_impl.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: struct CustomDeleter { 15726: CustomDeleter(MemoryAllocator* a = nullptr) : allocator(a) {} 15726: 15726: void operator()(char* ptr) const { 15726: if (allocator) { 15726: allocator->Deallocate(ptr); 15726: } else { 15726: delete[] ptr; 15726: } 15726: } 15726: 15726: MemoryAllocator* allocator; 15726: }; 15726: 15726: using CacheAllocationPtr = std::unique_ptr; 15726: 15726: inline CacheAllocationPtr AllocateBlock(size_t size, 15726: MemoryAllocator* allocator) { 15726: if (allocator) { 15726: auto block = reinterpret_cast(allocator->Allocate(size)); 15726: return CacheAllocationPtr(block, allocator); 15726: } 15726: return CacheAllocationPtr(new char[size]); 15726: } 15726: 15726: inline CacheAllocationPtr AllocateAndCopyBlock(const Slice& data, 15726: MemoryAllocator* allocator) { 15726: CacheAllocationPtr cap = AllocateBlock(data.size(), allocator); 15726: std::copy_n(data.data(), data.size(), cap.get()); 15726: return cap; 15726: } 15726: 15726: } 15726: # 19 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/options/cf_options.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/options/db_options.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: class SystemClock; 15726: 15726: struct ImmutableDBOptions { 15726: static const char* kName() { return "ImmutableDBOptions"; } 15726: ImmutableDBOptions(); 15726: explicit ImmutableDBOptions(const DBOptions& options); 15726: 15726: void Dump(Logger* log) const; 15726: 15726: bool create_if_missing; 15726: bool create_missing_column_families; 15726: bool error_if_exists; 15726: bool paranoid_checks; 15726: bool flush_verify_memtable_count; 15726: bool compaction_verify_record_count; 15726: bool track_and_verify_wals_in_manifest; 15726: bool verify_sst_unique_id_in_manifest; 15726: Env* env; 15726: std::shared_ptr rate_limiter; 15726: std::shared_ptr sst_file_manager; 15726: std::shared_ptr info_log; 15726: InfoLogLevel info_log_level; 15726: int max_file_opening_threads; 15726: std::shared_ptr statistics; 15726: bool use_fsync; 15726: std::vector db_paths; 15726: std::string db_log_dir; 15726: 15726: 15726: 15726: std::string wal_dir; 15726: size_t max_log_file_size; 15726: size_t log_file_time_to_roll; 15726: size_t keep_log_file_num; 15726: size_t recycle_log_file_num; 15726: uint64_t max_manifest_file_size; 15726: int table_cache_numshardbits; 15726: uint64_t WAL_ttl_seconds; 15726: uint64_t WAL_size_limit_MB; 15726: uint64_t max_write_batch_group_size_bytes; 15726: size_t manifest_preallocation_size; 15726: bool allow_mmap_reads; 15726: bool allow_mmap_writes; 15726: bool use_direct_reads; 15726: bool use_direct_io_for_flush_and_compaction; 15726: bool allow_fallocate; 15726: bool is_fd_close_on_exec; 15726: bool advise_random_on_open; 15726: size_t db_write_buffer_size; 15726: std::shared_ptr write_buffer_manager; 15726: size_t random_access_max_buffer_size; 15726: bool use_adaptive_mutex; 15726: std::vector> listeners; 15726: bool enable_thread_tracking; 15726: bool enable_pipelined_write; 15726: bool unordered_write; 15726: bool allow_concurrent_memtable_write; 15726: bool enable_write_thread_adaptive_yield; 15726: uint64_t write_thread_max_yield_usec; 15726: uint64_t write_thread_slow_yield_usec; 15726: bool skip_stats_update_on_db_open; 15726: bool skip_checking_sst_file_sizes_on_db_open; 15726: WALRecoveryMode wal_recovery_mode; 15726: bool allow_2pc; 15726: std::shared_ptr row_cache; 15726: WalFilter* wal_filter; 15726: bool fail_if_options_file_error; 15726: bool dump_malloc_stats; 15726: bool avoid_flush_during_recovery; 15726: bool allow_ingest_behind; 15726: bool two_write_queues; 15726: bool manual_wal_flush; 15726: CompressionType wal_compression; 15726: bool atomic_flush; 15726: bool avoid_unnecessary_blocking_io; 15726: bool persist_stats_to_disk; 15726: bool write_dbid_to_manifest; 15726: size_t log_readahead_size; 15726: std::shared_ptr file_checksum_gen_factory; 15726: bool best_efforts_recovery; 15726: int max_bgerror_resume_count; 15726: uint64_t bgerror_resume_retry_interval; 15726: bool allow_data_in_errors; 15726: std::string db_host_id; 15726: FileTypeSet checksum_handoff_file_types; 15726: CacheTier lowest_used_cache_tier; 15726: 15726: std::shared_ptr fs; 15726: SystemClock* clock; 15726: Statistics* stats; 15726: Logger* logger; 15726: std::shared_ptr compaction_service; 15726: bool enforce_single_del_contracts; 15726: uint64_t follower_refresh_catchup_period_ms; 15726: uint64_t follower_catchup_retry_count; 15726: uint64_t follower_catchup_retry_wait_ms; 15726: 15726: bool IsWalDirSameAsDBPath() const; 15726: bool IsWalDirSameAsDBPath(const std::string& path) const; 15726: const std::string& GetWalDir() const; 15726: const std::string& GetWalDir(const std::string& path) const; 15726: }; 15726: 15726: struct MutableDBOptions { 15726: static const char* kName() { return "MutableDBOptions"; } 15726: MutableDBOptions(); 15726: explicit MutableDBOptions(const DBOptions& options); 15726: 15726: void Dump(Logger* log) const; 15726: 15726: int max_background_jobs; 15726: int max_background_compactions; 15726: uint32_t max_subcompactions; 15726: bool avoid_flush_during_shutdown; 15726: size_t writable_file_max_buffer_size; 15726: uint64_t delayed_write_rate; 15726: uint64_t max_total_wal_size; 15726: uint64_t delete_obsolete_files_period_micros; 15726: unsigned int stats_dump_period_sec; 15726: unsigned int stats_persist_period_sec; 15726: size_t stats_history_buffer_size; 15726: int max_open_files; 15726: uint64_t bytes_per_sync; 15726: uint64_t wal_bytes_per_sync; 15726: bool strict_bytes_per_sync; 15726: size_t compaction_readahead_size; 15726: int max_background_flushes; 15726: std::string daily_offpeak_time_utc; 15726: }; 15726: 15726: Status GetStringFromMutableDBOptions(const ConfigOptions& config_options, 15726: const MutableDBOptions& mutable_opts, 15726: std::string* opt_string); 15726: 15726: Status GetMutableDBOptionsFromStrings( 15726: const MutableDBOptions& base_options, 15726: const std::unordered_map& options_map, 15726: MutableDBOptions* new_options); 15726: 15726: bool MutableDBOptionsAreEqual(const MutableDBOptions& this_options, 15726: const MutableDBOptions& that_options); 15726: 15726: } 15726: # 13 "/build/reproducible-path/rocksdb-9.3.1/options/cf_options.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/malloc.h" 1 3 4 15726: # 24 "/usr/include/malloc.h" 3 4 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 25 "/usr/include/malloc.h" 2 3 4 15726: # 36 "/usr/include/malloc.h" 3 4 15726: 15726: # 36 "/usr/include/malloc.h" 3 4 15726: extern "C" { 15726: 15726: 15726: extern void *malloc (size_t __size) noexcept (true) __attribute__ ((__malloc__)) 15726: __attribute__ ((__alloc_size__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: extern void *calloc (size_t __nmemb, size_t __size) 15726: noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (1, 2))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern void *realloc (void *__ptr, size_t __size) 15726: noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__alloc_size__ (2))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size) 15726: noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__alloc_size__ (2, 3))) 15726: __attribute__ ((__malloc__ (__builtin_free, 1))); 15726: 15726: 15726: extern void free (void *__ptr) noexcept (true); 15726: 15726: 15726: extern void *memalign (size_t __alignment, size_t __size) 15726: noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__alloc_align__ (1))) 15726: __attribute__ ((__alloc_size__ (2))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__malloc__ (__builtin_free, 1))); 15726: 15726: 15726: extern void *valloc (size_t __size) noexcept (true) __attribute__ ((__malloc__)) 15726: __attribute__ ((__alloc_size__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__malloc__ (__builtin_free, 1))); 15726: 15726: 15726: 15726: extern void *pvalloc (size_t __size) noexcept (true) __attribute__ ((__malloc__)) 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__malloc__ (__builtin_free, 1))); 15726: 15726: 15726: 15726: struct mallinfo 15726: { 15726: int arena; 15726: int ordblks; 15726: int smblks; 15726: int hblks; 15726: int hblkhd; 15726: int usmblks; 15726: int fsmblks; 15726: int uordblks; 15726: int fordblks; 15726: int keepcost; 15726: }; 15726: 15726: 15726: 15726: 15726: struct mallinfo2 15726: { 15726: size_t arena; 15726: size_t ordblks; 15726: size_t smblks; 15726: size_t hblks; 15726: size_t hblkhd; 15726: size_t usmblks; 15726: size_t fsmblks; 15726: size_t uordblks; 15726: size_t fordblks; 15726: size_t keepcost; 15726: }; 15726: 15726: 15726: extern struct mallinfo mallinfo (void) noexcept (true) __attribute__ ((__deprecated__)); 15726: 15726: 15726: extern struct mallinfo2 mallinfo2 (void) noexcept (true); 15726: # 144 "/usr/include/malloc.h" 3 4 15726: extern int mallopt (int __param, int __val) noexcept (true); 15726: 15726: 15726: 15726: extern int malloc_trim (size_t __pad) noexcept (true); 15726: 15726: 15726: 15726: extern size_t malloc_usable_size (void *__ptr) noexcept (true); 15726: 15726: 15726: extern void malloc_stats (void) noexcept (true); 15726: 15726: 15726: extern int malloc_info (int __options, FILE *__fp) noexcept (true); 15726: 15726: } 15726: # 19 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/block_based/block_type.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 12 "/build/reproducible-path/rocksdb-9.3.1/table/block_based/block_type.h" 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: 15726: 15726: enum class BlockType : uint8_t { 15726: kData, 15726: kFilter, 15726: kFilterPartitionIndex, 15726: kProperties, 15726: kCompressionDictionary, 15726: kRangeDeletion, 15726: kHashIndexPrefixes, 15726: kHashIndexMetadata, 15726: kMetaIndex, 15726: kIndex, 15726: 15726: kInvalid 15726: }; 15726: 15726: } 15726: # 27 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/assert.h" 1 3 4 15726: # 8 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 2 15726: # 24 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct KillPoint { 15726: public: 15726: 15726: 15726: int rocksdb_kill_odds = 0; 15726: 15726: std::vector rocksdb_kill_exclude_prefixes; 15726: 15726: void TestKillRandom(std::string kill_point, int odds, 15726: const std::string& srcfile, int srcline); 15726: 15726: static KillPoint* GetInstance(); 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 63 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 15726: namespace rocksdb { 15726: # 74 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 15726: class SyncPoint { 15726: public: 15726: static SyncPoint* GetInstance(); 15726: 15726: SyncPoint(const SyncPoint&) = delete; 15726: SyncPoint& operator=(const SyncPoint&) = delete; 15726: ~SyncPoint(); 15726: 15726: struct SyncPointPair { 15726: std::string predecessor; 15726: std::string successor; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: void LoadDependency(const std::vector& dependencies); 15726: 15726: 15726: 15726: 15726: 15726: void LoadDependencyAndMarkers(const std::vector& dependencies, 15726: const std::vector& markers); 15726: 15726: 15726: 15726: 15726: void SetCallBack(const std::string& point, 15726: const std::function& callback); 15726: 15726: 15726: void ClearCallBack(const std::string& point); 15726: 15726: 15726: void ClearAllCallBacks(); 15726: 15726: 15726: void EnableProcessing(); 15726: 15726: 15726: void DisableProcessing(); 15726: 15726: 15726: void ClearTrace(); 15726: 15726: 15726: 15726: 15726: void Process(const Slice& point, void* cb_arg = nullptr); 15726: 15726: 15726: 15726: template 15726: void Process(const char (&point)[kLen], void* cb_arg = nullptr) { 15726: static_assert(kLen > 0, "Must not be empty"); 15726: 15726: # 131 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 3 4 15726: (static_cast ( 15726: # 131 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 15726: point[kLen - 1] == '\0' 15726: # 131 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 131 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 15726: "point[kLen - 1] == '\\0'" 15726: # 131 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 131 "/build/reproducible-path/rocksdb-9.3.1/test_util/sync_point.h" 15726: ; 15726: Process(Slice(point, kLen - 1), cb_arg); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct Data; 15726: 15726: private: 15726: 15726: SyncPoint(); 15726: Data* impl_; 15726: }; 15726: 15726: 15726: 15726: void SetupSyncPointsToMockDirectIO(); 15726: } 15726: # 28 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/compression_context_cache.h" 1 15726: # 18 "/build/reproducible-path/rocksdb-9.3.1/util/compression_context_cache.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: class ZSTDUncompressCachedData; 15726: 15726: class CompressionContextCache { 15726: public: 15726: 15726: static CompressionContextCache* Instance(); 15726: static void InitSingleton(); 15726: CompressionContextCache(const CompressionContextCache&) = delete; 15726: CompressionContextCache& operator=(const CompressionContextCache&) = delete; 15726: 15726: ZSTDUncompressCachedData GetCachedZSTDUncompressData(); 15726: void ReturnCachedZSTDUncompressData(int64_t idx); 15726: 15726: private: 15726: 15726: CompressionContextCache(); 15726: ~CompressionContextCache(); 15726: 15726: class Rep; 15726: Rep* rep_; 15726: }; 15726: 15726: } 15726: # 30 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/string_util.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/util/string_util.h" 15726: namespace rocksdb { 15726: 15726: class Slice; 15726: 15726: std::vector StringSplit(const std::string& arg, char delim); 15726: 15726: 15726: void AppendNumberTo(std::string* str, uint64_t num); 15726: 15726: 15726: 15726: void AppendEscapedStringTo(std::string* str, const Slice& value); 15726: 15726: 15726: 15726: template 15726: inline void PutBaseChars(char** buf, size_t n, uint64_t v, bool uppercase) { 15726: const char* digitChars = uppercase ? "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" 15726: : "0123456789abcdefghijklmnopqrstuvwxyz"; 15726: for (size_t i = n; i > 0; --i) { 15726: (*buf)[i - 1] = digitChars[static_cast(v % kBase)]; 15726: v /= kBase; 15726: } 15726: *buf += n; 15726: } 15726: # 52 "/build/reproducible-path/rocksdb-9.3.1/util/string_util.h" 15726: template 15726: inline bool ParseBaseChars(const char** buf, size_t n, uint64_t* v) { 15726: while (n) { 15726: char c = **buf; 15726: *v *= static_cast(kBase); 15726: if (c >= '0' && (kBase >= 10 ? c <= '9' : c < '0' + kBase)) { 15726: *v += static_cast(c - '0'); 15726: } else if (kBase > 10 && c >= 'A' && c < 'A' + kBase - 10) { 15726: *v += static_cast(c - 'A' + 10); 15726: } else if (kBase > 10 && c >= 'a' && c < 'a' + kBase - 10) { 15726: *v += static_cast(c - 'a' + 10); 15726: } else { 15726: return false; 15726: } 15726: --n; 15726: ++*buf; 15726: } 15726: return true; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: std::string NumberToHumanString(int64_t num); 15726: 15726: 15726: 15726: std::string BytesToHumanString(uint64_t bytes); 15726: 15726: 15726: 15726: std::string TimeToHumanString(int unixtime); 15726: 15726: 15726: int AppendHumanMicros(uint64_t micros, char* output, int len, 15726: bool fixed_format); 15726: 15726: 15726: int AppendHumanBytes(uint64_t bytes, char* output, int len); 15726: 15726: 15726: 15726: std::string EscapeString(const Slice& value); 15726: 15726: 15726: 15726: 15726: 15726: bool ConsumeDecimalNumber(Slice* in, uint64_t* val); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool isSpecialChar(const char c); 15726: 15726: 15726: 15726: 15726: char UnescapeChar(const char c); 15726: 15726: 15726: 15726: 15726: char EscapeChar(const char c); 15726: # 130 "/build/reproducible-path/rocksdb-9.3.1/util/string_util.h" 15726: std::string EscapeOptionString(const std::string& raw_string); 15726: 15726: 15726: 15726: 15726: 15726: 15726: std::string UnescapeOptionString(const std::string& escaped_string); 15726: 15726: std::string trim(const std::string& str); 15726: 15726: 15726: bool EndsWith(const std::string& string, const std::string& pattern); 15726: 15726: 15726: bool StartsWith(const std::string& string, const std::string& pattern); 15726: 15726: bool ParseBoolean(const std::string& type, const std::string& value); 15726: 15726: uint8_t ParseUint8(const std::string& value); 15726: 15726: uint32_t ParseUint32(const std::string& value); 15726: 15726: int32_t ParseInt32(const std::string& value); 15726: 15726: uint64_t ParseUint64(const std::string& value); 15726: 15726: int ParseInt(const std::string& value); 15726: 15726: int64_t ParseInt64(const std::string& value); 15726: 15726: double ParseDouble(const std::string& value); 15726: 15726: size_t ParseSizeT(const std::string& value); 15726: 15726: std::vector ParseVectorInt(const std::string& value); 15726: 15726: bool SerializeIntVector(const std::vector& vec, std::string* value); 15726: 15726: 15726: 15726: int ParseTimeStringToSeconds(const std::string& value); 15726: 15726: 15726: 15726: 15726: bool TryParseTimeRangeString(const std::string& value, int& start_time, 15726: int& end_time); 15726: 15726: extern const std::string kNullptrString; 15726: 15726: 15726: 15726: std::string errnoStr(int err); 15726: 15726: } 15726: # 31 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 15726: 15726: 15726: # 1 "/usr/include/snappy.h" 1 3 4 15726: # 42 "/usr/include/snappy.h" 3 4 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 43 "/usr/include/snappy.h" 2 3 4 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/snappy-stubs-public.h" 1 3 4 15726: # 41 "/usr/include/snappy-stubs-public.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 1 3 4 15726: # 23 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_iovec.h" 1 3 4 15726: # 23 "/usr/include/arm-linux-gnueabihf/bits/types/struct_iovec.h" 3 4 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 24 "/usr/include/arm-linux-gnueabihf/bits/types/struct_iovec.h" 2 3 4 15726: 15726: 15726: 15726: # 26 "/usr/include/arm-linux-gnueabihf/bits/types/struct_iovec.h" 3 4 15726: struct iovec 15726: { 15726: void *iov_base; 15726: size_t iov_len; 15726: }; 15726: # 24 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 2 3 4 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern "C" { 15726: # 41 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 3 4 15726: extern ssize_t readv (int __fd, const struct iovec *__iovec, int __count) 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 15726: # 52 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 3 4 15726: extern ssize_t writev (int __fd, const struct iovec *__iovec, int __count) 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 15726: # 86 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 3 4 15726: extern ssize_t preadv (int __fd, const struct iovec *__iovec, int __count, __off64_t __offset) __asm__ ("" "preadv64") 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 15726: extern ssize_t pwritev (int __fd, const struct iovec *__iovec, int __count, __off64_t __offset) __asm__ ("" "pwritev64") 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 15726: # 110 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 3 4 15726: extern ssize_t preadv64 (int __fd, const struct iovec *__iovec, int __count, 15726: __off64_t __offset) 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 15726: # 123 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 3 4 15726: extern ssize_t pwritev64 (int __fd, const struct iovec *__iovec, int __count, 15726: __off64_t __offset) 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 15726: # 143 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 3 4 15726: extern ssize_t pwritev2 (int __fd, const struct iovec *__iovec, int __count, __off64_t __offset, int __flags) __asm__ ("" "pwritev64v2") 15726: 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 15726: extern ssize_t preadv2 (int __fd, const struct iovec *__iovec, int __count, __off64_t __offset, int __flags) __asm__ ("" "preadv64v2") 15726: 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 15726: # 161 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 3 4 15726: extern ssize_t preadv64v2 (int __fp, const struct iovec *__iovec, 15726: int __count, __off64_t __offset, 15726: int ___flags) 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 15726: 15726: 15726: extern ssize_t pwritev64v2 (int __fd, const struct iovec *__iodev, 15726: int __count, __off64_t __offset, 15726: int __flags) 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 2, 3))); 15726: 15726: 15726: 15726: } 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/uio-ext.h" 1 3 4 15726: # 26 "/usr/include/arm-linux-gnueabihf/bits/uio-ext.h" 3 4 15726: extern "C" { 15726: 15726: 15726: extern ssize_t process_vm_readv (pid_t __pid, const struct iovec *__lvec, 15726: unsigned long int __liovcnt, 15726: const struct iovec *__rvec, 15726: unsigned long int __riovcnt, 15726: unsigned long int __flags) 15726: noexcept (true); 15726: 15726: 15726: extern ssize_t process_vm_writev (pid_t __pid, const struct iovec *__lvec, 15726: unsigned long int __liovcnt, 15726: const struct iovec *__rvec, 15726: unsigned long int __riovcnt, 15726: unsigned long int __flags) 15726: noexcept (true); 15726: # 52 "/usr/include/arm-linux-gnueabihf/bits/uio-ext.h" 3 4 15726: } 15726: # 180 "/usr/include/arm-linux-gnueabihf/sys/uio.h" 2 3 4 15726: # 42 "/usr/include/snappy-stubs-public.h" 2 3 4 15726: # 50 "/usr/include/snappy-stubs-public.h" 3 4 15726: namespace snappy { 15726: # 61 "/usr/include/snappy-stubs-public.h" 3 4 15726: } 15726: # 48 "/usr/include/snappy.h" 2 3 4 15726: 15726: namespace snappy { 15726: class Source; 15726: class Sink; 15726: 15726: struct CompressionOptions { 15726: # 65 "/usr/include/snappy.h" 3 4 15726: int level = DefaultCompressionLevel(); 15726: 15726: constexpr CompressionOptions() = default; 15726: constexpr CompressionOptions(int compression_level) 15726: : level(compression_level) {} 15726: static constexpr int MinCompressionLevel() { return 1; } 15726: static constexpr int MaxCompressionLevel() { return 2; } 15726: static constexpr int DefaultCompressionLevel() { return 1; } 15726: }; 15726: # 82 "/usr/include/snappy.h" 3 4 15726: size_t Compress(Source* reader, Sink* writer); 15726: size_t Compress(Source* reader, Sink* writer, 15726: CompressionOptions options); 15726: # 93 "/usr/include/snappy.h" 3 4 15726: bool GetUncompressedLength(Source* source, uint32_t* result); 15726: # 104 "/usr/include/snappy.h" 3 4 15726: size_t Compress(const char* input, size_t input_length, 15726: std::string* compressed); 15726: size_t Compress(const char* input, size_t input_length, 15726: std::string* compressed, CompressionOptions options); 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_t CompressFromIOVec(const struct iovec* iov, size_t iov_cnt, 15726: std::string* compressed); 15726: size_t CompressFromIOVec(const struct iovec* iov, size_t iov_cnt, 15726: std::string* compressed, 15726: CompressionOptions options); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool Uncompress(const char* compressed, size_t compressed_length, 15726: std::string* uncompressed); 15726: 15726: 15726: 15726: 15726: bool Uncompress(Source* compressed, Sink* uncompressed); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_t UncompressAsMuchAsPossible(Source* compressed, Sink* uncompressed); 15726: # 161 "/usr/include/snappy.h" 3 4 15726: void RawCompress(const char* input, size_t input_length, char* compressed, 15726: size_t* compressed_length); 15726: void RawCompress(const char* input, size_t input_length, char* compressed, 15726: size_t* compressed_length, CompressionOptions options); 15726: 15726: 15726: 15726: 15726: void RawCompressFromIOVec(const struct iovec* iov, size_t uncompressed_length, 15726: char* compressed, size_t* compressed_length); 15726: void RawCompressFromIOVec(const struct iovec* iov, size_t uncompressed_length, 15726: char* compressed, size_t* compressed_length, 15726: CompressionOptions options); 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool RawUncompress(const char* compressed, size_t compressed_length, 15726: char* uncompressed); 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool RawUncompress(Source* compressed, char* uncompressed); 15726: # 198 "/usr/include/snappy.h" 3 4 15726: bool RawUncompressToIOVec(const char* compressed, size_t compressed_length, 15726: const struct iovec* iov, size_t iov_cnt); 15726: # 209 "/usr/include/snappy.h" 3 4 15726: bool RawUncompressToIOVec(Source* compressed, const struct iovec* iov, 15726: size_t iov_cnt); 15726: 15726: 15726: 15726: size_t MaxCompressedLength(size_t source_bytes); 15726: 15726: 15726: 15726: 15726: 15726: bool GetUncompressedLength(const char* compressed, size_t compressed_length, 15726: size_t* result); 15726: 15726: 15726: 15726: 15726: 15726: bool IsValidCompressedBuffer(const char* compressed, 15726: size_t compressed_length); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool IsValidCompressed(Source* compressed); 15726: # 247 "/usr/include/snappy.h" 3 4 15726: static constexpr int kBlockLog = 16; 15726: static constexpr size_t kBlockSize = 1 << kBlockLog; 15726: 15726: static constexpr int kMinHashTableBits = 8; 15726: static constexpr size_t kMinHashTableSize = 1 << kMinHashTableBits; 15726: 15726: static constexpr int kMaxHashTableBits = 15; 15726: static constexpr size_t kMaxHashTableSize = 1 << kMaxHashTableBits; 15726: } 15726: # 34 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 15726: 15726: 15726: 15726: # 1 "/usr/include/zlib.h" 1 3 4 15726: # 34 "/usr/include/zlib.h" 3 4 15726: # 1 "/usr/include/zconf.h" 1 3 4 15726: # 254 "/usr/include/zconf.h" 3 4 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 255 "/usr/include/zconf.h" 2 3 4 15726: typedef size_t z_size_t; 15726: # 393 "/usr/include/zconf.h" 3 4 15726: typedef unsigned char Byte; 15726: 15726: typedef unsigned int uInt; 15726: typedef unsigned long uLong; 15726: 15726: 15726: 15726: 15726: 15726: typedef Byte Bytef; 15726: 15726: typedef char charf; 15726: typedef int intf; 15726: typedef uInt uIntf; 15726: typedef uLong uLongf; 15726: 15726: 15726: typedef void const *voidpc; 15726: typedef void *voidpf; 15726: typedef void *voidp; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/limits.h" 1 3 4 15726: # 421 "/usr/include/zconf.h" 2 3 4 15726: # 431 "/usr/include/zconf.h" 3 4 15726: typedef unsigned z_crc_t; 15726: # 484 "/usr/include/zconf.h" 3 4 15726: # 1 "/usr/include/unistd.h" 1 3 4 15726: # 27 "/usr/include/unistd.h" 3 4 15726: extern "C" { 15726: # 202 "/usr/include/unistd.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/posix_opt.h" 1 3 4 15726: # 203 "/usr/include/unistd.h" 2 3 4 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/environments.h" 1 3 4 15726: # 22 "/usr/include/arm-linux-gnueabihf/bits/environments.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 15726: # 23 "/usr/include/arm-linux-gnueabihf/bits/environments.h" 2 3 4 15726: # 207 "/usr/include/unistd.h" 2 3 4 15726: # 226 "/usr/include/unistd.h" 3 4 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 227 "/usr/include/unistd.h" 2 3 4 15726: # 274 "/usr/include/unistd.h" 3 4 15726: typedef __socklen_t socklen_t; 15726: # 287 "/usr/include/unistd.h" 3 4 15726: extern int access (const char *__name, int __type) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: extern int euidaccess (const char *__name, int __type) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int eaccess (const char *__name, int __type) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern int execveat (int __fd, const char *__path, char *const __argv[], 15726: char *const __envp[], int __flags) 15726: noexcept (true) __attribute__ ((__nonnull__ (2, 3))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int faccessat (int __fd, const char *__file, int __type, int __flag) 15726: noexcept (true) __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__)); 15726: # 342 "/usr/include/unistd.h" 3 4 15726: extern __off64_t lseek (int __fd, __off64_t __offset, int __whence) noexcept (true) __asm__ ("" "lseek64") 15726: 15726: ; 15726: 15726: 15726: 15726: 15726: 15726: extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence) 15726: noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int close (int __fd); 15726: 15726: 15726: 15726: 15726: extern void closefrom (int __lowfd) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern ssize_t read (int __fd, void *__buf, size_t __nbytes) __attribute__ ((__warn_unused_result__)) 15726: __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: 15726: 15726: 15726: 15726: 15726: extern ssize_t write (int __fd, const void *__buf, size_t __n) __attribute__ ((__warn_unused_result__)) 15726: __attribute__ ((__access__ (__read_only__, 2, 3))); 15726: # 404 "/usr/include/unistd.h" 3 4 15726: extern ssize_t pread (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) __asm__ ("" "pread64") 15726: 15726: __attribute__ ((__warn_unused_result__)) 15726: __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: extern ssize_t pwrite (int __fd, const void *__buf, size_t __nbytes, __off64_t __offset) __asm__ ("" "pwrite64") 15726: 15726: __attribute__ ((__warn_unused_result__)) 15726: __attribute__ ((__access__ (__read_only__, 2, 3))); 15726: # 422 "/usr/include/unistd.h" 3 4 15726: extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes, 15726: __off64_t __offset) __attribute__ ((__warn_unused_result__)) 15726: __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: 15726: 15726: extern ssize_t pwrite64 (int __fd, const void *__buf, size_t __n, 15726: __off64_t __offset) __attribute__ ((__warn_unused_result__)) 15726: __attribute__ ((__access__ (__read_only__, 2, 3))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int pipe (int __pipedes[2]) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern int pipe2 (int __pipedes[2], int __flags) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: # 452 "/usr/include/unistd.h" 3 4 15726: extern unsigned int alarm (unsigned int __seconds) noexcept (true); 15726: # 464 "/usr/include/unistd.h" 3 4 15726: extern unsigned int sleep (unsigned int __seconds); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval) 15726: noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int usleep (__useconds_t __useconds); 15726: # 489 "/usr/include/unistd.h" 3 4 15726: extern int pause (void); 15726: 15726: 15726: 15726: extern int chown (const char *__file, __uid_t __owner, __gid_t __group) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: extern int fchown (int __fd, __uid_t __owner, __gid_t __group) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern int lchown (const char *__file, __uid_t __owner, __gid_t __group) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int fchownat (int __fd, const char *__file, __uid_t __owner, 15726: __gid_t __group, int __flag) 15726: noexcept (true) __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: extern int chdir (const char *__path) noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: extern int fchdir (int __fd) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: # 531 "/usr/include/unistd.h" 3 4 15726: extern char *getcwd (char *__buf, size_t __size) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: extern char *get_current_dir_name (void) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern char *getwd (char *__buf) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)) __attribute__ ((__warn_unused_result__)) 15726: __attribute__ ((__access__ (__write_only__, 1))); 15726: 15726: 15726: 15726: 15726: extern int dup (int __fd) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: extern int dup2 (int __fd, int __fd2) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int dup3 (int __fd, int __fd2, int __flags) noexcept (true); 15726: 15726: 15726: 15726: extern char **__environ; 15726: 15726: extern char **environ; 15726: 15726: 15726: 15726: 15726: 15726: extern int execve (const char *__path, char *const __argv[], 15726: char *const __envp[]) noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: 15726: extern int fexecve (int __fd, char *const __argv[], char *const __envp[]) 15726: noexcept (true) __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: 15726: 15726: extern int execv (const char *__path, char *const __argv[]) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: extern int execle (const char *__path, const char *__arg, ...) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: extern int execl (const char *__path, const char *__arg, ...) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: extern int execvp (const char *__file, char *const __argv[]) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: 15726: extern int execlp (const char *__file, const char *__arg, ...) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: 15726: extern int execvpe (const char *__file, char *const __argv[], 15726: char *const __envp[]) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: 15726: 15726: extern int nice (int __inc) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern void _exit (int __status) __attribute__ ((__noreturn__)); 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/confname.h" 1 3 4 15726: # 24 "/usr/include/arm-linux-gnueabihf/bits/confname.h" 3 4 15726: enum 15726: { 15726: _PC_LINK_MAX, 15726: 15726: _PC_MAX_CANON, 15726: 15726: _PC_MAX_INPUT, 15726: 15726: _PC_NAME_MAX, 15726: 15726: _PC_PATH_MAX, 15726: 15726: _PC_PIPE_BUF, 15726: 15726: _PC_CHOWN_RESTRICTED, 15726: 15726: _PC_NO_TRUNC, 15726: 15726: _PC_VDISABLE, 15726: 15726: _PC_SYNC_IO, 15726: 15726: _PC_ASYNC_IO, 15726: 15726: _PC_PRIO_IO, 15726: 15726: _PC_SOCK_MAXBUF, 15726: 15726: _PC_FILESIZEBITS, 15726: 15726: _PC_REC_INCR_XFER_SIZE, 15726: 15726: _PC_REC_MAX_XFER_SIZE, 15726: 15726: _PC_REC_MIN_XFER_SIZE, 15726: 15726: _PC_REC_XFER_ALIGN, 15726: 15726: _PC_ALLOC_SIZE_MIN, 15726: 15726: _PC_SYMLINK_MAX, 15726: 15726: _PC_2_SYMLINKS 15726: 15726: }; 15726: 15726: 15726: enum 15726: { 15726: _SC_ARG_MAX, 15726: 15726: _SC_CHILD_MAX, 15726: 15726: _SC_CLK_TCK, 15726: 15726: _SC_NGROUPS_MAX, 15726: 15726: _SC_OPEN_MAX, 15726: 15726: _SC_STREAM_MAX, 15726: 15726: _SC_TZNAME_MAX, 15726: 15726: _SC_JOB_CONTROL, 15726: 15726: _SC_SAVED_IDS, 15726: 15726: _SC_REALTIME_SIGNALS, 15726: 15726: _SC_PRIORITY_SCHEDULING, 15726: 15726: _SC_TIMERS, 15726: 15726: _SC_ASYNCHRONOUS_IO, 15726: 15726: _SC_PRIORITIZED_IO, 15726: 15726: _SC_SYNCHRONIZED_IO, 15726: 15726: _SC_FSYNC, 15726: 15726: _SC_MAPPED_FILES, 15726: 15726: _SC_MEMLOCK, 15726: 15726: _SC_MEMLOCK_RANGE, 15726: 15726: _SC_MEMORY_PROTECTION, 15726: 15726: _SC_MESSAGE_PASSING, 15726: 15726: _SC_SEMAPHORES, 15726: 15726: _SC_SHARED_MEMORY_OBJECTS, 15726: 15726: _SC_AIO_LISTIO_MAX, 15726: 15726: _SC_AIO_MAX, 15726: 15726: _SC_AIO_PRIO_DELTA_MAX, 15726: 15726: _SC_DELAYTIMER_MAX, 15726: 15726: _SC_MQ_OPEN_MAX, 15726: 15726: _SC_MQ_PRIO_MAX, 15726: 15726: _SC_VERSION, 15726: 15726: _SC_PAGESIZE, 15726: 15726: 15726: _SC_RTSIG_MAX, 15726: 15726: _SC_SEM_NSEMS_MAX, 15726: 15726: _SC_SEM_VALUE_MAX, 15726: 15726: _SC_SIGQUEUE_MAX, 15726: 15726: _SC_TIMER_MAX, 15726: 15726: 15726: 15726: 15726: _SC_BC_BASE_MAX, 15726: 15726: _SC_BC_DIM_MAX, 15726: 15726: _SC_BC_SCALE_MAX, 15726: 15726: _SC_BC_STRING_MAX, 15726: 15726: _SC_COLL_WEIGHTS_MAX, 15726: 15726: _SC_EQUIV_CLASS_MAX, 15726: 15726: _SC_EXPR_NEST_MAX, 15726: 15726: _SC_LINE_MAX, 15726: 15726: _SC_RE_DUP_MAX, 15726: 15726: _SC_CHARCLASS_NAME_MAX, 15726: 15726: 15726: _SC_2_VERSION, 15726: 15726: _SC_2_C_BIND, 15726: 15726: _SC_2_C_DEV, 15726: 15726: _SC_2_FORT_DEV, 15726: 15726: _SC_2_FORT_RUN, 15726: 15726: _SC_2_SW_DEV, 15726: 15726: _SC_2_LOCALEDEF, 15726: 15726: 15726: _SC_PII, 15726: 15726: _SC_PII_XTI, 15726: 15726: _SC_PII_SOCKET, 15726: 15726: _SC_PII_INTERNET, 15726: 15726: _SC_PII_OSI, 15726: 15726: _SC_POLL, 15726: 15726: _SC_SELECT, 15726: 15726: _SC_UIO_MAXIOV, 15726: 15726: _SC_IOV_MAX = _SC_UIO_MAXIOV, 15726: 15726: _SC_PII_INTERNET_STREAM, 15726: 15726: _SC_PII_INTERNET_DGRAM, 15726: 15726: _SC_PII_OSI_COTS, 15726: 15726: _SC_PII_OSI_CLTS, 15726: 15726: _SC_PII_OSI_M, 15726: 15726: _SC_T_IOV_MAX, 15726: 15726: 15726: 15726: _SC_THREADS, 15726: 15726: _SC_THREAD_SAFE_FUNCTIONS, 15726: 15726: _SC_GETGR_R_SIZE_MAX, 15726: 15726: _SC_GETPW_R_SIZE_MAX, 15726: 15726: _SC_LOGIN_NAME_MAX, 15726: 15726: _SC_TTY_NAME_MAX, 15726: 15726: _SC_THREAD_DESTRUCTOR_ITERATIONS, 15726: 15726: _SC_THREAD_KEYS_MAX, 15726: 15726: _SC_THREAD_STACK_MIN, 15726: 15726: _SC_THREAD_THREADS_MAX, 15726: 15726: _SC_THREAD_ATTR_STACKADDR, 15726: 15726: _SC_THREAD_ATTR_STACKSIZE, 15726: 15726: _SC_THREAD_PRIORITY_SCHEDULING, 15726: 15726: _SC_THREAD_PRIO_INHERIT, 15726: 15726: _SC_THREAD_PRIO_PROTECT, 15726: 15726: _SC_THREAD_PROCESS_SHARED, 15726: 15726: 15726: _SC_NPROCESSORS_CONF, 15726: 15726: _SC_NPROCESSORS_ONLN, 15726: 15726: _SC_PHYS_PAGES, 15726: 15726: _SC_AVPHYS_PAGES, 15726: 15726: _SC_ATEXIT_MAX, 15726: 15726: _SC_PASS_MAX, 15726: 15726: 15726: _SC_XOPEN_VERSION, 15726: 15726: _SC_XOPEN_XCU_VERSION, 15726: 15726: _SC_XOPEN_UNIX, 15726: 15726: _SC_XOPEN_CRYPT, 15726: 15726: _SC_XOPEN_ENH_I18N, 15726: 15726: _SC_XOPEN_SHM, 15726: 15726: 15726: _SC_2_CHAR_TERM, 15726: 15726: _SC_2_C_VERSION, 15726: 15726: _SC_2_UPE, 15726: 15726: 15726: _SC_XOPEN_XPG2, 15726: 15726: _SC_XOPEN_XPG3, 15726: 15726: _SC_XOPEN_XPG4, 15726: 15726: 15726: _SC_CHAR_BIT, 15726: 15726: _SC_CHAR_MAX, 15726: 15726: _SC_CHAR_MIN, 15726: 15726: _SC_INT_MAX, 15726: 15726: _SC_INT_MIN, 15726: 15726: _SC_LONG_BIT, 15726: 15726: _SC_WORD_BIT, 15726: 15726: _SC_MB_LEN_MAX, 15726: 15726: _SC_NZERO, 15726: 15726: _SC_SSIZE_MAX, 15726: 15726: _SC_SCHAR_MAX, 15726: 15726: _SC_SCHAR_MIN, 15726: 15726: _SC_SHRT_MAX, 15726: 15726: _SC_SHRT_MIN, 15726: 15726: _SC_UCHAR_MAX, 15726: 15726: _SC_UINT_MAX, 15726: 15726: _SC_ULONG_MAX, 15726: 15726: _SC_USHRT_MAX, 15726: 15726: 15726: _SC_NL_ARGMAX, 15726: 15726: _SC_NL_LANGMAX, 15726: 15726: _SC_NL_MSGMAX, 15726: 15726: _SC_NL_NMAX, 15726: 15726: _SC_NL_SETMAX, 15726: 15726: _SC_NL_TEXTMAX, 15726: 15726: 15726: _SC_XBS5_ILP32_OFF32, 15726: 15726: _SC_XBS5_ILP32_OFFBIG, 15726: 15726: _SC_XBS5_LP64_OFF64, 15726: 15726: _SC_XBS5_LPBIG_OFFBIG, 15726: 15726: 15726: _SC_XOPEN_LEGACY, 15726: 15726: _SC_XOPEN_REALTIME, 15726: 15726: _SC_XOPEN_REALTIME_THREADS, 15726: 15726: 15726: _SC_ADVISORY_INFO, 15726: 15726: _SC_BARRIERS, 15726: 15726: _SC_BASE, 15726: 15726: _SC_C_LANG_SUPPORT, 15726: 15726: _SC_C_LANG_SUPPORT_R, 15726: 15726: _SC_CLOCK_SELECTION, 15726: 15726: _SC_CPUTIME, 15726: 15726: _SC_THREAD_CPUTIME, 15726: 15726: _SC_DEVICE_IO, 15726: 15726: _SC_DEVICE_SPECIFIC, 15726: 15726: _SC_DEVICE_SPECIFIC_R, 15726: 15726: _SC_FD_MGMT, 15726: 15726: _SC_FIFO, 15726: 15726: _SC_PIPE, 15726: 15726: _SC_FILE_ATTRIBUTES, 15726: 15726: _SC_FILE_LOCKING, 15726: 15726: _SC_FILE_SYSTEM, 15726: 15726: _SC_MONOTONIC_CLOCK, 15726: 15726: _SC_MULTI_PROCESS, 15726: 15726: _SC_SINGLE_PROCESS, 15726: 15726: _SC_NETWORKING, 15726: 15726: _SC_READER_WRITER_LOCKS, 15726: 15726: _SC_SPIN_LOCKS, 15726: 15726: _SC_REGEXP, 15726: 15726: _SC_REGEX_VERSION, 15726: 15726: _SC_SHELL, 15726: 15726: _SC_SIGNALS, 15726: 15726: _SC_SPAWN, 15726: 15726: _SC_SPORADIC_SERVER, 15726: 15726: _SC_THREAD_SPORADIC_SERVER, 15726: 15726: _SC_SYSTEM_DATABASE, 15726: 15726: _SC_SYSTEM_DATABASE_R, 15726: 15726: _SC_TIMEOUTS, 15726: 15726: _SC_TYPED_MEMORY_OBJECTS, 15726: 15726: _SC_USER_GROUPS, 15726: 15726: _SC_USER_GROUPS_R, 15726: 15726: _SC_2_PBS, 15726: 15726: _SC_2_PBS_ACCOUNTING, 15726: 15726: _SC_2_PBS_LOCATE, 15726: 15726: _SC_2_PBS_MESSAGE, 15726: 15726: _SC_2_PBS_TRACK, 15726: 15726: _SC_SYMLOOP_MAX, 15726: 15726: _SC_STREAMS, 15726: 15726: _SC_2_PBS_CHECKPOINT, 15726: 15726: 15726: _SC_V6_ILP32_OFF32, 15726: 15726: _SC_V6_ILP32_OFFBIG, 15726: 15726: _SC_V6_LP64_OFF64, 15726: 15726: _SC_V6_LPBIG_OFFBIG, 15726: 15726: 15726: _SC_HOST_NAME_MAX, 15726: 15726: _SC_TRACE, 15726: 15726: _SC_TRACE_EVENT_FILTER, 15726: 15726: _SC_TRACE_INHERIT, 15726: 15726: _SC_TRACE_LOG, 15726: 15726: 15726: _SC_LEVEL1_ICACHE_SIZE, 15726: 15726: _SC_LEVEL1_ICACHE_ASSOC, 15726: 15726: _SC_LEVEL1_ICACHE_LINESIZE, 15726: 15726: _SC_LEVEL1_DCACHE_SIZE, 15726: 15726: _SC_LEVEL1_DCACHE_ASSOC, 15726: 15726: _SC_LEVEL1_DCACHE_LINESIZE, 15726: 15726: _SC_LEVEL2_CACHE_SIZE, 15726: 15726: _SC_LEVEL2_CACHE_ASSOC, 15726: 15726: _SC_LEVEL2_CACHE_LINESIZE, 15726: 15726: _SC_LEVEL3_CACHE_SIZE, 15726: 15726: _SC_LEVEL3_CACHE_ASSOC, 15726: 15726: _SC_LEVEL3_CACHE_LINESIZE, 15726: 15726: _SC_LEVEL4_CACHE_SIZE, 15726: 15726: _SC_LEVEL4_CACHE_ASSOC, 15726: 15726: _SC_LEVEL4_CACHE_LINESIZE, 15726: 15726: 15726: 15726: _SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50, 15726: 15726: _SC_RAW_SOCKETS, 15726: 15726: 15726: _SC_V7_ILP32_OFF32, 15726: 15726: _SC_V7_ILP32_OFFBIG, 15726: 15726: _SC_V7_LP64_OFF64, 15726: 15726: _SC_V7_LPBIG_OFFBIG, 15726: 15726: 15726: _SC_SS_REPL_MAX, 15726: 15726: 15726: _SC_TRACE_EVENT_NAME_MAX, 15726: 15726: _SC_TRACE_NAME_MAX, 15726: 15726: _SC_TRACE_SYS_MAX, 15726: 15726: _SC_TRACE_USER_EVENT_MAX, 15726: 15726: 15726: _SC_XOPEN_STREAMS, 15726: 15726: 15726: _SC_THREAD_ROBUST_PRIO_INHERIT, 15726: 15726: _SC_THREAD_ROBUST_PRIO_PROTECT, 15726: 15726: 15726: _SC_MINSIGSTKSZ, 15726: 15726: 15726: _SC_SIGSTKSZ 15726: 15726: }; 15726: 15726: 15726: enum 15726: { 15726: _CS_PATH, 15726: 15726: 15726: _CS_V6_WIDTH_RESTRICTED_ENVS, 15726: 15726: 15726: 15726: _CS_GNU_LIBC_VERSION, 15726: 15726: _CS_GNU_LIBPTHREAD_VERSION, 15726: 15726: 15726: _CS_V5_WIDTH_RESTRICTED_ENVS, 15726: 15726: 15726: 15726: _CS_V7_WIDTH_RESTRICTED_ENVS, 15726: 15726: 15726: 15726: _CS_LFS_CFLAGS = 1000, 15726: 15726: _CS_LFS_LDFLAGS, 15726: 15726: _CS_LFS_LIBS, 15726: 15726: _CS_LFS_LINTFLAGS, 15726: 15726: _CS_LFS64_CFLAGS, 15726: 15726: _CS_LFS64_LDFLAGS, 15726: 15726: _CS_LFS64_LIBS, 15726: 15726: _CS_LFS64_LINTFLAGS, 15726: 15726: 15726: _CS_XBS5_ILP32_OFF32_CFLAGS = 1100, 15726: 15726: _CS_XBS5_ILP32_OFF32_LDFLAGS, 15726: 15726: _CS_XBS5_ILP32_OFF32_LIBS, 15726: 15726: _CS_XBS5_ILP32_OFF32_LINTFLAGS, 15726: 15726: _CS_XBS5_ILP32_OFFBIG_CFLAGS, 15726: 15726: _CS_XBS5_ILP32_OFFBIG_LDFLAGS, 15726: 15726: _CS_XBS5_ILP32_OFFBIG_LIBS, 15726: 15726: _CS_XBS5_ILP32_OFFBIG_LINTFLAGS, 15726: 15726: _CS_XBS5_LP64_OFF64_CFLAGS, 15726: 15726: _CS_XBS5_LP64_OFF64_LDFLAGS, 15726: 15726: _CS_XBS5_LP64_OFF64_LIBS, 15726: 15726: _CS_XBS5_LP64_OFF64_LINTFLAGS, 15726: 15726: _CS_XBS5_LPBIG_OFFBIG_CFLAGS, 15726: 15726: _CS_XBS5_LPBIG_OFFBIG_LDFLAGS, 15726: 15726: _CS_XBS5_LPBIG_OFFBIG_LIBS, 15726: 15726: _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS, 15726: 15726: 15726: _CS_POSIX_V6_ILP32_OFF32_CFLAGS, 15726: 15726: _CS_POSIX_V6_ILP32_OFF32_LDFLAGS, 15726: 15726: _CS_POSIX_V6_ILP32_OFF32_LIBS, 15726: 15726: _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS, 15726: 15726: _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS, 15726: 15726: _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS, 15726: 15726: _CS_POSIX_V6_ILP32_OFFBIG_LIBS, 15726: 15726: _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS, 15726: 15726: _CS_POSIX_V6_LP64_OFF64_CFLAGS, 15726: 15726: _CS_POSIX_V6_LP64_OFF64_LDFLAGS, 15726: 15726: _CS_POSIX_V6_LP64_OFF64_LIBS, 15726: 15726: _CS_POSIX_V6_LP64_OFF64_LINTFLAGS, 15726: 15726: _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS, 15726: 15726: _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS, 15726: 15726: _CS_POSIX_V6_LPBIG_OFFBIG_LIBS, 15726: 15726: _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS, 15726: 15726: 15726: _CS_POSIX_V7_ILP32_OFF32_CFLAGS, 15726: 15726: _CS_POSIX_V7_ILP32_OFF32_LDFLAGS, 15726: 15726: _CS_POSIX_V7_ILP32_OFF32_LIBS, 15726: 15726: _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS, 15726: 15726: _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS, 15726: 15726: _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS, 15726: 15726: _CS_POSIX_V7_ILP32_OFFBIG_LIBS, 15726: 15726: _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS, 15726: 15726: _CS_POSIX_V7_LP64_OFF64_CFLAGS, 15726: 15726: _CS_POSIX_V7_LP64_OFF64_LDFLAGS, 15726: 15726: _CS_POSIX_V7_LP64_OFF64_LIBS, 15726: 15726: _CS_POSIX_V7_LP64_OFF64_LINTFLAGS, 15726: 15726: _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS, 15726: 15726: _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS, 15726: 15726: _CS_POSIX_V7_LPBIG_OFFBIG_LIBS, 15726: 15726: _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS, 15726: 15726: 15726: _CS_V6_ENV, 15726: 15726: _CS_V7_ENV 15726: 15726: }; 15726: # 631 "/usr/include/unistd.h" 2 3 4 15726: 15726: 15726: extern long int pathconf (const char *__path, int __name) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: extern long int fpathconf (int __fd, int __name) noexcept (true); 15726: 15726: 15726: extern long int sysconf (int __name) noexcept (true); 15726: 15726: 15726: 15726: extern size_t confstr (int __name, char *__buf, size_t __len) noexcept (true) 15726: __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: 15726: 15726: 15726: 15726: extern __pid_t getpid (void) noexcept (true); 15726: 15726: 15726: extern __pid_t getppid (void) noexcept (true); 15726: 15726: 15726: extern __pid_t getpgrp (void) noexcept (true); 15726: 15726: 15726: extern __pid_t __getpgid (__pid_t __pid) noexcept (true); 15726: 15726: extern __pid_t getpgid (__pid_t __pid) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int setpgid (__pid_t __pid, __pid_t __pgid) noexcept (true); 15726: # 682 "/usr/include/unistd.h" 3 4 15726: extern int setpgrp (void) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern __pid_t setsid (void) noexcept (true); 15726: 15726: 15726: 15726: extern __pid_t getsid (__pid_t __pid) noexcept (true); 15726: 15726: 15726: 15726: extern __uid_t getuid (void) noexcept (true); 15726: 15726: 15726: extern __uid_t geteuid (void) noexcept (true); 15726: 15726: 15726: extern __gid_t getgid (void) noexcept (true); 15726: 15726: 15726: extern __gid_t getegid (void) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int getgroups (int __size, __gid_t __list[]) noexcept (true) __attribute__ ((__warn_unused_result__)) 15726: __attribute__ ((__access__ (__write_only__, 2, 1))); 15726: 15726: 15726: extern int group_member (__gid_t __gid) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int setuid (__uid_t __uid) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern int setreuid (__uid_t __ruid, __uid_t __euid) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern int seteuid (__uid_t __uid) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int setgid (__gid_t __gid) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern int setregid (__gid_t __rgid, __gid_t __egid) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern int setegid (__gid_t __gid) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: extern int getresuid (__uid_t *__ruid, __uid_t *__euid, __uid_t *__suid) 15726: noexcept (true); 15726: 15726: 15726: 15726: extern int getresgid (__gid_t *__rgid, __gid_t *__egid, __gid_t *__sgid) 15726: noexcept (true); 15726: 15726: 15726: 15726: extern int setresuid (__uid_t __ruid, __uid_t __euid, __uid_t __suid) 15726: noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: extern int setresgid (__gid_t __rgid, __gid_t __egid, __gid_t __sgid) 15726: noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern __pid_t fork (void) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern __pid_t vfork (void) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern __pid_t _Fork (void) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern char *ttyname (int __fd) noexcept (true); 15726: 15726: 15726: 15726: extern int ttyname_r (int __fd, char *__buf, size_t __buflen) 15726: noexcept (true) __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__)) 15726: __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: 15726: 15726: 15726: extern int isatty (int __fd) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int ttyslot (void) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int link (const char *__from, const char *__to) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern int linkat (int __fromfd, const char *__from, int __tofd, 15726: const char *__to, int __flags) 15726: noexcept (true) __attribute__ ((__nonnull__ (2, 4))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern int symlink (const char *__from, const char *__to) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: extern ssize_t readlink (const char *__restrict __path, 15726: char *__restrict __buf, size_t __len) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)) 15726: __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: 15726: 15726: 15726: 15726: 15726: extern int symlinkat (const char *__from, int __tofd, 15726: const char *__to) noexcept (true) __attribute__ ((__nonnull__ (1, 3))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: extern ssize_t readlinkat (int __fd, const char *__restrict __path, 15726: char *__restrict __buf, size_t __len) 15726: noexcept (true) __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__)) 15726: __attribute__ ((__access__ (__write_only__, 3, 4))); 15726: 15726: 15726: 15726: extern int unlink (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern int unlinkat (int __fd, const char *__name, int __flag) 15726: noexcept (true) __attribute__ ((__nonnull__ (2))); 15726: 15726: 15726: 15726: extern int rmdir (const char *__path) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: extern __pid_t tcgetpgrp (int __fd) noexcept (true); 15726: 15726: 15726: extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern char *getlogin (void); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int getlogin_r (char *__name, size_t __name_len) __attribute__ ((__nonnull__ (1))) 15726: __attribute__ ((__access__ (__write_only__, 1, 2))); 15726: 15726: 15726: 15726: 15726: extern int setlogin (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/getopt_posix.h" 1 3 4 15726: # 27 "/usr/include/arm-linux-gnueabihf/bits/getopt_posix.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/getopt_core.h" 1 3 4 15726: # 28 "/usr/include/arm-linux-gnueabihf/bits/getopt_core.h" 3 4 15726: extern "C" { 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern char *optarg; 15726: # 50 "/usr/include/arm-linux-gnueabihf/bits/getopt_core.h" 3 4 15726: extern int optind; 15726: 15726: 15726: 15726: 15726: extern int opterr; 15726: 15726: 15726: 15726: extern int optopt; 15726: # 91 "/usr/include/arm-linux-gnueabihf/bits/getopt_core.h" 3 4 15726: extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) 15726: noexcept (true) __attribute__ ((__nonnull__ (2, 3))); 15726: 15726: } 15726: # 28 "/usr/include/arm-linux-gnueabihf/bits/getopt_posix.h" 2 3 4 15726: 15726: extern "C" { 15726: # 49 "/usr/include/arm-linux-gnueabihf/bits/getopt_posix.h" 3 4 15726: } 15726: # 904 "/usr/include/unistd.h" 2 3 4 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int gethostname (char *__name, size_t __len) noexcept (true) __attribute__ ((__nonnull__ (1))) 15726: __attribute__ ((__access__ (__write_only__, 1, 2))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int sethostname (const char *__name, size_t __len) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 1, 2))); 15726: 15726: 15726: 15726: extern int sethostid (long int __id) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: extern int getdomainname (char *__name, size_t __len) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) 15726: __attribute__ ((__access__ (__write_only__, 1, 2))); 15726: extern int setdomainname (const char *__name, size_t __len) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__read_only__, 1, 2))); 15726: 15726: 15726: 15726: 15726: extern int vhangup (void) noexcept (true); 15726: 15726: 15726: extern int revoke (const char *__file) noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int profil (unsigned short int *__sample_buffer, size_t __size, 15726: size_t __offset, unsigned int __scale) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: extern int acct (const char *__name) noexcept (true); 15726: 15726: 15726: 15726: extern char *getusershell (void) noexcept (true); 15726: extern void endusershell (void) noexcept (true); 15726: extern void setusershell (void) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern int daemon (int __nochdir, int __noclose) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int chroot (const char *__path) noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: extern char *getpass (const char *__prompt) __attribute__ ((__nonnull__ (1))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int fsync (int __fd); 15726: 15726: 15726: 15726: 15726: 15726: extern int syncfs (int __fd) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern long int gethostid (void); 15726: 15726: 15726: extern void sync (void) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern int getpagesize (void) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: 15726: 15726: extern int getdtablesize (void) noexcept (true); 15726: # 1030 "/usr/include/unistd.h" 3 4 15726: extern int truncate (const char *__file, __off64_t __length) noexcept (true) __asm__ ("" "truncate64") 15726: 15726: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: extern int truncate64 (const char *__file, __off64_t __length) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); 15726: # 1052 "/usr/include/unistd.h" 3 4 15726: extern int ftruncate (int __fd, __off64_t __length) noexcept (true) __asm__ ("" "ftruncate64") 15726: __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: extern int ftruncate64 (int __fd, __off64_t __length) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: # 1070 "/usr/include/unistd.h" 3 4 15726: extern int brk (void *__addr) noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: extern void *sbrk (intptr_t __delta) noexcept (true); 15726: # 1091 "/usr/include/unistd.h" 3 4 15726: extern long int syscall (long int __sysno, ...) noexcept (true); 15726: # 1117 "/usr/include/unistd.h" 3 4 15726: extern int lockf (int __fd, int __cmd, __off64_t __len) __asm__ ("" "lockf64") 15726: __attribute__ ((__warn_unused_result__)); 15726: 15726: 15726: 15726: 15726: 15726: extern int lockf64 (int __fd, int __cmd, __off64_t __len) __attribute__ ((__warn_unused_result__)); 15726: # 1142 "/usr/include/unistd.h" 3 4 15726: ssize_t copy_file_range (int __infd, __off64_t *__pinoff, 15726: int __outfd, __off64_t *__poutoff, 15726: size_t __length, unsigned int __flags); 15726: 15726: 15726: 15726: 15726: 15726: extern int fdatasync (int __fildes); 15726: # 1162 "/usr/include/unistd.h" 3 4 15726: extern char *crypt (const char *__key, const char *__salt) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern void swab (const void *__restrict __from, void *__restrict __to, 15726: ssize_t __n) noexcept (true) __attribute__ ((__nonnull__ (1, 2))) 15726: __attribute__ ((__access__ (__read_only__, 1, 3))) 15726: __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: # 1201 "/usr/include/unistd.h" 3 4 15726: int getentropy (void *__buffer, size_t __length) __attribute__ ((__warn_unused_result__)) 15726: __attribute__ ((__access__ (__write_only__, 1, 2))); 15726: # 1211 "/usr/include/unistd.h" 3 4 15726: extern int close_range (unsigned int __fd, unsigned int __max_fd, 15726: int __flags) noexcept (true); 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/unistd.h" 1 3 4 15726: # 23 "/usr/include/arm-linux-gnueabihf/bits/unistd.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/unistd-decl.h" 1 3 4 15726: # 26 "/usr/include/arm-linux-gnueabihf/bits/unistd-decl.h" 3 4 15726: extern ssize_t __read_chk (int __fd, void *__buf, size_t __nbytes, 15726: size_t __buflen) 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: extern ssize_t __read_alias (int __fd, void *__buf, size_t __nbytes) __asm__ ("" "read") 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: extern ssize_t __read_chk_warn (int __fd, void *__buf, size_t __nbytes, size_t __buflen) __asm__ ("" "__read_chk") 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("read called with bigger length than size of " "the destination buffer"))) 15726: ; 15726: 15726: 15726: extern ssize_t __pread_chk (int __fd, void *__buf, size_t __nbytes, 15726: __off_t __offset, size_t __bufsize) 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: extern ssize_t __pread64_chk (int __fd, void *__buf, size_t __nbytes, 15726: __off64_t __offset, size_t __bufsize) 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: extern ssize_t __pread_alias (int __fd, void *__buf, size_t __nbytes, __off_t __offset) __asm__ ("" "pread") 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: extern ssize_t __pread64_alias (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) __asm__ ("" "pread64") 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: extern ssize_t __pread_chk_warn (int __fd, void *__buf, size_t __nbytes, __off_t __offset, size_t __bufsize) __asm__ ("" "__pread_chk") 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("pread called with bigger length than size of " "the destination buffer"))) 15726: ; 15726: extern ssize_t __pread64_chk_warn (int __fd, void *__buf, size_t __nbytes, __off64_t __offset, size_t __bufsize) __asm__ ("" "__pread64_chk") 15726: 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("pread64 called with bigger length than size of " "the destination buffer"))) 15726: ; 15726: 15726: 15726: 15726: extern ssize_t __readlink_chk (const char *__restrict __path, 15726: char *__restrict __buf, size_t __len, 15726: size_t __buflen) 15726: noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: extern ssize_t __readlink_alias (const char *__restrict __path, char *__restrict __buf, size_t __len) noexcept (true) __asm__ ("" "readlink") 15726: 15726: 15726: __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: extern ssize_t __readlink_chk_warn (const char *__restrict __path, char *__restrict __buf, size_t __len, size_t __buflen) noexcept (true) __asm__ ("" "__readlink_chk") 15726: 15726: 15726: 15726: __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("readlink called with bigger length " "than size of destination buffer"))) 15726: ; 15726: 15726: 15726: 15726: extern ssize_t __readlinkat_chk (int __fd, const char *__restrict __path, 15726: char *__restrict __buf, size_t __len, 15726: size_t __buflen) 15726: noexcept (true) __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 3, 4))); 15726: extern ssize_t __readlinkat_alias (int __fd, const char *__restrict __path, char *__restrict __buf, size_t __len) noexcept (true) __asm__ ("" "readlinkat") 15726: 15726: 15726: 15726: __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 3, 4))); 15726: extern ssize_t __readlinkat_chk_warn (int __fd, const char *__restrict __path, char *__restrict __buf, size_t __len, size_t __buflen) noexcept (true) __asm__ ("" "__readlinkat_chk") 15726: 15726: 15726: 15726: __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("readlinkat called with bigger " "length than size of destination " "buffer"))) 15726: 15726: ; 15726: 15726: 15726: extern char *__getcwd_chk (char *__buf, size_t __size, size_t __buflen) 15726: noexcept (true) __attribute__ ((__warn_unused_result__)); 15726: extern char *__getcwd_alias (char *__buf, size_t __size) noexcept (true) __asm__ ("" "getcwd") 15726: __attribute__ ((__warn_unused_result__)); 15726: extern char *__getcwd_chk_warn (char *__buf, size_t __size, size_t __buflen) noexcept (true) __asm__ ("" "__getcwd_chk") 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("getcwd caller with bigger length than size of " "destination buffer"))) 15726: ; 15726: 15726: 15726: extern char *__getwd_chk (char *__buf, size_t buflen) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))); 15726: extern char *__getwd_warn (char *__buf) noexcept (true) __asm__ ("" "getwd") 15726: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("please use getcwd instead, as getwd " "doesn't specify buffer size"))) 15726: ; 15726: 15726: 15726: extern size_t __confstr_chk (int __name, char *__buf, size_t __len, 15726: size_t __buflen) noexcept (true) 15726: __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: extern size_t __confstr_alias (int __name, char *__buf, size_t __len) noexcept (true) __asm__ ("" "confstr") 15726: 15726: __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: extern size_t __confstr_chk_warn (int __name, char *__buf, size_t __len, size_t __buflen) noexcept (true) __asm__ ("" "__confstr_chk") 15726: 15726: 15726: __attribute__((__warning__ ("confstr called with bigger length than size of destination " "buffer"))) 15726: ; 15726: 15726: 15726: extern int __getgroups_chk (int __size, __gid_t __list[], size_t __listlen) 15726: noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 1))); 15726: extern int __getgroups_alias (int __size, __gid_t __list[]) noexcept (true) __asm__ ("" "getgroups") 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 1))); 15726: extern int __getgroups_chk_warn (int __size, __gid_t __list[], size_t __listlen) noexcept (true) __asm__ ("" "__getgroups_chk") 15726: 15726: 15726: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("getgroups called with bigger group count than what " "can fit into destination buffer"))) 15726: ; 15726: 15726: 15726: extern int __ttyname_r_chk (int __fd, char *__buf, size_t __buflen, 15726: size_t __nreal) noexcept (true) __attribute__ ((__nonnull__ (2))) 15726: __attribute__ ((__access__ (__write_only__, 2, 3))); 15726: extern int __ttyname_r_alias (int __fd, char *__buf, size_t __buflen) noexcept (true) __asm__ ("" "ttyname_r") 15726: 15726: __attribute__ ((__nonnull__ (2))); 15726: extern int __ttyname_r_chk_warn (int __fd, char *__buf, size_t __buflen, size_t __nreal) noexcept (true) __asm__ ("" "__ttyname_r_chk") 15726: 15726: 15726: __attribute__ ((__nonnull__ (2))) __attribute__((__warning__ ("ttyname_r called with bigger buflen than " "size of destination buffer"))) 15726: ; 15726: 15726: 15726: 15726: extern int __getlogin_r_chk (char *__buf, size_t __buflen, size_t __nreal) 15726: __attribute__ ((__nonnull__ (1))) __attribute__ ((__access__ (__write_only__, 1, 2))); 15726: extern int __getlogin_r_alias (char *__buf, size_t __buflen) __asm__ ("" "getlogin_r") 15726: __attribute__ ((__nonnull__ (1))); 15726: extern int __getlogin_r_chk_warn (char *__buf, size_t __buflen, size_t __nreal) __asm__ ("" "__getlogin_r_chk") 15726: 15726: 15726: __attribute__ ((__nonnull__ (1))) __attribute__((__warning__ ("getlogin_r called with bigger buflen than " "size of destination buffer"))) 15726: ; 15726: 15726: 15726: 15726: 15726: extern int __gethostname_chk (char *__buf, size_t __buflen, size_t __nreal) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__access__ (__write_only__, 1, 2))); 15726: extern int __gethostname_alias (char *__buf, size_t __buflen) noexcept (true) __asm__ ("" "gethostname") 15726: 15726: __attribute__ ((__nonnull__ (1))) __attribute__ ((__access__ (__write_only__, 1, 2))); 15726: extern int __gethostname_chk_warn (char *__buf, size_t __buflen, size_t __nreal) noexcept (true) __asm__ ("" "__gethostname_chk") 15726: 15726: 15726: __attribute__ ((__nonnull__ (1))) __attribute__((__warning__ ("gethostname called with bigger buflen than " "size of destination buffer"))) 15726: ; 15726: 15726: 15726: 15726: 15726: extern int __getdomainname_chk (char *__buf, size_t __buflen, size_t __nreal) 15726: noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))); 15726: extern int __getdomainname_alias (char *__buf, size_t __buflen) noexcept (true) __asm__ ("" "getdomainname") 15726: 15726: __attribute__ ((__nonnull__ (1))) 15726: __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))); 15726: extern int __getdomainname_chk_warn (char *__buf, size_t __buflen, size_t __nreal) noexcept (true) __asm__ ("" "__getdomainname_chk") 15726: 15726: 15726: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("getdomainname called with bigger " "buflen than size of destination " "buffer"))) 15726: 15726: ; 15726: # 24 "/usr/include/arm-linux-gnueabihf/bits/unistd.h" 2 3 4 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) ssize_t 15726: read (int __fd, void *__buf, size_t __nbytes) 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__buf, 0)) && (__builtin_object_size (__buf, 0)) == (unsigned int) -1) || (((__typeof (__nbytes)) 0 < (__typeof (__nbytes)) -1 || (__builtin_constant_p (__nbytes) && (__nbytes) > 0)) && __builtin_constant_p ((((unsigned int) (__nbytes)) <= ((__builtin_object_size (__buf, 0))) / ((sizeof (char))))) && (((unsigned int) (__nbytes)) <= ((__builtin_object_size (__buf, 0))) / ((sizeof (char)))))) ? __read_alias (__fd, __buf, __nbytes) : ((((__typeof (__nbytes)) 0 < (__typeof (__nbytes)) -1 || (__builtin_constant_p (__nbytes) && (__nbytes) > 0)) && __builtin_constant_p ((((unsigned int) (__nbytes)) <= (__builtin_object_size (__buf, 0)) / (sizeof (char)))) && !(((unsigned int) (__nbytes)) <= (__builtin_object_size (__buf, 0)) / (sizeof (char)))) ? __read_chk_warn (__fd, __buf, __nbytes, __builtin_object_size (__buf, 0)) : __read_chk (__fd, __buf, __nbytes, __builtin_object_size (__buf, 0)))) 15726: 15726: ; 15726: } 15726: # 43 "/usr/include/arm-linux-gnueabihf/bits/unistd.h" 3 4 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) ssize_t 15726: pread (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__buf, 0)) && (__builtin_object_size (__buf, 0)) == (unsigned int) -1) || (((__typeof (__nbytes)) 0 < (__typeof (__nbytes)) -1 || (__builtin_constant_p (__nbytes) && (__nbytes) > 0)) && __builtin_constant_p ((((unsigned int) (__nbytes)) <= ((__builtin_object_size (__buf, 0))) / ((sizeof (char))))) && (((unsigned int) (__nbytes)) <= ((__builtin_object_size (__buf, 0))) / ((sizeof (char)))))) ? __pread64_alias (__fd, __buf, __nbytes, __offset) : ((((__typeof (__nbytes)) 0 < (__typeof (__nbytes)) -1 || (__builtin_constant_p (__nbytes) && (__nbytes) > 0)) && __builtin_constant_p ((((unsigned int) (__nbytes)) <= (__builtin_object_size (__buf, 0)) / (sizeof (char)))) && !(((unsigned int) (__nbytes)) <= (__builtin_object_size (__buf, 0)) / (sizeof (char)))) ? __pread64_chk_warn (__fd, __buf, __nbytes, __offset, __builtin_object_size (__buf, 0)) : __pread64_chk (__fd, __buf, __nbytes, __offset, __builtin_object_size (__buf, 0)))) 15726: 15726: ; 15726: } 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) ssize_t 15726: pread64 (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__buf, 0)) && (__builtin_object_size (__buf, 0)) == (unsigned int) -1) || (((__typeof (__nbytes)) 0 < (__typeof (__nbytes)) -1 || (__builtin_constant_p (__nbytes) && (__nbytes) > 0)) && __builtin_constant_p ((((unsigned int) (__nbytes)) <= ((__builtin_object_size (__buf, 0))) / ((sizeof (char))))) && (((unsigned int) (__nbytes)) <= ((__builtin_object_size (__buf, 0))) / ((sizeof (char)))))) ? __pread64_alias (__fd, __buf, __nbytes, __offset) : ((((__typeof (__nbytes)) 0 < (__typeof (__nbytes)) -1 || (__builtin_constant_p (__nbytes) && (__nbytes) > 0)) && __builtin_constant_p ((((unsigned int) (__nbytes)) <= (__builtin_object_size (__buf, 0)) / (sizeof (char)))) && !(((unsigned int) (__nbytes)) <= (__builtin_object_size (__buf, 0)) / (sizeof (char)))) ? __pread64_chk_warn (__fd, __buf, __nbytes, __offset, __builtin_object_size (__buf, 0)) : __pread64_chk (__fd, __buf, __nbytes, __offset, __builtin_object_size (__buf, 0)))) 15726: 15726: ; 15726: } 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)) ssize_t 15726: __attribute__ ((__leaf__)) readlink (const char *__restrict __path, char *__restrict __buf, size_t __len) noexcept (true) 15726: 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__buf, 2 > 1)) && (__builtin_object_size (__buf, 2 > 1)) == (unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__len)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char)))))) ? __readlink_alias (__path, __buf, __len) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__len)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) ? __readlink_chk_warn (__path, __buf, __len, __builtin_object_size (__buf, 2 > 1)) : __readlink_chk (__path, __buf, __len, __builtin_object_size (__buf, 2 > 1)))) 15726: 15726: ; 15726: } 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__)) ssize_t 15726: __attribute__ ((__leaf__)) readlinkat (int __fd, const char *__restrict __path, char *__restrict __buf, size_t __len) noexcept (true) 15726: 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__buf, 2 > 1)) && (__builtin_object_size (__buf, 2 > 1)) == (unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__len)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char)))))) ? __readlinkat_alias (__fd, __path, __buf, __len) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__len)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) ? __readlinkat_chk_warn (__fd, __path, __buf, __len, __builtin_object_size (__buf, 2 > 1)) : __readlinkat_chk (__fd, __path, __buf, __len, __builtin_object_size (__buf, 2 > 1)))) 15726: 15726: ; 15726: } 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char * 15726: __attribute__ ((__leaf__)) getcwd (char *__buf, size_t __size) noexcept (true) 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__buf, 2 > 1)) && (__builtin_object_size (__buf, 2 > 1)) == (unsigned int) -1) || (((__typeof (__size)) 0 < (__typeof (__size)) -1 || (__builtin_constant_p (__size) && (__size) > 0)) && __builtin_constant_p ((((unsigned int) (__size)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__size)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char)))))) ? __getcwd_alias (__buf, __size) : ((((__typeof (__size)) 0 < (__typeof (__size)) -1 || (__builtin_constant_p (__size) && (__size) > 0)) && __builtin_constant_p ((((unsigned int) (__size)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__size)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) ? __getcwd_chk_warn (__buf, __size, __builtin_object_size (__buf, 2 > 1)) : __getcwd_chk (__buf, __size, __builtin_object_size (__buf, 2 > 1)))) 15726: 15726: ; 15726: } 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)) __attribute__ ((__warn_unused_result__)) char * 15726: __attribute__ ((__leaf__)) getwd (char *__buf) noexcept (true) 15726: { 15726: if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1) 15726: return __getwd_chk (__buf, __builtin_object_size (__buf, 2 > 1)); 15726: return __getwd_warn (__buf); 15726: } 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t 15726: __attribute__ ((__leaf__)) confstr (int __name, char *__buf, size_t __len) noexcept (true) 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__buf, 2 > 1)) && (__builtin_object_size (__buf, 2 > 1)) == (unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__len)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char)))))) ? __confstr_alias (__name, __buf, __len) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((unsigned int) (__len)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__len)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) ? __confstr_chk_warn (__name, __buf, __len, __builtin_object_size (__buf, 2 > 1)) : __confstr_chk (__name, __buf, __len, __builtin_object_size (__buf, 2 > 1)))) 15726: 15726: ; 15726: } 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: __attribute__ ((__leaf__)) getgroups (int __size, __gid_t __list[]) noexcept (true) 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__list, 2 > 1)) && (__builtin_object_size (__list, 2 > 1)) == (unsigned int) -1) || (((__typeof (__size)) 0 < (__typeof (__size)) -1 || (__builtin_constant_p (__size) && (__size) > 0)) && __builtin_constant_p ((((unsigned int) (__size)) <= ((__builtin_object_size (__list, 2 > 1))) / ((sizeof (__gid_t))))) && (((unsigned int) (__size)) <= ((__builtin_object_size (__list, 2 > 1))) / ((sizeof (__gid_t)))))) ? __getgroups_alias (__size, __list) : ((((__typeof (__size)) 0 < (__typeof (__size)) -1 || (__builtin_constant_p (__size) && (__size) > 0)) && __builtin_constant_p ((((unsigned int) (__size)) <= (__builtin_object_size (__list, 2 > 1)) / (sizeof (__gid_t)))) && !(((unsigned int) (__size)) <= (__builtin_object_size (__list, 2 > 1)) / (sizeof (__gid_t)))) ? __getgroups_chk_warn (__size, __list, __builtin_object_size (__list, 2 > 1)) : __getgroups_chk (__size, __list, __builtin_object_size (__list, 2 > 1)))) 15726: 15726: ; 15726: } 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: __attribute__ ((__leaf__)) ttyname_r (int __fd, char *__buf, size_t __buflen) noexcept (true) 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__buf, 2 > 1)) && (__builtin_object_size (__buf, 2 > 1)) == (unsigned int) -1) || (((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char)))))) ? __ttyname_r_alias (__fd, __buf, __buflen) : ((((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) ? __ttyname_r_chk_warn (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1)) : __ttyname_r_chk (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1)))) 15726: 15726: ; 15726: } 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: getlogin_r (char *__buf, size_t __buflen) 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__buf, 2 > 1)) && (__builtin_object_size (__buf, 2 > 1)) == (unsigned int) -1) || (((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char)))))) ? __getlogin_r_alias (__buf, __buflen) : ((((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) ? __getlogin_r_chk_warn (__buf, __buflen, __builtin_object_size (__buf, 2 > 1)) : __getlogin_r_chk (__buf, __buflen, __builtin_object_size (__buf, 2 > 1)))) 15726: 15726: ; 15726: } 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: __attribute__ ((__leaf__)) gethostname (char *__buf, size_t __buflen) noexcept (true) 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__buf, 2 > 1)) && (__builtin_object_size (__buf, 2 > 1)) == (unsigned int) -1) || (((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char)))))) ? __gethostname_alias (__buf, __buflen) : ((((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) ? __gethostname_chk_warn (__buf, __buflen, __builtin_object_size (__buf, 2 > 1)) : __gethostname_chk (__buf, __buflen, __builtin_object_size (__buf, 2 > 1)))) 15726: 15726: ; 15726: } 15726: 15726: 15726: 15726: 15726: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int 15726: __attribute__ ((__leaf__)) getdomainname (char *__buf, size_t __buflen) noexcept (true) 15726: { 15726: return (((__builtin_constant_p (__builtin_object_size (__buf, 2 > 1)) && (__builtin_object_size (__buf, 2 > 1)) == (unsigned int) -1) || (((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char))))) && (((unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char)))))) ? __getdomainname_alias (__buf, __buflen) : ((((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) && !(((unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) ? __getdomainname_chk_warn (__buf, __buflen, __builtin_object_size (__buf, 2 > 1)) : __getdomainname_chk (__buf, __buflen, __builtin_object_size (__buf, 2 > 1)))) 15726: 15726: ; 15726: } 15726: # 1218 "/usr/include/unistd.h" 2 3 4 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/unistd_ext.h" 1 3 4 15726: # 34 "/usr/include/arm-linux-gnueabihf/bits/unistd_ext.h" 3 4 15726: extern __pid_t gettid (void) noexcept (true); 15726: 15726: 15726: 15726: # 1 "/usr/include/linux/close_range.h" 1 3 4 15726: # 39 "/usr/include/arm-linux-gnueabihf/bits/unistd_ext.h" 2 3 4 15726: # 1222 "/usr/include/unistd.h" 2 3 4 15726: 15726: } 15726: # 485 "/usr/include/zconf.h" 2 3 4 15726: # 35 "/usr/include/zlib.h" 2 3 4 15726: 15726: 15726: extern "C" { 15726: # 81 "/usr/include/zlib.h" 3 4 15726: typedef voidpf (*alloc_func)(voidpf opaque, uInt items, uInt size); 15726: typedef void (*free_func)(voidpf opaque, voidpf address); 15726: 15726: struct internal_state; 15726: 15726: typedef struct z_stream_s { 15726: Bytef *next_in; 15726: uInt avail_in; 15726: uLong total_in; 15726: 15726: Bytef *next_out; 15726: uInt avail_out; 15726: uLong total_out; 15726: 15726: char *msg; 15726: struct internal_state *state; 15726: 15726: alloc_func zalloc; 15726: free_func zfree; 15726: voidpf opaque; 15726: 15726: int data_type; 15726: 15726: uLong adler; 15726: uLong reserved; 15726: } z_stream; 15726: 15726: typedef z_stream *z_streamp; 15726: 15726: 15726: 15726: 15726: 15726: typedef struct gz_header_s { 15726: int text; 15726: uLong time; 15726: int xflags; 15726: int os; 15726: Bytef *extra; 15726: uInt extra_len; 15726: uInt extra_max; 15726: Bytef *name; 15726: uInt name_max; 15726: Bytef *comment; 15726: uInt comm_max; 15726: int hcrc; 15726: int done; 15726: 15726: } gz_header; 15726: 15726: typedef gz_header *gz_headerp; 15726: # 220 "/usr/include/zlib.h" 3 4 15726: extern const char * zlibVersion(void); 15726: # 250 "/usr/include/zlib.h" 3 4 15726: extern int deflate(z_streamp strm, int flush); 15726: # 363 "/usr/include/zlib.h" 3 4 15726: extern int deflateEnd(z_streamp strm); 15726: # 401 "/usr/include/zlib.h" 3 4 15726: extern int inflate(z_streamp strm, int flush); 15726: # 521 "/usr/include/zlib.h" 3 4 15726: extern int inflateEnd(z_streamp strm); 15726: # 611 "/usr/include/zlib.h" 3 4 15726: extern int deflateSetDictionary(z_streamp strm, 15726: const Bytef *dictionary, 15726: uInt dictLength); 15726: # 655 "/usr/include/zlib.h" 3 4 15726: extern int deflateGetDictionary(z_streamp strm, 15726: Bytef *dictionary, 15726: uInt *dictLength); 15726: # 677 "/usr/include/zlib.h" 3 4 15726: extern int deflateCopy(z_streamp dest, 15726: z_streamp source); 15726: # 695 "/usr/include/zlib.h" 3 4 15726: extern int deflateReset(z_streamp strm); 15726: # 706 "/usr/include/zlib.h" 3 4 15726: extern int deflateParams(z_streamp strm, 15726: int level, 15726: int strategy); 15726: # 744 "/usr/include/zlib.h" 3 4 15726: extern int deflateTune(z_streamp strm, 15726: int good_length, 15726: int max_lazy, 15726: int nice_length, 15726: int max_chain); 15726: # 761 "/usr/include/zlib.h" 3 4 15726: extern uLong deflateBound(z_streamp strm, 15726: uLong sourceLen); 15726: # 776 "/usr/include/zlib.h" 3 4 15726: extern int deflatePending(z_streamp strm, 15726: unsigned *pending, 15726: int *bits); 15726: # 791 "/usr/include/zlib.h" 3 4 15726: extern int deflatePrime(z_streamp strm, 15726: int bits, 15726: int value); 15726: # 808 "/usr/include/zlib.h" 3 4 15726: extern int deflateSetHeader(z_streamp strm, 15726: gz_headerp head); 15726: # 888 "/usr/include/zlib.h" 3 4 15726: extern int inflateSetDictionary(z_streamp strm, 15726: const Bytef *dictionary, 15726: uInt dictLength); 15726: # 911 "/usr/include/zlib.h" 3 4 15726: extern int inflateGetDictionary(z_streamp strm, 15726: Bytef *dictionary, 15726: uInt *dictLength); 15726: # 926 "/usr/include/zlib.h" 3 4 15726: extern int inflateSync(z_streamp strm); 15726: # 945 "/usr/include/zlib.h" 3 4 15726: extern int inflateCopy(z_streamp dest, 15726: z_streamp source); 15726: # 961 "/usr/include/zlib.h" 3 4 15726: extern int inflateReset(z_streamp strm); 15726: # 972 "/usr/include/zlib.h" 3 4 15726: extern int inflateReset2(z_streamp strm, 15726: int windowBits); 15726: # 986 "/usr/include/zlib.h" 3 4 15726: extern int inflatePrime(z_streamp strm, 15726: int bits, 15726: int value); 15726: # 1007 "/usr/include/zlib.h" 3 4 15726: extern long inflateMark(z_streamp strm); 15726: # 1035 "/usr/include/zlib.h" 3 4 15726: extern int inflateGetHeader(z_streamp strm, 15726: gz_headerp head); 15726: # 1097 "/usr/include/zlib.h" 3 4 15726: typedef unsigned (*in_func)(void *, 15726: unsigned char * *); 15726: typedef int (*out_func)(void *, unsigned char *, unsigned); 15726: 15726: extern int inflateBack(z_streamp strm, 15726: in_func in, void *in_desc, 15726: out_func out, void *out_desc); 15726: # 1171 "/usr/include/zlib.h" 3 4 15726: extern int inflateBackEnd(z_streamp strm); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern uLong zlibCompileFlags(void); 15726: # 1232 "/usr/include/zlib.h" 3 4 15726: extern int compress(Bytef *dest, uLongf *destLen, 15726: const Bytef *source, uLong sourceLen); 15726: # 1247 "/usr/include/zlib.h" 3 4 15726: extern int compress2(Bytef *dest, uLongf *destLen, 15726: const Bytef *source, uLong sourceLen, 15726: int level); 15726: # 1263 "/usr/include/zlib.h" 3 4 15726: extern uLong compressBound(uLong sourceLen); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int uncompress(Bytef *dest, uLongf *destLen, 15726: const Bytef *source, uLong sourceLen); 15726: # 1288 "/usr/include/zlib.h" 3 4 15726: extern int uncompress2(Bytef *dest, uLongf *destLen, 15726: const Bytef *source, uLong *sourceLen); 15726: # 1305 "/usr/include/zlib.h" 3 4 15726: typedef struct gzFile_s *gzFile; 15726: # 1345 "/usr/include/zlib.h" 3 4 15726: extern gzFile gzdopen(int fd, const char *mode); 15726: # 1368 "/usr/include/zlib.h" 3 4 15726: extern int gzbuffer(gzFile file, unsigned size); 15726: # 1384 "/usr/include/zlib.h" 3 4 15726: extern int gzsetparams(gzFile file, int level, int strategy); 15726: # 1395 "/usr/include/zlib.h" 3 4 15726: extern int gzread(gzFile file, voidp buf, unsigned len); 15726: # 1425 "/usr/include/zlib.h" 3 4 15726: extern z_size_t gzfread(voidp buf, z_size_t size, z_size_t nitems, 15726: gzFile file); 15726: # 1451 "/usr/include/zlib.h" 3 4 15726: extern int gzwrite(gzFile file, voidpc buf, unsigned len); 15726: 15726: 15726: 15726: 15726: 15726: extern z_size_t gzfwrite(voidpc buf, z_size_t size, 15726: z_size_t nitems, gzFile file); 15726: # 1471 "/usr/include/zlib.h" 3 4 15726: extern int gzprintf(gzFile file, const char *format, ...); 15726: # 1486 "/usr/include/zlib.h" 3 4 15726: extern int gzputs(gzFile file, const char *s); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern char * gzgets(gzFile file, char *buf, int len); 15726: # 1508 "/usr/include/zlib.h" 3 4 15726: extern int gzputc(gzFile file, int c); 15726: 15726: 15726: 15726: 15726: 15726: extern int gzgetc(gzFile file); 15726: # 1523 "/usr/include/zlib.h" 3 4 15726: extern int gzungetc(int c, gzFile file); 15726: # 1535 "/usr/include/zlib.h" 3 4 15726: extern int gzflush(gzFile file, int flush); 15726: # 1570 "/usr/include/zlib.h" 3 4 15726: extern int gzrewind(gzFile file); 15726: # 1598 "/usr/include/zlib.h" 3 4 15726: extern int gzeof(gzFile file); 15726: # 1613 "/usr/include/zlib.h" 3 4 15726: extern int gzdirect(gzFile file); 15726: # 1634 "/usr/include/zlib.h" 3 4 15726: extern int gzclose(gzFile file); 15726: # 1647 "/usr/include/zlib.h" 3 4 15726: extern int gzclose_r(gzFile file); 15726: extern int gzclose_w(gzFile file); 15726: # 1659 "/usr/include/zlib.h" 3 4 15726: extern const char * gzerror(gzFile file, int *errnum); 15726: # 1675 "/usr/include/zlib.h" 3 4 15726: extern void gzclearerr(gzFile file); 15726: # 1692 "/usr/include/zlib.h" 3 4 15726: extern uLong adler32(uLong adler, const Bytef *buf, uInt len); 15726: # 1712 "/usr/include/zlib.h" 3 4 15726: extern uLong adler32_z(uLong adler, const Bytef *buf, 15726: z_size_t len); 15726: # 1730 "/usr/include/zlib.h" 3 4 15726: extern uLong crc32(uLong crc, const Bytef *buf, uInt len); 15726: # 1748 "/usr/include/zlib.h" 3 4 15726: extern uLong crc32_z(uLong crc, const Bytef *buf, 15726: z_size_t len); 15726: # 1771 "/usr/include/zlib.h" 3 4 15726: extern uLong crc32_combine_op(uLong crc1, uLong crc2, uLong op); 15726: # 1784 "/usr/include/zlib.h" 3 4 15726: extern int deflateInit_(z_streamp strm, int level, 15726: const char *version, int stream_size); 15726: extern int inflateInit_(z_streamp strm, 15726: const char *version, int stream_size); 15726: extern int deflateInit2_(z_streamp strm, int level, int method, 15726: int windowBits, int memLevel, 15726: int strategy, const char *version, 15726: int stream_size); 15726: extern int inflateInit2_(z_streamp strm, int windowBits, 15726: const char *version, int stream_size); 15726: extern int inflateBackInit_(z_streamp strm, int windowBits, 15726: unsigned char *window, 15726: const char *version, 15726: int stream_size); 15726: # 1837 "/usr/include/zlib.h" 3 4 15726: struct gzFile_s { 15726: unsigned have; 15726: unsigned char *next; 15726: off64_t pos; 15726: }; 15726: extern int gzgetc_(gzFile file); 15726: # 1859 "/usr/include/zlib.h" 3 4 15726: extern gzFile gzopen64(const char *, const char *); 15726: extern off64_t gzseek64(gzFile, off64_t, int); 15726: extern off64_t gztell64(gzFile); 15726: extern off64_t gzoffset64(gzFile); 15726: extern uLong adler32_combine64(uLong, uLong, off64_t); 15726: extern uLong crc32_combine64(uLong, uLong, off64_t); 15726: extern uLong crc32_combine_gen64(off64_t); 15726: # 1914 "/usr/include/zlib.h" 3 4 15726: extern const char * zError(int); 15726: extern int inflateSyncPoint(z_streamp); 15726: extern const z_crc_t * get_crc_table(void); 15726: extern int inflateUndermine(z_streamp, int); 15726: extern int inflateValidate(z_streamp, int); 15726: extern unsigned long inflateCodesUsed(z_streamp); 15726: extern int inflateResetKeep(z_streamp); 15726: extern int deflateResetKeep(z_streamp); 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int gzvprintf(gzFile file, 15726: const char *format, 15726: va_list va); 15726: 15726: 15726: 15726: 15726: } 15726: # 38 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 15726: 15726: 15726: 15726: # 1 "/usr/include/bzlib.h" 1 3 4 15726: # 26 "/usr/include/bzlib.h" 3 4 15726: extern "C" { 15726: # 48 "/usr/include/bzlib.h" 3 4 15726: typedef 15726: struct { 15726: char *next_in; 15726: unsigned int avail_in; 15726: unsigned int total_in_lo32; 15726: unsigned int total_in_hi32; 15726: 15726: char *next_out; 15726: unsigned int avail_out; 15726: unsigned int total_out_lo32; 15726: unsigned int total_out_hi32; 15726: 15726: void *state; 15726: 15726: void *(*bzalloc)(void *,int,int); 15726: void (*bzfree)(void *,void *); 15726: void *opaque; 15726: } 15726: bz_stream; 15726: # 100 "/usr/include/bzlib.h" 3 4 15726: extern int BZ2_bzCompressInit ( 15726: bz_stream* strm, 15726: int blockSize100k, 15726: int verbosity, 15726: int workFactor 15726: ); 15726: 15726: extern int BZ2_bzCompress ( 15726: bz_stream* strm, 15726: int action 15726: ); 15726: 15726: extern int BZ2_bzCompressEnd ( 15726: bz_stream* strm 15726: ); 15726: 15726: extern int BZ2_bzDecompressInit ( 15726: bz_stream *strm, 15726: int verbosity, 15726: int small 15726: ); 15726: 15726: extern int BZ2_bzDecompress ( 15726: bz_stream* strm 15726: ); 15726: 15726: extern int BZ2_bzDecompressEnd ( 15726: bz_stream *strm 15726: ); 15726: # 137 "/usr/include/bzlib.h" 3 4 15726: typedef void BZFILE; 15726: 15726: extern BZFILE* BZ2_bzReadOpen ( 15726: int* bzerror, 15726: FILE* f, 15726: int verbosity, 15726: int small, 15726: void* unused, 15726: int nUnused 15726: ); 15726: 15726: extern void BZ2_bzReadClose ( 15726: int* bzerror, 15726: BZFILE* b 15726: ); 15726: 15726: extern void BZ2_bzReadGetUnused ( 15726: int* bzerror, 15726: BZFILE* b, 15726: void** unused, 15726: int* nUnused 15726: ); 15726: 15726: extern int BZ2_bzRead ( 15726: int* bzerror, 15726: BZFILE* b, 15726: void* buf, 15726: int len 15726: ); 15726: 15726: extern BZFILE* BZ2_bzWriteOpen ( 15726: int* bzerror, 15726: FILE* f, 15726: int blockSize100k, 15726: int verbosity, 15726: int workFactor 15726: ); 15726: 15726: extern void BZ2_bzWrite ( 15726: int* bzerror, 15726: BZFILE* b, 15726: void* buf, 15726: int len 15726: ); 15726: 15726: extern void BZ2_bzWriteClose ( 15726: int* bzerror, 15726: BZFILE* b, 15726: int abandon, 15726: unsigned int* nbytes_in, 15726: unsigned int* nbytes_out 15726: ); 15726: 15726: extern void BZ2_bzWriteClose64 ( 15726: int* bzerror, 15726: BZFILE* b, 15726: int abandon, 15726: unsigned int* nbytes_in_lo32, 15726: unsigned int* nbytes_in_hi32, 15726: unsigned int* nbytes_out_lo32, 15726: unsigned int* nbytes_out_hi32 15726: ); 15726: 15726: 15726: 15726: 15726: 15726: extern int BZ2_bzBuffToBuffCompress ( 15726: char* dest, 15726: unsigned int* destLen, 15726: char* source, 15726: unsigned int sourceLen, 15726: int blockSize100k, 15726: int verbosity, 15726: int workFactor 15726: ); 15726: 15726: extern int BZ2_bzBuffToBuffDecompress ( 15726: char* dest, 15726: unsigned int* destLen, 15726: char* source, 15726: unsigned int sourceLen, 15726: int small, 15726: int verbosity 15726: ); 15726: # 233 "/usr/include/bzlib.h" 3 4 15726: extern const char * BZ2_bzlibVersion ( 15726: void 15726: ); 15726: 15726: 15726: extern BZFILE * BZ2_bzopen ( 15726: const char *path, 15726: const char *mode 15726: ); 15726: 15726: extern BZFILE * BZ2_bzdopen ( 15726: int fd, 15726: const char *mode 15726: ); 15726: 15726: extern int BZ2_bzread ( 15726: BZFILE* b, 15726: void* buf, 15726: int len 15726: ); 15726: 15726: extern int BZ2_bzwrite ( 15726: BZFILE* b, 15726: void* buf, 15726: int len 15726: ); 15726: 15726: extern int BZ2_bzflush ( 15726: BZFILE* b 15726: ); 15726: 15726: extern void BZ2_bzclose ( 15726: BZFILE* b 15726: ); 15726: 15726: extern const char * BZ2_bzerror ( 15726: BZFILE *b, 15726: int *errnum 15726: ); 15726: 15726: 15726: 15726: } 15726: # 42 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 15726: 15726: 15726: 15726: # 1 "/usr/include/lz4.h" 1 3 4 15726: # 36 "/usr/include/lz4.h" 3 4 15726: extern "C" { 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 44 "/usr/include/lz4.h" 2 3 4 15726: # 142 "/usr/include/lz4.h" 3 4 15726: __attribute__ ((visibility ("default"))) int LZ4_versionNumber (void); 15726: __attribute__ ((visibility ("default"))) const char* LZ4_versionString (void); 15726: # 189 "/usr/include/lz4.h" 3 4 15726: __attribute__ ((visibility ("default"))) int LZ4_compress_default(const char* src, char* dst, int srcSize, int dstCapacity); 15726: # 205 "/usr/include/lz4.h" 3 4 15726: __attribute__ ((visibility ("default"))) int LZ4_decompress_safe (const char* src, char* dst, int compressedSize, int dstCapacity); 15726: # 223 "/usr/include/lz4.h" 3 4 15726: __attribute__ ((visibility ("default"))) int LZ4_compressBound(int inputSize); 15726: # 233 "/usr/include/lz4.h" 3 4 15726: __attribute__ ((visibility ("default"))) int LZ4_compress_fast (const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); 15726: # 242 "/usr/include/lz4.h" 3 4 15726: __attribute__ ((visibility ("default"))) int LZ4_sizeofState(void); 15726: __attribute__ ((visibility ("default"))) int LZ4_compress_fast_extState (void* state, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); 15726: # 269 "/usr/include/lz4.h" 3 4 15726: __attribute__ ((visibility ("default"))) int LZ4_compress_destSize (const char* src, char* dst, int* srcSizePtr, int targetDstSize); 15726: # 306 "/usr/include/lz4.h" 3 4 15726: __attribute__ ((visibility ("default"))) int LZ4_decompress_safe_partial (const char* src, char* dst, int srcSize, int targetOutputSize, int dstCapacity); 15726: 15726: 15726: 15726: 15726: 15726: typedef union LZ4_stream_u LZ4_stream_t; 15726: # 329 "/usr/include/lz4.h" 3 4 15726: __attribute__ ((visibility ("default"))) LZ4_stream_t* LZ4_createStream(void); 15726: __attribute__ ((visibility ("default"))) int LZ4_freeStream (LZ4_stream_t* streamPtr); 15726: # 356 "/usr/include/lz4.h" 3 4 15726: __attribute__ ((visibility ("default"))) void LZ4_resetStream_fast (LZ4_stream_t* streamPtr); 15726: # 369 "/usr/include/lz4.h" 3 4 15726: __attribute__ ((visibility ("default"))) int LZ4_loadDict (LZ4_stream_t* streamPtr, const char* dictionary, int dictSize); 15726: # 394 "/usr/include/lz4.h" 3 4 15726: __attribute__ ((visibility ("default"))) int LZ4_compress_fast_continue (LZ4_stream_t* streamPtr, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); 15726: # 403 "/usr/include/lz4.h" 3 4 15726: __attribute__ ((visibility ("default"))) int LZ4_saveDict (LZ4_stream_t* streamPtr, char* safeBuffer, int maxDictSize); 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef union LZ4_streamDecode_u LZ4_streamDecode_t; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: __attribute__ ((visibility ("default"))) LZ4_streamDecode_t* LZ4_createStreamDecode(void); 15726: __attribute__ ((visibility ("default"))) int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream); 15726: # 430 "/usr/include/lz4.h" 3 4 15726: __attribute__ ((visibility ("default"))) int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const char* dictionary, int dictSize); 15726: # 443 "/usr/include/lz4.h" 3 4 15726: __attribute__ ((visibility ("default"))) int LZ4_decoderRingBufferSize(int maxBlockSize); 15726: # 471 "/usr/include/lz4.h" 3 4 15726: __attribute__ ((visibility ("default"))) int 15726: LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, 15726: const char* src, char* dst, 15726: int srcSize, int dstCapacity); 15726: # 485 "/usr/include/lz4.h" 3 4 15726: __attribute__ ((visibility ("default"))) int 15726: LZ4_decompress_safe_usingDict(const char* src, char* dst, 15726: int srcSize, int dstCapacity, 15726: const char* dictStart, int dictSize); 15726: 15726: __attribute__ ((visibility ("default"))) int 15726: LZ4_decompress_safe_partial_usingDict(const char* src, char* dst, 15726: int compressedSize, 15726: int targetOutputSize, int maxOutputSize, 15726: const char* dictStart, int dictSize); 15726: # 660 "/usr/include/lz4.h" 3 4 15726: typedef int8_t LZ4_i8; 15726: typedef uint8_t LZ4_byte; 15726: typedef uint16_t LZ4_u16; 15726: typedef uint32_t LZ4_u32; 15726: # 677 "/usr/include/lz4.h" 3 4 15726: typedef struct LZ4_stream_t_internal LZ4_stream_t_internal; 15726: struct LZ4_stream_t_internal { 15726: LZ4_u32 hashTable[(1 << (14 -2))]; 15726: const LZ4_byte* dictionary; 15726: const LZ4_stream_t_internal* dictCtx; 15726: LZ4_u32 currentOffset; 15726: LZ4_u32 tableType; 15726: LZ4_u32 dictSize; 15726: 15726: }; 15726: 15726: 15726: union LZ4_stream_u { 15726: char minStateSize[((1UL << 14) + 32)]; 15726: LZ4_stream_t_internal internal_donotuse; 15726: }; 15726: # 709 "/usr/include/lz4.h" 3 4 15726: __attribute__ ((visibility ("default"))) LZ4_stream_t* LZ4_initStream (void* buffer, size_t size); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef struct { 15726: const LZ4_byte* externalDict; 15726: const LZ4_byte* prefixEnd; 15726: size_t extDictSize; 15726: size_t prefixSize; 15726: } LZ4_streamDecode_t_internal; 15726: 15726: 15726: union LZ4_streamDecode_u { 15726: char minStateSize[32]; 15726: LZ4_streamDecode_t_internal internal_donotuse; 15726: } ; 15726: # 765 "/usr/include/lz4.h" 3 4 15726: [[deprecated("use LZ4_compress_default() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compress (const char* src, char* dest, int srcSize); 15726: [[deprecated("use LZ4_compress_default() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compress_limitedOutput (const char* src, char* dest, int srcSize, int maxOutputSize); 15726: [[deprecated("use LZ4_compress_fast_extState() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compress_withState (void* state, const char* source, char* dest, int inputSize); 15726: [[deprecated("use LZ4_compress_fast_extState() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compress_limitedOutput_withState (void* state, const char* source, char* dest, int inputSize, int maxOutputSize); 15726: [[deprecated("use LZ4_compress_fast_continue() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compress_continue (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize); 15726: [[deprecated("use LZ4_compress_fast_continue() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compress_limitedOutput_continue (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize, int maxOutputSize); 15726: 15726: 15726: [[deprecated("use LZ4_decompress_fast() instead")]] __attribute__ ((visibility ("default"))) int LZ4_uncompress (const char* source, char* dest, int outputSize); 15726: [[deprecated("use LZ4_decompress_safe() instead")]] __attribute__ ((visibility ("default"))) int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize); 15726: # 786 "/usr/include/lz4.h" 3 4 15726: [[deprecated("Use LZ4_createStream() instead")]] __attribute__ ((visibility ("default"))) void* LZ4_create (char* inputBuffer); 15726: [[deprecated("Use LZ4_createStream() instead")]] __attribute__ ((visibility ("default"))) int LZ4_sizeofStreamState(void); 15726: [[deprecated("Use LZ4_resetStream() instead")]] __attribute__ ((visibility ("default"))) int LZ4_resetStreamState(void* state, char* inputBuffer); 15726: [[deprecated("Use LZ4_saveDict() instead")]] __attribute__ ((visibility ("default"))) char* LZ4_slideInputBuffer (void* state); 15726: 15726: 15726: [[deprecated("use LZ4_decompress_safe_usingDict() instead")]] __attribute__ ((visibility ("default"))) int LZ4_decompress_safe_withPrefix64k (const char* src, char* dst, int compressedSize, int maxDstSize); 15726: [[deprecated("use LZ4_decompress_fast_usingDict() instead")]] __attribute__ ((visibility ("default"))) int LZ4_decompress_fast_withPrefix64k (const char* src, char* dst, int originalSize); 15726: # 821 "/usr/include/lz4.h" 3 4 15726: [[deprecated("This function is deprecated and unsafe. Consider using LZ4_decompress_safe() instead")]] 15726: __attribute__ ((visibility ("default"))) int LZ4_decompress_fast (const char* src, char* dst, int originalSize); 15726: [[deprecated("This function is deprecated and unsafe. Consider using LZ4_decompress_safe_continue() instead")]] 15726: __attribute__ ((visibility ("default"))) int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* src, char* dst, int originalSize); 15726: [[deprecated("This function is deprecated and unsafe. Consider using LZ4_decompress_safe_usingDict() instead")]] 15726: __attribute__ ((visibility ("default"))) int LZ4_decompress_fast_usingDict (const char* src, char* dst, int originalSize, const char* dictStart, int dictSize); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: __attribute__ ((visibility ("default"))) void LZ4_resetStream (LZ4_stream_t* streamPtr); 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: # 46 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 15726: # 1 "/usr/include/lz4hc.h" 1 3 4 15726: # 38 "/usr/include/lz4hc.h" 3 4 15726: extern "C" { 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/lz4.h" 1 3 4 15726: # 36 "/usr/include/lz4.h" 3 4 15726: extern "C" { 15726: # 841 "/usr/include/lz4.h" 3 4 15726: } 15726: # 44 "/usr/include/lz4hc.h" 2 3 4 15726: # 66 "/usr/include/lz4hc.h" 3 4 15726: __attribute__ ((visibility ("default"))) int LZ4_compress_HC (const char* src, char* dst, int srcSize, int dstCapacity, int compressionLevel); 15726: # 79 "/usr/include/lz4hc.h" 3 4 15726: __attribute__ ((visibility ("default"))) int LZ4_sizeofStateHC(void); 15726: __attribute__ ((visibility ("default"))) int LZ4_compress_HC_extStateHC(void* stateHC, const char* src, char* dst, int srcSize, int maxDstSize, int compressionLevel); 15726: # 91 "/usr/include/lz4hc.h" 3 4 15726: __attribute__ ((visibility ("default"))) int LZ4_compress_HC_destSize(void* stateHC, 15726: const char* src, char* dst, 15726: int* srcSizePtr, int targetDstSize, 15726: int compressionLevel); 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef union LZ4_streamHC_u LZ4_streamHC_t; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: __attribute__ ((visibility ("default"))) LZ4_streamHC_t* LZ4_createStreamHC(void); 15726: __attribute__ ((visibility ("default"))) int LZ4_freeStreamHC (LZ4_streamHC_t* streamHCPtr); 15726: # 155 "/usr/include/lz4hc.h" 3 4 15726: __attribute__ ((visibility ("default"))) void LZ4_resetStreamHC_fast(LZ4_streamHC_t* streamHCPtr, int compressionLevel); 15726: __attribute__ ((visibility ("default"))) int LZ4_loadDictHC (LZ4_streamHC_t* streamHCPtr, const char* dictionary, int dictSize); 15726: 15726: __attribute__ ((visibility ("default"))) int LZ4_compress_HC_continue (LZ4_streamHC_t* streamHCPtr, 15726: const char* src, char* dst, 15726: int srcSize, int maxDstSize); 15726: # 172 "/usr/include/lz4hc.h" 3 4 15726: __attribute__ ((visibility ("default"))) int LZ4_compress_HC_continue_destSize(LZ4_streamHC_t* LZ4_streamHCPtr, 15726: const char* src, char* dst, 15726: int* srcSizePtr, int targetDstSize); 15726: 15726: __attribute__ ((visibility ("default"))) int LZ4_saveDictHC (LZ4_streamHC_t* streamHCPtr, char* safeBuffer, int maxDictSize); 15726: # 204 "/usr/include/lz4hc.h" 3 4 15726: typedef struct LZ4HC_CCtx_internal LZ4HC_CCtx_internal; 15726: struct LZ4HC_CCtx_internal 15726: { 15726: LZ4_u32 hashTable[(1 << 15)]; 15726: LZ4_u16 chainTable[(1<<16)]; 15726: const LZ4_byte* end; 15726: const LZ4_byte* prefixStart; 15726: const LZ4_byte* dictStart; 15726: LZ4_u32 dictLimit; 15726: LZ4_u32 lowLimit; 15726: LZ4_u32 nextToUpdate; 15726: short compressionLevel; 15726: LZ4_i8 favorDecSpeed; 15726: 15726: LZ4_i8 dirty; 15726: const LZ4HC_CCtx_internal* dictCtx; 15726: }; 15726: 15726: 15726: union LZ4_streamHC_u { 15726: char minStateSize[262200]; 15726: LZ4HC_CCtx_internal internal_donotuse; 15726: }; 15726: # 245 "/usr/include/lz4hc.h" 3 4 15726: __attribute__ ((visibility ("default"))) LZ4_streamHC_t* LZ4_initStreamHC(void* buffer, size_t size); 15726: # 254 "/usr/include/lz4hc.h" 3 4 15726: [[deprecated("use LZ4_compress_HC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC (const char* source, char* dest, int inputSize); 15726: [[deprecated("use LZ4_compress_HC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC_limitedOutput (const char* source, char* dest, int inputSize, int maxOutputSize); 15726: [[deprecated("use LZ4_compress_HC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC2 (const char* source, char* dest, int inputSize, int compressionLevel); 15726: [[deprecated("use LZ4_compress_HC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC2_limitedOutput(const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel); 15726: [[deprecated("use LZ4_compress_HC_extStateHC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC_withStateHC (void* state, const char* source, char* dest, int inputSize); 15726: [[deprecated("use LZ4_compress_HC_extStateHC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC_limitedOutput_withStateHC (void* state, const char* source, char* dest, int inputSize, int maxOutputSize); 15726: [[deprecated("use LZ4_compress_HC_extStateHC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC2_withStateHC (void* state, const char* source, char* dest, int inputSize, int compressionLevel); 15726: [[deprecated("use LZ4_compress_HC_extStateHC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC2_limitedOutput_withStateHC(void* state, const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel); 15726: [[deprecated("use LZ4_compress_HC_continue() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC_continue (LZ4_streamHC_t* LZ4_streamHCPtr, const char* source, char* dest, int inputSize); 15726: [[deprecated("use LZ4_compress_HC_continue() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC_limitedOutput_continue (LZ4_streamHC_t* LZ4_streamHCPtr, const char* source, char* dest, int inputSize, int maxOutputSize); 15726: # 274 "/usr/include/lz4hc.h" 3 4 15726: [[deprecated("use LZ4_createStreamHC() instead")]] __attribute__ ((visibility ("default"))) void* LZ4_createHC (const char* inputBuffer); 15726: [[deprecated("use LZ4_freeStreamHC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_freeHC (void* LZ4HC_Data); 15726: 15726: [[deprecated("use LZ4_saveDictHC() instead")]] __attribute__ ((visibility ("default"))) char* LZ4_slideInputBufferHC (void* LZ4HC_Data); 15726: [[deprecated("use LZ4_compress_HC_continue() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC2_continue (void* LZ4HC_Data, const char* source, char* dest, int inputSize, int compressionLevel); 15726: [[deprecated("use LZ4_compress_HC_continue() instead")]] __attribute__ ((visibility ("default"))) int LZ4_compressHC2_limitedOutput_continue (void* LZ4HC_Data, const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel); 15726: [[deprecated("use LZ4_createStreamHC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_sizeofStreamStateHC(void); 15726: [[deprecated("use LZ4_initStreamHC() instead")]] __attribute__ ((visibility ("default"))) int LZ4_resetStreamStateHC(void* state, char* inputBuffer); 15726: # 292 "/usr/include/lz4hc.h" 3 4 15726: __attribute__ ((visibility ("default"))) void LZ4_resetStreamHC (LZ4_streamHC_t* streamHCPtr, int compressionLevel); 15726: 15726: 15726: 15726: } 15726: # 47 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 15726: 15726: 15726: 15726: # 1 "/usr/include/zstd.h" 1 3 4 15726: # 11 "/usr/include/zstd.h" 3 4 15726: extern "C" { 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/limits.h" 1 3 4 15726: # 19 "/usr/include/zstd.h" 2 3 4 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 20 "/usr/include/zstd.h" 2 3 4 15726: # 114 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) unsigned ZSTD_versionNumber(void); 15726: # 123 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) const char* ZSTD_versionString(void); 15726: # 155 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_compress( void* dst, size_t dstCapacity, 15726: const void* src, size_t srcSize, 15726: int compressionLevel); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_decompress( void* dst, size_t dstCapacity, 15726: const void* src, size_t compressedSize); 15726: # 193 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) unsigned long long ZSTD_getFrameContentSize(const void *src, size_t srcSize); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: [[deprecated("Replaced by ZSTD_getFrameContentSize")]] 15726: __attribute__ ((visibility ("default"))) 15726: unsigned long long ZSTD_getDecompressedSize(const void* src, size_t srcSize); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_findFrameCompressedSize(const void* src, size_t srcSize); 15726: # 233 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_compressBound(size_t srcSize); 15726: 15726: 15726: 15726: 15726: 15726: __attribute__ ((visibility ("default"))) unsigned ZSTD_isError(size_t code); 15726: __attribute__ ((visibility ("default"))) const char* ZSTD_getErrorName(size_t code); 15726: __attribute__ ((visibility ("default"))) int ZSTD_minCLevel(void); 15726: __attribute__ ((visibility ("default"))) int ZSTD_maxCLevel(void); 15726: __attribute__ ((visibility ("default"))) int ZSTD_defaultCLevel(void); 15726: # 259 "/usr/include/zstd.h" 3 4 15726: typedef struct ZSTD_CCtx_s ZSTD_CCtx; 15726: __attribute__ ((visibility ("default"))) ZSTD_CCtx* ZSTD_createCCtx(void); 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_freeCCtx(ZSTD_CCtx* cctx); 15726: # 271 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_compressCCtx(ZSTD_CCtx* cctx, 15726: void* dst, size_t dstCapacity, 15726: const void* src, size_t srcSize, 15726: int compressionLevel); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef struct ZSTD_DCtx_s ZSTD_DCtx; 15726: __attribute__ ((visibility ("default"))) ZSTD_DCtx* ZSTD_createDCtx(void); 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_freeDCtx(ZSTD_DCtx* dctx); 15726: 15726: 15726: 15726: 15726: 15726: 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_decompressDCtx(ZSTD_DCtx* dctx, 15726: void* dst, size_t dstCapacity, 15726: const void* src, size_t srcSize); 15726: # 315 "/usr/include/zstd.h" 3 4 15726: typedef enum { ZSTD_fast=1, 15726: ZSTD_dfast=2, 15726: ZSTD_greedy=3, 15726: ZSTD_lazy=4, 15726: ZSTD_lazy2=5, 15726: ZSTD_btlazy2=6, 15726: ZSTD_btopt=7, 15726: ZSTD_btultra=8, 15726: ZSTD_btultra2=9 15726: 15726: 15726: } ZSTD_strategy; 15726: 15726: typedef enum { 15726: 15726: 15726: 15726: 15726: 15726: ZSTD_c_compressionLevel=100, 15726: # 347 "/usr/include/zstd.h" 3 4 15726: ZSTD_c_windowLog=101, 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ZSTD_c_hashLog=102, 15726: 15726: 15726: 15726: 15726: 15726: ZSTD_c_chainLog=103, 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ZSTD_c_searchLog=104, 15726: 15726: 15726: 15726: ZSTD_c_minMatch=105, 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ZSTD_c_targetLength=106, 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ZSTD_c_strategy=107, 15726: 15726: 15726: 15726: 15726: ZSTD_c_targetCBlockSize=130, 15726: # 407 "/usr/include/zstd.h" 3 4 15726: ZSTD_c_enableLongDistanceMatching=160, 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ZSTD_c_ldmHashLog=161, 15726: 15726: 15726: 15726: 15726: 15726: ZSTD_c_ldmMinMatch=162, 15726: 15726: 15726: 15726: ZSTD_c_ldmBucketSizeLog=163, 15726: 15726: 15726: 15726: ZSTD_c_ldmHashRateLog=164, 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ZSTD_c_contentSizeFlag=200, 15726: 15726: 15726: 15726: ZSTD_c_checksumFlag=201, 15726: ZSTD_c_dictIDFlag=202, 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: ZSTD_c_nbWorkers=400, 15726: # 459 "/usr/include/zstd.h" 3 4 15726: ZSTD_c_jobSize=401, 15726: 15726: 15726: 15726: 15726: ZSTD_c_overlapLog=402, 15726: # 500 "/usr/include/zstd.h" 3 4 15726: ZSTD_c_experimentalParam1=500, 15726: ZSTD_c_experimentalParam2=10, 15726: ZSTD_c_experimentalParam3=1000, 15726: ZSTD_c_experimentalParam4=1001, 15726: ZSTD_c_experimentalParam5=1002, 15726: 15726: ZSTD_c_experimentalParam7=1004, 15726: ZSTD_c_experimentalParam8=1005, 15726: ZSTD_c_experimentalParam9=1006, 15726: ZSTD_c_experimentalParam10=1007, 15726: ZSTD_c_experimentalParam11=1008, 15726: ZSTD_c_experimentalParam12=1009, 15726: ZSTD_c_experimentalParam13=1010, 15726: ZSTD_c_experimentalParam14=1011, 15726: ZSTD_c_experimentalParam15=1012, 15726: ZSTD_c_experimentalParam16=1013, 15726: ZSTD_c_experimentalParam17=1014, 15726: ZSTD_c_experimentalParam18=1015, 15726: ZSTD_c_experimentalParam19=1016 15726: } ZSTD_cParameter; 15726: 15726: typedef struct { 15726: size_t error; 15726: int lowerBound; 15726: int upperBound; 15726: } ZSTD_bounds; 15726: # 534 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter cParam); 15726: # 547 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_CCtx_setParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int value); 15726: # 564 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_CCtx_setPledgedSrcSize(ZSTD_CCtx* cctx, unsigned long long pledgedSrcSize); 15726: 15726: typedef enum { 15726: ZSTD_reset_session_only = 1, 15726: ZSTD_reset_parameters = 2, 15726: ZSTD_reset_session_and_parameters = 3 15726: } ZSTD_ResetDirective; 15726: # 586 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_CCtx_reset(ZSTD_CCtx* cctx, ZSTD_ResetDirective reset); 15726: # 600 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_compress2( ZSTD_CCtx* cctx, 15726: void* dst, size_t dstCapacity, 15726: const void* src, size_t srcSize); 15726: # 617 "/usr/include/zstd.h" 3 4 15726: typedef enum { 15726: 15726: ZSTD_d_windowLogMax=100, 15726: # 638 "/usr/include/zstd.h" 3 4 15726: ZSTD_d_experimentalParam1=1000, 15726: ZSTD_d_experimentalParam2=1001, 15726: ZSTD_d_experimentalParam3=1002, 15726: ZSTD_d_experimentalParam4=1003, 15726: ZSTD_d_experimentalParam5=1004, 15726: ZSTD_d_experimentalParam6=1005 15726: 15726: } ZSTD_dParameter; 15726: # 654 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) ZSTD_bounds ZSTD_dParam_getBounds(ZSTD_dParameter dParam); 15726: # 663 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_DCtx_setParameter(ZSTD_DCtx* dctx, ZSTD_dParameter param, int value); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_DCtx_reset(ZSTD_DCtx* dctx, ZSTD_ResetDirective reset); 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef struct ZSTD_inBuffer_s { 15726: const void* src; 15726: size_t size; 15726: size_t pos; 15726: } ZSTD_inBuffer; 15726: 15726: typedef struct ZSTD_outBuffer_s { 15726: void* dst; 15726: size_t size; 15726: size_t pos; 15726: } ZSTD_outBuffer; 15726: # 753 "/usr/include/zstd.h" 3 4 15726: typedef ZSTD_CCtx ZSTD_CStream; 15726: 15726: 15726: __attribute__ ((visibility ("default"))) ZSTD_CStream* ZSTD_createCStream(void); 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_freeCStream(ZSTD_CStream* zcs); 15726: 15726: 15726: typedef enum { 15726: ZSTD_e_continue=0, 15726: ZSTD_e_flush=1, 15726: 15726: 15726: 15726: ZSTD_e_end=2 15726: 15726: 15726: 15726: 15726: } ZSTD_EndDirective; 15726: # 800 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_compressStream2( ZSTD_CCtx* cctx, 15726: ZSTD_outBuffer* output, 15726: ZSTD_inBuffer* input, 15726: ZSTD_EndDirective endOp); 15726: # 819 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_CStreamInSize(void); 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_CStreamOutSize(void); 15726: # 839 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_initCStream(ZSTD_CStream* zcs, int compressionLevel); 15726: 15726: 15726: 15726: 15726: 15726: 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_compressStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output, ZSTD_inBuffer* input); 15726: 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_flushStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output); 15726: 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_endStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output); 15726: # 880 "/usr/include/zstd.h" 3 4 15726: typedef ZSTD_DCtx ZSTD_DStream; 15726: 15726: 15726: __attribute__ ((visibility ("default"))) ZSTD_DStream* ZSTD_createDStream(void); 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_freeDStream(ZSTD_DStream* zds); 15726: # 896 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_initDStream(ZSTD_DStream* zds); 15726: # 919 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inBuffer* input); 15726: 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_DStreamInSize(void); 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_DStreamOutSize(void); 15726: # 935 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_compress_usingDict(ZSTD_CCtx* ctx, 15726: void* dst, size_t dstCapacity, 15726: const void* src, size_t srcSize, 15726: const void* dict,size_t dictSize, 15726: int compressionLevel); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_decompress_usingDict(ZSTD_DCtx* dctx, 15726: void* dst, size_t dstCapacity, 15726: const void* src, size_t srcSize, 15726: const void* dict,size_t dictSize); 15726: 15726: 15726: 15726: 15726: 15726: typedef struct ZSTD_CDict_s ZSTD_CDict; 15726: # 970 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) ZSTD_CDict* ZSTD_createCDict(const void* dictBuffer, size_t dictSize, 15726: int compressionLevel); 15726: 15726: 15726: 15726: 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_freeCDict(ZSTD_CDict* CDict); 15726: 15726: 15726: 15726: 15726: 15726: 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_compress_usingCDict(ZSTD_CCtx* cctx, 15726: void* dst, size_t dstCapacity, 15726: const void* src, size_t srcSize, 15726: const ZSTD_CDict* cdict); 15726: 15726: 15726: typedef struct ZSTD_DDict_s ZSTD_DDict; 15726: 15726: 15726: 15726: 15726: __attribute__ ((visibility ("default"))) ZSTD_DDict* ZSTD_createDDict(const void* dictBuffer, size_t dictSize); 15726: 15726: 15726: 15726: 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_freeDDict(ZSTD_DDict* ddict); 15726: 15726: 15726: 15726: 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_decompress_usingDDict(ZSTD_DCtx* dctx, 15726: void* dst, size_t dstCapacity, 15726: const void* src, size_t srcSize, 15726: const ZSTD_DDict* ddict); 15726: # 1018 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) unsigned ZSTD_getDictID_fromDict(const void* dict, size_t dictSize); 15726: 15726: 15726: 15726: 15726: 15726: __attribute__ ((visibility ("default"))) unsigned ZSTD_getDictID_fromCDict(const ZSTD_CDict* cdict); 15726: 15726: 15726: 15726: 15726: 15726: __attribute__ ((visibility ("default"))) unsigned ZSTD_getDictID_fromDDict(const ZSTD_DDict* ddict); 15726: # 1042 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) unsigned ZSTD_getDictID_fromFrame(const void* src, size_t srcSize); 15726: # 1079 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_CCtx_loadDictionary(ZSTD_CCtx* cctx, const void* dict, size_t dictSize); 15726: # 1093 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_CCtx_refCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict); 15726: # 1114 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_CCtx_refPrefix(ZSTD_CCtx* cctx, 15726: const void* prefix, size_t prefixSize); 15726: # 1132 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_DCtx_loadDictionary(ZSTD_DCtx* dctx, const void* dict, size_t dictSize); 15726: # 1151 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_DCtx_refDDict(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict); 15726: # 1169 "/usr/include/zstd.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_DCtx_refPrefix(ZSTD_DCtx* dctx, 15726: const void* prefix, size_t prefixSize); 15726: 15726: 15726: 15726: 15726: 15726: 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_sizeof_CCtx(const ZSTD_CCtx* cctx); 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_sizeof_DCtx(const ZSTD_DCtx* dctx); 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_sizeof_CStream(const ZSTD_CStream* zcs); 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_sizeof_DStream(const ZSTD_DStream* zds); 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_sizeof_CDict(const ZSTD_CDict* cdict); 15726: __attribute__ ((visibility ("default"))) size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict); 15726: # 3088 "/usr/include/zstd.h" 3 4 15726: } 15726: # 51 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 15726: 15726: 15726: # 1 "/usr/include/zdict.h" 1 3 4 15726: # 12 "/usr/include/zdict.h" 3 4 15726: extern "C" { 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 20 "/usr/include/zdict.h" 2 3 4 15726: # 210 "/usr/include/zdict.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZDICT_trainFromBuffer(void* dictBuffer, size_t dictBufferCapacity, 15726: const void* samplesBuffer, 15726: const size_t* samplesSizes, unsigned nbSamples); 15726: 15726: typedef struct { 15726: int compressionLevel; 15726: unsigned notificationLevel; 15726: unsigned dictID; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: } ZDICT_params_t; 15726: # 262 "/usr/include/zdict.h" 3 4 15726: __attribute__ ((visibility ("default"))) size_t ZDICT_finalizeDictionary(void* dstDictBuffer, size_t maxDictSize, 15726: const void* dictContent, size_t dictContentSize, 15726: const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples, 15726: ZDICT_params_t parameters); 15726: 15726: 15726: 15726: __attribute__ ((visibility ("default"))) unsigned ZDICT_getDictID(const void* dictBuffer, size_t dictSize); 15726: __attribute__ ((visibility ("default"))) size_t ZDICT_getDictHeaderSize(const void* dictBuffer, size_t dictSize); 15726: __attribute__ ((visibility ("default"))) unsigned ZDICT_isError(size_t errorCode); 15726: __attribute__ ((visibility ("default"))) const char* ZDICT_getErrorName(size_t errorCode); 15726: # 473 "/usr/include/zdict.h" 3 4 15726: } 15726: # 54 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 2 15726: # 62 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: 15726: # 62 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: namespace rocksdb { 15726: # 88 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: class ZSTDUncompressCachedData { 15726: public: 15726: using ZSTDNativeContext = ZSTD_DCtx*; 15726: ZSTDUncompressCachedData() {} 15726: 15726: ZSTDUncompressCachedData(const ZSTDUncompressCachedData& o) = delete; 15726: ZSTDUncompressCachedData& operator=(const ZSTDUncompressCachedData&) = delete; 15726: ZSTDUncompressCachedData(ZSTDUncompressCachedData&& o) noexcept 15726: : ZSTDUncompressCachedData() { 15726: *this = std::move(o); 15726: } 15726: ZSTDUncompressCachedData& operator=(ZSTDUncompressCachedData&& o) noexcept { 15726: 15726: # 100 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 100 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: zstd_ctx_ == nullptr 15726: # 100 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 100 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "zstd_ctx_ == nullptr" 15726: # 100 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 100 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: std::swap(zstd_ctx_, o.zstd_ctx_); 15726: std::swap(cache_idx_, o.cache_idx_); 15726: return *this; 15726: } 15726: ZSTDNativeContext Get() const { return zstd_ctx_; } 15726: int64_t GetCacheIndex() const { return cache_idx_; } 15726: void CreateIfNeeded() { 15726: if (zstd_ctx_ == nullptr) { 15726: 15726: 15726: 15726: 15726: zstd_ctx_ = ZSTD_createDCtx(); 15726: 15726: cache_idx_ = -1; 15726: } 15726: } 15726: void InitFromCache(const ZSTDUncompressCachedData& o, int64_t idx) { 15726: zstd_ctx_ = o.zstd_ctx_; 15726: cache_idx_ = idx; 15726: } 15726: ~ZSTDUncompressCachedData() { 15726: if (zstd_ctx_ != nullptr && cache_idx_ == -1) { 15726: ZSTD_freeDCtx(zstd_ctx_); 15726: } 15726: } 15726: 15726: private: 15726: ZSTDNativeContext zstd_ctx_ = nullptr; 15726: int64_t cache_idx_ = -1; 15726: }; 15726: 15726: } 15726: # 163 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: namespace rocksdb { 15726: 15726: 15726: 15726: struct CompressionDict { 15726: 15726: ZSTD_CDict* zstd_cdict_ = nullptr; 15726: 15726: std::string dict_; 15726: 15726: public: 15726: 15726: CompressionDict(std::string dict, CompressionType type, int level) { 15726: 15726: 15726: 15726: dict_ = std::move(dict); 15726: 15726: zstd_cdict_ = nullptr; 15726: if (!dict_.empty() && (type == kZSTD || type == kZSTDNotFinalCompression)) { 15726: if (level == CompressionOptions::kDefaultCompressionLevel) { 15726: 15726: 15726: 15726: 15726: 15726: level = 3; 15726: } 15726: 15726: 15726: zstd_cdict_ = ZSTD_createCDict(dict_.data(), dict_.size(), level); 15726: 15726: # 194 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 194 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: zstd_cdict_ != nullptr 15726: # 194 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 194 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "zstd_cdict_ != nullptr" 15726: # 194 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 194 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: } 15726: 15726: } 15726: 15726: ~CompressionDict() { 15726: 15726: size_t res = 0; 15726: if (zstd_cdict_ != nullptr) { 15726: res = ZSTD_freeCDict(zstd_cdict_); 15726: } 15726: 15726: # 205 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 205 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: res == 0 15726: # 205 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 205 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "res == 0" 15726: # 205 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 205 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: (void)res; 15726: 15726: } 15726: 15726: 15726: const ZSTD_CDict* GetDigestedZstdCDict() const { return zstd_cdict_; } 15726: 15726: 15726: Slice GetRawDict() const { return dict_; } 15726: 15726: static const CompressionDict& GetEmptyDict() { 15726: static CompressionDict empty_dict{}; 15726: return empty_dict; 15726: } 15726: 15726: CompressionDict() = default; 15726: 15726: CompressionDict(const CompressionDict&) = delete; 15726: CompressionDict& operator=(const CompressionDict&) = delete; 15726: CompressionDict(CompressionDict&&) = delete; 15726: CompressionDict& operator=(CompressionDict&&) = delete; 15726: }; 15726: 15726: 15726: 15726: struct UncompressionDict { 15726: 15726: 15726: std::string dict_; 15726: 15726: 15726: 15726: 15726: CacheAllocationPtr allocation_; 15726: 15726: 15726: 15726: 15726: Slice slice_; 15726: # 254 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: UncompressionDict(std::string dict, bool ) 15726: 15726: : dict_(std::move(dict)), slice_(dict_) { 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: 15726: 15726: 15726: 15726: 15726: UncompressionDict(Slice slice, CacheAllocationPtr&& allocation, 15726: bool ) 15726: 15726: : allocation_(std::move(allocation)), slice_(std::move(slice)) { 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: 15726: UncompressionDict(UncompressionDict&& rhs) 15726: : dict_(std::move(rhs.dict_)), 15726: allocation_(std::move(rhs.allocation_)), 15726: slice_(std::move(rhs.slice_)) 15726: 15726: 15726: 15726: 15726: { 15726: 15726: 15726: 15726: } 15726: 15726: ~UncompressionDict() { 15726: # 304 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: } 15726: 15726: UncompressionDict& operator=(UncompressionDict&& rhs) { 15726: if (this == &rhs) { 15726: return *this; 15726: } 15726: 15726: dict_ = std::move(rhs.dict_); 15726: allocation_ = std::move(rhs.allocation_); 15726: slice_ = std::move(rhs.slice_); 15726: 15726: 15726: 15726: 15726: 15726: 15726: return *this; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: bool own_bytes() const { return !dict_.empty() || allocation_; } 15726: 15726: const Slice& GetRawDict() const { return slice_; } 15726: 15726: 15726: const Slice& ContentSlice() const { return slice_; } 15726: static constexpr CacheEntryRole kCacheEntryRole = CacheEntryRole::kOtherBlock; 15726: static constexpr BlockType kBlockType = BlockType::kCompressionDictionary; 15726: 15726: 15726: 15726: 15726: 15726: static const UncompressionDict& GetEmptyDict() { 15726: static UncompressionDict empty_dict{}; 15726: return empty_dict; 15726: } 15726: 15726: size_t ApproximateMemoryUsage() const { 15726: size_t usage = sizeof(struct UncompressionDict); 15726: usage += dict_.size(); 15726: if (allocation_) { 15726: auto allocator = allocation_.get_deleter().allocator; 15726: if (allocator) { 15726: usage += allocator->UsableSize(allocation_.get(), slice_.size()); 15726: } else { 15726: usage += slice_.size(); 15726: } 15726: } 15726: 15726: 15726: 15726: return usage; 15726: } 15726: 15726: UncompressionDict() = default; 15726: 15726: UncompressionDict(const CompressionDict&) = delete; 15726: UncompressionDict& operator=(const CompressionDict&) = delete; 15726: }; 15726: 15726: class CompressionContext { 15726: private: 15726: 15726: ZSTD_CCtx* zstd_ctx_ = nullptr; 15726: 15726: ZSTD_CCtx* CreateZSTDContext() { 15726: 15726: 15726: 15726: return ZSTD_createCCtx(); 15726: 15726: } 15726: 15726: void CreateNativeContext(CompressionType type, int level, bool checksum) { 15726: if (type == kZSTD || type == kZSTDNotFinalCompression) { 15726: zstd_ctx_ = CreateZSTDContext(); 15726: 15726: if (level == CompressionOptions::kDefaultCompressionLevel) { 15726: 15726: 15726: level = 3; 15726: } 15726: size_t err = 15726: ZSTD_CCtx_setParameter(zstd_ctx_, ZSTD_c_compressionLevel, level); 15726: if (ZSTD_isError(err)) { 15726: 15726: # 393 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 393 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: false 15726: # 393 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 393 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "false" 15726: # 393 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 393 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: ZSTD_freeCCtx(zstd_ctx_); 15726: zstd_ctx_ = CreateZSTDContext(); 15726: } 15726: if (checksum) { 15726: err = ZSTD_CCtx_setParameter(zstd_ctx_, ZSTD_c_checksumFlag, 1); 15726: if (ZSTD_isError(err)) { 15726: 15726: # 400 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 400 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: false 15726: # 400 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 400 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "false" 15726: # 400 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 400 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: ZSTD_freeCCtx(zstd_ctx_); 15726: zstd_ctx_ = CreateZSTDContext(); 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: } 15726: } 15726: void DestroyNativeContext() { 15726: if (zstd_ctx_ != nullptr) { 15726: ZSTD_freeCCtx(zstd_ctx_); 15726: } 15726: } 15726: 15726: public: 15726: 15726: ZSTD_CCtx* ZSTDPreallocCtx() const { 15726: 15726: # 420 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 420 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: zstd_ctx_ != nullptr 15726: # 420 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 420 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "zstd_ctx_ != nullptr" 15726: # 420 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 420 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: return zstd_ctx_; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: public: 15726: explicit CompressionContext(CompressionType type, 15726: const CompressionOptions& options) { 15726: CreateNativeContext(type, options.level, options.checksum); 15726: } 15726: ~CompressionContext() { DestroyNativeContext(); } 15726: CompressionContext(const CompressionContext&) = delete; 15726: CompressionContext& operator=(const CompressionContext&) = delete; 15726: }; 15726: 15726: class CompressionInfo { 15726: const CompressionOptions& opts_; 15726: const CompressionContext& context_; 15726: const CompressionDict& dict_; 15726: const CompressionType type_; 15726: const uint64_t sample_for_compression_; 15726: 15726: public: 15726: CompressionInfo(const CompressionOptions& _opts, 15726: const CompressionContext& _context, 15726: const CompressionDict& _dict, CompressionType _type, 15726: uint64_t _sample_for_compression) 15726: : opts_(_opts), 15726: context_(_context), 15726: dict_(_dict), 15726: type_(_type), 15726: sample_for_compression_(_sample_for_compression) {} 15726: 15726: const CompressionOptions& options() const { return opts_; } 15726: const CompressionContext& context() const { return context_; } 15726: const CompressionDict& dict() const { return dict_; } 15726: CompressionType type() const { return type_; } 15726: uint64_t SampleForCompression() const { return sample_for_compression_; } 15726: }; 15726: 15726: class UncompressionContext { 15726: private: 15726: CompressionContextCache* ctx_cache_ = nullptr; 15726: ZSTDUncompressCachedData uncomp_cached_data_; 15726: 15726: public: 15726: explicit UncompressionContext(CompressionType type) { 15726: if (type == kZSTD || type == kZSTDNotFinalCompression) { 15726: ctx_cache_ = CompressionContextCache::Instance(); 15726: uncomp_cached_data_ = ctx_cache_->GetCachedZSTDUncompressData(); 15726: } 15726: } 15726: ~UncompressionContext() { 15726: if (uncomp_cached_data_.GetCacheIndex() != -1) { 15726: 15726: # 479 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 479 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ctx_cache_ != nullptr 15726: # 479 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 479 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "ctx_cache_ != nullptr" 15726: # 479 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 479 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: ctx_cache_->ReturnCachedZSTDUncompressData( 15726: uncomp_cached_data_.GetCacheIndex()); 15726: } 15726: } 15726: UncompressionContext(const UncompressionContext&) = delete; 15726: UncompressionContext& operator=(const UncompressionContext&) = delete; 15726: 15726: ZSTDUncompressCachedData::ZSTDNativeContext GetZSTDContext() const { 15726: return uncomp_cached_data_.Get(); 15726: } 15726: }; 15726: 15726: class UncompressionInfo { 15726: const UncompressionContext& context_; 15726: const UncompressionDict& dict_; 15726: const CompressionType type_; 15726: 15726: public: 15726: UncompressionInfo(const UncompressionContext& _context, 15726: const UncompressionDict& _dict, CompressionType _type) 15726: : context_(_context), dict_(_dict), type_(_type) {} 15726: 15726: const UncompressionContext& context() const { return context_; } 15726: const UncompressionDict& dict() const { return dict_; } 15726: CompressionType type() const { return type_; } 15726: }; 15726: 15726: inline bool Snappy_Supported() { 15726: 15726: return true; 15726: 15726: 15726: 15726: } 15726: 15726: inline bool Zlib_Supported() { 15726: 15726: return true; 15726: 15726: 15726: 15726: } 15726: 15726: inline bool BZip2_Supported() { 15726: 15726: return true; 15726: 15726: 15726: 15726: } 15726: 15726: inline bool LZ4_Supported() { 15726: 15726: return true; 15726: 15726: 15726: 15726: } 15726: 15726: inline bool XPRESS_Supported() { 15726: 15726: 15726: 15726: return false; 15726: 15726: } 15726: 15726: inline bool ZSTD_Supported() { 15726: 15726: 15726: return (ZSTD_versionNumber() >= 800); 15726: 15726: 15726: 15726: } 15726: 15726: inline bool ZSTDNotFinal_Supported() { 15726: 15726: return true; 15726: 15726: 15726: 15726: } 15726: 15726: inline bool ZSTD_Streaming_Supported() { 15726: 15726: return true; 15726: 15726: 15726: 15726: } 15726: 15726: inline bool StreamingCompressionTypeSupported( 15726: CompressionType compression_type) { 15726: switch (compression_type) { 15726: case kNoCompression: 15726: return true; 15726: case kZSTD: 15726: return ZSTD_Streaming_Supported(); 15726: default: 15726: return false; 15726: } 15726: } 15726: 15726: inline bool CompressionTypeSupported(CompressionType compression_type) { 15726: switch (compression_type) { 15726: case kNoCompression: 15726: return true; 15726: case kSnappyCompression: 15726: return Snappy_Supported(); 15726: case kZlibCompression: 15726: return Zlib_Supported(); 15726: case kBZip2Compression: 15726: return BZip2_Supported(); 15726: case kLZ4Compression: 15726: return LZ4_Supported(); 15726: case kLZ4HCCompression: 15726: return LZ4_Supported(); 15726: case kXpressCompression: 15726: return XPRESS_Supported(); 15726: case kZSTDNotFinalCompression: 15726: return ZSTDNotFinal_Supported(); 15726: case kZSTD: 15726: return ZSTD_Supported(); 15726: default: 15726: 15726: # 605 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 605 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: false 15726: # 605 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 605 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "false" 15726: # 605 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 605 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: return false; 15726: } 15726: } 15726: 15726: inline bool DictCompressionTypeSupported(CompressionType compression_type) { 15726: switch (compression_type) { 15726: case kNoCompression: 15726: return false; 15726: case kSnappyCompression: 15726: return false; 15726: case kZlibCompression: 15726: return Zlib_Supported(); 15726: case kBZip2Compression: 15726: return false; 15726: case kLZ4Compression: 15726: case kLZ4HCCompression: 15726: 15726: return LZ4_Supported(); 15726: 15726: 15726: 15726: case kXpressCompression: 15726: return false; 15726: case kZSTDNotFinalCompression: 15726: 15726: return ZSTDNotFinal_Supported(); 15726: 15726: 15726: 15726: case kZSTD: 15726: 15726: return ZSTD_Supported(); 15726: 15726: 15726: 15726: default: 15726: 15726: # 642 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 642 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: false 15726: # 642 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 642 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "false" 15726: # 642 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 642 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: return false; 15726: } 15726: } 15726: 15726: inline std::string CompressionTypeToString(CompressionType compression_type) { 15726: switch (compression_type) { 15726: case kNoCompression: 15726: return "NoCompression"; 15726: case kSnappyCompression: 15726: return "Snappy"; 15726: case kZlibCompression: 15726: return "Zlib"; 15726: case kBZip2Compression: 15726: return "BZip2"; 15726: case kLZ4Compression: 15726: return "LZ4"; 15726: case kLZ4HCCompression: 15726: return "LZ4HC"; 15726: case kXpressCompression: 15726: return "Xpress"; 15726: case kZSTD: 15726: return "ZSTD"; 15726: case kZSTDNotFinalCompression: 15726: return "ZSTDNotFinal"; 15726: case kDisableCompressionOption: 15726: return "DisableOption"; 15726: default: 15726: 15726: # 670 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 670 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: false 15726: # 670 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 670 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "false" 15726: # 670 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 670 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: return ""; 15726: } 15726: } 15726: 15726: inline std::string CompressionOptionsToString( 15726: CompressionOptions& compression_options) { 15726: std::string result; 15726: result.reserve(512); 15726: result.append("window_bits=") 15726: .append(std::to_string(compression_options.window_bits)) 15726: .append("; "); 15726: result.append("level=") 15726: .append(std::to_string(compression_options.level)) 15726: .append("; "); 15726: result.append("strategy=") 15726: .append(std::to_string(compression_options.strategy)) 15726: .append("; "); 15726: result.append("max_dict_bytes=") 15726: .append(std::to_string(compression_options.max_dict_bytes)) 15726: .append("; "); 15726: result.append("zstd_max_train_bytes=") 15726: .append(std::to_string(compression_options.zstd_max_train_bytes)) 15726: .append("; "); 15726: result.append("enabled=") 15726: .append(std::to_string(compression_options.enabled)) 15726: .append("; "); 15726: result.append("max_dict_buffer_bytes=") 15726: .append(std::to_string(compression_options.max_dict_buffer_bytes)) 15726: .append("; "); 15726: result.append("use_zstd_dict_trainer=") 15726: .append(std::to_string(compression_options.use_zstd_dict_trainer)) 15726: .append("; "); 15726: return result; 15726: } 15726: # 713 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: inline bool Snappy_Compress(const CompressionInfo& , const char* input, 15726: size_t length, ::std::string* output) { 15726: 15726: output->resize(snappy::MaxCompressedLength(length)); 15726: size_t outlen; 15726: snappy::RawCompress(input, length, &(*output)[0], &outlen); 15726: output->resize(outlen); 15726: return true; 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: 15726: inline CacheAllocationPtr Snappy_Uncompress( 15726: const char* input, size_t length, size_t* uncompressed_size, 15726: MemoryAllocator* allocator = nullptr) { 15726: 15726: size_t uncompressed_length = 0; 15726: if (!snappy::GetUncompressedLength(input, length, &uncompressed_length)) { 15726: return nullptr; 15726: } 15726: 15726: CacheAllocationPtr output = AllocateBlock(uncompressed_length, allocator); 15726: 15726: if (!snappy::RawUncompress(input, length, output.get())) { 15726: return nullptr; 15726: } 15726: 15726: *uncompressed_size = uncompressed_length; 15726: 15726: return output; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: 15726: namespace compression { 15726: 15726: inline size_t PutDecompressedSizeInfo(std::string* output, uint32_t length) { 15726: PutVarint32(output, length); 15726: return output->size(); 15726: } 15726: 15726: inline bool GetDecompressedSizeInfo(const char** input_data, 15726: size_t* input_length, 15726: uint32_t* output_len) { 15726: auto new_input_data = 15726: GetVarint32Ptr(*input_data, *input_data + *input_length, output_len); 15726: if (new_input_data == nullptr) { 15726: return false; 15726: } 15726: *input_length -= (new_input_data - *input_data); 15726: *input_data = new_input_data; 15726: return true; 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline bool Zlib_Compress(const CompressionInfo& info, 15726: uint32_t compress_format_version, const char* input, 15726: size_t length, ::std::string* output) { 15726: 15726: if (length > std::numeric_limits::max()) { 15726: 15726: return false; 15726: } 15726: 15726: size_t output_header_len = 0; 15726: if (compress_format_version == 2) { 15726: output_header_len = compression::PutDecompressedSizeInfo( 15726: output, static_cast(length)); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: static const int memLevel = 8; 15726: int level; 15726: if (info.options().level == CompressionOptions::kDefaultCompressionLevel) { 15726: level = 15726: # 806 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (-1) 15726: # 806 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: } else { 15726: level = info.options().level; 15726: } 15726: z_stream _stream; 15726: memset(&_stream, 0, sizeof(z_stream)); 15726: int st = 15726: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: deflateInit2_(( 15726: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: &_stream 15726: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ),( 15726: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: level 15726: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ),(8),( 15726: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: info.options().window_bits 15726: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ),( 15726: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: memLevel 15726: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ), ( 15726: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: info.options().strategy 15726: # 812 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ), "1.3.1", (int)sizeof(z_stream)) 15726: 15726: # 813 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: if (st != 15726: # 814 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: 0 15726: # 814 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ) { 15726: return false; 15726: } 15726: 15726: Slice compression_dict = info.dict().GetRawDict(); 15726: if (compression_dict.size()) { 15726: 15726: st = deflateSetDictionary( 15726: &_stream, reinterpret_cast(compression_dict.data()), 15726: static_cast(compression_dict.size())); 15726: if (st != 15726: # 824 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: 0 15726: # 824 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ) { 15726: deflateEnd(&_stream); 15726: return false; 15726: } 15726: } 15726: 15726: 15726: size_t upper_bound = 15726: deflateBound(&_stream, static_cast(length)); 15726: output->resize(output_header_len + upper_bound); 15726: 15726: 15726: _stream.next_in = (Bytef*)input; 15726: _stream.avail_in = static_cast(length); 15726: 15726: 15726: _stream.avail_out = static_cast(upper_bound); 15726: _stream.next_out = reinterpret_cast(&(*output)[output_header_len]); 15726: 15726: bool compressed = false; 15726: st = deflate(&_stream, 15726: # 844 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: 4 15726: # 844 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ); 15726: if (st == 15726: # 845 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: 1 15726: # 845 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ) { 15726: compressed = true; 15726: output->resize(output->size() - _stream.avail_out); 15726: } 15726: 15726: 15726: 15726: 15726: deflateEnd(&_stream); 15726: return compressed; 15726: # 863 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline CacheAllocationPtr Zlib_Uncompress( 15726: const UncompressionInfo& info, const char* input_data, size_t input_length, 15726: size_t* uncompressed_size, uint32_t compress_format_version, 15726: MemoryAllocator* allocator = nullptr, int windowBits = -14) { 15726: 15726: uint32_t output_len = 0; 15726: if (compress_format_version == 2) { 15726: if (!compression::GetDecompressedSizeInfo(&input_data, &input_length, 15726: &output_len)) { 15726: return nullptr; 15726: } 15726: } else { 15726: 15726: 15726: size_t proposed_output_len = ((input_length * 5) & (~(4096 - 1))) + 4096; 15726: output_len = static_cast( 15726: std::min(proposed_output_len, 15726: static_cast(std::numeric_limits::max()))); 15726: } 15726: 15726: z_stream _stream; 15726: memset(&_stream, 0, sizeof(z_stream)); 15726: 15726: 15726: 15726: 15726: int st = 15726: 15726: # 898 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: inflateInit2_(( 15726: # 898 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: &_stream 15726: # 898 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ), ( 15726: # 898 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: windowBits > 0 ? windowBits + 32 : windowBits 15726: # 898 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ), "1.3.1", (int)sizeof(z_stream)) 15726: # 898 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: if (st != 15726: # 899 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: 0 15726: # 899 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ) { 15726: return nullptr; 15726: } 15726: 15726: const Slice& compression_dict = info.dict().GetRawDict(); 15726: if (compression_dict.size()) { 15726: 15726: st = inflateSetDictionary( 15726: &_stream, reinterpret_cast(compression_dict.data()), 15726: static_cast(compression_dict.size())); 15726: if (st != 15726: # 909 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: 0 15726: # 909 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ) { 15726: return nullptr; 15726: } 15726: } 15726: 15726: _stream.next_in = (Bytef*)input_data; 15726: _stream.avail_in = static_cast(input_length); 15726: 15726: auto output = AllocateBlock(output_len, allocator); 15726: 15726: _stream.next_out = (Bytef*)output.get(); 15726: _stream.avail_out = static_cast(output_len); 15726: 15726: bool done = false; 15726: while (!done) { 15726: st = inflate(&_stream, 15726: # 924 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: 2 15726: # 924 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ); 15726: switch (st) { 15726: case 15726: # 926 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: 1 15726: # 926 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: : 15726: done = true; 15726: break; 15726: case 15726: # 929 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: 0 15726: # 929 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: : { 15726: 15726: 15726: 15726: 15726: # 933 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 933 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: compress_format_version != 2 15726: # 933 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 933 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "compress_format_version != 2" 15726: # 933 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 933 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: size_t old_sz = output_len; 15726: uint32_t output_len_delta = output_len / 5; 15726: output_len += output_len_delta < 10 ? 10 : output_len_delta; 15726: auto tmp = AllocateBlock(output_len, allocator); 15726: memcpy(tmp.get(), output.get(), old_sz); 15726: output = std::move(tmp); 15726: 15726: 15726: _stream.next_out = (Bytef*)(output.get() + old_sz); 15726: _stream.avail_out = static_cast(output_len - old_sz); 15726: break; 15726: } 15726: case 15726: # 946 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (-5) 15726: # 946 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: : 15726: default: 15726: inflateEnd(&_stream); 15726: return nullptr; 15726: } 15726: } 15726: 15726: 15726: 15726: # 954 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 954 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: compress_format_version != 2 || _stream.avail_out == 0 15726: # 954 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 954 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "compress_format_version != 2 || _stream.avail_out == 0" 15726: # 954 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 954 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: 15726: # 955 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 955 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: output_len >= _stream.avail_out 15726: # 955 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 955 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "output_len >= _stream.avail_out" 15726: # 955 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 955 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: *uncompressed_size = output_len - _stream.avail_out; 15726: inflateEnd(&_stream); 15726: return output; 15726: # 969 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: } 15726: 15726: 15726: 15726: 15726: 15726: inline bool BZip2_Compress(const CompressionInfo& , 15726: uint32_t compress_format_version, const char* input, 15726: size_t length, ::std::string* output) { 15726: 15726: if (length > std::numeric_limits::max()) { 15726: 15726: return false; 15726: } 15726: size_t output_header_len = 0; 15726: if (compress_format_version == 2) { 15726: output_header_len = compression::PutDecompressedSizeInfo( 15726: output, static_cast(length)); 15726: } 15726: 15726: 15726: output->resize(output_header_len + length); 15726: 15726: bz_stream _stream; 15726: memset(&_stream, 0, sizeof(bz_stream)); 15726: 15726: 15726: 15726: 15726: int st = BZ2_bzCompressInit(&_stream, 1, 0, 30); 15726: if (st != 15726: # 999 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: 0 15726: # 999 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ) { 15726: return false; 15726: } 15726: 15726: 15726: _stream.next_in = (char*)input; 15726: _stream.avail_in = static_cast(length); 15726: 15726: 15726: _stream.avail_out = static_cast(length); 15726: _stream.next_out = reinterpret_cast(&(*output)[output_header_len]); 15726: 15726: bool compressed = false; 15726: st = BZ2_bzCompress(&_stream, 15726: # 1012 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: 2 15726: # 1012 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ); 15726: if (st == 15726: # 1013 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: 4 15726: # 1013 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ) { 15726: compressed = true; 15726: output->resize(output->size() - _stream.avail_out); 15726: } 15726: 15726: 15726: 15726: 15726: BZ2_bzCompressEnd(&_stream); 15726: return compressed; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: 15726: 15726: 15726: 15726: 15726: inline CacheAllocationPtr BZip2_Uncompress( 15726: const char* input_data, size_t input_length, size_t* uncompressed_size, 15726: uint32_t compress_format_version, MemoryAllocator* allocator = nullptr) { 15726: 15726: uint32_t output_len = 0; 15726: if (compress_format_version == 2) { 15726: if (!compression::GetDecompressedSizeInfo(&input_data, &input_length, 15726: &output_len)) { 15726: return nullptr; 15726: } 15726: } else { 15726: 15726: 15726: size_t proposed_output_len = ((input_length * 5) & (~(4096 - 1))) + 4096; 15726: output_len = static_cast( 15726: std::min(proposed_output_len, 15726: static_cast(std::numeric_limits::max()))); 15726: } 15726: 15726: bz_stream _stream; 15726: memset(&_stream, 0, sizeof(bz_stream)); 15726: 15726: int st = BZ2_bzDecompressInit(&_stream, 0, 0); 15726: if (st != 15726: # 1059 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: 0 15726: # 1059 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ) { 15726: return nullptr; 15726: } 15726: 15726: _stream.next_in = (char*)input_data; 15726: _stream.avail_in = static_cast(input_length); 15726: 15726: auto output = AllocateBlock(output_len, allocator); 15726: 15726: _stream.next_out = (char*)output.get(); 15726: _stream.avail_out = static_cast(output_len); 15726: 15726: bool done = false; 15726: while (!done) { 15726: st = BZ2_bzDecompress(&_stream); 15726: switch (st) { 15726: case 15726: # 1075 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: 4 15726: # 1075 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: : 15726: done = true; 15726: break; 15726: case 15726: # 1078 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: 0 15726: # 1078 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: : { 15726: 15726: 15726: 15726: 15726: # 1082 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 1082 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: compress_format_version != 2 15726: # 1082 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1082 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "compress_format_version != 2" 15726: # 1082 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1082 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: uint32_t old_sz = output_len; 15726: output_len = output_len * 1.2; 15726: auto tmp = AllocateBlock(output_len, allocator); 15726: memcpy(tmp.get(), output.get(), old_sz); 15726: output = std::move(tmp); 15726: 15726: 15726: _stream.next_out = (char*)(output.get() + old_sz); 15726: _stream.avail_out = static_cast(output_len - old_sz); 15726: break; 15726: } 15726: default: 15726: BZ2_bzDecompressEnd(&_stream); 15726: return nullptr; 15726: } 15726: } 15726: 15726: 15726: 15726: # 1101 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 1101 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: compress_format_version != 2 || _stream.avail_out == 0 15726: # 1101 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1101 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "compress_format_version != 2 || _stream.avail_out == 0" 15726: # 1101 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1101 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: 15726: # 1102 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 1102 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: output_len >= _stream.avail_out 15726: # 1102 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1102 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "output_len >= _stream.avail_out" 15726: # 1102 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1102 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: *uncompressed_size = output_len - _stream.avail_out; 15726: BZ2_bzDecompressEnd(&_stream); 15726: return output; 15726: # 1114 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline bool LZ4_Compress(const CompressionInfo& info, 15726: uint32_t compress_format_version, const char* input, 15726: size_t length, ::std::string* output) { 15726: 15726: if (length > std::numeric_limits::max()) { 15726: 15726: return false; 15726: } 15726: 15726: size_t output_header_len = 0; 15726: if (compress_format_version == 2) { 15726: 15726: output_header_len = compression::PutDecompressedSizeInfo( 15726: output, static_cast(length)); 15726: } else { 15726: 15726: 15726: output_header_len = 8; 15726: output->resize(output_header_len); 15726: char* p = const_cast(output->c_str()); 15726: memcpy(p, &length, sizeof(length)); 15726: } 15726: int compress_bound = LZ4_compressBound(static_cast(length)); 15726: output->resize(static_cast(output_header_len + compress_bound)); 15726: 15726: int outlen; 15726: 15726: LZ4_stream_t* stream = LZ4_createStream(); 15726: Slice compression_dict = info.dict().GetRawDict(); 15726: if (compression_dict.size()) { 15726: LZ4_loadDict(stream, compression_dict.data(), 15726: static_cast(compression_dict.size())); 15726: } 15726: 15726: int acceleration; 15726: if (info.options().level < 0) { 15726: acceleration = -info.options().level; 15726: } else { 15726: acceleration = 1; 15726: } 15726: outlen = LZ4_compress_fast_continue( 15726: stream, input, &(*output)[output_header_len], static_cast(length), 15726: compress_bound, acceleration); 15726: 15726: 15726: 15726: 15726: 15726: LZ4_freeStream(stream); 15726: 15726: 15726: 15726: 15726: 15726: if (outlen == 0) { 15726: return false; 15726: } 15726: output->resize(static_cast(output_header_len + outlen)); 15726: return true; 15726: # 1189 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline CacheAllocationPtr LZ4_Uncompress(const UncompressionInfo& info, 15726: const char* input_data, 15726: size_t input_length, 15726: size_t* uncompressed_size, 15726: uint32_t compress_format_version, 15726: MemoryAllocator* allocator = nullptr) { 15726: 15726: uint32_t output_len = 0; 15726: if (compress_format_version == 2) { 15726: 15726: if (!compression::GetDecompressedSizeInfo(&input_data, &input_length, 15726: &output_len)) { 15726: return nullptr; 15726: } 15726: } else { 15726: 15726: 15726: if (input_length < 8) { 15726: return nullptr; 15726: } 15726: if (port::kLittleEndian) { 15726: memcpy(&output_len, input_data, sizeof(output_len)); 15726: } else { 15726: memcpy(&output_len, input_data + 4, sizeof(output_len)); 15726: } 15726: input_length -= 8; 15726: input_data += 8; 15726: } 15726: 15726: auto output = AllocateBlock(output_len, allocator); 15726: 15726: int decompress_bytes = 0; 15726: 15726: 15726: LZ4_streamDecode_t* stream = LZ4_createStreamDecode(); 15726: const Slice& compression_dict = info.dict().GetRawDict(); 15726: if (compression_dict.size()) { 15726: LZ4_setStreamDecode(stream, compression_dict.data(), 15726: static_cast(compression_dict.size())); 15726: } 15726: decompress_bytes = LZ4_decompress_safe_continue( 15726: stream, input_data, output.get(), static_cast(input_length), 15726: static_cast(output_len)); 15726: LZ4_freeStreamDecode(stream); 15726: 15726: 15726: 15726: 15726: 15726: 15726: if (decompress_bytes < 0) { 15726: return nullptr; 15726: } 15726: 15726: # 1250 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 1250 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: decompress_bytes == static_cast(output_len) 15726: # 1250 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1250 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "decompress_bytes == static_cast(output_len)" 15726: # 1250 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1250 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: *uncompressed_size = decompress_bytes; 15726: return output; 15726: # 1262 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline bool LZ4HC_Compress(const CompressionInfo& info, 15726: uint32_t compress_format_version, const char* input, 15726: size_t length, ::std::string* output) { 15726: 15726: if (length > std::numeric_limits::max()) { 15726: 15726: return false; 15726: } 15726: 15726: size_t output_header_len = 0; 15726: if (compress_format_version == 2) { 15726: 15726: output_header_len = compression::PutDecompressedSizeInfo( 15726: output, static_cast(length)); 15726: } else { 15726: 15726: 15726: output_header_len = 8; 15726: output->resize(output_header_len); 15726: char* p = const_cast(output->c_str()); 15726: memcpy(p, &length, sizeof(length)); 15726: } 15726: int compress_bound = LZ4_compressBound(static_cast(length)); 15726: output->resize(static_cast(output_header_len + compress_bound)); 15726: 15726: int outlen; 15726: int level; 15726: if (info.options().level == CompressionOptions::kDefaultCompressionLevel) { 15726: level = 0; 15726: } else { 15726: level = info.options().level; 15726: } 15726: 15726: LZ4_streamHC_t* stream = LZ4_createStreamHC(); 15726: LZ4_resetStreamHC(stream, level); 15726: Slice compression_dict = info.dict().GetRawDict(); 15726: const char* compression_dict_data = 15726: compression_dict.size() > 0 ? compression_dict.data() : nullptr; 15726: size_t compression_dict_size = compression_dict.size(); 15726: if (compression_dict_data != nullptr) { 15726: LZ4_loadDictHC(stream, compression_dict_data, 15726: static_cast(compression_dict_size)); 15726: } 15726: 15726: 15726: outlen = 15726: LZ4_compress_HC_continue(stream, input, &(*output)[output_header_len], 15726: static_cast(length), compress_bound); 15726: 15726: 15726: 15726: 15726: 15726: LZ4_freeStreamHC(stream); 15726: # 1335 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: if (outlen == 0) { 15726: return false; 15726: } 15726: output->resize(static_cast(output_header_len + outlen)); 15726: return true; 15726: # 1348 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline bool XPRESS_Compress(const char* , size_t , 15726: std::string* ) { 15726: return false; 15726: } 15726: # 1368 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: inline char* XPRESS_Uncompress(const char* , 15726: size_t , 15726: size_t* ) { 15726: return nullptr; 15726: } 15726: 15726: 15726: inline bool ZSTD_Compress(const CompressionInfo& info, const char* input, 15726: size_t length, ::std::string* output) { 15726: 15726: if (length > std::numeric_limits::max()) { 15726: 15726: return false; 15726: } 15726: 15726: size_t output_header_len = compression::PutDecompressedSizeInfo( 15726: output, static_cast(length)); 15726: 15726: size_t compressBound = ZSTD_compressBound(length); 15726: output->resize(static_cast(output_header_len + compressBound)); 15726: size_t outlen = 0; 15726: 15726: ZSTD_CCtx* context = info.context().ZSTDPreallocCtx(); 15726: 15726: # 1391 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 1391 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: context != nullptr 15726: # 1391 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1391 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "context != nullptr" 15726: # 1391 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1391 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: 15726: if (info.dict().GetDigestedZstdCDict() != nullptr) { 15726: ZSTD_CCtx_refCDict(context, info.dict().GetDigestedZstdCDict()); 15726: } else { 15726: ZSTD_CCtx_loadDictionary(context, info.dict().GetRawDict().data(), 15726: info.dict().GetRawDict().size()); 15726: } 15726: 15726: 15726: outlen = ZSTD_compress2(context, &(*output)[output_header_len], compressBound, 15726: input, length); 15726: # 1431 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: if (outlen == 0) { 15726: return false; 15726: } 15726: output->resize(output_header_len + outlen); 15726: return true; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline CacheAllocationPtr ZSTD_Uncompress( 15726: const UncompressionInfo& info, const char* input_data, size_t input_length, 15726: size_t* uncompressed_size, MemoryAllocator* allocator = nullptr, 15726: const char** error_message = nullptr) { 15726: 15726: static const char* const kErrorDecodeOutputSize = 15726: "Cannot decode output size."; 15726: static const char* const kErrorOutputLenMismatch = 15726: "Decompressed size does not match header."; 15726: uint32_t output_len = 0; 15726: if (!compression::GetDecompressedSizeInfo(&input_data, &input_length, 15726: &output_len)) { 15726: if (error_message) { 15726: *error_message = kErrorDecodeOutputSize; 15726: } 15726: return nullptr; 15726: } 15726: 15726: CacheAllocationPtr output = AllocateBlock(output_len, allocator); 15726: size_t actual_output_length = 0; 15726: 15726: ZSTD_DCtx* context = info.context().GetZSTDContext(); 15726: 15726: # 1472 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 1472 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: context != nullptr 15726: # 1472 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1472 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "context != nullptr" 15726: # 1472 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1472 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: actual_output_length = ZSTD_decompress_usingDict( 15726: context, output.get(), output_len, input_data, input_length, 15726: info.dict().GetRawDict().data(), info.dict().GetRawDict().size()); 15726: # 1491 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: if (ZSTD_isError(actual_output_length)) { 15726: if (error_message) { 15726: *error_message = ZSTD_getErrorName(actual_output_length); 15726: } 15726: return nullptr; 15726: } else if (actual_output_length != output_len) { 15726: if (error_message) { 15726: *error_message = kErrorOutputLenMismatch; 15726: } 15726: return nullptr; 15726: } 15726: 15726: *uncompressed_size = actual_output_length; 15726: return output; 15726: # 1514 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: } 15726: 15726: inline bool ZSTD_TrainDictionarySupported() { 15726: 15726: 15726: 15726: 15726: return (ZSTD_versionNumber() >= 10103); 15726: 15726: 15726: 15726: } 15726: 15726: inline std::string ZSTD_TrainDictionary(const std::string& samples, 15726: const std::vector& sample_lens, 15726: size_t max_dict_bytes) { 15726: 15726: 15726: 15726: 15726: 15726: # 1534 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 1534 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: samples.empty() == sample_lens.empty() 15726: # 1534 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1534 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "samples.empty() == sample_lens.empty()" 15726: # 1534 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1534 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: if (samples.empty()) { 15726: return ""; 15726: } 15726: std::string dict_data(max_dict_bytes, '\0'); 15726: size_t dict_len = ZDICT_trainFromBuffer( 15726: &dict_data[0], max_dict_bytes, &samples[0], &sample_lens[0], 15726: static_cast(sample_lens.size())); 15726: if (ZDICT_isError(dict_len)) { 15726: return ""; 15726: } 15726: 15726: # 1545 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 1545 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: dict_len <= max_dict_bytes 15726: # 1545 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1545 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "dict_len <= max_dict_bytes" 15726: # 1545 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1545 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: dict_data.resize(dict_len); 15726: return dict_data; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: 15726: inline std::string ZSTD_TrainDictionary(const std::string& samples, 15726: size_t sample_len_shift, 15726: size_t max_dict_bytes) { 15726: 15726: 15726: 15726: 15726: size_t num_samples = samples.size() >> sample_len_shift; 15726: std::vector sample_lens(num_samples, size_t(1) << sample_len_shift); 15726: return ZSTD_TrainDictionary(samples, sample_lens, max_dict_bytes); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: } 15726: 15726: inline bool ZSTD_FinalizeDictionarySupported() { 15726: 15726: 15726: return (ZSTD_versionNumber() >= 10405); 15726: 15726: 15726: 15726: } 15726: 15726: inline std::string ZSTD_FinalizeDictionary( 15726: const std::string& samples, const std::vector& sample_lens, 15726: size_t max_dict_bytes, int level) { 15726: 15726: 15726: 15726: # 1590 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 1590 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: samples.empty() == sample_lens.empty() 15726: # 1590 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1590 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "samples.empty() == sample_lens.empty()" 15726: # 1590 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1590 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: if (samples.empty()) { 15726: return ""; 15726: } 15726: if (level == CompressionOptions::kDefaultCompressionLevel) { 15726: 15726: 15726: level = 3; 15726: } 15726: std::string dict_data(max_dict_bytes, '\0'); 15726: size_t dict_len = ZDICT_finalizeDictionary( 15726: dict_data.data(), max_dict_bytes, samples.data(), 15726: std::min(static_cast(samples.size()), max_dict_bytes), 15726: samples.data(), sample_lens.data(), 15726: static_cast(sample_lens.size()), 15726: {level, 0 , 0 }); 15726: if (ZDICT_isError(dict_len)) { 15726: return ""; 15726: } else { 15726: 15726: # 1609 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 1609 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: dict_len <= max_dict_bytes 15726: # 1609 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1609 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "dict_len <= max_dict_bytes" 15726: # 1609 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1609 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: dict_data.resize(dict_len); 15726: return dict_data; 15726: } 15726: # 1621 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: } 15726: 15726: inline bool CompressData(const Slice& raw, 15726: const CompressionInfo& compression_info, 15726: uint32_t compress_format_version, 15726: std::string* compressed_output) { 15726: bool ret = false; 15726: 15726: 15726: 15726: switch (compression_info.type()) { 15726: case kSnappyCompression: 15726: ret = Snappy_Compress(compression_info, raw.data(), raw.size(), 15726: compressed_output); 15726: break; 15726: case kZlibCompression: 15726: ret = Zlib_Compress(compression_info, compress_format_version, raw.data(), 15726: raw.size(), compressed_output); 15726: break; 15726: case kBZip2Compression: 15726: ret = BZip2_Compress(compression_info, compress_format_version, 15726: raw.data(), raw.size(), compressed_output); 15726: break; 15726: case kLZ4Compression: 15726: ret = LZ4_Compress(compression_info, compress_format_version, raw.data(), 15726: raw.size(), compressed_output); 15726: break; 15726: case kLZ4HCCompression: 15726: ret = LZ4HC_Compress(compression_info, compress_format_version, 15726: raw.data(), raw.size(), compressed_output); 15726: break; 15726: case kXpressCompression: 15726: ret = XPRESS_Compress(raw.data(), raw.size(), compressed_output); 15726: break; 15726: case kZSTD: 15726: case kZSTDNotFinalCompression: 15726: ret = ZSTD_Compress(compression_info, raw.data(), raw.size(), 15726: compressed_output); 15726: break; 15726: default: 15726: 15726: break; 15726: } 15726: 15726: rocksdb::SyncPoint::GetInstance()->Process("CompressData:TamperWithReturnValue", static_cast(&ret)) 15726: ; 15726: 15726: return ret; 15726: } 15726: 15726: inline CacheAllocationPtr UncompressData( 15726: const UncompressionInfo& uncompression_info, const char* data, size_t n, 15726: size_t* uncompressed_size, uint32_t compress_format_version, 15726: MemoryAllocator* allocator = nullptr, 15726: const char** error_message = nullptr) { 15726: switch (uncompression_info.type()) { 15726: case kSnappyCompression: 15726: return Snappy_Uncompress(data, n, uncompressed_size, allocator); 15726: case kZlibCompression: 15726: return Zlib_Uncompress(uncompression_info, data, n, uncompressed_size, 15726: compress_format_version, allocator); 15726: case kBZip2Compression: 15726: return BZip2_Uncompress(data, n, uncompressed_size, 15726: compress_format_version, allocator); 15726: case kLZ4Compression: 15726: case kLZ4HCCompression: 15726: return LZ4_Uncompress(uncompression_info, data, n, uncompressed_size, 15726: compress_format_version, allocator); 15726: case kXpressCompression: 15726: 15726: 15726: return CacheAllocationPtr(XPRESS_Uncompress(data, n, uncompressed_size)); 15726: case kZSTD: 15726: case kZSTDNotFinalCompression: 15726: 15726: return ZSTD_Uncompress(uncompression_info, data, n, uncompressed_size, 15726: allocator, error_message); 15726: default: 15726: return CacheAllocationPtr(); 15726: } 15726: } 15726: 15726: 15726: class CompressionTypeRecord { 15726: public: 15726: explicit CompressionTypeRecord(CompressionType compression_type) 15726: : compression_type_(compression_type) {} 15726: 15726: CompressionType GetCompressionType() const { return compression_type_; } 15726: 15726: inline void EncodeTo(std::string* dst) const { 15726: 15726: # 1712 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 1712 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: dst != nullptr 15726: # 1712 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1712 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "dst != nullptr" 15726: # 1712 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1712 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: PutFixed32(dst, compression_type_); 15726: } 15726: 15726: inline Status DecodeFrom(Slice* src) { 15726: constexpr char class_name[] = "CompressionTypeRecord"; 15726: 15726: uint32_t val; 15726: if (!GetFixed32(src, &val)) { 15726: return Status::Corruption(class_name, 15726: "Error decoding WAL compression type"); 15726: } 15726: CompressionType compression_type = static_cast(val); 15726: if (!StreamingCompressionTypeSupported(compression_type)) { 15726: return Status::Corruption(class_name, 15726: "WAL compression type not supported"); 15726: } 15726: compression_type_ = compression_type; 15726: return Status::OK(); 15726: } 15726: 15726: inline std::string DebugString() const { 15726: return "compression_type: " + CompressionTypeToString(compression_type_); 15726: } 15726: 15726: private: 15726: CompressionType compression_type_; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: class StreamingCompress { 15726: public: 15726: StreamingCompress(CompressionType compression_type, 15726: const CompressionOptions& opts, 15726: uint32_t compress_format_version, size_t max_output_len) 15726: : compression_type_(compression_type), 15726: opts_(opts), 15726: compress_format_version_(compress_format_version), 15726: max_output_len_(max_output_len) {} 15726: virtual ~StreamingCompress() = default; 15726: # 1767 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: virtual int Compress(const char* input, size_t input_size, char* output, 15726: size_t* output_pos) = 0; 15726: 15726: 15726: static StreamingCompress* Create(CompressionType compression_type, 15726: const CompressionOptions& opts, 15726: uint32_t compress_format_version, 15726: size_t max_output_len); 15726: virtual void Reset() = 0; 15726: 15726: protected: 15726: const CompressionType compression_type_; 15726: const CompressionOptions opts_; 15726: const uint32_t compress_format_version_; 15726: const size_t max_output_len_; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: class StreamingUncompress { 15726: public: 15726: StreamingUncompress(CompressionType compression_type, 15726: uint32_t compress_format_version, size_t max_output_len) 15726: : compression_type_(compression_type), 15726: compress_format_version_(compress_format_version), 15726: max_output_len_(max_output_len) {} 15726: virtual ~StreamingUncompress() = default; 15726: # 1810 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: virtual int Uncompress(const char* input, size_t input_size, char* output, 15726: size_t* output_pos) = 0; 15726: static StreamingUncompress* Create(CompressionType compression_type, 15726: uint32_t compress_format_version, 15726: size_t max_output_len); 15726: virtual void Reset() = 0; 15726: 15726: protected: 15726: CompressionType compression_type_; 15726: uint32_t compress_format_version_; 15726: size_t max_output_len_; 15726: }; 15726: 15726: class ZSTDStreamingCompress final : public StreamingCompress { 15726: public: 15726: explicit ZSTDStreamingCompress(const CompressionOptions& opts, 15726: uint32_t compress_format_version, 15726: size_t max_output_len) 15726: : StreamingCompress(kZSTD, opts, compress_format_version, 15726: max_output_len) { 15726: 15726: cctx_ = ZSTD_createCCtx(); 15726: 15726: ZSTD_CCtx_setParameter(cctx_, ZSTD_c_checksumFlag, 1); 15726: 15726: # 1834 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 1834 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: cctx_ != nullptr 15726: # 1834 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1834 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "cctx_ != nullptr" 15726: # 1834 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1834 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: input_buffer_ = { nullptr, 0, 0}; 15726: 15726: } 15726: ~ZSTDStreamingCompress() override { 15726: 15726: ZSTD_freeCCtx(cctx_); 15726: 15726: } 15726: int Compress(const char* input, size_t input_size, char* output, 15726: size_t* output_pos) override; 15726: void Reset() override; 15726: 15726: ZSTD_CCtx* cctx_; 15726: ZSTD_inBuffer input_buffer_; 15726: 15726: }; 15726: 15726: class ZSTDStreamingUncompress final : public StreamingUncompress { 15726: public: 15726: explicit ZSTDStreamingUncompress(uint32_t compress_format_version, 15726: size_t max_output_len) 15726: : StreamingUncompress(kZSTD, compress_format_version, max_output_len) { 15726: 15726: dctx_ = ZSTD_createDCtx(); 15726: 15726: # 1859 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: (static_cast ( 15726: # 1859 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: dctx_ != nullptr 15726: # 1859 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1859 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: "dctx_ != nullptr" 15726: # 1859 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1859 "/build/reproducible-path/rocksdb-9.3.1/util/compression.h" 15726: ; 15726: input_buffer_ = { nullptr, 0, 0}; 15726: 15726: } 15726: ~ZSTDStreamingUncompress() override { 15726: 15726: ZSTD_freeDCtx(dctx_); 15726: 15726: } 15726: int Uncompress(const char* input, size_t input_size, char* output, 15726: size_t* output_size) override; 15726: void Reset() override; 15726: 15726: private: 15726: 15726: ZSTD_DCtx* dctx_; 15726: ZSTD_inBuffer input_buffer_; 15726: 15726: }; 15726: 15726: } 15726: # 15 "/build/reproducible-path/rocksdb-9.3.1/options/cf_options.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: 15726: struct ImmutableCFOptions { 15726: public: 15726: static const char* kName() { return "ImmutableCFOptions"; } 15726: explicit ImmutableCFOptions(); 15726: explicit ImmutableCFOptions(const ColumnFamilyOptions& cf_options); 15726: 15726: CompactionStyle compaction_style; 15726: 15726: CompactionPri compaction_pri; 15726: 15726: const Comparator* user_comparator; 15726: InternalKeyComparator internal_comparator; 15726: 15726: std::shared_ptr merge_operator; 15726: 15726: const CompactionFilter* compaction_filter; 15726: 15726: std::shared_ptr compaction_filter_factory; 15726: 15726: int min_write_buffer_number_to_merge; 15726: 15726: int max_write_buffer_number_to_maintain; 15726: 15726: int64_t max_write_buffer_size_to_maintain; 15726: 15726: bool inplace_update_support; 15726: 15726: UpdateStatus (*inplace_callback)(char* existing_value, 15726: uint32_t* existing_value_size, 15726: Slice delta_value, 15726: std::string* merged_value); 15726: 15726: std::shared_ptr memtable_factory; 15726: 15726: std::shared_ptr table_factory; 15726: 15726: Options::TablePropertiesCollectorFactories 15726: table_properties_collector_factories; 15726: 15726: 15726: 15726: uint32_t bloom_locality; 15726: 15726: bool level_compaction_dynamic_level_bytes; 15726: 15726: int num_levels; 15726: 15726: bool optimize_filters_for_hits; 15726: 15726: bool force_consistency_checks; 15726: 15726: Temperature default_temperature; 15726: 15726: uint64_t preclude_last_level_data_seconds; 15726: 15726: uint64_t preserve_internal_time_seconds; 15726: 15726: std::shared_ptr 15726: memtable_insert_with_hint_prefix_extractor; 15726: 15726: std::vector cf_paths; 15726: 15726: std::shared_ptr compaction_thread_limiter; 15726: 15726: std::shared_ptr sst_partitioner_factory; 15726: 15726: std::shared_ptr blob_cache; 15726: 15726: bool persist_user_defined_timestamps; 15726: }; 15726: 15726: struct ImmutableOptions : public ImmutableDBOptions, public ImmutableCFOptions { 15726: explicit ImmutableOptions(); 15726: explicit ImmutableOptions(const Options& options); 15726: 15726: ImmutableOptions(const DBOptions& db_options, 15726: const ColumnFamilyOptions& cf_options); 15726: 15726: ImmutableOptions(const ImmutableDBOptions& db_options, 15726: const ImmutableCFOptions& cf_options); 15726: 15726: ImmutableOptions(const DBOptions& db_options, 15726: const ImmutableCFOptions& cf_options); 15726: 15726: ImmutableOptions(const ImmutableDBOptions& db_options, 15726: const ColumnFamilyOptions& cf_options); 15726: }; 15726: 15726: struct MutableCFOptions { 15726: static const char* kName() { return "MutableCFOptions"; } 15726: explicit MutableCFOptions(const ColumnFamilyOptions& options) 15726: : write_buffer_size(options.write_buffer_size), 15726: max_write_buffer_number(options.max_write_buffer_number), 15726: arena_block_size(options.arena_block_size), 15726: memtable_prefix_bloom_size_ratio( 15726: options.memtable_prefix_bloom_size_ratio), 15726: memtable_whole_key_filtering(options.memtable_whole_key_filtering), 15726: memtable_huge_page_size(options.memtable_huge_page_size), 15726: max_successive_merges(options.max_successive_merges), 15726: strict_max_successive_merges(options.strict_max_successive_merges), 15726: inplace_update_num_locks(options.inplace_update_num_locks), 15726: prefix_extractor(options.prefix_extractor), 15726: experimental_mempurge_threshold( 15726: options.experimental_mempurge_threshold), 15726: disable_auto_compactions(options.disable_auto_compactions), 15726: soft_pending_compaction_bytes_limit( 15726: options.soft_pending_compaction_bytes_limit), 15726: hard_pending_compaction_bytes_limit( 15726: options.hard_pending_compaction_bytes_limit), 15726: level0_file_num_compaction_trigger( 15726: options.level0_file_num_compaction_trigger), 15726: level0_slowdown_writes_trigger(options.level0_slowdown_writes_trigger), 15726: level0_stop_writes_trigger(options.level0_stop_writes_trigger), 15726: max_compaction_bytes(options.max_compaction_bytes), 15726: target_file_size_base(options.target_file_size_base), 15726: target_file_size_multiplier(options.target_file_size_multiplier), 15726: max_bytes_for_level_base(options.max_bytes_for_level_base), 15726: max_bytes_for_level_multiplier(options.max_bytes_for_level_multiplier), 15726: ttl(options.ttl), 15726: periodic_compaction_seconds(options.periodic_compaction_seconds), 15726: max_bytes_for_level_multiplier_additional( 15726: options.max_bytes_for_level_multiplier_additional), 15726: compaction_options_fifo(options.compaction_options_fifo), 15726: compaction_options_universal(options.compaction_options_universal), 15726: enable_blob_files(options.enable_blob_files), 15726: min_blob_size(options.min_blob_size), 15726: blob_file_size(options.blob_file_size), 15726: blob_compression_type(options.blob_compression_type), 15726: enable_blob_garbage_collection(options.enable_blob_garbage_collection), 15726: blob_garbage_collection_age_cutoff( 15726: options.blob_garbage_collection_age_cutoff), 15726: blob_garbage_collection_force_threshold( 15726: options.blob_garbage_collection_force_threshold), 15726: blob_compaction_readahead_size(options.blob_compaction_readahead_size), 15726: blob_file_starting_level(options.blob_file_starting_level), 15726: prepopulate_blob_cache(options.prepopulate_blob_cache), 15726: max_sequential_skip_in_iterations( 15726: options.max_sequential_skip_in_iterations), 15726: paranoid_file_checks(options.paranoid_file_checks), 15726: report_bg_io_stats(options.report_bg_io_stats), 15726: compression(options.compression), 15726: bottommost_compression(options.bottommost_compression), 15726: compression_opts(options.compression_opts), 15726: bottommost_compression_opts(options.bottommost_compression_opts), 15726: last_level_temperature(options.last_level_temperature), 15726: default_write_temperature(options.default_write_temperature), 15726: memtable_protection_bytes_per_key( 15726: options.memtable_protection_bytes_per_key), 15726: block_protection_bytes_per_key(options.block_protection_bytes_per_key), 15726: sample_for_compression( 15726: options.sample_for_compression), 15726: compression_per_level(options.compression_per_level), 15726: memtable_max_range_deletions(options.memtable_max_range_deletions), 15726: bottommost_file_compaction_delay( 15726: options.bottommost_file_compaction_delay) { 15726: RefreshDerivedOptions(options.num_levels, options.compaction_style); 15726: } 15726: 15726: MutableCFOptions() 15726: : write_buffer_size(0), 15726: max_write_buffer_number(0), 15726: arena_block_size(0), 15726: memtable_prefix_bloom_size_ratio(0), 15726: memtable_whole_key_filtering(false), 15726: memtable_huge_page_size(0), 15726: max_successive_merges(0), 15726: strict_max_successive_merges(false), 15726: inplace_update_num_locks(0), 15726: prefix_extractor(nullptr), 15726: experimental_mempurge_threshold(0.0), 15726: disable_auto_compactions(false), 15726: soft_pending_compaction_bytes_limit(0), 15726: hard_pending_compaction_bytes_limit(0), 15726: level0_file_num_compaction_trigger(0), 15726: level0_slowdown_writes_trigger(0), 15726: level0_stop_writes_trigger(0), 15726: max_compaction_bytes(0), 15726: target_file_size_base(0), 15726: target_file_size_multiplier(0), 15726: max_bytes_for_level_base(0), 15726: max_bytes_for_level_multiplier(0), 15726: ttl(0), 15726: periodic_compaction_seconds(0), 15726: compaction_options_fifo(), 15726: enable_blob_files(false), 15726: min_blob_size(0), 15726: blob_file_size(0), 15726: blob_compression_type(kNoCompression), 15726: enable_blob_garbage_collection(false), 15726: blob_garbage_collection_age_cutoff(0.0), 15726: blob_garbage_collection_force_threshold(0.0), 15726: blob_compaction_readahead_size(0), 15726: blob_file_starting_level(0), 15726: prepopulate_blob_cache(PrepopulateBlobCache::kDisable), 15726: max_sequential_skip_in_iterations(0), 15726: paranoid_file_checks(false), 15726: report_bg_io_stats(false), 15726: compression(Snappy_Supported() ? kSnappyCompression : kNoCompression), 15726: bottommost_compression(kDisableCompressionOption), 15726: last_level_temperature(Temperature::kUnknown), 15726: default_write_temperature(Temperature::kUnknown), 15726: memtable_protection_bytes_per_key(0), 15726: block_protection_bytes_per_key(0), 15726: sample_for_compression(0), 15726: memtable_max_range_deletions(0) {} 15726: 15726: explicit MutableCFOptions(const Options& options); 15726: 15726: 15726: void RefreshDerivedOptions(int num_levels, CompactionStyle compaction_style); 15726: 15726: void RefreshDerivedOptions(const ImmutableCFOptions& ioptions) { 15726: RefreshDerivedOptions(ioptions.num_levels, ioptions.compaction_style); 15726: } 15726: 15726: int MaxBytesMultiplerAdditional(int level) const { 15726: if (level >= 15726: static_cast(max_bytes_for_level_multiplier_additional.size())) { 15726: return 1; 15726: } 15726: return max_bytes_for_level_multiplier_additional[level]; 15726: } 15726: 15726: void Dump(Logger* log) const; 15726: 15726: 15726: size_t write_buffer_size; 15726: int max_write_buffer_number; 15726: size_t arena_block_size; 15726: double memtable_prefix_bloom_size_ratio; 15726: bool memtable_whole_key_filtering; 15726: size_t memtable_huge_page_size; 15726: size_t max_successive_merges; 15726: bool strict_max_successive_merges; 15726: size_t inplace_update_num_locks; 15726: std::shared_ptr prefix_extractor; 15726: # 273 "/build/reproducible-path/rocksdb-9.3.1/options/cf_options.h" 15726: double experimental_mempurge_threshold; 15726: 15726: 15726: bool disable_auto_compactions; 15726: uint64_t soft_pending_compaction_bytes_limit; 15726: uint64_t hard_pending_compaction_bytes_limit; 15726: int level0_file_num_compaction_trigger; 15726: int level0_slowdown_writes_trigger; 15726: int level0_stop_writes_trigger; 15726: uint64_t max_compaction_bytes; 15726: uint64_t target_file_size_base; 15726: int target_file_size_multiplier; 15726: uint64_t max_bytes_for_level_base; 15726: double max_bytes_for_level_multiplier; 15726: uint64_t ttl; 15726: uint64_t periodic_compaction_seconds; 15726: std::vector max_bytes_for_level_multiplier_additional; 15726: CompactionOptionsFIFO compaction_options_fifo; 15726: CompactionOptionsUniversal compaction_options_universal; 15726: 15726: 15726: bool enable_blob_files; 15726: uint64_t min_blob_size; 15726: uint64_t blob_file_size; 15726: CompressionType blob_compression_type; 15726: bool enable_blob_garbage_collection; 15726: double blob_garbage_collection_age_cutoff; 15726: double blob_garbage_collection_force_threshold; 15726: uint64_t blob_compaction_readahead_size; 15726: int blob_file_starting_level; 15726: PrepopulateBlobCache prepopulate_blob_cache; 15726: 15726: 15726: uint64_t max_sequential_skip_in_iterations; 15726: bool paranoid_file_checks; 15726: bool report_bg_io_stats; 15726: CompressionType compression; 15726: CompressionType bottommost_compression; 15726: CompressionOptions compression_opts; 15726: CompressionOptions bottommost_compression_opts; 15726: Temperature last_level_temperature; 15726: Temperature default_write_temperature; 15726: uint32_t memtable_protection_bytes_per_key; 15726: uint8_t block_protection_bytes_per_key; 15726: 15726: uint64_t sample_for_compression; 15726: std::vector compression_per_level; 15726: uint32_t memtable_max_range_deletions; 15726: uint32_t bottommost_file_compaction_delay; 15726: 15726: 15726: 15726: std::vector max_file_size; 15726: }; 15726: 15726: uint64_t MultiplyCheckOverflow(uint64_t op1, double op2); 15726: 15726: 15726: uint64_t MaxFileSizeForLevel(const MutableCFOptions& cf_options, 15726: int level, CompactionStyle compaction_style, int base_level = 1, 15726: bool level_compaction_dynamic_level_bytes = false); 15726: 15726: 15726: 15726: size_t MaxFileSizeForL0MetaPin(const MutableCFOptions& cf_options); 15726: 15726: Status GetStringFromMutableCFOptions(const ConfigOptions& config_options, 15726: const MutableCFOptions& mutable_opts, 15726: std::string* opt_string); 15726: 15726: Status GetMutableOptionsFromStrings( 15726: const MutableCFOptions& base_options, 15726: const std::unordered_map& options_map, 15726: Logger* info_log, MutableCFOptions* new_options); 15726: 15726: } 15726: # 20 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/port/malloc.h" 1 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/port/malloc.h" 15726: 15726: # 21 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 2 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class RandomAccessFile; 15726: struct ReadOptions; 15726: 15726: bool ShouldReportDetailedTime(Env* env, Statistics* stats); 15726: 15726: 15726: constexpr uint32_t kMagicNumberLengthByte = 8; 15726: 15726: extern const uint64_t kLegacyBlockBasedTableMagicNumber; 15726: extern const uint64_t kBlockBasedTableMagicNumber; 15726: 15726: extern const uint64_t kLegacyPlainTableMagicNumber; 15726: extern const uint64_t kPlainTableMagicNumber; 15726: 15726: extern const uint64_t kCuckooTableMagicNumber; 15726: 15726: 15726: 15726: class BlockHandle { 15726: public: 15726: 15726: 15726: BlockHandle(); 15726: BlockHandle(uint64_t offset, uint64_t size); 15726: 15726: 15726: uint64_t offset() const { return offset_; } 15726: void set_offset(uint64_t _offset) { offset_ = _offset; } 15726: 15726: 15726: uint64_t size() const { return size_; } 15726: void set_size(uint64_t _size) { size_ = _size; } 15726: 15726: void EncodeTo(std::string* dst) const; 15726: char* EncodeTo(char* dst) const; 15726: Status DecodeFrom(Slice* input); 15726: Status DecodeSizeFrom(uint64_t offset, Slice* input); 15726: 15726: 15726: std::string ToString(bool hex = true) const; 15726: 15726: 15726: 15726: bool IsNull() const { return offset_ == 0 && size_ == 0; } 15726: 15726: static const BlockHandle& NullBlockHandle() { return kNullBlockHandle; } 15726: 15726: 15726: static constexpr uint32_t kMaxEncodedLength = 2 * kMaxVarint64Length; 15726: 15726: inline bool operator==(const BlockHandle& rhs) const { 15726: return offset_ == rhs.offset_ && size_ == rhs.size_; 15726: } 15726: inline bool operator!=(const BlockHandle& rhs) const { 15726: return !(*this == rhs); 15726: } 15726: 15726: private: 15726: uint64_t offset_; 15726: uint64_t size_; 15726: 15726: static const BlockHandle kNullBlockHandle; 15726: }; 15726: # 100 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 15726: struct IndexValue { 15726: BlockHandle handle; 15726: 15726: Slice first_internal_key; 15726: 15726: IndexValue() = default; 15726: IndexValue(BlockHandle _handle, Slice _first_internal_key) 15726: : handle(_handle), first_internal_key(_first_internal_key) {} 15726: 15726: 15726: 15726: 15726: 15726: 15726: void EncodeTo(std::string* dst, bool have_first_key, 15726: const BlockHandle* previous_handle) const; 15726: Status DecodeFrom(Slice* input, bool have_first_key, 15726: const BlockHandle* previous_handle); 15726: 15726: std::string ToString(bool hex, bool have_first_key) const; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline uint32_t ChecksumModifierForContext(uint32_t base_context_checksum, 15726: uint64_t offset) { 15726: 15726: 15726: 15726: 15726: 15726: uint32_t all_or_nothing = uint32_t{0} - (base_context_checksum != 0); 15726: # 150 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 15726: uint32_t modifier = 15726: base_context_checksum ^ (Lower32of64(offset) + Upper32of64(offset)); 15726: 15726: return modifier & all_or_nothing; 15726: } 15726: 15726: inline uint32_t GetCompressFormatForVersion(uint32_t format_version) { 15726: 15726: 15726: 15726: return format_version >= 2 ? 2 : 1; 15726: } 15726: 15726: constexpr uint32_t kLatestFormatVersion = 6; 15726: 15726: inline bool IsSupportedFormatVersion(uint32_t version) { 15726: return version <= kLatestFormatVersion; 15726: } 15726: 15726: 15726: inline bool FormatVersionUsesContextChecksum(uint32_t version) { 15726: return version >= 6; 15726: } 15726: 15726: inline bool FormatVersionUsesIndexHandleInFooter(uint32_t version) { 15726: return version < 6; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: class Footer { 15726: public: 15726: 15726: Footer() {} 15726: 15726: 15726: 15726: 15726: 15726: 15726: Status DecodeFrom(Slice input, uint64_t input_offset, 15726: uint64_t enforce_table_magic_number = 0); 15726: 15726: 15726: 15726: uint64_t table_magic_number() const { return table_magic_number_; } 15726: 15726: 15726: 15726: 15726: uint32_t format_version() const { return format_version_; } 15726: 15726: 15726: uint32_t base_context_checksum() const { return base_context_checksum_; } 15726: 15726: 15726: const BlockHandle& metaindex_handle() const { return metaindex_handle_; } 15726: 15726: 15726: 15726: const BlockHandle& index_handle() const { return index_handle_; } 15726: 15726: 15726: ChecksumType checksum_type() const { 15726: return static_cast(checksum_type_); 15726: } 15726: 15726: 15726: 15726: 15726: inline size_t GetBlockTrailerSize() const { return block_trailer_size_; } 15726: 15726: 15726: std::string ToString() const; 15726: 15726: 15726: 15726: 15726: 15726: 15726: static constexpr uint32_t kVersion0EncodedLength = 15726: 2 * BlockHandle::kMaxEncodedLength + kMagicNumberLengthByte; 15726: static constexpr uint32_t kMinEncodedLength = kVersion0EncodedLength; 15726: 15726: 15726: 15726: 15726: 15726: static constexpr uint32_t kNewVersionsEncodedLength = 15726: 1 + 2 * BlockHandle::kMaxEncodedLength + 4 + kMagicNumberLengthByte; 15726: static constexpr uint32_t kMaxEncodedLength = kNewVersionsEncodedLength; 15726: 15726: static constexpr uint64_t kNullTableMagicNumber = 0; 15726: 15726: static constexpr uint32_t kInvalidFormatVersion = 0xffffffffU; 15726: 15726: private: 15726: static constexpr int kInvalidChecksumType = 15726: (1 << (sizeof(ChecksumType) * 8)) | kNoChecksum; 15726: 15726: uint64_t table_magic_number_ = kNullTableMagicNumber; 15726: uint32_t format_version_ = kInvalidFormatVersion; 15726: uint32_t base_context_checksum_ = 0; 15726: BlockHandle metaindex_handle_; 15726: BlockHandle index_handle_; 15726: int checksum_type_ = kInvalidChecksumType; 15726: uint8_t block_trailer_size_ = 0; 15726: }; 15726: 15726: 15726: class FooterBuilder { 15726: public: 15726: # 283 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 15726: Status Build(uint64_t table_magic_number, uint32_t format_version, 15726: uint64_t footer_offset, ChecksumType checksum_type, 15726: const BlockHandle& metaindex_handle, 15726: const BlockHandle& index_handle = BlockHandle::NullBlockHandle(), 15726: uint32_t base_context_checksum = 0); 15726: 15726: 15726: 15726: const Slice& GetSlice() const { 15726: 15726: # 292 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 3 4 15726: (static_cast ( 15726: # 292 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 15726: slice_.size() 15726: # 292 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 292 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 15726: "slice_.size()" 15726: # 292 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 292 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 15726: ; 15726: return slice_; 15726: } 15726: 15726: private: 15726: Slice slice_; 15726: std::array data_; 15726: }; 15726: 15726: 15726: 15726: 15726: Status ReadFooterFromFile(const IOOptions& opts, RandomAccessFileReader* file, 15726: FileSystem& fs, FilePrefetchBuffer* prefetch_buffer, 15726: uint64_t file_size, Footer* footer, 15726: uint64_t enforce_table_magic_number = 0); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: uint32_t ComputeBuiltinChecksum(ChecksumType type, const char* data, 15726: size_t size); 15726: uint32_t ComputeBuiltinChecksumWithLastByte(ChecksumType type, const char* data, 15726: size_t size, char last_byte); 15726: # 343 "/build/reproducible-path/rocksdb-9.3.1/table/format.h" 15726: struct BlockContents { 15726: 15726: Slice data; 15726: CacheAllocationPtr allocation; 15726: 15726: 15726: 15726: 15726: bool has_trailer = false; 15726: 15726: 15726: BlockContents() {} 15726: 15726: 15726: BlockContents(const Slice& _data) : data(_data) {} 15726: 15726: 15726: BlockContents(CacheAllocationPtr&& _data, size_t _size) 15726: : data(_data.get(), _size), allocation(std::move(_data)) {} 15726: 15726: 15726: BlockContents(std::unique_ptr&& _data, size_t _size) 15726: : data(_data.get(), _size) { 15726: allocation.reset(_data.release()); 15726: } 15726: 15726: 15726: bool own_bytes() const { return allocation.get() != nullptr; } 15726: 15726: 15726: size_t usable_size() const { 15726: if (allocation.get() != nullptr) { 15726: auto allocator = allocation.get_deleter().allocator; 15726: if (allocator) { 15726: return allocator->UsableSize(allocation.get(), data.size()); 15726: } 15726: 15726: return malloc_usable_size(allocation.get()); 15726: 15726: 15726: 15726: } else { 15726: return 0; 15726: } 15726: } 15726: 15726: size_t ApproximateMemoryUsage() const { 15726: return usable_size() + sizeof(*this); 15726: } 15726: 15726: BlockContents(BlockContents&& other) noexcept { *this = std::move(other); } 15726: 15726: BlockContents& operator=(BlockContents&& other) { 15726: data = std::move(other.data); 15726: allocation = std::move(other.allocation); 15726: 15726: has_trailer = other.has_trailer; 15726: 15726: return *this; 15726: } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: Status UncompressSerializedBlock(const UncompressionInfo& info, 15726: const char* data, size_t size, 15726: BlockContents* out_contents, 15726: uint32_t format_version, 15726: const ImmutableOptions& ioptions, 15726: MemoryAllocator* allocator = nullptr); 15726: 15726: 15726: 15726: Status UncompressBlockData(const UncompressionInfo& info, const char* data, 15726: size_t size, BlockContents* out_contents, 15726: uint32_t format_version, 15726: const ImmutableOptions& ioptions, 15726: MemoryAllocator* allocator = nullptr); 15726: 15726: 15726: Status ReifyDbHostIdProperty(Env* env, std::string* db_host_id); 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline BlockHandle::BlockHandle() : BlockHandle(~uint64_t{0}, ~uint64_t{0}) {} 15726: 15726: inline BlockHandle::BlockHandle(uint64_t _offset, uint64_t _size) 15726: : offset_(_offset), size_(_size) {} 15726: 15726: } 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: class PinnedIteratorsManager; 15726: 15726: enum class IterBoundCheck : char { 15726: kUnknown = 0, 15726: kOutOfBound, 15726: kInbound, 15726: }; 15726: 15726: struct IterateResult { 15726: Slice key; 15726: IterBoundCheck bound_check_result = IterBoundCheck::kUnknown; 15726: 15726: bool value_prepared = true; 15726: }; 15726: 15726: template 15726: class InternalIteratorBase : public Cleanable { 15726: public: 15726: InternalIteratorBase() {} 15726: 15726: 15726: InternalIteratorBase(const InternalIteratorBase&) = delete; 15726: InternalIteratorBase& operator=(const InternalIteratorBase&) = delete; 15726: 15726: virtual ~InternalIteratorBase() {} 15726: # 55 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 15726: virtual void SetRangeDelReadSeqno(SequenceNumber ) {} 15726: 15726: 15726: 15726: 15726: virtual bool Valid() const = 0; 15726: 15726: 15726: 15726: virtual void SeekToFirst() = 0; 15726: 15726: 15726: 15726: virtual void SeekToLast() = 0; 15726: # 77 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 15726: virtual void Seek(const Slice& target) = 0; 15726: 15726: 15726: 15726: 15726: virtual void SeekForPrev(const Slice& target) = 0; 15726: 15726: 15726: 15726: 15726: virtual void Next() = 0; 15726: 15726: 15726: 15726: 15726: 15726: virtual bool NextAndGetResult(IterateResult* result) { 15726: Next(); 15726: bool is_valid = Valid(); 15726: if (is_valid) { 15726: result->key = key(); 15726: 15726: 15726: 15726: result->bound_check_result = IterBoundCheck::kUnknown; 15726: result->value_prepared = false; 15726: 15726: # 103 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 3 4 15726: (static_cast ( 15726: # 103 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 15726: UpperBoundCheckResult() != IterBoundCheck::kOutOfBound 15726: # 103 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 103 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 15726: "UpperBoundCheckResult() != IterBoundCheck::kOutOfBound" 15726: # 103 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 103 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 15726: ; 15726: } 15726: return is_valid; 15726: } 15726: 15726: 15726: 15726: 15726: virtual void Prev() = 0; 15726: 15726: 15726: 15726: 15726: 15726: virtual Slice key() const = 0; 15726: 15726: 15726: 15726: 15726: 15726: virtual uint64_t write_unix_time() const { 15726: return std::numeric_limits::max(); 15726: } 15726: 15726: 15726: 15726: virtual Slice user_key() const { return ExtractUserKey(key()); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual TValue value() const = 0; 15726: 15726: 15726: 15726: 15726: virtual Status status() const = 0; 15726: # 154 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 15726: virtual bool PrepareValue() { return true; } 15726: 15726: 15726: virtual bool MayBeOutOfLowerBound() { return true; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual IterBoundCheck UpperBoundCheckResult() { 15726: return IterBoundCheck::kUnknown; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void SetPinnedItersMgr(PinnedIteratorsManager* ) { 15726: } 15726: # 184 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 15726: virtual bool IsKeyPinned() const { return false; } 15726: 15726: 15726: 15726: 15726: 15726: virtual bool IsValuePinned() const { return false; } 15726: 15726: virtual Status GetProperty(std::string , std::string* ) { 15726: return Status::NotSupported(""); 15726: } 15726: # 203 "/build/reproducible-path/rocksdb-9.3.1/table/internal_iterator.h" 15726: virtual void GetReadaheadState(ReadaheadFileInfo* ) {} 15726: 15726: 15726: virtual void SetReadaheadState(ReadaheadFileInfo* ) {} 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual bool IsDeleteRangeSentinelKey() const { return false; } 15726: 15726: protected: 15726: void SeekForPrevImpl(const Slice& target, const CompareInterface* cmp) { 15726: Seek(target); 15726: if (!Valid()) { 15726: SeekToLast(); 15726: } 15726: while (Valid() && cmp->Compare(target, key()) < 0) { 15726: Prev(); 15726: } 15726: } 15726: }; 15726: 15726: using InternalIterator = InternalIteratorBase; 15726: 15726: 15726: template 15726: InternalIteratorBase* NewEmptyInternalIterator(); 15726: 15726: 15726: template 15726: InternalIteratorBase* NewErrorInternalIterator(const Status& status); 15726: 15726: 15726: template 15726: InternalIteratorBase* NewErrorInternalIterator(const Status& status, 15726: Arena* arena); 15726: 15726: } 15726: # 13 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: class PinnedIteratorsManager : public Cleanable { 15726: public: 15726: PinnedIteratorsManager() : pinning_enabled(false) {} 15726: ~PinnedIteratorsManager() { 15726: if (pinning_enabled) { 15726: ReleasePinnedData(); 15726: } 15726: } 15726: 15726: 15726: PinnedIteratorsManager(PinnedIteratorsManager&& other) noexcept = default; 15726: PinnedIteratorsManager& operator=(PinnedIteratorsManager&& other) noexcept = 15726: default; 15726: 15726: 15726: void StartPinning() { 15726: 15726: # 35 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 3 4 15726: (static_cast ( 15726: # 35 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 15726: pinning_enabled == false 15726: # 35 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 35 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 15726: "pinning_enabled == false" 15726: # 35 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 35 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 15726: ; 15726: pinning_enabled = true; 15726: } 15726: 15726: 15726: bool PinningEnabled() { return pinning_enabled; } 15726: 15726: 15726: void PinIterator(InternalIterator* iter, bool arena = false) { 15726: if (arena) { 15726: PinPtr(iter, &PinnedIteratorsManager::ReleaseArenaInternalIterator); 15726: } else { 15726: PinPtr(iter, &PinnedIteratorsManager::ReleaseInternalIterator); 15726: } 15726: } 15726: 15726: using ReleaseFunction = void (*)(void* arg1); 15726: void PinPtr(void* ptr, ReleaseFunction release_func) { 15726: 15726: # 53 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 3 4 15726: (static_cast ( 15726: # 53 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 15726: pinning_enabled 15726: # 53 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 53 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 15726: "pinning_enabled" 15726: # 53 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 53 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 15726: ; 15726: if (ptr == nullptr) { 15726: return; 15726: } 15726: pinned_ptrs_.emplace_back(ptr, release_func); 15726: } 15726: 15726: 15726: inline void ReleasePinnedData() { 15726: 15726: # 62 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 3 4 15726: (static_cast ( 15726: # 62 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 15726: pinning_enabled == true 15726: # 62 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 62 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 15726: "pinning_enabled == true" 15726: # 62 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 62 "/build/reproducible-path/rocksdb-9.3.1/db/pinned_iterators_manager.h" 15726: ; 15726: pinning_enabled = false; 15726: 15726: 15726: std::sort(pinned_ptrs_.begin(), pinned_ptrs_.end()); 15726: auto unique_end = std::unique(pinned_ptrs_.begin(), pinned_ptrs_.end()); 15726: 15726: for (auto i = pinned_ptrs_.begin(); i != unique_end; ++i) { 15726: void* ptr = i->first; 15726: ReleaseFunction release_func = i->second; 15726: release_func(ptr); 15726: } 15726: pinned_ptrs_.clear(); 15726: 15726: Cleanable::Reset(); 15726: } 15726: 15726: private: 15726: static void ReleaseInternalIterator(void* ptr) { 15726: delete static_cast(ptr); 15726: } 15726: 15726: static void ReleaseArenaInternalIterator(void* ptr) { 15726: static_cast(ptr)->~InternalIterator(); 15726: } 15726: 15726: bool pinning_enabled; 15726: std::vector> pinned_ptrs_; 15726: }; 15726: 15726: } 15726: # 16 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 2 15726: 15726: 15726: 15726: namespace rocksdb { 15726: struct FragmentedRangeTombstoneList; 15726: 15726: struct FragmentedRangeTombstoneListCache { 15726: 15726: std::mutex reader_mutex; 15726: std::unique_ptr tombstones = nullptr; 15726: 15726: std::atomic initialized = false; 15726: }; 15726: 15726: struct FragmentedRangeTombstoneList { 15726: public: 15726: # 40 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 15726: struct RangeTombstoneStack { 15726: RangeTombstoneStack(const Slice& start, const Slice& end, size_t start_idx, 15726: size_t end_idx) 15726: : start_key(start), 15726: end_key(end), 15726: seq_start_idx(start_idx), 15726: seq_end_idx(end_idx) {} 15726: Slice start_key; 15726: Slice end_key; 15726: size_t seq_start_idx; 15726: size_t seq_end_idx; 15726: }; 15726: 15726: 15726: FragmentedRangeTombstoneList( 15726: std::unique_ptr unfragmented_tombstones, 15726: const InternalKeyComparator& icmp, bool for_compaction = false, 15726: const std::vector& snapshots = {}, 15726: const bool tombstone_end_include_ts = true); 15726: 15726: std::vector::const_iterator begin() const { 15726: return tombstones_.begin(); 15726: } 15726: 15726: std::vector::const_iterator end() const { 15726: return tombstones_.end(); 15726: } 15726: 15726: std::vector::const_iterator seq_iter(size_t idx) const { 15726: return std::next(tombstone_seqs_.begin(), idx); 15726: } 15726: 15726: std::vector::const_iterator ts_iter(size_t idx) const { 15726: return std::next(tombstone_timestamps_.begin(), idx); 15726: } 15726: 15726: std::vector::const_iterator seq_begin() const { 15726: return tombstone_seqs_.begin(); 15726: } 15726: 15726: std::vector::const_iterator seq_end() const { 15726: return tombstone_seqs_.end(); 15726: } 15726: 15726: bool empty() const { return tombstones_.empty(); } 15726: 15726: 15726: 15726: 15726: 15726: bool ContainsRange(SequenceNumber lower, SequenceNumber upper); 15726: 15726: uint64_t num_unfragmented_tombstones() const { 15726: return num_unfragmented_tombstones_; 15726: } 15726: 15726: uint64_t total_tombstone_payload_bytes() const { 15726: return total_tombstone_payload_bytes_; 15726: } 15726: 15726: private: 15726: # 111 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 15726: void FragmentTombstones( 15726: std::unique_ptr unfragmented_tombstones, 15726: const InternalKeyComparator& icmp, bool for_compaction, 15726: const std::vector& snapshots); 15726: 15726: std::vector tombstones_; 15726: std::vector tombstone_seqs_; 15726: std::vector tombstone_timestamps_; 15726: std::once_flag seq_set_init_once_flag_; 15726: std::set seq_set_; 15726: std::list pinned_slices_; 15726: PinnedIteratorsManager pinned_iters_mgr_; 15726: uint64_t num_unfragmented_tombstones_; 15726: uint64_t total_tombstone_payload_bytes_; 15726: }; 15726: # 136 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 15726: class FragmentedRangeTombstoneIterator : public InternalIterator { 15726: public: 15726: FragmentedRangeTombstoneIterator(FragmentedRangeTombstoneList* tombstones, 15726: const InternalKeyComparator& icmp, 15726: SequenceNumber upper_bound, 15726: const Slice* ts_upper_bound = nullptr, 15726: SequenceNumber lower_bound = 0); 15726: FragmentedRangeTombstoneIterator( 15726: const std::shared_ptr& tombstones, 15726: const InternalKeyComparator& icmp, SequenceNumber upper_bound, 15726: const Slice* ts_upper_bound = nullptr, SequenceNumber lower_bound = 0); 15726: FragmentedRangeTombstoneIterator( 15726: const std::shared_ptr& tombstones, 15726: const InternalKeyComparator& icmp, SequenceNumber upper_bound, 15726: const Slice* ts_upper_bound = nullptr, SequenceNumber lower_bound = 0); 15726: 15726: void SetRangeDelReadSeqno(SequenceNumber read_seqno) override { 15726: upper_bound_ = read_seqno; 15726: } 15726: 15726: void SeekToFirst() override; 15726: void SeekToLast() override; 15726: 15726: void SeekToTopFirst(); 15726: void SeekToTopLast(); 15726: # 170 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 15726: void Seek(const Slice& target) override; 15726: 15726: 15726: 15726: void SeekForPrev(const Slice& target) override; 15726: 15726: void Next() override; 15726: void Prev() override; 15726: 15726: void TopNext(); 15726: void TopPrev(); 15726: 15726: bool Valid() const override; 15726: 15726: 15726: Slice key() const override { 15726: MaybePinKey(); 15726: return current_start_key_.Encode(); 15726: } 15726: Slice value() const override { return pos_->end_key; } 15726: bool IsKeyPinned() const override { return false; } 15726: bool IsValuePinned() const override { return true; } 15726: Status status() const override { return Status::OK(); } 15726: 15726: bool empty() const { return tombstones_->empty(); } 15726: void Invalidate() { 15726: pos_ = tombstones_->end(); 15726: seq_pos_ = tombstones_->seq_end(); 15726: pinned_pos_ = tombstones_->end(); 15726: pinned_seq_pos_ = tombstones_->seq_end(); 15726: } 15726: 15726: RangeTombstone Tombstone(bool logical_strip_timestamp = false) const { 15726: 15726: # 203 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 3 4 15726: (static_cast ( 15726: # 203 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 15726: Valid() 15726: # 203 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 203 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 15726: "Valid()" 15726: # 203 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 203 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 15726: ; 15726: if (icmp_->user_comparator()->timestamp_size()) { 15726: return RangeTombstone(start_key(), end_key(), seq(), timestamp(), 15726: logical_strip_timestamp); 15726: } 15726: return RangeTombstone(start_key(), end_key(), seq()); 15726: } 15726: 15726: 15726: 15726: 15726: Slice start_key() const { return pos_->start_key; } 15726: Slice end_key() const { return pos_->end_key; } 15726: SequenceNumber seq() const { return *seq_pos_; } 15726: Slice timestamp() const { 15726: 15726: return *tombstones_->ts_iter(seq_pos_ - tombstones_->seq_begin()); 15726: } 15726: 15726: 15726: void SetTimestampUpperBound(const Slice* ts_upper_bound) { 15726: ts_upper_bound_ = ts_upper_bound; 15726: } 15726: 15726: ParsedInternalKey parsed_start_key() const { 15726: return ParsedInternalKey(pos_->start_key, seq(), kTypeRangeDeletion); 15726: } 15726: ParsedInternalKey parsed_end_key() const { 15726: return ParsedInternalKey(pos_->end_key, kMaxSequenceNumber, 15726: kTypeRangeDeletion); 15726: } 15726: 15726: 15726: 15726: 15726: SequenceNumber MaxCoveringTombstoneSeqnum(const Slice& user_key); 15726: # 249 "/build/reproducible-path/rocksdb-9.3.1/db/range_tombstone_fragmenter.h" 15726: std::map> 15726: SplitBySnapshot(const std::vector& snapshots); 15726: 15726: SequenceNumber upper_bound() const { return upper_bound_; } 15726: SequenceNumber lower_bound() const { return lower_bound_; } 15726: 15726: uint64_t num_unfragmented_tombstones() const { 15726: return tombstones_->num_unfragmented_tombstones(); 15726: } 15726: uint64_t total_tombstone_payload_bytes() const { 15726: return tombstones_->total_tombstone_payload_bytes(); 15726: } 15726: 15726: private: 15726: using RangeTombstoneStack = FragmentedRangeTombstoneList::RangeTombstoneStack; 15726: 15726: struct RangeTombstoneStackStartComparator { 15726: explicit RangeTombstoneStackStartComparator(const Comparator* c) : cmp(c) {} 15726: 15726: bool operator()(const RangeTombstoneStack& a, 15726: const RangeTombstoneStack& b) const { 15726: return cmp->CompareWithoutTimestamp(a.start_key, b.start_key) < 0; 15726: } 15726: 15726: bool operator()(const RangeTombstoneStack& a, const Slice& b) const { 15726: return cmp->CompareWithoutTimestamp(a.start_key, b) < 0; 15726: } 15726: 15726: bool operator()(const Slice& a, const RangeTombstoneStack& b) const { 15726: return cmp->CompareWithoutTimestamp(a, b.start_key) < 0; 15726: } 15726: 15726: const Comparator* cmp; 15726: }; 15726: 15726: struct RangeTombstoneStackEndComparator { 15726: explicit RangeTombstoneStackEndComparator(const Comparator* c) : cmp(c) {} 15726: 15726: bool operator()(const RangeTombstoneStack& a, 15726: const RangeTombstoneStack& b) const { 15726: return cmp->CompareWithoutTimestamp(a.end_key, b.end_key) < 0; 15726: } 15726: 15726: bool operator()(const RangeTombstoneStack& a, const Slice& b) const { 15726: return cmp->CompareWithoutTimestamp(a.end_key, b) < 0; 15726: } 15726: 15726: bool operator()(const Slice& a, const RangeTombstoneStack& b) const { 15726: return cmp->CompareWithoutTimestamp(a, b.end_key) < 0; 15726: } 15726: 15726: const Comparator* cmp; 15726: }; 15726: 15726: void MaybePinKey() const { 15726: if (pos_ != tombstones_->end() && seq_pos_ != tombstones_->seq_end() && 15726: (pinned_pos_ != pos_ || pinned_seq_pos_ != seq_pos_)) { 15726: current_start_key_.Set(pos_->start_key, *seq_pos_, kTypeRangeDeletion); 15726: pinned_pos_ = pos_; 15726: pinned_seq_pos_ = seq_pos_; 15726: } 15726: } 15726: 15726: void SeekToCoveringTombstone(const Slice& key); 15726: void SeekForPrevToCoveringTombstone(const Slice& key); 15726: void ScanForwardToVisibleTombstone(); 15726: void ScanBackwardToVisibleTombstone(); 15726: bool ValidPos() const { 15726: return Valid() && seq_pos_ != tombstones_->seq_iter(pos_->seq_end_idx); 15726: } 15726: 15726: const RangeTombstoneStackStartComparator tombstone_start_cmp_; 15726: const RangeTombstoneStackEndComparator tombstone_end_cmp_; 15726: const InternalKeyComparator* icmp_; 15726: const Comparator* ucmp_; 15726: std::shared_ptr tombstones_ref_; 15726: std::shared_ptr tombstones_cache_ref_; 15726: FragmentedRangeTombstoneList* tombstones_; 15726: SequenceNumber upper_bound_; 15726: SequenceNumber lower_bound_; 15726: 15726: const Slice* ts_upper_bound_; 15726: std::vector::const_iterator pos_; 15726: std::vector::const_iterator seq_pos_; 15726: mutable std::vector::const_iterator pinned_pos_; 15726: mutable std::vector::const_iterator pinned_seq_pos_; 15726: mutable InternalKey current_start_key_; 15726: 15726: 15726: 15726: 15726: 15726: void SetMaxVisibleSeqAndTimestamp() { 15726: seq_pos_ = std::lower_bound(tombstones_->seq_iter(pos_->seq_start_idx), 15726: tombstones_->seq_iter(pos_->seq_end_idx), 15726: upper_bound_, std::greater()); 15726: if (ts_upper_bound_ && !ts_upper_bound_->empty()) { 15726: auto ts_pos = std::lower_bound( 15726: tombstones_->ts_iter(pos_->seq_start_idx), 15726: tombstones_->ts_iter(pos_->seq_end_idx), *ts_upper_bound_, 15726: [this](const Slice& s1, const Slice& s2) { 15726: return ucmp_->CompareTimestamp(s1, s2) > 0; 15726: }); 15726: auto ts_idx = ts_pos - tombstones_->ts_iter(pos_->seq_start_idx); 15726: auto seq_idx = seq_pos_ - tombstones_->seq_iter(pos_->seq_start_idx); 15726: if (seq_idx < ts_idx) { 15726: 15726: 15726: seq_pos_ = tombstones_->seq_iter(pos_->seq_start_idx + ts_idx); 15726: } 15726: } 15726: } 15726: }; 15726: 15726: } 15726: # 22 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class ReadCallback { 15726: public: 15726: explicit ReadCallback(SequenceNumber last_visible_seq) 15726: : max_visible_seq_(last_visible_seq) {} 15726: ReadCallback(SequenceNumber last_visible_seq, SequenceNumber min_uncommitted) 15726: : max_visible_seq_(last_visible_seq), min_uncommitted_(min_uncommitted) {} 15726: 15726: virtual ~ReadCallback() {} 15726: 15726: 15726: 15726: virtual bool IsVisibleFullCheck(SequenceNumber seq) = 0; 15726: 15726: inline bool IsVisible(SequenceNumber seq) { 15726: 15726: # 27 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 15726: (static_cast ( 15726: # 27 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 15726: min_uncommitted_ > 0 15726: # 27 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 27 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 15726: "min_uncommitted_ > 0" 15726: # 27 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 27 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 15726: ; 15726: 15726: # 28 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 15726: (static_cast ( 15726: # 28 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 15726: min_uncommitted_ >= kMinUnCommittedSeq 15726: # 28 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 28 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 15726: "min_uncommitted_ >= kMinUnCommittedSeq" 15726: # 28 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 28 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 15726: ; 15726: if (seq < min_uncommitted_) { 15726: 15726: # 30 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 15726: (static_cast ( 15726: # 30 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 15726: seq <= max_visible_seq_ 15726: # 30 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 30 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 15726: "seq <= max_visible_seq_" 15726: # 30 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 30 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 15726: ; 15726: return true; 15726: } else if (max_visible_seq_ < seq) { 15726: 15726: # 33 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 15726: (static_cast ( 15726: # 33 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 15726: seq != 0 15726: # 33 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 33 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 15726: "seq != 0" 15726: # 33 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 33 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 15726: ; 15726: return false; 15726: } else { 15726: 15726: # 36 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 15726: (static_cast ( 15726: # 36 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 15726: seq != 0 15726: # 36 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 36 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 15726: "seq != 0" 15726: # 36 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 36 "/build/reproducible-path/rocksdb-9.3.1/db/read_callback.h" 15726: ; 15726: return IsVisibleFullCheck(seq); 15726: } 15726: } 15726: 15726: inline SequenceNumber max_visible_seq() { return max_visible_seq_; } 15726: 15726: 15726: virtual void Refresh(SequenceNumber seq) { max_visible_seq_ = seq; } 15726: 15726: protected: 15726: 15726: 15726: SequenceNumber max_visible_seq_ = kMaxSequenceNumber; 15726: 15726: const SequenceNumber min_uncommitted_ = kMinUnCommittedSeq; 15726: }; 15726: 15726: } 15726: # 23 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/cinttypes" 1 3 15726: # 32 "/usr/include/c++/13/cinttypes" 3 15726: 15726: # 33 "/usr/include/c++/13/cinttypes" 3 15726: # 46 "/usr/include/c++/13/cinttypes" 3 15726: # 1 "/usr/include/inttypes.h" 1 3 4 15726: # 327 "/usr/include/inttypes.h" 3 4 15726: 15726: # 327 "/usr/include/inttypes.h" 3 4 15726: extern "C" { 15726: # 341 "/usr/include/inttypes.h" 3 4 15726: typedef struct 15726: { 15726: __extension__ long long int quot; 15726: __extension__ long long int rem; 15726: } imaxdiv_t; 15726: 15726: 15726: 15726: 15726: 15726: extern intmax_t imaxabs (intmax_t __n) noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern imaxdiv_t imaxdiv (intmax_t __numer, intmax_t __denom) 15726: noexcept (true) __attribute__ ((__const__)); 15726: 15726: 15726: extern intmax_t strtoimax (const char *__restrict __nptr, 15726: char **__restrict __endptr, int __base) noexcept (true); 15726: 15726: 15726: extern uintmax_t strtoumax (const char *__restrict __nptr, 15726: char ** __restrict __endptr, int __base) noexcept (true); 15726: 15726: 15726: extern intmax_t wcstoimax (const wchar_t *__restrict __nptr, 15726: wchar_t **__restrict __endptr, int __base) 15726: noexcept (true); 15726: 15726: 15726: extern uintmax_t wcstoumax (const wchar_t *__restrict __nptr, 15726: wchar_t ** __restrict __endptr, int __base) 15726: noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: extern intmax_t strtoimax (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoimax") 15726: 15726: ; 15726: extern uintmax_t strtoumax (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoumax") 15726: 15726: ; 15726: extern intmax_t wcstoimax (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_wcstoimax") 15726: 15726: 15726: ; 15726: extern uintmax_t wcstoumax (const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_wcstoumax") 15726: 15726: 15726: ; 15726: # 415 "/usr/include/inttypes.h" 3 4 15726: } 15726: # 47 "/usr/include/c++/13/cinttypes" 2 3 15726: # 55 "/usr/include/c++/13/cinttypes" 3 15726: namespace std 15726: { 15726: 15726: using ::imaxdiv_t; 15726: 15726: 15726: using ::imaxabs; 15726: using ::imaxdiv; 15726: 15726: 15726: 15726: 15726: 15726: using ::strtoimax; 15726: using ::strtoumax; 15726: 15726: 15726: using ::wcstoimax; 15726: using ::wcstoumax; 15726: 15726: } 15726: # 11 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 2 15726: # 21 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 15726: 15726: # 21 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 15726: namespace rocksdb { 15726: 15726: constexpr uint64_t kUnknownTimeBeforeAll = 0; 15726: constexpr SequenceNumber kUnknownSeqnoBeforeAll = 0; 15726: 15726: 15726: 15726: constexpr uint64_t kMaxSeqnoTimePairsPerSST = 100; 15726: # 38 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 15726: constexpr uint64_t kMaxSeqnoTimePairsPerCF = 100; 15726: 15726: constexpr uint64_t kMaxSeqnoToTimeEntries = kMaxSeqnoTimePairsPerCF * 10; 15726: # 68 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 15726: class SeqnoToTimeMapping { 15726: public: 15726: 15726: struct SeqnoTimePair { 15726: SequenceNumber seqno = 0; 15726: uint64_t time = 0; 15726: 15726: SeqnoTimePair() = default; 15726: SeqnoTimePair(SequenceNumber _seqno, uint64_t _time) 15726: : seqno(_seqno), time(_time) {} 15726: 15726: 15726: void Encode(std::string& dest) const; 15726: 15726: 15726: Status Decode(Slice& input); 15726: 15726: 15726: SeqnoTimePair ComputeDelta(const SeqnoTimePair& base) const { 15726: return {seqno - base.seqno, time - base.time}; 15726: } 15726: 15726: 15726: void ApplyDelta(const SeqnoTimePair& delta_or_base) { 15726: seqno += delta_or_base.seqno; 15726: time += delta_or_base.time; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: bool Merge(const SeqnoTimePair& other); 15726: 15726: 15726: bool operator<(const SeqnoTimePair& other) const { 15726: return std::tie(seqno, time) < std::tie(other.seqno, other.time); 15726: } 15726: 15726: bool operator==(const SeqnoTimePair& other) const { 15726: return std::tie(seqno, time) == std::tie(other.seqno, other.time); 15726: } 15726: 15726: static bool SeqnoLess(const SeqnoTimePair& a, const SeqnoTimePair& b) { 15726: return a.seqno < b.seqno; 15726: } 15726: 15726: static bool TimeLess(const SeqnoTimePair& a, const SeqnoTimePair& b) { 15726: return a.time < b.time; 15726: } 15726: }; 15726: 15726: 15726: SeqnoToTimeMapping() {} 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: SeqnoToTimeMapping& SetMaxTimeSpan(uint64_t max_time_span); 15726: 15726: 15726: 15726: 15726: 15726: SeqnoToTimeMapping& SetCapacity(uint64_t capacity); 15726: 15726: 15726: 15726: 15726: 15726: bool PrePopulate(SequenceNumber from_seqno, SequenceNumber to_seqno, 15726: uint64_t from_time, uint64_t to_time); 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool Append(SequenceNumber seqno, uint64_t time); 15726: 15726: 15726: 15726: void Clear() { 15726: pairs_.clear(); 15726: enforced_ = true; 15726: } 15726: # 166 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 15726: SeqnoToTimeMapping& Enforce(uint64_t now = 0); 15726: 15726: 15726: 15726: 15726: void AddUnenforced(SequenceNumber seqno, uint64_t time); 15726: 15726: 15726: 15726: 15726: Status DecodeFrom(const std::string& pairs_str); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void CopyFromSeqnoRange(const SeqnoToTimeMapping& src, 15726: SequenceNumber from_seqno, 15726: SequenceNumber to_seqno = kMaxSequenceNumber); 15726: void CopyFrom(const SeqnoToTimeMapping& src) { 15726: CopyFromSeqnoRange(src, kUnknownSeqnoBeforeAll, kMaxSequenceNumber); 15726: } 15726: # 202 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 15726: uint64_t GetProximalTimeBeforeSeqno(SequenceNumber seqno) const; 15726: # 214 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 15726: SequenceNumber GetProximalSeqnoBeforeTime(uint64_t time) const; 15726: 15726: 15726: 15726: 15726: void EncodeTo(std::string& dest) const; 15726: 15726: 15726: size_t Size() const { return pairs_.size(); } 15726: 15726: uint64_t GetCapacity() const { return capacity_; } 15726: 15726: 15726: bool Empty() const { return pairs_.empty(); } 15726: 15726: 15726: 15726: std::string ToHumanString() const; 15726: 15726: 15726: const SeqnoTimePair& TEST_GetLastEntry() const { return pairs_.back(); } 15726: const std::deque& TEST_GetInternalMapping() const { 15726: return pairs_; 15726: } 15726: bool TEST_IsEnforced() const { return enforced_; } 15726: 15726: 15726: private: 15726: uint64_t max_time_span_ = 15726: # 242 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 3 4 15726: (18446744073709551615ULL) 15726: # 242 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 15726: ; 15726: uint64_t capacity_ = 15726: # 243 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 3 4 15726: (18446744073709551615ULL) 15726: # 243 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 15726: ; 15726: 15726: std::deque pairs_; 15726: # 255 "/build/reproducible-path/rocksdb-9.3.1/db/seqno_to_time_mapping.h" 15726: bool enforced_ = true; 15726: 15726: void EnforceMaxTimeSpan(uint64_t now = 0); 15726: void EnforceCapacity(bool strict); 15726: void SortAndMerge(); 15726: 15726: using pair_const_iterator = 15726: std::deque::const_iterator; 15726: pair_const_iterator FindGreaterTime(uint64_t time) const; 15726: pair_const_iterator FindGreaterSeqno(SequenceNumber seqno) const; 15726: pair_const_iterator FindGreaterEqSeqno(SequenceNumber seqno) const; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: Slice PackValueAndWriteTime(const Slice& value, uint64_t unix_write_time, 15726: std::string* buf); 15726: 15726: 15726: 15726: Slice PackValueAndSeqno(const Slice& value, SequenceNumber seqno, 15726: std::string* buf); 15726: 15726: 15726: uint64_t ParsePackedValueForWriteTime(const Slice& value); 15726: 15726: 15726: 15726: std::tuple ParsePackedValueWithWriteTime(const Slice& value); 15726: 15726: 15726: SequenceNumber ParsePackedValueForSeqno(const Slice& value); 15726: 15726: 15726: 15726: std::tuple ParsePackedValueWithSeqno(const Slice& value); 15726: 15726: 15726: 15726: Slice ParsePackedValueForValue(const Slice& value); 15726: 15726: } 15726: # 24 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/cassert" 1 3 15726: # 41 "/usr/include/c++/13/cassert" 3 15726: 15726: # 42 "/usr/include/c++/13/cassert" 3 15726: 15726: 15726: # 1 "/usr/include/assert.h" 1 3 4 15726: # 45 "/usr/include/c++/13/cassert" 2 3 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.h" 2 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_constants.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: constexpr uint64_t kInvalidBlobFileNumber = 0; 15726: 15726: } 15726: # 14 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.h" 2 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class JSONWriter; 15726: class Slice; 15726: class Status; 15726: 15726: class BlobFileAddition { 15726: public: 15726: BlobFileAddition() = default; 15726: 15726: BlobFileAddition(uint64_t blob_file_number, uint64_t total_blob_count, 15726: uint64_t total_blob_bytes, std::string checksum_method, 15726: std::string checksum_value) 15726: : blob_file_number_(blob_file_number), 15726: total_blob_count_(total_blob_count), 15726: total_blob_bytes_(total_blob_bytes), 15726: checksum_method_(std::move(checksum_method)), 15726: checksum_value_(std::move(checksum_value)) { 15726: 15726: # 34 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.h" 3 4 15726: (static_cast ( 15726: # 34 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.h" 15726: checksum_method_.empty() == checksum_value_.empty() 15726: # 34 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 34 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.h" 15726: "checksum_method_.empty() == checksum_value_.empty()" 15726: # 34 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 34 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_addition.h" 15726: ; 15726: } 15726: 15726: uint64_t GetBlobFileNumber() const { return blob_file_number_; } 15726: uint64_t GetTotalBlobCount() const { return total_blob_count_; } 15726: uint64_t GetTotalBlobBytes() const { return total_blob_bytes_; } 15726: const std::string& GetChecksumMethod() const { return checksum_method_; } 15726: const std::string& GetChecksumValue() const { return checksum_value_; } 15726: 15726: void EncodeTo(std::string* output) const; 15726: Status DecodeFrom(Slice* input); 15726: 15726: std::string DebugString() const; 15726: std::string DebugJSON() const; 15726: 15726: private: 15726: enum CustomFieldTags : uint32_t; 15726: 15726: uint64_t blob_file_number_ = kInvalidBlobFileNumber; 15726: uint64_t total_blob_count_ = 0; 15726: uint64_t total_blob_bytes_ = 0; 15726: std::string checksum_method_; 15726: std::string checksum_value_; 15726: }; 15726: 15726: bool operator==(const BlobFileAddition& lhs, const BlobFileAddition& rhs); 15726: bool operator!=(const BlobFileAddition& lhs, const BlobFileAddition& rhs); 15726: 15726: std::ostream& operator<<(std::ostream& os, 15726: const BlobFileAddition& blob_file_addition); 15726: JSONWriter& operator<<(JSONWriter& jw, 15726: const BlobFileAddition& blob_file_addition); 15726: 15726: } 15726: # 19 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_garbage.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 15 "/build/reproducible-path/rocksdb-9.3.1/db/blob/blob_file_garbage.h" 15726: namespace rocksdb { 15726: 15726: class JSONWriter; 15726: class Slice; 15726: class Status; 15726: 15726: class BlobFileGarbage { 15726: public: 15726: BlobFileGarbage() = default; 15726: 15726: BlobFileGarbage(uint64_t blob_file_number, uint64_t garbage_blob_count, 15726: uint64_t garbage_blob_bytes) 15726: : blob_file_number_(blob_file_number), 15726: garbage_blob_count_(garbage_blob_count), 15726: garbage_blob_bytes_(garbage_blob_bytes) {} 15726: 15726: uint64_t GetBlobFileNumber() const { return blob_file_number_; } 15726: uint64_t GetGarbageBlobCount() const { return garbage_blob_count_; } 15726: uint64_t GetGarbageBlobBytes() const { return garbage_blob_bytes_; } 15726: 15726: void EncodeTo(std::string* output) const; 15726: Status DecodeFrom(Slice* input); 15726: 15726: std::string DebugString() const; 15726: std::string DebugJSON() const; 15726: 15726: private: 15726: enum CustomFieldTags : uint32_t; 15726: 15726: uint64_t blob_file_number_ = kInvalidBlobFileNumber; 15726: uint64_t garbage_blob_count_ = 0; 15726: uint64_t garbage_blob_bytes_ = 0; 15726: }; 15726: 15726: bool operator==(const BlobFileGarbage& lhs, const BlobFileGarbage& rhs); 15726: bool operator!=(const BlobFileGarbage& lhs, const BlobFileGarbage& rhs); 15726: 15726: std::ostream& operator<<(std::ostream& os, 15726: const BlobFileGarbage& blob_file_garbage); 15726: JSONWriter& operator<<(JSONWriter& jw, 15726: const BlobFileGarbage& blob_file_garbage); 15726: 15726: } 15726: # 20 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/wal_edit.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/db/wal_edit.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/logging/log_buffer.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/ctime" 1 3 15726: # 39 "/usr/include/c++/13/ctime" 3 15726: 15726: # 40 "/usr/include/c++/13/ctime" 3 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/logging/log_buffer.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 1 15726: # 14 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/memory/allocator.h" 1 15726: # 13 "/build/reproducible-path/rocksdb-9.3.1/memory/allocator.h" 15726: 15726: # 1 "/usr/include/c++/13/cerrno" 1 3 15726: # 39 "/usr/include/c++/13/cerrno" 3 15726: 15726: # 40 "/usr/include/c++/13/cerrno" 3 15726: # 15 "/build/reproducible-path/rocksdb-9.3.1/memory/allocator.h" 2 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class Logger; 15726: 15726: class Allocator { 15726: public: 15726: virtual ~Allocator() {} 15726: 15726: virtual char* Allocate(size_t bytes) = 0; 15726: virtual char* AllocateAligned(size_t bytes, size_t huge_page_size = 0, 15726: Logger* logger = nullptr) = 0; 15726: 15726: virtual size_t BlockSize() const = 0; 15726: }; 15726: 15726: class AllocTracker { 15726: public: 15726: explicit AllocTracker(WriteBufferManager* write_buffer_manager); 15726: 15726: AllocTracker(const AllocTracker&) = delete; 15726: void operator=(const AllocTracker&) = delete; 15726: 15726: ~AllocTracker(); 15726: void Allocate(size_t bytes); 15726: 15726: 15726: void DoneAllocating(); 15726: 15726: void FreeMem(); 15726: 15726: bool is_freed() const { return write_buffer_manager_ == nullptr || freed_; } 15726: 15726: private: 15726: WriteBufferManager* write_buffer_manager_; 15726: std::atomic bytes_allocated_; 15726: bool done_allocating_; 15726: bool freed_; 15726: }; 15726: 15726: } 15726: # 20 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/port/mmap.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/sys/mman.h" 1 3 4 15726: # 25 "/usr/include/arm-linux-gnueabihf/sys/mman.h" 3 4 15726: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/13/include/stddef.h" 1 3 4 15726: # 26 "/usr/include/arm-linux-gnueabihf/sys/mman.h" 2 3 4 15726: # 41 "/usr/include/arm-linux-gnueabihf/sys/mman.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mman.h" 1 3 4 15726: # 29 "/usr/include/arm-linux-gnueabihf/bits/mman.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mman-map-flags-generic.h" 1 3 4 15726: # 30 "/usr/include/arm-linux-gnueabihf/bits/mman.h" 2 3 4 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mman-linux.h" 1 3 4 15726: # 116 "/usr/include/arm-linux-gnueabihf/bits/mman-linux.h" 3 4 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mman-shared.h" 1 3 4 15726: # 51 "/usr/include/arm-linux-gnueabihf/bits/mman-shared.h" 3 4 15726: 15726: # 51 "/usr/include/arm-linux-gnueabihf/bits/mman-shared.h" 3 4 15726: extern "C" { 15726: 15726: 15726: 15726: int memfd_create (const char *__name, unsigned int __flags) noexcept (true); 15726: 15726: 15726: 15726: int mlock2 (const void *__addr, size_t __length, unsigned int __flags) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: int pkey_alloc (unsigned int __flags, unsigned int __access_rights) noexcept (true); 15726: 15726: 15726: 15726: int pkey_set (int __key, unsigned int __access_rights) noexcept (true); 15726: 15726: 15726: 15726: int pkey_get (int __key) noexcept (true); 15726: 15726: 15726: 15726: int pkey_free (int __key) noexcept (true); 15726: 15726: 15726: 15726: int pkey_mprotect (void *__addr, size_t __len, int __prot, int __pkey) noexcept (true); 15726: 15726: } 15726: # 117 "/usr/include/arm-linux-gnueabihf/bits/mman-linux.h" 2 3 4 15726: # 33 "/usr/include/arm-linux-gnueabihf/bits/mman.h" 2 3 4 15726: # 42 "/usr/include/arm-linux-gnueabihf/sys/mman.h" 2 3 4 15726: 15726: 15726: 15726: 15726: extern "C" { 15726: # 61 "/usr/include/arm-linux-gnueabihf/sys/mman.h" 3 4 15726: extern void * mmap (void *__addr, size_t __len, int __prot, int __flags, int __fd, __off64_t __offset) noexcept (true) __asm__ ("" "mmap64") 15726: 15726: 15726: ; 15726: 15726: 15726: 15726: 15726: 15726: extern void *mmap64 (void *__addr, size_t __len, int __prot, 15726: int __flags, int __fd, __off64_t __offset) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int munmap (void *__addr, size_t __len) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int mprotect (void *__addr, size_t __len, int __prot) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int msync (void *__addr, size_t __len, int __flags); 15726: 15726: 15726: 15726: 15726: extern int madvise (void *__addr, size_t __len, int __advice) noexcept (true); 15726: 15726: 15726: 15726: extern int posix_madvise (void *__addr, size_t __len, int __advice) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int mlock (const void *__addr, size_t __len) noexcept (true); 15726: 15726: 15726: extern int munlock (const void *__addr, size_t __len) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int mlockall (int __flags) noexcept (true); 15726: 15726: 15726: 15726: extern int munlockall (void) noexcept (true); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: extern int mincore (void *__start, size_t __len, unsigned char *__vec) 15726: noexcept (true); 15726: # 133 "/usr/include/arm-linux-gnueabihf/sys/mman.h" 3 4 15726: extern void *mremap (void *__addr, size_t __old_len, size_t __new_len, 15726: int __flags, ...) noexcept (true); 15726: 15726: 15726: 15726: extern int remap_file_pages (void *__start, size_t __size, int __prot, 15726: size_t __pgoff, int __flags) noexcept (true); 15726: 15726: 15726: 15726: 15726: extern int shm_open (const char *__name, int __oflag, mode_t __mode); 15726: 15726: 15726: extern int shm_unlink (const char *__name); 15726: 15726: 15726: # 1 "/usr/include/arm-linux-gnueabihf/bits/mman_ext.h" 1 3 4 15726: # 24 "/usr/include/arm-linux-gnueabihf/bits/mman_ext.h" 3 4 15726: struct iovec; 15726: extern __ssize_t process_madvise (int __pid_fd, const struct iovec *__iov, 15726: size_t __count, int __advice, 15726: unsigned __flags) 15726: noexcept (true); 15726: 15726: extern int process_mrelease (int pidfd, unsigned int flags) noexcept (true); 15726: # 151 "/usr/include/arm-linux-gnueabihf/sys/mman.h" 2 3 4 15726: 15726: } 15726: # 14 "/build/reproducible-path/rocksdb-9.3.1/port/mmap.h" 2 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 21 "/build/reproducible-path/rocksdb-9.3.1/port/mmap.h" 15726: namespace rocksdb { 15726: 15726: 15726: class MemMapping { 15726: public: 15726: static constexpr bool kHugePageSupported = 15726: 15726: true; 15726: 15726: 15726: 15726: 15726: 15726: static MemMapping AllocateHuge(size_t length); 15726: 15726: 15726: 15726: 15726: 15726: 15726: static MemMapping AllocateLazyZeroed(size_t length); 15726: 15726: 15726: MemMapping(const MemMapping&) = delete; 15726: MemMapping& operator=(const MemMapping&) = delete; 15726: 15726: MemMapping(MemMapping&&) noexcept; 15726: MemMapping& operator=(MemMapping&&) noexcept; 15726: 15726: 15726: ~MemMapping(); 15726: 15726: inline void* Get() const { return addr_; } 15726: inline size_t Length() const { return length_; } 15726: 15726: private: 15726: MemMapping() {} 15726: 15726: 15726: void* addr_ = nullptr; 15726: 15726: size_t length_ = 0; 15726: 15726: 15726: 15726: 15726: 15726: static MemMapping AllocateAnonymous(size_t length, bool huge); 15726: }; 15726: 15726: 15726: 15726: 15726: template 15726: class TypedMemMapping : public MemMapping { 15726: public: 15726: TypedMemMapping(MemMapping&& v) noexcept 15726: : MemMapping(std::move(v)) {} 15726: TypedMemMapping& operator=(MemMapping&& v) noexcept { 15726: MemMapping& base = *this; 15726: base = std::move(v); 15726: } 15726: 15726: inline T* Get() const { return static_cast(MemMapping::Get()); } 15726: inline size_t Count() const { return MemMapping::Length() / sizeof(T); } 15726: 15726: inline T& operator[](size_t index) const { return Get()[index]; } 15726: }; 15726: 15726: } 15726: # 21 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 2 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class Arena : public Allocator { 15726: public: 15726: 15726: Arena(const Arena&) = delete; 15726: void operator=(const Arena&) = delete; 15726: 15726: static constexpr size_t kInlineSize = 2048; 15726: static constexpr size_t kMinBlockSize = 4096; 15726: static constexpr size_t kMaxBlockSize = 2u << 30; 15726: 15726: static constexpr unsigned kAlignUnit = alignof(std::max_align_t); 15726: static_assert((kAlignUnit & (kAlignUnit - 1)) == 0, 15726: "Pointer size should be power of 2"); 15726: 15726: 15726: 15726: 15726: explicit Arena(size_t block_size = kMinBlockSize, 15726: AllocTracker* tracker = nullptr, size_t huge_page_size = 0); 15726: ~Arena(); 15726: 15726: char* Allocate(size_t bytes) override; 15726: # 60 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 15726: char* AllocateAligned(size_t bytes, size_t huge_page_size = 0, 15726: Logger* logger = nullptr) override; 15726: 15726: 15726: 15726: 15726: size_t ApproximateMemoryUsage() const { 15726: return blocks_memory_ + blocks_.size() * sizeof(char*) - 15726: alloc_bytes_remaining_; 15726: } 15726: 15726: size_t MemoryAllocatedBytes() const { return blocks_memory_; } 15726: 15726: size_t AllocatedAndUnused() const { return alloc_bytes_remaining_; } 15726: 15726: 15726: 15726: size_t IrregularBlockNum() const { return irregular_block_num; } 15726: 15726: size_t BlockSize() const override { return kBlockSize; } 15726: 15726: bool IsInInlineBlock() const { 15726: return blocks_.empty() && huge_blocks_.empty(); 15726: } 15726: 15726: 15726: 15726: 15726: static size_t OptimizeBlockSize(size_t block_size); 15726: 15726: private: 15726: alignas(std::max_align_t) char inline_block_[kInlineSize]; 15726: 15726: const size_t kBlockSize; 15726: 15726: std::deque> blocks_; 15726: 15726: std::deque huge_blocks_; 15726: size_t irregular_block_num = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: char* unaligned_alloc_ptr_ = nullptr; 15726: char* aligned_alloc_ptr_ = nullptr; 15726: 15726: size_t alloc_bytes_remaining_ = 0; 15726: 15726: size_t hugetlb_size_ = 0; 15726: 15726: char* AllocateFromHugePage(size_t bytes); 15726: char* AllocateFallback(size_t bytes, bool aligned); 15726: char* AllocateNewBlock(size_t block_bytes); 15726: 15726: 15726: size_t blocks_memory_ = 0; 15726: 15726: AllocTracker* tracker_; 15726: }; 15726: 15726: inline char* Arena::Allocate(size_t bytes) { 15726: 15726: 15726: 15726: 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 3 4 15726: (static_cast ( 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 15726: bytes > 0 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 15726: "bytes > 0" 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/memory/arena.h" 15726: ; 15726: if (bytes <= alloc_bytes_remaining_) { 15726: unaligned_alloc_ptr_ -= bytes; 15726: alloc_bytes_remaining_ -= bytes; 15726: return unaligned_alloc_ptr_; 15726: } 15726: return AllocateFallback(bytes, false ); 15726: } 15726: 15726: 15726: template 15726: struct Destroyer { 15726: void operator()(T* ptr) { ptr->~T(); } 15726: }; 15726: 15726: 15726: 15726: template 15726: using ScopedArenaPtr = std::unique_ptr>; 15726: 15726: } 15726: # 11 "/build/reproducible-path/rocksdb-9.3.1/logging/log_buffer.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/port/sys_time.h" 1 15726: # 13 "/build/reproducible-path/rocksdb-9.3.1/port/sys_time.h" 15726: 15726: # 42 "/build/reproducible-path/rocksdb-9.3.1/port/sys_time.h" 15726: # 1 "/usr/include/arm-linux-gnueabihf/sys/time.h" 1 3 4 15726: # 34 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 15726: 15726: # 34 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 15726: extern "C" { 15726: # 52 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 15726: struct timezone 15726: { 15726: int tz_minuteswest; 15726: int tz_dsttime; 15726: }; 15726: # 71 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 15726: extern int gettimeofday (struct timeval *__restrict __tv, void *__restrict __tz) noexcept (true) __asm__ ("" "__gettimeofday64") 15726: 15726: __attribute__ ((__nonnull__ (1))); 15726: # 98 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 15726: extern int settimeofday (const struct timeval *__tv, const struct timezone *__tz) noexcept (true) __asm__ ("" "__settimeofday64") 15726: 15726: ; 15726: 15726: extern int adjtime (const struct timeval *__delta, struct timeval *__olddelta) noexcept (true) __asm__ ("" "__adjtime64") 15726: 15726: ; 15726: # 114 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 15726: enum __itimer_which 15726: { 15726: 15726: ITIMER_REAL = 0, 15726: 15726: 15726: ITIMER_VIRTUAL = 1, 15726: 15726: 15726: 15726: ITIMER_PROF = 2 15726: 15726: }; 15726: 15726: 15726: 15726: struct itimerval 15726: { 15726: 15726: struct timeval it_interval; 15726: 15726: struct timeval it_value; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: typedef int __itimer_which_t; 15726: # 167 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 15726: extern int getitimer (__itimer_which_t __which, struct itimerval *__value) noexcept (true) __asm__ ("" "__getitimer64") 15726: 15726: ; 15726: 15726: extern int setitimer (__itimer_which_t __which, const struct itimerval *__restrict __new, struct itimerval *__restrict __old) noexcept (true) __asm__ ("" "__setitimer64") 15726: 15726: 15726: ; 15726: 15726: extern int utimes (const char *__file, const struct timeval __tvp[2]) noexcept (true) __asm__ ("" "__utimes64") 15726: 15726: __attribute__ ((__nonnull__ (1))); 15726: # 196 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 15726: extern int lutimes (const char *__file, const struct timeval __tvp[2]) noexcept (true) __asm__ ("" "__lutimes64") 15726: 15726: __attribute__ ((__nonnull__ (1))); 15726: 15726: extern int futimes (int __fd, const struct timeval __tvp[2]) noexcept (true) __asm__ ("" "__futimes64") 15726: ; 15726: # 218 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 15726: extern int futimesat (int __fd, const char *__file, const struct timeval __tvp[2]) noexcept (true) __asm__ ("" "__futimesat64") 15726: 15726: ; 15726: # 258 "/usr/include/arm-linux-gnueabihf/sys/time.h" 3 4 15726: } 15726: # 43 "/build/reproducible-path/rocksdb-9.3.1/port/sys_time.h" 2 15726: 15726: 15726: 15726: # 45 "/build/reproducible-path/rocksdb-9.3.1/port/sys_time.h" 15726: namespace rocksdb { 15726: 15726: namespace port { 15726: 15726: using TimeVal = struct timeval; 15726: 15726: inline void GetTimeOfDay(TimeVal* tv, struct timezone* tz) { 15726: gettimeofday(tv, tz); 15726: } 15726: 15726: inline struct tm* LocalTimeR(const time_t* timep, struct tm* result) { 15726: return localtime_r(timep, result); 15726: } 15726: 15726: } 15726: 15726: } 15726: # 12 "/build/reproducible-path/rocksdb-9.3.1/logging/log_buffer.h" 2 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class Logger; 15726: 15726: 15726: class LogBuffer { 15726: public: 15726: 15726: 15726: LogBuffer(const InfoLogLevel log_level, Logger* info_log); 15726: 15726: 15726: 15726: void AddLogToBuffer(size_t max_log_size, const char* format, va_list ap); 15726: 15726: size_t IsEmpty() const { return logs_.empty(); } 15726: 15726: 15726: void FlushBufferToLog(); 15726: static const size_t kDefaultMaxLogSize = 512; 15726: 15726: private: 15726: 15726: struct BufferedLog { 15726: port::TimeVal now_tv; 15726: char message[1]; 15726: }; 15726: 15726: const InfoLogLevel log_level_; 15726: Logger* info_log_; 15726: Arena arena_; 15726: autovector logs_; 15726: }; 15726: 15726: 15726: 15726: 15726: void LogToBuffer(LogBuffer* log_buffer, size_t max_log_size, const char* format, 15726: ...); 15726: 15726: void LogToBuffer(LogBuffer* log_buffer, const char* format, ...); 15726: 15726: } 15726: # 14 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 2 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class JSONWriter { 15726: public: 15726: JSONWriter() : state_(kExpectKey), first_element_(true), in_array_(false) { 15726: stream_ << "{"; 15726: } 15726: 15726: void AddKey(const std::string& key) { 15726: 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: (static_cast ( 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: state_ == kExpectKey 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: "state_ == kExpectKey" 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: ; 15726: if (!first_element_) { 15726: stream_ << ", "; 15726: } 15726: stream_ << "\"" << key << "\": "; 15726: state_ = kExpectValue; 15726: first_element_ = false; 15726: } 15726: 15726: void AddValue(const char* value) { 15726: 15726: # 35 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: (static_cast ( 15726: # 35 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: state_ == kExpectValue || state_ == kInArray 15726: # 35 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 35 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: "state_ == kExpectValue || state_ == kInArray" 15726: # 35 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 35 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: ; 15726: if (state_ == kInArray && !first_element_) { 15726: stream_ << ", "; 15726: } 15726: stream_ << "\"" << value << "\""; 15726: if (state_ != kInArray) { 15726: state_ = kExpectKey; 15726: } 15726: first_element_ = false; 15726: } 15726: 15726: template 15726: void AddValue(const T& value) { 15726: 15726: # 48 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: (static_cast ( 15726: # 48 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: state_ == kExpectValue || state_ == kInArray 15726: # 48 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 48 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: "state_ == kExpectValue || state_ == kInArray" 15726: # 48 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 48 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: ; 15726: if (state_ == kInArray && !first_element_) { 15726: stream_ << ", "; 15726: } 15726: stream_ << value; 15726: if (state_ != kInArray) { 15726: state_ = kExpectKey; 15726: } 15726: first_element_ = false; 15726: } 15726: 15726: void StartArray() { 15726: 15726: # 60 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: (static_cast ( 15726: # 60 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: state_ == kExpectValue 15726: # 60 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 60 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: "state_ == kExpectValue" 15726: # 60 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 60 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: ; 15726: state_ = kInArray; 15726: in_array_ = true; 15726: stream_ << "["; 15726: first_element_ = true; 15726: } 15726: 15726: void EndArray() { 15726: 15726: # 68 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: (static_cast ( 15726: # 68 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: state_ == kInArray 15726: # 68 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 68 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: "state_ == kInArray" 15726: # 68 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 68 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: ; 15726: state_ = kExpectKey; 15726: in_array_ = false; 15726: stream_ << "]"; 15726: first_element_ = false; 15726: } 15726: 15726: void StartObject() { 15726: 15726: # 76 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: (static_cast ( 15726: # 76 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: state_ == kExpectValue 15726: # 76 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 76 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: "state_ == kExpectValue" 15726: # 76 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 76 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: ; 15726: state_ = kExpectKey; 15726: stream_ << "{"; 15726: first_element_ = true; 15726: } 15726: 15726: void EndObject() { 15726: 15726: # 83 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: (static_cast ( 15726: # 83 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: state_ == kExpectKey 15726: # 83 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 83 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: "state_ == kExpectKey" 15726: # 83 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 83 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: ; 15726: stream_ << "}"; 15726: first_element_ = false; 15726: } 15726: 15726: void StartArrayedObject() { 15726: 15726: # 89 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: (static_cast ( 15726: # 89 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: state_ == kInArray && in_array_ 15726: # 89 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 89 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: "state_ == kInArray && in_array_" 15726: # 89 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 89 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: ; 15726: state_ = kExpectValue; 15726: if (!first_element_) { 15726: stream_ << ", "; 15726: } 15726: StartObject(); 15726: } 15726: 15726: void EndArrayedObject() { 15726: 15726: # 98 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: (static_cast ( 15726: # 98 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: in_array_ 15726: # 98 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 98 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: "in_array_" 15726: # 98 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 98 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: ; 15726: EndObject(); 15726: state_ = kInArray; 15726: } 15726: 15726: std::string Get() const { return stream_.str(); } 15726: 15726: JSONWriter& operator<<(const char* val) { 15726: if (state_ == kExpectKey) { 15726: AddKey(val); 15726: } else { 15726: AddValue(val); 15726: } 15726: return *this; 15726: } 15726: 15726: JSONWriter& operator<<(const std::string& val) { 15726: return *this << val.c_str(); 15726: } 15726: 15726: template 15726: JSONWriter& operator<<(const T& val) { 15726: 15726: # 120 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: (static_cast ( 15726: # 120 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: state_ != kExpectKey 15726: # 120 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 120 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: "state_ != kExpectKey" 15726: # 120 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 120 "/build/reproducible-path/rocksdb-9.3.1/logging/event_logger.h" 15726: ; 15726: AddValue(val); 15726: return *this; 15726: } 15726: 15726: private: 15726: enum JSONWriterState { 15726: kExpectKey, 15726: kExpectValue, 15726: kInArray, 15726: kInArrayedObject, 15726: }; 15726: JSONWriterState state_; 15726: bool first_element_; 15726: bool in_array_; 15726: std::ostringstream stream_; 15726: }; 15726: 15726: class EventLoggerStream { 15726: public: 15726: template 15726: EventLoggerStream& operator<<(const T& val) { 15726: MakeStream(); 15726: *json_writer_ << val; 15726: return *this; 15726: } 15726: 15726: void StartArray() { json_writer_->StartArray(); } 15726: void EndArray() { json_writer_->EndArray(); } 15726: void StartObject() { json_writer_->StartObject(); } 15726: void EndObject() { json_writer_->EndObject(); } 15726: 15726: ~EventLoggerStream(); 15726: 15726: private: 15726: void MakeStream() { 15726: if (!json_writer_) { 15726: json_writer_ = new JSONWriter(); 15726: *this << "time_micros" 15726: << std::chrono::duration_cast( 15726: std::chrono::system_clock::now().time_since_epoch()) 15726: .count(); 15726: } 15726: } 15726: friend class EventLogger; 15726: explicit EventLoggerStream(Logger* logger); 15726: explicit EventLoggerStream(LogBuffer* log_buffer, const size_t max_log_size); 15726: 15726: Logger* const logger_; 15726: LogBuffer* const log_buffer_; 15726: const size_t max_log_size_; 15726: 15726: JSONWriter* json_writer_; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: class EventLogger { 15726: public: 15726: static const char* Prefix() { return "EVENT_LOG_v1"; } 15726: 15726: explicit EventLogger(Logger* logger) : logger_(logger) {} 15726: EventLoggerStream Log() { return EventLoggerStream(logger_); } 15726: EventLoggerStream LogToBuffer(LogBuffer* log_buffer) { 15726: return EventLoggerStream(log_buffer, LogBuffer::kDefaultMaxLogSize); 15726: } 15726: EventLoggerStream LogToBuffer(LogBuffer* log_buffer, 15726: const size_t max_log_size) { 15726: return EventLoggerStream(log_buffer, max_log_size); 15726: } 15726: void Log(const JSONWriter& jwriter); 15726: static void Log(Logger* logger, const JSONWriter& jwriter); 15726: static void LogToBuffer( 15726: LogBuffer* log_buffer, const JSONWriter& jwriter, 15726: const size_t max_log_size = LogBuffer::kDefaultMaxLogSize); 15726: 15726: private: 15726: Logger* logger_; 15726: }; 15726: 15726: } 15726: # 19 "/build/reproducible-path/rocksdb-9.3.1/db/wal_edit.h" 2 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class JSONWriter; 15726: class Slice; 15726: class Status; 15726: 15726: using WalNumber = uint64_t; 15726: 15726: 15726: class WalMetadata { 15726: public: 15726: WalMetadata() = default; 15726: 15726: explicit WalMetadata(uint64_t synced_size_bytes) 15726: : synced_size_bytes_(synced_size_bytes) {} 15726: 15726: bool HasSyncedSize() const { return synced_size_bytes_ != kUnknownWalSize; } 15726: 15726: void SetSyncedSizeInBytes(uint64_t bytes) { synced_size_bytes_ = bytes; } 15726: 15726: uint64_t GetSyncedSizeInBytes() const { return synced_size_bytes_; } 15726: 15726: private: 15726: friend bool operator==(const WalMetadata& lhs, const WalMetadata& rhs); 15726: friend bool operator!=(const WalMetadata& lhs, const WalMetadata& rhs); 15726: 15726: 15726: constexpr static uint64_t kUnknownWalSize = 15726: std::numeric_limits::max(); 15726: 15726: 15726: uint64_t synced_size_bytes_ = kUnknownWalSize; 15726: }; 15726: 15726: inline bool operator==(const WalMetadata& lhs, const WalMetadata& rhs) { 15726: return lhs.synced_size_bytes_ == rhs.synced_size_bytes_; 15726: } 15726: 15726: inline bool operator!=(const WalMetadata& lhs, const WalMetadata& rhs) { 15726: return !(lhs == rhs); 15726: } 15726: 15726: 15726: enum class WalAdditionTag : uint32_t { 15726: 15726: kTerminate = 1, 15726: 15726: kSyncedSize = 2, 15726: 15726: }; 15726: 15726: 15726: class WalAddition { 15726: public: 15726: WalAddition() : number_(0), metadata_() {} 15726: 15726: explicit WalAddition(WalNumber number) : number_(number), metadata_() {} 15726: 15726: WalAddition(WalNumber number, WalMetadata meta) 15726: : number_(number), metadata_(std::move(meta)) {} 15726: 15726: WalNumber GetLogNumber() const { return number_; } 15726: 15726: const WalMetadata& GetMetadata() const { return metadata_; } 15726: 15726: void EncodeTo(std::string* dst) const; 15726: 15726: Status DecodeFrom(Slice* src); 15726: 15726: std::string DebugString() const; 15726: 15726: private: 15726: WalNumber number_; 15726: WalMetadata metadata_; 15726: }; 15726: 15726: std::ostream& operator<<(std::ostream& os, const WalAddition& wal); 15726: JSONWriter& operator<<(JSONWriter& jw, const WalAddition& wal); 15726: 15726: using WalAdditions = std::vector; 15726: 15726: 15726: class WalDeletion { 15726: public: 15726: WalDeletion() : number_(kEmpty) {} 15726: 15726: explicit WalDeletion(WalNumber number) : number_(number) {} 15726: 15726: WalNumber GetLogNumber() const { return number_; } 15726: 15726: void EncodeTo(std::string* dst) const; 15726: 15726: Status DecodeFrom(Slice* src); 15726: 15726: std::string DebugString() const; 15726: 15726: bool IsEmpty() const { return number_ == kEmpty; } 15726: 15726: void Reset() { number_ = kEmpty; } 15726: 15726: private: 15726: static constexpr WalNumber kEmpty = 0; 15726: 15726: WalNumber number_; 15726: }; 15726: 15726: std::ostream& operator<<(std::ostream& os, const WalDeletion& wal); 15726: JSONWriter& operator<<(JSONWriter& jw, const WalDeletion& wal); 15726: # 138 "/build/reproducible-path/rocksdb-9.3.1/db/wal_edit.h" 15726: class WalSet { 15726: public: 15726: 15726: 15726: 15726: 15726: 15726: Status AddWal(const WalAddition& wal); 15726: Status AddWals(const WalAdditions& wals); 15726: 15726: 15726: 15726: Status DeleteWalsBefore(WalNumber wal); 15726: 15726: 15726: void Reset(); 15726: 15726: 15726: WalNumber GetMinWalNumberToKeep() const { return min_wal_number_to_keep_; } 15726: 15726: const std::map& GetWals() const { return wals_; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: Status CheckWals( 15726: Env* env, 15726: const std::unordered_map& logs_on_disk) const; 15726: 15726: private: 15726: std::map wals_; 15726: 15726: 15726: WalNumber min_wal_number_to_keep_ = 0; 15726: }; 15726: 15726: } 15726: # 22 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 2 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 22 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: namespace rocksdb { 15726: 15726: class Logger; 15726: class SecondaryCacheResultHandle; 15726: class Statistics; 15726: # 44 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: class Cache { 15726: public: 15726: 15726: struct Handle {}; 15726: 15726: public: 15726: 15726: 15726: using ObjectPtr = void*; 15726: 15726: 15726: 15726: struct CreateContext {}; 15726: 15726: public: 15726: # 68 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: enum class Priority { HIGH, LOW, BOTTOM }; 15726: # 97 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: using SizeCallback = size_t (*)(ObjectPtr obj); 15726: 15726: 15726: 15726: 15726: 15726: using SaveToCallback = Status (*)(ObjectPtr from_obj, size_t from_offset, 15726: size_t length, char* out_buf); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: using DeleterFn = void (*)(ObjectPtr obj, MemoryAllocator* allocator); 15726: # 124 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: using CreateCallback = Status (*)(const Slice& data, CompressionType type, 15726: CacheTier source, CreateContext* context, 15726: MemoryAllocator* allocator, 15726: ObjectPtr* out_obj, size_t* out_charge); 15726: 15726: 15726: 15726: 15726: struct CacheItemHelper { 15726: 15726: 15726: 15726: DeleterFn del_cb; 15726: 15726: 15726: 15726: SizeCallback size_cb; 15726: SaveToCallback saveto_cb; 15726: CreateCallback create_cb; 15726: 15726: CacheEntryRole role; 15726: 15726: 15726: 15726: 15726: const CacheItemHelper* without_secondary_compat; 15726: 15726: CacheItemHelper() : CacheItemHelper(CacheEntryRole::kMisc) {} 15726: 15726: 15726: explicit CacheItemHelper(CacheEntryRole _role, DeleterFn _del_cb = nullptr) 15726: : CacheItemHelper(_role, _del_cb, nullptr, nullptr, nullptr, this) {} 15726: 15726: 15726: explicit CacheItemHelper(CacheEntryRole _role, DeleterFn _del_cb, 15726: SizeCallback _size_cb, SaveToCallback _saveto_cb, 15726: CreateCallback _create_cb, 15726: const CacheItemHelper* _without_secondary_compat) 15726: : del_cb(_del_cb), 15726: size_cb(_size_cb), 15726: saveto_cb(_saveto_cb), 15726: create_cb(_create_cb), 15726: role(_role), 15726: without_secondary_compat(_without_secondary_compat) { 15726: 15726: 15726: 15726: # 170 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 15726: (static_cast ( 15726: # 170 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: (size_cb != nullptr) == (saveto_cb != nullptr) 15726: # 170 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 170 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: "(size_cb != nullptr) == (saveto_cb != nullptr)" 15726: # 170 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 170 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: ; 15726: 15726: # 171 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 15726: (static_cast ( 15726: # 171 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: (size_cb != nullptr) == (create_cb != nullptr) 15726: # 171 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 171 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: "(size_cb != nullptr) == (create_cb != nullptr)" 15726: # 171 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 171 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: ; 15726: 15726: 15726: 15726: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 15726: (static_cast ( 15726: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: role == without_secondary_compat->role 15726: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: "role == without_secondary_compat->role" 15726: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 174 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: ; 15726: 15726: # 175 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 15726: (static_cast ( 15726: # 175 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: del_cb == without_secondary_compat->del_cb 15726: # 175 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 175 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: "del_cb == without_secondary_compat->del_cb" 15726: # 175 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 175 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: ; 15726: 15726: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 15726: (static_cast ( 15726: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: !without_secondary_compat->IsSecondaryCacheCompatible() 15726: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: "!without_secondary_compat->IsSecondaryCacheCompatible()" 15726: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 176 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: ; 15726: } 15726: inline bool IsSecondaryCacheCompatible() const { 15726: return size_cb != nullptr; 15726: } 15726: }; 15726: 15726: public: 15726: Cache(std::shared_ptr allocator = nullptr) 15726: : memory_allocator_(std::move(allocator)) {} 15726: 15726: Cache(const Cache&) = delete; 15726: Cache& operator=(const Cache&) = delete; 15726: 15726: 15726: virtual ~Cache() {} 15726: # 204 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: static Status CreateFromString(const ConfigOptions& config_options, 15726: const std::string& value, 15726: std::shared_ptr* result); 15726: 15726: public: 15726: 15726: virtual const char* Name() const = 0; 15726: # 260 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: virtual Status Insert( 15726: const Slice& key, ObjectPtr obj, const CacheItemHelper* helper, 15726: size_t charge, Handle** handle = nullptr, 15726: Priority priority = Priority::LOW, const Slice& compressed = Slice(), 15726: CompressionType type = CompressionType::kNoCompression) = 0; 15726: # 275 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: virtual Handle* CreateStandalone(const Slice& key, ObjectPtr obj, 15726: const CacheItemHelper* helper, size_t charge, 15726: bool allow_uncharged) = 0; 15726: # 289 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: virtual Handle* Lookup(const Slice& key, 15726: const CacheItemHelper* helper = nullptr, 15726: CreateContext* create_context = nullptr, 15726: Priority priority = Priority::LOW, 15726: Statistics* stats = nullptr) = 0; 15726: 15726: 15726: inline Handle* BasicLookup(const Slice& key, Statistics* stats) { 15726: return Lookup(key, nullptr, nullptr, Priority::LOW, stats); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: virtual bool Ref(Handle* handle) = 0; 15726: # 317 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: virtual bool Release(Handle* handle, bool erase_if_last_ref = false) = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual ObjectPtr Value(Handle* handle) = 0; 15726: 15726: 15726: 15726: 15726: virtual void Erase(const Slice& key) = 0; 15726: 15726: 15726: 15726: 15726: virtual uint64_t NewId() = 0; 15726: 15726: 15726: 15726: 15726: 15726: virtual void SetCapacity(size_t capacity) = 0; 15726: 15726: 15726: 15726: virtual void SetStrictCapacityLimit(bool strict_capacity_limit) = 0; 15726: 15726: 15726: 15726: virtual bool HasStrictCapacityLimit() const = 0; 15726: 15726: 15726: virtual size_t GetCapacity() const = 0; 15726: 15726: 15726: virtual size_t GetUsage() const = 0; 15726: 15726: 15726: 15726: 15726: virtual size_t GetOccupancyCount() const { return 15726: # 359 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 15726: (4294967295U) 15726: # 359 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: ; } 15726: 15726: 15726: 15726: 15726: virtual size_t GetTableAddressCount() const { return 0; } 15726: 15726: 15726: virtual size_t GetUsage(Handle* handle) const = 0; 15726: 15726: 15726: virtual size_t GetPinnedUsage() const = 0; 15726: 15726: 15726: virtual size_t GetCharge(Handle* handle) const = 0; 15726: 15726: 15726: virtual const CacheItemHelper* GetCacheItemHelper(Handle* handle) const = 0; 15726: 15726: virtual Status GetSecondaryCacheCapacity(size_t& ) const { 15726: return Status::NotSupported(); 15726: } 15726: 15726: virtual Status GetSecondaryCachePinnedUsage(size_t& ) const { 15726: return Status::NotSupported(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void DisownData() { 15726: 15726: } 15726: 15726: struct ApplyToAllEntriesOptions { 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_t average_entries_per_lock = 256; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: virtual void ApplyToAllEntries( 15726: const std::function& callback, 15726: const ApplyToAllEntriesOptions& opts) = 0; 15726: 15726: 15726: 15726: virtual void EraseUnRefEntries() = 0; 15726: 15726: virtual std::string GetPrintableOptions() const { return ""; } 15726: 15726: 15726: 15726: 15726: 15726: virtual void ReportProblems( 15726: const std::shared_ptr& ) const {} 15726: 15726: MemoryAllocator* memory_allocator() const { return memory_allocator_.get(); } 15726: 15726: 15726: virtual uint32_t GetHashSeed() const { return 0; } 15726: # 440 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: virtual bool Release(Handle* handle, bool , 15726: bool erase_if_last_ref) { 15726: return Release(handle, erase_if_last_ref); 15726: } 15726: 15726: 15726: 15726: 15726: struct AsyncLookupHandle { 15726: 15726: 15726: 15726: Slice key; 15726: const CacheItemHelper* helper = nullptr; 15726: CreateContext* create_context = nullptr; 15726: Priority priority = Priority::LOW; 15726: Statistics* stats = nullptr; 15726: 15726: AsyncLookupHandle() {} 15726: AsyncLookupHandle(const Slice& _key, const CacheItemHelper* _helper, 15726: CreateContext* _create_context, 15726: Priority _priority = Priority::LOW, 15726: Statistics* _stats = nullptr) 15726: : key(_key), 15726: helper(_helper), 15726: create_context(_create_context), 15726: priority(_priority), 15726: stats(_stats) {} 15726: 15726: 15726: ~AsyncLookupHandle() { 15726: # 470 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 15726: (static_cast ( 15726: # 470 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: !IsPending() 15726: # 470 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 470 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: "!IsPending()" 15726: # 470 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 470 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: ; } 15726: 15726: 15726: AsyncLookupHandle(const AsyncLookupHandle&) = delete; 15726: AsyncLookupHandle operator=(const AsyncLookupHandle&) = delete; 15726: AsyncLookupHandle(AsyncLookupHandle&&) = delete; 15726: AsyncLookupHandle operator=(AsyncLookupHandle&&) = delete; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool IsReady(); 15726: 15726: 15726: bool IsPending(); 15726: 15726: 15726: 15726: 15726: 15726: Handle* Result(); 15726: 15726: 15726: Handle* result_handle = nullptr; 15726: SecondaryCacheResultHandle* pending_handle = nullptr; 15726: SecondaryCache* pending_cache = nullptr; 15726: bool found_dummy_entry = false; 15726: bool kept_in_sec_cache = false; 15726: }; 15726: # 521 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/advanced_cache.h" 15726: virtual void StartAsyncLookup(AsyncLookupHandle& async_handle); 15726: 15726: 15726: 15726: Handle* Wait(AsyncLookupHandle& async_handle); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual void WaitAll(AsyncLookupHandle* , size_t ); 15726: 15726: 15726: 15726: 15726: 15726: using EvictionCallback = 15726: std::function; 15726: 15726: 15726: 15726: void SetEvictionCallback(EvictionCallback&& fn); 15726: 15726: protected: 15726: std::shared_ptr memory_allocator_; 15726: EvictionCallback eviction_callback_; 15726: }; 15726: 15726: 15726: 15726: class CacheWrapper : public Cache { 15726: public: 15726: explicit CacheWrapper(std::shared_ptr target) 15726: : target_(std::move(target)) {} 15726: 15726: 15726: 15726: 15726: Status Insert( 15726: const Slice& key, ObjectPtr value, const CacheItemHelper* helper, 15726: size_t charge, Handle** handle = nullptr, 15726: Priority priority = Priority::LOW, 15726: const Slice& compressed_value = Slice(), 15726: CompressionType type = CompressionType::kNoCompression) override { 15726: return target_->Insert(key, value, helper, charge, handle, priority, 15726: compressed_value, type); 15726: } 15726: 15726: Handle* CreateStandalone(const Slice& key, ObjectPtr obj, 15726: const CacheItemHelper* helper, size_t charge, 15726: bool allow_uncharged) override { 15726: return target_->CreateStandalone(key, obj, helper, charge, allow_uncharged); 15726: } 15726: 15726: Handle* Lookup(const Slice& key, const CacheItemHelper* helper, 15726: CreateContext* create_context, 15726: Priority priority = Priority::LOW, 15726: Statistics* stats = nullptr) override { 15726: return target_->Lookup(key, helper, create_context, priority, stats); 15726: } 15726: 15726: bool Ref(Handle* handle) override { return target_->Ref(handle); } 15726: 15726: using Cache::Release; 15726: bool Release(Handle* handle, bool erase_if_last_ref = false) override { 15726: return target_->Release(handle, erase_if_last_ref); 15726: } 15726: 15726: ObjectPtr Value(Handle* handle) override { return target_->Value(handle); } 15726: 15726: void Erase(const Slice& key) override { target_->Erase(key); } 15726: uint64_t NewId() override { return target_->NewId(); } 15726: 15726: void SetCapacity(size_t capacity) override { target_->SetCapacity(capacity); } 15726: 15726: void SetStrictCapacityLimit(bool strict_capacity_limit) override { 15726: target_->SetStrictCapacityLimit(strict_capacity_limit); 15726: } 15726: 15726: bool HasStrictCapacityLimit() const override { 15726: return target_->HasStrictCapacityLimit(); 15726: } 15726: 15726: size_t GetOccupancyCount() const override { 15726: return target_->GetOccupancyCount(); 15726: } 15726: 15726: size_t GetTableAddressCount() const override { 15726: return target_->GetTableAddressCount(); 15726: } 15726: 15726: size_t GetCapacity() const override { return target_->GetCapacity(); } 15726: 15726: size_t GetUsage() const override { return target_->GetUsage(); } 15726: 15726: size_t GetUsage(Handle* handle) const override { 15726: return target_->GetUsage(handle); 15726: } 15726: 15726: size_t GetPinnedUsage() const override { return target_->GetPinnedUsage(); } 15726: 15726: size_t GetCharge(Handle* handle) const override { 15726: return target_->GetCharge(handle); 15726: } 15726: 15726: const CacheItemHelper* GetCacheItemHelper(Handle* handle) const override { 15726: return target_->GetCacheItemHelper(handle); 15726: } 15726: 15726: void ApplyToAllEntries( 15726: const std::function& callback, 15726: const ApplyToAllEntriesOptions& opts) override { 15726: target_->ApplyToAllEntries(callback, opts); 15726: } 15726: 15726: void EraseUnRefEntries() override { target_->EraseUnRefEntries(); } 15726: 15726: void StartAsyncLookup(AsyncLookupHandle& async_handle) override { 15726: target_->StartAsyncLookup(async_handle); 15726: } 15726: 15726: void WaitAll(AsyncLookupHandle* async_handles, size_t count) override { 15726: target_->WaitAll(async_handles, count); 15726: } 15726: 15726: uint32_t GetHashSeed() const override { return target_->GetHashSeed(); } 15726: 15726: void ReportProblems(const std::shared_ptr& info_log) const override { 15726: target_->ReportProblems(info_log); 15726: } 15726: 15726: const std::shared_ptr& GetTarget() { return target_; } 15726: 15726: protected: 15726: std::shared_ptr target_; 15726: }; 15726: 15726: 15726: 15726: extern const Cache::CacheItemHelper kNoopCacheItemHelper; 15726: 15726: } 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 15726: 15726: # 19 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/table_reader_caller.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: 15726: enum TableReaderCaller : char { 15726: kUserGet = 1, 15726: kUserMultiGet = 2, 15726: kUserIterator = 3, 15726: kUserApproximateSize = 4, 15726: kUserVerifyChecksum = 5, 15726: kSSTDumpTool = 6, 15726: kExternalSSTIngestion = 7, 15726: kRepair = 8, 15726: kPrefetch = 9, 15726: kCompaction = 10, 15726: 15726: 15726: kCompactionRefill = 11, 15726: 15726: 15726: kFlush = 12, 15726: 15726: kSSTFileReader = 13, 15726: 15726: 15726: kUncategorized = 14, 15726: 15726: kMaxBlockCacheLookupCaller 15726: }; 15726: } 15726: # 20 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: class BlobFetcher; 15726: class Comparator; 15726: class Logger; 15726: class MergeContext; 15726: class MergeOperator; 15726: class PinnableWideColumns; 15726: class PinnedIteratorsManager; 15726: class Statistics; 15726: class SystemClock; 15726: struct ParsedInternalKey; 15726: 15726: 15726: 15726: 15726: struct GetContextStats { 15726: uint64_t num_cache_hit = 0; 15726: uint64_t num_cache_index_hit = 0; 15726: uint64_t num_cache_data_hit = 0; 15726: uint64_t num_cache_filter_hit = 0; 15726: uint64_t num_cache_compression_dict_hit = 0; 15726: uint64_t num_cache_index_miss = 0; 15726: uint64_t num_cache_filter_miss = 0; 15726: uint64_t num_cache_data_miss = 0; 15726: uint64_t num_cache_compression_dict_miss = 0; 15726: uint64_t num_cache_bytes_read = 0; 15726: uint64_t num_cache_miss = 0; 15726: uint64_t num_cache_add = 0; 15726: uint64_t num_cache_add_redundant = 0; 15726: uint64_t num_cache_bytes_write = 0; 15726: uint64_t num_cache_index_add = 0; 15726: uint64_t num_cache_index_add_redundant = 0; 15726: uint64_t num_cache_index_bytes_insert = 0; 15726: uint64_t num_cache_data_add = 0; 15726: uint64_t num_cache_data_add_redundant = 0; 15726: uint64_t num_cache_data_bytes_insert = 0; 15726: uint64_t num_cache_filter_add = 0; 15726: uint64_t num_cache_filter_add_redundant = 0; 15726: uint64_t num_cache_filter_bytes_insert = 0; 15726: uint64_t num_cache_compression_dict_add = 0; 15726: uint64_t num_cache_compression_dict_add_redundant = 0; 15726: uint64_t num_cache_compression_dict_bytes_insert = 0; 15726: 15726: uint64_t num_filter_read = 0; 15726: uint64_t num_index_read = 0; 15726: uint64_t num_sst_read = 0; 15726: }; 15726: # 67 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 15726: class GetContext { 15726: public: 15726: 15726: 15726: enum GetState { 15726: kNotFound, 15726: kFound, 15726: kDeleted, 15726: kCorrupt, 15726: kMerge, 15726: kUnexpectedBlobIndex, 15726: kMergeOperatorFailed, 15726: }; 15726: GetContextStats get_context_stats_; 15726: # 102 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 15726: GetContext(const Comparator* ucmp, const MergeOperator* merge_operator, 15726: Logger* logger, Statistics* statistics, GetState init_state, 15726: const Slice& user_key, PinnableSlice* value, 15726: PinnableWideColumns* columns, bool* value_found, 15726: MergeContext* merge_context, bool do_merge, 15726: SequenceNumber* max_covering_tombstone_seq, SystemClock* clock, 15726: SequenceNumber* seq = nullptr, 15726: PinnedIteratorsManager* _pinned_iters_mgr = nullptr, 15726: ReadCallback* callback = nullptr, bool* is_blob_index = nullptr, 15726: uint64_t tracing_get_id = 0, BlobFetcher* blob_fetcher = nullptr); 15726: GetContext(const Comparator* ucmp, const MergeOperator* merge_operator, 15726: Logger* logger, Statistics* statistics, GetState init_state, 15726: const Slice& user_key, PinnableSlice* value, 15726: PinnableWideColumns* columns, std::string* timestamp, 15726: bool* value_found, MergeContext* merge_context, bool do_merge, 15726: SequenceNumber* max_covering_tombstone_seq, SystemClock* clock, 15726: SequenceNumber* seq = nullptr, 15726: PinnedIteratorsManager* _pinned_iters_mgr = nullptr, 15726: ReadCallback* callback = nullptr, bool* is_blob_index = nullptr, 15726: uint64_t tracing_get_id = 0, BlobFetcher* blob_fetcher = nullptr); 15726: 15726: GetContext() = delete; 15726: 15726: 15726: 15726: void MarkKeyMayExist(); 15726: # 137 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 15726: bool SaveValue(const ParsedInternalKey& parsed_key, const Slice& value, 15726: bool* matched, Status* read_status, 15726: Cleanable* value_pinner = nullptr); 15726: 15726: 15726: 15726: void SaveValue(const Slice& value, SequenceNumber seq); 15726: 15726: GetState State() const { return state_; } 15726: 15726: SequenceNumber* max_covering_tombstone_seq() { 15726: return max_covering_tombstone_seq_; 15726: } 15726: 15726: bool NeedTimestamp() { return timestamp_ != nullptr; } 15726: 15726: inline size_t TimestampSize() { return ucmp_->timestamp_size(); } 15726: 15726: void SetTimestampFromRangeTombstone(const Slice& timestamp) { 15726: 15726: # 156 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 3 4 15726: (static_cast ( 15726: # 156 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 15726: timestamp_ 15726: # 156 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 156 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 15726: "timestamp_" 15726: # 156 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 156 "/build/reproducible-path/rocksdb-9.3.1/table/get_context.h" 15726: ; 15726: timestamp_->assign(timestamp.data(), timestamp.size()); 15726: ts_from_rangetombstone_ = true; 15726: } 15726: 15726: PinnedIteratorsManager* pinned_iters_mgr() { return pinned_iters_mgr_; } 15726: 15726: 15726: 15726: 15726: void SetReplayLog(std::string* replay_log) { replay_log_ = replay_log; } 15726: 15726: 15726: bool NeedToReadSequence() const { return (seq_ != nullptr); } 15726: 15726: bool sample() const { return sample_; } 15726: 15726: bool CheckCallback(SequenceNumber seq) { 15726: if (callback_) { 15726: return callback_->IsVisible(seq); 15726: } 15726: return true; 15726: } 15726: 15726: void ReportCounters(); 15726: 15726: bool has_callback() const { return callback_ != nullptr; } 15726: 15726: const Slice& ukey_to_get_blob_value() const { 15726: if (!ukey_with_ts_found_.empty()) { 15726: return ukey_with_ts_found_; 15726: } else { 15726: return user_key_; 15726: } 15726: } 15726: 15726: uint64_t get_tracing_get_id() const { return tracing_get_id_; } 15726: 15726: void push_operand(const Slice& value, Cleanable* value_pinner); 15726: 15726: private: 15726: 15726: 15726: void PostprocessMerge(const Status& merge_status); 15726: 15726: 15726: 15726: void MergeWithNoBaseValue(); 15726: void MergeWithPlainBaseValue(const Slice& value); 15726: void MergeWithWideColumnBaseValue(const Slice& entity); 15726: 15726: bool GetBlobValue(const Slice& user_key, const Slice& blob_index, 15726: PinnableSlice* blob_value, Status* read_status); 15726: 15726: void appendToReplayLog(ValueType type, Slice value, Slice ts); 15726: 15726: const Comparator* ucmp_; 15726: const MergeOperator* merge_operator_; 15726: 15726: Logger* logger_; 15726: Statistics* statistics_; 15726: 15726: GetState state_; 15726: Slice user_key_; 15726: 15726: 15726: 15726: PinnableSlice ukey_with_ts_found_; 15726: PinnableSlice* pinnable_val_; 15726: PinnableWideColumns* columns_; 15726: std::string* timestamp_; 15726: bool ts_from_rangetombstone_{false}; 15726: bool* value_found_; 15726: MergeContext* merge_context_; 15726: SequenceNumber* max_covering_tombstone_seq_; 15726: SystemClock* clock_; 15726: 15726: 15726: SequenceNumber* seq_; 15726: std::string* replay_log_; 15726: 15726: PinnedIteratorsManager* pinned_iters_mgr_; 15726: ReadCallback* callback_; 15726: bool sample_; 15726: 15726: 15726: 15726: bool do_merge_; 15726: bool* is_blob_index_; 15726: 15726: 15726: const uint64_t tracing_get_id_; 15726: BlobFetcher* blob_fetcher_; 15726: }; 15726: 15726: 15726: 15726: 15726: Status replayGetContextLog(const Slice& replay_log, const Slice& user_key, 15726: GetContext* get_context, 15726: Cleanable* value_pinner = nullptr, 15726: SequenceNumber seq_no = kMaxSequenceNumber); 15726: 15726: } 15726: # 21 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/lookup_key.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/db/lookup_key.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: 15726: class LookupKey { 15726: public: 15726: 15726: 15726: LookupKey(const Slice& _user_key, SequenceNumber sequence, 15726: const Slice* ts = nullptr); 15726: 15726: ~LookupKey(); 15726: 15726: 15726: Slice memtable_key() const { 15726: return Slice(start_, static_cast(end_ - start_)); 15726: } 15726: 15726: 15726: Slice internal_key() const { 15726: return Slice(kstart_, static_cast(end_ - kstart_)); 15726: } 15726: 15726: 15726: 15726: 15726: Slice user_key() const { 15726: return Slice(kstart_, static_cast(end_ - kstart_ - 8)); 15726: } 15726: 15726: private: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: const char* start_; 15726: const char* kstart_; 15726: const char* end_; 15726: char space_[200]; 15726: 15726: 15726: LookupKey(const LookupKey&); 15726: void operator=(const LookupKey&); 15726: }; 15726: 15726: inline LookupKey::~LookupKey() { 15726: if (start_ != space_) delete[] start_; 15726: } 15726: 15726: } 15726: # 13 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/merge_context.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 1 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: 15726: # 20 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/attribute_groups.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class ColumnFamilyHandle; 15726: 15726: 15726: 15726: 15726: class AttributeGroup { 15726: public: 15726: explicit AttributeGroup(ColumnFamilyHandle* column_family, 15726: const WideColumns& columns) 15726: : column_family_(column_family), columns_(columns) {} 15726: 15726: ColumnFamilyHandle* column_family() const { return column_family_; } 15726: const WideColumns& columns() const { return columns_; } 15726: WideColumns& columns() { return columns_; } 15726: 15726: private: 15726: ColumnFamilyHandle* column_family_; 15726: WideColumns columns_; 15726: }; 15726: 15726: inline bool operator==(const AttributeGroup& lhs, const AttributeGroup& rhs) { 15726: return lhs.column_family() == rhs.column_family() && 15726: lhs.columns() == rhs.columns(); 15726: } 15726: 15726: 15726: using AttributeGroups = std::vector; 15726: 15726: 15726: extern const AttributeGroups kNoAttributeGroups; 15726: 15726: 15726: class PinnableAttributeGroup { 15726: public: 15726: explicit PinnableAttributeGroup(ColumnFamilyHandle* column_family) 15726: : column_family_(column_family), status_(Status::OK()) {} 15726: 15726: ColumnFamilyHandle* column_family() const { return column_family_; } 15726: const Status& status() const { return status_; } 15726: const WideColumns& columns() const { return columns_.columns(); } 15726: 15726: void SetStatus(const Status& status); 15726: void SetColumns(PinnableWideColumns&& columns); 15726: 15726: void Reset(); 15726: 15726: private: 15726: ColumnFamilyHandle* column_family_; 15726: Status status_; 15726: PinnableWideColumns columns_; 15726: }; 15726: 15726: inline void PinnableAttributeGroup::SetStatus(const Status& status) { 15726: status_ = status; 15726: } 15726: inline void PinnableAttributeGroup::SetColumns(PinnableWideColumns&& columns) { 15726: columns_ = std::move(columns); 15726: } 15726: 15726: inline void PinnableAttributeGroup::Reset() { 15726: SetStatus(Status::OK()); 15726: columns_.Reset(); 15726: } 15726: 15726: 15726: using PinnableAttributeGroups = std::vector; 15726: 15726: 15726: 15726: class IteratorAttributeGroup { 15726: public: 15726: explicit IteratorAttributeGroup(ColumnFamilyHandle* column_family, 15726: const WideColumns* columns) 15726: : column_family_(column_family), columns_(columns) {} 15726: ColumnFamilyHandle* column_family() const { return column_family_; } 15726: const WideColumns& columns() const { return *columns_; } 15726: 15726: private: 15726: ColumnFamilyHandle* column_family_; 15726: const WideColumns* columns_; 15726: }; 15726: 15726: using IteratorAttributeGroups = std::vector; 15726: 15726: extern const IteratorAttributeGroups kNoIteratorAttributeGroups; 15726: 15726: 15726: 15726: 15726: class AttributeGroupIterator : public IteratorBase { 15726: public: 15726: AttributeGroupIterator() {} 15726: ~AttributeGroupIterator() override {} 15726: 15726: 15726: AttributeGroupIterator(const AttributeGroupIterator&) = delete; 15726: AttributeGroupIterator& operator=(const AttributeGroupIterator&) = delete; 15726: 15726: virtual const IteratorAttributeGroups& attribute_groups() const = 0; 15726: }; 15726: 15726: } 15726: # 21 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/block_cache_trace_writer.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/trace_reader_writer.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: # 20 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/trace_reader_writer.h" 15726: class TraceWriter { 15726: public: 15726: virtual ~TraceWriter() = default; 15726: 15726: virtual Status Write(const Slice& data) = 0; 15726: virtual Status Close() = 0; 15726: virtual uint64_t GetFileSize() = 0; 15726: }; 15726: 15726: 15726: 15726: class TraceReader { 15726: public: 15726: virtual ~TraceReader() = default; 15726: 15726: virtual Status Read(std::string* data) = 0; 15726: virtual Status Close() = 0; 15726: 15726: 15726: 15726: virtual Status Reset() = 0; 15726: }; 15726: 15726: 15726: 15726: Status NewFileTraceWriter(Env* env, const EnvOptions& env_options, 15726: const std::string& trace_filename, 15726: std::unique_ptr* trace_writer); 15726: Status NewFileTraceReader(Env* env, const EnvOptions& env_options, 15726: const std::string& trace_filename, 15726: std::unique_ptr* trace_reader); 15726: 15726: } 15726: # 12 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/block_cache_trace_writer.h" 2 15726: 15726: 15726: namespace rocksdb { 15726: 15726: 15726: struct BlockCacheTraceRecord { 15726: 15726: uint64_t access_timestamp = 0; 15726: 15726: 15726: 15726: 15726: std::string block_key; 15726: 15726: 15726: TraceType block_type = TraceType::kTraceMax; 15726: 15726: 15726: uint64_t block_size = 0; 15726: 15726: 15726: 15726: 15726: uint64_t cf_id = 0; 15726: 15726: 15726: std::string cf_name; 15726: 15726: 15726: uint32_t level = 0; 15726: 15726: 15726: uint64_t sst_fd_number = 0; 15726: 15726: 15726: 15726: 15726: TableReaderCaller caller = TableReaderCaller::kMaxBlockCacheLookupCaller; 15726: 15726: 15726: bool is_cache_hit = false; 15726: 15726: 15726: bool no_insert = false; 15726: 15726: 15726: 15726: 15726: uint64_t get_id = kReservedGetId; 15726: 15726: 15726: bool get_from_user_specified_snapshot = false; 15726: 15726: 15726: std::string referenced_key; 15726: 15726: 15726: 15726: 15726: uint64_t referenced_data_size = 0; 15726: 15726: 15726: uint64_t num_keys_in_block = 0; 15726: 15726: 15726: bool referenced_key_exist_in_block = false; 15726: 15726: static const uint64_t kReservedGetId; 15726: 15726: BlockCacheTraceRecord() {} 15726: 15726: BlockCacheTraceRecord(uint64_t _access_timestamp, std::string _block_key, 15726: TraceType _block_type, uint64_t _block_size, 15726: uint64_t _cf_id, std::string _cf_name, uint32_t _level, 15726: uint64_t _sst_fd_number, TableReaderCaller _caller, 15726: bool _is_cache_hit, bool _no_insert, uint64_t _get_id, 15726: bool _get_from_user_specified_snapshot = false, 15726: std::string _referenced_key = "", 15726: uint64_t _referenced_data_size = 0, 15726: uint64_t _num_keys_in_block = 0, 15726: bool _referenced_key_exist_in_block = false) 15726: : access_timestamp(_access_timestamp), 15726: block_key(_block_key), 15726: block_type(_block_type), 15726: block_size(_block_size), 15726: cf_id(_cf_id), 15726: cf_name(_cf_name), 15726: level(_level), 15726: sst_fd_number(_sst_fd_number), 15726: caller(_caller), 15726: is_cache_hit(_is_cache_hit), 15726: no_insert(_no_insert), 15726: get_id(_get_id), 15726: get_from_user_specified_snapshot(_get_from_user_specified_snapshot), 15726: referenced_key(_referenced_key), 15726: referenced_data_size(_referenced_data_size), 15726: num_keys_in_block(_num_keys_in_block), 15726: referenced_key_exist_in_block(_referenced_key_exist_in_block) {} 15726: }; 15726: 15726: 15726: struct BlockCacheTraceOptions { 15726: 15726: 15726: uint64_t sampling_frequency = 1; 15726: }; 15726: 15726: 15726: struct BlockCacheTraceWriterOptions { 15726: uint64_t max_trace_file_size = uint64_t{64} * 1024 * 1024 * 1024; 15726: }; 15726: 15726: 15726: 15726: 15726: class BlockCacheTraceWriter { 15726: public: 15726: virtual ~BlockCacheTraceWriter() {} 15726: 15726: 15726: virtual Status WriteBlockAccess(const BlockCacheTraceRecord& record, 15726: const Slice& block_key, const Slice& cf_name, 15726: const Slice& referenced_key) = 0; 15726: 15726: 15726: 15726: virtual Status WriteHeader() = 0; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: std::unique_ptr NewBlockCacheTraceWriter( 15726: SystemClock* clock, const BlockCacheTraceWriterOptions& trace_options, 15726: std::unique_ptr&& trace_writer); 15726: 15726: } 15726: # 22 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 2 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct FileStorageInfo { 15726: 15726: std::string relative_filename; 15726: 15726: 15726: std::string directory; 15726: 15726: 15726: 15726: uint64_t file_number = 0; 15726: 15726: FileType file_type = kTempFile; 15726: 15726: 15726: uint64_t size = 0; 15726: 15726: 15726: Temperature temperature = Temperature::kUnknown; 15726: 15726: 15726: 15726: 15726: 15726: std::string file_checksum; 15726: 15726: 15726: 15726: 15726: 15726: std::string file_checksum_func_name; 15726: }; 15726: 15726: 15726: 15726: struct LiveFileStorageInfo : public FileStorageInfo { 15726: 15726: 15726: 15726: 15726: 15726: std::string replacement_contents; 15726: 15726: 15726: 15726: 15726: bool trim_to_size = false; 15726: }; 15726: 15726: 15726: 15726: struct SstFileMetaData : public FileStorageInfo { 15726: SstFileMetaData() { file_type = kTableFile; } 15726: 15726: SstFileMetaData(const std::string& _file_name, uint64_t _file_number, 15726: const std::string& _directory, uint64_t _size, 15726: SequenceNumber _smallest_seqno, SequenceNumber _largest_seqno, 15726: const std::string& _smallestkey, 15726: const std::string& _largestkey, uint64_t _num_reads_sampled, 15726: bool _being_compacted, Temperature _temperature, 15726: uint64_t _oldest_blob_file_number, 15726: uint64_t _oldest_ancester_time, uint64_t _file_creation_time, 15726: uint64_t _epoch_number, std::string& _file_checksum, 15726: std::string& _file_checksum_func_name) 15726: : smallest_seqno(_smallest_seqno), 15726: largest_seqno(_largest_seqno), 15726: smallestkey(_smallestkey), 15726: largestkey(_largestkey), 15726: num_reads_sampled(_num_reads_sampled), 15726: being_compacted(_being_compacted), 15726: num_entries(0), 15726: num_deletions(0), 15726: oldest_blob_file_number(_oldest_blob_file_number), 15726: oldest_ancester_time(_oldest_ancester_time), 15726: file_creation_time(_file_creation_time), 15726: epoch_number(_epoch_number) { 15726: if (!_file_name.empty()) { 15726: if (_file_name[0] == '/') { 15726: relative_filename = _file_name.substr(1); 15726: name = _file_name; 15726: } else { 15726: relative_filename = _file_name; 15726: name = std::string("/") + _file_name; 15726: } 15726: 15726: # 107 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 3 4 15726: (static_cast ( 15726: # 107 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 15726: relative_filename.size() + 1 == name.size() 15726: # 107 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 107 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 15726: "relative_filename.size() + 1 == name.size()" 15726: # 107 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 107 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 15726: ; 15726: 15726: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 3 4 15726: (static_cast ( 15726: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 15726: relative_filename[0] != '/' 15726: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 15726: "relative_filename[0] != '/'" 15726: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 108 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 15726: ; 15726: 15726: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 3 4 15726: (static_cast ( 15726: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 15726: name[0] == '/' 15726: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 15726: "name[0] == '/'" 15726: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 109 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 15726: ; 15726: } 15726: directory = _directory; 15726: db_path = _directory; 15726: file_number = _file_number; 15726: file_type = kTableFile; 15726: size = _size; 15726: temperature = _temperature; 15726: file_checksum = _file_checksum; 15726: file_checksum_func_name = _file_checksum_func_name; 15726: } 15726: 15726: SequenceNumber smallest_seqno = 0; 15726: SequenceNumber largest_seqno = 0; 15726: std::string smallestkey; 15726: std::string largestkey; 15726: uint64_t num_reads_sampled = 0; 15726: bool being_compacted = 15726: false; 15726: 15726: uint64_t num_entries = 0; 15726: uint64_t num_deletions = 0; 15726: 15726: uint64_t oldest_blob_file_number = 0; 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/metadata.h" 15726: uint64_t oldest_ancester_time = 0; 15726: 15726: 15726: uint64_t file_creation_time = 0; 15726: 15726: 15726: 15726: 15726: 15726: uint64_t epoch_number = 0; 15726: 15726: 15726: 15726: 15726: std::string smallest{}; 15726: std::string largest{}; 15726: 15726: 15726: 15726: 15726: std::string name; 15726: 15726: 15726: std::string db_path; 15726: }; 15726: 15726: 15726: struct LiveFileMetaData : SstFileMetaData { 15726: std::string column_family_name; 15726: int level; 15726: LiveFileMetaData() : column_family_name(), level(0) {} 15726: }; 15726: 15726: 15726: struct BlobMetaData { 15726: BlobMetaData() 15726: : blob_file_number(0), 15726: blob_file_size(0), 15726: total_blob_count(0), 15726: total_blob_bytes(0), 15726: garbage_blob_count(0), 15726: garbage_blob_bytes(0) {} 15726: 15726: BlobMetaData(uint64_t _file_number, const std::string& _file_name, 15726: const std::string& _file_path, uint64_t _file_size, 15726: uint64_t _total_blob_count, uint64_t _total_blob_bytes, 15726: uint64_t _garbage_blob_count, uint64_t _garbage_blob_bytes, 15726: const std::string& _file_checksum, 15726: const std::string& _file_checksum_func_name) 15726: : blob_file_number(_file_number), 15726: blob_file_name(_file_name), 15726: blob_file_path(_file_path), 15726: blob_file_size(_file_size), 15726: total_blob_count(_total_blob_count), 15726: total_blob_bytes(_total_blob_bytes), 15726: garbage_blob_count(_garbage_blob_count), 15726: garbage_blob_bytes(_garbage_blob_bytes), 15726: checksum_method(_file_checksum), 15726: checksum_value(_file_checksum_func_name) {} 15726: uint64_t blob_file_number; 15726: std::string blob_file_name; 15726: std::string blob_file_path; 15726: uint64_t blob_file_size; 15726: uint64_t total_blob_count; 15726: uint64_t total_blob_bytes; 15726: uint64_t garbage_blob_count; 15726: uint64_t garbage_blob_bytes; 15726: std::string checksum_method; 15726: std::string checksum_value; 15726: }; 15726: 15726: 15726: struct LevelMetaData { 15726: LevelMetaData(int _level, uint64_t _size, 15726: const std::vector&& _files) 15726: : level(_level), size(_size), files(_files) {} 15726: 15726: 15726: const int level; 15726: 15726: 15726: const uint64_t size; 15726: 15726: const std::vector files; 15726: }; 15726: 15726: 15726: struct ColumnFamilyMetaData { 15726: ColumnFamilyMetaData() : size(0), file_count(0), name("") {} 15726: ColumnFamilyMetaData(const std::string& _name, uint64_t _size, 15726: const std::vector&& _levels) 15726: : size(_size), name(_name), levels(_levels) {} 15726: 15726: 15726: 15726: uint64_t size; 15726: 15726: size_t file_count; 15726: 15726: std::string name; 15726: 15726: std::vector levels; 15726: 15726: 15726: uint64_t blob_file_size = 0; 15726: 15726: size_t blob_file_count = 0; 15726: 15726: std::vector blob_files; 15726: }; 15726: 15726: 15726: 15726: struct ExportImportFilesMetaData { 15726: std::string db_comparator_name; 15726: std::vector files; 15726: }; 15726: } 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/snapshot.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class DB; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: class Snapshot { 15726: public: 15726: virtual SequenceNumber GetSequenceNumber() const = 0; 15726: 15726: 15726: 15726: virtual int64_t GetUnixTime() const = 0; 15726: 15726: virtual uint64_t GetTimestamp() const = 0; 15726: 15726: protected: 15726: virtual ~Snapshot(); 15726: }; 15726: 15726: 15726: 15726: 15726: class ManagedSnapshot { 15726: public: 15726: explicit ManagedSnapshot(DB* db); 15726: 15726: 15726: ManagedSnapshot(DB* db, const Snapshot* _snapshot); 15726: 15726: ~ManagedSnapshot(); 15726: 15726: const Snapshot* snapshot(); 15726: 15726: private: 15726: DB* db_; 15726: const Snapshot* snapshot_; 15726: }; 15726: 15726: } 15726: # 27 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/sst_file_writer.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/sst_file_writer.h" 15726: namespace rocksdb { 15726: 15726: class Comparator; 15726: 15726: 15726: 15726: struct ExternalSstFileInfo { 15726: ExternalSstFileInfo() 15726: : file_path(""), 15726: smallest_key(""), 15726: largest_key(""), 15726: smallest_range_del_key(""), 15726: largest_range_del_key(""), 15726: file_checksum(""), 15726: file_checksum_func_name(""), 15726: sequence_number(0), 15726: file_size(0), 15726: num_entries(0), 15726: num_range_del_entries(0), 15726: version(0) {} 15726: 15726: ExternalSstFileInfo(const std::string& _file_path, 15726: const std::string& _smallest_key, 15726: const std::string& _largest_key, 15726: SequenceNumber _sequence_number, uint64_t _file_size, 15726: uint64_t _num_entries, int32_t _version) 15726: : file_path(_file_path), 15726: smallest_key(_smallest_key), 15726: largest_key(_largest_key), 15726: smallest_range_del_key(""), 15726: largest_range_del_key(""), 15726: file_checksum(""), 15726: file_checksum_func_name(""), 15726: sequence_number(_sequence_number), 15726: file_size(_file_size), 15726: num_entries(_num_entries), 15726: num_range_del_entries(0), 15726: version(_version) {} 15726: 15726: std::string file_path; 15726: std::string smallest_key; 15726: std::string largest_key; 15726: std::string 15726: smallest_range_del_key; 15726: std::string largest_range_del_key; 15726: std::string file_checksum; 15726: std::string file_checksum_func_name; 15726: SequenceNumber sequence_number; 15726: uint64_t file_size; 15726: uint64_t num_entries; 15726: uint64_t num_range_del_entries; 15726: int32_t version; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: class SstFileWriter { 15726: public: 15726: # 95 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/sst_file_writer.h" 15726: SstFileWriter(const EnvOptions& env_options, const Options& options, 15726: ColumnFamilyHandle* column_family = nullptr, 15726: bool invalidate_page_cache = true, 15726: Env::IOPriority io_priority = Env::IOPriority::IO_TOTAL, 15726: bool skip_filters = false) 15726: : SstFileWriter(env_options, options, options.comparator, column_family, 15726: invalidate_page_cache, io_priority, skip_filters) {} 15726: 15726: 15726: SstFileWriter(const EnvOptions& env_options, const Options& options, 15726: const Comparator* user_comparator, 15726: ColumnFamilyHandle* column_family = nullptr, 15726: bool invalidate_page_cache = true, 15726: Env::IOPriority io_priority = Env::IOPriority::IO_TOTAL, 15726: bool skip_filters = false); 15726: 15726: ~SstFileWriter(); 15726: 15726: 15726: Status Open(const std::string& file_path, 15726: Temperature temp = Temperature::kUnknown); 15726: 15726: 15726: 15726: 15726: 15726: __attribute__((__deprecated__)) Status Add(const Slice& user_key, const Slice& value); 15726: 15726: 15726: 15726: 15726: 15726: Status Put(const Slice& user_key, const Slice& value); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: Status Put(const Slice& user_key, const Slice& timestamp, const Slice& value); 15726: 15726: 15726: 15726: Status PutEntity(const Slice& user_key, const WideColumns& columns); 15726: 15726: 15726: 15726: 15726: 15726: Status Merge(const Slice& user_key, const Slice& value); 15726: 15726: 15726: 15726: 15726: 15726: Status Delete(const Slice& user_key); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: Status Delete(const Slice& user_key, const Slice& timestamp); 15726: # 171 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/sst_file_writer.h" 15726: Status DeleteRange(const Slice& begin_key, const Slice& end_key); 15726: # 186 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/sst_file_writer.h" 15726: Status DeleteRange(const Slice& begin_key, const Slice& end_key, 15726: const Slice& timestamp); 15726: 15726: 15726: 15726: 15726: 15726: Status Finish(ExternalSstFileInfo* file_info = nullptr); 15726: 15726: 15726: uint64_t FileSize(); 15726: 15726: private: 15726: void InvalidatePageCache(bool closing); 15726: struct Rep; 15726: std::unique_ptr rep_; 15726: }; 15726: } 15726: # 28 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/transaction_log.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch.h" 1 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch.h" 15726: 15726: # 36 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch.h" 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch_base.h" 1 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch_base.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class Slice; 15726: class Status; 15726: class ColumnFamilyHandle; 15726: class WriteBatch; 15726: struct SliceParts; 15726: 15726: 15726: 15726: 15726: class WriteBatchBase { 15726: public: 15726: virtual ~WriteBatchBase() {} 15726: 15726: 15726: virtual Status Put(ColumnFamilyHandle* column_family, const Slice& key, 15726: const Slice& value) = 0; 15726: virtual Status Put(const Slice& key, const Slice& value) = 0; 15726: virtual Status Put(ColumnFamilyHandle* column_family, const Slice& key, 15726: const Slice& ts, const Slice& value) = 0; 15726: 15726: 15726: 15726: 15726: virtual Status Put(ColumnFamilyHandle* column_family, const SliceParts& key, 15726: const SliceParts& value); 15726: virtual Status Put(const SliceParts& key, const SliceParts& value); 15726: # 58 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch_base.h" 15726: virtual Status TimedPut(ColumnFamilyHandle* column_family, const Slice& key, 15726: const Slice& value, uint64_t write_unix_time) = 0; 15726: 15726: 15726: 15726: virtual Status PutEntity(ColumnFamilyHandle* column_family, const Slice& key, 15726: const WideColumns& columns) = 0; 15726: 15726: 15726: 15726: virtual Status PutEntity(const Slice& key, 15726: const AttributeGroups& attribute_groups) = 0; 15726: 15726: 15726: 15726: virtual Status Merge(ColumnFamilyHandle* column_family, const Slice& key, 15726: const Slice& value) = 0; 15726: virtual Status Merge(const Slice& key, const Slice& value) = 0; 15726: virtual Status Merge(ColumnFamilyHandle* column_family, const Slice& key, 15726: const Slice& ts, const Slice& value) = 0; 15726: 15726: 15726: virtual Status Merge(ColumnFamilyHandle* column_family, const SliceParts& key, 15726: const SliceParts& value); 15726: virtual Status Merge(const SliceParts& key, const SliceParts& value); 15726: 15726: 15726: virtual Status Delete(ColumnFamilyHandle* column_family, 15726: const Slice& key) = 0; 15726: virtual Status Delete(const Slice& key) = 0; 15726: virtual Status Delete(ColumnFamilyHandle* column_family, const Slice& key, 15726: const Slice& ts) = 0; 15726: 15726: 15726: virtual Status Delete(ColumnFamilyHandle* column_family, 15726: const SliceParts& key); 15726: virtual Status Delete(const SliceParts& key); 15726: 15726: 15726: 15726: virtual Status SingleDelete(ColumnFamilyHandle* column_family, 15726: const Slice& key) = 0; 15726: virtual Status SingleDelete(const Slice& key) = 0; 15726: virtual Status SingleDelete(ColumnFamilyHandle* column_family, 15726: const Slice& key, const Slice& ts) = 0; 15726: 15726: 15726: virtual Status SingleDelete(ColumnFamilyHandle* column_family, 15726: const SliceParts& key); 15726: virtual Status SingleDelete(const SliceParts& key); 15726: 15726: 15726: 15726: virtual Status DeleteRange(ColumnFamilyHandle* column_family, 15726: const Slice& begin_key, const Slice& end_key) = 0; 15726: virtual Status DeleteRange(const Slice& begin_key, const Slice& end_key) = 0; 15726: virtual Status DeleteRange(ColumnFamilyHandle* column_family, 15726: const Slice& begin_key, const Slice& end_key, 15726: const Slice& ts) = 0; 15726: 15726: 15726: virtual Status DeleteRange(ColumnFamilyHandle* column_family, 15726: const SliceParts& begin_key, 15726: const SliceParts& end_key); 15726: virtual Status DeleteRange(const SliceParts& begin_key, 15726: const SliceParts& end_key); 15726: # 135 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch_base.h" 15726: virtual Status PutLogData(const Slice& blob) = 0; 15726: 15726: 15726: virtual void Clear() = 0; 15726: 15726: 15726: 15726: 15726: virtual WriteBatch* GetWriteBatch() = 0; 15726: 15726: 15726: 15726: virtual void SetSavePoint() = 0; 15726: 15726: 15726: 15726: 15726: 15726: virtual Status RollbackToSavePoint() = 0; 15726: 15726: 15726: 15726: 15726: 15726: virtual Status PopSavePoint() = 0; 15726: 15726: 15726: virtual void SetMaxBytes(size_t max_bytes) = 0; 15726: }; 15726: 15726: } 15726: # 37 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: class Slice; 15726: class ColumnFamilyHandle; 15726: struct SavePoints; 15726: struct SliceParts; 15726: 15726: struct SavePoint { 15726: size_t size; 15726: uint32_t count; 15726: uint32_t content_flags; 15726: 15726: SavePoint() : size(0), count(0), content_flags(0) {} 15726: 15726: SavePoint(size_t _size, uint32_t _count, uint32_t _flags) 15726: : size(_size), count(_count), content_flags(_flags) {} 15726: 15726: void clear() { 15726: size = 0; 15726: count = 0; 15726: content_flags = 0; 15726: } 15726: 15726: bool is_cleared() const { return (size | count | content_flags) == 0; } 15726: }; 15726: 15726: class WriteBatch : public WriteBatchBase { 15726: public: 15726: explicit WriteBatch(size_t reserved_bytes = 0, size_t max_bytes = 0) 15726: : WriteBatch(reserved_bytes, max_bytes, 0, 0) {} 15726: 15726: 15726: 15726: 15726: explicit WriteBatch(size_t reserved_bytes, size_t max_bytes, 15726: size_t protection_bytes_per_key, size_t default_cf_ts_sz); 15726: ~WriteBatch() override; 15726: 15726: using WriteBatchBase::Put; 15726: 15726: 15726: 15726: 15726: 15726: Status Put(ColumnFamilyHandle* column_family, const Slice& key, 15726: const Slice& value) override; 15726: Status Put(const Slice& key, const Slice& value) override { 15726: return Put(nullptr, key, value); 15726: } 15726: Status Put(ColumnFamilyHandle* column_family, const Slice& key, 15726: const Slice& ts, const Slice& value) override; 15726: # 97 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch.h" 15726: Status Put(ColumnFamilyHandle* column_family, const SliceParts& key, 15726: const SliceParts& value) override; 15726: Status Put(const SliceParts& key, const SliceParts& value) override { 15726: return Put(nullptr, key, value); 15726: } 15726: 15726: using WriteBatchBase::TimedPut; 15726: 15726: 15726: 15726: 15726: Status TimedPut(ColumnFamilyHandle* column_family, const Slice& key, 15726: const Slice& value, uint64_t write_unix_time) override; 15726: 15726: 15726: 15726: using WriteBatchBase::PutEntity; 15726: Status PutEntity(ColumnFamilyHandle* column_family, const Slice& key, 15726: const WideColumns& columns) override; 15726: 15726: 15726: 15726: Status PutEntity(const Slice& key, 15726: const AttributeGroups& attribute_groups) override; 15726: 15726: using WriteBatchBase::Delete; 15726: 15726: 15726: 15726: 15726: 15726: Status Delete(ColumnFamilyHandle* column_family, const Slice& key) override; 15726: Status Delete(const Slice& key) override { return Delete(nullptr, key); } 15726: Status Delete(ColumnFamilyHandle* column_family, const Slice& key, 15726: const Slice& ts) override; 15726: 15726: 15726: 15726: 15726: 15726: 15726: Status Delete(ColumnFamilyHandle* column_family, 15726: const SliceParts& key) override; 15726: Status Delete(const SliceParts& key) override { return Delete(nullptr, key); } 15726: 15726: using WriteBatchBase::SingleDelete; 15726: 15726: Status SingleDelete(ColumnFamilyHandle* column_family, 15726: const Slice& key) override; 15726: Status SingleDelete(const Slice& key) override { 15726: return SingleDelete(nullptr, key); 15726: } 15726: Status SingleDelete(ColumnFamilyHandle* column_family, const Slice& key, 15726: const Slice& ts) override; 15726: 15726: 15726: Status SingleDelete(ColumnFamilyHandle* column_family, 15726: const SliceParts& key) override; 15726: Status SingleDelete(const SliceParts& key) override { 15726: return SingleDelete(nullptr, key); 15726: } 15726: 15726: using WriteBatchBase::DeleteRange; 15726: 15726: Status DeleteRange(ColumnFamilyHandle* column_family, const Slice& begin_key, 15726: const Slice& end_key) override; 15726: Status DeleteRange(const Slice& begin_key, const Slice& end_key) override { 15726: return DeleteRange(nullptr, begin_key, end_key); 15726: } 15726: 15726: Status DeleteRange(ColumnFamilyHandle* column_family, const Slice& begin_key, 15726: const Slice& end_key, const Slice& ts) override; 15726: 15726: 15726: Status DeleteRange(ColumnFamilyHandle* column_family, 15726: const SliceParts& begin_key, 15726: const SliceParts& end_key) override; 15726: Status DeleteRange(const SliceParts& begin_key, 15726: const SliceParts& end_key) override { 15726: return DeleteRange(nullptr, begin_key, end_key); 15726: } 15726: 15726: using WriteBatchBase::Merge; 15726: 15726: 15726: Status Merge(ColumnFamilyHandle* column_family, const Slice& key, 15726: const Slice& value) override; 15726: Status Merge(const Slice& key, const Slice& value) override { 15726: return Merge(nullptr, key, value); 15726: } 15726: Status Merge(ColumnFamilyHandle* , const Slice& , 15726: const Slice& , const Slice& ) override; 15726: 15726: 15726: Status Merge(ColumnFamilyHandle* column_family, const SliceParts& key, 15726: const SliceParts& value) override; 15726: Status Merge(const SliceParts& key, const SliceParts& value) override { 15726: return Merge(nullptr, key, value); 15726: } 15726: 15726: using WriteBatchBase::PutLogData; 15726: # 208 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch.h" 15726: Status PutLogData(const Slice& blob) override; 15726: 15726: using WriteBatchBase::Clear; 15726: 15726: void Clear() override; 15726: 15726: 15726: 15726: void SetSavePoint() override; 15726: 15726: 15726: 15726: 15726: 15726: 15726: Status RollbackToSavePoint() override; 15726: 15726: 15726: 15726: 15726: 15726: Status PopSavePoint() override; 15726: 15726: 15726: 15726: class Handler { 15726: public: 15726: virtual ~Handler(); 15726: # 244 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch.h" 15726: virtual Status PutCF(uint32_t column_family_id, const Slice& key, 15726: const Slice& value) { 15726: if (column_family_id == 0) { 15726: 15726: 15726: 15726: Put(key, value); 15726: return Status::OK(); 15726: } 15726: return Status::InvalidArgument( 15726: "non-default column family and PutCF not implemented"); 15726: } 15726: 15726: virtual void Put(const Slice& , const Slice& ) {} 15726: 15726: 15726: virtual Status TimedPutCF(uint32_t , 15726: const Slice& , const Slice& , 15726: uint64_t ) { 15726: return Status::InvalidArgument("TimedPutCF not implemented"); 15726: } 15726: 15726: 15726: virtual Status PutEntityCF(uint32_t , 15726: const Slice& , 15726: const Slice& ) { 15726: return Status::NotSupported("PutEntityCF not implemented"); 15726: } 15726: 15726: 15726: virtual Status DeleteCF(uint32_t column_family_id, const Slice& key) { 15726: if (column_family_id == 0) { 15726: Delete(key); 15726: return Status::OK(); 15726: } 15726: return Status::InvalidArgument( 15726: "non-default column family and DeleteCF not implemented"); 15726: } 15726: 15726: virtual void Delete(const Slice& ) {} 15726: 15726: 15726: virtual Status SingleDeleteCF(uint32_t column_family_id, const Slice& key) { 15726: if (column_family_id == 0) { 15726: SingleDelete(key); 15726: return Status::OK(); 15726: } 15726: return Status::InvalidArgument( 15726: "non-default column family and SingleDeleteCF not implemented"); 15726: } 15726: 15726: virtual void SingleDelete(const Slice& ) {} 15726: 15726: 15726: 15726: virtual Status DeleteRangeCF(uint32_t , 15726: const Slice& , 15726: const Slice& ) { 15726: return Status::InvalidArgument("DeleteRangeCF not implemented"); 15726: } 15726: 15726: 15726: virtual Status MergeCF(uint32_t column_family_id, const Slice& key, 15726: const Slice& value) { 15726: if (column_family_id == 0) { 15726: Merge(key, value); 15726: return Status::OK(); 15726: } 15726: return Status::InvalidArgument( 15726: "non-default column family and MergeCF not implemented"); 15726: } 15726: 15726: virtual void Merge(const Slice& , const Slice& ) {} 15726: 15726: 15726: virtual Status PutBlobIndexCF(uint32_t , 15726: const Slice& , 15726: const Slice& ) { 15726: return Status::InvalidArgument("PutBlobIndexCF not implemented"); 15726: } 15726: 15726: 15726: virtual void LogData(const Slice& blob); 15726: 15726: virtual Status MarkBeginPrepare(bool = false) { 15726: return Status::InvalidArgument("MarkBeginPrepare() handler not defined."); 15726: } 15726: 15726: virtual Status MarkEndPrepare(const Slice& ) { 15726: return Status::InvalidArgument("MarkEndPrepare() handler not defined."); 15726: } 15726: 15726: virtual Status MarkNoop(bool ) { 15726: return Status::InvalidArgument("MarkNoop() handler not defined."); 15726: } 15726: 15726: virtual Status MarkRollback(const Slice& ) { 15726: return Status::InvalidArgument( 15726: "MarkRollbackPrepare() handler not defined."); 15726: } 15726: 15726: virtual Status MarkCommit(const Slice& ) { 15726: return Status::InvalidArgument("MarkCommit() handler not defined."); 15726: } 15726: 15726: virtual Status MarkCommitWithTimestamp(const Slice& , 15726: const Slice& ) { 15726: return Status::InvalidArgument( 15726: "MarkCommitWithTimestamp() handler not defined."); 15726: } 15726: 15726: 15726: 15726: 15726: virtual bool Continue(); 15726: 15726: protected: 15726: friend class WriteBatchInternal; 15726: enum class OptionState { 15726: kUnknown, 15726: kDisabled, 15726: kEnabled, 15726: }; 15726: virtual OptionState WriteAfterCommit() const { 15726: return OptionState::kUnknown; 15726: } 15726: virtual OptionState WriteBeforePrepare() const { 15726: return OptionState::kUnknown; 15726: } 15726: }; 15726: Status Iterate(Handler* handler) const; 15726: 15726: 15726: const std::string& Data() const { return rep_; } 15726: 15726: 15726: std::string Release(); 15726: 15726: 15726: size_t GetDataSize() const { return rep_.size(); } 15726: 15726: 15726: uint32_t Count() const; 15726: 15726: 15726: bool HasPut() const; 15726: 15726: 15726: bool HasTimedPut() const; 15726: 15726: 15726: bool HasPutEntity() const; 15726: 15726: 15726: bool HasDelete() const; 15726: 15726: 15726: bool HasSingleDelete() const; 15726: 15726: 15726: bool HasDeleteRange() const; 15726: 15726: 15726: bool HasMerge() const; 15726: 15726: 15726: bool HasBeginPrepare() const; 15726: 15726: 15726: bool HasEndPrepare() const; 15726: 15726: 15726: bool HasCommit() const; 15726: 15726: 15726: bool HasRollback() const; 15726: # 437 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch.h" 15726: Status UpdateTimestamps(const Slice& ts, 15726: std::function ts_sz_func); 15726: 15726: 15726: 15726: 15726: 15726: Status VerifyChecksum() const; 15726: 15726: using WriteBatchBase::GetWriteBatch; 15726: WriteBatch* GetWriteBatch() override { return this; } 15726: 15726: 15726: explicit WriteBatch(const std::string& rep); 15726: explicit WriteBatch(std::string&& rep); 15726: 15726: WriteBatch(const WriteBatch& src); 15726: WriteBatch(WriteBatch&& src) noexcept; 15726: WriteBatch& operator=(const WriteBatch& src); 15726: WriteBatch& operator=(WriteBatch&& src); 15726: 15726: 15726: 15726: void MarkWalTerminationPoint(); 15726: const SavePoint& GetWalTerminationPoint() const { return wal_term_point_; } 15726: 15726: void SetMaxBytes(size_t max_bytes) override { max_bytes_ = max_bytes; } 15726: 15726: struct ProtectionInfo; 15726: size_t GetProtectionBytesPerKey() const; 15726: 15726: private: 15726: friend class WriteBatchInternal; 15726: friend class LocalSavePoint; 15726: 15726: 15726: 15726: friend class WriteBatchWithIndex; 15726: std::unique_ptr save_points_; 15726: 15726: 15726: 15726: 15726: SavePoint wal_term_point_; 15726: 15726: 15726: 15726: 15726: 15726: bool is_latest_persistent_state_ = false; 15726: # 495 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/write_batch.h" 15726: bool needs_in_place_update_ts_ = false; 15726: 15726: 15726: 15726: bool has_key_with_ts_ = false; 15726: 15726: 15726: mutable std::atomic content_flags_; 15726: 15726: 15726: uint32_t ComputeContentFlags() const; 15726: 15726: 15726: size_t max_bytes_; 15726: 15726: std::unique_ptr prot_info_; 15726: 15726: size_t default_cf_ts_sz_ = 0; 15726: 15726: protected: 15726: std::string rep_; 15726: }; 15726: 15726: } 15726: # 14 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/transaction_log.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: class LogFile; 15726: using VectorLogPtr = std::vector>; 15726: 15726: enum WalFileType { 15726: 15726: 15726: 15726: 15726: 15726: 15726: kArchivedLogFile = 0, 15726: 15726: 15726: kAliveLogFile = 1 15726: }; 15726: 15726: class LogFile { 15726: public: 15726: LogFile() {} 15726: virtual ~LogFile() {} 15726: 15726: 15726: 15726: 15726: virtual std::string PathName() const = 0; 15726: 15726: 15726: 15726: virtual uint64_t LogNumber() const = 0; 15726: 15726: 15726: virtual WalFileType Type() const = 0; 15726: 15726: 15726: virtual SequenceNumber StartSequence() const = 0; 15726: 15726: 15726: virtual uint64_t SizeFileBytes() const = 0; 15726: }; 15726: 15726: struct BatchResult { 15726: SequenceNumber sequence = 0; 15726: std::unique_ptr writeBatchPtr; 15726: 15726: 15726: 15726: 15726: BatchResult() {} 15726: 15726: ~BatchResult() {} 15726: 15726: BatchResult(const BatchResult&) = delete; 15726: 15726: BatchResult& operator=(const BatchResult&) = delete; 15726: 15726: BatchResult(BatchResult&& bResult) 15726: : sequence(std::move(bResult.sequence)), 15726: writeBatchPtr(std::move(bResult.writeBatchPtr)) {} 15726: 15726: BatchResult& operator=(BatchResult&& bResult) { 15726: sequence = std::move(bResult.sequence); 15726: writeBatchPtr = std::move(bResult.writeBatchPtr); 15726: return *this; 15726: } 15726: }; 15726: 15726: 15726: 15726: 15726: class TransactionLogIterator { 15726: public: 15726: TransactionLogIterator() {} 15726: virtual ~TransactionLogIterator() {} 15726: 15726: 15726: 15726: 15726: virtual bool Valid() = 0; 15726: 15726: 15726: 15726: virtual void Next() = 0; 15726: 15726: 15726: 15726: virtual Status status() = 0; 15726: 15726: 15726: 15726: 15726: virtual BatchResult GetBatch() = 0; 15726: 15726: 15726: struct ReadOptions { 15726: 15726: 15726: 15726: bool verify_checksums_; 15726: 15726: ReadOptions() : verify_checksums_(true) {} 15726: 15726: explicit ReadOptions(bool verify_checksums) 15726: : verify_checksums_(verify_checksums) {} 15726: }; 15726: }; 15726: } 15726: # 30 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 2 15726: # 45 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: namespace rocksdb { 15726: 15726: struct ColumnFamilyOptions; 15726: struct CompactionOptions; 15726: struct CompactRangeOptions; 15726: struct DBOptions; 15726: struct ExternalSstFileInfo; 15726: struct FlushOptions; 15726: struct Options; 15726: struct ReadOptions; 15726: struct TableProperties; 15726: struct WriteOptions; 15726: struct WaitForCompactOptions; 15726: class Env; 15726: class EventListener; 15726: class FileSystem; 15726: class Replayer; 15726: class StatsHistoryIterator; 15726: class TraceReader; 15726: class TraceWriter; 15726: class WriteBatch; 15726: 15726: extern const std::string kDefaultColumnFamilyName; 15726: extern const std::string kPersistentStatsColumnFamilyName; 15726: struct ColumnFamilyDescriptor { 15726: std::string name; 15726: ColumnFamilyOptions options; 15726: ColumnFamilyDescriptor() 15726: : name(kDefaultColumnFamilyName), options(ColumnFamilyOptions()) {} 15726: ColumnFamilyDescriptor(const std::string& _name, 15726: const ColumnFamilyOptions& _options) 15726: : name(_name), options(_options) {} 15726: }; 15726: 15726: class ColumnFamilyHandle { 15726: public: 15726: virtual ~ColumnFamilyHandle() {} 15726: 15726: virtual const std::string& GetName() const = 0; 15726: 15726: virtual uint32_t GetID() const = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status GetDescriptor(ColumnFamilyDescriptor* desc) = 0; 15726: 15726: 15726: virtual const Comparator* GetComparator() const = 0; 15726: }; 15726: 15726: static const int kMajorVersion = 9; 15726: static const int kMinorVersion = 3; 15726: 15726: 15726: struct Range { 15726: 15726: 15726: Slice start; 15726: Slice limit; 15726: 15726: Range() {} 15726: Range(const Slice& s, const Slice& l) : start(s), limit(l) {} 15726: }; 15726: 15726: struct RangePtr { 15726: 15726: 15726: const Slice* start; 15726: const Slice* limit; 15726: 15726: RangePtr() : start(nullptr), limit(nullptr) {} 15726: RangePtr(const Slice* s, const Slice* l) : start(s), limit(l) {} 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct IngestExternalFileArg { 15726: ColumnFamilyHandle* column_family = nullptr; 15726: std::vector external_files; 15726: IngestExternalFileOptions options; 15726: std::vector files_checksums; 15726: std::vector files_checksum_func_names; 15726: 15726: Temperature file_temperature = Temperature::kUnknown; 15726: }; 15726: 15726: struct GetMergeOperandsOptions { 15726: using ContinueCallback = std::function; 15726: 15726: 15726: 15726: 15726: 15726: 15726: int expected_max_number_of_operands = 0; 15726: # 159 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: ContinueCallback continue_cb; 15726: }; 15726: 15726: 15726: 15726: 15726: using TablePropertiesCollection = 15726: std::unordered_map>; 15726: 15726: 15726: 15726: 15726: 15726: 15726: class DB { 15726: public: 15726: # 184 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: static Status Open(const Options& options, const std::string& name, 15726: DB** dbptr); 15726: # 201 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: static Status Open(const DBOptions& db_options, const std::string& name, 15726: const std::vector& column_families, 15726: std::vector* handles, DB** dbptr); 15726: # 219 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: static Status OpenForReadOnly(const Options& options, const std::string& name, 15726: DB** dbptr, 15726: bool error_if_wal_file_exists = false); 15726: # 230 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: static Status OpenForReadOnly( 15726: const DBOptions& db_options, const std::string& name, 15726: const std::vector& column_families, 15726: std::vector* handles, DB** dbptr, 15726: bool error_if_wal_file_exists = false); 15726: # 260 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: static Status OpenAsSecondary(const Options& options, const std::string& name, 15726: const std::string& secondary_path, DB** dbptr); 15726: # 295 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: static Status OpenAsSecondary( 15726: const DBOptions& db_options, const std::string& name, 15726: const std::string& secondary_path, 15726: const std::vector& column_families, 15726: std::vector* handles, DB** dbptr); 15726: # 312 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: static Status OpenAsFollower(const Options& options, const std::string& name, 15726: const std::string& leader_path, 15726: std::unique_ptr* dbptr); 15726: 15726: 15726: static Status OpenAsFollower( 15726: const DBOptions& db_options, const std::string& name, 15726: const std::string& leader_path, 15726: const std::vector& column_families, 15726: std::vector* handles, std::unique_ptr* dbptr); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: static Status OpenAndCompact( 15726: const std::string& name, const std::string& output_directory, 15726: const std::string& input, std::string* output, 15726: const CompactionServiceOptionsOverride& override_options); 15726: 15726: static Status OpenAndCompact( 15726: const OpenAndCompactOptions& options, const std::string& name, 15726: const std::string& output_directory, const std::string& input, 15726: std::string* output, 15726: const CompactionServiceOptionsOverride& override_options); 15726: # 347 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: static Status OpenAndTrimHistory( 15726: const DBOptions& db_options, const std::string& dbname, 15726: const std::vector& column_families, 15726: std::vector* handles, DB** dbptr, 15726: std::string trim_ts); 15726: # 365 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status Resume() { return Status::NotSupported(); } 15726: # 384 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status Close() { return Status::NotSupported(); } 15726: 15726: 15726: 15726: 15726: 15726: static Status ListColumnFamilies(const DBOptions& db_options, 15726: const std::string& name, 15726: std::vector* column_families); 15726: 15726: 15726: DB() {} 15726: 15726: DB(const DB&) = delete; 15726: void operator=(const DB&) = delete; 15726: 15726: virtual ~DB(); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status CreateColumnFamily(const ColumnFamilyOptions& options, 15726: const std::string& column_family_name, 15726: ColumnFamilyHandle** handle); 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status CreateColumnFamilies( 15726: const ColumnFamilyOptions& options, 15726: const std::vector& column_family_names, 15726: std::vector* handles); 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status CreateColumnFamilies( 15726: const std::vector& column_families, 15726: std::vector* handles); 15726: 15726: 15726: 15726: 15726: virtual Status DropColumnFamily(ColumnFamilyHandle* column_family); 15726: 15726: 15726: 15726: 15726: 15726: virtual Status DropColumnFamilies( 15726: const std::vector& column_families); 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status DestroyColumnFamilyHandle(ColumnFamilyHandle* column_family); 15726: 15726: 15726: 15726: 15726: 15726: virtual Status Put(const WriteOptions& options, 15726: ColumnFamilyHandle* column_family, const Slice& key, 15726: const Slice& value) = 0; 15726: virtual Status Put(const WriteOptions& options, 15726: ColumnFamilyHandle* column_family, const Slice& key, 15726: const Slice& ts, const Slice& value) = 0; 15726: virtual Status Put(const WriteOptions& options, const Slice& key, 15726: const Slice& value) { 15726: return Put(options, DefaultColumnFamily(), key, value); 15726: } 15726: virtual Status Put(const WriteOptions& options, const Slice& key, 15726: const Slice& ts, const Slice& value) { 15726: return Put(options, DefaultColumnFamily(), key, ts, value); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status PutEntity(const WriteOptions& options, 15726: ColumnFamilyHandle* column_family, const Slice& key, 15726: const WideColumns& columns); 15726: 15726: 15726: virtual Status PutEntity(const WriteOptions& options, const Slice& key, 15726: const AttributeGroups& attribute_groups); 15726: 15726: 15726: 15726: 15726: 15726: virtual Status Delete(const WriteOptions& options, 15726: ColumnFamilyHandle* column_family, 15726: const Slice& key) = 0; 15726: virtual Status Delete(const WriteOptions& options, 15726: ColumnFamilyHandle* column_family, const Slice& key, 15726: const Slice& ts) = 0; 15726: virtual Status Delete(const WriteOptions& options, const Slice& key) { 15726: return Delete(options, DefaultColumnFamily(), key); 15726: } 15726: virtual Status Delete(const WriteOptions& options, const Slice& key, 15726: const Slice& ts) { 15726: return Delete(options, DefaultColumnFamily(), key, ts); 15726: } 15726: # 516 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status SingleDelete(const WriteOptions& options, 15726: ColumnFamilyHandle* column_family, 15726: const Slice& key) = 0; 15726: virtual Status SingleDelete(const WriteOptions& options, 15726: ColumnFamilyHandle* column_family, 15726: const Slice& key, const Slice& ts) = 0; 15726: virtual Status SingleDelete(const WriteOptions& options, const Slice& key) { 15726: return SingleDelete(options, DefaultColumnFamily(), key); 15726: } 15726: virtual Status SingleDelete(const WriteOptions& options, const Slice& key, 15726: const Slice& ts) { 15726: return SingleDelete(options, DefaultColumnFamily(), key, ts); 15726: } 15726: # 546 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status DeleteRange(const WriteOptions& options, 15726: ColumnFamilyHandle* column_family, 15726: const Slice& begin_key, const Slice& end_key); 15726: virtual Status DeleteRange(const WriteOptions& options, 15726: ColumnFamilyHandle* column_family, 15726: const Slice& begin_key, const Slice& end_key, 15726: const Slice& ts); 15726: virtual Status DeleteRange(const WriteOptions& options, 15726: const Slice& begin_key, const Slice& end_key) { 15726: return DeleteRange(options, DefaultColumnFamily(), begin_key, end_key); 15726: } 15726: virtual Status DeleteRange(const WriteOptions& options, 15726: const Slice& begin_key, const Slice& end_key, 15726: const Slice& ts) { 15726: return DeleteRange(options, DefaultColumnFamily(), begin_key, end_key, ts); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: virtual Status Merge(const WriteOptions& options, 15726: ColumnFamilyHandle* column_family, const Slice& key, 15726: const Slice& value) = 0; 15726: virtual Status Merge(const WriteOptions& options, const Slice& key, 15726: const Slice& value) { 15726: return Merge(options, DefaultColumnFamily(), key, value); 15726: } 15726: virtual Status Merge(const WriteOptions& , 15726: ColumnFamilyHandle* , 15726: const Slice& , const Slice& , 15726: const Slice& ); 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status Write(const WriteOptions& options, WriteBatch* updates) = 0; 15726: # 600 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status Get(const ReadOptions& options, 15726: ColumnFamilyHandle* column_family, const Slice& key, 15726: PinnableSlice* value, std::string* timestamp) = 0; 15726: 15726: 15726: 15726: 15726: virtual inline Status Get(const ReadOptions& options, 15726: ColumnFamilyHandle* column_family, const Slice& key, 15726: std::string* value, std::string* timestamp) final { 15726: 15726: # 610 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 15726: (static_cast ( 15726: # 610 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: value != nullptr 15726: # 610 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 610 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: "value != nullptr" 15726: # 610 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 610 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: ; 15726: PinnableSlice pinnable_val(value); 15726: 15726: # 612 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 15726: (static_cast ( 15726: # 612 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: !pinnable_val.IsPinned() 15726: # 612 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 612 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: "!pinnable_val.IsPinned()" 15726: # 612 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 612 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: ; 15726: auto s = Get(options, column_family, key, &pinnable_val, timestamp); 15726: if (s.ok() && pinnable_val.IsPinned()) { 15726: value->assign(pinnable_val.data(), pinnable_val.size()); 15726: } 15726: return s; 15726: } 15726: 15726: 15726: 15726: virtual Status Get(const ReadOptions& options, 15726: ColumnFamilyHandle* column_family, const Slice& key, 15726: PinnableSlice* value) final { 15726: return Get(options, column_family, key, value, nullptr); 15726: } 15726: 15726: 15726: 15726: virtual inline Status Get(const ReadOptions& options, 15726: ColumnFamilyHandle* column_family, const Slice& key, 15726: std::string* value) final { 15726: 15726: # 633 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 15726: (static_cast ( 15726: # 633 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: value != nullptr 15726: # 633 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 633 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: "value != nullptr" 15726: # 633 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 633 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: ; 15726: PinnableSlice pinnable_val(value); 15726: 15726: # 635 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 15726: (static_cast ( 15726: # 635 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: !pinnable_val.IsPinned() 15726: # 635 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 635 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: "!pinnable_val.IsPinned()" 15726: # 635 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 635 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: ; 15726: auto s = Get(options, column_family, key, &pinnable_val); 15726: if (s.ok() && pinnable_val.IsPinned()) { 15726: value->assign(pinnable_val.data(), pinnable_val.size()); 15726: } 15726: return s; 15726: } 15726: 15726: 15726: 15726: 15726: virtual Status Get(const ReadOptions& options, const Slice& key, 15726: std::string* value) final { 15726: return Get(options, DefaultColumnFamily(), key, value); 15726: } 15726: 15726: 15726: 15726: 15726: virtual Status Get(const ReadOptions& options, const Slice& key, 15726: std::string* value, std::string* timestamp) final { 15726: return Get(options, DefaultColumnFamily(), key, value, timestamp); 15726: } 15726: # 668 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status GetEntity(const ReadOptions& , 15726: ColumnFamilyHandle* , 15726: const Slice& , 15726: PinnableWideColumns* ) { 15726: return Status::NotSupported("GetEntity not supported"); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: virtual Status GetEntity(const ReadOptions& , 15726: const Slice& , 15726: PinnableAttributeGroups* ) { 15726: return Status::NotSupported("GetEntity not supported"); 15726: } 15726: # 704 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status GetMergeOperands( 15726: const ReadOptions& options, ColumnFamilyHandle* column_family, 15726: const Slice& key, PinnableSlice* merge_operands, 15726: GetMergeOperandsOptions* get_merge_operands_options, 15726: int* number_of_operands) = 0; 15726: # 730 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual std::vector MultiGet( 15726: const ReadOptions& options, 15726: const std::vector& column_families, 15726: const std::vector& keys, std::vector* values, 15726: std::vector* timestamps) final { 15726: size_t num_keys = keys.size(); 15726: std::vector statuses(num_keys); 15726: std::vector pin_values(num_keys); 15726: 15726: values->resize(num_keys); 15726: if (timestamps) { 15726: timestamps->resize(num_keys); 15726: } 15726: MultiGet(options, num_keys, 15726: const_cast(column_families.data()), 15726: keys.data(), pin_values.data(), 15726: timestamps ? timestamps->data() : nullptr, statuses.data(), 15726: false); 15726: for (size_t i = 0; i < num_keys; ++i) { 15726: if (statuses[i].ok()) { 15726: (*values)[i].assign(pin_values[i].data(), pin_values[i].size()); 15726: } 15726: } 15726: return statuses; 15726: } 15726: 15726: 15726: 15726: virtual std::vector MultiGet( 15726: const ReadOptions& options, 15726: const std::vector& column_family, 15726: const std::vector& keys, std::vector* values) final { 15726: values->resize(keys.size()); 15726: return MultiGet(options, column_family, keys, values, nullptr); 15726: } 15726: 15726: 15726: 15726: virtual std::vector MultiGet(const ReadOptions& options, 15726: const std::vector& keys, 15726: std::vector* values) final { 15726: values->resize(keys.size()); 15726: return MultiGet( 15726: options, 15726: std::vector(keys.size(), DefaultColumnFamily()), 15726: keys, values); 15726: } 15726: 15726: 15726: 15726: virtual std::vector MultiGet( 15726: const ReadOptions& options, const std::vector& keys, 15726: std::vector* values, 15726: std::vector* timestamps) final { 15726: values->resize(keys.size()); 15726: return MultiGet( 15726: options, 15726: std::vector(keys.size(), DefaultColumnFamily()), 15726: keys, values, timestamps); 15726: } 15726: # 819 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual void MultiGet(const ReadOptions& options, const size_t num_keys, 15726: ColumnFamilyHandle** column_families, const Slice* keys, 15726: PinnableSlice* values, std::string* timestamps, 15726: Status* statuses, const bool sorted_input = false) = 0; 15726: 15726: 15726: 15726: virtual void MultiGet(const ReadOptions& options, 15726: ColumnFamilyHandle* column_family, 15726: const size_t num_keys, const Slice* keys, 15726: PinnableSlice* values, std::string* timestamps, 15726: Status* statuses, 15726: const bool sorted_input = false) final; 15726: 15726: 15726: 15726: virtual void MultiGet(const ReadOptions& options, 15726: ColumnFamilyHandle* column_family, 15726: const size_t num_keys, const Slice* keys, 15726: PinnableSlice* values, Status* statuses, 15726: const bool sorted_input = false) final { 15726: MultiGet(options, column_family, num_keys, keys, values, nullptr, statuses, 15726: sorted_input); 15726: } 15726: 15726: 15726: 15726: virtual void MultiGet(const ReadOptions& options, const size_t num_keys, 15726: ColumnFamilyHandle** column_families, const Slice* keys, 15726: PinnableSlice* values, Status* statuses, 15726: const bool sorted_input = false) final { 15726: MultiGet(options, num_keys, column_families, keys, values, nullptr, 15726: statuses, sorted_input); 15726: } 15726: # 873 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual void MultiGetEntity(const ReadOptions& , 15726: ColumnFamilyHandle* , 15726: size_t num_keys, const Slice* , 15726: PinnableWideColumns* , 15726: Status* statuses, 15726: bool = false) { 15726: for (size_t i = 0; i < num_keys; ++i) { 15726: statuses[i] = Status::NotSupported("MultiGetEntity not supported"); 15726: } 15726: } 15726: # 905 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual void MultiGetEntity(const ReadOptions& , size_t num_keys, 15726: ColumnFamilyHandle** , 15726: const Slice* , 15726: PinnableWideColumns* , 15726: Status* statuses, 15726: bool = false) { 15726: for (size_t i = 0; i < num_keys; ++i) { 15726: statuses[i] = Status::NotSupported("MultiGetEntity not supported"); 15726: } 15726: } 15726: # 933 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual void MultiGetEntity(const ReadOptions& , size_t num_keys, 15726: const Slice* , 15726: PinnableAttributeGroups* results) { 15726: for (size_t i = 0; i < num_keys; ++i) { 15726: for (size_t j = 0; j < results[i].size(); ++j) { 15726: results[i][j].SetStatus( 15726: Status::NotSupported("MultiGetEntity not supported")); 15726: } 15726: } 15726: } 15726: # 951 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual bool KeyMayExist(const ReadOptions& , 15726: ColumnFamilyHandle* , 15726: const Slice& , std::string* , 15726: std::string* , 15726: bool* value_found = nullptr) { 15726: if (value_found != nullptr) { 15726: *value_found = false; 15726: } 15726: return true; 15726: } 15726: 15726: virtual bool KeyMayExist(const ReadOptions& options, 15726: ColumnFamilyHandle* column_family, const Slice& key, 15726: std::string* value, bool* value_found = nullptr) { 15726: return KeyMayExist(options, column_family, key, value, 15726: nullptr, value_found); 15726: } 15726: 15726: virtual bool KeyMayExist(const ReadOptions& options, const Slice& key, 15726: std::string* value, bool* value_found = nullptr) { 15726: return KeyMayExist(options, DefaultColumnFamily(), key, value, value_found); 15726: } 15726: 15726: virtual bool KeyMayExist(const ReadOptions& options, const Slice& key, 15726: std::string* value, std::string* timestamp, 15726: bool* value_found = nullptr) { 15726: return KeyMayExist(options, DefaultColumnFamily(), key, value, timestamp, 15726: value_found); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Iterator* NewIterator(const ReadOptions& options, 15726: ColumnFamilyHandle* column_family) = 0; 15726: virtual Iterator* NewIterator(const ReadOptions& options) { 15726: return NewIterator(options, DefaultColumnFamily()); 15726: } 15726: 15726: 15726: 15726: virtual Status NewIterators( 15726: const ReadOptions& options, 15726: const std::vector& column_families, 15726: std::vector* iterators) = 0; 15726: # 1014 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual std::unique_ptr NewCoalescingIterator( 15726: const ReadOptions& options, 15726: const std::vector& column_families) = 0; 15726: 15726: 15726: 15726: 15726: virtual std::unique_ptr NewAttributeGroupIterator( 15726: const ReadOptions& options, 15726: const std::vector& column_families) = 0; 15726: # 1032 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual const Snapshot* GetSnapshot() = 0; 15726: 15726: 15726: 15726: virtual void ReleaseSnapshot(const Snapshot* snapshot) = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct Properties { 15726: 15726: 15726: 15726: static const std::string kNumFilesAtLevelPrefix; 15726: 15726: 15726: 15726: 15726: 15726: 15726: static const std::string kCompressionRatioAtLevelPrefix; 15726: 15726: 15726: 15726: static const std::string kStats; 15726: 15726: 15726: 15726: static const std::string kSSTables; 15726: 15726: 15726: 15726: static const std::string kCFStats; 15726: 15726: 15726: 15726: 15726: 15726: static const std::string kCFStatsNoFileHistogram; 15726: 15726: 15726: 15726: static const std::string kCFFileHistogram; 15726: 15726: 15726: 15726: 15726: 15726: static const std::string kCFWriteStallStats; 15726: 15726: 15726: 15726: 15726: 15726: static const std::string kDBWriteStallStats; 15726: 15726: 15726: 15726: 15726: 15726: 15726: static const std::string kDBStats; 15726: 15726: 15726: 15726: static const std::string kLevelStats; 15726: 15726: 15726: 15726: 15726: 15726: static const std::string kBlockCacheEntryStats; 15726: 15726: 15726: 15726: static const std::string kFastBlockCacheEntryStats; 15726: 15726: 15726: 15726: static const std::string kNumImmutableMemTable; 15726: 15726: 15726: 15726: static const std::string kNumImmutableMemTableFlushed; 15726: 15726: 15726: 15726: static const std::string kMemTableFlushPending; 15726: 15726: 15726: 15726: static const std::string kNumRunningFlushes; 15726: 15726: 15726: 15726: static const std::string kCompactionPending; 15726: 15726: 15726: 15726: static const std::string kNumRunningCompactions; 15726: 15726: 15726: 15726: static const std::string kBackgroundErrors; 15726: 15726: 15726: 15726: static const std::string kCurSizeActiveMemTable; 15726: 15726: 15726: 15726: static const std::string kCurSizeAllMemTables; 15726: 15726: 15726: 15726: static const std::string kSizeAllMemTables; 15726: 15726: 15726: 15726: static const std::string kNumEntriesActiveMemTable; 15726: 15726: 15726: 15726: static const std::string kNumEntriesImmMemTables; 15726: 15726: 15726: 15726: static const std::string kNumDeletesActiveMemTable; 15726: 15726: 15726: 15726: static const std::string kNumDeletesImmMemTables; 15726: 15726: 15726: 15726: static const std::string kEstimateNumKeys; 15726: 15726: 15726: 15726: 15726: static const std::string kEstimateTableReadersMem; 15726: 15726: 15726: 15726: 15726: 15726: static const std::string kIsFileDeletionsEnabled; 15726: 15726: 15726: 15726: static const std::string kNumSnapshots; 15726: 15726: 15726: 15726: static const std::string kOldestSnapshotTime; 15726: 15726: 15726: 15726: static const std::string kOldestSnapshotSequence; 15726: 15726: 15726: 15726: 15726: 15726: static const std::string kNumLiveVersions; 15726: 15726: 15726: 15726: 15726: 15726: static const std::string kCurrentSuperVersionNumber; 15726: 15726: 15726: 15726: 15726: static const std::string kEstimateLiveDataSize; 15726: 15726: 15726: 15726: static const std::string kMinLogNumberToKeep; 15726: 15726: 15726: 15726: 15726: static const std::string kMinObsoleteSstNumberToKeep; 15726: 15726: 15726: 15726: 15726: static const std::string kTotalSstFilesSize; 15726: 15726: 15726: 15726: static const std::string kLiveSstFilesSize; 15726: # 1237 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: static const std::string kObsoleteSstFilesSize; 15726: 15726: 15726: 15726: static const std::string kLiveSstFilesSizeAtTemperature; 15726: 15726: 15726: 15726: static const std::string kBaseLevel; 15726: 15726: 15726: 15726: 15726: 15726: static const std::string kEstimatePendingCompactionBytes; 15726: 15726: 15726: 15726: 15726: 15726: static const std::string kAggregatedTableProperties; 15726: 15726: 15726: 15726: 15726: static const std::string kAggregatedTablePropertiesAtLevel; 15726: 15726: 15726: 15726: static const std::string kActualDelayedWriteRate; 15726: 15726: 15726: static const std::string kIsWriteStopped; 15726: 15726: 15726: 15726: 15726: 15726: static const std::string kEstimateOldestKeyTime; 15726: 15726: 15726: static const std::string kBlockCacheCapacity; 15726: 15726: 15726: 15726: static const std::string kBlockCacheUsage; 15726: 15726: 15726: 15726: static const std::string kBlockCachePinnedUsage; 15726: 15726: 15726: 15726: static const std::string kOptionsStatistics; 15726: 15726: 15726: 15726: static const std::string kNumBlobFiles; 15726: 15726: 15726: 15726: 15726: static const std::string kBlobStats; 15726: 15726: 15726: 15726: static const std::string kTotalBlobFileSize; 15726: 15726: 15726: 15726: static const std::string kLiveBlobFileSize; 15726: 15726: 15726: 15726: static const std::string kLiveBlobFileGarbageSize; 15726: 15726: 15726: static const std::string kBlobCacheCapacity; 15726: 15726: 15726: 15726: static const std::string kBlobCacheUsage; 15726: 15726: 15726: 15726: static const std::string kBlobCachePinnedUsage; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual bool GetProperty(ColumnFamilyHandle* column_family, 15726: const Slice& property, std::string* value) = 0; 15726: virtual bool GetProperty(const Slice& property, std::string* value) { 15726: return GetProperty(DefaultColumnFamily(), property, value); 15726: } 15726: 15726: 15726: 15726: virtual bool GetMapProperty(ColumnFamilyHandle* column_family, 15726: const Slice& property, 15726: std::map* value) = 0; 15726: virtual bool GetMapProperty(const Slice& property, 15726: std::map* value) { 15726: return GetMapProperty(DefaultColumnFamily(), property, value); 15726: } 15726: # 1391 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual bool GetIntProperty(ColumnFamilyHandle* column_family, 15726: const Slice& property, uint64_t* value) = 0; 15726: virtual bool GetIntProperty(const Slice& property, uint64_t* value) { 15726: return GetIntProperty(DefaultColumnFamily(), property, value); 15726: } 15726: 15726: 15726: 15726: 15726: virtual Status ResetStats() { 15726: return Status::NotSupported("Not implemented"); 15726: } 15726: 15726: 15726: 15726: virtual bool GetAggregatedIntProperty(const Slice& property, 15726: uint64_t* value) = 0; 15726: 15726: 15726: 15726: enum class SizeApproximationFlags : uint8_t { 15726: NONE = 0, 15726: INCLUDE_MEMTABLES = 1 << 0, 15726: INCLUDE_FILES = 1 << 1 15726: }; 15726: # 1424 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status GetApproximateSizes(const SizeApproximationOptions& options, 15726: ColumnFamilyHandle* column_family, 15726: const Range* ranges, int n, 15726: uint64_t* sizes) = 0; 15726: 15726: 15726: 15726: 15726: virtual Status GetApproximateSizes(ColumnFamilyHandle* column_family, 15726: const Range* ranges, int n, 15726: uint64_t* sizes, 15726: SizeApproximationFlags include_flags = 15726: SizeApproximationFlags::INCLUDE_FILES); 15726: 15726: virtual Status GetApproximateSizes( 15726: const Range* ranges, int n, uint64_t* sizes, 15726: SizeApproximationFlags include_flags = 15726: SizeApproximationFlags::INCLUDE_FILES) { 15726: return GetApproximateSizes(DefaultColumnFamily(), ranges, n, sizes, 15726: include_flags); 15726: } 15726: 15726: 15726: 15726: virtual void GetApproximateMemTableStats(ColumnFamilyHandle* column_family, 15726: const Range& range, 15726: uint64_t* const count, 15726: uint64_t* const size) = 0; 15726: virtual void GetApproximateMemTableStats(const Range& range, 15726: uint64_t* const count, 15726: uint64_t* const size) { 15726: GetApproximateMemTableStats(DefaultColumnFamily(), range, count, size); 15726: } 15726: # 1483 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status CompactRange(const CompactRangeOptions& options, 15726: ColumnFamilyHandle* column_family, 15726: const Slice* begin, const Slice* end) = 0; 15726: virtual Status CompactRange(const CompactRangeOptions& options, 15726: const Slice* begin, const Slice* end) { 15726: return CompactRange(options, DefaultColumnFamily(), begin, end); 15726: } 15726: # 1509 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status SetOptions( 15726: ColumnFamilyHandle* , 15726: const std::unordered_map& ) { 15726: return Status::NotSupported("Not implemented"); 15726: } 15726: 15726: virtual Status SetOptions( 15726: const std::unordered_map& new_options) { 15726: return SetOptions(DefaultColumnFamily(), new_options); 15726: } 15726: # 1529 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status SetDBOptions( 15726: const std::unordered_map& new_options) = 0; 15726: # 1539 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status CompactFiles( 15726: const CompactionOptions& compact_options, 15726: ColumnFamilyHandle* column_family, 15726: const std::vector& input_file_names, const int output_level, 15726: const int output_path_id = -1, 15726: std::vector* const output_file_names = nullptr, 15726: CompactionJobInfo* compaction_job_info = nullptr) = 0; 15726: 15726: virtual Status CompactFiles( 15726: const CompactionOptions& compact_options, 15726: const std::vector& input_file_names, const int output_level, 15726: const int output_path_id = -1, 15726: std::vector* const output_file_names = nullptr, 15726: CompactionJobInfo* compaction_job_info = nullptr) { 15726: return CompactFiles(compact_options, DefaultColumnFamily(), 15726: input_file_names, output_level, output_path_id, 15726: output_file_names, compaction_job_info); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: virtual Status PauseBackgroundWork() = 0; 15726: virtual Status ContinueBackgroundWork() = 0; 15726: # 1574 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status EnableAutoCompaction( 15726: const std::vector& column_family_handles) = 0; 15726: 15726: 15726: 15726: 15726: 15726: virtual void DisableManualCompaction() = 0; 15726: 15726: 15726: 15726: 15726: 15726: virtual void EnableManualCompaction() = 0; 15726: # 1598 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status WaitForCompact( 15726: const WaitForCompactOptions& ) = 0; 15726: 15726: 15726: virtual int NumberLevels(ColumnFamilyHandle* column_family) = 0; 15726: virtual int NumberLevels() { return NumberLevels(DefaultColumnFamily()); } 15726: 15726: 15726: 15726: virtual int MaxMemCompactionLevel(ColumnFamilyHandle* column_family) = 0; 15726: virtual int MaxMemCompactionLevel() { 15726: return MaxMemCompactionLevel(DefaultColumnFamily()); 15726: } 15726: 15726: 15726: virtual int Level0StopWriteTrigger(ColumnFamilyHandle* column_family) = 0; 15726: virtual int Level0StopWriteTrigger() { 15726: return Level0StopWriteTrigger(DefaultColumnFamily()); 15726: } 15726: 15726: 15726: 15726: virtual const std::string& GetName() const = 0; 15726: 15726: 15726: virtual Env* GetEnv() const = 0; 15726: 15726: 15726: 15726: virtual FileSystem* GetFileSystem() const; 15726: 15726: 15726: 15726: 15726: 15726: virtual Options GetOptions(ColumnFamilyHandle* column_family) const = 0; 15726: virtual Options GetOptions() const { 15726: return GetOptions(DefaultColumnFamily()); 15726: } 15726: 15726: virtual DBOptions GetDBOptions() const = 0; 15726: 15726: 15726: 15726: 15726: virtual Status Flush(const FlushOptions& options, 15726: ColumnFamilyHandle* column_family) = 0; 15726: virtual Status Flush(const FlushOptions& options) { 15726: return Flush(options, DefaultColumnFamily()); 15726: } 15726: # 1656 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status Flush( 15726: const FlushOptions& options, 15726: const std::vector& column_families) = 0; 15726: 15726: 15726: 15726: 15726: 15726: virtual Status FlushWAL(bool ) { 15726: return Status::NotSupported("FlushWAL not implemented"); 15726: } 15726: # 1677 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status SyncWAL() = 0; 15726: # 1688 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status LockWAL() { 15726: return Status::NotSupported("LockWAL not implemented"); 15726: } 15726: 15726: 15726: 15726: 15726: virtual Status UnlockWAL() { 15726: return Status::NotSupported("UnlockWAL not implemented"); 15726: } 15726: 15726: 15726: virtual SequenceNumber GetLatestSequenceNumber() const = 0; 15726: 15726: 15726: 15726: 15726: 15726: virtual Status IncreaseFullHistoryTsLow(ColumnFamilyHandle* column_family, 15726: std::string ts_low) = 0; 15726: 15726: 15726: virtual Status GetFullHistoryTsLow(ColumnFamilyHandle* column_family, 15726: std::string* ts_low) = 0; 15726: 15726: 15726: 15726: 15726: 15726: virtual Status DisableFileDeletions() = 0; 15726: # 1730 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status EnableFileDeletions() = 0; 15726: # 1742 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status GetCreationTimeOfOldestFile(uint64_t* creation_time) = 0; 15726: # 1756 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status GetUpdatesSince( 15726: SequenceNumber seq_number, std::unique_ptr* iter, 15726: const TransactionLogIterator::ReadOptions& read_options = 15726: TransactionLogIterator::ReadOptions()) = 0; 15726: # 1774 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status DeleteFile(std::string name) = 0; 15726: 15726: 15726: 15726: 15726: 15726: virtual void GetLiveFilesMetaData( 15726: std::vector* ) {} 15726: 15726: 15726: 15726: 15726: 15726: virtual Status GetLiveFilesChecksumInfo(FileChecksumList* checksum_list) = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status GetLiveFilesStorageInfo( 15726: const LiveFilesStorageInfoOptions& opts, 15726: std::vector* files) = 0; 15726: 15726: 15726: 15726: virtual void GetColumnFamilyMetaData(ColumnFamilyHandle* , 15726: ColumnFamilyMetaData* ) {} 15726: 15726: 15726: void GetColumnFamilyMetaData(ColumnFamilyMetaData* metadata) { 15726: GetColumnFamilyMetaData(DefaultColumnFamily(), metadata); 15726: } 15726: 15726: 15726: 15726: virtual void GetAllColumnFamilyMetaData( 15726: std::vector* ) {} 15726: # 1829 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status GetLiveFiles(std::vector&, 15726: uint64_t* manifest_file_size, 15726: bool flush_memtable = true) = 0; 15726: 15726: 15726: virtual Status GetSortedWalFiles(VectorLogPtr& files) = 0; 15726: # 1843 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status GetCurrentWalFile( 15726: std::unique_ptr* current_log_file) = 0; 15726: # 1887 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status IngestExternalFile( 15726: ColumnFamilyHandle* column_family, 15726: const std::vector& external_files, 15726: const IngestExternalFileOptions& options) = 0; 15726: 15726: virtual Status IngestExternalFile( 15726: const std::vector& external_files, 15726: const IngestExternalFileOptions& options) { 15726: return IngestExternalFile(DefaultColumnFamily(), external_files, options); 15726: } 15726: # 1913 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status IngestExternalFiles( 15726: const std::vector& args) = 0; 15726: # 1933 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status CreateColumnFamilyWithImport( 15726: const ColumnFamilyOptions& options, const std::string& column_family_name, 15726: const ImportColumnFamilyOptions& import_options, 15726: const ExportImportFilesMetaData& metadata, ColumnFamilyHandle** handle) { 15726: const std::vector& metadatas{&metadata}; 15726: return CreateColumnFamilyWithImport(options, column_family_name, 15726: import_options, metadatas, handle); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status CreateColumnFamilyWithImport( 15726: const ColumnFamilyOptions& options, const std::string& column_family_name, 15726: const ImportColumnFamilyOptions& import_options, 15726: const std::vector& metadatas, 15726: ColumnFamilyHandle** handle) = 0; 15726: # 1966 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status ClipColumnFamily(ColumnFamilyHandle* column_family, 15726: const Slice& begin_key, 15726: const Slice& end_key) = 0; 15726: 15726: 15726: 15726: virtual Status VerifyFileChecksums(const ReadOptions& ) { 15726: return Status::NotSupported("File verification not supported"); 15726: } 15726: 15726: 15726: 15726: virtual Status VerifyChecksum(const ReadOptions& read_options) = 0; 15726: 15726: virtual Status VerifyChecksum() { return VerifyChecksum(ReadOptions()); } 15726: 15726: 15726: 15726: 15726: virtual Status GetDbIdentity(std::string& identity) const = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual Status GetDbSessionId(std::string& session_id) const = 0; 15726: 15726: 15726: virtual ColumnFamilyHandle* DefaultColumnFamily() const = 0; 15726: 15726: virtual Status GetPropertiesOfAllTables(ColumnFamilyHandle* column_family, 15726: TablePropertiesCollection* props) = 0; 15726: virtual Status GetPropertiesOfAllTables(TablePropertiesCollection* props) { 15726: return GetPropertiesOfAllTables(DefaultColumnFamily(), props); 15726: } 15726: virtual Status GetPropertiesOfTablesInRange( 15726: ColumnFamilyHandle* column_family, const Range* range, std::size_t n, 15726: TablePropertiesCollection* props) = 0; 15726: 15726: virtual Status SuggestCompactRange(ColumnFamilyHandle* , 15726: const Slice* , 15726: const Slice* ) { 15726: return Status::NotSupported("SuggestCompactRange() is not implemented."); 15726: } 15726: 15726: 15726: 15726: virtual Status PromoteL0(ColumnFamilyHandle* , 15726: int ) { 15726: return Status::NotSupported("PromoteL0() is not implemented."); 15726: } 15726: 15726: 15726: virtual Status StartTrace(const TraceOptions& , 15726: std::unique_ptr&& ) { 15726: return Status::NotSupported("StartTrace() is not implemented."); 15726: } 15726: 15726: virtual Status EndTrace() { 15726: return Status::NotSupported("EndTrace() is not implemented."); 15726: } 15726: 15726: 15726: virtual Status StartIOTrace(const TraceOptions& , 15726: std::unique_ptr&& ) { 15726: return Status::NotSupported("StartIOTrace() is not implemented."); 15726: } 15726: 15726: virtual Status EndIOTrace() { 15726: return Status::NotSupported("EndIOTrace() is not implemented."); 15726: } 15726: 15726: 15726: virtual Status StartBlockCacheTrace( 15726: const TraceOptions& , 15726: std::unique_ptr&& ) { 15726: return Status::NotSupported("StartBlockCacheTrace() is not implemented."); 15726: } 15726: 15726: virtual Status StartBlockCacheTrace( 15726: const BlockCacheTraceOptions& , 15726: std::unique_ptr&& ) { 15726: return Status::NotSupported("StartBlockCacheTrace() is not implemented."); 15726: } 15726: 15726: virtual Status EndBlockCacheTrace() { 15726: return Status::NotSupported("EndBlockCacheTrace() is not implemented."); 15726: } 15726: 15726: 15726: virtual Status NewDefaultReplayer( 15726: const std::vector& , 15726: std::unique_ptr&& , 15726: std::unique_ptr* ) { 15726: return Status::NotSupported("NewDefaultReplayer() is not implemented."); 15726: } 15726: 15726: 15726: virtual DB* GetRootDB() { return this; } 15726: 15726: 15726: 15726: 15726: virtual Status GetStatsHistory( 15726: uint64_t , uint64_t , 15726: std::unique_ptr* ) { 15726: return Status::NotSupported("GetStatsHistory() is not implemented."); 15726: } 15726: # 2086 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: virtual Status TryCatchUpWithPrimary() { 15726: return Status::NotSupported("Supported only by secondary instance"); 15726: } 15726: }; 15726: 15726: struct WriteStallStatsMapKeys { 15726: static const std::string& TotalStops(); 15726: static const std::string& TotalDelays(); 15726: 15726: static const std::string& CFL0FileCountLimitDelaysWithOngoingCompaction(); 15726: static const std::string& CFL0FileCountLimitStopsWithOngoingCompaction(); 15726: # 2105 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: static std::string CauseConditionCount(WriteStallCause cause, 15726: WriteStallCondition condition); 15726: }; 15726: 15726: 15726: inline DB::SizeApproximationFlags operator&(DB::SizeApproximationFlags lhs, 15726: DB::SizeApproximationFlags rhs) { 15726: return static_cast(static_cast(lhs) & 15726: static_cast(rhs)); 15726: } 15726: inline DB::SizeApproximationFlags operator|(DB::SizeApproximationFlags lhs, 15726: DB::SizeApproximationFlags rhs) { 15726: return static_cast(static_cast(lhs) | 15726: static_cast(rhs)); 15726: } 15726: 15726: inline Status DB::GetApproximateSizes(ColumnFamilyHandle* column_family, 15726: const Range* ranges, int n, 15726: uint64_t* sizes, 15726: SizeApproximationFlags include_flags) { 15726: SizeApproximationOptions options; 15726: options.include_memtables = 15726: ((include_flags & SizeApproximationFlags::INCLUDE_MEMTABLES) != 15726: SizeApproximationFlags::NONE); 15726: options.include_files = 15726: ((include_flags & SizeApproximationFlags::INCLUDE_FILES) != 15726: SizeApproximationFlags::NONE); 15726: return GetApproximateSizes(options, column_family, ranges, n, sizes); 15726: } 15726: 15726: 15726: 15726: Status DestroyDB(const std::string& name, const Options& options, 15726: const std::vector& column_families = 15726: std::vector()); 15726: # 2150 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/db.h" 15726: Status RepairDB(const std::string& dbname, const DBOptions& db_options, 15726: const std::vector& column_families); 15726: 15726: 15726: 15726: Status RepairDB(const std::string& dbname, const DBOptions& db_options, 15726: const std::vector& column_families, 15726: const ColumnFamilyOptions& unknown_cf_opts); 15726: 15726: 15726: 15726: Status RepairDB(const std::string& dbname, const Options& options); 15726: 15726: } 15726: # 13 "/build/reproducible-path/rocksdb-9.3.1/db/merge_context.h" 2 15726: 15726: 15726: namespace rocksdb { 15726: 15726: const std::vector empty_operand_list; 15726: 15726: 15726: 15726: 15726: 15726: class MergeContext { 15726: public: 15726: GetMergeOperandsOptions* get_merge_operands_options = nullptr; 15726: 15726: 15726: void Clear() { 15726: if (operand_list_) { 15726: operand_list_->clear(); 15726: copied_operands_->clear(); 15726: } 15726: } 15726: 15726: 15726: void PushOperand(const Slice& operand_slice, bool operand_pinned = false) { 15726: Initialize(); 15726: SetDirectionBackward(); 15726: 15726: if (operand_pinned) { 15726: operand_list_->push_back(operand_slice); 15726: } else { 15726: 15726: copied_operands_->emplace_back( 15726: new std::string(operand_slice.data(), operand_slice.size())); 15726: operand_list_->push_back(*copied_operands_->back()); 15726: } 15726: } 15726: 15726: 15726: void PushOperandBack(const Slice& operand_slice, 15726: bool operand_pinned = false) { 15726: Initialize(); 15726: SetDirectionForward(); 15726: 15726: if (operand_pinned) { 15726: operand_list_->push_back(operand_slice); 15726: } else { 15726: 15726: copied_operands_->emplace_back( 15726: new std::string(operand_slice.data(), operand_slice.size())); 15726: operand_list_->push_back(*copied_operands_->back()); 15726: } 15726: } 15726: 15726: 15726: size_t GetNumOperands() const { 15726: if (!operand_list_) { 15726: return 0; 15726: } 15726: return operand_list_->size(); 15726: } 15726: 15726: 15726: Slice GetOperand(int index) const { 15726: 15726: # 76 "/build/reproducible-path/rocksdb-9.3.1/db/merge_context.h" 3 4 15726: (static_cast ( 15726: # 76 "/build/reproducible-path/rocksdb-9.3.1/db/merge_context.h" 15726: operand_list_ 15726: # 76 "/build/reproducible-path/rocksdb-9.3.1/db/merge_context.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 76 "/build/reproducible-path/rocksdb-9.3.1/db/merge_context.h" 15726: "operand_list_" 15726: # 76 "/build/reproducible-path/rocksdb-9.3.1/db/merge_context.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 76 "/build/reproducible-path/rocksdb-9.3.1/db/merge_context.h" 15726: ; 15726: 15726: SetDirectionForward(); 15726: return (*operand_list_)[index]; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: const std::vector& GetOperands() const { 15726: return GetOperandsDirectionForward(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: const std::vector& GetOperandsDirectionForward() const { 15726: if (!operand_list_) { 15726: return empty_operand_list; 15726: } 15726: 15726: SetDirectionForward(); 15726: return *operand_list_; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: const std::vector& GetOperandsDirectionBackward() const { 15726: if (!operand_list_) { 15726: return empty_operand_list; 15726: } 15726: 15726: SetDirectionBackward(); 15726: return *operand_list_; 15726: } 15726: 15726: private: 15726: void Initialize() { 15726: if (!operand_list_) { 15726: operand_list_.reset(new std::vector()); 15726: copied_operands_.reset(new std::vector>()); 15726: } 15726: } 15726: 15726: void SetDirectionForward() const { 15726: if (operands_reversed_ == true) { 15726: std::reverse(operand_list_->begin(), operand_list_->end()); 15726: operands_reversed_ = false; 15726: } 15726: } 15726: 15726: void SetDirectionBackward() const { 15726: if (operands_reversed_ == false) { 15726: std::reverse(operand_list_->begin(), operand_list_->end()); 15726: operands_reversed_ = true; 15726: } 15726: } 15726: 15726: 15726: mutable std::unique_ptr> operand_list_; 15726: 15726: std::unique_ptr>> copied_operands_; 15726: mutable bool operands_reversed_ = true; 15726: }; 15726: 15726: } 15726: # 14 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 2 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/async_file_reader.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 19 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 2 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/single_thread_executor.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 22 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 2 15726: 15726: namespace rocksdb { 15726: class GetContext; 15726: class PinnableWideColumns; 15726: 15726: struct KeyContext { 15726: const Slice* key; 15726: LookupKey* lkey; 15726: Slice ukey_with_ts; 15726: Slice ukey_without_ts; 15726: Slice ikey; 15726: ColumnFamilyHandle* column_family; 15726: Status* s; 15726: MergeContext merge_context; 15726: SequenceNumber max_covering_tombstone_seq; 15726: bool key_exists; 15726: bool is_blob_index; 15726: void* cb_arg; 15726: PinnableSlice* value; 15726: PinnableWideColumns* columns; 15726: std::string* timestamp; 15726: GetContext* get_context; 15726: 15726: KeyContext(ColumnFamilyHandle* col_family, const Slice& user_key, 15726: PinnableSlice* val, PinnableWideColumns* cols, std::string* ts, 15726: Status* stat) 15726: : key(&user_key), 15726: lkey(nullptr), 15726: column_family(col_family), 15726: s(stat), 15726: max_covering_tombstone_seq(0), 15726: key_exists(false), 15726: is_blob_index(false), 15726: cb_arg(nullptr), 15726: value(val), 15726: columns(cols), 15726: timestamp(ts), 15726: get_context(nullptr) {} 15726: }; 15726: # 97 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: class MultiGetContext { 15726: public: 15726: 15726: 15726: 15726: 15726: static const int MAX_BATCH_SIZE = 32; 15726: 15726: 15726: 15726: using Mask = uint64_t; 15726: static_assert(MAX_BATCH_SIZE < sizeof(Mask) * 8); 15726: 15726: MultiGetContext(autovector* sorted_keys, 15726: size_t begin, size_t num_keys, SequenceNumber snapshot, 15726: const ReadOptions& read_opts, FileSystem* fs, 15726: Statistics* stats) 15726: : num_keys_(num_keys), 15726: value_mask_(0), 15726: value_size_(0), 15726: lookup_key_ptr_(reinterpret_cast(lookup_key_stack_buf)) 15726: 15726: 15726: 15726: 15726: 15726: { 15726: (void)fs; 15726: (void)stats; 15726: 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: (static_cast ( 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: num_keys <= MAX_BATCH_SIZE 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: "num_keys <= MAX_BATCH_SIZE" 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 126 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: ; 15726: if (num_keys > MAX_LOOKUP_KEYS_ON_STACK) { 15726: lookup_key_heap_buf.reset(new char[sizeof(LookupKey) * num_keys]); 15726: lookup_key_ptr_ = reinterpret_cast(lookup_key_heap_buf.get()); 15726: } 15726: 15726: for (size_t iter = 0; iter != num_keys_; ++iter) { 15726: 15726: sorted_keys_[iter] = (*sorted_keys)[begin + iter]; 15726: sorted_keys_[iter]->lkey = new (&lookup_key_ptr_[iter]) 15726: LookupKey(*sorted_keys_[iter]->key, snapshot, read_opts.timestamp); 15726: sorted_keys_[iter]->ukey_with_ts = sorted_keys_[iter]->lkey->user_key(); 15726: sorted_keys_[iter]->ukey_without_ts = StripTimestampFromUserKey( 15726: sorted_keys_[iter]->lkey->user_key(), 15726: read_opts.timestamp == nullptr ? 0 : read_opts.timestamp->size()); 15726: sorted_keys_[iter]->ikey = sorted_keys_[iter]->lkey->internal_key(); 15726: sorted_keys_[iter]->timestamp = (*sorted_keys)[begin + iter]->timestamp; 15726: sorted_keys_[iter]->get_context = 15726: (*sorted_keys)[begin + iter]->get_context; 15726: } 15726: } 15726: 15726: ~MultiGetContext() { 15726: for (size_t i = 0; i < num_keys_; ++i) { 15726: lookup_key_ptr_[i].~LookupKey(); 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: private: 15726: static const int MAX_LOOKUP_KEYS_ON_STACK = 16; 15726: alignas( 15726: alignof(LookupKey)) char lookup_key_stack_buf[sizeof(LookupKey) * 15726: MAX_LOOKUP_KEYS_ON_STACK]; 15726: std::array sorted_keys_; 15726: size_t num_keys_; 15726: Mask value_mask_; 15726: uint64_t value_size_; 15726: std::unique_ptr lookup_key_heap_buf; 15726: LookupKey* lookup_key_ptr_; 15726: 15726: 15726: 15726: 15726: 15726: public: 15726: # 186 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: class Range { 15726: public: 15726: 15726: 15726: 15726: class Iterator { 15726: public: 15726: 15726: using self_type = Iterator; 15726: using value_type = KeyContext; 15726: using reference = KeyContext&; 15726: using pointer = KeyContext*; 15726: using difference_type = int; 15726: using iterator_category = std::forward_iterator_tag; 15726: 15726: Iterator(const Range* range, size_t idx) 15726: : range_(range), ctx_(range->ctx_), index_(idx) { 15726: while (index_ < range_->end_ && 15726: (Mask{1} << index_) & 15726: (range_->ctx_->value_mask_ | range_->skip_mask_ | 15726: range_->invalid_mask_)) 15726: index_++; 15726: } 15726: 15726: Iterator(const Iterator&) = default; 15726: 15726: Iterator(const Iterator& other, const Range* range) 15726: : range_(range), ctx_(other.ctx_), index_(other.index_) { 15726: 15726: # 214 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: (static_cast ( 15726: # 214 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: range->ctx_ == other.ctx_ 15726: # 214 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 214 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: "range->ctx_ == other.ctx_" 15726: # 214 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 214 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: ; 15726: } 15726: Iterator& operator=(const Iterator&) = default; 15726: 15726: Iterator& operator++() { 15726: while (++index_ < range_->end_ && 15726: (Mask{1} << index_) & 15726: (range_->ctx_->value_mask_ | range_->skip_mask_ | 15726: range_->invalid_mask_)) 15726: ; 15726: return *this; 15726: } 15726: 15726: bool operator==(Iterator other) const { 15726: 15726: # 228 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: (static_cast ( 15726: # 228 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: range_->ctx_ == other.range_->ctx_ 15726: # 228 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 228 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: "range_->ctx_ == other.range_->ctx_" 15726: # 228 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 228 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: ; 15726: return index_ == other.index_; 15726: } 15726: 15726: bool operator!=(Iterator other) const { 15726: 15726: # 233 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: (static_cast ( 15726: # 233 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: range_->ctx_ == other.range_->ctx_ 15726: # 233 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 233 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: "range_->ctx_ == other.range_->ctx_" 15726: # 233 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 233 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: ; 15726: return index_ != other.index_; 15726: } 15726: 15726: KeyContext& operator*() { 15726: 15726: # 238 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: (static_cast ( 15726: # 238 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: index_ < range_->end_ && index_ >= range_->start_ 15726: # 238 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 238 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: "index_ < range_->end_ && index_ >= range_->start_" 15726: # 238 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 238 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: ; 15726: return *(ctx_->sorted_keys_[index_]); 15726: } 15726: 15726: KeyContext* operator->() { 15726: 15726: # 243 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: (static_cast ( 15726: # 243 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: index_ < range_->end_ && index_ >= range_->start_ 15726: # 243 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 243 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: "index_ < range_->end_ && index_ >= range_->start_" 15726: # 243 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 243 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: ; 15726: return ctx_->sorted_keys_[index_]; 15726: } 15726: 15726: size_t index() { return index_; } 15726: 15726: private: 15726: friend Range; 15726: const Range* range_; 15726: const MultiGetContext* ctx_; 15726: size_t index_; 15726: }; 15726: 15726: Range(const Range& mget_range, const Iterator& first, 15726: const Iterator& last) { 15726: ctx_ = mget_range.ctx_; 15726: if (first == last) { 15726: 15726: 15726: start_ = mget_range.start_; 15726: end_ = start_; 15726: } else { 15726: start_ = first.index_; 15726: end_ = last.index_; 15726: } 15726: skip_mask_ = mget_range.skip_mask_; 15726: invalid_mask_ = mget_range.invalid_mask_; 15726: 15726: # 270 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: (static_cast ( 15726: # 270 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: start_ < 64 15726: # 270 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 270 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: "start_ < 64" 15726: # 270 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 270 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: ; 15726: 15726: # 271 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: (static_cast ( 15726: # 271 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: end_ < 64 15726: # 271 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 271 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: "end_ < 64" 15726: # 271 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 271 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: ; 15726: } 15726: 15726: Range() = default; 15726: 15726: Iterator begin() const { return Iterator(this, start_); } 15726: 15726: Iterator end() const { return Iterator(this, end_); } 15726: 15726: bool empty() const { return RemainingMask() == 0; } 15726: 15726: void SkipIndex(size_t index) { skip_mask_ |= Mask{1} << index; } 15726: 15726: void SkipKey(const Iterator& iter) { SkipIndex(iter.index_); } 15726: 15726: bool IsKeySkipped(const Iterator& iter) const { 15726: return skip_mask_ & (Mask{1} << iter.index_); 15726: } 15726: 15726: 15726: 15726: void MarkKeyDone(Iterator& iter) { 15726: ctx_->value_mask_ |= (Mask{1} << iter.index_); 15726: } 15726: 15726: bool CheckKeyDone(Iterator& iter) const { 15726: return ctx_->value_mask_ & (Mask{1} << iter.index_); 15726: } 15726: 15726: uint64_t KeysLeft() const { return BitsSetToOne(RemainingMask()); } 15726: 15726: void AddSkipsFrom(const Range& other) { 15726: 15726: # 303 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: (static_cast ( 15726: # 303 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: ctx_ == other.ctx_ 15726: # 303 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 303 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: "ctx_ == other.ctx_" 15726: # 303 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 303 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: ; 15726: skip_mask_ |= other.skip_mask_; 15726: } 15726: 15726: uint64_t GetValueSize() { return ctx_->value_size_; } 15726: 15726: void AddValueSize(uint64_t value_size) { ctx_->value_size_ += value_size; } 15726: 15726: MultiGetContext* context() const { return ctx_; } 15726: 15726: Range Suffix(const Range& other) const { 15726: size_t other_last = other.FindLastRemaining(); 15726: size_t my_last = FindLastRemaining(); 15726: 15726: if (my_last > other_last) { 15726: return Range(*this, Iterator(this, other_last), 15726: Iterator(this, my_last)); 15726: } else { 15726: return Range(*this, begin(), begin()); 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: Range& operator+=(const Range& rhs) { 15726: 15726: # 330 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: (static_cast ( 15726: # 330 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: rhs.start_ >= end_ 15726: # 330 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 330 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: "rhs.start_ >= end_" 15726: # 330 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 330 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: ; 15726: 15726: if (end_ < rhs.start_) { 15726: invalid_mask_ |= RangeMask(end_, rhs.start_); 15726: skip_mask_ |= RangeMask(end_, rhs.start_); 15726: } 15726: start_ = std::min(start_, rhs.start_); 15726: end_ = std::max(end_, rhs.end_); 15726: skip_mask_ |= rhs.skip_mask_ & RangeMask(rhs.start_, rhs.end_); 15726: invalid_mask_ |= (rhs.invalid_mask_ | rhs.skip_mask_) & 15726: RangeMask(rhs.start_, rhs.end_); 15726: 15726: # 341 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: (static_cast ( 15726: # 341 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: start_ < 64 15726: # 341 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 341 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: "start_ < 64" 15726: # 341 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 341 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: ; 15726: 15726: # 342 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: (static_cast ( 15726: # 342 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: end_ < 64 15726: # 342 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 342 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: "end_ < 64" 15726: # 342 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 342 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: ; 15726: return *this; 15726: } 15726: 15726: 15726: 15726: 15726: Range& operator-=(const Range& rhs) { 15726: 15726: # 350 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: (static_cast ( 15726: # 350 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: start_ <= rhs.start_ && end_ >= rhs.end_ 15726: # 350 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 350 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: "start_ <= rhs.start_ && end_ >= rhs.end_" 15726: # 350 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 350 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: ; 15726: skip_mask_ |= (~rhs.skip_mask_ | rhs.invalid_mask_) & 15726: RangeMask(rhs.start_, rhs.end_); 15726: invalid_mask_ |= (~rhs.skip_mask_ | rhs.invalid_mask_) & 15726: RangeMask(rhs.start_, rhs.end_); 15726: return *this; 15726: } 15726: 15726: 15726: Range operator~() { 15726: Range res = *this; 15726: res.skip_mask_ = ~skip_mask_ & RangeMask(start_, end_); 15726: return res; 15726: } 15726: 15726: private: 15726: friend MultiGetContext; 15726: MultiGetContext* ctx_; 15726: size_t start_; 15726: size_t end_; 15726: Mask skip_mask_; 15726: Mask invalid_mask_; 15726: 15726: Range(MultiGetContext* ctx, size_t num_keys) 15726: : ctx_(ctx), 15726: start_(0), 15726: end_(num_keys), 15726: skip_mask_(0), 15726: invalid_mask_(0) { 15726: 15726: # 379 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: (static_cast ( 15726: # 379 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: num_keys < 64 15726: # 379 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 379 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: "num_keys < 64" 15726: # 379 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 379 "/build/reproducible-path/rocksdb-9.3.1/table/multiget_context.h" 15726: ; 15726: } 15726: 15726: static Mask RangeMask(size_t start, size_t end) { 15726: return (((Mask{1} << (end - start)) - 1) << start); 15726: } 15726: 15726: Mask RemainingMask() const { 15726: return (((Mask{1} << end_) - 1) & ~((Mask{1} << start_) - 1) & 15726: ~(ctx_->value_mask_ | skip_mask_)); 15726: } 15726: 15726: size_t FindLastRemaining() const { 15726: Mask mask = RemainingMask(); 15726: size_t index = (mask >>= start_) ? start_ : 0; 15726: while (mask >>= 1) { 15726: index++; 15726: } 15726: return index; 15726: } 15726: }; 15726: 15726: 15726: Range GetMultiGetRange() { return Range(this, num_keys_); } 15726: }; 15726: 15726: } 15726: # 23 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: class Iterator; 15726: struct ParsedInternalKey; 15726: class Slice; 15726: class Arena; 15726: struct ReadOptions; 15726: struct TableProperties; 15726: class GetContext; 15726: class MultiGetContext; 15726: 15726: 15726: 15726: 15726: 15726: 15726: class TableReader { 15726: public: 15726: virtual ~TableReader() {} 15726: # 57 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 15726: virtual InternalIterator* NewIterator( 15726: const ReadOptions& read_options, const SliceTransform* prefix_extractor, 15726: Arena* arena, bool skip_filters, TableReaderCaller caller, 15726: size_t compaction_readahead_size = 0, 15726: bool allow_unprepared_value = false) = 0; 15726: 15726: 15726: virtual FragmentedRangeTombstoneIterator* NewRangeTombstoneIterator( 15726: const ReadOptions& ) { 15726: return nullptr; 15726: } 15726: 15726: virtual FragmentedRangeTombstoneIterator* NewRangeTombstoneIterator( 15726: SequenceNumber , const Slice* ) { 15726: return nullptr; 15726: } 15726: # 85 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 15726: virtual uint64_t ApproximateOffsetOf(const ReadOptions& read_options, 15726: const Slice& key, 15726: TableReaderCaller caller) = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual uint64_t ApproximateSize(const ReadOptions& read_options, 15726: const Slice& start, const Slice& end, 15726: TableReaderCaller caller) = 0; 15726: 15726: struct Anchor { 15726: Anchor(const Slice& _user_key, size_t _range_size) 15726: : user_key(_user_key.ToStringView()), range_size(_range_size) {} 15726: std::string user_key; 15726: size_t range_size; 15726: }; 15726: 15726: 15726: 15726: virtual Status ApproximateKeyAnchors(const ReadOptions& , 15726: std::vector& ) { 15726: return Status::NotSupported("ApproximateKeyAnchors() not supported."); 15726: } 15726: 15726: 15726: 15726: virtual void SetupForCompaction() = 0; 15726: 15726: virtual std::shared_ptr GetTableProperties() const = 0; 15726: 15726: 15726: virtual void Prepare(const Slice& ) {} 15726: 15726: 15726: virtual size_t ApproximateMemoryUsage() const = 0; 15726: # 135 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 15726: virtual Status Get(const ReadOptions& readOptions, const Slice& key, 15726: GetContext* get_context, 15726: const SliceTransform* prefix_extractor, 15726: bool skip_filters = false) = 0; 15726: 15726: 15726: 15726: 15726: virtual Status MultiGetFilter(const ReadOptions& , 15726: const SliceTransform* , 15726: MultiGetContext::Range* ) { 15726: return Status::NotSupported(); 15726: } 15726: 15726: virtual void MultiGet(const ReadOptions& readOptions, 15726: const MultiGetContext::Range* mget_range, 15726: const SliceTransform* prefix_extractor, 15726: bool skip_filters = false) { 15726: for (auto iter = mget_range->begin(); iter != mget_range->end(); ++iter) { 15726: *iter->s = Get(readOptions, iter->ikey, iter->get_context, 15726: prefix_extractor, skip_filters); 15726: } 15726: } 15726: # 171 "/build/reproducible-path/rocksdb-9.3.1/table/table_reader.h" 15726: virtual Status Prefetch(const ReadOptions& , 15726: const Slice* begin = nullptr, 15726: const Slice* end = nullptr) { 15726: (void)begin; 15726: (void)end; 15726: 15726: 15726: return Status::OK(); 15726: } 15726: 15726: 15726: virtual Status DumpTable(WritableFile* ) { 15726: return Status::NotSupported("DumpTable() not supported"); 15726: } 15726: 15726: 15726: virtual Status VerifyChecksum(const ReadOptions& , 15726: TableReaderCaller ) { 15726: return Status::NotSupported("VerifyChecksum() not supported"); 15726: } 15726: }; 15726: 15726: } 15726: # 27 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/unique_id_impl.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/unique_id.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: # 36 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/unique_id.h" 15726: Status GetUniqueIdFromTableProperties(const TableProperties &props, 15726: std::string *out_id); 15726: # 47 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/unique_id.h" 15726: Status GetExtendedUniqueIdFromTableProperties(const TableProperties &props, 15726: std::string *out_id); 15726: 15726: 15726: 15726: 15726: std::string UniqueIdToHumanString(const std::string &id); 15726: 15726: } 15726: # 11 "/build/reproducible-path/rocksdb-9.3.1/table/unique_id_impl.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: 15726: using UniqueId64x2 = std::array; 15726: 15726: 15726: constexpr UniqueId64x2 kNullUniqueId64x2 = {}; 15726: 15726: 15726: 15726: using UniqueId64x3 = std::array; 15726: 15726: 15726: constexpr UniqueId64x3 kNullUniqueId64x3 = {}; 15726: 15726: 15726: struct UniqueIdPtr { 15726: uint64_t *ptr = nullptr; 15726: bool extended = false; 15726: 15726: UniqueIdPtr(UniqueId64x2 *id) { 15726: ptr = (*id).data(); 15726: extended = false; 15726: } 15726: UniqueIdPtr(UniqueId64x3 *id) { 15726: ptr = (*id).data(); 15726: extended = true; 15726: } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: Status GetSstInternalUniqueId(const std::string &db_id, 15726: const std::string &db_session_id, 15726: uint64_t file_number, UniqueIdPtr out, 15726: bool force = false); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: void InternalUniqueIdToExternal(UniqueIdPtr in_out); 15726: 15726: 15726: 15726: void ExternalUniqueIdToInternal(UniqueIdPtr in_out); 15726: 15726: 15726: std::string EncodeUniqueIdBytes(UniqueIdPtr in); 15726: 15726: 15726: Status DecodeUniqueIdBytes(const std::string &unique_id, UniqueIdPtr out); 15726: 15726: 15726: 15726: std::string InternalUniqueIdToHumanString(UniqueIdPtr in); 15726: # 85 "/build/reproducible-path/rocksdb-9.3.1/table/unique_id_impl.h" 15726: std::string EncodeSessionId(uint64_t upper, uint64_t lower); 15726: 15726: 15726: 15726: 15726: Status DecodeSessionId(const std::string &db_session_id, uint64_t *upper, 15726: uint64_t *lower); 15726: 15726: } 15726: # 28 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 2 15726: 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: 15726: enum Tag : uint32_t { 15726: kComparator = 1, 15726: kLogNumber = 2, 15726: kNextFileNumber = 3, 15726: kLastSequence = 4, 15726: kCompactCursor = 5, 15726: kDeletedFile = 6, 15726: kNewFile = 7, 15726: 15726: kPrevLogNumber = 9, 15726: kMinLogNumberToKeep = 10, 15726: 15726: 15726: kNewFile2 = 100, 15726: kNewFile3 = 102, 15726: kNewFile4 = 103, 15726: kColumnFamily = 200, 15726: kColumnFamilyAdd = 201, 15726: kColumnFamilyDrop = 202, 15726: kMaxColumnFamily = 203, 15726: 15726: kInAtomicGroup = 300, 15726: 15726: kBlobFileAddition = 400, 15726: kBlobFileGarbage, 15726: 15726: 15726: kTagSafeIgnoreMask = 1 << 13, 15726: 15726: 15726: kDbId, 15726: kBlobFileAddition_DEPRECATED, 15726: kBlobFileGarbage_DEPRECATED, 15726: kWalAddition, 15726: kWalDeletion, 15726: kFullHistoryTsLow, 15726: kWalAddition2, 15726: kWalDeletion2, 15726: kPersistUserDefinedTimestamps, 15726: }; 15726: 15726: enum NewFileCustomTag : uint32_t { 15726: kTerminate = 1, 15726: kNeedCompaction = 2, 15726: 15726: 15726: 15726: kMinLogNumberToKeepHack = 3, 15726: kOldestBlobFileNumber = 4, 15726: kOldestAncesterTime = 5, 15726: kFileCreationTime = 6, 15726: kFileChecksum = 7, 15726: kFileChecksumFuncName = 8, 15726: kTemperature = 9, 15726: kMinTimestamp = 10, 15726: kMaxTimestamp = 11, 15726: kUniqueId = 12, 15726: kEpochNumber = 13, 15726: kCompensatedRangeDeletionSize = 14, 15726: kTailSize = 15, 15726: kUserDefinedTimestampsPersisted = 16, 15726: 15726: 15726: 15726: kCustomTagNonSafeIgnoreMask = 1 << 6, 15726: 15726: 15726: kPathId, 15726: }; 15726: 15726: class VersionSet; 15726: 15726: constexpr uint64_t kFileNumberMask = 0x3FFFFFFFFFFFFFFF; 15726: constexpr uint64_t kUnknownOldestAncesterTime = 0; 15726: constexpr uint64_t kUnknownFileCreationTime = 0; 15726: constexpr uint64_t kUnknownEpochNumber = 0; 15726: 15726: 15726: constexpr uint64_t kReservedEpochNumberForFileIngestedBehind = 1; 15726: 15726: uint64_t PackFileNumberAndPathId(uint64_t number, uint64_t path_id); 15726: 15726: 15726: 15726: 15726: 15726: 15726: struct FileDescriptor { 15726: 15726: TableReader* table_reader; 15726: uint64_t packed_number_and_path_id; 15726: uint64_t file_size; 15726: SequenceNumber smallest_seqno; 15726: SequenceNumber largest_seqno; 15726: 15726: FileDescriptor() : FileDescriptor(0, 0, 0) {} 15726: 15726: FileDescriptor(uint64_t number, uint32_t path_id, uint64_t _file_size) 15726: : FileDescriptor(number, path_id, _file_size, kMaxSequenceNumber, 0) {} 15726: 15726: FileDescriptor(uint64_t number, uint32_t path_id, uint64_t _file_size, 15726: SequenceNumber _smallest_seqno, SequenceNumber _largest_seqno) 15726: : table_reader(nullptr), 15726: packed_number_and_path_id(PackFileNumberAndPathId(number, path_id)), 15726: file_size(_file_size), 15726: smallest_seqno(_smallest_seqno), 15726: largest_seqno(_largest_seqno) {} 15726: 15726: FileDescriptor(const FileDescriptor& fd) { *this = fd; } 15726: 15726: FileDescriptor& operator=(const FileDescriptor& fd) { 15726: table_reader = fd.table_reader; 15726: packed_number_and_path_id = fd.packed_number_and_path_id; 15726: file_size = fd.file_size; 15726: smallest_seqno = fd.smallest_seqno; 15726: largest_seqno = fd.largest_seqno; 15726: return *this; 15726: } 15726: 15726: uint64_t GetNumber() const { 15726: return packed_number_and_path_id & kFileNumberMask; 15726: } 15726: uint32_t GetPathId() const { 15726: return static_cast(packed_number_and_path_id / 15726: (kFileNumberMask + 1)); 15726: } 15726: uint64_t GetFileSize() const { return file_size; } 15726: }; 15726: 15726: struct FileSampledStats { 15726: FileSampledStats() : num_reads_sampled(0) {} 15726: FileSampledStats(const FileSampledStats& other) { *this = other; } 15726: FileSampledStats& operator=(const FileSampledStats& other) { 15726: num_reads_sampled = other.num_reads_sampled.load(); 15726: return *this; 15726: } 15726: 15726: 15726: mutable std::atomic num_reads_sampled; 15726: }; 15726: 15726: struct FileMetaData { 15726: FileDescriptor fd; 15726: InternalKey smallest; 15726: InternalKey largest; 15726: 15726: 15726: Cache::Handle* table_reader_handle = nullptr; 15726: 15726: FileSampledStats stats; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: uint64_t compensated_file_size = 0; 15726: 15726: 15726: uint64_t num_entries = 15726: 0; 15726: 15726: uint64_t num_deletions = 0; 15726: uint64_t raw_key_size = 0; 15726: uint64_t raw_value_size = 0; 15726: uint64_t num_range_deletions = 0; 15726: 15726: 15726: 15726: uint64_t compensated_range_deletion_size = 0; 15726: 15726: int refs = 0; 15726: 15726: bool being_compacted = false; 15726: bool init_stats_from_file = false; 15726: 15726: 15726: bool marked_for_compaction = false; 15726: 15726: Temperature temperature = Temperature::kUnknown; 15726: 15726: 15726: 15726: uint64_t oldest_blob_file_number = kInvalidBlobFileNumber; 15726: # 232 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: uint64_t oldest_ancester_time = kUnknownOldestAncesterTime; 15726: 15726: 15726: uint64_t file_creation_time = kUnknownFileCreationTime; 15726: 15726: 15726: 15726: 15726: 15726: uint64_t epoch_number = kUnknownEpochNumber; 15726: 15726: 15726: std::string file_checksum = kUnknownFileChecksum; 15726: 15726: 15726: std::string file_checksum_func_name = kUnknownFileChecksumFuncName; 15726: 15726: 15726: UniqueId64x2 unique_id{}; 15726: 15726: 15726: 15726: uint64_t tail_size = 0; 15726: 15726: 15726: 15726: 15726: bool user_defined_timestamps_persisted = true; 15726: 15726: FileMetaData() = default; 15726: 15726: FileMetaData(uint64_t file, uint32_t file_path_id, uint64_t file_size, 15726: const InternalKey& smallest_key, const InternalKey& largest_key, 15726: const SequenceNumber& smallest_seq, 15726: const SequenceNumber& largest_seq, bool marked_for_compact, 15726: Temperature _temperature, uint64_t oldest_blob_file, 15726: uint64_t _oldest_ancester_time, uint64_t _file_creation_time, 15726: uint64_t _epoch_number, const std::string& _file_checksum, 15726: const std::string& _file_checksum_func_name, 15726: UniqueId64x2 _unique_id, 15726: const uint64_t _compensated_range_deletion_size, 15726: uint64_t _tail_size, bool _user_defined_timestamps_persisted) 15726: : fd(file, file_path_id, file_size, smallest_seq, largest_seq), 15726: smallest(smallest_key), 15726: largest(largest_key), 15726: compensated_range_deletion_size(_compensated_range_deletion_size), 15726: marked_for_compaction(marked_for_compact), 15726: temperature(_temperature), 15726: oldest_blob_file_number(oldest_blob_file), 15726: oldest_ancester_time(_oldest_ancester_time), 15726: file_creation_time(_file_creation_time), 15726: epoch_number(_epoch_number), 15726: file_checksum(_file_checksum), 15726: file_checksum_func_name(_file_checksum_func_name), 15726: unique_id(std::move(_unique_id)), 15726: tail_size(_tail_size), 15726: user_defined_timestamps_persisted(_user_defined_timestamps_persisted) { 15726: rocksdb::SyncPoint::GetInstance()->Process("FileMetaData::FileMetaData", this); 15726: } 15726: 15726: 15726: 15726: Status UpdateBoundaries(const Slice& key, const Slice& value, 15726: SequenceNumber seqno, ValueType value_type); 15726: 15726: 15726: 15726: void UpdateBoundariesForRange(const InternalKey& start, 15726: const InternalKey& end, SequenceNumber seqno, 15726: const InternalKeyComparator& icmp) { 15726: if (smallest.size() == 0 || icmp.Compare(start, smallest) < 0) { 15726: smallest = start; 15726: } 15726: if (largest.size() == 0 || icmp.Compare(largest, end) < 0) { 15726: largest = end; 15726: } 15726: 15726: # 308 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: (static_cast ( 15726: # 308 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: icmp.Compare(smallest, largest) <= 0 15726: # 308 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 308 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: "icmp.Compare(smallest, largest) <= 0" 15726: # 308 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 308 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: ; 15726: fd.smallest_seqno = std::min(fd.smallest_seqno, seqno); 15726: fd.largest_seqno = std::max(fd.largest_seqno, seqno); 15726: } 15726: 15726: 15726: 15726: 15726: uint64_t TryGetOldestAncesterTime() { 15726: if (oldest_ancester_time != kUnknownOldestAncesterTime) { 15726: return oldest_ancester_time; 15726: } else if (fd.table_reader != nullptr && 15726: fd.table_reader->GetTableProperties() != nullptr) { 15726: return fd.table_reader->GetTableProperties()->creation_time; 15726: } 15726: return kUnknownOldestAncesterTime; 15726: } 15726: 15726: uint64_t TryGetFileCreationTime() { 15726: if (file_creation_time != kUnknownFileCreationTime) { 15726: return file_creation_time; 15726: } else if (fd.table_reader != nullptr && 15726: fd.table_reader->GetTableProperties() != nullptr) { 15726: return fd.table_reader->GetTableProperties()->file_creation_time; 15726: } 15726: return kUnknownFileCreationTime; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_t ApproximateMemoryUsage() const { 15726: size_t usage = 0; 15726: 15726: usage += malloc_usable_size(const_cast(this)); 15726: 15726: 15726: 15726: usage += smallest.size() + largest.size() + file_checksum.size() + 15726: file_checksum_func_name.size(); 15726: return usage; 15726: } 15726: }; 15726: 15726: 15726: 15726: 15726: struct FdWithKeyRange { 15726: FileDescriptor fd; 15726: FileMetaData* file_metadata; 15726: Slice smallest_key; 15726: Slice largest_key; 15726: 15726: FdWithKeyRange() 15726: : fd(), file_metadata(nullptr), smallest_key(), largest_key() {} 15726: 15726: FdWithKeyRange(FileDescriptor _fd, Slice _smallest_key, Slice _largest_key, 15726: FileMetaData* _file_metadata) 15726: : fd(_fd), 15726: file_metadata(_file_metadata), 15726: smallest_key(_smallest_key), 15726: largest_key(_largest_key) {} 15726: }; 15726: 15726: 15726: 15726: struct LevelFilesBrief { 15726: size_t num_files; 15726: FdWithKeyRange* files; 15726: LevelFilesBrief() { 15726: num_files = 0; 15726: files = nullptr; 15726: } 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: class VersionEdit { 15726: public: 15726: void Clear(); 15726: 15726: void SetDBId(const std::string& db_id) { 15726: has_db_id_ = true; 15726: db_id_ = db_id; 15726: } 15726: bool HasDbId() const { return has_db_id_; } 15726: const std::string& GetDbId() const { return db_id_; } 15726: 15726: void SetComparatorName(const Slice& name) { 15726: has_comparator_ = true; 15726: comparator_ = name.ToString(); 15726: } 15726: bool HasComparatorName() const { return has_comparator_; } 15726: const std::string& GetComparatorName() const { return comparator_; } 15726: 15726: void SetPersistUserDefinedTimestamps(bool persist_user_defined_timestamps) { 15726: has_persist_user_defined_timestamps_ = true; 15726: persist_user_defined_timestamps_ = persist_user_defined_timestamps; 15726: } 15726: bool HasPersistUserDefinedTimestamps() const { 15726: return has_persist_user_defined_timestamps_; 15726: } 15726: bool GetPersistUserDefinedTimestamps() const { 15726: return persist_user_defined_timestamps_; 15726: } 15726: 15726: void SetLogNumber(uint64_t num) { 15726: has_log_number_ = true; 15726: log_number_ = num; 15726: } 15726: bool HasLogNumber() const { return has_log_number_; } 15726: uint64_t GetLogNumber() const { return log_number_; } 15726: 15726: void SetPrevLogNumber(uint64_t num) { 15726: has_prev_log_number_ = true; 15726: prev_log_number_ = num; 15726: } 15726: bool HasPrevLogNumber() const { return has_prev_log_number_; } 15726: uint64_t GetPrevLogNumber() const { return prev_log_number_; } 15726: 15726: void SetNextFile(uint64_t num) { 15726: has_next_file_number_ = true; 15726: next_file_number_ = num; 15726: } 15726: bool HasNextFile() const { return has_next_file_number_; } 15726: uint64_t GetNextFile() const { return next_file_number_; } 15726: 15726: void SetMaxColumnFamily(uint32_t max_column_family) { 15726: has_max_column_family_ = true; 15726: max_column_family_ = max_column_family; 15726: } 15726: bool HasMaxColumnFamily() const { return has_max_column_family_; } 15726: uint32_t GetMaxColumnFamily() const { return max_column_family_; } 15726: 15726: void SetMinLogNumberToKeep(uint64_t num) { 15726: has_min_log_number_to_keep_ = true; 15726: min_log_number_to_keep_ = num; 15726: } 15726: bool HasMinLogNumberToKeep() const { return has_min_log_number_to_keep_; } 15726: uint64_t GetMinLogNumberToKeep() const { return min_log_number_to_keep_; } 15726: 15726: void SetLastSequence(SequenceNumber seq) { 15726: has_last_sequence_ = true; 15726: last_sequence_ = seq; 15726: } 15726: bool HasLastSequence() const { return has_last_sequence_; } 15726: SequenceNumber GetLastSequence() const { return last_sequence_; } 15726: 15726: 15726: void DeleteFile(int level, uint64_t file) { 15726: deleted_files_.emplace(level, file); 15726: } 15726: 15726: 15726: using DeletedFiles = std::set>; 15726: const DeletedFiles& GetDeletedFiles() const { return deleted_files_; } 15726: 15726: 15726: 15726: 15726: 15726: void AddFile(int level, uint64_t file, uint32_t file_path_id, 15726: uint64_t file_size, const InternalKey& smallest, 15726: const InternalKey& largest, const SequenceNumber& smallest_seqno, 15726: const SequenceNumber& largest_seqno, bool marked_for_compaction, 15726: Temperature temperature, uint64_t oldest_blob_file_number, 15726: uint64_t oldest_ancester_time, uint64_t file_creation_time, 15726: uint64_t epoch_number, const std::string& file_checksum, 15726: const std::string& file_checksum_func_name, 15726: const UniqueId64x2& unique_id, 15726: const uint64_t compensated_range_deletion_size, 15726: uint64_t tail_size, bool user_defined_timestamps_persisted) { 15726: 15726: # 485 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: (static_cast ( 15726: # 485 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: smallest_seqno <= largest_seqno 15726: # 485 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 485 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: "smallest_seqno <= largest_seqno" 15726: # 485 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 485 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: ; 15726: new_files_.emplace_back( 15726: level, 15726: FileMetaData(file, file_path_id, file_size, smallest, largest, 15726: smallest_seqno, largest_seqno, marked_for_compaction, 15726: temperature, oldest_blob_file_number, oldest_ancester_time, 15726: file_creation_time, epoch_number, file_checksum, 15726: file_checksum_func_name, unique_id, 15726: compensated_range_deletion_size, tail_size, 15726: user_defined_timestamps_persisted)); 15726: files_to_quarantine_.push_back(file); 15726: if (!HasLastSequence() || largest_seqno > GetLastSequence()) { 15726: SetLastSequence(largest_seqno); 15726: } 15726: } 15726: 15726: void AddFile(int level, const FileMetaData& f) { 15726: 15726: # 502 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: (static_cast ( 15726: # 502 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: f.fd.smallest_seqno <= f.fd.largest_seqno 15726: # 502 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 502 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: "f.fd.smallest_seqno <= f.fd.largest_seqno" 15726: # 502 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 502 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: ; 15726: new_files_.emplace_back(level, f); 15726: files_to_quarantine_.push_back(f.fd.GetNumber()); 15726: if (!HasLastSequence() || f.fd.largest_seqno > GetLastSequence()) { 15726: SetLastSequence(f.fd.largest_seqno); 15726: } 15726: } 15726: 15726: 15726: using NewFiles = std::vector>; 15726: const NewFiles& GetNewFiles() const { return new_files_; } 15726: 15726: NewFiles& GetMutableNewFiles() { return new_files_; } 15726: 15726: 15726: using CompactCursors = std::vector>; 15726: const CompactCursors& GetCompactCursors() const { return compact_cursors_; } 15726: void AddCompactCursor(int level, const InternalKey& cursor) { 15726: compact_cursors_.push_back(std::make_pair(level, cursor)); 15726: } 15726: void SetCompactCursors( 15726: const std::vector& compact_cursors_by_level) { 15726: compact_cursors_.clear(); 15726: compact_cursors_.reserve(compact_cursors_by_level.size()); 15726: for (int i = 0; i < (int)compact_cursors_by_level.size(); i++) { 15726: if (compact_cursors_by_level[i].Valid()) { 15726: compact_cursors_.push_back( 15726: std::make_pair(i, compact_cursors_by_level[i])); 15726: } 15726: } 15726: } 15726: 15726: 15726: void AddBlobFile(uint64_t blob_file_number, uint64_t total_blob_count, 15726: uint64_t total_blob_bytes, std::string checksum_method, 15726: std::string checksum_value) { 15726: blob_file_additions_.emplace_back( 15726: blob_file_number, total_blob_count, total_blob_bytes, 15726: std::move(checksum_method), std::move(checksum_value)); 15726: files_to_quarantine_.push_back(blob_file_number); 15726: } 15726: 15726: void AddBlobFile(BlobFileAddition blob_file_addition) { 15726: blob_file_additions_.emplace_back(std::move(blob_file_addition)); 15726: files_to_quarantine_.push_back( 15726: blob_file_additions_.back().GetBlobFileNumber()); 15726: } 15726: 15726: 15726: using BlobFileAdditions = std::vector; 15726: const BlobFileAdditions& GetBlobFileAdditions() const { 15726: return blob_file_additions_; 15726: } 15726: 15726: void SetBlobFileAdditions(BlobFileAdditions blob_file_additions) { 15726: 15726: # 557 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: (static_cast ( 15726: # 557 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: blob_file_additions_.empty() 15726: # 557 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 557 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: "blob_file_additions_.empty()" 15726: # 557 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 557 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: ; 15726: blob_file_additions_ = std::move(blob_file_additions); 15726: std::for_each( 15726: blob_file_additions_.begin(), blob_file_additions_.end(), 15726: [&](const BlobFileAddition& blob_file) { 15726: files_to_quarantine_.push_back(blob_file.GetBlobFileNumber()); 15726: }); 15726: } 15726: 15726: 15726: 15726: void AddBlobFileGarbage(uint64_t blob_file_number, 15726: uint64_t garbage_blob_count, 15726: uint64_t garbage_blob_bytes) { 15726: blob_file_garbages_.emplace_back(blob_file_number, garbage_blob_count, 15726: garbage_blob_bytes); 15726: } 15726: 15726: void AddBlobFileGarbage(BlobFileGarbage blob_file_garbage) { 15726: blob_file_garbages_.emplace_back(std::move(blob_file_garbage)); 15726: } 15726: 15726: 15726: using BlobFileGarbages = std::vector; 15726: const BlobFileGarbages& GetBlobFileGarbages() const { 15726: return blob_file_garbages_; 15726: } 15726: 15726: void SetBlobFileGarbages(BlobFileGarbages blob_file_garbages) { 15726: 15726: # 586 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: (static_cast ( 15726: # 586 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: blob_file_garbages_.empty() 15726: # 586 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 586 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: "blob_file_garbages_.empty()" 15726: # 586 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 586 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: ; 15726: blob_file_garbages_ = std::move(blob_file_garbages); 15726: } 15726: 15726: 15726: 15726: void AddWal(WalNumber number, WalMetadata metadata = WalMetadata()) { 15726: 15726: # 593 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: (static_cast ( 15726: # 593 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: NumEntries() == wal_additions_.size() 15726: # 593 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 593 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: "NumEntries() == wal_additions_.size()" 15726: # 593 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 593 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: ; 15726: wal_additions_.emplace_back(number, std::move(metadata)); 15726: } 15726: 15726: 15726: const WalAdditions& GetWalAdditions() const { return wal_additions_; } 15726: 15726: bool IsWalAddition() const { return !wal_additions_.empty(); } 15726: 15726: 15726: 15726: void DeleteWalsBefore(WalNumber number) { 15726: 15726: # 605 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: (static_cast ( 15726: # 605 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: (NumEntries() == 1) == !wal_deletion_.IsEmpty() 15726: # 605 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 605 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: "(NumEntries() == 1) == !wal_deletion_.IsEmpty()" 15726: # 605 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 605 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: ; 15726: wal_deletion_ = WalDeletion(number); 15726: } 15726: 15726: const WalDeletion& GetWalDeletion() const { return wal_deletion_; } 15726: 15726: bool IsWalDeletion() const { return !wal_deletion_.IsEmpty(); } 15726: 15726: bool IsWalManipulation() const { 15726: size_t entries = NumEntries(); 15726: return (entries > 0) && ((entries == wal_additions_.size()) || 15726: (entries == !wal_deletion_.IsEmpty())); 15726: } 15726: 15726: 15726: size_t NumEntries() const { 15726: return new_files_.size() + deleted_files_.size() + 15726: blob_file_additions_.size() + blob_file_garbages_.size() + 15726: wal_additions_.size() + !wal_deletion_.IsEmpty(); 15726: } 15726: 15726: void SetColumnFamily(uint32_t column_family_id) { 15726: column_family_ = column_family_id; 15726: } 15726: uint32_t GetColumnFamily() const { return column_family_; } 15726: 15726: const std::string& GetColumnFamilyName() const { return column_family_name_; } 15726: 15726: 15726: void AddColumnFamily(const std::string& name) { 15726: 15726: # 635 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: (static_cast ( 15726: # 635 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: !is_column_family_drop_ 15726: # 635 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 635 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: "!is_column_family_drop_" 15726: # 635 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 635 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: ; 15726: 15726: # 636 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: (static_cast ( 15726: # 636 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: !is_column_family_add_ 15726: # 636 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 636 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: "!is_column_family_add_" 15726: # 636 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 636 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: ; 15726: 15726: # 637 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: (static_cast ( 15726: # 637 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: NumEntries() == 0 15726: # 637 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 637 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: "NumEntries() == 0" 15726: # 637 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 637 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: ; 15726: is_column_family_add_ = true; 15726: column_family_name_ = name; 15726: } 15726: 15726: 15726: void DropColumnFamily() { 15726: 15726: # 644 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: (static_cast ( 15726: # 644 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: !is_column_family_drop_ 15726: # 644 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 644 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: "!is_column_family_drop_" 15726: # 644 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 644 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: ; 15726: 15726: # 645 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: (static_cast ( 15726: # 645 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: !is_column_family_add_ 15726: # 645 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 645 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: "!is_column_family_add_" 15726: # 645 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 645 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: ; 15726: 15726: # 646 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: (static_cast ( 15726: # 646 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: NumEntries() == 0 15726: # 646 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 646 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: "NumEntries() == 0" 15726: # 646 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 646 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: ; 15726: is_column_family_drop_ = true; 15726: } 15726: 15726: bool IsColumnFamilyManipulation() const { 15726: return is_column_family_add_ || is_column_family_drop_; 15726: } 15726: 15726: bool IsColumnFamilyAdd() const { return is_column_family_add_; } 15726: 15726: bool IsColumnFamilyDrop() const { return is_column_family_drop_; } 15726: 15726: void MarkAtomicGroup(uint32_t remaining_entries) { 15726: is_in_atomic_group_ = true; 15726: remaining_entries_ = remaining_entries; 15726: } 15726: bool IsInAtomicGroup() const { return is_in_atomic_group_; } 15726: void SetRemainingEntries(uint32_t remaining_entries) { 15726: remaining_entries_ = remaining_entries; 15726: } 15726: uint32_t GetRemainingEntries() const { return remaining_entries_; } 15726: 15726: bool HasFullHistoryTsLow() const { return !full_history_ts_low_.empty(); } 15726: const std::string& GetFullHistoryTsLow() const { 15726: 15726: # 670 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: (static_cast ( 15726: # 670 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: HasFullHistoryTsLow() 15726: # 670 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 670 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: "HasFullHistoryTsLow()" 15726: # 670 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 670 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: ; 15726: return full_history_ts_low_; 15726: } 15726: void SetFullHistoryTsLow(std::string full_history_ts_low) { 15726: 15726: # 674 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: (static_cast ( 15726: # 674 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: !full_history_ts_low.empty() 15726: # 674 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 674 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: "!full_history_ts_low.empty()" 15726: # 674 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 674 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: ; 15726: full_history_ts_low_ = std::move(full_history_ts_low); 15726: } 15726: # 688 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: bool EncodeTo(std::string* dst, 15726: std::optional ts_sz = std::nullopt) const; 15726: Status DecodeFrom(const Slice& src); 15726: 15726: const autovector* GetFilesToQuarantineIfCommitFail() const { 15726: return &files_to_quarantine_; 15726: } 15726: 15726: std::string DebugString(bool hex_key = false) const; 15726: std::string DebugJSON(int edit_num, bool hex_key = false) const; 15726: 15726: private: 15726: bool GetLevel(Slice* input, int* level, const char** msg); 15726: 15726: const char* DecodeNewFile4From(Slice* input); 15726: 15726: 15726: 15726: 15726: void EncodeFileBoundaries(std::string* dst, const FileMetaData& meta, 15726: size_t ts_sz) const; 15726: 15726: int max_level_ = 0; 15726: std::string db_id_; 15726: std::string comparator_; 15726: uint64_t log_number_ = 0; 15726: uint64_t prev_log_number_ = 0; 15726: uint64_t next_file_number_ = 0; 15726: uint32_t max_column_family_ = 0; 15726: 15726: uint64_t min_log_number_to_keep_ = 0; 15726: SequenceNumber last_sequence_ = 0; 15726: bool has_db_id_ = false; 15726: bool has_comparator_ = false; 15726: bool has_log_number_ = false; 15726: bool has_prev_log_number_ = false; 15726: bool has_next_file_number_ = false; 15726: bool has_max_column_family_ = false; 15726: bool has_min_log_number_to_keep_ = false; 15726: bool has_last_sequence_ = false; 15726: bool has_persist_user_defined_timestamps_ = false; 15726: 15726: 15726: CompactCursors compact_cursors_; 15726: 15726: DeletedFiles deleted_files_; 15726: NewFiles new_files_; 15726: 15726: BlobFileAdditions blob_file_additions_; 15726: BlobFileGarbages blob_file_garbages_; 15726: 15726: WalAdditions wal_additions_; 15726: WalDeletion wal_deletion_; 15726: 15726: 15726: 15726: uint32_t column_family_ = 0; 15726: 15726: 15726: 15726: bool is_column_family_drop_ = false; 15726: bool is_column_family_add_ = false; 15726: std::string column_family_name_; 15726: 15726: bool is_in_atomic_group_ = false; 15726: uint32_t remaining_entries_ = 0; 15726: 15726: std::string full_history_ts_low_; 15726: bool persist_user_defined_timestamps_ = true; 15726: # 766 "/build/reproducible-path/rocksdb-9.3.1/db/version_edit.h" 15726: autovector files_to_quarantine_; 15726: }; 15726: 15726: } 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 15726: 15726: # 21 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/thread_local.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/util/thread_local.h" 15726: 15726: # 21 "/build/reproducible-path/rocksdb-9.3.1/util/thread_local.h" 15726: namespace rocksdb { 15726: # 34 "/build/reproducible-path/rocksdb-9.3.1/util/thread_local.h" 15726: using UnrefHandler = void (*)(void* ptr); 15726: # 44 "/build/reproducible-path/rocksdb-9.3.1/util/thread_local.h" 15726: class ThreadLocalPtr { 15726: public: 15726: explicit ThreadLocalPtr(UnrefHandler handler = nullptr); 15726: 15726: ThreadLocalPtr(const ThreadLocalPtr&) = delete; 15726: ThreadLocalPtr& operator=(const ThreadLocalPtr&) = delete; 15726: 15726: ~ThreadLocalPtr(); 15726: 15726: 15726: void* Get() const; 15726: 15726: 15726: void Reset(void* ptr); 15726: 15726: 15726: void* Swap(void* ptr); 15726: 15726: 15726: 15726: 15726: 15726: bool CompareAndSwap(void* ptr, void*& expected); 15726: 15726: 15726: 15726: void Scrape(autovector* ptrs, void* const replacement); 15726: 15726: using FoldFunc = std::function; 15726: 15726: 15726: 15726: 15726: void Fold(FoldFunc func, void* res); 15726: 15726: 15726: 15726: static uint32_t TEST_PeekId(); 15726: # 90 "/build/reproducible-path/rocksdb-9.3.1/util/thread_local.h" 15726: static void InitSingletons(); 15726: 15726: class StaticMeta; 15726: 15726: private: 15726: static StaticMeta* Instance(); 15726: 15726: const uint32_t id_; 15726: }; 15726: 15726: } 15726: # 22 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 2 15726: # 31 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 15726: namespace rocksdb { 15726: 15726: class Logger; 15726: # 42 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 15726: class ConcurrentArena : public Allocator { 15726: public: 15726: 15726: 15726: 15726: 15726: explicit ConcurrentArena(size_t block_size = Arena::kMinBlockSize, 15726: AllocTracker* tracker = nullptr, 15726: size_t huge_page_size = 0); 15726: 15726: char* Allocate(size_t bytes) override { 15726: return AllocateImpl(bytes, false , 15726: [this, bytes]() { return arena_.Allocate(bytes); }); 15726: } 15726: 15726: char* AllocateAligned(size_t bytes, size_t huge_page_size = 0, 15726: Logger* logger = nullptr) override { 15726: size_t rounded_up = ((bytes - 1) | (sizeof(void*) - 1)) + 1; 15726: 15726: # 60 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 3 4 15726: (static_cast ( 15726: # 60 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 15726: rounded_up >= bytes && rounded_up < bytes + sizeof(void*) && (rounded_up % sizeof(void*)) == 0 15726: # 60 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 60 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 15726: "rounded_up >= bytes && rounded_up < bytes + sizeof(void*) && (rounded_up % sizeof(void*)) == 0" 15726: # 60 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: 15726: # 61 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 15726: ; 15726: 15726: return AllocateImpl(rounded_up, huge_page_size != 0 , 15726: [this, rounded_up, huge_page_size, logger]() { 15726: return arena_.AllocateAligned(rounded_up, 15726: huge_page_size, logger); 15726: }); 15726: } 15726: 15726: size_t ApproximateMemoryUsage() const { 15726: std::unique_lock lock(arena_mutex_, std::defer_lock); 15726: lock.lock(); 15726: return arena_.ApproximateMemoryUsage() - ShardAllocatedAndUnused(); 15726: } 15726: 15726: size_t MemoryAllocatedBytes() const { 15726: return memory_allocated_bytes_.load(std::memory_order_relaxed); 15726: } 15726: 15726: size_t AllocatedAndUnused() const { 15726: return arena_allocated_and_unused_.load(std::memory_order_relaxed) + 15726: ShardAllocatedAndUnused(); 15726: } 15726: 15726: size_t IrregularBlockNum() const { 15726: return irregular_block_num_.load(std::memory_order_relaxed); 15726: } 15726: 15726: size_t BlockSize() const override { return arena_.BlockSize(); } 15726: 15726: private: 15726: struct Shard { 15726: char padding[40] ; 15726: mutable SpinMutex mutex; 15726: char* free_begin_; 15726: std::atomic allocated_and_unused_; 15726: 15726: Shard() : free_begin_(nullptr), allocated_and_unused_(0) {} 15726: }; 15726: 15726: static thread_local size_t tls_cpuid; 15726: 15726: char padding0[56] ; 15726: 15726: size_t shard_block_size_; 15726: 15726: CoreLocalArray shards_; 15726: 15726: Arena arena_; 15726: mutable SpinMutex arena_mutex_; 15726: std::atomic arena_allocated_and_unused_; 15726: std::atomic memory_allocated_bytes_; 15726: std::atomic irregular_block_num_; 15726: 15726: char padding1[56] ; 15726: 15726: Shard* Repick(); 15726: 15726: size_t ShardAllocatedAndUnused() const { 15726: size_t total = 0; 15726: for (size_t i = 0; i < shards_.Size(); ++i) { 15726: total += shards_.AccessAtCore(i)->allocated_and_unused_.load( 15726: std::memory_order_relaxed); 15726: } 15726: return total; 15726: } 15726: 15726: template 15726: char* AllocateImpl(size_t bytes, bool force_arena, const Func& func) { 15726: size_t cpu; 15726: 15726: 15726: 15726: 15726: 15726: std::unique_lock arena_lock(arena_mutex_, std::defer_lock); 15726: if (bytes > shard_block_size_ / 4 || force_arena || 15726: ((cpu = tls_cpuid) == 0 && 15726: !shards_.AccessAtCore(0)->allocated_and_unused_.load( 15726: std::memory_order_relaxed) && 15726: arena_lock.try_lock())) { 15726: if (!arena_lock.owns_lock()) { 15726: arena_lock.lock(); 15726: } 15726: auto rv = func(); 15726: Fixup(); 15726: return rv; 15726: } 15726: 15726: 15726: Shard* s = shards_.AccessAtCore(cpu & (shards_.Size() - 1)); 15726: if (!s->mutex.try_lock()) { 15726: s = Repick(); 15726: s->mutex.lock(); 15726: } 15726: std::unique_lock lock(s->mutex, std::adopt_lock); 15726: 15726: size_t avail = s->allocated_and_unused_.load(std::memory_order_relaxed); 15726: if (avail < bytes) { 15726: 15726: std::lock_guard reload_lock(arena_mutex_); 15726: 15726: 15726: 15726: auto exact = arena_allocated_and_unused_.load(std::memory_order_relaxed); 15726: 15726: # 166 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 3 4 15726: (static_cast ( 15726: # 166 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 15726: exact == arena_.AllocatedAndUnused() 15726: # 166 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 166 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 15726: "exact == arena_.AllocatedAndUnused()" 15726: # 166 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 166 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 15726: ; 15726: 15726: if (exact >= bytes && arena_.IsInInlineBlock()) { 15726: # 177 "/build/reproducible-path/rocksdb-9.3.1/memory/concurrent_arena.h" 15726: auto rv = func(); 15726: Fixup(); 15726: return rv; 15726: } 15726: 15726: avail = exact >= shard_block_size_ / 2 && exact < shard_block_size_ * 2 15726: ? exact 15726: : shard_block_size_; 15726: s->free_begin_ = arena_.AllocateAligned(avail); 15726: Fixup(); 15726: } 15726: s->allocated_and_unused_.store(avail - bytes, std::memory_order_relaxed); 15726: 15726: char* rv; 15726: if ((bytes % sizeof(void*)) == 0) { 15726: 15726: rv = s->free_begin_; 15726: s->free_begin_ += bytes; 15726: } else { 15726: 15726: rv = s->free_begin_ + avail - bytes; 15726: } 15726: return rv; 15726: } 15726: 15726: void Fixup() { 15726: arena_allocated_and_unused_.store(arena_.AllocatedAndUnused(), 15726: std::memory_order_relaxed); 15726: memory_allocated_bytes_.store(arena_.MemoryAllocatedBytes(), 15726: std::memory_order_relaxed); 15726: irregular_block_num_.store(arena_.IrregularBlockNum(), 15726: std::memory_order_relaxed); 15726: } 15726: 15726: ConcurrentArena(const ConcurrentArena&) = delete; 15726: ConcurrentArena& operator=(const ConcurrentArena&) = delete; 15726: }; 15726: 15726: } 15726: # 27 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/cast_util.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: template 15726: inline DestClass* static_cast_with_check(SrcClass* x) { 15726: DestClass* ret = static_cast(x); 15726: 15726: 15726: 15726: return ret; 15726: } 15726: 15726: template 15726: inline std::shared_ptr static_cast_with_check( 15726: std::shared_ptr&& x) { 15726: 15726: 15726: 15726: auto ret = std::static_pointer_cast(std::move(x)); 15726: 15726: 15726: 15726: return ret; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: template 15726: inline To lossless_cast(From x) { 15726: using FromValue = typename std::remove_reference::type; 15726: static_assert( 15726: std::is_integral::value || std::is_enum::value, 15726: "Only works on integral types"); 15726: static_assert(std::is_integral::value || std::is_enum::value, 15726: "Only works on integral types"); 15726: static_assert(sizeof(To) >= sizeof(FromValue), "Must be lossless"); 15726: return static_cast(x); 15726: } 15726: 15726: 15726: 15726: 15726: template 15726: inline const std::initializer_list& List( 15726: const std::initializer_list& list) { 15726: return list; 15726: } 15726: 15726: 15726: 15726: template 15726: class UnownedPtr { 15726: public: 15726: UnownedPtr() = default; 15726: UnownedPtr(std::nullptr_t) {} 15726: UnownedPtr(T* ptr) : ptr_(ptr) {} 15726: UnownedPtr(const UnownedPtr&) = default; 15726: UnownedPtr(UnownedPtr&&) = default; 15726: UnownedPtr& operator=(const UnownedPtr&) = default; 15726: UnownedPtr& operator=(UnownedPtr&&) = default; 15726: 15726: T* get() const { return ptr_; } 15726: T* operator->() const { return ptr_; } 15726: T& operator*() const { return *ptr_; } 15726: operator bool() const { return ptr_ != nullptr; } 15726: 15726: private: 15726: T* ptr_ = nullptr; 15726: }; 15726: 15726: } 15726: # 33 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/dynamic_bloom.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 18 "/build/reproducible-path/rocksdb-9.3.1/util/dynamic_bloom.h" 15726: namespace rocksdb { 15726: 15726: class Slice; 15726: class Allocator; 15726: class Logger; 15726: # 36 "/build/reproducible-path/rocksdb-9.3.1/util/dynamic_bloom.h" 15726: class DynamicBloom { 15726: public: 15726: # 47 "/build/reproducible-path/rocksdb-9.3.1/util/dynamic_bloom.h" 15726: explicit DynamicBloom(Allocator* allocator, uint32_t total_bits, 15726: uint32_t num_probes = 6, size_t huge_page_tlb_size = 0, 15726: Logger* logger = nullptr); 15726: 15726: ~DynamicBloom() {} 15726: 15726: 15726: void Add(const Slice& key); 15726: 15726: 15726: void AddConcurrently(const Slice& key); 15726: 15726: 15726: void AddHash(uint32_t hash); 15726: 15726: 15726: void AddHashConcurrently(uint32_t hash); 15726: 15726: 15726: bool MayContain(const Slice& key) const; 15726: 15726: void MayContain(int num_keys, Slice* keys, bool* may_match) const; 15726: 15726: 15726: bool MayContainHash(uint32_t hash) const; 15726: 15726: void Prefetch(uint32_t h); 15726: 15726: private: 15726: 15726: 15726: uint32_t kLen; 15726: 15726: 15726: const uint32_t kNumDoubleProbes; 15726: 15726: std::atomic* data_; 15726: 15726: 15726: 15726: template 15726: void AddHash(uint32_t hash, const OrFunc& or_func); 15726: 15726: bool DoubleProbe(uint32_t h32, size_t a) const; 15726: }; 15726: 15726: inline void DynamicBloom::Add(const Slice& key) { AddHash(BloomHash(key)); } 15726: 15726: inline void DynamicBloom::AddConcurrently(const Slice& key) { 15726: AddHashConcurrently(BloomHash(key)); 15726: } 15726: 15726: inline void DynamicBloom::AddHash(uint32_t hash) { 15726: AddHash(hash, [](std::atomic* ptr, uint64_t mask) { 15726: ptr->store(ptr->load(std::memory_order_relaxed) | mask, 15726: std::memory_order_relaxed); 15726: }); 15726: } 15726: 15726: inline void DynamicBloom::AddHashConcurrently(uint32_t hash) { 15726: AddHash(hash, [](std::atomic* ptr, uint64_t mask) { 15726: 15726: 15726: 15726: 15726: 15726: if ((mask & ptr->load(std::memory_order_relaxed)) != mask) { 15726: ptr->fetch_or(mask, std::memory_order_relaxed); 15726: } 15726: }); 15726: } 15726: 15726: inline bool DynamicBloom::MayContain(const Slice& key) const { 15726: return (MayContainHash(BloomHash(key))); 15726: } 15726: 15726: inline void DynamicBloom::MayContain(int num_keys, Slice* keys, 15726: bool* may_match) const { 15726: std::array hashes; 15726: std::array byte_offsets; 15726: for (int i = 0; i < num_keys; ++i) { 15726: hashes[i] = BloomHash(keys[i]); 15726: size_t a = FastRange32(hashes[i], kLen); 15726: __builtin_prefetch(data_ + a, 0, 3); 15726: byte_offsets[i] = a; 15726: } 15726: 15726: for (int i = 0; i < num_keys; i++) { 15726: may_match[i] = DoubleProbe(hashes[i], byte_offsets[i]); 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline void DynamicBloom::Prefetch(uint32_t h32) { 15726: size_t a = FastRange32(h32, kLen); 15726: __builtin_prefetch(data_ + a, 0, 3); 15726: } 15726: # 173 "/build/reproducible-path/rocksdb-9.3.1/util/dynamic_bloom.h" 15726: inline bool DynamicBloom::MayContainHash(uint32_t h32) const { 15726: size_t a = FastRange32(h32, kLen); 15726: __builtin_prefetch(data_ + a, 0, 3); 15726: return DoubleProbe(h32, a); 15726: } 15726: 15726: inline bool DynamicBloom::DoubleProbe(uint32_t h32, size_t byte_offset) const { 15726: 15726: uint64_t h = 0x9e3779b97f4a7c13ULL * h32; 15726: for (unsigned i = 0;; ++i) { 15726: 15726: uint64_t mask = 15726: ((uint64_t)1 << (h & 63)) | ((uint64_t)1 << ((h >> 6) & 63)); 15726: uint64_t val = data_[byte_offset ^ i].load(std::memory_order_relaxed); 15726: if (i + 1 >= kNumDoubleProbes) { 15726: return (val & mask) == mask; 15726: } else if ((val & mask) != mask) { 15726: return false; 15726: } 15726: h = (h >> 12) | (h << 52); 15726: } 15726: } 15726: 15726: template 15726: inline void DynamicBloom::AddHash(uint32_t h32, const OrFunc& or_func) { 15726: size_t a = FastRange32(h32, kLen); 15726: __builtin_prefetch(data_ + a, 0, 3); 15726: 15726: uint64_t h = 0x9e3779b97f4a7c13ULL * h32; 15726: for (unsigned i = 0;; ++i) { 15726: 15726: uint64_t mask = 15726: ((uint64_t)1 << (h & 63)) | ((uint64_t)1 << ((h >> 6) & 63)); 15726: or_func(&data_[a ^ i], mask); 15726: if (i + 1 >= kNumDoubleProbes) { 15726: return; 15726: } 15726: h = (h >> 12) | (h << 52); 15726: } 15726: } 15726: 15726: } 15726: # 34 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/hash_containers.h" 1 15726: # 11 "/build/reproducible-path/rocksdb-9.3.1/util/hash_containers.h" 15726: 15726: # 38 "/build/reproducible-path/rocksdb-9.3.1/util/hash_containers.h" 15726: namespace rocksdb { 15726: 15726: template 15726: using UnorderedMap = std::unordered_map; 15726: 15726: template 15726: using UnorderedMapH = std::unordered_map; 15726: 15726: template 15726: using UnorderedSet = std::unordered_set; 15726: 15726: } 15726: # 36 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: struct FlushJobInfo; 15726: class Mutex; 15726: class MemTableIterator; 15726: class MergeContext; 15726: class SystemClock; 15726: 15726: struct ImmutableMemTableOptions { 15726: explicit ImmutableMemTableOptions(const ImmutableOptions& ioptions, 15726: const MutableCFOptions& mutable_cf_options); 15726: size_t arena_block_size; 15726: uint32_t memtable_prefix_bloom_bits; 15726: size_t memtable_huge_page_size; 15726: bool memtable_whole_key_filtering; 15726: bool inplace_update_support; 15726: size_t inplace_update_num_locks; 15726: UpdateStatus (*inplace_callback)(char* existing_value, 15726: uint32_t* existing_value_size, 15726: Slice delta_value, 15726: std::string* merged_value); 15726: size_t max_successive_merges; 15726: bool strict_max_successive_merges; 15726: Statistics* statistics; 15726: MergeOperator* merge_operator; 15726: Logger* info_log; 15726: bool allow_data_in_errors; 15726: uint32_t protection_bytes_per_key; 15726: }; 15726: 15726: 15726: 15726: 15726: struct MemTablePostProcessInfo { 15726: uint64_t data_size = 0; 15726: uint64_t num_entries = 0; 15726: uint64_t num_deletes = 0; 15726: uint64_t num_range_deletes = 0; 15726: }; 15726: 15726: using MultiGetRange = MultiGetContext::Range; 15726: # 91 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 15726: class MemTable { 15726: public: 15726: struct KeyComparator : public MemTableRep::KeyComparator { 15726: const InternalKeyComparator comparator; 15726: explicit KeyComparator(const InternalKeyComparator& c) : comparator(c) {} 15726: int operator()(const char* prefix_len_key1, 15726: const char* prefix_len_key2) const override; 15726: int operator()(const char* prefix_len_key, 15726: const DecodedType& key) const override; 15726: }; 15726: # 111 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 15726: explicit MemTable(const InternalKeyComparator& comparator, 15726: const ImmutableOptions& ioptions, 15726: const MutableCFOptions& mutable_cf_options, 15726: WriteBufferManager* write_buffer_manager, 15726: SequenceNumber earliest_seq, uint32_t column_family_id); 15726: 15726: MemTable(const MemTable&) = delete; 15726: MemTable& operator=(const MemTable&) = delete; 15726: 15726: 15726: ~MemTable(); 15726: 15726: 15726: 15726: 15726: void Ref() { ++refs_; } 15726: 15726: 15726: 15726: 15726: 15726: MemTable* Unref() { 15726: --refs_; 15726: 15726: # 134 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 3 4 15726: (static_cast ( 15726: # 134 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 15726: refs_ >= 0 15726: # 134 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 134 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 15726: "refs_ >= 0" 15726: # 134 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 134 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 15726: ; 15726: if (refs_ <= 0) { 15726: return this; 15726: } 15726: return nullptr; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: size_t ApproximateMemoryUsage(); 15726: 15726: 15726: 15726: size_t ApproximateMemoryUsageFast() const { 15726: return approximate_memory_usage_.load(std::memory_order_relaxed); 15726: } 15726: 15726: 15726: size_t MemoryAllocatedBytes() const { 15726: return table_->ApproximateMemoryUsage() + 15726: range_del_table_->ApproximateMemoryUsage() + 15726: arena_.MemoryAllocatedBytes(); 15726: } 15726: # 174 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 15726: void UniqueRandomSample(const uint64_t& target_sample_size, 15726: std::unordered_set* entries) { 15726: 15726: 15726: table_->UniqueRandomSample(num_entries(), target_sample_size, entries); 15726: } 15726: 15726: 15726: 15726: bool ShouldScheduleFlush() const { 15726: return flush_state_.load(std::memory_order_relaxed) == FLUSH_REQUESTED; 15726: } 15726: 15726: 15726: 15726: bool MarkFlushScheduled() { 15726: auto before = FLUSH_REQUESTED; 15726: return flush_state_.compare_exchange_strong(before, FLUSH_SCHEDULED, 15726: std::memory_order_relaxed, 15726: std::memory_order_relaxed); 15726: } 15726: # 210 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 15726: InternalIterator* NewIterator( 15726: const ReadOptions& read_options, 15726: UnownedPtr seqno_to_time_mapping, Arena* arena); 15726: # 224 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 15726: FragmentedRangeTombstoneIterator* NewRangeTombstoneIterator( 15726: const ReadOptions& read_options, SequenceNumber read_seq, 15726: bool immutable_memtable); 15726: 15726: Status VerifyEncodedEntry(Slice encoded, 15726: const ProtectionInfoKVOS64& kv_prot_info); 15726: # 241 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 15726: Status Add(SequenceNumber seq, ValueType type, const Slice& key, 15726: const Slice& value, const ProtectionInfoKVOS64* kv_prot_info, 15726: bool allow_concurrent = false, 15726: MemTablePostProcessInfo* post_process_info = nullptr, 15726: void** hint = nullptr); 15726: # 270 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 15726: bool Get(const LookupKey& key, std::string* value, 15726: PinnableWideColumns* columns, std::string* timestamp, Status* s, 15726: MergeContext* merge_context, 15726: SequenceNumber* max_covering_tombstone_seq, SequenceNumber* seq, 15726: const ReadOptions& read_opts, bool immutable_memtable, 15726: ReadCallback* callback = nullptr, bool* is_blob_index = nullptr, 15726: bool do_merge = true); 15726: 15726: bool Get(const LookupKey& key, std::string* value, 15726: PinnableWideColumns* columns, std::string* timestamp, Status* s, 15726: MergeContext* merge_context, 15726: SequenceNumber* max_covering_tombstone_seq, 15726: const ReadOptions& read_opts, bool immutable_memtable, 15726: ReadCallback* callback = nullptr, bool* is_blob_index = nullptr, 15726: bool do_merge = true) { 15726: SequenceNumber seq; 15726: return Get(key, value, columns, timestamp, s, merge_context, 15726: max_covering_tombstone_seq, &seq, read_opts, immutable_memtable, 15726: callback, is_blob_index, do_merge); 15726: } 15726: 15726: 15726: 15726: 15726: void MultiGet(const ReadOptions& read_options, MultiGetRange* range, 15726: ReadCallback* callback, bool immutable_memtable); 15726: # 307 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 15726: Status Update(SequenceNumber seq, ValueType value_type, const Slice& key, 15726: const Slice& value, const ProtectionInfoKVOS64* kv_prot_info); 15726: # 324 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 15726: Status UpdateCallback(SequenceNumber seq, const Slice& key, 15726: const Slice& delta, 15726: const ProtectionInfoKVOS64* kv_prot_info); 15726: 15726: 15726: 15726: 15726: 15726: size_t CountSuccessiveMergeEntries(const LookupKey& key, size_t limit); 15726: 15726: 15726: 15726: void BatchPostProcess(const MemTablePostProcessInfo& update_counters) { 15726: num_entries_.fetch_add(update_counters.num_entries, 15726: std::memory_order_relaxed); 15726: data_size_.fetch_add(update_counters.data_size, std::memory_order_relaxed); 15726: if (update_counters.num_deletes != 0) { 15726: num_deletes_.fetch_add(update_counters.num_deletes, 15726: std::memory_order_relaxed); 15726: } 15726: if (update_counters.num_range_deletes > 0) { 15726: num_range_deletes_.fetch_add(update_counters.num_range_deletes, 15726: std::memory_order_relaxed); 15726: } 15726: UpdateFlushState(); 15726: } 15726: 15726: 15726: 15726: 15726: uint64_t num_entries() const { 15726: return num_entries_.load(std::memory_order_relaxed); 15726: } 15726: 15726: 15726: 15726: 15726: uint64_t num_deletes() const { 15726: return num_deletes_.load(std::memory_order_relaxed); 15726: } 15726: 15726: 15726: 15726: 15726: uint64_t num_range_deletes() const { 15726: return num_range_deletes_.load(std::memory_order_relaxed); 15726: } 15726: 15726: uint64_t get_data_size() const { 15726: return data_size_.load(std::memory_order_relaxed); 15726: } 15726: 15726: size_t write_buffer_size() const { 15726: return write_buffer_size_.load(std::memory_order_relaxed); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: void UpdateWriteBufferSize(size_t new_write_buffer_size) { 15726: if (bloom_filter_ == nullptr || 15726: new_write_buffer_size < write_buffer_size_) { 15726: write_buffer_size_.store(new_write_buffer_size, 15726: std::memory_order_relaxed); 15726: } 15726: } 15726: 15726: 15726: VersionEdit* GetEdits() { return &edit_; } 15726: 15726: 15726: 15726: 15726: bool IsEmpty() const { return first_seqno_ == 0; } 15726: 15726: 15726: 15726: 15726: 15726: SequenceNumber GetFirstSequenceNumber() { 15726: return first_seqno_.load(std::memory_order_relaxed); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: void SetFirstSequenceNumber(SequenceNumber first_seqno) { 15726: return first_seqno_.store(first_seqno, std::memory_order_relaxed); 15726: } 15726: # 423 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.h" 15726: SequenceNumber GetEarliestSequenceNumber() { 15726: return earliest_seqno_.load(std::memory_order_relaxed); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: void SetEarliestSequenceNumber(SequenceNumber earliest_seqno) { 15726: return earliest_seqno_.store(earliest_seqno, std::memory_order_relaxed); 15726: } 15726: 15726: 15726: 15726: SequenceNumber GetCreationSeq() const { return creation_seq_; } 15726: 15726: void SetCreationSeq(SequenceNumber sn) { creation_seq_ = sn; } 15726: 15726: 15726: 15726: 15726: 15726: uint64_t GetNextLogNumber() { return mem_next_logfile_number_; } 15726: 15726: 15726: 15726: 15726: 15726: void SetNextLogNumber(uint64_t num) { mem_next_logfile_number_ = num; } 15726: 15726: 15726: 15726: 15726: 15726: void RefLogContainingPrepSection(uint64_t log); 15726: uint64_t GetMinLogContainingPrepSection(); 15726: 15726: 15726: 15726: 15726: 15726: 15726: void MarkImmutable() { 15726: table_->MarkReadOnly(); 15726: mem_tracker_.DoneAllocating(); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: void MarkFlushed() { table_->MarkFlushed(); } 15726: 15726: 15726: bool IsMergeOperatorSupported() const { 15726: return table_->IsMergeOperatorSupported(); 15726: } 15726: 15726: 15726: 15726: bool IsSnapshotSupported() const { 15726: return table_->IsSnapshotSupported() && !moptions_.inplace_update_support; 15726: } 15726: 15726: struct MemTableStats { 15726: uint64_t size; 15726: uint64_t count; 15726: }; 15726: 15726: MemTableStats ApproximateStats(const Slice& start_ikey, 15726: const Slice& end_ikey); 15726: 15726: 15726: port::RWMutex* GetLock(const Slice& key); 15726: 15726: const InternalKeyComparator& GetInternalKeyComparator() const { 15726: return comparator_.comparator; 15726: } 15726: 15726: const ImmutableMemTableOptions* GetImmutableMemTableOptions() const { 15726: return &moptions_; 15726: } 15726: 15726: uint64_t ApproximateOldestKeyTime() const { 15726: return oldest_key_time_.load(std::memory_order_relaxed); 15726: } 15726: 15726: 15726: void SetID(uint64_t id) { id_ = id; } 15726: 15726: uint64_t GetID() const { return id_; } 15726: 15726: void SetFlushCompleted(bool completed) { flush_completed_ = completed; } 15726: 15726: uint64_t GetFileNumber() const { return file_number_; } 15726: 15726: void SetFileNumber(uint64_t file_num) { file_number_ = file_num; } 15726: 15726: void SetFlushInProgress(bool in_progress) { 15726: flush_in_progress_ = in_progress; 15726: } 15726: 15726: void SetFlushJobInfo(std::unique_ptr&& info) { 15726: flush_job_info_ = std::move(info); 15726: } 15726: 15726: std::unique_ptr ReleaseFlushJobInfo() { 15726: return std::move(flush_job_info_); 15726: } 15726: 15726: 15726: bool ShouldFlushNow(); 15726: 15726: void ConstructFragmentedRangeTombstones(); 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: bool IsFragmentedRangeTombstonesConstructed(bool allow_empty = true) const { 15726: if (allow_empty) { 15726: return fragmented_range_tombstone_list_.get() != nullptr || 15726: is_range_del_table_empty_; 15726: } else { 15726: return fragmented_range_tombstone_list_.get() != nullptr; 15726: } 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: const Slice& GetNewestUDT() const; 15726: 15726: 15726: static Status VerifyEntryChecksum(const char* entry, 15726: uint32_t protection_bytes_per_key, 15726: bool allow_data_in_errors = false); 15726: 15726: private: 15726: enum FlushStateEnum { FLUSH_NOT_REQUESTED, FLUSH_REQUESTED, FLUSH_SCHEDULED }; 15726: 15726: friend class MemTableIterator; 15726: friend class MemTableBackwardIterator; 15726: friend class MemTableList; 15726: 15726: KeyComparator comparator_; 15726: const ImmutableMemTableOptions moptions_; 15726: int refs_; 15726: const size_t kArenaBlockSize; 15726: AllocTracker mem_tracker_; 15726: ConcurrentArena arena_; 15726: std::unique_ptr table_; 15726: std::unique_ptr range_del_table_; 15726: std::atomic_bool is_range_del_table_empty_; 15726: 15726: 15726: std::atomic data_size_; 15726: std::atomic num_entries_; 15726: std::atomic num_deletes_; 15726: std::atomic num_range_deletes_; 15726: 15726: 15726: std::atomic write_buffer_size_; 15726: 15726: 15726: bool flush_in_progress_; 15726: bool flush_completed_; 15726: uint64_t file_number_; 15726: 15726: 15726: 15726: VersionEdit edit_; 15726: 15726: 15726: std::atomic first_seqno_; 15726: 15726: 15726: 15726: std::atomic earliest_seqno_; 15726: 15726: SequenceNumber creation_seq_; 15726: 15726: 15726: uint64_t mem_next_logfile_number_; 15726: 15726: 15726: 15726: std::atomic min_prep_log_referenced_; 15726: 15726: 15726: std::vector locks_; 15726: 15726: const SliceTransform* const prefix_extractor_; 15726: std::unique_ptr bloom_filter_; 15726: 15726: std::atomic flush_state_; 15726: 15726: SystemClock* clock_; 15726: 15726: 15726: const SliceTransform* insert_with_hint_prefix_extractor_; 15726: 15726: 15726: UnorderedMapH insert_hints_; 15726: 15726: 15726: std::atomic oldest_key_time_; 15726: 15726: 15726: uint64_t id_ = 0; 15726: 15726: 15726: 15726: 15726: 15726: SequenceNumber atomic_flush_seqno_; 15726: 15726: 15726: 15726: std::atomic approximate_memory_usage_; 15726: 15726: 15726: 15726: uint32_t memtable_max_range_deletions_ = 0; 15726: 15726: 15726: std::unique_ptr flush_job_info_; 15726: 15726: 15726: size_t ts_sz_; 15726: 15726: 15726: bool persist_user_defined_timestamps_; 15726: 15726: 15726: 15726: 15726: 15726: 15726: Slice newest_udt_; 15726: 15726: 15726: void UpdateFlushState(); 15726: 15726: void UpdateOldestKeyTime(); 15726: 15726: void GetFromTable(const LookupKey& key, 15726: SequenceNumber max_covering_tombstone_seq, bool do_merge, 15726: ReadCallback* callback, bool* is_blob_index, 15726: std::string* value, PinnableWideColumns* columns, 15726: std::string* timestamp, Status* s, 15726: MergeContext* merge_context, SequenceNumber* seq, 15726: bool* found_final_value, bool* merge_in_progress); 15726: 15726: 15726: 15726: 15726: 15726: 15726: FragmentedRangeTombstoneIterator* NewRangeTombstoneIteratorInternal( 15726: const ReadOptions& read_options, SequenceNumber read_seq, 15726: bool immutable_memtable); 15726: 15726: 15726: 15726: 15726: std::unique_ptr 15726: fragmented_range_tombstone_list_; 15726: 15726: 15726: std::mutex range_del_mutex_; 15726: CoreLocalArray> 15726: cached_range_tombstone_; 15726: 15726: void UpdateEntryChecksum(const ProtectionInfoKVOS64* kv_prot_info, 15726: const Slice& key, const Slice& value, ValueType type, 15726: SequenceNumber s, char* checksum_ptr); 15726: 15726: void MaybeUpdateNewestUDT(const Slice& user_key); 15726: }; 15726: 15726: const char* EncodeKey(std::string* scratch, const Slice& target); 15726: 15726: } 15726: # 11 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 2 15726: # 20 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 16 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/compaction/compaction_iteration_stats.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: struct CompactionIterationStats { 15726: 15726: 15726: 15726: 15726: int64_t num_record_drop_user = 0; 15726: 15726: int64_t num_record_drop_hidden = 0; 15726: int64_t num_record_drop_obsolete = 0; 15726: int64_t num_record_drop_range_del = 0; 15726: int64_t num_range_del_drop_obsolete = 0; 15726: 15726: int64_t num_optimized_del_drop_obsolete = 0; 15726: uint64_t total_filter_time = 0; 15726: 15726: 15726: 15726: 15726: uint64_t num_input_records = 0; 15726: uint64_t num_input_deletion_records = 0; 15726: uint64_t num_input_corrupt_records = 0; 15726: uint64_t total_input_raw_key_bytes = 0; 15726: uint64_t total_input_raw_value_bytes = 0; 15726: 15726: 15726: uint64_t num_single_del_fallthru = 0; 15726: uint64_t num_single_del_mismatch = 0; 15726: 15726: 15726: uint64_t num_blobs_read = 0; 15726: uint64_t total_blob_bytes_read = 0; 15726: uint64_t num_blobs_relocated = 0; 15726: uint64_t total_blob_bytes_relocated = 0; 15726: 15726: 15726: 15726: uint64_t num_input_timed_put_records = 0; 15726: 15726: 15726: uint64_t num_timed_put_swap_preferred_seqno = 0; 15726: }; 15726: 15726: } 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 2 15726: # 25 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/table_builder.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/table/table_builder.h" 15726: 15726: # 20 "/build/reproducible-path/rocksdb-9.3.1/table/table_builder.h" 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 15726: namespace rocksdb { 15726: 15726: 15726: class InternalTblPropColl { 15726: public: 15726: virtual ~InternalTblPropColl() {} 15726: virtual Status Finish(UserCollectedProperties* properties) = 0; 15726: 15726: virtual const char* Name() const = 0; 15726: 15726: 15726: 15726: virtual Status InternalAdd(const Slice& key, const Slice& value, 15726: uint64_t file_size) = 0; 15726: 15726: virtual void BlockAdd(uint64_t block_uncomp_bytes, 15726: uint64_t block_compressed_bytes_fast, 15726: uint64_t block_compressed_bytes_slow) = 0; 15726: 15726: virtual UserCollectedProperties GetReadableProperties() const = 0; 15726: 15726: virtual bool NeedCompact() const { return false; } 15726: }; 15726: 15726: 15726: class InternalTblPropCollFactory { 15726: public: 15726: virtual ~InternalTblPropCollFactory() {} 15726: 15726: virtual InternalTblPropColl* CreateInternalTblPropColl( 15726: uint32_t column_family_id, int level_at_creation) = 0; 15726: 15726: 15726: virtual const char* Name() const = 0; 15726: }; 15726: 15726: using InternalTblPropCollFactories = 15726: std::vector>; 15726: 15726: 15726: 15726: 15726: 15726: 15726: class UserKeyTablePropertiesCollector : public InternalTblPropColl { 15726: public: 15726: 15726: explicit UserKeyTablePropertiesCollector(TablePropertiesCollector* collector) 15726: : collector_(collector) {} 15726: 15726: virtual ~UserKeyTablePropertiesCollector() {} 15726: 15726: Status InternalAdd(const Slice& key, const Slice& value, 15726: uint64_t file_size) override; 15726: 15726: void BlockAdd(uint64_t block_uncomp_bytes, 15726: uint64_t block_compressed_bytes_fast, 15726: uint64_t block_compressed_bytes_slow) override; 15726: 15726: Status Finish(UserCollectedProperties* properties) override; 15726: 15726: const char* Name() const override { return collector_->Name(); } 15726: 15726: UserCollectedProperties GetReadableProperties() const override; 15726: 15726: bool NeedCompact() const override { return collector_->NeedCompact(); } 15726: 15726: protected: 15726: std::unique_ptr collector_; 15726: }; 15726: 15726: class UserKeyTablePropertiesCollectorFactory 15726: : public InternalTblPropCollFactory { 15726: public: 15726: explicit UserKeyTablePropertiesCollectorFactory( 15726: std::shared_ptr user_collector_factory) 15726: : user_collector_factory_(user_collector_factory) {} 15726: InternalTblPropColl* CreateInternalTblPropColl( 15726: uint32_t column_family_id, int level_at_creation) override { 15726: TablePropertiesCollectorFactory::Context context; 15726: context.column_family_id = column_family_id; 15726: context.level_at_creation = level_at_creation; 15726: TablePropertiesCollector* collector = 15726: user_collector_factory_->CreateTablePropertiesCollector(context); 15726: if (collector) { 15726: return new UserKeyTablePropertiesCollector(collector); 15726: } else { 15726: return nullptr; 15726: } 15726: } 15726: 15726: const char* Name() const override { return user_collector_factory_->Name(); } 15726: 15726: private: 15726: std::shared_ptr user_collector_factory_; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: class TimestampTablePropertiesCollector : public InternalTblPropColl { 15726: public: 15726: explicit TimestampTablePropertiesCollector(const Comparator* cmp) 15726: : cmp_(cmp), 15726: timestamp_min_(kDisableUserTimestamp), 15726: timestamp_max_(kDisableUserTimestamp) {} 15726: 15726: Status InternalAdd(const Slice& key, const Slice& , 15726: uint64_t ) override { 15726: auto user_key = ExtractUserKey(key); 15726: 15726: # 129 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 3 4 15726: (static_cast ( 15726: # 129 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 15726: cmp_ && cmp_->timestamp_size() > 0 15726: # 129 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 129 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 15726: "cmp_ && cmp_->timestamp_size() > 0" 15726: # 129 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 129 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 15726: ; 15726: if (user_key.size() < cmp_->timestamp_size()) { 15726: return Status::Corruption( 15726: "User key size mismatch when comparing to timestamp size."); 15726: } 15726: auto timestamp_in_key = 15726: ExtractTimestampFromUserKey(user_key, cmp_->timestamp_size()); 15726: if (timestamp_max_ == kDisableUserTimestamp || 15726: cmp_->CompareTimestamp(timestamp_in_key, timestamp_max_) > 0) { 15726: timestamp_max_.assign(timestamp_in_key.data(), timestamp_in_key.size()); 15726: } 15726: if (timestamp_min_ == kDisableUserTimestamp || 15726: cmp_->CompareTimestamp(timestamp_min_, timestamp_in_key) > 0) { 15726: timestamp_min_.assign(timestamp_in_key.data(), timestamp_in_key.size()); 15726: } 15726: return Status::OK(); 15726: } 15726: 15726: void BlockAdd(uint64_t , 15726: uint64_t , 15726: uint64_t ) override { 15726: return; 15726: } 15726: 15726: Status Finish(UserCollectedProperties* properties) override { 15726: 15726: 15726: # 155 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 3 4 15726: (static_cast ( 15726: # 155 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 15726: timestamp_min_.size() == timestamp_max_.size() && (timestamp_min_.empty() || timestamp_max_.size() == cmp_->timestamp_size()) 15726: # 155 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 155 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 15726: "timestamp_min_.size() == timestamp_max_.size() && (timestamp_min_.empty() || timestamp_max_.size() == cmp_->timestamp_size())" 15726: # 155 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: 15726: 15726: # 157 "/build/reproducible-path/rocksdb-9.3.1/db/table_properties_collector.h" 15726: ; 15726: properties->insert({"rocksdb.timestamp_min", timestamp_min_}); 15726: properties->insert({"rocksdb.timestamp_max", timestamp_max_}); 15726: return Status::OK(); 15726: } 15726: 15726: const char* Name() const override { 15726: return "TimestampTablePropertiesCollector"; 15726: } 15726: 15726: UserCollectedProperties GetReadableProperties() const override { 15726: return {{"rocksdb.timestamp_min", Slice(timestamp_min_).ToString(true)}, 15726: {"rocksdb.timestamp_max", Slice(timestamp_max_).ToString(true)}}; 15726: } 15726: 15726: protected: 15726: const Comparator* const cmp_; 15726: std::string timestamp_min_; 15726: std::string timestamp_max_; 15726: }; 15726: 15726: } 15726: # 21 "/build/reproducible-path/rocksdb-9.3.1/table/table_builder.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_util.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_updater.h" 1 15726: # 29 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_updater.h" 15726: 15726: # 42 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_updater.h" 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/thread_operation.h" 1 15726: # 14 "/build/reproducible-path/rocksdb-9.3.1/util/thread_operation.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: struct OperationInfo { 15726: const ThreadStatus::OperationType type; 15726: const std::string name; 15726: }; 15726: # 38 "/build/reproducible-path/rocksdb-9.3.1/util/thread_operation.h" 15726: static OperationInfo global_operation_table[] = { 15726: {ThreadStatus::OP_UNKNOWN, ""}, 15726: {ThreadStatus::OP_COMPACTION, "Compaction"}, 15726: {ThreadStatus::OP_FLUSH, "Flush"}, 15726: {ThreadStatus::OP_DBOPEN, "DBOpen"}, 15726: {ThreadStatus::OP_GET, "Get"}, 15726: {ThreadStatus::OP_MULTIGET, "MultiGet"}, 15726: {ThreadStatus::OP_DBITERATOR, "DBIterator"}, 15726: {ThreadStatus::OP_VERIFY_DB_CHECKSUM, "VerifyDBChecksum"}, 15726: {ThreadStatus::OP_VERIFY_FILE_CHECKSUMS, "VerifyFileChecksums"}, 15726: {ThreadStatus::OP_GETENTITY, "GetEntity"}, 15726: {ThreadStatus::OP_MULTIGETENTITY, "MultiGetEntity"}, 15726: 15726: }; 15726: 15726: struct OperationStageInfo { 15726: const ThreadStatus::OperationStage stage; 15726: const std::string name; 15726: }; 15726: 15726: 15726: 15726: 15726: static OperationStageInfo global_op_stage_table[] = { 15726: {ThreadStatus::STAGE_UNKNOWN, ""}, 15726: {ThreadStatus::STAGE_FLUSH_RUN, "FlushJob::Run"}, 15726: {ThreadStatus::STAGE_FLUSH_WRITE_L0, "FlushJob::WriteLevel0Table"}, 15726: {ThreadStatus::STAGE_COMPACTION_PREPARE, "CompactionJob::Prepare"}, 15726: {ThreadStatus::STAGE_COMPACTION_RUN, "CompactionJob::Run"}, 15726: {ThreadStatus::STAGE_COMPACTION_PROCESS_KV, 15726: "CompactionJob::ProcessKeyValueCompaction"}, 15726: {ThreadStatus::STAGE_COMPACTION_INSTALL, "CompactionJob::Install"}, 15726: {ThreadStatus::STAGE_COMPACTION_SYNC_FILE, 15726: "CompactionJob::FinishCompactionOutputFile"}, 15726: {ThreadStatus::STAGE_PICK_MEMTABLES_TO_FLUSH, 15726: "MemTableList::PickMemtablesToFlush"}, 15726: {ThreadStatus::STAGE_MEMTABLE_ROLLBACK, 15726: "MemTableList::RollbackMemtableFlush"}, 15726: {ThreadStatus::STAGE_MEMTABLE_INSTALL_FLUSH_RESULTS, 15726: "MemTableList::TryInstallMemtableFlushResults"}, 15726: }; 15726: 15726: 15726: struct StateInfo { 15726: const ThreadStatus::StateType type; 15726: const std::string name; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: static StateInfo global_state_table[] = { 15726: {ThreadStatus::STATE_UNKNOWN, ""}, 15726: {ThreadStatus::STATE_MUTEX_WAIT, "Mutex Wait"}, 15726: }; 15726: 15726: struct OperationProperty { 15726: int code; 15726: std::string name; 15726: }; 15726: 15726: static OperationProperty compaction_operation_properties[] = { 15726: {ThreadStatus::COMPACTION_JOB_ID, "JobID"}, 15726: {ThreadStatus::COMPACTION_INPUT_OUTPUT_LEVEL, "InputOutputLevel"}, 15726: {ThreadStatus::COMPACTION_PROP_FLAGS, "Manual/Deletion/Trivial"}, 15726: {ThreadStatus::COMPACTION_TOTAL_INPUT_BYTES, "TotalInputBytes"}, 15726: {ThreadStatus::COMPACTION_BYTES_READ, "BytesRead"}, 15726: {ThreadStatus::COMPACTION_BYTES_WRITTEN, "BytesWritten"}, 15726: }; 15726: 15726: static OperationProperty flush_operation_properties[] = { 15726: {ThreadStatus::FLUSH_JOB_ID, "JobID"}, 15726: {ThreadStatus::FLUSH_BYTES_MEMTABLES, "BytesMemtables"}, 15726: {ThreadStatus::FLUSH_BYTES_WRITTEN, "BytesWritten"}}; 15726: # 122 "/build/reproducible-path/rocksdb-9.3.1/util/thread_operation.h" 15726: } 15726: # 43 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_updater.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: class ColumnFamilyHandle; 15726: 15726: 15726: struct ConstantColumnFamilyInfo { 15726: 15726: public: 15726: ConstantColumnFamilyInfo(const void* _db_key, const std::string& _db_name, 15726: const std::string& _cf_name) 15726: : db_key(_db_key), db_name(_db_name), cf_name(_cf_name) {} 15726: const void* db_key; 15726: const std::string db_name; 15726: const std::string cf_name; 15726: 15726: }; 15726: 15726: 15726: 15726: struct ThreadStatusData { 15726: 15726: explicit ThreadStatusData() { 15726: enable_tracking.store(false); 15726: thread_id.store(0); 15726: thread_type.store(ThreadStatus::USER); 15726: cf_key.store(nullptr); 15726: operation_type.store(ThreadStatus::OP_UNKNOWN); 15726: op_start_time.store(0); 15726: state_type.store(ThreadStatus::STATE_UNKNOWN); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: std::atomic enable_tracking; 15726: 15726: std::atomic thread_id; 15726: std::atomic thread_type; 15726: std::atomic cf_key; 15726: std::atomic operation_type; 15726: std::atomic op_start_time; 15726: std::atomic operation_stage; 15726: std::atomic op_properties[ThreadStatus::kNumOperationProperties]; 15726: std::atomic state_type; 15726: 15726: }; 15726: # 100 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_updater.h" 15726: class ThreadStatusUpdater { 15726: public: 15726: ThreadStatusUpdater() {} 15726: 15726: 15726: virtual ~ThreadStatusUpdater() {} 15726: 15726: 15726: void UnregisterThread(); 15726: 15726: 15726: 15726: void ResetThreadStatus(); 15726: 15726: 15726: void SetThreadID(uint64_t thread_id); 15726: 15726: 15726: void RegisterThread(ThreadStatus::ThreadType ttype, uint64_t thread_id); 15726: 15726: void SetEnableTracking(bool enable_tracking); 15726: 15726: 15726: 15726: void SetColumnFamilyInfoKey(const void* cf_key); 15726: 15726: 15726: const void* GetColumnFamilyInfoKey(); 15726: 15726: 15726: void SetThreadOperation(const ThreadStatus::OperationType type); 15726: 15726: 15726: ThreadStatus::OperationType GetThreadOperation(); 15726: 15726: 15726: 15726: void SetOperationStartTime(const uint64_t start_time); 15726: # 146 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_updater.h" 15726: void SetThreadOperationProperty(int i, uint64_t value); 15726: 15726: 15726: 15726: void IncreaseThreadOperationProperty(int i, uint64_t delta); 15726: 15726: 15726: ThreadStatus::OperationStage SetThreadOperationStage( 15726: const ThreadStatus::OperationStage stage); 15726: 15726: 15726: void ClearThreadOperation(); 15726: 15726: 15726: void ClearThreadOperationProperties(); 15726: 15726: 15726: void SetThreadState(const ThreadStatus::StateType type); 15726: 15726: 15726: void ClearThreadState(); 15726: 15726: 15726: Status GetThreadList(std::vector* thread_list); 15726: 15726: 15726: 15726: 15726: void NewColumnFamilyInfo(const void* db_key, const std::string& db_name, 15726: const void* cf_key, const std::string& cf_name); 15726: 15726: 15726: 15726: 15726: void EraseDatabaseInfo(const void* db_key); 15726: 15726: 15726: 15726: 15726: void EraseColumnFamilyInfo(const void* cf_key); 15726: 15726: 15726: 15726: void TEST_VerifyColumnFamilyInfoMap( 15726: const std::vector& handles, bool check_exist); 15726: 15726: protected: 15726: 15726: 15726: static thread_local ThreadStatusData* thread_status_data_; 15726: 15726: 15726: 15726: ThreadStatusData* GetLocalThreadStatus(); 15726: 15726: 15726: 15726: ThreadStatusData* Get() { return thread_status_data_; } 15726: 15726: 15726: std::mutex thread_list_mutex_; 15726: 15726: 15726: std::unordered_set thread_data_set_; 15726: 15726: 15726: 15726: 15726: 15726: std::unordered_map cf_info_map_; 15726: 15726: 15726: 15726: std::unordered_map> db_key_map_; 15726: 15726: 15726: 15726: 15726: }; 15726: 15726: } 15726: # 11 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_util.h" 2 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class ColumnFamilyData; 15726: # 30 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_util.h" 15726: class ThreadStatusUtil { 15726: public: 15726: 15726: static void RegisterThread(const Env* env, 15726: ThreadStatus::ThreadType thread_type); 15726: 15726: 15726: static void UnregisterThread(); 15726: 15726: 15726: 15726: 15726: static void NewColumnFamilyInfo(const DB* db, const ColumnFamilyData* cfd, 15726: const std::string& cf_name, const Env* env); 15726: 15726: 15726: 15726: 15726: static void EraseColumnFamilyInfo(const ColumnFamilyData* cfd); 15726: 15726: 15726: 15726: 15726: static void EraseDatabaseInfo(const DB* db); 15726: 15726: static void SetEnableTracking(bool enable_tracking); 15726: 15726: 15726: 15726: 15726: 15726: static void SetColumnFamily(const ColumnFamilyData* cfd); 15726: 15726: static void SetThreadOperation(ThreadStatus::OperationType type); 15726: 15726: static ThreadStatus::OperationType GetThreadOperation(); 15726: 15726: static ThreadStatus::OperationStage SetThreadOperationStage( 15726: ThreadStatus::OperationStage stage); 15726: 15726: static void SetThreadOperationProperty(int code, uint64_t value); 15726: 15726: static void IncreaseThreadOperationProperty(int code, uint64_t delta); 15726: 15726: static void SetThreadState(ThreadStatus::StateType type); 15726: 15726: static void ResetThreadStatus(); 15726: 15726: 15726: static void TEST_SetStateDelay(const ThreadStatus::StateType state, 15726: int micro); 15726: static void TEST_StateDelay(const ThreadStatus::StateType state); 15726: 15726: static Env::IOActivity TEST_GetExpectedIOActivity( 15726: ThreadStatus::OperationType thread_op); 15726: 15726: 15726: protected: 15726: 15726: 15726: 15726: static bool MaybeInitThreadLocalUpdater(const Env* env); 15726: # 103 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_util.h" 15726: static thread_local bool thread_updater_initialized_; 15726: # 118 "/build/reproducible-path/rocksdb-9.3.1/monitoring/thread_status_util.h" 15726: static thread_local ThreadStatusUpdater* thread_updater_local_cache_; 15726: 15726: 15726: 15726: 15726: }; 15726: 15726: 15726: 15726: 15726: class AutoThreadOperationStageUpdater { 15726: public: 15726: explicit AutoThreadOperationStageUpdater(ThreadStatus::OperationStage stage); 15726: ~AutoThreadOperationStageUpdater(); 15726: 15726: 15726: private: 15726: ThreadStatus::OperationStage prev_stage_; 15726: 15726: }; 15726: 15726: } 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 2 15726: # 26 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 15726: namespace rocksdb { 15726: class Statistics; 15726: class SystemClock; 15726: # 37 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 15726: class WritableFileWriter { 15726: private: 15726: void NotifyOnFileWriteFinish( 15726: uint64_t offset, size_t length, 15726: const FileOperationInfo::StartTimePoint& start_ts, 15726: const FileOperationInfo::FinishTimePoint& finish_ts, 15726: const IOStatus& io_status) { 15726: FileOperationInfo info(FileOperationType::kWrite, file_name_, start_ts, 15726: finish_ts, io_status, temperature_); 15726: info.offset = offset; 15726: info.length = length; 15726: 15726: for (auto& listener : listeners_) { 15726: listener->OnFileWriteFinish(info); 15726: } 15726: info.status.PermitUncheckedError(); 15726: } 15726: void NotifyOnFileFlushFinish( 15726: const FileOperationInfo::StartTimePoint& start_ts, 15726: const FileOperationInfo::FinishTimePoint& finish_ts, 15726: const IOStatus& io_status) { 15726: FileOperationInfo info(FileOperationType::kFlush, file_name_, start_ts, 15726: finish_ts, io_status, temperature_); 15726: 15726: for (auto& listener : listeners_) { 15726: listener->OnFileFlushFinish(info); 15726: } 15726: info.status.PermitUncheckedError(); 15726: } 15726: void NotifyOnFileSyncFinish( 15726: const FileOperationInfo::StartTimePoint& start_ts, 15726: const FileOperationInfo::FinishTimePoint& finish_ts, 15726: const IOStatus& io_status, 15726: FileOperationType type = FileOperationType::kSync) { 15726: FileOperationInfo info(type, file_name_, start_ts, finish_ts, io_status, 15726: temperature_); 15726: 15726: for (auto& listener : listeners_) { 15726: listener->OnFileSyncFinish(info); 15726: } 15726: info.status.PermitUncheckedError(); 15726: } 15726: void NotifyOnFileRangeSyncFinish( 15726: uint64_t offset, size_t length, 15726: const FileOperationInfo::StartTimePoint& start_ts, 15726: const FileOperationInfo::FinishTimePoint& finish_ts, 15726: const IOStatus& io_status) { 15726: FileOperationInfo info(FileOperationType::kRangeSync, file_name_, start_ts, 15726: finish_ts, io_status, temperature_); 15726: info.offset = offset; 15726: info.length = length; 15726: 15726: for (auto& listener : listeners_) { 15726: listener->OnFileRangeSyncFinish(info); 15726: } 15726: info.status.PermitUncheckedError(); 15726: } 15726: void NotifyOnFileTruncateFinish( 15726: const FileOperationInfo::StartTimePoint& start_ts, 15726: const FileOperationInfo::FinishTimePoint& finish_ts, 15726: const IOStatus& io_status) { 15726: FileOperationInfo info(FileOperationType::kTruncate, file_name_, start_ts, 15726: finish_ts, io_status, temperature_); 15726: 15726: for (auto& listener : listeners_) { 15726: listener->OnFileTruncateFinish(info); 15726: } 15726: info.status.PermitUncheckedError(); 15726: } 15726: void NotifyOnFileCloseFinish( 15726: const FileOperationInfo::StartTimePoint& start_ts, 15726: const FileOperationInfo::FinishTimePoint& finish_ts, 15726: const IOStatus& io_status) { 15726: FileOperationInfo info(FileOperationType::kClose, file_name_, start_ts, 15726: finish_ts, io_status, temperature_); 15726: 15726: for (auto& listener : listeners_) { 15726: listener->OnFileCloseFinish(info); 15726: } 15726: info.status.PermitUncheckedError(); 15726: } 15726: 15726: void NotifyOnIOError(const IOStatus& io_status, FileOperationType operation, 15726: const std::string& file_path, size_t length = 0, 15726: uint64_t offset = 0) { 15726: if (listeners_.empty()) { 15726: return; 15726: } 15726: IOErrorInfo io_error_info(io_status, operation, file_path, length, offset); 15726: for (auto& listener : listeners_) { 15726: listener->OnIOError(io_error_info); 15726: } 15726: io_error_info.io_status.PermitUncheckedError(); 15726: } 15726: 15726: bool ShouldNotifyListeners() const { return !listeners_.empty(); } 15726: void UpdateFileChecksum(const Slice& data); 15726: void Crc32cHandoffChecksumCalculation(const char* data, size_t size, 15726: char* buf); 15726: 15726: std::string file_name_; 15726: FSWritableFilePtr writable_file_; 15726: SystemClock* clock_; 15726: AlignedBuffer buf_; 15726: size_t max_buffer_size_; 15726: 15726: 15726: std::atomic filesize_; 15726: std::atomic flushed_size_; 15726: 15726: 15726: 15726: uint64_t next_write_offset_; 15726: bool pending_sync_; 15726: std::atomic seen_error_; 15726: 15726: 15726: 15726: 15726: 15726: std::atomic sync_without_flush_called_ = false; 15726: 15726: uint64_t last_sync_size_; 15726: uint64_t bytes_per_sync_; 15726: RateLimiter* rate_limiter_; 15726: Statistics* stats_; 15726: Histograms hist_type_; 15726: std::vector> listeners_; 15726: std::unique_ptr checksum_generator_; 15726: bool checksum_finalized_; 15726: bool perform_data_verification_; 15726: uint32_t buffered_data_crc32c_checksum_; 15726: bool buffered_data_with_checksum_; 15726: Temperature temperature_; 15726: 15726: public: 15726: WritableFileWriter( 15726: std::unique_ptr&& file, const std::string& _file_name, 15726: const FileOptions& options, SystemClock* clock = nullptr, 15726: const std::shared_ptr& io_tracer = nullptr, 15726: Statistics* stats = nullptr, 15726: Histograms hist_type = Histograms::HISTOGRAM_ENUM_MAX, 15726: const std::vector>& listeners = {}, 15726: FileChecksumGenFactory* file_checksum_gen_factory = nullptr, 15726: bool perform_data_verification = false, 15726: bool buffered_data_with_checksum = false) 15726: : file_name_(_file_name), 15726: writable_file_(std::move(file), io_tracer, _file_name), 15726: clock_(clock), 15726: buf_(), 15726: max_buffer_size_(options.writable_file_max_buffer_size), 15726: filesize_(0), 15726: flushed_size_(0), 15726: next_write_offset_(0), 15726: pending_sync_(false), 15726: seen_error_(false), 15726: last_sync_size_(0), 15726: bytes_per_sync_(options.bytes_per_sync), 15726: rate_limiter_(options.rate_limiter), 15726: stats_(stats), 15726: hist_type_(hist_type), 15726: listeners_(), 15726: checksum_generator_(nullptr), 15726: checksum_finalized_(false), 15726: perform_data_verification_(perform_data_verification), 15726: buffered_data_crc32c_checksum_(0), 15726: buffered_data_with_checksum_(buffered_data_with_checksum) { 15726: temperature_ = options.temperature; 15726: 15726: # 205 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 3 4 15726: (static_cast ( 15726: # 205 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 15726: !use_direct_io() || max_buffer_size_ > 0 15726: # 205 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 205 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 15726: "!use_direct_io() || max_buffer_size_ > 0" 15726: # 205 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 205 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 15726: ; 15726: rocksdb::SyncPoint::GetInstance()->Process("WritableFileWriter::WritableFileWriter:0", reinterpret_cast(max_buffer_size_)) 15726: ; 15726: buf_.Alignment(writable_file_->GetRequiredBufferAlignment()); 15726: buf_.AllocateNewBuffer(std::min((size_t)65536, max_buffer_size_)); 15726: std::for_each(listeners.begin(), listeners.end(), 15726: [this](const std::shared_ptr& e) { 15726: if (e->ShouldBeNotifiedOnFileIO()) { 15726: listeners_.emplace_back(e); 15726: } 15726: }); 15726: if (file_checksum_gen_factory != nullptr) { 15726: FileChecksumGenContext checksum_gen_context; 15726: checksum_gen_context.file_name = _file_name; 15726: checksum_generator_ = 15726: file_checksum_gen_factory->CreateFileChecksumGenerator( 15726: checksum_gen_context); 15726: } 15726: } 15726: 15726: static IOStatus Create(const std::shared_ptr& fs, 15726: const std::string& fname, const FileOptions& file_opts, 15726: std::unique_ptr* writer, 15726: IODebugContext* dbg); 15726: 15726: static IOStatus PrepareIOOptions(const WriteOptions& wo, IOOptions& opts); 15726: 15726: WritableFileWriter(const WritableFileWriter&) = delete; 15726: 15726: WritableFileWriter& operator=(const WritableFileWriter&) = delete; 15726: 15726: ~WritableFileWriter() { 15726: ThreadStatus::OperationType cur_op_type = 15726: ThreadStatusUtil::GetThreadOperation(); 15726: ThreadStatusUtil::SetThreadOperation( 15726: ThreadStatus::OperationType::OP_UNKNOWN); 15726: auto s = Close(IOOptions()); 15726: s.PermitUncheckedError(); 15726: ThreadStatusUtil::SetThreadOperation(cur_op_type); 15726: } 15726: 15726: std::string file_name() const { return file_name_; } 15726: 15726: 15726: 15726: IOStatus Append(const IOOptions& opts, const Slice& data, 15726: uint32_t crc32c_checksum = 0); 15726: 15726: IOStatus Pad(const IOOptions& opts, const size_t pad_bytes); 15726: 15726: IOStatus Flush(const IOOptions& opts); 15726: 15726: IOStatus Close(const IOOptions& opts); 15726: 15726: IOStatus Sync(const IOOptions& opts, bool use_fsync); 15726: 15726: 15726: 15726: 15726: IOStatus SyncWithoutFlush(const IOOptions& opts, bool use_fsync); 15726: 15726: uint64_t GetFileSize() const { 15726: return filesize_.load(std::memory_order_acquire); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: uint64_t GetFlushedSize() const { 15726: return flushed_size_.load(std::memory_order_acquire); 15726: } 15726: 15726: IOStatus InvalidateCache(size_t offset, size_t length) { 15726: return writable_file_->InvalidateCache(offset, length); 15726: } 15726: 15726: FSWritableFile* writable_file() const { return writable_file_.get(); } 15726: 15726: bool use_direct_io() { return writable_file_->use_direct_io(); } 15726: 15726: bool BufferIsEmpty() { return buf_.CurrentSize() == 0; } 15726: 15726: void TEST_SetFileChecksumGenerator( 15726: FileChecksumGenerator* checksum_generator) { 15726: checksum_generator_.reset(checksum_generator); 15726: } 15726: 15726: std::string GetFileChecksum(); 15726: 15726: const char* GetFileChecksumFuncName() const; 15726: 15726: bool seen_error() const { 15726: return seen_error_.load(std::memory_order_relaxed); 15726: } 15726: 15726: 15726: void reset_seen_error() { 15726: seen_error_.store(false, std::memory_order_relaxed); 15726: } 15726: void set_seen_error() { seen_error_.store(true, std::memory_order_relaxed); } 15726: 15726: IOStatus AssertFalseAndGetStatusForPrevError() { 15726: 15726: 15726: # 309 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 3 4 15726: (static_cast ( 15726: # 309 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 15726: sync_without_flush_called_ 15726: # 309 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 309 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 15726: "sync_without_flush_called_" 15726: # 309 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 309 "/build/reproducible-path/rocksdb-9.3.1/file/writable_file_writer.h" 15726: ; 15726: return IOStatus::IOError("Writer has previous error."); 15726: } 15726: 15726: private: 15726: 15726: static Env::IOPriority DecideRateLimiterPriority( 15726: Env::IOPriority writable_file_io_priority, 15726: Env::IOPriority op_rate_limiter_priority); 15726: 15726: 15726: 15726: 15726: IOStatus WriteDirect(const IOOptions& opts); 15726: 15726: IOStatus WriteDirectWithChecksum(const IOOptions& opts); 15726: 15726: 15726: IOStatus WriteBuffered(const IOOptions& opts, const char* data, size_t size); 15726: 15726: IOStatus WriteBufferedWithChecksum(const IOOptions& opts, const char* data, 15726: size_t size); 15726: 15726: IOStatus RangeSync(const IOOptions& opts, uint64_t offset, uint64_t nbytes); 15726: 15726: IOStatus SyncInternal(const IOOptions& opts, bool use_fsync); 15726: IOOptions FinalizeIOOptions(const IOOptions& opts) const; 15726: }; 15726: } 15726: # 22 "/build/reproducible-path/rocksdb-9.3.1/table/table_builder.h" 2 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/block_cache_tracer.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 18 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/block_cache_tracer.h" 15726: namespace rocksdb { 15726: class Env; 15726: class SystemClock; 15726: 15726: extern const uint64_t kMicrosInSecond; 15726: extern const uint64_t kSecondInMinute; 15726: extern const uint64_t kSecondInHour; 15726: 15726: struct BlockCacheTraceRecord; 15726: 15726: class BlockCacheTraceHelper { 15726: public: 15726: static bool IsGetOrMultiGetOnDataBlock(TraceType block_type, 15726: TableReaderCaller caller); 15726: static bool IsGetOrMultiGet(TableReaderCaller caller); 15726: static bool IsUserAccess(TableReaderCaller caller); 15726: 15726: 15726: static std::string ComputeRowKey(const BlockCacheTraceRecord& access); 15726: 15726: 15726: static uint64_t GetTableId(const BlockCacheTraceRecord& access); 15726: 15726: 15726: static uint64_t GetSequenceNumber(const BlockCacheTraceRecord& access); 15726: 15726: static uint64_t GetBlockOffsetInFile(const BlockCacheTraceRecord& access); 15726: 15726: static const std::string kUnknownColumnFamilyName; 15726: static const uint64_t kReservedGetId; 15726: }; 15726: # 69 "/build/reproducible-path/rocksdb-9.3.1/trace_replay/block_cache_tracer.h" 15726: struct BlockCacheLookupContext { 15726: BlockCacheLookupContext(const TableReaderCaller& _caller) : caller(_caller) {} 15726: BlockCacheLookupContext(const TableReaderCaller& _caller, uint64_t _get_id, 15726: bool _get_from_user_specified_snapshot) 15726: : caller(_caller), 15726: get_id(_get_id), 15726: get_from_user_specified_snapshot(_get_from_user_specified_snapshot) {} 15726: const TableReaderCaller caller; 15726: 15726: 15726: 15726: bool is_cache_hit = false; 15726: bool no_insert = false; 15726: TraceType block_type = TraceType::kTraceMax; 15726: uint64_t block_size = 0; 15726: std::string block_key; 15726: uint64_t num_keys_in_block = 0; 15726: 15726: 15726: 15726: uint64_t get_id = 0; 15726: std::string referenced_key; 15726: bool get_from_user_specified_snapshot = false; 15726: 15726: void FillLookupContext(bool _is_cache_hit, bool _no_insert, 15726: TraceType _block_type, uint64_t _block_size, 15726: const std::string& _block_key, 15726: uint64_t _num_keys_in_block) { 15726: is_cache_hit = _is_cache_hit; 15726: no_insert = _no_insert; 15726: block_type = _block_type; 15726: block_size = _block_size; 15726: block_key = _block_key; 15726: num_keys_in_block = _num_keys_in_block; 15726: } 15726: }; 15726: 15726: struct BlockCacheTraceHeader { 15726: uint64_t start_time; 15726: uint32_t rocksdb_major_version; 15726: uint32_t rocksdb_minor_version; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: class BlockCacheTraceWriterImpl : public BlockCacheTraceWriter { 15726: public: 15726: BlockCacheTraceWriterImpl(SystemClock* clock, 15726: const BlockCacheTraceWriterOptions& trace_options, 15726: std::unique_ptr&& trace_writer); 15726: ~BlockCacheTraceWriterImpl() = default; 15726: 15726: BlockCacheTraceWriterImpl(const BlockCacheTraceWriterImpl&) = delete; 15726: BlockCacheTraceWriterImpl& operator=(const BlockCacheTraceWriterImpl&) = 15726: delete; 15726: BlockCacheTraceWriterImpl(BlockCacheTraceWriterImpl&&) = delete; 15726: BlockCacheTraceWriterImpl& operator=(BlockCacheTraceWriterImpl&&) = delete; 15726: 15726: 15726: Status WriteBlockAccess(const BlockCacheTraceRecord& record, 15726: const Slice& block_key, const Slice& cf_name, 15726: const Slice& referenced_key) override; 15726: 15726: 15726: 15726: Status WriteHeader() override; 15726: 15726: private: 15726: SystemClock* clock_; 15726: BlockCacheTraceWriterOptions trace_options_; 15726: std::unique_ptr trace_writer_; 15726: }; 15726: 15726: 15726: 15726: 15726: class BlockCacheHumanReadableTraceWriter { 15726: public: 15726: ~BlockCacheHumanReadableTraceWriter(); 15726: 15726: Status NewWritableFile(const std::string& human_readable_trace_file_path, 15726: rocksdb::Env* env); 15726: 15726: Status WriteHumanReadableTraceRecord(const BlockCacheTraceRecord& access, 15726: uint64_t block_id, uint64_t get_key_id); 15726: 15726: private: 15726: char trace_record_buffer_[1024 * 1024]; 15726: std::unique_ptr 15726: human_readable_trace_file_writer_; 15726: }; 15726: 15726: 15726: 15726: class BlockCacheTraceReader { 15726: public: 15726: BlockCacheTraceReader(std::unique_ptr&& reader); 15726: virtual ~BlockCacheTraceReader() = default; 15726: 15726: BlockCacheTraceReader(const BlockCacheTraceReader&) = delete; 15726: BlockCacheTraceReader& operator=(const BlockCacheTraceReader&) = delete; 15726: BlockCacheTraceReader(BlockCacheTraceReader&&) = delete; 15726: BlockCacheTraceReader& operator=(BlockCacheTraceReader&&) = delete; 15726: 15726: Status ReadHeader(BlockCacheTraceHeader* header); 15726: 15726: Status ReadAccess(BlockCacheTraceRecord* record); 15726: 15726: private: 15726: std::unique_ptr trace_reader_; 15726: }; 15726: 15726: 15726: 15726: 15726: class BlockCacheHumanReadableTraceReader : public BlockCacheTraceReader { 15726: public: 15726: BlockCacheHumanReadableTraceReader(const std::string& trace_file_path); 15726: 15726: ~BlockCacheHumanReadableTraceReader(); 15726: 15726: Status ReadHeader(BlockCacheTraceHeader* header); 15726: 15726: Status ReadAccess(BlockCacheTraceRecord* record); 15726: 15726: private: 15726: std::ifstream human_readable_trace_reader_; 15726: }; 15726: 15726: 15726: 15726: 15726: class BlockCacheTracer { 15726: public: 15726: BlockCacheTracer(); 15726: ~BlockCacheTracer(); 15726: 15726: BlockCacheTracer(const BlockCacheTracer&) = delete; 15726: BlockCacheTracer& operator=(const BlockCacheTracer&) = delete; 15726: BlockCacheTracer(BlockCacheTracer&&) = delete; 15726: BlockCacheTracer& operator=(BlockCacheTracer&&) = delete; 15726: 15726: 15726: Status StartTrace(const BlockCacheTraceOptions& trace_options, 15726: std::unique_ptr&& trace_writer); 15726: 15726: 15726: void EndTrace(); 15726: 15726: bool is_tracing_enabled() const { 15726: return writer_.load(std::memory_order_relaxed); 15726: } 15726: 15726: Status WriteBlockAccess(const BlockCacheTraceRecord& record, 15726: const Slice& block_key, const Slice& cf_name, 15726: const Slice& referenced_key); 15726: 15726: 15726: uint64_t NextGetId(); 15726: 15726: private: 15726: BlockCacheTraceOptions trace_options_; 15726: 15726: InstrumentedMutex trace_writer_mutex_; 15726: std::atomic writer_; 15726: std::atomic get_id_counter_; 15726: }; 15726: 15726: } 15726: # 27 "/build/reproducible-path/rocksdb-9.3.1/table/table_builder.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: class Slice; 15726: class Status; 15726: 15726: struct TableReaderOptions { 15726: 15726: TableReaderOptions( 15726: const ImmutableOptions& _ioptions, 15726: const std::shared_ptr& _prefix_extractor, 15726: const EnvOptions& _env_options, 15726: const InternalKeyComparator& _internal_comparator, 15726: uint8_t _block_protection_bytes_per_key, bool _skip_filters = false, 15726: bool _immortal = false, bool _force_direct_prefetch = false, 15726: int _level = -1, BlockCacheTracer* const _block_cache_tracer = nullptr, 15726: size_t _max_file_size_for_l0_meta_pin = 0, 15726: const std::string& _cur_db_session_id = "", uint64_t _cur_file_num = 0, 15726: UniqueId64x2 _unique_id = {}, SequenceNumber _largest_seqno = 0, 15726: uint64_t _tail_size = 0, bool _user_defined_timestamps_persisted = true) 15726: : ioptions(_ioptions), 15726: prefix_extractor(_prefix_extractor), 15726: env_options(_env_options), 15726: internal_comparator(_internal_comparator), 15726: skip_filters(_skip_filters), 15726: immortal(_immortal), 15726: force_direct_prefetch(_force_direct_prefetch), 15726: level(_level), 15726: largest_seqno(_largest_seqno), 15726: block_cache_tracer(_block_cache_tracer), 15726: max_file_size_for_l0_meta_pin(_max_file_size_for_l0_meta_pin), 15726: cur_db_session_id(_cur_db_session_id), 15726: cur_file_num(_cur_file_num), 15726: unique_id(_unique_id), 15726: block_protection_bytes_per_key(_block_protection_bytes_per_key), 15726: tail_size(_tail_size), 15726: user_defined_timestamps_persisted(_user_defined_timestamps_persisted) {} 15726: 15726: const ImmutableOptions& ioptions; 15726: const std::shared_ptr& prefix_extractor; 15726: const EnvOptions& env_options; 15726: const InternalKeyComparator& internal_comparator; 15726: 15726: bool skip_filters; 15726: 15726: bool immortal; 15726: 15726: 15726: 15726: bool force_direct_prefetch; 15726: 15726: 15726: int level; 15726: 15726: SequenceNumber largest_seqno; 15726: BlockCacheTracer* const block_cache_tracer; 15726: 15726: 15726: const size_t max_file_size_for_l0_meta_pin; 15726: 15726: std::string cur_db_session_id; 15726: 15726: uint64_t cur_file_num; 15726: 15726: 15726: UniqueId64x2 unique_id; 15726: 15726: uint8_t block_protection_bytes_per_key; 15726: 15726: uint64_t tail_size; 15726: 15726: 15726: bool user_defined_timestamps_persisted; 15726: }; 15726: 15726: struct TableBuilderOptions { 15726: TableBuilderOptions( 15726: const ImmutableOptions& _ioptions, const MutableCFOptions& _moptions, 15726: const ReadOptions& _read_options, const WriteOptions& _write_options, 15726: const InternalKeyComparator& _internal_comparator, 15726: const InternalTblPropCollFactories* _internal_tbl_prop_coll_factories, 15726: CompressionType _compression_type, 15726: const CompressionOptions& _compression_opts, uint32_t _column_family_id, 15726: const std::string& _column_family_name, int _level, 15726: bool _is_bottommost = false, 15726: TableFileCreationReason _reason = TableFileCreationReason::kMisc, 15726: const int64_t _oldest_key_time = 0, 15726: const uint64_t _file_creation_time = 0, const std::string& _db_id = "", 15726: const std::string& _db_session_id = "", 15726: const uint64_t _target_file_size = 0, const uint64_t _cur_file_num = 0) 15726: : ioptions(_ioptions), 15726: moptions(_moptions), 15726: read_options(_read_options), 15726: write_options(_write_options), 15726: internal_comparator(_internal_comparator), 15726: internal_tbl_prop_coll_factories(_internal_tbl_prop_coll_factories), 15726: compression_type(_compression_type), 15726: compression_opts(_compression_opts), 15726: column_family_id(_column_family_id), 15726: column_family_name(_column_family_name), 15726: oldest_key_time(_oldest_key_time), 15726: target_file_size(_target_file_size), 15726: file_creation_time(_file_creation_time), 15726: db_id(_db_id), 15726: db_session_id(_db_session_id), 15726: level_at_creation(_level), 15726: is_bottommost(_is_bottommost), 15726: reason(_reason), 15726: cur_file_num(_cur_file_num) {} 15726: 15726: const ImmutableOptions& ioptions; 15726: const MutableCFOptions& moptions; 15726: const ReadOptions& read_options; 15726: const WriteOptions& write_options; 15726: const InternalKeyComparator& internal_comparator; 15726: const InternalTblPropCollFactories* internal_tbl_prop_coll_factories; 15726: const CompressionType compression_type; 15726: const CompressionOptions& compression_opts; 15726: const uint32_t column_family_id; 15726: const std::string& column_family_name; 15726: const int64_t oldest_key_time; 15726: const uint64_t target_file_size; 15726: const uint64_t file_creation_time; 15726: const std::string db_id; 15726: const std::string db_session_id; 15726: 15726: const int level_at_creation; 15726: const bool is_bottommost; 15726: const TableFileCreationReason reason; 15726: 15726: 15726: 15726: 15726: 15726: bool skip_filters = false; 15726: const uint64_t cur_file_num; 15726: }; 15726: # 172 "/build/reproducible-path/rocksdb-9.3.1/table/table_builder.h" 15726: class TableBuilder { 15726: public: 15726: 15726: virtual ~TableBuilder() {} 15726: 15726: 15726: 15726: 15726: virtual void Add(const Slice& key, const Slice& value) = 0; 15726: 15726: 15726: virtual Status status() const = 0; 15726: 15726: 15726: virtual IOStatus io_status() const = 0; 15726: 15726: 15726: 15726: virtual Status Finish() = 0; 15726: 15726: 15726: 15726: 15726: 15726: virtual void Abandon() = 0; 15726: 15726: 15726: virtual uint64_t NumEntries() const = 0; 15726: 15726: 15726: 15726: virtual bool IsEmpty() const { 15726: return NumEntries() == 0 && GetTableProperties().num_range_deletions == 0; 15726: } 15726: 15726: 15726: 15726: virtual uint64_t FileSize() const = 0; 15726: 15726: 15726: 15726: 15726: virtual uint64_t EstimatedFileSize() const { return FileSize(); } 15726: 15726: virtual uint64_t GetTailSize() const { return 0; } 15726: 15726: 15726: 15726: virtual bool NeedCompact() const { return false; } 15726: 15726: 15726: virtual TableProperties GetTableProperties() const = 0; 15726: 15726: 15726: virtual std::string GetFileChecksum() const = 0; 15726: 15726: 15726: virtual const char* GetFileChecksumFuncName() const = 0; 15726: 15726: 15726: 15726: virtual void SetSeqnoTimeTableProperties( 15726: const SeqnoToTimeMapping& , 15726: uint64_t ){} 15726: }; 15726: 15726: } 15726: # 26 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 15 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 15726: namespace rocksdb { 15726: # 41 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 15726: template > 15726: class BinaryHeap { 15726: public: 15726: BinaryHeap() {} 15726: explicit BinaryHeap(Compare cmp) : cmp_(std::move(cmp)) {} 15726: 15726: void push(const T& value) { 15726: data_.push_back(value); 15726: upheap(data_.size() - 1); 15726: } 15726: 15726: void push(T&& value) { 15726: data_.push_back(std::move(value)); 15726: upheap(data_.size() - 1); 15726: } 15726: 15726: const T& top() const { 15726: 15726: # 58 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 15726: (static_cast ( 15726: # 58 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 15726: !empty() 15726: # 58 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 58 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 15726: "!empty()" 15726: # 58 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 58 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 15726: ; 15726: return data_.front(); 15726: } 15726: 15726: void replace_top(const T& value) { 15726: 15726: # 63 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 15726: (static_cast ( 15726: # 63 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 15726: !empty() 15726: # 63 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 63 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 15726: "!empty()" 15726: # 63 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 63 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 15726: ; 15726: data_.front() = value; 15726: downheap(get_root()); 15726: } 15726: 15726: void replace_top(T&& value) { 15726: 15726: # 69 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 15726: (static_cast ( 15726: # 69 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 15726: !empty() 15726: # 69 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 69 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 15726: "!empty()" 15726: # 69 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 69 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 15726: ; 15726: data_.front() = std::move(value); 15726: downheap(get_root()); 15726: } 15726: 15726: void pop() { 15726: 15726: # 75 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 15726: (static_cast ( 15726: # 75 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 15726: !empty() 15726: # 75 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 75 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 15726: "!empty()" 15726: # 75 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 75 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 15726: ; 15726: if (data_.size() > 1) { 15726: 15726: 15726: 15726: data_.front() = std::move(data_.back()); 15726: } 15726: data_.pop_back(); 15726: if (!empty()) { 15726: downheap(get_root()); 15726: } else { 15726: reset_root_cmp_cache(); 15726: } 15726: } 15726: 15726: void swap(BinaryHeap& other) { 15726: std::swap(cmp_, other.cmp_); 15726: data_.swap(other.data_); 15726: std::swap(root_cmp_cache_, other.root_cmp_cache_); 15726: } 15726: 15726: void clear() { 15726: data_.clear(); 15726: reset_root_cmp_cache(); 15726: } 15726: 15726: bool empty() const { return data_.empty(); } 15726: 15726: size_t size() const { return data_.size(); } 15726: 15726: void reset_root_cmp_cache() { 15726: root_cmp_cache_ = std::numeric_limits::max(); 15726: } 15726: 15726: private: 15726: static inline size_t get_root() { return 0; } 15726: static inline size_t get_parent(size_t index) { return (index - 1) / 2; } 15726: static inline size_t get_left(size_t index) { return 2 * index + 1; } 15726: static inline size_t get_right(size_t index) { return 2 * index + 2; } 15726: 15726: void upheap(size_t index) { 15726: T v = std::move(data_[index]); 15726: while (index > get_root()) { 15726: const size_t parent = get_parent(index); 15726: if (!cmp_(data_[parent], v)) { 15726: break; 15726: } 15726: data_[index] = std::move(data_[parent]); 15726: index = parent; 15726: } 15726: data_[index] = std::move(v); 15726: reset_root_cmp_cache(); 15726: } 15726: 15726: void downheap(size_t index) { 15726: T v = std::move(data_[index]); 15726: 15726: size_t picked_child = std::numeric_limits::max(); 15726: while (1) { 15726: const size_t left_child = get_left(index); 15726: if (get_left(index) >= data_.size()) { 15726: break; 15726: } 15726: const size_t right_child = left_child + 1; 15726: 15726: # 139 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 15726: (static_cast ( 15726: # 139 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 15726: right_child == get_right(index) 15726: # 139 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 139 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 15726: "right_child == get_right(index)" 15726: # 139 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 139 "/build/reproducible-path/rocksdb-9.3.1/util/heap.h" 15726: ; 15726: picked_child = left_child; 15726: if (index == 0 && root_cmp_cache_ < data_.size()) { 15726: picked_child = root_cmp_cache_; 15726: } else if (right_child < data_.size() && 15726: cmp_(data_[left_child], data_[right_child])) { 15726: picked_child = right_child; 15726: } 15726: if (!cmp_(v, data_[picked_child])) { 15726: break; 15726: } 15726: data_[index] = std::move(data_[picked_child]); 15726: index = picked_child; 15726: } 15726: 15726: if (index == 0) { 15726: 15726: 15726: 15726: 15726: root_cmp_cache_ = picked_child; 15726: } else { 15726: 15726: reset_root_cmp_cache(); 15726: } 15726: 15726: data_[index] = std::move(v); 15726: } 15726: 15726: Compare cmp_; 15726: autovector data_; 15726: 15726: size_t root_cmp_cache_ = std::numeric_limits::max(); 15726: }; 15726: 15726: } 15726: # 27 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/util/kv_map.h" 1 15726: 15726: 15726: 15726: 15726: 15726: # 14 "/build/reproducible-path/rocksdb-9.3.1/util/kv_map.h" 15726: namespace rocksdb { 15726: namespace stl_wrappers { 15726: 15726: struct LessOfComparator { 15726: explicit LessOfComparator(const Comparator* c = BytewiseComparator()) 15726: : cmp(c) {} 15726: 15726: bool operator()(const std::string& a, const std::string& b) const { 15726: return cmp->Compare(Slice(a), Slice(b)) < 0; 15726: } 15726: bool operator()(const Slice& a, const Slice& b) const { 15726: return cmp->Compare(a, b) < 0; 15726: } 15726: 15726: const Comparator* cmp; 15726: }; 15726: 15726: using KVMap = std::map; 15726: } 15726: } 15726: # 28 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 2 15726: 15726: namespace rocksdb { 15726: 15726: class TruncatedRangeDelIterator { 15726: public: 15726: TruncatedRangeDelIterator( 15726: std::unique_ptr iter, 15726: const InternalKeyComparator* icmp, const InternalKey* smallest, 15726: const InternalKey* largest); 15726: 15726: void SetRangeDelReadSeqno(SequenceNumber read_seqno) { 15726: iter_->SetRangeDelReadSeqno(read_seqno); 15726: } 15726: 15726: bool Valid() const; 15726: 15726: void Next() { iter_->TopNext(); } 15726: void Prev() { iter_->TopPrev(); } 15726: 15726: void InternalNext() { iter_->Next(); } 15726: 15726: 15726: 15726: 15726: 15726: void Seek(const Slice& target); 15726: 15726: 15726: void SeekInternalKey(const Slice& target); 15726: 15726: 15726: 15726: 15726: void SeekForPrev(const Slice& target); 15726: 15726: void SeekToFirst(); 15726: void SeekToLast(); 15726: 15726: ParsedInternalKey start_key() const { 15726: return (smallest_ == nullptr || 15726: icmp_->Compare(*smallest_, iter_->parsed_start_key()) <= 0) 15726: ? iter_->parsed_start_key() 15726: : *smallest_; 15726: } 15726: 15726: ParsedInternalKey end_key() const { 15726: return (largest_ == nullptr || 15726: icmp_->Compare(iter_->parsed_end_key(), *largest_) <= 0) 15726: ? iter_->parsed_end_key() 15726: : *largest_; 15726: } 15726: 15726: SequenceNumber seq() const { return iter_->seq(); } 15726: Slice timestamp() const { 15726: 15726: # 82 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 15726: (static_cast ( 15726: # 82 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 15726: icmp_->user_comparator()->timestamp_size() 15726: # 82 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 82 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 15726: "icmp_->user_comparator()->timestamp_size()" 15726: # 82 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 82 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 15726: ; 15726: return iter_->timestamp(); 15726: } 15726: void SetTimestampUpperBound(const Slice* ts_upper_bound) { 15726: iter_->SetTimestampUpperBound(ts_upper_bound); 15726: } 15726: 15726: std::map> 15726: SplitBySnapshot(const std::vector& snapshots); 15726: 15726: SequenceNumber upper_bound() const { return iter_->upper_bound(); } 15726: 15726: SequenceNumber lower_bound() const { return iter_->lower_bound(); } 15726: 15726: private: 15726: std::unique_ptr iter_; 15726: const InternalKeyComparator* icmp_; 15726: const ParsedInternalKey* smallest_ = nullptr; 15726: const ParsedInternalKey* largest_ = nullptr; 15726: std::list pinned_bounds_; 15726: 15726: const InternalKey* smallest_ikey_; 15726: const InternalKey* largest_ikey_; 15726: }; 15726: 15726: struct SeqMaxComparator { 15726: bool operator()(const TruncatedRangeDelIterator* a, 15726: const TruncatedRangeDelIterator* b) const { 15726: return a->seq() > b->seq(); 15726: } 15726: }; 15726: 15726: struct StartKeyMinComparator { 15726: explicit StartKeyMinComparator(const InternalKeyComparator* c) : icmp(c) {} 15726: 15726: bool operator()(const TruncatedRangeDelIterator* a, 15726: const TruncatedRangeDelIterator* b) const { 15726: return icmp->Compare(a->start_key(), b->start_key()) > 0; 15726: } 15726: 15726: const InternalKeyComparator* icmp; 15726: }; 15726: 15726: class ForwardRangeDelIterator { 15726: public: 15726: explicit ForwardRangeDelIterator(const InternalKeyComparator* icmp); 15726: 15726: bool ShouldDelete(const ParsedInternalKey& parsed); 15726: void Invalidate(); 15726: 15726: void AddNewIter(TruncatedRangeDelIterator* iter, 15726: const ParsedInternalKey& parsed) { 15726: iter->Seek(parsed.user_key); 15726: PushIter(iter, parsed); 15726: 15726: # 136 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 15726: (static_cast ( 15726: # 136 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 15726: active_iters_.size() == active_seqnums_.size() 15726: # 136 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 136 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 15726: "active_iters_.size() == active_seqnums_.size()" 15726: # 136 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 136 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 15726: ; 15726: } 15726: 15726: size_t UnusedIdx() const { return unused_idx_; } 15726: void IncUnusedIdx() { unused_idx_++; } 15726: 15726: private: 15726: using ActiveSeqSet = 15726: std::multiset; 15726: 15726: struct EndKeyMinComparator { 15726: explicit EndKeyMinComparator(const InternalKeyComparator* c) : icmp(c) {} 15726: 15726: bool operator()(const ActiveSeqSet::const_iterator& a, 15726: const ActiveSeqSet::const_iterator& b) const { 15726: return icmp->Compare((*a)->end_key(), (*b)->end_key()) > 0; 15726: } 15726: 15726: const InternalKeyComparator* icmp; 15726: }; 15726: 15726: void PushIter(TruncatedRangeDelIterator* iter, 15726: const ParsedInternalKey& parsed) { 15726: if (!iter->Valid()) { 15726: 15726: 15726: return; 15726: } 15726: int cmp = icmp_->Compare(parsed, iter->start_key()); 15726: if (cmp < 0) { 15726: PushInactiveIter(iter); 15726: } else { 15726: PushActiveIter(iter); 15726: } 15726: } 15726: 15726: void PushActiveIter(TruncatedRangeDelIterator* iter) { 15726: auto seq_pos = active_seqnums_.insert(iter); 15726: active_iters_.push(seq_pos); 15726: } 15726: 15726: TruncatedRangeDelIterator* PopActiveIter() { 15726: auto active_top = active_iters_.top(); 15726: auto iter = *active_top; 15726: active_iters_.pop(); 15726: active_seqnums_.erase(active_top); 15726: return iter; 15726: } 15726: 15726: void PushInactiveIter(TruncatedRangeDelIterator* iter) { 15726: inactive_iters_.push(iter); 15726: } 15726: 15726: TruncatedRangeDelIterator* PopInactiveIter() { 15726: auto* iter = inactive_iters_.top(); 15726: inactive_iters_.pop(); 15726: return iter; 15726: } 15726: 15726: const InternalKeyComparator* icmp_; 15726: size_t unused_idx_; 15726: ActiveSeqSet active_seqnums_; 15726: BinaryHeap active_iters_; 15726: BinaryHeap inactive_iters_; 15726: }; 15726: 15726: class ReverseRangeDelIterator { 15726: public: 15726: explicit ReverseRangeDelIterator(const InternalKeyComparator* icmp); 15726: 15726: bool ShouldDelete(const ParsedInternalKey& parsed); 15726: void Invalidate(); 15726: 15726: void AddNewIter(TruncatedRangeDelIterator* iter, 15726: const ParsedInternalKey& parsed) { 15726: iter->SeekForPrev(parsed.user_key); 15726: PushIter(iter, parsed); 15726: 15726: # 213 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 15726: (static_cast ( 15726: # 213 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 15726: active_iters_.size() == active_seqnums_.size() 15726: # 213 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 213 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 15726: "active_iters_.size() == active_seqnums_.size()" 15726: # 213 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 213 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 15726: ; 15726: } 15726: 15726: size_t UnusedIdx() const { return unused_idx_; } 15726: void IncUnusedIdx() { unused_idx_++; } 15726: 15726: private: 15726: using ActiveSeqSet = 15726: std::multiset; 15726: 15726: struct EndKeyMaxComparator { 15726: explicit EndKeyMaxComparator(const InternalKeyComparator* c) : icmp(c) {} 15726: 15726: bool operator()(const TruncatedRangeDelIterator* a, 15726: const TruncatedRangeDelIterator* b) const { 15726: return icmp->Compare(a->end_key(), b->end_key()) < 0; 15726: } 15726: 15726: const InternalKeyComparator* icmp; 15726: }; 15726: struct StartKeyMaxComparator { 15726: explicit StartKeyMaxComparator(const InternalKeyComparator* c) : icmp(c) {} 15726: 15726: bool operator()(const ActiveSeqSet::const_iterator& a, 15726: const ActiveSeqSet::const_iterator& b) const { 15726: return icmp->Compare((*a)->start_key(), (*b)->start_key()) < 0; 15726: } 15726: 15726: const InternalKeyComparator* icmp; 15726: }; 15726: 15726: void PushIter(TruncatedRangeDelIterator* iter, 15726: const ParsedInternalKey& parsed) { 15726: if (!iter->Valid()) { 15726: 15726: 15726: } else if (icmp_->Compare(iter->end_key(), parsed) <= 0) { 15726: PushInactiveIter(iter); 15726: } else { 15726: PushActiveIter(iter); 15726: } 15726: } 15726: 15726: void PushActiveIter(TruncatedRangeDelIterator* iter) { 15726: auto seq_pos = active_seqnums_.insert(iter); 15726: active_iters_.push(seq_pos); 15726: } 15726: 15726: TruncatedRangeDelIterator* PopActiveIter() { 15726: auto active_top = active_iters_.top(); 15726: auto iter = *active_top; 15726: active_iters_.pop(); 15726: active_seqnums_.erase(active_top); 15726: return iter; 15726: } 15726: 15726: void PushInactiveIter(TruncatedRangeDelIterator* iter) { 15726: inactive_iters_.push(iter); 15726: } 15726: 15726: TruncatedRangeDelIterator* PopInactiveIter() { 15726: auto* iter = inactive_iters_.top(); 15726: inactive_iters_.pop(); 15726: return iter; 15726: } 15726: 15726: const InternalKeyComparator* icmp_; 15726: size_t unused_idx_; 15726: ActiveSeqSet active_seqnums_; 15726: BinaryHeap active_iters_; 15726: BinaryHeap inactive_iters_; 15726: }; 15726: 15726: enum class RangeDelPositioningMode { kForwardTraversal, kBackwardTraversal }; 15726: class RangeDelAggregator { 15726: public: 15726: explicit RangeDelAggregator(const InternalKeyComparator* icmp) 15726: : icmp_(icmp) {} 15726: virtual ~RangeDelAggregator() {} 15726: 15726: virtual void AddTombstones( 15726: std::unique_ptr input_iter, 15726: const InternalKey* smallest = nullptr, 15726: const InternalKey* largest = nullptr) = 0; 15726: 15726: bool ShouldDelete(const Slice& ikey, RangeDelPositioningMode mode) { 15726: ParsedInternalKey parsed; 15726: 15726: Status pik_status = 15726: ParseInternalKey(ikey, &parsed, false ); 15726: 15726: # 303 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 15726: (static_cast ( 15726: # 303 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 15726: pik_status.ok() 15726: # 303 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 303 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 15726: "pik_status.ok()" 15726: # 303 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 303 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 15726: ; 15726: if (!pik_status.ok()) { 15726: return false; 15726: } 15726: 15726: return ShouldDelete(parsed, mode); 15726: } 15726: virtual bool ShouldDelete(const ParsedInternalKey& parsed, 15726: RangeDelPositioningMode mode) = 0; 15726: 15726: virtual void InvalidateRangeDelMapPositions() = 0; 15726: 15726: virtual bool IsEmpty() const = 0; 15726: 15726: bool AddFile(uint64_t file_number) { 15726: return files_seen_.insert(file_number).second; 15726: } 15726: 15726: protected: 15726: class StripeRep { 15726: public: 15726: StripeRep(const InternalKeyComparator* icmp, SequenceNumber upper_bound, 15726: SequenceNumber lower_bound) 15726: : icmp_(icmp), 15726: forward_iter_(icmp), 15726: reverse_iter_(icmp), 15726: upper_bound_(upper_bound), 15726: lower_bound_(lower_bound) {} 15726: 15726: void AddTombstones(std::unique_ptr input_iter) { 15726: iters_.push_back(std::move(input_iter)); 15726: } 15726: 15726: bool IsEmpty() const { return iters_.empty(); } 15726: 15726: bool ShouldDelete(const ParsedInternalKey& parsed, 15726: RangeDelPositioningMode mode); 15726: 15726: void Invalidate() { 15726: if (!IsEmpty()) { 15726: InvalidateForwardIter(); 15726: InvalidateReverseIter(); 15726: } 15726: } 15726: 15726: 15726: 15726: bool IsRangeOverlapped(const Slice& start, const Slice& end); 15726: 15726: private: 15726: bool InStripe(SequenceNumber seq) const { 15726: return lower_bound_ <= seq && seq <= upper_bound_; 15726: } 15726: 15726: void InvalidateForwardIter() { forward_iter_.Invalidate(); } 15726: 15726: void InvalidateReverseIter() { reverse_iter_.Invalidate(); } 15726: 15726: const InternalKeyComparator* icmp_; 15726: std::vector> iters_; 15726: ForwardRangeDelIterator forward_iter_; 15726: ReverseRangeDelIterator reverse_iter_; 15726: SequenceNumber upper_bound_; 15726: SequenceNumber lower_bound_; 15726: }; 15726: 15726: const InternalKeyComparator* icmp_; 15726: 15726: private: 15726: std::set files_seen_; 15726: }; 15726: 15726: class ReadRangeDelAggregator final : public RangeDelAggregator { 15726: public: 15726: ReadRangeDelAggregator(const InternalKeyComparator* icmp, 15726: SequenceNumber upper_bound) 15726: : RangeDelAggregator(icmp), 15726: rep_(icmp, upper_bound, 0 ) {} 15726: ~ReadRangeDelAggregator() override {} 15726: 15726: using RangeDelAggregator::ShouldDelete; 15726: void AddTombstones( 15726: std::unique_ptr input_iter, 15726: const InternalKey* smallest = nullptr, 15726: const InternalKey* largest = nullptr) override; 15726: 15726: bool ShouldDelete(const ParsedInternalKey& parsed, 15726: RangeDelPositioningMode mode) final override { 15726: if (rep_.IsEmpty()) { 15726: return false; 15726: } 15726: return ShouldDeleteImpl(parsed, mode); 15726: } 15726: 15726: bool IsRangeOverlapped(const Slice& start, const Slice& end); 15726: 15726: void InvalidateRangeDelMapPositions() override { rep_.Invalidate(); } 15726: 15726: bool IsEmpty() const override { return rep_.IsEmpty(); } 15726: 15726: private: 15726: StripeRep rep_; 15726: 15726: bool ShouldDeleteImpl(const ParsedInternalKey& parsed, 15726: RangeDelPositioningMode mode); 15726: }; 15726: 15726: class CompactionRangeDelAggregator : public RangeDelAggregator { 15726: public: 15726: CompactionRangeDelAggregator(const InternalKeyComparator* icmp, 15726: const std::vector& snapshots, 15726: const std::string* full_history_ts_low = nullptr, 15726: const std::string* trim_ts = nullptr) 15726: : RangeDelAggregator(icmp), snapshots_(&snapshots) { 15726: if (full_history_ts_low) { 15726: ts_upper_bound_ = *full_history_ts_low; 15726: } 15726: if (trim_ts) { 15726: trim_ts_ = *trim_ts; 15726: 15726: 15726: if (ts_upper_bound_.empty()) { 15726: ts_upper_bound_ = trim_ts_; 15726: } else if (!trim_ts_.empty() && icmp->user_comparator()->CompareTimestamp( 15726: trim_ts_, ts_upper_bound_) < 0) { 15726: ts_upper_bound_ = trim_ts_; 15726: } 15726: } 15726: } 15726: ~CompactionRangeDelAggregator() override {} 15726: 15726: void AddTombstones( 15726: std::unique_ptr input_iter, 15726: const InternalKey* smallest = nullptr, 15726: const InternalKey* largest = nullptr) override; 15726: 15726: using RangeDelAggregator::ShouldDelete; 15726: bool ShouldDelete(const ParsedInternalKey& parsed, 15726: RangeDelPositioningMode mode) override; 15726: 15726: bool IsRangeOverlapped(const Slice& start, const Slice& end); 15726: 15726: void InvalidateRangeDelMapPositions() override { 15726: for (auto& rep : reps_) { 15726: rep.second.Invalidate(); 15726: } 15726: } 15726: 15726: bool IsEmpty() const override { 15726: for (const auto& rep : reps_) { 15726: if (!rep.second.IsEmpty()) { 15726: return false; 15726: } 15726: } 15726: return true; 15726: } 15726: # 468 "/build/reproducible-path/rocksdb-9.3.1/db/range_del_aggregator.h" 15726: std::unique_ptr NewIterator( 15726: const Slice* lower_bound = nullptr, const Slice* upper_bound = nullptr); 15726: 15726: private: 15726: std::vector> parent_iters_; 15726: std::map reps_; 15726: 15726: const std::vector* snapshots_; 15726: 15726: Slice ts_upper_bound_{}; 15726: Slice trim_ts_{}; 15726: }; 15726: 15726: } 15726: # 14 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/snapshot_checker.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: enum class SnapshotCheckerResult : int { 15726: kInSnapshot = 0, 15726: kNotInSnapshot = 1, 15726: 15726: 15726: kSnapshotReleased = 2, 15726: }; 15726: 15726: 15726: class SnapshotChecker { 15726: public: 15726: virtual ~SnapshotChecker() {} 15726: virtual SnapshotCheckerResult CheckInSnapshot( 15726: SequenceNumber sequence, SequenceNumber snapshot_sequence) const = 0; 15726: }; 15726: 15726: class DisableGCSnapshotChecker : public SnapshotChecker { 15726: public: 15726: virtual ~DisableGCSnapshotChecker() {} 15726: SnapshotCheckerResult CheckInSnapshot( 15726: SequenceNumber , 15726: SequenceNumber ) const override { 15726: 15726: return SnapshotCheckerResult::kNotInSnapshot; 15726: } 15726: static DisableGCSnapshotChecker* Instance(); 15726: 15726: protected: 15726: explicit DisableGCSnapshotChecker() {} 15726: }; 15726: 15726: class WritePreparedTxnDB; 15726: 15726: 15726: 15726: class WritePreparedSnapshotChecker : public SnapshotChecker { 15726: public: 15726: explicit WritePreparedSnapshotChecker(WritePreparedTxnDB* txn_db); 15726: virtual ~WritePreparedSnapshotChecker() {} 15726: 15726: SnapshotCheckerResult CheckInSnapshot( 15726: SequenceNumber sequence, SequenceNumber snapshot_sequence) const override; 15726: 15726: private: 15726: const WritePreparedTxnDB* const txn_db_; 15726: }; 15726: 15726: } 15726: # 15 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/db/wide/wide_column_serialization.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 15 "/build/reproducible-path/rocksdb-9.3.1/db/wide/wide_column_serialization.h" 15726: namespace rocksdb { 15726: 15726: class Slice; 15726: # 44 "/build/reproducible-path/rocksdb-9.3.1/db/wide/wide_column_serialization.h" 15726: class WideColumnSerialization { 15726: public: 15726: static Status Serialize(const WideColumns& columns, std::string& output); 15726: 15726: static Status Deserialize(Slice& input, WideColumns& columns); 15726: 15726: static WideColumns::const_iterator Find(const WideColumns& columns, 15726: const Slice& column_name); 15726: static Status GetValueOfDefaultColumn(Slice& input, Slice& value); 15726: 15726: static constexpr uint32_t kCurrentVersion = 1; 15726: }; 15726: 15726: } 15726: # 16 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 1 15726: # 9 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: 15726: 15726: # 1 "/usr/include/c++/13/cassert" 1 3 15726: # 41 "/usr/include/c++/13/cassert" 3 15726: 15726: # 42 "/usr/include/c++/13/cassert" 3 15726: 15726: 15726: # 1 "/usr/include/assert.h" 1 3 4 15726: # 45 "/usr/include/c++/13/cassert" 2 3 15726: # 12 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 2 15726: # 23 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: namespace rocksdb { 15726: 15726: class Slice; 15726: class SliceTransform; 15726: # 54 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: class CompactionFilter : public Customizable { 15726: public: 15726: 15726: 15726: enum ValueType { 15726: 15726: kValue, 15726: 15726: kMergeOperand, 15726: 15726: 15726: 15726: 15726: kBlobIndex, 15726: 15726: kWideColumnEntity, 15726: }; 15726: 15726: 15726: 15726: 15726: enum class Decision { 15726: 15726: kKeep, 15726: # 89 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: kRemove, 15726: 15726: 15726: 15726: 15726: 15726: kChangeValue, 15726: # 119 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: kRemoveAndSkipUntil, 15726: 15726: 15726: 15726: kChangeBlobIndex, 15726: 15726: 15726: 15726: kIOError, 15726: 15726: 15726: 15726: 15726: 15726: kPurge, 15726: 15726: 15726: 15726: 15726: 15726: 15726: kChangeWideColumnEntity, 15726: # 150 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: kUndetermined, 15726: }; 15726: 15726: 15726: enum class BlobDecision { kKeep, kChangeValue, kCorruption, kIOError }; 15726: 15726: 15726: struct Context { 15726: 15726: 15726: bool is_full_compaction; 15726: 15726: 15726: bool is_manual_compaction; 15726: 15726: 15726: int input_start_level = kUnknownStartLevel; 15726: 15726: uint32_t column_family_id; 15726: 15726: TableFileCreationReason reason; 15726: 15726: 15726: 15726: 15726: TablePropertiesCollection input_table_properties; 15726: 15726: static const int kUnknownStartLevel = -1; 15726: }; 15726: 15726: virtual ~CompactionFilter() {} 15726: static const char* Type() { return "CompactionFilter"; } 15726: static Status CreateFromString(const ConfigOptions& config_options, 15726: const std::string& name, 15726: const CompactionFilter** result); 15726: # 201 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: virtual bool Filter(int , const Slice& , 15726: const Slice& , 15726: std::string* , 15726: bool* ) const { 15726: return false; 15726: } 15726: # 217 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: virtual bool FilterMergeOperand(int , const Slice& , 15726: const Slice& ) const { 15726: return false; 15726: } 15726: # 234 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: virtual Decision FilterV2(int level, const Slice& key, ValueType value_type, 15726: const Slice& existing_value, std::string* new_value, 15726: std::string* ) const { 15726: switch (value_type) { 15726: case ValueType::kValue: { 15726: bool value_changed = false; 15726: bool rv = Filter(level, key, existing_value, new_value, &value_changed); 15726: if (rv) { 15726: return Decision::kRemove; 15726: } 15726: return value_changed ? Decision::kChangeValue : Decision::kKeep; 15726: } 15726: 15726: case ValueType::kMergeOperand: { 15726: bool rv = FilterMergeOperand(level, key, existing_value); 15726: return rv ? Decision::kRemove : Decision::kKeep; 15726: } 15726: 15726: case ValueType::kBlobIndex: 15726: return Decision::kKeep; 15726: 15726: default: 15726: 15726: # 256 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 15726: (static_cast ( 15726: # 256 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: false 15726: # 256 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 256 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: "false" 15726: # 256 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 256 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: ; 15726: return Decision::kKeep; 15726: } 15726: } 15726: # 281 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: virtual Decision FilterV3( 15726: int level, const Slice& key, ValueType value_type, 15726: const Slice* existing_value, const WideColumns* existing_columns, 15726: std::string* new_value, 15726: std::vector>* , 15726: std::string* skip_until) const { 15726: 15726: 15726: 15726: 15726: 15726: # 291 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 15726: (static_cast ( 15726: # 291 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: !existing_value || !existing_columns 15726: # 291 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 291 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: "!existing_value || !existing_columns" 15726: # 291 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 291 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: ; 15726: 15726: # 292 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 15726: (static_cast ( 15726: # 292 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: value_type == ValueType::kWideColumnEntity || existing_value 15726: # 292 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 292 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: "value_type == ValueType::kWideColumnEntity || existing_value" 15726: # 292 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 292 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: ; 15726: 15726: # 293 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 15726: (static_cast ( 15726: # 293 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: value_type != ValueType::kWideColumnEntity || existing_columns 15726: # 293 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 293 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: "value_type != ValueType::kWideColumnEntity || existing_columns" 15726: # 293 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 293 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: ; 15726: 15726: if (value_type == ValueType::kWideColumnEntity) { 15726: return Decision::kKeep; 15726: } 15726: 15726: return FilterV2(level, key, value_type, *existing_value, new_value, 15726: skip_until); 15726: } 15726: 15726: 15726: virtual BlobDecision PrepareBlobOutput(const Slice& , 15726: const Slice& , 15726: std::string* ) const { 15726: return BlobDecision::kKeep; 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual bool IgnoreSnapshots() const { return true; } 15726: 15726: 15726: 15726: const char* Name() const override = 0; 15726: 15726: 15726: virtual bool IsStackedBlobDbInternalCompactionFilter() const { return false; } 15726: # 334 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: virtual Decision FilterBlobByKey(int , const Slice& , 15726: std::string* , 15726: std::string* ) const { 15726: return Decision::kUndetermined; 15726: } 15726: }; 15726: # 349 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/compaction_filter.h" 15726: class CompactionFilterFactory : public Customizable { 15726: public: 15726: virtual ~CompactionFilterFactory() {} 15726: static const char* Type() { return "CompactionFilterFactory"; } 15726: static Status CreateFromString( 15726: const ConfigOptions& config_options, const std::string& name, 15726: std::shared_ptr* result); 15726: 15726: 15726: 15726: 15726: virtual bool ShouldFilterTableFileCreation( 15726: TableFileCreationReason reason) const { 15726: 15726: 15726: return reason == TableFileCreationReason::kCompaction; 15726: } 15726: 15726: virtual std::unique_ptr CreateCompactionFilter( 15726: const CompactionFilter::Context& context) = 0; 15726: 15726: 15726: const char* Name() const override = 0; 15726: }; 15726: 15726: } 15726: # 17 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 1 "/usr/include/c++/13/variant" 1 3 15726: # 32 "/usr/include/c++/13/variant" 3 15726: 15726: # 33 "/usr/include/c++/13/variant" 3 15726: # 58 "/usr/include/c++/13/variant" 3 15726: 15726: # 58 "/usr/include/c++/13/variant" 3 15726: namespace std __attribute__ ((__visibility__ ("default"))) 15726: { 15726: 15726: 15726: template class tuple; 15726: template class variant; 15726: template struct hash; 15726: 15726: template 15726: struct variant_size; 15726: 15726: template 15726: struct variant_size : variant_size<_Variant> {}; 15726: 15726: template 15726: struct variant_size : variant_size<_Variant> {}; 15726: 15726: template 15726: struct variant_size : variant_size<_Variant> {}; 15726: 15726: template 15726: struct variant_size> 15726: : std::integral_constant {}; 15726: 15726: template 15726: inline constexpr size_t variant_size_v = variant_size<_Variant>::value; 15726: 15726: template 15726: inline constexpr size_t 15726: variant_size_v> = sizeof...(_Types); 15726: 15726: template 15726: inline constexpr size_t 15726: variant_size_v> = sizeof...(_Types); 15726: 15726: template 15726: struct variant_alternative; 15726: 15726: template 15726: struct variant_alternative<_Np, variant<_Types...>> 15726: { 15726: static_assert(_Np < sizeof...(_Types)); 15726: 15726: using type = typename _Nth_type<_Np, _Types...>::type; 15726: }; 15726: 15726: template 15726: using variant_alternative_t = 15726: typename variant_alternative<_Np, _Variant>::type; 15726: 15726: template 15726: struct variant_alternative<_Np, const _Variant> 15726: { using type = const variant_alternative_t<_Np, _Variant>; }; 15726: 15726: template 15726: struct variant_alternative<_Np, volatile _Variant> 15726: { using type = volatile variant_alternative_t<_Np, _Variant>; }; 15726: 15726: template 15726: struct variant_alternative<_Np, const volatile _Variant> 15726: { using type = const volatile variant_alternative_t<_Np, _Variant>; }; 15726: 15726: inline constexpr size_t variant_npos = -1; 15726: 15726: template 15726: constexpr variant_alternative_t<_Np, variant<_Types...>>& 15726: get(variant<_Types...>&); 15726: 15726: template 15726: constexpr variant_alternative_t<_Np, variant<_Types...>>&& 15726: get(variant<_Types...>&&); 15726: 15726: template 15726: constexpr variant_alternative_t<_Np, variant<_Types...>> const& 15726: get(const variant<_Types...>&); 15726: 15726: template 15726: constexpr variant_alternative_t<_Np, variant<_Types...>> const&& 15726: get(const variant<_Types...>&&); 15726: 15726: template 15726: constexpr decltype(auto) 15726: __do_visit(_Visitor&& __visitor, _Variants&&... __variants); 15726: 15726: template 15726: 15726: decltype(auto) 15726: __variant_cast(_Tp&& __rhs) 15726: { 15726: if constexpr (is_lvalue_reference_v<_Tp>) 15726: { 15726: if constexpr (is_const_v>) 15726: return static_cast&>(__rhs); 15726: else 15726: return static_cast&>(__rhs); 15726: } 15726: else 15726: return static_cast&&>(__rhs); 15726: } 15726: 15726: namespace __detail 15726: { 15726: namespace __variant 15726: { 15726: 15726: struct __variant_cookie {}; 15726: 15726: struct __variant_idx_cookie { using type = __variant_idx_cookie; }; 15726: 15726: template struct __deduce_visit_result { using type = _Tp; }; 15726: 15726: 15726: template 15726: constexpr void 15726: __raw_visit(_Visitor&& __visitor, _Variants&&... __variants) 15726: { 15726: std::__do_visit<__variant_cookie>(std::forward<_Visitor>(__visitor), 15726: std::forward<_Variants>(__variants)...); 15726: } 15726: 15726: 15726: template 15726: constexpr void 15726: __raw_idx_visit(_Visitor&& __visitor, _Variants&&... __variants) 15726: { 15726: std::__do_visit<__variant_idx_cookie>(std::forward<_Visitor>(__visitor), 15726: std::forward<_Variants>(__variants)...); 15726: } 15726: 15726: 15726: 15726: template 15726: constexpr std::variant<_Types...>& 15726: __as(std::variant<_Types...>& __v) noexcept 15726: { return __v; } 15726: 15726: template 15726: constexpr const std::variant<_Types...>& 15726: __as(const std::variant<_Types...>& __v) noexcept 15726: { return __v; } 15726: 15726: template 15726: constexpr std::variant<_Types...>&& 15726: __as(std::variant<_Types...>&& __v) noexcept 15726: { return std::move(__v); } 15726: 15726: template 15726: constexpr const std::variant<_Types...>&& 15726: __as(const std::variant<_Types...>&& __v) noexcept 15726: { return std::move(__v); } 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template> 15726: struct _Uninitialized; 15726: 15726: template 15726: struct _Uninitialized<_Type, true> 15726: { 15726: template 15726: constexpr 15726: _Uninitialized(in_place_index_t<0>, _Args&&... __args) 15726: : _M_storage(std::forward<_Args>(__args)...) 15726: { } 15726: 15726: constexpr const _Type& _M_get() const & noexcept 15726: { return _M_storage; } 15726: 15726: constexpr _Type& _M_get() & noexcept 15726: { return _M_storage; } 15726: 15726: constexpr const _Type&& _M_get() const && noexcept 15726: { return std::move(_M_storage); } 15726: 15726: constexpr _Type&& _M_get() && noexcept 15726: { return std::move(_M_storage); } 15726: 15726: _Type _M_storage; 15726: }; 15726: 15726: template 15726: struct _Uninitialized<_Type, false> 15726: { 15726: # 278 "/usr/include/c++/13/variant" 3 15726: template 15726: constexpr 15726: _Uninitialized(in_place_index_t<0>, _Args&&... __args) 15726: { 15726: ::new ((void*)std::addressof(_M_storage)) 15726: _Type(std::forward<_Args>(__args)...); 15726: } 15726: 15726: const _Type& _M_get() const & noexcept 15726: { return *_M_storage._M_ptr(); } 15726: 15726: _Type& _M_get() & noexcept 15726: { return *_M_storage._M_ptr(); } 15726: 15726: const _Type&& _M_get() const && noexcept 15726: { return std::move(*_M_storage._M_ptr()); } 15726: 15726: _Type&& _M_get() && noexcept 15726: { return std::move(*_M_storage._M_ptr()); } 15726: 15726: __gnu_cxx::__aligned_membuf<_Type> _M_storage; 15726: 15726: }; 15726: 15726: template 15726: constexpr decltype(auto) 15726: __get_n(_Union&& __u) noexcept 15726: { 15726: if constexpr (_Np == 0) 15726: return std::forward<_Union>(__u)._M_first._M_get(); 15726: else if constexpr (_Np == 1) 15726: return std::forward<_Union>(__u)._M_rest._M_first._M_get(); 15726: else if constexpr (_Np == 2) 15726: return std::forward<_Union>(__u)._M_rest._M_rest._M_first._M_get(); 15726: else 15726: return __variant::__get_n<_Np - 3>( 15726: std::forward<_Union>(__u)._M_rest._M_rest._M_rest); 15726: } 15726: 15726: 15726: template 15726: constexpr decltype(auto) 15726: __get(_Variant&& __v) noexcept 15726: { return __variant::__get_n<_Np>(std::forward<_Variant>(__v)._M_u); } 15726: 15726: 15726: template 15726: constexpr decltype(auto) 15726: __construct_n(_Union& __u) noexcept 15726: { 15726: if constexpr (_Np == 0) 15726: return &__u._M_first; 15726: else if constexpr (_Np == 1) 15726: { 15726: std::_Construct(&__u._M_rest); 15726: return &__u._M_rest._M_first; 15726: } 15726: else if constexpr (_Np == 2) 15726: { 15726: std::_Construct(&__u._M_rest); 15726: std::_Construct(&__u._M_rest._M_rest); 15726: return &__u._M_rest._M_rest._M_first; 15726: } 15726: else 15726: { 15726: std::_Construct(&__u._M_rest); 15726: std::_Construct(&__u._M_rest._M_rest); 15726: std::_Construct(&__u._M_rest._M_rest._M_rest); 15726: return __variant::__construct_n<_Np - 3>(__u._M_rest._M_rest._M_rest); 15726: } 15726: } 15726: 15726: template 15726: struct _Traits 15726: { 15726: static constexpr bool _S_default_ctor = 15726: is_default_constructible_v::type>; 15726: static constexpr bool _S_copy_ctor = 15726: (is_copy_constructible_v<_Types> && ...); 15726: static constexpr bool _S_move_ctor = 15726: (is_move_constructible_v<_Types> && ...); 15726: static constexpr bool _S_copy_assign = 15726: _S_copy_ctor 15726: && (is_copy_assignable_v<_Types> && ...); 15726: static constexpr bool _S_move_assign = 15726: _S_move_ctor 15726: && (is_move_assignable_v<_Types> && ...); 15726: 15726: static constexpr bool _S_trivial_dtor = 15726: (is_trivially_destructible_v<_Types> && ...); 15726: static constexpr bool _S_trivial_copy_ctor = 15726: (is_trivially_copy_constructible_v<_Types> && ...); 15726: static constexpr bool _S_trivial_move_ctor = 15726: (is_trivially_move_constructible_v<_Types> && ...); 15726: static constexpr bool _S_trivial_copy_assign = 15726: _S_trivial_dtor && _S_trivial_copy_ctor 15726: && (is_trivially_copy_assignable_v<_Types> && ...); 15726: static constexpr bool _S_trivial_move_assign = 15726: _S_trivial_dtor && _S_trivial_move_ctor 15726: && (is_trivially_move_assignable_v<_Types> && ...); 15726: 15726: 15726: 15726: static constexpr bool _S_nothrow_default_ctor = 15726: is_nothrow_default_constructible_v< 15726: typename _Nth_type<0, _Types...>::type>; 15726: static constexpr bool _S_nothrow_copy_ctor = false; 15726: static constexpr bool _S_nothrow_move_ctor = 15726: (is_nothrow_move_constructible_v<_Types> && ...); 15726: static constexpr bool _S_nothrow_copy_assign = false; 15726: static constexpr bool _S_nothrow_move_assign = 15726: _S_nothrow_move_ctor 15726: && (is_nothrow_move_assignable_v<_Types> && ...); 15726: }; 15726: 15726: 15726: template 15726: union _Variadic_union 15726: { 15726: _Variadic_union() = default; 15726: 15726: template 15726: _Variadic_union(in_place_index_t<_Np>, _Args&&...) = delete; 15726: }; 15726: 15726: template 15726: union _Variadic_union<_First, _Rest...> 15726: { 15726: constexpr _Variadic_union() : _M_rest() { } 15726: 15726: template 15726: constexpr 15726: _Variadic_union(in_place_index_t<0>, _Args&&... __args) 15726: : _M_first(in_place_index<0>, std::forward<_Args>(__args)...) 15726: { } 15726: 15726: template 15726: constexpr 15726: _Variadic_union(in_place_index_t<_Np>, _Args&&... __args) 15726: : _M_rest(in_place_index<_Np-1>, std::forward<_Args>(__args)...) 15726: { } 15726: # 434 "/usr/include/c++/13/variant" 3 15726: _Uninitialized<_First> _M_first; 15726: _Variadic_union<_Rest...> _M_rest; 15726: }; 15726: 15726: 15726: 15726: 15726: 15726: 15726: template 15726: struct _Never_valueless_alt 15726: : __and_, is_trivially_copyable<_Tp>> 15726: { }; 15726: # 458 "/usr/include/c++/13/variant" 3 15726: template 15726: constexpr bool __never_valueless() 15726: { 15726: return _Traits<_Types...>::_S_move_assign 15726: && (_Never_valueless_alt<_Types>::value && ...); 15726: } 15726: 15726: 15726: template 15726: struct _Variant_storage; 15726: 15726: template 15726: using __select_index = 15726: typename __select_int::_Select_int_base::type::value_type; 15726: 15726: template 15726: struct _Variant_storage 15726: { 15726: constexpr 15726: _Variant_storage() 15726: : _M_index(static_cast<__index_type>(variant_npos)) 15726: { } 15726: 15726: template 15726: constexpr 15726: _Variant_storage(in_place_index_t<_Np>, _Args&&... __args) 15726: : _M_u(in_place_index<_Np>, std::forward<_Args>(__args)...), 15726: _M_index{_Np} 15726: { } 15726: 15726: constexpr void 15726: _M_reset() 15726: { 15726: if (!_M_valid()) [[unlikely]] 15726: return; 15726: 15726: std::__do_visit([](auto&& __this_mem) mutable 15726: { 15726: std::_Destroy(std::__addressof(__this_mem)); 15726: }, __variant_cast<_Types...>(*this)); 15726: 15726: _M_index = static_cast<__index_type>(variant_npos); 15726: } 15726: 15726: 15726: ~_Variant_storage() 15726: { _M_reset(); } 15726: 15726: constexpr bool 15726: _M_valid() const noexcept 15726: { 15726: if constexpr (__variant::__never_valueless<_Types...>()) 15726: return true; 15726: return this->_M_index != __index_type(variant_npos); 15726: } 15726: 15726: _Variadic_union<_Types...> _M_u; 15726: using __index_type = __select_index<_Types...>; 15726: __index_type _M_index; 15726: }; 15726: 15726: template 15726: struct _Variant_storage 15726: { 15726: constexpr 15726: _Variant_storage() 15726: : _M_index(static_cast<__index_type>(variant_npos)) 15726: { } 15726: 15726: template 15726: constexpr 15726: _Variant_storage(in_place_index_t<_Np>, _Args&&... __args) 15726: : _M_u(in_place_index<_Np>, std::forward<_Args>(__args)...), 15726: _M_index{_Np} 15726: { } 15726: 15726: constexpr void 15726: _M_reset() noexcept 15726: { _M_index = static_cast<__index_type>(variant_npos); } 15726: 15726: constexpr bool 15726: _M_valid() const noexcept 15726: { 15726: if constexpr (__variant::__never_valueless<_Types...>()) 15726: return true; 15726: 15726: 15726: 15726: 15726: 15726: 15726: return this->_M_index != static_cast<__index_type>(variant_npos); 15726: } 15726: 15726: _Variadic_union<_Types...> _M_u; 15726: using __index_type = __select_index<_Types...>; 15726: __index_type _M_index; 15726: }; 15726: 15726: 15726: template 15726: 15726: inline void 15726: __emplace(_Variant_storage<_Triv, _Types...>& __v, _Args&&... __args) 15726: { 15726: __v._M_reset(); 15726: auto* __addr = __variant::__construct_n<_Np>(__v._M_u); 15726: std::_Construct(__addr, in_place_index<0>, 15726: std::forward<_Args>(__args)...); 15726: 15726: __v._M_index = _Np; 15726: } 15726: 15726: template 15726: using _Variant_storage_alias = 15726: _Variant_storage<_Traits<_Types...>::_S_trivial_dtor, _Types...>; 15726: 15726: 15726: 15726: 15726: template 15726: struct _Copy_ctor_base : _Variant_storage_alias<_Types...> 15726: { 15726: using _Base = _Variant_storage_alias<_Types...>; 15726: using _Base::_Base; 15726: 15726: 15726: _Copy_ctor_base(const _Copy_ctor_base& __rhs) 15726: noexcept(_Traits<_Types...>::_S_nothrow_copy_ctor) 15726: { 15726: __variant::__raw_idx_visit( 15726: [this](auto&& __rhs_mem, auto __rhs_index) mutable 15726: { 15726: constexpr size_t __j = __rhs_index; 15726: if constexpr (__j != variant_npos) 15726: std::_Construct(std::__addressof(this->_M_u), 15726: in_place_index<__j>, __rhs_mem); 15726: }, __variant_cast<_Types...>(__rhs)); 15726: this->_M_index = __rhs._M_index; 15726: } 15726: 15726: _Copy_ctor_base(_Copy_ctor_base&&) = default; 15726: _Copy_ctor_base& operator=(const _Copy_ctor_base&) = default; 15726: _Copy_ctor_base& operator=(_Copy_ctor_base&&) = default; 15726: }; 15726: 15726: template 15726: struct _Copy_ctor_base : _Variant_storage_alias<_Types...> 15726: { 15726: using _Base = _Variant_storage_alias<_Types...>; 15726: using _Base::_Base; 15726: }; 15726: 15726: template 15726: using _Copy_ctor_alias = 15726: _Copy_ctor_base<_Traits<_Types...>::_S_trivial_copy_ctor, _Types...>; 15726: 15726: template 15726: struct _Move_ctor_base : _Copy_ctor_alias<_Types...> 15726: { 15726: using _Base = _Copy_ctor_alias<_Types...>; 15726: using _Base::_Base; 15726: 15726: 15726: _Move_ctor_base(_Move_ctor_base&& __rhs) 15726: noexcept(_Traits<_Types...>::_S_nothrow_move_ctor) 15726: { 15726: __variant::__raw_idx_visit( 15726: [this](auto&& __rhs_mem, auto __rhs_index) mutable 15726: { 15726: constexpr size_t __j = __rhs_index; 15726: if constexpr (__j != variant_npos) 15726: std::_Construct(std::__addressof(this->_M_u), 15726: in_place_index<__j>, 15726: std::forward(__rhs_mem)); 15726: }, __variant_cast<_Types...>(std::move(__rhs))); 15726: this->_M_index = __rhs._M_index; 15726: } 15726: 15726: _Move_ctor_base(const _Move_ctor_base&) = default; 15726: _Move_ctor_base& operator=(const _Move_ctor_base&) = default; 15726: _Move_ctor_base& operator=(_Move_ctor_base&&) = default; 15726: }; 15726: 15726: template 15726: struct _Move_ctor_base : _Copy_ctor_alias<_Types...> 15726: { 15726: using _Base = _Copy_ctor_alias<_Types...>; 15726: using _Base::_Base; 15726: }; 15726: 15726: template 15726: using _Move_ctor_alias = 15726: _Move_ctor_base<_Traits<_Types...>::_S_trivial_move_ctor, _Types...>; 15726: 15726: template 15726: struct _Copy_assign_base : _Move_ctor_alias<_Types...> 15726: { 15726: using _Base = _Move_ctor_alias<_Types...>; 15726: using _Base::_Base; 15726: 15726: 15726: _Copy_assign_base& 15726: operator=(const _Copy_assign_base& __rhs) 15726: noexcept(_Traits<_Types...>::_S_nothrow_copy_assign) 15726: { 15726: __variant::__raw_idx_visit( 15726: [this](auto&& __rhs_mem, auto __rhs_index) mutable 15726: { 15726: constexpr size_t __j = __rhs_index; 15726: if constexpr (__j == variant_npos) 15726: this->_M_reset(); 15726: else if (this->_M_index == __j) 15726: __variant::__get<__j>(*this) = __rhs_mem; 15726: else 15726: { 15726: using _Tj = typename _Nth_type<__j, _Types...>::type; 15726: if constexpr (is_nothrow_copy_constructible_v<_Tj> 15726: || !is_nothrow_move_constructible_v<_Tj>) 15726: __variant::__emplace<__j>(*this, __rhs_mem); 15726: else 15726: { 15726: using _Variant = variant<_Types...>; 15726: _Variant& __self = __variant_cast<_Types...>(*this); 15726: __self = _Variant(in_place_index<__j>, __rhs_mem); 15726: } 15726: } 15726: }, __variant_cast<_Types...>(__rhs)); 15726: return *this; 15726: } 15726: 15726: _Copy_assign_base(const _Copy_assign_base&) = default; 15726: _Copy_assign_base(_Copy_assign_base&&) = default; 15726: _Copy_assign_base& operator=(_Copy_assign_base&&) = default; 15726: }; 15726: 15726: template 15726: struct _Copy_assign_base : _Move_ctor_alias<_Types...> 15726: { 15726: using _Base = _Move_ctor_alias<_Types...>; 15726: using _Base::_Base; 15726: }; 15726: 15726: template 15726: using _Copy_assign_alias = 15726: _Copy_assign_base<_Traits<_Types...>::_S_trivial_copy_assign, _Types...>; 15726: 15726: template 15726: struct _Move_assign_base : _Copy_assign_alias<_Types...> 15726: { 15726: using _Base = _Copy_assign_alias<_Types...>; 15726: using _Base::_Base; 15726: 15726: 15726: _Move_assign_base& 15726: operator=(_Move_assign_base&& __rhs) 15726: noexcept(_Traits<_Types...>::_S_nothrow_move_assign) 15726: { 15726: __variant::__raw_idx_visit( 15726: [this](auto&& __rhs_mem, auto __rhs_index) mutable 15726: { 15726: constexpr size_t __j = __rhs_index; 15726: if constexpr (__j != variant_npos) 15726: { 15726: if (this->_M_index == __j) 15726: __variant::__get<__j>(*this) = std::move(__rhs_mem); 15726: else 15726: { 15726: using _Tj = typename _Nth_type<__j, _Types...>::type; 15726: if constexpr (is_nothrow_move_constructible_v<_Tj>) 15726: __variant::__emplace<__j>(*this, std::move(__rhs_mem)); 15726: else 15726: { 15726: using _Variant = variant<_Types...>; 15726: _Variant& __self = __variant_cast<_Types...>(*this); 15726: __self.template emplace<__j>(std::move(__rhs_mem)); 15726: } 15726: } 15726: } 15726: else 15726: this->_M_reset(); 15726: }, __variant_cast<_Types...>(__rhs)); 15726: return *this; 15726: } 15726: 15726: _Move_assign_base(const _Move_assign_base&) = default; 15726: _Move_assign_base(_Move_assign_base&&) = default; 15726: _Move_assign_base& operator=(const _Move_assign_base&) = default; 15726: }; 15726: 15726: template 15726: struct _Move_assign_base : _Copy_assign_alias<_Types...> 15726: { 15726: using _Base = _Copy_assign_alias<_Types...>; 15726: using _Base::_Base; 15726: }; 15726: 15726: template 15726: using _Move_assign_alias = 15726: _Move_assign_base<_Traits<_Types...>::_S_trivial_move_assign, _Types...>; 15726: 15726: template 15726: struct _Variant_base : _Move_assign_alias<_Types...> 15726: { 15726: using _Base = _Move_assign_alias<_Types...>; 15726: 15726: constexpr 15726: _Variant_base() noexcept(_Traits<_Types...>::_S_nothrow_default_ctor) 15726: : _Variant_base(in_place_index<0>) { } 15726: 15726: template 15726: constexpr explicit 15726: _Variant_base(in_place_index_t<_Np> __i, _Args&&... __args) 15726: : _Base(__i, std::forward<_Args>(__args)...) 15726: { } 15726: 15726: _Variant_base(const _Variant_base&) = default; 15726: _Variant_base(_Variant_base&&) = default; 15726: _Variant_base& operator=(const _Variant_base&) = default; 15726: _Variant_base& operator=(_Variant_base&&) = default; 15726: }; 15726: 15726: template 15726: inline constexpr bool __exactly_once 15726: = std::__find_uniq_type_in_pack<_Tp, _Types...>() < sizeof...(_Types); 15726: 15726: 15726: template struct _Arr { _Ti _M_x[1]; }; 15726: 15726: 15726: template 15726: struct _Build_FUN 15726: { 15726: 15726: 15726: void _S_fun() = delete; 15726: }; 15726: 15726: 15726: template 15726: struct _Build_FUN<_Ind, _Tp, _Ti, 15726: void_t{{std::declval<_Tp>()}})>> 15726: { 15726: 15726: static integral_constant _S_fun(_Ti); 15726: }; 15726: 15726: template>> 15726: struct _Build_FUNs; 15726: 15726: template 15726: struct _Build_FUNs<_Tp, variant<_Ti...>, index_sequence<_Ind...>> 15726: : _Build_FUN<_Ind, _Tp, _Ti>... 15726: { 15726: using _Build_FUN<_Ind, _Tp, _Ti>::_S_fun...; 15726: }; 15726: 15726: 15726: 15726: template 15726: using _FUN_type 15726: = decltype(_Build_FUNs<_Tp, _Variant>::_S_fun(std::declval<_Tp>())); 15726: 15726: 15726: template 15726: inline constexpr size_t 15726: __accepted_index = variant_npos; 15726: 15726: template 15726: inline constexpr size_t 15726: __accepted_index<_Tp, _Variant, void_t<_FUN_type<_Tp, _Variant>>> 15726: = _FUN_type<_Tp, _Variant>::value; 15726: 15726: template> 15726: inline constexpr bool 15726: __extra_visit_slot_needed = false; 15726: 15726: template 15726: inline constexpr bool 15726: __extra_visit_slot_needed<__variant_cookie, _Var, variant<_Types...>> 15726: = !__variant::__never_valueless<_Types...>(); 15726: 15726: template 15726: inline constexpr bool 15726: __extra_visit_slot_needed<__variant_idx_cookie, _Var, variant<_Types...>> 15726: = !__variant::__never_valueless<_Types...>(); 15726: 15726: 15726: template 15726: struct _Multi_array; 15726: 15726: 15726: template 15726: struct _Multi_array<_Tp> 15726: { 15726: template 15726: struct __untag_result 15726: : false_type 15726: { using element_type = _Tp; }; 15726: 15726: #pragma GCC diagnostic push 15726: #pragma GCC diagnostic ignored "-Wignored-qualifiers" 15726: template 15726: struct __untag_result 15726: : false_type 15726: { using element_type = void(*)(_Args...); }; 15726: #pragma GCC diagnostic pop 15726: 15726: template 15726: struct __untag_result<__variant_cookie(*)(_Args...)> 15726: : false_type 15726: { using element_type = void(*)(_Args...); }; 15726: 15726: template 15726: struct __untag_result<__variant_idx_cookie(*)(_Args...)> 15726: : false_type 15726: { using element_type = void(*)(_Args...); }; 15726: 15726: template 15726: struct __untag_result<__deduce_visit_result<_Res>(*)(_Args...)> 15726: : true_type 15726: { using element_type = _Res(*)(_Args...); }; 15726: 15726: using __result_is_deduced = __untag_result<_Tp>; 15726: 15726: constexpr const typename __untag_result<_Tp>::element_type& 15726: _M_access() const 15726: { return _M_data; } 15726: 15726: typename __untag_result<_Tp>::element_type _M_data; 15726: }; 15726: 15726: 15726: template 15726: struct _Multi_array<_Ret(*)(_Visitor, _Variants...), __first, __rest...> 15726: { 15726: static constexpr size_t __index = 15726: sizeof...(_Variants) - sizeof...(__rest) - 1; 15726: 15726: using _Variant = typename _Nth_type<__index, _Variants...>::type; 15726: 15726: static constexpr int __do_cookie = 15726: __extra_visit_slot_needed<_Ret, _Variant> ? 1 : 0; 15726: 15726: using _Tp = _Ret(*)(_Visitor, _Variants...); 15726: 15726: template 15726: constexpr decltype(auto) 15726: _M_access(size_t __first_index, _Args... __rest_indices) const 15726: { 15726: return _M_arr[__first_index + __do_cookie] 15726: ._M_access(__rest_indices...); 15726: } 15726: 15726: _Multi_array<_Tp, __rest...> _M_arr[__first + __do_cookie]; 15726: }; 15726: # 949 "/usr/include/c++/13/variant" 3 15726: template 15726: struct __gen_vtable_impl; 15726: # 959 "/usr/include/c++/13/variant" 3 15726: template 15726: struct __gen_vtable_impl< 15726: _Multi_array<_Result_type (*)(_Visitor, _Variants...), __dimensions...>, 15726: std::index_sequence<__indices...>> 15726: { 15726: using _Next = 15726: remove_reference_t::type>; 15726: using _Array_type = 15726: _Multi_array<_Result_type (*)(_Visitor, _Variants...), 15726: __dimensions...>; 15726: 15726: static constexpr _Array_type 15726: _S_apply() 15726: { 15726: _Array_type __vtable{}; 15726: _S_apply_all_alts( 15726: __vtable, make_index_sequence>()); 15726: return __vtable; 15726: } 15726: 15726: template 15726: static constexpr void 15726: _S_apply_all_alts(_Array_type& __vtable, 15726: std::index_sequence<__var_indices...>) 15726: { 15726: if constexpr (__extra_visit_slot_needed<_Result_type, _Next>) 15726: (_S_apply_single_alt( 15726: __vtable._M_arr[__var_indices + 1], 15726: &(__vtable._M_arr[0])), ...); 15726: else 15726: (_S_apply_single_alt( 15726: __vtable._M_arr[__var_indices]), ...); 15726: } 15726: 15726: template 15726: static constexpr void 15726: _S_apply_single_alt(_Tp& __element, _Tp* __cookie_element = nullptr) 15726: { 15726: if constexpr (__do_cookie) 15726: { 15726: __element = __gen_vtable_impl< 15726: _Tp, 15726: std::index_sequence<__indices..., __index>>::_S_apply(); 15726: *__cookie_element = __gen_vtable_impl< 15726: _Tp, 15726: std::index_sequence<__indices..., variant_npos>>::_S_apply(); 15726: } 15726: else 15726: { 15726: auto __tmp_element = __gen_vtable_impl< 15726: remove_reference_t, 15726: std::index_sequence<__indices..., __index>>::_S_apply(); 15726: static_assert(is_same_v<_Tp, decltype(__tmp_element)>, 15726: "std::visit requires the visitor to have the same " 15726: "return type for all alternatives of a variant"); 15726: __element = __tmp_element; 15726: } 15726: } 15726: }; 15726: 15726: 15726: 15726: 15726: template 15726: struct __gen_vtable_impl< 15726: _Multi_array<_Result_type (*)(_Visitor, _Variants...)>, 15726: std::index_sequence<__indices...>> 15726: { 15726: using _Array_type = 15726: _Multi_array<_Result_type (*)(_Visitor, _Variants...)>; 15726: 15726: template 15726: static constexpr decltype(auto) 15726: __element_by_index_or_cookie(_Variant&& __var) noexcept 15726: { 15726: if constexpr (__index != variant_npos) 15726: return __variant::__get<__index>(std::forward<_Variant>(__var)); 15726: else 15726: return __variant_cookie{}; 15726: } 15726: 15726: static constexpr decltype(auto) 15726: __visit_invoke(_Visitor&& __visitor, _Variants... __vars) 15726: { 15726: if constexpr (is_same_v<_Result_type, __variant_idx_cookie>) 15726: 15726: 15726: std::__invoke(std::forward<_Visitor>(__visitor), 15726: __element_by_index_or_cookie<__indices>( 15726: std::forward<_Variants>(__vars))..., 15726: integral_constant()...); 15726: else if constexpr (is_same_v<_Result_type, __variant_cookie>) 15726: 15726: std::__invoke(std::forward<_Visitor>(__visitor), 15726: __element_by_index_or_cookie<__indices>( 15726: std::forward<_Variants>(__vars))...); 15726: else if constexpr (_Array_type::__result_is_deduced::value) 15726: 15726: return std::__invoke(std::forward<_Visitor>(__visitor), 15726: __element_by_index_or_cookie<__indices>( 15726: std::forward<_Variants>(__vars))...); 15726: else 15726: return std::__invoke_r<_Result_type>( 15726: std::forward<_Visitor>(__visitor), 15726: __variant::__get<__indices>(std::forward<_Variants>(__vars))...); 15726: } 15726: 15726: static constexpr auto 15726: _S_apply() 15726: { 15726: if constexpr (_Array_type::__result_is_deduced::value) 15726: { 15726: constexpr bool __visit_ret_type_mismatch = 15726: !is_same_v(), 15726: std::declval<_Variants>()...))>; 15726: if constexpr (__visit_ret_type_mismatch) 15726: { 15726: struct __cannot_match {}; 15726: return __cannot_match{}; 15726: } 15726: else 15726: return _Array_type{&__visit_invoke}; 15726: } 15726: else 15726: return _Array_type{&__visit_invoke}; 15726: } 15726: }; 15726: 15726: template 15726: struct __gen_vtable 15726: { 15726: using _Array_type = 15726: _Multi_array<_Result_type (*)(_Visitor, _Variants...), 15726: variant_size_v>...>; 15726: 15726: static constexpr _Array_type _S_vtable 15726: = __gen_vtable_impl<_Array_type, std::index_sequence<>>::_S_apply(); 15726: }; 15726: 15726: template 15726: struct _Base_dedup : public _Tp { }; 15726: 15726: template 15726: struct _Variant_hash_base; 15726: 15726: template 15726: struct _Variant_hash_base, 15726: std::index_sequence<__indices...>> 15726: : _Base_dedup<__indices, __poison_hash>>... { }; 15726: 15726: 15726: template())), 15726: typename _Tp = variant_alternative_t<_Np, remove_reference_t<_AsV>>> 15726: using __get_t 15726: = __conditional_t, _Tp&, _Tp&&>; 15726: 15726: 15726: template 15726: using __visit_result_t 15726: = invoke_result_t<_Visitor, __get_t<0, _Variants>...>; 15726: 15726: template 15726: constexpr inline bool __same_types = (is_same_v<_Tp, _Types> && ...); 15726: 15726: template 15726: constexpr bool __check_visitor_results(std::index_sequence<_Idxs...>) 15726: { 15726: return __same_types< 15726: invoke_result_t<_Visitor, __get_t<_Idxs, _Variant>>... 15726: >; 15726: } 15726: 15726: } 15726: } 15726: 15726: template 15726: constexpr bool 15726: holds_alternative(const variant<_Types...>& __v) noexcept 15726: { 15726: static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, 15726: "T must occur exactly once in alternatives"); 15726: return __v.index() == std::__find_uniq_type_in_pack<_Tp, _Types...>(); 15726: } 15726: 15726: template 15726: constexpr _Tp& 15726: get(variant<_Types...>& __v) 15726: { 15726: static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, 15726: "T must occur exactly once in alternatives"); 15726: constexpr size_t __n = std::__find_uniq_type_in_pack<_Tp, _Types...>(); 15726: return std::get<__n>(__v); 15726: } 15726: 15726: template 15726: constexpr _Tp&& 15726: get(variant<_Types...>&& __v) 15726: { 15726: static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, 15726: "T must occur exactly once in alternatives"); 15726: constexpr size_t __n = std::__find_uniq_type_in_pack<_Tp, _Types...>(); 15726: return std::get<__n>(std::move(__v)); 15726: } 15726: 15726: template 15726: constexpr const _Tp& 15726: get(const variant<_Types...>& __v) 15726: { 15726: static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, 15726: "T must occur exactly once in alternatives"); 15726: constexpr size_t __n = std::__find_uniq_type_in_pack<_Tp, _Types...>(); 15726: return std::get<__n>(__v); 15726: } 15726: 15726: template 15726: constexpr const _Tp&& 15726: get(const variant<_Types...>&& __v) 15726: { 15726: static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, 15726: "T must occur exactly once in alternatives"); 15726: constexpr size_t __n = std::__find_uniq_type_in_pack<_Tp, _Types...>(); 15726: return std::get<__n>(std::move(__v)); 15726: } 15726: 15726: template 15726: constexpr add_pointer_t>> 15726: get_if(variant<_Types...>* __ptr) noexcept 15726: { 15726: using _Alternative_type = variant_alternative_t<_Np, variant<_Types...>>; 15726: static_assert(_Np < sizeof...(_Types), 15726: "The index must be in [0, number of alternatives)"); 15726: static_assert(!is_void_v<_Alternative_type>, "_Tp must not be void"); 15726: if (__ptr && __ptr->index() == _Np) 15726: return std::addressof(__detail::__variant::__get<_Np>(*__ptr)); 15726: return nullptr; 15726: } 15726: 15726: template 15726: constexpr 15726: add_pointer_t>> 15726: get_if(const variant<_Types...>* __ptr) noexcept 15726: { 15726: using _Alternative_type = variant_alternative_t<_Np, variant<_Types...>>; 15726: static_assert(_Np < sizeof...(_Types), 15726: "The index must be in [0, number of alternatives)"); 15726: static_assert(!is_void_v<_Alternative_type>, "_Tp must not be void"); 15726: if (__ptr && __ptr->index() == _Np) 15726: return std::addressof(__detail::__variant::__get<_Np>(*__ptr)); 15726: return nullptr; 15726: } 15726: 15726: template 15726: constexpr add_pointer_t<_Tp> 15726: get_if(variant<_Types...>* __ptr) noexcept 15726: { 15726: static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, 15726: "T must occur exactly once in alternatives"); 15726: static_assert(!is_void_v<_Tp>, "_Tp must not be void"); 15726: constexpr size_t __n = std::__find_uniq_type_in_pack<_Tp, _Types...>(); 15726: return std::get_if<__n>(__ptr); 15726: } 15726: 15726: template 15726: constexpr add_pointer_t 15726: get_if(const variant<_Types...>* __ptr) noexcept 15726: { 15726: static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>, 15726: "T must occur exactly once in alternatives"); 15726: static_assert(!is_void_v<_Tp>, "_Tp must not be void"); 15726: constexpr size_t __n = std::__find_uniq_type_in_pack<_Tp, _Types...>(); 15726: return std::get_if<__n>(__ptr); 15726: } 15726: 15726: struct monostate { }; 15726: # 1264 "/usr/include/c++/13/variant" 3 15726: template constexpr bool operator <(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) { bool __ret = true; __detail::__variant::__raw_idx_visit( [&__ret, &__lhs] (auto&& __rhs_mem, auto __rhs_index) mutable { if constexpr (__rhs_index != variant_npos) { if (__lhs.index() == __rhs_index) { auto& __this_mem = std::get<__rhs_index>(__lhs); __ret = __this_mem < __rhs_mem; } else __ret = (__lhs.index() + 1) < (__rhs_index + 1); } else __ret = (__lhs.index() + 1) < (__rhs_index + 1); }, __rhs); return __ret; } 15726: template constexpr bool operator <=(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) { bool __ret = true; __detail::__variant::__raw_idx_visit( [&__ret, &__lhs] (auto&& __rhs_mem, auto __rhs_index) mutable { if constexpr (__rhs_index != variant_npos) { if (__lhs.index() == __rhs_index) { auto& __this_mem = std::get<__rhs_index>(__lhs); __ret = __this_mem <= __rhs_mem; } else __ret = (__lhs.index() + 1) <= (__rhs_index + 1); } else __ret = (__lhs.index() + 1) <= (__rhs_index + 1); }, __rhs); return __ret; } 15726: template constexpr bool operator ==(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) { bool __ret = true; __detail::__variant::__raw_idx_visit( [&__ret, &__lhs] (auto&& __rhs_mem, auto __rhs_index) mutable { if constexpr (__rhs_index != variant_npos) { if (__lhs.index() == __rhs_index) { auto& __this_mem = std::get<__rhs_index>(__lhs); __ret = __this_mem == __rhs_mem; } else __ret = (__lhs.index() + 1) == (__rhs_index + 1); } else __ret = (__lhs.index() + 1) == (__rhs_index + 1); }, __rhs); return __ret; } 15726: template constexpr bool operator !=(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) { bool __ret = true; __detail::__variant::__raw_idx_visit( [&__ret, &__lhs] (auto&& __rhs_mem, auto __rhs_index) mutable { if constexpr (__rhs_index != variant_npos) { if (__lhs.index() == __rhs_index) { auto& __this_mem = std::get<__rhs_index>(__lhs); __ret = __this_mem != __rhs_mem; } else __ret = (__lhs.index() + 1) != (__rhs_index + 1); } else __ret = (__lhs.index() + 1) != (__rhs_index + 1); }, __rhs); return __ret; } 15726: template constexpr bool operator >=(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) { bool __ret = true; __detail::__variant::__raw_idx_visit( [&__ret, &__lhs] (auto&& __rhs_mem, auto __rhs_index) mutable { if constexpr (__rhs_index != variant_npos) { if (__lhs.index() == __rhs_index) { auto& __this_mem = std::get<__rhs_index>(__lhs); __ret = __this_mem >= __rhs_mem; } else __ret = (__lhs.index() + 1) >= (__rhs_index + 1); } else __ret = (__lhs.index() + 1) >= (__rhs_index + 1); }, __rhs); return __ret; } 15726: template constexpr bool operator >(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) { bool __ret = true; __detail::__variant::__raw_idx_visit( [&__ret, &__lhs] (auto&& __rhs_mem, auto __rhs_index) mutable { if constexpr (__rhs_index != variant_npos) { if (__lhs.index() == __rhs_index) { auto& __this_mem = std::get<__rhs_index>(__lhs); __ret = __this_mem > __rhs_mem; } else __ret = (__lhs.index() + 1) > (__rhs_index + 1); } else __ret = (__lhs.index() + 1) > (__rhs_index + 1); }, __rhs); return __ret; } 15726: 15726: 15726: 15726: constexpr bool operator==(monostate, monostate) noexcept { return true; } 15726: # 1305 "/usr/include/c++/13/variant" 3 15726: constexpr bool operator!=(monostate, monostate) noexcept { return false; } 15726: constexpr bool operator<(monostate, monostate) noexcept { return false; } 15726: constexpr bool operator>(monostate, monostate) noexcept { return false; } 15726: constexpr bool operator<=(monostate, monostate) noexcept { return true; } 15726: constexpr bool operator>=(monostate, monostate) noexcept { return true; } 15726: 15726: 15726: template 15726: constexpr __detail::__variant::__visit_result_t<_Visitor, _Variants...> 15726: visit(_Visitor&&, _Variants&&...); 15726: 15726: template 15726: 15726: inline enable_if_t<(is_move_constructible_v<_Types> && ...) 15726: && (is_swappable_v<_Types> && ...)> 15726: swap(variant<_Types...>& __lhs, variant<_Types...>& __rhs) 15726: noexcept(noexcept(__lhs.swap(__rhs))) 15726: { __lhs.swap(__rhs); } 15726: 15726: template 15726: enable_if_t && ...) 15726: && (is_swappable_v<_Types> && ...))> 15726: swap(variant<_Types...>&, variant<_Types...>&) = delete; 15726: 15726: class bad_variant_access : public exception 15726: { 15726: public: 15726: bad_variant_access() noexcept { } 15726: 15726: const char* what() const noexcept override 15726: { return _M_reason; } 15726: 15726: private: 15726: bad_variant_access(const char* __reason) noexcept : _M_reason(__reason) { } 15726: 15726: 15726: const char* _M_reason = "bad variant access"; 15726: 15726: friend void __throw_bad_variant_access(const char* __what); 15726: }; 15726: 15726: 15726: inline void 15726: __throw_bad_variant_access(const char* __what) 15726: { (throw (bad_variant_access(__what))); } 15726: 15726: inline void 15726: __throw_bad_variant_access(bool __valueless) 15726: { 15726: if (__valueless) [[__unlikely__]] 15726: __throw_bad_variant_access("std::get: variant is valueless"); 15726: else 15726: __throw_bad_variant_access("std::get: wrong index for variant"); 15726: } 15726: 15726: template 15726: class variant 15726: : private __detail::__variant::_Variant_base<_Types...>, 15726: private _Enable_default_constructor< 15726: __detail::__variant::_Traits<_Types...>::_S_default_ctor, 15726: variant<_Types...>>, 15726: private _Enable_copy_move< 15726: __detail::__variant::_Traits<_Types...>::_S_copy_ctor, 15726: __detail::__variant::_Traits<_Types...>::_S_copy_assign, 15726: __detail::__variant::_Traits<_Types...>::_S_move_ctor, 15726: __detail::__variant::_Traits<_Types...>::_S_move_assign, 15726: variant<_Types...>> 15726: { 15726: private: 15726: template 15726: friend decltype(auto) 15726: __variant_cast(_Tp&&); 15726: 15726: static_assert(sizeof...(_Types) > 0, 15726: "variant must have at least one alternative"); 15726: static_assert(!(std::is_reference_v<_Types> || ...), 15726: "variant must have no reference alternative"); 15726: static_assert(!(std::is_void_v<_Types> || ...), 15726: "variant must have no void alternative"); 15726: 15726: using _Base = __detail::__variant::_Variant_base<_Types...>; 15726: using _Default_ctor_enabler = 15726: _Enable_default_constructor< 15726: __detail::__variant::_Traits<_Types...>::_S_default_ctor, 15726: variant<_Types...>>; 15726: 15726: template 15726: static constexpr bool __not_self 15726: = !is_same_v<__remove_cvref_t<_Tp>, variant>; 15726: 15726: template 15726: static constexpr bool 15726: __exactly_once = __detail::__variant::__exactly_once<_Tp, _Types...>; 15726: 15726: template 15726: static constexpr size_t __accepted_index 15726: = __detail::__variant::__accepted_index<_Tp, variant>; 15726: 15726: template> 15726: using __to_type = typename _Nth_type<_Np, _Types...>::type; 15726: 15726: template>> 15726: using __accepted_type = __to_type<__accepted_index<_Tp>>; 15726: 15726: template 15726: static constexpr size_t __index_of 15726: = std::__find_uniq_type_in_pack<_Tp, _Types...>(); 15726: 15726: using _Traits = __detail::__variant::_Traits<_Types...>; 15726: 15726: template 15726: struct __is_in_place_tag : false_type { }; 15726: template 15726: struct __is_in_place_tag> : true_type { }; 15726: template 15726: struct __is_in_place_tag> : true_type { }; 15726: 15726: template 15726: static constexpr bool __not_in_place_tag 15726: = !__is_in_place_tag<__remove_cvref_t<_Tp>>::value; 15726: 15726: public: 15726: variant() = default; 15726: variant(const variant& __rhs) = default; 15726: variant(variant&&) = default; 15726: variant& operator=(const variant&) = default; 15726: variant& operator=(variant&&) = default; 15726: ~variant() = default; 15726: 15726: template, 15726: typename = enable_if_t<__not_in_place_tag<_Tp>>, 15726: typename _Tj = __accepted_type<_Tp&&>, 15726: typename = enable_if_t<__exactly_once<_Tj> 15726: && is_constructible_v<_Tj, _Tp>>> 15726: constexpr 15726: variant(_Tp&& __t) 15726: noexcept(is_nothrow_constructible_v<_Tj, _Tp>) 15726: : variant(in_place_index<__accepted_index<_Tp>>, 15726: std::forward<_Tp>(__t)) 15726: { } 15726: 15726: template 15726: && is_constructible_v<_Tp, _Args...>>> 15726: constexpr explicit 15726: variant(in_place_type_t<_Tp>, _Args&&... __args) 15726: : variant(in_place_index<__index_of<_Tp>>, 15726: std::forward<_Args>(__args)...) 15726: { } 15726: 15726: template 15726: && is_constructible_v<_Tp, 15726: initializer_list<_Up>&, _Args...>>> 15726: constexpr explicit 15726: variant(in_place_type_t<_Tp>, initializer_list<_Up> __il, 15726: _Args&&... __args) 15726: : variant(in_place_index<__index_of<_Tp>>, __il, 15726: std::forward<_Args>(__args)...) 15726: { } 15726: 15726: template, 15726: typename = enable_if_t>> 15726: constexpr explicit 15726: variant(in_place_index_t<_Np>, _Args&&... __args) 15726: : _Base(in_place_index<_Np>, std::forward<_Args>(__args)...), 15726: _Default_ctor_enabler(_Enable_default_constructor_tag{}) 15726: { } 15726: 15726: template, 15726: typename = enable_if_t&, 15726: _Args...>>> 15726: constexpr explicit 15726: variant(in_place_index_t<_Np>, initializer_list<_Up> __il, 15726: _Args&&... __args) 15726: : _Base(in_place_index<_Np>, __il, std::forward<_Args>(__args)...), 15726: _Default_ctor_enabler(_Enable_default_constructor_tag{}) 15726: { } 15726: 15726: template 15726: 15726: enable_if_t<__exactly_once<__accepted_type<_Tp&&>> 15726: && is_constructible_v<__accepted_type<_Tp&&>, _Tp> 15726: && is_assignable_v<__accepted_type<_Tp&&>&, _Tp>, 15726: variant&> 15726: operator=(_Tp&& __rhs) 15726: noexcept(is_nothrow_assignable_v<__accepted_type<_Tp&&>&, _Tp> 15726: && is_nothrow_constructible_v<__accepted_type<_Tp&&>, _Tp>) 15726: { 15726: constexpr auto __index = __accepted_index<_Tp>; 15726: if (index() == __index) 15726: std::get<__index>(*this) = std::forward<_Tp>(__rhs); 15726: else 15726: { 15726: using _Tj = __accepted_type<_Tp&&>; 15726: if constexpr (is_nothrow_constructible_v<_Tj, _Tp> 15726: || !is_nothrow_move_constructible_v<_Tj>) 15726: this->emplace<__index>(std::forward<_Tp>(__rhs)); 15726: else 15726: 15726: 15726: this->emplace<__index>(_Tj(std::forward<_Tp>(__rhs))); 15726: } 15726: return *this; 15726: } 15726: 15726: template 15726: 15726: enable_if_t && __exactly_once<_Tp>, 15726: _Tp&> 15726: emplace(_Args&&... __args) 15726: { 15726: constexpr size_t __index = __index_of<_Tp>; 15726: return this->emplace<__index>(std::forward<_Args>(__args)...); 15726: } 15726: 15726: template 15726: 15726: enable_if_t&, _Args...> 15726: && __exactly_once<_Tp>, 15726: _Tp&> 15726: emplace(initializer_list<_Up> __il, _Args&&... __args) 15726: { 15726: constexpr size_t __index = __index_of<_Tp>; 15726: return this->emplace<__index>(__il, std::forward<_Args>(__args)...); 15726: } 15726: 15726: template 15726: 15726: enable_if_t, _Args...>, 15726: __to_type<_Np>&> 15726: emplace(_Args&&... __args) 15726: { 15726: namespace __variant = std::__detail::__variant; 15726: using type = typename _Nth_type<_Np, _Types...>::type; 15726: 15726: 15726: if constexpr (is_nothrow_constructible_v) 15726: { 15726: __variant::__emplace<_Np>(*this, std::forward<_Args>(__args)...); 15726: } 15726: else if constexpr (is_scalar_v) 15726: { 15726: 15726: const type __tmp(std::forward<_Args>(__args)...); 15726: 15726: __variant::__emplace<_Np>(*this, __tmp); 15726: } 15726: else if constexpr (__variant::_Never_valueless_alt() 15726: && _Traits::_S_move_assign) 15726: { 15726: 15726: variant __tmp(in_place_index<_Np>, 15726: std::forward<_Args>(__args)...); 15726: 15726: *this = std::move(__tmp); 15726: } 15726: else 15726: { 15726: 15726: 15726: __variant::__emplace<_Np>(*this, std::forward<_Args>(__args)...); 15726: } 15726: return std::get<_Np>(*this); 15726: } 15726: 15726: template 15726: 15726: enable_if_t, 15726: initializer_list<_Up>&, _Args...>, 15726: __to_type<_Np>&> 15726: emplace(initializer_list<_Up> __il, _Args&&... __args) 15726: { 15726: namespace __variant = std::__detail::__variant; 15726: using type = typename _Nth_type<_Np, _Types...>::type; 15726: 15726: 15726: if constexpr (is_nothrow_constructible_v&, 15726: _Args...>) 15726: { 15726: __variant::__emplace<_Np>(*this, __il, 15726: std::forward<_Args>(__args)...); 15726: } 15726: else if constexpr (__variant::_Never_valueless_alt() 15726: && _Traits::_S_move_assign) 15726: { 15726: 15726: variant __tmp(in_place_index<_Np>, __il, 15726: std::forward<_Args>(__args)...); 15726: 15726: *this = std::move(__tmp); 15726: } 15726: else 15726: { 15726: 15726: 15726: __variant::__emplace<_Np>(*this, __il, 15726: std::forward<_Args>(__args)...); 15726: } 15726: return std::get<_Np>(*this); 15726: } 15726: 15726: template 15726: enable_if_t emplace(_Args&&...) = delete; 15726: 15726: template 15726: enable_if_t> emplace(_Args&&...) = delete; 15726: 15726: constexpr bool valueless_by_exception() const noexcept 15726: { return !this->_M_valid(); } 15726: 15726: constexpr size_t index() const noexcept 15726: { 15726: using __index_type = typename _Base::__index_type; 15726: if constexpr (__detail::__variant::__never_valueless<_Types...>()) 15726: return this->_M_index; 15726: else if constexpr (sizeof...(_Types) <= __index_type(-1) / 2) 15726: return make_signed_t<__index_type>(this->_M_index); 15726: else 15726: return size_t(__index_type(this->_M_index + 1)) - 1; 15726: } 15726: 15726: 15726: void 15726: swap(variant& __rhs) 15726: noexcept((__is_nothrow_swappable<_Types>::value && ...) 15726: && is_nothrow_move_constructible_v) 15726: { 15726: static_assert((is_move_constructible_v<_Types> && ...)); 15726: 15726: 15726: if (__rhs.valueless_by_exception()) [[__unlikely__]] 15726: { 15726: if (!this->valueless_by_exception()) [[__likely__]] 15726: __rhs.swap(*this); 15726: return; 15726: } 15726: 15726: namespace __variant = __detail::__variant; 15726: 15726: __variant::__raw_idx_visit( 15726: [this, &__rhs](auto&& __rhs_mem, auto __rhs_index) mutable 15726: { 15726: constexpr size_t __j = __rhs_index; 15726: if constexpr (__j != variant_npos) 15726: { 15726: if (this->index() == __j) 15726: { 15726: using std::swap; 15726: swap(std::get<__j>(*this), __rhs_mem); 15726: } 15726: else 15726: { 15726: auto __tmp(std::move(__rhs_mem)); 15726: 15726: if constexpr (_Traits::_S_trivial_move_assign) 15726: __rhs = std::move(*this); 15726: else 15726: __variant::__raw_idx_visit( 15726: [&__rhs](auto&& __this_mem, auto __this_index) mutable 15726: { 15726: constexpr size_t __k = __this_index; 15726: if constexpr (__k != variant_npos) 15726: __variant::__emplace<__k>(__rhs, 15726: std::move(__this_mem)); 15726: }, *this); 15726: 15726: __variant::__emplace<__j>(*this, std::move(__tmp)); 15726: } 15726: } 15726: }, __rhs); 15726: } 15726: 15726: 15726: 15726: 15726: 15726: 15726: private: 15726: template 15726: friend constexpr decltype(auto) 15726: __detail::__variant::__get(_Vp&& __v) noexcept; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: template friend constexpr bool operator <(const variant<_Tp...>& __lhs, const variant<_Tp...>& __rhs); 15726: template friend constexpr bool operator <=(const variant<_Tp...>& __lhs, const variant<_Tp...>& __rhs); 15726: template friend constexpr bool operator ==(const variant<_Tp...>& __lhs, const variant<_Tp...>& __rhs); 15726: template friend constexpr bool operator !=(const variant<_Tp...>& __lhs, const variant<_Tp...>& __rhs); 15726: template friend constexpr bool operator >=(const variant<_Tp...>& __lhs, const variant<_Tp...>& __rhs); 15726: template friend constexpr bool operator >(const variant<_Tp...>& __lhs, const variant<_Tp...>& __rhs); 15726: 15726: 15726: }; 15726: 15726: template 15726: constexpr variant_alternative_t<_Np, variant<_Types...>>& 15726: get(variant<_Types...>& __v) 15726: { 15726: static_assert(_Np < sizeof...(_Types), 15726: "The index must be in [0, number of alternatives)"); 15726: if (__v.index() != _Np) 15726: __throw_bad_variant_access(__v.valueless_by_exception()); 15726: return __detail::__variant::__get<_Np>(__v); 15726: } 15726: 15726: template 15726: constexpr variant_alternative_t<_Np, variant<_Types...>>&& 15726: get(variant<_Types...>&& __v) 15726: { 15726: static_assert(_Np < sizeof...(_Types), 15726: "The index must be in [0, number of alternatives)"); 15726: if (__v.index() != _Np) 15726: __throw_bad_variant_access(__v.valueless_by_exception()); 15726: return __detail::__variant::__get<_Np>(std::move(__v)); 15726: } 15726: 15726: template 15726: constexpr const variant_alternative_t<_Np, variant<_Types...>>& 15726: get(const variant<_Types...>& __v) 15726: { 15726: static_assert(_Np < sizeof...(_Types), 15726: "The index must be in [0, number of alternatives)"); 15726: if (__v.index() != _Np) 15726: __throw_bad_variant_access(__v.valueless_by_exception()); 15726: return __detail::__variant::__get<_Np>(__v); 15726: } 15726: 15726: template 15726: constexpr const variant_alternative_t<_Np, variant<_Types...>>&& 15726: get(const variant<_Types...>&& __v) 15726: { 15726: static_assert(_Np < sizeof...(_Types), 15726: "The index must be in [0, number of alternatives)"); 15726: if (__v.index() != _Np) 15726: __throw_bad_variant_access(__v.valueless_by_exception()); 15726: return __detail::__variant::__get<_Np>(std::move(__v)); 15726: } 15726: 15726: 15726: template 15726: constexpr decltype(auto) 15726: __do_visit(_Visitor&& __visitor, _Variants&&... __variants) 15726: { 15726: 15726: if constexpr (sizeof...(_Variants) == 0) 15726: { 15726: if constexpr (is_void_v<_Result_type>) 15726: return (void) std::forward<_Visitor>(__visitor)(); 15726: else 15726: return std::forward<_Visitor>(__visitor)(); 15726: } 15726: else 15726: { 15726: constexpr size_t __max = 11; 15726: 15726: 15726: using _V0 = typename _Nth_type<0, _Variants...>::type; 15726: 15726: constexpr auto __n = variant_size_v>; 15726: 15726: if constexpr (sizeof...(_Variants) > 1 || __n > __max) 15726: { 15726: 15726: constexpr auto& __vtable = __detail::__variant::__gen_vtable< 15726: _Result_type, _Visitor&&, _Variants&&...>::_S_vtable; 15726: 15726: auto __func_ptr = __vtable._M_access(__variants.index()...); 15726: return (*__func_ptr)(std::forward<_Visitor>(__visitor), 15726: std::forward<_Variants>(__variants)...); 15726: } 15726: else 15726: { 15726: 15726: _V0& __v0 15726: = [](_V0& __v, ...) -> _V0& { return __v; }(__variants...); 15726: 15726: using __detail::__variant::_Multi_array; 15726: using __detail::__variant::__gen_vtable_impl; 15726: using _Ma = _Multi_array<_Result_type (*)(_Visitor&&, _V0&&)>; 15726: # 1813 "/usr/include/c++/13/variant" 3 15726: switch (__v0.index()) 15726: { 15726: case 0: { if constexpr (0 < __n) { return __gen_vtable_impl<_Ma, index_sequence<0>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 15726: case 1: { if constexpr (1 < __n) { return __gen_vtable_impl<_Ma, index_sequence<1>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 15726: case 2: { if constexpr (2 < __n) { return __gen_vtable_impl<_Ma, index_sequence<2>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 15726: case 3: { if constexpr (3 < __n) { return __gen_vtable_impl<_Ma, index_sequence<3>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 15726: case 4: { if constexpr (4 < __n) { return __gen_vtable_impl<_Ma, index_sequence<4>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 15726: case 5: { if constexpr (5 < __n) { return __gen_vtable_impl<_Ma, index_sequence<5>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 15726: case 6: { if constexpr (6 < __n) { return __gen_vtable_impl<_Ma, index_sequence<6>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 15726: case 7: { if constexpr (7 < __n) { return __gen_vtable_impl<_Ma, index_sequence<7>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 15726: case 8: { if constexpr (8 < __n) { return __gen_vtable_impl<_Ma, index_sequence<8>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 15726: case 9: { if constexpr (9 < __n) { return __gen_vtable_impl<_Ma, index_sequence<9>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 15726: case 10: { if constexpr (10 < __n) { return __gen_vtable_impl<_Ma, index_sequence<10>>:: __visit_invoke(std::forward<_Visitor>(__visitor), std::forward<_V0>(__v0)); } else __builtin_unreachable(); } 15726: case variant_npos: 15726: using __detail::__variant::__variant_idx_cookie; 15726: using __detail::__variant::__variant_cookie; 15726: if constexpr (is_same_v<_Result_type, __variant_idx_cookie> 15726: || is_same_v<_Result_type, __variant_cookie>) 15726: { 15726: using _Npos = index_sequence; 15726: return __gen_vtable_impl<_Ma, _Npos>:: 15726: __visit_invoke(std::forward<_Visitor>(__visitor), 15726: std::forward<_V0>(__v0)); 15726: } 15726: else 15726: __builtin_unreachable(); 15726: default: 15726: __builtin_unreachable(); 15726: } 15726: 15726: 15726: } 15726: } 15726: } 15726: 15726: 15726: template 15726: constexpr __detail::__variant::__visit_result_t<_Visitor, _Variants...> 15726: visit(_Visitor&& __visitor, _Variants&&... __variants) 15726: { 15726: namespace __variant = std::__detail::__variant; 15726: 15726: if ((__variant::__as(__variants).valueless_by_exception() || ...)) 15726: __throw_bad_variant_access("std::visit: variant is valueless"); 15726: 15726: using _Result_type 15726: = __detail::__variant::__visit_result_t<_Visitor, _Variants...>; 15726: 15726: using _Tag = __detail::__variant::__deduce_visit_result<_Result_type>; 15726: 15726: if constexpr (sizeof...(_Variants) == 1) 15726: { 15726: using _Vp = decltype(__variant::__as(std::declval<_Variants>()...)); 15726: 15726: constexpr bool __visit_rettypes_match = __detail::__variant:: 15726: __check_visitor_results<_Visitor, _Vp>( 15726: make_index_sequence>>()); 15726: if constexpr (!__visit_rettypes_match) 15726: { 15726: static_assert(__visit_rettypes_match, 15726: "std::visit requires the visitor to have the same " 15726: "return type for all alternatives of a variant"); 15726: return; 15726: } 15726: else 15726: return std::__do_visit<_Tag>( 15726: std::forward<_Visitor>(__visitor), 15726: static_cast<_Vp>(__variants)...); 15726: } 15726: else 15726: return std::__do_visit<_Tag>( 15726: std::forward<_Visitor>(__visitor), 15726: __variant::__as(std::forward<_Variants>(__variants))...); 15726: } 15726: # 1904 "/usr/include/c++/13/variant" 3 15726: template 15726: struct __variant_hash_call_base_impl 15726: { 15726: size_t 15726: operator()(const variant<_Types...>& __t) const 15726: noexcept((is_nothrow_invocable_v>, _Types> && ...)) 15726: { 15726: size_t __ret; 15726: __detail::__variant::__raw_visit( 15726: [&__t, &__ret](auto&& __t_mem) mutable 15726: { 15726: using _Type = __remove_cvref_t; 15726: if constexpr (!is_same_v<_Type, 15726: __detail::__variant::__variant_cookie>) 15726: __ret = std::hash{}(__t.index()) 15726: + std::hash<_Type>{}(__t_mem); 15726: else 15726: __ret = std::hash{}(__t.index()); 15726: }, __t); 15726: return __ret; 15726: } 15726: }; 15726: 15726: template 15726: struct __variant_hash_call_base_impl {}; 15726: 15726: template 15726: using __variant_hash_call_base = 15726: __variant_hash_call_base_impl<(__poison_hash>:: 15726: __enable_hash_call &&...), _Types...>; 15726: 15726: 15726: template 15726: struct hash> 15726: : private __detail::__variant::_Variant_hash_base< 15726: variant<_Types...>, std::index_sequence_for<_Types...>>, 15726: public __variant_hash_call_base<_Types...> 15726: { 15726: using result_type [[__deprecated__]] = size_t; 15726: using argument_type [[__deprecated__]] = variant<_Types...>; 15726: }; 15726: 15726: template<> 15726: struct hash 15726: { 15726: using result_type [[__deprecated__]] = size_t; 15726: using argument_type [[__deprecated__]] = monostate; 15726: 15726: size_t 15726: operator()(const monostate&) const noexcept 15726: { 15726: constexpr size_t __magic_monostate_hash = -7777; 15726: return __magic_monostate_hash; 15726: } 15726: }; 15726: 15726: template 15726: struct __is_fast_hash>> 15726: : bool_constant<(__is_fast_hash<_Types>::value && ...)> 15726: { }; 15726: 15726: 15726: } 15726: # 13 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 2 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 19 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 15726: namespace rocksdb { 15726: 15726: class Slice; 15726: class Logger; 15726: # 53 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 15726: class MergeOperator : public Customizable { 15726: public: 15726: virtual ~MergeOperator() {} 15726: static const char* Type() { return "MergeOperator"; } 15726: static Status CreateFromString(const ConfigOptions& opts, 15726: const std::string& id, 15726: std::shared_ptr* result); 15726: # 79 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 15726: virtual bool FullMerge(const Slice& , const Slice* , 15726: const std::deque& , 15726: std::string* , Logger* ) const { 15726: 15726: 15726: # 83 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 3 4 15726: (static_cast ( 15726: # 83 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 15726: false 15726: # 83 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 83 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 15726: "false" 15726: # 83 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 83 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 15726: ; 15726: return false; 15726: } 15726: 15726: struct MergeOperationInput { 15726: 15726: explicit MergeOperationInput(const Slice& _key, 15726: const Slice* _existing_value, 15726: const std::vector& _operand_list, 15726: Logger* _logger) 15726: : key(_key), 15726: existing_value(_existing_value), 15726: operand_list(_operand_list), 15726: logger(_logger) {} 15726: 15726: 15726: const Slice& key; 15726: 15726: 15726: const Slice* existing_value; 15726: 15726: const std::vector& operand_list; 15726: 15726: 15726: Logger* logger; 15726: }; 15726: 15726: enum class OpFailureScope { 15726: kDefault, 15726: kTryMerge, 15726: kMustMerge, 15726: kOpFailureScopeMax, 15726: }; 15726: 15726: struct MergeOperationOutput { 15726: explicit MergeOperationOutput(std::string& _new_value, 15726: Slice& _existing_operand) 15726: : new_value(_new_value), existing_operand(_existing_operand) {} 15726: 15726: 15726: std::string& new_value; 15726: 15726: 15726: 15726: Slice& existing_operand; 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 15726: OpFailureScope op_failure_scope = OpFailureScope::kDefault; 15726: }; 15726: # 161 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 15726: virtual bool FullMergeV2(const MergeOperationInput& merge_in, 15726: MergeOperationOutput* merge_out) const; 15726: 15726: struct MergeOperationInputV3 { 15726: using ExistingValue = std::variant; 15726: using OperandList = std::vector; 15726: 15726: explicit MergeOperationInputV3(const Slice& _key, 15726: ExistingValue&& _existing_value, 15726: const OperandList& _operand_list, 15726: Logger* _logger) 15726: : key(_key), 15726: existing_value(std::move(_existing_value)), 15726: operand_list(_operand_list), 15726: logger(_logger) {} 15726: 15726: 15726: const Slice& key; 15726: 15726: 15726: 15726: ExistingValue existing_value; 15726: 15726: const OperandList& operand_list; 15726: 15726: Logger* logger; 15726: }; 15726: 15726: struct MergeOperationOutputV3 { 15726: using NewColumns = std::vector>; 15726: using NewValue = std::variant; 15726: 15726: 15726: 15726: 15726: NewValue new_value; 15726: 15726: OpFailureScope op_failure_scope = OpFailureScope::kDefault; 15726: }; 15726: # 209 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 15726: virtual bool FullMergeV3(const MergeOperationInputV3& merge_in, 15726: MergeOperationOutputV3* merge_out) const; 15726: # 243 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 15726: virtual bool PartialMerge(const Slice& , const Slice& , 15726: const Slice& , 15726: std::string* , 15726: Logger* ) const { 15726: return false; 15726: } 15726: # 271 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 15726: virtual bool PartialMergeMulti(const Slice& key, 15726: const std::deque& operand_list, 15726: std::string* new_value, Logger* logger) const; 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: const char* Name() const override = 0; 15726: 15726: 15726: 15726: 15726: 15726: 15726: virtual bool AllowSingleOperand() const { return false; } 15726: # 300 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 15726: virtual bool ShouldMerge(const std::vector& ) const { 15726: return false; 15726: } 15726: }; 15726: 15726: 15726: class AssociativeMergeOperator : public MergeOperator { 15726: public: 15726: ~AssociativeMergeOperator() override {} 15726: # 323 "/build/reproducible-path/rocksdb-9.3.1/include/rocksdb/merge_operator.h" 15726: virtual bool Merge(const Slice& key, const Slice* existing_value, 15726: const Slice& value, std::string* new_value, 15726: Logger* logger) const = 0; 15726: 15726: private: 15726: 15726: bool FullMergeV2(const MergeOperationInput& merge_in, 15726: MergeOperationOutput* merge_out) const override; 15726: 15726: bool PartialMerge(const Slice& key, const Slice& left_operand, 15726: const Slice& right_operand, std::string* new_value, 15726: Logger* logger) const override; 15726: }; 15726: 15726: } 15726: # 19 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 2 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class Comparator; 15726: class Iterator; 15726: class Logger; 15726: class MergeOperator; 15726: class Statistics; 15726: class SystemClock; 15726: class BlobFetcher; 15726: class PrefetchBufferCollection; 15726: struct CompactionIterationStats; 15726: 15726: class MergeHelper { 15726: public: 15726: MergeHelper(Env* env, const Comparator* user_comparator, 15726: const MergeOperator* user_merge_operator, 15726: const CompactionFilter* compaction_filter, Logger* logger, 15726: bool assert_valid_internal_key, SequenceNumber latest_snapshot, 15726: const SnapshotChecker* snapshot_checker = nullptr, int level = 0, 15726: Statistics* stats = nullptr, 15726: const std::atomic* shutting_down = nullptr); 15726: # 55 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 15726: struct NoBaseValueTag {}; 15726: static constexpr NoBaseValueTag kNoBaseValue{}; 15726: 15726: struct PlainBaseValueTag {}; 15726: static constexpr PlainBaseValueTag kPlainBaseValue{}; 15726: 15726: struct WideBaseValueTag {}; 15726: static constexpr WideBaseValueTag kWideBaseValue{}; 15726: 15726: template 15726: static Status TimedFullMerge(const MergeOperator* merge_operator, 15726: const Slice& key, NoBaseValueTag, 15726: const std::vector& operands, 15726: Logger* logger, Statistics* statistics, 15726: SystemClock* clock, bool update_num_ops_stats, 15726: MergeOperator::OpFailureScope* op_failure_scope, 15726: ResultTs... results) { 15726: MergeOperator::MergeOperationInputV3::ExistingValue existing_value; 15726: 15726: return TimedFullMergeImpl( 15726: merge_operator, key, std::move(existing_value), operands, logger, 15726: statistics, clock, update_num_ops_stats, op_failure_scope, results...); 15726: } 15726: 15726: template 15726: static Status TimedFullMerge( 15726: const MergeOperator* merge_operator, const Slice& key, PlainBaseValueTag, 15726: const Slice& value, const std::vector& operands, Logger* logger, 15726: Statistics* statistics, SystemClock* clock, bool update_num_ops_stats, 15726: MergeOperator::OpFailureScope* op_failure_scope, ResultTs... results) { 15726: MergeOperator::MergeOperationInputV3::ExistingValue existing_value(value); 15726: 15726: return TimedFullMergeImpl( 15726: merge_operator, key, std::move(existing_value), operands, logger, 15726: statistics, clock, update_num_ops_stats, op_failure_scope, results...); 15726: } 15726: 15726: template 15726: static Status TimedFullMerge( 15726: const MergeOperator* merge_operator, const Slice& key, WideBaseValueTag, 15726: const Slice& entity, const std::vector& operands, Logger* logger, 15726: Statistics* statistics, SystemClock* clock, bool update_num_ops_stats, 15726: MergeOperator::OpFailureScope* op_failure_scope, ResultTs... results) { 15726: MergeOperator::MergeOperationInputV3::ExistingValue existing_value; 15726: 15726: Slice entity_copy(entity); 15726: WideColumns existing_columns; 15726: 15726: const Status s = 15726: WideColumnSerialization::Deserialize(entity_copy, existing_columns); 15726: if (!s.ok()) { 15726: return s; 15726: } 15726: 15726: existing_value = std::move(existing_columns); 15726: 15726: return TimedFullMergeImpl( 15726: merge_operator, key, std::move(existing_value), operands, logger, 15726: statistics, clock, update_num_ops_stats, op_failure_scope, results...); 15726: } 15726: 15726: template 15726: static Status TimedFullMerge(const MergeOperator* merge_operator, 15726: const Slice& key, WideBaseValueTag, 15726: const WideColumns& columns, 15726: const std::vector& operands, 15726: Logger* logger, Statistics* statistics, 15726: SystemClock* clock, bool update_num_ops_stats, 15726: MergeOperator::OpFailureScope* op_failure_scope, 15726: ResultTs... results) { 15726: MergeOperator::MergeOperationInputV3::ExistingValue existing_value(columns); 15726: 15726: return TimedFullMergeImpl( 15726: merge_operator, key, std::move(existing_value), operands, logger, 15726: statistics, clock, update_num_ops_stats, op_failure_scope, results...); 15726: } 15726: # 168 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 15726: Status MergeUntil(InternalIterator* iter, 15726: CompactionRangeDelAggregator* range_del_agg, 15726: const SequenceNumber stop_before, const bool at_bottom, 15726: const bool allow_data_in_errors, 15726: const BlobFetcher* blob_fetcher, 15726: const std::string* const full_history_ts_low, 15726: PrefetchBufferCollection* prefetch_buffers, 15726: CompactionIterationStats* c_iter_stats); 15726: 15726: 15726: 15726: 15726: 15726: 15726: CompactionFilter::Decision FilterMerge(const Slice& user_key, 15726: const Slice& value_slice); 15726: # 210 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 15726: const std::deque& keys() const { return keys_; } 15726: const std::vector& values() const { 15726: return merge_context_.GetOperands(); 15726: } 15726: uint64_t TotalFilterTime() const { return total_filter_time_; } 15726: bool HasOperator() const { return user_merge_operator_ != nullptr; } 15726: 15726: 15726: 15726: 15726: bool FilteredUntil(Slice* skip_until) const { 15726: if (!has_compaction_filter_skip_until_) { 15726: return false; 15726: } 15726: 15726: # 224 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 3 4 15726: (static_cast ( 15726: # 224 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 15726: compaction_filter_ != nullptr 15726: # 224 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 224 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 15726: "compaction_filter_ != nullptr" 15726: # 224 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 224 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 15726: ; 15726: 15726: # 225 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 3 4 15726: (static_cast ( 15726: # 225 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 15726: skip_until != nullptr 15726: # 225 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 225 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 15726: "skip_until != nullptr" 15726: # 225 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 225 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 15726: ; 15726: 15726: # 226 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 3 4 15726: (static_cast ( 15726: # 226 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 15726: compaction_filter_skip_until_.Valid() 15726: # 226 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 226 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 15726: "compaction_filter_skip_until_.Valid()" 15726: # 226 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 226 "/build/reproducible-path/rocksdb-9.3.1/db/merge_helper.h" 15726: ; 15726: *skip_until = compaction_filter_skip_until_.Encode(); 15726: return true; 15726: } 15726: 15726: private: 15726: Env* env_; 15726: SystemClock* clock_; 15726: const Comparator* user_comparator_; 15726: const MergeOperator* user_merge_operator_; 15726: const CompactionFilter* compaction_filter_; 15726: const std::atomic* shutting_down_; 15726: Logger* logger_; 15726: bool assert_valid_internal_key_; 15726: bool allow_single_operand_; 15726: SequenceNumber latest_snapshot_; 15726: const SnapshotChecker* const snapshot_checker_; 15726: int level_; 15726: 15726: 15726: 15726: 15726: 15726: std::deque keys_; 15726: 15726: mutable MergeContext merge_context_; 15726: 15726: StopWatchNano filter_timer_; 15726: uint64_t total_filter_time_; 15726: Statistics* stats_; 15726: 15726: bool has_compaction_filter_skip_until_ = false; 15726: std::string compaction_filter_value_; 15726: InternalKey compaction_filter_skip_until_; 15726: 15726: bool IsShuttingDown() { 15726: 15726: return shutting_down_ && shutting_down_->load(std::memory_order_relaxed); 15726: } 15726: 15726: template 15726: static Status TimedFullMergeCommonImpl( 15726: const MergeOperator* merge_operator, const Slice& key, 15726: MergeOperator::MergeOperationInputV3::ExistingValue&& existing_value, 15726: const std::vector& operands, Logger* logger, 15726: Statistics* statistics, SystemClock* clock, bool update_num_ops_stats, 15726: MergeOperator::OpFailureScope* op_failure_scope, Visitor&& visitor); 15726: 15726: 15726: 15726: static Status TimedFullMergeImpl( 15726: const MergeOperator* merge_operator, const Slice& key, 15726: MergeOperator::MergeOperationInputV3::ExistingValue&& existing_value, 15726: const std::vector& operands, Logger* logger, 15726: Statistics* statistics, SystemClock* clock, bool update_num_ops_stats, 15726: MergeOperator::OpFailureScope* op_failure_scope, std::string* result, 15726: Slice* result_operand, ValueType* result_type); 15726: 15726: 15726: 15726: 15726: 15726: static Status TimedFullMergeImpl( 15726: const MergeOperator* merge_operator, const Slice& key, 15726: MergeOperator::MergeOperationInputV3::ExistingValue&& existing_value, 15726: const std::vector& operands, Logger* logger, 15726: Statistics* statistics, SystemClock* clock, bool update_num_ops_stats, 15726: MergeOperator::OpFailureScope* op_failure_scope, 15726: std::string* result_value, PinnableWideColumns* result_entity); 15726: }; 15726: 15726: 15726: class MergeOutputIterator { 15726: public: 15726: 15726: explicit MergeOutputIterator(const MergeHelper* merge_helper); 15726: 15726: 15726: void SeekToFirst(); 15726: 15726: void Next(); 15726: 15726: Slice key() { return Slice(*it_keys_); } 15726: Slice value() { return Slice(*it_values_); } 15726: bool Valid() { return it_keys_ != merge_helper_->keys().rend(); } 15726: 15726: private: 15726: const MergeHelper* merge_helper_; 15726: std::deque::const_reverse_iterator it_keys_; 15726: std::vector::const_reverse_iterator it_values_; 15726: }; 15726: 15726: } 15726: # 21 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 2 15726: 15726: 15726: 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/logging/logging.h" 1 15726: # 13 "/build/reproducible-path/rocksdb-9.3.1/logging/logging.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: inline const char* RocksLogShorterFileName(const char* file) { 15726: 15726: 15726: return file + (sizeof("./logging/logging.h") > 18 ? sizeof("./logging/logging.h") - 18 : 0); 15726: } 15726: # 26 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 2 15726: 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/memory/memory_usage.h" 1 15726: 15726: 15726: 15726: 15726: 15726: 15726: # 16 "/build/reproducible-path/rocksdb-9.3.1/memory/memory_usage.h" 15726: namespace rocksdb { 15726: 15726: 15726: 15726: template 15726: size_t ApproximateMemoryUsage( 15726: const std::unordered_map& umap) { 15726: using Map = std::unordered_map; 15726: return sizeof(umap) + 15726: 15726: (sizeof(typename Map::value_type) + sizeof(void*)) * umap.size() + 15726: 15726: umap.bucket_count() * sizeof(void*); 15726: } 15726: # 38 "/build/reproducible-path/rocksdb-9.3.1/memory/memory_usage.h" 15726: } 15726: # 28 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 2 15726: # 40 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: 15726: 15726: 15726: 15726: template 15726: class IteratorWrapperBase { 15726: public: 15726: IteratorWrapperBase() : iter_(nullptr), valid_(false) {} 15726: explicit IteratorWrapperBase(InternalIteratorBase* _iter) 15726: : iter_(nullptr) { 15726: Set(_iter); 15726: } 15726: ~IteratorWrapperBase() {} 15726: InternalIteratorBase* iter() const { return iter_; } 15726: void SetRangeDelReadSeqno(SequenceNumber read_seqno) { 15726: if (iter_) { 15726: iter_->SetRangeDelReadSeqno(read_seqno); 15726: } 15726: } 15726: 15726: 15726: 15726: InternalIteratorBase* Set(InternalIteratorBase* _iter) { 15726: InternalIteratorBase* old_iter = iter_; 15726: 15726: iter_ = _iter; 15726: if (iter_ == nullptr) { 15726: valid_ = false; 15726: } else { 15726: Update(); 15726: } 15726: return old_iter; 15726: } 15726: 15726: void DeleteIter(bool is_arena_mode) { 15726: if (iter_) { 15726: # 66 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: if (!is_arena_mode) { 15726: delete iter_; 15726: } else { 15726: iter_->~InternalIteratorBase(); 15726: } 15726: } 15726: } 15726: 15726: 15726: bool Valid() const { 15726: 15726: 15726: 15726: return valid_; 15726: } 15726: Slice key() const { 15726: 15726: # 82 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 82 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: Valid() 15726: # 82 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 82 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "Valid()" 15726: # 82 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 82 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: return result_.key; 15726: } 15726: 15726: uint64_t write_unix_time() const { 15726: 15726: # 87 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 87 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: Valid() 15726: # 87 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 87 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "Valid()" 15726: # 87 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 87 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: return iter_->write_unix_time(); 15726: } 15726: 15726: TValue value() const { 15726: 15726: # 92 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 92 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: Valid() 15726: # 92 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 92 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "Valid()" 15726: # 92 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 92 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: return iter_->value(); 15726: } 15726: 15726: Status status() const { 15726: 15726: 15726: 15726: 15726: # 100 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 100 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: iter_ 15726: # 100 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 100 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "iter_" 15726: # 100 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 100 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: return iter_->status(); 15726: } 15726: bool PrepareValue() { 15726: 15726: # 104 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 104 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: Valid() 15726: # 104 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 104 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "Valid()" 15726: # 104 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 104 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: if (result_.value_prepared) { 15726: return true; 15726: } 15726: if (iter_->PrepareValue()) { 15726: result_.value_prepared = true; 15726: result_.key = iter_->key(); 15726: return true; 15726: } 15726: 15726: 15726: # 114 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 114 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: !iter_->Valid() 15726: # 114 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 114 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "!iter_->Valid()" 15726: # 114 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 114 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: valid_ = false; 15726: return false; 15726: } 15726: void Next() { 15726: 15726: # 119 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 119 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: iter_ 15726: # 119 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 119 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "iter_" 15726: # 119 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 119 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: valid_ = iter_->NextAndGetResult(&result_); 15726: 15726: # 121 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 121 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: !valid_ || iter_->status().ok() 15726: # 121 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 121 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "!valid_ || iter_->status().ok()" 15726: # 121 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 121 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: } 15726: bool NextAndGetResult(IterateResult* result) { 15726: 15726: # 124 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 124 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: iter_ 15726: # 124 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 124 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "iter_" 15726: # 124 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 124 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: valid_ = iter_->NextAndGetResult(&result_); 15726: *result = result_; 15726: 15726: # 127 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 127 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: !valid_ || iter_->status().ok() 15726: # 127 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 127 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "!valid_ || iter_->status().ok()" 15726: # 127 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 127 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: return valid_; 15726: } 15726: void Prev() { 15726: 15726: # 131 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 131 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: iter_ 15726: # 131 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 131 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "iter_" 15726: # 131 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 131 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: iter_->Prev(); 15726: Update(); 15726: } 15726: void Seek(const Slice& k) { 15726: 15726: # 136 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 136 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: iter_ 15726: # 136 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 136 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "iter_" 15726: # 136 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 136 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: iter_->Seek(k); 15726: Update(); 15726: } 15726: void SeekForPrev(const Slice& k) { 15726: 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: iter_ 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "iter_" 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 141 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: iter_->SeekForPrev(k); 15726: Update(); 15726: } 15726: void SeekToFirst() { 15726: 15726: # 146 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 146 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: iter_ 15726: # 146 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 146 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "iter_" 15726: # 146 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 146 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: iter_->SeekToFirst(); 15726: Update(); 15726: } 15726: void SeekToLast() { 15726: 15726: # 151 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 151 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: iter_ 15726: # 151 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 151 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "iter_" 15726: # 151 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 151 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: iter_->SeekToLast(); 15726: Update(); 15726: } 15726: 15726: bool MayBeOutOfLowerBound() { 15726: 15726: # 157 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 157 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: Valid() 15726: # 157 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 157 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "Valid()" 15726: # 157 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 157 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: return iter_->MayBeOutOfLowerBound(); 15726: } 15726: 15726: IterBoundCheck UpperBoundCheckResult() { 15726: 15726: # 162 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 162 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: Valid() 15726: # 162 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 162 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "Valid()" 15726: # 162 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 162 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: return result_.bound_check_result; 15726: } 15726: 15726: void SetPinnedItersMgr(PinnedIteratorsManager* pinned_iters_mgr) { 15726: 15726: # 167 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 167 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: iter_ 15726: # 167 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 167 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "iter_" 15726: # 167 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 167 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: iter_->SetPinnedItersMgr(pinned_iters_mgr); 15726: } 15726: bool IsKeyPinned() const { 15726: 15726: # 171 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 171 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: Valid() 15726: # 171 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 171 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "Valid()" 15726: # 171 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 171 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: return iter_->IsKeyPinned(); 15726: } 15726: bool IsValuePinned() const { 15726: 15726: # 175 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 175 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: Valid() 15726: # 175 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 175 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "Valid()" 15726: # 175 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 175 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: return iter_->IsValuePinned(); 15726: } 15726: 15726: bool IsValuePrepared() const { return result_.value_prepared; } 15726: 15726: Slice user_key() const { 15726: 15726: # 182 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 182 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: Valid() 15726: # 182 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 182 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "Valid()" 15726: # 182 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 182 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: return iter_->user_key(); 15726: } 15726: 15726: void UpdateReadaheadState(InternalIteratorBase* old_iter) { 15726: if (old_iter && iter_) { 15726: ReadaheadFileInfo readahead_file_info; 15726: old_iter->GetReadaheadState(&readahead_file_info); 15726: iter_->SetReadaheadState(&readahead_file_info); 15726: } 15726: } 15726: 15726: bool IsDeleteRangeSentinelKey() const { 15726: return iter_->IsDeleteRangeSentinelKey(); 15726: } 15726: 15726: private: 15726: void Update() { 15726: valid_ = iter_->Valid(); 15726: if (valid_) { 15726: 15726: # 202 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: (static_cast ( 15726: # 202 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: iter_->status().ok() 15726: # 202 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 202 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: "iter_->status().ok()" 15726: # 202 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 202 "/build/reproducible-path/rocksdb-9.3.1/table/iterator_wrapper.h" 15726: ; 15726: result_.key = iter_->key(); 15726: result_.bound_check_result = IterBoundCheck::kUnknown; 15726: result_.value_prepared = false; 15726: } 15726: } 15726: 15726: InternalIteratorBase* iter_; 15726: IterateResult result_; 15726: bool valid_; 15726: 15726: 15726: 15726: 15726: }; 15726: 15726: using IteratorWrapper = IteratorWrapperBase; 15726: 15726: class Arena; 15726: 15726: template 15726: InternalIteratorBase* NewEmptyInternalIterator(Arena* arena); 15726: 15726: } 15726: # 41 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 2 15726: # 1 "/build/reproducible-path/rocksdb-9.3.1/table/merging_iterator.h" 1 15726: # 10 "/build/reproducible-path/rocksdb-9.3.1/table/merging_iterator.h" 15726: 15726: 15726: 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: class Arena; 15726: class ArenaWrappedDBIter; 15726: class InternalKeyComparator; 15726: 15726: template 15726: class InternalIteratorBase; 15726: using InternalIterator = InternalIteratorBase; 15726: # 35 "/build/reproducible-path/rocksdb-9.3.1/table/merging_iterator.h" 15726: InternalIterator* NewMergingIterator(const InternalKeyComparator* comparator, 15726: InternalIterator** children, int n, 15726: Arena* arena = nullptr, 15726: bool prefix_seek_mode = false); 15726: 15726: 15726: 15726: 15726: class MergingIterator; 15726: 15726: 15726: 15726: 15726: 15726: class MergeIteratorBuilder { 15726: public: 15726: 15726: 15726: explicit MergeIteratorBuilder(const InternalKeyComparator* comparator, 15726: Arena* arena, bool prefix_seek_mode = false, 15726: const Slice* iterate_upper_bound = nullptr); 15726: ~MergeIteratorBuilder(); 15726: 15726: 15726: void AddIterator(InternalIterator* iter); 15726: # 72 "/build/reproducible-path/rocksdb-9.3.1/table/merging_iterator.h" 15726: void AddPointAndTombstoneIterator( 15726: InternalIterator* point_iter, TruncatedRangeDelIterator* tombstone_iter, 15726: TruncatedRangeDelIterator*** tombstone_iter_ptr = nullptr); 15726: 15726: 15726: 15726: Arena* GetArena() { return arena; } 15726: 15726: 15726: 15726: 15726: 15726: 15726: InternalIterator* Finish(ArenaWrappedDBIter* db_iter = nullptr); 15726: 15726: private: 15726: MergingIterator* merge_iter; 15726: InternalIterator* first_iter; 15726: bool use_merging_iter; 15726: Arena* arena; 15726: 15726: 15726: std::vector> 15726: range_del_iter_ptrs_; 15726: }; 15726: 15726: } 15726: # 42 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 2 15726: 15726: 15726: 15726: 15726: namespace rocksdb { 15726: 15726: ImmutableMemTableOptions::ImmutableMemTableOptions( 15726: const ImmutableOptions& ioptions, 15726: const MutableCFOptions& mutable_cf_options) 15726: : arena_block_size(mutable_cf_options.arena_block_size), 15726: memtable_prefix_bloom_bits( 15726: static_cast( 15726: static_cast(mutable_cf_options.write_buffer_size) * 15726: mutable_cf_options.memtable_prefix_bloom_size_ratio) * 15726: 8u), 15726: memtable_huge_page_size(mutable_cf_options.memtable_huge_page_size), 15726: memtable_whole_key_filtering( 15726: mutable_cf_options.memtable_whole_key_filtering), 15726: inplace_update_support(ioptions.inplace_update_support), 15726: inplace_update_num_locks(mutable_cf_options.inplace_update_num_locks), 15726: inplace_callback(ioptions.inplace_callback), 15726: max_successive_merges(mutable_cf_options.max_successive_merges), 15726: strict_max_successive_merges( 15726: mutable_cf_options.strict_max_successive_merges), 15726: statistics(ioptions.stats), 15726: merge_operator(ioptions.merge_operator.get()), 15726: info_log(ioptions.logger), 15726: allow_data_in_errors(ioptions.allow_data_in_errors), 15726: protection_bytes_per_key( 15726: mutable_cf_options.memtable_protection_bytes_per_key) {} 15726: 15726: MemTable::MemTable(const InternalKeyComparator& cmp, 15726: const ImmutableOptions& ioptions, 15726: const MutableCFOptions& mutable_cf_options, 15726: WriteBufferManager* write_buffer_manager, 15726: SequenceNumber latest_seq, uint32_t column_family_id) 15726: : comparator_(cmp), 15726: moptions_(ioptions, mutable_cf_options), 15726: refs_(0), 15726: kArenaBlockSize(Arena::OptimizeBlockSize(moptions_.arena_block_size)), 15726: mem_tracker_(write_buffer_manager), 15726: arena_(moptions_.arena_block_size, 15726: (write_buffer_manager != nullptr && 15726: (write_buffer_manager->enabled() || 15726: write_buffer_manager->cost_to_cache())) 15726: ? &mem_tracker_ 15726: : nullptr, 15726: mutable_cf_options.memtable_huge_page_size), 15726: table_(ioptions.memtable_factory->CreateMemTableRep( 15726: comparator_, &arena_, mutable_cf_options.prefix_extractor.get(), 15726: ioptions.logger, column_family_id)), 15726: range_del_table_(SkipListFactory().CreateMemTableRep( 15726: comparator_, &arena_, nullptr , ioptions.logger, 15726: column_family_id)), 15726: is_range_del_table_empty_(true), 15726: data_size_(0), 15726: num_entries_(0), 15726: num_deletes_(0), 15726: num_range_deletes_(0), 15726: write_buffer_size_(mutable_cf_options.write_buffer_size), 15726: flush_in_progress_(false), 15726: flush_completed_(false), 15726: file_number_(0), 15726: first_seqno_(0), 15726: earliest_seqno_(latest_seq), 15726: creation_seq_(latest_seq), 15726: mem_next_logfile_number_(0), 15726: min_prep_log_referenced_(0), 15726: locks_(moptions_.inplace_update_support 15726: ? moptions_.inplace_update_num_locks 15726: : 0), 15726: prefix_extractor_(mutable_cf_options.prefix_extractor.get()), 15726: flush_state_(FLUSH_NOT_REQUESTED), 15726: clock_(ioptions.clock), 15726: insert_with_hint_prefix_extractor_( 15726: ioptions.memtable_insert_with_hint_prefix_extractor.get()), 15726: oldest_key_time_(std::numeric_limits::max()), 15726: atomic_flush_seqno_(kMaxSequenceNumber), 15726: approximate_memory_usage_(0), 15726: memtable_max_range_deletions_( 15726: mutable_cf_options.memtable_max_range_deletions) { 15726: UpdateFlushState(); 15726: 15726: 15726: # 125 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 125 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: !ShouldScheduleFlush() 15726: # 125 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 125 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "!ShouldScheduleFlush()" 15726: # 125 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 125 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: 15726: 15726: if ((prefix_extractor_ || moptions_.memtable_whole_key_filtering) && 15726: moptions_.memtable_prefix_bloom_bits > 0) { 15726: bloom_filter_.reset( 15726: new DynamicBloom(&arena_, moptions_.memtable_prefix_bloom_bits, 15726: 6 , 15726: moptions_.memtable_huge_page_size, ioptions.logger)); 15726: } 15726: 15726: 15726: 15726: auto new_cache = std::make_shared(); 15726: size_t size = cached_range_tombstone_.Size(); 15726: for (size_t i = 0; i < size; ++i) { 15726: std::shared_ptr* local_cache_ref_ptr = 15726: cached_range_tombstone_.AccessAtCore(i); 15726: auto new_local_cache_ref = std::make_shared< 15726: const std::shared_ptr>(new_cache); 15726: std::atomic_store_explicit( 15726: local_cache_ref_ptr, 15726: std::shared_ptr(new_local_cache_ref, 15726: new_cache.get()), 15726: std::memory_order_relaxed); 15726: } 15726: const Comparator* ucmp = cmp.user_comparator(); 15726: 15726: # 152 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 152 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ucmp 15726: # 152 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 152 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "ucmp" 15726: # 152 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 152 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: ts_sz_ = ucmp->timestamp_size(); 15726: persist_user_defined_timestamps_ = ioptions.persist_user_defined_timestamps; 15726: } 15726: 15726: MemTable::~MemTable() { 15726: mem_tracker_.FreeMem(); 15726: 15726: # 159 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 159 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: refs_ == 0 15726: # 159 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 159 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "refs_ == 0" 15726: # 159 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 159 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: } 15726: 15726: size_t MemTable::ApproximateMemoryUsage() { 15726: autovector usages = { 15726: arena_.ApproximateMemoryUsage(), table_->ApproximateMemoryUsage(), 15726: range_del_table_->ApproximateMemoryUsage(), 15726: rocksdb::ApproximateMemoryUsage(insert_hints_)}; 15726: size_t total_usage = 0; 15726: for (size_t usage : usages) { 15726: 15726: 15726: if (usage >= std::numeric_limits::max() - total_usage) { 15726: return std::numeric_limits::max(); 15726: } 15726: total_usage += usage; 15726: } 15726: approximate_memory_usage_.store(total_usage, std::memory_order_relaxed); 15726: 15726: return total_usage; 15726: } 15726: 15726: bool MemTable::ShouldFlushNow() { 15726: 15726: 15726: if (memtable_max_range_deletions_ > 0 && 15726: num_range_deletes_.load(std::memory_order_relaxed) >= 15726: static_cast(memtable_max_range_deletions_)) { 15726: return true; 15726: } 15726: 15726: size_t write_buffer_size = write_buffer_size_.load(std::memory_order_relaxed); 15726: 15726: 15726: 15726: 15726: 15726: 15726: const double kAllowOverAllocationRatio = 0.6; 15726: 15726: 15726: 15726: auto allocated_memory = table_->ApproximateMemoryUsage() + 15726: range_del_table_->ApproximateMemoryUsage() + 15726: arena_.MemoryAllocatedBytes(); 15726: 15726: approximate_memory_usage_.store(allocated_memory, std::memory_order_relaxed); 15726: 15726: 15726: 15726: if (allocated_memory + kArenaBlockSize < 15726: write_buffer_size + kArenaBlockSize * kAllowOverAllocationRatio) { 15726: return false; 15726: } 15726: 15726: 15726: 15726: if (allocated_memory > 15726: write_buffer_size + kArenaBlockSize * kAllowOverAllocationRatio) { 15726: return true; 15726: } 15726: # 246 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: return arena_.AllocatedAndUnused() < kArenaBlockSize / 4; 15726: } 15726: 15726: void MemTable::UpdateFlushState() { 15726: auto state = flush_state_.load(std::memory_order_relaxed); 15726: if (state == FLUSH_NOT_REQUESTED && ShouldFlushNow()) { 15726: 15726: 15726: flush_state_.compare_exchange_strong(state, FLUSH_REQUESTED, 15726: std::memory_order_relaxed, 15726: std::memory_order_relaxed); 15726: } 15726: } 15726: 15726: void MemTable::UpdateOldestKeyTime() { 15726: uint64_t oldest_key_time = oldest_key_time_.load(std::memory_order_relaxed); 15726: if (oldest_key_time == std::numeric_limits::max()) { 15726: int64_t current_time = 0; 15726: auto s = clock_->GetCurrentTime(¤t_time); 15726: if (s.ok()) { 15726: 15726: # 266 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 266 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: current_time >= 0 15726: # 266 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 266 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "current_time >= 0" 15726: # 266 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 266 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: 15726: oldest_key_time_.compare_exchange_strong( 15726: oldest_key_time, static_cast(current_time), 15726: std::memory_order_relaxed, std::memory_order_relaxed); 15726: } 15726: } 15726: } 15726: 15726: Status MemTable::VerifyEntryChecksum(const char* entry, 15726: uint32_t protection_bytes_per_key, 15726: bool allow_data_in_errors) { 15726: if (protection_bytes_per_key == 0) { 15726: return Status::OK(); 15726: } 15726: uint32_t key_length; 15726: const char* key_ptr = GetVarint32Ptr(entry, entry + 5, &key_length); 15726: if (key_ptr == nullptr) { 15726: return Status::Corruption("Unable to parse internal key length"); 15726: } 15726: if (key_length < 8) { 15726: return Status::Corruption("Memtable entry internal key length too short."); 15726: } 15726: Slice user_key = Slice(key_ptr, key_length - 8); 15726: 15726: const uint64_t tag = DecodeFixed64(key_ptr + key_length - 8); 15726: ValueType type; 15726: SequenceNumber seq; 15726: UnPackSequenceAndType(tag, &seq, &type); 15726: 15726: uint32_t value_length = 0; 15726: const char* value_ptr = GetVarint32Ptr( 15726: key_ptr + key_length, key_ptr + key_length + 5, &value_length); 15726: if (value_ptr == nullptr) { 15726: return Status::Corruption("Unable to parse internal key value"); 15726: } 15726: Slice value = Slice(value_ptr, value_length); 15726: 15726: const char* checksum_ptr = value_ptr + value_length; 15726: bool match = 15726: ProtectionInfo64() 15726: .ProtectKVO(user_key, value, type) 15726: .ProtectS(seq) 15726: .Verify(static_cast(protection_bytes_per_key), checksum_ptr); 15726: if (!match) { 15726: std::string msg( 15726: "Corrupted memtable entry, per key-value checksum verification " 15726: "failed."); 15726: if (allow_data_in_errors) { 15726: msg.append("Unrecognized value type: " + 15726: std::to_string(static_cast(type)) + ". "); 15726: msg.append("User key: " + user_key.ToString( true) + ". "); 15726: msg.append("seq: " + std::to_string(seq) + "."); 15726: } 15726: return Status::Corruption(msg.c_str()); 15726: } 15726: return Status::OK(); 15726: } 15726: 15726: int MemTable::KeyComparator::operator()(const char* prefix_len_key1, 15726: const char* prefix_len_key2) const { 15726: 15726: Slice k1 = GetLengthPrefixedSlice(prefix_len_key1); 15726: Slice k2 = GetLengthPrefixedSlice(prefix_len_key2); 15726: return comparator.CompareKeySeq(k1, k2); 15726: } 15726: 15726: int MemTable::KeyComparator::operator()( 15726: const char* prefix_len_key, const KeyComparator::DecodedType& key) const { 15726: 15726: Slice a = GetLengthPrefixedSlice(prefix_len_key); 15726: return comparator.CompareKeySeq(a, key); 15726: } 15726: 15726: void MemTableRep::InsertConcurrently(KeyHandle ) { 15726: throw std::runtime_error("concurrent insert not supported"); 15726: } 15726: 15726: Slice MemTableRep::UserKey(const char* key) const { 15726: Slice slice = GetLengthPrefixedSlice(key); 15726: return Slice(slice.data(), slice.size() - 8); 15726: } 15726: 15726: KeyHandle MemTableRep::Allocate(const size_t len, char** buf) { 15726: *buf = allocator_->Allocate(len); 15726: return static_cast(*buf); 15726: } 15726: 15726: 15726: 15726: 15726: const char* EncodeKey(std::string* scratch, const Slice& target) { 15726: scratch->clear(); 15726: PutVarint32(scratch, static_cast(target.size())); 15726: scratch->append(target.data(), target.size()); 15726: return scratch->data(); 15726: } 15726: 15726: class MemTableIterator : public InternalIterator { 15726: public: 15726: MemTableIterator(const MemTable& mem, const ReadOptions& read_options, 15726: UnownedPtr seqno_to_time_mapping, 15726: Arena* arena, bool use_range_del_table = false) 15726: : bloom_(nullptr), 15726: prefix_extractor_(mem.prefix_extractor_), 15726: comparator_(mem.comparator_), 15726: valid_(false), 15726: seqno_to_time_mapping_(seqno_to_time_mapping), 15726: arena_mode_(arena != nullptr), 15726: value_pinned_( 15726: !mem.GetImmutableMemTableOptions()->inplace_update_support), 15726: protection_bytes_per_key_(mem.moptions_.protection_bytes_per_key), 15726: status_(Status::OK()), 15726: logger_(mem.moptions_.info_log), 15726: ts_sz_(mem.ts_sz_) { 15726: if (use_range_del_table) { 15726: iter_ = mem.range_del_table_->GetIterator(arena); 15726: } else if (prefix_extractor_ != nullptr && !read_options.total_order_seek && 15726: !read_options.auto_prefix_mode) { 15726: 15726: bloom_ = mem.bloom_filter_.get(); 15726: iter_ = mem.table_->GetDynamicPrefixIterator(arena); 15726: } else { 15726: iter_ = mem.table_->GetIterator(arena); 15726: } 15726: status_.PermitUncheckedError(); 15726: } 15726: 15726: MemTableIterator(const MemTableIterator&) = delete; 15726: void operator=(const MemTableIterator&) = delete; 15726: 15726: ~MemTableIterator() override { 15726: 15726: 15726: 15726: 15726: # 401 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 401 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: !pinned_iters_mgr_ || !pinned_iters_mgr_->PinningEnabled() 15726: # 401 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 401 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "!pinned_iters_mgr_ || !pinned_iters_mgr_->PinningEnabled()" 15726: # 401 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 401 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: 15726: if (arena_mode_) { 15726: iter_->~Iterator(); 15726: } else { 15726: delete iter_; 15726: } 15726: } 15726: 15726: 15726: void SetPinnedItersMgr(PinnedIteratorsManager* pinned_iters_mgr) override { 15726: pinned_iters_mgr_ = pinned_iters_mgr; 15726: } 15726: PinnedIteratorsManager* pinned_iters_mgr_ = nullptr; 15726: 15726: 15726: bool Valid() const override { return valid_ && status_.ok(); } 15726: void Seek(const Slice& k) override { 15726: PerfStepTimer perf_step_timer_seek_on_memtable_time(&(perf_context.seek_on_memtable_time)); perf_step_timer_seek_on_memtable_time.Start();; 15726: if (perf_level >= PerfLevel::kEnableCount) { perf_context.seek_on_memtable_count += 1; } static_assert(true, "semicolon required"); 15726: if (bloom_) { 15726: 15726: Slice user_k_without_ts(ExtractUserKeyAndStripTimestamp(k, ts_sz_)); 15726: if (prefix_extractor_->InDomain(user_k_without_ts)) { 15726: if (!bloom_->MayContain( 15726: prefix_extractor_->Transform(user_k_without_ts))) { 15726: if (perf_level >= PerfLevel::kEnableCount) { perf_context.bloom_memtable_miss_count += 1; } static_assert(true, "semicolon required"); 15726: valid_ = false; 15726: return; 15726: } else { 15726: if (perf_level >= PerfLevel::kEnableCount) { perf_context.bloom_memtable_hit_count += 1; } static_assert(true, "semicolon required"); 15726: } 15726: } 15726: } 15726: iter_->Seek(k, nullptr); 15726: valid_ = iter_->Valid(); 15726: VerifyEntryChecksum(); 15726: } 15726: void SeekForPrev(const Slice& k) override { 15726: PerfStepTimer perf_step_timer_seek_on_memtable_time(&(perf_context.seek_on_memtable_time)); perf_step_timer_seek_on_memtable_time.Start();; 15726: if (perf_level >= PerfLevel::kEnableCount) { perf_context.seek_on_memtable_count += 1; } static_assert(true, "semicolon required"); 15726: if (bloom_) { 15726: Slice user_k_without_ts(ExtractUserKeyAndStripTimestamp(k, ts_sz_)); 15726: if (prefix_extractor_->InDomain(user_k_without_ts)) { 15726: if (!bloom_->MayContain( 15726: prefix_extractor_->Transform(user_k_without_ts))) { 15726: if (perf_level >= PerfLevel::kEnableCount) { perf_context.bloom_memtable_miss_count += 1; } static_assert(true, "semicolon required"); 15726: valid_ = false; 15726: return; 15726: } else { 15726: if (perf_level >= PerfLevel::kEnableCount) { perf_context.bloom_memtable_hit_count += 1; } static_assert(true, "semicolon required"); 15726: } 15726: } 15726: } 15726: iter_->Seek(k, nullptr); 15726: valid_ = iter_->Valid(); 15726: VerifyEntryChecksum(); 15726: if (!Valid() && status().ok()) { 15726: SeekToLast(); 15726: } 15726: while (Valid() && comparator_.comparator.Compare(k, key()) < 0) { 15726: Prev(); 15726: } 15726: } 15726: void SeekToFirst() override { 15726: iter_->SeekToFirst(); 15726: valid_ = iter_->Valid(); 15726: VerifyEntryChecksum(); 15726: } 15726: void SeekToLast() override { 15726: iter_->SeekToLast(); 15726: valid_ = iter_->Valid(); 15726: VerifyEntryChecksum(); 15726: } 15726: void Next() override { 15726: if (perf_level >= PerfLevel::kEnableCount) { perf_context.next_on_memtable_count += 1; } static_assert(true, "semicolon required"); 15726: 15726: # 477 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 477 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: Valid() 15726: # 477 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 477 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "Valid()" 15726: # 477 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 477 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: iter_->Next(); 15726: rocksdb::SyncPoint::GetInstance()->Process("MemTableIterator::Next:0", iter_); 15726: valid_ = iter_->Valid(); 15726: VerifyEntryChecksum(); 15726: } 15726: bool NextAndGetResult(IterateResult* result) override { 15726: Next(); 15726: bool is_valid = Valid(); 15726: if (is_valid) { 15726: result->key = key(); 15726: result->bound_check_result = IterBoundCheck::kUnknown; 15726: result->value_prepared = true; 15726: } 15726: return is_valid; 15726: } 15726: void Prev() override { 15726: if (perf_level >= PerfLevel::kEnableCount) { perf_context.prev_on_memtable_count += 1; } static_assert(true, "semicolon required"); 15726: 15726: # 495 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 495 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: Valid() 15726: # 495 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 495 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "Valid()" 15726: # 495 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 495 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: iter_->Prev(); 15726: valid_ = iter_->Valid(); 15726: VerifyEntryChecksum(); 15726: } 15726: Slice key() const override { 15726: 15726: # 501 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 501 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: Valid() 15726: # 501 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 501 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "Valid()" 15726: # 501 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 501 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: return GetLengthPrefixedSlice(iter_->key()); 15726: } 15726: 15726: uint64_t write_unix_time() const override { 15726: 15726: # 506 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 506 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: Valid() 15726: # 506 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 506 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "Valid()" 15726: # 506 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 506 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: ParsedInternalKey pikey; 15726: Status s = ParseInternalKey(key(), &pikey, false); 15726: if (!s.ok()) { 15726: return std::numeric_limits::max(); 15726: } else if (kTypeValuePreferredSeqno == pikey.type) { 15726: return ParsePackedValueForWriteTime(value()); 15726: } else if (!seqno_to_time_mapping_ || seqno_to_time_mapping_->Empty()) { 15726: return std::numeric_limits::max(); 15726: } 15726: return seqno_to_time_mapping_->GetProximalTimeBeforeSeqno(pikey.sequence); 15726: } 15726: 15726: Slice value() const override { 15726: 15726: # 520 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 520 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: Valid() 15726: # 520 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 520 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "Valid()" 15726: # 520 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 520 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: Slice key_slice = GetLengthPrefixedSlice(iter_->key()); 15726: return GetLengthPrefixedSlice(key_slice.data() + key_slice.size()); 15726: } 15726: 15726: Status status() const override { return status_; } 15726: 15726: bool IsKeyPinned() const override { 15726: 15726: return true; 15726: } 15726: 15726: bool IsValuePinned() const override { 15726: 15726: return value_pinned_; 15726: } 15726: 15726: private: 15726: DynamicBloom* bloom_; 15726: const SliceTransform* const prefix_extractor_; 15726: const MemTable::KeyComparator comparator_; 15726: MemTableRep::Iterator* iter_; 15726: bool valid_; 15726: 15726: UnownedPtr seqno_to_time_mapping_; 15726: bool arena_mode_; 15726: bool value_pinned_; 15726: uint32_t protection_bytes_per_key_; 15726: Status status_; 15726: Logger* logger_; 15726: size_t ts_sz_; 15726: 15726: void VerifyEntryChecksum() { 15726: if (protection_bytes_per_key_ > 0 && Valid()) { 15726: status_ = MemTable::VerifyEntryChecksum(iter_->key(), 15726: protection_bytes_per_key_); 15726: if (!status_.ok()) { 15726: rocksdb::Log((InfoLogLevel::ERROR_LEVEL), ((logger_)), ("[%s:" "557" "] " "In MemtableIterator: %s"), RocksLogShorterFileName("./db/memtable.cc"), status_.getState()); 15726: } 15726: } 15726: } 15726: }; 15726: 15726: InternalIterator* MemTable::NewIterator( 15726: const ReadOptions& read_options, 15726: UnownedPtr seqno_to_time_mapping, Arena* arena) { 15726: 15726: # 566 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 566 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: arena != nullptr 15726: # 566 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 566 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "arena != nullptr" 15726: # 566 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 566 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: auto mem = arena->AllocateAligned(sizeof(MemTableIterator)); 15726: return new (mem) 15726: MemTableIterator(*this, read_options, seqno_to_time_mapping, arena); 15726: } 15726: 15726: FragmentedRangeTombstoneIterator* MemTable::NewRangeTombstoneIterator( 15726: const ReadOptions& read_options, SequenceNumber read_seq, 15726: bool immutable_memtable) { 15726: if (read_options.ignore_range_deletions || 15726: is_range_del_table_empty_.load(std::memory_order_relaxed)) { 15726: return nullptr; 15726: } 15726: return NewRangeTombstoneIteratorInternal(read_options, read_seq, 15726: immutable_memtable); 15726: } 15726: 15726: FragmentedRangeTombstoneIterator* MemTable::NewRangeTombstoneIteratorInternal( 15726: const ReadOptions& read_options, SequenceNumber read_seq, 15726: bool immutable_memtable) { 15726: if (immutable_memtable) { 15726: 15726: 15726: 15726: # 589 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 589 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: IsFragmentedRangeTombstonesConstructed() 15726: # 589 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 589 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "IsFragmentedRangeTombstonesConstructed()" 15726: # 589 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 589 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: return new FragmentedRangeTombstoneIterator( 15726: fragmented_range_tombstone_list_.get(), comparator_.comparator, 15726: read_seq, read_options.timestamp); 15726: } 15726: 15726: 15726: std::shared_ptr cache = 15726: std::atomic_load_explicit(cached_range_tombstone_.Access(), 15726: std::memory_order_relaxed); 15726: 15726: if (!cache->initialized.load(std::memory_order_acquire)) { 15726: cache->reader_mutex.lock(); 15726: if (!cache->tombstones) { 15726: auto* unfragmented_iter = new MemTableIterator( 15726: *this, read_options, nullptr , 15726: nullptr , true ); 15726: cache->tombstones.reset(new FragmentedRangeTombstoneList( 15726: std::unique_ptr(unfragmented_iter), 15726: comparator_.comparator)); 15726: cache->initialized.store(true, std::memory_order_release); 15726: } 15726: cache->reader_mutex.unlock(); 15726: } 15726: 15726: auto* fragmented_iter = new FragmentedRangeTombstoneIterator( 15726: cache, comparator_.comparator, read_seq, read_options.timestamp); 15726: return fragmented_iter; 15726: } 15726: 15726: void MemTable::ConstructFragmentedRangeTombstones() { 15726: 15726: # 620 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 620 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: !IsFragmentedRangeTombstonesConstructed(false) 15726: # 620 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 620 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "!IsFragmentedRangeTombstonesConstructed(false)" 15726: # 620 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 620 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: 15726: if (!is_range_del_table_empty_.load(std::memory_order_relaxed)) { 15726: 15726: auto* unfragmented_iter = new MemTableIterator( 15726: *this, ReadOptions(), nullptr , 15726: nullptr , true ); 15726: 15726: fragmented_range_tombstone_list_ = 15726: std::make_unique( 15726: std::unique_ptr(unfragmented_iter), 15726: comparator_.comparator); 15726: } 15726: } 15726: 15726: port::RWMutex* MemTable::GetLock(const Slice& key) { 15726: return &locks_[GetSliceRangedNPHash(key, locks_.size())]; 15726: } 15726: 15726: MemTable::MemTableStats MemTable::ApproximateStats(const Slice& start_ikey, 15726: const Slice& end_ikey) { 15726: uint64_t entry_count = table_->ApproximateNumEntries(start_ikey, end_ikey); 15726: entry_count += range_del_table_->ApproximateNumEntries(start_ikey, end_ikey); 15726: if (entry_count == 0) { 15726: return {0, 0}; 15726: } 15726: uint64_t n = num_entries_.load(std::memory_order_relaxed); 15726: if (n == 0) { 15726: return {0, 0}; 15726: } 15726: if (entry_count > n) { 15726: 15726: 15726: 15726: entry_count = n; 15726: } 15726: uint64_t data_size = data_size_.load(std::memory_order_relaxed); 15726: return {entry_count * (data_size / n), entry_count}; 15726: } 15726: 15726: Status MemTable::VerifyEncodedEntry(Slice encoded, 15726: const ProtectionInfoKVOS64& kv_prot_info) { 15726: uint32_t ikey_len = 0; 15726: if (!GetVarint32(&encoded, &ikey_len)) { 15726: return Status::Corruption("Unable to parse internal key length"); 15726: } 15726: if (ikey_len < 8 + ts_sz_) { 15726: return Status::Corruption("Internal key length too short"); 15726: } 15726: if (ikey_len > encoded.size()) { 15726: return Status::Corruption("Internal key length too long"); 15726: } 15726: uint32_t value_len = 0; 15726: const size_t user_key_len = ikey_len - 8; 15726: Slice key(encoded.data(), user_key_len); 15726: encoded.remove_prefix(user_key_len); 15726: 15726: uint64_t packed = DecodeFixed64(encoded.data()); 15726: ValueType value_type = kMaxValue; 15726: SequenceNumber sequence_number = kMaxSequenceNumber; 15726: UnPackSequenceAndType(packed, &sequence_number, &value_type); 15726: encoded.remove_prefix(8); 15726: 15726: if (!GetVarint32(&encoded, &value_len)) { 15726: return Status::Corruption("Unable to parse value length"); 15726: } 15726: if (value_len < encoded.size()) { 15726: return Status::Corruption("Value length too short"); 15726: } 15726: if (value_len > encoded.size()) { 15726: return Status::Corruption("Value length too long"); 15726: } 15726: Slice value(encoded.data(), value_len); 15726: 15726: return kv_prot_info.StripS(sequence_number) 15726: .StripKVO(key, value, value_type) 15726: .GetStatus(); 15726: } 15726: 15726: void MemTable::UpdateEntryChecksum(const ProtectionInfoKVOS64* kv_prot_info, 15726: const Slice& key, const Slice& value, 15726: ValueType type, SequenceNumber s, 15726: char* checksum_ptr) { 15726: if (moptions_.protection_bytes_per_key == 0) { 15726: return; 15726: } 15726: 15726: if (kv_prot_info == nullptr) { 15726: ProtectionInfo64() 15726: .ProtectKVO(key, value, type) 15726: .ProtectS(s) 15726: .Encode(static_cast(moptions_.protection_bytes_per_key), 15726: checksum_ptr); 15726: } else { 15726: kv_prot_info->Encode( 15726: static_cast(moptions_.protection_bytes_per_key), checksum_ptr); 15726: } 15726: } 15726: 15726: Status MemTable::Add(SequenceNumber s, ValueType type, 15726: const Slice& key, 15726: const Slice& value, 15726: const ProtectionInfoKVOS64* kv_prot_info, 15726: bool allow_concurrent, 15726: MemTablePostProcessInfo* post_process_info, void** hint) { 15726: 15726: 15726: 15726: 15726: 15726: 15726: uint32_t key_size = static_cast(key.size()); 15726: uint32_t val_size = static_cast(value.size()); 15726: uint32_t internal_key_size = key_size + 8; 15726: const uint32_t encoded_len = VarintLength(internal_key_size) + 15726: internal_key_size + VarintLength(val_size) + 15726: val_size + moptions_.protection_bytes_per_key; 15726: char* buf = nullptr; 15726: std::unique_ptr& table = 15726: type == kTypeRangeDeletion ? range_del_table_ : table_; 15726: KeyHandle handle = table->Allocate(encoded_len, &buf); 15726: 15726: char* p = EncodeVarint32(buf, internal_key_size); 15726: memcpy(p, key.data(), key_size); 15726: Slice key_slice(p, key_size); 15726: p += key_size; 15726: uint64_t packed = PackSequenceAndType(s, type); 15726: EncodeFixed64(p, packed); 15726: p += 8; 15726: p = EncodeVarint32(p, val_size); 15726: memcpy(p, value.data(), val_size); 15726: 15726: # 751 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 751 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: (unsigned)(p + val_size - buf + moptions_.protection_bytes_per_key) == (unsigned)encoded_len 15726: # 751 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 751 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "(unsigned)(p + val_size - buf + moptions_.protection_bytes_per_key) == (unsigned)encoded_len" 15726: # 751 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: 15726: # 752 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: 15726: UpdateEntryChecksum(kv_prot_info, key, value, type, s, 15726: buf + encoded_len - moptions_.protection_bytes_per_key); 15726: Slice encoded(buf, encoded_len - moptions_.protection_bytes_per_key); 15726: if (kv_prot_info != nullptr) { 15726: rocksdb::SyncPoint::GetInstance()->Process("MemTable::Add:Encoded", &encoded); 15726: Status status = VerifyEncodedEntry(encoded, *kv_prot_info); 15726: if (!status.ok()) { 15726: return status; 15726: } 15726: } 15726: 15726: Slice key_without_ts = StripTimestampFromUserKey(key, ts_sz_); 15726: 15726: if (!allow_concurrent) { 15726: 15726: 15726: if (table == table_ && insert_with_hint_prefix_extractor_ != nullptr && 15726: insert_with_hint_prefix_extractor_->InDomain(key_slice)) { 15726: Slice prefix = insert_with_hint_prefix_extractor_->Transform(key_slice); 15726: bool res = table->InsertKeyWithHint(handle, &insert_hints_[prefix]); 15726: if ((__builtin_expect((!res), 0))) { 15726: return Status::TryAgain("key+seq exists"); 15726: } 15726: } else { 15726: bool res = table->InsertKey(handle); 15726: if ((__builtin_expect((!res), 0))) { 15726: return Status::TryAgain("key+seq exists"); 15726: } 15726: } 15726: 15726: 15726: 15726: num_entries_.store(num_entries_.load(std::memory_order_relaxed) + 1, 15726: std::memory_order_relaxed); 15726: data_size_.store(data_size_.load(std::memory_order_relaxed) + encoded_len, 15726: std::memory_order_relaxed); 15726: if (type == kTypeDeletion || type == kTypeSingleDeletion || 15726: type == kTypeDeletionWithTimestamp) { 15726: num_deletes_.store(num_deletes_.load(std::memory_order_relaxed) + 1, 15726: std::memory_order_relaxed); 15726: } else if (type == kTypeRangeDeletion) { 15726: uint64_t val = num_range_deletes_.load(std::memory_order_relaxed) + 1; 15726: num_range_deletes_.store(val, std::memory_order_relaxed); 15726: } 15726: 15726: if (bloom_filter_ && prefix_extractor_ && 15726: prefix_extractor_->InDomain(key_without_ts)) { 15726: bloom_filter_->Add(prefix_extractor_->Transform(key_without_ts)); 15726: } 15726: if (bloom_filter_ && moptions_.memtable_whole_key_filtering) { 15726: bloom_filter_->Add(key_without_ts); 15726: } 15726: 15726: 15726: 15726: # 808 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 808 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: first_seqno_ == 0 || s >= first_seqno_ 15726: # 808 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 808 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "first_seqno_ == 0 || s >= first_seqno_" 15726: # 808 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 808 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: if (first_seqno_ == 0) { 15726: first_seqno_.store(s, std::memory_order_relaxed); 15726: 15726: if (earliest_seqno_ == kMaxSequenceNumber) { 15726: earliest_seqno_.store(GetFirstSequenceNumber(), 15726: std::memory_order_relaxed); 15726: } 15726: 15726: # 816 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 816 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: first_seqno_.load() >= earliest_seqno_.load() 15726: # 816 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 816 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "first_seqno_.load() >= earliest_seqno_.load()" 15726: # 816 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 816 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: } 15726: 15726: # 818 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 818 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: post_process_info == nullptr 15726: # 818 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 818 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "post_process_info == nullptr" 15726: # 818 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 818 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: 15726: 15726: MaybeUpdateNewestUDT(key_slice); 15726: UpdateFlushState(); 15726: } else { 15726: bool res = (hint == nullptr) 15726: ? table->InsertKeyConcurrently(handle) 15726: : table->InsertKeyWithHintConcurrently(handle, hint); 15726: if ((__builtin_expect((!res), 0))) { 15726: return Status::TryAgain("key+seq exists"); 15726: } 15726: 15726: 15726: # 831 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 831 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: post_process_info != nullptr 15726: # 831 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 831 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "post_process_info != nullptr" 15726: # 831 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 831 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: post_process_info->num_entries++; 15726: post_process_info->data_size += encoded_len; 15726: if (type == kTypeDeletion) { 15726: post_process_info->num_deletes++; 15726: } 15726: 15726: if (bloom_filter_ && prefix_extractor_ && 15726: prefix_extractor_->InDomain(key_without_ts)) { 15726: bloom_filter_->AddConcurrently( 15726: prefix_extractor_->Transform(key_without_ts)); 15726: } 15726: if (bloom_filter_ && moptions_.memtable_whole_key_filtering) { 15726: bloom_filter_->AddConcurrently(key_without_ts); 15726: } 15726: 15726: 15726: uint64_t cur_seq_num = first_seqno_.load(std::memory_order_relaxed); 15726: while ((cur_seq_num == 0 || s < cur_seq_num) && 15726: !first_seqno_.compare_exchange_weak(cur_seq_num, s)) { 15726: } 15726: uint64_t cur_earliest_seqno = 15726: earliest_seqno_.load(std::memory_order_relaxed); 15726: while ( 15726: (cur_earliest_seqno == kMaxSequenceNumber || s < cur_earliest_seqno) && 15726: !earliest_seqno_.compare_exchange_weak(cur_earliest_seqno, s)) { 15726: } 15726: } 15726: if (type == kTypeRangeDeletion) { 15726: auto new_cache = std::make_shared(); 15726: size_t size = cached_range_tombstone_.Size(); 15726: if (allow_concurrent) { 15726: post_process_info->num_range_deletes++; 15726: range_del_mutex_.lock(); 15726: } 15726: for (size_t i = 0; i < size; ++i) { 15726: std::shared_ptr* local_cache_ref_ptr = 15726: cached_range_tombstone_.AccessAtCore(i); 15726: auto new_local_cache_ref = std::make_shared< 15726: const std::shared_ptr>(new_cache); 15726: 15726: 15726: 15726: 15726: 15726: std::atomic_store_explicit( 15726: local_cache_ref_ptr, 15726: std::shared_ptr( 15726: new_local_cache_ref, new_cache.get()), 15726: std::memory_order_relaxed); 15726: } 15726: 15726: if (allow_concurrent) { 15726: range_del_mutex_.unlock(); 15726: } 15726: is_range_del_table_empty_.store(false, std::memory_order_relaxed); 15726: } 15726: UpdateOldestKeyTime(); 15726: 15726: rocksdb::SyncPoint::GetInstance()->Process("MemTable::Add:BeforeReturn:Encoded", &encoded); 15726: return Status::OK(); 15726: } 15726: 15726: 15726: namespace { 15726: 15726: struct Saver { 15726: Status* status; 15726: const LookupKey* key; 15726: bool* found_final_value; 15726: bool* merge_in_progress; 15726: std::string* value; 15726: PinnableWideColumns* columns; 15726: SequenceNumber seq; 15726: std::string* timestamp; 15726: const MergeOperator* merge_operator; 15726: 15726: MergeContext* merge_context; 15726: SequenceNumber max_covering_tombstone_seq; 15726: MemTable* mem; 15726: Logger* logger; 15726: Statistics* statistics; 15726: bool inplace_update_support; 15726: bool do_merge; 15726: SystemClock* clock; 15726: 15726: ReadCallback* callback_; 15726: bool* is_blob_index; 15726: bool allow_data_in_errors; 15726: uint32_t protection_bytes_per_key; 15726: bool CheckCallback(SequenceNumber _seq) { 15726: if (callback_) { 15726: return callback_->IsVisible(_seq); 15726: } 15726: return true; 15726: } 15726: }; 15726: } 15726: 15726: static bool SaveValue(void* arg, const char* entry) { 15726: Saver* s = static_cast(arg); 15726: 15726: # 932 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 932 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: s != nullptr 15726: # 932 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 932 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "s != nullptr" 15726: # 932 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 932 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: 15726: # 933 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 933 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: !s->value || !s->columns 15726: # 933 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 933 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "!s->value || !s->columns" 15726: # 933 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 933 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: 15726: MergeContext* merge_context = s->merge_context; 15726: SequenceNumber max_covering_tombstone_seq = s->max_covering_tombstone_seq; 15726: const MergeOperator* merge_operator = s->merge_operator; 15726: 15726: 15726: # 939 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 939 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: merge_context != nullptr 15726: # 939 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 939 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "merge_context != nullptr" 15726: # 939 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 939 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: 15726: 15726: 15726: uint32_t key_length = 0; 15726: const char* key_ptr = GetVarint32Ptr(entry, entry + 5, &key_length); 15726: 15726: # 945 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 945 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: key_length >= 8 15726: # 945 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 945 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "key_length >= 8" 15726: # 945 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 945 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: Slice user_key_slice = Slice(key_ptr, key_length - 8); 15726: const Comparator* user_comparator = 15726: s->mem->GetInternalKeyComparator().user_comparator(); 15726: size_t ts_sz = user_comparator->timestamp_size(); 15726: if (ts_sz && s->timestamp && max_covering_tombstone_seq > 0) { 15726: 15726: 15726: # 952 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 952 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: s->timestamp->size() == ts_sz 15726: # 952 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 952 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "s->timestamp->size() == ts_sz" 15726: # 952 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 952 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: } 15726: if (user_comparator->EqualWithoutTimestamp(user_key_slice, 15726: s->key->user_key())) { 15726: 15726: rocksdb::SyncPoint::GetInstance()->Process("Memtable::SaveValue:Found:entry", &entry); 15726: std::unique_ptr read_lock; 15726: if (s->inplace_update_support) { 15726: read_lock.reset(new ReadLock(s->mem->GetLock(s->key->user_key()))); 15726: } 15726: 15726: if (s->protection_bytes_per_key > 0) { 15726: *(s->status) = MemTable::VerifyEntryChecksum( 15726: entry, s->protection_bytes_per_key, s->allow_data_in_errors); 15726: if (!s->status->ok()) { 15726: rocksdb::Log((InfoLogLevel::ERROR_LEVEL), ((s->logger)), ("[%s:" "967" "] " "In SaveValue: %s"), RocksLogShorterFileName("./db/memtable.cc"), s->status->getState()); 15726: 15726: return false; 15726: } 15726: } 15726: 15726: const uint64_t tag = DecodeFixed64(key_ptr + key_length - 8); 15726: ValueType type; 15726: SequenceNumber seq; 15726: UnPackSequenceAndType(tag, &seq, &type); 15726: 15726: if (!s->CheckCallback(seq)) { 15726: return true; 15726: } 15726: 15726: if (s->seq == kMaxSequenceNumber) { 15726: s->seq = seq; 15726: if (s->seq > max_covering_tombstone_seq) { 15726: if (ts_sz && s->timestamp != nullptr) { 15726: 15726: 15726: 15726: 15726: Slice ts = ExtractTimestampFromUserKey(user_key_slice, ts_sz); 15726: s->timestamp->assign(ts.data(), ts_sz); 15726: } 15726: } else { 15726: s->seq = max_covering_tombstone_seq; 15726: } 15726: } 15726: 15726: if (ts_sz > 0 && s->timestamp != nullptr) { 15726: if (!s->timestamp->empty()) { 15726: 15726: # 1000 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 1000 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ts_sz == s->timestamp->size() 15726: # 1000 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1000 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "ts_sz == s->timestamp->size()" 15726: # 1000 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1000 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: } 15726: 15726: const std::string kMaxTs(ts_sz, '\xff'); 15726: if (s->timestamp->empty() || 15726: user_comparator->CompareTimestamp(*(s->timestamp), kMaxTs) == 0) { 15726: Slice ts = ExtractTimestampFromUserKey(user_key_slice, ts_sz); 15726: s->timestamp->assign(ts.data(), ts_sz); 15726: } 15726: } 15726: 15726: if ((type == kTypeValue || type == kTypeMerge || type == kTypeBlobIndex || 15726: type == kTypeWideColumnEntity || type == kTypeDeletion || 15726: type == kTypeSingleDeletion || type == kTypeDeletionWithTimestamp || 15726: type == kTypeValuePreferredSeqno) && 15726: max_covering_tombstone_seq > seq) { 15726: type = kTypeRangeDeletion; 15726: } 15726: switch (type) { 15726: case kTypeBlobIndex: { 15726: if (!s->do_merge) { 15726: *(s->status) = Status::NotSupported( 15726: "GetMergeOperands not supported by stacked BlobDB"); 15726: *(s->found_final_value) = true; 15726: return false; 15726: } 15726: 15726: if (*(s->merge_in_progress)) { 15726: *(s->status) = Status::NotSupported( 15726: "Merge operator not supported by stacked BlobDB"); 15726: *(s->found_final_value) = true; 15726: return false; 15726: } 15726: 15726: if (s->is_blob_index == nullptr) { 15726: rocksdb::Log((InfoLogLevel::ERROR_LEVEL), ((s->logger)), ("[%s:" "1035" "] " "Encountered unexpected blob index."), RocksLogShorterFileName("./db/memtable.cc")); 15726: *(s->status) = Status::NotSupported( 15726: "Encountered unexpected blob index. Please open DB with " 15726: "ROCKSDB_NAMESPACE::blob_db::BlobDB."); 15726: *(s->found_final_value) = true; 15726: return false; 15726: } 15726: 15726: Slice v = GetLengthPrefixedSlice(key_ptr + key_length); 15726: 15726: *(s->status) = Status::OK(); 15726: 15726: if (s->value) { 15726: s->value->assign(v.data(), v.size()); 15726: } else if (s->columns) { 15726: s->columns->SetPlainValue(v); 15726: } 15726: 15726: *(s->found_final_value) = true; 15726: *(s->is_blob_index) = true; 15726: 15726: return false; 15726: } 15726: case kTypeValue: 15726: case kTypeValuePreferredSeqno: { 15726: Slice v = GetLengthPrefixedSlice(key_ptr + key_length); 15726: 15726: if (type == kTypeValuePreferredSeqno) { 15726: v = ParsePackedValueForValue(v); 15726: } 15726: 15726: *(s->status) = Status::OK(); 15726: 15726: if (!s->do_merge) { 15726: 15726: 15726: 15726: 15726: 15726: merge_context->PushOperand( 15726: v, s->inplace_update_support == false ); 15726: } else if (*(s->merge_in_progress)) { 15726: 15726: # 1077 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 1077 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: s->do_merge 15726: # 1077 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1077 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "s->do_merge" 15726: # 1077 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1077 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: 15726: if (s->value || s->columns) { 15726: 15726: 15726: 15726: *(s->status) = MergeHelper::TimedFullMerge( 15726: merge_operator, s->key->user_key(), 15726: MergeHelper::kPlainBaseValue, v, merge_context->GetOperands(), 15726: s->logger, s->statistics, s->clock, 15726: true, nullptr, 15726: s->value, s->columns); 15726: } 15726: } else if (s->value) { 15726: s->value->assign(v.data(), v.size()); 15726: } else if (s->columns) { 15726: s->columns->SetPlainValue(v); 15726: } 15726: 15726: *(s->found_final_value) = true; 15726: 15726: if (s->is_blob_index != nullptr) { 15726: *(s->is_blob_index) = false; 15726: } 15726: 15726: return false; 15726: } 15726: case kTypeWideColumnEntity: { 15726: Slice v = GetLengthPrefixedSlice(key_ptr + key_length); 15726: 15726: *(s->status) = Status::OK(); 15726: 15726: if (!s->do_merge) { 15726: 15726: 15726: 15726: Slice value_of_default; 15726: *(s->status) = WideColumnSerialization::GetValueOfDefaultColumn( 15726: v, value_of_default); 15726: 15726: if (s->status->ok()) { 15726: merge_context->PushOperand( 15726: value_of_default, 15726: s->inplace_update_support == false ); 15726: } 15726: } else if (*(s->merge_in_progress)) { 15726: 15726: # 1123 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 1123 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: s->do_merge 15726: # 1123 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1123 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "s->do_merge" 15726: # 1123 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1123 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: 15726: if (s->value || s->columns) { 15726: 15726: 15726: 15726: *(s->status) = MergeHelper::TimedFullMerge( 15726: merge_operator, s->key->user_key(), MergeHelper::kWideBaseValue, 15726: v, merge_context->GetOperands(), s->logger, s->statistics, 15726: s->clock, true, 15726: nullptr, s->value, s->columns); 15726: } 15726: } else if (s->value) { 15726: Slice value_of_default; 15726: *(s->status) = WideColumnSerialization::GetValueOfDefaultColumn( 15726: v, value_of_default); 15726: if (s->status->ok()) { 15726: s->value->assign(value_of_default.data(), value_of_default.size()); 15726: } 15726: } else if (s->columns) { 15726: *(s->status) = s->columns->SetWideColumnValue(v); 15726: } 15726: 15726: *(s->found_final_value) = true; 15726: 15726: if (s->is_blob_index != nullptr) { 15726: *(s->is_blob_index) = false; 15726: } 15726: 15726: return false; 15726: } 15726: case kTypeDeletion: 15726: case kTypeDeletionWithTimestamp: 15726: case kTypeSingleDeletion: 15726: case kTypeRangeDeletion: { 15726: if (*(s->merge_in_progress)) { 15726: if (s->value || s->columns) { 15726: 15726: 15726: 15726: *(s->status) = MergeHelper::TimedFullMerge( 15726: merge_operator, s->key->user_key(), MergeHelper::kNoBaseValue, 15726: merge_context->GetOperands(), s->logger, s->statistics, 15726: s->clock, true, 15726: nullptr, s->value, s->columns); 15726: } else { 15726: 15726: 15726: 15726: *(s->status) = Status::OK(); 15726: } 15726: } else { 15726: *(s->status) = Status::NotFound(); 15726: } 15726: *(s->found_final_value) = true; 15726: return false; 15726: } 15726: case kTypeMerge: { 15726: if (!merge_operator) { 15726: *(s->status) = Status::InvalidArgument( 15726: "merge_operator is not properly initialized."); 15726: 15726: 15726: 15726: 15726: *(s->found_final_value) = true; 15726: return false; 15726: } 15726: Slice v = GetLengthPrefixedSlice(key_ptr + key_length); 15726: *(s->merge_in_progress) = true; 15726: merge_context->PushOperand( 15726: v, s->inplace_update_support == false ); 15726: if (perf_level >= PerfLevel::kEnableCount) { perf_context.internal_merge_point_lookup_count += 1; } static_assert(true, "semicolon required"); 15726: 15726: if (s->do_merge && merge_operator->ShouldMerge( 15726: merge_context->GetOperandsDirectionBackward())) { 15726: if (s->value || s->columns) { 15726: 15726: 15726: 15726: *(s->status) = MergeHelper::TimedFullMerge( 15726: merge_operator, s->key->user_key(), MergeHelper::kNoBaseValue, 15726: merge_context->GetOperands(), s->logger, s->statistics, 15726: s->clock, true, 15726: nullptr, s->value, s->columns); 15726: } 15726: 15726: *(s->found_final_value) = true; 15726: return false; 15726: } 15726: if (merge_context->get_merge_operands_options != nullptr && 15726: merge_context->get_merge_operands_options->continue_cb != nullptr && 15726: !merge_context->get_merge_operands_options->continue_cb(v)) { 15726: 15726: *(s->found_final_value) = true; 15726: return false; 15726: } 15726: 15726: return true; 15726: } 15726: default: { 15726: std::string msg("Corrupted value not expected."); 15726: if (s->allow_data_in_errors) { 15726: msg.append("Unrecognized value type: " + 15726: std::to_string(static_cast(type)) + ". "); 15726: msg.append("User key: " + user_key_slice.ToString( true) + 15726: ". "); 15726: msg.append("seq: " + std::to_string(seq) + "."); 15726: } 15726: *(s->status) = Status::Corruption(msg.c_str()); 15726: return false; 15726: } 15726: } 15726: } 15726: 15726: 15726: return false; 15726: } 15726: 15726: bool MemTable::Get(const LookupKey& key, std::string* value, 15726: PinnableWideColumns* columns, std::string* timestamp, 15726: Status* s, MergeContext* merge_context, 15726: SequenceNumber* max_covering_tombstone_seq, 15726: SequenceNumber* seq, const ReadOptions& read_opts, 15726: bool immutable_memtable, ReadCallback* callback, 15726: bool* is_blob_index, bool do_merge) { 15726: 15726: if (IsEmpty()) { 15726: 15726: return false; 15726: } 15726: 15726: PerfStepTimer perf_step_timer_get_from_memtable_time(&(perf_context.get_from_memtable_time)); perf_step_timer_get_from_memtable_time.Start();; 15726: 15726: std::unique_ptr range_del_iter( 15726: NewRangeTombstoneIterator(read_opts, 15726: GetInternalKeySeqno(key.internal_key()), 15726: immutable_memtable)); 15726: if (range_del_iter != nullptr) { 15726: SequenceNumber covering_seq = 15726: range_del_iter->MaxCoveringTombstoneSeqnum(key.user_key()); 15726: if (covering_seq > *max_covering_tombstone_seq) { 15726: *max_covering_tombstone_seq = covering_seq; 15726: if (timestamp) { 15726: 15726: 15726: timestamp->assign(range_del_iter->timestamp().data(), 15726: range_del_iter->timestamp().size()); 15726: } 15726: } 15726: } 15726: 15726: bool found_final_value = false; 15726: bool merge_in_progress = s->IsMergeInProgress(); 15726: bool may_contain = true; 15726: Slice user_key_without_ts = StripTimestampFromUserKey(key.user_key(), ts_sz_); 15726: bool bloom_checked = false; 15726: if (bloom_filter_) { 15726: 15726: 15726: if (moptions_.memtable_whole_key_filtering) { 15726: may_contain = bloom_filter_->MayContain(user_key_without_ts); 15726: bloom_checked = true; 15726: } else { 15726: 15726: # 1287 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 1287 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: prefix_extractor_ 15726: # 1287 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1287 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "prefix_extractor_" 15726: # 1287 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1287 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: if (prefix_extractor_->InDomain(user_key_without_ts)) { 15726: may_contain = bloom_filter_->MayContain( 15726: prefix_extractor_->Transform(user_key_without_ts)); 15726: bloom_checked = true; 15726: } 15726: } 15726: } 15726: 15726: if (bloom_filter_ && !may_contain) { 15726: 15726: if (perf_level >= PerfLevel::kEnableCount) { perf_context.bloom_memtable_miss_count += 1; } static_assert(true, "semicolon required"); 15726: *seq = kMaxSequenceNumber; 15726: } else { 15726: if (bloom_checked) { 15726: if (perf_level >= PerfLevel::kEnableCount) { perf_context.bloom_memtable_hit_count += 1; } static_assert(true, "semicolon required"); 15726: } 15726: GetFromTable(key, *max_covering_tombstone_seq, do_merge, callback, 15726: is_blob_index, value, columns, timestamp, s, merge_context, 15726: seq, &found_final_value, &merge_in_progress); 15726: } 15726: 15726: 15726: 15726: if (!found_final_value && merge_in_progress && !s->IsCorruption()) { 15726: *s = Status::MergeInProgress(); 15726: } 15726: if (perf_level >= PerfLevel::kEnableCount) { perf_context.get_from_memtable_count += 1; } static_assert(true, "semicolon required"); 15726: return found_final_value; 15726: } 15726: 15726: void MemTable::GetFromTable(const LookupKey& key, 15726: SequenceNumber max_covering_tombstone_seq, 15726: bool do_merge, ReadCallback* callback, 15726: bool* is_blob_index, std::string* value, 15726: PinnableWideColumns* columns, 15726: std::string* timestamp, Status* s, 15726: MergeContext* merge_context, SequenceNumber* seq, 15726: bool* found_final_value, bool* merge_in_progress) { 15726: Saver saver; 15726: saver.status = s; 15726: saver.found_final_value = found_final_value; 15726: saver.merge_in_progress = merge_in_progress; 15726: saver.key = &key; 15726: saver.value = value; 15726: saver.columns = columns; 15726: saver.timestamp = timestamp; 15726: saver.seq = kMaxSequenceNumber; 15726: saver.mem = this; 15726: saver.merge_context = merge_context; 15726: saver.max_covering_tombstone_seq = max_covering_tombstone_seq; 15726: saver.merge_operator = moptions_.merge_operator; 15726: saver.logger = moptions_.info_log; 15726: saver.inplace_update_support = moptions_.inplace_update_support; 15726: saver.statistics = moptions_.statistics; 15726: saver.clock = clock_; 15726: saver.callback_ = callback; 15726: saver.is_blob_index = is_blob_index; 15726: saver.do_merge = do_merge; 15726: saver.allow_data_in_errors = moptions_.allow_data_in_errors; 15726: saver.protection_bytes_per_key = moptions_.protection_bytes_per_key; 15726: table_->Get(key, &saver, SaveValue); 15726: *seq = saver.seq; 15726: } 15726: 15726: void MemTable::MultiGet(const ReadOptions& read_options, MultiGetRange* range, 15726: ReadCallback* callback, bool immutable_memtable) { 15726: 15726: if (IsEmpty()) { 15726: 15726: return; 15726: } 15726: PerfStepTimer perf_step_timer_get_from_memtable_time(&(perf_context.get_from_memtable_time)); perf_step_timer_get_from_memtable_time.Start();; 15726: 15726: 15726: 15726: 15726: bool no_range_del = read_options.ignore_range_deletions || 15726: is_range_del_table_empty_.load(std::memory_order_relaxed); 15726: MultiGetRange temp_range(*range, range->begin(), range->end()); 15726: if (bloom_filter_ && no_range_del) { 15726: bool whole_key = 15726: !prefix_extractor_ || moptions_.memtable_whole_key_filtering; 15726: std::array bloom_keys; 15726: std::array may_match; 15726: std::array range_indexes; 15726: int num_keys = 0; 15726: for (auto iter = temp_range.begin(); iter != temp_range.end(); ++iter) { 15726: if (whole_key) { 15726: bloom_keys[num_keys] = iter->ukey_without_ts; 15726: range_indexes[num_keys++] = iter.index(); 15726: } else if (prefix_extractor_->InDomain(iter->ukey_without_ts)) { 15726: bloom_keys[num_keys] = 15726: prefix_extractor_->Transform(iter->ukey_without_ts); 15726: range_indexes[num_keys++] = iter.index(); 15726: } 15726: } 15726: bloom_filter_->MayContain(num_keys, bloom_keys.data(), may_match.data()); 15726: for (int i = 0; i < num_keys; ++i) { 15726: if (!may_match[i]) { 15726: temp_range.SkipIndex(range_indexes[i]); 15726: if (perf_level >= PerfLevel::kEnableCount) { perf_context.bloom_memtable_miss_count += 1; } static_assert(true, "semicolon required"); 15726: } else { 15726: if (perf_level >= PerfLevel::kEnableCount) { perf_context.bloom_memtable_hit_count += 1; } static_assert(true, "semicolon required"); 15726: } 15726: } 15726: } 15726: for (auto iter = temp_range.begin(); iter != temp_range.end(); ++iter) { 15726: bool found_final_value{false}; 15726: bool merge_in_progress = iter->s->IsMergeInProgress(); 15726: if (!no_range_del) { 15726: std::unique_ptr range_del_iter( 15726: NewRangeTombstoneIteratorInternal( 15726: read_options, GetInternalKeySeqno(iter->lkey->internal_key()), 15726: immutable_memtable)); 15726: SequenceNumber covering_seq = 15726: range_del_iter->MaxCoveringTombstoneSeqnum(iter->lkey->user_key()); 15726: if (covering_seq > iter->max_covering_tombstone_seq) { 15726: iter->max_covering_tombstone_seq = covering_seq; 15726: if (iter->timestamp) { 15726: 15726: 15726: iter->timestamp->assign(range_del_iter->timestamp().data(), 15726: range_del_iter->timestamp().size()); 15726: } 15726: } 15726: } 15726: SequenceNumber dummy_seq; 15726: GetFromTable(*(iter->lkey), iter->max_covering_tombstone_seq, true, 15726: callback, &iter->is_blob_index, 15726: iter->value ? iter->value->GetSelf() : nullptr, iter->columns, 15726: iter->timestamp, iter->s, &(iter->merge_context), &dummy_seq, 15726: &found_final_value, &merge_in_progress); 15726: 15726: if (!found_final_value && merge_in_progress) { 15726: *(iter->s) = Status::MergeInProgress(); 15726: } 15726: 15726: if (found_final_value) { 15726: if (iter->value) { 15726: iter->value->PinSelf(); 15726: range->AddValueSize(iter->value->size()); 15726: } else { 15726: 15726: # 1430 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 1430 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: iter->columns 15726: # 1430 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1430 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "iter->columns" 15726: # 1430 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1430 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: range->AddValueSize(iter->columns->serialized_size()); 15726: } 15726: 15726: range->MarkKeyDone(iter); 15726: RecordTick(moptions_.statistics, MEMTABLE_HIT); 15726: if (range->GetValueSize() > read_options.value_size_soft_limit) { 15726: 15726: for (auto range_iter = range->begin(); range_iter != range->end(); 15726: ++range_iter) { 15726: range->MarkKeyDone(range_iter); 15726: *(range_iter->s) = Status::Aborted(); 15726: } 15726: break; 15726: } 15726: } 15726: } 15726: if (perf_level >= PerfLevel::kEnableCount) { perf_context.get_from_memtable_count += 1; } static_assert(true, "semicolon required"); 15726: } 15726: 15726: Status MemTable::Update(SequenceNumber seq, ValueType value_type, 15726: const Slice& key, const Slice& value, 15726: const ProtectionInfoKVOS64* kv_prot_info) { 15726: LookupKey lkey(key, seq); 15726: Slice mem_key = lkey.memtable_key(); 15726: 15726: std::unique_ptr iter( 15726: table_->GetDynamicPrefixIterator()); 15726: iter->Seek(lkey.internal_key(), mem_key.data()); 15726: 15726: if (iter->Valid()) { 15726: 15726: 15726: 15726: 15726: const char* entry = iter->key(); 15726: uint32_t key_length = 0; 15726: const char* key_ptr = GetVarint32Ptr(entry, entry + 5, &key_length); 15726: if (comparator_.comparator.user_comparator()->Equal( 15726: Slice(key_ptr, key_length - 8), lkey.user_key())) { 15726: 15726: const uint64_t tag = DecodeFixed64(key_ptr + key_length - 8); 15726: ValueType type; 15726: SequenceNumber existing_seq; 15726: UnPackSequenceAndType(tag, &existing_seq, &type); 15726: 15726: # 1475 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 1475 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: existing_seq != seq 15726: # 1475 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1475 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "existing_seq != seq" 15726: # 1475 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1475 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: if (type == value_type) { 15726: Slice prev_value = GetLengthPrefixedSlice(key_ptr + key_length); 15726: uint32_t prev_size = static_cast(prev_value.size()); 15726: uint32_t new_size = static_cast(value.size()); 15726: 15726: 15726: if (new_size <= prev_size) { 15726: WriteLock wl(GetLock(lkey.user_key())); 15726: char* p = 15726: EncodeVarint32(const_cast(key_ptr) + key_length, new_size); 15726: memcpy(p, value.data(), value.size()); 15726: 15726: # 1487 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 1487 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: (unsigned)((p + value.size()) - entry) == (unsigned)(VarintLength(key_length) + key_length + VarintLength(value.size()) + value.size()) 15726: # 1487 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1487 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "(unsigned)((p + value.size()) - entry) == (unsigned)(VarintLength(key_length) + key_length + VarintLength(value.size()) + value.size())" 15726: # 1487 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: 15726: 15726: # 1489 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: RecordTick(moptions_.statistics, NUMBER_KEYS_UPDATED); 15726: if (kv_prot_info != nullptr) { 15726: ProtectionInfoKVOS64 updated_kv_prot_info(*kv_prot_info); 15726: 15726: updated_kv_prot_info.UpdateS(seq, existing_seq); 15726: UpdateEntryChecksum(&updated_kv_prot_info, key, value, type, 15726: existing_seq, p + value.size()); 15726: Slice encoded(entry, p + value.size() - entry); 15726: return VerifyEncodedEntry(encoded, updated_kv_prot_info); 15726: } else { 15726: UpdateEntryChecksum(nullptr, key, value, type, existing_seq, 15726: p + value.size()); 15726: } 15726: return Status::OK(); 15726: } 15726: } 15726: } 15726: } 15726: 15726: 15726: return Add(seq, value_type, key, value, kv_prot_info); 15726: } 15726: 15726: Status MemTable::UpdateCallback(SequenceNumber seq, const Slice& key, 15726: const Slice& delta, 15726: const ProtectionInfoKVOS64* kv_prot_info) { 15726: LookupKey lkey(key, seq); 15726: Slice memkey = lkey.memtable_key(); 15726: 15726: std::unique_ptr iter( 15726: table_->GetDynamicPrefixIterator()); 15726: iter->Seek(lkey.internal_key(), memkey.data()); 15726: 15726: if (iter->Valid()) { 15726: 15726: 15726: 15726: 15726: const char* entry = iter->key(); 15726: uint32_t key_length = 0; 15726: const char* key_ptr = GetVarint32Ptr(entry, entry + 5, &key_length); 15726: if (comparator_.comparator.user_comparator()->Equal( 15726: Slice(key_ptr, key_length - 8), lkey.user_key())) { 15726: 15726: const uint64_t tag = DecodeFixed64(key_ptr + key_length - 8); 15726: ValueType type; 15726: uint64_t existing_seq; 15726: UnPackSequenceAndType(tag, &existing_seq, &type); 15726: if (type == kTypeValue) { 15726: Slice prev_value = GetLengthPrefixedSlice(key_ptr + key_length); 15726: uint32_t prev_size = static_cast(prev_value.size()); 15726: 15726: char* prev_buffer = const_cast(prev_value.data()); 15726: uint32_t new_prev_size = prev_size; 15726: 15726: std::string str_value; 15726: WriteLock wl(GetLock(lkey.user_key())); 15726: auto status = moptions_.inplace_callback(prev_buffer, &new_prev_size, 15726: delta, &str_value); 15726: if (status == UpdateStatus::UPDATED_INPLACE) { 15726: 15726: 15726: # 1551 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 1551 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: new_prev_size <= prev_size 15726: # 1551 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1551 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "new_prev_size <= prev_size" 15726: # 1551 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1551 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: if (new_prev_size < prev_size) { 15726: 15726: char* p = EncodeVarint32(const_cast(key_ptr) + key_length, 15726: new_prev_size); 15726: if (VarintLength(new_prev_size) < VarintLength(prev_size)) { 15726: 15726: memcpy(p, prev_buffer, new_prev_size); 15726: prev_buffer = p; 15726: } 15726: } 15726: RecordTick(moptions_.statistics, NUMBER_KEYS_UPDATED); 15726: UpdateFlushState(); 15726: Slice new_value(prev_buffer, new_prev_size); 15726: if (kv_prot_info != nullptr) { 15726: ProtectionInfoKVOS64 updated_kv_prot_info(*kv_prot_info); 15726: 15726: updated_kv_prot_info.UpdateS(seq, existing_seq); 15726: updated_kv_prot_info.UpdateV(delta, new_value); 15726: Slice encoded(entry, prev_buffer + new_prev_size - entry); 15726: UpdateEntryChecksum(&updated_kv_prot_info, key, new_value, type, 15726: existing_seq, prev_buffer + new_prev_size); 15726: return VerifyEncodedEntry(encoded, updated_kv_prot_info); 15726: } else { 15726: UpdateEntryChecksum(nullptr, key, new_value, type, existing_seq, 15726: prev_buffer + new_prev_size); 15726: } 15726: return Status::OK(); 15726: } else if (status == UpdateStatus::UPDATED) { 15726: Status s; 15726: if (kv_prot_info != nullptr) { 15726: ProtectionInfoKVOS64 updated_kv_prot_info(*kv_prot_info); 15726: updated_kv_prot_info.UpdateV(delta, str_value); 15726: s = Add(seq, kTypeValue, key, Slice(str_value), 15726: &updated_kv_prot_info); 15726: } else { 15726: s = Add(seq, kTypeValue, key, Slice(str_value), 15726: nullptr ); 15726: } 15726: RecordTick(moptions_.statistics, NUMBER_KEYS_WRITTEN); 15726: UpdateFlushState(); 15726: return s; 15726: } else if (status == UpdateStatus::UPDATE_FAILED) { 15726: 15726: 15726: UpdateFlushState(); 15726: return Status::OK(); 15726: } 15726: } 15726: } 15726: } 15726: 15726: return Status::NotFound(); 15726: } 15726: 15726: size_t MemTable::CountSuccessiveMergeEntries(const LookupKey& key, 15726: size_t limit) { 15726: Slice memkey = key.memtable_key(); 15726: 15726: 15726: 15726: 15726: std::unique_ptr iter( 15726: table_->GetDynamicPrefixIterator()); 15726: iter->Seek(key.internal_key(), memkey.data()); 15726: 15726: size_t num_successive_merges = 0; 15726: 15726: for (; iter->Valid() && num_successive_merges < limit; iter->Next()) { 15726: const char* entry = iter->key(); 15726: uint32_t key_length = 0; 15726: const char* iter_key_ptr = GetVarint32Ptr(entry, entry + 5, &key_length); 15726: if (!comparator_.comparator.user_comparator()->Equal( 15726: Slice(iter_key_ptr, key_length - 8), key.user_key())) { 15726: break; 15726: } 15726: 15726: const uint64_t tag = DecodeFixed64(iter_key_ptr + key_length - 8); 15726: ValueType type; 15726: uint64_t unused; 15726: UnPackSequenceAndType(tag, &unused, &type); 15726: if (type != kTypeMerge) { 15726: break; 15726: } 15726: 15726: ++num_successive_merges; 15726: } 15726: 15726: return num_successive_merges; 15726: } 15726: 15726: void MemTableRep::Get(const LookupKey& k, void* callback_args, 15726: bool (*callback_func)(void* arg, const char* entry)) { 15726: auto iter = GetDynamicPrefixIterator(); 15726: for (iter->Seek(k.internal_key(), k.memtable_key().data()); 15726: iter->Valid() && callback_func(callback_args, iter->key()); 15726: iter->Next()) { 15726: } 15726: } 15726: 15726: void MemTable::RefLogContainingPrepSection(uint64_t log) { 15726: 15726: # 1652 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 1652 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: log > 0 15726: # 1652 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1652 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "log > 0" 15726: # 1652 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1652 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: auto cur = min_prep_log_referenced_.load(); 15726: while ((log < cur || cur == 0) && 15726: !min_prep_log_referenced_.compare_exchange_strong(cur, log)) { 15726: cur = min_prep_log_referenced_.load(); 15726: } 15726: } 15726: 15726: uint64_t MemTable::GetMinLogContainingPrepSection() { 15726: return min_prep_log_referenced_.load(); 15726: } 15726: 15726: void MemTable::MaybeUpdateNewestUDT(const Slice& user_key) { 15726: if (ts_sz_ == 0 || persist_user_defined_timestamps_) { 15726: return; 15726: } 15726: const Comparator* ucmp = GetInternalKeyComparator().user_comparator(); 15726: Slice udt = ExtractTimestampFromUserKey(user_key, ts_sz_); 15726: if (newest_udt_.empty() || ucmp->CompareTimestamp(udt, newest_udt_) > 0) { 15726: newest_udt_ = udt; 15726: } 15726: } 15726: 15726: const Slice& MemTable::GetNewestUDT() const { 15726: 15726: 15726: 15726: # 1678 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: (static_cast ( 15726: # 1678 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ts_sz_ > 0 && !persist_user_defined_timestamps_ 15726: # 1678 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: ) ? void (0) : __assert_fail ( 15726: # 1678 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: "ts_sz_ > 0 && !persist_user_defined_timestamps_" 15726: # 1678 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 3 4 15726: , __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)) 15726: # 1678 "/build/reproducible-path/rocksdb-9.3.1/db/memtable.cc" 15726: ; 15726: return newest_udt_; 15726: } 15726: 15726: } === END GCC DUMP === make[3]: *** [CMakeFiles/rocksdb-shared.dir/build.make:1115: CMakeFiles/rocksdb-shared.dir/db/memtable.cc.o] Error 1 make[3]: *** Waiting for unfinished jobs.... make[3]: Leaving directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' make[2]: *** [CMakeFiles/Makefile2:202: CMakeFiles/rocksdb-shared.dir/all] Error 2 make[2]: Leaving directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' make[1]: *** [Makefile:139: all] Error 2 make[1]: Leaving directory '/build/reproducible-path/rocksdb-9.3.1/obj-arm-linux-gnueabihf' dh_auto_build: error: cd obj-arm-linux-gnueabihf && make -j5 "INSTALL=install --strip-program=true" VERBOSE=1 returned exit code 2 make: *** [debian/rules:51: binary] Error 25 dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2 I: copying local configuration E: Failed autobuilding of package I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env I: removing directory /srv/workspace/pbuilder/26094 and its subdirectories Mon Jul 29 11:54:36 UTC 2024 W: No second build log, what happened?